From b68cfb9866c570dbc60ebe1d9342eef6a29febcf Mon Sep 17 00:00:00 2001 From: James Gallagher Date: Mon, 13 Feb 2023 16:40:33 -0700 Subject: [PATCH 01/47] Move HTTP code to new subdir http_dap as convenience lib --- Makefile.am | 45 +- Response.h | 12 +- conf/{ => unused}/ax_check_compile_flag.m4 | 0 conf/{ => unused}/ax_valgrind_check.m4 | 0 conf/{ => unused}/gcov_valgrind.m4 | 0 configure.ac | 37 +- doxy.conf.in | 8 +- html/AISConnect_8cc_source.html | 89 - html/AISConnect_8h_source.html | 87 - html/AISDatabaseParser_8cc_source.html | 84 - html/AISDatabaseParser_8h_source.html | 91 - html/AISExceptions_8h_source.html | 85 - html/AISMerge_8cc_source.html | 94 - html/AISMerge_8h_source.html | 90 - html/AISResources_8cc_source.html | 89 - html/AISResources_8h_source.html | 89 - html/AlarmHandler_8h_source.html | 85 - html/Ancillary_8cc_source.html | 86 - html/Ancillary_8h_source.html | 85 - html/Array_8cc_source.html | 180 - html/Array_8h_source.html | 134 - html/AttrTable_8cc_source.html | 127 - html/AttrTable_8h_source.html | 119 - html/BaseTypeFactory_8cc_source.html | 97 - html/BaseTypeFactory_8h_source.html | 99 - html/BaseType_8cc_source.html | 170 - html/BaseType_8h_source.html | 105 - html/Byte_8cc_source.html | 128 - html/Byte_8h_source.html | 106 - html/Clause_8cc_source.html | 89 - html/Clause_8h_source.html | 88 - html/Connect_8cc_source.html | 126 - html/Connect_8h_source.html | 106 - html/ConstraintEvaluator_8cc_source.html | 108 - html/ConstraintEvaluator_8h_source.html | 99 - html/Constructor_8cc_source.html | 166 - html/Constructor_8h_source.html | 131 - html/D4AsyncUtil_8cc_source.html | 90 - html/D4AsyncUtil_8h_source.html | 88 - html/D4AttributeType_8h_source.html | 79 - html/D4Attributes_8cc_source.html | 106 - html/D4Attributes_8h_source.html | 89 - html/D4BaseTypeFactory_8cc_source.html | 105 - html/D4BaseTypeFactory_8h_source.html | 106 - html/D4CEScanner_8h_source.html | 82 - html/D4Connect_8cc_source.html | 108 - html/D4Connect_8h_source.html | 90 - html/D4ConstraintEvaluator_8cc_source.html | 84 - html/D4ConstraintEvaluator_8h_source.html | 85 - html/D4Dimensions_8cc_source.html | 88 - html/D4Dimensions_8h_source.html | 94 - html/D4EnumDefs_8cc_source.html | 85 - html/D4EnumDefs_8h_source.html | 90 - html/D4Enum_8cc_source.html | 142 - html/D4Enum_8h_source.html | 108 - html/D4FilterClause_8cc_source.html | 89 - html/D4FilterClause_8h_source.html | 87 - html/D4FunctionEvaluator_8cc_source.html | 112 - html/D4FunctionEvaluator_8h_source.html | 89 - html/D4FunctionScanner_8h_source.html | 82 - html/D4Function_8h_source.html | 80 - html/D4Group_8cc_source.html | 140 - html/D4Group_8h_source.html | 114 - html/D4Maps_8cc_source.html | 83 - html/D4Maps_8h_source.html | 87 - html/D4Opaque_8cc_source.html | 88 - html/D4Opaque_8h_source.html | 108 - html/D4ParseError_8h_source.html | 83 - html/D4ParserSax2_8cc_source.html | 118 - html/D4ParserSax2_8h_source.html | 98 - html/D4RValue_8cc_source.html | 90 - html/D4RValue_8h_source.html | 86 - html/D4Sequence_8cc_source.html | 118 - html/D4Sequence_8h_source.html | 117 - html/D4StreamMarshaller_8cc_source.html | 101 - html/D4StreamMarshaller_8h_source.html | 99 - html/D4StreamUnMarshaller_8cc_source.html | 87 - html/D4StreamUnMarshaller_8h_source.html | 90 - html/DAPCache3_8cc_source.html | 98 - html/DAPCache3_8h_source.html | 97 - html/DAS_8cc_source.html | 104 - html/DAS_8h_source.html | 96 - html/DDS_8cc_source.html | 173 - html/DDS_8h_source.html | 137 - html/DDXExceptions_8h_source.html | 83 - html/DDXParserSAX2_8cc_source.html | 112 - html/DDXParserSAX2_8h_source.html | 94 - html/DMR_8cc_source.html | 133 - html/DMR_8h_source.html | 105 - html/DODSFilter_8cc_source.html | 117 - html/DODSFilter_8h_source.html | 114 - html/DapIndent_8cc_source.html | 80 - html/DapIndent_8h_source.html | 81 - html/DapObj_8h_source.html | 83 - html/DapXmlNamespaces_8cc_source.html | 79 - html/DapXmlNamespaces_8h_source.html | 88 - html/DataDDS_8cc_source.html | 83 - html/DataDDS_8h_source.html | 89 - html/EncodingType_8h_source.html | 81 - html/Error_8cc_source.html | 93 - html/Error_8h_source.html | 91 - html/EventHandler_8h_source.html | 83 - html/Float32_8cc_source.html | 124 - html/Float32_8h_source.html | 103 - html/Float64_8cc_source.html | 124 - html/Float64_8h_source.html | 103 - html/GNURegex_8cc_source.html | 82 - html/GNURegex_8h_source.html | 84 - html/GSEClause_8cc_source.html | 98 - html/GSEClause_8h_source.html | 84 - html/GeoConstraint_8cc_source.html | 103 - html/GeoConstraint_8h_source.html | 86 - html/GeoGridFunction_8cc_source.html | 96 - html/GeoGridFunction_8h_source.html | 85 - html/GetOpt_8cc_source.html | 79 - html/GetOpt_8h_source.html | 80 - html/GridFunction_8cc_source.html | 96 - html/GridFunction_8h_source.html | 85 - html/GridGeoConstraint_8cc_source.html | 111 - html/GridGeoConstraint_8h_source.html | 86 - html/Grid_8cc_source.html | 155 - html/Grid_8h_source.html | 114 - html/HTTPCacheDisconnectedMode_8h_source.html | 81 - html/HTTPCacheInterruptHandler_8h_source.html | 83 - html/HTTPCacheMacros_8h_source.html | 79 - html/HTTPCacheResponse_8h_source.html | 87 - html/HTTPCacheTable_8cc_source.html | 88 - html/HTTPCacheTable_8h_source.html | 95 - html/HTTPCache_8cc_source.html | 96 - html/HTTPCache_8h_source.html | 110 - html/HTTPConnect_8cc_source.html | 106 - html/HTTPConnect_8h_source.html | 93 - html/HTTPResponse_8h_source.html | 88 - html/Info.plist | 23 - html/Int16_8cc_source.html | 123 - html/Int16_8h_source.html | 102 - html/Int32_8cc_source.html | 124 - html/Int32_8h_source.html | 102 - html/Int64_8cc_source.html | 120 - html/Int64_8h_source.html | 98 - html/Int8_8cc_source.html | 117 - html/Int8_8h_source.html | 98 - html/InternalErr_8cc_source.html | 82 - html/InternalErr_8h_source.html | 83 - html/Keywords2_8cc_source.html | 83 - html/Keywords2_8h_source.html | 82 - html/Makefile | 38 - html/MarshallerThread_8cc_source.html | 88 - html/MarshallerThread_8h_source.html | 84 - html/Marshaller_8h_source.html | 89 - html/Nodes.xml | 22131 ------------ html/ObjectType_8h_source.html | 81 - html/Operators_8h_source.html | 85 - html/PipeResponse_8h_source.html | 85 - html/RCReader_8cc_source.html | 82 - html/RCReader_8h_source.html | 97 - html/RValue_8cc_source.html | 87 - html/RValue_8h_source.html | 85 - html/Resource_8h_source.html | 93 - html/ResponseTooBigErr_8cc_source.html | 80 - html/ResponseTooBigErr_8h_source.html | 82 - html/Response_8h_source.html | 84 - html/Sequence_8cc_source.html | 144 - html/Sequence_8h_source.html | 118 - html/ServerFunction_8cc_source.html | 82 - html/ServerFunction_8h_source.html | 86 - html/ServerFunctionsList_8cc_source.html | 83 - html/ServerFunctionsList_8h_source.html | 87 - .../SignalHandlerRegisteredErr_8h_source.html | 83 - html/SignalHandler_8cc_source.html | 85 - html/SignalHandler_8h_source.html | 85 - html/StdinResponse_8h_source.html | 85 - html/Str_8cc_source.html | 120 - html/Str_8h_source.html | 105 - html/Structure_8cc_source.html | 144 - html/Structure_8h_source.html | 92 - html/Tokens.xml | 29462 ---------------- html/Type_8h_source.html | 82 - html/UInt16_8cc_source.html | 121 - html/UInt16_8h_source.html | 101 - html/UInt32_8cc_source.html | 121 - html/UInt32_8h_source.html | 101 - html/UInt64_8cc_source.html | 119 - html/UInt64_8h_source.html | 98 - html/UnMarshaller_8h_source.html | 84 - html/Url_8cc_source.html | 85 - html/Url_8h_source.html | 86 - html/Vector_8cc_source.html | 150 - html/Vector_8h_source.html | 127 - html/XDRFileMarshaller_8cc_source.html | 87 - html/XDRFileMarshaller_8h_source.html | 84 - html/XDRFileUnMarshaller_8cc_source.html | 82 - html/XDRFileUnMarshaller_8h_source.html | 84 - html/XDRStreamMarshaller_8cc_source.html | 97 - html/XDRStreamMarshaller_8h_source.html | 89 - html/XDRStreamUnMarshaller_8cc_source.html | 83 - html/XDRStreamUnMarshaller_8h_source.html | 85 - html/XDRUtils_8cc_source.html | 82 - html/XDRUtils_8h_source.html | 83 - html/XMLWriter_8cc_source.html | 81 - html/XMLWriter_8h_source.html | 81 - html/annotated.html | 215 - html/annotated_dup.js | 17 - html/arg-nonnull_8h_source.html | 79 - html/bc_s.png | Bin 676 -> 0 bytes html/bdwn.png | Bin 147 -> 0 bytes html/c_09_09defs_8h_source.html | 79 - html/ce__parser_8h_source.html | 83 - html/cgi__util_8h_source.html | 79 - html/chunked__istream_8cc_source.html | 84 - html/chunked__istream_8h_source.html | 88 - html/chunked__ostream_8cc_source.html | 86 - html/chunked__ostream_8h_source.html | 94 - html/chunked__stream_8h_source.html | 79 - html/classCrc32-members.html | 87 - html/classCrc32.html | 232 - html/classCrc32.js | 9 - html/classGetOpt-members.html | 89 - html/classGetOpt.html | 121 - html/classGetOpt.js | 11 - html/classbinary__function.html | 89 - .../classbinary__function__inherit__graph.map | 2 - .../classbinary__function__inherit__graph.md5 | 1 - .../classbinary__function__inherit__graph.png | Bin 8846 -> 0 bytes html/classd4__ceFlexLexer.html | 90 - html/classd4__ceFlexLexer__inherit__graph.map | 3 - html/classd4__ceFlexLexer__inherit__graph.md5 | 1 - html/classd4__ceFlexLexer__inherit__graph.png | Bin 7570 -> 0 bytes html/classd4__functionFlexLexer.html | 90 - ...sd4__functionFlexLexer__inherit__graph.map | 3 - ...sd4__functionFlexLexer__inherit__graph.md5 | 1 - ...sd4__functionFlexLexer__inherit__graph.png | Bin 8238 -> 0 bytes html/classes.html | 138 - html/classfunctions_1_1GSEClause-members.html | 94 - html/classfunctions_1_1GSEClause.html | 358 - html/classfunctions_1_1GSEClause.js | 16 - ...assfunctions_1_1GeoConstraint-members.html | 141 - html/classfunctions_1_1GeoConstraint.html | 880 - html/classfunctions_1_1GeoConstraint.js | 65 - ...tions_1_1GeoConstraint__inherit__graph.map | 3 - ...tions_1_1GeoConstraint__inherit__graph.md5 | 1 - ...tions_1_1GeoConstraint__inherit__graph.png | Bin 66929 -> 0 bytes ...sfunctions_1_1GeoGridFunction-members.html | 112 - html/classfunctions_1_1GeoGridFunction.html | 276 - html/classfunctions_1_1GeoGridFunction.js | 28 - ...ons_1_1GeoGridFunction__inherit__graph.map | 3 - ...ons_1_1GeoGridFunction__inherit__graph.md5 | 1 - ...ons_1_1GeoGridFunction__inherit__graph.png | Bin 24634 -> 0 bytes ...lassfunctions_1_1GridFunction-members.html | 112 - html/classfunctions_1_1GridFunction.html | 276 - html/classfunctions_1_1GridFunction.js | 28 - ...ctions_1_1GridFunction__inherit__graph.map | 3 - ...ctions_1_1GridFunction__inherit__graph.md5 | 1 - ...ctions_1_1GridFunction__inherit__graph.png | Bin 23156 -> 0 bytes ...unctions_1_1GridGeoConstraint-members.html | 143 - html/classfunctions_1_1GridGeoConstraint.html | 830 - html/classfunctions_1_1GridGeoConstraint.js | 65 - ...s_1_1GridGeoConstraint__inherit__graph.map | 3 - ...s_1_1GridGeoConstraint__inherit__graph.md5 | 1 - ...s_1_1GridGeoConstraint__inherit__graph.png | Bin 74947 -> 0 bytes html/classlibdap_1_1AISConnect-members.html | 118 - html/classlibdap_1_1AISConnect.html | 1092 - html/classlibdap_1_1AISConnect.js | 35 - ...sslibdap_1_1AISConnect__inherit__graph.map | 3 - ...sslibdap_1_1AISConnect__inherit__graph.md5 | 1 - ...sslibdap_1_1AISConnect__inherit__graph.png | Bin 29452 -> 0 bytes ...sslibdap_1_1AISDatabaseParser-members.html | 90 - html/classlibdap_1_1AISDatabaseParser.html | 532 - html/classlibdap_1_1AISDatabaseParser.js | 4 - ...bdap_1_1AISDatabaseReadFailed-members.html | 106 - .../classlibdap_1_1AISDatabaseReadFailed.html | 453 - html/classlibdap_1_1AISDatabaseReadFailed.js | 22 - ...1AISDatabaseReadFailed__inherit__graph.map | 4 - ...1AISDatabaseReadFailed__inherit__graph.md5 | 1 - ...1AISDatabaseReadFailed__inherit__graph.png | Bin 23796 -> 0 bytes ...dap_1_1AISDatabaseWriteFailed-members.html | 106 - ...classlibdap_1_1AISDatabaseWriteFailed.html | 453 - html/classlibdap_1_1AISDatabaseWriteFailed.js | 22 - ...AISDatabaseWriteFailed__inherit__graph.map | 4 - ...AISDatabaseWriteFailed__inherit__graph.md5 | 1 - ...AISDatabaseWriteFailed__inherit__graph.png | Bin 23708 -> 0 bytes html/classlibdap_1_1AISMerge-members.html | 86 - html/classlibdap_1_1AISMerge.html | 274 - html/classlibdap_1_1AISMerge.js | 8 - html/classlibdap_1_1AISResources-members.html | 94 - html/classlibdap_1_1AISResources.html | 577 - html/classlibdap_1_1AISResources.js | 16 - html/classlibdap_1_1AlarmHandler-members.html | 87 - html/classlibdap_1_1AlarmHandler.html | 190 - html/classlibdap_1_1AlarmHandler.js | 8 - ...libdap_1_1AlarmHandler__inherit__graph.map | 3 - ...libdap_1_1AlarmHandler__inherit__graph.md5 | 1 - ...libdap_1_1AlarmHandler__inherit__graph.png | Bin 11912 -> 0 bytes html/classlibdap_1_1Ancillary-members.html | 85 - html/classlibdap_1_1Ancillary.html | 230 - html/classlibdap_1_1Array-members.html | 261 - html/classlibdap_1_1Array.html | 4920 --- html/classlibdap_1_1Array.js | 173 - html/classlibdap_1_1Array__inherit__graph.map | 5 - html/classlibdap_1_1Array__inherit__graph.md5 | 1 - html/classlibdap_1_1Array__inherit__graph.png | Bin 106269 -> 0 bytes html/classlibdap_1_1AttrTable-members.html | 140 - html/classlibdap_1_1AttrTable.html | 2099 -- html/classlibdap_1_1AttrTable.js | 62 - ...asslibdap_1_1AttrTable__inherit__graph.map | 3 - ...asslibdap_1_1AttrTable__inherit__graph.md5 | 1 - ...asslibdap_1_1AttrTable__inherit__graph.png | Bin 56663 -> 0 bytes html/classlibdap_1_1BaseType-members.html | 154 - html/classlibdap_1_1BaseType.html | 3007 -- html/classlibdap_1_1BaseType.js | 75 - ...lasslibdap_1_1BaseTypeFactory-members.html | 98 - html/classlibdap_1_1BaseTypeFactory.html | 231 - html/classlibdap_1_1BaseTypeFactory.js | 20 - ...dap_1_1BaseTypeFactory__inherit__graph.map | 3 - ...dap_1_1BaseTypeFactory__inherit__graph.md5 | 1 - ...dap_1_1BaseTypeFactory__inherit__graph.png | Bin 30194 -> 0 bytes ...lasslibdap_1_1BaseType__inherit__graph.map | 25 - ...lasslibdap_1_1BaseType__inherit__graph.md5 | 1 - ...lasslibdap_1_1BaseType__inherit__graph.png | Bin 593479 -> 0 bytes html/classlibdap_1_1Byte-members.html | 162 - html/classlibdap_1_1Byte.html | 2929 -- html/classlibdap_1_1Byte.js | 78 - html/classlibdap_1_1Byte__inherit__graph.map | 4 - html/classlibdap_1_1Byte__inherit__graph.md5 | 1 - html/classlibdap_1_1Byte__inherit__graph.png | Bin 62345 -> 0 bytes html/classlibdap_1_1ChildLocker-members.html | 83 - html/classlibdap_1_1ChildLocker.html | 138 - html/classlibdap_1_1ChildLocker.js | 5 - html/classlibdap_1_1Connect-members.html | 113 - html/classlibdap_1_1Connect.html | 1001 - html/classlibdap_1_1Connect.js | 35 - ...classlibdap_1_1Connect__inherit__graph.map | 3 - ...classlibdap_1_1Connect__inherit__graph.md5 | 1 - ...classlibdap_1_1Connect__inherit__graph.png | Bin 28838 -> 0 bytes ...libdap_1_1ConstraintEvaluator-members.html | 106 - html/classlibdap_1_1ConstraintEvaluator.html | 725 - html/classlibdap_1_1ConstraintEvaluator.js | 28 - html/classlibdap_1_1Constructor-members.html | 176 - html/classlibdap_1_1Constructor.html | 3208 -- html/classlibdap_1_1Constructor.js | 91 - ...slibdap_1_1Constructor__inherit__graph.map | 9 - ...slibdap_1_1Constructor__inherit__graph.md5 | 1 - ...slibdap_1_1Constructor__inherit__graph.png | Bin 213953 -> 0 bytes html/classlibdap_1_1D4AsyncUtil-members.html | 95 - html/classlibdap_1_1D4AsyncUtil.html | 415 - html/classlibdap_1_1D4AsyncUtil.js | 16 - html/classlibdap_1_1D4Attribute-members.html | 102 - html/classlibdap_1_1D4Attribute.html | 200 - html/classlibdap_1_1D4Attribute.js | 23 - ...slibdap_1_1D4Attribute__inherit__graph.map | 3 - ...slibdap_1_1D4Attribute__inherit__graph.md5 | 1 - ...slibdap_1_1D4Attribute__inherit__graph.png | Bin 15690 -> 0 bytes html/classlibdap_1_1D4Attributes-members.html | 99 - html/classlibdap_1_1D4Attributes.html | 329 - html/classlibdap_1_1D4Attributes.js | 20 - ...libdap_1_1D4Attributes__inherit__graph.map | 3 - ...libdap_1_1D4Attributes__inherit__graph.md5 | 1 - ...libdap_1_1D4Attributes__inherit__graph.png | Bin 21599 -> 0 bytes ...sslibdap_1_1D4BaseTypeFactory-members.html | 110 - html/classlibdap_1_1D4BaseTypeFactory.html | 330 - html/classlibdap_1_1D4BaseTypeFactory.js | 30 - ...p_1_1D4BaseTypeFactory__inherit__graph.map | 3 - ...p_1_1D4BaseTypeFactory__inherit__graph.md5 | 1 - ...p_1_1D4BaseTypeFactory__inherit__graph.png | Bin 30297 -> 0 bytes html/classlibdap_1_1D4CEScanner-members.html | 83 - html/classlibdap_1_1D4CEScanner.html | 106 - html/classlibdap_1_1D4CEScanner.js | 5 - ...slibdap_1_1D4CEScanner__inherit__graph.map | 3 - ...slibdap_1_1D4CEScanner__inherit__graph.md5 | 1 - ...slibdap_1_1D4CEScanner__inherit__graph.png | Bin 7707 -> 0 bytes html/classlibdap_1_1D4Connect-members.html | 103 - html/classlibdap_1_1D4Connect.html | 384 - html/classlibdap_1_1D4Connect.js | 25 - ...bdap_1_1D4ConstraintEvaluator-members.html | 95 - .../classlibdap_1_1D4ConstraintEvaluator.html | 137 - html/classlibdap_1_1D4ConstraintEvaluator.js | 17 - html/classlibdap_1_1D4Dimension-members.html | 99 - html/classlibdap_1_1D4Dimension.html | 247 - html/classlibdap_1_1D4Dimension.js | 21 - html/classlibdap_1_1D4Dimensions-members.html | 100 - html/classlibdap_1_1D4Dimensions.html | 418 - html/classlibdap_1_1D4Dimensions.js | 22 - html/classlibdap_1_1D4Enum-members.html | 170 - html/classlibdap_1_1D4Enum.html | 2973 -- html/classlibdap_1_1D4Enum.js | 86 - html/classlibdap_1_1D4EnumDef-members.html | 101 - html/classlibdap_1_1D4EnumDef.html | 173 - html/classlibdap_1_1D4EnumDef.js | 23 - html/classlibdap_1_1D4EnumDefs-members.html | 97 - html/classlibdap_1_1D4EnumDefs.html | 283 - html/classlibdap_1_1D4EnumDefs.js | 19 - .../classlibdap_1_1D4Enum__inherit__graph.map | 4 - .../classlibdap_1_1D4Enum__inherit__graph.md5 | 1 - .../classlibdap_1_1D4Enum__inherit__graph.png | Bin 62880 -> 0 bytes ...classlibdap_1_1D4FilterClause-members.html | 99 - html/classlibdap_1_1D4FilterClause.html | 254 - html/classlibdap_1_1D4FilterClause.js | 22 - ...slibdap_1_1D4FilterClauseList-members.html | 95 - html/classlibdap_1_1D4FilterClauseList.html | 194 - html/classlibdap_1_1D4FilterClauseList.js | 17 - ...libdap_1_1D4FunctionEvaluator-members.html | 102 - html/classlibdap_1_1D4FunctionEvaluator.html | 253 - html/classlibdap_1_1D4FunctionEvaluator.js | 24 - ...sslibdap_1_1D4FunctionScanner-members.html | 83 - html/classlibdap_1_1D4FunctionScanner.html | 106 - html/classlibdap_1_1D4FunctionScanner.js | 5 - ...p_1_1D4FunctionScanner__inherit__graph.map | 3 - ...p_1_1D4FunctionScanner__inherit__graph.md5 | 1 - ...p_1_1D4FunctionScanner__inherit__graph.png | Bin 8937 -> 0 bytes html/classlibdap_1_1D4Group-members.html | 199 - html/classlibdap_1_1D4Group.html | 3511 -- html/classlibdap_1_1D4Group.js | 109 - ...classlibdap_1_1D4Group__inherit__graph.map | 5 - ...classlibdap_1_1D4Group__inherit__graph.md5 | 1 - ...classlibdap_1_1D4Group__inherit__graph.png | Bin 89866 -> 0 bytes html/classlibdap_1_1D4Map-members.html | 91 - html/classlibdap_1_1D4Map.html | 152 - html/classlibdap_1_1D4Map.js | 13 - html/classlibdap_1_1D4Maps-members.html | 96 - html/classlibdap_1_1D4Maps.html | 168 - html/classlibdap_1_1D4Maps.js | 18 - html/classlibdap_1_1D4Opaque-members.html | 163 - html/classlibdap_1_1D4Opaque.html | 2930 -- html/classlibdap_1_1D4Opaque.js | 79 - ...lasslibdap_1_1D4Opaque__inherit__graph.map | 4 - ...lasslibdap_1_1D4Opaque__inherit__graph.md5 | 1 - ...lasslibdap_1_1D4Opaque__inherit__graph.png | Bin 63428 -> 0 bytes html/classlibdap_1_1D4ParseError-members.html | 106 - html/classlibdap_1_1D4ParseError.html | 453 - html/classlibdap_1_1D4ParseError.js | 22 - ...libdap_1_1D4ParseError__inherit__graph.map | 4 - ...libdap_1_1D4ParseError__inherit__graph.md5 | 1 - ...libdap_1_1D4ParseError__inherit__graph.png | Bin 21060 -> 0 bytes html/classlibdap_1_1D4ParserSax2-members.html | 98 - html/classlibdap_1_1D4ParserSax2.html | 606 - html/classlibdap_1_1D4ParserSax2.js | 10 - html/classlibdap_1_1D4RValue-members.html | 110 - html/classlibdap_1_1D4RValue.html | 278 - html/classlibdap_1_1D4RValue.js | 33 - html/classlibdap_1_1D4RValueList-members.html | 92 - html/classlibdap_1_1D4RValueList.html | 124 - html/classlibdap_1_1D4RValueList.js | 14 - html/classlibdap_1_1D4Sequence-members.html | 196 - html/classlibdap_1_1D4Sequence.html | 3688 -- html/classlibdap_1_1D4Sequence.js | 106 - ...sslibdap_1_1D4Sequence__inherit__graph.map | 5 - ...sslibdap_1_1D4Sequence__inherit__graph.md5 | 1 - ...sslibdap_1_1D4Sequence__inherit__graph.png | Bin 92144 -> 0 bytes ...slibdap_1_1D4StreamMarshaller-members.html | 114 - html/classlibdap_1_1D4StreamMarshaller.html | 715 - html/classlibdap_1_1D4StreamMarshaller.js | 35 - ..._1_1D4StreamMarshaller__inherit__graph.map | 4 - ..._1_1D4StreamMarshaller__inherit__graph.md5 | 1 - ..._1_1D4StreamMarshaller__inherit__graph.png | Bin 31351 -> 0 bytes ...ibdap_1_1D4StreamUnMarshaller-members.html | 114 - html/classlibdap_1_1D4StreamUnMarshaller.html | 412 - html/classlibdap_1_1D4StreamUnMarshaller.js | 34 - ..._1D4StreamUnMarshaller__inherit__graph.map | 4 - ..._1D4StreamUnMarshaller__inherit__graph.md5 | 1 - ..._1D4StreamUnMarshaller__inherit__graph.png | Bin 36036 -> 0 bytes html/classlibdap_1_1DAPCache3-members.html | 100 - html/classlibdap_1_1DAPCache3.html | 749 - html/classlibdap_1_1DAPCache3.js | 19 - ...asslibdap_1_1DAPCache3__inherit__graph.map | 3 - ...asslibdap_1_1DAPCache3__inherit__graph.md5 | 1 - ...asslibdap_1_1DAPCache3__inherit__graph.png | Bin 25284 -> 0 bytes html/classlibdap_1_1DAS-members.html | 104 - html/classlibdap_1_1DAS.html | 779 - html/classlibdap_1_1DAS.js | 25 - html/classlibdap_1_1DAS__inherit__graph.map | 3 - html/classlibdap_1_1DAS__inherit__graph.md5 | 1 - html/classlibdap_1_1DAS__inherit__graph.png | Bin 18447 -> 0 bytes html/classlibdap_1_1DDS-members.html | 159 - html/classlibdap_1_1DDS.html | 2147 -- html/classlibdap_1_1DDS.js | 80 - html/classlibdap_1_1DDS__inherit__graph.map | 4 - html/classlibdap_1_1DDS__inherit__graph.md5 | 1 - html/classlibdap_1_1DDS__inherit__graph.png | Bin 49037 -> 0 bytes ...classlibdap_1_1DDXParseFailed-members.html | 106 - html/classlibdap_1_1DDXParseFailed.html | 453 - html/classlibdap_1_1DDXParseFailed.js | 22 - ...bdap_1_1DDXParseFailed__inherit__graph.map | 4 - ...bdap_1_1DDXParseFailed__inherit__graph.md5 | 1 - ...bdap_1_1DDXParseFailed__inherit__graph.png | Bin 21510 -> 0 bytes html/classlibdap_1_1DDXParser-members.html | 95 - html/classlibdap_1_1DDXParser.html | 594 - html/classlibdap_1_1DDXParser.js | 8 - html/classlibdap_1_1DMR-members.html | 115 - html/classlibdap_1_1DMR.html | 871 - html/classlibdap_1_1DMR.js | 36 - html/classlibdap_1_1DMR__inherit__graph.map | 3 - html/classlibdap_1_1DMR__inherit__graph.md5 | 1 - html/classlibdap_1_1DMR__inherit__graph.png | Bin 23647 -> 0 bytes html/classlibdap_1_1DODSFilter-members.html | 154 - html/classlibdap_1_1DODSFilter.html | 1873 - html/classlibdap_1_1DODSFilter.js | 77 - html/classlibdap_1_1DapIndent-members.html | 87 - html/classlibdap_1_1DapIndent.html | 117 - html/classlibdap_1_1DapObj-members.html | 83 - html/classlibdap_1_1DapObj.html | 186 - html/classlibdap_1_1DapObj.js | 5 - .../classlibdap_1_1DapObj__inherit__graph.map | 41 - .../classlibdap_1_1DapObj__inherit__graph.md5 | 1 - .../classlibdap_1_1DapObj__inherit__graph.png | Bin 1019109 -> 0 bytes ...lasslibdap_1_1DapXmlNamspaces-members.html | 88 - html/classlibdap_1_1DapXmlNamspaces.html | 277 - html/classlibdap_1_1DapXmlNamspaces.js | 4 - html/classlibdap_1_1DataDDS-members.html | 168 - html/classlibdap_1_1DataDDS.html | 2548 -- html/classlibdap_1_1DataDDS.js | 84 - ...classlibdap_1_1DataDDS__inherit__graph.map | 4 - ...classlibdap_1_1DataDDS__inherit__graph.md5 | 1 - ...classlibdap_1_1DataDDS__inherit__graph.png | Bin 54990 -> 0 bytes html/classlibdap_1_1Error-members.html | 104 - html/classlibdap_1_1Error.html | 528 - html/classlibdap_1_1Error.js | 26 - html/classlibdap_1_1Error__inherit__graph.map | 11 - html/classlibdap_1_1Error__inherit__graph.md5 | 1 - html/classlibdap_1_1Error__inherit__graph.png | Bin 128802 -> 0 bytes html/classlibdap_1_1EventHandler-members.html | 83 - html/classlibdap_1_1EventHandler.html | 172 - html/classlibdap_1_1EventHandler.js | 5 - ...libdap_1_1EventHandler__inherit__graph.map | 4 - ...libdap_1_1EventHandler__inherit__graph.md5 | 1 - ...libdap_1_1EventHandler__inherit__graph.png | Bin 26291 -> 0 bytes html/classlibdap_1_1Float32-members.html | 162 - html/classlibdap_1_1Float32.html | 2953 -- html/classlibdap_1_1Float32.js | 78 - ...classlibdap_1_1Float32__inherit__graph.map | 4 - ...classlibdap_1_1Float32__inherit__graph.md5 | 1 - ...classlibdap_1_1Float32__inherit__graph.png | Bin 62666 -> 0 bytes html/classlibdap_1_1Float64-members.html | 162 - html/classlibdap_1_1Float64.html | 2965 -- html/classlibdap_1_1Float64.js | 78 - ...classlibdap_1_1Float64__inherit__graph.map | 4 - ...classlibdap_1_1Float64__inherit__graph.md5 | 1 - ...classlibdap_1_1Float64__inherit__graph.png | Bin 62631 -> 0 bytes html/classlibdap_1_1Grid-members.html | 199 - html/classlibdap_1_1Grid.html | 3731 -- html/classlibdap_1_1Grid.js | 109 - html/classlibdap_1_1Grid__inherit__graph.map | 5 - html/classlibdap_1_1Grid__inherit__graph.md5 | 1 - html/classlibdap_1_1Grid__inherit__graph.png | Bin 90684 -> 0 bytes html/classlibdap_1_1HTTPCache-members.html | 114 - html/classlibdap_1_1HTTPCache.html | 1055 - html/classlibdap_1_1HTTPCache.js | 35 - ..._1_1HTTPCacheInterruptHandler-members.html | 85 - ...sslibdap_1_1HTTPCacheInterruptHandler.html | 150 - ...lasslibdap_1_1HTTPCacheInterruptHandler.js | 6 - ...PCacheInterruptHandler__inherit__graph.map | 3 - ...PCacheInterruptHandler__inherit__graph.md5 | 1 - ...PCacheInterruptHandler__inherit__graph.png | Bin 15079 -> 0 bytes ...sslibdap_1_1HTTPCacheResponse-members.html | 116 - html/classlibdap_1_1HTTPCacheResponse.html | 343 - html/classlibdap_1_1HTTPCacheResponse.js | 26 - ...p_1_1HTTPCacheResponse__inherit__graph.map | 4 - ...p_1_1HTTPCacheResponse__inherit__graph.md5 | 1 - ...p_1_1HTTPCacheResponse__inherit__graph.png | Bin 73634 -> 0 bytes ...classlibdap_1_1HTTPCacheTable-members.html | 115 - html/classlibdap_1_1HTTPCacheTable.html | 616 - html/classlibdap_1_1HTTPCacheTable.js | 38 - html/classlibdap_1_1HTTPConnect-members.html | 98 - html/classlibdap_1_1HTTPConnect.html | 430 - html/classlibdap_1_1HTTPConnect.js | 20 - html/classlibdap_1_1HTTPResponse-members.html | 110 - html/classlibdap_1_1HTTPResponse.html | 359 - html/classlibdap_1_1HTTPResponse.js | 26 - ...libdap_1_1HTTPResponse__inherit__graph.map | 4 - ...libdap_1_1HTTPResponse__inherit__graph.md5 | 1 - ...libdap_1_1HTTPResponse__inherit__graph.png | Bin 74105 -> 0 bytes html/classlibdap_1_1Int16-members.html | 162 - html/classlibdap_1_1Int16.html | 2924 -- html/classlibdap_1_1Int16.js | 78 - html/classlibdap_1_1Int16__inherit__graph.map | 4 - html/classlibdap_1_1Int16__inherit__graph.md5 | 1 - html/classlibdap_1_1Int16__inherit__graph.png | Bin 62190 -> 0 bytes html/classlibdap_1_1Int32-members.html | 162 - html/classlibdap_1_1Int32.html | 2925 -- html/classlibdap_1_1Int32.js | 78 - html/classlibdap_1_1Int32__inherit__graph.map | 4 - html/classlibdap_1_1Int32__inherit__graph.md5 | 1 - html/classlibdap_1_1Int32__inherit__graph.png | Bin 62346 -> 0 bytes html/classlibdap_1_1Int64-members.html | 159 - html/classlibdap_1_1Int64.html | 2746 -- html/classlibdap_1_1Int64.js | 75 - html/classlibdap_1_1Int64__inherit__graph.map | 4 - html/classlibdap_1_1Int64__inherit__graph.md5 | 1 - html/classlibdap_1_1Int64__inherit__graph.png | Bin 62417 -> 0 bytes html/classlibdap_1_1Int8-members.html | 159 - html/classlibdap_1_1Int8.html | 2752 -- html/classlibdap_1_1Int8.js | 75 - html/classlibdap_1_1Int8__inherit__graph.map | 4 - html/classlibdap_1_1Int8__inherit__graph.md5 | 1 - html/classlibdap_1_1Int8__inherit__graph.png | Bin 62081 -> 0 bytes html/classlibdap_1_1InternalErr-members.html | 111 - html/classlibdap_1_1InternalErr.html | 502 - html/classlibdap_1_1InternalErr.js | 27 - ...slibdap_1_1InternalErr__inherit__graph.map | 4 - ...slibdap_1_1InternalErr__inherit__graph.md5 | 1 - ...slibdap_1_1InternalErr__inherit__graph.png | Bin 24995 -> 0 bytes html/classlibdap_1_1Keywords-members.html | 91 - html/classlibdap_1_1Keywords.html | 294 - html/classlibdap_1_1Keywords.js | 13 - html/classlibdap_1_1Locker-members.html | 83 - html/classlibdap_1_1Locker.html | 167 - html/classlibdap_1_1Locker.js | 5 - html/classlibdap_1_1Marshaller-members.html | 99 - html/classlibdap_1_1Marshaller.html | 326 - html/classlibdap_1_1Marshaller.js | 20 - ...asslibdap_1_1MarshallerThread-members.html | 91 - html/classlibdap_1_1MarshallerThread.html | 270 - html/classlibdap_1_1MarshallerThread.js | 11 - ...sslibdap_1_1Marshaller__inherit__graph.map | 6 - ...sslibdap_1_1Marshaller__inherit__graph.md5 | 1 - ...sslibdap_1_1Marshaller__inherit__graph.png | Bin 60677 -> 0 bytes ...bdap_1_1NoSuchPrimaryResource-members.html | 105 - .../classlibdap_1_1NoSuchPrimaryResource.html | 450 - html/classlibdap_1_1NoSuchPrimaryResource.js | 21 - ...1NoSuchPrimaryResource__inherit__graph.map | 4 - ...1NoSuchPrimaryResource__inherit__graph.md5 | 1 - ...1NoSuchPrimaryResource__inherit__graph.png | Bin 23744 -> 0 bytes html/classlibdap_1_1PipeResponse-members.html | 101 - html/classlibdap_1_1PipeResponse.html | 214 - html/classlibdap_1_1PipeResponse.js | 17 - ...libdap_1_1PipeResponse__inherit__graph.map | 3 - ...libdap_1_1PipeResponse__inherit__graph.md5 | 1 - ...libdap_1_1PipeResponse__inherit__graph.png | Bin 44362 -> 0 bytes html/classlibdap_1_1RCReader-members.html | 128 - html/classlibdap_1_1RCReader.html | 756 - html/classlibdap_1_1RCReader.js | 49 - html/classlibdap_1_1Regex-members.html | 86 - html/classlibdap_1_1Regex.html | 270 - html/classlibdap_1_1Regex.js | 8 - html/classlibdap_1_1Resource-members.html | 95 - html/classlibdap_1_1Resource.html | 501 - html/classlibdap_1_1Resource.js | 18 - html/classlibdap_1_1Response-members.html | 99 - html/classlibdap_1_1Response.html | 236 - html/classlibdap_1_1Response.js | 21 - ...sslibdap_1_1ResponseTooBigErr-members.html | 106 - html/classlibdap_1_1ResponseTooBigErr.html | 455 - html/classlibdap_1_1ResponseTooBigErr.js | 22 - ...p_1_1ResponseTooBigErr__inherit__graph.map | 4 - ...p_1_1ResponseTooBigErr__inherit__graph.md5 | 1 - ...p_1_1ResponseTooBigErr__inherit__graph.png | Bin 22465 -> 0 bytes ...lasslibdap_1_1Response__inherit__graph.map | 6 - ...lasslibdap_1_1Response__inherit__graph.md5 | 1 - ...lasslibdap_1_1Response__inherit__graph.png | Bin 109349 -> 0 bytes html/classlibdap_1_1Sequence-members.html | 217 - html/classlibdap_1_1Sequence.html | 4056 --- html/classlibdap_1_1Sequence.js | 127 - ...lasslibdap_1_1Sequence__inherit__graph.map | 5 - ...lasslibdap_1_1Sequence__inherit__graph.md5 | 1 - ...lasslibdap_1_1Sequence__inherit__graph.png | Bin 102202 -> 0 bytes ...classlibdap_1_1ServerFunction-members.html | 110 - html/classlibdap_1_1ServerFunction.html | 290 - html/classlibdap_1_1ServerFunction.js | 32 - ...bdap_1_1ServerFunction__inherit__graph.map | 4 - ...bdap_1_1ServerFunction__inherit__graph.md5 | 1 - ...bdap_1_1ServerFunction__inherit__graph.png | Bin 30053 -> 0 bytes ...libdap_1_1ServerFunctionsList-members.html | 95 - html/classlibdap_1_1ServerFunctionsList.html | 439 - html/classlibdap_1_1ServerFunctionsList.js | 16 - .../classlibdap_1_1SignalHandler-members.html | 87 - html/classlibdap_1_1SignalHandler.html | 222 - html/classlibdap_1_1SignalHandler.js | 8 - ...1_1SignalHandlerRegisteredErr-members.html | 106 - ...slibdap_1_1SignalHandlerRegisteredErr.html | 454 - ...asslibdap_1_1SignalHandlerRegisteredErr.js | 22 - ...alHandlerRegisteredErr__inherit__graph.map | 4 - ...alHandlerRegisteredErr__inherit__graph.md5 | 1 - ...alHandlerRegisteredErr__inherit__graph.png | Bin 24171 -> 0 bytes .../classlibdap_1_1StdinResponse-members.html | 102 - html/classlibdap_1_1StdinResponse.html | 257 - html/classlibdap_1_1StdinResponse.js | 18 - ...ibdap_1_1StdinResponse__inherit__graph.map | 3 - ...ibdap_1_1StdinResponse__inherit__graph.md5 | 1 - ...ibdap_1_1StdinResponse__inherit__graph.png | Bin 46438 -> 0 bytes html/classlibdap_1_1Str-members.html | 162 - html/classlibdap_1_1Str.html | 2991 -- html/classlibdap_1_1Str.js | 78 - html/classlibdap_1_1Str__inherit__graph.map | 5 - html/classlibdap_1_1Str__inherit__graph.md5 | 1 - html/classlibdap_1_1Str__inherit__graph.png | Bin 68244 -> 0 bytes html/classlibdap_1_1Structure-members.html | 182 - html/classlibdap_1_1Structure.html | 3295 -- html/classlibdap_1_1Structure.js | 92 - ...asslibdap_1_1Structure__inherit__graph.map | 5 - ...asslibdap_1_1Structure__inherit__graph.md5 | 1 - ...asslibdap_1_1Structure__inherit__graph.png | Bin 89178 -> 0 bytes html/classlibdap_1_1UInt16-members.html | 162 - html/classlibdap_1_1UInt16.html | 2936 -- html/classlibdap_1_1UInt16.js | 78 - .../classlibdap_1_1UInt16__inherit__graph.map | 4 - .../classlibdap_1_1UInt16__inherit__graph.md5 | 1 - .../classlibdap_1_1UInt16__inherit__graph.png | Bin 63061 -> 0 bytes html/classlibdap_1_1UInt32-members.html | 162 - html/classlibdap_1_1UInt32.html | 2937 -- html/classlibdap_1_1UInt32.js | 78 - .../classlibdap_1_1UInt32__inherit__graph.map | 4 - .../classlibdap_1_1UInt32__inherit__graph.md5 | 1 - .../classlibdap_1_1UInt32__inherit__graph.png | Bin 63111 -> 0 bytes html/classlibdap_1_1UInt64-members.html | 159 - html/classlibdap_1_1UInt64.html | 2766 -- html/classlibdap_1_1UInt64.js | 75 - .../classlibdap_1_1UInt64__inherit__graph.map | 4 - .../classlibdap_1_1UInt64__inherit__graph.md5 | 1 - .../classlibdap_1_1UInt64__inherit__graph.png | Bin 63658 -> 0 bytes html/classlibdap_1_1UnMarshaller-members.html | 96 - html/classlibdap_1_1UnMarshaller.html | 191 - html/classlibdap_1_1UnMarshaller.js | 17 - ...libdap_1_1UnMarshaller__inherit__graph.map | 6 - ...libdap_1_1UnMarshaller__inherit__graph.md5 | 1 - ...libdap_1_1UnMarshaller__inherit__graph.png | Bin 74104 -> 0 bytes html/classlibdap_1_1Url-members.html | 167 - html/classlibdap_1_1Url.html | 2989 -- html/classlibdap_1_1Url.js | 78 - html/classlibdap_1_1Url__inherit__graph.map | 5 - html/classlibdap_1_1Url__inherit__graph.md5 | 1 - html/classlibdap_1_1Url__inherit__graph.png | Bin 68952 -> 0 bytes html/classlibdap_1_1Vector-members.html | 222 - html/classlibdap_1_1Vector.html | 3862 -- html/classlibdap_1_1Vector.js | 138 - .../classlibdap_1_1Vector__inherit__graph.map | 5 - .../classlibdap_1_1Vector__inherit__graph.md5 | 1 - .../classlibdap_1_1Vector__inherit__graph.png | Bin 99392 -> 0 bytes ...sslibdap_1_1XDRFileMarshaller-members.html | 101 - html/classlibdap_1_1XDRFileMarshaller.html | 328 - html/classlibdap_1_1XDRFileMarshaller.js | 22 - ...p_1_1XDRFileMarshaller__inherit__graph.map | 4 - ...p_1_1XDRFileMarshaller__inherit__graph.md5 | 1 - ...p_1_1XDRFileMarshaller__inherit__graph.png | Bin 29184 -> 0 bytes ...libdap_1_1XDRFileUnMarshaller-members.html | 98 - html/classlibdap_1_1XDRFileUnMarshaller.html | 193 - html/classlibdap_1_1XDRFileUnMarshaller.js | 19 - ...1_1XDRFileUnMarshaller__inherit__graph.map | 4 - ...1_1XDRFileUnMarshaller__inherit__graph.md5 | 1 - ...1_1XDRFileUnMarshaller__inherit__graph.png | Bin 33551 -> 0 bytes ...libdap_1_1XDRStreamMarshaller-members.html | 102 - html/classlibdap_1_1XDRStreamMarshaller.html | 373 - html/classlibdap_1_1XDRStreamMarshaller.js | 23 - ...1_1XDRStreamMarshaller__inherit__graph.map | 4 - ...1_1XDRStreamMarshaller__inherit__graph.md5 | 1 - ...1_1XDRStreamMarshaller__inherit__graph.png | Bin 30348 -> 0 bytes ...bdap_1_1XDRStreamUnMarshaller-members.html | 99 - .../classlibdap_1_1XDRStreamUnMarshaller.html | 196 - html/classlibdap_1_1XDRStreamUnMarshaller.js | 20 - ...1XDRStreamUnMarshaller__inherit__graph.map | 4 - ...1XDRStreamUnMarshaller__inherit__graph.md5 | 1 - ...1XDRStreamUnMarshaller__inherit__graph.png | Bin 34941 -> 0 bytes html/classlibdap_1_1XDRUtils-members.html | 82 - html/classlibdap_1_1XDRUtils.html | 132 - html/classlibdap_1_1XMLWriter-members.html | 86 - html/classlibdap_1_1XMLWriter.html | 105 - html/classlibdap_1_1XMLWriter.js | 8 - ...classlibdap_1_1chunked__inbuf-members.html | 90 - html/classlibdap_1_1chunked__inbuf.html | 280 - html/classlibdap_1_1chunked__inbuf.js | 12 - ...bdap_1_1chunked__inbuf__inherit__graph.map | 2 - ...bdap_1_1chunked__inbuf__inherit__graph.md5 | 1 - ...bdap_1_1chunked__inbuf__inherit__graph.png | Bin 14804 -> 0 bytes ...asslibdap_1_1chunked__istream-members.html | 88 - html/classlibdap_1_1chunked__istream.html | 184 - html/classlibdap_1_1chunked__istream.js | 10 - ...ap_1_1chunked__istream__inherit__graph.map | 6 - ...ap_1_1chunked__istream__inherit__graph.md5 | 1 - ...ap_1_1chunked__istream__inherit__graph.png | Bin 22277 -> 0 bytes ...asslibdap_1_1chunked__ostream-members.html | 86 - html/classlibdap_1_1chunked__ostream.html | 276 - html/classlibdap_1_1chunked__ostream.js | 8 - ...ap_1_1chunked__ostream__inherit__graph.map | 6 - ...ap_1_1chunked__ostream__inherit__graph.md5 | 1 - ...ap_1_1chunked__ostream__inherit__graph.png | Bin 20167 -> 0 bytes ...lasslibdap_1_1chunked__outbuf-members.html | 94 - html/classlibdap_1_1chunked__outbuf.html | 370 - html/classlibdap_1_1chunked__outbuf.js | 16 - ...dap_1_1chunked__outbuf__inherit__graph.map | 2 - ...dap_1_1chunked__outbuf__inherit__graph.md5 | 1 - ...dap_1_1chunked__outbuf__inherit__graph.png | Bin 15136 -> 0 bytes html/classlibdap_1_1fdinbuf-members.html | 89 - html/classlibdap_1_1fdinbuf.html | 234 - html/classlibdap_1_1fdinbuf.js | 9 - ...classlibdap_1_1fdinbuf__inherit__graph.map | 2 - ...classlibdap_1_1fdinbuf__inherit__graph.md5 | 1 - ...classlibdap_1_1fdinbuf__inherit__graph.png | Bin 9716 -> 0 bytes html/classlibdap_1_1fdistream-members.html | 83 - html/classlibdap_1_1fdistream.html | 118 - html/classlibdap_1_1fdistream.js | 5 - ...asslibdap_1_1fdistream__inherit__graph.map | 6 - ...asslibdap_1_1fdistream__inherit__graph.md5 | 1 - ...asslibdap_1_1fdistream__inherit__graph.png | Bin 15464 -> 0 bytes html/classlibdap_1_1fdostream-members.html | 83 - html/classlibdap_1_1fdostream.html | 162 - html/classlibdap_1_1fdostream.js | 5 - ...asslibdap_1_1fdostream__inherit__graph.map | 6 - ...asslibdap_1_1fdostream__inherit__graph.md5 | 1 - ...asslibdap_1_1fdostream__inherit__graph.png | Bin 15621 -> 0 bytes html/classlibdap_1_1fdoutbuf-members.html | 91 - html/classlibdap_1_1fdoutbuf.html | 306 - html/classlibdap_1_1fdoutbuf.js | 12 - ...lasslibdap_1_1fdoutbuf__inherit__graph.map | 2 - ...lasslibdap_1_1fdoutbuf__inherit__graph.md5 | 1 - ...lasslibdap_1_1fdoutbuf__inherit__graph.png | Bin 11562 -> 0 bytes html/classlibdap_1_1fpinbuf-members.html | 89 - html/classlibdap_1_1fpinbuf.html | 235 - html/classlibdap_1_1fpinbuf.js | 9 - ...classlibdap_1_1fpinbuf__inherit__graph.map | 2 - ...classlibdap_1_1fpinbuf__inherit__graph.md5 | 1 - ...classlibdap_1_1fpinbuf__inherit__graph.png | Bin 9711 -> 0 bytes html/classlibdap_1_1fpistream-members.html | 83 - html/classlibdap_1_1fpistream.html | 118 - html/classlibdap_1_1fpistream.js | 5 - ...asslibdap_1_1fpistream__inherit__graph.map | 6 - ...asslibdap_1_1fpistream__inherit__graph.md5 | 1 - ...asslibdap_1_1fpistream__inherit__graph.png | Bin 15386 -> 0 bytes html/classlibdap_1_1rvalue-members.html | 89 - html/classlibdap_1_1rvalue.html | 150 - html/classlibdap_1_1rvalue.js | 11 - html/closed.png | Bin 132 -> 0 bytes html/config_8h_source.html | 79 - html/config__dap_8h_source.html | 79 - html/crc_8h_source.html | 84 - html/debug_8h_source.html | 79 - html/deprecated.html | 230 - .../dir_030199a96d3a4056a0e2bc332dfd6de8.html | 79 - .../dir_2bcd72cd0b092dad44d5d2bb06eea6c2.html | 83 - .../dir_2d5e420d32f68fbdcd72803e1c025222.html | 79 - .../dir_60c1e009daff386049faf4e676bb6db8.html | 79 - .../dir_873b92a1b74e92f35ff36fce7b7e35b8.html | 79 - .../dir_ace0027695ef4a6e4945b7441cbb707a.html | 79 - html/doc.png | Bin 746 -> 0 bytes html/dods-datatypes-config_8h_source.html | 79 - html/dods-datatypes-static_8h_source.html | 80 - html/dods-datatypes_8h_source.html | 80 - html/dods-limits_8h_source.html | 79 - html/doxygen.css | 1596 - html/doxygen.png | Bin 3779 -> 0 bytes html/dynsections.js | 104 - html/error-test_8cc_source.html | 80 - html/escaping_8cc_source.html | 94 - html/escaping_8h_source.html | 90 - html/fdiostream_8cc_source.html | 91 - html/fdiostream_8h_source.html | 93 - html/files.html | 315 - html/files.js | 236 - html/folderclosed.png | Bin 616 -> 0 bytes html/folderopen.png | Bin 597 -> 0 bytes html/functions.html | 210 - html/functions_0x7e.html | 123 - html/functions_b.html | 120 - html/functions_c.html | 212 - html/functions_d.html | 283 - html/functions_dup.js | 25 - html/functions_e.html | 129 - html/functions_enum.html | 88 - html/functions_f.html | 148 - html/functions_func.html | 210 - html/functions_func.js | 25 - html/functions_func_0x7e.html | 123 - html/functions_func_b.html | 120 - html/functions_func_c.html | 209 - html/functions_func_d.html | 271 - html/functions_func_e.html | 129 - html/functions_func_f.html | 148 - html/functions_func_g.html | 414 - html/functions_func_h.html | 98 - html/functions_func_i.html | 174 - html/functions_func_l.html | 98 - html/functions_func_m.html | 117 - html/functions_func_n.html | 95 - html/functions_func_o.html | 105 - html/functions_func_p.html | 253 - html/functions_func_r.html | 208 - html/functions_func_s.html | 356 - html/functions_func_t.html | 136 - html/functions_func_u.html | 116 - html/functions_func_v.html | 149 - html/functions_func_w.html | 135 - html/functions_func_x.html | 91 - html/functions_g.html | 414 - html/functions_h.html | 98 - html/functions_i.html | 174 - html/functions_l.html | 101 - html/functions_m.html | 117 - html/functions_n.html | 99 - html/functions_o.html | 109 - html/functions_p.html | 253 - html/functions_r.html | 212 - html/functions_rela.html | 80 - html/functions_s.html | 368 - html/functions_t.html | 136 - html/functions_type.html | 85 - html/functions_u.html | 119 - html/functions_v.html | 149 - html/functions_vars.html | 100 - html/functions_w.html | 135 - html/functions_x.html | 91 - html/getdap4_8cc_source.html | 104 - html/getdap_8cc_source.html | 111 - html/graph_legend.html | 107 - html/graph_legend.md5 | 1 - html/graph_legend.png | Bin 24222 -> 0 bytes html/grid__utils_8cc_source.html | 104 - html/grid__utils_8h_source.html | 84 - html/group__check.html | 98 - html/group__check__type.html | 167 - html/group__check__type.js | 5 - html/group__get__type.html | 104 - html/group__strict.html | 153 - html/group__strict.js | 5 - html/gse__parser_8h_source.html | 84 - html/hierarchy.html | 223 - html/hierarchy.js | 168 - html/index.html | 127 - html/inherit_graph_0.map | 3 - html/inherit_graph_0.md5 | 1 - html/inherit_graph_0.png | Bin 1393 -> 0 bytes html/inherit_graph_1.map | 3 - html/inherit_graph_1.md5 | 1 - html/inherit_graph_1.png | Bin 851 -> 0 bytes html/inherit_graph_10.map | 3 - html/inherit_graph_10.md5 | 1 - html/inherit_graph_10.png | Bin 1953 -> 0 bytes html/inherit_graph_11.map | 3 - html/inherit_graph_11.md5 | 1 - html/inherit_graph_11.png | Bin 1459 -> 0 bytes html/inherit_graph_12.map | 3 - html/inherit_graph_12.md5 | 1 - html/inherit_graph_12.png | Bin 1979 -> 0 bytes html/inherit_graph_13.map | 3 - html/inherit_graph_13.md5 | 1 - html/inherit_graph_13.png | Bin 2014 -> 0 bytes html/inherit_graph_14.map | 4 - html/inherit_graph_14.md5 | 1 - html/inherit_graph_14.png | Bin 4116 -> 0 bytes html/inherit_graph_15.map | 3 - html/inherit_graph_15.md5 | 1 - html/inherit_graph_15.png | Bin 1838 -> 0 bytes html/inherit_graph_16.map | 3 - html/inherit_graph_16.md5 | 1 - html/inherit_graph_16.png | Bin 1751 -> 0 bytes html/inherit_graph_17.map | 3 - html/inherit_graph_17.md5 | 1 - html/inherit_graph_17.png | Bin 1741 -> 0 bytes html/inherit_graph_18.map | 7 - html/inherit_graph_18.md5 | 1 - html/inherit_graph_18.png | Bin 16391 -> 0 bytes html/inherit_graph_19.map | 13 - html/inherit_graph_19.md5 | 1 - html/inherit_graph_19.png | Bin 30752 -> 0 bytes html/inherit_graph_2.map | 4 - html/inherit_graph_2.md5 | 1 - html/inherit_graph_2.png | Bin 3525 -> 0 bytes html/inherit_graph_20.map | 3 - html/inherit_graph_20.md5 | 1 - html/inherit_graph_20.png | Bin 1482 -> 0 bytes html/inherit_graph_21.map | 4 - html/inherit_graph_21.md5 | 1 - html/inherit_graph_21.png | Bin 3219 -> 0 bytes html/inherit_graph_22.map | 3 - html/inherit_graph_22.md5 | 1 - html/inherit_graph_22.png | Bin 2237 -> 0 bytes html/inherit_graph_23.map | 3 - html/inherit_graph_23.md5 | 1 - html/inherit_graph_23.png | Bin 1800 -> 0 bytes html/inherit_graph_24.map | 3 - html/inherit_graph_24.md5 | 1 - html/inherit_graph_24.png | Bin 1758 -> 0 bytes html/inherit_graph_25.map | 3 - html/inherit_graph_25.md5 | 1 - html/inherit_graph_25.png | Bin 2516 -> 0 bytes html/inherit_graph_26.map | 3 - html/inherit_graph_26.md5 | 1 - html/inherit_graph_26.png | Bin 1850 -> 0 bytes html/inherit_graph_27.map | 3 - html/inherit_graph_27.md5 | 1 - html/inherit_graph_27.png | Bin 1946 -> 0 bytes html/inherit_graph_28.map | 3 - html/inherit_graph_28.md5 | 1 - html/inherit_graph_28.png | Bin 1644 -> 0 bytes html/inherit_graph_29.map | 3 - html/inherit_graph_29.md5 | 1 - html/inherit_graph_29.png | Bin 1760 -> 0 bytes html/inherit_graph_3.map | 4 - html/inherit_graph_3.md5 | 1 - html/inherit_graph_3.png | Bin 3688 -> 0 bytes html/inherit_graph_30.map | 3 - html/inherit_graph_30.md5 | 1 - html/inherit_graph_30.png | Bin 1966 -> 0 bytes html/inherit_graph_31.map | 3 - html/inherit_graph_31.md5 | 1 - html/inherit_graph_31.png | Bin 2179 -> 0 bytes html/inherit_graph_32.map | 3 - html/inherit_graph_32.md5 | 1 - html/inherit_graph_32.png | Bin 2207 -> 0 bytes html/inherit_graph_33.map | 3 - html/inherit_graph_33.md5 | 1 - html/inherit_graph_33.png | Bin 1540 -> 0 bytes html/inherit_graph_34.map | 3 - html/inherit_graph_34.md5 | 1 - html/inherit_graph_34.png | Bin 1595 -> 0 bytes html/inherit_graph_35.map | 3 - html/inherit_graph_35.md5 | 1 - html/inherit_graph_35.png | Bin 2028 -> 0 bytes html/inherit_graph_36.map | 3 - html/inherit_graph_36.md5 | 1 - html/inherit_graph_36.png | Bin 1684 -> 0 bytes html/inherit_graph_37.map | 3 - html/inherit_graph_37.md5 | 1 - html/inherit_graph_37.png | Bin 1897 -> 0 bytes html/inherit_graph_38.map | 3 - html/inherit_graph_38.md5 | 1 - html/inherit_graph_38.png | Bin 1559 -> 0 bytes html/inherit_graph_39.map | 42 - html/inherit_graph_39.md5 | 1 - html/inherit_graph_39.png | Bin 148676 -> 0 bytes html/inherit_graph_4.map | 4 - html/inherit_graph_4.md5 | 1 - html/inherit_graph_4.png | Bin 3799 -> 0 bytes html/inherit_graph_40.map | 3 - html/inherit_graph_40.md5 | 1 - html/inherit_graph_40.png | Bin 2197 -> 0 bytes html/inherit_graph_41.map | 3 - html/inherit_graph_41.md5 | 1 - html/inherit_graph_41.png | Bin 1795 -> 0 bytes html/inherit_graph_42.map | 3 - html/inherit_graph_42.md5 | 1 - html/inherit_graph_42.png | Bin 1733 -> 0 bytes html/inherit_graph_43.map | 12 - html/inherit_graph_43.md5 | 1 - html/inherit_graph_43.png | Bin 41116 -> 0 bytes html/inherit_graph_44.map | 5 - html/inherit_graph_44.md5 | 1 - html/inherit_graph_44.png | Bin 8181 -> 0 bytes html/inherit_graph_45.map | 3 - html/inherit_graph_45.md5 | 1 - html/inherit_graph_45.png | Bin 1696 -> 0 bytes html/inherit_graph_46.map | 3 - html/inherit_graph_46.md5 | 1 - html/inherit_graph_46.png | Bin 2023 -> 0 bytes html/inherit_graph_47.map | 3 - html/inherit_graph_47.md5 | 1 - html/inherit_graph_47.png | Bin 3038 -> 0 bytes html/inherit_graph_48.map | 3 - html/inherit_graph_48.md5 | 1 - html/inherit_graph_48.png | Bin 1768 -> 0 bytes html/inherit_graph_49.map | 3 - html/inherit_graph_49.md5 | 1 - html/inherit_graph_49.png | Bin 1661 -> 0 bytes html/inherit_graph_5.map | 3 - html/inherit_graph_5.md5 | 1 - html/inherit_graph_5.png | Bin 1688 -> 0 bytes html/inherit_graph_50.map | 3 - html/inherit_graph_50.md5 | 1 - html/inherit_graph_50.png | Bin 1389 -> 0 bytes html/inherit_graph_51.map | 3 - html/inherit_graph_51.md5 | 1 - html/inherit_graph_51.png | Bin 2088 -> 0 bytes html/inherit_graph_52.map | 3 - html/inherit_graph_52.md5 | 1 - html/inherit_graph_52.png | Bin 1725 -> 0 bytes html/inherit_graph_53.map | 3 - html/inherit_graph_53.md5 | 1 - html/inherit_graph_53.png | Bin 1769 -> 0 bytes html/inherit_graph_54.map | 3 - html/inherit_graph_54.md5 | 1 - html/inherit_graph_54.png | Bin 1414 -> 0 bytes html/inherit_graph_55.map | 3 - html/inherit_graph_55.md5 | 1 - html/inherit_graph_55.png | Bin 1612 -> 0 bytes html/inherit_graph_56.map | 7 - html/inherit_graph_56.md5 | 1 - html/inherit_graph_56.png | Bin 13000 -> 0 bytes html/inherit_graph_57.map | 3 - html/inherit_graph_57.md5 | 1 - html/inherit_graph_57.png | Bin 1336 -> 0 bytes html/inherit_graph_58.map | 5 - html/inherit_graph_58.md5 | 1 - html/inherit_graph_58.png | Bin 7719 -> 0 bytes html/inherit_graph_59.map | 3 - html/inherit_graph_59.md5 | 1 - html/inherit_graph_59.png | Bin 2248 -> 0 bytes html/inherit_graph_6.map | 3 - html/inherit_graph_6.md5 | 1 - html/inherit_graph_6.png | Bin 1957 -> 0 bytes html/inherit_graph_60.map | 3 - html/inherit_graph_60.md5 | 1 - html/inherit_graph_60.png | Bin 1713 -> 0 bytes html/inherit_graph_61.map | 3 - html/inherit_graph_61.md5 | 1 - html/inherit_graph_61.png | Bin 1612 -> 0 bytes html/inherit_graph_62.map | 3 - html/inherit_graph_62.md5 | 1 - html/inherit_graph_62.png | Bin 1710 -> 0 bytes html/inherit_graph_7.map | 3 - html/inherit_graph_7.md5 | 1 - html/inherit_graph_7.png | Bin 1022 -> 0 bytes html/inherit_graph_8.map | 3 - html/inherit_graph_8.md5 | 1 - html/inherit_graph_8.png | Bin 2398 -> 0 bytes html/inherit_graph_9.map | 3 - html/inherit_graph_9.md5 | 1 - html/inherit_graph_9.png | Bin 1749 -> 0 bytes html/inherits.html | 472 - html/jquery.js | 87 - html/main__page_8doxygen_source.html | 79 - html/media__types_8h_source.html | 79 - html/menu.js | 26 - html/menudata.js | 106 - html/mime__util_8cc_source.html | 104 - html/mime__util_8h_source.html | 101 - html/modules.html | 86 - html/modules.js | 7 - html/namespacelibdap.html | 4418 --- html/namespacelibdap.js | 120 - html/namespacemembers.html | 411 - html/namespacemembers_enum.html | 94 - html/namespacemembers_func.html | 378 - html/namespacemembers_type.html | 91 - html/namespaces.html | 83 - html/namespaces.js | 4 - html/nav_f.png | Bin 153 -> 0 bytes html/nav_g.png | Bin 95 -> 0 bytes html/nav_h.png | Bin 98 -> 0 bytes html/navtree.css | 146 - html/navtree.js | 517 - html/navtreedata.js | 64 - html/navtreeindex0.js | 253 - html/navtreeindex1.js | 253 - html/navtreeindex10.js | 253 - html/navtreeindex11.js | 253 - html/navtreeindex12.js | 253 - html/navtreeindex13.js | 253 - html/navtreeindex14.js | 253 - html/navtreeindex15.js | 253 - html/navtreeindex16.js | 253 - html/navtreeindex17.js | 78 - html/navtreeindex2.js | 253 - html/navtreeindex3.js | 253 - html/navtreeindex4.js | 253 - html/navtreeindex5.js | 253 - html/navtreeindex6.js | 253 - html/navtreeindex7.js | 253 - html/navtreeindex8.js | 253 - html/navtreeindex9.js | 253 - html/open.png | Bin 123 -> 0 bytes html/pages.html | 84 - html/parser-util_8cc_source.html | 86 - html/parser-util_8h_source.html | 83 - html/parser_8h_source.html | 82 - html/regex__test_8cc_source.html | 79 - html/resize.js | 114 - html/splitbar.png | Bin 314 -> 0 bytes html/structfunctions_1_1gse__arg-members.html | 93 - html/structfunctions_1_1gse__arg.html | 129 - html/structfunctions_1_1gse__arg.js | 15 - ...tlibdap_1_1Array_1_1dimension-members.html | 92 - html/structlibdap_1_1Array_1_1dimension.html | 278 - html/structlibdap_1_1Array_1_1dimension.js | 14 - ...tlibdap_1_1AttrTable_1_1entry-members.html | 94 - html/structlibdap_1_1AttrTable_1_1entry.html | 133 - html/structlibdap_1_1AttrTable_1_1entry.js | 16 - html/structlibdap_1_1Clause-members.html | 91 - html/structlibdap_1_1Clause.html | 287 - html/structlibdap_1_1Clause.js | 13 - ...1HTTPCacheTable_1_1CacheEntry-members.html | 106 - ...ibdap_1_1HTTPCacheTable_1_1CacheEntry.html | 172 - ...tlibdap_1_1HTTPCacheTable_1_1CacheEntry.js | 28 - .../structlibdap_1_1cache__entry-members.html | 84 - html/structlibdap_1_1cache__entry.html | 101 - html/structlibdap_1_1cache__entry.js | 6 - ...ructlibdap_1_1ce__parser__arg-members.html | 90 - html/structlibdap_1_1ce__parser__arg.html | 117 - html/structlibdap_1_1ce__parser__arg.js | 12 - html/structlibdap_1_1parser__arg-members.html | 93 - html/structlibdap_1_1parser__arg.html | 134 - html/structlibdap_1_1parser__arg.js | 15 - html/sync_off.png | Bin 853 -> 0 bytes html/sync_on.png | Bin 845 -> 0 bytes html/tab_a.png | Bin 142 -> 0 bytes html/tab_b.png | Bin 169 -> 0 bytes html/tab_h.png | Bin 177 -> 0 bytes html/tab_s.png | Bin 184 -> 0 bytes html/tabs.css | 1 - html/todo.html | 161 - html/util_8cc_source.html | 132 - html/util_8h_source.html | 111 - html/util__mit_8cc_source.html | 82 - html/util__mit_8h_source.html | 82 - html/warn-on-use_8h_source.html | 79 - html/xdr-datatypes-config_8h_source.html | 79 - html/xdr-datatypes-static_8h_source.html | 79 - html/xdr-datatypes_8h_source.html | 79 - HTTPCache.cc => http_dap/HTTPCache.cc | 0 HTTPCache.h => http_dap/HTTPCache.h | 2 +- .../HTTPCacheDisconnectedMode.h | 0 .../HTTPCacheInterruptHandler.h | 0 .../HTTPCacheMacros.h | 0 .../HTTPCacheResponse.h | 0 .../HTTPCacheTable.cc | 0 HTTPCacheTable.h => http_dap/HTTPCacheTable.h | 0 HTTPConnect.cc => http_dap/HTTPConnect.cc | 0 HTTPConnect.h => http_dap/HTTPConnect.h | 1 - HTTPResponse.h => http_dap/HTTPResponse.h | 0 http_dap/Makefile.am | 54 + .../ResponseTooBigErr.cc | 2 +- .../ResponseTooBigErr.h | 0 PipeResponse.h => old/PipeResponse.h | 0 1208 files changed, 98 insertions(+), 235719 deletions(-) rename conf/{ => unused}/ax_check_compile_flag.m4 (100%) rename conf/{ => unused}/ax_valgrind_check.m4 (100%) rename conf/{ => unused}/gcov_valgrind.m4 (100%) delete mode 100644 html/AISConnect_8cc_source.html delete mode 100644 html/AISConnect_8h_source.html delete mode 100644 html/AISDatabaseParser_8cc_source.html delete mode 100644 html/AISDatabaseParser_8h_source.html delete mode 100644 html/AISExceptions_8h_source.html delete mode 100644 html/AISMerge_8cc_source.html delete mode 100644 html/AISMerge_8h_source.html delete mode 100644 html/AISResources_8cc_source.html delete mode 100644 html/AISResources_8h_source.html delete mode 100644 html/AlarmHandler_8h_source.html delete mode 100644 html/Ancillary_8cc_source.html delete mode 100644 html/Ancillary_8h_source.html delete mode 100644 html/Array_8cc_source.html delete mode 100644 html/Array_8h_source.html delete mode 100644 html/AttrTable_8cc_source.html delete mode 100644 html/AttrTable_8h_source.html delete mode 100644 html/BaseTypeFactory_8cc_source.html delete mode 100644 html/BaseTypeFactory_8h_source.html delete mode 100644 html/BaseType_8cc_source.html delete mode 100644 html/BaseType_8h_source.html delete mode 100644 html/Byte_8cc_source.html delete mode 100644 html/Byte_8h_source.html delete mode 100644 html/Clause_8cc_source.html delete mode 100644 html/Clause_8h_source.html delete mode 100644 html/Connect_8cc_source.html delete mode 100644 html/Connect_8h_source.html delete mode 100644 html/ConstraintEvaluator_8cc_source.html delete mode 100644 html/ConstraintEvaluator_8h_source.html delete mode 100644 html/Constructor_8cc_source.html delete mode 100644 html/Constructor_8h_source.html delete mode 100644 html/D4AsyncUtil_8cc_source.html delete mode 100644 html/D4AsyncUtil_8h_source.html delete mode 100644 html/D4AttributeType_8h_source.html delete mode 100644 html/D4Attributes_8cc_source.html delete mode 100644 html/D4Attributes_8h_source.html delete mode 100644 html/D4BaseTypeFactory_8cc_source.html delete mode 100644 html/D4BaseTypeFactory_8h_source.html delete mode 100644 html/D4CEScanner_8h_source.html delete mode 100644 html/D4Connect_8cc_source.html delete mode 100644 html/D4Connect_8h_source.html delete mode 100644 html/D4ConstraintEvaluator_8cc_source.html delete mode 100644 html/D4ConstraintEvaluator_8h_source.html delete mode 100644 html/D4Dimensions_8cc_source.html delete mode 100644 html/D4Dimensions_8h_source.html delete mode 100644 html/D4EnumDefs_8cc_source.html delete mode 100644 html/D4EnumDefs_8h_source.html delete mode 100644 html/D4Enum_8cc_source.html delete mode 100644 html/D4Enum_8h_source.html delete mode 100644 html/D4FilterClause_8cc_source.html delete mode 100644 html/D4FilterClause_8h_source.html delete mode 100644 html/D4FunctionEvaluator_8cc_source.html delete mode 100644 html/D4FunctionEvaluator_8h_source.html delete mode 100644 html/D4FunctionScanner_8h_source.html delete mode 100644 html/D4Function_8h_source.html delete mode 100644 html/D4Group_8cc_source.html delete mode 100644 html/D4Group_8h_source.html delete mode 100644 html/D4Maps_8cc_source.html delete mode 100644 html/D4Maps_8h_source.html delete mode 100644 html/D4Opaque_8cc_source.html delete mode 100644 html/D4Opaque_8h_source.html delete mode 100644 html/D4ParseError_8h_source.html delete mode 100644 html/D4ParserSax2_8cc_source.html delete mode 100644 html/D4ParserSax2_8h_source.html delete mode 100644 html/D4RValue_8cc_source.html delete mode 100644 html/D4RValue_8h_source.html delete mode 100644 html/D4Sequence_8cc_source.html delete mode 100644 html/D4Sequence_8h_source.html delete mode 100644 html/D4StreamMarshaller_8cc_source.html delete mode 100644 html/D4StreamMarshaller_8h_source.html delete mode 100644 html/D4StreamUnMarshaller_8cc_source.html delete mode 100644 html/D4StreamUnMarshaller_8h_source.html delete mode 100644 html/DAPCache3_8cc_source.html delete mode 100644 html/DAPCache3_8h_source.html delete mode 100644 html/DAS_8cc_source.html delete mode 100644 html/DAS_8h_source.html delete mode 100644 html/DDS_8cc_source.html delete mode 100644 html/DDS_8h_source.html delete mode 100644 html/DDXExceptions_8h_source.html delete mode 100644 html/DDXParserSAX2_8cc_source.html delete mode 100644 html/DDXParserSAX2_8h_source.html delete mode 100644 html/DMR_8cc_source.html delete mode 100644 html/DMR_8h_source.html delete mode 100644 html/DODSFilter_8cc_source.html delete mode 100644 html/DODSFilter_8h_source.html delete mode 100644 html/DapIndent_8cc_source.html delete mode 100644 html/DapIndent_8h_source.html delete mode 100644 html/DapObj_8h_source.html delete mode 100644 html/DapXmlNamespaces_8cc_source.html delete mode 100644 html/DapXmlNamespaces_8h_source.html delete mode 100644 html/DataDDS_8cc_source.html delete mode 100644 html/DataDDS_8h_source.html delete mode 100644 html/EncodingType_8h_source.html delete mode 100644 html/Error_8cc_source.html delete mode 100644 html/Error_8h_source.html delete mode 100644 html/EventHandler_8h_source.html delete mode 100644 html/Float32_8cc_source.html delete mode 100644 html/Float32_8h_source.html delete mode 100644 html/Float64_8cc_source.html delete mode 100644 html/Float64_8h_source.html delete mode 100644 html/GNURegex_8cc_source.html delete mode 100644 html/GNURegex_8h_source.html delete mode 100644 html/GSEClause_8cc_source.html delete mode 100644 html/GSEClause_8h_source.html delete mode 100644 html/GeoConstraint_8cc_source.html delete mode 100644 html/GeoConstraint_8h_source.html delete mode 100644 html/GeoGridFunction_8cc_source.html delete mode 100644 html/GeoGridFunction_8h_source.html delete mode 100644 html/GetOpt_8cc_source.html delete mode 100644 html/GetOpt_8h_source.html delete mode 100644 html/GridFunction_8cc_source.html delete mode 100644 html/GridFunction_8h_source.html delete mode 100644 html/GridGeoConstraint_8cc_source.html delete mode 100644 html/GridGeoConstraint_8h_source.html delete mode 100644 html/Grid_8cc_source.html delete mode 100644 html/Grid_8h_source.html delete mode 100644 html/HTTPCacheDisconnectedMode_8h_source.html delete mode 100644 html/HTTPCacheInterruptHandler_8h_source.html delete mode 100644 html/HTTPCacheMacros_8h_source.html delete mode 100644 html/HTTPCacheResponse_8h_source.html delete mode 100644 html/HTTPCacheTable_8cc_source.html delete mode 100644 html/HTTPCacheTable_8h_source.html delete mode 100644 html/HTTPCache_8cc_source.html delete mode 100644 html/HTTPCache_8h_source.html delete mode 100644 html/HTTPConnect_8cc_source.html delete mode 100644 html/HTTPConnect_8h_source.html delete mode 100644 html/HTTPResponse_8h_source.html delete mode 100644 html/Info.plist delete mode 100644 html/Int16_8cc_source.html delete mode 100644 html/Int16_8h_source.html delete mode 100644 html/Int32_8cc_source.html delete mode 100644 html/Int32_8h_source.html delete mode 100644 html/Int64_8cc_source.html delete mode 100644 html/Int64_8h_source.html delete mode 100644 html/Int8_8cc_source.html delete mode 100644 html/Int8_8h_source.html delete mode 100644 html/InternalErr_8cc_source.html delete mode 100644 html/InternalErr_8h_source.html delete mode 100644 html/Keywords2_8cc_source.html delete mode 100644 html/Keywords2_8h_source.html delete mode 100644 html/Makefile delete mode 100644 html/MarshallerThread_8cc_source.html delete mode 100644 html/MarshallerThread_8h_source.html delete mode 100644 html/Marshaller_8h_source.html delete mode 100644 html/Nodes.xml delete mode 100644 html/ObjectType_8h_source.html delete mode 100644 html/Operators_8h_source.html delete mode 100644 html/PipeResponse_8h_source.html delete mode 100644 html/RCReader_8cc_source.html delete mode 100644 html/RCReader_8h_source.html delete mode 100644 html/RValue_8cc_source.html delete mode 100644 html/RValue_8h_source.html delete mode 100644 html/Resource_8h_source.html delete mode 100644 html/ResponseTooBigErr_8cc_source.html delete mode 100644 html/ResponseTooBigErr_8h_source.html delete mode 100644 html/Response_8h_source.html delete mode 100644 html/Sequence_8cc_source.html delete mode 100644 html/Sequence_8h_source.html delete mode 100644 html/ServerFunction_8cc_source.html delete mode 100644 html/ServerFunction_8h_source.html delete mode 100644 html/ServerFunctionsList_8cc_source.html delete mode 100644 html/ServerFunctionsList_8h_source.html delete mode 100644 html/SignalHandlerRegisteredErr_8h_source.html delete mode 100644 html/SignalHandler_8cc_source.html delete mode 100644 html/SignalHandler_8h_source.html delete mode 100644 html/StdinResponse_8h_source.html delete mode 100644 html/Str_8cc_source.html delete mode 100644 html/Str_8h_source.html delete mode 100644 html/Structure_8cc_source.html delete mode 100644 html/Structure_8h_source.html delete mode 100644 html/Tokens.xml delete mode 100644 html/Type_8h_source.html delete mode 100644 html/UInt16_8cc_source.html delete mode 100644 html/UInt16_8h_source.html delete mode 100644 html/UInt32_8cc_source.html delete mode 100644 html/UInt32_8h_source.html delete mode 100644 html/UInt64_8cc_source.html delete mode 100644 html/UInt64_8h_source.html delete mode 100644 html/UnMarshaller_8h_source.html delete mode 100644 html/Url_8cc_source.html delete mode 100644 html/Url_8h_source.html delete mode 100644 html/Vector_8cc_source.html delete mode 100644 html/Vector_8h_source.html delete mode 100644 html/XDRFileMarshaller_8cc_source.html delete mode 100644 html/XDRFileMarshaller_8h_source.html delete mode 100644 html/XDRFileUnMarshaller_8cc_source.html delete mode 100644 html/XDRFileUnMarshaller_8h_source.html delete mode 100644 html/XDRStreamMarshaller_8cc_source.html delete mode 100644 html/XDRStreamMarshaller_8h_source.html delete mode 100644 html/XDRStreamUnMarshaller_8cc_source.html delete mode 100644 html/XDRStreamUnMarshaller_8h_source.html delete mode 100644 html/XDRUtils_8cc_source.html delete mode 100644 html/XDRUtils_8h_source.html delete mode 100644 html/XMLWriter_8cc_source.html delete mode 100644 html/XMLWriter_8h_source.html delete mode 100644 html/annotated.html delete mode 100644 html/annotated_dup.js delete mode 100644 html/arg-nonnull_8h_source.html delete mode 100644 html/bc_s.png delete mode 100644 html/bdwn.png delete mode 100644 html/c_09_09defs_8h_source.html delete mode 100644 html/ce__parser_8h_source.html delete mode 100644 html/cgi__util_8h_source.html delete mode 100644 html/chunked__istream_8cc_source.html delete mode 100644 html/chunked__istream_8h_source.html delete mode 100644 html/chunked__ostream_8cc_source.html delete mode 100644 html/chunked__ostream_8h_source.html delete mode 100644 html/chunked__stream_8h_source.html delete mode 100644 html/classCrc32-members.html delete mode 100644 html/classCrc32.html delete mode 100644 html/classCrc32.js delete mode 100644 html/classGetOpt-members.html delete mode 100644 html/classGetOpt.html delete mode 100644 html/classGetOpt.js delete mode 100644 html/classbinary__function.html delete mode 100644 html/classbinary__function__inherit__graph.map delete mode 100644 html/classbinary__function__inherit__graph.md5 delete mode 100644 html/classbinary__function__inherit__graph.png delete mode 100644 html/classd4__ceFlexLexer.html delete mode 100644 html/classd4__ceFlexLexer__inherit__graph.map delete mode 100644 html/classd4__ceFlexLexer__inherit__graph.md5 delete mode 100644 html/classd4__ceFlexLexer__inherit__graph.png delete mode 100644 html/classd4__functionFlexLexer.html delete mode 100644 html/classd4__functionFlexLexer__inherit__graph.map delete mode 100644 html/classd4__functionFlexLexer__inherit__graph.md5 delete mode 100644 html/classd4__functionFlexLexer__inherit__graph.png delete mode 100644 html/classes.html delete mode 100644 html/classfunctions_1_1GSEClause-members.html delete mode 100644 html/classfunctions_1_1GSEClause.html delete mode 100644 html/classfunctions_1_1GSEClause.js delete mode 100644 html/classfunctions_1_1GeoConstraint-members.html delete mode 100644 html/classfunctions_1_1GeoConstraint.html delete mode 100644 html/classfunctions_1_1GeoConstraint.js delete mode 100644 html/classfunctions_1_1GeoConstraint__inherit__graph.map delete mode 100644 html/classfunctions_1_1GeoConstraint__inherit__graph.md5 delete mode 100644 html/classfunctions_1_1GeoConstraint__inherit__graph.png delete mode 100644 html/classfunctions_1_1GeoGridFunction-members.html delete mode 100644 html/classfunctions_1_1GeoGridFunction.html delete mode 100644 html/classfunctions_1_1GeoGridFunction.js delete mode 100644 html/classfunctions_1_1GeoGridFunction__inherit__graph.map delete mode 100644 html/classfunctions_1_1GeoGridFunction__inherit__graph.md5 delete mode 100644 html/classfunctions_1_1GeoGridFunction__inherit__graph.png delete mode 100644 html/classfunctions_1_1GridFunction-members.html delete mode 100644 html/classfunctions_1_1GridFunction.html delete mode 100644 html/classfunctions_1_1GridFunction.js delete mode 100644 html/classfunctions_1_1GridFunction__inherit__graph.map delete mode 100644 html/classfunctions_1_1GridFunction__inherit__graph.md5 delete mode 100644 html/classfunctions_1_1GridFunction__inherit__graph.png delete mode 100644 html/classfunctions_1_1GridGeoConstraint-members.html delete mode 100644 html/classfunctions_1_1GridGeoConstraint.html delete mode 100644 html/classfunctions_1_1GridGeoConstraint.js delete mode 100644 html/classfunctions_1_1GridGeoConstraint__inherit__graph.map delete mode 100644 html/classfunctions_1_1GridGeoConstraint__inherit__graph.md5 delete mode 100644 html/classfunctions_1_1GridGeoConstraint__inherit__graph.png delete mode 100644 html/classlibdap_1_1AISConnect-members.html delete mode 100644 html/classlibdap_1_1AISConnect.html delete mode 100644 html/classlibdap_1_1AISConnect.js delete mode 100644 html/classlibdap_1_1AISConnect__inherit__graph.map delete mode 100644 html/classlibdap_1_1AISConnect__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1AISConnect__inherit__graph.png delete mode 100644 html/classlibdap_1_1AISDatabaseParser-members.html delete mode 100644 html/classlibdap_1_1AISDatabaseParser.html delete mode 100644 html/classlibdap_1_1AISDatabaseParser.js delete mode 100644 html/classlibdap_1_1AISDatabaseReadFailed-members.html delete mode 100644 html/classlibdap_1_1AISDatabaseReadFailed.html delete mode 100644 html/classlibdap_1_1AISDatabaseReadFailed.js delete mode 100644 html/classlibdap_1_1AISDatabaseReadFailed__inherit__graph.map delete mode 100644 html/classlibdap_1_1AISDatabaseReadFailed__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1AISDatabaseReadFailed__inherit__graph.png delete mode 100644 html/classlibdap_1_1AISDatabaseWriteFailed-members.html delete mode 100644 html/classlibdap_1_1AISDatabaseWriteFailed.html delete mode 100644 html/classlibdap_1_1AISDatabaseWriteFailed.js delete mode 100644 html/classlibdap_1_1AISDatabaseWriteFailed__inherit__graph.map delete mode 100644 html/classlibdap_1_1AISDatabaseWriteFailed__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1AISDatabaseWriteFailed__inherit__graph.png delete mode 100644 html/classlibdap_1_1AISMerge-members.html delete mode 100644 html/classlibdap_1_1AISMerge.html delete mode 100644 html/classlibdap_1_1AISMerge.js delete mode 100644 html/classlibdap_1_1AISResources-members.html delete mode 100644 html/classlibdap_1_1AISResources.html delete mode 100644 html/classlibdap_1_1AISResources.js delete mode 100644 html/classlibdap_1_1AlarmHandler-members.html delete mode 100644 html/classlibdap_1_1AlarmHandler.html delete mode 100644 html/classlibdap_1_1AlarmHandler.js delete mode 100644 html/classlibdap_1_1AlarmHandler__inherit__graph.map delete mode 100644 html/classlibdap_1_1AlarmHandler__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1AlarmHandler__inherit__graph.png delete mode 100644 html/classlibdap_1_1Ancillary-members.html delete mode 100644 html/classlibdap_1_1Ancillary.html delete mode 100644 html/classlibdap_1_1Array-members.html delete mode 100644 html/classlibdap_1_1Array.html delete mode 100644 html/classlibdap_1_1Array.js delete mode 100644 html/classlibdap_1_1Array__inherit__graph.map delete mode 100644 html/classlibdap_1_1Array__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1Array__inherit__graph.png delete mode 100644 html/classlibdap_1_1AttrTable-members.html delete mode 100644 html/classlibdap_1_1AttrTable.html delete mode 100644 html/classlibdap_1_1AttrTable.js delete mode 100644 html/classlibdap_1_1AttrTable__inherit__graph.map delete mode 100644 html/classlibdap_1_1AttrTable__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1AttrTable__inherit__graph.png delete mode 100644 html/classlibdap_1_1BaseType-members.html delete mode 100644 html/classlibdap_1_1BaseType.html delete mode 100644 html/classlibdap_1_1BaseType.js delete mode 100644 html/classlibdap_1_1BaseTypeFactory-members.html delete mode 100644 html/classlibdap_1_1BaseTypeFactory.html delete mode 100644 html/classlibdap_1_1BaseTypeFactory.js delete mode 100644 html/classlibdap_1_1BaseTypeFactory__inherit__graph.map delete mode 100644 html/classlibdap_1_1BaseTypeFactory__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1BaseTypeFactory__inherit__graph.png delete mode 100644 html/classlibdap_1_1BaseType__inherit__graph.map delete mode 100644 html/classlibdap_1_1BaseType__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1BaseType__inherit__graph.png delete mode 100644 html/classlibdap_1_1Byte-members.html delete mode 100644 html/classlibdap_1_1Byte.html delete mode 100644 html/classlibdap_1_1Byte.js delete mode 100644 html/classlibdap_1_1Byte__inherit__graph.map delete mode 100644 html/classlibdap_1_1Byte__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1Byte__inherit__graph.png delete mode 100644 html/classlibdap_1_1ChildLocker-members.html delete mode 100644 html/classlibdap_1_1ChildLocker.html delete mode 100644 html/classlibdap_1_1ChildLocker.js delete mode 100644 html/classlibdap_1_1Connect-members.html delete mode 100644 html/classlibdap_1_1Connect.html delete mode 100644 html/classlibdap_1_1Connect.js delete mode 100644 html/classlibdap_1_1Connect__inherit__graph.map delete mode 100644 html/classlibdap_1_1Connect__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1Connect__inherit__graph.png delete mode 100644 html/classlibdap_1_1ConstraintEvaluator-members.html delete mode 100644 html/classlibdap_1_1ConstraintEvaluator.html delete mode 100644 html/classlibdap_1_1ConstraintEvaluator.js delete mode 100644 html/classlibdap_1_1Constructor-members.html delete mode 100644 html/classlibdap_1_1Constructor.html delete mode 100644 html/classlibdap_1_1Constructor.js delete mode 100644 html/classlibdap_1_1Constructor__inherit__graph.map delete mode 100644 html/classlibdap_1_1Constructor__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1Constructor__inherit__graph.png delete mode 100644 html/classlibdap_1_1D4AsyncUtil-members.html delete mode 100644 html/classlibdap_1_1D4AsyncUtil.html delete mode 100644 html/classlibdap_1_1D4AsyncUtil.js delete mode 100644 html/classlibdap_1_1D4Attribute-members.html delete mode 100644 html/classlibdap_1_1D4Attribute.html delete mode 100644 html/classlibdap_1_1D4Attribute.js delete mode 100644 html/classlibdap_1_1D4Attribute__inherit__graph.map delete mode 100644 html/classlibdap_1_1D4Attribute__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1D4Attribute__inherit__graph.png delete mode 100644 html/classlibdap_1_1D4Attributes-members.html delete mode 100644 html/classlibdap_1_1D4Attributes.html delete mode 100644 html/classlibdap_1_1D4Attributes.js delete mode 100644 html/classlibdap_1_1D4Attributes__inherit__graph.map delete mode 100644 html/classlibdap_1_1D4Attributes__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1D4Attributes__inherit__graph.png delete mode 100644 html/classlibdap_1_1D4BaseTypeFactory-members.html delete mode 100644 html/classlibdap_1_1D4BaseTypeFactory.html delete mode 100644 html/classlibdap_1_1D4BaseTypeFactory.js delete mode 100644 html/classlibdap_1_1D4BaseTypeFactory__inherit__graph.map delete mode 100644 html/classlibdap_1_1D4BaseTypeFactory__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1D4BaseTypeFactory__inherit__graph.png delete mode 100644 html/classlibdap_1_1D4CEScanner-members.html delete mode 100644 html/classlibdap_1_1D4CEScanner.html delete mode 100644 html/classlibdap_1_1D4CEScanner.js delete mode 100644 html/classlibdap_1_1D4CEScanner__inherit__graph.map delete mode 100644 html/classlibdap_1_1D4CEScanner__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1D4CEScanner__inherit__graph.png delete mode 100644 html/classlibdap_1_1D4Connect-members.html delete mode 100644 html/classlibdap_1_1D4Connect.html delete mode 100644 html/classlibdap_1_1D4Connect.js delete mode 100644 html/classlibdap_1_1D4ConstraintEvaluator-members.html delete mode 100644 html/classlibdap_1_1D4ConstraintEvaluator.html delete mode 100644 html/classlibdap_1_1D4ConstraintEvaluator.js delete mode 100644 html/classlibdap_1_1D4Dimension-members.html delete mode 100644 html/classlibdap_1_1D4Dimension.html delete mode 100644 html/classlibdap_1_1D4Dimension.js delete mode 100644 html/classlibdap_1_1D4Dimensions-members.html delete mode 100644 html/classlibdap_1_1D4Dimensions.html delete mode 100644 html/classlibdap_1_1D4Dimensions.js delete mode 100644 html/classlibdap_1_1D4Enum-members.html delete mode 100644 html/classlibdap_1_1D4Enum.html delete mode 100644 html/classlibdap_1_1D4Enum.js delete mode 100644 html/classlibdap_1_1D4EnumDef-members.html delete mode 100644 html/classlibdap_1_1D4EnumDef.html delete mode 100644 html/classlibdap_1_1D4EnumDef.js delete mode 100644 html/classlibdap_1_1D4EnumDefs-members.html delete mode 100644 html/classlibdap_1_1D4EnumDefs.html delete mode 100644 html/classlibdap_1_1D4EnumDefs.js delete mode 100644 html/classlibdap_1_1D4Enum__inherit__graph.map delete mode 100644 html/classlibdap_1_1D4Enum__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1D4Enum__inherit__graph.png delete mode 100644 html/classlibdap_1_1D4FilterClause-members.html delete mode 100644 html/classlibdap_1_1D4FilterClause.html delete mode 100644 html/classlibdap_1_1D4FilterClause.js delete mode 100644 html/classlibdap_1_1D4FilterClauseList-members.html delete mode 100644 html/classlibdap_1_1D4FilterClauseList.html delete mode 100644 html/classlibdap_1_1D4FilterClauseList.js delete mode 100644 html/classlibdap_1_1D4FunctionEvaluator-members.html delete mode 100644 html/classlibdap_1_1D4FunctionEvaluator.html delete mode 100644 html/classlibdap_1_1D4FunctionEvaluator.js delete mode 100644 html/classlibdap_1_1D4FunctionScanner-members.html delete mode 100644 html/classlibdap_1_1D4FunctionScanner.html delete mode 100644 html/classlibdap_1_1D4FunctionScanner.js delete mode 100644 html/classlibdap_1_1D4FunctionScanner__inherit__graph.map delete mode 100644 html/classlibdap_1_1D4FunctionScanner__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1D4FunctionScanner__inherit__graph.png delete mode 100644 html/classlibdap_1_1D4Group-members.html delete mode 100644 html/classlibdap_1_1D4Group.html delete mode 100644 html/classlibdap_1_1D4Group.js delete mode 100644 html/classlibdap_1_1D4Group__inherit__graph.map delete mode 100644 html/classlibdap_1_1D4Group__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1D4Group__inherit__graph.png delete mode 100644 html/classlibdap_1_1D4Map-members.html delete mode 100644 html/classlibdap_1_1D4Map.html delete mode 100644 html/classlibdap_1_1D4Map.js delete mode 100644 html/classlibdap_1_1D4Maps-members.html delete mode 100644 html/classlibdap_1_1D4Maps.html delete mode 100644 html/classlibdap_1_1D4Maps.js delete mode 100644 html/classlibdap_1_1D4Opaque-members.html delete mode 100644 html/classlibdap_1_1D4Opaque.html delete mode 100644 html/classlibdap_1_1D4Opaque.js delete mode 100644 html/classlibdap_1_1D4Opaque__inherit__graph.map delete mode 100644 html/classlibdap_1_1D4Opaque__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1D4Opaque__inherit__graph.png delete mode 100644 html/classlibdap_1_1D4ParseError-members.html delete mode 100644 html/classlibdap_1_1D4ParseError.html delete mode 100644 html/classlibdap_1_1D4ParseError.js delete mode 100644 html/classlibdap_1_1D4ParseError__inherit__graph.map delete mode 100644 html/classlibdap_1_1D4ParseError__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1D4ParseError__inherit__graph.png delete mode 100644 html/classlibdap_1_1D4ParserSax2-members.html delete mode 100644 html/classlibdap_1_1D4ParserSax2.html delete mode 100644 html/classlibdap_1_1D4ParserSax2.js delete mode 100644 html/classlibdap_1_1D4RValue-members.html delete mode 100644 html/classlibdap_1_1D4RValue.html delete mode 100644 html/classlibdap_1_1D4RValue.js delete mode 100644 html/classlibdap_1_1D4RValueList-members.html delete mode 100644 html/classlibdap_1_1D4RValueList.html delete mode 100644 html/classlibdap_1_1D4RValueList.js delete mode 100644 html/classlibdap_1_1D4Sequence-members.html delete mode 100644 html/classlibdap_1_1D4Sequence.html delete mode 100644 html/classlibdap_1_1D4Sequence.js delete mode 100644 html/classlibdap_1_1D4Sequence__inherit__graph.map delete mode 100644 html/classlibdap_1_1D4Sequence__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1D4Sequence__inherit__graph.png delete mode 100644 html/classlibdap_1_1D4StreamMarshaller-members.html delete mode 100644 html/classlibdap_1_1D4StreamMarshaller.html delete mode 100644 html/classlibdap_1_1D4StreamMarshaller.js delete mode 100644 html/classlibdap_1_1D4StreamMarshaller__inherit__graph.map delete mode 100644 html/classlibdap_1_1D4StreamMarshaller__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1D4StreamMarshaller__inherit__graph.png delete mode 100644 html/classlibdap_1_1D4StreamUnMarshaller-members.html delete mode 100644 html/classlibdap_1_1D4StreamUnMarshaller.html delete mode 100644 html/classlibdap_1_1D4StreamUnMarshaller.js delete mode 100644 html/classlibdap_1_1D4StreamUnMarshaller__inherit__graph.map delete mode 100644 html/classlibdap_1_1D4StreamUnMarshaller__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1D4StreamUnMarshaller__inherit__graph.png delete mode 100644 html/classlibdap_1_1DAPCache3-members.html delete mode 100644 html/classlibdap_1_1DAPCache3.html delete mode 100644 html/classlibdap_1_1DAPCache3.js delete mode 100644 html/classlibdap_1_1DAPCache3__inherit__graph.map delete mode 100644 html/classlibdap_1_1DAPCache3__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1DAPCache3__inherit__graph.png delete mode 100644 html/classlibdap_1_1DAS-members.html delete mode 100644 html/classlibdap_1_1DAS.html delete mode 100644 html/classlibdap_1_1DAS.js delete mode 100644 html/classlibdap_1_1DAS__inherit__graph.map delete mode 100644 html/classlibdap_1_1DAS__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1DAS__inherit__graph.png delete mode 100644 html/classlibdap_1_1DDS-members.html delete mode 100644 html/classlibdap_1_1DDS.html delete mode 100644 html/classlibdap_1_1DDS.js delete mode 100644 html/classlibdap_1_1DDS__inherit__graph.map delete mode 100644 html/classlibdap_1_1DDS__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1DDS__inherit__graph.png delete mode 100644 html/classlibdap_1_1DDXParseFailed-members.html delete mode 100644 html/classlibdap_1_1DDXParseFailed.html delete mode 100644 html/classlibdap_1_1DDXParseFailed.js delete mode 100644 html/classlibdap_1_1DDXParseFailed__inherit__graph.map delete mode 100644 html/classlibdap_1_1DDXParseFailed__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1DDXParseFailed__inherit__graph.png delete mode 100644 html/classlibdap_1_1DDXParser-members.html delete mode 100644 html/classlibdap_1_1DDXParser.html delete mode 100644 html/classlibdap_1_1DDXParser.js delete mode 100644 html/classlibdap_1_1DMR-members.html delete mode 100644 html/classlibdap_1_1DMR.html delete mode 100644 html/classlibdap_1_1DMR.js delete mode 100644 html/classlibdap_1_1DMR__inherit__graph.map delete mode 100644 html/classlibdap_1_1DMR__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1DMR__inherit__graph.png delete mode 100644 html/classlibdap_1_1DODSFilter-members.html delete mode 100644 html/classlibdap_1_1DODSFilter.html delete mode 100644 html/classlibdap_1_1DODSFilter.js delete mode 100644 html/classlibdap_1_1DapIndent-members.html delete mode 100644 html/classlibdap_1_1DapIndent.html delete mode 100644 html/classlibdap_1_1DapObj-members.html delete mode 100644 html/classlibdap_1_1DapObj.html delete mode 100644 html/classlibdap_1_1DapObj.js delete mode 100644 html/classlibdap_1_1DapObj__inherit__graph.map delete mode 100644 html/classlibdap_1_1DapObj__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1DapObj__inherit__graph.png delete mode 100644 html/classlibdap_1_1DapXmlNamspaces-members.html delete mode 100644 html/classlibdap_1_1DapXmlNamspaces.html delete mode 100644 html/classlibdap_1_1DapXmlNamspaces.js delete mode 100644 html/classlibdap_1_1DataDDS-members.html delete mode 100644 html/classlibdap_1_1DataDDS.html delete mode 100644 html/classlibdap_1_1DataDDS.js delete mode 100644 html/classlibdap_1_1DataDDS__inherit__graph.map delete mode 100644 html/classlibdap_1_1DataDDS__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1DataDDS__inherit__graph.png delete mode 100644 html/classlibdap_1_1Error-members.html delete mode 100644 html/classlibdap_1_1Error.html delete mode 100644 html/classlibdap_1_1Error.js delete mode 100644 html/classlibdap_1_1Error__inherit__graph.map delete mode 100644 html/classlibdap_1_1Error__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1Error__inherit__graph.png delete mode 100644 html/classlibdap_1_1EventHandler-members.html delete mode 100644 html/classlibdap_1_1EventHandler.html delete mode 100644 html/classlibdap_1_1EventHandler.js delete mode 100644 html/classlibdap_1_1EventHandler__inherit__graph.map delete mode 100644 html/classlibdap_1_1EventHandler__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1EventHandler__inherit__graph.png delete mode 100644 html/classlibdap_1_1Float32-members.html delete mode 100644 html/classlibdap_1_1Float32.html delete mode 100644 html/classlibdap_1_1Float32.js delete mode 100644 html/classlibdap_1_1Float32__inherit__graph.map delete mode 100644 html/classlibdap_1_1Float32__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1Float32__inherit__graph.png delete mode 100644 html/classlibdap_1_1Float64-members.html delete mode 100644 html/classlibdap_1_1Float64.html delete mode 100644 html/classlibdap_1_1Float64.js delete mode 100644 html/classlibdap_1_1Float64__inherit__graph.map delete mode 100644 html/classlibdap_1_1Float64__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1Float64__inherit__graph.png delete mode 100644 html/classlibdap_1_1Grid-members.html delete mode 100644 html/classlibdap_1_1Grid.html delete mode 100644 html/classlibdap_1_1Grid.js delete mode 100644 html/classlibdap_1_1Grid__inherit__graph.map delete mode 100644 html/classlibdap_1_1Grid__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1Grid__inherit__graph.png delete mode 100644 html/classlibdap_1_1HTTPCache-members.html delete mode 100644 html/classlibdap_1_1HTTPCache.html delete mode 100644 html/classlibdap_1_1HTTPCache.js delete mode 100644 html/classlibdap_1_1HTTPCacheInterruptHandler-members.html delete mode 100644 html/classlibdap_1_1HTTPCacheInterruptHandler.html delete mode 100644 html/classlibdap_1_1HTTPCacheInterruptHandler.js delete mode 100644 html/classlibdap_1_1HTTPCacheInterruptHandler__inherit__graph.map delete mode 100644 html/classlibdap_1_1HTTPCacheInterruptHandler__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1HTTPCacheInterruptHandler__inherit__graph.png delete mode 100644 html/classlibdap_1_1HTTPCacheResponse-members.html delete mode 100644 html/classlibdap_1_1HTTPCacheResponse.html delete mode 100644 html/classlibdap_1_1HTTPCacheResponse.js delete mode 100644 html/classlibdap_1_1HTTPCacheResponse__inherit__graph.map delete mode 100644 html/classlibdap_1_1HTTPCacheResponse__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1HTTPCacheResponse__inherit__graph.png delete mode 100644 html/classlibdap_1_1HTTPCacheTable-members.html delete mode 100644 html/classlibdap_1_1HTTPCacheTable.html delete mode 100644 html/classlibdap_1_1HTTPCacheTable.js delete mode 100644 html/classlibdap_1_1HTTPConnect-members.html delete mode 100644 html/classlibdap_1_1HTTPConnect.html delete mode 100644 html/classlibdap_1_1HTTPConnect.js delete mode 100644 html/classlibdap_1_1HTTPResponse-members.html delete mode 100644 html/classlibdap_1_1HTTPResponse.html delete mode 100644 html/classlibdap_1_1HTTPResponse.js delete mode 100644 html/classlibdap_1_1HTTPResponse__inherit__graph.map delete mode 100644 html/classlibdap_1_1HTTPResponse__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1HTTPResponse__inherit__graph.png delete mode 100644 html/classlibdap_1_1Int16-members.html delete mode 100644 html/classlibdap_1_1Int16.html delete mode 100644 html/classlibdap_1_1Int16.js delete mode 100644 html/classlibdap_1_1Int16__inherit__graph.map delete mode 100644 html/classlibdap_1_1Int16__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1Int16__inherit__graph.png delete mode 100644 html/classlibdap_1_1Int32-members.html delete mode 100644 html/classlibdap_1_1Int32.html delete mode 100644 html/classlibdap_1_1Int32.js delete mode 100644 html/classlibdap_1_1Int32__inherit__graph.map delete mode 100644 html/classlibdap_1_1Int32__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1Int32__inherit__graph.png delete mode 100644 html/classlibdap_1_1Int64-members.html delete mode 100644 html/classlibdap_1_1Int64.html delete mode 100644 html/classlibdap_1_1Int64.js delete mode 100644 html/classlibdap_1_1Int64__inherit__graph.map delete mode 100644 html/classlibdap_1_1Int64__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1Int64__inherit__graph.png delete mode 100644 html/classlibdap_1_1Int8-members.html delete mode 100644 html/classlibdap_1_1Int8.html delete mode 100644 html/classlibdap_1_1Int8.js delete mode 100644 html/classlibdap_1_1Int8__inherit__graph.map delete mode 100644 html/classlibdap_1_1Int8__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1Int8__inherit__graph.png delete mode 100644 html/classlibdap_1_1InternalErr-members.html delete mode 100644 html/classlibdap_1_1InternalErr.html delete mode 100644 html/classlibdap_1_1InternalErr.js delete mode 100644 html/classlibdap_1_1InternalErr__inherit__graph.map delete mode 100644 html/classlibdap_1_1InternalErr__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1InternalErr__inherit__graph.png delete mode 100644 html/classlibdap_1_1Keywords-members.html delete mode 100644 html/classlibdap_1_1Keywords.html delete mode 100644 html/classlibdap_1_1Keywords.js delete mode 100644 html/classlibdap_1_1Locker-members.html delete mode 100644 html/classlibdap_1_1Locker.html delete mode 100644 html/classlibdap_1_1Locker.js delete mode 100644 html/classlibdap_1_1Marshaller-members.html delete mode 100644 html/classlibdap_1_1Marshaller.html delete mode 100644 html/classlibdap_1_1Marshaller.js delete mode 100644 html/classlibdap_1_1MarshallerThread-members.html delete mode 100644 html/classlibdap_1_1MarshallerThread.html delete mode 100644 html/classlibdap_1_1MarshallerThread.js delete mode 100644 html/classlibdap_1_1Marshaller__inherit__graph.map delete mode 100644 html/classlibdap_1_1Marshaller__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1Marshaller__inherit__graph.png delete mode 100644 html/classlibdap_1_1NoSuchPrimaryResource-members.html delete mode 100644 html/classlibdap_1_1NoSuchPrimaryResource.html delete mode 100644 html/classlibdap_1_1NoSuchPrimaryResource.js delete mode 100644 html/classlibdap_1_1NoSuchPrimaryResource__inherit__graph.map delete mode 100644 html/classlibdap_1_1NoSuchPrimaryResource__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1NoSuchPrimaryResource__inherit__graph.png delete mode 100644 html/classlibdap_1_1PipeResponse-members.html delete mode 100644 html/classlibdap_1_1PipeResponse.html delete mode 100644 html/classlibdap_1_1PipeResponse.js delete mode 100644 html/classlibdap_1_1PipeResponse__inherit__graph.map delete mode 100644 html/classlibdap_1_1PipeResponse__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1PipeResponse__inherit__graph.png delete mode 100644 html/classlibdap_1_1RCReader-members.html delete mode 100644 html/classlibdap_1_1RCReader.html delete mode 100644 html/classlibdap_1_1RCReader.js delete mode 100644 html/classlibdap_1_1Regex-members.html delete mode 100644 html/classlibdap_1_1Regex.html delete mode 100644 html/classlibdap_1_1Regex.js delete mode 100644 html/classlibdap_1_1Resource-members.html delete mode 100644 html/classlibdap_1_1Resource.html delete mode 100644 html/classlibdap_1_1Resource.js delete mode 100644 html/classlibdap_1_1Response-members.html delete mode 100644 html/classlibdap_1_1Response.html delete mode 100644 html/classlibdap_1_1Response.js delete mode 100644 html/classlibdap_1_1ResponseTooBigErr-members.html delete mode 100644 html/classlibdap_1_1ResponseTooBigErr.html delete mode 100644 html/classlibdap_1_1ResponseTooBigErr.js delete mode 100644 html/classlibdap_1_1ResponseTooBigErr__inherit__graph.map delete mode 100644 html/classlibdap_1_1ResponseTooBigErr__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1ResponseTooBigErr__inherit__graph.png delete mode 100644 html/classlibdap_1_1Response__inherit__graph.map delete mode 100644 html/classlibdap_1_1Response__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1Response__inherit__graph.png delete mode 100644 html/classlibdap_1_1Sequence-members.html delete mode 100644 html/classlibdap_1_1Sequence.html delete mode 100644 html/classlibdap_1_1Sequence.js delete mode 100644 html/classlibdap_1_1Sequence__inherit__graph.map delete mode 100644 html/classlibdap_1_1Sequence__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1Sequence__inherit__graph.png delete mode 100644 html/classlibdap_1_1ServerFunction-members.html delete mode 100644 html/classlibdap_1_1ServerFunction.html delete mode 100644 html/classlibdap_1_1ServerFunction.js delete mode 100644 html/classlibdap_1_1ServerFunction__inherit__graph.map delete mode 100644 html/classlibdap_1_1ServerFunction__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1ServerFunction__inherit__graph.png delete mode 100644 html/classlibdap_1_1ServerFunctionsList-members.html delete mode 100644 html/classlibdap_1_1ServerFunctionsList.html delete mode 100644 html/classlibdap_1_1ServerFunctionsList.js delete mode 100644 html/classlibdap_1_1SignalHandler-members.html delete mode 100644 html/classlibdap_1_1SignalHandler.html delete mode 100644 html/classlibdap_1_1SignalHandler.js delete mode 100644 html/classlibdap_1_1SignalHandlerRegisteredErr-members.html delete mode 100644 html/classlibdap_1_1SignalHandlerRegisteredErr.html delete mode 100644 html/classlibdap_1_1SignalHandlerRegisteredErr.js delete mode 100644 html/classlibdap_1_1SignalHandlerRegisteredErr__inherit__graph.map delete mode 100644 html/classlibdap_1_1SignalHandlerRegisteredErr__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1SignalHandlerRegisteredErr__inherit__graph.png delete mode 100644 html/classlibdap_1_1StdinResponse-members.html delete mode 100644 html/classlibdap_1_1StdinResponse.html delete mode 100644 html/classlibdap_1_1StdinResponse.js delete mode 100644 html/classlibdap_1_1StdinResponse__inherit__graph.map delete mode 100644 html/classlibdap_1_1StdinResponse__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1StdinResponse__inherit__graph.png delete mode 100644 html/classlibdap_1_1Str-members.html delete mode 100644 html/classlibdap_1_1Str.html delete mode 100644 html/classlibdap_1_1Str.js delete mode 100644 html/classlibdap_1_1Str__inherit__graph.map delete mode 100644 html/classlibdap_1_1Str__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1Str__inherit__graph.png delete mode 100644 html/classlibdap_1_1Structure-members.html delete mode 100644 html/classlibdap_1_1Structure.html delete mode 100644 html/classlibdap_1_1Structure.js delete mode 100644 html/classlibdap_1_1Structure__inherit__graph.map delete mode 100644 html/classlibdap_1_1Structure__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1Structure__inherit__graph.png delete mode 100644 html/classlibdap_1_1UInt16-members.html delete mode 100644 html/classlibdap_1_1UInt16.html delete mode 100644 html/classlibdap_1_1UInt16.js delete mode 100644 html/classlibdap_1_1UInt16__inherit__graph.map delete mode 100644 html/classlibdap_1_1UInt16__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1UInt16__inherit__graph.png delete mode 100644 html/classlibdap_1_1UInt32-members.html delete mode 100644 html/classlibdap_1_1UInt32.html delete mode 100644 html/classlibdap_1_1UInt32.js delete mode 100644 html/classlibdap_1_1UInt32__inherit__graph.map delete mode 100644 html/classlibdap_1_1UInt32__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1UInt32__inherit__graph.png delete mode 100644 html/classlibdap_1_1UInt64-members.html delete mode 100644 html/classlibdap_1_1UInt64.html delete mode 100644 html/classlibdap_1_1UInt64.js delete mode 100644 html/classlibdap_1_1UInt64__inherit__graph.map delete mode 100644 html/classlibdap_1_1UInt64__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1UInt64__inherit__graph.png delete mode 100644 html/classlibdap_1_1UnMarshaller-members.html delete mode 100644 html/classlibdap_1_1UnMarshaller.html delete mode 100644 html/classlibdap_1_1UnMarshaller.js delete mode 100644 html/classlibdap_1_1UnMarshaller__inherit__graph.map delete mode 100644 html/classlibdap_1_1UnMarshaller__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1UnMarshaller__inherit__graph.png delete mode 100644 html/classlibdap_1_1Url-members.html delete mode 100644 html/classlibdap_1_1Url.html delete mode 100644 html/classlibdap_1_1Url.js delete mode 100644 html/classlibdap_1_1Url__inherit__graph.map delete mode 100644 html/classlibdap_1_1Url__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1Url__inherit__graph.png delete mode 100644 html/classlibdap_1_1Vector-members.html delete mode 100644 html/classlibdap_1_1Vector.html delete mode 100644 html/classlibdap_1_1Vector.js delete mode 100644 html/classlibdap_1_1Vector__inherit__graph.map delete mode 100644 html/classlibdap_1_1Vector__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1Vector__inherit__graph.png delete mode 100644 html/classlibdap_1_1XDRFileMarshaller-members.html delete mode 100644 html/classlibdap_1_1XDRFileMarshaller.html delete mode 100644 html/classlibdap_1_1XDRFileMarshaller.js delete mode 100644 html/classlibdap_1_1XDRFileMarshaller__inherit__graph.map delete mode 100644 html/classlibdap_1_1XDRFileMarshaller__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1XDRFileMarshaller__inherit__graph.png delete mode 100644 html/classlibdap_1_1XDRFileUnMarshaller-members.html delete mode 100644 html/classlibdap_1_1XDRFileUnMarshaller.html delete mode 100644 html/classlibdap_1_1XDRFileUnMarshaller.js delete mode 100644 html/classlibdap_1_1XDRFileUnMarshaller__inherit__graph.map delete mode 100644 html/classlibdap_1_1XDRFileUnMarshaller__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1XDRFileUnMarshaller__inherit__graph.png delete mode 100644 html/classlibdap_1_1XDRStreamMarshaller-members.html delete mode 100644 html/classlibdap_1_1XDRStreamMarshaller.html delete mode 100644 html/classlibdap_1_1XDRStreamMarshaller.js delete mode 100644 html/classlibdap_1_1XDRStreamMarshaller__inherit__graph.map delete mode 100644 html/classlibdap_1_1XDRStreamMarshaller__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1XDRStreamMarshaller__inherit__graph.png delete mode 100644 html/classlibdap_1_1XDRStreamUnMarshaller-members.html delete mode 100644 html/classlibdap_1_1XDRStreamUnMarshaller.html delete mode 100644 html/classlibdap_1_1XDRStreamUnMarshaller.js delete mode 100644 html/classlibdap_1_1XDRStreamUnMarshaller__inherit__graph.map delete mode 100644 html/classlibdap_1_1XDRStreamUnMarshaller__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1XDRStreamUnMarshaller__inherit__graph.png delete mode 100644 html/classlibdap_1_1XDRUtils-members.html delete mode 100644 html/classlibdap_1_1XDRUtils.html delete mode 100644 html/classlibdap_1_1XMLWriter-members.html delete mode 100644 html/classlibdap_1_1XMLWriter.html delete mode 100644 html/classlibdap_1_1XMLWriter.js delete mode 100644 html/classlibdap_1_1chunked__inbuf-members.html delete mode 100644 html/classlibdap_1_1chunked__inbuf.html delete mode 100644 html/classlibdap_1_1chunked__inbuf.js delete mode 100644 html/classlibdap_1_1chunked__inbuf__inherit__graph.map delete mode 100644 html/classlibdap_1_1chunked__inbuf__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1chunked__inbuf__inherit__graph.png delete mode 100644 html/classlibdap_1_1chunked__istream-members.html delete mode 100644 html/classlibdap_1_1chunked__istream.html delete mode 100644 html/classlibdap_1_1chunked__istream.js delete mode 100644 html/classlibdap_1_1chunked__istream__inherit__graph.map delete mode 100644 html/classlibdap_1_1chunked__istream__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1chunked__istream__inherit__graph.png delete mode 100644 html/classlibdap_1_1chunked__ostream-members.html delete mode 100644 html/classlibdap_1_1chunked__ostream.html delete mode 100644 html/classlibdap_1_1chunked__ostream.js delete mode 100644 html/classlibdap_1_1chunked__ostream__inherit__graph.map delete mode 100644 html/classlibdap_1_1chunked__ostream__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1chunked__ostream__inherit__graph.png delete mode 100644 html/classlibdap_1_1chunked__outbuf-members.html delete mode 100644 html/classlibdap_1_1chunked__outbuf.html delete mode 100644 html/classlibdap_1_1chunked__outbuf.js delete mode 100644 html/classlibdap_1_1chunked__outbuf__inherit__graph.map delete mode 100644 html/classlibdap_1_1chunked__outbuf__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1chunked__outbuf__inherit__graph.png delete mode 100644 html/classlibdap_1_1fdinbuf-members.html delete mode 100644 html/classlibdap_1_1fdinbuf.html delete mode 100644 html/classlibdap_1_1fdinbuf.js delete mode 100644 html/classlibdap_1_1fdinbuf__inherit__graph.map delete mode 100644 html/classlibdap_1_1fdinbuf__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1fdinbuf__inherit__graph.png delete mode 100644 html/classlibdap_1_1fdistream-members.html delete mode 100644 html/classlibdap_1_1fdistream.html delete mode 100644 html/classlibdap_1_1fdistream.js delete mode 100644 html/classlibdap_1_1fdistream__inherit__graph.map delete mode 100644 html/classlibdap_1_1fdistream__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1fdistream__inherit__graph.png delete mode 100644 html/classlibdap_1_1fdostream-members.html delete mode 100644 html/classlibdap_1_1fdostream.html delete mode 100644 html/classlibdap_1_1fdostream.js delete mode 100644 html/classlibdap_1_1fdostream__inherit__graph.map delete mode 100644 html/classlibdap_1_1fdostream__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1fdostream__inherit__graph.png delete mode 100644 html/classlibdap_1_1fdoutbuf-members.html delete mode 100644 html/classlibdap_1_1fdoutbuf.html delete mode 100644 html/classlibdap_1_1fdoutbuf.js delete mode 100644 html/classlibdap_1_1fdoutbuf__inherit__graph.map delete mode 100644 html/classlibdap_1_1fdoutbuf__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1fdoutbuf__inherit__graph.png delete mode 100644 html/classlibdap_1_1fpinbuf-members.html delete mode 100644 html/classlibdap_1_1fpinbuf.html delete mode 100644 html/classlibdap_1_1fpinbuf.js delete mode 100644 html/classlibdap_1_1fpinbuf__inherit__graph.map delete mode 100644 html/classlibdap_1_1fpinbuf__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1fpinbuf__inherit__graph.png delete mode 100644 html/classlibdap_1_1fpistream-members.html delete mode 100644 html/classlibdap_1_1fpistream.html delete mode 100644 html/classlibdap_1_1fpistream.js delete mode 100644 html/classlibdap_1_1fpistream__inherit__graph.map delete mode 100644 html/classlibdap_1_1fpistream__inherit__graph.md5 delete mode 100644 html/classlibdap_1_1fpistream__inherit__graph.png delete mode 100644 html/classlibdap_1_1rvalue-members.html delete mode 100644 html/classlibdap_1_1rvalue.html delete mode 100644 html/classlibdap_1_1rvalue.js delete mode 100644 html/closed.png delete mode 100644 html/config_8h_source.html delete mode 100644 html/config__dap_8h_source.html delete mode 100644 html/crc_8h_source.html delete mode 100644 html/debug_8h_source.html delete mode 100644 html/deprecated.html delete mode 100644 html/dir_030199a96d3a4056a0e2bc332dfd6de8.html delete mode 100644 html/dir_2bcd72cd0b092dad44d5d2bb06eea6c2.html delete mode 100644 html/dir_2d5e420d32f68fbdcd72803e1c025222.html delete mode 100644 html/dir_60c1e009daff386049faf4e676bb6db8.html delete mode 100644 html/dir_873b92a1b74e92f35ff36fce7b7e35b8.html delete mode 100644 html/dir_ace0027695ef4a6e4945b7441cbb707a.html delete mode 100644 html/doc.png delete mode 100644 html/dods-datatypes-config_8h_source.html delete mode 100644 html/dods-datatypes-static_8h_source.html delete mode 100644 html/dods-datatypes_8h_source.html delete mode 100644 html/dods-limits_8h_source.html delete mode 100644 html/doxygen.css delete mode 100644 html/doxygen.png delete mode 100644 html/dynsections.js delete mode 100644 html/error-test_8cc_source.html delete mode 100644 html/escaping_8cc_source.html delete mode 100644 html/escaping_8h_source.html delete mode 100644 html/fdiostream_8cc_source.html delete mode 100644 html/fdiostream_8h_source.html delete mode 100644 html/files.html delete mode 100644 html/files.js delete mode 100644 html/folderclosed.png delete mode 100644 html/folderopen.png delete mode 100644 html/functions.html delete mode 100644 html/functions_0x7e.html delete mode 100644 html/functions_b.html delete mode 100644 html/functions_c.html delete mode 100644 html/functions_d.html delete mode 100644 html/functions_dup.js delete mode 100644 html/functions_e.html delete mode 100644 html/functions_enum.html delete mode 100644 html/functions_f.html delete mode 100644 html/functions_func.html delete mode 100644 html/functions_func.js delete mode 100644 html/functions_func_0x7e.html delete mode 100644 html/functions_func_b.html delete mode 100644 html/functions_func_c.html delete mode 100644 html/functions_func_d.html delete mode 100644 html/functions_func_e.html delete mode 100644 html/functions_func_f.html delete mode 100644 html/functions_func_g.html delete mode 100644 html/functions_func_h.html delete mode 100644 html/functions_func_i.html delete mode 100644 html/functions_func_l.html delete mode 100644 html/functions_func_m.html delete mode 100644 html/functions_func_n.html delete mode 100644 html/functions_func_o.html delete mode 100644 html/functions_func_p.html delete mode 100644 html/functions_func_r.html delete mode 100644 html/functions_func_s.html delete mode 100644 html/functions_func_t.html delete mode 100644 html/functions_func_u.html delete mode 100644 html/functions_func_v.html delete mode 100644 html/functions_func_w.html delete mode 100644 html/functions_func_x.html delete mode 100644 html/functions_g.html delete mode 100644 html/functions_h.html delete mode 100644 html/functions_i.html delete mode 100644 html/functions_l.html delete mode 100644 html/functions_m.html delete mode 100644 html/functions_n.html delete mode 100644 html/functions_o.html delete mode 100644 html/functions_p.html delete mode 100644 html/functions_r.html delete mode 100644 html/functions_rela.html delete mode 100644 html/functions_s.html delete mode 100644 html/functions_t.html delete mode 100644 html/functions_type.html delete mode 100644 html/functions_u.html delete mode 100644 html/functions_v.html delete mode 100644 html/functions_vars.html delete mode 100644 html/functions_w.html delete mode 100644 html/functions_x.html delete mode 100644 html/getdap4_8cc_source.html delete mode 100644 html/getdap_8cc_source.html delete mode 100644 html/graph_legend.html delete mode 100644 html/graph_legend.md5 delete mode 100644 html/graph_legend.png delete mode 100644 html/grid__utils_8cc_source.html delete mode 100644 html/grid__utils_8h_source.html delete mode 100644 html/group__check.html delete mode 100644 html/group__check__type.html delete mode 100644 html/group__check__type.js delete mode 100644 html/group__get__type.html delete mode 100644 html/group__strict.html delete mode 100644 html/group__strict.js delete mode 100644 html/gse__parser_8h_source.html delete mode 100644 html/hierarchy.html delete mode 100644 html/hierarchy.js delete mode 100644 html/index.html delete mode 100644 html/inherit_graph_0.map delete mode 100644 html/inherit_graph_0.md5 delete mode 100644 html/inherit_graph_0.png delete mode 100644 html/inherit_graph_1.map delete mode 100644 html/inherit_graph_1.md5 delete mode 100644 html/inherit_graph_1.png delete mode 100644 html/inherit_graph_10.map delete mode 100644 html/inherit_graph_10.md5 delete mode 100644 html/inherit_graph_10.png delete mode 100644 html/inherit_graph_11.map delete mode 100644 html/inherit_graph_11.md5 delete mode 100644 html/inherit_graph_11.png delete mode 100644 html/inherit_graph_12.map delete mode 100644 html/inherit_graph_12.md5 delete mode 100644 html/inherit_graph_12.png delete mode 100644 html/inherit_graph_13.map delete mode 100644 html/inherit_graph_13.md5 delete mode 100644 html/inherit_graph_13.png delete mode 100644 html/inherit_graph_14.map delete mode 100644 html/inherit_graph_14.md5 delete mode 100644 html/inherit_graph_14.png delete mode 100644 html/inherit_graph_15.map delete mode 100644 html/inherit_graph_15.md5 delete mode 100644 html/inherit_graph_15.png delete mode 100644 html/inherit_graph_16.map delete mode 100644 html/inherit_graph_16.md5 delete mode 100644 html/inherit_graph_16.png delete mode 100644 html/inherit_graph_17.map delete mode 100644 html/inherit_graph_17.md5 delete mode 100644 html/inherit_graph_17.png delete mode 100644 html/inherit_graph_18.map delete mode 100644 html/inherit_graph_18.md5 delete mode 100644 html/inherit_graph_18.png delete mode 100644 html/inherit_graph_19.map delete mode 100644 html/inherit_graph_19.md5 delete mode 100644 html/inherit_graph_19.png delete mode 100644 html/inherit_graph_2.map delete mode 100644 html/inherit_graph_2.md5 delete mode 100644 html/inherit_graph_2.png delete mode 100644 html/inherit_graph_20.map delete mode 100644 html/inherit_graph_20.md5 delete mode 100644 html/inherit_graph_20.png delete mode 100644 html/inherit_graph_21.map delete mode 100644 html/inherit_graph_21.md5 delete mode 100644 html/inherit_graph_21.png delete mode 100644 html/inherit_graph_22.map delete mode 100644 html/inherit_graph_22.md5 delete mode 100644 html/inherit_graph_22.png delete mode 100644 html/inherit_graph_23.map delete mode 100644 html/inherit_graph_23.md5 delete mode 100644 html/inherit_graph_23.png delete mode 100644 html/inherit_graph_24.map delete mode 100644 html/inherit_graph_24.md5 delete mode 100644 html/inherit_graph_24.png delete mode 100644 html/inherit_graph_25.map delete mode 100644 html/inherit_graph_25.md5 delete mode 100644 html/inherit_graph_25.png delete mode 100644 html/inherit_graph_26.map delete mode 100644 html/inherit_graph_26.md5 delete mode 100644 html/inherit_graph_26.png delete mode 100644 html/inherit_graph_27.map delete mode 100644 html/inherit_graph_27.md5 delete mode 100644 html/inherit_graph_27.png delete mode 100644 html/inherit_graph_28.map delete mode 100644 html/inherit_graph_28.md5 delete mode 100644 html/inherit_graph_28.png delete mode 100644 html/inherit_graph_29.map delete mode 100644 html/inherit_graph_29.md5 delete mode 100644 html/inherit_graph_29.png delete mode 100644 html/inherit_graph_3.map delete mode 100644 html/inherit_graph_3.md5 delete mode 100644 html/inherit_graph_3.png delete mode 100644 html/inherit_graph_30.map delete mode 100644 html/inherit_graph_30.md5 delete mode 100644 html/inherit_graph_30.png delete mode 100644 html/inherit_graph_31.map delete mode 100644 html/inherit_graph_31.md5 delete mode 100644 html/inherit_graph_31.png delete mode 100644 html/inherit_graph_32.map delete mode 100644 html/inherit_graph_32.md5 delete mode 100644 html/inherit_graph_32.png delete mode 100644 html/inherit_graph_33.map delete mode 100644 html/inherit_graph_33.md5 delete mode 100644 html/inherit_graph_33.png delete mode 100644 html/inherit_graph_34.map delete mode 100644 html/inherit_graph_34.md5 delete mode 100644 html/inherit_graph_34.png delete mode 100644 html/inherit_graph_35.map delete mode 100644 html/inherit_graph_35.md5 delete mode 100644 html/inherit_graph_35.png delete mode 100644 html/inherit_graph_36.map delete mode 100644 html/inherit_graph_36.md5 delete mode 100644 html/inherit_graph_36.png delete mode 100644 html/inherit_graph_37.map delete mode 100644 html/inherit_graph_37.md5 delete mode 100644 html/inherit_graph_37.png delete mode 100644 html/inherit_graph_38.map delete mode 100644 html/inherit_graph_38.md5 delete mode 100644 html/inherit_graph_38.png delete mode 100644 html/inherit_graph_39.map delete mode 100644 html/inherit_graph_39.md5 delete mode 100644 html/inherit_graph_39.png delete mode 100644 html/inherit_graph_4.map delete mode 100644 html/inherit_graph_4.md5 delete mode 100644 html/inherit_graph_4.png delete mode 100644 html/inherit_graph_40.map delete mode 100644 html/inherit_graph_40.md5 delete mode 100644 html/inherit_graph_40.png delete mode 100644 html/inherit_graph_41.map delete mode 100644 html/inherit_graph_41.md5 delete mode 100644 html/inherit_graph_41.png delete mode 100644 html/inherit_graph_42.map delete mode 100644 html/inherit_graph_42.md5 delete mode 100644 html/inherit_graph_42.png delete mode 100644 html/inherit_graph_43.map delete mode 100644 html/inherit_graph_43.md5 delete mode 100644 html/inherit_graph_43.png delete mode 100644 html/inherit_graph_44.map delete mode 100644 html/inherit_graph_44.md5 delete mode 100644 html/inherit_graph_44.png delete mode 100644 html/inherit_graph_45.map delete mode 100644 html/inherit_graph_45.md5 delete mode 100644 html/inherit_graph_45.png delete mode 100644 html/inherit_graph_46.map delete mode 100644 html/inherit_graph_46.md5 delete mode 100644 html/inherit_graph_46.png delete mode 100644 html/inherit_graph_47.map delete mode 100644 html/inherit_graph_47.md5 delete mode 100644 html/inherit_graph_47.png delete mode 100644 html/inherit_graph_48.map delete mode 100644 html/inherit_graph_48.md5 delete mode 100644 html/inherit_graph_48.png delete mode 100644 html/inherit_graph_49.map delete mode 100644 html/inherit_graph_49.md5 delete mode 100644 html/inherit_graph_49.png delete mode 100644 html/inherit_graph_5.map delete mode 100644 html/inherit_graph_5.md5 delete mode 100644 html/inherit_graph_5.png delete mode 100644 html/inherit_graph_50.map delete mode 100644 html/inherit_graph_50.md5 delete mode 100644 html/inherit_graph_50.png delete mode 100644 html/inherit_graph_51.map delete mode 100644 html/inherit_graph_51.md5 delete mode 100644 html/inherit_graph_51.png delete mode 100644 html/inherit_graph_52.map delete mode 100644 html/inherit_graph_52.md5 delete mode 100644 html/inherit_graph_52.png delete mode 100644 html/inherit_graph_53.map delete mode 100644 html/inherit_graph_53.md5 delete mode 100644 html/inherit_graph_53.png delete mode 100644 html/inherit_graph_54.map delete mode 100644 html/inherit_graph_54.md5 delete mode 100644 html/inherit_graph_54.png delete mode 100644 html/inherit_graph_55.map delete mode 100644 html/inherit_graph_55.md5 delete mode 100644 html/inherit_graph_55.png delete mode 100644 html/inherit_graph_56.map delete mode 100644 html/inherit_graph_56.md5 delete mode 100644 html/inherit_graph_56.png delete mode 100644 html/inherit_graph_57.map delete mode 100644 html/inherit_graph_57.md5 delete mode 100644 html/inherit_graph_57.png delete mode 100644 html/inherit_graph_58.map delete mode 100644 html/inherit_graph_58.md5 delete mode 100644 html/inherit_graph_58.png delete mode 100644 html/inherit_graph_59.map delete mode 100644 html/inherit_graph_59.md5 delete mode 100644 html/inherit_graph_59.png delete mode 100644 html/inherit_graph_6.map delete mode 100644 html/inherit_graph_6.md5 delete mode 100644 html/inherit_graph_6.png delete mode 100644 html/inherit_graph_60.map delete mode 100644 html/inherit_graph_60.md5 delete mode 100644 html/inherit_graph_60.png delete mode 100644 html/inherit_graph_61.map delete mode 100644 html/inherit_graph_61.md5 delete mode 100644 html/inherit_graph_61.png delete mode 100644 html/inherit_graph_62.map delete mode 100644 html/inherit_graph_62.md5 delete mode 100644 html/inherit_graph_62.png delete mode 100644 html/inherit_graph_7.map delete mode 100644 html/inherit_graph_7.md5 delete mode 100644 html/inherit_graph_7.png delete mode 100644 html/inherit_graph_8.map delete mode 100644 html/inherit_graph_8.md5 delete mode 100644 html/inherit_graph_8.png delete mode 100644 html/inherit_graph_9.map delete mode 100644 html/inherit_graph_9.md5 delete mode 100644 html/inherit_graph_9.png delete mode 100644 html/inherits.html delete mode 100644 html/jquery.js delete mode 100644 html/main__page_8doxygen_source.html delete mode 100644 html/media__types_8h_source.html delete mode 100644 html/menu.js delete mode 100644 html/menudata.js delete mode 100644 html/mime__util_8cc_source.html delete mode 100644 html/mime__util_8h_source.html delete mode 100644 html/modules.html delete mode 100644 html/modules.js delete mode 100644 html/namespacelibdap.html delete mode 100644 html/namespacelibdap.js delete mode 100644 html/namespacemembers.html delete mode 100644 html/namespacemembers_enum.html delete mode 100644 html/namespacemembers_func.html delete mode 100644 html/namespacemembers_type.html delete mode 100644 html/namespaces.html delete mode 100644 html/namespaces.js delete mode 100644 html/nav_f.png delete mode 100644 html/nav_g.png delete mode 100644 html/nav_h.png delete mode 100644 html/navtree.css delete mode 100644 html/navtree.js delete mode 100644 html/navtreedata.js delete mode 100644 html/navtreeindex0.js delete mode 100644 html/navtreeindex1.js delete mode 100644 html/navtreeindex10.js delete mode 100644 html/navtreeindex11.js delete mode 100644 html/navtreeindex12.js delete mode 100644 html/navtreeindex13.js delete mode 100644 html/navtreeindex14.js delete mode 100644 html/navtreeindex15.js delete mode 100644 html/navtreeindex16.js delete mode 100644 html/navtreeindex17.js delete mode 100644 html/navtreeindex2.js delete mode 100644 html/navtreeindex3.js delete mode 100644 html/navtreeindex4.js delete mode 100644 html/navtreeindex5.js delete mode 100644 html/navtreeindex6.js delete mode 100644 html/navtreeindex7.js delete mode 100644 html/navtreeindex8.js delete mode 100644 html/navtreeindex9.js delete mode 100644 html/open.png delete mode 100644 html/pages.html delete mode 100644 html/parser-util_8cc_source.html delete mode 100644 html/parser-util_8h_source.html delete mode 100644 html/parser_8h_source.html delete mode 100644 html/regex__test_8cc_source.html delete mode 100644 html/resize.js delete mode 100644 html/splitbar.png delete mode 100644 html/structfunctions_1_1gse__arg-members.html delete mode 100644 html/structfunctions_1_1gse__arg.html delete mode 100644 html/structfunctions_1_1gse__arg.js delete mode 100644 html/structlibdap_1_1Array_1_1dimension-members.html delete mode 100644 html/structlibdap_1_1Array_1_1dimension.html delete mode 100644 html/structlibdap_1_1Array_1_1dimension.js delete mode 100644 html/structlibdap_1_1AttrTable_1_1entry-members.html delete mode 100644 html/structlibdap_1_1AttrTable_1_1entry.html delete mode 100644 html/structlibdap_1_1AttrTable_1_1entry.js delete mode 100644 html/structlibdap_1_1Clause-members.html delete mode 100644 html/structlibdap_1_1Clause.html delete mode 100644 html/structlibdap_1_1Clause.js delete mode 100644 html/structlibdap_1_1HTTPCacheTable_1_1CacheEntry-members.html delete mode 100644 html/structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html delete mode 100644 html/structlibdap_1_1HTTPCacheTable_1_1CacheEntry.js delete mode 100644 html/structlibdap_1_1cache__entry-members.html delete mode 100644 html/structlibdap_1_1cache__entry.html delete mode 100644 html/structlibdap_1_1cache__entry.js delete mode 100644 html/structlibdap_1_1ce__parser__arg-members.html delete mode 100644 html/structlibdap_1_1ce__parser__arg.html delete mode 100644 html/structlibdap_1_1ce__parser__arg.js delete mode 100644 html/structlibdap_1_1parser__arg-members.html delete mode 100644 html/structlibdap_1_1parser__arg.html delete mode 100644 html/structlibdap_1_1parser__arg.js delete mode 100644 html/sync_off.png delete mode 100644 html/sync_on.png delete mode 100644 html/tab_a.png delete mode 100644 html/tab_b.png delete mode 100644 html/tab_h.png delete mode 100644 html/tab_s.png delete mode 100644 html/tabs.css delete mode 100644 html/todo.html delete mode 100644 html/util_8cc_source.html delete mode 100644 html/util_8h_source.html delete mode 100644 html/util__mit_8cc_source.html delete mode 100644 html/util__mit_8h_source.html delete mode 100644 html/warn-on-use_8h_source.html delete mode 100644 html/xdr-datatypes-config_8h_source.html delete mode 100644 html/xdr-datatypes-static_8h_source.html delete mode 100644 html/xdr-datatypes_8h_source.html rename HTTPCache.cc => http_dap/HTTPCache.cc (100%) rename HTTPCache.h => http_dap/HTTPCache.h (99%) rename HTTPCacheDisconnectedMode.h => http_dap/HTTPCacheDisconnectedMode.h (100%) rename HTTPCacheInterruptHandler.h => http_dap/HTTPCacheInterruptHandler.h (100%) rename HTTPCacheMacros.h => http_dap/HTTPCacheMacros.h (100%) rename HTTPCacheResponse.h => http_dap/HTTPCacheResponse.h (100%) rename HTTPCacheTable.cc => http_dap/HTTPCacheTable.cc (100%) rename HTTPCacheTable.h => http_dap/HTTPCacheTable.h (100%) rename HTTPConnect.cc => http_dap/HTTPConnect.cc (100%) rename HTTPConnect.h => http_dap/HTTPConnect.h (99%) rename HTTPResponse.h => http_dap/HTTPResponse.h (100%) create mode 100644 http_dap/Makefile.am rename ResponseTooBigErr.cc => http_dap/ResponseTooBigErr.cc (95%) rename ResponseTooBigErr.h => http_dap/ResponseTooBigErr.h (100%) rename PipeResponse.h => old/PipeResponse.h (100%) diff --git a/Makefile.am b/Makefile.am index bf19ea0c3..7086f59c2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,4 +1,3 @@ -# Build libdap, libtest-types.a, getdap, getdap4 AUTOMAKE_OPTIONS = foreign check-news subdir-objects ACLOCAL_AMFLAGS = -I conf -I gl/m4 @@ -6,7 +5,8 @@ ACLOCAL_AMFLAGS = -I conf -I gl/m4 aclocaldir=$(datadir)/aclocal pkgconfigdir=$(libdir)/pkgconfig -AM_CPPFLAGS = -I$(top_builddir)/gl -I$(top_srcdir)/gl -I$(top_srcdir)/GNU $(XML2_CFLAGS) $(TIRPC_CFLAGS) +AM_CPPFLAGS = -I$(top_builddir)/gl -I$(top_srcdir)/gl -I$(top_srcdir)/GNU \ + $(XML2_CFLAGS) $(TIRPC_CFLAGS) AM_CXXFLAGS = $(CXX_STD_FLAG) -Wall -W -Wcast-align -Wno-deprecated-register -Wno-inconsistent-missing-override CXXFLAGS_DEBUG = -g3 -O0 @@ -27,8 +27,8 @@ endif AM_LDFLAGS = include $(top_srcdir)/coverage.mk -SUBDIRS = gl d4_ce d4_function . unit-tests tests -DIST_SUBDIRS = gl d4_ce d4_function unit-tests tests +SUBDIRS = gl d4_ce d4_function http_dap . unit-tests tests +# DIST_SUBDIRS = gl d4_ce d4_function http_da unit-tests tests noinst_LTLIBRARIES = libparsers.la @@ -59,10 +59,10 @@ libdap_la_CPPFLAGS = $(AM_CPPFLAGS) libdap_la_LIBADD = $(XML2_LIBS) $(PTHREAD_LIBS) gl/libgnu.la d4_ce/libd4_ce_parser.la \ d4_function/libd4_function_parser.la libparsers.la $(CRYPTO_LIBS) -libdapclient_la_SOURCES = $(CLIENT_SRC) $(DAP4_CLIENT_HDR) $(DAP4_CLIENT_SRC) +libdapclient_la_SOURCES = $(CLIENT_SRC) $(DAP4_CLIENT_HDR) libdapclient_la_LDFLAGS = -version-info $(CLIENTLIB_VERSION) -libdapclient_la_CPPFLAGS = $(AM_CPPFLAGS) $(CURL_CFLAGS) -libdapclient_la_LIBADD = $(CURL_LIBS) libdap.la $(PTHREAD_LIBS) +libdapclient_la_CPPFLAGS = $(AM_CPPFLAGS) $(CURL_CFLAGS) -I$(top_srcdir)/http_dap +libdapclient_la_LIBADD = $(CURL_LIBS) libdap.la http_dap/libhttp_dap.la $(PTHREAD_LIBS) libdapserver_la_SOURCES = $(SERVER_SRC) libdapserver_la_LDFLAGS = -version-info $(SERVERLIB_VERSION) @@ -74,11 +74,11 @@ noinst_HEADERS = config_dap.h getdap_SOURCES = getdap.cc getdap_LDADD = libdapclient.la libdap.la -getdap_CPPFLAGS = $(AM_CPPFLAGS) $(CURL_CFLAGS) +getdap_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_srcdir)/http_dap $(CURL_CFLAGS) getdap4_SOURCES = getdap4.cc getdap4_LDADD = libdapclient.la libdap.la -getdap4_CPPFLAGS = $(AM_CPPFLAGS) $(CURL_CFLAGS) +getdap4_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_srcdir)/http_dap $(CURL_CFLAGS) LEX_YACC_EXTRA = das.lex das.yy dds.lex dds.yy ce_expr.lex ce_expr.yy \ Error.lex Error.yy @@ -110,15 +110,6 @@ docs: ${DOXYGEN_CONF} gh-docs: ./build-gh-docs.sh -# Build a compile_commands.json.tmp file for use with CLion. This will enable -# reasonable use for all the source that's compiled using either 'all' or -# 'check' but other targets will have to be added by hand. See the compiledb -# github site (https://github.com/nickdiego/compiledb) for more info. -# jhrg 9/25/19 -.PHONY: compiledb -compiledb: - make -nwk all check | compiledb - # cccc computes metrics like Lines of code and McCabe. It's available # on the web... .PHONY: cccc @@ -189,10 +180,9 @@ Operators.h: ce_expr.tab.hh # Operators.h is included in with the source to prevent it from bing installed # with the other headers. It includes one of the built grammar file headers. -CLIENT_SRC = RCReader.cc Connect.cc HTTPConnect.cc HTTPCache.cc \ - util_mit.cc ResponseTooBigErr.cc HTTPCacheTable.cc +CLIENT_SRC = RCReader.cc Connect.cc D4Connect.cc util_mit.cc -DAP4_CLIENT_SRC = D4Connect.cc +# HTTPCacheTable.cc HTTPConnect.cc HTTPCache.cc ResponseTooBigErr.cc SERVER_SRC = DODSFilter.cc Ancillary.cc # ResponseBuilder.cc ResponseCache.cc @@ -230,15 +220,16 @@ endif xdr-datatypes.h: xdr-datatypes-config.h cp -p $< xdr-datatypes.h -CLIENT_HDR = RCReader.h Connect.h HTTPConnect.h HTTPCache.h \ - HTTPCacheDisconnectedMode.h HTTPCacheInterruptHandler.h \ - Response.h HTTPResponse.h HTTPCacheResponse.h PipeResponse.h \ - StdinResponse.h SignalHandlerRegisteredErr.h \ - ResponseTooBigErr.h Resource.h HTTPCacheTable.h HTTPCacheMacros.h +CLIENT_HDR = RCReader.h Connect.h Resource.h D4Connect.h Response.h \ + StdinResponse.h SignalHandlerRegisteredErr.h -DAP4_CLIENT_HDR = D4Connect.h +# Removed jhrg 2/13/23 PipeResponse.h HTTPConnect.h HTTPCache.h +# HTTPCacheDisconnectedMode.h HTTPCacheInterruptHandler.h +# HTTPResponse.h HTTPCacheResponse.h +# ResponseTooBigErr.h HTTPCacheTable.h HTTPCacheMacros.h SERVER_HDR = DODSFilter.h AlarmHandler.h EventHandler.h Ancillary.h + # ResponseBuilder.h ResponseCache.h ############################################################################ diff --git a/Response.h b/Response.h index 4a90757cc..94b4d1081 100644 --- a/Response.h +++ b/Response.h @@ -68,10 +68,10 @@ class Response protected: /** @name Suppressed default methods */ - //@{ + /// @{ Response(const Response &); Response &operator=(const Response &); - //@} + /// @} public: Response() : d_stream(0), d_cpp_stream(0), d_type(unknown_type), d_version("dods/0.0"), d_protocol("2.0"), @@ -101,7 +101,7 @@ class Response } /** @name getters */ - //@{ + ///@{ virtual int get_status() const { return d_status; } virtual FILE *get_stream() const { return d_stream; } virtual std::istream *get_cpp_stream() const { return d_cpp_stream; } @@ -109,10 +109,10 @@ class Response virtual ObjectType get_type() const { return d_type; } virtual std::string get_version() const { return d_version; } virtual std::string get_protocol() const { return d_protocol; } - //@} + ///@} /** @name setters */ - //@{ + ///@{ virtual void set_status(int s) { d_status = s; } virtual void set_stream(FILE *s) { d_stream = s; } @@ -121,7 +121,7 @@ class Response virtual void set_type(ObjectType o) { d_type = o; } virtual void set_version(const std::string &v) { d_version = v; } virtual void set_protocol(const std::string &p) { d_protocol = p; } - //@} + ///@} }; } // namespace libdap diff --git a/conf/ax_check_compile_flag.m4 b/conf/unused/ax_check_compile_flag.m4 similarity index 100% rename from conf/ax_check_compile_flag.m4 rename to conf/unused/ax_check_compile_flag.m4 diff --git a/conf/ax_valgrind_check.m4 b/conf/unused/ax_valgrind_check.m4 similarity index 100% rename from conf/ax_valgrind_check.m4 rename to conf/unused/ax_valgrind_check.m4 diff --git a/conf/gcov_valgrind.m4 b/conf/unused/gcov_valgrind.m4 similarity index 100% rename from conf/gcov_valgrind.m4 rename to conf/unused/gcov_valgrind.m4 diff --git a/configure.ac b/configure.ac index f42adec27..4dcb4bd87 100644 --- a/configure.ac +++ b/configure.ac @@ -2,11 +2,7 @@ dnl -*- autoconf -*- dnl Process this file with autoconf to produce a configure script. -AC_PREREQ(2.63) - -dnl AC_PREREQ([2.68]); Fails on CentOS 6. jhrg 3/26/19 -dnl m4_pattern_forbid([^_?(gl_[A-Z]|AX_|BISON_)]) -dnl m4_pattern_allow([^BISON_USE_NLS$]) +AC_PREREQ([2.71]) dnl Set the version number here. Set the build number using --with-build dnl The version info is put in the VERSION file. The build number is used @@ -15,7 +11,7 @@ dnl 'pc' files and tarball for the source. See dnl libdap4/travis/travis_libdap_build_offset.sh for info about setting the dnl base value for the build number. jhrg 3/22/21 -AC_INIT(libdap, 3.20.11, opendap-tech@opendap.org) +AC_INIT([libdap],[3.20.11],[opendap-tech@opendap.org]) dnl As an alternative, we can... dnl Read the version number from the file VERSION. The file must contain @@ -26,7 +22,7 @@ dnl But, this requires that the NEWS file have the version number AND build dnl number somewhere in the first 15 lines or the dist target will fail. dnl jhrg 3/17/21 dnl https://stackoverflow.com/questions/8559456/read-a-version-number-from-a-file-in-configure-ac -dnl AC_INIT([libdap], m4_normalize(m4_include([VERSION])), [opendap-tech@opendap.org]) +dnl AC_INIT([libdap],[m4_normalize(m4_include(VERSION))],[opendap-tech@opendap.org]) dnl Provide a way to pass in a build number. This is used by CI/CD systems to record dnl each build. The version number is set by the value in AC_INIT (see above). For @@ -34,8 +30,7 @@ dnl people building the source, it's not customary to supply a build number (i.e dnl if you're building the code for your own use, a build number seems like overkill). dnl jhrg 3/16/21 AC_ARG_WITH([build], - [AC_HELP_STRING([--with-build=], - [Inject the integer build number (default is to not define a build number)])], + [AS_HELP_STRING([--with-build=],[Inject the integer build number (default is to not define a build number)])], [build_number=${withval}], [build_number=]) dnl If a build number is given and valid (it must be an integer), use it. If it's @@ -151,14 +146,10 @@ AC_PROG_CC dnl Call this gnulib macro right after a working C Compiler is found gl_EARLY -dnl echo "CC = $CC" AS_IF([test "x$CC" = xgcc], [AM_CONDITIONAL([COMPILER_IS_GCC],[true])], [AM_CONDITIONAL([COMPILER_IS_GCC],[false])]) -dnl AC_PROG_YACC -dnl AC_PROG_LEX - dnl Here we test for both C++11 and 14, but our code nominally requires 14. dnl We can use the C++11 test and CXX_STD_FLAG to build with 11 if we add a dnl compatibility layer for the missing features. jhrg 1/30/23. @@ -176,11 +167,11 @@ AS_IF([test -z "$CXX_STD_FLAG"], AC_SUBST(CXX_STD_FLAG) -AM_PROG_LEX +AM_PROG_LEX(noyywrap) AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_MAKE_SET -AC_PROG_LIBTOOL +LT_INIT dnl We really need bison and not yacc. If you use AC_PROG_YACC, the resulting dnl Makefile will call bison -y which doesn't know how to make the parsers @@ -197,11 +188,11 @@ AS_VERSION_COMPARE(["$bison_version"], ["3.0"], [ ], [ ]) -AC_MSG_RESULT([found vesion $bison_version]) +AC_MSG_RESULT([found version $bison_version]) dnl Checks for header files. AC_HEADER_DIRENT -AC_HEADER_STDC + AC_HEADER_SYS_WAIT AC_CHECK_HEADERS_ONCE([fcntl.h malloc.h memory.h stddef.h stdlib.h string.h strings.h unistd.h pthread.h]) @@ -219,7 +210,7 @@ AC_C_CONST AC_C_INLINE AC_TYPE_SIZE_T AC_CHECK_MEMBERS([struct stat.st_blksize]) -AC_HEADER_TIME + AC_STRUCT_TM AC_C_VOLATILE AC_C_BIGENDIAN @@ -233,8 +224,7 @@ AC_SUBST([ac_word_order]) DODS_CHECK_SIZES AC_ARG_ENABLE([runtime-endian-check], - [AC_HELP_STRING([--enable-runtime-endian-check], - [Enable runtime tests for big- or little-endian byte order (default is NO)])]) + [AS_HELP_STRING([--enable-runtime-endian-check],[Enable runtime tests for big- or little-endian byte order (default is NO)])]) AS_IF([test "x$enable_runtime_endian_check" = "xyes"], [ dnl Do the stuff needed for enabling the feature @@ -252,7 +242,7 @@ gl_MODULES(regex btyeswap) gl_INIT -AC_ARG_WITH([curl], [AC_HELP_STRING([--with-curl=pfx], [curl/libcurl prefix; overrides other tests including pkgconfig])], +AC_ARG_WITH([curl], [AS_HELP_STRING([--with-curl=pfx],[curl/libcurl prefix; overrides other tests including pkgconfig])], with_curl_prefix="$withval", with_curl_prefix="") dnl I wrote these checks because we need the *-config scripts to build, so @@ -317,8 +307,7 @@ dnl ******** new version, breaks the bes package step ******** dnl jhrg 8/31/20 dnl dnl AC_ARG_WITH(xml2, -dnl [AC_HELP_STRING([--with-xml2=PFX], -dnl [Prefix where libxml2 is installed (optional). This will override pkgconfig, etc.])], +dnl [AS_HELP_STRING([--with-xml2=PFX],[dnl Prefix where libxml2 is installed (optional). This will override pkgconfig, etc.])], dnl [with_xml2_prefix="$withval"], dnl [with_xml2_prefix=""]) dnl @@ -584,6 +573,8 @@ AC_CONFIG_FILES([Makefile gl/Makefile d4_ce/Makefile d4_function/Makefile + + http_dap/Makefile tests/Makefile tests/atlocal diff --git a/doxy.conf.in b/doxy.conf.in index de8cdd7bc..afba762f8 100644 --- a/doxy.conf.in +++ b/doxy.conf.in @@ -416,8 +416,8 @@ LOOKUP_CACHE_SIZE = 0 # normally produced when WARNINGS is set to YES. # The default value is: NO. -EXTRACT_ALL = NO -# EXTRACT_ALL = YES +# EXTRACT_ALL = NO +EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will # be included in the documentation. @@ -2218,7 +2218,7 @@ CLASS_GRAPH = YES # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. -COLLABORATION_GRAPH = NO +COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for # groups, showing the direct groups dependencies. @@ -2389,7 +2389,7 @@ PLANTUML_INCLUDE_PATH = # Minimum value: 0, maximum value: 10000, default value: 50. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_GRAPH_MAX_NODES = 50 +DOT_GRAPH_MAX_NODES = 200 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs # generated by dot. A depth value of 3 means that only nodes reachable from the diff --git a/html/AISConnect_8cc_source.html b/html/AISConnect_8cc_source.html deleted file mode 100644 index f883c8800..000000000 --- a/html/AISConnect_8cc_source.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -libdap: AISConnect.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
AISConnect.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #include "config.h"
27 
28 #include "AISConnect.h"
29 
30 namespace libdap {
31 
40 AISConnect::AISConnect(const string &name) throw(AISDatabaseReadFailed)
41  : Connect(name), d_ais_merge(0)
42 {
43  const string &ais_db = RCReader::instance()->get_ais_database();
44  if (ais_db != "")
45  d_ais_merge = new AISMerge(ais_db);
46 }
47 
57 AISConnect::AISConnect(const string &name, const string &ais)
59  : Connect(name), d_ais_merge(0)
60 {
61  d_ais_merge = new AISMerge(ais);
62 }
63 
66 {
67  delete d_ais_merge; d_ais_merge = 0;
68 }
69 
78 void
80 {
82 
83  if (d_ais_merge)
84  d_ais_merge->merge(URL(false), das); // URL(false) --> URL w/o CE
85 }
86 
87 } // namespace libdap
virtual string URL(bool CE=true)
Get the object&#39;s URL.
Definition: Connect.cc:1127
- -
virtual void request_das(DAS &das)
Definition: AISConnect.cc:79
-
Holds information about the link from a DAP2 client to a dataset.
Definition: Connect.h:129
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual void merge(const string &primary, DAS &das)
Definition: AISMerge.cc:82
-
Merge AIS resources.
Definition: AISMerge.h:64
-
virtual void request_das(DAS &das)
Get the DAS from a server.
Definition: Connect.cc:430
-
Hold attribute data for a DAP2 dataset.
Definition: DAS.h:121
-
virtual ~AISConnect()
Definition: AISConnect.cc:65
-
-
- - - - diff --git a/html/AISConnect_8h_source.html b/html/AISConnect_8h_source.html deleted file mode 100644 index 3bd10bff6..000000000 --- a/html/AISConnect_8h_source.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -libdap: AISConnect.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
AISConnect.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef ais_connect_h
27 #define ais_connect_h
28 
29 #ifndef _connect_h
30 #include "Connect.h"
31 #endif
32 
33 #ifndef ais_merge_h
34 #include "AISMerge.h"
35 #endif
36 
37 #ifndef ais_exceptions_h
38 #include "AISExceptions.h"
39 #endif
40 
41 namespace libdap
42 {
43 
45 class AISConnect: public Connect
46 {
47 private:
48  AISMerge *d_ais_merge;
49 
50 protected:
53  AISConnect(): d_ais_merge(0)
54  {}
55  AISConnect(const AISConnect &ac) :Connect(ac), d_ais_merge(0)
56  {}
58 
59 public:
60  AISConnect(const string &name) throw(AISDatabaseReadFailed);
61  AISConnect(const string &name, const string &ais_db)
62  throw(AISDatabaseReadFailed);
63 
64  virtual ~AISConnect();
65 
66  virtual void request_das(DAS &das);
67 };
68 
69 } // namespace libdap
70 
71 #endif // ais_connect_h
- -
virtual void request_das(DAS &das)
Definition: AISConnect.cc:79
-
Holds information about the link from a DAP2 client to a dataset.
Definition: Connect.h:129
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
Merge AIS resources.
Definition: AISMerge.h:64
-
Hold attribute data for a DAP2 dataset.
Definition: DAS.h:121
-
virtual ~AISConnect()
Definition: AISConnect.cc:65
-
-
- - - - diff --git a/html/AISDatabaseParser_8cc_source.html b/html/AISDatabaseParser_8cc_source.html deleted file mode 100644 index c4d0b30aa..000000000 --- a/html/AISDatabaseParser_8cc_source.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - -libdap: AISDatabaseParser.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
AISDatabaseParser.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #include "config.h"
27 
28 #include <cstring>
29 #include <stdarg.h>
30 
31 #if 0
32 // Removed for VC 2008 compatibility. jhrg 4/23/08
33 #ifdef WIN32
34 #define vsnprintf _vsnprintf
35 #endif
36 #endif
37 
38 #include "AISDatabaseParser.h"
39 #include "util.h"
40 #include "debug.h"
41 
42 using namespace std;
43 
44 namespace libdap {
45 
46 static const not_used char *states[] =
47  {
48  "START",
49  "FINISH",
50  "AIS",
51  "ENTRY",
52  "PRIMARY",
53  "ANCILLARY",
54  "UNKNOWN",
55  "ERROR"
56  };
57 
64 
68 void
69 AISDatabaseParser::aisStartDocument(AISParserState *state)
70 {
71  state->state = PARSER_START;
72  state->unknown_depth = 0;
73  state->prev_state = PARSER_UNKNOWN;
74  state->error_msg = "";
75 
76  DBG2(cerr << "Parser state: " << states[state->state] << endl);
77 }
78 
81 void
82 AISDatabaseParser::aisEndDocument(AISParserState *state)
83 {
84  DBG2(cerr << "Ending state == " << states[state->state] << endl);
85 
86  if (state->unknown_depth != 0) {
87  AISDatabaseParser::aisFatalError(state, "The document contained unbalanced tags.");
88 
89  DBG(cerr << "unknown_depth != 0 (" << state->unknown_depth << ")"
90  << endl);
91  }
92 }
93 
102 void
103 AISDatabaseParser::aisStartElement(AISParserState *state, const char *name,
104  const char **attrs)
105 {
106  switch (state->state) {
107  case PARSER_START:
108  if (strcmp(name, "ais") != 0) {
109  DBG(cerr << "Expecting ais. Got " << name << endl);
110  }
111  state->state = AIS;
112  break;
113 
114  case PARSER_FINISH:
115  break;
116 
117  case AIS:
118  if (strcmp(name, "entry") == 0) {
119  state->prev_state = state->state;
120  state->state = ENTRY;
121  }
122  else {
123  state->prev_state = state->state;
124  state->state = PARSER_UNKNOWN;
125  state->unknown_depth++;
126  }
127  break;
128 
129  case ENTRY:
130  if (strcmp(name, "primary") == 0) {
131  state->prev_state = state->state;
132  state->state = PRIMARY;
133 
134  if (attrs) {
135  if (strcmp(attrs[0], "url") == 0) {
136  state->regexp = false;
137  state->primary = attrs[1];
138  }
139  else if (strcmp(attrs[0], "regexp") == 0) {
140  state->regexp = true;
141  state->primary = attrs[1];
142  }
143  }
144  else {
145  AISDatabaseParser::aisFatalError(state, "Required attribute 'url' or 'regexp' missing from element 'primary'.");
146  break;
147  }
148  }
149  else if (strcmp(name, "ancillary") == 0) {
150  state->prev_state = state->state;
151  state->state = ANCILLARY;
152 
153  string url = ""; // set defaults, MUST have url
154  string rule = "overwrite";
155  for (int i = 0; attrs && attrs[i] != 0; i = i + 2) {
156  if (strcmp(attrs[i], "url") == 0)
157  url = attrs[i+1];
158  else if (strcmp(attrs[i], "rule") == 0)
159  rule = attrs[i+1];
160  }
161 
162  // If this parser validated the XML, these tests would be
163  // unnecessary.
164  if (url == "") {
165  AISDatabaseParser::aisFatalError(state, "Required attribute 'url' missing from element 'ancillary'.");
166  break;
167  }
168 
169  if (rule != "overwrite" && rule != "replace" && rule != "fallback") {
170  string msg = string("Optional attribute 'rule' in element 'ancillary' has a bad value: ") + rule + "\nIt should be one of 'overwrite', 'replace' or 'fallback'.";
171  AISDatabaseParser::aisFatalError(state, msg.c_str());
172  break;
173  }
174 
175  Resource r(url, rule);
176  state->rv.push_back(r);
177  }
178  else {
179  state->prev_state = state->state;
180  state->state = PARSER_UNKNOWN;
181  state->unknown_depth++;
182  }
183  break;
184 
185  case PRIMARY:
186  break;
187 
188  case ANCILLARY:
189  break;
190 
191  case PARSER_UNKNOWN:
192  state->unknown_depth++;
193  break;
194 
195  case PARSER_ERROR:
196  break;
197  }
198 
199  DBG2(cerr << "Start element " << name << " (state "
200  << states[state->state] << ")" << endl);
201 }
202 
208 // Although not used in the method itself, name is used in the DBG2
209 // statement, so we need the parameter name. - pcw 07/08/08
210 void
211 AISDatabaseParser::aisEndElement(AISParserState *state, const char */*name*/)
212 {
213  DBG2(cerr << "End element: state " << states[state->state] << endl);
214 
215  switch (state->state) {
216  case AIS:
217  state->prev_state = state->state;
218  state->state = PARSER_FINISH;
219  break;
220 
221  case ENTRY:
222  state->prev_state = state->state;
223  state->state = AIS;
224 
225  // record 'primary' and 'rv'
226  if (state->regexp)
227  state->ais->add_regexp_resource(state->primary, state->rv);
228  else
229  state->ais->add_url_resource(state->primary, state->rv);
230 
231  // empty rv for the next set of ancillary resources.
232  state->rv.erase(state->rv.begin(), state->rv.end());
233  break;
234 
235  case PRIMARY:
236  state->prev_state = state->state;
237  state->state = ENTRY;
238  break;
239 
240  case ANCILLARY:
241  state->prev_state = state->state;
242  state->state = ENTRY;
243  break;
244 
245  case PARSER_UNKNOWN:
246  // Leave the state and prev_state alone.
247  state->unknown_depth--;
248  break;
249 
250  case PARSER_ERROR:
251  break;
252 
253  default:
254  break;
255  }
256 }
257 
261 xmlEntityPtr
262 AISDatabaseParser::aisGetEntity(AISParserState *, const xmlChar *name)
263 {
264  return xmlGetPredefinedEntity(name);
265 }
266 
271 void
272 AISDatabaseParser::aisWarning(AISParserState *state, const char *msg, ...)
273 {
274  va_list args;
275 
276  state->state = PARSER_ERROR;
277 
278  va_start(args, msg);
279  char str[1024];
280  vsnprintf(str, 1024, msg, args);
281  va_end(args);
282 
283 #ifdef LIBXML2_6_16
284  // Defined if libxml2 >= 2.6.16
285  int line = xmlSAX2GetLineNumber(state->ctxt);
286 #else
287  int line = getLineNumber(state->ctxt);
288 #endif
289  state->error_msg += "At line: " + long_to_string(line) + ": ";
290  state->error_msg += string(str) + string("\n");
291 }
292 
297 void
298 AISDatabaseParser::aisError(AISParserState *state, const char *msg, ...)
299 {
300  va_list args;
301 
302  state->state = PARSER_ERROR;
303 
304  va_start(args, msg);
305  char str[1024];
306  vsnprintf(str, 1024, msg, args);
307  va_end(args);
308 
309 #ifdef LIBXML2_6_16
310  // Defined if libxml2 >= 2.6.16
311  int line = xmlSAX2GetLineNumber(state->ctxt);
312 #else
313  int line = getLineNumber(state->ctxt);
314 #endif
315  state->error_msg += "At line: " + long_to_string(line) + ": ";
316  state->error_msg += string(str) + string("\n");
317 }
318 
322 void
323 AISDatabaseParser::aisFatalError(AISParserState *state, const char *msg, ...)
324 {
325  va_list args;
326 
327  state->state = PARSER_ERROR;
328 
329  va_start(args, msg);
330  char str[1024];
331  vsnprintf(str, 1024, msg, args);
332  va_end(args);
333 
334 #ifdef LIBXML2_6_16
335  // Defined if libxml2 >= 2.6.16
336  int line = xmlSAX2GetLineNumber(state->ctxt);
337 #else
338  int line = getLineNumber(state->ctxt);
339 #endif
340  state->error_msg += "At line: " + long_to_string(line) + ": ";
341  state->error_msg += string(str) + string("\n");
342 }
343 
345 
348 static xmlSAXHandler aisSAXParser =
349  {
350  0, // internalSubset
351  0, // isStandalone
352  0, // hasInternalSubset
353  0, // hasExternalSubset
354  0, // resolveEntity
355  (getEntitySAXFunc)AISDatabaseParser::aisGetEntity, // getEntity
356  0, // entityDecl
357  0, // notationDecl
358  0, // attributeDecl
359  0, // elementDecl
360  0, // unparsedEntityDecl
361  0, // setDocumentLocator
362  (startDocumentSAXFunc)AISDatabaseParser::aisStartDocument, // startDocument
363  (endDocumentSAXFunc)AISDatabaseParser::aisEndDocument, // endDocument
364  (startElementSAXFunc)AISDatabaseParser::aisStartElement, // startElement
365  (endElementSAXFunc)AISDatabaseParser::aisEndElement, // endElement
366  0, // reference
367  0, // (charactersSAXFunc)gladeCharacters, characters
368  0, // ignorableWhitespace
369  0, // processingInstruction
370  0, // (commentSAXFunc)gladeComment, comment
371  (warningSAXFunc)AISDatabaseParser::aisWarning, // warning
372  (errorSAXFunc)AISDatabaseParser::aisError, // error
373  (fatalErrorSAXFunc)AISDatabaseParser::aisFatalError, // fatalError
374 #ifdef LIBXML2_5_10
375  0, // getParameterEntity
376  0, // cdataBlock
377  0, // externalSubset
378  0, // initialized
379 #endif
380 #ifdef LIBXML2_6_16
381  0, // _private
382  0, // endElementNs
383  0, // serror
384  0 // startElementNs
385 #endif
386  };
387 
394 void
395 AISDatabaseParser::intern(const string &database, AISResources *ais)
396 {
397  xmlParserCtxtPtr ctxt;
398  AISParserState state;
399 
400  ctxt = xmlCreateFileParserCtxt(database.c_str());
401  if (!ctxt)
402  return;
403 
404  state.ais = ais; // dump values here
405  state.ctxt = ctxt; // need ctxt for error messages
406 
407  ctxt->sax = &aisSAXParser;
408  ctxt->userData = &state;
409  ctxt->validate = true;
410 
411  xmlParseDocument(ctxt);
412 
413  // use getLineNumber and getColumnNumber to make the error messages better.
414  if (!ctxt->wellFormed) {
415  ctxt->sax = NULL;
416  xmlFreeParserCtxt(ctxt);
417  throw AISDatabaseReadFailed(string("\nThe database is not a well formed XML document.\n") + state.error_msg);
418  }
419 
420  if (!ctxt->valid) {
421  ctxt->sax = NULL;
422  xmlFreeParserCtxt(ctxt);
423  throw AISDatabaseReadFailed(string("\nThe database is not a valid document.\n") + state.error_msg);
424  }
425 
426  if (state.state == PARSER_ERROR) {
427  ctxt->sax = NULL;
428  xmlFreeParserCtxt(ctxt);
429  throw AISDatabaseReadFailed(string("\nError parsing AIS resources.\n") + state.error_msg);
430  }
431 
432  ctxt->sax = NULL;
433  xmlFreeParserCtxt(ctxt);
434 }
435 
436 } // namespace libdap
Manage AIS resources.
Definition: AISResources.h:70
- -
STL namespace.
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
Associate a rule with an ancillary resource.
Definition: Resource.h:50
-
-
- - - - diff --git a/html/AISDatabaseParser_8h_source.html b/html/AISDatabaseParser_8h_source.html deleted file mode 100644 index 9a0b23830..000000000 --- a/html/AISDatabaseParser_8h_source.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -libdap: AISDatabaseParser.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
AISDatabaseParser.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef ais_database_parser_h
27 #define ais_database_parser_h
28 
29 #include <string>
30 
31 #include <libxml/parserInternals.h>
32 
33 #ifndef _internal_err_h
34 #include "InternalErr.h"
35 #endif
36 
37 #ifndef ais_exceptions_h
38 #include "AISExceptions.h"
39 #endif
40 
41 #ifndef ais_resources_h
42 #include "AISResources.h"
43 #endif
44 
45 namespace libdap
46 {
47 
70 {
71 private:
74  enum ParseState {
75  PARSER_START,
76  PARSER_FINISH,
77  AIS,
78  ENTRY,
79  PRIMARY,
80  ANCILLARY,
81  PARSER_UNKNOWN,
82  PARSER_ERROR
83  };
84 
99  struct AISParserState
100  {
101  ParseState state; // current state
102  ParseState prev_state; // previous state
103  int unknown_depth; // handle recursive unknown tags
104 
105  string error_msg; // Error message(s), if any.
106 
107  xmlParserCtxtPtr ctxt; // used for error msg line numbers
108  AISResources *ais; // dump info here
109 
110  string primary; // current entry's primary URL/Regexp
111  bool regexp; // True if primary is a regexp
112 
113  ResourceVector rv; // add ancillary entries to rv
114  };
115 
116 public:
117  void intern(const string &database, AISResources *ais);
118 
119  static void aisStartDocument(AISParserState *state);
120  static void aisEndDocument(AISParserState *state);
121  static void aisStartElement(AISParserState *state, const char *name,
122  const char **attrs);
123  static void aisEndElement(AISParserState *state, const char *name);
124  static xmlEntityPtr aisGetEntity(AISParserState *state,
125  const xmlChar *name);
126  static void aisWarning(AISParserState *state, const char *msg, ...);
127  static void aisError(AISParserState *state, const char *msg, ...);
128  static void aisFatalError(AISParserState *state, const char *msg, ...);
129 };
130 
131 } // namespace libdap
132 
133 #endif // ais_database_parser_h
static void aisFatalError(AISParserState *state, const char *msg,...)
-
static void aisWarning(AISParserState *state, const char *msg,...)
-
Manage AIS resources.
Definition: AISResources.h:70
-
void intern(const string &database, AISResources *ais)
-
static void aisStartElement(AISParserState *state, const char *name, const char **attrs)
-
static void aisError(AISParserState *state, const char *msg,...)
- -
static void aisEndElement(AISParserState *state, const char *name)
-
static void aisStartDocument(AISParserState *state)
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
static void aisEndDocument(AISParserState *state)
-
static xmlEntityPtr aisGetEntity(AISParserState *state, const xmlChar *name)
-
-
- - - - diff --git a/html/AISExceptions_8h_source.html b/html/AISExceptions_8h_source.html deleted file mode 100644 index c9110aec6..000000000 --- a/html/AISExceptions_8h_source.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -libdap: AISExceptions.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
AISExceptions.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef ais_exceptions_h
27 #define ais_exceptions_h
28 
29 #ifndef _error_h
30 #include "Error.h"
31 #endif
32 
33 namespace libdap
34 {
35 
39 {
40 public:
41  NoSuchPrimaryResource(): Error("The primary resource given has no matching entry in the AIS database.")
42  {}
43 };
44 
47 {
48 public:
49  AISDatabaseReadFailed() : Error("The AIS database read failed.")
50  {}
51  AISDatabaseReadFailed(const string &msg) :
52  Error(string("The AIS database read failed: ") + msg)
53  {}
54 };
55 
58 {
59 public:
60  AISDatabaseWriteFailed() : Error("The AIS database write failed.")
61  {}
62  AISDatabaseWriteFailed(const string &msg) :
63  Error(string("The AIS database write failed: ") + msg)
64  {}
65 };
66 
67 } // namespace libdap
68 
69 #endif // ais_exceptions_h
- - -
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- -
A class for error processing.
Definition: Error.h:92
-
-
- - - - diff --git a/html/AISMerge_8cc_source.html b/html/AISMerge_8cc_source.html deleted file mode 100644 index d0d61b147..000000000 --- a/html/AISMerge_8cc_source.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - -libdap: AISMerge.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
AISMerge.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 // Dan Holloway <dan@hollywood.gso.uri.edu>
10 // Reza Nekovei <reza@intcomm.net>
11 //
12 // This library is free software; you can redistribute it and/or
13 // modify it under the terms of the GNU Lesser General Public
14 // License as published by the Free Software Foundation; either
15 // version 2.1 of the License, or (at your option) any later version.
16 //
17 // This library is distributed in the hope that it will be useful,
18 // but WITHOUT ANY WARRANTY; without even the implied warranty of
19 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 // Lesser General Public License for more details.
21 //
22 // You should have received a copy of the GNU Lesser General Public
23 // License along with this library; if not, write to the Free Software
24 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
25 //
26 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
27 
28 #include "config.h"
29 
30 #include <cstdio>
31 #include <fstream>
32 
33 #include "AISMerge.h"
34 #include "AISExceptions.h"
35 #include "Response.h"
36 
37 namespace libdap {
38 
52 {
53  if (res.find("http:") == 0
54  || res.find("file:") == 0 || res.find("https:") == 0) {
55  return d_http.fetch_url(res);
56  }
57  else {
58 #if 0
59  ifstream s(res);
60 #endif
61  FILE *s = fopen(res.c_str(), "r");
62  if (!s)
63  throw Error("I could not open local AIS resource '"
64  + res + "'.");
65  return new Response(s, 0);
66  }
67 }
68 
82 void AISMerge::merge(const string & primary, DAS & das)
83 {
84  if (!d_ais_db.has_resource(primary))
85  return;
86 
87  try {
88  ResourceVector rv = d_ais_db.get_resource(primary);
89 
90  for (ResourceVectorIter i = rv.begin(); i != rv.end(); ++i) {
91  Response *ais_resource = get_ais_resource(i->get_url());
92  switch (i->get_rule()) {
93  case Resource::overwrite:
94  das.parse(ais_resource->get_stream());
95  break;
96  case Resource::replace:
97  das.erase();
98  das.parse(ais_resource->get_stream());
99  break;
100  case Resource::fallback:
101  if (das.get_size() == 0)
102  das.parse(ais_resource->get_stream());
103  break;
104  }
105  delete ais_resource;
106  ais_resource = 0;
107  }
108  }
109  catch (NoSuchPrimaryResource & e) {
110  throw
111  InternalErr(string
112  ("I caught a 'NoSuchPrimaryResource' exception, it said:\n")
113  + e.get_error_message() + string("\n"));
114  }
115 }
116 
117 } // namespace libdap
virtual Response * get_ais_resource(const string &res)
Definition: AISMerge.cc:51
-
virtual bool has_resource(const string &primary) const
-
virtual ResourceVector get_resource(const string &primary)
-
HTTPResponse * fetch_url(const string &url)
Definition: HTTPConnect.cc:627
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
virtual void merge(const string &primary, DAS &das)
Definition: AISMerge.cc:82
- - -
std::string get_error_message() const
Definition: Error.cc:278
-
virtual unsigned int get_size() const
Returns the number of attributes in the current attribute table.
Definition: DAS.cc:125
-
virtual void erase()
erase all attributes in this DAS
Definition: DAS.cc:135
-
virtual void parse(string fname)
Reads a DAS from the named file.
Definition: DAS.cc:232
-
Hold attribute data for a DAP2 dataset.
Definition: DAS.h:121
-
A class for error processing.
Definition: Error.h:92
-
-
- - - - diff --git a/html/AISMerge_8h_source.html b/html/AISMerge_8h_source.html deleted file mode 100644 index 665ee4e3f..000000000 --- a/html/AISMerge_8h_source.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - -libdap: AISMerge.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
AISMerge.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 // Dan Holloway <dan@hollywood.gso.uri.edu>
10 // Reza Nekovei <reza@intcomm.net>
11 //
12 // This library is free software; you can redistribute it and/or
13 // modify it under the terms of the GNU Lesser General Public
14 // License as published by the Free Software Foundation; either
15 // version 2.1 of the License, or (at your option) any later version.
16 //
17 // This library is distributed in the hope that it will be useful,
18 // but WITHOUT ANY WARRANTY; without even the implied warranty of
19 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 // Lesser General Public License for more details.
21 //
22 // You should have received a copy of the GNU Lesser General Public
23 // License along with this library; if not, write to the Free Software
24 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
25 //
26 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
27 
28 #ifndef ais_merge_h
29 #define ais_merge_h
30 
31 #include <string>
32 
33 #ifndef _das_h
34 #include "DAS.h"
35 #endif
36 
37 #ifndef _httpconnect_h
38 #include "HTTPConnect.h"
39 #endif
40 
41 #ifndef ais_resources_h
42 #include "AISResources.h"
43 #endif
44 
45 #ifndef ais_exceptions_h
46 #include "AISExceptions.h"
47 #endif
48 
49 #ifndef response_h
50 #include "Response.h"
51 #endif
52 
53 namespace libdap
54 {
55 
64 class AISMerge
65 {
66 private:
67  AISResources d_ais_db;
68  HTTPConnect d_http; // used to access remote resources
69 
70  friend class AISMergeTest;
71 public:
76  AISMerge(const string &database) throw(AISDatabaseReadFailed) :
77  d_ais_db(database), d_http(RCReader::instance())
78  { }
79 
82  virtual ~AISMerge()
83  {}
84 
85  // Change this when HTTPConnect/HTTPCache are changed.
86  virtual Response *get_ais_resource(const string &res);
87 
88  virtual void merge(const string &primary, DAS &das);
89 };
90 
91 } // namespace libdap
92 
93 #endif // ais_merge_h
virtual ~AISMerge()
Definition: AISMerge.h:82
- -
virtual Response * get_ais_resource(const string &res)
Definition: AISMerge.cc:51
-
Manage AIS resources.
Definition: AISResources.h:70
- -
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual void merge(const string &primary, DAS &das)
Definition: AISMerge.cc:82
-
Merge AIS resources.
Definition: AISMerge.h:64
- -
Hold attribute data for a DAP2 dataset.
Definition: DAS.h:121
-
AISMerge(const string &database)
Definition: AISMerge.h:76
-
-
- - - - diff --git a/html/AISResources_8cc_source.html b/html/AISResources_8cc_source.html deleted file mode 100644 index dbcefc10f..000000000 --- a/html/AISResources_8cc_source.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -libdap: AISResources.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
AISResources.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #include "config.h"
27 
28 #include <iostream>
29 #include <fstream>
30 #include <algorithm>
31 #include <functional>
32 
33 #include "AISResources.h"
34 #include "AISDatabaseParser.h"
35 
36 using namespace std;
37 
38 namespace libdap {
39 
45 ostream &
46 operator<<(ostream &os, const Resource &r)
47 {
48  os << "<ancillary";
49  if (r.d_rule != Resource::overwrite) {
50  os << " rule=\"";
51  (r.d_rule == Resource::fallback) ? os << "fallback\"" : os << "replace\"";
52  }
53  os << " url=\"" << r.d_url << "\"/>";
54 
55  return os;
56 }
57 
61 ostream &
62 operator<<(ostream &os, const AISResources &ais_res)
63 {
64  os << "<?xml version=\"1.0\" encoding=\"US-ASCII\" standalone=\"yes\"?>"
65  << endl;
66  os << "<!DOCTYPE ais SYSTEM \"http://xml.opendap.org/ais/ais_database.dtd\">" << endl;
67  os << "<ais xmlns=\"http://xml.opendap.org/ais\">" << endl;
68 
69  for (AISResources::ResourceRegexpsCIter pos = ais_res.d_re.begin();
70  pos != ais_res.d_re.end(); ++pos) {
71  os << "<entry>" << endl;
72  // write primary
73  os << "<primary regexp=\"" << pos->first << "\"/>" << endl;
74  // write the vector of Resource objects
75  for (ResourceVectorCIter i = pos->second.begin();
76  i != pos->second.end(); ++i) {
77  os << *i << endl;
78  }
79  os << "</entry>" << endl;
80  }
81 
82  // Under VC++ 6.x, 'pos' is twice tagged as twice in the
83  // same scope (this method - not just within for blocks), so
84  // I gave it another name. ROM - 6/14/03
85  for (AISResources::ResourceMapCIter pos2 = ais_res.d_db.begin();
86  pos2 != ais_res.d_db.end(); ++pos2) {
87  os << "<entry>" << endl;
88  // write primary
89  os << "<primary url=\"" << pos2->first << "\"/>" << endl;
90  // write the vector of Resource objects
91  for (ResourceVectorCIter i = pos2->second.begin();
92  i != pos2->second.end(); ++i) {
93  os << *i << endl;
94  }
95  os << "</entry>" << endl;
96  }
97 
98  os << "</ais>" << endl;
99 
100  return os;
101 }
102 
105 AISResources::AISResources(const string &database) throw(AISDatabaseReadFailed)
106 {
107  read_database(database);
108 }
109 
116 void
117 AISResources::add_url_resource(const string &url, const Resource &ancillary)
118 {
119  add_url_resource(url, ResourceVector(1, ancillary));
120 }
121 
127 void
128 AISResources::add_url_resource(const string &url, const ResourceVector &rv)
129 {
130  ResourceMapIter pos = d_db.find(url);
131  if (pos == d_db.end()) {
132  d_db.insert(std::make_pair(url, rv));
133  }
134  else {
135  // There's already a ResourceVector, append to it.
136  for (ResourceVectorCIter i = rv.begin(); i != rv.end(); ++i)
137  pos->second.push_back(*i);
138  }
139 }
140 
145 void
146 AISResources::add_regexp_resource(const string &re, const Resource &ancillary)
147 {
148  add_regexp_resource(re, ResourceVector(1, ancillary));
149 }
150 
157 void
158 AISResources::add_regexp_resource(const string &re, const ResourceVector &rv)
159 {
160  ResourceRegexpsIter pos = find_if(d_re.begin(), d_re.end(),
161  FindRegexp(re));
162  if (pos == d_re.end()) {
163  d_re.push_back(std::make_pair(re, rv));
164  }
165  else {
166  // There's already a ResourceVector, append to it.
167  for (ResourceVectorCIter i = rv.begin(); i != rv.end(); ++i)
168  pos->second.push_back(*i);
169  }
170 }
171 
180 bool
181 AISResources::has_resource(const string &primary) const
182 {
183  // This code looks for the 'primary' in the AIS database (which is a STL
184  // map<> of strings and AIS stuff. As an optimization, it first uses the
185  // map<> class' find() method to see if the 'primary' is in there as a
186  // literal. If not, then it tries to match each regular expression in the
187  // database.
188  return ((d_db.find(primary) != d_db.end())
189  || (find_if(d_re.begin(), d_re.end(), MatchRegexp(primary))
190  != d_re.end()));
191 
192 }
193 
212 ResourceVector
213 AISResources::get_resource(const string &primary)
214 {
215  ResourceVector rv;
216  const ResourceMapIter &i = d_db.find(primary);
217 
218  if (i != d_db.end())
219  rv = i->second;
220 
221  // Finds the first matching regular expression and returns a vector of
222  // AIS resources.
223  const ResourceRegexpsIter &j = find_if(d_re.begin(), d_re.end(),
224  MatchRegexp(primary));
225  if (j != d_re.end())
226  copy(j->second.begin(), j->second.end(), inserter(rv, rv.begin()));
227 
228  if (rv.size() == 0)
229  throw NoSuchPrimaryResource();
230 
231  return rv;
232 }
233 
241 void
242 AISResources::read_database(const string &database)
243 {
244  AISDatabaseParser parser;
245 
246  parser.intern(database, this);
247 }
248 
257 void
258 AISResources::write_database(const string &filename)
259 {
260  ofstream fos;
261  fos.open(filename.c_str());
262 
263  if (!fos)
264  throw AISDatabaseWriteFailed("Could not open file :" + filename);
265 
266  fos << *this << endl;
267 
268  if (!fos)
269  throw AISDatabaseWriteFailed();
270 }
271 
272 } // namespace libdap
Manage AIS resources.
Definition: AISResources.h:70
-
void intern(const string &database, AISResources *ais)
- - -
STL namespace.
- -
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- -
ostream & operator<<(ostream &os, const Resource &r)
Definition: AISResources.cc:46
-
Associate a rule with an ancillary resource.
Definition: Resource.h:50
-
-
- - - - diff --git a/html/AISResources_8h_source.html b/html/AISResources_8h_source.html deleted file mode 100644 index 6785cc084..000000000 --- a/html/AISResources_8h_source.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -libdap: AISResources.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
AISResources.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef ais_resources_h
27 #define ais_resources_h
28 
29 #include <string>
30 #include <iostream>
31 #include <vector>
32 #include <map>
33 
34 #include "GNURegex.h"
35 
36 #ifndef resource_h
37 #include "Resource.h"
38 #endif
39 
40 #ifndef ais_exceptions_h
41 #include "AISExceptions.h"
42 #endif
43 
44 using namespace std;
45 
46 namespace libdap
47 {
48 
49 typedef vector<Resource> ResourceVector;
50 typedef ResourceVector::iterator ResourceVectorIter;
51 typedef ResourceVector::const_iterator ResourceVectorCIter;
52 
71 {
72 private:
73  // The AIS database is broken into two parts. The entries where the primary
74  // resource is a URL are stored in a map<> while the primaries that are
75  // regular expressions are stored in a vector of pairs. The latter is
76  // searched using the MatchRegexp struct.
77  typedef map<string, ResourceVector> ResourceMap;
78  typedef ResourceMap::iterator ResourceMapIter;
79  typedef ResourceMap::const_iterator ResourceMapCIter;
80 
81  typedef pair<string, ResourceVector> RVPair;
82  typedef vector<RVPair> ResourceRegexps;
83  typedef ResourceRegexps::iterator ResourceRegexpsIter;
84  typedef ResourceRegexps::const_iterator ResourceRegexpsCIter;
85 
86  ResourceMap d_db; // This holds the URL resources
87  ResourceRegexps d_re; // This holds the regular expression res.
88 
89  // Scan RegExps looking for a particular regular expression.
90 struct FindRegexp : public binary_function<RVPair, string, bool>
91  {
92  string local_re;
93  FindRegexp(const string &re) : local_re(re)
94  {}
95  bool operator()(const RVPair &p)
96  {
97  return p.first == local_re;
98  }
99  };
100 
101  // Scan RegExps looking for one that matches a URL.
102  // *** Make this more efficient by storing the Regex objects in the
103  // vector. 03/11/03 jhrg
104 struct MatchRegexp : public binary_function<RVPair, string, bool>
105  {
106  string candidate;
107  MatchRegexp(const string &url) : candidate(url)
108  {}
109  bool operator()(const RVPair &p)
110  {
111  Regex r(p.first.c_str());
112  return r.match(candidate.c_str(), candidate.length()) != -1;
113  }
114  };
115 
116  friend class AISResourcesTest; // unit tests access to private stuff
117  friend ostream &operator<<(ostream &os, const AISResources &ais_res);
118 
119 public:
122  {}
123  AISResources(const string &database) throw(AISDatabaseReadFailed);
124 
125  virtual ~AISResources()
126  {}
127 
128  virtual void add_url_resource(const string &url,
129  const Resource &ancillary);
130  virtual void add_url_resource(const string &url, const ResourceVector &rv);
131 
132  virtual void add_regexp_resource(const string &regexp,
133  const Resource &ancillary);
134  virtual void add_regexp_resource(const string &regexp,
135  const ResourceVector &rv);
136 
137  virtual bool has_resource(const string &primary) const;
138 
139  virtual ResourceVector get_resource(const string &primary);
140 
141  virtual void read_database(const string &database);
142 
143  virtual void write_database(const string &filename);
144 };
145 
146 } // namespace libdap
147 
148 #endif // ais_resources_h
Manage AIS resources.
Definition: AISResources.h:70
- -
STL namespace.
- -
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
int match(const char *s, int len, int pos=0)
Does the pattern match.
Definition: GNURegex.cc:115
- -
ostream & operator<<(ostream &os, const Resource &r)
Definition: AISResources.cc:46
- -
Associate a rule with an ancillary resource.
Definition: Resource.h:50
-
-
- - - - diff --git a/html/AlarmHandler_8h_source.html b/html/AlarmHandler_8h_source.html deleted file mode 100644 index 229b3acb1..000000000 --- a/html/AlarmHandler_8h_source.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -libdap: AlarmHandler.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
AlarmHandler.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef alarm_handler_h
27 #define alarm_handler_h
28 
29 #include <cstdio>
30 
31 #include <string>
32 
33 #include "EventHandler.h"
34 
35 namespace libdap
36 {
37 
45 class AlarmHandler : public EventHandler
46 {
47 private:
48  FILE *d_file; // Sink for the Error object.
49  string d_version;
50 
51 public:
52  // Ensure that d_stream gets initialized...
53  AlarmHandler() : d_file( 0 )
54  {}
55 
56  explicit AlarmHandler(FILE *s) : d_file(s)//, d_stream( cout )
57  {}
58 
62  explicit AlarmHandler(ostream &) : d_file(0)
63  {}
64 
65  virtual ~AlarmHandler()
66  {
67  if( d_file )
68  fclose( d_file ) ;
69  }
70 
82  virtual void handle_signal(int signum)
83  {
84  if (signum != SIGALRM)
85  throw Error("SIGALRM handler caught another signal!");
86 
87  throw Error("Timeout");
88  }
89 
90 };
91 
92 } // namespace libdap
93 
94 #endif
-
AlarmHandler(ostream &)
Definition: AlarmHandler.h:62
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual void handle_signal(int signum)
Definition: AlarmHandler.h:82
-
A class for error processing.
Definition: Error.h:92
- -
-
- - - - diff --git a/html/Ancillary_8cc_source.html b/html/Ancillary_8cc_source.html deleted file mode 100644 index df372964d..000000000 --- a/html/Ancillary_8cc_source.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -libdap: Ancillary.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Ancillary.cc
-
-
-
1 // Ancillary.cc
2 
3 #include "config.h"
4 
5 //#define DODS_DEBUG
6 
7 #include "Ancillary.h"
8 #include "debug.h"
9 
10 #ifndef WIN32
11 #ifdef HAVE_UNISTD_H
12 #include <unistd.h>
13 #endif
14 #else
15 #include <io.h>
16 #include <fcntl.h>
17 #include <process.h>
18 // Win32 does not define this. 08/21/02 jhrg
19 #define F_OK 0
20 #endif
21 
22 namespace libdap {
23 
68 string
69 Ancillary::find_ancillary_file( const string &pathname,
70  const string &ext,
71  const string &dir,
72  const string &file )
73 {
74  string::size_type slash = pathname.rfind('/') + 1;
75  string directory = pathname.substr(0, slash);
76  string filename = pathname.substr(slash);
77  string basename = pathname.substr(slash, pathname.rfind('.') - slash);
78 
79  DBG(cerr << "find ancillary file params: " << pathname << ", " << ext
80  << ", " << dir << ", " << file << endl);
81  DBG(cerr << "find ancillary file comp: " << directory << ", " << filename
82  << ", " << basename << endl);
83 
84  string dot_ext = "." + ext;
85 
86  string name = directory + basename + dot_ext;
87  if (access(name.c_str(), F_OK) == 0)
88  return name;
89 
90  name = pathname + dot_ext;
91  if (access(name.c_str(), F_OK) == 0)
92  return name;
93 
94  name = directory + ext;
95  if (access(name.c_str(), F_OK) == 0)
96  return name;
97 
98  name = dir + basename + dot_ext;
99  if (access(name.c_str(), F_OK) == 0)
100  return name;
101 
102  name = directory + file + dot_ext;
103  if (access(name.c_str(), F_OK) == 0)
104  return name;
105 
106  name = dir + file + dot_ext;
107  if (access(name.c_str(), F_OK) == 0)
108  return name;
109 
110  name = dir + ext;
111  if (access(name.c_str(), F_OK) == 0)
112  return name;
113 
114  return "";
115 }
116 
117 // Given a pathname to a datafile, take that pathname apart and look for an
118 // ancillary file that describes a group of datafiles of which this datafile
119 // is a member. Assume that groups follow a simple naming convention where
120 // files use either leading or trailing digits and a common basename to name
121 // group members. For example, 00stuff.hdf, 01stuff.hdf, 02stuff.hdf, ..., is
122 // a group and is has `stuff' as its basename.
123 
137 string
138 Ancillary::find_group_ancillary_file( const string &name, const string &ext )
139 {
140  // Given /usr/local/data/stuff.01.nc
141  // pathname = /usr/local/data, filename = stuff.01.nc and
142  // rootname = stuff.01
143  string::size_type slash = name.find_last_of('/');
144  string dirname = name.substr(0, slash);
145  string filename = name.substr(slash + 1);
146  string rootname = filename.substr(0, filename.find_last_of('.'));
147 
148  // Instead of using regexs, scan the filename for leading and then
149  // trailing digits.
150  string::iterator rootname_iter = rootname.begin();
151  string::iterator rootname_end_iter = rootname.end();
152  if (isdigit(*rootname_iter)) {
153  while (rootname_iter != rootname_end_iter
154  && isdigit(*++rootname_iter))
155  ;
156 
157  // We want: new_name = dirname + "/" + <base> + ext but without
158  // creating a bunch of temp objects.
159  string new_name = dirname;
160  new_name.append("/");
161  new_name.append(rootname_iter, rootname_end_iter);
162  new_name.append(ext);
163  DBG(cerr << "New Name (iter): " << new_name << endl);
164  if (access(new_name.c_str(), F_OK) == 0) {
165  return new_name;
166  }
167  }
168 
169  string::reverse_iterator rootname_riter = rootname.rbegin();
170  string::reverse_iterator rootname_end_riter = rootname.rend();
171  if (isdigit(*rootname_riter)) {
172  while (rootname_riter != rootname_end_riter
173  && isdigit(*++rootname_riter))
174  ;
175  string new_name = dirname;
176  new_name.append("/");
177  // I used reverse iters to scan rootname backwards. To avoid
178  // reversing the fragment between end_riter and riter, pass append
179  // regular iters obtained using reverse_iterator::base(). See Meyers
180  // p. 123. 1/22/2002 jhrg
181  new_name.append(rootname_end_riter.base(), rootname_riter.base());
182  new_name.append(ext);
183  DBG(cerr << "New Name (riter): " << new_name << endl);
184  if (access(new_name.c_str(), F_OK) == 0) {
185  return new_name;
186  }
187  }
188 
189  // If we're here either the file does not begin with leading digits or a
190  // template made by removing those digits was not found.
191 
192  return "";
193 }
194 
195 void
196 Ancillary::read_ancillary_das( DAS &das,
197  const string &pathname,
198  const string &dir,
199  const string &file )
200 {
201  string name = find_ancillary_file( pathname, "das", dir, file ) ;
202 
203  DBG(cerr << "In Ancillary::read_ancillary_dds: name:" << name << endl);
204 
205  FILE *in = fopen( name.c_str(), "r" ) ;
206  if( in ) {
207  das.parse( in ) ;
208  (void)fclose( in ) ;
209 #if 0
210  int res = fclose( in ) ;
211  if( res )
212  DBG(cerr << "Ancillary::read_ancillary_das - Failed to close file " << (void *)in << endl) ;
213 #endif
214  }
215 }
216 
217 void
218 Ancillary::read_ancillary_dds( DDS &dds,
219  const string &pathname,
220  const string &dir,
221  const string &file )
222 {
223  string name = find_ancillary_file( pathname, "dds", dir, file ) ;
224 
225  DBG(cerr << "In Ancillary::read_ancillary_dds: name:" << name << endl);
226 
227  FILE *in = fopen( name.c_str(), "r" ) ;
228  if( in ) {
229  dds.parse( in ) ;
230  (void)fclose( in ) ;
231 #if 0
232  int res = fclose( in ) ;
233  if( res )
234  DBG(cerr << "Ancillary::read_ancillary_das - Failed to close file " << (void *)in << endl) ;
235 #endif
236  }
237 }
238 
239 } // namespace libdap
240 
static string find_group_ancillary_file(const string &pathname, const string &ext)
Definition: Ancillary.cc:138
-
static string find_ancillary_file(const string &pathname, const string &ext, const string &dir, const string &file)
Find a file with ancillary data.
Definition: Ancillary.cc:69
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
void parse(string fname)
Parse a DDS from a file with the given d_name.
Definition: DDS.cc:942
- -
virtual void parse(string fname)
Reads a DAS from the named file.
Definition: DAS.cc:232
-
Hold attribute data for a DAP2 dataset.
Definition: DAS.h:121
-
-
- - - - diff --git a/html/Ancillary_8h_source.html b/html/Ancillary_8h_source.html deleted file mode 100644 index dfdfb8cd2..000000000 --- a/html/Ancillary_8h_source.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -libdap: Ancillary.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Ancillary.h
-
-
-
1 // Ancillary.h
2 
3 // -*- mode: c++; c-basic-offset:4 -*-
4 
5 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
6 // Access Protocol.
7 
8 // Copyright (c) 2002,2003 OPeNDAP, Inc.
9 // Author: James Gallagher <jgallagher@opendap.org>
10 // Patrick West <pwest@opendap.org>
11 //
12 // This library is free software; you can redistribute it and/or
13 // modify it under the terms of the GNU Lesser General Public
14 // License as published by the Free Software Foundation; either
15 // version 2.1 of the License, or (at your option) any later version.
16 //
17 // This library is distributed in the hope that it will be useful,
18 // but WITHOUT ANY WARRANTY; without even the implied warranty of
19 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 // Lesser General Public License for more details.
21 //
22 // You should have received a copy of the GNU Lesser General Public
23 // License along with this library; if not, write to the Free Software
24 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
25 //
26 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
27 
28 // (c) COPYRIGHT URI/MIT 1994-1999
29 // Please read the full copyright statement in the file COPYRIGHT_URI.
30 //
31 // Authors:
32 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
33 // pwest Patrick West <pwest@opendap.org>
34 
35 #ifndef S_Ancillary_h
36 #define S_Ancillary_h 1
37 
38 #include <string>
39 
40 #include "DAS.h"
41 #include "DDS.h"
42 
43 namespace libdap
44 {
45 
46 class Ancillary
47 {
48 public:
49  static string find_ancillary_file( const string &pathname,
50  const string &ext,
51  const string &dir,
52  const string &file ) ;
53 
54  static string find_group_ancillary_file( const string &pathname,
55  const string &ext ) ;
56 
57  static void read_ancillary_das( DAS &das,
58  const string &pathname,
59  const string &dir = "",
60  const string &file = "" ) ;
61 
62  static void read_ancillary_dds( DDS &dds,
63  const string &pathname,
64  const string &dir = "",
65  const string &file = "" ) ;
66 } ;
67 
68 } // namespace libdap
69 
70 #endif // S_Ancillary_h
71 
static string find_group_ancillary_file(const string &pathname, const string &ext)
Definition: Ancillary.cc:138
-
static string find_ancillary_file(const string &pathname, const string &ext, const string &dir, const string &file)
Find a file with ancillary data.
Definition: Ancillary.cc:69
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- - -
Hold attribute data for a DAP2 dataset.
Definition: DAS.h:121
-
-
- - - - diff --git a/html/Array_8cc_source.html b/html/Array_8cc_source.html deleted file mode 100644 index 48878396d..000000000 --- a/html/Array_8cc_source.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - - - - -libdap: Array.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Array.cc
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2002,2003 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 // (c) COPYRIGHT URI/MIT 1994-1999
26 // Please read the full copyright statement in the file COPYRIGHT_URI.
27 //
28 // Authors:
29 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
30 
31 // Implementation for Array.
32 //
33 // jhrg 9/13/94
34 
35 #include "config.h"
36 
37 //#define DODS_DEBUG
38 
39 #include <algorithm>
40 #include <functional>
41 #include <sstream>
42 
43 #include "Array.h"
44 #include "Grid.h"
45 
46 #include "D4Attributes.h"
47 #include "DMR.h"
48 #include "D4Dimensions.h"
49 #include "D4Maps.h"
50 #include "D4Group.h"
51 #include "D4EnumDefs.h"
52 #include "D4Enum.h"
53 #include "XMLWriter.h"
54 
55 #include "util.h"
56 #include "debug.h"
57 #include "InternalErr.h"
58 #include "escaping.h"
59 #include "DapIndent.h"
60 
61 using namespace std;
62 
63 namespace libdap {
64 
65 Array::dimension::dimension(D4Dimension *d) :
66  dim(d), use_sdim_for_slice(true)
67 {
68  size = d->size();
69  name = d->name();
70 
71  start = 0;
72  stop = size - 1;
73  stride = 1;
74  c_size = size;
75 }
76 
77 void Array::_duplicate(const Array &a)
78 {
79  _shape = a._shape;
80 
81  // Deep copy the Maps if they are being used.
82  if (a.d_maps) {
83  d_maps = new D4Maps(*(a.d_maps));
84  }
85  else {
86  d_maps = 0;
87  }
88  // d_maps = a.d_maps ? new D4Maps(*(a.d_maps)) : 0;
89 }
90 
91 // The first method of calculating length works when only one dimension is
92 // constrained and you want the others to appear in total. This is important
93 // when selecting from grids since users may not select from all dimensions
94 // in which case that means they want the whole thing. Array projection
95 // should probably work this way too, but it doesn't. 9/21/2001 jhrg
96 
104 {
105  int length = 1;
106  for (Dim_citer i = _shape.begin(); i != _shape.end(); i++) {
107 #if 0
108  // If the size of any dimension is zero, then the array is not
109  // capable of storing any values. jhrg 1/28/16
110  length *= (*i).c_size > 0 ? (*i).c_size : 1;
111 #endif
112  length *= (*i).c_size;
113  }
114 
115  set_length(length);
116 }
117 
118 // Construct an instance of Array. The (BaseType *) is assumed to be
119 // allocated using new - The dtor for Vector will delete this object.
120 
136 Array::Array(const string &n, BaseType *v, bool is_dap4 /* default:false */) :
137  Vector(n, 0, dods_array_c, is_dap4), d_maps(0)
138 {
139  add_var(v); // Vector::add_var() stores null if v is null
140 }
141 
155 Array::Array(const string &n, const string &d, BaseType *v, bool is_dap4 /* default:false */) :
156  Vector(n, d, 0, dods_array_c, is_dap4), d_maps(0)
157 {
158  add_var(v); // Vector::add_var() stores null if v is null
159 }
160 
162 Array::Array(const Array &rhs) :
163  Vector(rhs)
164 {
165  _duplicate(rhs);
166 }
167 
170 {
171  delete d_maps;
172 }
173 
174 BaseType *
176 {
177  return new Array(*this);
178 }
179 
180 Array &
181 Array::operator=(const Array &rhs)
182 {
183  if (this == &rhs) return *this;
184 
185  dynamic_cast<Vector &>(*this) = rhs;
186 
187  _duplicate(rhs);
188 
189  return *this;
190 }
191 
193 {
194  Array *dest = static_cast<Array*>(ptr_duplicate());
195 
196  // If it's already a DAP4 object then we can just return it!
197  if (is_dap4()) {
198  container->add_var_nocopy(dest);
199  }
200 
201  // Process the Array's dimensions, making D4 shared dimensions for
202  // D2 dimensions that are named. If there is just a size, don't make
203  // a D4Dimension (In DAP4 you cannot share a dimension unless it has
204  // a name). jhrg 3/18/14
205 
206  D4Dimensions *root_dims = root->dims();
207  for (Array::Dim_iter dap2_dim = dest->dim_begin(), e = dest->dim_end(); dap2_dim != e; ++dap2_dim) {
208  if (!(*dap2_dim).name.empty()) {
209 
210  // If a D4Dimension with the name already exists, use it.
211  D4Dimension *d4_dim = root_dims->find_dim((*dap2_dim).name);
212  if (!d4_dim) {
213  d4_dim = new D4Dimension((*dap2_dim).name, (*dap2_dim).size);
214  root_dims->add_dim_nocopy(d4_dim);
215  }
216  else {
217  DBG(cerr << __func__ << "() -" <<
218  " Using Existing D4Dimension '"<< d4_dim->name() << "' (" <<
219  (void *)d4_dim << ")"<< endl);;
220 
221  if (d4_dim->size() != (unsigned long) (*dap2_dim).size) {
222  // TODO Revisit this decision. jhrg 3/18/14
223  // ...in case the name/size are different, make a unique D4Dimension
224  // but don't fiddle with the name. Not sure I like this idea, so I'm
225  // making the case explicit (could be rolled in to the block above).
226  // jhrg 3/18/14
227  //
228  // This is causing problems in the FITS handler because there are cases
229  // where two arrays have dimensions with the same name but different
230  // sizes. The deserializing code is using the first size listed, which is
231  // wrong in some cases. I'm going to try making this new D4Dimension using
232  // the dim name along with the variable name. jhrg 8/15/14
233  d4_dim = new D4Dimension((*dap2_dim).name + "_" + name(), (*dap2_dim).size);
234  DBG(cerr << __func__ << "() -" <<
235  " Utilizing Name/Size Conflict Naming Artifice. name'"<< d4_dim->name() << "' (" <<
236  (void *)d4_dim << ")"<< endl);;
237  root_dims->add_dim_nocopy(d4_dim);
238  }
239  }
240  // At this point d4_dim's name and size == those of (*d) so just set
241  // the D4Dimension pointer so it matches the one in the D4Group.
242  (*dap2_dim).dim = d4_dim;
243  }
244 
245  }
246 
247  // Copy the D2 attributes to D4 Attributes
249  dest->set_is_dap4(true);
250  container->add_var_nocopy(dest);
251  DBG(cerr << __func__ << "() - END (array:" << name() << ")" << endl);;
252 }
253 
254 bool Array::is_dap2_grid()
255 {
256  bool is_grid = false;
257  if (this->is_dap4()) {
258  DBG( cerr << __func__ << "() - Array '"<< name() << "' is DAP4 object!" << endl);
259  D4Maps *d4_maps = this->maps();
260  is_grid = d4_maps->size(); // It can't be a grid if there are no maps...
261  if (is_grid) {
262  DBG( cerr << __func__ << "() - Array '"<< name() << "' has D4Maps." << endl);
263  // hmmm this might be a DAP2 Grid...
264  D4Maps::D4MapsIter i = d4_maps->map_begin();
265  D4Maps::D4MapsIter e = d4_maps->map_end();
266  while (i != e) {
267  DBG( cerr << __func__ << "() - Map '"<< (*i)->array()->name() << " has " << (*i)->array()->_shape.size() << " dimension(s)." << endl);
268  if ((*i)->array()->_shape.size() > 1) {
269  is_grid = false;
270  i = e;
271  }
272  else {
273  i++;
274  }
275  }
276  }
277  else {
278  DBG( cerr << __func__ << "() - Array '"<< name() << "' has no D4Maps." << endl);
279  }
280  }
281 
282  DBG( cerr << __func__ << "() - is_grid: "<< (is_grid?"true":"false") << endl);
283  return is_grid;
284 }
285 
301 std::vector<BaseType *> *
303 {
304  DBG(cerr << __func__ << "() - BEGIN Array '"<< name() << "'" << endl);;
305 
306  BaseType *dest;
307  if (!is_dap4()) { // Don't convert a DAP2 thing
308  dest = ptr_duplicate();
309  }
310  else {
311  // At this point we have a DAP4 Array. It have D4Attributes and nothing
312  // in the DAP2 AttrTable (which is held as a reference, defined in BaseType).
313  // This test determines in the D4 Array qualifies as a D2 Grid.
314  if (is_dap2_grid()) {
315  // Oh yay! Grids are special.
316  DBG(cerr << __func__ << "() - Array '"<< name() << "' is dap2 Grid!" << endl);;
317  Grid *g = new Grid(name());
318  dest = g;
319  Array *grid_array = static_cast<Array *>(ptr_duplicate());
320  g->set_array(grid_array);
321 
322  // Fix for HK-403. jhrg 6/17/19
324 
325  // Process the Map Arrays.
326  D4Maps *d4_maps = this->maps();
327  vector<BaseType *> dropped_maps;
328  D4Maps::D4MapsIter miter = d4_maps->map_begin();
329  D4Maps::D4MapsIter end = d4_maps->map_end();
330  for (; miter != end; miter++) {
331  D4Map *d4_map = (*miter);
332  Array *d4_map_array = const_cast<Array*>(d4_map->array());
333  vector<BaseType *> *d2_result = d4_map_array->transform_to_dap2(&(g->get_attr_table()));
334  if (d2_result) {
335  if (d2_result->size() > 1)
336  throw Error(internal_error, "D4Map Array conversion resulted in multiple DAP2 objects.");
337 
338  // TODO - This is probably slow and needs a better pattern. const_cast? static_cast?
339  Array *d2_map_array = dynamic_cast<Array *>((*d2_result)[0]);
340  if (d2_map_array) {
341  if (d2_map_array->dimensions() != 1)
342  throw Error(internal_error, "DAP2 array from D4Map Array conversion has more than 1 dimension.");
343 
344  g->add_map(d2_map_array, false);
345  AttrTable at = d2_map_array->get_attr_table();
346  DBG( cerr << __func__ << "() - " <<
347  "DAS For Grid Map '" << d2_map_array->name() << "':" << endl;
348  at.print(cerr); );
349  }
350  else {
351  throw Error(internal_error, "Unable to interpret returned DAP2 content.");
352  }
353  delete d2_result;
354  }
355  else {
356  dropped_maps.push_back(d4_map_array);
357  }
358  }
359 
360  // Did we have a transform failure?
361  if (!dropped_maps.empty()) {
362  // Yup... tell the story in the attributes.
363  AttrTable *dv_table = Constructor::make_dropped_vars_attr_table(&dropped_maps);
364  dest->get_attr_table().append_container(dv_table, dv_table->get_name());
365  }
366  }
367  else {
368  DBG( cerr << __func__ << "() - Array '"<< name() << "' is not a Grid!" << endl);
369 
370  BaseType *proto = prototype();
371  switch (proto->type()) {
372  case dods_int64_c:
373  case dods_uint64_c:
374  case dods_enum_c:
375  case dods_opaque_c:
376  // For now we punt on these types as they have no easy representation in
377  // the DAP2 data model. By setting this to NULL we cause the Array to be
378  // dropped and this will be reflected in the metadata (DAS).
379  dest = NULL;
380  break;
381 
382  default:
383  // ptr_duplicate() does the Attributes too.
384  dest = ptr_duplicate();
385 
386  // Fix for HK-403. jhrg 6/17/19
387  // Only transform the DAP4 attributes to DAP2 ones if the DAP2 object lacks
388  // attributes. If the new DAP2 variable already has attributes, they were
389  // added by this process (driven by D4Group::transform_to_dap2() and calling
390  // attributes()->transform_to_dap2() will put a second copy of each attribute's
391  // value in the DAP2 AttrTable. This attribute transform code (here and elsewhere)
392  // depends on the AttrTable for a DAP4 variable initially being empty. Once it
393  // contains attributes, the code assumes they were put there by this transform
394  // process. jhrg 6/18/19
395  if (dest->get_attr_table().get_size() == 0) {
397  dest->get_attr_table().set_name(name());
398  }
399 
400  dest->set_is_dap4(false);
401  break;
402  }
403  }
404  }
405 
406  vector<BaseType *> *result;
407  if (dest) {
408  result = new vector<BaseType *>();
409  result->push_back(dest);
410  }
411  else {
412  result = NULL;
413  }
414 
415  DBG( cerr << __func__ << "() - END Array '"<< name() << "'" << endl);;
416  return result;
417 }
418 
430 void Array::update_dimension_pointers(D4Dimensions *old_dims, D4Dimensions *new_dims)
431 {
432  std::vector<dimension>::iterator i = _shape.begin(), e = _shape.end();
433  while (i != e) {
434  D4Dimensions::D4DimensionsIter old_i = old_dims->dim_begin(), old_e = old_dims->dim_end();
435  while (old_i != old_e) {
436  if ((*i).dim == *old_i) {
437  (*i).dim = new_dims->find_dim((*old_i)->name());
438  }
439  ++old_i;
440  }
441 
442  ++i;
443  }
444 }
445 
471 {
472 // If 'v' is an Array, add the template instance to this object and
473 // then copy the dimension information. Odd semantics; I wonder if this
474 //is ever used. jhrg 6/13/12
475  if (v && v->type() == dods_array_c) {
476  Array *a = static_cast<Array*>(v);
477  Vector::add_var(a->var());
478 
479  Dim_iter i = a->dim_begin();
480  Dim_iter i_end = a->dim_end();
481  while (i != i_end) {
483  ++i;
484  }
485  }
486  else {
487  Vector::add_var(v);
488  }
489 }
490 
491 void Array::add_var_nocopy(BaseType *v, Part)
492 {
493 // If 'v' is an Array, add the template instance to this object and
494 // then copy the dimension information. Odd semantics; I wonder if this
495 //is ever used. jhrg 6/13/12
496  if (v && v->type() == dods_array_c) {
497  Array &a = dynamic_cast<Array&>(*v);
498  Vector::add_var_nocopy(a.var());
499  Dim_iter i = a.dim_begin();
500  Dim_iter i_end = a.dim_end();
501  while (i != i_end) {
503  ++i;
504  }
505  }
506  else {
507  Vector::add_var_nocopy(v);
508  }
509 }
510 
522 void Array::append_dim(int size, const string &name)
523 {
524  dimension d(size, www2id(name));
525  _shape.push_back(d);
526 
527  update_length();
528 }
529 
531 {
532  dimension d(/*dim->size(), www2id(dim->name()),*/dim);
533  _shape.push_back(d);
534 
535  update_length();
536 }
537 
543 void Array::prepend_dim(int size, const string& name/* = "" */)
544 {
545  dimension d(size, www2id(name));
546 // Shifts the whole array, but it's tiny in general
547  _shape.insert(_shape.begin(), d);
548 
549  update_length(); // the number is ignored...
550 }
551 
553 {
554  dimension d(/*dim->size(), www2id(dim->name()),*/dim);
555 // Shifts the whole array, but it's tiny in general
556  _shape.insert(_shape.begin(), d);
557 
558  update_length(); // the number is ignored...
559 }
560 
565 {
566  _shape.clear();
567 }
568 
574 void Array::rename_dim(const string &oldName, const string &newName)
575 {
576  std::vector<dimension>::iterator i = _shape.begin(), e = _shape.end();
577  while (i != e) {
578  dimension &d = *i;
579  if (d.name == oldName) {
580  DBG(cerr << "Old name = " << d.name << " newName = " << newName << endl);
581  d.name = newName;
582  }
583 
584  ++i;
585  }
586 }
587 
594 {
595  set_length(-1);
596 
597  for (Dim_iter i = _shape.begin(); i != _shape.end(); i++) {
598  (*i).start = 0;
599  (*i).stop = (*i).size - 1;
600  (*i).stride = 1;
601  (*i).c_size = (*i).size;
602 
603  update_length();
604  }
605 }
606 
617 {
619 }
620 
621 // Note: MS VC++ won't tolerate embedded newlines in strings, hence the \n
622 // is explicit.
623 static const char *array_sss =
624  "Invalid constraint parameters: At least one of the start, stride or stop \n\
625 specified do not match the array variable.";
626 
647 void Array::add_constraint(Dim_iter i, int start, int stride, int stop)
648 {
649  dimension &d = *i;
650 
651 // if stop is -1, set it to the array's max element index
652 // jhrg 12/20/12
653  if (stop == -1) stop = d.size - 1;
654 
655 // Check for bad constraints.
656 // Jose Garcia
657 // Usually invalid data for a constraint is the user's mistake
658 // because they build a wrong URL in the client side.
659  if (start >= d.size || stop >= d.size || stride > d.size || stride <= 0) throw Error(malformed_expr, array_sss);
660 
661  if (((stop - start) / stride + 1) > d.size) throw Error(malformed_expr, array_sss);
662 
663  d.start = start;
664  d.stop = stop;
665  d.stride = stride;
666 
667  d.c_size = (stop - start) / stride + 1;
668 
669  DBG(cerr << "add_constraint: c_size = " << d.c_size << endl);
670 
671  update_length();
672 
673  d.use_sdim_for_slice = false;
674 }
675 
677 {
678  dimension &d = *i;
679 
680  if (dim->constrained()) add_constraint(i, dim->c_start(), dim->c_stride(), dim->c_stop());
681 
682  dim->set_used_by_projected_var(true);
683 
684 // In this case the value below overrides the value for use_sdim_for_slice
685 // set in the above call. jhrg 12/20/13
686  d.use_sdim_for_slice = true;
687 }
688 
691 {
692  return _shape.begin();
693 }
694 
697 {
698  return _shape.end();
699 }
700 
701 //TODO Many of these methods take a bool parameter that serves no use; remove.
702 
711 unsigned int Array::dimensions(bool /*constrained*/)
712 {
713  return _shape.size();
714 }
715 
733 int Array::dimension_size(Dim_iter i, bool constrained)
734 {
735  int size = 0;
736 
737  if (!_shape.empty()) {
738  if (constrained)
739  size = (*i).c_size;
740  else
741  size = (*i).size;
742  }
743 
744  return size;
745 }
746 
765 int Array::dimension_start(Dim_iter i, bool /*constrained*/)
766 {
767  return (!_shape.empty()) ? (*i).start : 0;
768 }
769 
788 int Array::dimension_stop(Dim_iter i, bool /*constrained*/)
789 {
790  return (!_shape.empty()) ? (*i).stop : 0;
791 }
792 
812 int Array::dimension_stride(Dim_iter i, bool /*constrained*/)
813 {
814  return (!_shape.empty()) ? (*i).stride : 0;
815 }
816 
828 {
829 // Jose Garcia
830 // Since this method is public, it is possible for a user
831 // to call it before the Array object has been properly set
832 // this will cause an exception which is the user's fault.
833 // (User in this context is the developer of the surrogate library.)
834  if (_shape.empty()) throw InternalErr(__FILE__, __LINE__, "*This* array has no dimensions.");
835  return (*i).name;
836 }
837 
838 D4Dimension *
839 Array::dimension_D4dim(Dim_iter i)
840 {
841  return (!_shape.empty()) ? (*i).dim : 0;
842 }
843 
844 D4Maps *
845 Array::maps()
846 {
847  if (!d_maps) d_maps = new D4Maps(this); // init with this as parent
848  return d_maps;
849 }
850 
851 #if 0
852 
858 unsigned int Array::width(bool constrained) const
859 {
860 
861  if (constrained) {
862  // This preserves the original method's semantics when we ask for the
863  // size of the constrained array but no constraint has been applied.
864  // In this case, length will be -1. Wrong, I know...
865  return length() * var()->width(constrained);
866  }
867  else {
868  int length = 1;
869  for (Dim_iter i = _shape.begin(); i != _shape.end(); i++) {
870  length *= dimension_size(i, false);
871  }
872  return length * var()->width(false);
873  }
874 }
875 #endif
876 
877 class PrintD4ArrayDimXMLWriter: public unary_function<Array::dimension&, void> {
878  XMLWriter &xml;
879 // Was this variable constrained using local/direct slicing? i.e., is d_local_constraint set?
880 // If so, don't use shared dimensions; instead emit Dim elements that are anonymous.
881  bool d_constrained;
882 public:
883 
884  PrintD4ArrayDimXMLWriter(XMLWriter &xml, bool c) :
885  xml(xml), d_constrained(c)
886  {
887  }
888 
889  void operator()(Array::dimension &d)
890  {
891  // This duplicates code in D4Dimensions (where D4Dimension::print_dap4() is defined
892  // because of the need to print the constrained size of a dimension. I think that
893  // the constraint information has to be kept here and not in the dimension (since they
894  // are shared dims). Could hack print_dap4() to take the constrained size, however.
895  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) "Dim") < 0)
896  throw InternalErr(__FILE__, __LINE__, "Could not write Dim element");
897 
898  string name = (d.dim) ? d.dim->fully_qualified_name() : d.name;
899  // If there is a name, there must be a Dimension (named dimension) in scope
900  // so write its name but not its size.
901  if (!d_constrained && !name.empty()) {
902  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name", (const xmlChar*) name.c_str())
903  < 0) throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
904  }
905  else if (d.use_sdim_for_slice) {
906  assert(!name.empty());
907  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name", (const xmlChar*) name.c_str())
908  < 0) throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
909  }
910  else {
911  ostringstream size;
912  size << (d_constrained ? d.c_size : d.size);
913  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "size",
914  (const xmlChar*) size.str().c_str()) < 0)
915  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
916  }
917 
918  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
919  throw InternalErr(__FILE__, __LINE__, "Could not end Dim element");
920  }
921 };
922 
923 class PrintD4ConstructorVarXMLWriter: public unary_function<BaseType*, void> {
924  XMLWriter &xml;
925  bool d_constrained;
926 public:
927  PrintD4ConstructorVarXMLWriter(XMLWriter &xml, bool c) :
928  xml(xml), d_constrained(c)
929  {
930  }
931 
932  void operator()(BaseType *btp)
933  {
934  btp->print_dap4(xml, d_constrained);
935  }
936 };
937 
938 class PrintD4MapXMLWriter: public unary_function<D4Map*, void> {
939  XMLWriter &xml;
940 
941 public:
942  PrintD4MapXMLWriter(XMLWriter &xml) :
943  xml(xml)
944  {
945  }
946 
947  void operator()(D4Map *m)
948  {
949  m->print_dap4(xml);
950  }
951 };
952 
958 void Array::print_dap4(XMLWriter &xml, bool constrained /* default: false*/)
959 {
960  if (constrained && !send_p()) return;
961 
962  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) var()->type_name().c_str()) < 0)
963  throw InternalErr(__FILE__, __LINE__, "Could not write " + type_name() + " element");
964 
965  if (!name().empty())
966  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name", (const xmlChar*) name().c_str()) < 0)
967  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
968 
969 // Hack job... Copied from D4Enum::print_xml_writer. jhrg 11/12/13
970  if (var()->type() == dods_enum_c) {
971  D4Enum *e = static_cast<D4Enum*>(var());
972  string path = e->enumeration()->name();
973  if (e->enumeration()->parent()) {
974  // print the FQN for the enum def; D4Group::FQN() includes the trailing '/'
975  path = static_cast<D4Group*>(e->enumeration()->parent()->parent())->FQN() + path;
976  }
977  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "enum", (const xmlChar*) path.c_str()) < 0)
978  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for enum");
979  }
980 
981  if (prototype()->is_constructor_type()) {
982  Constructor &c = static_cast<Constructor&>(*prototype());
983  for_each(c.var_begin(), c.var_end(), PrintD4ConstructorVarXMLWriter(xml, constrained));
984  // bind2nd(mem_fun_ref(&BaseType::print_dap4), xml));
985  }
986 
987 // Drop the local_constraint which is per-array and use a per-dimension on instead
988  for_each(dim_begin(), dim_end(), PrintD4ArrayDimXMLWriter(xml, constrained));
989 
990  attributes()->print_dap4(xml);
991 
992  for_each(maps()->map_begin(), maps()->map_end(), PrintD4MapXMLWriter(xml));
993 
994  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
995  throw InternalErr(__FILE__, __LINE__, "Could not end " + type_name() + " element");
996 }
997 
1015 void Array::print_decl(FILE *out, string space, bool print_semi, bool constraint_info, bool constrained)
1016 {
1017  ostringstream oss;
1018  print_decl(oss, space, print_semi, constraint_info, constrained);
1019  fwrite(oss.str().data(), sizeof(char), oss.str().length(), out);
1020 }
1021 
1039 void Array::print_decl(ostream &out, string space, bool print_semi, bool constraint_info, bool constrained)
1040 {
1041  if (constrained && !send_p()) return;
1042 
1043 // print it, but w/o semicolon
1044  var()->print_decl(out, space, false, constraint_info, constrained);
1045 
1046  for (Dim_citer i = _shape.begin(); i != _shape.end(); i++) {
1047  out << "[";
1048  if ((*i).name != "") {
1049  out << id2www((*i).name) << " = ";
1050  }
1051  if (constrained) {
1052  out << (*i).c_size << "]";
1053  }
1054  else {
1055  out << (*i).size << "]";
1056  }
1057  }
1058 
1059  if (print_semi) {
1060  out << ";\n";
1061  }
1062 }
1063 
1067 void Array::print_xml(FILE *out, string space, bool constrained)
1068 {
1069  XMLWriter xml(space);
1070  print_xml_writer_core(xml, constrained, "Array");
1071  fwrite(xml.get_doc(), sizeof(char), xml.get_doc_size(), out);
1072 }
1073 
1077 void Array::print_xml(ostream &out, string space, bool constrained)
1078 {
1079  XMLWriter xml(space);
1080  print_xml_writer_core(xml, constrained, "Array");
1081  out << xml.get_doc();
1082 }
1083 
1087 void Array::print_as_map_xml(FILE *out, string space, bool constrained)
1088 {
1089  XMLWriter xml(space);
1090  print_xml_writer_core(xml, constrained, "Map");
1091  fwrite(xml.get_doc(), sizeof(char), xml.get_doc_size(), out);
1092 }
1093 
1097 void Array::print_as_map_xml(ostream &out, string space, bool constrained)
1098 {
1099  XMLWriter xml(space);
1100  print_xml_writer_core(xml, constrained, "Map");
1101  out << xml.get_doc();
1102 }
1103 
1107 void Array::print_xml_core(FILE *out, string space, bool constrained, string tag)
1108 {
1109  XMLWriter xml(space);
1110  print_xml_writer_core(xml, constrained, tag);
1111  fwrite(xml.get_doc(), sizeof(char), xml.get_doc_size(), out);
1112 }
1113 
1117 void Array::print_xml_core(ostream &out, string space, bool constrained, string tag)
1118 {
1119  XMLWriter xml(space);
1120  print_xml_writer_core(xml, constrained, tag);
1121  out << xml.get_doc();
1122 }
1123 
1124 void Array::print_xml_writer(XMLWriter &xml, bool constrained)
1125 {
1126  print_xml_writer_core(xml, constrained, "Array");
1127 }
1128 
1129 void Array::print_as_map_xml_writer(XMLWriter &xml, bool constrained)
1130 {
1131  print_xml_writer_core(xml, constrained, "Map");
1132 }
1133 
1134 class PrintArrayDimXMLWriter: public unary_function<Array::dimension&, void> {
1135  XMLWriter &xml;
1136  bool d_constrained;
1137 public:
1138  PrintArrayDimXMLWriter(XMLWriter &xml, bool c) :
1139  xml(xml), d_constrained(c)
1140  {
1141  }
1142 
1143  void operator()(Array::dimension &d)
1144  {
1145  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) "dimension") < 0)
1146  throw InternalErr(__FILE__, __LINE__, "Could not write dimension element");
1147 
1148  if (!d.name.empty())
1149  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name", (const xmlChar*) d.name.c_str())
1150  < 0) throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
1151 
1152  ostringstream size;
1153  size << (d_constrained ? d.c_size : d.size);
1154  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "size", (const xmlChar*) size.str().c_str())
1155  < 0) throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
1156 
1157  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
1158  throw InternalErr(__FILE__, __LINE__, "Could not end dimension element");
1159  }
1160 };
1161 
1162 void Array::print_xml_writer_core(XMLWriter &xml, bool constrained, string tag)
1163 {
1164  if (constrained && !send_p()) return;
1165 
1166  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) tag.c_str()) < 0)
1167  throw InternalErr(__FILE__, __LINE__, "Could not write " + tag + " element");
1168 
1169  if (!name().empty())
1170  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name", (const xmlChar*) name().c_str()) < 0)
1171  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
1172 
1174 
1175  BaseType *btp = var();
1176  string tmp_name = btp->name();
1177  btp->set_name("");
1178  btp->print_xml_writer(xml, constrained);
1179  btp->set_name(tmp_name);
1180 
1181  for_each(dim_begin(), dim_end(), PrintArrayDimXMLWriter(xml, constrained));
1182 
1183  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
1184  throw InternalErr(__FILE__, __LINE__, "Could not end " + tag + " element");
1185 }
1186 
1198 unsigned int Array::print_array(FILE *out, unsigned int index, unsigned int dims, unsigned int shape[])
1199 {
1200  ostringstream oss;
1201  unsigned int i = print_array(oss, index, dims, shape);
1202  fwrite(oss.str().data(), sizeof(char), oss.str().length(), out);
1203 
1204  return i;
1205 }
1206 
1218 unsigned int Array::print_array(ostream &out, unsigned int index, unsigned int dims, unsigned int shape[])
1219 {
1220  if (dims == 1) {
1221  out << "{";
1222 
1223  // Added test in case this method is passed an array with no elements. jhrg 1/27/16
1224  if (shape[0] >= 1) {
1225  for (unsigned i = 0; i < shape[0] - 1; ++i) {
1226  var(index++)->print_val(out, "", false);
1227  out << ", ";
1228  }
1229  var(index++)->print_val(out, "", false);
1230  }
1231 
1232  out << "}";
1233 
1234  return index;
1235  }
1236  else {
1237  out << "{";
1238  // Fixed an off-by-one error in the following loop. Since the array
1239  // length is shape[dims-1]-1 *and* since we want one less dimension
1240  // than that, the correct limit on this loop is shape[dims-2]-1. From
1241  // Todd Karakasian.
1242  //
1243  // The saga continues; the loop test should be `i < shape[0]-1'. jhrg
1244  // 9/12/96.
1245  //
1246  // For arrays that hold zero values but have rank > 1, the print out
1247  // may look a little odd (e.g., x[4][0] will print as { {}, {}, {}, {} })
1248  // but it's not wrong and this is really for debugging mostly. jhrg 1/28/16
1249  if (shape[0] > 0) {
1250  for (unsigned i = 0; i < shape[0] - 1; ++i) {
1251  index = print_array(out, index, dims - 1, shape + 1);
1252  out << ",";
1253  }
1254 
1255  index = print_array(out, index, dims - 1, shape + 1);
1256  }
1257 
1258  out << "}";
1259 
1260  return index;
1261  }
1262 }
1263 
1264 void Array::print_val(FILE *out, string space, bool print_decl_p)
1265 {
1266  ostringstream oss;
1267  print_val(oss, space, print_decl_p);
1268  fwrite(oss.str().data(), sizeof(char), oss.str().length(), out);
1269 }
1270 
1271 void Array::print_val(ostream &out, string space, bool print_decl_p)
1272 {
1273 // print the declaration if print decl is true.
1274 // for each dimension,
1275 // for each element,
1276 // print the array given its shape, number of dimensions.
1277 // Add the `;'
1278 
1279  if (print_decl_p) {
1280  print_decl(out, space, false, false, false);
1281  out << " = ";
1282  }
1283 
1284  unsigned int *shape = new unsigned int[dimensions(true)];
1285  unsigned int index = 0;
1286  for (Dim_iter i = _shape.begin(); i != _shape.end() && index < dimensions(true); ++i)
1287  shape[index++] = dimension_size(i, true);
1288 
1289  print_array(out, 0, dimensions(true), shape);
1290 
1291  delete[] shape;
1292  shape = 0;
1293 
1294  if (print_decl_p) {
1295  out << ";\n";
1296  }
1297 }
1298 
1308 bool Array::check_semantics(string &msg, bool)
1309 {
1310  bool sem = BaseType::check_semantics(msg) && !_shape.empty();
1311 
1312  if (!sem) msg = "An array variable must have dimensions";
1313 
1314  return sem;
1315 }
1316 
1325 void Array::dump(ostream &strm) const
1326 {
1327  strm << DapIndent::LMarg << "Array::dump - (" << (void *) this << ")" << endl;
1328  DapIndent::Indent();
1329  Vector::dump(strm);
1330  strm << DapIndent::LMarg << "shape:" << endl;
1331  DapIndent::Indent();
1332  Dim_citer i = _shape.begin();
1333  Dim_citer ie = _shape.end();
1334  unsigned int dim_num = 0;
1335  for (; i != ie; i++) {
1336  strm << DapIndent::LMarg << "dimension " << dim_num++ << ":" << endl;
1337  DapIndent::Indent();
1338  strm << DapIndent::LMarg << "name: " << (*i).name << endl;
1339  strm << DapIndent::LMarg << "size: " << (*i).size << endl;
1340  strm << DapIndent::LMarg << "start: " << (*i).start << endl;
1341  strm << DapIndent::LMarg << "stop: " << (*i).stop << endl;
1342  strm << DapIndent::LMarg << "stride: " << (*i).stride << endl;
1343  strm << DapIndent::LMarg << "constrained size: " << (*i).c_size << endl;
1344  DapIndent::UnIndent();
1345  }
1346  DapIndent::UnIndent();
1347  DapIndent::UnIndent();
1348 }
1349 
1350 } // namespace libdap
1351 
virtual void print_xml_writer(XMLWriter &xml, bool constrained=false)
Definition: Array.cc:1124
-
virtual void reset_constraint()
Reset constraint to select entire array.
Definition: Array.cc:593
-
virtual void add_constraint(Dim_iter i, int start, int stride, int stop)
Adds a constraint to an Array dimension.
Definition: Array.cc:647
-
virtual string name() const
Returns the name of the class instance.
Definition: BaseType.cc:320
-
virtual bool check_semantics(string &msg, bool all=false)
Check semantic features of the Array.
Definition: Array.cc:1308
-
virtual void print_xml_core(FILE *out, string space, bool constrained, string tag)
Definition: Array.cc:1107
-
vector< D4Dimension * >::iterator D4DimensionsIter
Iterator used for D4Dimensions.
Definition: D4Dimensions.h:122
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Array.cc:1325
-
virtual void print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
Print an ASCII representation of the variable structure.
Definition: BaseType.cc:1003
-
Array(const string &n, BaseType *v, bool is_dap4=false)
Array constructor.
Definition: Array.cc:136
-
virtual unsigned int dimensions(bool constrained=false)
Return the total number of dimensions in the array.
Definition: Array.cc:711
-
Part
Names the parts of multi-section constructor data types.
Definition: Type.h:48
-
void add_var(BaseType *v, Part p=nil)
Add the BaseType pointer to this constructor type instance.
Definition: Array.cc:470
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
virtual void set_name(const string &n)
Sets the name of the class instance.
Definition: BaseType.cc:344
-
int stop
The constraint end index.
Definition: Array.h:149
-
Holds a one-dimensional collection of DAP2 data types.
Definition: Vector.h:80
-
virtual unsigned int width(bool constrained=false) const
Returns the width of the data, in bytes.
Definition: Vector.cc:536
-
virtual void print_xml_writer(XMLWriter &xml, bool constrained=false)
Definition: BaseType.cc:1134
-
virtual string get_name() const
Get the name of this attribute table.
Definition: AttrTable.cc:238
-
std::vector< dimension >::const_iterator Dim_citer
Definition: Array.h:198
-
bool use_sdim_for_slice
Used to control printing the DMR in data responses.
Definition: Array.h:146
-
int start
The constraint start index.
Definition: Array.h:148
-
BaseType(const string &n, const Type &t, bool is_dap4=false)
The BaseType constructor.
Definition: BaseType.cc:126
-
virtual void add_var(BaseType *v, Part p=nil)
Add the BaseType pointer to this constructor type instance.
Definition: Vector.cc:1960
-
D4DimensionsIter dim_end()
Get an iterator to the end of the dimensions.
Definition: D4Dimensions.h:166
-
STL namespace.
-
void print_xml_writer(XMLWriter &xml)
Definition: AttrTable.cc:1425
- -
virtual void add_var_nocopy(BaseType *bt, Part part=nil)
Definition: Constructor.cc:432
-
virtual void print(FILE *out, string pad=" ", bool dereference=false)
Prints the attribute table.
Definition: AttrTable.cc:1243
-
void append_dim(int size, const string &name="")
Add a dimension of a given size.
Definition: Array.cc:522
-
virtual void update_length(int size=0)
Definition: Array.cc:103
-
D4DimensionsIter dim_begin()
Get an iterator to the start of the dimensions.
Definition: D4Dimensions.h:163
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
Dim_iter dim_end()
Definition: Array.cc:696
-
virtual std::string FQN() const
Definition: BaseType.cc:332
-
void transform_attrs_to_dap2(AttrTable *d2_attr_table)
Copy the attributes from this D4Attributes object to a DAP2 AttrTable.
-
virtual void set_array(Array *p_new_arr)
Definition: Grid.cc:389
-
virtual BaseType * var(const string &name="", bool exact_match=true, btp_stack *s=0)
Definition: Vector.cc:433
-
virtual void print_as_map_xml(ostream &out, string space=" ", bool constrained=false)
Definition: Array.cc:1097
- -
virtual std::vector< BaseType * > * transform_to_dap2(AttrTable *parent_attr_table)
Transforms this instance of a D4Array into the corresponding DAP2 object.
Definition: Array.cc:302
-
Holds a DAP4 enumeration.
Definition: D4Enum.h:61
-
virtual int dimension_size(Dim_iter i, bool constrained=false)
Returns the size of the dimension.
Definition: Array.cc:733
-
virtual void print_val(FILE *out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: BaseType.cc:1090
-
virtual bool is_constructor_type() const
Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable...
Definition: BaseType.cc:412
-
void add_dim_nocopy(D4Dimension *dim)
Definition: D4Dimensions.h:160
-
virtual AttrTable * append_container(const string &name)
Add a container to the attribute table.
Definition: AttrTable.cc:410
- -
virtual Type type() const
Returns the type of the class instance.
Definition: BaseType.cc:365
-
std::vector< dimension >::iterator Dim_iter
Definition: Array.h:206
-
void clear_all_dims()
Definition: Array.cc:564
-
virtual string dimension_name(Dim_iter i)
Returns the name of the specified dimension.
Definition: Array.cc:827
-
virtual BaseType * ptr_duplicate()
Definition: Array.cc:175
-
virtual int dimension_stride(Dim_iter i, bool constrained=false)
Returns the stride value of the constraint.
Definition: Array.cc:812
-
Holds the Grid data type.
Definition: Grid.h:122
-
int stride
The constraint stride.
Definition: Array.h:150
-
virtual void print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
Prints a DDS entry for the Array.
Definition: Array.cc:1039
-
int c_size
Size of dimension once constrained.
Definition: Array.h:151
-
virtual D4Attributes * attributes()
Definition: BaseType.cc:599
-
virtual Array * add_map(Array *p_new_map, bool add_copy)
Definition: Grid.cc:455
-
void prepend_dim(int size, const string &name="")
Definition: Array.cc:543
-
virtual void print_xml(ostream &out, string space=" ", bool constrained=false)
Definition: Array.cc:1077
-
string www2id(const string &in, const string &escape, const string &except)
Definition: escaping.cc:220
-
virtual int dimension_stop(Dim_iter i, bool constrained=false)
Return the stop index of the constraint.
Definition: Array.cc:788
- - -
virtual int dimension_start(Dim_iter i, bool constrained=false)
Return the start index of a dimension.
Definition: Array.cc:765
-
virtual AttrTable & get_attr_table()
Definition: BaseType.cc:582
-
virtual void print_dap4(XMLWriter &xml, bool constrained=false)
Print the DAP4 representation of an array.
Definition: Array.cc:958
-
virtual ~Array()
The Array destructor.
Definition: Array.cc:169
-
int size
The unconstrained dimension size.
Definition: Array.h:135
-
string name
The name of this dimension.
Definition: Array.h:136
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
Dim_iter dim_begin()
Definition: Array.cc:690
-
virtual string type_name() const
Returns the type of the class instance as a string.
Definition: BaseType.cc:379
-
Vars_iter var_begin()
Definition: Constructor.cc:356
-
virtual int length() const
Definition: Vector.cc:548
-
void rename_dim(const string &oldName="", const string &newName="")
Renames dimension.
Definition: Array.cc:574
-
Vars_iter var_end()
Definition: Constructor.cc:364
- -
virtual void set_length(int l)
Definition: Vector.cc:555
- -
A class for error processing.
Definition: Error.h:92
-
virtual unsigned int get_size() const
Get the number of entries in this attribute table.
Definition: AttrTable.cc:231
-
virtual void set_name(const string &n)
Set the name of this attribute table.
Definition: AttrTable.cc:245
-
void transform_to_dap4(AttrTable &at)
copy attributes from DAP2 to DAP4
-
unsigned int print_array(FILE *out, unsigned int index, unsigned int dims, unsigned int shape[])
Print the value given the current constraint.
Definition: Array.cc:1198
-
A multidimensional array of identical data types.
Definition: Array.h:112
-
virtual void print_val(ostream &out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: Array.cc:1271
-
virtual unsigned int width(bool constrained=false) const
How many bytes does this variable use Return the number of bytes of storage this variable uses...
Definition: BaseType.cc:1299
-
virtual bool send_p()
Should this variable be sent?
Definition: BaseType.cc:554
-
virtual void transform_to_dap4(D4Group *root, Constructor *container)
DAP2 to DAP4 transform.
Definition: Array.cc:192
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Vector.cc:2043
-
string id2www(string in, const string &allowable)
Definition: escaping.cc:153
- -
D4Dimensions * dims()
Get the dimensions defined for this Group.
Definition: D4Group.h:82
-
virtual void clear_constraint()
Clears the projection; add each projected dimension explicitly using add_constraint.
Definition: Array.cc:616
-
virtual bool check_semantics(string &msg, bool all=false)
Compare an object&#39;s current state with the semantics of its type.
Definition: BaseType.cc:1209
-
-
- - - - diff --git a/html/Array_8h_source.html b/html/Array_8h_source.html deleted file mode 100644 index 9232ed324..000000000 --- a/html/Array_8h_source.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - -libdap: Array.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Array.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1994-1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Class for array variables. The dimensions of the array are stored in the
33 // list SHAPE.
34 //
35 // jhrg 9/6/94
36 
37 #ifndef _array_h
38 #define _array_h 1
39 
40 #include <string>
41 #include <vector>
42 
43 #ifndef _dods_limits_h
44 #include "dods-limits.h"
45 #endif
46 
47 #ifndef _vector_h
48 #include "Vector.h"
49 #endif
50 
51 //#include "D4Dimensions.h"
52 
53 namespace libdap
54 {
55 class D4Group;
56 class D4Maps;
57 class XMLWriter;
58 class D4Dimension;
59 class D4Dimensions;
60 
61 const int DODS_MAX_ARRAY = DODS_INT_MAX;
62 
112 class Array: public Vector
113 {
114 public:
125  struct dimension
126  {
127  // In DAP2, the name and size of a dimension is stored here, along
128  // with information about any constraint. In DAP4, either the name
129  // and size are stored in the two fields below _or_ the name and
130  // size information comes from a dimension object defined in a
131  // group that is referenced by the 'dim' pointer. Do not free this
132  // pointer; it is shared between the array and the Group where the
133  // Dimension is defined. To keep Array manageable to implement, size
134  // will be set here using the value from 'dim' if it is not null.
135  int size;
136  string name;
137 
139 
140  // when a DMR is printed for a data response, if an array uses shared
141  // dimensions and those sdims have been sliced, make sure to use those
142  // and get the syntax correct. That's what this field does - in every
143  // case the array records the sizes of its dimensions and their slices
144  // regardless of whether they were provided explicitly in a CE or inherited
145  // from a sliced sdim.
147 
148  int start;
149  int stop;
150  int stride;
151  int c_size;
152 
153  dimension() : size(0), name(""), dim(0), use_sdim_for_slice(false) {
154  // this information changes with each constraint expression
155  start = 0;
156  stop = 0;
157  stride = 1;
158  c_size = size;
159  }
160 
161  dimension(unsigned long s, string n) : size(s), name(n), dim(0), use_sdim_for_slice(false) {
162  start = 0;
163  stop = size - 1;
164  stride = 1;
165  c_size = size;
166  }
167 
169  };
170 
171  D4Maps *d_maps;
172 
173 private:
174  std::vector<dimension> _shape; // list of dimensions (i.e., the shape)
175 
176  void update_dimension_pointers(D4Dimensions *old_dims, D4Dimensions *new_dims);
177 
178  friend class ArrayTest;
179  friend class D4Group;
180 
181  bool is_dap2_grid();
182 
183 protected:
184  void _duplicate(const Array &a);
185 
186  unsigned int print_array(FILE *out, unsigned int index,
187  unsigned int dims, unsigned int shape[]);
188 
189  unsigned int print_array(ostream &out, unsigned int index,
190  unsigned int dims, unsigned int shape[]);
191 
192 public:
198  typedef std::vector<dimension>::const_iterator Dim_citer;
199 
206  typedef std::vector<dimension>::iterator Dim_iter;
207 
208  Array(const string &n, BaseType *v, bool is_dap4 = false);
209  Array(const string &n, const string &d, BaseType *v, bool is_dap4 = false);
210  Array(const Array &rhs);
211  virtual ~Array();
212 
213  Array &operator=(const Array &rhs);
214  virtual BaseType *ptr_duplicate();
215 
216  virtual void transform_to_dap4(D4Group *root, Constructor *container);
217  virtual std::vector<BaseType *> *transform_to_dap2(AttrTable *parent_attr_table);
218 
219  void add_var(BaseType *v, Part p = nil);
220  void add_var_nocopy(BaseType *v, Part p = nil);
221 
222  void append_dim(int size, const string &name = "");
223  void append_dim(D4Dimension *dim);
224  void prepend_dim(int size, const string& name = "");
225  void prepend_dim(D4Dimension *dim);
226  void clear_all_dims();
227  void rename_dim(const string &oldName = "", const string &newName = "");
228 
229  virtual void add_constraint(Dim_iter i, int start, int stride, int stop);
230  virtual void add_constraint(Dim_iter i, D4Dimension *dim);
231  virtual void reset_constraint();
232 
233  virtual void clear_constraint(); // deprecated
234 
235  virtual void update_length(int size = 0); // should be used internally only
236 
237  Dim_iter dim_begin() ;
238  Dim_iter dim_end() ;
239 
240  virtual int dimension_size(Dim_iter i, bool constrained = false);
241  virtual int dimension_start(Dim_iter i, bool constrained = false);
242  virtual int dimension_stop(Dim_iter i, bool constrained = false);
243  virtual int dimension_stride(Dim_iter i, bool constrained = false);
244  virtual string dimension_name(Dim_iter i);
245  virtual D4Dimension *dimension_D4dim(Dim_iter i);
246 
247  virtual unsigned int dimensions(bool constrained = false);
248 
249  virtual D4Maps *maps();
250 
251  virtual void print_dap4(XMLWriter &xml, bool constrained = false);
252 
253  // These are all DAP2 output methods
254 
255  virtual void print_decl(ostream &out, string space = " ",
256  bool print_semi = true,
257  bool constraint_info = false,
258  bool constrained = false);
259 
260  virtual void print_xml(ostream &out, string space = " ",
261  bool constrained = false);
262 
263  virtual void print_xml_writer(XMLWriter &xml, bool constrained = false);
264  virtual void print_xml_writer_core(XMLWriter &out, bool constrained, string tag);
265  virtual void print_as_map_xml_writer(XMLWriter &xml, bool constrained);
266 
267  virtual void print_xml_core(FILE *out, string space, bool constrained, string tag);
268  virtual void print_xml_core(ostream &out, string space, bool constrained, string tag);
269 
270  // not used (?)
271  virtual void print_as_map_xml(ostream &out, string space = " ",
272  bool constrained = false);
273 
274  virtual void print_val(ostream &out, string space = "",
275  bool print_decl_p = true);
276 
277  virtual void print_xml(FILE *out, string space = " ",
278  bool constrained = false);
279  virtual void print_as_map_xml(FILE *out, string space = " ",
280  bool constrained = false);
281  virtual void print_val(FILE *out, string space = "",
282  bool print_decl_p = true);
283  virtual void print_decl(FILE *out, string space = " ",
284  bool print_semi = true,
285  bool constraint_info = false,
286  bool constrained = false);
287 
288  virtual bool check_semantics(string &msg, bool all = false);
289 
290 
291  virtual void dump(ostream &strm) const ;
292 };
293 
294 } // namespace libdap
295 
296 #endif // _array_h
virtual void print_xml_writer(XMLWriter &xml, bool constrained=false)
Definition: Array.cc:1124
-
virtual void reset_constraint()
Reset constraint to select entire array.
Definition: Array.cc:593
-
virtual void add_constraint(Dim_iter i, int start, int stride, int stop)
Adds a constraint to an Array dimension.
Definition: Array.cc:647
-
virtual bool check_semantics(string &msg, bool all=false)
Check semantic features of the Array.
Definition: Array.cc:1308
-
virtual void print_xml_core(FILE *out, string space, bool constrained, string tag)
Definition: Array.cc:1107
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Array.cc:1325
-
Array(const string &n, BaseType *v, bool is_dap4=false)
Array constructor.
Definition: Array.cc:136
-
virtual unsigned int dimensions(bool constrained=false)
Return the total number of dimensions in the array.
Definition: Array.cc:711
-
Part
Names the parts of multi-section constructor data types.
Definition: Type.h:48
-
void add_var(BaseType *v, Part p=nil)
Add the BaseType pointer to this constructor type instance.
Definition: Array.cc:470
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
int stop
The constraint end index.
Definition: Array.h:149
-
Holds a one-dimensional collection of DAP2 data types.
Definition: Vector.h:80
-
std::vector< dimension >::const_iterator Dim_citer
Definition: Array.h:198
-
bool use_sdim_for_slice
Used to control printing the DMR in data responses.
Definition: Array.h:146
-
int start
The constraint start index.
Definition: Array.h:148
-
void append_dim(int size, const string &name="")
Add a dimension of a given size.
Definition: Array.cc:522
-
virtual void update_length(int size=0)
Definition: Array.cc:103
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
Dim_iter dim_end()
Definition: Array.cc:696
-
virtual void print_as_map_xml(ostream &out, string space=" ", bool constrained=false)
Definition: Array.cc:1097
- -
virtual std::vector< BaseType * > * transform_to_dap2(AttrTable *parent_attr_table)
Transforms this instance of a D4Array into the corresponding DAP2 object.
Definition: Array.cc:302
-
virtual int dimension_size(Dim_iter i, bool constrained=false)
Returns the size of the dimension.
Definition: Array.cc:733
- -
std::vector< dimension >::iterator Dim_iter
Definition: Array.h:206
-
void clear_all_dims()
Definition: Array.cc:564
-
virtual string dimension_name(Dim_iter i)
Returns the name of the specified dimension.
Definition: Array.cc:827
-
virtual BaseType * ptr_duplicate()
Definition: Array.cc:175
-
virtual int dimension_stride(Dim_iter i, bool constrained=false)
Returns the stride value of the constraint.
Definition: Array.cc:812
-
int stride
The constraint stride.
Definition: Array.h:150
-
virtual void print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
Prints a DDS entry for the Array.
Definition: Array.cc:1039
-
D4Dimension * dim
If not null, a weak pointer to the D4Dimension.
Definition: Array.h:138
-
int c_size
Size of dimension once constrained.
Definition: Array.h:151
-
void prepend_dim(int size, const string &name="")
Definition: Array.cc:543
-
virtual void print_xml(ostream &out, string space=" ", bool constrained=false)
Definition: Array.cc:1077
-
virtual int dimension_stop(Dim_iter i, bool constrained=false)
Return the stop index of the constraint.
Definition: Array.cc:788
- - -
virtual int dimension_start(Dim_iter i, bool constrained=false)
Return the start index of a dimension.
Definition: Array.cc:765
-
virtual void print_dap4(XMLWriter &xml, bool constrained=false)
Print the DAP4 representation of an array.
Definition: Array.cc:958
-
virtual ~Array()
The Array destructor.
Definition: Array.cc:169
-
int size
The unconstrained dimension size.
Definition: Array.h:135
-
string name
The name of this dimension.
Definition: Array.h:136
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
Dim_iter dim_begin()
Definition: Array.cc:690
-
void rename_dim(const string &oldName="", const string &newName="")
Renames dimension.
Definition: Array.cc:574
- - -
unsigned int print_array(FILE *out, unsigned int index, unsigned int dims, unsigned int shape[])
Print the value given the current constraint.
Definition: Array.cc:1198
-
A multidimensional array of identical data types.
Definition: Array.h:112
-
virtual void print_val(ostream &out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: Array.cc:1271
-
virtual void transform_to_dap4(D4Group *root, Constructor *container)
DAP2 to DAP4 transform.
Definition: Array.cc:192
- -
virtual void clear_constraint()
Clears the projection; add each projected dimension explicitly using add_constraint.
Definition: Array.cc:616
-
-
- - - - diff --git a/html/AttrTable_8cc_source.html b/html/AttrTable_8cc_source.html deleted file mode 100644 index 454d49581..000000000 --- a/html/AttrTable_8cc_source.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - -libdap: AttrTable.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
AttrTable.cc
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2002,2003 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 // (c) COPYRIGHT URI/MIT 1994-1999
26 // Please read the full copyright statement in the file COPYRIGHT_URI.
27 //
28 // Authors:
29 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
30 
31 // jhrg 7/29/94
32 
33 #include "config.h"
34 
35 #include <cassert>
36 #include <sstream>
37 
38 #include "AttrTable.h"
39 
40 #include "util.h"
41 #include "escaping.h"
42 #include "DapIndent.h"
43 
44 #include "debug.h"
45 
46 // Should the www2id and id2www functions be used to encode attribute names?
47 // Probably not... jhrg 11/16/11
48 #define WWW_ENCODING 0
49 // See the note for del_attr_table(). That method now deletes the contained
50 // AttrTable.
51 #define NEW_DEL_ATTR_TABLE_BEHAVIOR 0
52 
53 using std::cerr;
54 using std::string;
55 using std::endl;
56 using std::vector;
57 
58 namespace libdap {
59 
61 string remove_space_encoding(const string &s)
62 {
63  string::size_type pos = s.find("%20");
64  if (pos != string::npos) {
65  string n = s;
66  do {
67  n.replace(pos, 3, " ");
68  pos = n.find("%20");
69  } while (pos != string::npos);
70  return n;
71  }
72  else {
73  return s;
74  }
75 }
76 
78 string add_space_encoding(const string &s)
79 {
80  string::size_type pos = s.find(" ");
81  if (pos != string::npos) {
82  string n = s;
83  do {
84  n.replace(pos, 1, "%20");
85  pos = n.find(" ");
86  } while (pos != string::npos);
87  return n;
88  }
89  else {
90  return s;
91  }
92 }
93 
97 string AttrType_to_String(const AttrType at)
98 {
99  switch (at) {
100  case Attr_container:
101  return "Container";
102  case Attr_byte:
103  return "Byte";
104  case Attr_int16:
105  return "Int16";
106  case Attr_uint16:
107  return "UInt16";
108  case Attr_int32:
109  return "Int32";
110  case Attr_uint32:
111  return "UInt32";
112  case Attr_float32:
113  return "Float32";
114  case Attr_float64:
115  return "Float64";
116  case Attr_string:
117  return "String";
118  case Attr_url:
119  return "Url";
120  case Attr_other_xml:
121  return "OtherXML";
122  default:
123  return "";
124  }
125 }
126 
127 AttrType String_to_AttrType(const string &s)
128 {
129  string s2 = s;
130  downcase(s2);
131 
132  if (s2 == "container")
133  return Attr_container;
134  else if (s2 == "byte")
135  return Attr_byte;
136  else if (s2 == "int16")
137  return Attr_int16;
138  else if (s2 == "uint16")
139  return Attr_uint16;
140  else if (s2 == "int32")
141  return Attr_int32;
142  else if (s2 == "uint32")
143  return Attr_uint32;
144  else if (s2 == "float32")
145  return Attr_float32;
146  else if (s2 == "float64")
147  return Attr_float64;
148  else if (s2 == "string")
149  return Attr_string;
150  else if (s2 == "url")
151  return Attr_url;
152  else if (s2 == "otherxml")
153  return Attr_other_xml;
154  else
155  return Attr_unknown;
156 }
157 
161 {
162  d_name = at.d_name;
163  d_is_global_attribute = at.d_is_global_attribute;
164 
165  // Set the parent to null (no parent, not in container)
166  // since using at.d_parent is semantically incorrect
167  // and potentially dangerous.
168  d_parent = 0;
169 
170  Attr_citer i = at.attr_map.begin();
171  Attr_citer ie = at.attr_map.end();
172  for (; i != ie; ++i) {
173  // this deep-copies containers recursively
174  entry *e = new entry(*(*i));
175  attr_map.push_back(e);
176 
177  // If the entry being added was a container,
178  // set its parent to this to maintain invariant.
179  if (e->type == Attr_container) {
180  assert(e->attributes);
181  e->attributes->d_parent = this;
182  }
183  }
184 }
185 
189 AttrTable::AttrTable() :
190  DapObj(), d_name(""), d_parent(0), attr_map(), d_is_global_attribute(true)
191 {
192 }
193 
194 AttrTable::AttrTable(const AttrTable &rhs) :
195  DapObj()
196 {
197  clone(rhs);
198 }
199 
200 // Private
201 void AttrTable::delete_attr_table()
202 {
203  for (Attr_iter i = attr_map.begin(); i != attr_map.end(); ++i) {
204  delete *i;
205  }
206  attr_map.clear();
207 }
208 
209 AttrTable::~AttrTable()
210 {
211  delete_attr_table();
212 }
213 
214 AttrTable &
215 AttrTable::operator=(const AttrTable &rhs)
216 {
217  if (this != &rhs) {
218  delete_attr_table();
219  clone(rhs);
220  }
221 
222  return *this;
223 }
225 
231 unsigned int AttrTable::get_size() const
232 {
233  return attr_map.size();
234 }
235 
238 string AttrTable::get_name() const
239 {
240  return d_name;
241 }
242 
245 void AttrTable::set_name(const string &n)
246 {
247 #if WWW_ENCODING
248  d_name = www2id(n);
249 #else
250  d_name = remove_space_encoding(n);
251 #endif
252 }
253 
254 #if 0
255 // This was taken from das.y and could be used here to make the 'dods_errors'
256 // attribute container like the parser used to. Then again, maybe this feature
257 // was just BS. jhrg (ticket 1469)
258 static void add_bad_attribute(AttrTable *attr, const string &type, const string &name, const string &value,
259  const string &msg) {
260  // First, if this bad value is already in a *_dods_errors container,
261  // then just add it. This can happen when the server side processes a DAS
262  // and then hands it off to a client which does the same.
263  // Make a new container. Call it <attr's name>_errors. If that container
264  // already exists, use it.
265  // Add the attribute.
266  // Add the error string to an attribute in the container called
267  // `<name_explanation.'.
268 
269  if (attr->get_name().find("_dods_errors") != string::npos) {
270  attr->append_attr(name, type, value);
271  }
272  else {
273  // I think _dods_errors should be _dap_error. jhrg 11/16/11
274  string error_cont_name = attr->get_name() + "_dods_errors";
275  AttrTable *error_cont = attr->get_attr_table(error_cont_name);
276  if (!error_cont)
277  error_cont = attr->append_container(error_cont_name);
278 
279  error_cont->append_attr(name, type, value);
280 
281 #ifndef ATTR_STRING_QUOTE_FIX
282  error_cont->append_attr(name + "_dap_explanation", "String", "\"" + msg + "\"");
283 #else
284  error_cont->append_attr(name + "_dap_explanation", "String", msg);
285 #endif
286  }
287 }
288 #endif
289 
307 unsigned int AttrTable::append_attr(const string &name, const string &type, const string &value)
308 {
309  DBG(cerr << "Entering AttrTable::append_attr" << endl);
310 #if WWW_ENCODING
311  string lname = www2id(name);
312 #else
313  string lname = remove_space_encoding(name);
314 #endif
315 
316  Attr_iter iter = simple_find(lname);
317 
318  // If the types don't match OR this attribute is a container, calling
319  // this mfunc is an error!
320  if (iter != attr_map.end() && ((*iter)->type != String_to_AttrType(type)))
321  throw Error(string("An attribute called `") + name + string("' already exists but is of a different type"));
322  if (iter != attr_map.end() && (get_type(iter) == "Container"))
323  throw Error(string("An attribute called `") + name + string("' already exists but is a container."));
324 
325  if (iter != attr_map.end()) { // Must be a new attribute value; add it.
326  (*iter)->attr->push_back(value);
327  return (*iter)->attr->size();
328  }
329  else { // Must be a completely new attribute; add it
330  entry *e = new entry;
331 
332  e->name = lname;
333  e->is_alias = false;
334  e->type = String_to_AttrType(type); // Record type using standard names.
335  e->attr = new vector<string> ;
336  e->attr->push_back(value);
337 
338  attr_map.push_back(e);
339 
340  return e->attr->size(); // return the length of the attr vector
341  }
342 }
343 
362 unsigned int AttrTable::append_attr(const string &name, const string &type, vector<string> *values)
363 {
364  DBG(cerr << "Entering AttrTable::append_attr(..., vector)" << endl);
365 #if WWW_ENCODING
366  string lname = www2id(name);
367 #else
368  string lname = remove_space_encoding(name);
369 #endif
370  Attr_iter iter = simple_find(lname);
371 
372  // If the types don't match OR this attribute is a container, calling
373  // this mfunc is an error!
374  if (iter != attr_map.end() && ((*iter)->type != String_to_AttrType(type)))
375  throw Error(string("An attribute called `") + name + string("' already exists but is of a different type"));
376  if (iter != attr_map.end() && (get_type(iter) == "Container"))
377  throw Error(string("An attribute called `") + name + string("' already exists but is a container."));
378 
379  if (iter != attr_map.end()) { // Must be new attribute values; add.
380  vector<string>::iterator i = values->begin();
381  while (i != values->end())
382  (*iter)->attr->push_back(*i++);
383 
384  return (*iter)->attr->size();
385  }
386  else { // Must be a completely new attribute; add it
387  entry *e = new entry;
388 
389  e->name = lname;
390  e->is_alias = false;
391  e->type = String_to_AttrType(type); // Record type using standard names.
392  e->attr = new vector<string> (*values);
393 
394  attr_map.push_back(e);
395 
396  return e->attr->size(); // return the length of the attr vector
397  }
398 }
399 
409 AttrTable *
410 AttrTable::append_container(const string &name)
411 {
412  AttrTable *new_at = new AttrTable;
413  AttrTable *ret = NULL;
414  try {
415  ret = append_container(new_at, name);
416  } catch (Error &e) {
417  // an error occurred, attribute with that name already exists
418  delete new_at;
419  new_at = 0;
420  throw;
421  }
422  return ret;
423 }
424 
439 AttrTable *
440 AttrTable::append_container(AttrTable *at, const string &name)
441 {
442 #if WWW_ENCODING
443  string lname = www2id(name);
444 #else
445  string lname = remove_space_encoding(name);
446 #endif
447 
448  if (simple_find(name) != attr_end())
449  throw Error("There already exists a container called '" + name + "' in this attribute table (" + at->get_name() + "). (1)");
450 
451  DBG(cerr << "Setting appended attribute container name to: " << lname << endl);
452  at->set_name(lname);
453 
454  entry *e = new entry;
455  e->name = lname;
456  e->is_alias = false;
457  e->type = Attr_container;
458  e->attributes = at;
459 
460  attr_map.push_back(e);
461 
462  at->d_parent = this;
463 
464  return e->attributes;
465 }
466 
481 void AttrTable::find(const string &target, AttrTable **at, Attr_iter *iter)
482 {
483  string::size_type dotpos = target.rfind('.');
484  if (dotpos != string::npos) {
485  string container = target.substr(0, dotpos);
486  string field = target.substr(dotpos + 1);
487 
488  *at = find_container(container);
489  if (*at) {
490  *iter = (*at)->simple_find(field);
491  }
492  else {
493  *iter = attr_map.end();
494  }
495  }
496  else {
497  *at = recurrsive_find(target, iter);
498  }
499 }
500 
512 AttrTable *
513 AttrTable::recurrsive_find(const string &target, Attr_iter *location)
514 {
515  Attr_iter i = attr_begin();
516  while (i != attr_end()) {
517  if (target == (*i)->name) {
518  *location = i;
519  return this;
520  }
521  else if ((*i)->type == Attr_container) {
522  AttrTable *at = (*i)->attributes->recurrsive_find(target, location);
523  if (at)
524  return at;
525  }
526 
527  ++i;
528  }
529 
530  *location = i;
531  return 0;
532 }
533 
534 // Made public for callers that want non-recursive find. [mjohnson 6 oct 09]
541 AttrTable::Attr_iter AttrTable::simple_find(const string &target)
542 {
543  Attr_iter i;
544  for (i = attr_map.begin(); i != attr_map.end(); ++i) {
545  if (target == (*i)->name) {
546  break;
547  }
548  }
549  return i;
550 }
551 
565 AttrTable *
566 AttrTable::find_container(const string &target)
567 {
568  string::size_type dotpos = target.find('.');
569  if (dotpos != string::npos) {
570  string container = target.substr(0, dotpos);
571  string field = target.substr(dotpos + 1);
572 
573  AttrTable *at = simple_find_container(container);
574  return (at) ? at->find_container(field) : 0;
575  }
576  else {
577  return simple_find_container(target);
578  }
579 }
580 
581 // Made public for callers that want non-recursive find. [mjohnson 6 oct 09]
582 AttrTable *
583 AttrTable::simple_find_container(const string &target)
584 {
585  if (get_name() == target)
586  return this;
587 
588  for (Attr_iter i = attr_map.begin(); i != attr_map.end(); ++i) {
589  if (is_container(i) && target == (*i)->name) {
590  return (*i)->attributes;
591  }
592  }
593 
594  return 0;
595 }
596 
604 
606 AttrTable *
607 AttrTable::get_attr_table(const string &name)
608 {
609  return find_container(name);
610 }
611 
613 string AttrTable::get_type(const string &name)
614 {
615  Attr_iter p = simple_find(name);
616  return (p != attr_map.end()) ? get_type(p) : (string) "";
617 }
618 
622 {
623  Attr_iter p = simple_find(name);
624  return (p != attr_map.end()) ? get_attr_type(p) : Attr_unknown;
625 }
626 
634 unsigned int AttrTable::get_attr_num(const string &name)
635 {
636  Attr_iter iter = simple_find(name);
637  return (iter != attr_map.end()) ? get_attr_num(iter) : 0;
638 }
639 
652 vector<string> *
653 AttrTable::get_attr_vector(const string &name)
654 {
655  Attr_iter p = simple_find(name);
656  return (p != attr_map.end()) ? get_attr_vector(p) : 0;
657 }
658 
675 void AttrTable::del_attr(const string &name, int i)
676 {
677 #if WWW_ENCODING
678  string lname = www2id(name);
679 #else
680  string lname = remove_space_encoding(name);
681 #endif
682 
683  Attr_iter iter = simple_find(lname);
684  if (iter != attr_map.end()) {
685  if (i == -1) { // Delete the whole attribute
686  entry *e = *iter;
687  attr_map.erase(iter);
688  delete e;
689  e = 0;
690  }
691  else { // Delete one element from attribute array
692  // Don't try to delete elements from the vector of values if the
693  // map is a container!
694  if ((*iter)->type == Attr_container)
695  return;
696 
697  vector<string> *sxp = (*iter)->attr;
698 
699  assert(i >= 0 && i < (int) sxp->size());
700  sxp->erase(sxp->begin() + i); // rm the element
701  }
702  }
703 }
704 
706 
711 AttrTable::Attr_iter AttrTable::attr_begin()
712 {
713  return attr_map.begin();
714 }
715 
719 AttrTable::Attr_iter AttrTable::attr_end()
720 {
721  return attr_map.end();
722 }
723 
732 AttrTable::Attr_iter AttrTable::get_attr_iter(int i)
733 {
734  return attr_map.begin() + i;
735 }
736 
738 string AttrTable::get_name(Attr_iter iter)
739 {
740  assert(iter != attr_map.end());
741 
742  return (*iter)->name;
743 }
744 
746 bool AttrTable::is_container(Attr_iter i)
747 {
748  return (*i)->type == Attr_container;
749 }
750 
756 AttrTable *
758 {
759  assert(iter != attr_map.end());
760  return (*iter)->type == Attr_container ? (*iter)->attributes : 0;
761 }
762 
781 AttrTable::Attr_iter AttrTable::del_attr_table(Attr_iter iter)
782 {
783  if ((*iter)->type != Attr_container)
784  return ++iter;
785 
786  // the caller intends to delete/reuse the contained AttrTable,
787  // so zero it out so it doesn't get deleted before we delete the entry
788  // [mjohnson]
789  struct entry *e = *iter;
790  // container no longer has a parent.
791  if (e->attributes) {
792  e->attributes->d_parent = 0;
793 
794 #if NEW_DEL_ATTR_TABLE_BEHAVIOR
795  delete e->attributes;
796 #endif
797  e->attributes = 0;
798  }
799 
800  delete e;
801 
802  return attr_map.erase(iter);
803 }
804 
808 string AttrTable::get_type(Attr_iter iter)
809 {
810  assert(iter != attr_map.end());
811  return AttrType_to_String((*iter)->type);
812 }
813 
818 {
819  return (*iter)->type;
820 }
821 
829 unsigned int AttrTable::get_attr_num(Attr_iter iter)
830 {
831  assert(iter != attr_map.end());
832  return ((*iter)->type == Attr_container) ? (*iter)->attributes->get_size() : (*iter)->attr->size();
833 }
834 
851 string AttrTable::get_attr(Attr_iter iter, unsigned int i)
852 {
853  assert(iter != attr_map.end());
854 
855  return (*iter)->type == Attr_container ? (string) "None" : (*(*iter)->attr)[i];
856 }
857 
858 string AttrTable::get_attr(const string &name, unsigned int i)
859 {
860  Attr_iter p = simple_find(name);
861  return (p != attr_map.end()) ? get_attr(p, i) : (string) "";
862 }
863 
875 vector<string> *
877 {
878  assert(iter != attr_map.end());
879  return (*iter)->type != Attr_container ? (*iter)->attr : 0;
880 }
881 
882 bool AttrTable::is_global_attribute(Attr_iter iter)
883 {
884  assert(iter != attr_map.end());
885  if ((*iter)->type == Attr_container)
886  return (*iter)->attributes->is_global_attribute();
887  else
888  return (*iter)->is_global;
889 }
890 
891 void AttrTable::set_is_global_attribute(Attr_iter iter, bool ga)
892 {
893  assert(iter != attr_map.end());
894  if ((*iter)->type == Attr_container)
895  (*iter)->attributes->set_is_global_attribute(ga);
896  else
897  (*iter)->is_global = ga;
898 }
899 
901 
902 // Alias an attribute table. The alias should be added to this object.
908 void AttrTable::add_container_alias(const string &name, AttrTable *src)
909 {
910 #if WWW_ENCODING
911  string lname = www2id(name);
912 #else
913  string lname = remove_space_encoding(name);
914 #endif
915 
916  if (simple_find(lname) != attr_end())
917  throw Error(string("There already exists a container called `") + name + string("in this attribute table. (2)"));
918 
919  entry *e = new entry;
920  e->name = lname;
921  e->is_alias = true;
922  e->aliased_to = src->get_name();
923  e->type = Attr_container;
924 
925  e->attributes = src;
926 
927  attr_map.push_back(e);
928 }
929 
942 void AttrTable::add_value_alias(AttrTable *das, const string &name, const string &source)
943 {
944 #if WWW_ENCODING
945  string lname = www2id(name);
946 #else
947  string lname = remove_space_encoding(name);
948 #endif
949 
950 #if WWW_ENCODING
951  string lsource = www2id(source);
952 #else
953  string lsource = remove_space_encoding(source);
954 #endif
955 
956  // find the container that holds source and its (sources's) iterator
957  // within that container. Search at the uppermost level of the attribute
958  // object to find values defined `above' the current container.
959  AttrTable *at;
960  Attr_iter iter;
961  das->find(lsource, &at, &iter);
962 
963  // If source is not found by looking at the topmost level, look in the
964  // current table (i.e., alias z x where x is in the current container
965  // won't be found by looking for `x' at the top level). See test case 26
966  // in das-testsuite.
967  if (!at || (iter == at->attr_end()) || !*iter) {
968  find(lsource, &at, &iter);
969  if (!at || (iter == at->attr_end()) || !*iter)
970  throw Error(string("Could not find the attribute `") + source + string("' in the attribute object."));
971  }
972 
973  // If we've got a value to alias and it's being added at the top level of
974  // the DAS, that's an error.
975  if (at && !at->is_container(iter) && this == das)
976  throw Error(
977  string(
978  "A value cannot be aliased to the top level of the DAS;\nOnly containers may be present at that level of the DAS."));
979 
980  if (simple_find(lname) != attr_end())
981  throw Error(string("There already exists a container called `") + name + string("in this attribute table. (3)"));
982 
983  entry *e = new entry;
984  e->name = lname;
985  e->is_alias = true;
986  e->aliased_to = lsource;
987  e->type = get_attr_type(iter);
988  if (at && e->type == Attr_container)
989  e->attributes = at->get_attr_table(iter);
990  else
991  e->attr = (*iter)->attr;
992 
993  attr_map.push_back(e);
994 }
995 
996 // Deprecated
1015 bool AttrTable::attr_alias(const string &alias, AttrTable *at, const string &name)
1016 {
1017  add_value_alias(at, alias, name);
1018  return true;
1019 }
1020 
1028 bool AttrTable::attr_alias(const string &alias, const string &name)
1029 {
1030  return attr_alias(alias, this, name);
1031 }
1032 
1037 {
1038  for (Attr_iter i = attr_map.begin(); i != attr_map.end(); ++i) {
1039  delete *i;
1040  *i = 0;
1041  }
1042 
1043  attr_map.erase(attr_map.begin(), attr_map.end());
1044 
1045  d_name = "";
1046 }
1047 
1048 const string double_quote = "\"";
1049 
1050 // This is here as a result of the problem described in ticket #1163 where
1051 // the data handlers are adding quotes to string attributes so the DAS will
1052 // be printed correctly. But that has the affect of adding the quotes to the
1053 // attribute's _value_ not just it's print representation. As part of the fix
1054 // I made the code here add the quotes if the handlers are fixed (but not if
1055 // handlers are still adding them). The other part of 1163 is to fix all of
1056 // the handlers... What this fix means is that attributes whose values really
1057 // do contain bracketing quotes might be misunderstood, since we're assuming
1058 // those quotes were added by the handlers as a hack to get the output
1059 // formatting correct for the DAS. jhrg 7/30/08
1060 
1061 static void write_string_attribute_for_das(ostream &out, const string &value, const string &term)
1062 {
1063  if (is_quoted(value))
1064  out << value << term;
1065  else
1066  out << double_quote << value << double_quote << term;
1067 }
1068 
1069 #if 0
1070 static void
1071 write_string_attribute_for_das(FILE *out, const string &value, const string &term)
1072 {
1073  if (is_quoted(value))
1074  fprintf(out, "%s%s", value.c_str(), term.c_str());
1075  else
1076  fprintf(out, "\"%s\"%s", value.c_str(), term.c_str());
1077 }
1078 #endif
1079 
1080 // Special treatment for XML: Make sure to escape double quotes when XML is
1081 // printed in a DAS.
1082 static void write_xml_attribute_for_das(ostream &out, const string &value, const string &term)
1083 {
1084  if (is_quoted(value))
1085  out << escape_double_quotes(value) << term;
1086  else
1087  out << double_quote << escape_double_quotes(value) << double_quote << term;
1088 }
1089 
1090 #if 0
1091 static void
1092 write_xml_attribute_for_das(FILE *out, const string &value, const string &term)
1093 {
1094  if (is_quoted(value))
1095  fprintf(out, "%s%s", escape_double_quotes(value).c_str(), term.c_str());
1096  else
1097  fprintf(out, "\"%s\"%s", escape_double_quotes(value).c_str(), term.c_str());
1098 }
1099 #endif
1100 
1103 void AttrTable::simple_print(FILE *out, string pad, Attr_iter i, bool dereference)
1104 {
1105  ostringstream oss;
1106  simple_print(oss, pad, i, dereference);
1107  fwrite(oss.str().data(), 1, oss.str().length(), out);
1108 
1109 #if 0
1110  switch ((*i)->type) {
1111  case Attr_container:
1112 #if WWW_ENCODING
1113  fprintf(out, "%s%s {\n", pad.c_str(), id2www(get_name(i)).c_str());
1114 #else
1115  fprintf(out, "%s%s {\n", pad.c_str(), get_name(i).c_str());
1116 #endif
1117  (*i)->attributes->print(out, pad + " ", dereference);
1118 
1119  fprintf(out, "%s}\n", pad.c_str());
1120  break;
1121 
1122  case Attr_string: {
1123 #if WWW_ENCODING
1124  fprintf(out, "%s%s %s ", pad.c_str(), get_type(i).c_str(), id2www(get_name(i)).c_str());
1125 #else
1126  fprintf(out, "%s%s %s ", pad.c_str(), get_type(i).c_str(), get_name(i).c_str());
1127 #endif
1128  vector<string> *sxp = (*i)->attr;
1129  vector<string>::iterator last = sxp->end() - 1;
1130  for (vector<string>::iterator i = sxp->begin(); i != last; ++i) {
1131  write_string_attribute_for_das(out, *i, ", ");
1132  }
1133  write_string_attribute_for_das(out, *last, ";\n");
1134  }
1135  break;
1136 
1137  case Attr_other_xml: {
1138 #if WWW_ENCODING
1139  fprintf(out, "%s%s %s ", pad.c_str(), get_type(i).c_str(), id2www(get_name(i)).c_str());
1140 #else
1141  fprintf(out, "%s%s %s ", pad.c_str(), get_type(i).c_str(), get_name(i).c_str());
1142 #endif
1143  vector<string> *sxp = (*i)->attr;
1144  vector<string>::iterator last = sxp->end() - 1;
1145  for (vector<string>::iterator i = sxp->begin(); i != last; ++i) {
1146  write_xml_attribute_for_das(out, *i, ", ");
1147  }
1148  write_xml_attribute_for_das(out, *last, ";\n");
1149  }
1150  break;
1151 
1152  default: {
1153 #if WWW_ENCODING
1154  fprintf(out, "%s%s %s ", pad.c_str(), get_type(i).c_str(), id2www(get_name(i)).c_str());
1155 #else
1156  fprintf(out, "%s%s %s ", pad.c_str(), get_type(i).c_str(), get_name(i).c_str());
1157 #endif
1158 
1159  vector<string> *sxp = (*i)->attr;
1160  vector<string>::iterator last = sxp->end() - 1;
1161  for (vector<string>::iterator i = sxp->begin(); i != last; ++i) {
1162  fprintf(out, "%s%s", (*i).c_str(), ", ");
1163  }
1164  fprintf(out, "%s%s", (*last).c_str(), ";\n");
1165  }
1166  break;
1167  }
1168 #endif
1169 }
1170 
1173 void AttrTable::simple_print(ostream &out, string pad, Attr_iter i, bool dereference)
1174 {
1175  switch ((*i)->type) {
1176  case Attr_container:
1177 #if WWW_ENCODING
1178  out << pad << id2www(get_name(i)) << " {\n";
1179 #else
1180  out << pad << add_space_encoding(get_name(i)) << " {\n";
1181 #endif
1182  (*i)->attributes->print(out, pad + " ", dereference);
1183  out << pad << "}\n";
1184  break;
1185 
1186  case Attr_string: {
1187 #if WWW_ENCODING
1188  out << pad << get_type(i) << " " << id2www(get_name(i)) << " ";
1189 #else
1190  out << pad << get_type(i) << " " << add_space_encoding(get_name(i)) << " ";
1191 #endif
1192  vector<string> *sxp = (*i)->attr;
1193  vector<string>::iterator last = sxp->end() - 1;
1194  for (vector<string>::iterator i = sxp->begin(); i != last; ++i) {
1195  write_string_attribute_for_das(out, *i, ", ");
1196  }
1197  write_string_attribute_for_das(out, *last, ";\n");
1198  }
1199  break;
1200 
1201  case Attr_other_xml: {
1202 #if WWW_ENCODING
1203  out << pad << get_type(i) << " " << id2www(get_name(i)) << " ";
1204 #else
1205  out << pad << get_type(i) << " " << add_space_encoding(get_name(i)) << " ";
1206 #endif
1207  vector<string> *sxp = (*i)->attr;
1208  vector<string>::iterator last = sxp->end() - 1;
1209  for (vector<string>::iterator i = sxp->begin(); i != last; ++i) {
1210  write_xml_attribute_for_das(out, *i, ", ");
1211  }
1212  write_xml_attribute_for_das(out, *last, ";\n");
1213  }
1214  break;
1215 
1216  default: {
1217 #if WWW_ENCODING
1218  out << pad << get_type(i) << " " << id2www(get_name(i)) << " ";
1219 #else
1220  out << pad << get_type(i) << " " << add_space_encoding(get_name(i)) << " ";
1221 #endif
1222  vector<string> *sxp = (*i)->attr;
1223  vector<string>::iterator last = sxp->end() - 1;
1224  for (vector<string>::iterator i = sxp->begin(); i != last; ++i) {
1225  out << *i << ", ";
1226  }
1227  out << *last << ";\n";
1228  }
1229  break;
1230  }
1231 }
1232 
1243 void AttrTable::print(FILE *out, string pad, bool dereference)
1244 {
1245  ostringstream oss;
1246  print(oss, pad, dereference);
1247  fwrite(oss.str().data(), 1, oss.str().length(), out);
1248 
1249 #if 0
1250  for (Attr_iter i = attr_map.begin(); i != attr_map.end(); ++i) {
1251  if ((*i)->is_alias) {
1252  if (dereference) {
1253  simple_print(out, pad, i, dereference);
1254  }
1255  else {
1256 #if WWW_ENCODING
1257  fprintf(out, "%sAlias %s %s;\n",
1258  pad.c_str(),
1259  id2www(get_name(i)).c_str(),
1260  id2www((*i)->aliased_to).c_str());
1261 #else
1262  fprintf(out, "%sAlias %s %s;\n",
1263  pad.c_str(), add_space_encoding(get_name(i)).c_str(), add_space_encoding((*i)->aliased_to).c_str());
1264 
1265 #endif
1266  }
1267  }
1268  else {
1269  simple_print(out, pad, i, dereference);
1270  }
1271  }
1272 #endif
1273 }
1274 
1285 void AttrTable::print(ostream &out, string pad, bool dereference)
1286 {
1287  for (Attr_iter i = attr_map.begin(); i != attr_map.end(); ++i) {
1288  if ((*i)->is_alias) {
1289  if (dereference) {
1290  simple_print(out, pad, i, dereference);
1291  }
1292  else {
1293 #if WWW_ENCODING
1294  out << pad << "Alias " << id2www(get_name(i))
1295  << " " << id2www((*i)->aliased_to) << ";\n";
1296 #else
1297  out << pad << "Alias " << add_space_encoding(get_name(i)) << " "
1298  << add_space_encoding((*i)->aliased_to) << ";\n";
1299 #endif
1300  }
1301  }
1302  else {
1303  simple_print(out, pad, i, dereference);
1304  }
1305  }
1306 }
1307 
1313 void AttrTable::print_xml(FILE *out, string pad, bool /*constrained*/)
1314 {
1315  XMLWriter xml(pad);
1316  print_xml_writer(xml);
1317  fwrite(xml.get_doc(), sizeof(char), xml.get_doc_size(), out);
1318 
1319 #if OLD_XML_MOETHODS
1320  ostringstream oss;
1321  print_xml(oss, pad);
1322  fwrite(oss.str().data(), 1, oss.str().length(), out);
1323 #endif
1324 
1325 #if 0
1326  // Why this works: AttrTable is really a hacked class that used to
1327  // implement a single-level set of attributes. Containers
1328  // were added several years later by dropping in the 'entry' structure.
1329  // It's not a class in its own right; instead accessors from AttrTable
1330  // are used to access information from entry. So... the loop below
1331  // actually iterates over the entries of *this* (which is an instance of
1332  // AttrTable). A container is an entry whose sole value is an AttrTable
1333  // instance. 05/19/03 jhrg
1334  for (Attr_iter i = attr_begin(); i != attr_end(); ++i) {
1335  if ((*i)->is_alias) {
1336  fprintf(out, "%s<Alias name=\"%s\" Attribute=\"%s\"/>\n",
1337  pad.c_str(), id2xml(get_name(i)).c_str(),
1338  (*i)->aliased_to.c_str());
1339 
1340  }
1341  else if (is_container(i)) {
1342  fprintf(out, "%s<Attribute name=\"%s\" type=\"%s\">\n",
1343  pad.c_str(), id2xml(get_name(i)).c_str(),
1344  get_type(i).c_str());
1345 
1346  get_attr_table(i)->print_xml(out, pad + " "/*, constrained*/);
1347 
1348  fprintf(out, "%s</Attribute>\n", pad.c_str());
1349  }
1350  else {
1351  fprintf(out, "%s<Attribute name=\"%s\" type=\"%s\">\n",
1352  pad.c_str(), id2xml(get_name(i)).c_str(), get_type(i).c_str());
1353 
1354  string value_pad = pad + " ";
1355  // Special handling for the OtherXML attribute type - don't escape
1356  // the XML and don't include the <value> element. Note that there
1357  // cannot be an vector of XML things as can be with the other types.
1358  if (get_attr_type(i) == Attr_other_xml) {
1359  if (get_attr_num(i) != 1)
1360  throw Error("OtherXML attributes cannot be vector-valued.");
1361  fprintf(out, "%s%s\n", value_pad.c_str(), get_attr(i, 0).c_str());
1362  }
1363  else {
1364  for (unsigned j = 0; j < get_attr_num(i); ++j) {
1365  fprintf(out, "%s<value>%s</value>\n", value_pad.c_str(),
1366  id2xml(get_attr(i, j)).c_str());
1367  }
1368  }
1369  fprintf(out, "%s</Attribute>\n", pad.c_str());
1370  }
1371  }
1372 #endif
1373 }
1374 
1378 void AttrTable::print_xml(ostream &out, string pad, bool /*constrained*/)
1379 {
1380  XMLWriter xml(pad);
1381  print_xml_writer(xml);
1382  out << xml.get_doc();
1383 
1384 #if 0
1385  for (Attr_iter i = attr_begin(); i != attr_end(); ++i) {
1386  if ((*i)->is_alias) {
1387  out << pad << "<Alias name=\"" << id2xml(get_name(i))
1388  << "\" Attribute=\"" << (*i)->aliased_to << "\"/>\n";
1389 
1390  }
1391  else if (is_container(i)) {
1392  out << pad << "<Attribute name=\"" << id2xml(get_name(i))
1393  << "\" type=\"" << get_type(i) << "\">\n";
1394 
1395  get_attr_table(i)->print_xml(out, pad + " "/*, constrained*/);
1396 
1397  out << pad << "</Attribute>\n";
1398  }
1399  else {
1400  out << pad << "<Attribute name=\"" << id2xml(get_name(i))
1401  << "\" type=\"" << get_type(i) << "\">\n";
1402 
1403  string value_pad = pad + " ";
1404  if (get_attr_type(i) == Attr_other_xml) {
1405  if (get_attr_num(i) != 1)
1406  throw Error("OtherXML attributes cannot be vector-valued.");
1407  out << value_pad << get_attr(i, 0) << "\n";
1408  }
1409  else {
1410  string value_pad = pad + " ";
1411  for (unsigned j = 0; j < get_attr_num(i); ++j) {
1412  out << value_pad << "<value>" << id2xml(get_attr(i, j)) << "</value>\n";
1413  }
1414  }
1415  out << pad << "</Attribute>\n";
1416  }
1417  }
1418 #endif
1419 }
1420 
1426 {
1427  for (Attr_iter i = attr_begin(); i != attr_end(); ++i) {
1428  if ((*i)->is_alias) {
1429  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) "Alias") < 0)
1430  throw InternalErr(__FILE__, __LINE__, "Could not write Alias element");
1431  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name",
1432  (const xmlChar*) get_name(i).c_str()) < 0)
1433  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
1434  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "Attribute",
1435  (const xmlChar*) (*i)->aliased_to.c_str()) < 0)
1436  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
1437  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
1438  throw InternalErr(__FILE__, __LINE__, "Could not end Alias element");
1439  }
1440  else if (is_container(i)) {
1441  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) "Attribute") < 0)
1442  throw InternalErr(__FILE__, __LINE__, "Could not write Attribute element");
1443  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name",
1444  (const xmlChar*) get_name(i).c_str()) < 0)
1445  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
1446  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "type",
1447  (const xmlChar*) get_type(i).c_str()) < 0)
1448  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
1449 
1451 
1452  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
1453  throw InternalErr(__FILE__, __LINE__, "Could not end Attribute element");
1454  }
1455  else {
1456  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) "Attribute") < 0)
1457  throw InternalErr(__FILE__, __LINE__, "Could not write Attribute element");
1458  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name",
1459  (const xmlChar*) get_name(i).c_str()) < 0)
1460  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
1461  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "type",
1462  (const xmlChar*) get_type(i).c_str()) < 0)
1463  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
1464 
1465  if (get_attr_type(i) == Attr_other_xml) {
1466  if (get_attr_num(i) != 1)
1467  throw Error("OtherXML attributes cannot be vector-valued.");
1468  // Replaced xmltextWriterWriteString with xmlTextWriterWriteRaw to keep the
1469  // libxml2 code from escaping the xml (which was breaking all of the inferencing
1470  // code. jhrg
1471  if (xmlTextWriterWriteRaw(xml.get_writer(), (const xmlChar*) get_attr(i, 0).c_str()) < 0)
1472  throw InternalErr(__FILE__, __LINE__, "Could not write OtherXML value");
1473  }
1474  else {
1475  for (unsigned j = 0; j < get_attr_num(i); ++j) {
1476  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) "value") < 0)
1477  throw InternalErr(__FILE__, __LINE__, "Could not write value element");
1478 
1479  if (xmlTextWriterWriteString(xml.get_writer(), (const xmlChar*) get_attr(i, j).c_str()) < 0)
1480  throw InternalErr(__FILE__, __LINE__, "Could not write attribute value");
1481 
1482  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
1483  throw InternalErr(__FILE__, __LINE__, "Could not end value element");
1484  }
1485  }
1486  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
1487  throw InternalErr(__FILE__, __LINE__, "Could not end Attribute element");
1488  }
1489  }
1490 }
1491 
1497 void
1499 {
1500  print_xml_writer(xml);
1501 }
1502 
1510 void AttrTable::dump(ostream &strm) const
1511 {
1512  strm << DapIndent::LMarg << "AttrTable::dump - (" << (void *) this << ")" << endl;
1513  DapIndent::Indent();
1514  strm << DapIndent::LMarg << "table name: " << d_name << endl;
1515  if (attr_map.size()) {
1516  strm << DapIndent::LMarg << "attributes: " << endl;
1517  DapIndent::Indent();
1518  Attr_citer i = attr_map.begin();
1519  Attr_citer ie = attr_map.end();
1520  for (; i != ie; ++i) {
1521  entry *e = (*i);
1522  string type = AttrType_to_String(e->type);
1523  if (e->is_alias) {
1524  strm << DapIndent::LMarg << "alias: " << e->name << " aliased to: " << e->aliased_to << endl;
1525  }
1526  else if (e->type == Attr_container) {
1527  strm << DapIndent::LMarg << "attr: " << e->name << " of type " << type << endl;
1528  DapIndent::Indent();
1529  e->attributes->dump(strm);
1530  DapIndent::UnIndent();
1531  }
1532  else {
1533  strm << DapIndent::LMarg << "attr: " << e->name << " of type " << type << endl;
1534  DapIndent::Indent();
1535  strm << DapIndent::LMarg;
1536  vector<string>::const_iterator iter = e->attr->begin();
1537  vector<string>::const_iterator last = e->attr->end() - 1;
1538  for (; iter != last; ++iter) {
1539  strm << (*iter) << ", ";
1540  }
1541  strm << (*(e->attr->end() - 1)) << endl;
1542  DapIndent::UnIndent();
1543  }
1544  }
1545  DapIndent::UnIndent();
1546  }
1547  else {
1548  strm << DapIndent::LMarg << "attributes: empty" << endl;
1549  }
1550  if (d_parent) {
1551  strm << DapIndent::LMarg << "parent table:" << d_name << ":" << (void *) d_parent << endl;
1552  }
1553  else {
1554  strm << DapIndent::LMarg << "parent table: none" << d_name << endl;
1555  }
1556  DapIndent::UnIndent();
1557 }
1558 
1559 } // namespace libdap
1560 
virtual Attr_iter attr_end()
Definition: AttrTable.cc:719
-
void downcase(string &s)
Definition: util.cc:563
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
string AttrType_to_String(const AttrType at)
Definition: AttrTable.cc:97
-
virtual string get_type(const string &name)
Get the type name of an attribute within this attribute table.
Definition: AttrTable.cc:613
- -
string add_space_encoding(const string &s)
Definition: AttrTable.cc:78
-
void clone(const AttrTable &at)
Definition: AttrTable.cc:160
-
virtual string get_name() const
Get the name of this attribute table.
Definition: AttrTable.cc:238
-
virtual void add_container_alias(const string &name, AttrTable *src)
Add an alias to a container held by this attribute table.
Definition: AttrTable.cc:908
-
virtual void print_xml(FILE *out, string pad=" ", bool constrained=false)
Definition: AttrTable.cc:1313
-
string id2xml(string in, const string &not_allowed)
Definition: escaping.cc:272
-
virtual void del_attr(const string &name, int i=-1)
Deletes an attribute.
Definition: AttrTable.cc:675
-
string escape_double_quotes(string source)
Definition: escaping.cc:470
-
virtual AttrTable * recurrsive_find(const string &target, Attr_iter *location)
Definition: AttrTable.cc:513
-
void print_xml_writer(XMLWriter &xml)
Definition: AttrTable.cc:1425
-
virtual void print(FILE *out, string pad=" ", bool dereference=false)
Prints the attribute table.
Definition: AttrTable.cc:1243
-
string remove_space_encoding(const string &s)
Definition: AttrTable.cc:61
-
virtual AttrTable * find_container(const string &target)
Find an attribute with a given name.
Definition: AttrTable.cc:566
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
void print_dap4(XMLWriter &xml)
Definition: AttrTable.cc:1498
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
virtual Attr_iter get_attr_iter(int i)
Definition: AttrTable.cc:732
-
virtual void add_value_alias(AttrTable *at, const string &name, const string &source)
Add an alias for an attribute.
Definition: AttrTable.cc:942
-
virtual bool is_container(Attr_iter iter)
Definition: AttrTable.cc:746
-
virtual AttrTable * append_container(const string &name)
Add a container to the attribute table.
Definition: AttrTable.cc:410
-
virtual AttrTable * get_attr_table(const string &name)
Get an attribute container.
Definition: AttrTable.cc:607
-
virtual void erase()
Erase the attribute table.
Definition: AttrTable.cc:1036
-
bool is_quoted(const string &s)
Definition: util.cc:574
-
virtual bool attr_alias(const string &alias, AttrTable *at, const string &name)
Adds an alias to the set of attributes.
Definition: AttrTable.cc:1015
-
virtual Attr_iter attr_begin()
Definition: AttrTable.cc:711
-
string www2id(const string &in, const string &escape, const string &except)
Definition: escaping.cc:220
-
virtual unsigned int get_attr_num(const string &name)
Get the number of attributes in this container.
Definition: AttrTable.cc:634
-
virtual unsigned int append_attr(const string &name, const string &type, const string &value)
Add an attribute to the table.
Definition: AttrTable.cc:307
-
libdap base object for common functionality of libdap objects
Definition: DapObj.h:50
-
void simple_print(FILE *out, string pad, Attr_iter i, bool dereference)
Definition: AttrTable.cc:1103
-
virtual AttrType get_attr_type(const string &name)
Get the type of an attribute.
Definition: AttrTable.cc:621
-
virtual vector< string > * get_attr_vector(const string &name)
Get a vector-valued attribute.
Definition: AttrTable.cc:653
- -
A class for error processing.
Definition: Error.h:92
-
virtual unsigned int get_size() const
Get the number of entries in this attribute table.
Definition: AttrTable.cc:231
-
virtual void set_name(const string &n)
Set the name of this attribute table.
Definition: AttrTable.cc:245
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: AttrTable.cc:1510
-
virtual Attr_iter del_attr_table(Attr_iter iter)
Definition: AttrTable.cc:781
-
virtual void find(const string &target, AttrTable **at, Attr_iter *iter)
Definition: AttrTable.cc:481
-
AttrType
Definition: AttrTable.h:81
-
string id2www(string in, const string &allowable)
Definition: escaping.cc:153
-
Attr_iter simple_find(const string &target)
Definition: AttrTable.cc:541
-
-
- - - - diff --git a/html/AttrTable_8h_source.html b/html/AttrTable_8h_source.html deleted file mode 100644 index 1b5671fe9..000000000 --- a/html/AttrTable_8h_source.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - -libdap: AttrTable.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
AttrTable.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1994-1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // An AttrTable is a table of attributes (type-name-value tuples).
33 
34 #ifndef _attrtable_h
35 #define _attrtable_h 1
36 
37 
38 #include <string>
39 #include <vector>
40 
41 #ifndef _error_h
42 #include "Error.h"
43 #endif
44 
45 using std::vector;
46 using std::string;
47 using std::vector;
48 
49 #ifndef A_DapObj_h
50 #include "DapObj.h"
51 #endif
52 
53 #ifndef XMLWRITER_H_
54 #include "XMLWriter.h"
55 #endif
56 
57 namespace libdap
58 {
59 
81 enum AttrType {
82  Attr_unknown,
83  Attr_container,
84  Attr_byte,
85  Attr_int16,
86  Attr_uint16,
87  Attr_int32,
88  Attr_uint32,
89  Attr_float32,
90  Attr_float64,
91  Attr_string,
92  Attr_url,
93  Attr_other_xml
94 };
95 
96 string AttrType_to_String(const AttrType at);
97 AttrType String_to_AttrType(const string &s);
98 
142 class AttrTable : public DapObj
143 {
144  // entry needs to be made public to make up for issues with this class'
145  // design. It should probably be moved to it's own class. 05/22/03 jhrg
146 public:
151  struct entry
152  {
153  string name;
154  AttrType type;
155 
156  bool is_alias;
157  string aliased_to;
158 
159  bool is_global; // use this to mark non-container attributes. see below.
160 
161  // If type == Attr_container, use attributes to read the contained
162  // table, otherwise use attr to read the vector of values.
163  AttrTable *attributes;
164  std::vector<string> *attr; // a vector of values. jhrg 12/5/94
165 
166  entry(): name(""), type(Attr_unknown), is_alias(false),
167  aliased_to(""), is_global(true), attributes(0), attr(0) {}
168 
169  entry(const entry &rhs): name(rhs.name), type(rhs.type), is_alias(rhs.is_alias),
170  aliased_to(rhs.aliased_to), is_global(rhs.is_global),attributes(0), attr(0)
171  {
172  clone(rhs);
173  }
174 
175  void delete_entry()
176  {
177  if (is_alias) // alias copies the pointers.
178  return;
179  if (type == Attr_container) {
180  delete attributes; attributes = 0;
181  }
182  else {
183  delete attr; attr = 0;
184  }
185  }
186 
187  virtual ~entry()
188  {
189  delete_entry();
190  }
191 
192  void clone(const entry &rhs)
193  {
194 #if 0
195  name = rhs.name;
196  type = rhs.type;
197  is_alias = rhs.is_alias;
198  aliased_to = rhs.aliased_to;
199  is_global = rhs.is_global;
200 #endif
201  switch (rhs.type) {
202  case Attr_unknown:
203  break;
204  case Attr_container: {
205  if (rhs.is_alias)
206  attributes = rhs.attributes;
207  else
208  attributes = new AttrTable(*rhs.attributes);
209  break;
210  }
211  default: {
212  if (rhs.is_alias)
213  attr = rhs.attr;
214  else
215  attr = new std::vector<string>(*rhs.attr);
216  break;
217  }
218  }
219  }
220 
221  entry &operator=(const entry &rhs)
222  {
223  if (this != &rhs) {
224  delete_entry();
225  clone(rhs);
226  }
227  return *this;
228  }
229  };
230 
231  typedef std::vector<entry *>::const_iterator Attr_citer ;
232  typedef std::vector<entry *>::iterator Attr_iter ;
233 
234 private:
235  string d_name;
236  AttrTable *d_parent;
237  std::vector<entry *> attr_map;
238 
239  // Use this to mark container attributes. Look at the methods
240  // is_global_attribute() and set_is_...., esp. at the versions that take
241  // an iterator. This code is tricky because it has to track both whole
242  // containers that are global and individual attributes that are 'global'
243  // relative to a constructor. That is, there are some attributes that are
244  // bound to a container and not any of the container's children.
245  bool d_is_global_attribute;
246 
247  void delete_attr_table();
248 
249  friend class AttrTableTest;
250 
251 protected:
252  void clone(const AttrTable &at);
253 
254  void simple_print(FILE *out, string pad, Attr_iter i,
255  bool dereference);
256  void simple_print(ostream &out, string pad, Attr_iter i,
257  bool dereference);
258 
259 public:
260  AttrTable();
261  AttrTable(const AttrTable &rhs);
262  virtual ~AttrTable();
263  AttrTable & operator=(const AttrTable &rhs);
264 
265  virtual void erase();
266 
267  virtual unsigned int get_size() const;
268  virtual string get_name() const;
269  virtual void set_name(const string &n);
270 
274  virtual AttrTable *get_parent() const
275  {
276  return d_parent;
277  }
278 
279  virtual bool is_global_attribute() const { return d_is_global_attribute; }
280  virtual void set_is_global_attribute(bool ga) { d_is_global_attribute = ga; }
281 
282  virtual unsigned int append_attr(const string &name, const string &type,
283  const string &value);
284  virtual unsigned int append_attr(const string &name, const string &type,
285  vector<string> *values);
286 
287  virtual AttrTable *append_container(const string &name);
288  virtual AttrTable *append_container(AttrTable *at, const string &name);
289 
290  virtual void find(const string &target, AttrTable **at, Attr_iter *iter);
291  virtual AttrTable *find_container(const string &target);
292  virtual AttrTable *recurrsive_find(const string &target,
293  Attr_iter *location);
294 
295  Attr_iter simple_find(const string &target);
296  AttrTable *simple_find_container(const string &target);
297 
298 
299  virtual AttrTable *get_attr_table(const string &name);
300  virtual string get_type(const string &name);
301  virtual AttrType get_attr_type(const string &name);
302  virtual unsigned int get_attr_num(const string &name);
303  virtual string get_attr(const string &name, unsigned int i = 0);
304  virtual vector<string> *get_attr_vector(const string &name);
305  virtual void del_attr(const string &name, int i = -1);
306 
307  virtual Attr_iter attr_begin();
308  virtual Attr_iter attr_end();
309  virtual Attr_iter get_attr_iter(int i);
310  virtual string get_name(Attr_iter iter);
311  virtual bool is_container(Attr_iter iter);
312  virtual AttrTable *get_attr_table(Attr_iter iter);
313  virtual Attr_iter del_attr_table(Attr_iter iter);
314  virtual string get_type(Attr_iter iter);
315  virtual AttrType get_attr_type(Attr_iter iter);
316  virtual unsigned int get_attr_num(Attr_iter iter);
317  virtual string get_attr(Attr_iter iter, unsigned int i = 0);
318  virtual std::vector<string> *get_attr_vector(Attr_iter iter);
319  virtual bool is_global_attribute(Attr_iter iter);
320  virtual void set_is_global_attribute(Attr_iter iter, bool ga);
321 
322  virtual void add_container_alias(const string &name, AttrTable *src);
323  virtual void add_value_alias(AttrTable *at, const string &name,
324  const string &source);
325  virtual bool attr_alias(const string &alias,
326  AttrTable *at,
327  const string &name);
328  virtual bool attr_alias(const string &alias, const string &name);
329 
330  virtual void print(FILE *out, string pad = " ",
331  bool dereference = false);
332  virtual void print(ostream &out, string pad = " ",
333  bool dereference = false);
334 
335  virtual void print_xml(FILE *out, string pad = " ",
336  bool constrained = false);
337  virtual void print_xml(ostream &out, string pad = " ",
338  bool constrained = false);
339 
340  void print_xml_writer(XMLWriter &xml);
341 
342  void print_dap4(XMLWriter &xml);
343 
344  virtual void dump(ostream &strm) const ;
345 };
346 
347 
348 string remove_space_encoding(const string &s);
349 string add_space_encoding(const string &s);
350 
351 } // namespace libdap
352 
353 #endif // _attrtable_h
virtual Attr_iter attr_end()
Definition: AttrTable.cc:719
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
string AttrType_to_String(const AttrType at)
Definition: AttrTable.cc:97
-
virtual string get_type(const string &name)
Get the type name of an attribute within this attribute table.
Definition: AttrTable.cc:613
- -
string add_space_encoding(const string &s)
Definition: AttrTable.cc:78
-
virtual string get_name() const
Get the name of this attribute table.
Definition: AttrTable.cc:238
-
virtual void add_container_alias(const string &name, AttrTable *src)
Add an alias to a container held by this attribute table.
Definition: AttrTable.cc:908
-
virtual void print_xml(FILE *out, string pad=" ", bool constrained=false)
Definition: AttrTable.cc:1313
-
virtual void del_attr(const string &name, int i=-1)
Deletes an attribute.
Definition: AttrTable.cc:675
-
virtual AttrTable * recurrsive_find(const string &target, Attr_iter *location)
Definition: AttrTable.cc:513
-
void print_xml_writer(XMLWriter &xml)
Definition: AttrTable.cc:1425
-
virtual void print(FILE *out, string pad=" ", bool dereference=false)
Prints the attribute table.
Definition: AttrTable.cc:1243
-
string remove_space_encoding(const string &s)
Definition: AttrTable.cc:61
-
virtual AttrTable * find_container(const string &target)
Find an attribute with a given name.
Definition: AttrTable.cc:566
-
virtual AttrTable * get_parent() const
Definition: AttrTable.h:274
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
void print_dap4(XMLWriter &xml)
Definition: AttrTable.cc:1498
-
virtual Attr_iter get_attr_iter(int i)
Definition: AttrTable.cc:732
-
virtual void add_value_alias(AttrTable *at, const string &name, const string &source)
Add an alias for an attribute.
Definition: AttrTable.cc:942
-
virtual bool is_container(Attr_iter iter)
Definition: AttrTable.cc:746
-
virtual AttrTable * append_container(const string &name)
Add a container to the attribute table.
Definition: AttrTable.cc:410
-
virtual AttrTable * get_attr_table(const string &name)
Get an attribute container.
Definition: AttrTable.cc:607
-
virtual void erase()
Erase the attribute table.
Definition: AttrTable.cc:1036
-
virtual bool attr_alias(const string &alias, AttrTable *at, const string &name)
Adds an alias to the set of attributes.
Definition: AttrTable.cc:1015
-
virtual Attr_iter attr_begin()
Definition: AttrTable.cc:711
-
virtual unsigned int get_attr_num(const string &name)
Get the number of attributes in this container.
Definition: AttrTable.cc:634
-
virtual unsigned int append_attr(const string &name, const string &type, const string &value)
Add an attribute to the table.
Definition: AttrTable.cc:307
-
libdap base object for common functionality of libdap objects
Definition: DapObj.h:50
-
void simple_print(FILE *out, string pad, Attr_iter i, bool dereference)
Definition: AttrTable.cc:1103
-
virtual AttrType get_attr_type(const string &name)
Get the type of an attribute.
Definition: AttrTable.cc:621
-
virtual vector< string > * get_attr_vector(const string &name)
Get a vector-valued attribute.
Definition: AttrTable.cc:653
- -
virtual unsigned int get_size() const
Get the number of entries in this attribute table.
Definition: AttrTable.cc:231
-
virtual void set_name(const string &n)
Set the name of this attribute table.
Definition: AttrTable.cc:245
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: AttrTable.cc:1510
-
virtual Attr_iter del_attr_table(Attr_iter iter)
Definition: AttrTable.cc:781
-
virtual void find(const string &target, AttrTable **at, Attr_iter *iter)
Definition: AttrTable.cc:481
-
AttrType
Definition: AttrTable.h:81
-
Attr_iter simple_find(const string &target)
Definition: AttrTable.cc:541
-
-
- - - - diff --git a/html/BaseTypeFactory_8cc_source.html b/html/BaseTypeFactory_8cc_source.html deleted file mode 100644 index 55c840535..000000000 --- a/html/BaseTypeFactory_8cc_source.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - -libdap: BaseTypeFactory.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
BaseTypeFactory.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2005 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #include "config.h"
27 
28 #include <string>
29 
30 #include "Byte.h"
31 #include "Int16.h"
32 #include "UInt16.h"
33 #include "Int32.h"
34 #include "UInt32.h"
35 #include "Float32.h"
36 #include "Float64.h"
37 #include "Str.h"
38 #include "Url.h"
39 #include "Array.h"
40 #include "Structure.h"
41 #include "Sequence.h"
42 #include "Grid.h"
43 
44 #include "BaseTypeFactory.h"
45 #include "debug.h"
46 
47 namespace libdap {
48 
49 BaseType *
50 BaseTypeFactory::NewVariable(Type type, const string &name) const
51 {
52  switch (type) {
53  case dods_byte_c:
54  return NewByte(name);
55  case dods_int16_c:
56  return NewInt16(name);
57  case dods_uint16_c:
58  return NewUInt16(name);
59  case dods_int32_c:
60  return NewInt32(name);
61  case dods_uint32_c:
62  return NewUInt32(name);
63  case dods_float32_c:
64  return NewFloat32(name);
65  case dods_float64_c:
66  return NewFloat64(name);
67 
68  case dods_str_c:
69  return NewStr(name);
70  case dods_url_c:
71  return NewUrl(name);
72 
73  case dods_array_c:
74  return NewArray(name);
75  case dods_structure_c:
76  return NewStructure(name);
77  case dods_sequence_c:
78  return NewSequence(name);
79  case dods_grid_c:
80  return NewGrid(name);
81  default:
82  throw InternalErr(__FILE__, __LINE__, "Unknown type");
83  }
84 }
85 
86 Byte *
87 BaseTypeFactory::NewByte(const string &n) const
88 {
89  return new Byte(n);
90 }
91 
92 Int16 *
93 BaseTypeFactory::NewInt16(const string &n) const
94 {
95  return new Int16(n);
96 }
97 
98 UInt16 *
99 BaseTypeFactory::NewUInt16(const string &n) const
100 {
101  return new UInt16(n);
102 }
103 
104 Int32 *
105 BaseTypeFactory::NewInt32(const string &n) const
106 {
107  DBG(cerr << "Inside BaseTypeFactory::NewInt32" << endl);
108  return new Int32(n);
109 }
110 
111 UInt32 *
112 BaseTypeFactory::NewUInt32(const string &n) const
113 {
114  return new UInt32(n);
115 }
116 
117 Float32 *
118 BaseTypeFactory::NewFloat32(const string &n) const
119 {
120  return new Float32(n);
121 }
122 
123 Float64 *
124 BaseTypeFactory::NewFloat64(const string &n) const
125 {
126  return new Float64(n);
127 }
128 
129 Str *
130 BaseTypeFactory::NewStr(const string &n) const
131 {
132  return new Str(n);
133 }
134 
135 Url *
136 BaseTypeFactory::NewUrl(const string &n) const
137 {
138  return new Url(n);
139 }
140 
141 Array *
142 BaseTypeFactory::NewArray(const string &n , BaseType *v) const
143 {
144  return new Array(n, v);
145 }
146 
147 Structure *
148 BaseTypeFactory::NewStructure(const string &n) const
149 {
150  return new Structure(n);
151 }
152 
153 Sequence *
154 BaseTypeFactory::NewSequence(const string &n) const
155 {
156  DBG(cerr << "Inside BaseTypeFactory::NewSequence" << endl);
157  return new Sequence(n);
158 }
159 
160 Grid *
161 BaseTypeFactory::NewGrid(const string &n) const
162 {
163  return new Grid(n);
164 }
165 
166 } // namespace libdap
Holds an Internet address (URL).
Definition: Url.h:68
-
Holds an unsigned 16-bit integer.
Definition: UInt16.h:57
-
Holds a structure (aggregate) type.
Definition: Structure.h:83
-
Type
Identifies the data type.
Definition: Type.h:94
-
Holds a 32-bit floating point value.
Definition: Float32.h:61
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
Holds character string data.
Definition: Str.h:62
-
virtual BaseType * NewVariable(Type t, const string &name="") const
-
Holds a 16-bit signed integer value.
Definition: Int16.h:59
-
Holds the Grid data type.
Definition: Grid.h:122
-
Holds a sequence.
Definition: Sequence.h:162
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
Holds a 64-bit (double precision) floating point value.
Definition: Float64.h:60
-
Holds a single byte.
Definition: Byte.h:60
-
Holds a 32-bit unsigned integer.
Definition: UInt32.h:59
-
A multidimensional array of identical data types.
Definition: Array.h:112
-
Holds a 32-bit signed integer.
Definition: Int32.h:65
-
-
- - - - diff --git a/html/BaseTypeFactory_8h_source.html b/html/BaseTypeFactory_8h_source.html deleted file mode 100644 index 799c335a5..000000000 --- a/html/BaseTypeFactory_8h_source.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - -libdap: BaseTypeFactory.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
BaseTypeFactory.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2005 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef base_type_factory_h
27 #define base_type_factory_h
28 
29 #include <string>
30 
31 #include "Type.h"
32 #include "InternalErr.h"
33 
34 // Class declarations; Make sure to include the corresponding headers in the
35 // implementation file.
36 
37 namespace libdap
38 {
39 
40 class Byte;
41 class Int16;
42 class UInt16;
43 class Int32;
44 class UInt32;
45 class Float32;
46 class Float64;
47 class Str;
48 class Url;
49 class Array;
50 class Structure;
51 class Sequence;
52 class Grid;
53 class BaseType;
54 
81 {
82 public:
84  {}
85  virtual ~BaseTypeFactory()
86  {}
87 
97  virtual BaseType *NewVariable(Type t, const string &name = "") const;
98 
104  virtual BaseTypeFactory *ptr_duplicate() const {
105  throw InternalErr(__FILE__, __LINE__, "Not Implemented.");
106  }
107 
108  virtual Byte *NewByte(const string &n = "") const;
109  virtual Int16 *NewInt16(const string &n = "") const;
110  virtual UInt16 *NewUInt16(const string &n = "") const;
111  virtual Int32 *NewInt32(const string &n = "") const;
112  virtual UInt32 *NewUInt32(const string &n = "") const;
113  virtual Float32 *NewFloat32(const string &n = "") const;
114  virtual Float64 *NewFloat64(const string &n = "") const;
115 
116  virtual Str *NewStr(const string &n = "") const;
117  virtual Url *NewUrl(const string &n = "") const;
118 
119  virtual Array *NewArray(const string &n = "", BaseType *v = 0) const;
120  virtual Structure *NewStructure(const string &n = "") const;
121  virtual Sequence *NewSequence(const string &n = "") const;
122  virtual Grid *NewGrid(const string &n = "") const;
123 };
124 
125 } // namespace libdap
126 
127 #endif // base_type_factory_h
Holds an Internet address (URL).
Definition: Url.h:68
-
virtual BaseTypeFactory * ptr_duplicate() const
-
Holds an unsigned 16-bit integer.
Definition: UInt16.h:57
-
Holds a structure (aggregate) type.
Definition: Structure.h:83
-
Type
Identifies the data type.
Definition: Type.h:94
-
Holds a 32-bit floating point value.
Definition: Float32.h:61
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
Holds character string data.
Definition: Str.h:62
-
virtual BaseType * NewVariable(Type t, const string &name="") const
-
Holds a 16-bit signed integer value.
Definition: Int16.h:59
- -
Holds the Grid data type.
Definition: Grid.h:122
-
Holds a sequence.
Definition: Sequence.h:162
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
Holds a 64-bit (double precision) floating point value.
Definition: Float64.h:60
-
Holds a single byte.
Definition: Byte.h:60
-
Holds a 32-bit unsigned integer.
Definition: UInt32.h:59
-
A multidimensional array of identical data types.
Definition: Array.h:112
-
Holds a 32-bit signed integer.
Definition: Int32.h:65
-
-
- - - - diff --git a/html/BaseType_8cc_source.html b/html/BaseType_8cc_source.html deleted file mode 100644 index 021dff524..000000000 --- a/html/BaseType_8cc_source.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - -libdap: BaseType.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
BaseType.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1994-1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Implementation for BaseType.
33 //
34 // jhrg 9/6/94
35 
36 #include "config.h"
37 
38 #include <cstdio> // for stdin and stdout
39 
40 #include <sstream>
41 #include <string>
42 
43 //#define DODS_DEBUG
44 
45 #include "BaseType.h"
46 #include "Byte.h"
47 #include "Int16.h"
48 #include "UInt16.h"
49 #include "Int32.h"
50 #include "UInt32.h"
51 #include "Float32.h"
52 #include "Float64.h"
53 #include "Str.h"
54 #include "Url.h"
55 #include "Array.h"
56 #include "Structure.h"
57 #include "Sequence.h"
58 #include "Grid.h"
59 
60 #include "D4Attributes.h"
61 #include "DMR.h"
62 #include "XMLWriter.h"
63 #include "D4BaseTypeFactory.h"
64 
65 #include "InternalErr.h"
66 
67 #include "util.h"
68 #include "escaping.h"
69 #include "DapIndent.h"
70 
71 #include "debug.h"
72 
73 using namespace std;
74 
75 namespace libdap {
76 
77 // Protected copy mfunc
78 
85 void
86 BaseType::m_duplicate(const BaseType &bt)
87 {
88  DBG(cerr << "In BaseType::m_duplicate for " << bt.name() << endl);
89 
90  d_name = bt.d_name;
91  d_type = bt.d_type;
92  d_dataset = bt.d_dataset;
93  d_is_read = bt.d_is_read; // added, reza
94  d_is_send = bt.d_is_send; // added, reza
95  d_in_selection = bt.d_in_selection;
96  d_is_synthesized = bt.d_is_synthesized; // 5/11/2001 jhrg
97 
98  d_parent = bt.d_parent; // copy pointers 6/4/2001 jhrg
99 
100  d_attr = bt.d_attr; // Deep copy.
101 
102  if (bt.d_attributes)
103  d_attributes = new D4Attributes(*bt.d_attributes); // deep copy
104  else
105  d_attributes = 0; // init to null if not used.
106 
107  d_is_dap4 = bt.d_is_dap4;
108 
109  DBG(cerr << "Exiting BaseType::m_duplicate for " << bt.name() << endl);
110 }
111 
112 // Public mfuncs
113 
126 BaseType::BaseType(const string &n, const Type &t, bool is_dap4)
127 : d_name(n), d_type(t), d_dataset(""), d_is_read(false), d_is_send(false),
128  d_parent(0), d_attributes(0), d_is_dap4(is_dap4),
129  d_in_selection(false), d_is_synthesized(false)
130 {}
131 
144 BaseType::BaseType(const string &n, const string &d, const Type &t, bool is_dap4)
145 : d_name(n), d_type(t), d_dataset(d), d_is_read(false), d_is_send(false),
146  d_parent(0), d_attributes(0), d_is_dap4(is_dap4),
147  d_in_selection(false), d_is_synthesized(false)
148 {}
149 
151 BaseType::BaseType(const BaseType &copy_from) : DapObj()
152 {
153  DBG(cerr << "In BaseTpe::copy_ctor for " << copy_from.name() << endl);
154  m_duplicate(copy_from);
155 }
156 
157 BaseType::~BaseType()
158 {
159  DBG2(cerr << "Entering ~BaseType (" << this << ")" << endl);
160 
161  if (d_attributes)
162  delete d_attributes;
163 
164  DBG2(cerr << "Exiting ~BaseType" << endl);
165 }
166 
167 BaseType &
168 BaseType::operator=(const BaseType &rhs)
169 {
170  DBG(cerr << "Entering BaseType::operator=" << endl);
171  if (this == &rhs)
172  return *this;
173 
174  m_duplicate(rhs);
175 
176  DBG(cerr << "Exiting BaseType::operator=" << endl);
177  return *this;
178 }
179 
185 {
186  ostringstream oss;
187  oss << "BaseType (" << this << "):" << endl
188  << " _name: " << name() << endl
189  << " _type: " << type_name() << endl
190  << " _dataset: " << d_dataset << endl
191  << " _read_p: " << d_is_read << endl
192  << " _send_p: " << d_is_send << endl
193  << " _synthesized_p: " << d_is_synthesized << endl
194  << " d_parent: " << d_parent << endl
195  << " d_attr: " << hex << &d_attr << dec << endl;
196 
197  return oss.str();
198 }
199 
215 void
217 {
218  BaseType *dest = ptr_duplicate();
219  // If it's already a DAP4 object then we can just return it!
220  if(!is_dap4()){
222  dest->set_is_dap4(true);
223  }
224  container->add_var_nocopy(dest);
225 }
226 
227 
258 std::vector<BaseType *> *
260 {
261  BaseType *dest = this->ptr_duplicate();
262  // convert the d4 attributes to a dap2 attribute table.
263  // HK-403. jhrg 6/17/19
264 #if 0
265  AttrTable *attrs = this->attributes()->get_AttrTable(name());
266  dest->set_attr_table(*attrs);
267 #else
268  if (dest->get_attr_table().get_size() == 0) {
270  dest->get_attr_table().set_name(name());
271  }
272 #endif
273 
274  dest->set_is_dap4(false);
275 
276  vector<BaseType *> *result = new vector<BaseType *>();
277  result->push_back(dest);
278  return result;
279 }
280 
281 
290 void
291 BaseType::dump(ostream &strm) const
292 {
293  strm << DapIndent::LMarg << "BaseType::dump - ("
294  << (void *)this << ")" << endl ;
295  DapIndent::Indent() ;
296 
297  strm << DapIndent::LMarg << "name: " << name() << endl ;
298  strm << DapIndent::LMarg << "type: " << type_name() << endl ;
299  strm << DapIndent::LMarg << "dataset: " << d_dataset << endl ;
300  strm << DapIndent::LMarg << "read_p: " << d_is_read << endl ;
301  strm << DapIndent::LMarg << "send_p: " << d_is_send << endl ;
302  strm << DapIndent::LMarg << "synthesized_p: " << d_is_synthesized << endl ;
303  strm << DapIndent::LMarg << "parent: " << (void *)d_parent << endl ;
304  strm << DapIndent::LMarg << "attributes: " << endl ;
305  DapIndent::Indent() ;
306 
307  if (d_attributes)
308  d_attributes->dump(strm);
309  else
310  d_attr.dump(strm) ;
311 
312  DapIndent::UnIndent() ;
313 
314  DapIndent::UnIndent() ;
315 }
316 
319 string
321 {
322  return d_name;
323 }
324 
331 string
333 {
334  if (get_parent() == 0)
335  return name();
336  else if (get_parent()->type() == dods_group_c)
337  return get_parent()->FQN() + name();
338  else
339  return get_parent()->FQN() + "." + name();
340 }
341 
343 void
344 BaseType::set_name(const string &n)
345 {
346  string name = n;
347  d_name = www2id(name); // www2id writes into its param.
348 }
349 
357 string
359 {
360  return d_dataset;
361 }
362 
364 Type
366 {
367  return d_type;
368 }
369 
371 void
373 {
374  d_type = t;
375 }
376 
378 string
380 {
381  if (is_dap4())
382  return libdap::D4type_name(d_type);
383  else
384  return libdap::D2type_name(d_type);
385 }
386 
392 bool
394 {
395  return libdap::is_simple_type(type());
396 }
397 
401 bool
403 {
404  return libdap::is_vector_type(type());
405 }
406 
411 bool
413 {
415 }
416 
442 int
444 {
445  return 1;
446 }
447 
451 bool
453 {
454  return d_is_synthesized;
455 }
456 
462 void
464 {
465  d_is_synthesized = state;
466 }
467 
468 // Return the state of d_is_read (true if the value of the variable has been
469 // read (and is in memory) false otherwise).
470 
479 bool
481 {
482  return d_is_read;
483 }
484 
515 void
517 {
518  // The this comment is/was wrong!
519  // The is_synthesized property was not being used and the more I thought
520  // about how this was coded, the more this code below seemed like a bad idea.
521  // Once the property was set, the read_p property could not be changed.
522  // That seems a little silly. Also, I think I need to use this is_synthesized
523  // property for some of the server function code I'm working on for Raytheon,
524  // and I'd like to be able to control the read_p property! jhrg 3/9/15
525 
526  // What's true: The is_synthesized property is used by
527  // 'projection functions' in the freeform handler. It might be better
528  // to modify the FFtypes to support this behavior, but for now I'm returning
529  // the library to its old behavior. That this change (setting is_read
530  // of the value of is_syn...) broke the FF handler was not detected
531  // because the FF tests were not being run due to an error in the FF
532  // bes-testsuite Makefile.am). jhrg 9/9/15
533 
534 #if 1
535  if (!d_is_synthesized) {
536  d_is_read = state;
537  }
538 #else
539  d_is_read = state;
540 #endif
541 }
542 
553 bool
555 {
556  return d_is_send;
557 }
558 
567 void
569 {
570  DBG2(cerr << "Calling BaseType::set_send_p() for: " << this->name()
571  << endl);
572  d_is_send = state;
573 }
574 
575 
581 AttrTable &
583 {
584  return d_attr;
585 }
586 
589 void
591 {
592  d_attr = at;
593 }
594 
598 D4Attributes *
600 {
601  if (!d_attributes) d_attributes = new D4Attributes();
602  return d_attributes;
603 }
604 
605 void
606 BaseType::set_attributes(D4Attributes *attrs)
607 {
608  d_attributes = new D4Attributes(*attrs);
609 }
610 
611 void
612 BaseType::set_attributes_nocopy(D4Attributes *attrs)
613 {
614  d_attributes = attrs;
615 }
617 
645 
646  DBG(cerr << __func__ << "() - BEGIN name:'" << name() << "'" << endl);
647 
648  AttrTable *at = at_container->get_attr_table(name());
649  DBG(cerr << __func__ << "() - at: "<< (void *) at << endl);
650 
651 
652  if (at) {
653  at->set_is_global_attribute(false);
654  DBG(cerr << __func__ << "() - Processing AttrTable: " << at->get_name() << endl);
655 
656  AttrTable::Attr_iter at_p = at->attr_begin();
657  while (at_p != at->attr_end()) {
658  DBG(cerr << __func__ << "() - Attribute '" << at->get_name(at_p) << "' is type: " << at->get_type(at_p) << endl);
659  if (at->get_attr_type(at_p) == Attr_container){
660  // An attribute container may actually represent a child member variable. When
661  // that's the case we don't want to add the container to the parent type, but
662  // rather let any child of BaseType deal with those containers in the child's
663  // overridden transfer_attributes() method.
664  // We capitalize on the magic of the BaseType API and utilize the var() method
665  // to check for a child variable of the same name and, if one exists, we'll skip
666  // this AttrTable and let a child constructor class like Grid or Constructor
667  // deal with it.
668  BaseType *bt = var(at->get_name(at_p),true);
669  if(bt==0){
670  DBG(cerr << __func__ << "() - Adding container '" << at->get_name(at_p) << endl);
671  get_attr_table().append_container(new AttrTable(*at->get_attr_table(at_p)), at->get_name(at_p));
672  }
673  else {
674  DBG(cerr << __func__ << "() - Found child var: '"<< bt->type_name()<< " " << bt->name() << " (address:" << (void *) bt << ")" << endl);
675  DBG(cerr << __func__ << "() - Skipping container '" << at->get_name(at_p) << endl);
676  }
677  }
678  else {
679  DBG(cerr << __func__ << "() - Adding Attribute '" << at->get_name(at_p) << endl);
680  get_attr_table().append_attr(at->get_name(at_p), at->get_type(at_p), at->get_attr_vector(at_p));
681  }
682  at_p++;
683  }
684  }
685  else {
686  DBG(cerr << __func__ << "() - Unable to locate AttrTable '" << name() << "' SKIPPING" << endl);
687 
688  }
689 }
690 
702 bool
704 {
705  return d_in_selection;
706 }
707 
717 void
719 {
720  d_in_selection = state;
721 }
722 
723 // Protected method.
732 void
734 {
735  if (!dynamic_cast<Constructor *>(parent)
736  && !dynamic_cast<Vector *>(parent)
737  && parent != 0)
738  throw InternalErr("Call to set_parent with incorrect variable type.");
739 
740  d_parent = parent;
741 }
742 
743 // Public method.
744 
750 BaseType *
752 {
753  return d_parent;
754 }
755 
756 // Documented in the header file.
757 BaseType *
758 BaseType::var(const string &/*name*/, bool /*exact_match*/, btp_stack */*s*/)
759 {
760  return static_cast<BaseType *>(0);
761 }
762 
779 BaseType *
780 BaseType::var(const string &, btp_stack &)
781 {
782  return static_cast<BaseType *>(0);
783 }
784 
814 void
816 {
817  throw InternalErr(__FILE__, __LINE__, "BaseType::add_var unimplemented");
818 }
819 
820 void
821 BaseType::add_var_nocopy(BaseType *, Part)
822 {
823  throw InternalErr(__FILE__, __LINE__, "BaseType::add_var_nocopy unimplemented");
824 }
825 
898 bool
900 {
901  if (d_is_read)
902  return true;
903 
904  throw InternalErr("Unimplemented BaseType::read() method called for the variable named: " + name());
905 }
906 
907 void
909 {
910 #if USE_LOCAL_TIMEOUT_SCHEME
911  dds.timeout_on();
912 #endif
913  DBG2(cerr << "BaseType::intern_data: " << name() << endl);
914  if (!read_p())
915  read(); // read() throws Error and InternalErr
916 #if USE_LOCAL_TIMEOUT_SCHEME
917  dds.timeout_off();
918 #endif
919 }
920 
926 void
927 BaseType::intern_data(/*Crc32 &checksum, DMR &, ConstraintEvaluator &*/)
928 {
929  if (!read_p())
930  read(); // read() throws Error and InternalErr
931 #if 0
932  compute_checksum(checksum);
933 #endif
934 }
935 
936 bool
938 {
939  throw InternalErr(__FILE__, __LINE__, "The DAP2 serialize() method has not been implemented for " + type_name());
940 }
941 
942 bool
944 {
945  throw InternalErr(__FILE__, __LINE__, "The DAP2 deserialize() method has not been implemented for " + type_name());
946 }
947 
948 void
949 BaseType::serialize(D4StreamMarshaller &, DMR &, /*ConstraintEvaluator &,*/ bool)
950 {
951  throw InternalErr(__FILE__, __LINE__, "The DAP4 serialize() method has not been implemented for " + type_name());
952 }
953 
954 void
956 {
957  throw InternalErr(__FILE__, __LINE__, "The DAP4 deserialize() method has not been implemented for " + type_name());
958 }
959 
1002 void
1003 BaseType::print_decl(FILE *out, string space, bool print_semi,
1004  bool constraint_info, bool constrained)
1005 {
1006  ostringstream oss;
1007  print_decl(oss, space, print_semi, constraint_info, constrained);
1008  fwrite(oss.str().data(), sizeof(char), oss.str().length(), out);
1009 }
1010 
1053 void
1054 BaseType::print_decl(ostream &out, string space, bool print_semi,
1055  bool constraint_info, bool constrained)
1056 {
1057  // if printing the constrained declaration, exit if this variable was not
1058  // selected.
1059  if (constrained && !send_p())
1060  return;
1061 
1062  out << space << type_name() << " " << id2www(name()) ;
1063 
1064  if (constraint_info) {
1065  if (send_p())
1066  out << ": Send True" ;
1067  else
1068  out << ": Send False" ;
1069  }
1070 
1071  if (print_semi)
1072  out << ";\n" ;
1073 }
1074 
1089 void
1090 BaseType::print_val(FILE *out, string space, bool print_decl_p)
1091 {
1092  ostringstream oss;
1093  print_val(oss, space, print_decl_p);
1094  fwrite(oss.str().data(), sizeof(char), oss.str().length(), out);
1095 }
1096 
1104 void
1105 BaseType::print_xml(FILE *out, string space, bool constrained)
1106 {
1107  XMLWriter xml(space);
1108  print_xml_writer(xml, constrained);
1109  fwrite(xml.get_doc(), sizeof(char), xml.get_doc_size(), out);
1110 }
1111 
1119 void
1120 BaseType::print_xml(ostream &out, string space, bool constrained)
1121 {
1122  XMLWriter xml(space);
1123  print_xml_writer(xml, constrained);
1124  out << xml.get_doc();
1125 }
1126 
1133 void
1134 BaseType::print_xml_writer(XMLWriter &xml, bool constrained)
1135 {
1136  if (constrained && !send_p())
1137  return;
1138 
1139  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*)type_name().c_str()) < 0)
1140  throw InternalErr(__FILE__, __LINE__, "Could not write " + type_name() + " element");
1141 
1142  if (!name().empty())
1143  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name", (const xmlChar*)name().c_str()) < 0)
1144  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
1145 
1146  if (is_dap4())
1147  attributes()->print_dap4(xml);
1148 
1149  if (!is_dap4() && get_attr_table().get_size() > 0)
1151 
1152  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
1153  throw InternalErr(__FILE__, __LINE__, "Could not end " + type_name() + " element");
1154 }
1155 
1163 void
1164 BaseType::print_dap4(XMLWriter &xml, bool constrained)
1165 {
1166  print_xml_writer(xml, constrained);
1167 }
1168 
1169 // Compares the object's current state with the semantics of a particular
1170 // type. This will typically be defined in ctor classes (which have
1171 // complicated semantics). For BaseType, an object is semantically correct if
1172 // it has both a non-null name and type.
1173 //
1174 // NB: This is not the same as an invariant -- during the parse objects exist
1175 // but have no name. Also, the bool ALL defaults to false for BaseType. It is
1176 // used by children of CtorType.
1177 //
1178 // Returns: true if the object is semantically correct, false otherwise.
1179 
1208 bool
1209 BaseType::check_semantics(string &msg, bool)
1210 {
1211  bool sem = (d_type != dods_null_c && name().length());
1212 
1213  if (!sem)
1214  msg = "Every variable must have both a name and a type\n";
1215 
1216  return sem;
1217 }
1218 
1255 bool
1257 {
1258  // Even though ops is a public method, it can never be called because
1259  // they will never have a BaseType object since this class is abstract,
1260  // however any of the child classes could by mistake call BaseType::ops
1261  // so this is an internal error. Jose Garcia
1262  throw InternalErr(__FILE__, __LINE__, "Unimplemented operator.");
1263 }
1264 
1281 bool
1283 {
1284  throw InternalErr(__FILE__, __LINE__, "Unimplemented operator.");
1285 }
1286 
1298 unsigned int
1299 BaseType::width(bool /* constrained */) const
1300 {
1301  throw InternalErr(__FILE__, __LINE__, "not implemented");
1302 }
1303 
1304 } // namespace libdap
virtual bool read()
Read data into a local buffer.
Definition: BaseType.cc:899
-
virtual bool read_p()
Has this variable been read?
Definition: BaseType.cc:480
-
virtual string name() const
Returns the name of the class instance.
Definition: BaseType.cc:320
-
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
virtual void print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
Print an ASCII representation of the variable structure.
Definition: BaseType.cc:1003
-
virtual bool d4_ops(BaseType *b, int op)
Evaluator a relop for DAP4.
Definition: BaseType.cc:1282
-
virtual void dump(ostream &strm) const
dumps information about this object
-
virtual void print_dap4(XMLWriter &xml, bool constrained=false)
Definition: BaseType.cc:1164
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: BaseType.cc:291
-
virtual Attr_iter attr_end()
Definition: AttrTable.cc:719
-
virtual void print_xml(FILE *out, string space=" ", bool constrained=false)
Definition: BaseType.cc:1105
-
Part
Names the parts of multi-section constructor data types.
Definition: Type.h:48
-
bool is_constructor_type(Type t)
Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable...
Definition: util.cc:859
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
virtual void set_name(const string &n)
Sets the name of the class instance.
Definition: BaseType.cc:344
-
virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)
Receive data from the net.
Definition: BaseType.cc:943
-
virtual string get_type(const string &name)
Get the type name of an attribute within this attribute table.
Definition: AttrTable.cc:613
- -
virtual void print_xml_writer(XMLWriter &xml, bool constrained=false)
Definition: BaseType.cc:1134
-
virtual string get_name() const
Get the name of this attribute table.
Definition: AttrTable.cc:238
-
Read data from the stream made by D4StreamMarshaller.
-
BaseType(const string &n, const Type &t, bool is_dap4=false)
The BaseType constructor.
Definition: BaseType.cc:126
-
STL namespace.
-
bool is_vector_type(Type t)
Returns true if the instance is a vector (i.e., array) type variable.
Definition: util.cc:815
-
void print_xml_writer(XMLWriter &xml)
Definition: AttrTable.cc:1425
-
virtual bool is_simple_type() const
Returns true if the instance is a numeric, string or URL type variable.
Definition: BaseType.cc:393
-
virtual void add_var_nocopy(BaseType *bt, Part part=nil)
Definition: Constructor.cc:432
-
virtual void add_var(BaseType *bt, Part part=nil)
Add a variable.
Definition: BaseType.cc:815
-
Type
Identifies the data type.
Definition: Type.h:94
-
virtual string toString()
Definition: BaseType.cc:184
-
virtual void set_in_selection(bool state)
Definition: BaseType.cc:718
-
virtual bool is_in_selection()
Is this variable part of the current selection?
Definition: BaseType.cc:703
-
virtual void set_parent(BaseType *parent)
Definition: BaseType.cc:733
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
virtual std::string FQN() const
Definition: BaseType.cc:332
-
void transform_attrs_to_dap2(AttrTable *d2_attr_table)
Copy the attributes from this D4Attributes object to a DAP2 AttrTable.
-
virtual BaseType * var(const string &name="", bool exact_match=true, btp_stack *s=0)
Returns a pointer to a member of a constructor class.
Definition: BaseType.cc:758
-
virtual bool is_vector_type() const
Returns true if the instance is a vector (i.e., array) type variable.
Definition: BaseType.cc:402
-
virtual void compute_checksum(Crc32 &checksum)=0
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
-
virtual void print_val(FILE *out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: BaseType.cc:1090
-
virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
Move data to the net, then remove them from the object.
Definition: BaseType.cc:937
-
virtual int element_count(bool leaves=false)
Count the members of constructor types.
Definition: BaseType.cc:443
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
-
virtual void set_send_p(bool state)
Definition: BaseType.cc:568
-
virtual bool is_constructor_type() const
Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable...
Definition: BaseType.cc:412
-
virtual AttrTable * append_container(const string &name)
Add a container to the attribute table.
Definition: AttrTable.cc:410
- -
virtual AttrTable * get_attr_table(const string &name)
Get an attribute container.
Definition: AttrTable.cc:607
-
virtual Type type() const
Returns the type of the class instance.
Definition: BaseType.cc:365
-
string D4type_name(Type t)
Returns the type of the class instance as a string. Supports all DAP4 types and not the DAP2-only typ...
Definition: util.cc:694
-
virtual void set_type(const Type &t)
Sets the type of the class instance.
Definition: BaseType.cc:372
-
virtual void set_read_p(bool state)
Sets the value of the read_p property.
Definition: BaseType.cc:516
-
virtual void transform_to_dap4(D4Group *root, Constructor *container)
DAP2 to DAP4 transform.
Definition: BaseType.cc:216
-
bool is_simple_type(Type t)
Returns true if the instance is a numeric, string or URL type variable.
Definition: util.cc:775
-
virtual D4Attributes * attributes()
Definition: BaseType.cc:599
-
virtual void intern_data()
Read data into this variable.
Definition: BaseType.cc:927
-
virtual bool synthesized_p()
Definition: BaseType.cc:452
-
virtual Attr_iter attr_begin()
Definition: AttrTable.cc:711
-
virtual BaseType * ptr_duplicate()=0
-
string www2id(const string &in, const string &escape, const string &except)
Definition: escaping.cc:220
-
virtual std::vector< BaseType * > * transform_to_dap2(AttrTable *parent_attr_table)
DAP4 to DAP2 transform.
Definition: BaseType.cc:259
- -
void m_duplicate(const BaseType &bt)
Perform a deep copy.
Definition: BaseType.cc:86
-
Evaluate a constraint expression.
-
virtual AttrTable & get_attr_table()
Definition: BaseType.cc:582
-
virtual BaseType * get_parent() const
Definition: BaseType.cc:751
-
virtual unsigned int append_attr(const string &name, const string &type, const string &value)
Add an attribute to the table.
Definition: AttrTable.cc:307
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
string D2type_name(Type t)
Returns the type of the class instance as a string. Supports all DAP2 types and not the DAP4-only typ...
Definition: util.cc:649
-
libdap base object for common functionality of libdap objects
Definition: DapObj.h:50
-
virtual AttrType get_attr_type(const string &name)
Get the type of an attribute.
Definition: AttrTable.cc:621
-
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
-
virtual string type_name() const
Returns the type of the class instance as a string.
Definition: BaseType.cc:379
-
virtual void set_attr_table(const AttrTable &at)
Definition: BaseType.cc:590
-
virtual bool ops(BaseType *b, int op)
Evaluate relational operators.
Definition: BaseType.cc:1256
- -
virtual vector< string > * get_attr_vector(const string &name)
Get a vector-valued attribute.
Definition: AttrTable.cc:653
- -
virtual unsigned int get_size() const
Get the number of entries in this attribute table.
Definition: AttrTable.cc:231
-
virtual void set_name(const string &n)
Set the name of this attribute table.
Definition: AttrTable.cc:245
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: AttrTable.cc:1510
-
virtual void transfer_attributes(AttrTable *at)
Definition: BaseType.cc:644
-
void transform_to_dap4(AttrTable &at)
copy attributes from DAP2 to DAP4
-
virtual unsigned int width(bool constrained=false) const
How many bytes does this variable use Return the number of bytes of storage this variable uses...
Definition: BaseType.cc:1299
-
virtual bool send_p()
Should this variable be sent?
Definition: BaseType.cc:554
-
string id2www(string in, const string &allowable)
Definition: escaping.cc:153
-
virtual string dataset() const
Returns the name of the dataset used to create this instance.
Definition: BaseType.cc:358
-
virtual bool check_semantics(string &msg, bool all=false)
Compare an object&#39;s current state with the semantics of its type.
Definition: BaseType.cc:1209
-
virtual void set_synthesized_p(bool state)
Definition: BaseType.cc:463
-
-
- - - - diff --git a/html/BaseType_8h_source.html b/html/BaseType_8h_source.html deleted file mode 100644 index aa2971267..000000000 --- a/html/BaseType_8h_source.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - -libdap: BaseType.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
BaseType.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 // Dan Holloway <dan@hollywood.gso.uri.edu>
10 // Reza Nekovei <reza@intcomm.net>
11 //
12 // This library is free software; you can redistribute it and/or
13 // modify it under the terms of the GNU Lesser General Public
14 // License as published by the Free Software Foundation; either
15 // version 2.1 of the License, or (at your option) any later version.
16 //
17 // This library is distributed in the hope that it will be useful,
18 // but WITHOUT ANY WARRANTY; without even the implied warranty of
19 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 // Lesser General Public License for more details.
21 //
22 // You should have received a copy of the GNU Lesser General Public
23 // License along with this library; if not, write to the Free Software
24 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
25 //
26 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
27 
28 // (c) COPYRIGHT URI/MIT 1994-1999
29 // Please read the full copyright statement in the file COPYRIGHT_URI.
30 //
31 // Authors:
32 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
33 // dan Dan Holloway <dan@hollywood.gso.uri.edu>
34 // reza Reza Nekovei <reza@intcomm.net>
35 
36 // Abstract base class for the variables in a dataset. This is used to store
37 // the type-invariant information that describes a variable as given in the
38 // DODS API.
39 //
40 // jhrg 9/6/94
41 
42 #ifndef _basetype_h
43 #define _basetype_h 1
44 
45 #include <vector>
46 #include <stack>
47 #include <iostream>
48 #include <string>
49 
50 #include "AttrTable.h"
51 
52 #include "InternalErr.h"
53 
54 #include "dods-datatypes.h"
55 #include "Type.h"
56 
57 #include "DapObj.h"
58 
59 using namespace std;
60 
61 class Crc32;
62 
63 namespace libdap
64 {
65 
66 class ConstraintEvaluator;
67 
68 class DDS;
69 class Marshaller;
70 class UnMarshaller;
71 
72 class Constructor;
73 class XMLWrter;
74 
75 class DMR;
76 class D4Group;
77 class XMLWriter;
78 class D4StreamMarshaller;
79 class D4StreamUnMarshaller;
80 
81 class D4Attributes;
82 
117 class BaseType : public DapObj
118 {
119 private:
120  string d_name; // name of the instance
121  Type d_type; // instance's type
122  string d_dataset; // name of the dataset used to create this BaseType
123 
124  bool d_is_read; // true if the value has been read
125  bool d_is_send; // Is the variable in the projection?
126 
127  // d_parent points to the Constructor or Vector which holds a particular
128  // variable. It is null for simple variables. The Vector and Constructor
129  // classes must maintain this variable.
130  BaseType *d_parent;
131 
132  // Attributes for this variable. Added 05/20/03 jhrg
133  AttrTable d_attr;
134 
135  D4Attributes *d_attributes;
136 
137  bool d_is_dap4; // True if this is a DAP4 variable, false ... DAP2
138 
139  // These are non-empty only for DAP4 variables. Added 9/27/12 jhrg
140 
141 protected:
142  // These were/are used for DAP2 CEs, but not for DAP4 ones
143  bool d_in_selection; // Is the variable in the selection?
144  bool d_is_synthesized; // true if the variable is synthesized
145 
146  void m_duplicate(const BaseType &bt);
147 
148 public:
149  typedef stack<BaseType *> btp_stack;
150 
151  // These ctors assume is_dap4 is false
152  BaseType(const string &n, const Type &t, bool is_dap4 = false);
153  BaseType(const string &n, const string &d, const Type &t, bool is_dap4 = false);
154 
155  BaseType(const BaseType &copy_from);
156  virtual ~BaseType();
157 
158  virtual string toString();
159 
160  virtual void transform_to_dap4(D4Group *root, Constructor *container);
161  virtual std::vector<BaseType *> *transform_to_dap2(AttrTable *parent_attr_table);
162 
163  virtual void dump(ostream &strm) const ;
164 
165  BaseType &operator=(const BaseType &rhs);
166 
179  virtual void clear_local_data() { set_read_p(false); }
180 
181  virtual bool is_dap4() const { return d_is_dap4; }
182  virtual void set_is_dap4(const bool v) { d_is_dap4 = v;}
183 
190  virtual BaseType *ptr_duplicate() = 0;
191 
192  virtual string name() const;
193  virtual void set_name(const string &n);
194  virtual std::string FQN() const;
195 
196  virtual Type type() const;
197  virtual void set_type(const Type &t);
198  virtual string type_name() const;
199 
200  virtual string dataset() const ;
201 
207  virtual int length() const { return 1; }
208 
214  virtual void set_length(int) { }
215 
216  virtual bool is_simple_type() const;
217  virtual bool is_vector_type() const;
218  virtual bool is_constructor_type() const;
219 
220  virtual bool synthesized_p();
221  virtual void set_synthesized_p(bool state);
222 
223  virtual int element_count(bool leaves = false);
224 
225  virtual bool read_p();
226  virtual void set_read_p(bool state);
227 
228  virtual bool send_p();
229  virtual void set_send_p(bool state);
230 
231  virtual AttrTable &get_attr_table();
232  virtual void set_attr_table(const AttrTable &at);
233 
234  // DAP4 attributes
235  virtual D4Attributes *attributes();
236  virtual void set_attributes(D4Attributes *);
237  virtual void set_attributes_nocopy(D4Attributes *);
238 
239  virtual bool is_in_selection();
240  virtual void set_in_selection(bool state);
241 
242  virtual void set_parent(BaseType *parent);
243  virtual BaseType *get_parent() const;
244 
245  virtual void transfer_attributes(AttrTable *at);
246 
247  // I put this comment here because the version in BaseType.cc does not
248  // include the exact_match or s variables since they are not used. Doxygen
249  // was gaging on the comment.
250 
281  virtual BaseType *var(const string &name = "", bool exact_match = true, btp_stack *s = 0);
282  virtual BaseType *var(const string &name, btp_stack &s);
283 
284  virtual void add_var(BaseType *bt, Part part = nil);
285  virtual void add_var_nocopy(BaseType *bt, Part part = nil);
286 
287  virtual bool read();
288 
289  virtual bool check_semantics(string &msg, bool all = false);
290 
291  virtual bool ops(BaseType *b, int op);
292  virtual bool d4_ops(BaseType *b, int op);
293 
294  virtual unsigned int width(bool constrained = false) const;
295 
296  virtual void print_decl(FILE *out, string space = " ",
297  bool print_semi = true,
298  bool constraint_info = false,
299  bool constrained = false);
300 
301  virtual void print_xml(FILE *out, string space = " ",
302  bool constrained = false);
303 
304  virtual void print_decl(ostream &out, string space = " ",
305  bool print_semi = true,
306  bool constraint_info = false,
307  bool constrained = false);
308 
309  virtual void print_xml(ostream &out, string space = " ",
310  bool constrained = false);
311 
312  virtual void print_xml_writer(XMLWriter &xml, bool constrained = false);
313 
314  virtual void print_dap4(XMLWriter &xml, bool constrained = false);
315 
318 #if 0
319 
330  virtual unsigned int width(bool constrained = false) = 0;
331 #endif
332 
352  virtual unsigned int buf2val(void **val) = 0;
353 
383  virtual unsigned int val2buf(void *val, bool reuse = false) = 0;
384 
399  virtual void intern_data(ConstraintEvaluator &eval, DDS &dds);
400 
444  virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval = true);
445 
446 #if 0
447 
467  virtual bool serialize_no_release(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval = true) {
468  return serialize(eval, dds, m, ce_eval);
469  }
470 #endif
471 
478  virtual void compute_checksum(Crc32 &checksum) = 0;
479 
480  virtual void intern_data(/*Crc32 &checksum, DMR &dmr, ConstraintEvaluator &eval*/);
481 
495  virtual void serialize(D4StreamMarshaller &m, DMR &dmr, bool filter = false);
496 
497 #if 0
498 
516  virtual void serialize_no_release(D4StreamMarshaller &m, DMR &dmr, bool filter = false) {
517  serialize(m, dmr, filter);
518  }
519 #endif
520 
545  virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse = false);
546 
553  virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr);
554 
570  virtual void print_val(FILE *out, string space = "",
571  bool print_decl_p = true);
572 
587  virtual void print_val(ostream &out, string space = "",
588  bool print_decl_p = true) = 0;
590 };
591 
592 } // namespace libdap
593 
594 #endif // _basetype_h
virtual int length() const
How many elements are in this variable.
Definition: BaseType.h:207
-
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
Part
Names the parts of multi-section constructor data types.
Definition: Type.h:48
-
bool is_constructor_type(Type t)
Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable...
Definition: util.cc:859
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
- -
Read data from the stream made by D4StreamMarshaller.
-
Definition: crc.h:76
-
STL namespace.
-
bool is_vector_type(Type t)
Returns true if the instance is a vector (i.e., array) type variable.
Definition: util.cc:815
-
Type
Identifies the data type.
Definition: Type.h:94
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual void clear_local_data()
Definition: BaseType.h:179
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
- -
bool is_simple_type(Type t)
Returns true if the instance is a numeric, string or URL type variable.
Definition: util.cc:775
-
virtual void set_length(int)
Set the number of elements for this variable.
Definition: BaseType.h:214
- -
Evaluate a constraint expression.
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
libdap base object for common functionality of libdap objects
Definition: DapObj.h:50
-
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
- - -
string type_name(Type t)
Definition: util.cc:760
-
-
- - - - diff --git a/html/Byte_8cc_source.html b/html/Byte_8cc_source.html deleted file mode 100644 index ea373f395..000000000 --- a/html/Byte_8cc_source.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - -libdap: Byte.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Byte.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1994-1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Implementation for Byte.
33 //
34 // jhrg 9/7/94
35 
36 //#define DODS_DEBUG
37 
38 #include "config.h"
39 
40 #include <sstream>
41 
42 #include "Byte.h" // synonymous with UInt8 and Char
43 #include "Int8.h"
44 #include "Int16.h"
45 #include "UInt16.h"
46 #include "Int32.h"
47 #include "UInt32.h"
48 #include "Int64.h"
49 #include "UInt64.h"
50 #include "Float32.h"
51 #include "Float64.h"
52 #include "Str.h"
53 #include "Url.h"
54 
55 #include "DDS.h"
56 #include "Operators.h"
57 #include "Marshaller.h"
58 #include "UnMarshaller.h"
59 
60 #include "DMR.h"
61 #include "D4Attributes.h"
62 #include "D4StreamMarshaller.h"
63 #include "D4StreamUnMarshaller.h"
64 
65 #include "debug.h"
66 #include "util.h"
67 #include "parser.h"
68 #include "dods-limits.h"
69 #include "InternalErr.h"
70 #include "DapIndent.h"
71 
72 using std::cerr;
73 using std::endl;
74 
75 namespace libdap {
76 
86 Byte::Byte(const string & n): BaseType(n, dods_byte_c), d_buf(0)
87 {}
88 
99 Byte::Byte(const string &n, const string &d): BaseType(n, d, dods_byte_c), d_buf(0)
100 {}
101 
102 Byte::Byte(const Byte & copy_from): BaseType(copy_from)
103 {
104  d_buf = copy_from.d_buf;
105 }
106 
108 {
109  return new Byte(*this);
110 }
111 
112 Byte & Byte::operator=(const Byte & rhs)
113 {
114  if (this == &rhs)
115  return *this;
116 
117  dynamic_cast < BaseType & >(*this) = rhs;
118 
119  d_buf = rhs.d_buf;
120 
121  return *this;
122 }
123 
124 unsigned int Byte::width(bool) const
125 {
126  return sizeof(dods_byte);
127 }
128 
139 bool Byte::serialize(ConstraintEvaluator & eval, DDS & dds, Marshaller &m, bool ce_eval)
140 {
141 #if USE_LOCAL_TIMEOUT_SCHEME
142  dds.timeout_on();
143 #endif
144  if (!read_p())
145  read(); // read() throws Error and InternalErr
146 
147  if (ce_eval && !eval.eval_selection(dds, dataset()))
148  return true;
149 #if USE_LOCAL_TIMEOUT_SCHEME
150  dds.timeout_off();
151 #endif
152  m.put_byte( d_buf ) ;
153 
154  return true;
155 }
156 
161 {
162  um.get_byte( d_buf ) ;
163 
164  return false;
165 }
166 
167 void
169 {
170  checksum.AddData(reinterpret_cast<uint8_t*>(&d_buf), sizeof(d_buf));
171 }
172 
181 void
182 Byte::serialize(D4StreamMarshaller &m, DMR &, /*ConstraintEvaluator &,*/ bool)
183 {
184  if (!read_p())
185  read(); // read() throws Error
186 
187  m.put_byte( d_buf ) ;
188 }
189 
190 void
192 {
193  um.get_byte( d_buf ) ;
194 }
195 
201 unsigned int Byte::val2buf(void *val, bool)
202 {
203  // Jose Garcia
204  // This method is public therefore and I believe it has being designed
205  // to be use by read which must be implemented on the surrogate library,
206  // thus if the pointer val is NULL, is an Internal Error.
207  if (!val)
208  throw InternalErr("the incoming pointer does not contain any data.");
209 
210  d_buf = *(dods_byte *) val;
211 
212  return width();
213 }
214 
215 unsigned int Byte::buf2val(void **val)
216 {
217  // Jose Garcia
218  // The same comment justifying throwing an Error in val2buf applies here.
219  if (!val)
220  throw InternalErr("NULL pointer");
221 
222  if (!*val)
223  *val = new dods_byte;
224 
225  *(dods_byte *) * val = d_buf;
226 
227  return width();
228 }
229 
234 bool Byte::set_value(dods_byte value)
235 {
236  d_buf = value;
237  set_read_p(true);
238 
239  return true;
240 }
241 
244 dods_byte Byte::value() const
245 {
246  return d_buf;
247 }
248 
249 void Byte::print_val(FILE * out, string space, bool print_decl_p)
250 {
251  ostringstream oss;
252  print_val(oss, space, print_decl_p);
253  fwrite(oss.str().data(), sizeof(char), oss.str().length(), out);
254 }
255 
256 void Byte::print_val(ostream &out, string space, bool print_decl_p)
257 {
258  if (print_decl_p) {
259  print_decl(out, space, false);
260  out << " = " << (int) d_buf << ";\n";
261  }
262  else
263  out << (int) d_buf;
264 }
265 
266 bool Byte::ops(BaseType * b, int op)
267 {
268 
269  // Extract the Byte arg's value.
270  if (!read_p() && !read()) {
271  // Jose Garcia
272  // Since the read method is virtual and implemented outside
273  // libdap++ if we cannot read the data that is the problem
274  // of the user or of whoever wrote the surrogate library
275  // implementing read therefore it is an internal error.
276  throw InternalErr("This value not read!");
277  }
278  // Extract the second arg's value.
279  if (!b || !(b->read_p() || b->read())) {
280  // Jose Garcia
281  // Since the read method is virtual and implemented outside
282  // libdap++ if we cannot read the data that is the problem
283  // of the user or of whoever wrote the surrogate library
284  // implementing read therefore it is an internal error.
285  throw InternalErr("This value not read!");
286  }
287 
288  // By using the same operator code numbers for both the DAP2 and DAP4
289  // parser/evaluator we can use the same evaluation code.
290  return d4_ops(b, op);
291 }
292 
296 bool Byte::d4_ops(BaseType *b, int op)
297 {
298  switch (b->type()) {
299  case dods_int8_c:
300  return Cmp<dods_byte, dods_int8>(op, d_buf, static_cast<Int8*>(b)->value());
301  case dods_byte_c:
302  return Cmp<dods_byte, dods_byte>(op, d_buf, static_cast<Byte*>(b)->value());
303  case dods_int16_c:
304  return Cmp<dods_byte, dods_int16>(op, d_buf, static_cast<Int16*>(b)->value());
305  case dods_uint16_c:
306  return Cmp<dods_byte, dods_uint16>(op, d_buf, static_cast<UInt16*>(b)->value());
307  case dods_int32_c:
308  return Cmp<dods_byte, dods_int32>(op, d_buf, static_cast<Int32*>(b)->value());
309  case dods_uint32_c:
310  return Cmp<dods_byte, dods_uint32>(op, d_buf, static_cast<UInt32*>(b)->value());
311  case dods_int64_c:
312  return Cmp<dods_byte, dods_int64>(op, d_buf, static_cast<Int64*>(b)->value());
313  case dods_uint64_c:
314  return Cmp<dods_byte, dods_uint64>(op, d_buf, static_cast<UInt64*>(b)->value());
315  case dods_float32_c:
316  return Cmp<dods_byte, dods_float32>(op, d_buf, static_cast<Float32*>(b)->value());
317  case dods_float64_c:
318  return Cmp<dods_byte, dods_float64>(op, d_buf, static_cast<Float64*>(b)->value());
319  case dods_str_c:
320  case dods_url_c:
321  throw Error(malformed_expr, "Relational operators can only compare compatible types (number, string).");
322  default:
323  throw Error(malformed_expr, "Relational operators only work with scalar types.");
324  }
325 }
326 
327 
328 
329 
345 std::vector<BaseType *> *
347 {
348  DBG(cerr << __func__ << "() - BEGIN" << endl;);
349  vector<BaseType *> *vec = BaseType::transform_to_dap2(parent_attr_table);
350  if(vec->size()!=1){
351  ostringstream oss;
352  oss << __func__ << "() - Something Bad Happened. This transform should produce only ";
353  oss << " a single BaseType yet it produced " << vec->size();
354  throw Error(internal_error,oss.str());
355  }
356 
357  BaseType *dest = (*vec)[0];
358  DBG(cerr << __func__ << "() - type(): " << type() << endl;);
359  DBG(cerr << __func__ << "() - dest->type(): " << dest->type() << endl;);
360 
361  // This little bit of magic ensures that the DAP4 shenanigans
362  // in which UInt8, Char , and Byte are synonymous is reduced
363  // to the DAP2 simplicity of Byte.
364  if(type()!=dods_byte_c){
365  dest->set_type(dods_byte_c);
366  }
367  DBG (dest->get_attr_table().print(cerr););
368 
369  DBG(cerr << __func__ << "() - END" << endl;);
370  return vec;
371 }
372 
381 void Byte::dump(ostream & strm) const
382 {
383  strm << DapIndent::LMarg << "Byte::dump - ("
384  << (void *) this << ")" << endl;
385  DapIndent::Indent();
386  BaseType::dump(strm);
387  strm << DapIndent::LMarg << "value: " << d_buf << endl;
388  DapIndent::UnIndent();
389 }
390 
391 } // namespace libdap
virtual bool read()
Read data into a local buffer.
Definition: BaseType.cc:899
-
Holds an 8-bit signed integer value.
Definition: Int8.h:42
-
Holds a64-bit signed integer.
Definition: Int64.h:49
-
virtual bool read_p()
Has this variable been read?
Definition: BaseType.cc:480
-
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
virtual std::vector< BaseType * > * transform_to_dap2(AttrTable *parent_attr_table)
DAP4 to DAP2 transform.
Definition: Byte.cc:346
-
virtual unsigned int buf2val(void **val)
Reads the class data.
Definition: Byte.cc:215
-
virtual void print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
Print an ASCII representation of the variable structure.
Definition: BaseType.cc:1003
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: BaseType.cc:291
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
virtual bool deserialize(UnMarshaller &um, DDS *, bool)
Deserialize the char on stdin and put the result in _BUF.
Definition: Byte.cc:160
-
Byte(const string &n)
The Byte constructor.
Definition: Byte.cc:86
-
virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval)
Definition: Byte.cc:139
-
Read data from the stream made by D4StreamMarshaller.
-
Holds an unsigned 16-bit integer.
Definition: UInt16.h:57
-
Definition: crc.h:76
-
BaseType(const string &n, const Type &t, bool is_dap4=false)
The BaseType constructor.
Definition: BaseType.cc:126
-
virtual dods_byte value() const
Definition: Byte.cc:244
-
Holds a 32-bit floating point value.
Definition: Float32.h:61
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
virtual unsigned int val2buf(void *val, bool reuse=false)
Definition: Byte.cc:201
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
-
Holds a 16-bit signed integer value.
Definition: Int16.h:59
- -
virtual Type type() const
Returns the type of the class instance.
Definition: BaseType.cc:365
-
virtual bool d4_ops(BaseType *b, int op)
Definition: Byte.cc:296
-
virtual void set_read_p(bool state)
Sets the value of the read_p property.
Definition: BaseType.cc:516
-
virtual bool set_value(const dods_byte value)
Definition: Byte.cc:234
-
virtual unsigned int width(bool constrained=false) const
How many bytes does this variable use Return the number of bytes of storage this variable uses...
Definition: Byte.cc:124
-
Holds a 64-bit unsigned integer.
Definition: UInt64.h:49
-
void AddData(const uint8_t *pData, const uint32_t length)
Definition: crc.h:98
-
virtual void print_val(FILE *out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: Byte.cc:249
-
virtual std::vector< BaseType * > * transform_to_dap2(AttrTable *parent_attr_table)
DAP4 to DAP2 transform.
Definition: BaseType.cc:259
-
Evaluate a constraint expression.
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
-
Holds a 64-bit (double precision) floating point value.
Definition: Float64.h:60
-
Holds a single byte.
Definition: Byte.h:60
-
bool eval_selection(DDS &dds, const std::string &dataset)
Evaluate a boolean-valued constraint expression. This is main method for the evaluator and is called ...
-
virtual bool ops(BaseType *b, int op)
Evaluate relational operators.
Definition: Byte.cc:266
-
A class for error processing.
Definition: Error.h:92
-
virtual void compute_checksum(Crc32 &checksum)
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
Definition: Byte.cc:168
-
Holds a 32-bit unsigned integer.
Definition: UInt32.h:59
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Byte.cc:381
-
Holds a 32-bit signed integer.
Definition: Int32.h:65
-
virtual BaseType * ptr_duplicate()
Definition: Byte.cc:107
-
virtual string dataset() const
Returns the name of the dataset used to create this instance.
Definition: BaseType.cc:358
-
-
- - - - diff --git a/html/Byte_8h_source.html b/html/Byte_8h_source.html deleted file mode 100644 index 22f4bf139..000000000 --- a/html/Byte_8h_source.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - -libdap: Byte.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Byte.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1994-1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Interface for Byte type.
33 //
34 // jhrg 9/7/94
35 
36 #ifndef _byte_h
37 #define _byte_h 1
38 
39 #ifndef _dods_datatypes_h
40 #include "dods-datatypes.h"
41 #endif
42 
43 #ifndef _basetype_h
44 #include "BaseType.h"
45 #endif
46 
47 #ifndef constraint_evaluator_h
48 #include "ConstraintEvaluator.h"
49 #endif
50 
51 namespace libdap
52 {
53 
60 class Byte: public BaseType
61 {
62 protected:
63  dods_byte d_buf;
64 
65 public:
66  Byte(const string &n);
67  Byte(const string &n, const string &d);
68 
69  virtual ~Byte()
70  {}
71 
72  Byte(const Byte &copy_from);
73 
74  Byte &operator=(const Byte &rhs);
75 
76  virtual unsigned int width(bool constrained = false) const;
77 
78  virtual BaseType *ptr_duplicate();
79 
80  // DAP2
81  virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval);
82  virtual bool deserialize(UnMarshaller &um, DDS *, bool);
83 
84  // DAP4
85  virtual void compute_checksum(Crc32 &checksum);
86  virtual void serialize(D4StreamMarshaller &m, DMR &dmr, bool filter = false);
87  virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr);
88 
89  virtual unsigned int val2buf(void *val, bool reuse = false);
90  virtual unsigned int buf2val(void **val);
91 
92  virtual bool set_value(const dods_byte value);
93  virtual dods_byte value() const;
94 
95  virtual void print_val(FILE *out, string space = "", bool print_decl_p = true);
96  virtual void print_val(ostream &out, string space = "", bool print_decl_p = true);
97 
98  virtual bool ops(BaseType *b, int op);
99  virtual bool d4_ops(BaseType *b, int op);
100  virtual std::vector<BaseType *> *transform_to_dap2(AttrTable *parent_attr_table);
101 
102  virtual void dump(ostream &strm) const ;
103 };
104 
105 } // namespace libdap
106 
107 #endif // _byte_h
108 
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
virtual std::vector< BaseType * > * transform_to_dap2(AttrTable *parent_attr_table)
DAP4 to DAP2 transform.
Definition: Byte.cc:346
-
virtual unsigned int buf2val(void **val)
Reads the class data.
Definition: Byte.cc:215
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
virtual bool deserialize(UnMarshaller &um, DDS *, bool)
Deserialize the char on stdin and put the result in _BUF.
Definition: Byte.cc:160
-
Byte(const string &n)
The Byte constructor.
Definition: Byte.cc:86
-
virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval)
Definition: Byte.cc:139
-
Read data from the stream made by D4StreamMarshaller.
-
Definition: crc.h:76
-
virtual dods_byte value() const
Definition: Byte.cc:244
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual unsigned int val2buf(void *val, bool reuse=false)
Definition: Byte.cc:201
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
- -
virtual bool d4_ops(BaseType *b, int op)
Definition: Byte.cc:296
-
virtual bool set_value(const dods_byte value)
Definition: Byte.cc:234
-
virtual unsigned int width(bool constrained=false) const
How many bytes does this variable use Return the number of bytes of storage this variable uses...
Definition: Byte.cc:124
-
virtual void print_val(FILE *out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: Byte.cc:249
-
Evaluate a constraint expression.
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
-
Holds a single byte.
Definition: Byte.h:60
-
virtual bool ops(BaseType *b, int op)
Evaluate relational operators.
Definition: Byte.cc:266
-
virtual void compute_checksum(Crc32 &checksum)
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
Definition: Byte.cc:168
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Byte.cc:381
-
virtual BaseType * ptr_duplicate()
Definition: Byte.cc:107
-
-
- - - - diff --git a/html/Clause_8cc_source.html b/html/Clause_8cc_source.html deleted file mode 100644 index 62273bb22..000000000 --- a/html/Clause_8cc_source.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -libdap: Clause.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Clause.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1996,1998,1999
27 // Please first read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Implementation for the CE Clause class.
33 
34 #include "config.h"
35 
36 #include <cassert>
37 #include <algorithm>
38 
39 #include "expr.h"
40 #include "Byte.h"
41 #include "Int16.h"
42 #include "UInt16.h"
43 #include "Int32.h"
44 #include "UInt32.h"
45 #include "DDS.h"
46 #include "Clause.h"
47 
48 using std::cerr;
49 using std::endl;
50 
51 namespace libdap {
52 
53 Clause::Clause(const int oper, rvalue *a1, rvalue_list *rv)
54  : _op(oper), _b_func(0), _bt_func(0), _argc(0), _arg1(a1), _args(rv)
55 {
56  assert(OK());
57 }
58 #if 1
59 Clause::Clause(bool_func func, rvalue_list *rv)
60  : _op(0), _b_func(func), _bt_func(0), _argc(0), _arg1(0), _args(rv)
61 {
62  assert(OK());
63 
64  if (_args) // account for null arg list
65  _argc = _args->size();
66  else
67  _argc = 0;
68 }
69 #endif
70 Clause::Clause(btp_func func, rvalue_list *rv)
71  : _op(0), _b_func(0), _bt_func(func), _argc(0), _arg1(0), _args(rv)
72 {
73  assert(OK());
74 
75  if (_args)
76  _argc = _args->size();
77  else
78  _argc = 0;
79 }
80 
81 Clause::Clause() : _op(0), _b_func(0), _bt_func(0), _argc(0), _arg1(0), _args(0)
82 {}
83 
84 static inline void
85 delete_rvalue(rvalue *rv)
86 {
87  delete rv; rv = 0;
88 }
89 
90 Clause::~Clause()
91 {
92  if (_arg1) {
93  delete _arg1; _arg1 = 0;
94  }
95 
96  if (_args) {
97  // _args is a pointer to a vector<rvalue*> and we must must delete
98  // each rvalue pointer here explicitly. 02/03/04 jhrg
99  for_each(_args->begin(), _args->end(), delete_rvalue);
100  delete _args; _args = 0;
101  }
102 }
103 
105 bool
107 {
108  // Each clause object can contain one of: a relational clause, a boolean
109  // function clause or a BaseType pointer function clause. It must have a
110  // valid argument list.
111  //
112  // But, a valid arg list might contain zero arguments! 10/16/98 jhrg
113  bool relational = (_op && !_b_func && !_bt_func);
114 #if 1
115  bool boolean = (!_op && _b_func && !_bt_func);
116 #endif
117  bool basetype = (!_op && !_b_func && _bt_func);
118 
119  if (relational)
120  return _arg1 && _args;
121  else if (boolean || basetype)
122  return true; // Until we check arguments...10/16/98 jhrg
123  else
124  return false;
125 }
126 
128 bool
130 {
131  assert(OK());
132 
133  return _op || _b_func;
134 }
135 
137 bool
139 {
140  assert(OK());
141 
142  return (_bt_func != 0);
143 }
144 
155 bool
157 {
158  assert(OK());
159  assert(_op || _b_func);
160 
161  if (_op) { // Is it a relational clause?
162  // rvalue::bvalue(...) returns the rvalue encapsulated in a
163  // BaseType *.
164  BaseType *btp = _arg1->bvalue(dds);
165  // The list of rvalues is an implicit logical OR, so assume
166  // FALSE and return TRUE for the first TRUE subclause.
167  bool result = false;
168  for (rvalue_list_iter i = _args->begin();
169  i != _args->end() && !result;
170  i++) {
171  result = result || btp->ops((*i)->bvalue(dds), _op);
172  }
173 
174  return result;
175  }
176  else if (_b_func) { // ...A bool function?
177  BaseType **argv = build_btp_args(_args, dds);
178 
179  bool result = false;
180  (*_b_func)(_argc, argv, dds, &result);
181  delete[] argv; // Cache me!
182  argv = 0;
183 
184  return result;
185  }
186  else {
187  throw InternalErr(__FILE__, __LINE__,
188  "A selection expression must contain only boolean clauses.");
189  }
190 }
191 
204 bool
205 Clause::value(DDS &dds, BaseType **value)
206 {
207  assert(OK());
208  assert(_bt_func);
209 
210  if (_bt_func) {
211  // build_btp_args() is a function defined in RValue.cc. It no longer
212  // reads the values as it builds the arguments, that is now left up
213  // to the functions themselves. 9/25/06 jhrg
214  BaseType **argv = build_btp_args(_args, dds);
215 
216  (*_bt_func)(_argc, argv, dds, value);
217 
218  delete[] argv; // Cache me!
219  argv = 0;
220 
221  if (*value) {
222  // FIXME This comment is likely wrong... 10/19/12
223  // This call to set_send_p was removed because new logic used
224  // in ResponseBuilder will handle it. See send_data(), ...
225  // When the second part of the CE is parsed, if it is null,
226  // then all the variables in the DDS that holds the function
227  // result variables will be sent. If there's a projection in
228  // that second CE, it will denote what is to be sent. Setting
229  // set_send_p(true) here had the affect of overriding that
230  // second CE. Note, however, that the code in send_data() clears
231  // all of the send_p properties for variables in the DDS, so
232  // removing the call here is just removing something that will
233  // actually have no affect. jhrg 10/19/12
234  (*value)->set_send_p(true);
235  (*value)->set_read_p(true);
236  return true;
237  }
238  else {
239  return false;
240  }
241  }
242  else {
243  throw InternalErr(__FILE__, __LINE__,
244  "Clause::value() was called in a context expecting a BaseType pointer return, but the Clause was boolean-valued instead.");
245  }
246 }
247 
248 } // namespace libdap
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
bool value(DDS &dds)
Evaluate a clause which returns a boolean value This method must only be evaluated for clauses with r...
Definition: Clause.cc:156
- -
BaseType ** build_btp_args(rvalue_list *args, DDS &dds)
Definition: RValue.cc:88
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
virtual bool ops(BaseType *b, int op)
Evaluate relational operators.
Definition: BaseType.cc:1256
-
bool OK()
Checks the "representation invariant" of a clause.
Definition: Clause.cc:106
-
bool value_clause()
Return true if the clause returns a value in a BaseType pointer.
Definition: Clause.cc:138
-
bool boolean_clause()
Return true if the clause returns a boolean value.
Definition: Clause.cc:129
-
-
- - - - diff --git a/html/Clause_8h_source.html b/html/Clause_8h_source.html deleted file mode 100644 index f6520896b..000000000 --- a/html/Clause_8h_source.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -libdap: Clause.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Clause.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1995-1999
27 // Please first read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Interface for the CE Clause class.
33 
34 #ifndef _clause_h
35 #define _clause_h
36 
37 
38 #ifndef _expr_h
39 #include "expr.h"
40 #endif
41 
42 #ifndef _rvalue_h
43 #include "RValue.h"
44 #endif
45 
46 namespace libdap
47 {
48 
90 struct Clause
91 {
92 
93 private:
95  int _op;
97  bool_func _b_func;
98 
101  btp_func _bt_func;
102 
103  int _argc; // arg count
104  rvalue *_arg1; // only for operator
105  rvalue_list *_args; // vector arg
106 
107  Clause(const Clause &);
108  Clause &operator=(const Clause &);
109 
110 public:
111  Clause(const int oper, rvalue *a1, rvalue_list *rv);
112  Clause(bool_func func, rvalue_list *rv);
113  Clause(btp_func func, rvalue_list *rv);
114  Clause();
115 
116  virtual ~Clause();
117 
118  bool OK();
119 
120  bool boolean_clause();
121 
122  bool value_clause();
123 
124  bool value(DDS &dds);
125 
126  bool value(DDS &dds, BaseType **value);
127 };
128 
129 } // namespace libdap
130 
131 #endif // _clause_h
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
bool value(DDS &dds)
Evaluate a clause which returns a boolean value This method must only be evaluated for clauses with r...
Definition: Clause.cc:156
- -
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
bool OK()
Checks the "representation invariant" of a clause.
Definition: Clause.cc:106
-
Holds a fragment of a constraint expression.
Definition: Clause.h:90
-
bool value_clause()
Return true if the clause returns a value in a BaseType pointer.
Definition: Clause.cc:138
-
bool boolean_clause()
Return true if the clause returns a boolean value.
Definition: Clause.cc:129
-
-
- - - - diff --git a/html/Connect_8cc_source.html b/html/Connect_8cc_source.html deleted file mode 100644 index c9f9cd889..000000000 --- a/html/Connect_8cc_source.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - -libdap: Connect.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Connect.cc
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2002,2003 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 // Dan Holloway <dholloway@gso.uri.edu>
9 // Reza Nekovei <reza@intcomm.net>
10 //
11 // This library is free software; you can redistribute it and/or
12 // modify it under the terms of the GNU Lesser General Public
13 // License as published by the Free Software Foundation; either
14 // version 2.1 of the License, or (at your option) any later version.
15 //
16 // This library is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 // Lesser General Public License for more details.
20 //
21 // You should have received a copy of the GNU Lesser General Public
22 // License along with this library; if not, write to the Free Software
23 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 //
25 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
26 
27 // (c) COPYRIGHT URI/MIT 1994-2002
28 // Please read the full copyright statement in the file COPYRIGHT_URI.
29 //
30 // Authors:
31 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
32 // dan Dan Holloway <dholloway@gso.uri.edu>
33 // reza Reza Nekovei <reza@intcomm.net>
34 
35 #include "config.h"
36 
37 //#define DODS_DEBUG
38 #define FILE_UN_MARSHALLER 1
39 
40 #include <cstring>
41 #include <cerrno>
42 
43 #include <fstream>
44 #include <algorithm>
45 
46 #include "debug.h"
47 #include "DataDDS.h"
48 #include "Connect.h"
49 #include "escaping.h"
50 //#include "RCReader.h"
51 #include "DDXParserSAX2.h"
52 #if FILE_UN_MARSHALLER
53 #include "XDRFileUnMarshaller.h"
54 #else
55 #include "fdiostream.h"
56 #include "XDRStreamUnMarshaller.h"
57 #endif
58 #include "mime_util.h"
59 
60 using std::cerr;
61 using std::endl;
62 using std::ifstream;
63 using std::ofstream;
64 using std::min;
65 
66 namespace libdap {
67 
70 void Connect::process_data(DataDDS &data, Response *rs)
71 {
72  DBG(cerr << "Entering Connect::process_data" << endl);
73 
74  data.set_version(rs->get_version());
75  data.set_protocol(rs->get_protocol());
76 
77  DBG(cerr << "Entering process_data: d_stream = " << rs << endl);
78  switch (rs->get_type()) {
79  case dods_error: {
80  Error e;
81  if (!e.parse(rs->get_stream()))
82  throw InternalErr(__FILE__, __LINE__, "Could not parse the Error object returned by the server!");
83  throw e;
84  }
85 
86  case web_error:
87  // Web errors (those reported in the return document's MIME header)
88  // are processed by the WWW library.
89  throw InternalErr(__FILE__, __LINE__,
90  "An error was reported by the remote httpd; this should have been processed by HTTPConnect..");
91 
92 #if 0
93  // This code triggers a security warning from Coverity; since it is not used,
94  // I have removed it. jhrg 5/5/16
95  case dods_data_ddx: {
96  // Parse the DDX; throw an exception on error.
97  DDXParser ddx_parser(data.get_factory());
98 
99  // Read the MPM boundary and then read the subsequent headers
100  string boundary = read_multipart_boundary(rs->get_stream());
101  DBG(cerr << "MPM Boundary: " << boundary << endl);
102  read_multipart_headers(rs->get_stream(), "text/xml", dods_ddx);
103 
104  // Parse the DDX, reading up to and including the next boundary.
105  // Return the CID for the matching data part
106  string data_cid;
107  ddx_parser.intern_stream(rs->get_stream(), &data, data_cid, boundary);
108 
109  // Munge the CID into something we can work with
110  data_cid = cid_to_header_value(data_cid);
111  DBG(cerr << "Data CID: " << data_cid << endl);
112 
113  // Read the data part's MPM part headers (boundary was read by
114  // DDXParse::intern)
115  read_multipart_headers(rs->get_stream(), "application/octet-stream", dap4_data, data_cid);
116 
117  // Now read the data
118 #if FILE_UN_MARSHALLER
119  XDRFileUnMarshaller um(rs->get_stream());
120 #else
121  fpistream in ( rs->get_stream() );
122  XDRStreamUnMarshaller um( in );
123 #endif
124  for (DDS::Vars_iter i = data.var_begin(); i != data.var_end(); i++) {
125  (*i)->deserialize(um, &data);
126  }
127  return;
128  }
129 #endif
130 
131  case dods_data:
132  default: {
133  // Parse the DDS; throw an exception on error.
134  data.parse(rs->get_stream());
135 #if FILE_UN_MARSHALLER
136  XDRFileUnMarshaller um(rs->get_stream());
137 #else
138  fpistream in ( rs->get_stream() );
139  XDRStreamUnMarshaller um( in );
140 #endif
141  // Load the DDS with data.
142  for (DDS::Vars_iter i = data.var_begin(); i != data.var_end(); i++) {
143  (*i)->deserialize(um, &data);
144  }
145  return;
146  }
147  }
148 }
149 
152 void Connect::process_data(DDS &data, Response *rs)
153 {
154  DBG(cerr << "Entering Connect::process_data" << endl);
155 
156  data.set_dap_version(rs->get_protocol());
157 
158  DBG(cerr << "Entering process_data: d_stream = " << rs << endl);
159  switch (rs->get_type()) {
160  case dods_error: {
161  Error e;
162  if (!e.parse(rs->get_stream()))
163  throw InternalErr(__FILE__, __LINE__, "Could not parse the Error object returned by the server!");
164  throw e;
165  }
166 
167  case web_error:
168  // Web errors (those reported in the return document's MIME header)
169  // are processed by the WWW library.
170  throw InternalErr(__FILE__, __LINE__,
171  "An error was reported by the remote web server; this should have been processed by HTTPConnect.");
172 
173 #if 0
174  // FIXME: The following case is never used. There is no such response. jhrg 10/20/15
175  // This code triggers a security warning from Coverity; since it is not used,
176  // I have removed it. jhrg 5/5/16
177  case dods_data_ddx: {
178  // Parse the DDX; throw an exception on error.
179  DDXParser ddx_parser(data.get_factory());
180 
181  // Read the MPM boundary and then read the subsequent headers
182  string boundary = read_multipart_boundary(rs->get_stream());
183  DBG(cerr << "MPM Boundary: " << boundary << endl);
184  read_multipart_headers(rs->get_stream(), "text/xml", dods_ddx);
185 
186  // Parse the DDX, reading up to and including the next boundary.
187  // Return the CID for the matching data part
188  string data_cid;
189  ddx_parser.intern_stream(rs->get_stream(), &data, data_cid, boundary);
190 
191  // Munge the CID into something we can work with
192  data_cid = cid_to_header_value(data_cid);
193  DBG(cerr << "Data CID: " << data_cid << endl);
194 
195  // Read the data part's MPM part headers (boundary was read by
196  // DDXParse::intern)
197  read_multipart_headers(rs->get_stream(), "application/octet-stream", dap4_data, data_cid);
198 
199  // Now read the data
200  XDRFileUnMarshaller um(rs->get_stream());
201  for (DDS::Vars_iter i = data.var_begin(); i != data.var_end(); i++) {
202  (*i)->deserialize(um, &data);
203  }
204  return;
205  }
206 #endif
207 
208  case dods_data:
209  default: {
210  // Parse the DDS; throw an exception on error.
211  data.parse(rs->get_stream());
212 
213  XDRFileUnMarshaller um(rs->get_stream());
214 
215  // Load the DDS with data.
216  for (DDS::Vars_iter i = data.var_begin(); i != data.var_end(); i++) {
217  (*i)->deserialize(um, &data);
218  }
219 
220  return;
221  }
222  }
223 }
224 
225 // Barely a parser... This is used when reading from local sources of DODS
226 // Data objects. It simulates the important actions of the libwww MIME header
227 // parser. Those actions fill in certain fields in the Connect object. jhrg
228 // 5/20/97
229 //
230 // Make sure that this parser reads from data_source without disturbing the
231 // information in data_source that follows the MIME header. Since the DDS
232 // (which follows the MIME header) is parsed by a flex/bison scanner/parser,
233 // make sure to use I/O calls that will mesh with ANSI C I/O calls. In the
234 // old GNU libg++, the C++ calls were synchronized with the C calls, but that
235 // may no longer be the case. 5/31/99 jhrg
236 
249 void Connect::parse_mime(Response *rs)
250 {
251  rs->set_version("dods/0.0"); // initial value; for backward compatibility.
252  rs->set_protocol("2.0");
253 
254  FILE *data_source = rs->get_stream();
255  string mime = get_next_mime_header(data_source);
256  while (!mime.empty()) {
257  string header, value;
258  parse_mime_header(mime, header, value);
259 
260  // Note that this is an ordered list
261  if (header == "content-description:") {
262  DBG(cout << header << ": " << value << endl);
263  rs->set_type(get_description_type(value));
264  }
265  // Use the value of xdods-server only if no other value has been read
266  else if (header == "xdods-server:" && rs->get_version() == "dods/0.0") {
267  DBG(cout << header << ": " << value << endl);
268  rs->set_version(value);
269  }
270  // This trumps 'xdods-server' and 'server'
271  else if (header == "xopendap-server:") {
272  DBG(cout << header << ": " << value << endl);
273  rs->set_version(value);
274  }
275  else if (header == "xdap:") {
276  DBG(cout << header << ": " << value << endl);
277  rs->set_protocol(value);
278  }
279  // Only look for 'server' if no other header supplies this info.
280  else if (rs->get_version() == "dods/0.0" && header == "server:") {
281  DBG(cout << header << ": " << value << endl);
282  rs->set_version(value);
283  }
284 
285  mime = get_next_mime_header(data_source);
286  }
287 }
288 
289 // public mfuncs
290 
298 Connect::Connect(const string &n, string uname, string password) :
299  d_http(0), d_version("unknown"), d_protocol("2.0")
300 {
301  string name = prune_spaces(n);
302 
303  // Figure out if the URL starts with 'http', if so, make sure that we
304  // talk to an instance of HTTPConnect.
305  if (name.find("http") == 0) {
306  DBG(cerr << "Connect: The identifier is an http URL" << endl);
307  d_http = new HTTPConnect(RCReader::instance());
308 
309  // Find and store any CE given with the URL.
310  string::size_type dotpos = name.find('?');
311  if (dotpos != name.npos) {
312  _URL = name.substr(0, dotpos);
313  string expr = name.substr(dotpos + 1);
314 
315  dotpos = expr.find('&');
316  if (dotpos != expr.npos) {
317  _proj = expr.substr(0, dotpos);
318  _sel = expr.substr(dotpos); // XXX includes '&'
319  }
320  else {
321  _proj = expr;
322  _sel = "";
323  }
324  }
325  else {
326  _URL = name;
327  _proj = "";
328  _sel = "";
329  }
330 
331  _local = false;
332  }
333  else {
334  DBG(cerr << "Connect: The identifier is a local data source." << endl);
335 
336  d_http = 0;
337  _URL = "";
338  _local = true; // local in this case means non-DAP
339  }
340 
341  set_credentials(uname, password);
342 }
343 
344 Connect::~Connect()
345 {
346  DBG2(cerr << "Entering the Connect dtor" << endl);
347 
348  if (d_http)
349  delete d_http;
350  d_http = 0;
351 
352  DBG2(cerr << "Leaving the Connect dtor" << endl);
353 }
354 
363 {
364  string version_url = _URL + ".ver";
365  if (_proj.length() + _sel.length())
366  version_url = version_url + "?" + id2www_ce(_proj + _sel);
367 
368  Response *rs = 0;
369  try {
370  rs = d_http->fetch_url(version_url);
371  }
372  catch (Error &e) {
373  delete rs;
374  rs = 0;
375  throw;
376  }
377 
378  d_version = rs->get_version();
379  d_protocol = rs->get_protocol();
380 
381  delete rs;
382  rs = 0;
383 
384  return d_version;
385 }
386 
399 {
400  string version_url = _URL + ".ver";
401  if (_proj.length() + _sel.length())
402  version_url = version_url + "?" + id2www_ce(_proj + _sel);
403 
404  Response *rs = 0;
405  try {
406  rs = d_http->fetch_url(version_url);
407  }
408  catch (Error &e) {
409  delete rs;
410  rs = 0;
411  throw;
412  }
413 
414  d_version = rs->get_version();
415  d_protocol = rs->get_protocol();
416 
417  delete rs;
418  rs = 0;
419 
420  return d_protocol;
421 }
422 
431 {
432  string das_url = _URL + ".das";
433  if (_proj.length() + _sel.length())
434  das_url = das_url + "?" + id2www_ce(_proj + _sel);
435 
436  Response *rs = 0;
437  try {
438  rs = d_http->fetch_url(das_url);
439  }
440  catch (Error &e) {
441  delete rs;
442  rs = 0;
443  throw;
444  }
445 
446  d_version = rs->get_version();
447  d_protocol = rs->get_protocol();
448 
449  switch (rs->get_type()) {
450  case dods_error: {
451  Error e;
452  if (!e.parse(rs->get_stream())) {
453  delete rs;
454  rs = 0;
455  throw InternalErr(__FILE__, __LINE__, "Could not parse error returned from server.");
456  }
457  delete rs;
458  rs = 0;
459  throw e;
460  }
461 
462  case web_error:
463  // We should never get here; a web error should be picked up read_url
464  // (called by fetch_url) and result in a thrown Error object.
465  break;
466 
467  case dods_das:
468  default:
469  // DAS::parse throws an exception on error.
470  try {
471  das.parse(rs->get_stream()); // read and parse the das from a file
472  }
473  catch (Error &e) {
474  delete rs;
475  rs = 0;
476  throw;
477  }
478 
479  break;
480  }
481 
482  delete rs;
483  rs = 0;
484 }
485 
497 {
498  string use_url = _URL + "?" + _proj + _sel;
499  Response *rs = 0;
500  try {
501  rs = d_http->fetch_url(use_url);
502  }
503  catch (Error &e) {
504  delete rs;
505  rs = 0;
506  throw;
507  }
508 
509  d_version = rs->get_version();
510  d_protocol = rs->get_protocol();
511 
512  switch (rs->get_type()) {
513  case dods_error: {
514  Error e;
515  if (!e.parse(rs->get_stream())) {
516  delete rs;
517  rs = 0;
518  throw InternalErr(__FILE__, __LINE__, "Could not parse error returned from server.");
519  }
520  delete rs;
521  rs = 0;
522  throw e;
523  }
524 
525  case web_error:
526  // We should never get here; a web error should be picked up read_url
527  // (called by fetch_url) and result in a thrown Error object.
528  break;
529 
530  case dods_das:
531  default:
532  // DAS::parse throws an exception on error.
533  try {
534  das.parse(rs->get_stream()); // read and parse the das from a file
535  }
536  catch (Error &e) {
537  delete rs;
538  rs = 0;
539  throw;
540  }
541 
542  break;
543  }
544 
545  delete rs;
546  rs = 0;
547 }
548 
562 void Connect::request_dds(DDS &dds, string expr)
563 {
564  string proj, sel;
565  string::size_type dotpos = expr.find('&');
566  if (dotpos != expr.npos) {
567  proj = expr.substr(0, dotpos);
568  sel = expr.substr(dotpos);
569  }
570  else {
571  proj = expr;
572  sel = "";
573  }
574 
575  string dds_url = _URL + ".dds" + "?" + id2www_ce(_proj + proj + _sel + sel);
576 
577  Response *rs = 0;
578  try {
579  rs = d_http->fetch_url(dds_url);
580  }
581  catch (Error &e) {
582  delete rs;
583  rs = 0;
584  throw;
585  }
586 
587  d_version = rs->get_version();
588  d_protocol = rs->get_protocol();
589 
590  switch (rs->get_type()) {
591  case dods_error: {
592  Error e;
593  if (!e.parse(rs->get_stream())) {
594  delete rs;
595  rs = 0;
596  throw InternalErr(__FILE__, __LINE__, "Could not parse error returned from server.");
597  }
598  delete rs;
599  rs = 0;
600  throw e;
601  }
602 
603  case web_error:
604  // We should never get here; a web error should be picked up read_url
605  // (called by fetch_url) and result in a thrown Error object.
606  break;
607 
608  case dods_dds:
609  default:
610  // DDS::prase throws an exception on error.
611  try {
612  dds.parse(rs->get_stream()); // read and parse the dds from a file
613  }
614  catch (Error &e) {
615  delete rs;
616  rs = 0;
617  throw;
618  }
619  break;
620  }
621 
622  delete rs;
623  rs = 0;
624 }
625 
643 {
644  string use_url = _URL + "?" + _proj + _sel;
645  Response *rs = 0;
646  try {
647  rs = d_http->fetch_url(use_url);
648  }
649  catch (Error &e) {
650  delete rs;
651  rs = 0;
652  throw;
653  }
654 
655  d_version = rs->get_version();
656  d_protocol = rs->get_protocol();
657 
658  switch (rs->get_type()) {
659  case dods_error: {
660  Error e;
661  if (!e.parse(rs->get_stream())) {
662  delete rs;
663  rs = 0;
664  throw InternalErr(__FILE__, __LINE__, "Could not parse error returned from server.");
665  }
666  delete rs;
667  rs = 0;
668  throw e;
669  }
670 
671  case web_error:
672  // We should never get here; a web error should be picked up read_url
673  // (called by fetch_url) and result in a thrown Error object.
674  break;
675 
676  case dods_dds:
677  default:
678  // DDS::prase throws an exception on error.
679  try {
680  dds.parse(rs->get_stream()); // read and parse the dds from a file
681  }
682  catch (Error &e) {
683  delete rs;
684  rs = 0;
685  throw;
686  }
687  break;
688  }
689 
690  delete rs;
691  rs = 0;
692 }
693 
705 void Connect::request_ddx(DDS &dds, string expr)
706 {
707  string proj, sel;
708  string::size_type dotpos = expr.find('&');
709  if (dotpos != expr.npos) {
710  proj = expr.substr(0, dotpos);
711  sel = expr.substr(dotpos);
712  }
713  else {
714  proj = expr;
715  sel = "";
716  }
717 
718  string ddx_url = _URL + ".ddx" + "?" + id2www_ce(_proj + proj + _sel + sel);
719 
720  Response *rs = 0;
721  try {
722  rs = d_http->fetch_url(ddx_url);
723  }
724  catch (Error &e) {
725  delete rs;
726  throw;
727  }
728 
729  d_version = rs->get_version();
730  d_protocol = rs->get_protocol();
731 
732  switch (rs->get_type()) {
733  case dods_error: {
734  Error e;
735  if (!e.parse(rs->get_stream())) {
736  delete rs;
737  rs = 0;
738  throw InternalErr(__FILE__, __LINE__, "Could not parse error returned from server.");
739  }
740  delete rs;
741  throw e;
742  }
743 
744  case web_error:
745  // We should never get here; a web error should be picked up read_url
746  // (called by fetch_url) and result in a thrown Error object.
747  break;
748 
749  case dods_ddx:
750  try {
751  string blob;
752 
753  DDXParser ddxp(dds.get_factory());
754  ddxp.intern_stream(rs->get_stream(), &dds, blob);
755  }
756  catch (Error &e) {
757  delete rs;
758  throw;
759  }
760  break;
761 
762  default:
763  ObjectType ot = rs->get_type();
764  delete rs;
765  throw Error("Invalid response type when requesting a DDX response. Response type: " + long_to_string(ot));
766  }
767 
768  delete rs;
769 }
770 
774 {
775  string use_url = _URL + "?" + _proj + _sel;
776 
777  Response *rs = 0;
778  try {
779  rs = d_http->fetch_url(use_url);
780  }
781  catch (Error &e) {
782  delete rs;
783  throw;
784  }
785 
786  d_version = rs->get_version();
787  d_protocol = rs->get_protocol();
788 
789  switch (rs->get_type()) {
790  case dods_error: {
791  Error e;
792  if (!e.parse(rs->get_stream())) {
793  delete rs;
794  throw InternalErr(__FILE__, __LINE__, "Could not parse error returned from server.");
795  }
796  delete rs;
797  throw e;
798  }
799 
800  case web_error:
801  // We should never get here; a web error should be picked up read_url
802  // (called by fetch_url) and result in a thrown Error object.
803  delete rs;
804  throw InternalErr(__FILE__, __LINE__, "Web error.");
805 
806  case dods_ddx:
807  try {
808  string blob;
809 
810  DDXParser ddxp(dds.get_factory());
811  ddxp.intern_stream(rs->get_stream(), &dds, blob);
812  }
813  catch (Error &e) {
814  delete rs;
815  throw;
816  }
817  break;
818 
819  default: {
820  ObjectType ot = rs->get_type();
821  delete rs;
822 
823  throw Error("Invalid response type when requesting a DDX response. Response type: " + long_to_string(ot));
824  }
825  }
826 
827  delete rs;
828 }
829 
845 void Connect::request_data(DataDDS &data, string expr)
846 {
847  string proj, sel;
848  string::size_type dotpos = expr.find('&');
849  if (dotpos != expr.npos) {
850  proj = expr.substr(0, dotpos);
851  sel = expr.substr(dotpos);
852  }
853  else {
854  proj = expr;
855  sel = "";
856  }
857 
858  string data_url = _URL + ".dods?" + id2www_ce(_proj + proj + _sel + sel);
859 
860  Response *rs = 0;
861  // We need to catch Error exceptions to ensure calling close_output.
862  try {
863  rs = d_http->fetch_url(data_url);
864 
865  d_version = rs->get_version();
866  d_protocol = rs->get_protocol();
867 
868  process_data(data, rs);
869  delete rs;
870  rs = 0;
871  }
872  catch (Error &e) {
873  delete rs;
874  rs = 0;
875  throw;
876  }
877 }
878 
897 {
898  string use_url = _URL + "?" + _proj + _sel;
899  Response *rs = 0;
900  // We need to catch Error exceptions to ensure calling close_output.
901  try {
902  rs = d_http->fetch_url(use_url);
903 
904  d_version = rs->get_version();
905  d_protocol = rs->get_protocol();
906 
907  process_data(data, rs);
908  delete rs;
909  rs = 0;
910  }
911  catch (Error &e) {
912  delete rs;
913  rs = 0;
914  throw;
915  }
916 }
917 
918 // FIXME Unused?
919 void Connect::request_data_ddx(DataDDS &data, string expr)
920 {
921  string proj, sel;
922  string::size_type dotpos = expr.find('&');
923  if (dotpos != expr.npos) {
924  proj = expr.substr(0, dotpos);
925  sel = expr.substr(dotpos);
926  }
927  else {
928  proj = expr;
929  sel = "";
930  }
931 
932  string data_url = _URL + ".dap?" + id2www_ce(_proj + proj + _sel + sel);
933 
934  Response *rs = 0;
935  // We need to catch Error exceptions to ensure calling close_output.
936  try {
937  rs = d_http->fetch_url(data_url);
938 
939  d_version = rs->get_version();
940  d_protocol = rs->get_protocol();
941 
942  process_data(data, rs);
943  delete rs;
944  rs = 0;
945  }
946  catch (Error &e) {
947  delete rs;
948  rs = 0;
949  throw;
950  }
951 }
952 
953 // FIXME Unused?
954 void Connect::request_data_ddx_url(DataDDS &data)
955 {
956  string use_url = _URL + "?" + _proj + _sel;
957  Response *rs = 0;
958  // We need to catch Error exceptions to ensure calling close_output.
959  try {
960  rs = d_http->fetch_url(use_url);
961 
962  d_version = rs->get_version();
963  d_protocol = rs->get_protocol();
964 
965  process_data(data, rs);
966  delete rs;
967  rs = 0;
968  }
969  catch (Error &e) {
970  delete rs;
971  rs = 0;
972  throw;
973  }
974 }
975 
990 {
991  if (!rs)
992  throw InternalErr(__FILE__, __LINE__, "Response object is null.");
993 
994  // Read from data_source and parse the MIME headers specific to DAP2/4.
995  parse_mime(rs);
996 
997  read_data_no_mime(data, rs);
998 }
999 void
1000 Connect::read_data(DDS &data, Response *rs)
1001 {
1002  if (!rs)
1003  throw InternalErr(__FILE__, __LINE__, "Response object is null.");
1004 
1005  // Read from data_source and parse the MIME headers specific to DAP2/4.
1006  parse_mime(rs);
1007 
1008  read_data_no_mime(data, rs);
1009 }
1010 
1011 // This function looks at the input stream and makes its best guess at what
1012 // lies in store for downstream processing code. Definitely heuristic.
1013 // Assumptions:
1014 // #1 The current file position is past any MIME headers (if they were present).
1015 // #2 We must reset the FILE* position to the start of the DDS or DDX headers
1016 static void divine_type_information(Response *rs)
1017 {
1018  // Consume whitespace
1019  int c = getc(rs->get_stream());
1020  while (!feof(rs->get_stream()) && !ferror(rs->get_stream()) && isspace(c)) {
1021  c = getc(rs->get_stream());
1022  }
1023 
1024 
1025  if (ferror(rs->get_stream()))
1026  throw Error("Error reading response type information: " + string(strerror(errno)));
1027  if (feof(rs->get_stream()))
1028  throw Error("Error reading response type information: Found EOF");
1029 
1030  // The heuristic here is that a DataDDX is a multipart MIME document and
1031  // The first non space character found after the headers is the start of
1032  // the first part which looks like '--<boundary>' while a DataDDS starts
1033  // with a DDS (;Dataset {' ...). I take into account that our parsers have
1034  // accepted both 'Dataset' and 'dataset' for a long time.
1035  switch (c) {
1036  case '-':
1037  rs->set_type(dods_data_ddx);
1038  break;
1039  case 'D':
1040  case 'd':
1041  rs->set_type(dods_data);
1042  break;
1043  default:
1044  throw InternalErr(__FILE__, __LINE__, "Could not determine type of response object in stream.");
1045  }
1046 
1047  ungetc(c, rs->get_stream());
1048 }
1049 
1063 {
1064  if (rs->get_type() == unknown_type)
1065  divine_type_information(rs);
1066 
1067  switch (rs->get_type()) {
1068  case dods_data:
1069  d_version = rs->get_version();
1070  d_protocol = rs->get_protocol();
1071  process_data(data, rs);
1072  break;
1073  case dods_data_ddx:
1074  process_data(data, rs);
1075  d_version = rs->get_version();
1076  d_protocol = data.get_protocol();
1077  break;
1078  default:
1079  throw InternalErr(__FILE__, __LINE__, "Should have been a DataDDS or DataDDX.");
1080  }
1081 }
1082 void Connect::read_data_no_mime(DDS &data, Response *rs)
1083 {
1084  if (rs->get_type() == unknown_type)
1085  divine_type_information(rs);
1086 
1087  switch (rs->get_type()) {
1088  case dods_data:
1089  d_version = rs->get_version();
1090  d_protocol = rs->get_protocol();
1091  process_data(data, rs);
1092  break;
1093  case dods_data_ddx:
1094  process_data(data, rs);
1095  d_version = rs->get_version();
1096  // TODO should check to see if this hack is a correct replacement
1097  // for get_protocol from DataDDS
1098  d_protocol = data.get_dap_version();
1099  break;
1100  default:
1101  throw InternalErr(__FILE__, __LINE__, "Should have been a DataDDS or DataDDX.");
1102  }
1103 }
1104 
1105 bool
1106 Connect::is_local()
1107 {
1108  return _local;
1109 }
1110 
1127 string Connect::URL(bool ce)
1128 {
1129  if (_local)
1130  throw InternalErr(__FILE__, __LINE__, "URL(): This call is only valid for a DAP data source.");
1131 
1132  if (ce)
1133  return _URL + "?" + _proj + _sel;
1134  else
1135  return _URL;
1136 }
1137 
1146 string Connect::CE()
1147 {
1148  if (_local)
1149  throw InternalErr(__FILE__, __LINE__, "CE(): This call is only valid for a DAP data source.");
1150 
1151  return _proj + _sel;
1152 }
1153 
1159 void Connect::set_credentials(string u, string p)
1160 {
1161  if (d_http)
1162  d_http->set_credentials(u, p);
1163 }
1164 
1169 {
1170  if (d_http)
1171  d_http->set_accept_deflate(deflate);
1172 }
1173 
1179 void Connect::set_xdap_protocol(int major, int minor)
1180 {
1181  if (d_http)
1182  d_http->set_xdap_protocol(major, minor);
1183 }
1184 
1189 {
1190  if (d_http)
1191  d_http->set_cache_enabled(cache);
1192 }
1193 
1194 bool Connect::is_cache_enabled()
1195 {
1196  bool status;
1197  DBG(cerr << "Entering is_cache_enabled (" << hex << d_http << dec
1198  << ")... ");
1199  if (d_http)
1200  status = d_http->is_cache_enabled();
1201  else
1202  status = false;
1203  DBGN(cerr << "exiting" << endl);
1204  return status;
1205 }
1206 
1207 } // namespace libdap
virtual string CE()
Get the Connect&#39;s constraint expression.
Definition: Connect.cc:1146
-
virtual void request_das_url(DAS &das)
Get the DAS from a server.
Definition: Connect.cc:496
- -
string get_next_mime_header(FILE *in)
Definition: mime_util.cc:838
- -
void intern_stream(FILE *in, DDS *dds, string &cid, const string &boundary="")
Read the DDX from a stream instead of a file.
-
virtual void request_ddx(DDS &dds, string expr="")
Get the DDX from a server.
Definition: Connect.cc:705
- -
virtual string URL(bool CE=true)
Get the object&#39;s URL.
Definition: Connect.cc:1127
-
string id2www_ce(string in, const string &allowable)
Definition: escaping.cc:178
-
string prune_spaces(const string &name)
Definition: util.cc:459
-
void set_credentials(const string &u, const string &p)
-
void set_xdap_protocol(int major, int minor)
Definition: Connect.cc:1179
-
void read_multipart_headers(FILE *in, const string &content_type, const ObjectType object_type, const string &cid)
Definition: mime_util.cc:1005
-
virtual void request_dds_url(DDS &dds)
Get the DDS from a server.
Definition: Connect.cc:642
-
bool parse(FILE *fp)
Parse an Error object.
Definition: Error.cc:158
-
void set_cache_enabled(bool enabled)
Definition: HTTPConnect.h:151
-
string read_multipart_boundary(FILE *in, const string &boundary)
Definition: mime_util.cc:959
-
ObjectType
The type of object in the stream coming from the data server.
Definition: ObjectType.h:58
-
HTTPResponse * fetch_url(const string &url)
Definition: HTTPConnect.cc:627
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
void parse(string fname)
Parse a DDS from a file with the given d_name.
Definition: DDS.cc:942
-
void parse_mime_header(const string &header, string &name, string &value)
Definition: mime_util.cc:912
-
virtual void read_data(DataDDS &data, Response *rs)
Read data which is preceded by MIME headers. This method works for both data dds and data ddx respons...
Definition: Connect.cc:989
-
ObjectType get_description_type(const string &value)
Definition: mime_util.cc:339
- -
void set_cache_enabled(bool enabled)
Definition: Connect.cc:1188
-
virtual void request_dds(DDS &dds, string expr="")
Get the DDS from a server.
Definition: Connect.cc:562
-
void set_accept_deflate(bool deflate)
Definition: Connect.cc:1168
- -
virtual void request_data(DataDDS &data, string expr="")
Get the DAS from a server.
Definition: Connect.cc:845
-
virtual void read_data_no_mime(DataDDS &data, Response *rs)
Read data from a file which does not have response MIME headers. This method is a companion to read_d...
Definition: Connect.cc:1062
-
string cid_to_header_value(const string &cid)
Definition: mime_util.cc:1077
-
virtual void request_das(DAS &das)
Get the DAS from a server.
Definition: Connect.cc:430
-
void set_accept_deflate(bool defalte)
-
void set_xdap_protocol(int major, int minor)
-
virtual void parse(string fname)
Reads a DAS from the named file.
Definition: DAS.cc:232
-
virtual string request_version()
Definition: Connect.cc:362
-
void set_credentials(string u, string p)
Set the credentials for responding to challenges while dereferencing URLs.
Definition: Connect.cc:1159
-
virtual string request_protocol()
Definition: Connect.cc:398
-
Hold attribute data for a DAP2 dataset.
Definition: DAS.h:121
-
virtual void request_data_url(DataDDS &data)
Get the DAS from a server.
Definition: Connect.cc:896
-
A class for error processing.
Definition: Error.h:92
-
BaseTypeFactory * get_factory() const
Definition: DDS.h:242
-
Holds a DAP2 DDS.
Definition: DataDDS.h:77
-
virtual void request_ddx_url(DDS &dds)
The &#39;url&#39; version of request_ddx.
Definition: Connect.cc:773
-
-
- - - - diff --git a/html/Connect_8h_source.html b/html/Connect_8h_source.html deleted file mode 100644 index 662388c01..000000000 --- a/html/Connect_8h_source.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - -libdap: Connect.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Connect.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 // Dan Holloway <dan@hollywood.gso.uri.edu>
10 // Reza Nekovei <reza@intcomm.net>
11 //
12 // This library is free software; you can redistribute it and/or
13 // modify it under the terms of the GNU Lesser General Public
14 // License as published by the Free Software Foundation; either
15 // version 2.1 of the License, or (at your option) any later version.
16 //
17 // This library is distributed in the hope that it will be useful,
18 // but WITHOUT ANY WARRANTY; without even the implied warranty of
19 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 // Lesser General Public License for more details.
21 //
22 // You should have received a copy of the GNU Lesser General Public
23 // License along with this library; if not, write to the Free Software
24 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
25 //
26 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
27 
28 // (c) COPYRIGHT URI/MIT 1994-1999,2001,2002
29 // Please first read the full copyright statement in the file COPYRIGHT_URI.
30 //
31 // Authors:
32 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
33 // dan Dan Holloway <dholloway@gso.uri.edu>
34 // reza Reza Nekovei <rnekovei@ieee.org>
35 
36 // Connect objects are used as containers for information pertaining to a
37 // connection that a user program makes to a dataset. The dataset may be
38 // either local (i.e., a file on the user's own computer) or a remote
39 // dataset. In the later case a DAP2 URL will be used to reference the
40 // dataset.
41 //
42 // Connect contains methods which can be used to read the DOS DAS and DDS
43 // objects from the remote dataset as well as reading reading data. The class
44 // understands in a rudimentary way how DAP2 constraint expressions are
45 // formed and how to manage the CEs generated by a API to request specific
46 // variables with the URL initially presented to the class when the object
47 // was instantiated.
48 //
49 // Connect also provides additional services such as error processing.
50 //
51 // Connect is not intended for use on the server-side.
52 //
53 // jhrg 9/29/94
54 
55 #ifndef _connect_h
56 #define _connect_h
57 
58 
59 #include <string>
60 
61 #ifndef _das_h
62 #include "DAS.h"
63 #endif
64 
65 #ifndef _dds_h
66 #include "DDS.h"
67 #endif
68 
69 #ifndef _error_h
70 #include "Error.h"
71 #endif
72 
73 #ifndef _util_h
74 #include "util.h"
75 #endif
76 
77 #ifndef _datadds_h
78 #include "DataDDS.h"
79 #endif
80 
81 #ifndef _httpconnect_h
82 #include "HTTPConnect.h"
83 #endif
84 
85 #ifndef response_h
86 #include "Response.h"
87 #endif
88 
89 using std::string;
90 
91 namespace libdap
92 {
93 
129 class Connect
130 {
131 private:
132  bool _local; // Is this a local connection?
133 
134  HTTPConnect *d_http;
135  string _URL; // URL to remote dataset (minus CE)
136  string _proj; // Projection part of initial CE.
137  string _sel; // Selection of initial CE
138 
139  string d_version; // Server implementation information
140  string d_protocol; // DAP protocol from the server
141 
142  void process_data(DataDDS &data, Response *rs);
143  void process_data(DDS &data, Response *rs);
144 
145  // Use when you cannot use libwww/libcurl. Reads HTTP response.
146  void parse_mime(Response *rs);
147 
148 protected:
151  Connect();
152  Connect(const Connect &);
153  Connect &operator=(const Connect &);
155 
156 public:
157  Connect(const string &name, string uname = "", string password = "");
158 
159  virtual ~Connect();
160 
161  bool is_local();
162 
163  // *** Add get_* versions of accessors. 02/27/03 jhrg
164  virtual string URL(bool CE = true);
165  virtual string CE();
166 
167  void set_credentials(string u, string p);
168  void set_accept_deflate(bool deflate);
169  void set_xdap_protocol(int major, int minor);
170 
171  void set_cache_enabled(bool enabled);
172  bool is_cache_enabled();
173 
174  void set_xdap_accept(int major, int minor);
175 
185  string get_version()
186  {
187  return d_version;
188  }
189 
193  string get_protocol()
194  {
195  return d_protocol;
196  }
197 
198  virtual string request_version();
199  virtual string request_protocol();
200 
201  virtual void request_das(DAS &das);
202  virtual void request_das_url(DAS &das);
203 
204  virtual void request_dds(DDS &dds, string expr = "");
205  virtual void request_dds_url(DDS &dds);
206 
207  virtual void request_ddx(DDS &dds, string expr = "");
208  virtual void request_ddx_url(DDS &dds);
209 
210  virtual void request_data(DataDDS &data, string expr = "");
211  virtual void request_data_url(DataDDS &data);
212 
213  virtual void request_data_ddx(DataDDS &data, string expr = "");
214  virtual void request_data_ddx_url(DataDDS &data);
215 
216  virtual void read_data(DataDDS &data, Response *rs);
217  virtual void read_data_no_mime(DataDDS &data, Response *rs);
218  virtual void read_data(DDS &data, Response *rs);
219  virtual void read_data_no_mime(DDS &data, Response *rs);
220 };
221 
222 } // namespace libdap
223 
224 #endif // _connect_h
virtual string CE()
Get the Connect&#39;s constraint expression.
Definition: Connect.cc:1146
-
virtual void request_das_url(DAS &das)
Get the DAS from a server.
Definition: Connect.cc:496
- -
virtual void request_ddx(DDS &dds, string expr="")
Get the DDX from a server.
Definition: Connect.cc:705
-
virtual string URL(bool CE=true)
Get the object&#39;s URL.
Definition: Connect.cc:1127
-
void set_xdap_protocol(int major, int minor)
Definition: Connect.cc:1179
-
virtual void request_dds_url(DDS &dds)
Get the DDS from a server.
Definition: Connect.cc:642
-
Holds information about the link from a DAP2 client to a dataset.
Definition: Connect.h:129
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual void read_data(DataDDS &data, Response *rs)
Read data which is preceded by MIME headers. This method works for both data dds and data ddx respons...
Definition: Connect.cc:989
- -
void set_cache_enabled(bool enabled)
Definition: Connect.cc:1188
-
virtual void request_dds(DDS &dds, string expr="")
Get the DDS from a server.
Definition: Connect.cc:562
-
void set_accept_deflate(bool deflate)
Definition: Connect.cc:1168
- -
virtual void request_data(DataDDS &data, string expr="")
Get the DAS from a server.
Definition: Connect.cc:845
-
string get_protocol()
Definition: Connect.h:193
-
virtual void read_data_no_mime(DataDDS &data, Response *rs)
Read data from a file which does not have response MIME headers. This method is a companion to read_d...
Definition: Connect.cc:1062
-
virtual void request_das(DAS &das)
Get the DAS from a server.
Definition: Connect.cc:430
-
virtual string request_version()
Definition: Connect.cc:362
-
void set_credentials(string u, string p)
Set the credentials for responding to challenges while dereferencing URLs.
Definition: Connect.cc:1159
-
virtual string request_protocol()
Definition: Connect.cc:398
-
Hold attribute data for a DAP2 dataset.
Definition: DAS.h:121
-
virtual void request_data_url(DataDDS &data)
Get the DAS from a server.
Definition: Connect.cc:896
-
Holds a DAP2 DDS.
Definition: DataDDS.h:77
-
string get_version()
Definition: Connect.h:185
-
virtual void request_ddx_url(DDS &dds)
The &#39;url&#39; version of request_ddx.
Definition: Connect.cc:773
-
-
- - - - diff --git a/html/ConstraintEvaluator_8cc_source.html b/html/ConstraintEvaluator_8cc_source.html deleted file mode 100644 index 15d29ed18..000000000 --- a/html/ConstraintEvaluator_8cc_source.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - -libdap: ConstraintEvaluator.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
ConstraintEvaluator.cc
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2002,2003 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 #include "config.h"
26 
27 //#define DODS_DEBUG
28 
29 #include "ServerFunctionsList.h"
30 #include "ConstraintEvaluator.h"
31 #include "Clause.h"
32 #include "DataDDS.h"
33 
34 #include "ce_parser.h"
35 #include "debug.h"
36 #include "parser.h"
37 #include "expr.h"
38 
39 struct yy_buffer_state;
40 
41 int ce_exprparse(libdap::ce_parser_arg *arg);
42 
43 // Glue routines declared in expr.lex
44 void ce_expr_switch_to_buffer(void *new_buffer);
45 void ce_expr_delete_buffer(void * buffer);
46 void *ce_expr_string(const char *yy_str);
47 
48 namespace libdap {
49 
50 ConstraintEvaluator::ConstraintEvaluator()
51 {
52  // Functions are now held in BES modules. jhrg 1/30/13
53 
54  // modules load functions to this list; this class searches the list
55  // instead of having it's own copy. This is very similar to the BES'
56  // various List classes, but this one is part of libdap and not the
57  // BES. The List class is a singleton, so each function module can
58  // register it's functions to the list object.
59  d_functions_list = ServerFunctionsList::TheList();
60 }
61 
62 ConstraintEvaluator::~ConstraintEvaluator()
63 {
64  // delete all the constants created by the parser for CE evaluation
65  for (Constants_iter j = constants.begin(); j != constants.end(); j++) {
66  BaseType *btp = *j;
67  delete btp;
68  btp = 0;
69  }
70 
71  for (Clause_iter k = expr.begin(); k != expr.end(); k++) {
72  Clause *cp = *k;
73  delete cp;
74  cp = 0;
75  }
76 }
77 
79 ConstraintEvaluator::Clause_iter ConstraintEvaluator::clause_begin()
80 {
81  return expr.begin();
82 }
83 
86 ConstraintEvaluator::Clause_iter ConstraintEvaluator::clause_end()
87 {
88  return expr.end();
89 }
90 
93 bool ConstraintEvaluator::clause_value(Clause_iter &iter, DDS &dds/*, const string &***/)
94 {
95  if (expr.empty())
96  throw InternalErr(__FILE__, __LINE__, "There are no CE clauses for *this* DDS object.");
97 
98  return (*iter)->value(dds);
99 }
100 
113 void ConstraintEvaluator::append_clause(int op, rvalue *arg1, rvalue_list *arg2)
114 {
115  Clause *clause = new Clause(op, arg1, arg2);
116 
117  expr.push_back(clause);
118 }
119 
129 void ConstraintEvaluator::append_clause(bool_func func, rvalue_list *args)
130 {
131  Clause *clause = new Clause(func, args);
132 
133  expr.push_back(clause);
134 }
135 
145 void ConstraintEvaluator::append_clause(btp_func func, rvalue_list *args)
146 {
147  Clause *clause = new Clause(func, args);
148 
149  expr.push_back(clause);
150 }
151 
160 {
161  constants.push_back(btp);
162 }
163 
165 bool ConstraintEvaluator::find_function(const string &name, bool_func *f) const
166 {
167  return d_functions_list->find_function(name, f);
168 }
169 
171 bool ConstraintEvaluator::find_function(const string &name, btp_func *f) const
172 {
173  return d_functions_list->find_function(name, f);
174 }
175 
177 bool ConstraintEvaluator::find_function(const string &name, proj_func *f) const
178 {
179  return d_functions_list->find_function(name, f);
180 }
182 
192 {
193  if (expr.empty())
194  return false;
195 
196  Clause *cp = expr[0];
197  return cp->value_clause();
198 }
199 
203 BaseType *
205 {
206  if (expr.size() != 1)
207  throw InternalErr(__FILE__, __LINE__, "The length of the list of CE clauses is not 1.");
208 
209  Clause *cp = expr[0];
210  BaseType *result;
211  if (cp->value(dds, &result))
212  return result;
213  else
214  return NULL;
215 }
216 
227 {
228  if (expr.empty())
229  return false;
230 
231  for (unsigned int i = 0; i < expr.size(); ++i) {
232  Clause *cp = expr[i];
233  if (!cp->value_clause())
234  return false;
235  }
236 
237  return true;
238 }
239 
255 DDS *
257 {
258  if (expr.empty())
259  throw InternalErr(__FILE__, __LINE__, "The constraint expression is empty.");
260 
261  DDS *fdds = new DDS(dds.get_factory(), "function_result_" + dds.get_dataset_name());
262  for (unsigned int i = 0; i < expr.size(); ++i) {
263  Clause *cp = expr[i];
264  BaseType *result;
265  if (cp->value(dds, &result)) {
266  // This is correct: The function must allocate the memory for the result
267  // variable. 11/30/12 jhrg
268  fdds->add_var_nocopy(result);
269  }
270  else {
271  delete fdds;
272  throw Error(internal_error, "A function was called but failed to return a value.");
273  }
274  }
275 
276  return fdds;
277 }
278 
284 DataDDS *
286 {
287  if (expr.empty())
288  throw InternalErr(__FILE__, __LINE__, "The constraint expression is empty.");
289 
290  DataDDS *fdds = new DataDDS(dds.get_factory(), "function_result_" + dds.get_dataset_name(), dds.get_version(),
291  dds.get_protocol());
292 
293  for (unsigned int i = 0; i < expr.size(); ++i) {
294  Clause *cp = expr[i];
295  BaseType *result;
296  if (cp->value(dds, &result)) {
297  fdds->add_var_nocopy(result);
298  }
299  else {
300  delete fdds;
301  throw Error(internal_error, "A function was called but failed to return a value.");
302  }
303  }
304 
305  return fdds;
306 }
307 
310 {
311  if (expr.empty())
312  return false;
313 
314  bool boolean = true;
315  for (Clause_iter i = expr.begin(); i != expr.end(); i++) {
316  boolean = boolean && (*i)->boolean_clause();
317  }
318 
319  return boolean;
320 }
321 
329 bool ConstraintEvaluator::eval_selection(DDS &dds, const string &)
330 {
331  if (expr.empty()) {
332  DBG(cerr << "No selection recorded" << endl);
333  return true;
334  }
335 
336  DBG(cerr << "Eval selection" << endl);
337 
338  // A CE is made up of zero or more clauses, each of which has a boolean
339  // value. The value of the CE is the logical AND of the clause
340  // values. See ConstraintEvaluator::clause::value(...) for information on logical ORs in
341  // CEs.
342  bool result = true;
343  for (Clause_iter i = expr.begin(); i != expr.end() && result; i++) {
344  // A selection expression *must* contain only boolean clauses!
345  if (!((*i)->boolean_clause()))
346  throw InternalErr(__FILE__, __LINE__, "A selection expression must contain only boolean clauses.");
347  result = result && (*i)->value(dds);
348  }
349 
350  return result;
351 }
352 
363 void ConstraintEvaluator::parse_constraint(const string &constraint, DDS &dds)
364 {
365  void *buffer = ce_expr_string(constraint.c_str());
366 
367  ce_expr_switch_to_buffer(buffer);
368 
369  ce_parser_arg arg(this, &dds);
370 
371  // For all errors, exprparse will throw Error.
372  try {
373  ce_exprparse(&arg);
374  ce_expr_delete_buffer(buffer);
375  }
376  catch (...) {
377  // Make sure to remove the buffer when there's an error
378  ce_expr_delete_buffer(buffer);
379  throw;
380  }
381 }
382 
383 } // namespace libdap
bool boolean_expression()
Does the current constraint expression return a boolean value?
- -
bool find_function(const std::string &name, bool_func *f) const
Find a Boolean function with a given name in the function list.
-
virtual bool find_function(const std::string &name, bool_func *f) const
Find a boolean function with a given name in the function list.
- -
void add_var_nocopy(BaseType *bt)
Adds the variable to the DDS.
Definition: DDS.cc:613
-
string get_dataset_name() const
Definition: DDS.cc:356
-
BaseType * eval_function(DDS &dds, const std::string &dataset)
Evaluate a function-valued constraint expression.
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
bool value(DDS &dds)
Evaluate a clause which returns a boolean value This method must only be evaluated for clauses with r...
Definition: Clause.cc:156
-
DDS * eval_function_clauses(DDS &dds)
Evaluate a function-valued constraint expression that contains several function calls.
- - -
void parse_constraint(const std::string &constraint, DDS &dds)
Parse the constraint expression given the current DDS.
-
bool functional_expression()
Does the current constraint expression return a BaseType pointer? This method does not evaluate the c...
- -
string get_version() const
Get the server version string, unparsed.
Definition: DataDDS.h:109
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
void append_constant(BaseType *btp)
-
bool clause_value(Clause_iter &i, DDS &dds)
-
bool eval_selection(DDS &dds, const std::string &dataset)
Evaluate a boolean-valued constraint expression. This is main method for the evaluator and is called ...
-
Holds a fragment of a constraint expression.
Definition: Clause.h:90
-
bool function_clauses()
Does the current constraint expression contain function clauses.
-
A class for error processing.
Definition: Error.h:92
-
BaseTypeFactory * get_factory() const
Definition: DDS.h:242
-
bool value_clause()
Return true if the clause returns a value in a BaseType pointer.
Definition: Clause.cc:138
-
Holds a DAP2 DDS.
Definition: DataDDS.h:77
-
void append_clause(int op, rvalue *arg1, rvalue_list *arg2)
Add a clause to a constraint expression.
-
-
- - - - diff --git a/html/ConstraintEvaluator_8h_source.html b/html/ConstraintEvaluator_8h_source.html deleted file mode 100644 index df6e1ab79..000000000 --- a/html/ConstraintEvaluator_8h_source.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - -libdap: ConstraintEvaluator.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
ConstraintEvaluator.h
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2006 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 #ifndef constraint_evaluator_h
26 #define constraint_evaluator_h
27 
28 #include <vector>
29 
30 #include "expr.h"
31 #include "RValue.h"
32 
33 namespace libdap
34 {
35 
36 class DDS;
37 class DataDDS;
38 struct Clause;
39 class ServerFunctionsList;
40 
43 {
44 private:
45  std::vector<Clause *> expr; // List of CE Clauses
46 
47  std::vector<BaseType *> constants;// List of temporary objects
48 
49  ServerFunctionsList *d_functions_list; // Known external functions from
50  // modules
51 
52  // The default versions of these methods will break this class. Because
53  // Clause does not support deep copies, that class will need to be modified
54  // before these can be properly implemented. jhrg 4/3/06
56  ConstraintEvaluator &operator=(const ConstraintEvaluator &);
57 
58  friend class func_name_is;
59 
60 public:
61  typedef std::vector<Clause *>::const_iterator Clause_citer ;
62  typedef std::vector<Clause *>::iterator Clause_iter ;
63 
64  typedef std::vector<BaseType *>::const_iterator Constants_citer ;
65  typedef std::vector<BaseType *>::iterator Constants_iter ;
66 
68 
69  virtual ~ConstraintEvaluator();
70  bool find_function(const std::string &name, bool_func *f) const;
71  bool find_function(const std::string &name, btp_func *f) const;
72  bool find_function(const std::string &name, proj_func *f) const;
73 
74  void append_clause(int op, rvalue *arg1, rvalue_list *arg2);
75  void append_clause(bool_func func, rvalue_list *args);
76  void append_clause(btp_func func, rvalue_list *args);
77 
78  bool functional_expression();
79  bool boolean_expression();
80  bool eval_selection(DDS &dds, const std::string &dataset);
81  BaseType *eval_function(DDS &dds, const std::string &dataset);
82 
83  // New for libdap 3.11. These methods provide a way to evaluate multiple
84  // functions in one CE
85  bool function_clauses();
88 
89  Clause_iter clause_begin();
90  Clause_iter clause_end();
91  bool clause_value(Clause_iter &i, DDS &dds);
92 
93  void parse_constraint(const std::string &constraint, DDS &dds);
94  void append_constant(BaseType *btp);
95 
96 };
97 
98 } // namespace libdap
99 
100 #endif // constraint_evaluator_h
bool boolean_expression()
Does the current constraint expression return a boolean value?
- -
bool find_function(const std::string &name, bool_func *f) const
Find a Boolean function with a given name in the function list.
- - -
BaseType * eval_function(DDS &dds, const std::string &dataset)
Evaluate a function-valued constraint expression.
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
DDS * eval_function_clauses(DDS &dds)
Evaluate a function-valued constraint expression that contains several function calls.
- -
void parse_constraint(const std::string &constraint, DDS &dds)
Parse the constraint expression given the current DDS.
-
Evaluate a constraint expression.
-
bool functional_expression()
Does the current constraint expression return a BaseType pointer? This method does not evaluate the c...
- -
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
void append_constant(BaseType *btp)
-
bool clause_value(Clause_iter &i, DDS &dds)
-
bool eval_selection(DDS &dds, const std::string &dataset)
Evaluate a boolean-valued constraint expression. This is main method for the evaluator and is called ...
-
bool function_clauses()
Does the current constraint expression contain function clauses.
-
Holds a DAP2 DDS.
Definition: DataDDS.h:77
-
void append_clause(int op, rvalue *arg1, rvalue_list *arg2)
Add a clause to a constraint expression.
-
-
- - - - diff --git a/html/Constructor_8cc_source.html b/html/Constructor_8cc_source.html deleted file mode 100644 index 1383a7698..000000000 --- a/html/Constructor_8cc_source.html +++ /dev/null @@ -1,166 +0,0 @@ - - - - - - - -libdap: Constructor.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Constructor.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1995-1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 
33 #include "config.h"
34 
35 //#define DODS_DEBUG
36 
37 #include <string>
38 #include <sstream>
39 #include <algorithm>
40 #include <functional>
41 
42 #include <stdint.h>
43 
44 #include "crc.h"
45 
46 #include "Constructor.h"
47 #include "Grid.h"
48 
49 #include "DMR.h"
50 #include "XMLWriter.h"
51 #include "D4StreamMarshaller.h"
52 #include "D4StreamUnMarshaller.h"
53 #include "D4Group.h"
54 
55 #include "D4Attributes.h"
56 
57 #include "escaping.h"
58 #include "util.h"
59 #include "Error.h"
60 #include "InternalErr.h"
61 #include "DapIndent.h"
62 
63 // #define DODS_DEBUG 1
64 #include "debug.h"
65 
66 using namespace std;
67 
68 namespace libdap {
69 
70 // Private member functions
71 
72 void
73 Constructor::m_duplicate(const Constructor &c)
74 {
75  DBG(cerr << "In Constructor::m_duplicate for " << c.name() << endl);
76  // Clear out any spurious vars in Constructor::d_vars
77  // Moved from Grid::m_duplicate. jhrg 4/3/13
78  d_vars.clear(); // [mjohnson 10 Sep 2009]
79 
80  Vars_citer i = c.d_vars.begin();
81  while (i != c.d_vars.end()) {
82  BaseType *btp = (*i++)->ptr_duplicate();
83  btp->set_parent(this);
84  d_vars.push_back(btp);
85  }
86 
87  DBG(cerr << "Exiting Constructor::m_duplicate for " << c.name() << endl);
88 }
89 
90 // Public member functions
91 
92 Constructor::Constructor(const string &name, const Type &type, bool is_dap4)
93  : BaseType(name, type, is_dap4)
94 {}
95 
106 Constructor::Constructor(const string &name, const string &dataset, const Type &type, bool is_dap4)
107  : BaseType(name, dataset, type, is_dap4)
108 {}
109 
110 Constructor::Constructor(const Constructor &rhs) : BaseType(rhs), d_vars(0)
111 {
112  DBG(cerr << "In Constructor::copy_ctor for " << rhs.name() << endl);
113  m_duplicate(rhs);
114 }
115 
116 Constructor::~Constructor()
117 {
118  Vars_iter i = d_vars.begin();
119  while (i != d_vars.end()) {
120  delete *i++;
121  }
122 }
123 
124 Constructor &
125 Constructor::operator=(const Constructor &rhs)
126 {
127  DBG(cerr << "Entering Constructor::operator=" << endl);
128  if (this == &rhs)
129  return *this;
130 
131  dynamic_cast<BaseType &>(*this) = rhs; // run BaseType=
132 
133  m_duplicate(rhs);
134 
135  DBG(cerr << "Exiting Constructor::operator=" << endl);
136  return *this;
137 }
138 
139 // A public method, but just barely...
140 void
142 {
143  DBG(cerr << __func__ << "() - BEGIN (name:"<< name() <<
144  ")(type:"<< type_name()<<
145  ")(root:'"<< root->name()<<"':"<<(void*)root <<
146  ")(dest:'"<< dest->name()<<"':"<< (void *) dest<< ")"
147  << endl;);
148 
149  for (Constructor::Vars_citer i = var_begin(), e = var_end(); i != e; ++i) {
150  BaseType *d4_var = dest->var((*i)->name());
151  // Don't add duplicate variables. We have to make this check
152  // because some of the child variables may add arrays
153  // to the root object. For example, this happens in
154  // Grid with the Map Arrays - ndp - 05/08/17
155  if(!d4_var){
156  /*
157  BaseType *new_var = (*i)->transform_to_dap4(root, dest);
158  if (new_var) { // Might be a Grid; see the comment in BaseType::transform_to_dap4()
159  new_var->set_parent(dest);
160  dest->add_var_nocopy(new_var);
161  }
162  */
163  DBG(cerr << __func__ << "() - Transforming variable: '" <<
164  (*i)->name() << "'" << endl; );
165  (*i)->transform_to_dap4(root /*group*/, dest /*container*/);
166  }
167  else {
168  DBG(cerr << __func__ << "() - Skipping variable: " <<
169  d4_var->type_name() << " " << d4_var->name() << " because a variable with" <<
170  " this name already exists in the root group." << endl; );
171  }
172  }
174  dest->set_is_dap4(true);
175  DBG(cerr << __func__ << "() - END (name:"<< name() << ")(type:"<< type_name()<< ")" << endl;);
176 }
177 
178 
179 
180 string
182 {
183  if (get_parent() == 0)
184  return name();
185  else if (get_parent()->type() == dods_group_c)
186  return get_parent()->FQN() + name();
187  else if (get_parent()->type() == dods_array_c)
188  return get_parent()->FQN();
189  else
190  return get_parent()->FQN() + "." + name();
191 }
192 
193 int
195 {
196  if (!leaves)
197  return d_vars.size();
198  else {
199  int i = 0;
200  for (Vars_iter j = d_vars.begin(); j != d_vars.end(); j++) {
201  i += (*j)->element_count(leaves);
202  }
203  return i;
204  }
205 }
206 
207 void
209 {
210  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
211  (*i)->set_send_p(state);
212  }
213 
214  BaseType::set_send_p(state);
215 }
216 
217 void
219 {
220  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
221  (*i)->set_read_p(state);
222  }
223 
224  BaseType::set_read_p(state);
225 }
226 
227 #if 0
228 // TODO Recode to use width(bool). Bur see comments in BaseType.h
229 unsigned int
231 {
232  unsigned int sz = 0;
233 
234  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
235  sz += (*i)->width();
236  }
237 
238  return sz;
239 }
240 #endif
241 
248 unsigned int
249 Constructor::width(bool constrained) const
250 {
251  unsigned int sz = 0;
252 
253  for (Vars_citer i = d_vars.begin(); i != d_vars.end(); i++) {
254  if (constrained) {
255  if ((*i)->send_p())
256  sz += (*i)->width(constrained);
257  }
258  else {
259  sz += (*i)->width(constrained);
260  }
261  }
262 
263  return sz;
264 }
265 
266 BaseType *
267 Constructor::var(const string &name, bool exact_match, btp_stack *s)
268 {
269  string n = www2id(name);
270 
271  if (exact_match)
272  return m_exact_match(n, s);
273  else
274  return m_leaf_match(n, s);
275 }
276 
278 BaseType *
279 Constructor::var(const string &n, btp_stack &s)
280 {
281  // This should probably be removed. The BES code should remove web encoding
282  // with the possible exception of spaces. jhrg 11/25/13
283  string name = www2id(n);
284 
285  BaseType *btp = m_exact_match(name, &s);
286  if (btp)
287  return btp;
288 
289  return m_leaf_match(name, &s);
290 }
291 
292 // Protected method
293 BaseType *
294 Constructor::m_leaf_match(const string &name, btp_stack *s)
295 {
296  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
297  if ((*i)->name() == name) {
298  if (s) {
299  DBG(cerr << "Pushing " << this->name() << endl);
300  s->push(static_cast<BaseType *>(this));
301  }
302  return *i;
303  }
304  if ((*i)->is_constructor_type()) {
305  BaseType *btp = (*i)->var(name, false, s);
306  if (btp) {
307  if (s) {
308  DBG(cerr << "Pushing " << this->name() << endl);
309  s->push(static_cast<BaseType *>(this));
310  }
311  return btp;
312  }
313  }
314  }
315 
316  return 0;
317 }
318 
319 // Protected method
320 BaseType *
321 Constructor::m_exact_match(const string &name, btp_stack *s)
322 {
323  // Look for name at the top level first.
324  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
325  if ((*i)->name() == name) {
326  if (s)
327  s->push(static_cast<BaseType *>(this));
328 
329  return *i;
330  }
331  }
332 
333  // If it was not found using the simple search, look for a dot and
334  // search the hierarchy.
335  string::size_type dot_pos = name.find("."); // zero-based index of `.'
336  if (dot_pos != string::npos) {
337  string aggregate = name.substr(0, dot_pos);
338  string field = name.substr(dot_pos + 1);
339 
340  BaseType *agg_ptr = var(aggregate);
341  if (agg_ptr) {
342  if (s)
343  s->push(static_cast<BaseType *>(this));
344 
345  return agg_ptr->var(field, true, s); // recurse
346  }
347  else
348  return 0; // qualified names must be *fully* qualified
349  }
350 
351  return 0;
352 }
353 
355 Constructor::Vars_iter
357 {
358  return d_vars.begin() ;
359 }
360 
363 Constructor::Vars_iter
365 {
366  return d_vars.end() ;
367 }
368 
370 Constructor::Vars_riter
372 {
373  return d_vars.rbegin();
374 }
375 
378 Constructor::Vars_riter
380 {
381  return d_vars.rend();
382 }
383 
387 Constructor::Vars_iter
389 {
390  return d_vars.begin() + i;
391 }
392 
396 BaseType *
398 {
399  return *(d_vars.begin() + i);
400 }
401 
406 void
408 {
409  // Jose Garcia
410  // Passing and invalid pointer to an object is a developer's error.
411  if (!bt)
412  throw InternalErr(__FILE__, __LINE__, "The BaseType parameter cannot be null.");
413 #if 0
414  if (bt->is_dap4_only_type())
415  throw InternalErr(__FILE__, __LINE__, "Attempt to add a DAP4 type to a DAP2 Structure.");
416 #endif
417  // Jose Garcia
418  // Now we add a copy of bt so the external user is able to destroy bt as
419  // he/she wishes. The policy is: "If it is allocated outside, it is
420  // deallocated outside, if it is allocated inside, it is deallocated
421  // inside"
422  BaseType *btp = bt->ptr_duplicate();
423  btp->set_parent(this);
424  d_vars.push_back(btp);
425 }
426 
431 void
433 {
434  if (!bt)
435  throw InternalErr(__FILE__, __LINE__, "The BaseType parameter cannot be null.");
436 #if 0
437  if (bt->is_dap4_only_type())
438  throw InternalErr(__FILE__, __LINE__, "Attempt to add a DAP4 type to a DAP2 Structure.");
439 #endif
440  bt->set_parent(this);
441  d_vars.push_back(bt);
442 }
443 
447 void
448 Constructor::del_var(const string &n)
449 {
450  // TODO remove_if? find_if?
451  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
452  if ((*i)->name() == n) {
453  BaseType *bt = *i ;
454  d_vars.erase(i) ;
455  delete bt ; bt = 0;
456  return;
457  }
458  }
459 }
460 
461 void
462 Constructor::del_var(Vars_iter i)
463 {
464  if (*i != 0) {
465  BaseType *bt = *i;
466  d_vars.erase(i);
467  delete bt;
468  }
469 }
470 
477 {
478  DBG(cerr << "Entering Constructor::read..." << endl);
479  if (!read_p()) {
480  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
481  (*i)->read();
482  }
483  set_read_p(true);
484  }
485 
486  return false;
487 }
488 
489 void
491 {
492  DBG(cerr << "Constructor::intern_data: " << name() << endl);
493  if (!read_p())
494  read(); // read() throws Error and InternalErr
495 
496  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
497  if ((*i)->send_p()) {
498  (*i)->intern_data(eval, dds);
499  }
500  }
501 }
502 
503 bool
505 {
506 #if USE_LOCAL_TIMEOUT_SCHEME
507  dds.timeout_on();
508 #endif
509  if (!read_p())
510  read(); // read() throws Error and InternalErr
511 
512  if (ce_eval && !eval.eval_selection(dds, dataset()))
513  return true;
514 #if USE_LOCAL_TIMEOUT_SCHEME
515  dds.timeout_off();
516 #endif
517  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
518  if ((*i)->send_p()) {
519 #ifdef CHECKSUMS
520  XDRStreamMarshaller *sm = dynamic_cast<XDRStreamMarshaller*>(&m);
521  if (sm && sm->checksums() && (*i)->type() != dods_structure_c && (*i)->type() != dods_grid_c)
522  sm->reset_checksum();
523 
524  (*i)->serialize(eval, dds, m, false);
525 
526  if (sm && sm->checksums() && (*i)->type() != dods_structure_c && (*i)->type() != dods_grid_c)
527  sm->get_checksum();
528 #else
529  // (*i)->serialize(eval, dds, m, false);
530  // Only Sequence and Vector run the evaluator.
531  (*i)->serialize(eval, dds, m, true);
532 #endif
533  }
534  }
535 
536  return true;
537 }
538 
539 bool
541 {
542  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
543  (*i)->deserialize(um, dds, reuse);
544  }
545 
546  return false;
547 }
548 
549 void
551 {
552  throw InternalErr(__FILE__, __LINE__, "Computing a checksum alone is not supported for Constructor types.");
553 }
554 
555 void
556 Constructor::intern_data(/*Crc32 &checksum, DMR &dmr, ConstraintEvaluator & eval*/)
557 {
558  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
559  if ((*i)->send_p()) {
560  (*i)->intern_data(/*checksum, dmr, eval*/);
561  }
562  }
563 }
564 
565 
577 void
578 Constructor::serialize(D4StreamMarshaller &m, DMR &dmr, /*ConstraintEvaluator &eval,*/ bool filter)
579 {
580 #if 1
581  // Not used for the same reason the equivalent code in D4Group::serialize()
582  // is not used. Fail for D4Sequence and general issues with memory use.
583  //
584  // Revisit this - I had to uncomment this to get the netcdf_handler code
585  // to work - it relies on having NCStructure::read() called. The D4Sequence
586  // ::serialize() method calls read_next_instance(). What seems to be happening
587  // is that this call to read gets the first set of values, but does not store
588  // them; the call to serialize then runs the D4Sequence::serialize() method that
589  // _does_ read all of the sequence data and then serialize it. However, the first
590  // sequence instance is missing...
591  if (!read_p())
592  read(); // read() throws Error
593 #endif
594 #if 0
595  // place holder for now. There may be no need for this; only Array and Seq?
596  // jhrg 9/6/13
597  if (filter && !eval.eval_selection(dmr, dataset()))
598  return true;
599 #endif
600 
601  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
602  if ((*i)->send_p()) {
603  (*i)->serialize(m, dmr, /*eval,*/ filter);
604  }
605  }
606 }
607 
608 void
610 {
611  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
612  (*i)->deserialize(um, dmr);
613  }
614 }
615 
616 void
617 Constructor::print_decl(FILE *out, string space, bool print_semi,
618  bool constraint_info, bool constrained)
619 {
620  ostringstream oss;
621  print_decl(oss, space, print_semi, constraint_info, constrained);
622  fwrite(oss.str().data(), sizeof(char), oss.str().length(), out);
623 }
624 
625 void
626 Constructor::print_decl(ostream &out, string space, bool print_semi,
627  bool constraint_info, bool constrained)
628 {
629  if (constrained && !send_p())
630  return;
631 
632  out << space << type_name() << " {\n" ;
633  for (Vars_citer i = d_vars.begin(); i != d_vars.end(); i++) {
634  (*i)->print_decl(out, space + " ", true, constraint_info, constrained);
635  }
636  out << space << "} " << id2www(name()) ;
637 
638  if (constraint_info) { // Used by test drivers only.
639  if (send_p())
640  out << ": Send True";
641  else
642  out << ": Send False";
643  }
644 
645  if (print_semi)
646  out << ";\n" ;
647 }
648 
649 void
650 Constructor::print_val(FILE *out, string space, bool print_decl_p)
651 {
652  ostringstream oss;
653  print_val(oss, space, print_decl_p);
654  fwrite(oss.str().data(), sizeof(char), oss.str().length(), out);
655 }
656 
657 void
658 Constructor::print_val(ostream &out, string space, bool print_decl_p)
659 {
660  if (print_decl_p) {
661  print_decl(out, space, false);
662  out << " = " ;
663  }
664 
665  out << "{ " ;
666  for (Vars_citer i = d_vars.begin(), e = d_vars.end(); i != e;
667  i++, (void)(i != e && out << ", ")) {
668 
669  DBG(cerr << (*i)->name() << " isa " << (*i)->type_name() << endl);
670 
671  (*i)->print_val(out, "", false);
672  }
673 
674  out << " }" ;
675 
676  if (print_decl_p)
677  out << ";\n" ;
678 }
679 
683 void
684 Constructor::print_xml(FILE *out, string space, bool constrained)
685 {
686  XMLWriter xml(space);
687  print_xml_writer(xml, constrained);
688  fwrite(xml.get_doc(), sizeof(char), xml.get_doc_size(), out);
689 }
690 
694 void
695 Constructor::print_xml(ostream &out, string space, bool constrained)
696 {
697  XMLWriter xml(space);
698  print_xml_writer(xml, constrained);
699  out << xml.get_doc();
700 }
701 
702 class PrintFieldXMLWriter : public unary_function<BaseType *, void>
703 {
704  XMLWriter &d_xml;
705  bool d_constrained;
706 public:
707  PrintFieldXMLWriter(XMLWriter &x, bool c)
708  : d_xml(x), d_constrained(c)
709  {}
710 
711  void operator()(BaseType *btp)
712  {
713  btp->print_xml_writer(d_xml, d_constrained);
714  }
715 };
716 
717 void
719 {
720  if (constrained && !send_p())
721  return;
722 
723  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*)type_name().c_str()) < 0)
724  throw InternalErr(__FILE__, __LINE__, "Could not write " + type_name() + " element");
725 
726  if (!name().empty())
727  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name", (const xmlChar*)name().c_str()) < 0)
728  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
729 
730  // DAP2 prints attributes first. For some reason we decided that DAP4 should
731  // print them second. No idea why... jhrg 8/15/14
732  if (!is_dap4() && get_attr_table().get_size() > 0)
734 
735  bool has_variables = (var_begin() != var_end());
736  if (has_variables)
737  for_each(var_begin(), var_end(), PrintFieldXMLWriter(xml, constrained));
738 
739  if (is_dap4())
740  attributes()->print_dap4(xml);
741 
742 #if 0
743  // Moved up above so that the DDX tests for various handles will still work.
744  // jhrg 8/15/14
745  if (!is_dap4() && get_attr_table().get_size() > 0)
747 #endif
748 
749  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
750  throw InternalErr(__FILE__, __LINE__, "Could not end " + type_name() + " element");
751 }
752 
753 class PrintDAP4FieldXMLWriter : public unary_function<BaseType *, void>
754 {
755  XMLWriter &d_xml;
756  bool d_constrained;
757 public:
758  PrintDAP4FieldXMLWriter(XMLWriter &x, bool c) : d_xml(x), d_constrained(c) {}
759 
760  void operator()(BaseType *btp)
761  {
762  btp->print_dap4(d_xml, d_constrained);
763  }
764 };
765 
766 
767 void
768 Constructor::print_dap4(XMLWriter &xml, bool constrained)
769 {
770  if (constrained && !send_p())
771  return;
772 
773  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*)type_name().c_str()) < 0)
774  throw InternalErr(__FILE__, __LINE__, "Could not write " + type_name() + " element");
775 
776  if (!name().empty())
777  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name", (const xmlChar*)name().c_str()) < 0)
778  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
779 
780  bool has_variables = (var_begin() != var_end());
781  if (has_variables)
782  for_each(var_begin(), var_end(), PrintDAP4FieldXMLWriter(xml, constrained));
783 
784  attributes()->print_dap4(xml);
785 
786  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
787  throw InternalErr(__FILE__, __LINE__, "Could not end " + type_name() + " element");
788 }
789 
790 
791 bool
792 Constructor::check_semantics(string &msg, bool all)
793 {
794  if (!BaseType::check_semantics(msg))
795  return false;
796 
797  if (!unique_names(d_vars, name(), type_name(), msg))
798  return false;
799 
800  if (all)
801  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
802  if (!(*i)->check_semantics(msg, true)) {
803  return false;
804  }
805  }
806 
807  return true;
808 }
809 
822 bool
824 {
825  return false;
826 }
827 
833 void
835 {
836  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
837  (*i)->set_in_selection(state);
838  }
839 
841 }
842 
843 
845 {
846  AttrTable *at = at_container->get_attr_table(name());
847  DBG(cerr << "Constructor::transfer_attributes() - processing " << name() << "' addr: "<< (void*) at << endl);
848  if (at) {
849  BaseType::transfer_attributes(at_container);
850  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
851  BaseType *bt = (*i);
852  bt->transfer_attributes(at);
853  }
854 
855  }
856 }
857 
858 AttrTable *
859 Constructor::make_dropped_vars_attr_table(vector<BaseType *> *dropped_vars) {
860  DBG( cerr << __func__ << "() - BEGIN" << endl;);
861 
862  AttrTable *dv_table = NULL;
863  if(!dropped_vars->empty()){
864  dv_table = new AttrTable;
865  dv_table->set_name("dap4:dropped_members");
866  vector<BaseType *>::iterator dvIter = dropped_vars->begin();
867  vector<BaseType *>::iterator dvEnd = dropped_vars->end();
868  unsigned int i = 0;
869  for( ; dvIter!=dvEnd ; dvIter++, i++){
870  BaseType *bt = (*dvIter);
871  AttrTable *bt_attr_table = new AttrTable(bt->get_attr_table());
872  bt_attr_table->set_name(bt->name());
873  string type_name = bt->type_name();
874  if(bt->is_vector_type()){
875  Array *array = dynamic_cast <Array *>(bt);
876  if(array){
877  type_name = array->prototype()->type_name();
878  DBG( cerr << __func__ << "() - The variable " << bt->name() << " is an Array of '"<< type_name << "'" << endl;);
879  Array::Dim_iter d_iter = array->dim_begin();
880  Array::Dim_iter end = array->dim_end();
881  for( ; d_iter< end ; d_iter++){
882 
883  ostringstream dim_size;
884  dim_size << (*d_iter).size;
885  bt_attr_table->append_attr(
886  "array_dimensions",
887  AttrType_to_String(Attr_uint32),
888  dim_size.str());
889  }
890  }
891  }
892  bt_attr_table->append_attr("dap4:type","String", type_name);
893  dv_table->append_container(bt_attr_table,bt_attr_table->get_name());
894  // Clear entry now that we're done.
895  (*dvIter) = 0;
896  }
897  }
898  DBG( cerr << __func__ << "() - END " << endl;);
899  return dv_table;
900 
901 }
902 
903 
912 void
913 Constructor::dump(ostream &strm) const
914 {
915  strm << DapIndent::LMarg << "Constructor::dump - ("
916  << (void *)this << ")" << endl ;
917  DapIndent::Indent() ;
918  BaseType::dump(strm) ;
919  strm << DapIndent::LMarg << "vars: " << endl ;
920  DapIndent::Indent() ;
921  Vars_citer i = d_vars.begin() ;
922  Vars_citer ie = d_vars.end() ;
923  for (; i != ie; i++) {
924  (*i)->dump(strm) ;
925  }
926  DapIndent::UnIndent() ;
927  DapIndent::UnIndent() ;
928 }
929 
930 } // namespace libdap
931 
virtual unsigned int width(bool constrained=false) const
Definition: Constructor.cc:249
-
virtual bool read_p()
Has this variable been read?
Definition: BaseType.cc:480
-
virtual string name() const
Returns the name of the class instance.
Definition: BaseType.cc:320
-
virtual void set_in_selection(bool state)
Set the in_selection property.
Definition: Constructor.cc:834
-
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
virtual void print_dap4(XMLWriter &xml, bool constrained=false)
Definition: BaseType.cc:1164
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: BaseType.cc:291
-
virtual std::string FQN() const
Definition: Constructor.cc:181
-
virtual BaseType * var(const string &name, bool exact_match=true, btp_stack *s=0)
btp_stack no longer needed; use back pointers (BaseType::get_parent())
Definition: Constructor.cc:267
-
Part
Names the parts of multi-section constructor data types.
Definition: Type.h:48
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
string AttrType_to_String(const AttrType at)
Definition: AttrTable.cc:97
-
virtual void print_xml_writer(XMLWriter &xml, bool constrained=false)
Definition: BaseType.cc:1134
-
virtual string get_name() const
Get the name of this attribute table.
Definition: AttrTable.cc:238
-
Read data from the stream made by D4StreamMarshaller.
-
Vars_riter var_rend()
Definition: Constructor.cc:379
-
Definition: crc.h:76
-
BaseType(const string &n, const Type &t, bool is_dap4=false)
The BaseType constructor.
Definition: BaseType.cc:126
-
virtual void compute_checksum(Crc32 &checksum)
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
Definition: Constructor.cc:550
-
STL namespace.
-
void print_xml_writer(XMLWriter &xml)
Definition: AttrTable.cc:1425
-
virtual void add_var_nocopy(BaseType *bt, Part part=nil)
Definition: Constructor.cc:432
-
virtual void add_var(BaseType *bt, Part part=nil)
Definition: Constructor.cc:407
-
Type
Identifies the data type.
Definition: Type.h:94
-
virtual void set_in_selection(bool state)
Definition: BaseType.cc:718
-
virtual int element_count(bool leaves=false)
Count the members of constructor types.
Definition: Constructor.cc:194
-
virtual void set_parent(BaseType *parent)
Definition: BaseType.cc:733
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
Dim_iter dim_end()
Definition: Array.cc:696
-
virtual std::string FQN() const
Definition: BaseType.cc:332
-
virtual void print_xml(ostream &out, string space=" ", bool constrained=false)
Definition: Constructor.cc:695
-
virtual BaseType * var(const string &name="", bool exact_match=true, btp_stack *s=0)
Returns a pointer to a member of a constructor class.
Definition: BaseType.cc:758
-
virtual bool is_vector_type() const
Returns true if the instance is a vector (i.e., array) type variable.
Definition: BaseType.cc:402
-
virtual void transform_to_dap4(D4Group *root, Constructor *dest)
DAP2 to DAP4 transform.
Definition: Constructor.cc:141
-
virtual bool is_linear()
Check to see whether this variable can be printed simply.
Definition: Constructor.cc:823
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
-
virtual void set_send_p(bool state)
Definition: BaseType.cc:568
-
Vars_riter var_rbegin()
Definition: Constructor.cc:371
- -
virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
Move data to the net, then remove them from the object.
Definition: Constructor.cc:504
-
virtual AttrTable * get_attr_table(const string &name)
Get an attribute container.
Definition: AttrTable.cc:607
-
virtual Type type() const
Returns the type of the class instance.
Definition: BaseType.cc:365
-
std::vector< dimension >::iterator Dim_iter
Definition: Array.h:206
-
BaseType * get_var_index(int i)
Definition: Constructor.cc:397
-
virtual bool read()
simple implementation of read that iterates through vars and calls read on them
Definition: Constructor.cc:476
-
virtual void set_read_p(bool state)
Sets the value of the read_p property.
Definition: BaseType.cc:516
-
virtual D4Attributes * attributes()
Definition: BaseType.cc:599
-
virtual bool check_semantics(string &msg, bool all=false)
Compare an object&#39;s current state with the semantics of its type.
Definition: Constructor.cc:792
-
virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)
Receive data from the net.
Definition: Constructor.cc:540
-
virtual void print_val(FILE *out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: Constructor.cc:650
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Constructor.cc:913
-
virtual void print_xml_writer(XMLWriter &xml, bool constrained=false)
Definition: Constructor.cc:718
-
virtual BaseType * ptr_duplicate()=0
-
string www2id(const string &in, const string &escape, const string &except)
Definition: escaping.cc:220
- -
Evaluate a constraint expression.
-
virtual AttrTable & get_attr_table()
Definition: BaseType.cc:582
-
virtual BaseType * get_parent() const
Definition: BaseType.cc:751
-
virtual unsigned int append_attr(const string &name, const string &type, const string &value)
Add an attribute to the table.
Definition: AttrTable.cc:307
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
-
Dim_iter dim_begin()
Definition: Array.cc:690
-
virtual void print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
Print an ASCII representation of the variable structure.
Definition: Constructor.cc:626
-
virtual string type_name() const
Returns the type of the class instance as a string.
Definition: BaseType.cc:379
-
Vars_iter var_begin()
Definition: Constructor.cc:356
-
Vars_iter var_end()
Definition: Constructor.cc:364
- -
bool eval_selection(DDS &dds, const std::string &dataset)
Evaluate a boolean-valued constraint expression. This is main method for the evaluator and is called ...
-
Vars_iter get_vars_iter(int i)
Definition: Constructor.cc:388
-
virtual void transfer_attributes(AttrTable *at)
Definition: Constructor.cc:844
- -
virtual void intern_data()
Read data into this variable.
Definition: Constructor.cc:556
-
virtual void set_name(const string &n)
Set the name of this attribute table.
Definition: AttrTable.cc:245
-
void print_dap4(XMLWriter &xml, bool constrained=false)
Definition: Constructor.cc:768
-
virtual void transfer_attributes(AttrTable *at)
Definition: BaseType.cc:644
-
virtual void del_var(const string &name)
Definition: Constructor.cc:448
-
virtual void set_send_p(bool state)
Definition: Constructor.cc:208
-
void transform_to_dap4(AttrTable &at)
copy attributes from DAP2 to DAP4
-
Marshaller that knows how serialize dap data objects to a C++ iostream using XDR. ...
-
A multidimensional array of identical data types.
Definition: Array.h:112
-
virtual bool send_p()
Should this variable be sent?
Definition: BaseType.cc:554
-
string id2www(string in, const string &allowable)
Definition: escaping.cc:153
-
virtual string dataset() const
Returns the name of the dataset used to create this instance.
Definition: BaseType.cc:358
-
virtual void set_read_p(bool state)
Sets the value of the read_p property.
Definition: Constructor.cc:218
-
virtual bool check_semantics(string &msg, bool all=false)
Compare an object&#39;s current state with the semantics of its type.
Definition: BaseType.cc:1209
-
-
- - - - diff --git a/html/Constructor_8h_source.html b/html/Constructor_8h_source.html deleted file mode 100644 index dfcea6888..000000000 --- a/html/Constructor_8h_source.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - -libdap: Constructor.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Constructor.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef _constructor_h
27 #define _constructor_h 1
28 
29 #include <vector>
30 
31 #include "BaseType.h"
32 
33 class Crc32;
34 
35 namespace libdap
36 {
37 
38 class DMR;
39 class XMLWriter;
40 class D4StreamUnMarshaller;
41 
43 class Constructor: public BaseType
44 {
45 private:
46  Constructor(); // No default ctor.
47 
48 protected:
49  std::vector<BaseType *> d_vars;
50 
51  void m_duplicate(const Constructor &s);
52  BaseType *m_leaf_match(const string &name, btp_stack *s = 0);
53  BaseType *m_exact_match(const string &name, btp_stack *s = 0);
54 
55  Constructor(const string &name, const Type &type, bool is_dap4 = false);
56  Constructor(const string &name, const string &d, const Type &type, bool is_dap4 = false);
57 
58  Constructor(const Constructor &copy_from);
59 
60 public:
61  typedef std::vector<BaseType *>::const_iterator Vars_citer ;
62  typedef std::vector<BaseType *>::iterator Vars_iter ;
63  typedef std::vector<BaseType *>::reverse_iterator Vars_riter ;
64 
65  virtual ~Constructor();
66 
67  Constructor &operator=(const Constructor &rhs);
68  virtual void transform_to_dap4(D4Group *root, Constructor *dest);
69 
70  virtual std::string FQN() const;
71 
72  virtual int element_count(bool leaves = false);
73 
74  virtual void set_send_p(bool state);
75  virtual void set_read_p(bool state);
76 
77  virtual unsigned int width(bool constrained = false) const;
78 #if 0
79  virtual unsigned int width(bool constrained);
80 #endif
81  // TODO Rewrite these methods to use the back pointers and keep this
82  // for older code.
84  virtual BaseType *var(const string &name, bool exact_match = true, btp_stack *s = 0);
86  virtual BaseType *var(const string &n, btp_stack &s);
87 
88  Vars_iter var_begin();
89  Vars_iter var_end();
90  Vars_riter var_rbegin();
91  Vars_riter var_rend();
92  Vars_iter get_vars_iter(int i);
93  BaseType *get_var_index(int i);
94 
95  virtual void add_var(BaseType *bt, Part part = nil);
96  virtual void add_var_nocopy(BaseType *bt, Part part = nil);
97 
98  virtual void del_var(const string &name);
99  virtual void del_var(Vars_iter i);
100 
101  virtual bool read();
102 
103  // DAP2
104  virtual void intern_data(ConstraintEvaluator &eval, DDS &dds);
105  virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval = true);
106  virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse = false);
107 
108  // DAP4
109  virtual void compute_checksum(Crc32 &checksum);
110  virtual void intern_data(/*Crc32 &checksum, DMR &dmr, ConstraintEvaluator &eval*/);
111  virtual void serialize(D4StreamMarshaller &m, DMR &dmr, /*ConstraintEvaluator &eval,*/ bool filter = false);
112  virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr);
113 
114  // Do not store values in memory as for C; users work with the C++ objects
115  virtual unsigned int val2buf(void *, bool) {
116  throw InternalErr(__FILE__, __LINE__, "Never use this method; see the programmer's guide documentation.");
117  }
118  virtual unsigned int buf2val(void **) {
119  throw InternalErr(__FILE__, __LINE__, "Never use this method; see the programmer's guide documentation.");
120  }
121 
122  virtual bool is_linear();
123  virtual void set_in_selection(bool state);
124 
125  virtual void print_decl(ostream &out, string space = " ",
126  bool print_semi = true,
127  bool constraint_info = false,
128  bool constrained = false);
129 
130  virtual void print_xml(ostream &out, string space = " ",
131  bool constrained = false);
132 
133  void print_dap4(XMLWriter &xml, bool constrained = false);
134 
135  virtual void print_xml_writer(XMLWriter &xml, bool constrained = false);
136 
137  virtual void print_decl(FILE *out, string space = " ",
138  bool print_semi = true,
139  bool constraint_info = false,
140  bool constrained = false);
141  virtual void print_xml(FILE *out, string space = " ",
142  bool constrained = false);
143 
144  virtual void print_val(FILE *out, string space = "",
145  bool print_decl_p = true);
146  virtual void print_val(ostream &out, string space = "",
147  bool print_decl_p = true);
148 
149  virtual bool check_semantics(string &msg, bool all = false);
150 
151  virtual void transfer_attributes(AttrTable *at);
152  static AttrTable *make_dropped_vars_attr_table(vector<BaseType *> *dropped_vars);
153 
154  virtual void dump(ostream &strm) const ;
155 };
156 
157 } // namespace libdap
158 
159 #endif // _constructor_h
virtual unsigned int width(bool constrained=false) const
Definition: Constructor.cc:249
-
virtual string name() const
Returns the name of the class instance.
Definition: BaseType.cc:320
-
virtual void set_in_selection(bool state)
Set the in_selection property.
Definition: Constructor.cc:834
-
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
virtual std::string FQN() const
Definition: Constructor.cc:181
-
virtual BaseType * var(const string &name, bool exact_match=true, btp_stack *s=0)
btp_stack no longer needed; use back pointers (BaseType::get_parent())
Definition: Constructor.cc:267
-
Part
Names the parts of multi-section constructor data types.
Definition: Type.h:48
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
Read data from the stream made by D4StreamMarshaller.
-
Vars_riter var_rend()
Definition: Constructor.cc:379
-
Definition: crc.h:76
-
virtual void compute_checksum(Crc32 &checksum)
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
Definition: Constructor.cc:550
-
virtual void add_var_nocopy(BaseType *bt, Part part=nil)
Definition: Constructor.cc:432
-
virtual void add_var(BaseType *bt, Part part=nil)
Definition: Constructor.cc:407
-
Type
Identifies the data type.
Definition: Type.h:94
-
virtual int element_count(bool leaves=false)
Count the members of constructor types.
Definition: Constructor.cc:194
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
virtual void print_xml(ostream &out, string space=" ", bool constrained=false)
Definition: Constructor.cc:695
-
virtual void transform_to_dap4(D4Group *root, Constructor *dest)
DAP2 to DAP4 transform.
Definition: Constructor.cc:141
-
virtual bool is_linear()
Check to see whether this variable can be printed simply.
Definition: Constructor.cc:823
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
-
Vars_riter var_rbegin()
Definition: Constructor.cc:371
- -
virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
Move data to the net, then remove them from the object.
Definition: Constructor.cc:504
-
virtual Type type() const
Returns the type of the class instance.
Definition: BaseType.cc:365
-
BaseType * get_var_index(int i)
Definition: Constructor.cc:397
-
virtual bool read()
simple implementation of read that iterates through vars and calls read on them
Definition: Constructor.cc:476
-
virtual bool check_semantics(string &msg, bool all=false)
Compare an object&#39;s current state with the semantics of its type.
Definition: Constructor.cc:792
-
virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)
Receive data from the net.
Definition: Constructor.cc:540
-
virtual void print_val(FILE *out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: Constructor.cc:650
-
virtual unsigned int val2buf(void *, bool)
Loads class data.
Definition: Constructor.h:115
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Constructor.cc:913
-
virtual void print_xml_writer(XMLWriter &xml, bool constrained=false)
Definition: Constructor.cc:718
- -
Evaluate a constraint expression.
-
virtual unsigned int buf2val(void **)
Reads the class data.
Definition: Constructor.h:118
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
-
virtual void print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
Print an ASCII representation of the variable structure.
Definition: Constructor.cc:626
-
Vars_iter var_begin()
Definition: Constructor.cc:356
-
Vars_iter var_end()
Definition: Constructor.cc:364
- -
Vars_iter get_vars_iter(int i)
Definition: Constructor.cc:388
-
virtual void transfer_attributes(AttrTable *at)
Definition: Constructor.cc:844
- -
virtual void intern_data()
Read data into this variable.
Definition: Constructor.cc:556
-
void print_dap4(XMLWriter &xml, bool constrained=false)
Definition: Constructor.cc:768
-
virtual void del_var(const string &name)
Definition: Constructor.cc:448
-
virtual void set_send_p(bool state)
Definition: Constructor.cc:208
-
virtual void set_read_p(bool state)
Sets the value of the read_p property.
Definition: Constructor.cc:218
-
-
- - - - diff --git a/html/D4AsyncUtil_8cc_source.html b/html/D4AsyncUtil_8cc_source.html deleted file mode 100644 index fdcc2a410..000000000 --- a/html/D4AsyncUtil_8cc_source.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - -libdap: D4AsyncUtil.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4AsyncUtil.cc
-
-
-
1 /*
2  * D4AsyncUtil.cc
3  *
4  * Created on: Feb 18, 2014
5  * Author: ndp
6  */
7 
8 #include "config.h"
9 
10 #include <sstream>
11 
12 #include "XMLWriter.h"
13 
14 #include "Error.h"
15 #include "InternalErr.h"
16 #include "util.h"
17 
18 #include "D4AsyncUtil.h"
19 #include "DapXmlNamespaces.h"
20 
21 namespace libdap {
22 
23 const string D4AsyncUtil::STYLESHEET_REFERENCE_KEY = "DAP.Async.StyleSheet.Ref";
24 
25 D4AsyncUtil::D4AsyncUtil() {}
26 
27 D4AsyncUtil::~D4AsyncUtil() {}
28 
34 void D4AsyncUtil::writeD4AsyncRequired(XMLWriter &xml, long expectedDelay, long responseLifetime, string *stylesheet_ref) {
35 
36  // ------ AsynchronousResponse Element and Attributes - BEGIN
37 
38  /*
39  int xmlTextWriterWriteAttributeNS (xmlTextWriterPtr writer,
40  const xmlChar * prefix,
41  const xmlChar * name,
42  const xmlChar * namespaceURI,
43  const xmlChar * content)
44  */
45 
46  if(stylesheet_ref){
47  string href = "href='" + *stylesheet_ref +"'";
48  if(xmlTextWriterStartPI(xml.get_writer(), (const xmlChar*) "xml-stylesheet") < 0)
49  throw InternalErr(__FILE__, __LINE__, "Could not start XML Processing Instruction.");
50  if(xmlTextWriterWriteString(xml.get_writer(), (const xmlChar*) "type='text/xsl'") < 0)
51  throw InternalErr(__FILE__, __LINE__, "Could not write Processing Instruction content.");
52  if(xmlTextWriterWriteString(xml.get_writer(), (const xmlChar*) " ") < 0)
53  throw InternalErr(__FILE__, __LINE__, "Could not write Processing Instruction content.");
54  if(xmlTextWriterWriteString(xml.get_writer(), (const xmlChar*) href.c_str()) < 0)
55  throw InternalErr(__FILE__, __LINE__, "Could not write Processing Instruction content.");
56  if(xmlTextWriterEndPI(xml.get_writer()) < 0)
57  throw InternalErr(__FILE__, __LINE__, "Could not Close XML Processing Instruction.");
58  }
59 
60  DapXmlNamspaces dapns;
61  if (xmlTextWriterStartElementNS(xml.get_writer(),
62  (const xmlChar*)"dap",
63  (const xmlChar*) "AsynchronousResponse",
64  (const xmlChar*) dapns.getDapNamespaceString(DAP_4_0).c_str()) < 0)
65  throw InternalErr(__FILE__, __LINE__, "Could not write AsynchronousResponse element");
66  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "status", (const xmlChar *) "required") < 0)
67  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for 'status'");
68 
69 
70  // ------ expectedDelay Element and Attributes
71  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) "dap:expectedDelay") < 0)
72  throw InternalErr(__FILE__, __LINE__, "Could not write expectedDelay element");
73  ostringstream oss;
74  oss << expectedDelay;
75  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "seconds", (const xmlChar*) oss.str().c_str()) < 0)
76  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for 'status'");
77  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
78  throw InternalErr(__FILE__, __LINE__, "Could not end expectedDelay element");
79  // ------ expectedDelay Element and Attributes - END
80 
81 
82  // ------ responseLifetime Element and Attributes
83  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) "dap:responseLifetime") < 0)
84  throw InternalErr(__FILE__, __LINE__, "Could not write expectedDelay element");
85  ostringstream oss2;
86  oss2 << responseLifetime;
87  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "seconds", (const xmlChar*) oss2.str().c_str()) < 0)
88  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for 'seconds'");
89  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
90  throw InternalErr(__FILE__, __LINE__, "Could not end responseLifetime element");
91  // ------ responseLifetime Element and Attributes - END
92 
93 
94  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
95  throw InternalErr(__FILE__, __LINE__, "Could not end AsynchronousResponse element");
96  // ------ AsynchronousResponse Element and Attributes - END
97 }
98 
99 
105 void D4AsyncUtil::writeD4AsyncAccepted(XMLWriter &xml, long expectedDelay, long responseLifetime, string asyncResourceUrl, string *stylesheet_ref) {
106 
107  // ------ AsynchronousResponse Element and Attributes - BEGIN
108  DapXmlNamspaces dapns;
109 
110  if(stylesheet_ref){
111  string href = "href='" + *stylesheet_ref +"'";
112  if(xmlTextWriterStartPI(xml.get_writer(), (const xmlChar*) "xml-stylesheet") < 0)
113  throw InternalErr(__FILE__, __LINE__, "Could not start XML Processing Instruction.");
114  if(xmlTextWriterWriteString(xml.get_writer(), (const xmlChar*) "type='text/xsl'") < 0)
115  throw InternalErr(__FILE__, __LINE__, "Could not write Processing Instruction content.");
116  if(xmlTextWriterWriteString(xml.get_writer(), (const xmlChar*) " ") < 0)
117  throw InternalErr(__FILE__, __LINE__, "Could not write Processing Instruction content.");
118  if(xmlTextWriterWriteString(xml.get_writer(), (const xmlChar*) href.c_str()) < 0)
119  throw InternalErr(__FILE__, __LINE__, "Could not write Processing Instruction content.");
120  if(xmlTextWriterEndPI(xml.get_writer()) < 0)
121  throw InternalErr(__FILE__, __LINE__, "Could not Close XML Processing Instruction.");
122  }
123 
124  if (xmlTextWriterStartElementNS(xml.get_writer(),
125  (const xmlChar*)"dap",
126  (const xmlChar*) "AsynchronousResponse",
127  (const xmlChar*) dapns.getDapNamespaceString(DAP_4_0).c_str()) < 0)
128  throw InternalErr(__FILE__, __LINE__, "Could not write AsynchronousResponse element");
129  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "status", (const xmlChar *) "accepted") < 0)
130  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for 'status'");
131 
132 
133  // ------ expectedDelay Element and Attributes
134  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) "dap:expectedDelay") < 0)
135  throw InternalErr(__FILE__, __LINE__, "Could not write expectedDelay element");
136  ostringstream oss;
137  oss << expectedDelay;
138  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "seconds", (const xmlChar*) oss.str().c_str()) < 0)
139  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for 'seconds'");
140  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
141  throw InternalErr(__FILE__, __LINE__, "Could not end expectedDelay element");
142  // ------ expectedDelay Element and Attributes - END
143 
144 
145  // ------ responseLifetime Element and Attributes
146  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) "dap:responseLifetime") < 0)
147  throw InternalErr(__FILE__, __LINE__, "Could not write expectedDelay element");
148  ostringstream oss2;
149  oss2 << responseLifetime;
150  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "seconds", (const xmlChar*) oss2.str().c_str()) < 0)
151  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for 'seconds'");
152  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
153  throw InternalErr(__FILE__, __LINE__, "Could not end responseLifetime element");
154  // ------ responseLifetime Element and Attributes - END
155 
156 
157  // ------ link Element and Attributes
158  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) "dap:link") < 0)
159  throw InternalErr(__FILE__, __LINE__, "Could not write expectedDelay element");
160 
161  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "href", (const xmlChar*) asyncResourceUrl.c_str()) < 0)
162  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for 'href'");
163  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
164  throw InternalErr(__FILE__, __LINE__, "Could not end link element");
165  // ------ link Element and Attributes - END
166 
167 
168  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
169  throw InternalErr(__FILE__, __LINE__, "Could not end AsynchronousResponse element");
170  // ------ AsynchronousResponse Element and Attributes - END
171 }
172 
178 void D4AsyncUtil::writeD4AsyncPending(XMLWriter &xml, string *stylesheet_ref) {
179 
180  // ------ AsynchronousResponse Element and Attributes - BEGIN
181  DapXmlNamspaces dapns;
182 
183 
184  if(stylesheet_ref){
185  string href = "href='" + *stylesheet_ref +"'";
186  if(xmlTextWriterStartPI(xml.get_writer(), (const xmlChar*) "xml-stylesheet") < 0)
187  throw InternalErr(__FILE__, __LINE__, "Could not start XML Processing Instruction.");
188  if(xmlTextWriterWriteString(xml.get_writer(), (const xmlChar*) "type='text/xsl'") < 0)
189  throw InternalErr(__FILE__, __LINE__, "Could not write Processing Instruction content.");
190  if(xmlTextWriterWriteString(xml.get_writer(), (const xmlChar*) " ") < 0)
191  throw InternalErr(__FILE__, __LINE__, "Could not write Processing Instruction content.");
192  if(xmlTextWriterWriteString(xml.get_writer(), (const xmlChar*) href.c_str()) < 0)
193  throw InternalErr(__FILE__, __LINE__, "Could not write Processing Instruction content.");
194  if(xmlTextWriterEndPI(xml.get_writer()) < 0)
195  throw InternalErr(__FILE__, __LINE__, "Could not Close XML Processing Instruction.");
196  }
197 
198  if (xmlTextWriterStartElementNS(xml.get_writer(),
199  (const xmlChar*)"dap",
200  (const xmlChar*) "AsynchronousResponse",
201  (const xmlChar*) dapns.getDapNamespaceString(DAP_4_0).c_str()) < 0)
202  throw InternalErr(__FILE__, __LINE__, "Could not write AsynchronousResponse element");
203  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "status", (const xmlChar *) "pending") < 0)
204  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for 'status'");
205 
206  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
207  throw InternalErr(__FILE__, __LINE__, "Could not end AsynchronousResponse element");
208  // ------ AsynchronousResponse Element and Attributes - END
209 }
210 
211 
217 void D4AsyncUtil::writeD4AsyncResponseGone(XMLWriter &xml, string *stylesheet_ref) {
218 
219  // ------ AsynchronousResponse Element and Attributes - BEGIN
220  DapXmlNamspaces dapns;
221 
222 
223  if(stylesheet_ref){
224  string href = "href='" + *stylesheet_ref +"'";
225  if(xmlTextWriterStartPI(xml.get_writer(), (const xmlChar*) "xml-stylesheet") < 0)
226  throw InternalErr(__FILE__, __LINE__, "Could not start XML Processing Instruction.");
227  if(xmlTextWriterWriteString(xml.get_writer(), (const xmlChar*) "type='text/xsl'") < 0)
228  throw InternalErr(__FILE__, __LINE__, "Could not write Processing Instruction content.");
229  if(xmlTextWriterWriteString(xml.get_writer(), (const xmlChar*) " ") < 0)
230  throw InternalErr(__FILE__, __LINE__, "Could not write Processing Instruction content.");
231  if(xmlTextWriterWriteString(xml.get_writer(), (const xmlChar*) href.c_str()) < 0)
232  throw InternalErr(__FILE__, __LINE__, "Could not write Processing Instruction content.");
233  if(xmlTextWriterEndPI(xml.get_writer()) < 0)
234  throw InternalErr(__FILE__, __LINE__, "Could not Close XML Processing Instruction.");
235  }
236 
237  if (xmlTextWriterStartElementNS(xml.get_writer(),
238  (const xmlChar*)"dap",
239  (const xmlChar*) "AsynchronousResponse",
240  (const xmlChar*) dapns.getDapNamespaceString(DAP_4_0).c_str()) < 0)
241  throw InternalErr(__FILE__, __LINE__, "Could not write AsynchronousResponse element");
242  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "status", (const xmlChar *) "gone") < 0)
243  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for 'status'");
244 
245  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
246  throw InternalErr(__FILE__, __LINE__, "Could not end AsynchronousResponse element");
247  // ------ AsynchronousResponse Element and Attributes - END
248 }
249 
250 
256 void D4AsyncUtil::writeD4AsyncResponseRejected(XMLWriter &xml, RejectReasonCode code, string description, string *stylesheet_ref) {
257 
258  // ------ AsynchronousResponse Element and Attributes - BEGIN
259  DapXmlNamspaces dapns;
260 
261 
262  if(stylesheet_ref){
263  string href = "href='" + *stylesheet_ref +"'";
264  if(xmlTextWriterStartPI(xml.get_writer(), (const xmlChar*) "xml-stylesheet") < 0)
265  throw InternalErr(__FILE__, __LINE__, "Could not start XML Processing Instruction.");
266  if(xmlTextWriterWriteString(xml.get_writer(), (const xmlChar*) "type='text/xsl'") < 0)
267  throw InternalErr(__FILE__, __LINE__, "Could not write Processing Instruction content.");
268  if(xmlTextWriterWriteString(xml.get_writer(), (const xmlChar*) " ") < 0)
269  throw InternalErr(__FILE__, __LINE__, "Could not write Processing Instruction content.");
270  if(xmlTextWriterWriteString(xml.get_writer(), (const xmlChar*) href.c_str()) < 0)
271  throw InternalErr(__FILE__, __LINE__, "Could not write Processing Instruction content.");
272  if(xmlTextWriterEndPI(xml.get_writer()) < 0)
273  throw InternalErr(__FILE__, __LINE__, "Could not Close XML Processing Instruction.");
274  }
275 
276  if (xmlTextWriterStartElementNS(xml.get_writer(),
277  (const xmlChar*)"dap",
278  (const xmlChar*) "AsynchronousResponse",
279  (const xmlChar*) dapns.getDapNamespaceString(DAP_4_0).c_str()) < 0)
280  throw InternalErr(__FILE__, __LINE__, "Could not write AsynchronousResponse element");
281  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "status", (const xmlChar *) "rejected") < 0)
282  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for 'status'");
283 
284  // ------ reason Element and Attributes
285  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) "dap:reason") < 0)
286  throw InternalErr(__FILE__, __LINE__, "Could not write reason element");
287  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "code", (const xmlChar*) getRejectReasonCodeString(code).c_str()) < 0)
288  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for 'code'");
289  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
290  throw InternalErr(__FILE__, __LINE__, "Could not end reason element");
291  // ------ reason Element and Attributes - END
292 
293 
294  // ------ description Element and Attributes
295  if (xmlTextWriterWriteElement(xml.get_writer(), (const xmlChar*) "dap:description", (const xmlChar*) description.c_str()) < 0)
296  throw InternalErr(__FILE__, __LINE__, "Could not write description element");
297 
298  // ------ description Element and Attributes - END
299 
300  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
301  throw InternalErr(__FILE__, __LINE__, "Could not end AsynchronousResponse element");
302  // ------ AsynchronousResponse Element and Attributes - END
303 
304 
305 }
306 
307 string D4AsyncUtil::getRejectReasonCodeString(RejectReasonCode code){
308 
309  string codeStr;
310  switch(code){
311  case TIME:
312  codeStr = "time";
313  break;
314 
315  case UNAVAILABLE:
316  codeStr = "unavailable";
317  break;
318 
319  case PRIVILEGES:
320  codeStr = "privileges";
321  break;
322 
323  case OTHER:
324  codeStr = "other";
325  break;
326 
327  default:
328  throw InternalErr(__FILE__, __LINE__, "D4AsyncUtil::getRejectReasonCodeString() - Unrecognized reject_reason_code.");
329  }
330 
331  return codeStr;
332 }
333 
334 // Unused paramters generate warnings, so I removed/commented them below. jhrg 3/12/14
335 void D4AsyncUtil::writeD2AsyncRequired(XMLWriter &/*xml*/, long /*expectedDelay*/, long /*responseLifetime*/) {
336  throw InternalErr(__FILE__, __LINE__, "DAP2 Doesn't handle Async.");
337 }
338 
339 void D4AsyncUtil::writeD2AsyncAccepted(XMLWriter &, long , long , string /*asyncResourceUrl*/) {
340  throw InternalErr(__FILE__, __LINE__, "DAP2 Doesn't handle Async.");
341 }
342 
343 
344 void D4AsyncUtil::writeD2AsyncPending(XMLWriter &) {
345  throw InternalErr(__FILE__, __LINE__, "DAP2 Doesn't handle Async.");
346 }
347 
348 void D4AsyncUtil::writeD2AsyncResponseGone(XMLWriter &) {
349  throw InternalErr(__FILE__, __LINE__, "DAP2 Doesn't handle Async.");
350 }
351 
352 void D4AsyncUtil::writeD2AsyncResponseRejected(XMLWriter &, RejectReasonCode /*code*/, string /*description*/) {
353  throw InternalErr(__FILE__, __LINE__, "DAP2 Doesn't handle Async.");
354 }
355 
356 } /* namespace libdap */
void writeD4AsyncPending(XMLWriter &xml, string *stylesheet_ref=0)
Write the DAP4 AsyncPending response. Write the DAP4 AsyncPending in XML form.
Definition: D4AsyncUtil.cc:178
-
void writeD2AsyncRequired(XMLWriter &xml, long expectedDelay, long responseLifetime)
Write the DAP2 AsyncRequired response . Write the DAP2 AsyncRequired in XML form. ...
Definition: D4AsyncUtil.cc:335
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
void writeD4AsyncRequired(XMLWriter &xml, long expectedDelay, long responseLifetime, string *stylesheet_ref=0)
Write the DAP4 AsyncRequired response. Print the AsyncRequired in XML form.
Definition: D4AsyncUtil.cc:34
-
static std::string getDapNamespaceString(DAPVersion version)
-
void writeD4AsyncResponseRejected(XMLWriter &xml, RejectReasonCode code, string description, string *stylesheet_ref=0)
Write the DAP4 ResponseRejected response. Write the DAP4 AsyncRequired in XML form.
Definition: D4AsyncUtil.cc:256
- -
void writeD4AsyncResponseGone(XMLWriter &xml, string *stylesheet_ref=0)
Write the DAP4 AsyncResponseGone response. Write the DAP4 AsyncRequired in XML form.
Definition: D4AsyncUtil.cc:217
- -
void writeD4AsyncAccepted(XMLWriter &xml, long expectedDelay, long responseLifetime, string asyncResourceUrl, string *stylesheet_ref=0)
Write the DAP4 AsyncAccepted response. Write the AsyncAccepted in XML form.
Definition: D4AsyncUtil.cc:105
-
-
- - - - diff --git a/html/D4AsyncUtil_8h_source.html b/html/D4AsyncUtil_8h_source.html deleted file mode 100644 index 3febe3f98..000000000 --- a/html/D4AsyncUtil_8h_source.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -libdap: D4AsyncUtil.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4AsyncUtil.h
-
-
-
1 /*
2  * D4AsyncUtil.h
3  *
4  * Created on: Feb 18, 2014
5  * Author: ndp
6  */
7 
8 #ifndef D4ASYNCUTIL_H_
9 #define D4ASYNCUTIL_H_
10 
11 #include "XMLWriter.h"
12 
13 namespace libdap {
14 
15 
16 enum RejectReasonCode { TIME, UNAVAILABLE, PRIVILEGES, OTHER };
17 
18 
19 class D4AsyncUtil {
20 private:
21 #if 0
22  // Not used
23  string *d_stylesheet_ref;
24 #endif
25 
26 public:
27  D4AsyncUtil();
28  virtual ~D4AsyncUtil();
29 
30  const static string STYLESHEET_REFERENCE_KEY;
31 
32 
38  void writeD4AsyncRequired(XMLWriter &xml, long expectedDelay, long responseLifetime, string *stylesheet_ref=0);
39 
40 
46  void writeD4AsyncAccepted(XMLWriter &xml, long expectedDelay, long responseLifetime, string asyncResourceUrl, string *stylesheet_ref=0);
47 
53  void writeD4AsyncPending(XMLWriter &xml, string *stylesheet_ref=0);
54 
55 
61  void writeD4AsyncResponseGone(XMLWriter &xml, string *stylesheet_ref=0);
62 
68  void writeD4AsyncResponseRejected(XMLWriter &xml, RejectReasonCode code, string description, string *stylesheet_ref=0);
69  string getRejectReasonCodeString(RejectReasonCode code);
70 
76  void writeD2AsyncRequired(XMLWriter &xml, long expectedDelay, long responseLifetime);
77  void writeD2AsyncAccepted(XMLWriter &xml, long expectedDelay, long responseLifetime, string asyncResourceUrl);
78  void writeD2AsyncPending(XMLWriter &xml);
79  void writeD2AsyncResponseGone(XMLWriter &xml);
80  void writeD2AsyncResponseRejected(XMLWriter &xml, RejectReasonCode code, string description);
81 
82 
83 };
84 
85 } /* namespace libdap */
86 #endif /* D4ASYNCUTIL_H_ */
void writeD4AsyncPending(XMLWriter &xml, string *stylesheet_ref=0)
Write the DAP4 AsyncPending response. Write the DAP4 AsyncPending in XML form.
Definition: D4AsyncUtil.cc:178
-
void writeD2AsyncRequired(XMLWriter &xml, long expectedDelay, long responseLifetime)
Write the DAP2 AsyncRequired response . Write the DAP2 AsyncRequired in XML form. ...
Definition: D4AsyncUtil.cc:335
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
void writeD4AsyncRequired(XMLWriter &xml, long expectedDelay, long responseLifetime, string *stylesheet_ref=0)
Write the DAP4 AsyncRequired response. Print the AsyncRequired in XML form.
Definition: D4AsyncUtil.cc:34
-
void writeD4AsyncResponseRejected(XMLWriter &xml, RejectReasonCode code, string description, string *stylesheet_ref=0)
Write the DAP4 ResponseRejected response. Write the DAP4 AsyncRequired in XML form.
Definition: D4AsyncUtil.cc:256
-
void writeD4AsyncResponseGone(XMLWriter &xml, string *stylesheet_ref=0)
Write the DAP4 AsyncResponseGone response. Write the DAP4 AsyncRequired in XML form.
Definition: D4AsyncUtil.cc:217
- -
void writeD4AsyncAccepted(XMLWriter &xml, long expectedDelay, long responseLifetime, string asyncResourceUrl, string *stylesheet_ref=0)
Write the DAP4 AsyncAccepted response. Write the AsyncAccepted in XML form.
Definition: D4AsyncUtil.cc:105
- -
-
- - - - diff --git a/html/D4AttributeType_8h_source.html b/html/D4AttributeType_8h_source.html deleted file mode 100644 index d3e6de4c0..000000000 --- a/html/D4AttributeType_8h_source.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -libdap: D4AttributeType.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4AttributeType.h
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2013 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 #ifndef d4attributetype_h
26 #define d4attributetype_h
27 
33 enum D4AttributeType {
34  attr_null_c,
35 
36  attr_byte_c,
37  attr_int16_c,
38  attr_uint16_c,
39  attr_int32_c, // Added `attr_' to fix clash with IRIX 5.3.
40  attr_uint32_c,
41  attr_float32_c,
42  attr_float64_c,
43  attr_str_c,
44  attr_url_c,
45 
46  // Added for DAP4
47  attr_int8_c,
48  attr_uint8_c,
49 
50  attr_int64_c,
51  attr_uint64_c,
52 
53 #if 0
54  // just use attr_url_c. jhrg 8/15/13
55  attr_url4_c,
56 #endif
57 
58  attr_enum_c,
59  attr_opaque_c,
60 
61  // These are specific to attributes while the other types are
62  // also supported by the variables. jhrg 4/17/13
63  attr_container_c,
64  attr_otherxml_c
65 };
66 
67 #endif /* d4attributetype_h */
-
- - - - diff --git a/html/D4Attributes_8cc_source.html b/html/D4Attributes_8cc_source.html deleted file mode 100644 index cf34fe0a1..000000000 --- a/html/D4Attributes_8cc_source.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - -libdap: D4Attributes.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4Attributes.cc
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2013 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 #include "config.h"
26 
27 //#define DODS_DEBUG
28 
29 #include "D4Attributes.h"
30 #include "D4AttributeType.h"
31 #include "InternalErr.h"
32 
33 #include "AttrTable.h"
34 
35 #include "util.h"
36 #include "debug.h"
37 #include "DapIndent.h"
38 
39 namespace libdap {
40 
44 string D4AttributeTypeToString(D4AttributeType at)
45 {
46  switch(at) {
47  case attr_null_c:
48  return "null";
49 
50  case attr_byte_c:
51  return "Byte";
52 
53  case attr_int16_c:
54  return "Int16";
55 
56  case attr_uint16_c:
57  return "UInt16";
58 
59  case attr_int32_c:
60  return "Int32";
61 
62  case attr_uint32_c:
63  return "UInt32";
64 
65  case attr_float32_c:
66  return "Float32";
67 
68  case attr_float64_c:
69  return "Float64";
70 
71  case attr_str_c:
72  return "String";
73 
74  case attr_url_c:
75  return "Url";
76 
77  // Added for DAP4
78  case attr_int8_c:
79  return "Int8";
80 
81  case attr_uint8_c:
82  return "UInt8";
83 
84  case attr_int64_c:
85  return "Int64";
86 
87  case attr_uint64_c:
88  return "UInt64";
89 
90  case attr_enum_c:
91  return "Enum";
92 
93  case attr_opaque_c:
94  return "Opaque";
95 
96  // These are specific to attributes while the other types are
97  // also supported by the variables. jhrg 4/17/13
98  case attr_container_c:
99  return "Container";
100 
101  case attr_otherxml_c:
102  return "OtherXML";
103 
104  default:
105  throw InternalErr(__FILE__, __LINE__, "Unsupported attribute type");
106  }
107 }
108 
109 D4AttributeType StringToD4AttributeType(string s)
110 {
111  downcase(s);
112 
113  if (s == "container")
114  return attr_container_c;
115 
116  else if (s == "byte")
117  return attr_byte_c;
118  else if (s == "int8")
119  return attr_int8_c;
120  else if (s == "uint8")
121  return attr_uint8_c;
122  else if (s == "int16")
123  return attr_int16_c;
124  else if (s == "uint16")
125  return attr_uint16_c;
126  else if (s == "int32")
127  return attr_int32_c;
128  else if (s == "uint32")
129  return attr_uint32_c;
130  else if (s == "int64")
131  return attr_int64_c;
132  else if (s == "uint64")
133  return attr_uint64_c;
134 
135  else if (s == "float32")
136  return attr_float32_c;
137  else if (s == "float64")
138  return attr_float64_c;
139 
140  else if (s == "string")
141  return attr_str_c;
142  else if (s == "url")
143  return attr_url_c;
144  else if (s == "otherxml")
145  return attr_otherxml_c;
146  else
147  return attr_null_c;
148 }
149 
150 void
151 D4Attribute::m_duplicate(const D4Attribute &src)
152 {
153  d_name = src.d_name;
154  d_type = src.d_type;
155  d_values = src.d_values;
156  if (src.d_attributes)
157  d_attributes = new D4Attributes(*src.d_attributes);
158  else
159  d_attributes = 0;
160 }
161 
162 D4Attribute::D4Attribute(const D4Attribute &src)
163 {
164  m_duplicate(src);
165 }
166 
167 D4Attribute::~D4Attribute()
168 {
169  delete d_attributes;
170 }
171 
172 D4Attribute &
173 D4Attribute::operator=(const D4Attribute &rhs)
174 {
175  if (this == &rhs) return *this;
176  m_duplicate(rhs);
177  return *this;
178 }
179 
180 D4Attributes *
181 D4Attribute::attributes()
182 {
183  if (!d_attributes) d_attributes = new D4Attributes();
184  return d_attributes;
185 }
186 
195 void
197 {
198  // for every attribute in at, copy it to this.
199  for (AttrTable::Attr_iter i = at.attr_begin(), e = at.attr_end(); i != e; ++i) {
200  string name = at.get_name(i);
201  AttrType type = at.get_attr_type(i);
202 
203  switch (type) {
204  case Attr_container: {
205  D4Attribute *a = new D4Attribute(name, attr_container_c);
206  D4Attributes *attributes = a->attributes(); // allocates a new object
207  attributes->transform_to_dap4(*at.get_attr_table(i));
208  add_attribute_nocopy(a);
209  break;
210  }
211  case Attr_byte: {
212  D4Attribute *a = new D4Attribute(name, attr_byte_c);
213  a->add_value_vector(*at.get_attr_vector(i));
214  add_attribute_nocopy(a);
215  break;
216  }
217  case Attr_int16: {
218  D4Attribute *a = new D4Attribute(name, attr_int16_c);
219  a->add_value_vector(*at.get_attr_vector(i));
220  add_attribute_nocopy(a);
221  break;
222  }
223  case Attr_uint16: {
224  D4Attribute *a = new D4Attribute(name, attr_uint16_c);
225  a->add_value_vector(*at.get_attr_vector(i));
226  add_attribute_nocopy(a);
227  break;
228  }
229  case Attr_int32: {
230  D4Attribute *a = new D4Attribute(name, attr_int32_c);
231  a->add_value_vector(*at.get_attr_vector(i));
232  add_attribute_nocopy(a);
233  break;
234  }
235  case Attr_uint32: {
236  D4Attribute *a = new D4Attribute(name, attr_uint32_c);
237  a->add_value_vector(*at.get_attr_vector(i));
238  add_attribute_nocopy(a);
239  break;
240  }
241  case Attr_float32: {
242  D4Attribute *a = new D4Attribute(name, attr_float32_c);
243  a->add_value_vector(*at.get_attr_vector(i));
244  add_attribute_nocopy(a);
245  break;
246  }
247  case Attr_float64: {
248  D4Attribute *a = new D4Attribute(name, attr_float64_c);
249  a->add_value_vector(*at.get_attr_vector(i));
250  add_attribute_nocopy(a);
251  break;
252  }
253  case Attr_string: {
254  D4Attribute *a = new D4Attribute(name, attr_str_c);
255  a->add_value_vector(*at.get_attr_vector(i));
256  add_attribute_nocopy(a);
257  break;
258  }
259  case Attr_url: {
260  D4Attribute *a = new D4Attribute(name, attr_url_c);
261  a->add_value_vector(*at.get_attr_vector(i));
262  add_attribute_nocopy(a);
263  break;
264  }
265  case Attr_other_xml: {
266  D4Attribute *a = new D4Attribute(name, attr_otherxml_c);
267  a->add_value_vector(*at.get_attr_vector(i));
268  add_attribute_nocopy(a);
269  break;
270  }
271  default:
272  throw InternalErr(__FILE__, __LINE__, "Unknown DAP2 attribute type in D4Attributes::copy_from_dap2()");
273  }
274  }
275 }
276 
277 
278 AttrType get_dap2_AttrType(D4AttributeType d4_type) {
279  switch (d4_type) {
280  case attr_container_c: { return Attr_container; }
281  case attr_byte_c: { return Attr_byte; }
282  case attr_int16_c: { return Attr_int16; }
283  case attr_uint16_c: { return Attr_uint16; }
284  case attr_int32_c: { return Attr_int32; }
285  case attr_uint32_c: { return Attr_uint32; }
286  case attr_float32_c: { return Attr_float32; }
287  case attr_float64_c: { return Attr_float64; }
288  case attr_str_c: { return Attr_string; }
289  case attr_url_c: { return Attr_url; }
290  case attr_otherxml_c: { return Attr_other_xml; }
291 
292  case attr_int8_c: { return Attr_byte; }
293  case attr_uint8_c: { return Attr_byte; }
294  case attr_int64_c: {
295  throw InternalErr(__FILE__, __LINE__, "Unable to convert DAP4 attribute to DAP2. "
296  "There is no accepted DAP2 representation of Int64.");
297  }
298  case attr_uint64_c: {
299  throw InternalErr(__FILE__, __LINE__, "Unable to convert DAP4 attribute to DAP2. "
300  "There is no accepted DAP2 representation of UInt64.");
301  }
302  case attr_enum_c: {
303  throw InternalErr(__FILE__, __LINE__, "Unable to convert DAP4 attribute to DAP2. "
304  "There is no accepted DAP2 representation of Enumeration.");
305  }
306  case attr_opaque_c: {
307  throw InternalErr(__FILE__, __LINE__, "Unable to convert DAP4 attribute to DAP2. "
308  "There is no accepted DAP2 representation of Opaque.");
309  }
310 
311  default:
312  throw InternalErr(__FILE__, __LINE__, "Unknown DAP4 attribute.");
313  }
314 }
315 
322 {
323  // for every attribute in d4_attrs, copy it to d2_attr_table.
324  for (D4Attributes::D4AttributesIter i = attribute_begin(), e = attribute_end(); i != e; ++i) {
325  string name = (*i)->name();
326  D4AttributeType d4_attr_type = (*i)->type();
327  AttrType d2_attr_type = get_dap2_AttrType(d4_attr_type);
328  string d2_attr_type_name = AttrType_to_String(d2_attr_type);
329 
330  switch (d4_attr_type) {
331  case attr_container_c: {
332  AttrTable *child_attr_table = new AttrTable();
333  child_attr_table->set_name(name);
334 
335  (*i)->attributes()->transform_attrs_to_dap2(child_attr_table);
336  d2_attr_table->append_container(child_attr_table, name);
337  break;
338  }
339  default: {
340  for (D4Attribute::D4AttributeIter vi = (*i)->value_begin(), ve = (*i)->value_end(); vi != ve; vi++) {
341  d2_attr_table->append_attr(name, d2_attr_type_name, *vi);
342  }
343 
344  break;
345  }
346  }
347  }
348 }
349 
350 #if 0
351 
360 void D4Attributes::load_AttrTable(AttrTable *d2_attr_table, D4Attributes *d4_attrs)
361 {
362  // for every attribute in d4_attrs, copy it to d2_attr_table.
363  for (D4Attributes::D4AttributesIter i = d4_attrs->attribute_begin(), e = d4_attrs->attribute_end(); i != e; ++i) {
364  string name = (*i)->name();
365  D4AttributeType d4_attr_type = (*i)->type();
366  string d2_attr_type_name = AttrType_to_String(get_dap2_AttrType(d4_attr_type));
367 
368 #if 0
369  D4Attribute::D4AttributeIter vitr = (*i)->value_begin();
370  D4Attribute::D4AttributeIter end = (*i)->value_end();
371 
372  vector<string> values;
373  for (; vitr != end; vitr++) {
374  values.push_back((*vitr));
375  }
376 #endif
377 
378  switch (d4_attr_type) {
379  case attr_container_c: {
380  // Attr_container
381  AttrTable *child_attr_table = new AttrTable();
382  child_attr_table->set_name(name);
383 
384  load_AttrTable(child_attr_table, (*i)->attributes());
385  d2_attr_table->append_container(child_attr_table, name);
386  break;
387  }
388  default: {
389  for (D4Attribute::D4AttributeIter vi = (*i)->value_begin(), ve = (*i)->value_end(); vi != ve; vi++) {
390  d2_attr_table->append_attr(name, d2_attr_type_name, *vi);
391  }
392 
393  break;
394  }
395  }
396  }
397 }
398 
399 
407 AttrTable *D4Attributes::get_AttrTable(const string name)
408 {
409  AttrTable *at = new AttrTable();
410  transform_attrs_to_dap2(at);
411 #if 0
412  load_AttrTable(at, this);
413 #endif
414  at->set_name(name);
415  return at;
416 }
417 #endif
418 
419 D4Attribute *
420 D4Attributes::find_depth_first(const string &name, D4AttributesIter i)
421 {
422  if (i == attribute_end())
423  return 0;
424  else if ((*i)->name() == name)
425  return *i;
426  else if ((*i)->type() == attr_container_c)
427  return find_depth_first(name, (*i)->attributes()->attribute_begin());
428  else
429  return find_depth_first(name, ++i);
430 }
431 
432 D4Attribute *
433 D4Attributes::find(const string &name)
434 {
435  return find_depth_first(name, attribute_begin());
436 }
437 
441 D4Attribute *
442 D4Attributes::get(const string &fqn)
443 {
444  // name1.name2.name3
445  // name1
446  // name1.name2
447  size_t pos = fqn.find('.');
448  string part = fqn.substr(0, pos);
449  string rest= "";
450 
451  if (pos != string::npos)
452  rest = fqn.substr(pos + 1);
453 
454  DBG(cerr << "part: '" << part << "'; rest: '" << rest << "'" << endl);
455 
456  if (!part.empty()) {
457  if (!rest.empty()) {
458  D4AttributesIter i = attribute_begin();
459  while (i != attribute_end()) {
460  if ((*i)->name() == part && (*i)->type() == attr_container_c)
461  return (*i)->attributes()->get(rest);
462  ++i;
463  }
464  }
465  else {
466  D4AttributesIter i = attribute_begin();
467  while (i != attribute_end()) {
468  if ((*i)->name() == part)
469  return (*i);
470  ++i;
471  }
472  }
473  }
474 
475  return 0;
476 }
477 
478 void
479 D4Attribute::print_dap4(XMLWriter &xml) const
480 {
481  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) "Attribute") < 0)
482  throw InternalErr(__FILE__, __LINE__, "Could not write Attribute element");
483  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name", (const xmlChar*)name().c_str()) < 0)
484  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
485  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "type", (const xmlChar*) D4AttributeTypeToString(type()).c_str()) < 0)
486  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for type");
487 
488  switch (type()) {
489  case attr_container_c:
490  if (!d_attributes)
491  throw InternalErr(__FILE__, __LINE__, "Null Attribute container");
492  d_attributes->print_dap4(xml);
493  break;
494 
495  case attr_otherxml_c:
496  if (num_values() != 1)
497  throw Error("OtherXML attributes cannot be vector-valued.");
498  if (xmlTextWriterWriteRaw(xml.get_writer(), (const xmlChar*) value(0).c_str()) < 0)
499  throw InternalErr(__FILE__, __LINE__, "Could not write OtherXML value");
500  break;
501 
502  default: {
503  // Assume only valid types make it into instances
504  D4AttributeCIter i = d_values.begin();//value_begin();
505  while (i != d_values.end()) {
506  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) "Value") < 0)
507  throw InternalErr(__FILE__, __LINE__, "Could not write value element");
508 
509  if (xmlTextWriterWriteString(xml.get_writer(), (const xmlChar*) (*i++).c_str()) < 0)
510  throw InternalErr(__FILE__, __LINE__, "Could not write attribute value");
511 
512  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
513  throw InternalErr(__FILE__, __LINE__, "Could not end value element");
514  }
515 
516  break;
517  }
518  }
519 
520  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
521  throw InternalErr(__FILE__, __LINE__, "Could not end Attribute element");
522 }
523 
532 void
533 D4Attribute::dump(ostream &strm) const
534 {
535  strm << DapIndent::LMarg << "D4Attribute::dump - (" << (void *)this << ")" << endl;
536 
537  DapIndent::Indent() ;
538 
539  XMLWriter xml;
540  print_dap4(xml);
541  strm << DapIndent::LMarg << xml.get_doc() << flush;
542 
543  DapIndent::UnIndent() ;
544 }
545 
546 
547 void
548 D4Attributes::print_dap4(XMLWriter &xml) const
549 {
550  if (empty())
551  return;
552 
553  D4AttributesCIter i = d_attrs.begin();
554  while (i != d_attrs.end()) {
555  (*i++)->print_dap4(xml);
556  }
557 }
558 
567 void
568 D4Attributes::dump(ostream &strm) const
569 {
570  strm << DapIndent::LMarg << "D4Attributes::dump - (" << (void *)this << ")" << endl;
571 
572  DapIndent::Indent() ;
573 
574  XMLWriter xml;
575  print_dap4(xml);
576  strm << DapIndent::LMarg << xml.get_doc() << flush;
577 
578  DapIndent::UnIndent() ;
579 }
580 
581 
582 } // namespace libdap
583 
-
virtual void dump(ostream &strm) const
dumps information about this object
-
virtual Attr_iter attr_end()
Definition: AttrTable.cc:719
-
void downcase(string &s)
Definition: util.cc:563
-
D4AttributesIter attribute_begin()
Get an iterator to the start of the enumerations.
Definition: D4Attributes.h:151
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
string AttrType_to_String(const AttrType at)
Definition: AttrTable.cc:97
- -
virtual string get_name() const
Get the name of this attribute table.
Definition: AttrTable.cc:238
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
void transform_attrs_to_dap2(AttrTable *d2_attr_table)
Copy the attributes from this D4Attributes object to a DAP2 AttrTable.
-
virtual AttrTable * append_container(const string &name)
Add a container to the attribute table.
Definition: AttrTable.cc:410
-
virtual AttrTable * get_attr_table(const string &name)
Get an attribute container.
Definition: AttrTable.cc:607
-
virtual Attr_iter attr_begin()
Definition: AttrTable.cc:711
-
virtual unsigned int append_attr(const string &name, const string &type, const string &value)
Add an attribute to the table.
Definition: AttrTable.cc:307
-
virtual AttrType get_attr_type(const string &name)
Get the type of an attribute.
Definition: AttrTable.cc:621
-
D4AttributesIter attribute_end()
Get an iterator to the end of the enumerations.
Definition: D4Attributes.h:154
-
virtual vector< string > * get_attr_vector(const string &name)
Get a vector-valued attribute.
Definition: AttrTable.cc:653
-
D4Attribute * get(const string &fqn)
- -
A class for error processing.
Definition: Error.h:92
-
string D4AttributeTypeToString(D4AttributeType at)
Definition: D4Attributes.cc:44
-
virtual void set_name(const string &n)
Set the name of this attribute table.
Definition: AttrTable.cc:245
-
void transform_to_dap4(AttrTable &at)
copy attributes from DAP2 to DAP4
-
AttrType
Definition: AttrTable.h:81
-
virtual void dump(ostream &strm) const
dumps information about this object
-
-
- - - - diff --git a/html/D4Attributes_8h_source.html b/html/D4Attributes_8h_source.html deleted file mode 100644 index 689e229fa..000000000 --- a/html/D4Attributes_8h_source.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -libdap: D4Attributes.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4Attributes.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2013 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef _d4attributes_h
27 #define _d4attributes_h 1
28 
29 #include <string>
30 #include <vector>
31 
32 #include "DapObj.h"
33 #include "D4AttributeType.h"
34 #include "XMLWriter.h"
35 
36 using namespace std;
37 
38 namespace libdap
39 {
40 
41 class AttrTable;
42 class D4Attributes;
43 
44 class D4Attribute : public DapObj {
45  string d_name;
46  D4AttributeType d_type; // Attributes are limited to the simple types
47 
48  // If d_type is attr_container_c is true, use d_attributes to read
49  // the contained attributes, otherwise use d_values to read the vector
50  // of values.
51  D4Attributes *d_attributes;
52 
53  // IF d_type is attr_otherxml_c, the first string in d_values holds the
54  // XML, otherwise, the strings hold attributes of type d_type.
55  vector<string> d_values;
56 
57  // perform a deep copy
58  void m_duplicate(const D4Attribute &src);
59 
60 public:
61  typedef vector<string>::iterator D4AttributeIter;
62  typedef vector<string>::const_iterator D4AttributeCIter;
63 
64  D4Attribute() : d_name(""), d_type(attr_null_c), d_attributes(0) {}
65  D4Attribute(const string &name, D4AttributeType type)
66  : d_name(name), d_type(type), d_attributes(0) {}
67 
68  D4Attribute(const D4Attribute &src);
69  ~D4Attribute();
70  D4Attribute &operator=(const D4Attribute &rhs);
71 
72  string name() const { return d_name; }
73  void set_name(const string &name) { d_name = name; }
74 
75  D4AttributeType type() const { return d_type; }
76  void set_type(D4AttributeType type) { d_type = type; }
77 
78  void add_value(const string &value) { d_values.push_back(value); }
79  void add_value_vector(const vector<string> &values) { d_values = values; }
80 
81  D4AttributeIter value_begin() { return d_values.begin(); }
82  D4AttributeIter value_end() { return d_values.end(); }
83 
84  unsigned int num_values() const { return d_values.size(); }
85  string value(unsigned int i) const { return d_values[i]; }
86 
87  D4Attributes *attributes();
88 
89  void print_dap4(XMLWriter &xml) const;
90 
91  virtual void dump(ostream &strm) const;
92 };
93 
94 class D4Attributes : public DapObj {
95 public:
96  typedef vector<D4Attribute*>::iterator D4AttributesIter;
97  typedef vector<D4Attribute*>::const_iterator D4AttributesCIter;
98 
99 private:
100  vector<D4Attribute*> d_attrs;
101 
102  void m_duplicate(const D4Attributes &src) {
103  D4AttributesCIter i = src.d_attrs.begin();
104  while (i != src.d_attrs.end()) {
105  d_attrs.push_back(new D4Attribute(**i++)); // deep copy
106  }
107  }
108 
109  D4Attribute *find_depth_first(const string &name, D4AttributesIter i);
110 
111 public:
112 
113  D4Attributes() {}
114  D4Attributes(const D4Attributes &rhs) {
115  m_duplicate(rhs);
116  }
117 
118  virtual ~D4Attributes() {
119  D4AttributesIter i = d_attrs.begin();
120  while(i != d_attrs.end()) {
121  delete *i++;
122  }
123  }
124 
125  D4Attributes &operator=(const D4Attributes &rhs) {
126  if (this == &rhs) return *this;
127  m_duplicate(rhs);
128  return *this;
129  }
130 
131  void transform_to_dap4(AttrTable &at);
132  void transform_attrs_to_dap2(AttrTable *d2_attr_table);
133 
134 #if 0
135  // Can these be replaced with transform_to_dap2() above? jhrg 6/17/19
136  AttrTable *get_AttrTable(const std::string name);
137  static void load_AttrTable(AttrTable *d2_attr_table, D4Attributes *d4_attrs);
138 #endif
139 
140  bool empty() const { return d_attrs.empty(); }
141 
142  void add_attribute(D4Attribute *attr) {
143  d_attrs.push_back(new D4Attribute(*attr));
144  }
145 
146  void add_attribute_nocopy(D4Attribute *attr) {
147  d_attrs.push_back(attr);
148  }
149 
151  D4AttributesIter attribute_begin() { return d_attrs.begin(); }
152 
154  D4AttributesIter attribute_end() { return d_attrs.end(); }
155 
156  D4Attribute *find(const string &name);
157  D4Attribute *get(const string &fqn);
158 
159  // D4Attribute *find_container(const string &name);
160  // D4Attribute *get_container(const string &fqn);
161 
162  // Might add erase()
163 
164  void print_dap4(XMLWriter &xml) const;
165 
166  virtual void dump(ostream &strm) const;
167 };
168 
169 string D4AttributeTypeToString(D4AttributeType at);
170 D4AttributeType StringToD4AttributeType(string s);
171 
172 } // namespace libdap
173 
174 #endif // _d4attributes_h
-
D4AttributesIter attribute_begin()
Get an iterator to the start of the enumerations.
Definition: D4Attributes.h:151
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
- -
STL namespace.
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
libdap base object for common functionality of libdap objects
Definition: DapObj.h:50
-
D4AttributesIter attribute_end()
Get an iterator to the end of the enumerations.
Definition: D4Attributes.h:154
- -
string D4AttributeTypeToString(D4AttributeType at)
Definition: D4Attributes.cc:44
-
-
- - - - diff --git a/html/D4BaseTypeFactory_8cc_source.html b/html/D4BaseTypeFactory_8cc_source.html deleted file mode 100644 index 3fe55c40b..000000000 --- a/html/D4BaseTypeFactory_8cc_source.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - -libdap: D4BaseTypeFactory.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4BaseTypeFactory.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2005 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #include "config.h"
27 
28 #include <string>
29 
30 #include "BaseType.h"
31 #include "Type.h"
32 
33 #include "Byte.h"
34 #include "Int8.h"
35 #include "Int16.h"
36 #include "UInt16.h"
37 #include "Int32.h"
38 #include "UInt32.h"
39 
40 #include "Int64.h"
41 #include "UInt64.h"
42 
43 #include "Float32.h"
44 #include "Float64.h"
45 
46 #include "D4Enum.h"
47 
48 #include "Str.h"
49 #include "Url.h"
50 
51 #include "D4Opaque.h"
52 
53 #include "Array.h"
54 
55 #include "Structure.h"
56 #include "D4Sequence.h"
57 
58 #include "D4Group.h"
59 
60 #include "D4BaseTypeFactory.h"
61 #include "debug.h"
62 
63 namespace libdap {
64 
65 BaseType *D4BaseTypeFactory::NewVariable(Type t, const string &name) const
66 {
67  switch (t) {
68  case dods_byte_c:
69  return NewByte(name);
70  case dods_char_c:
71  return NewChar(name);
72  case dods_uint8_c:
73  return NewUInt8(name);
74  case dods_int8_c:
75  return NewInt8(name);
76 
77  case dods_int16_c:
78  return NewInt16(name);
79  case dods_uint16_c:
80  return NewUInt16(name);
81  case dods_int32_c:
82  return NewInt32(name);
83  case dods_uint32_c:
84  return NewUInt32(name);
85 
86  case dods_int64_c:
87  return NewInt64(name);
88  case dods_uint64_c:
89  return NewUInt64(name);
90 
91  case dods_float32_c:
92  return NewFloat32(name);
93  case dods_float64_c:
94  return NewFloat64(name);
95 
96  case dods_enum_c:
97  return NewEnum(name);
98 
99  case dods_str_c:
100  return NewStr(name);
101  case dods_url_c:
102  return NewURL(name);
103 
104  case dods_opaque_c:
105  return NewOpaque(name);
106 
107  case dods_structure_c:
108  return NewStructure(name);
109 
110  case dods_sequence_c:
111  return NewD4Sequence(name);
112 
113  case dods_array_c:
114  return NewArray(name);
115 
116  case dods_group_c:
117  return NewGroup(name);
118 
119  default:
120  throw InternalErr(__FILE__, __LINE__, "Unimplemented type in DAP4");
121  }
122 }
123 
124 Byte *
125 D4BaseTypeFactory::NewByte(const string &n) const
126 {
127  Byte *b = new Byte(n);
128  b->set_is_dap4(true);
129  return b;
130 }
131 
132 // Use the type constants specific to Char and UInt8 so the print reps will
133 // match the server's idea of the types.
134 Byte *
135 D4BaseTypeFactory::NewChar(const string &n) const
136 {
137  Byte *b = new Byte(n);
138  b->set_type(dods_char_c);
139  b->set_is_dap4(true);
140  return b;
141 }
142 
143 Byte *
144 D4BaseTypeFactory::NewUInt8(const string &n) const
145 {
146  Byte *b = new Byte(n);
147  b->set_type(dods_uint8_c);
148  b->set_is_dap4(true);
149  return b;
150 }
151 
152 Int8 *
153 D4BaseTypeFactory::NewInt8(const string &n) const
154 {
155  Int8 *b = new Int8(n);
156  b->set_is_dap4(true);
157  return b;
158 }
159 
160 Int16 *
161 D4BaseTypeFactory::NewInt16(const string &n) const
162 {
163  Int16 *b = new Int16(n);
164  b->set_is_dap4(true);
165  return b;
166 }
167 
168 UInt16 *
169 D4BaseTypeFactory::NewUInt16(const string &n) const
170 {
171  UInt16 *b = new UInt16(n);
172  b->set_is_dap4(true);
173  return b;
174 }
175 
176 Int32 *
177 D4BaseTypeFactory::NewInt32(const string &n) const
178 {
179  DBG(cerr << "Inside DAP4BaseTypeFactory::NewInt32" << endl);
180  Int32 *b = new Int32(n);
181  b->set_is_dap4(true);
182  return b;
183 }
184 
185 UInt32 *
186 D4BaseTypeFactory::NewUInt32(const string &n) const
187 {
188  UInt32 *b = new UInt32(n);
189  b->set_is_dap4(true);
190  return b;
191 }
192 
193 Int64 *
194 D4BaseTypeFactory::NewInt64(const string &n) const
195 {
196  DBG(cerr << "Inside DAP4BaseTypeFactory::NewInt64" << endl);
197  Int64 *b = new Int64(n);
198  b->set_is_dap4(true);
199  return b;
200 }
201 
202 UInt64 *
203 D4BaseTypeFactory::NewUInt64(const string &n) const
204 {
205  UInt64 *b = new UInt64(n);
206  b->set_is_dap4(true);
207  return b;
208 }
209 
210 Float32 *
211 D4BaseTypeFactory::NewFloat32(const string &n) const
212 {
213  Float32 *b = new Float32(n);
214  b->set_is_dap4(true);
215  return b;
216 }
217 
218 Float64 *
219 D4BaseTypeFactory::NewFloat64(const string &n) const
220 {
221  Float64 *b = new Float64(n);
222  b->set_is_dap4(true);
223  return b;
224 }
225 
233 D4Enum *
234 D4BaseTypeFactory::NewEnum(const string &name, Type type) const
235 {
236  return new D4Enum(name, type);
237 }
238 
239 
240 Str *
241 D4BaseTypeFactory::NewStr(const string &n) const
242 {
243  Str *b = new Str(n);
244  b->set_is_dap4(true);
245  return b;
246 }
247 
248 Url *
249 D4BaseTypeFactory::NewUrl(const string &n) const
250 {
251  Url *b = new Url(n);
252  b->set_is_dap4(true);
253  return b;
254 }
255 
256 D4Opaque *
257 D4BaseTypeFactory::NewOpaque(const string &n) const
258 {
259  return new D4Opaque(n);
260 }
261 
264 Url *
265 D4BaseTypeFactory::NewURL(const string &n) const
266 {
267  Url *b = new Url(n);
268  b->set_is_dap4(true);
269  return b;
270 }
271 
272 Array *
273 D4BaseTypeFactory::NewArray(const string &n, BaseType *v) const
274 {
275  return new Array(n, v, true /* is_dap4 */);
276 }
277 
278 Structure *
279 D4BaseTypeFactory::NewStructure(const string &n) const
280 {
281  Structure *b = new Structure(n);
282  b->set_is_dap4(true);
283  return b;
284 }
285 
286 D4Sequence *
287 D4BaseTypeFactory::NewD4Sequence(const string &n) const
288 {
289  return new D4Sequence(n);
290 }
291 
292 D4Group *
293 D4BaseTypeFactory::NewGroup(const string &n) const
294 {
295  return new D4Group(n);
296 }
297 
298 } // namespace libdap
virtual BaseType * NewVariable(Type t, const string &name) const
-
Holds an 8-bit signed integer value.
Definition: Int8.h:42
-
Holds a64-bit signed integer.
Definition: Int64.h:49
-
Holds an Internet address (URL).
Definition: Url.h:68
-
Holds an unsigned 16-bit integer.
Definition: UInt16.h:57
-
virtual D4Enum * NewEnum(const string &n="", Type type=dods_null_c) const
-
Holds a structure (aggregate) type.
Definition: Structure.h:83
-
Type
Identifies the data type.
Definition: Type.h:94
-
Holds a 32-bit floating point value.
Definition: Float32.h:61
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
Holds character string data.
Definition: Str.h:62
-
Holds a DAP4 enumeration.
Definition: D4Enum.h:61
-
Holds a 16-bit signed integer value.
Definition: Int16.h:59
-
Holds a sequence.
Definition: D4Sequence.h:133
-
virtual void set_type(const Type &t)
Sets the type of the class instance.
Definition: BaseType.cc:372
-
Holds a 64-bit unsigned integer.
Definition: UInt64.h:49
-
virtual Url * NewURL(const string &n="") const
- -
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
Holds a 64-bit (double precision) floating point value.
Definition: Float64.h:60
-
Holds a single byte.
Definition: Byte.h:60
- -
Holds a 32-bit unsigned integer.
Definition: UInt32.h:59
-
A multidimensional array of identical data types.
Definition: Array.h:112
-
Holds a 32-bit signed integer.
Definition: Int32.h:65
-
-
- - - - diff --git a/html/D4BaseTypeFactory_8h_source.html b/html/D4BaseTypeFactory_8h_source.html deleted file mode 100644 index e0e10ac99..000000000 --- a/html/D4BaseTypeFactory_8h_source.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - -libdap: D4BaseTypeFactory.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4BaseTypeFactory.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2012 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef dap4_base_type_factory_h
27 #define dap4_base_type_factory_h
28 
29 #include <string>
30 
31 #include "BaseTypeFactory.h"
32 #include "Type.h"
33 
34 // Class declarations; Make sure to include the corresponding headers in the
35 // implementation file.
36 
37 namespace libdap
38 {
39 
40 class Byte;
41 class Int8;
42 class Int16;
43 class UInt16;
44 class Int32;
45 class UInt32;
46 class Int64;
47 class UInt64;
48 
49 class Float32;
50 class Float64;
51 
52 class Str;
53 class Url;
54 
55 class D4Enum;
56 class D4Opaque;
57 
58 class Array;
59 
60 class Structure;
61 class D4Sequence;
62 
63 class D4Group;
64 
65 class BaseType;
66 
73 {
74 public:
76  {}
77  virtual ~D4BaseTypeFactory()
78  {}
79 
80  virtual BaseType *NewVariable(Type t, const string &name) const;
81 
82  virtual BaseTypeFactory *ptr_duplicate() const {
83  return new D4BaseTypeFactory;
84  }
85 
86  virtual Byte *NewByte(const string &n = "") const;
87 
88  // The Int8 types are new for DAP4
89  virtual Int8 *NewInt8(const string &n = "") const;
90  virtual Byte *NewChar(const string &n = "") const;
91  virtual Byte *NewUInt8(const string &n = "") const;
92 
93  virtual Int16 *NewInt16(const string &n = "") const;
94  virtual UInt16 *NewUInt16(const string &n = "") const;
95  virtual Int32 *NewInt32(const string &n = "") const;
96  virtual UInt32 *NewUInt32(const string &n = "") const;
97 
98  // New for DAP4
99  virtual Int64 *NewInt64(const string &n = "") const;
100  virtual UInt64 *NewUInt64(const string &n = "") const;
101 
102  virtual Float32 *NewFloat32(const string &n = "") const;
103  virtual Float64 *NewFloat64(const string &n = "") const;
104 
105  virtual D4Enum *NewEnum(const string &n = "", Type type = dods_null_c) const;
106 
107  virtual Str *NewStr(const string &n = "") const;
108  virtual Url *NewUrl(const string &n = "") const;
109  virtual Url *NewURL(const string &n = "") const;
110 
111  virtual D4Opaque *NewOpaque(const string &n = "") const;
112 
113  virtual Array *NewArray(const string &n = "", BaseType *v = 0) const;
114 
115  virtual Structure *NewStructure(const string &n = "") const;
116  virtual D4Sequence *NewD4Sequence(const string &n = "") const;
117 
118  virtual D4Group *NewGroup(const string &n = "") const;
119 };
120 
121 } // namespace libdap
122 
123 #endif // dap4_base_type_factory_h
virtual BaseType * NewVariable(Type t, const string &name) const
-
Holds an 8-bit signed integer value.
Definition: Int8.h:42
-
Holds a64-bit signed integer.
Definition: Int64.h:49
-
Holds an Internet address (URL).
Definition: Url.h:68
-
Holds an unsigned 16-bit integer.
Definition: UInt16.h:57
-
virtual D4Enum * NewEnum(const string &n="", Type type=dods_null_c) const
-
Holds a structure (aggregate) type.
Definition: Structure.h:83
-
Type
Identifies the data type.
Definition: Type.h:94
-
Holds a 32-bit floating point value.
Definition: Float32.h:61
-
virtual BaseTypeFactory * ptr_duplicate() const
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
Holds character string data.
Definition: Str.h:62
-
Holds a DAP4 enumeration.
Definition: D4Enum.h:61
-
Holds a 16-bit signed integer value.
Definition: Int16.h:59
- -
Holds a sequence.
Definition: D4Sequence.h:133
-
Holds a 64-bit unsigned integer.
Definition: UInt64.h:49
- -
virtual Url * NewURL(const string &n="") const
- -
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
Holds a 64-bit (double precision) floating point value.
Definition: Float64.h:60
-
Holds a single byte.
Definition: Byte.h:60
- -
Holds a 32-bit unsigned integer.
Definition: UInt32.h:59
-
A multidimensional array of identical data types.
Definition: Array.h:112
-
Holds a 32-bit signed integer.
Definition: Int32.h:65
-
-
- - - - diff --git a/html/D4CEScanner_8h_source.html b/html/D4CEScanner_8h_source.html deleted file mode 100644 index 608c34da3..000000000 --- a/html/D4CEScanner_8h_source.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -libdap: D4CEScanner.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4CEScanner.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 
27 #ifndef D4CESCANNER_H_
28 #define D4CESCANNER_H_
29 
30 // Only include FlexLexer.h if it hasn't been already included
31 #if ! defined(yyFlexLexerOnce)
32 #undef yyFlexLexer
33 #define yyFlexLexer d4_ceFlexLexer
34 #include "FlexLexer.h"
35 #endif
36 
37 # ifndef YY_NULL
38 # if defined __cplusplus && 201103L <= __cplusplus
39 # define YY_NULL nullptr
40 # else
41 # define YY_NULL 0
42 # endif
43 # endif
44 
45 #undef YY_DECL
46 #define YY_DECL int libdap::D4CEScanner::yylex()
47 
48 #include "d4_ce_parser.tab.hh"
49 
50 namespace libdap {
51 
52 class D4CEScanner : public d4_ceFlexLexer{
53 public:
54 
55  D4CEScanner(std::istream &in) : d4_ceFlexLexer(&in), yylval(0), loc(0) { };
56 
57  int yylex(libdap::D4CEParser::semantic_type *lval, libdap::location *l)
58  {
59  loc = l;
60  yylval = lval;
61  return( yylex() );
62  }
63 
64 private:
65  /* hide this one from public view */
66  int yylex();
67 
68  /* yyval ptr */
69  libdap::D4CEParser::semantic_type *yylval;
70 
71  libdap::location *loc;
72 };
73 
74 } /* end namespace libdap */
75 
76 #endif /* D4CESCANNER_H_ */
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- -
-
- - - - diff --git a/html/D4Connect_8cc_source.html b/html/D4Connect_8cc_source.html deleted file mode 100644 index 73ece38f8..000000000 --- a/html/D4Connect_8cc_source.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - -libdap: D4Connect.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4Connect.cc
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2002,2003 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 // Dan Holloway <dholloway@gso.uri.edu>
9 // Reza Nekovei <reza@intcomm.net>
10 //
11 // This library is free software; you can redistribute it and/or
12 // modify it under the terms of the GNU Lesser General Public
13 // License as published by the Free Software Foundation; either
14 // version 2.1 of the License, or (at your option) any later version.
15 //
16 // This library is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 // Lesser General Public License for more details.
20 //
21 // You should have received a copy of the GNU Lesser General Public
22 // License along with this library; if not, write to the Free Software
23 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 //
25 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
26 
27 // (c) COPYRIGHT URI/MIT 1994-2002
28 // Please read the full copyright statement in the file COPYRIGHT_URI.
29 //
30 // Authors:
31 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
32 // dan Dan Holloway <dholloway@gso.uri.edu>
33 // reza Reza Nekovei <reza@intcomm.net>
34 
35 #include "config.h"
36 // #define DODS_DEBUG 1
37 
38 #include <cassert>
39 
40 #include <sstream>
41 
42 #include "D4Connect.h"
43 #include "HTTPConnect.h"
44 #include "Response.h"
45 #include "DMR.h"
46 #include "D4Group.h"
47 
48 #include "D4ParserSax2.h"
49 #include "chunked_stream.h"
50 #include "chunked_istream.h"
51 #include "D4StreamUnMarshaller.h"
52 
53 #include "escaping.h"
54 #include "mime_util.h"
55 #include "debug.h"
56 
57 using namespace std;
58 
59 namespace libdap {
60 
63 void D4Connect::process_dmr(DMR &dmr, Response &rs)
64 {
65  DBG(cerr << "Entering D4Connect::process_dmr" << endl);
66 
67  dmr.set_dap_version(rs.get_protocol());
68 
69  DBG(cerr << "Entering process_data. Response.getVersion() = " << rs.get_version() << endl);
70  switch (rs.get_type()) {
71  case dap4_error: {
72 #if 0
73  Error e;
74  if (!e.parse(rs.get_stream()))
75  throw InternalErr(__FILE__, __LINE__, "Could not parse the Error object returned by the server!");
76  throw e;
77 #endif
78  throw InternalErr(__FILE__, __LINE__, "DAP4 errors not processed yet: FIXME!");
79  }
80 
81  case web_error:
82  // Web errors (those reported in the return document's MIME header)
83  // are processed by the WWW library.
84  throw InternalErr(__FILE__, __LINE__,
85  "An error was reported by the remote httpd; this should have been processed by HTTPConnect.");
86 
87  case dap4_dmr: {
88  // parse the DMR
89  try {
90  D4ParserSax2 parser;
91  // When parsing a data response, we use the permissive mode of the DMR parser
92  // (which allows Map elements to reference Arrays that are not in the DMR).
93  // Do not use that mode when parsing the DMR response - assume the DMR is
94  // valid. jhrg 4/13/16
95  parser.intern(*rs.get_cpp_stream(), &dmr);
96  }
97  catch (Error &e) {
98  cerr << "Exception: " << e.get_error_message() << endl;
99  return;
100  }
101  catch (std::exception &e) {
102  cerr << "Exception: " << e.what() << endl;
103  return;
104  }
105  catch (...) {
106  cerr << "Exception: unknown error" << endl;
107  return;
108  }
109 
110  return;
111  }
112 
113  default:
114  throw Error("Unknown response type");
115  }
116 }
117 
120 void D4Connect::process_data(DMR &data, Response &rs)
121 {
122  DBG(cerr << "Entering D4Connect::process_data" << endl);
123 
124  assert(rs.get_cpp_stream()); // DAP4 code uses cpp streams
125 
126  data.set_dap_version(rs.get_protocol());
127 
128  DBG(cerr << "Entering process_data. Response.getVersion() = " << rs.get_version() << endl);
129  switch (rs.get_type()) {
130  case dap4_error: {
131  throw InternalErr(__FILE__, __LINE__, "DAP4 errors not processed yet: FIXME!");
132  }
133 
134  case web_error:
135  // Web errors (those reported in the return document's MIME header)
136  // are processed by the WWW library.
137  throw InternalErr(__FILE__, __LINE__,
138  "An error was reported by the remote httpd; this should have been processed by HTTPConnect..");
139 
140  case dap4_data: {
141  chunked_istream cis(*(rs.get_cpp_stream()), CHUNK_SIZE);
142  // parse the DMR, stopping when the boundary is found.
143  try {
144  // force chunk read
145  // get chunk size
146  int chunk_size = cis.read_next_chunk();
147  if (chunk_size < 0)
148  throw Error("Found an unexpected end of input (EOF) while reading a DAP4 data response. (1)");
149 
150  // get chunk
151  char chunk[chunk_size];
152  cis.read(chunk, chunk_size);
153  // parse char * with given size
154  D4ParserSax2 parser;
155  // permissive mode allows references to Maps that are not in the response.
156  // Use this mode when parsing a data response (but not the DMR). jhrg 4/13/16
157  parser.set_strict(false);
158 
159  // '-2' to discard the CRLF pair
160  parser.intern(chunk, chunk_size - 2, &data);
161  }
162  catch (Error &e) {
163  cerr << "Exception: " << e.get_error_message() << endl;
164  return;
165  }
166  catch (std::exception &e) {
167  cerr << "Exception: " << e.what() << endl;
168  return;
169  }
170  catch (...) {
171  cerr << "Exception: unknown error" << endl;
172  return;
173  }
174 
175  D4StreamUnMarshaller um(cis, cis.twiddle_bytes());
176  data.root()->deserialize(um, data);
177 
178  return;
179  }
180 
181  default:
182  throw Error("Unknown response type");
183  }
184 }
185 
194 void D4Connect::parse_mime(Response &rs)
195 {
196  rs.set_version("dods/0.0"); // initial value; for backward compatibility.
197  rs.set_protocol("2.0");
198 
199  istream &data_source = *rs.get_cpp_stream();
200  string mime = get_next_mime_header(data_source);
201  while (!mime.empty()) {
202  string header, value;
203  parse_mime_header(mime, header, value);
204 
205  // Note that this is an ordered list
206  if (header == "content-description") {
207  DBG(cout << header << ": " << value << endl);
208  rs.set_type(get_description_type(value));
209  }
210  // Use the value of xdods-server only if no other value has been read
211  else if (header == "xdods-server" && rs.get_version() == "dods/0.0") {
212  DBG(cout << header << ": " << value << endl);
213  rs.set_version(value);
214  }
215  // This trumps 'xdods-server' and 'server'
216  else if (header == "xopendap-server") {
217  DBG(cout << header << ": " << value << endl);
218  rs.set_version(value);
219  }
220  else if (header == "xdap") {
221  DBG(cout << header << ": " << value << endl);
222  rs.set_protocol(value);
223  }
224  // Only look for 'server' if no other header supplies this info.
225  else if (rs.get_version() == "dods/0.0" && header == "server") {
226  DBG(cout << header << ": " << value << endl);
227  rs.set_version(value);
228  }
229 
230  mime = get_next_mime_header(data_source);
231  }
232 }
233 
234 // public mfuncs
235 
242 D4Connect::D4Connect(const string &url, string uname, string password) :
243  d_http(0), d_local(false), d_URL(""), d_UrlQueryString(""), d_server("unknown"), d_protocol("4.0")
244 {
245  string name = prune_spaces(url);
246 
247  // Figure out if the URL starts with 'http', if so, make sure that we
248  // talk to an instance of HTTPConnect.
249  if (name.find("http") == 0) {
250  DBG(cerr << "Connect: The identifier is an http URL" << endl);
251  d_http = new HTTPConnect(RCReader::instance());
252  d_http->set_use_cpp_streams(true);
253 
254  d_URL = name;
255 
256  // Find and store any CE given with the URL.
257  string::size_type dotpos = name.find('?');
258  if (dotpos != std::string::npos) { // Found a match.
259  d_URL = name.substr(0, dotpos);
260 
261  d_UrlQueryString = name.substr(dotpos + 1);
262 
263  if (d_UrlQueryString.find(DAP4_CE_QUERY_KEY) != std::string::npos) {
264  std::stringstream msg;
265  msg << endl;
266  msg << "WARNING: A DAP4 constraint expression key was found in the query string!" << endl;
267  msg << "The submitted dataset URL: " << name << endl;
268  msg << "Contains the query string: " << d_UrlQueryString << endl;
269  msg << "This will cause issues when making DAP4 requests that specify additional constraints. " << endl;
270  cerr << msg.str() << endl;
271  // throw Error(malformed_expr, msg.str());
272  }
273 
274  }
275  }
276  else {
277  DBG(cerr << "Connect: The identifier is a local data source." << endl);
278  d_local = true; // local in this case means non-DAP
279  }
280 
281  set_credentials(uname, password);
282 }
283 
284 D4Connect::~D4Connect()
285 {
286  if (d_http) delete d_http;
287 }
288 
289 std::string D4Connect::build_dap4_ce(const string requestSuffix, const string dap4ce)
290 {
291  std::stringstream url;
292  bool needsAmpersand = false;
293 
294  url << d_URL << requestSuffix << "?";
295 
296  if (d_UrlQueryString.length() > 0) {
297  url << d_UrlQueryString;
298  needsAmpersand = true;
299  }
300 
301  if (dap4ce.length() > 0) {
302  if (needsAmpersand) url << "&";
303 
304  url << DAP4_CE_QUERY_KEY << "=" << id2www_ce(dap4ce);
305  }
306 
307  DBG(cerr << "D4Connect::build_dap4_ce() - Source URL: " << d_URL << endl);
308  DBG(cerr << "D4Connect::build_dap4_ce() - Source URL Query String: " << d_UrlQueryString << endl);
309  DBG(cerr << "D4Connect::build_dap4_ce() - dap4ce: " << dap4ce << endl);
310  DBG(cerr << "D4Connect::build_dap4_ce() - request URL: " << url.str() << endl);
311 
312  return url.str();
313 }
314 
315 void D4Connect::request_dmr(DMR &dmr, const string expr)
316 {
317  string url = build_dap4_ce(".dmr", expr);
318 
319  Response *rs = 0;
320  try {
321  rs = d_http->fetch_url(url);
322 
323  d_server = rs->get_version();
324  d_protocol = rs->get_protocol();
325 
326  switch (rs->get_type()) {
327  case unknown_type:
328  DBG(cerr << "Response type unknown, assuming it's a DMR response." << endl);
329  /* no break */
330  case dap4_dmr: {
331  D4ParserSax2 parser;
332  parser.intern(*rs->get_cpp_stream(), &dmr);
333  break;
334  }
335 
336  case dap4_error:
337  throw InternalErr(__FILE__, __LINE__, "DAP4 errors are not processed yet.");
338 
339  case web_error:
340  // We should never get here; a web error should be picked up read_url
341  // (called by fetch_url) and result in a thrown Error object.
342  throw InternalErr(__FILE__, __LINE__, "Web error found where it should never be.");
343 
344  default:
345  throw InternalErr(__FILE__, __LINE__,
346  "Response type not handled (got " + long_to_string(rs->get_type()) + ").");
347  }
348  }
349  catch (...) {
350  delete rs;
351  throw;
352  }
353 
354  delete rs;
355 }
356 
357 void D4Connect::request_dap4_data(DMR &dmr, const string expr)
358 {
359  string url = build_dap4_ce(".dap", expr);
360 
361  Response *rs = 0;
362  try {
363  rs = d_http->fetch_url(url);
364 
365  d_server = rs->get_version();
366  d_protocol = rs->get_protocol();
367 
368  switch (rs->get_type()) {
369  case unknown_type:
370  DBG(cerr << "Response type unknown, assuming it's a DAP4 Data response." << endl);
371  /* no break */
372  case dap4_data: {
373  // get a chunked input stream
374  chunked_istream cis(*(rs->get_cpp_stream()), CHUNK_SIZE);
375 
376  // parse the DMR, stopping when the boundary is found.
377 
378  // force chunk read
379  // get chunk size
380  int chunk_size = cis.read_next_chunk();
381  if (chunk_size < 0)
382  throw Error("Found an unexpected end of input (EOF) while reading a DAP4 data response. (2)");
383 
384  // get chunk
385  char chunk[chunk_size];
386  cis.read(chunk, chunk_size);
387  // parse char * with given size
388  D4ParserSax2 parser;
389  // permissive mode allows references to Maps that are not in the response.
390  parser.set_strict(false);
391  // '-2' to discard the CRLF pair
392  parser.intern(chunk, chunk_size - 2, &dmr, false /*debug*/);
393 
394  // Read data and store in the DMR
395  D4StreamUnMarshaller um(cis, cis.twiddle_bytes());
396  dmr.root()->deserialize(um, dmr);
397 
398  break;
399  }
400 
401  case dap4_error:
402  throw InternalErr(__FILE__, __LINE__, "DAP4 errors are not processed yet.");
403 
404  case web_error:
405  // We should never get here; a web error should be picked up read_url
406  // (called by fetch_url) and result in a thrown Error object.
407  throw InternalErr(__FILE__, __LINE__, "Web error found where it should never be.");
408 
409  default:
410  throw InternalErr(__FILE__, __LINE__,
411  "Response type not handled (got " + long_to_string(rs->get_type()) + ").");
412  }
413  }
414  catch (...) {
415  delete rs;
416  throw;
417  }
418 
419  delete rs;
420 }
421 
422 void D4Connect::read_dmr(DMR &dmr, Response &rs)
423 {
424  parse_mime(rs);
425  if (rs.get_type() == unknown_type) throw Error("Unknown response type.");
426 
427  read_dmr_no_mime(dmr, rs);
428 }
429 
430 void D4Connect::read_dmr_no_mime(DMR &dmr, Response &rs)
431 {
432  // Assume callers know what they are doing
433  if (rs.get_type() == unknown_type) rs.set_type(dap4_dmr);
434 
435  switch (rs.get_type()) {
436  case dap4_dmr:
437  process_dmr(dmr, rs);
438  d_server = rs.get_version();
439  d_protocol = dmr.dap_version();
440  break;
441  default:
442  throw Error("Expected a DAP4 DMR response.");
443  }
444 }
445 
446 void D4Connect::read_data(DMR &data, Response &rs)
447 {
448  parse_mime(rs);
449  if (rs.get_type() == unknown_type) throw Error("Unknown response type.");
450 
451  read_data_no_mime(data, rs);
452 }
453 
454 void D4Connect::read_data_no_mime(DMR &data, Response &rs)
455 {
456  // Assume callers know what they are doing
457  if (rs.get_type() == unknown_type) rs.set_type(dap4_data);
458 
459  switch (rs.get_type()) {
460  case dap4_data:
461  process_data(data, rs);
462  d_server = rs.get_version();
463  d_protocol = data.dap_version();
464  break;
465  default:
466  throw Error("Expected a DAP4 Data response.");
467  }
468 }
469 
475 void D4Connect::set_credentials(string u, string p)
476 {
477  if (d_http) d_http->set_credentials(u, p);
478 }
479 
484 {
485  if (d_http) d_http->set_accept_deflate(deflate);
486 }
487 
493 void D4Connect::set_xdap_protocol(int major, int minor)
494 {
495  if (d_http) d_http->set_xdap_protocol(major, minor);
496 }
497 
502 {
503  if (d_http) d_http->set_cache_enabled(cache);
504 }
505 
506 bool D4Connect::is_cache_enabled()
507 {
508  if (d_http)
509  return d_http->is_cache_enabled();
510  else
511  return false;
512 }
513 
514 } // namespace libdap
-
string get_next_mime_header(FILE *in)
Definition: mime_util.cc:838
- -
void set_credentials(std::string u, std::string p)
Set the credentials for responding to challenges while dereferencing URLs.
Definition: D4Connect.cc:475
-
string id2www_ce(string in, const string &allowable)
Definition: escaping.cc:178
-
string prune_spaces(const string &name)
Definition: util.cc:459
-
void set_credentials(const string &u, const string &p)
-
D4Group * root()
Definition: DMR.cc:407
-
Read data from the stream made by D4StreamMarshaller.
-
void set_xdap_protocol(int major, int minor)
Definition: D4Connect.cc:493
-
STL namespace.
-
void set_cache_enabled(bool enabled)
Definition: HTTPConnect.h:151
- -
void set_strict(bool s)
Set the &#39;strict&#39; mode to true or false.
Definition: D4ParserSax2.h:302
-
HTTPResponse * fetch_url(const string &url)
Definition: HTTPConnect.cc:627
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
void parse_mime_header(const string &header, string &name, string &value)
Definition: mime_util.cc:912
-
void set_accept_deflate(bool deflate)
Definition: D4Connect.cc:483
-
ObjectType get_description_type(const string &value)
Definition: mime_util.cc:339
- -
void set_cache_enabled(bool enabled)
Definition: D4Connect.cc:501
- -
virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr)
Definition: D4Group.cc:546
-
void set_accept_deflate(bool defalte)
-
void set_xdap_protocol(int major, int minor)
-
A class for error processing.
Definition: Error.h:92
- - -
-
- - - - diff --git a/html/D4Connect_8h_source.html b/html/D4Connect_8h_source.html deleted file mode 100644 index e5235faa9..000000000 --- a/html/D4Connect_8h_source.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - -libdap: D4Connect.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4Connect.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2013 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef _d4connect_h
27 #define _d4connect_h
28 
29 #include <string>
30 
31 #define DAP4_CE_QUERY_KEY "dap4.ce"
32 
33 namespace libdap
34 {
35 
36 class HTTPConnect;
37 class DMR;
38 class Response;
39 
40 class D4Connect
41 {
42 private:
43  HTTPConnect *d_http;
44 
45  bool d_local; // Is this a local connection?
46  std::string d_URL; // URL to remote dataset (minus CE)
47  std::string d_UrlQueryString; // CE
48 
49  std::string d_server; // Server implementation information (the XDAP-Server header)
50  std::string d_protocol; // DAP protocol from the server (XDAP)
51 
52  void process_data(DMR &data, Response &rs);
53  void process_dmr(DMR &data, Response &rs);
54 
55  // Use when you cannot use but have a complete response with MIME headers
56  void parse_mime(Response &rs);
57 
58  std::string build_dap4_ce(const std::string requestSuffix, const std::string expr);
59 
60 protected:
62  D4Connect();
63  D4Connect(const D4Connect &);
64  D4Connect &operator=(const D4Connect &);
65 
66 public:
67  D4Connect(const std::string &url, std::string uname = "", std::string password = "");
68 
69  virtual ~D4Connect();
70 
71  bool is_local() const { return d_local; }
72 
73  virtual std::string URL() const { return d_URL; }
74  virtual std::string CE() const { return d_UrlQueryString; }
75 
76  void set_credentials(std::string u, std::string p);
77  void set_accept_deflate(bool deflate);
78  void set_xdap_protocol(int major, int minor);
79 
80  void set_cache_enabled(bool enabled);
81  bool is_cache_enabled();
82 
83  void set_xdap_accept(int major, int minor);
84 
94  std::string get_version() { return d_server; }
95 
99  std::string get_protocol() { return d_protocol; }
100 
101  virtual void request_dmr(DMR &dmr, const std::string expr = "");
102  virtual void request_dap4_data(DMR &dmr, const std::string expr = "");
103 #if 0
104  virtual void request_version();
105 #endif
106 
107  virtual void read_dmr(DMR &dmr, Response &rs);
108  virtual void read_dmr_no_mime(DMR &dmr, Response &rs);
109 
110  virtual void read_data(DMR &data, Response &rs);
111  virtual void read_data_no_mime(DMR &data, Response &rs);
112 };
113 
114 } // namespace libdap
115 
116 #endif // _d4connect_h
-
void set_credentials(std::string u, std::string p)
Set the credentials for responding to challenges while dereferencing URLs.
Definition: D4Connect.cc:475
-
std::string get_version()
Definition: D4Connect.h:94
-
void set_xdap_protocol(int major, int minor)
Definition: D4Connect.cc:493
-
std::string get_protocol()
Definition: D4Connect.h:99
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
void set_accept_deflate(bool deflate)
Definition: D4Connect.cc:483
- - -
void set_cache_enabled(bool enabled)
Definition: D4Connect.cc:501
- -
-
- - - - diff --git a/html/D4ConstraintEvaluator_8cc_source.html b/html/D4ConstraintEvaluator_8cc_source.html deleted file mode 100644 index 9e71c6f24..000000000 --- a/html/D4ConstraintEvaluator_8cc_source.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - -libdap: D4ConstraintEvaluator.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4ConstraintEvaluator.cc
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2002,2003 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 #include <string>
26 #include <sstream>
27 #include <iterator>
28 
29 //#define DODS_DEBUG
30 
31 #include "D4CEScanner.h"
32 #include "D4ConstraintEvaluator.h"
33 #include "d4_ce_parser.tab.hh"
34 
35 #include "DMR.h"
36 #include "D4Group.h"
37 #include "D4Dimensions.h"
38 #include "D4Maps.h"
39 #include "BaseType.h"
40 #include "Array.h"
41 #include "Constructor.h"
42 #include "D4Sequence.h"
43 
44 #include "D4RValue.h"
45 #include "D4FilterClause.h"
46 
47 #include "escaping.h"
48 #include "parser.h" // for get_ull()
49 #include "debug.h"
50 
51 // Always define this for a production release.
52 #define PREVENT_XXS_VIA_CE 1
53 #if NDEBUG && !PREVENT_XXS_VIA_CE
54 #error("Never release libdap with PREVENT_XXS_VIA_CE turned off")
55 #endif
56 
57 namespace libdap {
58 
59 bool D4ConstraintEvaluator::parse(const std::string &expr)
60 {
61  d_expr = expr; // set for error messages. See the %initial-action section of .yy
62 
63  std::istringstream iss(expr);
64  D4CEScanner scanner(iss);
65  D4CEParser parser(scanner, *this /* driver */);
66 
67  if (trace_parsing()) {
68  parser.set_debug_level(1);
69  parser.set_debug_stream(std::cerr);
70  }
71 
72  return parser.parse() == 0;
73 }
74 
81 void D4ConstraintEvaluator::throw_not_found(const string &/* id */, const string &/* ident */)
82 {
83 #if PREVENT_XXS_VIA_CE
84  throw Error(no_such_variable, string("The constraint expression referenced a variable that was not found in the dataset."));
85 #else
86  throw Error(no_such_variable, d_expr + ": The variable " + id + " was not found in the dataset (" + ident + ").");
87 #endif
88 }
89 
90 void D4ConstraintEvaluator::throw_not_array(const string &/* id */, const string &/* ident */)
91 {
92 #if PREVENT_XXS_VIA_CE
93  throw Error(no_such_variable, string("The constraint expression referenced an Array that was not found in the dataset."));
94 #else
95  throw Error(no_such_variable, d_expr + ": The variable '" + id + "' is not an Array variable (" + ident + ").");
96 #endif
97 }
98 
99 void D4ConstraintEvaluator::search_for_and_mark_arrays(BaseType *btp)
100 {
101  DBG(cerr << "Entering D4ConstraintEvaluator::search_for_and_mark_arrays...(" << btp->name() << ")" << endl);
102 
103  assert(btp->is_constructor_type());
104 
105  Constructor *ctor = static_cast<Constructor*>(btp);
106  for (Constructor::Vars_iter i = ctor->var_begin(), e = ctor->var_end(); i != e; ++i) {
107  switch ((*i)->type()) {
108  case dods_array_c:
109  DBG(cerr << "Found an array: " << (*i)->name() << endl);
110  mark_array_variable(*i);
111  break;
112  case dods_structure_c:
113  case dods_sequence_c:
114  DBG(cerr << "Found a ctor: " << (*i)->name() << endl);
115  search_for_and_mark_arrays(*i);
116  break;
117  default:
118  break;
119  }
120  }
121 }
122 
132 BaseType *
133 D4ConstraintEvaluator::mark_variable(BaseType *btp)
134 {
135  assert(btp);
136 
137  DBG(cerr << "In D4ConstraintEvaluator::mark_variable... (" << btp->name() << "; " << btp->type_name() << ")" << endl);
138 
139  btp->set_send_p(true);
140 
141  if (btp->type() == dods_array_c) {
142  mark_array_variable(btp);
143  }
144 
145  // Test for Constructors and marks arrays they contain
146  if (btp->is_constructor_type()) {
147  search_for_and_mark_arrays(btp);
148  }
149  else if (btp->type() == dods_array_c && btp->var() && btp->var()->is_constructor_type()) {
150  search_for_and_mark_arrays(btp->var());
151  }
152 
153  // Now set the parent variables
154  BaseType *parent = btp->get_parent();
155  while (parent) {
156  parent->BaseType::set_send_p(true); // Just set the parent using BaseType's impl.
157  parent = parent->get_parent();
158  }
159 
160  return btp;
161 }
162 
163 static bool array_uses_shared_dimension(Array *map, D4Dimension *source_dim)
164 {
165  for (Array::Dim_iter d = map->dim_begin(), e = map->dim_end(); d != e; ++d) {
166  if (source_dim->name() == (*d).name) return true;
167  }
168 
169  return false;
170 }
171 
185 // Note: If a Map is not part of the current projection, do not include mention of it
186 // in the response DMR (CDMR)
187 BaseType *
188 D4ConstraintEvaluator::mark_array_variable(BaseType *btp)
189 {
190  assert(btp->type() == dods_array_c);
191 
192  Array *a = static_cast<Array*>(btp);
193 
194  // If an array appears in a CE without the slicing operators ([]) we still have to
195  // call add_constraint(...) for all of it's sdims for them to appear in
196  // the Constrained DMR.
197  if (d_indexes.empty()) {
198  for (Array::Dim_iter d = a->dim_begin(), de = a->dim_end(); d != de; ++d) {
199  D4Dimension *dim = a->dimension_D4dim(d);
200  if (dim) {
201  a->add_constraint(d, dim);
202  }
203  }
204  }
205  else {
206  // Test that the indexes and dimensions match in number
207  if (d_indexes.size() != a->dimensions())
208  throw Error(malformed_expr, "The index constraint for '" + btp->name() + "' does not match its rank.");
209 
210  Array::Dim_iter d = a->dim_begin();
211  for (vector<index>::iterator i = d_indexes.begin(), e = d_indexes.end(); i != e; ++i) {
212  if ((*i).stride > (unsigned long long) (a->dimension_stop(d, false) - a->dimension_start(d, false)) + 1)
213  throw Error(malformed_expr,
214  "For '" + btp->name()
215  + "', the index stride value is greater than the number of elements in the Array");
216  if (!(*i).rest
217  && ((*i).stop) > (unsigned long long) (a->dimension_stop(d, false) - a->dimension_start(d, false)) + 1)
218  throw Error(malformed_expr,
219  "For '" + btp->name()
220  + "', the index stop value is greater than the number of elements in the Array");
221 
222  D4Dimension *dim = a->dimension_D4dim(d);
223 
224  // In a DAP4 CE, specifying '[]' as an array dimension slice has two meanings.
225  // It can mean 'all the elements' of the dimension or 'apply the slicing inherited
226  // from the shared dimension'. The latter might be provide 'all the elements'
227  // but regardless, the Array object must record the CE correctly.
228 
229  if (dim && (*i).empty) {
230  // This case corresponds to a CE that uses the '[]' notation for a
231  // particular dimension - meaning, use the Shared Dimension size for
232  // this dimension's 'slice'.
233  a->add_constraint(d, dim); // calls set_used_by_projected_var(true) + more
234  }
235  else {
236  // This case corresponds to a 'local dimension slice' (See sections 8.6.2 and
237  // 8.7 of the spec as of 4/12/16). When a local dimension slice is used, drop
238  // the Map(s) that include that dimension. This enables people to constrain
239  // an Array when some of the Array's dimensions don't use Shared Dimensions
240  // but others do.
241 
242  // First apply the constraint to the Array's dimension
243  a->add_constraint(d, (*i).start, (*i).stride, (*i).rest ? -1 : (*i).stop);
244 
245  // Then, if the Array has Maps, scan those Maps for any that use dimensions
246  // that match the name of this particular dimension. If any such Maps are found
247  // remove them. This ensure that the Array can be constrained using the 'local
248  // dimension slice' without the constrained DMR containing references to Maps
249  // that don't exist (or are otherwise nonsensical).
250  //
251  // This code came about as a fix for problems discovered during testing of
252  // local dimension slices. See https://opendap.atlassian.net/browse/HYRAX-98
253  // jhrg 4/12/16
254  if (!a->maps()->empty()) {
255  for (D4Maps::D4MapsIter m = a->maps()->map_begin(), e = a->maps()->map_end(); m != e; ++m) {
256  if ((*m)->array() == 0)
257  throw Error(malformed_expr,
258  "An array with Maps was found, but one of the Maps was not defined correctly.");
259 
260  Array *map = const_cast<Array*>((*m)->array()); // Array lacks const iterator support
261  // Added a test to ensure 'dim' is not null. This could be the case if
262  // execution gets here and the index *i was not empty. jhrg 4/18/17
263  if (dim && array_uses_shared_dimension(map, dim)) {
264  D4Map *map_to_be_removed = *m;
265  a->maps()->remove_map(map_to_be_removed); // Invalidates the iterator
266  delete map_to_be_removed; // removed from container; delete
267  break; // must leave the for loop because 'm' is now invalid
268  }
269  }
270  }
271  }
272 
273  ++d;
274  }
275  }
276 
277  d_indexes.clear(); // Clear the info so the next slice expression can be parsed.
278 
279  return btp;
280 }
281 
290 D4Dimension *
291 D4ConstraintEvaluator::slice_dimension(const std::string &id, const index &i)
292 {
293  D4Dimension *dim = dmr()->root()->find_dim(id);
294 
295  if (i.stride > dim->size())
296  throw Error(malformed_expr,
297  "For '" + id + "', the index stride value is greater than the size of the dimension");
298  if (!i.rest && (i.stop > dim->size() - 1))
299  throw Error(malformed_expr, "For '" + id + "', the index stop value is greater than the size of the dimension");
300 
301  dim->set_constraint(i.start, i.stride, i.rest ? dim->size() - 1 : i.stop);
302 
303  return dim;
304 }
305 
306 D4ConstraintEvaluator::index D4ConstraintEvaluator::make_index(const std::string &i)
307 {
308  unsigned long long v = get_int64(i.c_str());
309  return index(v, 1, v, false, false /*empty*/, "");
310 }
311 
312 D4ConstraintEvaluator::index D4ConstraintEvaluator::make_index(const std::string &i, const std::string &s,
313  const std::string &e)
314 {
315  return index(get_int64(i.c_str()), get_int64(s.c_str()), get_int64(e.c_str()), false, false /*empty*/, "");
316 }
317 
318 D4ConstraintEvaluator::index D4ConstraintEvaluator::make_index(const std::string &i, unsigned long long s,
319  const std::string &e)
320 {
321  return index(get_int64(i.c_str()), s, get_int64(e.c_str()), false, false /*empty*/, "");
322 }
323 
324 D4ConstraintEvaluator::index D4ConstraintEvaluator::make_index(const std::string &i, const std::string &s)
325 {
326  return index(get_int64(i.c_str()), get_int64(s.c_str()), 0, true, false /*empty*/, "");
327 }
328 
329 D4ConstraintEvaluator::index D4ConstraintEvaluator::make_index(const std::string &i, unsigned long long s)
330 {
331  return index(get_uint64(i.c_str()), s, 0, true, false /*empty*/, "");
332 }
333 
334 static string expr_msg(const std::string &op, const std::string &arg1, const std::string &arg2)
335 {
336  return "(" + arg1 + " " + op + " " + arg2 + ").";
337 }
338 
356 static D4FilterClause::ops get_op_code(const std::string &op)
357 {
358  DBGN(cerr << "Entering " << __PRETTY_FUNCTION__ << endl << "op: " << op << endl);
359 
360  if (op == "<")
361  return D4FilterClause::less;
362  else if (op == ">")
363  return D4FilterClause::greater;
364  else if (op == "<=")
365  return D4FilterClause::less_equal;
366  else if (op == ">=")
367  return D4FilterClause::greater_equal;
368  else if (op == "==")
369  return D4FilterClause::equal;
370  else if (op == "!=")
371  return D4FilterClause::not_equal;
372  else if (op == "~=")
373  return D4FilterClause::match;
374  else
375  throw Error(malformed_expr, "The opertator '" + op + "' is not supported.");
376 }
377 
399 void D4ConstraintEvaluator::add_filter_clause(const std::string &op, const std::string &arg1, const std::string &arg2)
400 {
401  DBG(cerr << "Entering: " << __PRETTY_FUNCTION__ << endl);
402 
403  // Check that there really is a D4Sequence associated with this filter clause.
404  D4Sequence *s = dynamic_cast<D4Sequence*>(top_basetype());
405  if (!s)
406  throw Error(malformed_expr,
407  "When a filter expression is used, it must be bound to a Sequence variable: " + expr_msg(op, arg1, arg2));
408 
409  DBG(cerr << "s->name(): " << s->name() << endl);
410 
411  // Check that arg1 and 2 are valid
412  BaseType *a1 = s->var(arg1);
413  BaseType *a2 = s->var(arg2);
414  DBG(cerr << "a1: " << a1 << ", a2: " << a2 << endl);
415 
416  if (a1 && a2)
417  throw Error(malformed_expr,
418  "One of the arguments in a filter expression must be a constant: " + expr_msg(op, arg1, arg2));
419  if (!(a1 || a2))
420  throw Error(malformed_expr,
421  "One of the arguments in a filter expression must be a variable in a Sequence: "
422  + expr_msg(op, arg1, arg2));
423 
424  // Now we know a1 XOR a2 is true
425  if (a1) {
426  s->clauses().add_clause(new D4FilterClause(get_op_code(op), new D4RValue(a1), D4RValueFactory(arg2)));
427  }
428  else {
429  s->clauses().add_clause(new D4FilterClause(get_op_code(op), D4RValueFactory(arg1), new D4RValue(a2)));
430  }
431 }
432 
439 string &
440 D4ConstraintEvaluator::remove_quotes(string &s)
441 {
442  if (*s.begin() == '\"' && *(s.end() - 1) == '\"') {
443  s.erase(s.begin());
444  s.erase(s.end() - 1);
445  }
446 
447  return s;
448 }
449 
450 // This method is called from the parser (see d4_ce_parser.yy, down in the code
451 // section). This will be called during the call to D4CEParser::parse(), that
452 // is inside D4ConstraintEvaluator::parse(...)
453 //
454 // Including the value passed in for 'l' allows the CE text to leak into
455 // the error message, a potential XSS attack vector. jhrg 4/15/20
456 void D4ConstraintEvaluator::error(const libdap::location &, const std::string &m)
457 {
458  ostringstream oss;
459 #if PREVENT_XXS_VIA_CE
460  oss << "Constraint expression parse error: " << m << ends;
461 #else
462  oss << l << ": " << m << ends;
463 #endif
464  throw Error(malformed_expr, oss.str());
465 }
466 
467 } /* namespace libdap */
D4Dimension * find_dim(const string &path)
Find the dimension using a path. Using the DAP4 name syntax, lookup a dimension. The dimension must b...
Definition: D4Group.cc:277
-
D4Group * root()
Definition: DMR.cc:407
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
std::vector< dimension >::iterator Dim_iter
Definition: Array.h:206
-
D4RValue * D4RValueFactory(std::string cpps)
Build an appropriate RValue.
Definition: D4RValue.cc:218
-
-
- - - - diff --git a/html/D4ConstraintEvaluator_8h_source.html b/html/D4ConstraintEvaluator_8h_source.html deleted file mode 100644 index 78051a745..000000000 --- a/html/D4ConstraintEvaluator_8h_source.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -libdap: D4ConstraintEvaluator.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4ConstraintEvaluator.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef D4CEDRIVER_H_
27 #define D4CEDRIVER_H_
28 
29 #include <string>
30 #include <vector>
31 #include <stack>
32 
33 namespace libdap {
34 
35 class location;
36 class DMR;
37 class BaseType;
38 class Array;
39 class D4Dimension;
40 class D4FilterClause;
41 class D4FilterClauseList;
42 
47  struct index {
48  // start and stride are simple numbers; stop is either the stopping index or
49  // if rest is true, is ignored and the subset runs to the end of the dimension
50  unsigned long long start, stride, stop;
51  // true if the slice indicates it does not contain a specific 'stop' value but
52  // goes to the end, whatever that value is.
53  bool rest;
54  // An empty slice ([]) means either the entire dimension or apply the shared
55  // dimension slice, depending on whether the corresponding shared dimension has
56  // been sliced.
57  bool empty;
58  // When a slice is applied to an Array with Maps, we need to know the name of
59  // each dimension. These names are then used to apply the slice to each of the
60  // Maps (Maps may have fewer dimensions than the Array, but the idea that a
61  // Map is a simple vector doesn't hold for DAP4, so the mapping between a slice's
62  // indexes and the set of Maps can be complex - use the names to make sure
63  // all cases are covered. The value of this field may be empty.
64  std::string dim_name;
65 
66  // Added because the parser code needs it. Our code does not use this. jhrg 11/26/13
67  index(): start(0), stride(0), stop(0), rest(false), empty(false), dim_name("") {}
68  index(unsigned long long i, unsigned long long s, unsigned long long e, bool r, bool em, const std::string &n)
69  : start(i), stride(s), stop(e), rest(r), empty(em), dim_name(n) {}
70  };
71 
72  index make_index() { return index(0, 1, 0, true /*rest*/, true /*empty*/, ""); }
73 
74  index make_index(const std::string &is);
75 
76  index make_index(const std::string &i, const std::string &s, const std::string &e);
77  index make_index(const std::string &i, unsigned long long s, const std::string &e);
78 
79  index make_index(const std::string &i, const std::string &s);
80  index make_index(const std::string &i, unsigned long long s);
81 
82  bool d_trace_scanning;
83  bool d_trace_parsing;
84  bool d_result;
85  std::string d_expr;
86 
87  DMR *d_dmr;
88 
89  std::vector<index> d_indexes;
90 
91  std::stack<BaseType*> d_basetype_stack;
92 
93  // d_expr should be set by parse! Its value is used by the parser right before
94  // the actual parsing operation starts. jhrg 11/26/13
95  std::string *expression() { return &d_expr; }
96 
97  void search_for_and_mark_arrays(BaseType *btp);
98  BaseType *mark_variable(BaseType *btp);
99  BaseType *mark_array_variable(BaseType *btp);
100 
101  D4Dimension *slice_dimension(const std::string &id, const index &i);
102 
103  void push_index(const index &i) { d_indexes.push_back(i); }
104 
105  void push_basetype(BaseType *btp) { d_basetype_stack.push(btp); }
106  BaseType *top_basetype() const { return d_basetype_stack.empty() ? 0 : d_basetype_stack.top(); }
107  // throw on pop with an empty stack?
108  void pop_basetype() { d_basetype_stack.pop(); }
109 
110  void throw_not_found(const std::string &id, const std::string &ident);
111  void throw_not_array(const std::string &id, const std::string &ident);
112 
113  // Build FilterClauseList for filter clauses for a Sequence
114  void add_filter_clause(const std::string &op, const std::string &arg1, const std::string &arg2);
115 
116  std::string &remove_quotes(std::string &src);
117 
118  friend class D4CEParser;
119 
120 public:
121  D4ConstraintEvaluator() : d_trace_scanning(false), d_trace_parsing(false), d_result(false), d_expr(""), d_dmr(0) { }
122  D4ConstraintEvaluator(DMR *dmr) : d_trace_scanning(false), d_trace_parsing(false), d_result(false), d_expr(""), d_dmr(dmr) { }
123 
124  virtual ~D4ConstraintEvaluator() { }
125 
126  bool parse(const std::string &expr);
127 
128  bool trace_scanning() const { return d_trace_scanning; }
129  void set_trace_scanning(bool ts) { d_trace_scanning = ts; }
130 
131  bool trace_parsing() const { return d_trace_parsing; }
132  void set_trace_parsing(bool tp) { d_trace_parsing = tp; }
133 
134  bool result() const { return d_result; }
135  void set_result(bool r) { d_result = r; }
136 
137  DMR *dmr() const { return d_dmr; }
138  void set_dmr(DMR *dmr) { d_dmr = dmr; }
139 
140  void error(const libdap::location &l, const std::string &m);
141 };
142 
143 } /* namespace libdap */
144 #endif /* D4CEDRIVER_H_ */
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- -
string remove_quotes(const string &s)
Definition: util.cc:585
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
- -
-
- - - - diff --git a/html/D4Dimensions_8cc_source.html b/html/D4Dimensions_8cc_source.html deleted file mode 100644 index b087d26f9..000000000 --- a/html/D4Dimensions_8cc_source.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -libdap: D4Dimensions.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4Dimensions.cc
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2013 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 #include "config.h"
26 
27 #include <sstream>
28 
29 #include "XMLWriter.h"
30 #include "D4Dimensions.h"
31 #include "D4Group.h"
32 
33 #include "Error.h"
34 #include "InternalErr.h"
35 
36 namespace libdap {
37 
38 void
39 D4Dimension::set_size(const string &size)
40 {
41  unsigned long value = 0;
42  istringstream iss(size);
43  iss >> value;
44 
45  // First test if the stream is OK, then look to see if we read all
46  // of the chars.
47  if (!iss || !iss.eof()) throw Error("Invalid value '" + size + "' passed to D4Dimension::set_size.");
48  set_size(value);
49 }
50 
55 string
57 {
58  string name = d_name;
59 
60  // d_parent is the D4Dimensions container and its parent is the Group where
61  // this Dimension is defined.
62  D4Group *grp = d_parent->parent();
63  while (grp) {
64  // The root group is named "/" (always); this avoids '//name'
65  name = (grp->name() == "/") ? "/" + name : grp->name() + "/" + name;
66 
67  if (grp->get_parent())
68  grp = static_cast<D4Group*>(grp->get_parent());
69  else
70  grp = 0;
71  }
72 
73  return name;
74 }
75 
82 void
84 {
85  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) "Dimension") < 0)
86  throw InternalErr(__FILE__, __LINE__, "Could not write Dimension element");
87 
88  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name", (const xmlChar*)d_name.c_str()) < 0)
89  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
90 #if 0
91  // Use FQNs when things are referenced, not when they are defined
92  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name", (const xmlChar*)fully_qualified_name().c_str()) < 0)
93  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
94 #endif
95  ostringstream oss;
96  if (d_constrained)
97  oss << (d_c_stop - d_c_start) / d_c_stride + 1;
98  else
99  oss << d_size;
100  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "size", (const xmlChar*) oss.str().c_str()) < 0)
101  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for size");
102 
103  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
104  throw InternalErr(__FILE__, __LINE__, "Could not end Dimension element");
105 }
106 
107 // Note that in order for this to work the second argument must not be a reference.
108 // jhrg 8/20/13
109 static bool
110 dim_name_eq(D4Dimension *d, const string name)
111 {
112  return d->name() == name;
113 }
114 
115 D4Dimension *
116 D4Dimensions::find_dim(const string &name)
117 {
118  D4DimensionsIter d = find_if(d_dims.begin(), d_dims.end(), bind2nd(ptr_fun(dim_name_eq), name));
119  return (d != d_dims.end()) ? *d: 0;
120 }
121 
122 void
123 D4Dimensions::print_dap4(XMLWriter &xml, bool constrained) const
124 {
125  D4DimensionsCIter i = d_dims.begin();
126  while (i != d_dims.end()) {
127 #if 0
128  if (!constrained || parent()->find_first_var_that_uses_dimension(*i))
129  (*i)->print_dap4(xml);
130 #endif
131  if (constrained) {
132  if ((*i)->used_by_projected_var())
133  (*i)->print_dap4(xml);
134  }
135  else {
136  (*i)->print_dap4(xml);
137  }
138  ++i;
139  }
140 }
141 
142 } /* namespace libdap */
virtual string name() const
Returns the name of the class instance.
Definition: BaseType.cc:320
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
string fully_qualified_name() const
Get the FQN for the dimension.
Definition: D4Dimensions.cc:56
-
virtual BaseType * get_parent() const
Definition: BaseType.cc:751
- - -
void print_dap4(XMLWriter &xml) const
Print the Dimension declaration. Print the Dimension in a form suitable for use in a Group definition...
Definition: D4Dimensions.cc:83
- -
-
- - - - diff --git a/html/D4Dimensions_8h_source.html b/html/D4Dimensions_8h_source.html deleted file mode 100644 index 6749c0c22..000000000 --- a/html/D4Dimensions_8h_source.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - -libdap: D4Dimensions.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4Dimensions.h
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2013 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 #ifndef D4DIMENSIONS_H_
26 #define D4DIMENSIONS_H_
27 
28 #include <string>
29 #include <vector>
30 
31 // #include "XMLWriter.h"
32 
33 using namespace std;
34 
35 namespace libdap {
36 
37 class D4Group;
38 class D4Dimensions;
39 class XMLWriter;
40 
41 class D4Dimension {
42  string d_name;
43  unsigned long d_size;
44 
45  D4Dimensions *d_parent; // This is used to get the Dimensions and then the Group object
46 
47  bool d_constrained;
48  unsigned long long d_c_start, d_c_stride, d_c_stop;
49 
50  bool d_used_by_projected_var;
51 
52 public:
53  D4Dimension() : d_name(""), d_size(0), d_parent(0), d_constrained(false), d_c_start(0), d_c_stride(0),
54  d_c_stop(0), d_used_by_projected_var(false) {}
55  D4Dimension(const string &name, unsigned long size, D4Dimensions *d = 0) : d_name(name), d_size(size), d_parent(d),
56  d_constrained(false), d_c_start(0), d_c_stride(0), d_c_stop(0), d_used_by_projected_var(false) {}
57 
58  string name() const {return d_name;}
59  void set_name(const string &name) { d_name = name; }
60  string fully_qualified_name() const;
61 
62  unsigned long size() const { return d_size; }
63  void set_size(unsigned long size) { d_size = size; }
64  // Because we build these in the XML parser and it's all text...
65  void set_size(const string &size);
66 
67  D4Dimensions *parent() const { return d_parent; }
68  void set_parent(D4Dimensions *d) { d_parent = d; }
69 
70  bool constrained() const { return d_constrained; }
71  unsigned long long c_start() const { return d_c_start; }
72  unsigned long long c_stride() const { return d_c_stride; }
73  unsigned long long c_stop() const { return d_c_stop; }
74 
75  bool used_by_projected_var() const { return d_used_by_projected_var; }
76  void set_used_by_projected_var(bool state) { d_used_by_projected_var = state; }
77 
86  void set_constraint(unsigned long long start, unsigned long long stride, unsigned long long stop) {
87  d_c_start = start;
88  d_c_stride = stride;
89  d_c_stop = stop;
90  d_constrained = true;
91  }
92 
93  void print_dap4(XMLWriter &xml) const;
94 };
95 
102  vector<D4Dimension*> d_dims;
103 
104  D4Group *d_parent; // the group that holds this set of D4Dimensions; weak pointer, don't delete
105 
106 protected:
107  // Note Code in Array depends on the order of these 'new' dimensions
108  // matching the 'old' dimensions they are derived from. See
109  // Array::update_dimension_pointers. jhrg 8/25/14
110  void m_duplicate(const D4Dimensions &rhs) {
111  D4DimensionsCIter i = rhs.d_dims.begin();
112  while (i != rhs.d_dims.end()) {
113  d_dims.push_back(new D4Dimension(**i++)); // deep copy
114  d_dims.back()->set_parent(this); // Set the Dimension's parent
115  }
116 
117  d_parent = rhs.d_parent;
118  }
119 
120 public:
122  typedef vector<D4Dimension*>::iterator D4DimensionsIter;
123  typedef vector<D4Dimension*>::const_iterator D4DimensionsCIter;
124 
125  D4Dimensions() : d_parent(0) {}
126  D4Dimensions(D4Group *g) : d_parent(g) {}
127  D4Dimensions(const D4Dimensions &rhs) : d_parent(0) { m_duplicate(rhs); }
128 
129  virtual ~D4Dimensions() {
130  D4DimensionsIter i = d_dims.begin();
131  while (i != d_dims.end())
132  delete *i++;
133  }
134 
135  D4Dimensions &operator=(const D4Dimensions &rhs) {
136  if (this == &rhs) return *this;
137  m_duplicate(rhs);
138  return *this;
139  }
140 
142  bool empty() const { return d_dims.empty(); }
143 
144  D4Group *parent() const { return d_parent;}
145  void set_parent(D4Group *g) { d_parent = g; }
146 
155  void add_dim(D4Dimension *dim) { add_dim_nocopy(new D4Dimension(*dim)); }
156 
160  void add_dim_nocopy(D4Dimension *dim) { dim->set_parent(this); d_dims.push_back(dim); }
161 
163  D4DimensionsIter dim_begin() { return d_dims.begin(); }
164 
166  D4DimensionsIter dim_end() { return d_dims.end(); }
167 
168  D4Dimension *find_dim(const string &name);
169 
177  void insert_dim(D4Dimension *dim, D4DimensionsIter i) {
178  insert_dim_nocopy(new D4Dimension(*dim), i);
179  }
180 
185  void insert_dim_nocopy(D4Dimension *dim, D4DimensionsIter i) {
186  dim->set_parent(this);
187  d_dims.insert(i, dim);
188  }
189 
190  void print_dap4(XMLWriter &xml, bool constrained = false) const;
191 };
192 
193 } /* namespace libdap */
194 #endif /* D4DIMENSIONS_H_ */
vector< D4Dimension * >::iterator D4DimensionsIter
Iterator used for D4Dimensions.
Definition: D4Dimensions.h:122
-
void insert_dim(D4Dimension *dim, D4DimensionsIter i)
Definition: D4Dimensions.h:177
-
D4DimensionsIter dim_end()
Get an iterator to the end of the dimensions.
Definition: D4Dimensions.h:166
-
STL namespace.
-
void set_constraint(unsigned long long start, unsigned long long stride, unsigned long long stop)
Definition: D4Dimensions.h:86
-
D4DimensionsIter dim_begin()
Get an iterator to the start of the dimensions.
Definition: D4Dimensions.h:163
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
void add_dim_nocopy(D4Dimension *dim)
Definition: D4Dimensions.h:160
-
bool empty() const
Does this D4Dimensions object actually have dimensions?
Definition: D4Dimensions.h:142
- -
void insert_dim_nocopy(D4Dimension *dim, D4DimensionsIter i)
Definition: D4Dimensions.h:185
- - -
void add_dim(D4Dimension *dim)
Definition: D4Dimensions.h:155
- -
-
- - - - diff --git a/html/D4EnumDefs_8cc_source.html b/html/D4EnumDefs_8cc_source.html deleted file mode 100644 index 1563c4065..000000000 --- a/html/D4EnumDefs_8cc_source.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -libdap: D4EnumDefs.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4EnumDefs.cc
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2013 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 #include "config.h"
26 
27 #include "D4Group.h"
28 #include "D4EnumDefs.h"
29 
30 #include <sstream>
31 
32 #include "dods-limits.h"
33 #include "util.h"
34 
35 namespace libdap {
36 
42 bool
44 {
45  switch (type()) {
46  case dods_int8_c:
47  return (value >= DODS_SCHAR_MIN && value <= DODS_SCHAR_MAX);
48  case dods_byte_c:
49  case dods_uint8_c:
50  return (value >= 0 && static_cast<unsigned long long>(value) <= DODS_UCHAR_MAX);
51  case dods_int16_c:
52  return (value >= DODS_SHRT_MIN && value <= DODS_SHRT_MAX);
53  case dods_uint16_c:
54  return (value >= 0 && static_cast<unsigned long long>(value) <= DODS_USHRT_MAX);
55  case dods_int32_c:
56  return (value >= DODS_INT_MIN && value <= DODS_INT_MAX);
57  case dods_uint32_c:
58  return (value >= 0 && static_cast<unsigned long long>(value) <= DODS_UINT_MAX);
59  case dods_int64_c:
60  return true; // This is always true: (value >= DODS_LLONG_MIN && value <= DODS_LLONG_MAX);
61  case dods_uint64_c:
62  return (value >= 0 /*Always true: && static_cast<unsigned long long>(value) <= DODS_ULLONG_MAX*/);
63  default:
64  return false;
65  }
66 }
67 
68 // Note that in order for this to work the second argument must not be a reference.
69 // jhrg 8/20/13
70 static bool
71 enum_def_name_eq(D4EnumDef *d, const string name)
72 {
73  return d->name() == name;
74 }
75 
76 D4EnumDef *
77 D4EnumDefs::find_enum_def(const string &name)
78 {
79  D4EnumDefIter d = find_if(d_enums.begin(), d_enums.end(), bind2nd(ptr_fun(enum_def_name_eq), name));
80  return (d != d_enums.end()) ? *d: 0;
81 }
82 
83 void D4EnumDef::print_value(XMLWriter &xml, const D4EnumDef::tuple &tuple) const
84 {
85  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*)"EnumConst") < 0)
86  throw InternalErr(__FILE__, __LINE__, "Could not write EnumConst element");
87 
88  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name", (const xmlChar*)tuple.label.c_str()) < 0)
89  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
90 
91  ostringstream oss;
92  oss << tuple.value;
93  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "value", (const xmlChar*)oss.str().c_str()) < 0)
94  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for value");
95 
96  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
97  throw InternalErr(__FILE__, __LINE__, "Could not end EnumConst element");
98 }
99 
100 void D4EnumDef::print_dap4(XMLWriter &xml) const
101 {
102  vector<D4EnumDef::tuple>::const_iterator i = d_tuples.begin();
103  while(i != d_tuples.end()) {
104  print_value(xml, *i++);
105  }
106 }
107 
108 void D4EnumDefs::m_print_enum(XMLWriter &xml, D4EnumDef *e) const
109 {
110  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*)"Enumeration") < 0)
111  throw InternalErr(__FILE__, __LINE__, "Could not write Enumeration element");
112 
113  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name", (const xmlChar*)e->name().c_str()) < 0)
114  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
115 
116  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "basetype", (const xmlChar*)D4type_name(e->type()).c_str()) < 0)
117  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
118 
119  // print each of e.values
120  e->print_dap4(xml);
121 
122  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
123  throw InternalErr(__FILE__, __LINE__, "Could not end Enumeration element");
124 }
125 
126 void D4EnumDefs::print_dap4(XMLWriter &xml, bool constrained) const
127 {
128  D4EnumDefCIter i = d_enums.begin();
129  while (i != d_enums.end()) {
130  if (!constrained || parent()->find_first_var_that_uses_enumeration(*i))
131  m_print_enum(xml, *i);
132  ++i;
133  }
134 }
135 
136 } /* namespace libdap */
bool is_valid_enum_value(long long value)
Definition: D4EnumDefs.cc:43
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
- -
string D4type_name(Type t)
Returns the type of the class instance as a string. Supports all DAP4 types and not the DAP2-only typ...
Definition: util.cc:694
- -
-
- - - - diff --git a/html/D4EnumDefs_8h_source.html b/html/D4EnumDefs_8h_source.html deleted file mode 100644 index f7639df0e..000000000 --- a/html/D4EnumDefs_8h_source.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - -libdap: D4EnumDefs.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4EnumDefs.h
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2013 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 #ifndef D4ENUMDEF_H_
26 #define D4ENUMDEF_H_
27 
28 #include <string>
29 #include <vector>
30 #include <algorithm>
31 #include <functional>
32 
33 #include "BaseType.h"
34 
35 using namespace std;
36 
37 namespace libdap {
38 
39 class D4EnumDefs;
40 class D4Group;
41 
42 class D4EnumDef {
43  string d_name;
44  Type d_type;
45  D4EnumDefs *d_parent; // a weak pointer, do not delete
46 
47  struct tuple {
48  string label;
49  long long value;
50 
51  tuple(const string &l, long long v) : label(l), value(v) {}
52  };
53 
54  vector<tuple> d_tuples;
55 
56  void m_duplicate(const D4EnumDef &rhs)
57  {
58  d_name = rhs.d_name;
59  d_type = rhs.d_type;
60  d_parent = rhs.d_parent;
61  d_tuples = rhs.d_tuples;
62  }
63 
64  void print_value(XMLWriter &xml, const D4EnumDef::tuple &tuple) const;
65 
66 public:
67  typedef vector<tuple>::iterator D4EnumValueIter;
68 
69  D4EnumDef() : d_name(""), d_type(dods_null_c), d_parent(0) {}
70  D4EnumDef(const string &n, const Type &t, D4EnumDefs *e = 0) : d_name(n), d_type(t), d_parent(e) {}
71  D4EnumDef(const D4EnumDef &rhs) {
72  m_duplicate(rhs);
73  }
74 
75  virtual ~D4EnumDef() { }
76 
77  D4EnumDef &operator=(const D4EnumDef &rhs) {
78  if (this == &rhs) return *this;
79  m_duplicate(rhs);
80  return *this;
81  }
82 
83  string name() const { return d_name; }
84  void set_name(const string &n) { d_name = n; }
85 
86  Type type() const { return d_type; }
87  void set_type(Type t) { d_type = t; }
88 
89  D4EnumDefs *parent() const { return d_parent; }
90  void set_parent(D4EnumDefs *e) { d_parent = e; }
91 
92  bool empty() const { return d_tuples.empty(); }
93 
94  void add_value(const string &label, long long value) {
95  d_tuples.push_back(tuple(label, value));
96  }
97 
98  D4EnumValueIter value_begin() { return d_tuples.begin(); }
99  D4EnumValueIter value_end() { return d_tuples.end(); }
100  string &label(D4EnumValueIter i) { return (*i).label; }
101  long long value(D4EnumValueIter i) { return (*i).value; }
102 
103  bool is_valid_enum_value(long long value);
104  void print_dap4(XMLWriter &xml) const;
105 };
106 
108 class D4EnumDefs {
109  vector<D4EnumDef*> d_enums;
110 
111  D4Group *d_parent; // the group that holds this set of D4EnumDefs; weak pointer, don't delete
112 
113  void m_print_enum(XMLWriter &xml, D4EnumDef *e) const;
114 
115  void m_duplicate(const D4EnumDefs &rhs) {
116  D4EnumDefCIter i = rhs.d_enums.begin();
117  while (i != rhs.d_enums.end()) {
118  d_enums.push_back(new D4EnumDef(**i++)); // deep copy
119  }
120 
121  d_parent = rhs.d_parent;
122  }
123 
124 public:
125  typedef vector<D4EnumDef*>::iterator D4EnumDefIter;
126  typedef vector<D4EnumDef*>::const_iterator D4EnumDefCIter;
127 
128  D4EnumDefs() : d_parent(0) {}
129  D4EnumDefs(const D4EnumDefs &rhs) {
130  m_duplicate(rhs);
131  }
132 
133  virtual ~D4EnumDefs() {
134  D4EnumDefIter i = d_enums.begin();
135  while(i != d_enums.end()) {
136  delete *i++;
137  }
138  }
139 
140  D4EnumDefs &operator=(const D4EnumDefs &rhs) {
141  if (this == &rhs) return *this;
142  m_duplicate(rhs);
143  return *this;
144  }
145 
146  bool empty() const { return d_enums.empty(); }
147 
148  D4Group *parent() const { return d_parent; }
149  void set_parent(D4Group *p) { d_parent = p; }
150 
155  void add_enum(D4EnumDef *enum_def) {
156  add_enum_nocopy(new D4EnumDef(*enum_def));
157  }
158  void add_enum_nocopy(D4EnumDef *enum_def) {
159  enum_def->set_parent(this);
160  d_enums.push_back(enum_def);
161  }
162 
164  D4EnumDefIter enum_begin() { return d_enums.begin(); }
165 
167  D4EnumDefIter enum_end() { return d_enums.end(); }
168 
169  D4EnumDef *find_enum_def(const string &name);
170 
179  void insert_enum(D4EnumDef *enum_def, D4EnumDefIter i) {
180  D4EnumDef *enum_def_copy = new D4EnumDef(*enum_def);
181  enum_def_copy->set_parent(this);
182  d_enums.insert(i, enum_def_copy);
183  }
184 
185  void print_dap4(XMLWriter &xml, bool constrained = false) const;
186 };
187 
188 } /* namespace libdap */
189 #endif /* D4ENUMDEF_H_ */
void insert_enum(D4EnumDef *enum_def, D4EnumDefIter i)
Insert a D4EnumDef. Insert a D4EnumDef before the position specified by the iterator.
Definition: D4EnumDefs.h:179
-
STL namespace.
-
Type
Identifies the data type.
Definition: Type.h:94
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- -
void add_enum(D4EnumDef *enum_def)
Definition: D4EnumDefs.h:155
-
D4EnumDefIter enum_begin()
Get an iterator to the start of the enumerations.
Definition: D4EnumDefs.h:164
-
D4EnumDefIter enum_end()
Get an iterator to the end of the enumerations.
Definition: D4EnumDefs.h:167
- - - -
-
- - - - diff --git a/html/D4Enum_8cc_source.html b/html/D4Enum_8cc_source.html deleted file mode 100644 index 0447933b6..000000000 --- a/html/D4Enum_8cc_source.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - -libdap: D4Enum.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4Enum.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2013 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #include "config.h"
27 
28 // #define DODS_DEBUG
29 
30 #include <cassert>
31 #include <sstream>
32 
33 #include <libxml/encoding.h>
34 
35 #include "Byte.h" // synonymous with UInt8 and Char
36 #include "Int8.h"
37 #include "Int16.h"
38 #include "UInt16.h"
39 #include "Int32.h"
40 #include "UInt32.h"
41 #include "Int64.h"
42 #include "UInt64.h"
43 
44 #include "D4Group.h"
45 #include "D4Enum.h"
46 #include "D4EnumDefs.h"
47 #include "D4Attributes.h"
48 
49 #include "Float32.h"
50 #include "Float64.h"
51 
52 #include "D4StreamMarshaller.h"
53 #include "D4StreamUnMarshaller.h"
54 
55 #include "Operators.h"
56 #include "InternalErr.h"
57 #include "dods-datatypes.h"
58 #include "dods-limits.h"
59 #include "util.h"
60 #include "debug.h"
61 #include "DapIndent.h"
62 
63 using std::cerr;
64 using std::endl;
65 
66 namespace libdap {
67 
68 // Private
69 void D4Enum::m_duplicate(const D4Enum &src)
70 {
71  d_buf = src.d_buf;
72  d_element_type = src.d_element_type;
73  d_enum_def = src.d_enum_def;
74 #if 0
75  // The enum_def is a weak pointer managed by D4Group. We just copy it
76  // and do not delete it. jhrg 10/19/15
77  d_enum_def = src.d_enum_def == 0 ? 0 : new D4EnumDef(*(src.d_enum_def));
78 #endif
79  d_is_signed = src.d_is_signed;
80 }
81 
91 vector<BaseType *> *
93 {
94  BaseType *btp;
95 
96  DBG(cerr << __func__ << "() - BEGIN" << endl;);
97 
98  switch (d_element_type) {
99  case dods_byte_c:
100  case dods_int8_c:
101  case dods_uint8_c: {
102  Byte *var = new Byte(name());
103  dods_byte val;
104  this->value(&val);
105  var->set_value(val);
106  btp = var;
107  break;
108  }
109  case dods_uint16_c: {
110  UInt16 *var = new UInt16(name());
111  dods_uint16 val;
112  this->value(&val);
113  var->set_value(val);
114  btp = var;
115  break;
116  }
117  case dods_uint32_c: {
118  UInt32 *var = new UInt32(name());
119  dods_uint32 val;
120  this->value(&val);
121  var->set_value(val);
122  btp = var;
123  break;
124  }
125  case dods_uint64_c: {
126  UInt64 *var = new UInt64(name());
127  dods_uint64 val;
128  this->value(&val);
129  var->set_value(val);
130  btp = var;
131  break;
132  }
133  case dods_int16_c: {
134  Int16 *var = new Int16(name());
135  dods_int16 val;
136  this->value(&val);
137  var->set_value(val);
138  btp = var;
139  break;
140  }
141  case dods_int32_c: {
142  Int32 *var = new Int32(name());
143  dods_int32 val;
144  this->value(&val);
145  var->set_value(val);
146  btp = var;
147  break;
148  }
149  case dods_int64_c: {
150  Int64 *var = new Int64(name());
151  dods_int64 val;
152  this->value(&val);
153  var->set_value(val);
154  btp = var;
155  break;
156  }
157  default: {
158  ostringstream oss;
159  oss << "Unknown D4Enum type:" << d_element_type << ", name: " << name() << endl;
160  throw InternalErr(__FILE__, __LINE__, oss.str());
161  }
162  }
163 
164  DBG( cerr << __func__ << "() - Processing Enum type:"<<
165  btp->type_name() << " name: " << btp->name() << endl;);
166 
167  // Grab the attributes!
168 #if 0
169  AttrTable d2_attrs = *(this->attributes()->get_AttrTable(name()));
170  btp->set_attr_table(d2_attrs);
171 #else
172  if (btp->get_attr_table().get_size() == 0) {
174  btp->get_attr_table().set_name(name());
175  }
176 #endif
177 
178  // make the Enum label, and the enum's definition into DAP2 attributes for our returned item.
179  long long my_value;
180  this->value(&my_value);
181 
182  DBG(cerr << __func__ << "() - value: "<< my_value << endl;);
183 
184  string my_label = "";
185  AttrTable *enum_def = new AttrTable();
186  enum_def->set_name("d4:enum_def");
187 
188  D4EnumDef::D4EnumValueIter dIter = d_enum_def->value_begin();
189  D4EnumDef::D4EnumValueIter dEnd = d_enum_def->value_end();
190  while (dIter != dEnd) {
191  long long a_value = (*dIter).value;
192  string a_label = (*dIter).label;
193  ostringstream oss;
194  oss << a_value;
195  DBG(cerr << __func__ << "() - a_value: "<< a_value << endl;);
196  enum_def->append_attr(a_label, btp->type_name(), oss.str());
197  if (a_value == my_value) {
198  my_label = (*dIter).label;
199  }
200  dIter++;
201  }
202 
203  if (!my_label.empty()) btp->get_attr_table().append_attr("d4:enum_label", "String", my_label);
204 
205  btp->get_attr_table().append_container(enum_def, enum_def->get_name());
206 
207  vector<BaseType *> *result = new vector<BaseType *>();
208  result->push_back(btp);
209  DBG(cerr << __func__ << "() - END" << endl;);
210  return result;
211 }
212 
213 void D4Enum::m_check_value(int64_t v) const
214 {
215  switch (d_element_type) {
216  case dods_byte_c:
217  case dods_uint8_c:
218  if ((uint64_t)v > DODS_UCHAR_MAX || v < 0) {
219  ostringstream oss;
220  oss << "The value " << v << " will not fit in an unsigned byte. (" << __func__ << ")";
221  throw Error(oss.str());
222  }
223  break;
224  case dods_uint16_c:
225  if ((uint64_t)v > DODS_USHRT_MAX || v < 0) {
226  ostringstream oss;
227  oss << "The value " << v << " will not fit in an unsigned 16-bit integer. (" << __func__ << ")";
228  throw Error(oss.str());
229  }
230  break;
231  case dods_uint32_c:
232  if ((uint64_t)v > DODS_UINT_MAX || v < 0) {
233  ostringstream oss;
234  oss << "The value " << v << " will not fit in an unsigned 32-bit integer. (" << __func__ << ")";
235  throw Error(oss.str());
236  }
237  break;
238  case dods_uint64_c:
239  // If 'v' can never be bigger than ULLONG_MAX
240  break;
241 
242  case dods_int8_c:
243  if (v > DODS_SCHAR_MAX || v < DODS_SCHAR_MIN) {
244  ostringstream oss;
245  oss << "The value " << v << " will not fit in an unsigned byte. (" << __func__ << ")";
246  throw Error(oss.str());
247  }
248 
249  break;
250  case dods_int16_c:
251  if (v > DODS_SHRT_MAX || v < DODS_SHRT_MIN) {
252  ostringstream oss;
253  oss << "The value " << v << " will not fit in an unsigned byte. (" << __func__ << ")";
254  throw Error(oss.str());
255  }
256  break;
257  case dods_int32_c:
258  if (v > DODS_INT_MAX || v < DODS_INT_MIN) {
259  ostringstream oss;
260  oss << "The value " << v << " will not fit in an unsigned byte. (" << __func__ << ")";
261  throw Error(oss.str());
262  }
263  break;
264  case dods_int64_c:
265  // There's no value 'v' can have that won't fit into a 64-bit int.
266  break;
267  default:
268  assert(!"illegal type for D4Enum");
269  }
270 }
271 
272 D4Enum::D4Enum(const string &name, const string &enum_type) :
273  BaseType(name, dods_enum_c, true /*is_dap4*/), d_buf(0), d_element_type(dods_null_c), d_enum_def(0)
274 {
275  d_element_type = get_type(enum_type.c_str());
276 
277  if (!is_integer_type(d_element_type)) d_element_type = dods_uint64_c;
278  set_is_signed(d_element_type);
279 }
280 
281 D4Enum::D4Enum(const string &name, Type type) :
282  BaseType(name, dods_enum_c, true /*is_dap4*/), d_buf(0), d_element_type(type), d_enum_def(0)
283 {
284  if (!is_integer_type(d_element_type)) d_element_type = dods_uint64_c;
285  set_is_signed(d_element_type);
286 }
287 
288 D4Enum::D4Enum(const string &name, const string &dataset, Type type) :
289  BaseType(name, dataset, dods_enum_c, true /*is_dap4*/), d_buf(0), d_element_type(type), d_enum_def(0)
290 {
291  if (!is_integer_type(d_element_type)) d_element_type = dods_uint64_c;
292  set_is_signed(d_element_type);
293 }
294 
295 // Explicit instantiation of the template member function 'value(T *)'.
296 // This is required in order to have the library contain these member
297 // functions when its own code does not use them. Normally, C++ instantiates
298 // templates when they are used, and this forces that process so the
299 // library file contains the various versions of the member function.
300 template void D4Enum::value<dods_byte>(dods_byte *v) const;
301 template void D4Enum::value<dods_int16>(dods_int16 *v) const;
302 template void D4Enum::value<dods_uint16>(dods_uint16 *v) const;
303 template void D4Enum::value<dods_int32>(dods_int32 *v) const;
304 template void D4Enum::value<dods_uint32>(dods_uint32 *v) const;
305 template void D4Enum::value<dods_int64>(dods_int64 *v) const;
306 template void D4Enum::value<dods_uint64>(dods_uint64 *v) const;
307 
308 template void D4Enum::set_value<dods_byte>(dods_byte v, bool check_value);
309 template void D4Enum::set_value<dods_int16>(dods_int16 v, bool check_value);
310 template void D4Enum::set_value<dods_uint16>(dods_uint16 v, bool check_value);
311 template void D4Enum::set_value<dods_int32>(dods_int32 v, bool check_value);
312 template void D4Enum::set_value<dods_uint32>(dods_uint32 v, bool check_value);
313 template void D4Enum::set_value<dods_int64>(dods_int64 v, bool check_value);
314 template void D4Enum::set_value<dods_uint64>(dods_uint64 v, bool check_value);
315 
316 void
317 D4Enum::set_enumeration(D4EnumDef *enum_def) {
318  d_enum_def = enum_def;
319  d_element_type = enum_def->type();
320 }
321 
322 void
324 {
325  DBG(cerr << __func__ << ": element type: " << ::libdap::type_name(d_element_type) << endl);
326 
327  switch (d_element_type) {
328  case dods_byte_c:
329  case dods_uint8_c:
330  case dods_int8_c: {
331  dods_byte v = static_cast<dods_byte>(d_buf);
332  checksum.AddData(reinterpret_cast<uint8_t*>(&v), sizeof(uint8_t));
333  break;
334  }
335  case dods_uint16_c:
336  case dods_int16_c: {
337  dods_int16 v = static_cast<dods_int16>(d_buf);
338  checksum.AddData(reinterpret_cast<uint8_t*>(&v), sizeof(uint16_t));
339  break;
340  }
341  case dods_uint32_c:
342  case dods_int32_c: {
343  dods_int32 v = static_cast<dods_int32>(d_buf);
344  checksum.AddData(reinterpret_cast<uint8_t*>(&v), sizeof(uint32_t));
345  break;
346  }
347  case dods_uint64_c:
348  case dods_int64_c:
349  checksum.AddData(reinterpret_cast<uint8_t*>(&d_buf), sizeof(uint64_t));
350  break;
351 
352  default:
353  assert(!"illegal type for D4Enum");
354  }
355 }
356 
357 void
358 D4Enum::set_is_signed(Type t)
359 {
360  switch (t) {
361  case dods_byte_c:
362  case dods_uint8_c:
363  case dods_uint16_c:
364  case dods_uint32_c:
365  case dods_uint64_c:
366  d_is_signed = false;
367  break;
368 
369  case dods_int8_c:
370  case dods_int16_c:
371  case dods_int32_c:
372  case dods_int64_c:
373  d_is_signed = true;
374  break;
375 
376  default:
377 #if 0
378  // I removed this because it hinders testing and is no better
379  // than throwing an exception. jhrg 3/29/18
380  assert(!"illegal type for D4Enum");
381 #endif
382  throw InternalErr(__FILE__, __LINE__, "Illegal type");
383  }
384 }
385 
398 void
399 D4Enum::serialize(D4StreamMarshaller &m, DMR &, /*ConstraintEvaluator &,*/ bool)
400 {
401  if (!read_p())
402  read(); // read() throws Error
403 
404  switch (d_element_type) {
405  case dods_byte_c:
406  case dods_uint8_c:
407  m.put_byte(d_buf);
408  break;
409  case dods_uint16_c:
410  m.put_uint16(d_buf);
411  break;
412  case dods_uint32_c:
413  m.put_uint32(d_buf);
414  break;
415  case dods_uint64_c:
416  m.put_uint64(d_buf);
417  break;
418 
419  case dods_int8_c:
420  m.put_int8(d_buf);
421  break;
422  case dods_int16_c:
423  m.put_int16(d_buf);
424  break;
425  case dods_int32_c:
426  m.put_int32(d_buf);
427  break;
428  case dods_int64_c:
429  m.put_int64(d_buf);
430  break;
431  default:
432  assert(!"illegal type for D4Enum");
433  }
434 }
435 
436 void
438 {
439  switch (d_element_type) {
440  case dods_byte_c:
441  case dods_uint8_c: {
442  dods_byte v;
443  um.get_byte(v);
444  d_buf = v;
445  break;
446  }
447  case dods_uint16_c: {
448  dods_uint16 v;
449  um.get_uint16(v);
450  d_buf = v;
451  break;
452  }
453  case dods_uint32_c: {
454  dods_uint32 v;
455  um.get_uint32(v);
456  d_buf = v;
457  break;
458  }
459  case dods_uint64_c: {
460  dods_uint64 v;
461  um.get_uint64(v);
462  d_buf = v;
463  break;
464  }
465 
466  case dods_int8_c: {
467  dods_int8 v;
468  um.get_int8(v);
469  d_buf = v;
470  break;
471  }
472  case dods_int16_c: {
473  dods_int16 v;
474  um.get_int16(v);
475  d_buf = v;
476  break;
477  }
478  case dods_int32_c: {
479  dods_int32 v;
480  um.get_int32(v);
481  d_buf = v;
482  break;
483  }
484  case dods_int64_c: {
485  dods_int64 v;
486  um.get_int64(v);
487  d_buf = v;
488  break;
489  }
490  default:
491  assert(!"illegal type for D4Enum");
492  }
493 }
494 
495 unsigned int D4Enum::val2buf(void *val, bool)
496 {
497  if (!val)
498  throw InternalErr("The incoming pointer does not contain any data.");
499 
500  switch (d_element_type) {
501  case dods_byte_c:
502  case dods_uint8_c:
503  d_buf = *(dods_byte*)val;
504  break;
505  case dods_uint16_c:
506  d_buf = *(dods_uint16*)val;
507  break;
508  case dods_uint32_c:
509  d_buf = *(dods_uint32*)val;
510  break;
511  case dods_uint64_c:
512  d_buf = *(dods_uint64*)val;
513  break;
514 
515  case dods_int8_c:
516  d_buf = *(dods_int8*)val;
517  break;
518  case dods_int16_c:
519  d_buf = *(dods_int16*)val;
520  break;
521  case dods_int32_c:
522  d_buf = *(dods_int32*)val;
523  break;
524  case dods_int64_c:
525  d_buf = *(dods_int64*)val;
526  break;
527  default:
528  assert(!"illegal type for D4Enum");
529  }
530 
531  return width();
532 }
533 
534 unsigned int D4Enum::buf2val(void **val)
535 {
536  if (!val)
537  throw InternalErr("NULL pointer");
538 
539  switch (d_element_type) {
540  case dods_byte_c:
541  case dods_uint8_c:
542  if (!*val) *val = new dods_byte;
543  *(dods_byte *) * val = d_buf;
544  break;
545  case dods_uint16_c:
546  if (!*val) *val = new dods_uint16;
547  *(dods_uint16 *) * val = d_buf;
548  break;
549  case dods_uint32_c:
550  if (!*val) *val = new dods_uint32;
551  *(dods_uint32 *) * val = d_buf;
552  break;
553  case dods_uint64_c:
554  if (!*val) *val = new dods_uint64;
555  *(dods_uint64 *) * val = d_buf;
556  break;
557 
558  case dods_int8_c:
559  if (!*val) *val = new dods_int8;
560  *(dods_int8*) * val = d_buf;
561  break;
562  case dods_int16_c:
563  if (!*val) *val = new dods_int16;
564  *(dods_int16 *) * val = d_buf;
565  break;
566  case dods_int32_c:
567  if (!*val) *val = new dods_int32;
568  *(dods_int32 *) * val = d_buf;
569  break;
570  case dods_int64_c:
571  if (!*val) *val = new dods_int64;
572  *(dods_int64 *) * val = d_buf;
573  break;
574  default:
575  assert(!"illegal type for D4Enum");
576  }
577 
578  return width();
579 }
580 
581 void D4Enum::print_val(ostream &out, string space, bool print_decl_p)
582 {
583  if (print_decl_p) {
584  print_decl(out, space, false);
585  out << " = ";
586  }
587 
588  DBG(cerr << "Enum union value: " << hex << d_buf << dec << endl);
589 
590  if (is_signed()) {
591  int64_t v;
592  value(&v);
593  out << v;
594  }
595  else {
596  uint64_t v;
597  value(&v);
598  out << v;
599  }
600 
601  if (print_decl_p)
602  out << ";" << endl;
603 }
604 
611 void
612 D4Enum::print_xml_writer(XMLWriter &xml, bool constrained)
613 {
614  if (constrained && !send_p())
615  return;
616 
617  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*)"Enum") < 0)
618  throw InternalErr(__FILE__, __LINE__, "Could not write Enum element");
619 
620  if (!name().empty())
621  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name", (const xmlChar*)name().c_str()) < 0)
622  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
623 
624 
625  string path = d_enum_def->name();
626  // Not every D4EnumDef is a member of an instance of D4EnumDefs - the D4EnumDefs instance
627  // holds a reference to the D4Group that holds the Enum definitions.
628  // TODO Should this be changed - so the EnumDef holds a reference to its parent Group?
629  if (d_enum_def->parent()) {
630  // print the FQN for the enum def; D4Group::FQN() includes the trailing '/'
631  path = static_cast<D4Group*>(d_enum_def->parent()->parent())->FQN() + path;
632  }
633  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "enum", (const xmlChar*)path.c_str()) < 0)
634  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for enum");
635 
636  attributes()->print_dap4(xml);
637 
638  if (get_attr_table().get_size() > 0)
640 
641  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
642  throw InternalErr(__FILE__, __LINE__, "Could not end Enum element");
643 }
644 
645 
646 bool
648 {
649  // Get the arg's value.
650  if (!read_p() && !read())
651  throw InternalErr(__FILE__, __LINE__, "This value not read!");
652 
653  // Get the second arg's value.
654  if (!b->read_p() && !b->read())
655  throw InternalErr(__FILE__, __LINE__, "This value not read!");
656 
657  switch (b->type()) {
658  case dods_int8_c:
659  return Cmp<dods_int64, dods_int8>(op, d_buf, static_cast<Int8*>(b)->value());
660  case dods_byte_c:
661  return Cmp<dods_int64, dods_byte>(op, d_buf, static_cast<Byte*>(b)->value());
662  case dods_int16_c:
663  return Cmp<dods_int64, dods_int16>(op, d_buf, static_cast<Int16*>(b)->value());
664  case dods_uint16_c:
665  return Cmp<dods_int64, dods_uint16>(op, d_buf, static_cast<UInt16*>(b)->value());
666  case dods_int32_c:
667  return Cmp<dods_int64, dods_int32>(op, d_buf, static_cast<Int32*>(b)->value());
668  case dods_uint32_c:
669  return Cmp<dods_int64, dods_uint32>(op, d_buf, static_cast<UInt32*>(b)->value());
670 #if 0
671  // FIXME
672  case dods_int64_c:
673  return Cmp<dods_int64, dods_int64>(op, d_buf, static_cast<D4Enum*>(b)->value());
674  case dods_uint64_c:
675  return Cmp<dods_int64, dods_uint64>(op, d_buf, static_cast<D4Enum*>(b)->value());
676 #endif
677  case dods_float32_c:
678  return Cmp<dods_int64, dods_float32>(op, d_buf, static_cast<Float32*>(b)->value());
679  case dods_float64_c:
680  return Cmp<dods_int64, dods_float64>(op, d_buf, static_cast<Float64*>(b)->value());
681  default:
682  return false;
683  }
684 }
685 
694 void
695 D4Enum::dump(ostream &strm) const
696 {
697  strm << DapIndent::LMarg << "D4Enum::dump - (" << (void *) this << ")" << endl;
698  DapIndent::Indent();
699  BaseType::dump(strm);
700  strm << DapIndent::LMarg << "value: " << d_buf << endl;
701  DapIndent::UnIndent();
702 }
703 
704 } // namespace libdap
705 
virtual bool read()
Read data into a local buffer.
Definition: BaseType.cc:899
-
Holds an 8-bit signed integer value.
Definition: Int8.h:42
-
Holds a64-bit signed integer.
Definition: Int64.h:49
-
virtual bool read_p()
Has this variable been read?
Definition: BaseType.cc:480
-
virtual string name() const
Returns the name of the class instance.
Definition: BaseType.cc:320
-
virtual void print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
Print an ASCII representation of the variable structure.
Definition: BaseType.cc:1003
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: BaseType.cc:291
-
unsigned int val2buf(void *, bool)
Loads class data.
Definition: D4Enum.cc:495
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
virtual unsigned int width(bool=false) const
Return the number of bytes in an instance of an Enum. This returns the number of bytes an instance of...
Definition: D4Enum.h:175
-
virtual string get_name() const
Get the name of this attribute table.
Definition: AttrTable.cc:238
-
Read data from the stream made by D4StreamMarshaller.
-
Holds an unsigned 16-bit integer.
Definition: UInt16.h:57
-
Definition: crc.h:76
-
BaseType(const string &n, const Type &t, bool is_dap4=false)
The BaseType constructor.
Definition: BaseType.cc:126
-
void print_xml_writer(XMLWriter &xml)
Definition: AttrTable.cc:1425
-
virtual void print_val(ostream &out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: D4Enum.cc:581
-
Type
Identifies the data type.
Definition: Type.h:94
-
Holds a 32-bit floating point value.
Definition: Float32.h:61
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
virtual std::vector< BaseType * > * transform_to_dap2(AttrTable *parent_attr_table)
Convert an Enum to a DAP2 int type.
Definition: D4Enum.cc:92
-
virtual std::string FQN() const
Definition: BaseType.cc:332
-
void transform_attrs_to_dap2(AttrTable *d2_attr_table)
Copy the attributes from this D4Attributes object to a DAP2 AttrTable.
- -
virtual BaseType * var(const string &name="", bool exact_match=true, btp_stack *s=0)
Returns a pointer to a member of a constructor class.
Definition: BaseType.cc:758
-
Holds a DAP4 enumeration.
Definition: D4Enum.h:61
-
virtual void serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)
Serialize a D4Enum Use the (integer) data type associated with an Enumeration definition to serialize...
Definition: D4Enum.cc:399
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
-
Holds a 16-bit signed integer value.
Definition: Int16.h:59
-
virtual AttrTable * append_container(const string &name)
Add a container to the attribute table.
Definition: AttrTable.cc:410
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: D4Enum.cc:695
-
virtual Type type() const
Returns the type of the class instance.
Definition: BaseType.cc:365
-
ObjectType get_type(const string &value)
Definition: mime_util.cc:326
-
virtual void compute_checksum(Crc32 &checksum)
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
Definition: D4Enum.cc:323
-
virtual bool set_value(const dods_byte value)
Definition: Byte.cc:234
-
virtual D4Attributes * attributes()
Definition: BaseType.cc:599
-
Holds a 64-bit unsigned integer.
Definition: UInt64.h:49
-
void AddData(const uint8_t *pData, const uint32_t length)
Definition: crc.h:98
-
virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr)
Definition: D4Enum.cc:437
-
virtual void print_xml_writer(XMLWriter &xml, bool constrained)
Definition: D4Enum.cc:612
-
virtual AttrTable & get_attr_table()
Definition: BaseType.cc:582
-
virtual unsigned int append_attr(const string &name, const string &type, const string &value)
Add an attribute to the table.
Definition: AttrTable.cc:307
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
virtual string type_name() const
Returns the type of the class instance as a string.
Definition: BaseType.cc:379
-
Holds a 64-bit (double precision) floating point value.
Definition: Float64.h:60
-
virtual void set_attr_table(const AttrTable &at)
Definition: BaseType.cc:590
-
Holds a single byte.
Definition: Byte.h:60
-
void value(T *v) const
Get the value of an Enum Get the value of this instance. The caller is responsible for using a type T...
Definition: D4Enum.h:140
- - -
A class for error processing.
Definition: Error.h:92
-
virtual bool ops(BaseType *b, int op)
Evaluate relational operators.
Definition: D4Enum.cc:647
-
virtual unsigned int get_size() const
Get the number of entries in this attribute table.
Definition: AttrTable.cc:231
-
virtual void set_name(const string &n)
Set the name of this attribute table.
Definition: AttrTable.cc:245
-
Holds a 32-bit unsigned integer.
Definition: UInt32.h:59
-
string type_name(Type t)
Definition: util.cc:760
-
virtual bool send_p()
Should this variable be sent?
Definition: BaseType.cc:554
-
unsigned int buf2val(void **)
Reads the class data.
Definition: D4Enum.cc:534
-
bool is_integer_type(Type t)
Definition: util.cc:900
-
Holds a 32-bit signed integer.
Definition: Int32.h:65
-
virtual string dataset() const
Returns the name of the dataset used to create this instance.
Definition: BaseType.cc:358
-
-
- - - - diff --git a/html/D4Enum_8h_source.html b/html/D4Enum_8h_source.html deleted file mode 100644 index ec71bc848..000000000 --- a/html/D4Enum_8h_source.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - -libdap: D4Enum.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4Enum.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2013 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef _D4Enum_h
27 #define _D4Enum_h 1
28 
29 #include <cassert>
30 
31 #include "BaseType.h"
32 #include "dods-datatypes.h"
33 
34 #if 0
35 #include "InternalErr.h"
36 #include "dods-datatypes.h"
37 #include "dods-limits.h"
38 #include "util.h"
39 #endif
40 
41 namespace libdap
42 {
43 
44 class D4EnumDef;
45 class ConstraintEvaluator;
46 class Marshaller;
47 class UnMarshaller;
48 
61 class D4Enum: public BaseType
62 {
63  friend class D4EnumTest;
64 
65 protected:
66  // Use an unsigned 64-bit int. the value() and set_value()
67  // accessors cast to other types as needed, including signed ones.
68  uint64_t d_buf;
69 
70 private:
71  Type d_element_type;
72  D4EnumDef *d_enum_def; // This is a weak pointer; don't delete
73  bool d_is_signed;
74 
75  void m_duplicate(const D4Enum &src);
76  void m_check_value(int64_t v) const;
77 
78  unsigned int m_type_width() const {
79  switch(d_element_type) {
80  case dods_byte_c:
81  case dods_int8_c:
82  case dods_uint8_c:
83  return 1;
84  case dods_int16_c:
85  case dods_uint16_c:
86  return 2;
87  case dods_int32_c:
88  case dods_uint32_c:
89  return 4;
90  case dods_int64_c:
91  case dods_uint64_c:
92  return 8;
93  case dods_null_c:
94  default:
95  assert(!"illegal type for D4Enum");
96  return 0;
97  }
98  }
99 
100  D4Enum(); // No empty constructor
101 
102 public:
103  D4Enum(const string &name, const string &enum_type);
104 
105  D4Enum(const string &name, Type type);
106 
107  D4Enum(const string &name, const string &dataset, Type type);
108 
109  D4Enum(const D4Enum &src) : BaseType(src) { m_duplicate(src); }
110 
111  D4Enum &operator=(const D4Enum &rhs) {
112  if (this == &rhs)
113  return *this;
114  static_cast<BaseType &>(*this) = rhs;
115  m_duplicate(rhs);
116  return *this;
117  }
118 
119  virtual ~D4Enum() { }
120 
121  virtual D4EnumDef *enumeration() const { return d_enum_def; }
122  virtual void set_enumeration(D4EnumDef *enum_def);
123 
124  virtual BaseType *ptr_duplicate() { return new D4Enum(*this); }
125 
126  Type element_type() { return d_element_type; }
127  void set_element_type(Type type) { d_element_type = type; }
128 
129  bool is_signed() const { return d_is_signed; }
130  void set_is_signed(Type t);
131 
140  template<typename T> void value(T *v) const {
141  *v = static_cast<T>(d_buf);
142  }
143 
154  template <typename T> void set_value(T v, bool check_value = true)
155  {
156  if (check_value) m_check_value(v);
157  d_buf = static_cast<int64_t>(v);
158  }
159 
175  virtual unsigned int width(bool /* constrained */ = false) const { return /*sizeof(int64_t);*/ m_type_width();}
176 
177  // DAP4
178  virtual void compute_checksum(Crc32 &checksum);
179  virtual void serialize(D4StreamMarshaller &m, DMR &dmr, /*ConstraintEvaluator &eval,*/ bool filter = false);
180  virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr);
181 
182  virtual void print_val(ostream &out, string space = "", bool print_decl_p = true);
183 
184  virtual void print_xml_writer(XMLWriter &xml, bool constrained);
185 
186  virtual bool ops(BaseType *b, int op);
187 
188  virtual void dump(ostream &strm) const;
189 
190  unsigned int val2buf(void *, bool);
191  unsigned int buf2val(void **);
192 
193  virtual std::vector<BaseType *> *transform_to_dap2(AttrTable *parent_attr_table);
194 
195 };
196 
197 } // namespace libdap
198 
199 #endif // _D4Enum_h
200 
virtual string name() const
Returns the name of the class instance.
Definition: BaseType.cc:320
-
unsigned int val2buf(void *, bool)
Loads class data.
Definition: D4Enum.cc:495
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
virtual unsigned int width(bool=false) const
Return the number of bytes in an instance of an Enum. This returns the number of bytes an instance of...
Definition: D4Enum.h:175
-
Read data from the stream made by D4StreamMarshaller.
-
Definition: crc.h:76
-
BaseType(const string &n, const Type &t, bool is_dap4=false)
The BaseType constructor.
Definition: BaseType.cc:126
-
virtual void print_val(ostream &out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: D4Enum.cc:581
-
Type
Identifies the data type.
Definition: Type.h:94
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual std::vector< BaseType * > * transform_to_dap2(AttrTable *parent_attr_table)
Convert an Enum to a DAP2 int type.
Definition: D4Enum.cc:92
- -
Holds a DAP4 enumeration.
Definition: D4Enum.h:61
-
virtual void serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)
Serialize a D4Enum Use the (integer) data type associated with an Enumeration definition to serialize...
Definition: D4Enum.cc:399
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: D4Enum.cc:695
-
virtual Type type() const
Returns the type of the class instance.
Definition: BaseType.cc:365
-
virtual void compute_checksum(Crc32 &checksum)
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
Definition: D4Enum.cc:323
-
virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr)
Definition: D4Enum.cc:437
-
void set_value(T v, bool check_value=true)
Set the value of the Enum Template member function to set the value of the Enum. The libdap library c...
Definition: D4Enum.h:154
-
virtual void print_xml_writer(XMLWriter &xml, bool constrained)
Definition: D4Enum.cc:612
-
virtual BaseType * ptr_duplicate()
Definition: D4Enum.h:124
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
void value(T *v) const
Get the value of an Enum Get the value of this instance. The caller is responsible for using a type T...
Definition: D4Enum.h:140
- -
virtual bool ops(BaseType *b, int op)
Evaluate relational operators.
Definition: D4Enum.cc:647
-
unsigned int buf2val(void **)
Reads the class data.
Definition: D4Enum.cc:534
-
virtual string dataset() const
Returns the name of the dataset used to create this instance.
Definition: BaseType.cc:358
-
-
- - - - diff --git a/html/D4FilterClause_8cc_source.html b/html/D4FilterClause_8cc_source.html deleted file mode 100644 index b558a9d47..000000000 --- a/html/D4FilterClause_8cc_source.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -libdap: D4FilterClause.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4FilterClause.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1996,1998,1999
27 // Please first read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Implementation for the CE Clause class.
33 
34 
35 #include "config.h"
36 
37 #include "D4RValue.h"
38 #include "D4FilterClause.h"
39 
40 using namespace std;
41 
42 namespace libdap {
43 
44 void
45 D4FilterClauseList::m_duplicate(const D4FilterClauseList &src)
46 {
47  //D4FilterClauseList &non_c_src = const_cast<D4FilterClauseList &>(src);
48 
49  for (D4FilterClauseList::citer i = src.cbegin(), e = src.cend(); i != e; ++i) {
50  D4FilterClause *fc = *i;
51  d_clauses.push_back(new D4FilterClause(*fc));
52  }
53 }
54 
55 D4FilterClauseList::~D4FilterClauseList()
56 {
57  for (D4FilterClauseList::iter i = d_clauses.begin(), e = d_clauses.end(); i != e; ++i) {
58  delete *i;
59  }
60 }
61 
73 bool
74 D4FilterClauseList::value(DMR &dmr)
75 {
76  for (D4FilterClauseList::iter i = d_clauses.begin(), e = d_clauses.end(); i != e; ++i) {
77  if ((*i)->value(dmr) == false)
78  return false;
79  }
80 
81  return true;
82 }
83 
94 bool
95 D4FilterClauseList::value()
96 {
97  for (D4FilterClauseList::iter i = d_clauses.begin(), e = d_clauses.end(); i != e; ++i) {
98  if ((*i)->value() == false)
99  return false;
100  }
101 
102  return true;
103 }
104 
105 void D4FilterClause::m_duplicate(const D4FilterClause &rhs) {
106  d_op = rhs.d_op;
107 
108  d_arg1 = new D4RValue(*rhs.d_arg1);
109  d_arg2 = new D4RValue(*rhs.d_arg2);
110 
111 #if 0
112  // Copy the D4RValue pointer if the 'value_kind' is a basetype,
113  // but build a new D4RValue if it is a constant (because the
114  // basetype is a weak pointer.
115  switch (rhs.d_arg1->get_kind()) {
116  case D4RValue::basetype:
117  d_arg1 = rhs.d_arg1;
118  break;
119  case D4RValue::constant:
120  d_arg1 = new D4RValue(*(rhs.d_arg1));
121  break;
122  default:
123  throw Error(malformed_expr, "found a filter clause with a function call.");
124  }
125 
126  switch (rhs.d_arg2->get_kind()) {
127  case D4RValue::basetype:
128  d_arg2 = rhs.d_arg2;
129  break;
130  case D4RValue::constant:
131  d_arg2 = new D4RValue(*(rhs.d_arg2));
132  break;
133  default:
134  throw Error(malformed_expr, "found a filter clause with a function call.");
135  }
136 #endif
137 }
138 
146 bool D4FilterClause::value(DMR &dmr)
147 {
148  switch (d_op) {
149  case null:
150  throw InternalErr(__FILE__, __LINE__, "While evaluating a constraint filter clause: Found a null operator");
151 
152  case less:
153  case greater:
154  case less_equal:
155  case greater_equal:
156  case equal:
157  case not_equal:
158  case match:
159  return cmp(d_op, d_arg1->value(dmr), d_arg2->value(dmr));
160 
161  case ND:
162  case map:
163  throw InternalErr(__FILE__, __LINE__, "While evaluating a constraint filter clause: Filter operator not implemented");
164 
165  default:
166  throw InternalErr(__FILE__, __LINE__, "While evaluating a constraint filter clause: Unrecognized operator");
167  }
168 }
169 
177 bool D4FilterClause::value()
178 {
179  switch (d_op) {
180  case null:
181  throw InternalErr(__FILE__, __LINE__, "While evaluating a constraint filter clause: Found a null operator");
182 
183  case less:
184  case greater:
185  case less_equal:
186  case greater_equal:
187  case equal:
188  case not_equal:
189  case match:
190  return cmp(d_op, d_arg1->value(), d_arg2->value());
191 
192  case ND:
193  case map:
194  throw InternalErr(__FILE__, __LINE__, "While evaluating a constraint filter clause: Filter operator not implemented");
195 
196  default:
197  throw InternalErr(__FILE__, __LINE__, "While evaluating a constraint filter clause: Unrecognized operator");
198  }
199 }
200 
201 // It may be better to use the code in the Byte, ..., classes that was
202 // impl'd for DAP2 (with extensions). For now, test this and build the
203 // rest of the filter implementation. But there is certainly a more _compact_
204 // way to code this!
205 //
206 // Optimize the extraction of constant values.
207 bool D4FilterClause::cmp(ops op, BaseType *arg1, BaseType *arg2)
208 {
209  return arg1->d4_ops(arg2, op);
210 }
211 
212 } // namespace libdap
virtual bool d4_ops(BaseType *b, int op)
Evaluator a relop for DAP4.
Definition: BaseType.cc:1282
-
STL namespace.
- -
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
- -
DAP4 filter clauses.
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
A class for error processing.
Definition: Error.h:92
-
value_kind get_kind() const
What kind of thing holds the value Values in DAP4 constraints are either constants, dataset variables or function results. It might be nice to know the source of a given value in order to optimize the evaluation of certain kinds of expressions.
Definition: D4RValue.h:150
-
-
- - - - diff --git a/html/D4FilterClause_8h_source.html b/html/D4FilterClause_8h_source.html deleted file mode 100644 index fb0e9aaaf..000000000 --- a/html/D4FilterClause_8h_source.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -libdap: D4FilterClause.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4FilterClause.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2015 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef _d4_filter_clause_h
27 #define _d4_filter_clause_h
28 
29 #include <cassert>
30 #include <vector>
31 
32 #include "ce_expr.tab.hh" // Use the same codes for D4 as we use in DAP2
33 
34 namespace libdap
35 {
36 
37 class D4Rvalue;
38 class D4FilterClause;
39 
45 {
46 private:
47  std::vector<D4FilterClause *> d_clauses;
48 
49  void m_duplicate(const D4FilterClauseList &src);
50 
51 public:
52  typedef std::vector<D4FilterClause *>::iterator iter;
53  typedef std::vector<D4FilterClause *>::const_iterator citer;
54 
55  D4FilterClauseList() { }
56  D4FilterClauseList(const D4FilterClauseList &src) { m_duplicate(src); }
57 
58  D4FilterClauseList(D4FilterClause *c) { add_clause(c); }
59 
60  virtual ~D4FilterClauseList();
61 
62  D4FilterClauseList &operator=(const D4FilterClauseList &rhs) {
63  if (this == &rhs)
64  return *this;
65 
66  m_duplicate(rhs);
67 
68  return *this;
69  }
70 
71  void add_clause(D4FilterClause *c) {
72  d_clauses.push_back(c);
73  }
74 
75  D4FilterClause *get_clause(unsigned int i) {
76  return d_clauses.at(i);
77  }
78 
79  citer cbegin() const { return d_clauses.begin(); }
80  citer cend() const { return d_clauses.end(); }
81 
82  unsigned int size() const { return d_clauses.size(); }
83 
84  // get the clause value; this version supports functional clauses
85  bool value(DMR &dmr);
86 
87  bool value();
88 };
89 
115 {
116 public:
117  enum ops {
118  // Stock relops
119  null = 0,
120  less = SCAN_LESS,
121  greater = SCAN_GREATER,
122  less_equal = SCAN_LESS_EQL,
123  greater_equal = SCAN_GREATER_EQL,
124  equal = SCAN_EQUAL,
125  not_equal = SCAN_NOT_EQUAL,
126  // Regex match for strings
127  match = SCAN_REGEXP,
128  // The mapping operator; not sure if this will be implemented
129  map,
130  // No Data 'operator' for array filtering; may not be impl'd
131  ND
132  };
133 
134 private:
136  ops d_op;
137 
138  D4RValue *d_arg1, *d_arg2;
139 
140  D4FilterClause() : d_op(null), d_arg1(0), d_arg2(0) { }
141 
142  void m_duplicate(const D4FilterClause &rhs);
143 
144  // These methods factor out first the first argument and then the
145  // second. I could write one really large cmp() for all of this...
146  //template<typename T> bool cmp(ops op, BaseType *arg1, T arg2);
147  bool cmp(ops op, BaseType *arg1, BaseType *arg2);
148 
149  friend class D4FilterClauseList;
150 
151 public:
169  D4FilterClause(const ops op, D4RValue *arg1, D4RValue *arg2) :
170  d_op(op), d_arg1(arg1), d_arg2(arg2) {
171  assert(op != null && "null operator");
172  assert(arg1 && "null arg1");
173  assert(arg2 && "null arg2");
174  }
175 
176  D4FilterClause(const D4FilterClause &src) {
177  m_duplicate(src);
178  }
179 
180  D4FilterClause &operator=(const D4FilterClause &rhs) {
181  if (this == &rhs)
182  return *this;
183 
184  m_duplicate(rhs);
185 
186  return *this;
187  }
188 
189  virtual ~D4FilterClause() {
190  delete d_arg1;
191  delete d_arg2;
192  }
193 
194  // get the clause value; this version supports functional clauses
195  bool value(DMR &dmr);
196 
197  bool value();
198 };
199 
200 } // namespace libdap
201 
202 #endif // _clause_h
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
bool value()
Evaluate the list of clauses.
-
List of DAP4 Filter Clauses.
- -
D4FilterClause(const ops op, D4RValue *arg1, D4RValue *arg2)
-
DAP4 filter clauses.
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
-
- - - - diff --git a/html/D4FunctionEvaluator_8cc_source.html b/html/D4FunctionEvaluator_8cc_source.html deleted file mode 100644 index a10bef6b9..000000000 --- a/html/D4FunctionEvaluator_8cc_source.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - -libdap: D4FunctionEvaluator.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4FunctionEvaluator.cc
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2014 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 #include <cstdlib>
26 #include <cerrno>
27 
28 #include <string>
29 #include <sstream>
30 #include <iterator>
31 #include <list>
32 #include <algorithm>
33 
34 //#define DODS_DEBUG
35 
36 #include "D4FunctionScanner.h"
37 #include "D4FunctionEvaluator.h"
38 #include "d4_function_parser.tab.hh"
39 
40 #include "DMR.h"
41 #include "D4Group.h"
42 #include "D4RValue.h"
43 
44 #include "BaseType.h"
45 #include "Array.h"
46 #include "D4Enum.h"
47 
48 #include "escaping.h"
49 #include "util.h"
50 #include "debug.h"
51 
52 namespace libdap {
53 
66 bool D4FunctionEvaluator::parse(const std::string &expr)
67 {
68  d_expr = expr; // set for error messages. See the %initial-action section of .yy
69 
70  std::istringstream iss(expr);
71  D4FunctionScanner scanner(iss);
72  D4FunctionParser parser(scanner, *this /* driver */);
73 
74  if (trace_parsing()) {
75  parser.set_debug_level(1);
76  parser.set_debug_stream(std::cerr);
77  }
78 
79  return parser.parse() == 0;
80 }
81 
109 void D4FunctionEvaluator::eval(DMR *function_result)
110 {
111 #if 0
112  ServerFunctionsList *sf_list = ServerFunctionsList::TheList();
113  ServerFunction *scale = new D4TestFunction;
114  sf_list->add_function(scale);
115 
116  D4FunctionEvaluator parser(dataset, sf_list);
117  if (ce_parser_debug) parser.set_trace_parsing(true);
118  bool parse_ok = parser.parse(function);
119  if (!parse_ok)
120  Error(malformed_expr, "Function Expression failed to parse.");
121  else {
122  if (ce_parser_debug) cerr << "Function Parse OK" << endl;
123  D4RValueList *result = parser.result();
124 
125  function_result = new DMR(&d4_factory, "function_results");
126 #endif
127 
128  if (!d_result) throw InternalErr(__FILE__, __LINE__, "Must parse() the function expression before calling eval()");
129 
130  D4Group *root = function_result->root(); // Load everything in the root group
131 
132  for (D4RValueList::iter i = d_result->begin(), e = d_result->end(); i != e; ++i) {
133  // Copy the BaseTypes; this means all of the function results can
134  // be deleted, which addresses the memory leak issue with function
135  // results. This should also copy the D4Dimensions. jhrg 3/17/14
136  root->add_var((*i)->value(*d_dmr));
137  }
138 
139  delete d_result; // The parser/function allocates the BaseType*s that hold the results.
140  d_result = 0;
141 
142  // Variables can use Dimensions and Enumerations, so those need to be copied
143  // from the source dataset to the result. NB: The variables that refer to these
144  // use weak pointers.
145 
146  // Make a set of D4Dimensions. For each variable in 'function_result', look
147  // for its dimensions in 'dataset' (by name) and add a pointer to those to the
148  // set. Then copy all the stuff in the set into the root group of 'function_
149  // result.'
150  list<D4Dimension*> dim_set;
151 
152  for (Constructor::Vars_iter i = root->var_begin(), ie = root->var_end(); i != ie; ++i) {
153  if ((*i)->is_vector_type()) {
154  Array *a = static_cast<Array*>(*i);
155  for (Array::Dim_iter d = a->dim_begin(), de = a->dim_end(); d != de; ++d) {
156  // Only add Dimensions that are not already present; share dims are not repeated. jhrg 2/7/18
157  D4Dimension *d4_dim = a->dimension_D4dim(d);
158  if (d4_dim) {
159  bool found = (std::find(dim_set.begin(), dim_set.end(), d4_dim) != dim_set.end());
160  if (!found)
161  dim_set.push_back(a->dimension_D4dim(d));
162  }
163  }
164  }
165  }
166 
167  // Copy the D4Dimensions and EnumDefs because this all goes in a new DMR - we don't
168  // want to share those across DMRs because the DMRs delete those (so sharing htem
169  // across DMRs would lead to dangling pointers.
170  for (list<D4Dimension*>::iterator i = dim_set.begin(), e = dim_set.end(); i != e; ++i) {
171  root->dims()->add_dim(*i);
172  }
173 
174  // Now lets do the enumerations....
175  list<D4EnumDef*> enum_def_set;
176  for (Constructor::Vars_iter i = root->var_begin(), ie = root->var_end(); i != ie; ++i) {
177  if ((*i)->type() == dods_enum_c) {
178  enum_def_set.push_back(static_cast<D4Enum*>(*i)->enumeration());
179  }
180  }
181 
182  for (list<D4EnumDef*>::iterator i = enum_def_set.begin(), e = enum_def_set.end(); i != e; ++i) {
183  root->enum_defs()->add_enum(*i);
184  }
185 }
186 
187 // libdap contains functions (in parser-util.cc) that test if a string
188 // can be converted to an int32, e.g., but I used a more streamlined
189 // approach here. 3/13/14 jhrg
202 D4RValue *
203 D4FunctionEvaluator::build_rvalue(const std::string &id)
204 {
205  BaseType *btp = 0;
206 
207  // Look for the id in the dataset first
208  if (top_basetype()) {
209  btp = top_basetype()->var(id);
210  }
211  else {
212  btp = dmr()->root()->find_var(id);
213  }
214 
215  if (btp) return new D4RValue(btp);
216 
217  // If the id is not a variable, try to turn it into a constant,
218  // otherwise, its an error.
219  char *end_ptr = 0;
220 
221  errno = 0;
222  long long ll_val = strtoll(id.c_str(), &end_ptr, 0);
223  if (*end_ptr == '\0' && errno == 0) return new D4RValue(ll_val);
224 
225  // Test for unsigned after signed since strtoull() accepts a minus sign
226  // (and will return a huge number if that's the case). jhrg 3/13/14
227  errno = 0;
228  unsigned long long ull_val = strtoull(id.c_str(), &end_ptr, 0);
229  if (*end_ptr == '\0' && errno == 0) return new D4RValue(ull_val);
230 
231  errno = 0;
232  double d_val = strtod(id.c_str(), &end_ptr);
233  if (*end_ptr == '\0' && errno == 0) return new D4RValue(d_val);
234 
235  // To be a valid string, the id must be quoted (using double quotes)
236  if (is_quoted(id)) return new D4RValue(www2id(id));
237 
238  // if it's none of these, return null
239  return 0;
240 }
241 
242 template<typename T>
243 std::vector<T> *
244 D4FunctionEvaluator::init_arg_list(T val)
245 {
246  std::vector<T> *arg_list = new std::vector<T>();
247  if (get_arg_length_hint() > 0) arg_list->reserve(get_arg_length_hint());
248 
249  arg_list->push_back(val);
250 
251  return arg_list;
252 }
253 
254 // Force an instantiation so this can be called from within the d4_function.yy
255 // parser.
256 template std::vector<dods_byte> *D4FunctionEvaluator::init_arg_list(dods_byte val);
257 template std::vector<dods_int8> *D4FunctionEvaluator::init_arg_list(dods_int8 val);
258 template std::vector<dods_uint16> *D4FunctionEvaluator::init_arg_list(dods_uint16 val);
259 template std::vector<dods_int16> *D4FunctionEvaluator::init_arg_list(dods_int16 val);
260 template std::vector<dods_uint32> *D4FunctionEvaluator::init_arg_list(dods_uint32 val);
261 template std::vector<dods_int32> *D4FunctionEvaluator::init_arg_list(dods_int32 val);
262 template std::vector<dods_uint64> *D4FunctionEvaluator::init_arg_list(dods_uint64 val);
263 template std::vector<dods_int64> *D4FunctionEvaluator::init_arg_list(dods_int64 val);
264 template std::vector<dods_float32> *D4FunctionEvaluator::init_arg_list(dods_float32 val);
265 template std::vector<dods_float64> *D4FunctionEvaluator::init_arg_list(dods_float64 val);
266 
267 // This method is called from the parser (see d4_function_parser.yy, down in the code
268 // section). This will be called during the call to D4FunctionParser::parse(), that
269 // is inside D4FunctionEvaluator::parse(...)
270 void D4FunctionEvaluator::error(const libdap::location &l, const std::string &m)
271 {
272  ostringstream oss;
273  oss << l << ": " << m << ends;
274  throw Error(malformed_expr, oss.str());
275 }
276 
277 } /* namespace libdap */
-
D4Group * root()
Definition: DMR.cc:407
- - - -
virtual void add_function(ServerFunction *func)
Adds the passed ServerFunction pointer to the list of ServerFunctions.
-
virtual void add_var(BaseType *bt, Part part=nil)
Definition: Constructor.cc:407
- -
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
Dim_iter dim_end()
Definition: Array.cc:696
- -
virtual BaseType * var(const string &name="", bool exact_match=true, btp_stack *s=0)
Returns a pointer to a member of a constructor class.
Definition: BaseType.cc:758
- - -
std::vector< dimension >::iterator Dim_iter
Definition: Array.h:206
-
void add_enum(D4EnumDef *enum_def)
Definition: D4EnumDefs.h:155
-
bool is_quoted(const string &s)
Definition: util.cc:574
-
D4RValueList * result() const
-
string www2id(const string &in, const string &escape, const string &except)
Definition: escaping.cc:220
-
bool parse(const std::string &expr)
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
Dim_iter dim_begin()
Definition: Array.cc:690
-
Vars_iter var_begin()
Definition: Constructor.cc:356
-
Vars_iter var_end()
Definition: Constructor.cc:364
- -
A class for error processing.
Definition: Error.h:92
-
D4EnumDefs * enum_defs()
Get the enumerations defined for this Group.
Definition: D4Group.h:97
-
A multidimensional array of identical data types.
Definition: Array.h:112
-
void add_dim(D4Dimension *dim)
Definition: D4Dimensions.h:155
- -
BaseType * find_var(const string &name)
Definition: D4Group.cc:376
-
D4Dimensions * dims()
Get the dimensions defined for this Group.
Definition: D4Group.h:82
-
-
- - - - diff --git a/html/D4FunctionEvaluator_8h_source.html b/html/D4FunctionEvaluator_8h_source.html deleted file mode 100644 index 783e6de12..000000000 --- a/html/D4FunctionEvaluator_8h_source.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -libdap: D4FunctionEvaluator.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4FunctionEvaluator.h
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2014 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 #ifndef D4_FUNCTION_DRIVER_H_
26 #define D4_FUNCTION_DRIVER_H_
27 
28 #include <string>
29 #include <vector>
30 #include <stack>
31 
32 namespace libdap {
33 
34 class location;
35 
36 class BaseType;
37 class Array;
38 class ServerFunctionsList;
39 
40 class DMR;
41 class D4Dimension;
42 class D4RValue;
43 class D4RValueList;
44 
49 {
50  bool d_trace_scanning;
51  bool d_trace_parsing;
52  std::string d_expr;
53 
54  DMR *d_dmr;
55  ServerFunctionsList *d_sf_list;
56 
57  D4RValueList *d_result;
58 
59  std::stack<BaseType*> d_basetype_stack;
60 
61  unsigned long long d_arg_length_hint;
62 
63  // d_expr should be set by parse! Its value is used by the parser right before
64  // the actual parsing operation starts. jhrg 11/26/13
65  std::string *expression()
66  {
67  return &d_expr;
68  }
69 
70  void push_basetype(BaseType *btp)
71  {
72  d_basetype_stack.push(btp);
73  }
74  BaseType *top_basetype() const
75  {
76  return d_basetype_stack.empty() ? 0 : d_basetype_stack.top();
77  }
78  void pop_basetype()
79  {
80  d_basetype_stack.pop();
81  }
82 
83  D4RValue *build_rvalue(const std::string &id);
84 
85  friend class D4FunctionParser;
86 
87 public:
89  d_trace_scanning(false), d_trace_parsing(false), d_expr(""), d_dmr(0), d_sf_list(0), d_result(0), d_arg_length_hint(
90  0)
91  {
92  }
94  d_trace_scanning(false), d_trace_parsing(false), d_expr(""), d_dmr(dmr), d_sf_list(sf_list), d_result(0), d_arg_length_hint(
95  0)
96  {
97  }
98 
99  virtual ~D4FunctionEvaluator()
100  {
101  }
102 
103  bool parse(const std::string &expr);
104 
105  bool trace_scanning() const
106  {
107  return d_trace_scanning;
108  }
109  void set_trace_scanning(bool ts)
110  {
111  d_trace_scanning = ts;
112  }
113 
114  bool trace_parsing() const
115  {
116  return d_trace_parsing;
117  }
118  void set_trace_parsing(bool tp)
119  {
120  d_trace_parsing = tp;
121  }
122 
128  {
129  return d_result;
130  }
131  void set_result(D4RValueList *rv_list)
132  {
133  d_result = rv_list;
134  }
135 
136  void eval(DMR *dmr);
137 
138  unsigned long long get_arg_length_hint() const
139  {
140  return d_arg_length_hint;
141  }
142  void set_arg_length_hint(unsigned long long alh)
143  {
144  d_arg_length_hint = alh;
145  }
146 
147  DMR *dmr() const
148  {
149  return d_dmr;
150  }
151  void set_dmr(DMR *dmr)
152  {
153  d_dmr = dmr;
154  }
155 
156  ServerFunctionsList *sf_list() const
157  {
158  return d_sf_list;
159  }
160  void set_sf_list(ServerFunctionsList *sf_list)
161  {
162  d_sf_list = sf_list;
163  }
164 
165  template<typename t> std::vector<t> *init_arg_list(t val);
166 
167  void error(const libdap::location &l, const std::string &m);
168 };
169 
170 } /* namespace libdap */
171 #endif /* D4_FUNCTION_DRIVER_H_ */
- - - -
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- - -
D4RValueList * result() const
-
bool parse(const std::string &expr)
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
-
- - - - diff --git a/html/D4FunctionScanner_8h_source.html b/html/D4FunctionScanner_8h_source.html deleted file mode 100644 index 643020c8a..000000000 --- a/html/D4FunctionScanner_8h_source.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -libdap: D4FunctionScanner.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4FunctionScanner.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 
27 #ifndef D4_FUNCTION_SCANNER_H_
28 #define D4_FUNCTION_SCANNER_H_
29 
30 // Only include FlexLexer.h if it hasn't been already included
31 #if ! defined(yyFlexLexerOnce)
32 #undef yyFlexLexer
33 #define yyFlexLexer d4_functionFlexLexer
34 #include "FlexLexer.h"
35 #endif
36 
37 # ifndef YY_NULL
38 # if defined __cplusplus && 201103L <= __cplusplus
39 # define YY_NULL nullptr
40 # else
41 # define YY_NULL 0
42 # endif
43 # endif
44 
45 #undef YY_DECL
46 #define YY_DECL int libdap::D4FunctionScanner::yylex()
47 
48 #include "d4_function_parser.tab.hh"
49 
50 namespace libdap {
51 
53 public:
54 
55  D4FunctionScanner(std::istream &in) : d4_functionFlexLexer(&in), yylval(0), loc(0) { };
56 
57  int yylex(libdap::D4FunctionParser::semantic_type *lval, libdap::location *l)
58  {
59  loc = l;
60  yylval = lval;
61  return( yylex() );
62  }
63 
64 private:
65  /* hide this one from public view */
66  int yylex();
67 
68  /* yyval ptr */
69  libdap::D4FunctionParser::semantic_type *yylval;
70 
71  libdap::location *loc;
72 };
73 
74 } /* end namespace libdap */
75 
76 #endif /* D4_FUNCTION_SCANNER_H_ */
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- - -
-
- - - - diff --git a/html/D4Function_8h_source.html b/html/D4Function_8h_source.html deleted file mode 100644 index 9ebcfbcbf..000000000 --- a/html/D4Function_8h_source.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - -libdap: D4Function.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4Function.h
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2014 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 
26 #ifndef D_FUNCTION_H_
27 #define D_FUNCTION_H_
28 
29 namespace libdap {
30 
31 class BaseType;
32 class D4RValueList;
33 class DMR;
34 
35 // D4Function is a pointer to a function that takes a pointer to an RValueList and
36 // a reference to a DMR and returns a pointer to a BaseTYpe.
37 //
38 // I think this would be better as a 'function that takes...' instead of a 'pointer
39 // to a function that takes...' but I used this to make the code fit more closely to
40 // the pattern established by the DAP2 CE functions. jhrg 3/10/14
41 
42 typedef BaseType* (*D4Function)(D4RValueList *, DMR &);
43 
44 }// namespace libdap
45 
46 #endif /* D_FUNCTION_H_ */
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
-
- - - - diff --git a/html/D4Group_8cc_source.html b/html/D4Group_8cc_source.html deleted file mode 100644 index 676dc6a43..000000000 --- a/html/D4Group_8cc_source.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - - -libdap: D4Group.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4Group.cc
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2013 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 #include "config.h"
26 
27 //#define DODS_DEBUG
28 
29 #include <cassert>
30 
31 #include <iostream>
32 #include <sstream>
33 #include <iomanip>
34 
35 #include <stdint.h>
36 
37 #include "crc.h"
38 
39 #include "BaseType.h"
40 #include "Array.h"
41 
42 #include "XMLWriter.h"
43 #include "D4Attributes.h"
44 #include "D4Dimensions.h"
45 #include "D4Group.h"
46 #include "D4Enum.h"
47 
48 #include "D4StreamMarshaller.h"
49 #include "D4StreamUnMarshaller.h"
50 
51 #include "debug.h"
52 
58 #undef INCLUDE_SOURCE_BYTE_ORDER
59 
60 namespace libdap {
61 
62 void D4Group::m_duplicate(const D4Group &g)
63 {
64  DBG(cerr << "In D4Group::m_duplicate for " << g.name() << endl);
65 
66  // dims; deep copy, this is the parent
67  if (g.d_dims) {
68  d_dims = new D4Dimensions(*(g.d_dims));
69  d_dims->set_parent(this);
70 
71  // Update all of the D4Dimension weak pointers in the Array objects.
72  // This is a hack - we know that Constructor::m_duplicate() has been
73  // called at this point and any Array instances have dimension pointers
74  // that reference the 'old' dimensions (g.d_dims) and not the 'new'
75  // dimensions made above. Scan every array and re-wire the weak pointers.
76  // jhrg 8/15/14
77  Vars_citer vi = d_vars.begin();
78  while (vi != d_vars.end()) {
79  if ((*vi)->type() == dods_array_c)
80  static_cast<Array*>(*vi)->update_dimension_pointers(g.d_dims, d_dims);
81  ++vi;
82  }
83  }
84 
85 #if 0
86  // Moved this block up inside the if because g.d_dims might be false. jhrg 9/14/15
87  Vars_citer vi = d_vars.begin();
88  while (vi != d_vars.end()) {
89  if ((*vi)->type() == dods_array_c)
90  static_cast<Array*>(*vi)->update_dimension_pointers(g.d_dims, d_dims);
91  ++vi;
92  }
93 #endif
94 
95  // enums; deep copy
96  if (g.d_enum_defs) d_enum_defs = new D4EnumDefs(*g.d_enum_defs);
97 
98  // groups
99  groupsCIter i = g.d_groups.begin();
100  while(i != g.d_groups.end()) {
101  // Only D4Groups are in the d_groups container.
102  D4Group *g = static_cast<D4Group*>((*i++)->ptr_duplicate());
103  add_group_nocopy(g);
104  }
105 
106  DBG(cerr << "Exiting D4Group::m_duplicate" << endl);
107 }
108 
119 D4Group::D4Group(const string &name)
120  : Constructor(name, dods_group_c, /*is_dap4*/true), d_dims(0), d_enum_defs(0)
121 {}
122 
133 D4Group::D4Group(const string &name, const string &dataset)
134  : Constructor(name, dataset, dods_group_c, /*is_dap4*/true), d_dims(0), d_enum_defs(0)
135 {}
136 
138 D4Group::D4Group(const D4Group &rhs) : Constructor(rhs), d_dims(0), d_enum_defs(0)
139 {
140  DBG(cerr << "In D4Group::copy_ctor for " << rhs.name() << endl);
141  m_duplicate(rhs);
142 }
143 
144 D4Group::~D4Group()
145 {
146  delete d_dims;
147  delete d_enum_defs;
148 
149  groupsIter i = d_groups.begin();
150  while(i != d_groups.end())
151  delete *i++;
152 }
153 
154 #if 0
155 D4Group *
156 
157 // I think this was a mistake. jhrg 11/17/16
158 #endif
159 BaseType *
161 {
162  return new D4Group(*this);
163 }
164 
165 D4Group &
166 D4Group::operator=(const D4Group &rhs)
167 {
168  if (this == &rhs)
169  return *this;
170 
171  dynamic_cast<Constructor &>(*this) = rhs; // run Constructor=
172 
173  m_duplicate(rhs);
174 
175  return *this;
176 }
177 
184 string
186 {
187  // The root group is named "/" (always)
188  return (name() == "/") ? "/" : static_cast<D4Group*>(get_parent())->FQN() + name() + "/";
189 }
190 
191 // Note that in order for this to work the second argument must not be a reference.
192 // jhrg 8/20/13
193 static bool
194 name_eq(D4Group *g, const string name)
195 {
196  return g->name() == name;
197 }
198 
199 D4Group *
200 D4Group::find_child_grp(const string &grp_name)
201 {
202  groupsIter g = find_if(grp_begin(), grp_end(), bind2nd(ptr_fun(name_eq), grp_name));
203  return (g == grp_end()) ? 0: *g;
204 }
205 
206 // TODO Add constraint param? jhrg 11/17/13
207 BaseType *
208 D4Group::find_first_var_that_uses_dimension(D4Dimension *dim)
209 {
210  // for each group, starting with the root group
211  // for each variable in the group that is marked to send and is an array
212  // return the btp if it uses the D4Dimension
213  // if it contains child groups, search those
214  // return the btp if it uses the D4Dimension
215  // return null
216 
217  // exhaustive breadth-first search for 'dim
218 
219  // root group
220  for (Vars_iter i = var_begin(), e = var_end(); i != e; ++i) {
221  if ((*i)->send_p() && (*i)->type() == dods_array_c) {
222  Array *a = static_cast<Array*>(*i);
223  for (Array::Dim_iter di = a->dim_begin(), de = a->dim_end(); di != de; ++di) {
224  if (a->dimension_D4dim(di) == dim)
225  return a;
226  }
227  }
228  }
229 
230  for (groupsIter i = grp_begin(), e = grp_end(); i != e; ++i) {
231  BaseType *btp = (*i)->find_first_var_that_uses_dimension(dim);
232  if (btp) return btp;
233  }
234 
235  return 0;
236 }
237 
238 BaseType *
239 D4Group::find_first_var_that_uses_enumeration(D4EnumDef *enum_def)
240 {
241  // for each group, starting with the root group
242  // for each variable in the group that is marked to send and is an array
243  // return the btp if it uses the D4EnumDef
244  // if it contains child groups, search those
245  // return the btp if it uses the D4EnumDef
246  // return null
247 
248  // exhaustive breadth-first search for 'dim
249 
250  // root group
251  for (Vars_iter i = var_begin(), e = var_end(); i != e; ++i) {
252  if ((*i)->send_p() && (*i)->type() == dods_enum_c) {
253  D4Enum *e = static_cast<D4Enum*>(*i);
254  if (e->enumeration() == enum_def)
255  return e;
256  }
257  }
258 
259  for (groupsIter i = grp_begin(), e = grp_end(); i != e; ++i) {
260  BaseType *btp = (*i)->find_first_var_that_uses_enumeration(enum_def);
261  if (btp) return btp;
262  }
263 
264  return 0;
265 }
266 
276 D4Dimension *
277 D4Group::find_dim(const string &path)
278 {
279  string lpath = path; // get a mutable copy
280 
281  // special-case for the root group
282  if (lpath[0] == '/') {
283  if (name() != "/")
284  throw InternalErr(__FILE__, __LINE__, "Lookup of a FQN starting in non-root group.");
285  else
286  lpath = lpath.substr(1);
287  }
288 
289  string::size_type pos = lpath.find('/');
290  if (pos == string::npos) {
291  // name looks like 'bar'
292  return dims()->find_dim(lpath);
293  }
294 
295  // name looks like foo/bar/baz where foo and bar must be groups
296  string grp_name = lpath.substr(0, pos);
297  lpath = lpath.substr(pos + 1);
298 
299  D4Group *grp = find_child_grp(grp_name);
300  return (grp == 0) ? 0: grp->find_dim(lpath);
301 }
302 
303 Array *
304 D4Group::find_map_source(const string &path)
305 {
306  BaseType *map_source = m_find_map_source_helper(path);
307 
308  // TODO more complete semantic checking jhrg 10/16/13
309  if (map_source && map_source->type() == dods_array_c) return static_cast<Array*>(map_source);
310 
311  return 0;
312 }
313 
314 BaseType *
315 D4Group::m_find_map_source_helper(const string &path)
316 {
317  string lpath = path; // get a mutable copy
318 
319  // special-case for the root group
320  if (lpath[0] == '/') {
321  if (name() != "/")
322  throw InternalErr(__FILE__, __LINE__, "Lookup of a FQN starting in non-root group.");
323  else
324  lpath = lpath.substr(1);
325  }
326 
327  string::size_type pos = lpath.find('/');
328  if (pos == string::npos) {
329  // name looks like 'bar'
330  return var(lpath);
331  }
332 
333  // name looks like foo/bar/baz where foo an bar must be groups
334  string grp_name = lpath.substr(0, pos);
335  lpath = lpath.substr(pos + 1);
336 
337  D4Group *grp = find_child_grp(grp_name);
338  return (grp == 0) ? 0: grp->var(lpath);
339 }
340 
341 D4EnumDef *
342 D4Group::find_enum_def(const string &path)
343 {
344  string lpath = path; // get a mutable copy
345 
346  // special-case for the root group
347  if (lpath[0] == '/') {
348  if (name() != "/")
349  throw InternalErr(__FILE__, __LINE__, "Lookup of a FQN starting in non-root group.");
350  else
351  lpath = lpath.substr(1);
352  }
353 
354  string::size_type pos = lpath.find('/');
355  if (pos == string::npos) {
356  // name looks like 'bar'
357  return enum_defs()->find_enum_def(lpath);
358  }
359 
360  // name looks like foo/bar/baz where foo and bar must be groups
361  string grp_name = lpath.substr(0, pos);
362  lpath = lpath.substr(pos + 1);
363 
364  D4Group *grp = find_child_grp(grp_name);
365  return (grp == 0) ? 0: grp->enum_defs()->find_enum_def(lpath);
366 }
367 
375 BaseType *
376 D4Group::find_var(const string &path)
377 {
378  string lpath = path; // get a mutable copy
379 
380  // special-case for the root group
381  if (lpath[0] == '/') {
382  if (name() != "/")
383  throw InternalErr(__FILE__, __LINE__, "Lookup of a FQN starting in non-root group.");
384  else
385  lpath = lpath.substr(1);
386  }
387 
388  string::size_type pos = lpath.find('/');
389  if (pos == string::npos) {
390  // name looks like 'bar' or bar.baz; lookup in the Constructor that's part of the Group
391  return var(lpath);
392  }
393 
394  // name looks like foo/bar/baz where foo and bar must be groups
395  string grp_name = lpath.substr(0, pos);
396  lpath = lpath.substr(pos + 1);
397 
398  D4Group *grp = find_child_grp(grp_name);
399  return (grp == 0) ? 0 : grp->find_var(lpath);
400 }
401 
408 long
409 D4Group::request_size(bool constrained)
410 {
411  long long size = 0;
412  // variables
413  Constructor::Vars_iter v = var_begin();
414  while (v != var_end()) {
415  if (constrained) {
416  if ((*v)->send_p())
417  size += (*v)->width(constrained);
418  }
419  else {
420  size += (*v)->width(constrained);
421  }
422 
423  ++v;
424  }
425 
426  // groups
427  groupsIter g = d_groups.begin();
428  while (g != d_groups.end())
429  size += (*g++)->request_size(constrained);
430 
431  return size / 1024;
432 }
433 
434 void
436 {
437  groupsIter g = d_groups.begin();
438  while (g != d_groups.end())
439  (*g++)->set_read_p(state);
440 
442 }
443 
444 void
446 {
447  groupsIter g = d_groups.begin();
448  while (g != d_groups.end())
449  (*g++)->set_send_p(state);
450 
452 }
453 
454 void
455 D4Group::intern_data(/*Crc32 &checksum, DMR &dmr, ConstraintEvaluator &eval*/)
456 {
457  groupsIter g = d_groups.begin();
458  while (g != d_groups.end())
459  (*g++)->intern_data(/*checksum, dmr, eval*/);
460 
461  // Specialize how the top-level variables in any Group are sent; include
462  // a checksum for them. A subset operation might make an interior set of
463  // variables, but the parent structure will still be present and the checksum
464  // will be computed for that structure. In other words, DAP4 does not try
465  // to sort out which variables are the 'real' top-level variables and instead
466  // simply computes the CRC for whatever appears as a variable in the root
467  // group.
468  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
469  // Only send the stuff in the current subset.
470  if ((*i)->send_p()) {
471 #if 0
472  checksum.Reset();
473 #endif
474  (*i)->intern_data(/*checksum, dmr, eval*/);
475 #if 0
476  D4Attribute *a = new D4Attribute("DAP4_Checksum_CRC32", attr_str_c);
477 
478  ostringstream oss;
479  oss.setf(ios::hex, ios::basefield);
480  oss << setfill('0') << setw(8) << checksum.GetCrc32();
481  a->add_value(oss.str());
482 #if INCLUDE_SOURCE_BYTE_ORDER
483  if (um.is_source_big_endian())
484  a->add_value("source:big-endian");
485  else
486  a->add_value("source:little-endian");
487 #endif
488  (*i)->attributes()->add_attribute_nocopy(a);
489  DBG(cerr << "CRC32: " << oss.str() << " for " << (*i)->name() << endl);
490 #endif
491  }
492  }
493 }
494 
506 void
507 D4Group::serialize(D4StreamMarshaller &m, DMR &dmr, /*ConstraintEvaluator &eval,*/ bool filter)
508 {
509 #if 0
510  // This will call Constructor read which will, for everything but a Sequence,
511  // read all of the data in one shot. However, the serialize() methods for the
512  // Arrays, Structures, etc., also have read() calls in them and those can be
513  // used to control how long the data are in memory, e.g., limiting the lifetime
514  // of a large array and avoiding having overlapping arrays when they are not
515  // needed. For a sequence read() has different semantics. It is called once
516  // for every instance and the read_p flag is not used.
517  if (!read_p())
518  read(); // read() throws Error
519 #endif
520 
521  groupsIter g = d_groups.begin();
522  while (g != d_groups.end())
523  (*g++)->serialize(m, dmr, filter);
524 
525  // Specialize how the top-level variables in any Group are sent; include
526  // a checksum for them. A subset operation might make an interior set of
527  // variables, but the parent structure will still be present and the checksum
528  // will be computed for that structure. In other words, DAP4 does not try
529  // to sort out which variables are the 'real' top-level variables and instead
530  // simply computes the CRC for whatever appears as a variable in the root
531  // group.
532  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
533  // Only send the stuff in the current subset.
534  if ((*i)->send_p()) {
535  m.reset_checksum();
536 
537  DBG(cerr << "Serializing variable " << (*i)->type_name() << " " << (*i)->name() << endl);
538  (*i)->serialize(m, dmr, filter);
539 
540  DBG(cerr << "Wrote CRC32: " << m.get_checksum() << " for " << (*i)->name() << endl);
541  m.put_checksum();
542  }
543  }
544 }
545 
547 {
548  groupsIter g = d_groups.begin();
549  while (g != d_groups.end()) {
550  DBG(cerr << "Deserializing group " << (*g)->name() << endl);
551  (*g++)->deserialize(um, dmr);
552  }
553  // Specialize how the top-level variables in any Group are received; read
554  // their checksum and store the value in a magic attribute of the variable
555  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
556  DBG(cerr << "Deserializing variable " << (*i)->type_name() << " " << (*i)->name() << endl);
557  (*i)->deserialize(um, dmr);
558 
559  D4Attribute *a = new D4Attribute("DAP4_Checksum_CRC32", attr_str_c);
560  string crc = um.get_checksum_str();
561  a->add_value(crc);
562 #if INCLUDE_SOURCE_BYTE_ORDER
563  if (um.is_source_big_endian())
564  a->add_value("source:big-endian");
565  else
566  a->add_value("source:little-endian");
567 #endif
568  DBG(cerr << "Read CRC32: " << crc << " for " << (*i)->name() << endl);
569  (*i)->attributes()->add_attribute_nocopy(a);
570  }
571 }
572 
573 void
574 D4Group::print_dap4(XMLWriter &xml, bool constrained)
575 {
576  if (!name().empty() && name() != "/") {
577  // For named groups, if constrained is true only print if this group
578  // has variables that are marked for transmission. For the root group
579  // this test is not made.
580  if (constrained && !send_p())
581  return;
582 
583  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) type_name().c_str()) < 0)
584  throw InternalErr(__FILE__, __LINE__, "Could not write " + type_name() + " element");
585 
586  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name", (const xmlChar*) name().c_str()) < 0)
587  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
588  }
589 
590  // dims
591  if (!dims()->empty())
592  dims()->print_dap4(xml, constrained);
593 
594  // enums
595  if (!enum_defs()->empty())
596  enum_defs()->print_dap4(xml, constrained);
597 
598  // variables
599  Constructor::Vars_iter v = var_begin();
600  while (v != var_end())
601  (*v++)->print_dap4(xml, constrained);
602 
603  // attributes
604  attributes()->print_dap4(xml);
605 
606  // groups
607  groupsIter g = d_groups.begin();
608  while (g != d_groups.end())
609  (*g++)->print_dap4(xml, constrained);
610 
611  if (!name().empty() && name() != "/") {
612  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
613  throw InternalErr(__FILE__, __LINE__, "Could not end " + type_name() + " element");
614  }
615 }
616 #if 0
617 
633 vector<BaseType *> *
634 D4Group::transform_to_dap2(AttrTable *parent_attr_table)
635 {
636  return transform_to_dap2(parent_attr_table, false);
637 }
638 #endif
639 
662 vector<BaseType *> *
664 {
665  DBG( cerr << __func__ << "() - BEGIN ("<< name() << ")" << endl);
666 
667  vector<BaseType *> *results = new vector<BaseType *>(); // LEAK
668 
669  // Get the D4Group's attributes
670 #if 0
671  AttrTable *group_attrs = attributes()->get_AttrTable(name());
672 #else
673  AttrTable *group_attrs = new AttrTable();
674  attributes()->transform_attrs_to_dap2(group_attrs);
675  group_attrs->set_name(name());
676 #endif
677 
678  // If this is the root group then copy all of its attributes into the parent_attr_table.
679  // The group_attrs AttrTable* above will be replaced by the parent_attr_table.
680  bool is_root = (name() == "/");
681 
682  if (is_root) {
683  assert(name() == "/");
684  for (AttrTable::Attr_iter i = group_attrs->attr_begin(), e = group_attrs->attr_end(); i != e; ++i) {
685  if ((*i)->type == Attr_container) {
686  // copy the source container so that the DAS passed in can be
687  // deleted after calling this method.
688  AttrTable *at = new AttrTable(*(*i)->attributes);
689  parent_attr_table->append_container(at, at->get_name());
690  }
691  else {
692  parent_attr_table->append_attr((*i)->name, AttrType_to_String((*i)->type), (*i)->attr);
693  }
694  }
695  delete group_attrs;
696  group_attrs = parent_attr_table;
697  }
698 
699  // Now we process the child variables of this group
700 
701  vector<BaseType *> dropped_vars;
702  for (D4Group::Vars_citer i = var_begin(), e = var_end(); i != e; ++i) {
703 
704  DBG( cerr << __func__ << "() - Processing member variable '" << (*i)->name() <<
705  "' root: " << (is_root?"true":"false") << endl);
706 
707  vector<BaseType *> *new_vars = (*i)->transform_to_dap2(group_attrs);
708  if (new_vars) { // Might be un-mappable
709  // It's not so game on..
710  for (vector<BaseType*>::iterator vi = new_vars->begin(), ve = new_vars->end(); vi != ve; vi++) {
711  string new_name = (is_root ? "" : FQN()) + (*vi)->name();
712  (*vi)->set_name(new_name);
713  (*vi)->set_parent(NULL);
714  results->push_back((*vi));
715 #if 0
716  (*vi) = NULL;
717 #endif
718  DBG( cerr << __func__ << "() - Added member variable '" << (*i)->name() << "' " <<
719  "to results vector. root: "<< (is_root?"true":"false") << endl);
720  }
721 
722  delete new_vars;
723  }
724  else {
725  DBG( cerr << __func__ << "() - Dropping member variable " << (*i)->name() <<
726  " root: " << (is_root?"true":"false") << endl);
727  // Got back a NULL, so we are dropping this var.
728  dropped_vars.push_back(*i);
729  }
730  }
731 
732  // Process dropped DAP4 vars
733  DBG( cerr << __func__ << "() - Processing " << dropped_vars.size() << " Dropped Variable(s)" << endl);
734 
735  AttrTable *dv_attr_table = make_dropped_vars_attr_table(&dropped_vars);
736  if (dv_attr_table) {
737  group_attrs->append_container(dv_attr_table, dv_attr_table->get_name());
738  }
739 
740  // Get all the child groups.
741  for (D4Group::groupsIter gi = grp_begin(), ge = grp_end(); gi != ge; ++gi) {
742  vector<BaseType *> *d2_vars = (*gi)->transform_to_dap2(group_attrs);
743  if (d2_vars) {
744  for (vector<BaseType *>::iterator i = d2_vars->begin(), e = d2_vars->end(); i != e; ++i) {
745  results->push_back(*i);
746  }
747  }
748  delete d2_vars;
749  }
750 
751  if (!is_root) {
752  group_attrs->set_name(name());
753  parent_attr_table->append_container(group_attrs, group_attrs->get_name());
754  }
755 
756  return results;
757 }
758 
759 
760 } /* namespace libdap */
-
virtual bool read_p()
Has this variable been read?
Definition: BaseType.cc:480
-
virtual string name() const
Returns the name of the class instance.
Definition: BaseType.cc:320
-
bool is_source_big_endian() const
Is the data source we are reading from a big-endian machine? We need this because the value of the CR...
-
virtual Attr_iter attr_end()
Definition: AttrTable.cc:719
-
virtual BaseType * var(const string &name, bool exact_match=true, btp_stack *s=0)
btp_stack no longer needed; use back pointers (BaseType::get_parent())
Definition: Constructor.cc:267
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
string AttrType_to_String(const AttrType at)
Definition: AttrTable.cc:97
-
D4Dimension * find_dim(const string &path)
Find the dimension using a path. Using the DAP4 name syntax, lookup a dimension. The dimension must b...
Definition: D4Group.cc:277
-
virtual string get_name() const
Get the name of this attribute table.
Definition: AttrTable.cc:238
-
Read data from the stream made by D4StreamMarshaller.
-
D4Group(const string &name)
Definition: D4Group.cc:119
-
virtual void serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)
Serialize a Group.
Definition: D4Group.cc:507
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
Dim_iter dim_end()
Definition: Array.cc:696
-
void transform_attrs_to_dap2(AttrTable *d2_attr_table)
Copy the attributes from this D4Attributes object to a DAP2 AttrTable.
- -
Holds a DAP4 enumeration.
Definition: D4Enum.h:61
-
virtual BaseType * ptr_duplicate()
Definition: D4Group.cc:160
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
-
long request_size(bool constrained)
Definition: D4Group.cc:409
-
virtual AttrTable * append_container(const string &name)
Add a container to the attribute table.
Definition: AttrTable.cc:410
-
virtual Type type() const
Returns the type of the class instance.
Definition: BaseType.cc:365
-
std::vector< dimension >::iterator Dim_iter
Definition: Array.h:206
-
virtual bool read()
simple implementation of read that iterates through vars and calls read on them
Definition: Constructor.cc:476
-
groupsIter grp_end()
Get an iterator to the end of the values.
Definition: D4Group.h:114
-
virtual D4Attributes * attributes()
Definition: BaseType.cc:599
-
virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr)
Definition: D4Group.cc:546
-
virtual void intern_data()
Read data into this variable.
Definition: D4Group.cc:455
-
virtual Attr_iter attr_begin()
Definition: AttrTable.cc:711
-
groupsIter grp_begin()
Get an iterator to the start of the values.
Definition: D4Group.h:111
-
virtual std::vector< BaseType * > * transform_to_dap2(AttrTable *parent_attr_table)
Transform the D4Group&#39;s variables to DAP2 variables.
Definition: D4Group.cc:663
- -
virtual BaseType * get_parent() const
Definition: BaseType.cc:751
-
virtual unsigned int append_attr(const string &name, const string &type, const string &value)
Add an attribute to the table.
Definition: AttrTable.cc:307
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
Dim_iter dim_begin()
Definition: Array.cc:690
-
virtual string type_name() const
Returns the type of the class instance as a string.
Definition: BaseType.cc:379
-
Vars_iter var_begin()
Definition: Constructor.cc:356
-
void print_dap4(XMLWriter &xml, bool constrained=false)
Definition: D4Group.cc:574
-
virtual std::string FQN() const
Definition: D4Group.cc:185
-
Vars_iter var_end()
Definition: Constructor.cc:364
- - - -
virtual void set_name(const string &n)
Set the name of this attribute table.
Definition: AttrTable.cc:245
-
virtual void put_checksum()
Write the checksum Write the checksum for the data sent since the last call to reset_checksum() to th...
-
D4EnumDefs * enum_defs()
Get the enumerations defined for this Group.
Definition: D4Group.h:97
-
virtual void set_send_p(bool state)
Definition: Constructor.cc:208
- -
A multidimensional array of identical data types.
Definition: Array.h:112
-
virtual bool send_p()
Should this variable be sent?
Definition: BaseType.cc:554
-
virtual void set_read_p(bool state)
Sets the value of the read_p property.
Definition: D4Group.cc:435
-
virtual void set_send_p(bool state)
Definition: D4Group.cc:445
- -
virtual string dataset() const
Returns the name of the dataset used to create this instance.
Definition: BaseType.cc:358
-
BaseType * find_var(const string &name)
Definition: D4Group.cc:376
-
D4Dimensions * dims()
Get the dimensions defined for this Group.
Definition: D4Group.h:82
-
virtual void set_read_p(bool state)
Sets the value of the read_p property.
Definition: Constructor.cc:218
-
-
- - - - diff --git a/html/D4Group_8h_source.html b/html/D4Group_8h_source.html deleted file mode 100644 index 160d4d5b9..000000000 --- a/html/D4Group_8h_source.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - -libdap: D4Group.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4Group.h
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
10 //
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
15 //
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 //
20 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
21 
22 #ifndef D4GROUP_H_
23 #define D4GROUP_H_
24 
25 #include <string>
26 
27 #include "Constructor.h"
28 #include "D4Dimensions.h"
29 #include "D4EnumDefs.h"
30 
31 class Crc32;
32 
33 namespace libdap {
34 
35 class BaseType;
36 class Array;
37 
43 class D4Group :public Constructor {
44 private:
45  // Note that because Constructor is a BaseType, this class inherits
46  // both a back pointer to its parent, an AttrTable and, directly from the
47  // Constructor class, a vector of BaseTypes.
48 
49  // This instance of D4Dimensions holds the Group's definitions; the same
50  // class is used by Array to hold the actual dimensions for a variable.
51  D4Dimensions *d_dims;
52 
53  // This holds the Group's enumeration definitions; a different class is
54  // used for the Enumeration type
55  D4EnumDefs *d_enum_defs;
56 
57  // This is a pointer so that the factory class(es) that return pointers
58  // work as expected when making Groups.
59  vector<D4Group*> d_groups;
60 
61  BaseType *m_find_map_source_helper(const string &name);
62 
63 protected:
64  void m_duplicate(const D4Group &g);
65 
66 public:
67  typedef vector<D4Group*>::iterator groupsIter;
68  typedef vector<D4Group*>::const_iterator groupsCIter;
69 
70  D4Group(const string &name);
71  D4Group(const string &name, const string &dataset);
72 
73  D4Group(const D4Group &rhs);
74  virtual ~D4Group();
75 
76  D4Group &operator=(const D4Group &rhs);
77 
78  // This method returned a D4Group * previously. jhrg 11/17/16
79  virtual BaseType *ptr_duplicate();
80 
83  // If not built yet, make one and set this as parent.
84  if (!d_dims) d_dims = new D4Dimensions(this);
85  return d_dims;
86  }
87 
88  virtual std::string FQN() const;
89 
90  D4Dimension *find_dim(const string &path);
91 
92  Array *find_map_source(const string &path);
93 
94  D4EnumDef *find_enum_def(const string &path);
95 
98  if (!d_enum_defs) {
99  d_enum_defs = new D4EnumDefs;
100  d_enum_defs->set_parent(this);
101  }
102  return d_enum_defs;
103  }
104 
105  BaseType *find_first_var_that_uses_dimension(D4Dimension *dim);
106  BaseType *find_first_var_that_uses_enumeration(D4EnumDef *enum_def);
107 
108  BaseType *find_var(const string &name);
109 
111  groupsIter grp_begin() { return d_groups.begin(); }
112 
114  groupsIter grp_end() { return d_groups.end(); }
115 
116  void add_group(const D4Group *g) {
117  add_group_nocopy(new D4Group(*g));
118  }
119 
120  void add_group_nocopy(D4Group *g) {
121  g->set_parent(this);
122  d_groups.push_back(g);
123  }
124  void insert_group_nocopy(D4Group *g, groupsIter i) {
125  g->set_parent(this);
126  d_groups.insert(i, g);
127  }
128 
129  D4Group *find_child_grp(const string &grp_name);
130 
131  long request_size(bool constrained);
132 
133  virtual void set_send_p(bool state);
134  virtual void set_read_p(bool state);
135 
136  // DAP4
137  virtual void intern_data(/*Crc32 &checksum, DMR &dmr, ConstraintEvaluator &eval*/);
138  virtual void serialize(D4StreamMarshaller &m, DMR &dmr, /*ConstraintEvaluator &eval,*/ bool filter = false);
139  virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr);
140 
141  void print_dap4(XMLWriter &xml, bool constrained = false);
142 
143  virtual std::vector<BaseType *> *transform_to_dap2(AttrTable *parent_attr_table);
144  //virtual std::vector<BaseType *> *transform_to_dap2(AttrTable *parent_attr_table, bool is_root);
145 
146 };
147 
148 } /* namespace libdap */
149 #endif /* D4GROUP_H_ */
virtual string name() const
Returns the name of the class instance.
Definition: BaseType.cc:320
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
D4Dimension * find_dim(const string &path)
Find the dimension using a path. Using the DAP4 name syntax, lookup a dimension. The dimension must b...
Definition: D4Group.cc:277
-
Read data from the stream made by D4StreamMarshaller.
-
D4Group(const string &name)
Definition: D4Group.cc:119
-
Definition: crc.h:76
-
virtual void serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)
Serialize a Group.
Definition: D4Group.cc:507
-
virtual void set_parent(BaseType *parent)
Definition: BaseType.cc:733
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- -
virtual BaseType * ptr_duplicate()
Definition: D4Group.cc:160
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
-
long request_size(bool constrained)
Definition: D4Group.cc:409
-
groupsIter grp_end()
Get an iterator to the end of the values.
Definition: D4Group.h:114
-
virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr)
Definition: D4Group.cc:546
-
virtual void intern_data()
Read data into this variable.
Definition: D4Group.cc:455
-
groupsIter grp_begin()
Get an iterator to the start of the values.
Definition: D4Group.h:111
-
virtual std::vector< BaseType * > * transform_to_dap2(AttrTable *parent_attr_table)
Transform the D4Group&#39;s variables to DAP2 variables.
Definition: D4Group.cc:663
- - -
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
void print_dap4(XMLWriter &xml, bool constrained=false)
Definition: D4Group.cc:574
-
virtual std::string FQN() const
Definition: D4Group.cc:185
- - - -
D4EnumDefs * enum_defs()
Get the enumerations defined for this Group.
Definition: D4Group.h:97
-
A multidimensional array of identical data types.
Definition: Array.h:112
-
virtual void set_read_p(bool state)
Sets the value of the read_p property.
Definition: D4Group.cc:435
-
virtual void set_send_p(bool state)
Definition: D4Group.cc:445
- -
virtual string dataset() const
Returns the name of the dataset used to create this instance.
Definition: BaseType.cc:358
-
BaseType * find_var(const string &name)
Definition: D4Group.cc:376
-
D4Dimensions * dims()
Get the dimensions defined for this Group.
Definition: D4Group.h:82
-
-
- - - - diff --git a/html/D4Maps_8cc_source.html b/html/D4Maps_8cc_source.html deleted file mode 100644 index 9517f555f..000000000 --- a/html/D4Maps_8cc_source.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -libdap: D4Maps.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4Maps.cc
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2013 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 #include "config.h"
26 
27 #include "XMLWriter.h"
28 #include "InternalErr.h"
29 #include "D4Maps.h"
30 
31 using namespace libdap;
32 
33 void
34 D4Map::print_dap4(XMLWriter &xml)
35 {
36  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) "Map") < 0)
37  throw InternalErr(__FILE__, __LINE__, "Could not write Map element");
38 
39  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name", (const xmlChar*)d_name.c_str()) < 0)
40  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
41 
42  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
43  throw InternalErr(__FILE__, __LINE__, "Could not end Map element");
44 
45 }
46 
47 D4Maps&
48 D4Maps::operator=(const D4Maps &rhs)
49 {
50  if (this == &rhs) return *this;
51  m_duplicate(rhs);
52  return *this;
53 }
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
- - -
-
- - - - diff --git a/html/D4Maps_8h_source.html b/html/D4Maps_8h_source.html deleted file mode 100644 index 4c412096f..000000000 --- a/html/D4Maps_8h_source.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -libdap: D4Maps.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4Maps.h
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2013 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 #ifndef D4MAPS_H_
26 #define D4MAPS_H_
27 
28 #include <string>
29 #include <vector>
30 
31 using namespace std;
32 
33 namespace libdap {
34 
35 class Array;
36 class XMLWriter;
37 
54 class D4Map {
55  std::string d_name;
56  Array *d_array; // the actual map data; weak pointer
57  Array *d_parent; // what array holds this map; weak pointer
58 
59 public:
60  D4Map() : d_name(""), d_array(0), d_parent(0) { }
61  D4Map(const string &name, Array *array, Array *parent = 0) : d_name(name), d_array(array), d_parent(parent) { }
62 
63  virtual ~D4Map() { }
64 
65  const string& name() const { return d_name; }
66  void set_name(const string& name) { d_name = name; }
67 
68  const Array* array() const { return d_array; }
69  void set_array(Array* array) { d_array = array; }
70 
74  const Array* parent() const { return d_parent; }
75  void set_parent(Array* parent) { d_parent = parent; }
76 
77  virtual void print_dap4(XMLWriter &xml);
78 };
79 
84 class D4Maps {
85 public:
86  typedef vector<D4Map*>::iterator D4MapsIter;
87  typedef vector<D4Map*>::const_iterator D4MapsCIter;
88 
89 private:
90  vector<D4Map*> d_maps;
91  Array *d_parent; // Array these Maps belong to; weak pointer
92 
93  void m_duplicate(const D4Maps &maps) {
94  d_parent = maps.d_parent;
95  for (D4MapsCIter ci = maps.d_maps.begin(), ce = maps.d_maps.end(); ci != ce; ++ci) {
96  d_maps.push_back(new D4Map(**ci));
97  }
98  }
99 
100 public:
101  D4Maps() {}
102  D4Maps(Array* parent) : d_parent(parent) { }
103  D4Maps(const D4Maps &maps) { m_duplicate(maps); }
104  virtual ~D4Maps() {
105  for (D4MapsIter i = d_maps.begin(), e = d_maps.end(); i != e; ++i)
106  delete *i;
107  }
108 
109  D4Maps &operator=(const D4Maps &rhs);
110 
115  void add_map(D4Map *map) {
116  d_maps.push_back(map);
117  // if the Map parent is not set, do so now
118  if (!d_maps.back()->parent())
119  d_maps.back()->set_parent(d_parent);
120  }
121 
122  void remove_map(D4Map *map) {
123  for (D4MapsIter i = d_maps.begin(), e = d_maps.end(); i != e; ++i) {
124  /* && (*i)->parent() == map->parent() */
125  // Don't test if the map->parent() matches - we only care about the name and array.
126  // This method is intended for processing CE array slices that are edge cases and
127  // is only called from code where we know map->parent() matches *i->parent().
128  // jhrg 4/12/16
129  if ((*i)->name() == map->name() && (*i)->array() == map->array()) {
130  d_maps.erase(i);
131  break;
132  }
133  }
134  }
135 
136  D4Map* get_map(int i) { return d_maps.at(i); }
137 
138  D4MapsIter map_begin() { return d_maps.begin(); }
139  D4MapsIter map_end() { return d_maps.end(); }
140 
141  int size() const { return d_maps.size(); }
142  bool empty() const { return d_maps.empty(); }
143 
144  virtual void print_dap4(XMLWriter &xml) {
145  for (D4MapsIter i = d_maps.begin(), e = d_maps.end(); i != e; ++i)
146  (*i)->print_dap4(xml);
147  }
148 };
149 
150 } /* namespace libdap */
151 #endif /* D4MAPS_H_ */
STL namespace.
- -
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- - -
void add_map(D4Map *map)
Definition: D4Maps.h:115
-
const Array * parent() const
The Array that holds this Map.
Definition: D4Maps.h:74
-
A multidimensional array of identical data types.
Definition: Array.h:112
-
-
- - - - diff --git a/html/D4Opaque_8cc_source.html b/html/D4Opaque_8cc_source.html deleted file mode 100644 index 0439532d2..000000000 --- a/html/D4Opaque_8cc_source.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -libdap: D4Opaque.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4Opaque.cc
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2013 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin D4Opaqueeet, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 //#define DODS_DEBUG
26 
27 #include "config.h"
28 
29 #include <sstream>
30 #include <iterator>
31 
32 #include "D4Opaque.h"
33 
34 #include "DMR.h"
35 #include "D4StreamMarshaller.h"
36 #include "D4StreamUnMarshaller.h"
37 
38 #include "util.h"
39 #include "crc.h"
40 
41 #include "debug.h"
42 #include "DapIndent.h"
43 
44 #undef CLEAR_LOCAL_DATA
45 
46 using namespace std;
47 
48 namespace libdap {
49 
50 D4Opaque &
51 D4Opaque::operator=(const D4Opaque &rhs)
52 {
53  if (this == &rhs)
54  return *this;
55 
56  // Call BaseType::operator=
57  dynamic_cast<BaseType &>(*this) = rhs;
58 
59  d_buf = rhs.d_buf;
60 
61  return *this;
62 }
63 
64 void
65 D4Opaque::clear_local_data()
66 {
67  if (!d_buf.empty()) {
68  d_buf.erase(d_buf.begin(), d_buf.end());
69  d_buf.resize(0);
70  }
71 
72  set_read_p(false);
73 }
74 
75 void
76 D4Opaque::compute_checksum(Crc32 &checksum)
77 {
78  checksum.AddData(&d_buf[0], d_buf.size());
79 }
80 
81 void
82 D4Opaque::serialize(D4StreamMarshaller &m, DMR &, bool)
83 {
84  if (!read_p())
85  read(); // read() throws Error
86 
87  m.put_opaque_dap4( reinterpret_cast<char*>(&d_buf[0]), d_buf.size() ) ;
88 
89 #ifdef CLEAR_LOCAL_DATA
90  clear_local_data();
91 #endif
92 
93 }
94 
95 void
96 D4Opaque::deserialize(D4StreamUnMarshaller &um, DMR &)
97 {
98  um.get_opaque_dap4( d_buf ) ;
99 }
100 
101 unsigned int
102 D4Opaque::buf2val(void **val)
103 {
104  assert(val);
105 
106  // If *val is null, then the caller has not allocated storage for the
107  // value; we must. If there is storage there, assume it is a vector<uint8_t>
108  // (i.e., dods_opaque) and assign d_buf's value to that storage.
109  if (!*val)
110  *val = new vector<uint8_t>;
111  else
112  *static_cast<vector<uint8_t>*>(*val) = d_buf;
113 
114  return sizeof(vector<uint8_t>*);
115 }
116 
117 unsigned int
118 D4Opaque::val2buf(void *val, bool)
119 {
120  assert(val);
121 
122  d_buf = *static_cast<dods_opaque*>(val);
123 
124  return sizeof(dods_opaque*);
125 }
126 
131 bool
132 D4Opaque::set_value(const dods_opaque &value)
133 {
134  d_buf = value;
135  set_read_p(true);
136 
137  return true;
138 }
139 
142 D4Opaque::dods_opaque
143 D4Opaque::value() const
144 {
145  return d_buf;
146 }
147 
148 std::vector<BaseType *> *
149 D4Opaque::transform_to_dap2(AttrTable *){
150  DBG(cerr << __func__ << "() - Transform not implemented DAP4 Opaque type." << endl;);
151  return NULL;
152 }
153 
154 
155 void
156 D4Opaque::print_val(ostream &out, string space, bool print_decl_p)
157 {
158  if (print_decl_p) print_decl(out, space, false);
159 
160  if (d_buf.size()) {
161  // end() - 1 is only OK if size() is > 0
162  std::ostream_iterator<unsigned int> out_it(out, ",");
163  std::copy(d_buf.begin(), d_buf.end() - 1, out_it);
164  out << (unsigned int) d_buf.back(); // can also use: *(d_buf.end()-1);
165  }
166 
167  if (print_decl_p) out << ";" << endl;
168 }
169 
170 void
171 D4Opaque::dump(ostream &strm) const
172 {
173  strm << DapIndent::LMarg << "D4Opaque::dump - ("
174  << (void *)this << ")" << endl ;
175  DapIndent::Indent() ;
176  BaseType::dump(strm) ;
177  //strm << DapIndent::LMarg << "value: " << d_buf << endl ;
178  ostream_iterator<uint8_t> out_it (strm," ");
179  std::copy ( d_buf.begin(), d_buf.end(), out_it );
180 
181  DapIndent::UnIndent() ;
182 }
183 
184 } // namespace libdap
185 
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
Read data from the stream made by D4StreamMarshaller.
-
Definition: crc.h:76
-
STL namespace.
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual void get_opaque_dap4(char **val, int64_t &len)
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
-
void AddData(const uint8_t *pData, const uint32_t length)
Definition: crc.h:98
-
-
- - - - diff --git a/html/D4Opaque_8h_source.html b/html/D4Opaque_8h_source.html deleted file mode 100644 index 42c9f78f3..000000000 --- a/html/D4Opaque_8h_source.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - -libdap: D4Opaque.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4Opaque.h
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2013 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 #ifndef _d4_opaque_h
26 #define _d4_opaque_h 1
27 
28 #include <vector>
29 
30 #include "BaseType.h"
31 #include "InternalErr.h"
32 
33 class Crc32;
34 
35 namespace libdap
36 {
37 
38 class D4Opaque: public BaseType
39 {
40 public:
41  typedef std::vector<uint8_t> dods_opaque;
42 
43 protected:
44  dods_opaque d_buf;
45 
46 public:
47  D4Opaque(const std::string &n) : BaseType(n, dods_opaque_c, true /*is_dap4*/), d_buf(0) { }
48  D4Opaque(const std::string &n, const std::string &d) : BaseType(n, d, dods_opaque_c, true /*is_dap4*/), d_buf(0) { }
49 
50  virtual ~D4Opaque() { }
51 
52  D4Opaque(const D4Opaque &copy_from) : BaseType(copy_from) {
53  d_buf = copy_from.d_buf;
54  }
55 
56  D4Opaque &operator=(const D4Opaque &rhs);
57 
58  virtual BaseType *ptr_duplicate() { return new D4Opaque(*this); }
59 
60  virtual void clear_local_data();
61 
62  virtual unsigned int width(bool = false) const { return sizeof(vector<uint8_t>); }
63 
64  // Return the length of the stored data or zero if no string has been
65  // stored in the instance's internal buffer.
66  virtual int length() const { return d_buf.size(); }
67 
68  // DAP2
69  virtual bool serialize(ConstraintEvaluator &, DDS &, Marshaller &, bool = true) {
70  throw InternalErr(__FILE__, __LINE__, "Unimplemented method");
71  }
72  virtual bool deserialize(UnMarshaller &, DDS *, bool = false) {
73  throw InternalErr(__FILE__, __LINE__, "Unimplemented method");
74  }
75 
76  // DAP4
77  virtual void compute_checksum(Crc32 &checksum);
78  virtual void serialize(D4StreamMarshaller &m, DMR &dmr, /*ConstraintEvaluator &eval,*/ bool filter = false);
79 #if 0
80  virtual void serialize_no_release(D4StreamMarshaller &m, DMR &dmr, bool filter = false);
81 #endif
82  virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr);
83 
84  virtual unsigned int val2buf(void *val, bool reuse = false);
85  virtual unsigned int buf2val(void **val);
86 
87  virtual bool set_value(const dods_opaque &value);
88  virtual dods_opaque value() const;
89 
90  virtual void print_val(FILE *, std::string = "", bool = true) {
91  throw InternalErr(__FILE__, __LINE__, "Unimplemented method");
92  }
93  virtual void print_val(std::ostream &out, std::string space = "", bool print_decl_p = true);
94 
95  //virtual void print_dap4(XMLWriter &xml, bool constrained = false);
96 
97  virtual bool ops(BaseType *, int) {
98  throw InternalErr(__FILE__, __LINE__, "Unimplemented method");
99  }
100 
101  virtual std::vector<BaseType *> *transform_to_dap2(AttrTable *parent_attr_table);
102 
103  virtual void dump(std::ostream &strm) const ;
104 
105 };
106 
107 } // namespace libdap
108 
109 #endif // _d4_opaque_h
110 
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
virtual int length() const
How many elements are in this variable.
Definition: D4Opaque.h:66
-
virtual BaseType * ptr_duplicate()
Definition: D4Opaque.h:58
-
virtual unsigned int buf2val(void **val)
Reads the class data.
Definition: D4Opaque.cc:102
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
virtual bool deserialize(UnMarshaller &, DDS *, bool=false)
Receive data from the net.
Definition: D4Opaque.h:72
-
Read data from the stream made by D4StreamMarshaller.
-
virtual void compute_checksum(Crc32 &checksum)
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
Definition: D4Opaque.cc:76
-
Definition: crc.h:76
-
BaseType(const string &n, const Type &t, bool is_dap4=false)
The BaseType constructor.
Definition: BaseType.cc:126
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
virtual bool serialize(ConstraintEvaluator &, DDS &, Marshaller &, bool=true)
Move data to the net, then remove them from the object.
Definition: D4Opaque.h:69
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
-
virtual std::vector< BaseType * > * transform_to_dap2(AttrTable *parent_attr_table)
DAP4 to DAP2 transform.
Definition: D4Opaque.cc:149
- -
virtual void dump(std::ostream &strm) const
dumps information about this object
Definition: D4Opaque.cc:171
-
virtual void clear_local_data()
Definition: D4Opaque.cc:65
-
virtual unsigned int width(bool=false) const
How many bytes does this variable use Return the number of bytes of storage this variable uses...
Definition: D4Opaque.h:62
-
virtual bool set_value(const dods_opaque &value)
Definition: D4Opaque.cc:132
-
virtual dods_opaque value() const
Definition: D4Opaque.cc:143
-
virtual bool ops(BaseType *, int)
Evaluate relational operators.
Definition: D4Opaque.h:97
-
virtual unsigned int val2buf(void *val, bool reuse=false)
Loads class data.
Definition: D4Opaque.cc:118
-
Evaluate a constraint expression.
- -
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
-
virtual void print_val(FILE *, std::string="", bool=true)
Prints the value of the variable.
Definition: D4Opaque.h:90
-
-
- - - - diff --git a/html/D4ParseError_8h_source.html b/html/D4ParseError_8h_source.html deleted file mode 100644 index 2a096a6f6..000000000 --- a/html/D4ParseError_8h_source.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -libdap: D4ParseError.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4ParseError.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2012 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef d4_parse_error_h
27 #define d4_parse_error_h
28 
29 #include "Error.h"
30 
31 namespace libdap
32 {
33 
35 class D4ParseError : public Error
36 {
37 public:
38  D4ParseError() : Error("The DMR response document parse failed.")
39  {}
40  D4ParseError(const string &msg) :
41  Error(string("The DMR response document parse failed: ") + msg)
42  {}
43 };
44 
45 } // namespace libdap
46 
47 #endif // d4_parse_error_h
- -
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for error processing.
Definition: Error.h:92
-
-
- - - - diff --git a/html/D4ParserSax2_8cc_source.html b/html/D4ParserSax2_8cc_source.html deleted file mode 100644 index 6e8edac05..000000000 --- a/html/D4ParserSax2_8cc_source.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - -libdap: D4ParserSax2.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4ParserSax2.cc
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2012 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 #include "config.h"
26 
27 //#define DODS_DEBUG 1
28 
29 #include <iostream>
30 #include <sstream>
31 
32 #include <cstring>
33 #include <cstdarg>
34 #include <cassert>
35 
36 #include <libxml2/libxml/parserInternals.h>
37 
38 #include "DMR.h"
39 
40 #include "BaseType.h"
41 #include "Array.h"
42 #include "D4Group.h"
43 #include "D4Attributes.h"
44 #include "D4Maps.h"
45 #include "D4Enum.h"
46 #include "D4BaseTypeFactory.h"
47 
48 #include "DapXmlNamespaces.h"
49 #include "D4ParserSax2.h"
50 
51 #include "util.h"
52 #include "debug.h"
53 
54 namespace libdap {
55 
56 static const char *states[] = {
57  "parser_start",
58 
59  "inside_dataset",
60 
61  // inside_group is the state just after parsing the start of a Group
62  // element.
63  "inside_group",
64 
65  "inside_attribute_container",
66  "inside_attribute",
67  "inside_attribute_value",
68  "inside_other_xml_attribute",
69 
70  "inside_enum_def",
71  "inside_enum_const",
72 
73  "inside_dim_def",
74 
75  // This covers Byte, ..., Url, Opaque
76  "inside_simple_type",
77 
78  // "inside_array",
79  "inside_dim",
80  "inside_map",
81 
82  "inside_constructor",
83 
84  "not_dap4_element",
85 
86  "parser_unknown",
87  "parser_error",
88  "parser_fatal_error",
89 
90  "parser_end"
91 };
92 
93 static bool is_not(const char *name, const char *tag)
94 {
95  return strcmp(name, tag) != 0;
96 }
97 
106 D4EnumDef *
107 D4ParserSax2::enum_def()
108 {
109  if (!d_enum_def) d_enum_def = new D4EnumDef;
110 
111  return d_enum_def;
112 }
113 
120 D4Dimension *
121 D4ParserSax2::dim_def() {
122  if (!d_dim_def) d_dim_def = new D4Dimension;
123 
124  return d_dim_def;
125 }
126 
132 void D4ParserSax2::transfer_xml_attrs(const xmlChar **attributes, int nb_attributes)
133 {
134  if (!xml_attrs.empty())
135  xml_attrs.clear(); // erase old attributes
136 
137  // Make a value using the attribute name and the prefix, namespace URI
138  // and the value. The prefix might be null.
139  unsigned int index = 0;
140  for (int i = 0; i < nb_attributes; ++i, index += 5) {
141  xml_attrs.insert(map<string, XMLAttribute>::value_type(string((const char *)attributes[index]),
142  XMLAttribute(attributes + index + 1)));
143 
144  DBG(cerr << "XML Attribute '" << (const char *)attributes[index] << "': "
145  << xml_attrs[(const char *)attributes[index]].value << endl);
146  }
147 }
148 
155 void D4ParserSax2::transfer_xml_ns(const xmlChar **namespaces, int nb_namespaces)
156 {
157  // make a value with the prefix and namespace URI. The prefix might be null.
158  for (int i = 0; i < nb_namespaces; ++i) {
159  namespace_table.insert(map<string, string>::value_type(namespaces[i * 2] != 0 ? (const char *)namespaces[i * 2] : "",
160  (const char *)namespaces[i * 2 + 1]));
161  }
162 }
163 
170 bool D4ParserSax2::check_required_attribute(const string & attr)
171 {
172  if (xml_attrs.find(attr) == xml_attrs.end()) {
173  dmr_error(this, "Required attribute '%s' not found.", attr.c_str());
174  return false;
175  }
176  else
177  return true;
178 }
179 
186 bool D4ParserSax2::check_attribute(const string & attr)
187 {
188  return (xml_attrs.find(attr) != xml_attrs.end());
189 }
190 
191 bool D4ParserSax2::process_dimension_def(const char *name, const xmlChar **attrs, int nb_attributes)
192 {
193  if (is_not(name, "Dimension"))
194  return false;
195 
196  transfer_xml_attrs(attrs, nb_attributes);
197 
198  if (!(check_required_attribute("name") && check_required_attribute("size"))) {
199  dmr_error(this, "The required attribute 'name' or 'size' was missing from a Dimension element.");
200  return false;
201  }
202 
203  // This getter (dim_def) allocates a new object if needed.
204  dim_def()->set_name(xml_attrs["name"].value);
205  try {
206  dim_def()->set_size(xml_attrs["size"].value);
207  }
208  catch (Error &e) {
209  dmr_error(this, "%s", e.get_error_message().c_str());
210  return false;
211  }
212 
213  return true;
214 }
215 
233 bool D4ParserSax2::process_dimension(const char *name, const xmlChar **attrs, int nb_attributes)
234 {
235  if (is_not(name, "Dim"))
236  return false;
237 
238  transfer_xml_attrs(attrs, nb_attributes);
239 
240  if (check_attribute("size") && check_attribute("name")) {
241  dmr_error(this, "Only one of 'size' and 'name' are allowed in a Dim element, but both were used.");
242  return false;
243  }
244  if (!(check_attribute("size") || check_attribute("name"))) {
245  dmr_error(this, "Either 'size' or 'name' must be used in a Dim element.");
246  return false;
247  }
248 
249  if (!top_basetype()->is_vector_type()) {
250  // Make the top BaseType* an array
251  BaseType *b = top_basetype();
252  pop_basetype();
253 
254  Array *a = static_cast<Array*>(dmr()->factory()->NewVariable(dods_array_c, b->name()));
255  a->set_is_dap4(true);
256  a->add_var_nocopy(b);
257  a->set_attributes_nocopy(b->attributes());
258  // trick: instead of popping b's attributes, copying them and then pushing
259  // a's copy, just move the pointer (but make sure there's only one object that
260  // references that pointer).
261  b->set_attributes_nocopy(0);
262 
263  push_basetype(a);
264  }
265 
266  assert(top_basetype()->is_vector_type());
267 
268  Array *a = static_cast<Array*>(top_basetype());
269  if (check_attribute("size")) {
270  a->append_dim(atoi(xml_attrs["size"].value.c_str())); // low budget code for now. jhrg 8/20/13
271  return true;
272  }
273  else if (check_attribute("name")) {
274  string name = xml_attrs["name"].value;
275 
276  D4Dimension *dim = 0;
277  if (name[0] == '/') // lookup the Dimension in the root group
278  dim = dmr()->root()->find_dim(name);
279  else // get enclosing Group and lookup Dimension there
280  dim = top_group()->find_dim(name);
281 
282  if (!dim)
283  throw Error("The dimension '" + name + "' was not found while parsing the variable '" + a->name() + "'.");
284  a->append_dim(dim);
285  return true;
286  }
287 
288  return false;
289 }
290 
291 bool D4ParserSax2::process_map(const char *name, const xmlChar **attrs, int nb_attributes)
292 {
293  if (is_not(name, "Map"))
294  return false;
295 
296  transfer_xml_attrs(attrs, nb_attributes);
297 
298  if (!check_attribute("name")) {
299  dmr_error(this, "The 'name' attribute must be used in a Map element.");
300  return false;
301  }
302 
303  if (!top_basetype()->is_vector_type()) {
304  // Make the top BaseType* an array
305  BaseType *b = top_basetype();
306  pop_basetype();
307 
308  Array *a = static_cast<Array*>(dmr()->factory()->NewVariable(dods_array_c, b->name()));
309  a->set_is_dap4(true);
310  a->add_var_nocopy(b);
311  a->set_attributes_nocopy(b->attributes());
312  // trick: instead of popping b's attributes, copying them and then pushing
313  // a's copy, just move the pointer (but make sure there's only one object that
314  // references that pointer).
315  b->set_attributes_nocopy(0);
316 
317  push_basetype(a);
318  }
319 
320  assert(top_basetype()->is_vector_type());
321 
322  Array *a = static_cast<Array*>(top_basetype());
323 
324  string map_name = xml_attrs["name"].value;
325  if (xml_attrs["name"].value[0] != '/')
326  map_name = top_group()->FQN() + map_name;
327 
328  Array *map_source = 0; // The array variable that holds the data for the Map
329 
330  if (map_name[0] == '/') // lookup the Map in the root group
331  map_source = dmr()->root()->find_map_source(map_name);
332  else // get enclosing Group and lookup Map there
333  map_source = top_group()->find_map_source(map_name);
334 
335  // Change: If the parser is in 'strict' mode (the default) and the Array named by
336  // the Map cannot be fond, it is an error. If 'strict' mode is false (permissive
337  // mode), then this is not an error. However, the Array referenced by the Map will
338  // be null. This is a change in the parser's behavior to accommodate requests for
339  // Arrays that include Maps that do not also include the Map(s) in the request.
340  // See https://opendap.atlassian.net/browse/HYRAX-98. jhrg 4/13/16
341  if (!map_source && d_strict)
342  throw Error("The Map '" + map_name + "' was not found while parsing the variable '" + a->name() + "'.");
343 
344  a->maps()->add_map(new D4Map(map_name, map_source));
345 
346  return true;
347 }
348 
349 bool D4ParserSax2::process_group(const char *name, const xmlChar **attrs, int nb_attributes)
350 {
351  if (is_not(name, "Group"))
352  return false;
353 
354  transfer_xml_attrs(attrs, nb_attributes);
355 
356  if (!check_required_attribute("name")) {
357  dmr_error(this, "The required attribute 'name' was missing from a Group element.");
358  return false;
359  }
360 
361  BaseType *btp = dmr()->factory()->NewVariable(dods_group_c, xml_attrs["name"].value);
362  if (!btp) {
363  dmr_fatal_error(this, "Could not instantiate the Group '%s'.", xml_attrs["name"].value.c_str());
364  return false;
365  }
366 
367  D4Group *grp = static_cast<D4Group*>(btp);
368 
369  // Need to set this to get the D4Attribute behavior in the type classes
370  // shared between DAP2 and DAP4. jhrg 4/18/13
371  grp->set_is_dap4(true);
372 
373  // link it up and change the current group
374  D4Group *parent = top_group();
375  if (!parent) {
376  dmr_fatal_error(this, "No Group on the Group stack.");
377  return false;
378  }
379 
380  grp->set_parent(parent);
381  parent->add_group_nocopy(grp);
382 
383  push_group(grp);
384  push_attributes(grp->attributes());
385  return true;
386 }
387 
394 inline bool D4ParserSax2::process_attribute(const char *name, const xmlChar **attrs, int nb_attributes)
395 {
396  if (is_not(name, "Attribute"))
397  return false;
398 
399  // These methods set the state to parser_error if a problem is found.
400  transfer_xml_attrs(attrs, nb_attributes);
401 
402  // add error
403  if (!(check_required_attribute(string("name")) && check_required_attribute(string("type")))) {
404  dmr_error(this, "The required attribute 'name' or 'type' was missing from an Attribute element.");
405  return false;
406  }
407 
408  if (xml_attrs["type"].value == "Container") {
409  push_state(inside_attribute_container);
410 
411  DBG(cerr << "Pushing attribute container " << xml_attrs["name"].value << endl);
412  D4Attribute *child = new D4Attribute(xml_attrs["name"].value, attr_container_c);
413 
414  D4Attributes *tos = top_attributes();
415  // add return
416  if (!tos) {
417  delete child;
418  dmr_fatal_error(this, "Expected an Attribute container on the top of the attribute stack.");
419  return false;
420  }
421 
422  tos->add_attribute_nocopy(child);
423  push_attributes(child->attributes());
424  }
425  else if (xml_attrs["type"].value == "OtherXML") {
426  push_state(inside_other_xml_attribute);
427 
428  dods_attr_name = xml_attrs["name"].value;
429  dods_attr_type = xml_attrs["type"].value;
430  }
431  else {
432  push_state(inside_attribute);
433 
434  dods_attr_name = xml_attrs["name"].value;
435  dods_attr_type = xml_attrs["type"].value;
436  }
437 
438  return true;
439 }
440 
446 inline bool D4ParserSax2::process_enum_def(const char *name, const xmlChar **attrs, int nb_attributes)
447 {
448  if (is_not(name, "Enumeration"))
449  return false;
450 
451  transfer_xml_attrs(attrs, nb_attributes);
452 
453  if (!(check_required_attribute("name") && check_required_attribute("basetype"))) {
454  dmr_error(this, "The required attribute 'name' or 'basetype' was missing from an Enumeration element.");
455  return false;
456  }
457 
458  Type t = get_type(xml_attrs["basetype"].value.c_str());
459  if (!is_integer_type(t)) {
460  dmr_error(this, "The Enumeration '%s' must have an integer type, instead the type '%s' was used.",
461  xml_attrs["name"].value.c_str(), xml_attrs["basetype"].value.c_str());
462  return false;
463  }
464 
465  // This getter allocates a new object if needed.
466  string enum_def_path = xml_attrs["name"].value;
467 #if 0
468  // Use FQNs when things are referenced, not when they are defined
469  if (xml_attrs["name"].value[0] != '/')
470  enum_def_path = top_group()->FQN() + enum_def_path;
471 #endif
472  enum_def()->set_name(enum_def_path);
473  enum_def()->set_type(t);
474 
475  return true;
476 }
477 
478 inline bool D4ParserSax2::process_enum_const(const char *name, const xmlChar **attrs, int nb_attributes)
479 {
480  if (is_not(name, "EnumConst"))
481  return false;
482 
483  // These methods set the state to parser_error if a problem is found.
484  transfer_xml_attrs(attrs, nb_attributes);
485 
486  if (!(check_required_attribute("name") && check_required_attribute("value"))) {
487  dmr_error(this, "The required attribute 'name' or 'value' was missing from an EnumConst element.");
488  return false;
489  }
490 
491  istringstream iss(xml_attrs["value"].value);
492  long long value = 0;
493  iss >> skipws >> value;
494  if (iss.fail() || iss.bad()) {
495  dmr_error(this, "Expected an integer value for an Enumeration constant, got '%s' instead.",
496  xml_attrs["value"].value.c_str());
497  }
498  else if (!enum_def()->is_valid_enum_value(value)) {
499  dmr_error(this, "In an Enumeration constant, the value '%s' cannot fit in a variable of type '%s'.",
500  xml_attrs["value"].value.c_str(), D4type_name(d_enum_def->type()).c_str());
501  }
502  else {
503  // unfortunate choice of names... args are 'label' and 'value'
504  enum_def()->add_value(xml_attrs["name"].value, value);
505  }
506 
507  return true;
508 }
509 
515 inline bool D4ParserSax2::process_variable(const char *name, const xmlChar **attrs, int nb_attributes)
516 {
517  Type t = get_type(name);
518  if (is_simple_type(t)) {
519  process_variable_helper(t, inside_simple_type, attrs, nb_attributes);
520  return true;
521  }
522  else {
523  switch(t) {
524  case dods_structure_c:
525  process_variable_helper(t, inside_constructor, attrs, nb_attributes);
526  return true;
527 
528  case dods_sequence_c:
529  process_variable_helper(t, inside_constructor, attrs, nb_attributes);
530  return true;
531 
532  default:
533  return false;
534  }
535  }
536 }
537 
545 void D4ParserSax2::process_variable_helper(Type t, ParseState s, const xmlChar **attrs, int nb_attributes)
546 {
547  transfer_xml_attrs(attrs, nb_attributes);
548 
549  if (check_required_attribute("name")) {
550  BaseType *btp = dmr()->factory()->NewVariable(t, xml_attrs["name"].value);
551  if (!btp) {
552  dmr_fatal_error(this, "Could not instantiate the variable '%s'.", xml_attrs["name"].value.c_str());
553  return;
554  }
555 
556  if ((t == dods_enum_c) && check_required_attribute("enum")) {
557  D4EnumDef *enum_def = 0;
558  string enum_path = xml_attrs["enum"].value;
559  if (enum_path[0] == '/')
560  enum_def = dmr()->root()->find_enum_def(enum_path);
561  else
562  enum_def = top_group()->find_enum_def(enum_path);
563 
564  if (!enum_def)
565  dmr_fatal_error(this, "Could not find the Enumeration definition '%s'.", enum_path.c_str());
566 
567  static_cast<D4Enum*>(btp)->set_enumeration(enum_def);
568  }
569 
570  btp->set_is_dap4(true); // see comment above
571  push_basetype(btp);
572 
573  push_attributes(btp->attributes());
574 
575  push_state(s);
576  }
577 }
578 
585 
591 {
592  D4ParserSax2 *parser = static_cast<D4ParserSax2*>(p);
593  parser->d_error_msg = "";
594  parser->char_data = "";
595 
596  // Set this in intern_helper so that the loop test for the parser_end
597  // state works for the first iteration. It seems like XMLParseChunk calls this
598  // function on it's first run. jhrg 9/16/13
599  // parser->push_state(parser_start);
600 
601  parser->push_attributes(parser->dmr()->root()->attributes());
602 
603  if (parser->debug()) cerr << "Parser start state: " << states[parser->get_state()] << endl;
604 }
605 
609 {
610  D4ParserSax2 *parser = static_cast<D4ParserSax2*>(p);
611 
612  if (parser->debug()) cerr << "Parser end state: " << states[parser->get_state()] << endl;
613 
614  if (parser->get_state() != parser_end)
615  D4ParserSax2::dmr_error(parser, "The document contained unbalanced tags.");
616 
617  // If we've found any sort of error, don't make the DMR; intern() will
618  // take care of the error.
619  if (parser->get_state() == parser_error || parser->get_state() == parser_fatal_error)
620  return;
621 
622  if (!parser->empty_basetype() || parser->empty_group())
623  D4ParserSax2::dmr_error(parser, "The document did not contain a valid root Group or contained unbalanced tags.");
624 
625  parser->pop_group(); // leave the stack 'clean'
626  parser->pop_attributes();
627 }
628 
642 void D4ParserSax2::dmr_start_element(void *p, const xmlChar *l, const xmlChar *prefix, const xmlChar *URI,
643  int nb_namespaces, const xmlChar **namespaces, int nb_attributes, int /*nb_defaulted*/,
644  const xmlChar **attributes)
645 {
646  D4ParserSax2 *parser = static_cast<D4ParserSax2*>(p);
647  const char *localname = (const char *) l;
648 
649  if (parser->debug()) cerr << "Start element " << localname << " prefix: "<< (prefix?(char *)prefix:"null") << " ns: "<< (URI?(char *)URI:"null")
650  << " (state: " << states[parser->get_state()] << ")" << endl;
651 
652  if(parser->get_state() != parser_error){
653  string dap4_ns_name = DapXmlNamspaces::getDapNamespaceString(DAP_4_0);
654  if (parser->debug()) cerr << "dap4_ns_name: " << dap4_ns_name << endl;
655 
656  string this_element_ns_name = (URI != 0) ? ((char *)URI) : "";
657  if (parser->debug()) cerr << "this_element_ns_name: " << this_element_ns_name << endl;
658 
659  if(this_element_ns_name.compare(dap4_ns_name)){
660  if (parser->debug()) cerr << "Start of non DAP4 element: " << localname << " detected." << endl;
661  parser->push_state(not_dap4_element);
662  // return;
663  }
664  }
665 
666 
667  switch (parser->get_state()) {
668  case parser_start:
669  if (is_not(localname, "Dataset"))
670  D4ParserSax2::dmr_error(parser, "Expected DMR to start with a Dataset element; found '%s' instead.", localname);
671 
672  parser->root_ns = URI ? (const char *) URI : "";
673  parser->transfer_xml_attrs(attributes, nb_attributes);
674 
675  if (parser->check_required_attribute(string("name")))
676  parser->dmr()->set_name(parser->xml_attrs["name"].value);
677 
678  if (parser->check_attribute("dapVersion"))
679  parser->dmr()->set_dap_version(parser->xml_attrs["dapVersion"].value);
680 
681  if (parser->check_attribute("dmrVersion"))
682  parser->dmr()->set_dmr_version(parser->xml_attrs["dmrVersion"].value);
683 
684  if (parser->check_attribute("base"))
685  parser->dmr()->set_request_xml_base(parser->xml_attrs["base"].value);
686 
687  if (!parser->root_ns.empty())
688  parser->dmr()->set_namespace(parser->root_ns);
689 
690  // Push the root Group on the stack
691  parser->push_group(parser->dmr()->root());
692 
693  parser->push_state(inside_dataset);
694 
695  break;
696 
697  // Both inside dataset and inside group can have the same stuff.
698  // The difference is that the Dataset holds the root group, which
699  // must be present; other groups are optional
700  case inside_dataset:
701  case inside_group:
702  if (parser->process_enum_def(localname, attributes, nb_attributes))
703  parser->push_state(inside_enum_def);
704  else if (parser->process_dimension_def(localname, attributes, nb_attributes))
705  parser->push_state(inside_dim_def);
706  else if (parser->process_group(localname, attributes, nb_attributes))
707  parser->push_state(inside_group);
708  else if (parser->process_variable(localname, attributes, nb_attributes))
709  // This will push either inside_simple_type or inside_structure
710  // onto the parser state stack.
711  break;
712  else if (parser->process_attribute(localname, attributes, nb_attributes))
713  // This will push either inside_attribute, inside_attribute_container
714  // or inside_otherxml_attribute onto the parser state stack
715  break;
716  else
717  D4ParserSax2::dmr_error(parser, "Expected an Attribute, Enumeration, Dimension, Group or variable element; found '%s' instead.", localname);
718  break;
719 
720  case inside_attribute_container:
721  if (parser->process_attribute(localname, attributes, nb_attributes))
722  break;
723  else
724  D4ParserSax2::dmr_error(parser, "Expected an Attribute element; found '%s' instead.", localname);
725  break;
726 
727  case inside_attribute:
728  if (parser->process_attribute(localname, attributes, nb_attributes))
729  break;
730  else if (strcmp(localname, "Value") == 0)
731  parser->push_state(inside_attribute_value);
732  else
733  dmr_error(parser, "Expected an 'Attribute' or 'Value' element; found '%s' instead.", localname);
734  break;
735 
736  case inside_attribute_value:
737  // Attribute values are processed by the end element code.
738  break;
739 
740  case inside_other_xml_attribute:
741  parser->other_xml_depth++;
742 
743  // Accumulate the elements here
744  parser->other_xml.append("<");
745  if (prefix) {
746  parser->other_xml.append((const char *) prefix);
747  parser->other_xml.append(":");
748  }
749  parser->other_xml.append(localname);
750 
751  if (nb_namespaces != 0) {
752  parser->transfer_xml_ns(namespaces, nb_namespaces);
753 
754  for (map<string, string>::iterator i = parser->namespace_table.begin();
755  i != parser->namespace_table.end(); ++i) {
756  parser->other_xml.append(" xmlns");
757  if (!i->first.empty()) {
758  parser->other_xml.append(":");
759  parser->other_xml.append(i->first);
760  }
761  parser->other_xml.append("=\"");
762  parser->other_xml.append(i->second);
763  parser->other_xml.append("\"");
764  }
765  }
766 
767  if (nb_attributes != 0) {
768  parser->transfer_xml_attrs(attributes, nb_attributes);
769  for (XMLAttrMap::iterator i = parser->xml_attr_begin(); i != parser->xml_attr_end(); ++i) {
770  parser->other_xml.append(" ");
771  if (!i->second.prefix.empty()) {
772  parser->other_xml.append(i->second.prefix);
773  parser->other_xml.append(":");
774  }
775  parser->other_xml.append(i->first);
776  parser->other_xml.append("=\"");
777  parser->other_xml.append(i->second.value);
778  parser->other_xml.append("\"");
779  }
780  }
781 
782  parser->other_xml.append(">");
783  break;
784 
785  case inside_enum_def:
786  // process an EnumConst element
787  if (parser->process_enum_const(localname, attributes, nb_attributes))
788  parser->push_state(inside_enum_const);
789  else
790  dmr_error(parser, "Expected an 'EnumConst' element; found '%s' instead.", localname);
791  break;
792 
793  case inside_enum_const:
794  // No content; nothing to do
795  break;
796 
797  case inside_dim_def:
798  // No content; nothing to do
799  break;
800 #if 0
801  case inside_dimension:
802  // No content.
803  break;
804 #endif
805  case inside_dim:
806  // No content.
807  break;
808 
809  case inside_map:
810  // No content.
811  break;
812 
813  case inside_simple_type:
814  if (parser->process_attribute(localname, attributes, nb_attributes))
815  break;
816  else if (parser->process_dimension(localname, attributes, nb_attributes))
817  parser->push_state(inside_dim);
818  else if (parser->process_map(localname, attributes, nb_attributes))
819  parser->push_state(inside_map);
820  else
821  dmr_error(parser, "Expected an 'Attribute', 'Dim' or 'Map' element; found '%s' instead.", localname);
822  break;
823 
824  case inside_constructor:
825  if (parser->process_variable(localname, attributes, nb_attributes))
826  // This will push either inside_simple_type or inside_structure
827  // onto the parser state stack.
828  break;
829  else if (parser->process_attribute(localname, attributes, nb_attributes))
830  break;
831  else if (parser->process_dimension(localname, attributes, nb_attributes))
832  parser->push_state(inside_dim);
833  else if (parser->process_map(localname, attributes, nb_attributes))
834  parser->push_state(inside_map);
835  else
836  D4ParserSax2::dmr_error(parser, "Expected an Attribute, Dim, Map or variable element; found '%s' instead.", localname);
837  break;
838 
839  case not_dap4_element:
840  if (parser->debug()) cerr << "Inside non DAP4 element. localname: " << localname << endl;
841  break;
842 
843  case parser_unknown:
844  // FIXME?
845  // *** Never used? If so remove/error
846  parser->push_state(parser_unknown);
847  break;
848 
849  case parser_error:
850  case parser_fatal_error:
851  break;
852 
853  case parser_end:
854  // FIXME Error?
855  break;
856  }
857 
858  if (parser->debug()) cerr << "Start element exit state: " << states[parser->get_state()] << endl;
859 }
860 
861 void D4ParserSax2::dmr_end_element(void *p, const xmlChar *l, const xmlChar *prefix, const xmlChar *URI)
862 {
863  D4ParserSax2 *parser = static_cast<D4ParserSax2*>(p);
864  const char *localname = (const char *) l;
865 
866  if (parser->debug())
867  cerr << "End element " << localname << " (state " << states[parser->get_state()] << ")" << endl;
868 
869  switch (parser->get_state()) {
870  case parser_start:
871  dmr_fatal_error(parser, "Unexpected state, inside start state while processing element '%s'.", localname);
872  break;
873 
874  case inside_dataset:
875  if (is_not(localname, "Dataset"))
876  D4ParserSax2::dmr_error(parser, "Expected an end Dataset tag; found '%s' instead.", localname);
877 
878  parser->pop_state();
879  if (parser->get_state() != parser_start)
880  dmr_fatal_error(parser, "Unexpected state, expected start state.");
881  else {
882  parser->pop_state();
883  parser->push_state(parser_end);
884  }
885  break;
886 
887  case inside_group: {
888  if (is_not(localname, "Group"))
889  D4ParserSax2::dmr_error(parser, "Expected an end tag for a Group; found '%s' instead.", localname);
890 
891  if (!parser->empty_basetype() || parser->empty_group())
892  D4ParserSax2::dmr_error(parser,
893  "The document did not contain a valid root Group or contained unbalanced tags.");
894 
895  parser->pop_group();
896  parser->pop_state();
897  break;
898  }
899 
900  case inside_attribute_container:
901  if (is_not(localname, "Attribute"))
902  D4ParserSax2::dmr_error(parser, "Expected an end Attribute tag; found '%s' instead.", localname);
903 
904  parser->pop_state();
905  parser->pop_attributes();
906  break;
907 
908  case inside_attribute:
909  if (is_not(localname, "Attribute"))
910  D4ParserSax2::dmr_error(parser, "Expected an end Attribute tag; found '%s' instead.", localname);
911 
912  parser->pop_state();
913  break;
914 
915  case inside_attribute_value: {
916  if (is_not(localname, "Value"))
917  D4ParserSax2::dmr_error(parser, "Expected an end value tag; found '%s' instead.", localname);
918 
919  parser->pop_state();
920 
921  // The old code added more values using the name and type as
922  // indexes to find the correct attribute. Use get() for that
923  // now. Or fix this code to keep a pointer to the to attribute...
924  D4Attributes *attrs = parser->top_attributes();
925  D4Attribute *attr = attrs->get(parser->dods_attr_name);
926  if (!attr) {
927  attr = new D4Attribute(parser->dods_attr_name, StringToD4AttributeType(parser->dods_attr_type));
928  attrs->add_attribute_nocopy(attr);
929  }
930  attr->add_value(parser->char_data);
931 
932  parser->char_data = ""; // Null this after use.
933  break;
934  }
935 
936  case inside_other_xml_attribute: {
937  if (strcmp(localname, "Attribute") == 0 && parser->root_ns == (const char *) URI) {
938  parser->pop_state();
939 
940  // The old code added more values using the name and type as
941  // indexes to find the correct attribute. Use get() for that
942  // now. Or fix this code to keep a pointer to the to attribute...
943  D4Attributes *attrs = parser->top_attributes();
944  D4Attribute *attr = attrs->get(parser->dods_attr_name);
945  if (!attr) {
946  attr = new D4Attribute(parser->dods_attr_name, StringToD4AttributeType(parser->dods_attr_type));
947  attrs->add_attribute_nocopy(attr);
948  }
949  attr->add_value(parser->other_xml);
950 
951  parser->other_xml = ""; // Null this after use.
952  }
953  else {
954  if (parser->other_xml_depth == 0) {
955  D4ParserSax2::dmr_error(parser, "Expected an OtherXML attribute to end! Instead I found '%s'",
956  localname);
957  break;
958  }
959  parser->other_xml_depth--;
960 
961  parser->other_xml.append("</");
962  if (prefix) {
963  parser->other_xml.append((const char *) prefix);
964  parser->other_xml.append(":");
965  }
966  parser->other_xml.append(localname);
967  parser->other_xml.append(">");
968  }
969  break;
970  }
971 
972  case inside_enum_def:
973  if (is_not(localname, "Enumeration"))
974  D4ParserSax2::dmr_error(parser, "Expected an end Enumeration tag; found '%s' instead.", localname);
975  if (!parser->top_group())
977  "Expected a Group to be the current item, while finishing up an Enumeration.");
978  else {
979  // copy the pointer; not a deep copy
980  parser->top_group()->enum_defs()->add_enum_nocopy(parser->enum_def());
981  // Set the enum_def to null; next call to enum_def() will
982  // allocate a new object
983  parser->clear_enum_def();
984  parser->pop_state();
985  }
986  break;
987 
988  case inside_enum_const:
989  if (is_not(localname, "EnumConst"))
990  D4ParserSax2::dmr_error(parser, "Expected an end EnumConst tag; found '%s' instead.", localname);
991 
992  parser->pop_state();
993  break;
994 
995  case inside_dim_def: {
996  if (is_not(localname, "Dimension"))
997  D4ParserSax2::dmr_error(parser, "Expected an end Dimension tag; found '%s' instead.", localname);
998 
999  if (!parser->top_group())
1000  D4ParserSax2::dmr_error(parser,
1001  "Expected a Group to be the current item, while finishing up an Dimension.");
1002 
1003  // FIXME Use the Group on the top of the group stack
1004  // copy the pointer; not a deep copy
1005  parser->top_group()->dims()->add_dim_nocopy(parser->dim_def());
1006  //parser->dmr()->root()->dims()->add_dim_nocopy(parser->dim_def());
1007  // Set the dim_def to null; next call to dim_def() will
1008  // allocate a new object. Calling 'clear' is important because
1009  // the cleanup method will free dim_def if it's not null and
1010  // we just copied the pointer in the add_dim_nocopy() call
1011  // above.
1012  parser->clear_dim_def();
1013  parser->pop_state();
1014  break;
1015  }
1016 
1017  case inside_simple_type:
1018  if (is_simple_type(get_type(localname))) {
1019  BaseType *btp = parser->top_basetype();
1020  parser->pop_basetype();
1021  parser->pop_attributes();
1022 
1023  BaseType *parent = 0;
1024  if (!parser->empty_basetype())
1025  parent = parser->top_basetype();
1026  else if (!parser->empty_group())
1027  parent = parser->top_group();
1028  else {
1029  dmr_fatal_error(parser, "Both the Variable and Groups stacks are empty while closing a %s element.",
1030  localname);
1031  delete btp;
1032  parser->pop_state();
1033  break;
1034  }
1035 
1036  if (parent->type() == dods_array_c)
1037  static_cast<Array*>(parent)->prototype()->add_var_nocopy(btp);
1038  else
1039  parent->add_var_nocopy(btp);
1040  }
1041  else
1042  D4ParserSax2::dmr_error(parser, "Expected an end tag for a simple type; found '%s' instead.", localname);
1043 
1044  parser->pop_state();
1045  break;
1046 
1047  case inside_dim:
1048  if (is_not(localname, "Dim"))
1049  D4ParserSax2::dmr_fatal_error(parser, "Expected an end Dim tag; found '%s' instead.", localname);
1050 
1051  parser->pop_state();
1052  break;
1053 
1054  case inside_map:
1055  if (is_not(localname, "Map"))
1056  D4ParserSax2::dmr_fatal_error(parser, "Expected an end Map tag; found '%s' instead.", localname);
1057 
1058  parser->pop_state();
1059  break;
1060 
1061  case inside_constructor: {
1062  if (strcmp(localname, "Structure") != 0 && strcmp(localname, "Sequence") != 0) {
1063  D4ParserSax2::dmr_error(parser, "Expected an end tag for a constructor; found '%s' instead.", localname);
1064  return;
1065  }
1066 
1067  BaseType *btp = parser->top_basetype();
1068  parser->pop_basetype();
1069  parser->pop_attributes();
1070 
1071  BaseType *parent = 0;
1072  if (!parser->empty_basetype())
1073  parent = parser->top_basetype();
1074  else if (!parser->empty_group())
1075  parent = parser->top_group();
1076  else {
1077  dmr_fatal_error(parser, "Both the Variable and Groups stacks are empty while closing a %s element.",
1078  localname);
1079  delete btp;
1080  parser->pop_state();
1081  break;
1082  }
1083 
1084  // TODO Why doesn't this code mirror the simple_var case and test
1085  // for the parent being an array? jhrg 10/13/13
1086  parent->add_var_nocopy(btp);
1087  parser->pop_state();
1088  break;
1089  }
1090 
1091  case not_dap4_element:
1092  if (parser->debug()) cerr << "End of non DAP4 element: " << localname << endl;
1093  parser->pop_state();
1094  break;
1095 
1096  case parser_unknown:
1097  parser->pop_state();
1098  break;
1099 
1100  case parser_error:
1101  case parser_fatal_error:
1102  break;
1103 
1104  case parser_end:
1105  // FIXME Error?
1106  break;
1107  }
1108 
1109  if (parser->debug()) cerr << "End element exit state: " << states[parser->get_state()] << endl;
1110 }
1111 
1115 void D4ParserSax2::dmr_get_characters(void * p, const xmlChar * ch, int len)
1116 {
1117  D4ParserSax2 *parser = static_cast<D4ParserSax2*>(p);
1118 
1119  switch (parser->get_state()) {
1120  case inside_attribute_value:
1121  parser->char_data.append((const char *) (ch), len);
1122  DBG(cerr << "Characters: '" << parser->char_data << "'" << endl);
1123  break;
1124 
1125  case inside_other_xml_attribute:
1126  parser->other_xml.append((const char *) (ch), len);
1127  DBG(cerr << "Other XML Characters: '" << parser->other_xml << "'" << endl);
1128  break;
1129 
1130  default:
1131  break;
1132  }
1133 }
1134 
1139 void D4ParserSax2::dmr_ignoreable_whitespace(void *p, const xmlChar *ch, int len)
1140 {
1141  D4ParserSax2 *parser = static_cast<D4ParserSax2*>(p);
1142 
1143  switch (parser->get_state()) {
1144  case inside_other_xml_attribute:
1145  parser->other_xml.append((const char *) (ch), len);
1146  break;
1147 
1148  default:
1149  break;
1150  }
1151 }
1152 
1158 void D4ParserSax2::dmr_get_cdata(void *p, const xmlChar *value, int len)
1159 {
1160  D4ParserSax2 *parser = static_cast<D4ParserSax2*>(p);
1161 
1162  switch (parser->get_state()) {
1163  case inside_other_xml_attribute:
1164  parser->other_xml.append((const char *) (value), len);
1165  break;
1166 
1167  case parser_unknown:
1168  break;
1169 
1170  default:
1171  D4ParserSax2::dmr_error(parser, "Found a CData block but none are allowed by DAP4.");
1172 
1173  break;
1174  }
1175 }
1176 
1181 xmlEntityPtr D4ParserSax2::dmr_get_entity(void *, const xmlChar * name)
1182 {
1183  return xmlGetPredefinedEntity(name);
1184 }
1185 
1196 void D4ParserSax2::dmr_fatal_error(void * p, const char *msg, ...)
1197 {
1198  va_list args;
1199  D4ParserSax2 *parser = static_cast<D4ParserSax2*>(p);
1200 
1201  parser->push_state(parser_fatal_error);
1202 
1203  va_start(args, msg);
1204  char str[1024];
1205  vsnprintf(str, 1024, msg, args);
1206  va_end(args);
1207 
1208  int line = xmlSAX2GetLineNumber(parser->d_context);
1209 
1210  if (!parser->d_error_msg.empty()) parser->d_error_msg += "\n";
1211  parser->d_error_msg += "At line " + long_to_string(line) + ": " + string(str);
1212 }
1213 
1214 void D4ParserSax2::dmr_error(void *p, const char *msg, ...)
1215 {
1216  va_list args;
1217  D4ParserSax2 *parser = static_cast<D4ParserSax2*>(p);
1218 
1219  parser->push_state(parser_error);
1220 
1221  va_start(args, msg);
1222  char str[1024];
1223  vsnprintf(str, 1024, msg, args);
1224  va_end(args);
1225 
1226  int line = xmlSAX2GetLineNumber(parser->d_context);
1227 
1228  if (!parser->d_error_msg.empty()) parser->d_error_msg += "\n";
1229  parser->d_error_msg += "At line " + long_to_string(line) + ": " + string(str);
1230 }
1232 
1236 void D4ParserSax2::cleanup_parse()
1237 {
1238  bool wellFormed = d_context->wellFormed;
1239  bool valid = d_context->valid;
1240 
1241  // d_context->sax = NULL;
1242  xmlFreeParserCtxt(d_context);
1243 
1244  delete d_enum_def;
1245  d_enum_def = 0;
1246 
1247  delete d_dim_def;
1248  d_dim_def = 0;
1249 
1250  // If there's an error, there may still be items on the stack at the
1251  // end of the parse.
1252  while (!btp_stack.empty()) {
1253  delete top_basetype();
1254  pop_basetype();
1255  }
1256 
1257  if (!wellFormed)
1258  throw Error("The DMR was not well formed. " + d_error_msg);
1259  else if (!valid)
1260  throw Error("The DMR was not valid." + d_error_msg);
1261  else if (get_state() == parser_error)
1262  throw Error(d_error_msg);
1263  else if (get_state() == parser_fatal_error)
1264  throw InternalErr(d_error_msg);
1265 }
1266 
1281 void D4ParserSax2::intern(istream &f, DMR *dest_dmr, bool debug)
1282 {
1283  d_debug = debug;
1284 
1285  // Code example from libxml2 docs re: read from a stream.
1286 
1287  if (!f.good())
1288  throw Error("Input stream not open or read error");
1289  if (!dest_dmr)
1290  throw InternalErr(__FILE__, __LINE__, "DMR object is null");
1291 
1292  d_dmr = dest_dmr; // dump values here
1293 #if 0
1294  int line_num = 1;
1295  string line;
1296 
1297  // Get the <xml ... ?> line
1298  getline(f, line);
1299  if (line.length() == 0) throw Error("No input found while parsing the DMR.");
1300 
1301  if (debug) cerr << "line: (" << line_num << "): " << endl << line << endl << endl;
1302 
1303  d_context = xmlCreatePushParserCtxt(&d_dmr_sax_parser, this, line.c_str(), line.length(), "stream");
1304  d_context->validate = true;
1305  push_state(parser_start);
1306 
1307  // Get the first line of stuff
1308  getline(f, line);
1309  ++line_num;
1310 
1311  if (debug) cerr << "line: (" << line_num << "): " << endl << line << endl << endl;
1312 
1313  while (!f.eof() && (get_state() != parser_end)) {
1314  xmlParseChunk(d_context, line.c_str(), line.length(), 0);
1315 
1316  // Get the next line
1317  getline(f, line);
1318  ++line_num;
1319 
1320  if (debug) cerr << "line: (" << line_num << "): " << endl << line << endl << endl;
1321  }
1322  // This call ends the parse.
1323  xmlParseChunk(d_context, line.c_str(), 0, 1/*terminate*/);
1324 
1325 #else
1326  int line_num = 1;
1327  string line;
1328 
1329  // Get the XML prolog line (looks like: <?xml ... ?> )
1330  getline(f, line);
1331  if (line.length() == 0) throw Error("No input found while parsing the DMR.");
1332 
1333  if (debug) cerr << "line: (" << line_num << "): " << endl << line << endl << endl;
1334 
1335  d_context = xmlCreatePushParserCtxt(&d_dmr_sax_parser, this, line.c_str(), line.length(), "stream");
1336  d_context->validate = true;
1337  push_state(parser_start);
1338 
1339  // Get the first chunk of the stuff
1340  long chunk_count = 0;
1341  long chunk_size = 0;
1342 
1343  f.read(d_parse_buffer, D4_PARSE_BUFF_SIZE);
1344  chunk_size=f.gcount();
1345  d_parse_buffer[chunk_size]=0; // null terminate the string. We can do it this way because the buffer is +1 bigger than D4_PARSE_BUFF_SIZE
1346  if (debug) cerr << "chunk: (" << chunk_count++ << "): " << endl << d_parse_buffer << endl << endl;
1347 
1348  while(!f.eof() && (get_state() != parser_end)){
1349 
1350  xmlParseChunk(d_context, d_parse_buffer, chunk_size, 0);
1351 
1352  // There is more to read. Get the next chunk
1353  f.read(d_parse_buffer, D4_PARSE_BUFF_SIZE);
1354  chunk_size=f.gcount();
1355  d_parse_buffer[chunk_size]=0; // null terminate the string. We can do it this way because the buffer is +1 bigger than D4_PARSE_BUFF_SIZE
1356  if (debug) cerr << "chunk: (" << chunk_count++ << "): " << endl << d_parse_buffer << endl << endl;
1357  }
1358 
1359  // This call ends the parse.
1360  xmlParseChunk(d_context, d_parse_buffer, chunk_size, 1/*terminate*/);
1361 #endif
1362 
1363  // This checks that the state on the parser stack is parser_end and throws
1364  // an exception if it's not (i.e., the loop exited with gcount() == 0).
1365  cleanup_parse();
1366 }
1367 
1382 void D4ParserSax2::intern(const string &document, DMR *dest_dmr, bool debug)
1383 {
1384  intern(document.c_str(), document.length(), dest_dmr, debug);
1385 }
1386 
1397 void D4ParserSax2::intern(const char *buffer, int size, DMR *dest_dmr, bool debug)
1398 {
1399  if (!(size > 0)) return;
1400 
1401  d_debug = debug;
1402 
1403  // Code example from libxml2 docs re: read from a stream.
1404 
1405  if (!dest_dmr) throw InternalErr(__FILE__, __LINE__, "DMR object is null");
1406  d_dmr = dest_dmr; // dump values in dest_dmr
1407 
1408  push_state(parser_start);
1409  d_context = xmlCreatePushParserCtxt(&d_dmr_sax_parser, this, buffer, size, "stream");
1410  d_context->validate = true;
1411 
1412  // This call ends the parse.
1413  xmlParseChunk(d_context, buffer, 0, 1/*terminate*/);
1414 
1415  // This checks that the state on the parser stack is parser_end and throws
1416  // an exception if it's not (i.e., the loop exited with gcount() == 0).
1417  cleanup_parse();
1418 }
1419 
1420 } // namespace libdap
virtual BaseType * NewVariable(Type t, const string &name) const
- -
static void dmr_end_document(void *parser)
-
bool is_valid_enum_value(long long value)
Definition: D4EnumDefs.cc:43
-
void set_namespace(const std::string &ns)
Set the namespace for this DMR.
Definition: DMR.h:154
-
D4Dimension * find_dim(const string &path)
Find the dimension using a path. Using the DAP4 name syntax, lookup a dimension. The dimension must b...
Definition: D4Group.cc:277
- -
D4Group * root()
Definition: DMR.cc:407
-
static void dmr_start_document(void *parser)
-
static xmlEntityPtr dmr_get_entity(void *parser, const xmlChar *name)
-
bool is_vector_type(Type t)
Returns true if the instance is a vector (i.e., array) type variable.
Definition: util.cc:815
-
void set_request_xml_base(const std::string &xb)
Definition: DMR.h:148
-
Type
Identifies the data type.
Definition: Type.h:94
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
static std::string getDapNamespaceString(DAPVersion version)
-
static void dmr_start_element(void *parser, const xmlChar *localname, const xmlChar *prefix, const xmlChar *URI, int nb_namespaces, const xmlChar **namespaces, int nb_attributes, int nb_defaulted, const xmlChar **attributes)
-
static void dmr_ignoreable_whitespace(void *parser, const xmlChar *ch, int len)
- -
void add_dim_nocopy(D4Dimension *dim)
Definition: D4Dimensions.h:160
-
virtual D4BaseTypeFactory * factory()
Definition: DMR.h:123
-
static void dmr_get_cdata(void *parser, const xmlChar *value, int len)
-
virtual Type type() const
Returns the type of the class instance.
Definition: BaseType.cc:365
-
ObjectType get_type(const string &value)
Definition: mime_util.cc:326
-
string D4type_name(Type t)
Returns the type of the class instance as a string. Supports all DAP4 types and not the DAP2-only typ...
Definition: util.cc:694
-
bool is_simple_type(Type t)
Returns true if the instance is a numeric, string or URL type variable.
Definition: util.cc:775
-
virtual D4Attributes * attributes()
Definition: BaseType.cc:599
-
void set_dap_version(const std::string &version_string)
Definition: DMR.cc:419
-
static void dmr_get_characters(void *parser, const xmlChar *ch, int len)
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
virtual std::string FQN() const
Definition: D4Group.cc:185
-
D4Attribute * get(const string &fqn)
-
void add_map(D4Map *map)
Definition: D4Maps.h:115
-
A class for error processing.
Definition: Error.h:92
-
D4EnumDefs * enum_defs()
Get the enumerations defined for this Group.
Definition: D4Group.h:97
-
static void dmr_fatal_error(void *parser, const char *msg,...)
-
bool is_integer_type(Type t)
Definition: util.cc:900
- -
D4Dimensions * dims()
Get the dimensions defined for this Group.
Definition: D4Group.h:82
-
-
- - - - diff --git a/html/D4ParserSax2_8h_source.html b/html/D4ParserSax2_8h_source.html deleted file mode 100644 index d0e052974..000000000 --- a/html/D4ParserSax2_8h_source.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - -libdap: D4ParserSax2.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4ParserSax2.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2012 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef d4_parser_sax2_h
27 #define d4_parser_sax2_h
28 
29 #define ATTR 1
30 
31 #include <string.h>
32 
33 #include <string>
34 #include <iostream>
35 #include <map>
36 #include <stack>
37 
38 #include <libxml/parserInternals.h>
39 
40 #define CRLF "\r\n"
41 #define D4_PARSE_BUFF_SIZE 1048576
42 
43 namespace libdap
44 {
45 
46 class DMR;
47 class BaseType;
48 class D4BaseTypeFactory;
49 class D4Group;
50 class D4Attributes;
51 class D4EnumDef;
52 class D4Dimension;
53 
78 {
79 private:
82  enum ParseState {
83  parser_start,
84 
85  inside_dataset,
86 
87  // inside_group is the state just after parsing the start of a Group
88  // element.
89  inside_group,
90 
91  inside_attribute_container,
92  inside_attribute,
93  inside_attribute_value,
94  inside_other_xml_attribute,
95 
96  inside_enum_def,
97  inside_enum_const,
98 
99  inside_dim_def,
100 
101  // This covers Byte, ..., Url, Opaque
102  inside_simple_type,
103 
104  // inside_array,
105  inside_dim,
106  inside_map,
107 
108  inside_constructor,
109 
110  // inside_sequence, Removed from merged code jhrg 5/2/14
111 
112  not_dap4_element,
113 
114  parser_unknown,
115  parser_error,
116  parser_fatal_error,
117 
118  parser_end
119  };
120  char d_parse_buffer[D4_PARSE_BUFF_SIZE+1]; // Buff size plus one byte for NULL termination.
121 
122  xmlSAXHandler d_dmr_sax_parser;
123 
124  // The results of the parse operation are stored in these fields.
125  // This is passed into the parser using the intern() methods.
126  DMR *d_dmr; // dump DMR here
127  DMR *dmr() const { return d_dmr; }
128 
129  // These stacks hold the state of the parse as it progresses.
130  stack<ParseState> s; // Current parse state
131  void push_state(D4ParserSax2::ParseState state) { s.push(state); }
132  D4ParserSax2::ParseState get_state() const { return s.top(); }
133  void pop_state() { s.pop(); }
134  bool empty_state() const { return s.empty(); }
135 
136  stack<BaseType*> btp_stack; // current variable(s)
137  void push_basetype(BaseType *btp) { btp_stack.push(btp); }
138  BaseType *top_basetype() const { return btp_stack.top(); }
139  void pop_basetype() { btp_stack.pop(); }
140  bool empty_basetype() const { return btp_stack.empty(); }
141 
142  stack<D4Group*> grp_stack; // current groups(s)
143  void push_group(D4Group *grp) { grp_stack.push(grp); }
144  D4Group *top_group() const { return grp_stack.top(); }
145  void pop_group() { grp_stack.pop(); }
146  bool empty_group() const { return grp_stack.empty(); }
147 
148  stack<D4Attributes*> d_attrs_stack; // DAP4 Attributes
149  void push_attributes(D4Attributes *attr) { d_attrs_stack.push(attr); }
150  D4Attributes *top_attributes() const { return d_attrs_stack.top(); }
151  void pop_attributes() { d_attrs_stack.pop(); }
152  bool empty_attributes() const { return d_attrs_stack.empty(); }
153 
154  D4EnumDef *d_enum_def;
155  D4EnumDef *enum_def();
156  void clear_enum_def() { d_enum_def = 0; }
157 
158  D4Dimension *d_dim_def;
159  D4Dimension *dim_def();
160  void clear_dim_def() { d_dim_def = 0; }
161 
162  // Accumulate stuff inside an 'OtherXML' DAP attribute here
163  string other_xml;
164 
165  // When we're parsing unknown XML, how deeply is it nested? This is used
166  // for the OtherXML DAP attributes.
167  unsigned int other_xml_depth;
168  unsigned int unknown_depth;
169 
170  // These are used for processing errors.
171  string d_error_msg; // Error message(s), if any.
172  xmlParserCtxtPtr d_context; // used for error message line numbers
173 
174  // These hold temporary values read during the parse.
175  string dods_attr_name; // DAP4 attributes, not XML attributes
176  string dods_attr_type; // ... not XML ...
177  string char_data; // char data in value elements; null after use
178  string root_ns; // What is the namespace of the root node (Group)
179 
180  bool d_debug;
181  bool debug() const { return d_debug; }
182 
183  bool d_strict;
184 
185  class XMLAttribute {
186  public:
187  string prefix;
188  string nsURI;
189  string value;
190 
191  void clone(const XMLAttribute &src) {
192  prefix = src.prefix;
193  nsURI = src.nsURI;
194  value = src.value;
195  }
196 
197  XMLAttribute() : prefix(""), nsURI(""), value("") {}
198  XMLAttribute(const string &p, const string &ns, const string &v)
199  : prefix(p), nsURI(ns), value(v) {}
200  // 'attributes' as passed from libxml2 is a five element array but this
201  // ctor gets the back four elements.
202  XMLAttribute(const xmlChar **attributes/*[4]*/) {
203  prefix = attributes[0] != 0 ? (const char *)attributes[0]: "";
204  nsURI = attributes[1] != 0 ? (const char *)attributes[1]: "";
205  value = string((const char *)attributes[2], (const char *)attributes[3]);
206  }
207  XMLAttribute(const XMLAttribute &rhs) {
208  clone(rhs);
209  }
210  ~XMLAttribute() {
211  }
212  XMLAttribute &operator=(const XMLAttribute &rhs) {
213  if (this == &rhs)
214  return *this;
215  clone(rhs);
216  return *this;
217  }
218  };
219 
220  typedef map<string, XMLAttribute> XMLAttrMap;
221  XMLAttrMap xml_attrs; // dump XML attributes here
222 
223  XMLAttrMap::iterator xml_attr_begin() { return xml_attrs.begin(); }
224 
225  XMLAttrMap::iterator xml_attr_end() { return xml_attrs.end(); }
226 
227  map<string, string> namespace_table;
228 
229  void cleanup_parse();
230 
237  void transfer_xml_attrs(const xmlChar **attrs, int nb_attributes);
238  void transfer_xml_ns(const xmlChar **namespaces, int nb_namespaces);
239  bool check_required_attribute(const string &attr);
240  bool check_attribute(const string & attr);
241  void process_variable_helper(Type t, ParseState s, const xmlChar **attrs, int nb_attributes);
242 
243  void process_enum_const_helper(const xmlChar **attrs, int nb_attributes);
244  void process_enum_def_helper(const xmlChar **attrs, int nb_attributes);
245 
246  bool process_dimension(const char *name, const xmlChar **attrs, int nb_attrs);
247  bool process_dimension_def(const char *name, const xmlChar **attrs, int nb_attrs);
248  bool process_map(const char *name, const xmlChar **attrs, int nb_attributes);
249  bool process_attribute(const char *name, const xmlChar **attrs, int nb_attributes);
250  bool process_variable(const char *name, const xmlChar **attrs, int nb_attributes);
251  bool process_group(const char *name, const xmlChar **attrs, int nb_attributes);
252  bool process_enum_def(const char *name, const xmlChar **attrs, int nb_attributes);
253  bool process_enum_const(const char *name, const xmlChar **attrs, int nb_attributes);
254 
255  void finish_variable(const char *tag, Type t, const char *expected);
257 
258  friend class D4ParserSax2Test;
259 
260 public:
261  D4ParserSax2() :
262  d_dmr(0), d_enum_def(0), d_dim_def(0),
263  other_xml(""), other_xml_depth(0), unknown_depth(0),
264  d_error_msg(""), d_context(0),
265  dods_attr_name(""), dods_attr_type(""),
266  char_data(""), root_ns(""), d_debug(false), d_strict(true)
267  {
268  //xmlSAXHandler ddx_sax_parser;
269  memset(&d_dmr_sax_parser, 0, sizeof(xmlSAXHandler));
270 
271  d_dmr_sax_parser.getEntity = &D4ParserSax2::dmr_get_entity;
272  d_dmr_sax_parser.startDocument = &D4ParserSax2::dmr_start_document;
273  d_dmr_sax_parser.endDocument = &D4ParserSax2::dmr_end_document;
274  d_dmr_sax_parser.characters = &D4ParserSax2::dmr_get_characters;
275  d_dmr_sax_parser.ignorableWhitespace = &D4ParserSax2::dmr_ignoreable_whitespace;
276  d_dmr_sax_parser.cdataBlock = &D4ParserSax2::dmr_get_cdata;
277  d_dmr_sax_parser.warning = &D4ParserSax2::dmr_error;
278  d_dmr_sax_parser.error = &D4ParserSax2::dmr_error;
279  d_dmr_sax_parser.fatalError = &D4ParserSax2::dmr_fatal_error;
280  d_dmr_sax_parser.initialized = XML_SAX2_MAGIC;
281  d_dmr_sax_parser.startElementNs = &D4ParserSax2::dmr_start_element;
282  d_dmr_sax_parser.endElementNs = &D4ParserSax2::dmr_end_element;
283  }
284 
285  void intern(istream &f, DMR *dest_dmr, bool debug = false);
286  // Deprecated - this does not read from a file, it parses text in the string 'document'
287  void intern(const string &document, DMR *dest_dmr, bool debug = false);
288  void intern(const char *buffer, int size, DMR *dest_dmr, bool debug = false);
289 
302  void set_strict(bool s) { d_strict = s; }
306  bool get_strict() const { return d_strict; }
309  static void dmr_start_document(void *parser);
310  static void dmr_end_document(void *parser);
311 
312  static void dmr_start_element(void *parser,
313  const xmlChar *localname, const xmlChar *prefix, const xmlChar *URI,
314  int nb_namespaces, const xmlChar **namespaces, int nb_attributes,
315  int nb_defaulted, const xmlChar **attributes);
316  static void dmr_end_element(void *parser, const xmlChar *localname,
317  const xmlChar *prefix, const xmlChar *URI);
318 
319  static void dmr_get_characters(void *parser, const xmlChar *ch, int len);
320  static void dmr_ignoreable_whitespace(void *parser,
321  const xmlChar * ch, int len);
322  static void dmr_get_cdata(void *parser, const xmlChar *value, int len);
323 
324  static xmlEntityPtr dmr_get_entity(void *parser, const xmlChar *name);
325  static void dmr_fatal_error(void *parser, const char *msg, ...);
326  static void dmr_error(void *parser, const char *msg, ...);
327 };
328 
329 } // namespace libdap
330 
331 #endif // d4_parser_sax2_h
static void dmr_end_document(void *parser)
- -
static void dmr_start_document(void *parser)
-
static xmlEntityPtr dmr_get_entity(void *parser, const xmlChar *name)
-
void set_strict(bool s)
Set the &#39;strict&#39; mode to true or false.
Definition: D4ParserSax2.h:302
-
Type
Identifies the data type.
Definition: Type.h:94
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- -
static void dmr_start_element(void *parser, const xmlChar *localname, const xmlChar *prefix, const xmlChar *URI, int nb_namespaces, const xmlChar **namespaces, int nb_attributes, int nb_defaulted, const xmlChar **attributes)
-
static void dmr_ignoreable_whitespace(void *parser, const xmlChar *ch, int len)
- -
static void dmr_get_cdata(void *parser, const xmlChar *value, int len)
-
static void dmr_get_characters(void *parser, const xmlChar *ch, int len)
-
bool get_strict() const
Get the setting of the &#39;strict&#39; mode.
Definition: D4ParserSax2.h:306
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
- -
static void dmr_fatal_error(void *parser, const char *msg,...)
- - -
-
- - - - diff --git a/html/D4RValue_8cc_source.html b/html/D4RValue_8cc_source.html deleted file mode 100644 index aa1413b22..000000000 --- a/html/D4RValue_8cc_source.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - -libdap: D4RValue.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4RValue.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2014 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #include "config.h"
27 
28 #include <iostream>
29 
30 #include "BaseType.h"
31 #include "Array.h"
32 #include "Byte.h"
33 #include "Int8.h"
34 #include "UInt16.h"
35 #include "Int16.h"
36 #include "UInt32.h"
37 #include "Int32.h"
38 #include "UInt64.h"
39 #include "Int64.h"
40 #include "Float32.h"
41 #include "Float64.h"
42 #include "Str.h"
43 
44 #include "D4RValue.h"
45 #include "InternalErr.h"
46 
47 #include "dods-datatypes.h"
48 #include "dods-limits.h"
49 #include "parser-util.h"
50 #include "util.h"
51 
52 using namespace std;
53 
54 namespace libdap {
55 
56 void
57 D4RValueList::m_duplicate(const D4RValueList &src)
58 {
59  for (std::vector<D4RValue *>::const_iterator i = src.d_rvalues.begin(), e = src.d_rvalues.end(); i != e; ++i) {
60  D4RValue *rv = *i;
61  d_rvalues.push_back(new D4RValue(*rv));
62  }
63 }
64 
65 D4RValueList::~D4RValueList()
66 {
67  for (std::vector<D4RValue *>::iterator i = d_rvalues.begin(), e = d_rvalues.end(); i != e; ++i)
68  delete *i;
69 }
70 
71 void
72 D4RValue::m_duplicate(const D4RValue &src)
73 {
74  d_value_kind = src.d_value_kind;
75 
76  d_variable = src.d_variable; // weak pointers
77 
78  d_func = src.d_func;
79  d_args = (src.d_args != 0) ? new D4RValueList(*src.d_args) : 0; // deep copy these
80 
81  d_constant = (src.d_constant != 0) ? src.d_constant->ptr_duplicate() : 0;
82 }
83 
84 template<typename T, class DAP_TYPE>
85 static BaseType *
86 build_constant_array(vector<T> &values, DAP_TYPE &dt)
87 {
88  Array *array = new Array("", &dt);
89  array->append_dim(values.size());
90 
91  // TODO Make set_value_nocopy() methods so that values' pointers can be copied
92  // instead of allocating memory twice. jhrg 7/5/13
93 
94  array->set_value(values, values.size());
95 
96  array->set_read_p(true);
97 
98  static unsigned long counter = 1;
99  array->set_name(string("g") + long_to_string(counter++));
100 
101  return array;
102 }
103 
104 D4RValue::D4RValue(unsigned long long ull) : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(constant)
105 {
106  UInt64 *ui = new UInt64("constant");
107  ui->set_value(ull);
108  d_constant = ui;
109 }
110 
111 D4RValue::D4RValue(long long ll) : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(constant)
112 {
113  Int64 *i = new Int64("constant");
114  i->set_value(ll);
115  d_constant = i;
116 }
117 
118 D4RValue::D4RValue(double r) : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(constant)
119 {
120  Float64 *f = new Float64("constant");
121  f->set_value(r);
122  d_constant = f;
123 }
124 
125 D4RValue::D4RValue(std::string cpps) : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(constant)
126 {
127  Str *s = new Str("constant");
128  s->set_value(remove_quotes(cpps));
129  d_constant = s;
130 }
131 
132 D4RValue::D4RValue(std::vector<dods_byte> &byte_args)
133  : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(constant)
134 {
135  Byte b("");
136  d_constant = build_constant_array(byte_args, b);
137 }
138 
139 D4RValue::D4RValue(std::vector<dods_int8> &byte_int8)
140  : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(constant)
141 {
142  Int8 b("");
143  d_constant = build_constant_array(byte_int8, b);
144 }
145 
146 D4RValue::D4RValue(std::vector<dods_uint16> &byte_uint16)
147  : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(constant)
148 {
149  UInt16 b("");
150  d_constant = build_constant_array(byte_uint16, b);
151 }
152 
153 D4RValue::D4RValue(std::vector<dods_int16> &byte_int16)
154  : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(constant)
155 {
156  Int16 b("");
157  d_constant = build_constant_array(byte_int16, b);
158 }
159 
160 D4RValue::D4RValue(std::vector<dods_uint32> &byte_uint32)
161  : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(constant)
162 {
163  UInt32 b("");
164  d_constant = build_constant_array(byte_uint32, b);
165 }
166 
167 D4RValue::D4RValue(std::vector<dods_int32> &byte_int32)
168  : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(constant)
169 {
170  Int32 b("");
171  d_constant = build_constant_array(byte_int32, b);
172 }
173 
174 D4RValue::D4RValue(std::vector<dods_uint64> &byte_uint64)
175  : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(constant)
176 {
177  UInt64 b("");
178  d_constant = build_constant_array(byte_uint64, b);
179 }
180 
181 D4RValue::D4RValue(std::vector<dods_int64> &byte_int64)
182  : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(constant)
183 {
184  Int64 b("");
185  d_constant = build_constant_array(byte_int64, b);
186 }
187 
188 D4RValue::D4RValue(std::vector<dods_float32> &byte_float32)
189  : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(constant)
190 {
191  Float32 b("");
192  d_constant = build_constant_array(byte_float32, b);
193 }
194 
195 D4RValue::D4RValue(std::vector<dods_float64> &byte_float64)
196  : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(constant)
197 {
198  Float64 b("");
199  d_constant = build_constant_array(byte_float64, b);
200 }
201 
202 D4RValue::~D4RValue() {
203  // d_variable and d_func are weak pointers; don't delete.
204  delete d_args;
205  delete d_constant;
206 }
207 
218 D4RValue *D4RValueFactory(std::string cpps)
219 {
220  char *ptr;
221 
222  // First check if the string is a uint64, ..., then convert it.
223  // Since the check_* function use the strtoull() functions, no
224  // need to test for errors when building the actual values.
225  if (check_uint64(cpps.c_str())) {
226  return new D4RValue(strtoull(cpps.c_str(), &ptr, 0));
227  }
228  else if (check_int64(cpps.c_str())) {
229  return new D4RValue(strtoll(cpps.c_str(), &ptr, 0));
230  }
231  else if (check_float64(cpps.c_str())) {
232 #ifdef WIN32
233  return new D4RValue(w32strtod(cpps.c_str(), &ptr));
234 #else
235  return new D4RValue(strtod(cpps.c_str(), &ptr));
236 #endif
237  }
238  else {
239  return new D4RValue(cpps);
240  }
241 }
242 
269 BaseType *
271 {
272  switch (d_value_kind) {
273  case basetype:
274  d_variable->read();
275  d_variable->set_read_p(true);
276  return d_variable;
277 
278  case function:
279  return (*d_func)(d_args, dmr);
280 
281  case constant:
282  return d_constant;
283 
284  default:
285  throw InternalErr(__FILE__, __LINE__, "Unknown rvalue type.");
286  }
287 }
288 
299 BaseType *
301 {
302  switch (d_value_kind) {
303  case basetype:
304  d_variable->read();
305  d_variable->set_read_p(true);
306  return d_variable;
307 
308  case function:
309  throw Error(malformed_expr, "An expression that included a function call was used in a place where that won't work.");
310 
311  case constant:
312  return d_constant;
313 
314  default:
315  throw InternalErr(__FILE__, __LINE__, "Unknown rvalue type.");
316  }
317 }
318 
319 } // namespace libdap
320 
virtual bool read()
Read data into a local buffer.
Definition: BaseType.cc:899
-
STL namespace.
- -
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
- -
D4RValue * D4RValueFactory(std::string cpps)
Build an appropriate RValue.
Definition: D4RValue.cc:218
-
string remove_quotes(const string &s)
Definition: util.cc:585
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
virtual BaseType * value()
Get the value for a RValue object.
Definition: D4RValue.cc:300
-
A class for error processing.
Definition: Error.h:92
-
-
- - - - diff --git a/html/D4RValue_8h_source.html b/html/D4RValue_8h_source.html deleted file mode 100644 index f2a0739f2..000000000 --- a/html/D4RValue_8h_source.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -libdap: D4RValue.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4RValue.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2014 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef _D4RValue_h
27 #define _D4RValue_h
28 
29 #include <vector>
30 #include <string>
31 
32 #include <dods-datatypes.h>
33 #include <D4Function.h>
34 
35 namespace libdap
36 {
37 
38 class BaseType;
39 class D4RValue;
40 
41 // Factory class to build RValue objects. User by the parser/ce-evaluator
42 D4RValue *D4RValueFactory(std::string cpps);
43 
45 {
46 private:
47  std::vector<D4RValue *> d_rvalues;
48 
49  void m_duplicate(const D4RValueList &src);
50 
51 public:
52  typedef std::vector<D4RValue *>::iterator iter;
53 
54  D4RValueList() { }
55  D4RValueList(const D4RValueList &src) { m_duplicate(src); }
56  D4RValueList(D4RValue *rv) { add_rvalue(rv); }
57 
58  virtual ~D4RValueList();
59 
60  D4RValueList &operator=(const D4RValueList &rhs) {
61  if (this == &rhs) return *this;
62  m_duplicate(rhs);
63  return *this;
64  }
65 
66  void add_rvalue(D4RValue *rv) {
67  d_rvalues.push_back(rv);
68  }
69 
70  D4RValue *get_rvalue(unsigned int i) {
71  return d_rvalues.at(i);
72  }
73 
74  iter begin() { return d_rvalues.begin(); }
75  iter end() { return d_rvalues.end(); }
76 
77  unsigned int size() const { return d_rvalues.size(); }
78 
79 };
80 
85 class D4RValue
86 {
87 public:
88  enum value_kind {
89  unknown,
90  basetype,
91  function,
92  constant
93  };
94 
95 private:
96  BaseType *d_variable; // This is a weak pointer; do not delete
97 
98  D4Function d_func; // (weak) pointer to a function returning BaseType *
99  D4RValueList *d_args; // pointer to arguments to the function; delete
100 
101  BaseType *d_constant; // pointer; delete.
102 
103  value_kind d_value_kind;
104 
106  void m_duplicate(const D4RValue &src);
107 
108  friend class D4RValueList;
109 
110 public:
111  D4RValue() : d_variable(0), d_func(0), d_args(0), d_constant(0), d_value_kind(unknown) { }
112  D4RValue(const D4RValue &src) { m_duplicate(src); }
113  D4RValue(BaseType *btp) : d_variable(btp), d_func(0), d_args(0), d_constant(0), d_value_kind(basetype) { }
114  D4RValue(D4Function f, D4RValueList *args) : d_variable(0), d_func(f), d_args(args), d_constant(0), d_value_kind(function) { }
115 
116  D4RValue(unsigned long long ui);
117  D4RValue(long long i);
118  D4RValue(double r);
119  D4RValue(std::string s);
120  D4RValue(std::vector<dods_byte> &byte_args);
121  D4RValue(std::vector<dods_int8> &byte_int8);
122  D4RValue(std::vector<dods_uint16> &byte_uint16);
123  D4RValue(std::vector<dods_int16> &byte_int16);
124  D4RValue(std::vector<dods_uint32> &byte_uint32);
125  D4RValue(std::vector<dods_int32> &byte_int32);
126  D4RValue(std::vector<dods_uint64> &byte_uint64);
127  D4RValue(std::vector<dods_int64> &byte_int64);
128  D4RValue(std::vector<dods_float32> &byte_float32);
129  D4RValue(std::vector<dods_float64> &byte_float64);
130 
131  virtual ~D4RValue();
132 
133  D4RValue &operator=(D4RValue &rhs) {
134  if (this == &rhs)
135  return *this;
136 
137  m_duplicate(rhs);
138 
139  return *this;
140  }
141 
150  value_kind get_kind() const { return d_value_kind; }
151 
152  // This is the call that will be used to return the value of a function.
153  // jhrg 3/10/14
154  virtual BaseType *value(DMR &dmr);
155  // And this optimizes value() for filters, where functions are not supported.
156  virtual BaseType *value();
157 
158 };
159 
160 } // namespace libdap
161 #endif // _RValue_h
- -
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- -
D4RValue * D4RValueFactory(std::string cpps)
Build an appropriate RValue.
Definition: D4RValue.cc:218
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
value_kind get_kind() const
What kind of thing holds the value Values in DAP4 constraints are either constants, dataset variables or function results. It might be nice to know the source of a given value in order to optimize the evaluation of certain kinds of expressions.
Definition: D4RValue.h:150
-
-
- - - - diff --git a/html/D4Sequence_8cc_source.html b/html/D4Sequence_8cc_source.html deleted file mode 100644 index 0234de00f..000000000 --- a/html/D4Sequence_8cc_source.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - -libdap: D4Sequence.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4Sequence.cc
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2013 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 #include "config.h"
26 
27 //#define DODS_DEBUG
28 
29 #include <algorithm>
30 #include <string>
31 #include <sstream>
32 
33 #include "D4Sequence.h"
34 
35 #include "D4StreamMarshaller.h"
36 #include "D4StreamUnMarshaller.h"
37 
38 #include "D4RValue.h"
39 #include "D4FilterClause.h" // also contains D4FilterClauseList
40 
41 #include "debug.h"
42 #include "Error.h"
43 #include "InternalErr.h"
44 #include "util.h"
45 #include "escaping.h"
46 #include "DapIndent.h"
47 
48 #undef CLEAR_LOCAL_DATA
49 
50 using namespace std;
51 
52 namespace libdap {
53 
54 #if 0
55 // Keep this stuff around in case we decide to switch back to sentinels
56 
57 static const unsigned char end_of_sequence = 0xA5;// binary pattern 1010 0101
58 static const unsigned char start_of_instance = 0x5A;// binary pattern 0101 1010
59 
60 static void
61 write_end_of_sequence(Marshaller &m)
62 {
63  m.put_opaque( (char *)&end_of_sequence, 1 );
64 }
65 
66 static void
67 write_start_of_instance(Marshaller &m)
68 {
69  m.put_opaque( (char *)&start_of_instance, 1 );
70 }
71 
72 static unsigned char
73 read_marker(UnMarshaller &um)
74 {
75  unsigned char marker;
76  um.get_opaque( (char *)&marker, 1 );
77 
78  return marker;
79 }
80 
81 static bool
82 is_start_of_instance(unsigned char marker)
83 {
84  return (marker == start_of_instance);
85 }
86 
87 static bool
88 is_end_of_sequence(unsigned char marker)
89 {
90  return (marker == end_of_sequence);
91 }
92 #endif
93 
94 // Private member functions
95 
96 // A reminder of these type defs
97 //
98 // typedef vector<BaseType *> D4SeqRow;
99 // typedef vector<D4SeqRow *> D4SeqValues;
100 // D4SeqValues d_values;
101 
102 void D4Sequence::m_duplicate(const D4Sequence &s)
103 {
104  d_length = s.d_length;
105 #if INDEX_SUBSETTING
106  d_starting_row_number = s.d_starting_row_number;
107  d_ending_row_number = s.d_ending_row_number;
108  d_row_stride = s.d_row_stride;
109 #endif
110  // Deep copy for the values
111  for (D4SeqValues::const_iterator i = s.d_values.begin(), e = s.d_values.end(); i != e; ++i) {
112  D4SeqRow &row = **i;
113  D4SeqRow *dest = new D4SeqRow;
114  for (D4SeqRow::const_iterator j = row.begin(), e = row.end(); j != e; ++j) {
115  // *j is a BaseType*
116  dest->push_back((*j)->ptr_duplicate());
117  }
118 
119  d_values.push_back(dest);
120  }
121 
122  d_copy_clauses = s.d_copy_clauses;
123  d_clauses = (s.d_clauses != 0) ? new D4FilterClauseList(*s.d_clauses) : 0; // deep copy if != 0
124 }
125 
126 // Public member functions
127 
136 D4Sequence::D4Sequence(const string &n) :
137  Constructor(n, dods_sequence_c, true /* is dap4 */), d_clauses(0), d_copy_clauses(true), d_length(0)
138 {
139 }
140 
151 D4Sequence::D4Sequence(const string &n, const string &d) :
152  Constructor(n, d, dods_sequence_c, true /* is dap4 */), d_clauses(0), d_copy_clauses(true), d_length(0)
153 {
154 }
155 
158 {
159  m_duplicate(rhs);
160 }
161 
162 BaseType *
164 {
165  return new D4Sequence(*this);
166 }
167 
168 static inline void delete_bt(BaseType *bt_ptr)
169 {
170  delete bt_ptr;
171 }
172 
173 static inline void delete_rows(D4SeqRow *bt_row_ptr)
174 {
175  for_each(bt_row_ptr->begin(), bt_row_ptr->end(), delete_bt);
176 
177  delete bt_row_ptr;
178 }
179 
180 D4Sequence::~D4Sequence()
181 {
183  delete d_clauses;
184 }
185 
187 {
188  if (!d_values.empty()) {
189  for_each(d_values.begin(), d_values.end(), delete_rows);
190  d_values.resize(0);
191  }
192 
193  set_read_p(false);
194 }
195 
196 D4Sequence &
197 D4Sequence::operator=(const D4Sequence &rhs)
198 {
199  if (this == &rhs) return *this;
200 
201  dynamic_cast<Constructor &>(*this) = rhs; // run Constructor=
202 
203  m_duplicate(rhs);
204 
205  return *this;
206 }
207 
232 {
233  bool eof = false;
234  bool done = false;
235 
236  do {
237  eof = read();
238  if (eof) { // bail if EOF
239  continue;
240  }
241  // if we are supposed to filter and the clauses eval to true, we're done
242  else if (filter && d_clauses && d_clauses->value()) {
243  d_length++;
244  done = true;
245  }
246  // else if we're not supposed to filter or there are no clauses, we're done
247  else if (!filter || !d_clauses) {
248  d_length++;
249  done = true;
250  }
251 
252  // Set up the next call to get another row's worth of data
253  set_read_p(false);
254 
255  } while (!eof && !done);
256 
257  return !eof;
258 }
259 
261 {
262  read_sequence_values(true);
263 
264 #if 0
265  // Read the data values, then serialize.
266  while (read_next_instance(true /*filter*/)) {
267  D4SeqRow *row = new D4SeqRow;
268  for (Vars_iter i = d_vars.begin(), e = d_vars.end(); i != e; i++) {
269  if ((*i)->send_p()) {
270  // store the variable's value.
271  row->push_back((*i)->ptr_duplicate());
272  // the copy should have read_p true to prevent the serialize() call
273  // below in the nested for loops from triggering a second call to
274  // read().
275  row->back()->set_read_p(true);
276  }
277  }
278  d_values.push_back(row);
279  }
280 
281  set_length(d_values.size());
282 #endif
283 }
284 
307 {
308  DBG(cerr << __PRETTY_FUNCTION__ << " BEGIN" << endl);
309 
310  if (read_p()) return;
311 
312  // Read the data values, then serialize. NB: read_next_instance sets d_length
313  // evaluates the filter expression
314  while (read_next_instance(filter)) {
315  DBG(cerr << "read_sequence_values() - Adding row" << endl);
316  D4SeqRow* row = new D4SeqRow;
317  for (Vars_iter i = d_vars.begin(), e = d_vars.end(); i != e; i++) {
318  if ((*i)->send_p()) {
319  DBG(cerr << ":serialize() - reading data for " << (*i)->type_name() << " " << (*i)->name() << endl);
320  if ((*i)->type() == dods_sequence_c) {
321  DBG(cerr << "Reading child sequence values for " << (*i)->name() << endl);
322  D4Sequence *d4s = static_cast<D4Sequence*>(*i);
323  d4s->read_sequence_values(filter);
324  d4s->d_copy_clauses = false;
325  row->push_back(d4s->ptr_duplicate());
326  d4s->d_copy_clauses = true; // Must be sure to not break the object in general
327  row->back()->set_read_p(true);
328  }
329  else {
330  // store the variable's value.
331  row->push_back((*i)->ptr_duplicate());
332  // the copy should have read_p true to prevent the serialize() call
333  // below in the nested for loops from triggering a second call to
334  // read().
335  row->back()->set_read_p(true);
336  }
337  }
338  }
339 
340  // When specializing this, use set_value()
341  d_values.push_back(row);
342  DBG(cerr << " read_sequence_values() - Row completed" << endl);
343  }
344 
345  set_length(d_values.size());
346 
347  DBGN(cerr << __PRETTY_FUNCTION__ << " END added " << d_values.size() << endl);
348 }
349 
369 void D4Sequence::serialize(D4StreamMarshaller &m, DMR &dmr, bool filter)
370 {
371  DBGN(cerr << __PRETTY_FUNCTION__ << " BEGIN" << endl);
372 
373  // Read the data values, then serialize. NB: read_next_instance sets d_length
374  // evaluates the filter expression
375  read_sequence_values(filter);
376 
377  // write D4Sequecne::length(); don't include the length in the checksum
378  m.put_count(d_length);
379 
380  // By this point the d_values object holds all and only the values to be sent;
381  // use the serialize methods to send them (but no need to test send_p).
382  for (D4SeqValues::iterator i = d_values.begin(), e = d_values.end(); i != e; ++i) {
383  for (D4SeqRow::iterator j = (*i)->begin(), f = (*i)->end(); j != f; ++j) {
384  (*j)->serialize(m, dmr, /*eval,*/false);
385  }
386  }
387 
388  DBGN(cerr << __PRETTY_FUNCTION__ << " END" << endl);
389 }
390 
392 {
393  int64_t um_count = um.get_count();
394 
395  set_length(um_count);
396 
397  for (int64_t i = 0; i < d_length; ++i) {
398  D4SeqRow *row = new D4SeqRow;
399  for (Vars_iter i = d_vars.begin(), e = d_vars.end(); i != e; ++i) {
400  (*i)->deserialize(um, dmr);
401  row->push_back((*i)->ptr_duplicate());
402  }
403  d_values.push_back(row);
404  }
405 }
406 
418 {
419  if (!d_clauses) d_clauses = new D4FilterClauseList();
420  return *d_clauses;
421 }
422 
423 
424 #if INDEX_SUBSETTING
425 
433 virtual void set_row_number_constraint(int start, int stop, int stride)
434 {
435  if (stop < start)
436  throw Error(malformed_expr, "Starting row number must precede the ending row number.");
437 
438  d_starting_row_number = start;
439  d_row_stride = stride;
440  d_ending_row_number = stop;
441 }
442 #endif
443 
448 D4SeqRow *
450 {
451  if (row >= d_values.size()) return 0;
452  return d_values[row];
453 }
454 
455 static bool base_type_name_eq(BaseType *btp, const string name)
456 {
457  return btp->name() == name;
458 }
459 
465 BaseType *
466 D4Sequence::var_value(size_t row_num, const string &name)
467 {
468  D4SeqRow *row = row_value(row_num);
469  if (!row) return 0;
470 
471  D4SeqRow::iterator elem = find_if(row->begin(), row->end(), bind2nd(ptr_fun(base_type_name_eq), name));
472  return (elem != row->end()) ? *elem : 0;
473 }
474 
480 BaseType *
481 D4Sequence::var_value(size_t row_num, size_t i)
482 {
483  D4SeqRow *row = row_value(row_num);
484  if (!row) return 0;
485 
486  if (i >= row->size()) return 0;
487 
488  return (*row)[i];
489 }
490 
491 void D4Sequence::print_one_row(ostream &out, int row, string space, bool print_row_num)
492 {
493  if (print_row_num) out << "\n" << space << row << ": ";
494 
495  out << "{ ";
496 
497  int elements = element_count();
498  int j = 0;
499  BaseType *bt_ptr = 0;
500 
501  // This version of print_one_row() works for both data read with
502  // deserialize(), where each variable is assumed to have valid data, and
503  // intern_data(), where some/many variables do not. Because of that, it's
504  // not correct to assume that all of the elements will be printed, which
505  // is what the old code did.
506 
507  // Print the first value
508  while (j < elements && !bt_ptr) {
509  bt_ptr = var_value(row, j++);
510  if (bt_ptr) { // data
511  if (bt_ptr->type() == dods_sequence_c) static_cast<D4Sequence*>(bt_ptr)->print_val_by_rows(out,
512  space + " ", false, print_row_num);
513  else
514  bt_ptr->print_val(out, space, false);
515  }
516  }
517 
518  // Print the remaining values
519  while (j < elements) {
520  bt_ptr = var_value(row, j++);
521  if (bt_ptr) { // data
522  out << ", ";
523  if (bt_ptr->type() == dods_sequence_c) static_cast<D4Sequence*>(bt_ptr)->print_val_by_rows(out,
524  space + " ", false, print_row_num);
525  else
526  bt_ptr->print_val(out, space, false);
527  }
528  }
529 
530  out << " }";
531 }
532 
533 void D4Sequence::print_val_by_rows(ostream &out, string space, bool print_decl_p, bool print_row_numbers)
534 {
535  if (print_decl_p) {
536  print_decl(out, space, false);
537  out << " = ";
538  }
539 
540  out << "{ ";
541 
542  if (length() != 0) {
543  int rows = length() - 1; // -1 because the last row is treated specially
544  for (int i = 0; i < rows; ++i) {
545  print_one_row(out, i, space, print_row_numbers);
546  out << ", ";
547  }
548  print_one_row(out, rows, space, print_row_numbers);
549  }
550 
551  out << " }";
552 
553  if (print_decl_p) out << ";\n";
554 }
555 
556 void D4Sequence::print_val(ostream &out, string space, bool print_decl_p)
557 {
558  DBG(cerr << name() << " isa " << type_name() << endl);
559 
560  print_val_by_rows(out, space, print_decl_p, false);
561 }
562 
571 void D4Sequence::dump(ostream &strm) const
572 {
573  strm << DapIndent::LMarg << "Sequence::dump - (" << (void *) this << ")" << endl;
574  DapIndent::Indent();
575  Constructor::dump(strm);
576  strm << DapIndent::LMarg << "# rows deserialized: " << d_length << endl;
577  strm << DapIndent::LMarg << "bracket notation information:" << endl;
578 
579  DapIndent::Indent();
580 #if INDEX_SUBSETTING
581  strm << DapIndent::LMarg << "starting row #: " << d_starting_row_number << endl;
582  strm << DapIndent::LMarg << "row stride: " << d_row_stride << endl;
583  strm << DapIndent::LMarg << "ending row #: " << d_ending_row_number << endl;
584 #endif
585  DapIndent::UnIndent();
586 
587  DapIndent::UnIndent();
588 }
589 
590 } // namespace libdap
591 
virtual bool read_p()
Has this variable been read?
Definition: BaseType.cc:480
-
virtual string name() const
Returns the name of the class instance.
Definition: BaseType.cc:320
-
virtual BaseType * ptr_duplicate()
Definition: D4Sequence.cc:163
-
bool value(DMR &dmr)
Evaluate the list of clauses.
-
void read_sequence_values(bool filter)
Read a Sequence&#39;s value into memory.
Definition: D4Sequence.cc:306
-
virtual void put_count(int64_t count)
-
D4Sequence(const string &n)
The Sequence constructor.
Definition: D4Sequence.cc:136
-
virtual bool read_next_instance(bool filter)
Read the next instance of the sequence While the rest of the variables&#39; read() methods are assumed to...
Definition: D4Sequence.cc:231
-
Read data from the stream made by D4StreamMarshaller.
-
STL namespace.
-
virtual void clear_local_data()
Definition: D4Sequence.cc:186
-
virtual BaseType * var_value(size_t row, const string &name)
Get the BaseType pointer to the named variable of a given row.
Definition: D4Sequence.cc:466
-
D4FilterClauseList & clauses()
Access the filter clauses for this D4Sequence.
Definition: D4Sequence.cc:417
-
vector< BaseType * > D4SeqRow
Definition: D4Sequence.h:39
-
virtual int element_count(bool leaves=false)
Count the members of constructor types.
Definition: Constructor.cc:194
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
List of DAP4 Filter Clauses.
-
virtual void print_val(FILE *out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: BaseType.cc:1090
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: D4Sequence.cc:571
-
virtual Type type() const
Returns the type of the class instance.
Definition: BaseType.cc:365
-
virtual void set_length(int count)
Definition: D4Sequence.h:199
-
Holds a sequence.
Definition: D4Sequence.h:133
-
virtual bool read()
simple implementation of read that iterates through vars and calls read on them
Definition: Constructor.cc:476
-
virtual void intern_data()
Read data into this variable.
Definition: D4Sequence.cc:260
-
virtual int length() const
The number of elements in a Sequence object.
Definition: D4Sequence.h:193
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Constructor.cc:913
-
virtual void print_val(ostream &out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: D4Sequence.cc:556
- -
virtual bool deserialize(UnMarshaller &, DDS *, bool)
Receive data from the net.
Definition: D4Sequence.h:209
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
- -
virtual void print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
Print an ASCII representation of the variable structure.
Definition: Constructor.cc:626
-
virtual string type_name() const
Returns the type of the class instance as a string.
Definition: BaseType.cc:379
-
virtual D4SeqRow * row_value(size_t row)
Get a whole row from the sequence.
Definition: D4Sequence.cc:449
-
A class for error processing.
Definition: Error.h:92
-
virtual bool serialize(ConstraintEvaluator &, DDS &, Marshaller &, bool)
Move data to the net, then remove them from the object.
Definition: D4Sequence.h:206
-
virtual void set_read_p(bool state)
Sets the value of the read_p property.
Definition: Constructor.cc:218
-
-
- - - - diff --git a/html/D4Sequence_8h_source.html b/html/D4Sequence_8h_source.html deleted file mode 100644 index 1a06abfad..000000000 --- a/html/D4Sequence_8h_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - -libdap: D4Sequence.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4Sequence.h
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2013 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 #ifndef _d4sequence_h
26 #define _d4sequence_h 1
27 
28 #include "Constructor.h"
29 
30 // DAP2 Sequence supported subsetting using the array notation. This might
31 // be introduced into DAP4 later on.
32 #define INDEX_SUBSETTING 0
33 
34 class Crc32;
35 
36 namespace libdap
37 {
38 class BaseType;
40 
43 typedef vector<BaseType *> D4SeqRow;
44 
46 typedef vector<D4SeqRow *> D4SeqValues;
47 
50 typedef vector<BaseType *> BaseTypeRow;
51 
53 typedef vector<BaseTypeRow *> SequenceValues;
54 
55 
133 class D4Sequence: public Constructor
134 {
135 private:
136  // This may be zero (nullptr) but the accessor (clauses()) allocates an
137  // instance if that is the case.
138  D4FilterClauseList *d_clauses;
139 
140  // Use this to control if ptr_duplicate(), ..., copy the filter clauses.
141  // Because the values of a child sequence are held in copies of the Seq
142  // object they clauses will bound to the 'master' instance will be copied
143  // but the copies will never be used. This field can be used to control
144  // that. ...purely an optimization.
145  bool d_copy_clauses;
146 
147 protected:
148  // This holds the values of the sequence. Values are stored in
149  // instances of BaseTypeRow objects which hold instances of BaseType.
150  //
151  // Allow these values to be accessed by subclasses
152  D4SeqValues d_values;
153 
154  int64_t d_length; // How many elements are in the sequence; -1 if not currently known
155 
156 #if INDEX_SUBSETTING
157  int d_starting_row_number;
158  int d_row_stride;
159  int d_ending_row_number;
160 #endif
161 
162  void m_duplicate(const D4Sequence &s);
163 
164  // Specialize this if you have a data source that requires read()
165  // recursively call itself for child sequences.
166  void read_sequence_values(bool filter);
167 
168  friend class D4SequenceTest;
169 
170 public:
171 
172  D4Sequence(const string &n);
173  D4Sequence(const string &n, const string &d);
174 
175  D4Sequence(const D4Sequence &rhs);
176 
177  virtual ~D4Sequence();
178 
179  D4Sequence &operator=(const D4Sequence &rhs);
180 
181  virtual BaseType *ptr_duplicate();
182 
183  virtual void clear_local_data();
184 
193  virtual int length() const { return (int)d_length; }
194 
199  virtual void set_length(int count) { d_length = (int64_t)count; }
200 
201  virtual bool read_next_instance(bool filter);
202 
203  virtual void intern_data(ConstraintEvaluator &, DDS &) {
204  throw InternalErr(__FILE__, __LINE__, "Not implemented for DAP4");
205  }
206  virtual bool serialize(ConstraintEvaluator &, DDS &, Marshaller &, bool ) {
207  throw InternalErr(__FILE__, __LINE__, "Not implemented for DAP4");
208  }
209  virtual bool deserialize(UnMarshaller &, DDS *, bool ) {
210  throw InternalErr(__FILE__, __LINE__, "Not implemented for DAP4");
211  }
212 
213  // DAP4
214  virtual void intern_data(/*Crc32 &checksum, DMR &dmr, ConstraintEvaluator &eval*/);
215  virtual void serialize(D4StreamMarshaller &m, DMR &dmr, /*ConstraintEvaluator &eval,*/ bool filter = false);
216  virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr);
217 
219 
220 #if INDEX_SUBSETTING
221 
232  virtual int get_starting_row_number() const { return d_starting_row_number; }
233 
244  virtual int get_row_stride() const { return d_row_stride; }
245 
257  virtual int get_ending_row_number() const { return d_ending_row_number; }
258 
259  virtual void set_row_number_constraint(int start, int stop, int stride = 1);
260 #endif
261 
271  virtual void set_value(D4SeqValues &values) { d_values = values; d_length = d_values.size(); }
272 
281  virtual D4SeqValues value() const { return d_values; }
282 
291  virtual D4SeqValues &value_ref() { return d_values; }
292 
293  virtual D4SeqRow *row_value(size_t row);
294  virtual BaseType *var_value(size_t row, const string &name);
295  virtual BaseType *var_value(size_t row, size_t i);
296 
297  virtual void print_one_row(ostream &out, int row, string space,
298  bool print_row_num = false);
299  virtual void print_val_by_rows(ostream &out, string space = "",
300  bool print_decl_p = true,
301  bool print_row_numbers = true);
302  virtual void print_val(ostream &out, string space = "",
303  bool print_decl_p = true);
304 
305  virtual void dump(ostream &strm) const ;
306 };
307 
308 } // namespace libdap
309 
310 #endif //_sequence_h
virtual string name() const
Returns the name of the class instance.
Definition: BaseType.cc:320
-
virtual BaseType * ptr_duplicate()
Definition: D4Sequence.cc:163
-
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
virtual D4SeqValues value() const
Get the values for this D4Sequence This method returns a reference to the values held by the instance...
Definition: D4Sequence.h:281
-
void read_sequence_values(bool filter)
Read a Sequence&#39;s value into memory.
Definition: D4Sequence.cc:306
-
D4Sequence(const string &n)
The Sequence constructor.
Definition: D4Sequence.cc:136
-
virtual bool read_next_instance(bool filter)
Read the next instance of the sequence While the rest of the variables&#39; read() methods are assumed to...
Definition: D4Sequence.cc:231
-
Read data from the stream made by D4StreamMarshaller.
-
Definition: crc.h:76
-
virtual void clear_local_data()
Definition: D4Sequence.cc:186
-
virtual BaseType * var_value(size_t row, const string &name)
Get the BaseType pointer to the named variable of a given row.
Definition: D4Sequence.cc:466
-
vector< BaseTypeRow * > SequenceValues
Definition: D4Sequence.h:53
-
D4FilterClauseList & clauses()
Access the filter clauses for this D4Sequence.
Definition: D4Sequence.cc:417
-
virtual void set_value(D4SeqValues &values)
Set the internal value. The &#39;values&#39; of a D4Sequence is a vector of vectors of BaseType* objects...
Definition: D4Sequence.h:271
-
vector< BaseType * > D4SeqRow
Definition: D4Sequence.h:39
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
List of DAP4 Filter Clauses.
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: D4Sequence.cc:571
- -
virtual void set_length(int count)
Definition: D4Sequence.h:199
-
Holds a sequence.
Definition: D4Sequence.h:133
-
virtual void intern_data()
Read data into this variable.
Definition: D4Sequence.cc:260
-
virtual D4SeqValues & value_ref()
Get the sequence values by reference This method returns a reference to the D4Sequence&#39;s values...
Definition: D4Sequence.h:291
-
virtual int length() const
The number of elements in a Sequence object.
Definition: D4Sequence.h:193
-
virtual void intern_data(ConstraintEvaluator &, DDS &)
Definition: D4Sequence.h:203
-
virtual void print_val(ostream &out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: D4Sequence.cc:556
- -
Evaluate a constraint expression.
-
virtual bool deserialize(UnMarshaller &, DDS *, bool)
Receive data from the net.
Definition: D4Sequence.h:209
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
-
virtual D4SeqRow * row_value(size_t row)
Get a whole row from the sequence.
Definition: D4Sequence.cc:449
-
vector< D4SeqRow * > D4SeqValues
Definition: D4Sequence.h:46
-
virtual bool serialize(ConstraintEvaluator &, DDS &, Marshaller &, bool)
Move data to the net, then remove them from the object.
Definition: D4Sequence.h:206
-
vector< BaseType * > BaseTypeRow
Definition: D4Sequence.h:50
-
-
- - - - diff --git a/html/D4StreamMarshaller_8cc_source.html b/html/D4StreamMarshaller_8cc_source.html deleted file mode 100644 index 7b6148b4a..000000000 --- a/html/D4StreamMarshaller_8cc_source.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - -libdap: D4StreamMarshaller.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4StreamMarshaller.cc
-
-
-
1 // D4StreamMarshaller.cc
2 
3 // -*- mode: c++; c-basic-offset:4 -*-
4 
5 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
6 // Access Protocol.
7 
8 // Copyright (c) 2012 OPeNDAP, Inc.
9 // Author: James Gallagher <jgallagher@opendap.org>
10 //
11 // This library is free software; you can redistribute it and/or
12 // modify it under the terms of the GNU Lesser General Public
13 // License as published by the Free Software Foundation; either
14 // version 2.1 of the License, or (at your option) any later version.
15 //
16 // This library is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 // Lesser General Public License for more details.
20 //
21 // You should have received a copy of the GNU Lesser General Public
22 // License along with this library; if not, write to the Free Software
23 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 //
25 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
26 
27 #include "config.h"
28 
29 #include <byteswap.h>
30 #include <cassert>
31 #include <cstring>
32 
33 #include <iostream>
34 #include <sstream>
35 #include <iomanip>
36 #include <limits>
37 
38 //#define DODS_DEBUG 1
39 
40 #ifdef HAVE_PTHREAD_H
41 #include <pthread.h>
42 #endif
43 
44 #include "D4StreamMarshaller.h"
45 #ifdef USE_POSIX_THREADS
46 #include "MarshallerThread.h"
47 #endif
48 
49 #if USE_XDR_FOR_IEEE754_ENCODING
50 #include "XDRUtils.h"
51 #include "util.h"
52 #endif
53 
54 #include "DapIndent.h"
55 #include "debug.h"
56 
57 using namespace std;
58 
59 namespace libdap {
60 
61 #if 0
62 // We decided to use int64_t to represent sizes of both arrays and strings,
63 // So this code is not used. jhrg 10/4/13
64 
65 // From the Google protobuf library
66 inline uint8_t* WriteVarint64ToArrayInline(uint64_t value, uint8_t* target) {
67  // Splitting into 32-bit pieces gives better performance on 32-bit
68  // processors.
69  uint32_t part0 = static_cast<uint32_t>(value );
70  uint32_t part1 = static_cast<uint32_t>(value >> 28);
71  uint32_t part2 = static_cast<uint32_t>(value >> 56);
72 
73  int size;
74 
75  // Here we can't really optimize for small numbers, since the value is
76  // split into three parts. Checking for numbers < 128, for instance,
77  // would require three comparisons, since you'd have to make sure part1
78  // and part2 are zero. However, if the caller is using 64-bit integers,
79  // it is likely that they expect the numbers to often be very large, so
80  // we probably don't want to optimize for small numbers anyway. Thus,
81  // we end up with a hard coded binary search tree...
82  if (part2 == 0) {
83  if (part1 == 0) {
84  if (part0 < (1 << 14)) {
85  if (part0 < (1 << 7)) {
86  size = 1; goto size1;
87  } else {
88  size = 2; goto size2;
89  }
90  } else {
91  if (part0 < (1 << 21)) {
92  size = 3; goto size3;
93  } else {
94  size = 4; goto size4;
95  }
96  }
97  } else {
98  if (part1 < (1 << 14)) {
99  if (part1 < (1 << 7)) {
100  size = 5; goto size5;
101  } else {
102  size = 6; goto size6;
103  }
104  } else {
105  if (part1 < (1 << 21)) {
106  size = 7; goto size7;
107  } else {
108  size = 8; goto size8;
109  }
110  }
111  }
112  } else {
113  if (part2 < (1 << 7)) {
114  size = 9; goto size9;
115  } else {
116  size = 10; goto size10;
117  }
118  }
119 
120  // GOOGLE_LOG(FATAL) << "Can't get here.";
121 
122  size10: target[9] = static_cast<uint8_t>((part2 >> 7) | 0x80);
123  size9 : target[8] = static_cast<uint8_t>((part2 ) | 0x80);
124  size8 : target[7] = static_cast<uint8_t>((part1 >> 21) | 0x80);
125  size7 : target[6] = static_cast<uint8_t>((part1 >> 14) | 0x80);
126  size6 : target[5] = static_cast<uint8_t>((part1 >> 7) | 0x80);
127  size5 : target[4] = static_cast<uint8_t>((part1 ) | 0x80);
128  size4 : target[3] = static_cast<uint8_t>((part0 >> 21) | 0x80);
129  size3 : target[2] = static_cast<uint8_t>((part0 >> 14) | 0x80);
130  size2 : target[1] = static_cast<uint8_t>((part0 >> 7) | 0x80);
131  size1 : target[0] = static_cast<uint8_t>((part0 ) | 0x80);
132 
133  target[size-1] &= 0x7F;
134  return target + size;
135 }
136 #endif
137 
138 #if USE_XDR_FOR_IEEE754_ENCODING
139 void D4StreamMarshaller::m_serialize_reals(char *val, unsigned int num, int width, Type type)
140 {
141  dods_uint64 size = num * width;
142 
143  char *buf = new char[size];
144  XDR xdr;
145  xdrmem_create(&xdr, &buf[0], size, XDR_ENCODE);
146  try {
147  if(!xdr_array(&xdr, &val, (unsigned int *)&num, size, width, XDRUtils::xdr_coder(type)))
148  throw InternalErr(__FILE__, __LINE__, "Error serializing a Float64 array");
149 
150  if (xdr_getpos(&xdr) != size)
151  throw InternalErr(__FILE__, __LINE__, "Error serializing a Float64 array");
152 
153  // If this is a little-endian host, twiddle the bytes
154  static bool twiddle_bytes = !is_host_big_endian();
155  if (twiddle_bytes) {
156  if (width == 4) {
157  dods_float32 *lbuf = reinterpret_cast<dods_float32*>(&buf[0]);
158  while (num--) {
159  dods_int32 *i = reinterpret_cast<dods_int32*>(lbuf++);
160  *i = bswap_32(*i);
161  }
162  }
163  else { // width == 8
164  dods_float64 *lbuf = reinterpret_cast<dods_float64*>(&buf[0]);
165  while (num--) {
166  dods_int64 *i = reinterpret_cast<dods_int64*>(lbuf++);
167  *i = bswap_64(*i);
168  }
169  }
170  }
171 #ifdef USE_POSIX_THREADS
172  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
173 
174  tm->increment_child_thread_count();
175  tm->start_thread(MarshallerThread::write_thread, d_out, buf, size);
176 
177  // The child thread will delete buf when it's done
178  xdr_destroy(&xdr);
179 #else
180  d_out.write(&buf[0], size);
181  xdr_destroy(&xdr);
182  delete [] buf;
183 #endif
184  }
185  catch (...) {
186  xdr_destroy(&xdr);
187  delete [] buf;
188 
189  throw;
190  }
191 }
192 #endif
193 
201 D4StreamMarshaller::D4StreamMarshaller(ostream &out, bool write_data) :
202  d_out(out), d_write_data(write_data), tm(0)
203 {
204  assert(sizeof(std::streamsize) >= sizeof(int64_t));
205 
206 #if USE_XDR_FOR_IEEE754_ENCODING
207  // XDR is used if the call std::numeric_limits<double>::is_iec559()
208  // returns false indicating that the compiler is not using IEEE 754.
209  // If it is, we just write out the bytes.
210  xdrmem_create(&d_scalar_sink, d_ieee754_buf, sizeof(dods_float64), XDR_ENCODE);
211 #endif
212 
213 #ifdef USE_POSIX_THREADS
214  tm = new MarshallerThread;
215 #endif
216 
217  // This will cause exceptions to be thrown on i/o errors. The exception
218  // will be ostream::failure
219  out.exceptions(ostream::failbit | ostream::badbit);
220 }
221 
222 D4StreamMarshaller::~D4StreamMarshaller()
223 {
224 #if USE_XDR_FOR_IEEE754_ENCODING
225  xdr_destroy(&d_scalar_sink);
226 #endif
227 
228  delete tm;
229 }
230 
234 {
235  d_checksum.Reset();
236 }
237 
249 {
250  ostringstream oss;
251  oss.setf(ios::hex, ios::basefield);
252  oss << setfill('0') << setw(8) << d_checksum.GetCrc32();
253 
254  return oss.str();
255 }
256 
264 {
265  Crc32::checksum chk = d_checksum.GetCrc32();
266 #ifdef USE_POSIX_THREADS
267  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
268 #endif
269  d_out.write(reinterpret_cast<char*>(&chk), sizeof(Crc32::checksum));
270 }
271 
276 void D4StreamMarshaller::checksum_update(const void *data, unsigned long len)
277 {
278  d_checksum.AddData(reinterpret_cast<const uint8_t*>(data), len);
279 }
280 
281 void D4StreamMarshaller::put_byte(dods_byte val)
282 {
283  checksum_update(&val, sizeof(dods_byte));
284 
285  if (d_write_data) {
286  DBG( std::cerr << "put_byte: " << val << std::endl );
287 #ifdef USE_POSIX_THREADS
288  // make sure that a child thread is not writing to d_out.
289  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
290 #endif
291  d_out.write(reinterpret_cast<char*>(&val), sizeof(dods_byte));
292  }
293 }
294 
295 void D4StreamMarshaller::put_int8(dods_int8 val)
296 {
297  checksum_update(&val, sizeof(dods_int8));
298 
299  if (d_write_data) {
300  DBG( std::cerr << "put_int8: " << val << std::endl );
301 #ifdef USE_POSIX_THREADS
302  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
303 #endif
304  d_out.write(reinterpret_cast<char*>(&val), sizeof(dods_int8));
305  }
306 }
307 
308 void D4StreamMarshaller::put_int16(dods_int16 val)
309 {
310  checksum_update(&val, sizeof(dods_int16));
311 
312  if (d_write_data) {
313 #ifdef USE_POSIX_THREADS
314  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
315 #endif
316  d_out.write(reinterpret_cast<char*>(&val), sizeof(dods_int16));
317  }
318 }
319 
320 void D4StreamMarshaller::put_int32(dods_int32 val)
321 {
322  checksum_update(&val, sizeof(dods_int32));
323 
324  if (d_write_data) {
325 #ifdef USE_POSIX_THREADS
326  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
327 #endif
328  d_out.write(reinterpret_cast<char*>(&val), sizeof(dods_int32));
329  }
330 }
331 
332 void D4StreamMarshaller::put_int64(dods_int64 val)
333 {
334  checksum_update(&val, sizeof(dods_int64));
335 
336  if (d_write_data) {
337 #ifdef USE_POSIX_THREADS
338  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
339 #endif
340  d_out.write(reinterpret_cast<const char*>(&val), sizeof(dods_int64));
341  }
342 }
343 
344 void D4StreamMarshaller::put_float32(dods_float32 val)
345 {
346 #if !USE_XDR_FOR_IEEE754_ENCODING
347  assert(std::numeric_limits<float>::is_iec559);
348 
349  checksum_update(&val, sizeof(dods_float32));
350 
351  if (d_write_data) {
352 #ifdef USE_POSIX_THREADS
353  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
354 #endif
355  d_out.write(reinterpret_cast<const char*>(&val), sizeof(dods_float32));
356  }
357 
358 #else
359  // This code uses XDR to convert from a local representation to IEEE754;
360  // The extra 'twiddle' operation makes the byte-order correct for this
361  // host should it not be big-endian. Also note the assert() at the
362  // start of the method.
363 
364  if (d_write_data) {
365  if (std::numeric_limits<float>::is_iec559 ) {
366 #ifdef USE_POSIX_THREADS
367  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
368 #endif
369  d_out.write(reinterpret_cast<char*>(&val), sizeof(dods_float32));
370  }
371  else {
372  if (!xdr_setpos(&d_scalar_sink, 0))
373  throw InternalErr(__FILE__, __LINE__, "Error serializing a Float32 variable");
374 
375  if (!xdr_float(&d_scalar_sink, &val))
376  throw InternalErr(__FILE__, __LINE__, "Error serializing a Float32 variable");
377 
378  if (xdr_getpos(&d_scalar_sink) != sizeof(dods_float32))
379  throw InternalErr(__FILE__, __LINE__, "Error serializing a Float32 variable");
380 
381  // If this is a little-endian host, twiddle the bytes
382  static bool twiddle_bytes = !is_host_big_endian();
383  if (twiddle_bytes) {
384  dods_int32 *i = reinterpret_cast<dods_int32*>(&d_ieee754_buf);
385  *i = bswap_32(*i);
386  }
387 #ifdef USE_POSIX_THREADS
388  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
389 #endif
390  d_out.write(d_ieee754_buf, sizeof(dods_float32));
391  }
392  }
393 #endif
394 }
395 
396 void D4StreamMarshaller::put_float64(dods_float64 val)
397 {
398 #if !USE_XDR_FOR_IEEE754_ENCODING
399  assert(std::numeric_limits<double>::is_iec559);
400 
401  checksum_update(&val, sizeof(dods_float64));
402 
403  if (d_write_data) {
404 #ifdef USE_POSIX_THREADS
405  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
406 #endif
407  d_out.write(reinterpret_cast<const char*>(&val), sizeof(dods_float64));
408  }
409 
410 #else
411  // See the comment above in put_float32()
412  if (d_write_data) {
413  if (std::numeric_limits<double>::is_iec559) {
414 #ifdef USE_POSIX_THREADS
415  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
416 #endif
417  d_out.write(reinterpret_cast<char*>(&val), sizeof(dods_float64));}
418  }
419  else {
420  if (!xdr_setpos(&d_scalar_sink, 0))
421  throw InternalErr(__FILE__, __LINE__, "Error serializing a Float64 variable");
422 
423  if (!xdr_double(&d_scalar_sink, &val))
424  throw InternalErr(__FILE__, __LINE__, "Error serializing a Float64 variable");
425 
426  if (xdr_getpos(&d_scalar_sink) != sizeof(dods_float64))
427  throw InternalErr(__FILE__, __LINE__, "Error serializing a Float64 variable");
428 
429  // If this is a little-endian host, twiddle the bytes
430  static bool twiddle_bytes = !is_host_big_endian();
431  if (twiddle_bytes) {
432  dods_int64 *i = reinterpret_cast<dods_int64*>(&d_ieee754_buf);
433  *i = bswap_64(*i);
434  }
435 
436 #ifdef USE_POSIX_THREADS
437  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
438 #endif
439  d_out.write(d_ieee754_buf, sizeof(dods_float64));
440  }
441  }
442 #endif
443 }
444 
445 void D4StreamMarshaller::put_uint16(dods_uint16 val)
446 {
447  checksum_update(&val, sizeof(dods_uint16));
448 
449  if (d_write_data) {
450 #ifdef USE_POSIX_THREADS
451  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
452 #endif
453  d_out.write(reinterpret_cast<char*>(&val), sizeof(dods_uint16));
454  }
455 }
456 
457 void D4StreamMarshaller::put_uint32(dods_uint32 val)
458 {
459  checksum_update(&val, sizeof(dods_uint32));
460 
461  if (d_write_data) {
462 #ifdef USE_POSIX_THREADS
463  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
464 #endif
465  d_out.write(reinterpret_cast<char*>(&val), sizeof(dods_uint32));
466  }
467 }
468 
469 void D4StreamMarshaller::put_uint64(dods_uint64 val)
470 {
471  checksum_update(&val, sizeof(dods_uint64));
472 
473  if (d_write_data) {
474 #ifdef USE_POSIX_THREADS
475  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
476 #endif
477  d_out.write(reinterpret_cast<char*>(&val), sizeof(dods_uint64));
478  }
479 }
480 
489 void D4StreamMarshaller::put_count(int64_t count)
490 {
491 #ifdef USE_POSIX_THREADS
492  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
493 #endif
494  d_out.write(reinterpret_cast<const char*>(&count), sizeof(int64_t));
495 }
496 
497 void D4StreamMarshaller::put_str(const string &val)
498 {
499  checksum_update(val.c_str(), val.length());
500 
501  if (d_write_data) {
502  int64_t len = val.length();
503 #ifdef USE_POSIX_THREADS
504  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
505 #endif
506  d_out.write(reinterpret_cast<const char*>(&len), sizeof(int64_t));
507  d_out.write(val.data(), val.length());
508  }
509 }
510 
511 void D4StreamMarshaller::put_url(const string &val)
512 {
513  put_str(val);
514 }
515 
516 void D4StreamMarshaller::put_opaque_dap4(const char *val, int64_t len)
517 {
518  assert(val);
519  assert(len >= 0);
520 
521  checksum_update(val, len);
522 
523  if (d_write_data) {
524 #ifdef USE_POSIX_THREADS
525  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
526 
527  d_out.write(reinterpret_cast<const char*>(&len), sizeof(int64_t));
528 
529  char *byte_buf = new char[len];
530  memcpy(byte_buf, val, len);
531 
532  tm->increment_child_thread_count();
533  tm->start_thread(MarshallerThread::write_thread, d_out, byte_buf, len);
534 #else
535  d_out.write(reinterpret_cast<const char*>(&len), sizeof(int64_t));
536  d_out.write(val, len);
537 #endif
538  }
539 }
540 
546 void D4StreamMarshaller::put_vector(char *val, int64_t num_bytes)
547 {
548  assert(val);
549  assert(num_bytes >= 0);
550 
551  checksum_update(val, num_bytes);
552 
553  if (d_write_data) {
554 #ifdef USE_POSIX_THREADS
555  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
556 
557  char *buf = new char[num_bytes];
558  memcpy(buf, val, num_bytes);
559 
560  tm->increment_child_thread_count();
561  tm->start_thread(MarshallerThread::write_thread, d_out, buf, num_bytes);
562 #else
563  d_out.write(val, num_bytes);
564 #endif
565  }
566 }
567 
568 void D4StreamMarshaller::put_vector(char *val, int64_t num_elem, int elem_size)
569 {
570  assert(val);
571  assert(num_elem >= 0);
572  assert(elem_size > 0);
573 
574  int64_t bytes;
575 
576  switch (elem_size) {
577  case 1:
578  assert(!"Don't call this method for bytes, use put_vector(val, bytes) instead");
579  bytes = num_elem;
580  break;
581  case 2:
582  // Don't bother testing the sign bit
583  assert(!(num_elem & 0x4000000000000000)); // 0x 40 00 --> 0100 0000
584  bytes = num_elem << 1;
585  break;
586  case 4:
587  assert(!(num_elem & 0x6000000000000000)); // 0x 60 00 --> 0110 0000
588  bytes = num_elem << 2;
589  break;
590  case 8:
591  assert(!(num_elem & 0x7000000000000000)); // 0111 0000
592  bytes = num_elem << 3;
593  break;
594  default:
595  bytes = num_elem * elem_size;
596  break;
597  }
598 
599  checksum_update(val, bytes);
600 
601  if (d_write_data) {
602 #ifdef USE_POSIX_THREADS
603  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
604 
605  char *buf = new char[bytes];
606  memcpy(buf, val, bytes);
607 
608  tm->increment_child_thread_count();
609  tm->start_thread(MarshallerThread::write_thread, d_out, buf, bytes);
610 #else
611  d_out.write(val, bytes);
612 #endif
613  }
614 }
615 
625 void D4StreamMarshaller::put_vector_float32(char *val, int64_t num_elem)
626 {
627 #if !USE_XDR_FOR_IEEE754_ENCODING
628 
629  assert(std::numeric_limits<float>::is_iec559);
630  assert(val);
631  assert(num_elem >= 0);
632  // sizeof() a 32-bit float is 4, so we're going to send 4 * num_elem bytes, so
633  // make sure that doesn't overflow a 63-bit integer (the max positive value in
634  // a signed int64; use 1110 0000 0.. (0xe000 ...) to mask for non-zero bits
635  // to test that num can be multiplied by 4. A
636  assert(!(num_elem & 0xe000000000000000));
637 
638  num_elem = num_elem << 2; // num_elem is now the number of bytes
639 
640  checksum_update(val, num_elem);
641 
642  if (d_write_data) {
643 #ifdef USE_POSIX_THREADS
644  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
645 
646  char *buf = new char[num_elem];
647  memcpy(buf, val, num_elem);
648 
649  tm->increment_child_thread_count();
650  tm->start_thread(MarshallerThread::write_thread, d_out, buf, num_elem);
651 #else
652  d_out.write(val, num_elem);
653 #endif
654  }
655 
656 #else
657  assert(val);
658  assert(num_elem >= 0);
659  // sizeof() a 32-bit float is 4, so we're going to send 4 * num_elem bytes, so
660  // make sure that doesn't overflow a 63-bit integer (the max positive value in
661  // a signed int64; use 1110 0000 0.. (0xe000 ...) to mask for non-zero bits
662  // to test that num can be multiplied by 4. A
663  assert(!(num_elem & 0xe000000000000000));
664 
665  int64_t bytes = num_elem << 2; // num_elem is now the number of bytes
666 
667  checksum_update(val, bytes);
668 
669  if (d_write_data) {
670  if (!std::numeric_limits<float>::is_iec559) {
671  // If not using IEEE 754, use XDR to get it that way.
672  m_serialize_reals(val, num_elem, 4, type);
673  }
674  else {
675 #ifdef USE_POSIX_THREADS
676  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
677 
678  char *buf = new char[bytes];
679  memcpy(buf, val, bytes);
680 
681  tm->increment_child_thread_count();
682  tm->start_thread(MarshallerThread::write_thread, d_out, buf, bytes);
683 #else
684  d_out.write(val, bytes);
685 #endif
686  }
687  }
688 #endif
689 }
690 
699 void D4StreamMarshaller::put_vector_float64(char *val, int64_t num_elem)
700 {
701 #if !USE_XDR_FOR_IEEE754_ENCODING
702 
703  assert(std::numeric_limits<double>::is_iec559);
704  assert(val);
705  assert(num_elem >= 0);
706  // See comment above
707  assert(!(num_elem & 0xf000000000000000));
708 
709  num_elem = num_elem << 3; // num_elem is now the number of bytes
710 
711  checksum_update(val, num_elem);
712 
713  if (d_write_data) {
714 #ifdef USE_POSIX_THREADS
715  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
716 
717  char *buf = new char[num_elem];
718  memcpy(buf, val, num_elem);
719 
720  tm->increment_child_thread_count();
721  tm->start_thread(MarshallerThread::write_thread, d_out, buf, num_elem);
722 #else
723  d_out.write(val, num_elem);
724 #endif
725  }
726 #else
727  assert(val);
728  assert(num_elem >= 0);
729  // sizeof() a 32-bit float is 4, so we're going to send 4 * num_elem bytes, so
730  // make sure that doesn't overflow a 63-bit integer (the max positive value in
731  // a signed int64; use 1110 0000 0.. (0xe000 ...) to mask for non-zero bits
732  // to test that num can be multiplied by 4. A
733  assert(!(num_elem & 0xe000000000000000));
734 
735  int64_t bytes = num_elem << 3; // num_elem is now the number of bytes
736 
737  checksum_update(val, bytes);
738 
739  if (d_write_data) {
740  if (!std::numeric_limits<double>::is_iec559) {
741  // If not using IEEE 754, use XDR to get it that way.
742  m_serialize_reals(val, num_elem, 8, type);
743  }
744  else {
745 #ifdef USE_POSIX_THREADS
746  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
747 
748  char *buf = new char[bytes];
749  memcpy(buf, val, bytes);
750 
751  tm->increment_child_thread_count();
752  tm->start_thread(MarshallerThread::write_thread, d_out, buf, bytes);
753 #else
754  d_out.write(val, bytes);
755 #endif
756  }
757  }
758 #endif
759 
760 }
761 
762 void D4StreamMarshaller::put_vector_part(char *val, unsigned int num, int width, Type type)
763 {
764  assert(val);
765  assert(num >= 0);
766  assert(width > 0);
767 
768  switch(type) {
769  case dods_byte_c:
770  case dods_char_c:
771  case dods_int8_c:
772  case dods_uint8_c:
773  put_vector(val, num);
774  break;
775 
776  case dods_int16_c:
777  case dods_uint16_c:
778  case dods_int32_c:
779  case dods_uint32_c:
780  case dods_int64_c:
781  case dods_uint64_c:
782  put_vector(val, num, width);
783  break;
784 
785  case dods_enum_c:
786  if (width == 1)
787  put_vector(val, num);
788  else
789  put_vector(val, num, width);
790  break;
791 
792  case dods_float32_c:
793  put_vector_float32(val, num);
794  break;
795 
796  case dods_float64_c:
797  put_vector_float32(val, num);
798  break;
799 
800  case dods_str_c:
801  case dods_url_c:
802  throw InternalErr(__FILE__, __LINE__, "Array of String should not be passed to put_vector.");
803 
804  case dods_array_c:
805  throw InternalErr(__FILE__, __LINE__, "Array of Array not allowed.");
806 
807  case dods_opaque_c:
808  case dods_structure_c:
809  case dods_sequence_c:
810  throw InternalErr(__FILE__, __LINE__, "Array of String should not be passed to put_vector.");
811 
812  case dods_grid_c:
813  throw InternalErr(__FILE__, __LINE__, "Grid is not part of DAP4.");
814 
815  default:
816  throw InternalErr(__FILE__, __LINE__, "Unknown datatype.");
817  }
818 }
819 
820 void D4StreamMarshaller::dump(ostream &strm) const
821 {
822  strm << DapIndent::LMarg << "D4StreamMarshaller::dump - (" << (void *) this << ")" << endl;
823 }
824 
825 } // namespace libdap
826 
static void * write_thread(void *arg)
-
virtual void put_count(int64_t count)
-
void start_thread(void *(*thread)(void *arg), std::ostream &out, char *byte_buf, unsigned int bytes_written)
-
STL namespace.
-
virtual void dump(std::ostream &strm) const
dump the contents of this object to the specified ostream
-
virtual void put_vector_float32(char *val, int64_t num_elem)
Write a fixed size vector.
-
checksum GetCrc32() const
Definition: crc.h:110
-
Type
Identifies the data type.
Definition: Type.h:94
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
- -
void AddData(const uint8_t *pData, const uint32_t length)
Definition: crc.h:98
-
virtual void put_vector_part(char *, unsigned int, int, Type)
-
virtual void checksum_update(const void *data, unsigned long len)
-
virtual void put_vector(char *val, int64_t num_bytes)
Write a fixed size vector.
- - -
virtual void put_vector_float64(char *val, int64_t num_elem)
Write a fixed size vector of float64s.
-
virtual void put_checksum()
Write the checksum Write the checksum for the data sent since the last call to reset_checksum() to th...
-
bool is_host_big_endian()
Does this host use big-endian byte order?
Definition: util.cc:94
-
void Reset()
Definition: crc.h:92
- -
-
- - - - diff --git a/html/D4StreamMarshaller_8h_source.html b/html/D4StreamMarshaller_8h_source.html deleted file mode 100644 index 19d30b5d3..000000000 --- a/html/D4StreamMarshaller_8h_source.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - -libdap: D4StreamMarshaller.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4StreamMarshaller.h
-
-
-
1 // D4StreamMarshaller.h
2 
3 // -*- mode: c++; c-basic-offset:4 -*-
4 
5 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
6 // Access Protocol.
7 
8 // Copyright (c) 2002,2003,2012 OPeNDAP, Inc.
9 // Author: Patrick West <pwest@ucar.edu>,
10 // James Gallagher <jgallagher@opendap.org>
11 //
12 // This library is free software; you can redistribute it and/or
13 // modify it under the terms of the GNU Lesser General Public
14 // License as published by the Free Software Foundation; either
15 // version 2.1 of the License, or (at your option) any later version.
16 //
17 // This library is distributed in the hope that it will be useful,
18 // but WITHOUT ANY WARRANTY; without even the implied warranty of
19 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 // Lesser General Public License for more details.
21 //
22 // You should have received a copy of the GNU Lesser General Public
23 // License along with this library; if not, write to the Free Software
24 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 //
26 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
27 
28 #ifndef I_D4StreamMarshaller_h
29 #define I_D4StreamMarshaller_h 1
30 
31 #include <iostream>
32 
33 // By default, only support platforms that use IEEE754 for floating point values.
34 // Hacked up code leftover from an older version of the class; largely untested.
35 // jhrg 10/3/13
36 #define USE_XDR_FOR_IEEE754_ENCODING 0
37 
38 #if USE_XDR_FOR_IEEE754_ENCODING
39 #ifdef WIN32
40 #include <rpc.h>
41 #include <winsock2.h>
42 #include <xdr.h>
43 #else
44 #include <rpc/types.h>
45 #include <netinet/in.h>
46 #include <rpc/xdr.h>
47 #endif
48 #endif
49 
50 #include <stdint.h>
51 #include "crc.h"
52 
53 #include "Marshaller.h"
54 #include "InternalErr.h"
55 
56 namespace libdap {
57 
58 class Vector;
59 class MarshallerThread;
60 
72 
73 private:
74 #if USE_XDR_FOR_IEEE754_ENCODING
75  XDR d_scalar_sink;
76  char d_ieee754_buf[sizeof(dods_float64)]; // used to serialize a float or double
77 #endif
78 
79  ostream &d_out;
80  bool d_write_data; // jhrg 1/27/12
81 
82  Crc32 d_checksum;
83 
84  MarshallerThread *tm;
85 
86  // These are private so they won't ever get used.
89  D4StreamMarshaller & operator=(const D4StreamMarshaller &);
90 
91 #if USE_XDR_FOR_IEEE754_ENCODING
92  void m_serialize_reals(char *val, int64_t num, int width, Type type);
93 #endif
94 
95 public:
96  D4StreamMarshaller(std::ostream &out, bool write_data = true);
97  virtual ~D4StreamMarshaller();
98 
99  virtual void reset_checksum();
100  virtual string get_checksum();
101  virtual void checksum_update(const void *data, unsigned long len);
102 
103  virtual void put_checksum();
104  virtual void put_count(int64_t count);
105 
106  virtual void put_byte(dods_byte val);
107  virtual void put_int8(dods_int8 val);
108 
109  virtual void put_int16(dods_int16 val);
110  virtual void put_int32(dods_int32 val);
111  // Added
112  virtual void put_int64(dods_int64 val);
113 
114  virtual void put_float32(dods_float32 val);
115  virtual void put_float64(dods_float64 val);
116 
117  virtual void put_uint16(dods_uint16 val);
118  virtual void put_uint32(dods_uint32 val);
119  // Added
120  virtual void put_uint64(dods_uint64 val);
121 
122  virtual void put_str(const string &val);
123  virtual void put_url(const string &val);
124 
125  virtual void put_opaque(char *, unsigned int) {
126  throw InternalErr(__FILE__, __LINE__, "Not implemented for DAP4; use put_opaque_dap4() instead.");
127  }
128 
129  virtual void put_opaque_dap4(const char *val, int64_t len);
130 
131  // Never use put_int() to send length information in DAP4.
132  virtual void put_int(int) {
133  throw InternalErr(__FILE__, __LINE__, "Not Implemented; use put_length_prefix.");
134  }
135 
136  virtual void put_vector(char *val, int64_t num_bytes);
137  virtual void put_vector(char *val, int64_t num_elem, int elem_size);
138  virtual void put_vector_float32(char *val, int64_t num_elem);
139  virtual void put_vector_float64(char *val, int64_t num_elem);
140 
141  virtual void put_vector(char *, int , Vector &) {
142  throw InternalErr(__FILE__, __LINE__, "Not Implemented; use other put_vector() versions.");
143  }
144  virtual void put_vector(char *, int , int , Vector &) {
145  throw InternalErr(__FILE__, __LINE__, "Not Implemented; use other put_vector() versions.");
146  }
147 
157  virtual void put_vector_start(int /*num*/) {
158  }
159 
160  virtual void put_vector_part(char */*val*/, unsigned int /*num*/, int /*width*/, Type /*type*/);
161 
170  virtual void put_vector_end() {
171  }
172 
173  virtual void dump(std::ostream &strm) const;
174 };
175 
176 } // namespace libdap
177 
178 #endif // I_D4StreamMarshaller_h
virtual void put_count(int64_t count)
-
Holds a one-dimensional collection of DAP2 data types.
Definition: Vector.h:80
-
Definition: crc.h:76
-
virtual void dump(std::ostream &strm) const
dump the contents of this object to the specified ostream
-
virtual void put_vector_float32(char *val, int64_t num_elem)
Write a fixed size vector.
-
Type
Identifies the data type.
Definition: Type.h:94
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
- -
virtual void put_vector_part(char *, unsigned int, int, Type)
-
virtual void checksum_update(const void *data, unsigned long len)
-
virtual void put_vector(char *val, int64_t num_bytes)
Write a fixed size vector.
- -
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
- -
virtual void put_vector_float64(char *val, int64_t num_elem)
Write a fixed size vector of float64s.
-
virtual void put_checksum()
Write the checksum Write the checksum for the data sent since the last call to reset_checksum() to th...
-
virtual void put_vector_start(int)
- -
-
- - - - diff --git a/html/D4StreamUnMarshaller_8cc_source.html b/html/D4StreamUnMarshaller_8cc_source.html deleted file mode 100644 index 34671dabf..000000000 --- a/html/D4StreamUnMarshaller_8cc_source.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -libdap: D4StreamUnMarshaller.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4StreamUnMarshaller.cc
-
-
-
1 // D4StreamUnMarshaller.cc
2 
3 // -*- mode: c++; c-basic-offset:4 -*-
4 
5 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
6 // Access Protocol.
7 
8 // Copyright (c) 2012 OPeNDAP, Inc.
9 // Author: James Gallagher <jgallagher@opendap.org>
10 //
11 // This library is free software; you can redistribute it and/or
12 // modify it under the terms of the GNU Lesser General Public
13 // License as published by the Free Software Foundation; either
14 // version 2.1 of the License, or (at your option) any later version.
15 //
16 // This library is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 // Lesser General Public License for more details.
20 //
21 // You should have received a copy of the GNU Lesser General Public
22 // License along with this library; if not, write to the Free Software
23 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 //
25 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
26 
27 #include "config.h"
28 
29 #include <byteswap.h>
30 #include <cassert>
31 
32 #include <iostream>
33 #include <iomanip>
34 #include <limits>
35 #include <string>
36 #include <sstream>
37 
38 //#define DODS_DEBUG2 1
39 //#define DODS_DEBUG 1
40 
41 #include "util.h"
42 #include "InternalErr.h"
43 #include "D4StreamUnMarshaller.h"
44 #include "debug.h"
45 #include "DapIndent.h"
46 
47 namespace libdap {
48 
59 D4StreamUnMarshaller::D4StreamUnMarshaller(istream &in, bool twiddle_bytes) : d_in( in ), d_twiddle_bytes(twiddle_bytes)
60 {
61  assert(sizeof(std::streamsize) >= sizeof(int64_t));
62 
63 #if USE_XDR_FOR_IEEE754_ENCODING
64  // XDR is used to handle transforming non-ieee754 reals, nothing else.
65  xdrmem_create(&d_source, d_buf, sizeof(dods_float64), XDR_DECODE);
66 #endif
67 
68  // This will cause exceptions to be thrown on i/o errors. The exception
69  // will be ostream::failure
70  d_in.exceptions(istream::failbit | istream::badbit);
71 
72 }
73 
80 D4StreamUnMarshaller::D4StreamUnMarshaller(istream &in) : d_in( in ), d_twiddle_bytes(false)
81 {
82  assert(sizeof(std::streamsize) >= sizeof(int64_t));
83 
84 #if USE_XDR_FOR_IEEE754_ENCODING
85  // XDR is used to handle transforming non-ieee754 reals, nothing else.
86  xdrmem_create(&d_source, d_buf, sizeof(dods_float64), XDR_DECODE);
87 #endif
88 
89  // This will cause exceptions to be thrown on i/o errors. The exception
90  // will be ostream::failure
91  d_in.exceptions(istream::failbit | istream::badbit);
92 }
93 
94 D4StreamUnMarshaller::~D4StreamUnMarshaller( )
95 {
96 #if USE_XDR_FOR_IEEE754_ENCODING
97  xdr_destroy(&d_source);
98 #endif
99 }
100 
101 Crc32::checksum D4StreamUnMarshaller::get_checksum()
102 {
103  Crc32::checksum c;
104  d_in.read(reinterpret_cast<char*>(&c), sizeof(Crc32::checksum));
105 
106  return c;
107 }
108 
109 string D4StreamUnMarshaller::get_checksum_str()
110 {
111  ostringstream oss;
112  oss.setf(ios::hex, ios::basefield);
113  oss << setfill('0') << setw(8) << get_checksum();
114 
115  return oss.str();
116 }
117 
118 void
119 D4StreamUnMarshaller::get_byte( dods_byte &val )
120 {
121  d_in.read(reinterpret_cast<char*>(&val), sizeof(dods_byte));
122 }
123 
124 void
125 D4StreamUnMarshaller::get_int8( dods_int8 &val )
126 {
127  d_in.read(reinterpret_cast<char*>(&val), sizeof(dods_int8));
128 }
129 
130 void
131 D4StreamUnMarshaller::get_int16( dods_int16 &val )
132 {
133  d_in.read(reinterpret_cast<char*>(&val), sizeof(dods_int16));
134  if (d_twiddle_bytes)
135  val = bswap_16(val);
136 }
137 
138 void
139 D4StreamUnMarshaller::get_int32( dods_int32 &val )
140 {
141  d_in.read(reinterpret_cast<char*>(&val), sizeof(dods_int32));
142  if (d_twiddle_bytes)
143  val = bswap_32(val);
144 }
145 
146 void
147 D4StreamUnMarshaller::get_int64( dods_int64 &val )
148 {
149  d_in.read(reinterpret_cast<char*>(&val), sizeof(dods_int64));
150  if (d_twiddle_bytes)
151  val = bswap_64(val);
152 }
153 
154 void
155 D4StreamUnMarshaller::get_float32( dods_float32 &val )
156 {
157 #if !USE_XDR_FOR_IEEE754_ENCODING
158  assert(std::numeric_limits<float>::is_iec559);
159 
160  d_in.read(reinterpret_cast<char*>(&val), sizeof(dods_float32));
161  if (d_twiddle_bytes) {
162  dods_int32 *i = reinterpret_cast<dods_int32*>(&val);
163  *i = bswap_32(*i);
164  }
165 
166 #else
167  if (std::numeric_limits<float>::is_iec559) {
168  d_in.read(reinterpret_cast<char*>(&val), sizeof(dods_float32));
169  if (d_twiddle_bytes) {
170  dods_int32 *i = reinterpret_cast<dods_int32*>(&val);
171  *i = bswap_32(*i);
172  }
173 
174  }
175  else {
176  xdr_setpos( &d_source, 0);
177  d_in.read(d_buf, sizeof(dods_float32));
178 
179  if (!xdr_float(&d_source, &val))
180  throw Error("Network I/O Error. Could not read float 64 data.");
181  }
182 #endif
183 }
184 
185 void
186 D4StreamUnMarshaller::get_float64( dods_float64 &val )
187 {
188 #if !USE_XDR_FOR_IEEE754_ENCODING
189  assert(std::numeric_limits<double>::is_iec559);
190 
191  d_in.read(reinterpret_cast<char*>(&val), sizeof(dods_float64));
192  if (d_twiddle_bytes) {
193  dods_int64 *i = reinterpret_cast<dods_int64*>(&val);
194  *i = bswap_64(*i);
195  }
196 
197 #else
198  if (std::numeric_limits<float>::is_iec559) {
199  d_in.read(reinterpret_cast<char*>(&val), sizeof(dods_float64));
200  if (d_twiddle_bytes) {
201  dods_int64 *i = reinterpret_cast<dods_int64*>(&val);
202  *i = bswap_64(*i);
203  }
204  }
205  else {
206  xdr_setpos( &d_source, 0);
207  d_in.read(d_buf, sizeof(dods_float64));
208 
209  if (!xdr_double(&d_source, &val))
210  throw Error("Network I/O Error. Could not read float 64 data.");
211  }
212 #endif
213 }
214 
215 void
216 D4StreamUnMarshaller::get_uint16( dods_uint16 &val )
217 {
218  d_in.read(reinterpret_cast<char*>(&val), sizeof(dods_uint16));
219  if (d_twiddle_bytes)
220  val = bswap_16(val);
221 }
222 
223 void
224 D4StreamUnMarshaller::get_uint32( dods_uint32 &val )
225 {
226  d_in.read(reinterpret_cast<char*>(&val), sizeof(dods_uint32));
227  if (d_twiddle_bytes)
228  val = bswap_32(val);
229 }
230 
231 void
232 D4StreamUnMarshaller::get_uint64( dods_uint64 &val )
233 {
234  d_in.read(reinterpret_cast<char*>(&val), sizeof(dods_uint64));
235  if (d_twiddle_bytes)
236  val = bswap_64(val);
237 }
238 
239 void
240 D4StreamUnMarshaller::get_str( string &val )
241 {
242  int64_t len;
243  d_in.read(reinterpret_cast<char*>(&len), sizeof(int64_t));
244 
245  val.resize(len);
246  d_in.read(&val[0], len);
247 }
248 
249 void
250 D4StreamUnMarshaller::get_url( string &val )
251 {
252  get_str( val ) ;
253 }
254 
263 int64_t
265 {
266  int64_t count;
267  d_in.read(reinterpret_cast<char*>(&count), sizeof(count));
268  return count;
269 }
270 
278 void
279 D4StreamUnMarshaller::get_opaque_dap4( char **val, int64_t &len )
280 {
281  //len = get_length_prefix();
282  d_in.read(reinterpret_cast<char*>(&len), sizeof(len));
283 
284  *val = new char[len];
285  d_in.read(*val, len);
286 }
287 
288 void
289 D4StreamUnMarshaller::get_opaque_dap4( vector<uint8_t> &val )
290 {
291  //len = get_length_prefix();
292  int64_t len;
293  d_in.read(reinterpret_cast<char*>(&len), sizeof(len));
294 
295  val.resize(len);
296  d_in.read(reinterpret_cast<char*>(&val[0]), len);
297 }
298 
299 void
300 D4StreamUnMarshaller::get_vector( char *val, int64_t bytes )
301 {
302  d_in.read(val, bytes);
303 }
304 
305 #if USE_XDR_FOR_IEEE754_ENCODING
306 void D4StreamUnMarshaller::m_deserialize_reals(char *val, int64_t num, int width, Type type)
307 {
308  int64_t size = num * width;
309  // char *buf = (char*)malloc(size); jhrg 7/23/13
310  vector<char> buf(size);
311  XDR xdr;
312  xdrmem_create(&xdr, &buf[0], size, XDR_DECODE);
313  try {
314  xdr_setpos(&d_source, 0);
315  d_in.read(&buf[0], size);
316 
317  if(!xdr_array(&xdr, &val, (unsigned int *)&num, size, width, XDRUtils::xdr_coder(type)))
318  throw InternalErr(__FILE__, __LINE__, "Error deserializing a Float64 array");
319 
320  if (xdr_getpos(&xdr) != size)
321  throw InternalErr(__FILE__, __LINE__, "Error deserializing a Float64 array");
322  }
323  catch (...) {
324  xdr_destroy(&xdr);
325  throw;
326  }
327  xdr_destroy(&xdr);
328 }
329 #endif
330 
331 void D4StreamUnMarshaller::m_twidle_vector_elements(char *vals, int64_t num, int width)
332 {
333  switch (width) {
334  case 2: {
335  dods_int16 *local = reinterpret_cast<dods_int16*>(vals);
336  while (num--) {
337  *local = bswap_16(*local);
338  local++;
339  }
340  break;
341  }
342  case 4: {
343  dods_int32 *local = reinterpret_cast<dods_int32*>(vals);;
344  while (num--) {
345  *local = bswap_32(*local);
346  local++;
347  }
348  break;
349  }
350  case 8: {
351  dods_int64 *local = reinterpret_cast<dods_int64*>(vals);;
352  while (num--) {
353  *local = bswap_64(*local);
354  local++;
355  }
356  break;
357  }
358  default:
359  throw InternalErr(__FILE__, __LINE__, "Unrecognized word size.");
360  }
361 }
362 
363 void
364 D4StreamUnMarshaller::get_vector(char *val, int64_t num_elem, int elem_size)
365 {
366  assert(std::numeric_limits<float>::is_iec559);
367  assert(std::numeric_limits<double>::is_iec559);
368  assert(val);
369  assert(num_elem >= 0);
370  assert(elem_size > 0);
371 
372  int64_t bytes;
373 
374  switch (elem_size) {
375  case 1:
376  assert(!"Don't call this method for bytes, use put_vector(val, bytes) instead");
377  bytes = num_elem;
378  break;
379  case 2:
380  // Don't bother testing the sign bit
381  assert(!(num_elem & 0x4000000000000000)); // 0x 40 00 --> 0100 0000
382  bytes = num_elem << 1;
383  break;
384  case 4:
385  assert(!(num_elem & 0x6000000000000000)); // 0x 60 00 --> 0110 0000
386  bytes = num_elem << 2;
387  break;
388  case 8:
389  assert(!(num_elem & 0x7000000000000000)); // 0111 0000
390  bytes = num_elem << 3;
391  break;
392  default:
393  bytes = num_elem * elem_size;
394  break;
395  }
396 
397  d_in.read(val, bytes);
398 
399  if (d_twiddle_bytes)
400  m_twidle_vector_elements(val, num_elem, elem_size);
401 }
402 
403 void
404 D4StreamUnMarshaller::get_vector_float32(char *val, int64_t num_elem)
405 {
406 #if !USE_XDR_FOR_IEEE754_ENCODING
407  assert(std::numeric_limits<float>::is_iec559);
408  assert(val);
409  assert(num_elem >= 0);
410  assert(!(num_elem & 0x6000000000000000)); // 0x 60 00 --> 0110 0000
411 
412  int64_t bytes = num_elem << 2;
413 
414  d_in.read(val, bytes);
415 
416  if (d_twiddle_bytes)
417  m_twidle_vector_elements(val, num_elem, sizeof(dods_float32));
418 
419 #else
420  if (type == dods_float32_c && !std::numeric_limits<float>::is_iec559) {
421  // If not using IEEE 754, use XDR to get it that way.
422  m_deserialize_reals(val, num, 4, type);
423  }
424  else if (type == dods_float64_c && !std::numeric_limits<double>::is_iec559) {
425  m_deserialize_reals(val, num, 8, type);
426  }
427  else {
428  d_in.read(val, num * width);
429  if (d_twiddle_bytes)
430  m_twidle_vector_elements(val, num, width);
431  }
432 #endif
433 }
434 
435 void
436 D4StreamUnMarshaller::get_vector_float64(char *val, int64_t num_elem)
437 {
438 #if !USE_XDR_FOR_IEEE754_ENCODING
439  assert(std::numeric_limits<float>::is_iec559);
440  assert(val);
441  assert(num_elem >= 0);
442  assert(!(num_elem & 0x7000000000000000)); // 0x 70 00 --> 0111 0000
443 
444  int64_t bytes = num_elem << 3;
445 
446  d_in.read(val, bytes);
447 
448  if (d_twiddle_bytes)
449  m_twidle_vector_elements(val, num_elem, sizeof(dods_float64));
450 
451 #else
452  if (type == dods_float32_c && !std::numeric_limits<float>::is_iec559) {
453  // If not using IEEE 754, use XDR to get it that way.
454  m_deserialize_reals(val, num, 4, type);
455  }
456  else if (type == dods_float64_c && !std::numeric_limits<double>::is_iec559) {
457  m_deserialize_reals(val, num, 8, type);
458  }
459  else {
460  d_in.read(val, num * width);
461  if (d_twiddle_bytes)
462  m_twidle_vector_elements(val, num, width);
463  }
464 #endif
465 }
466 
467 void
468 D4StreamUnMarshaller::dump(ostream &strm) const
469 {
470  strm << DapIndent::LMarg << "D4StreamUnMarshaller::dump - ("
471  << (void *)this << ")" << endl ;
472 }
473 
474 } // namespace libdap
475 
virtual void dump(ostream &strm) const
dump the contents of this object to the specified ostream
-
Type
Identifies the data type.
Definition: Type.h:94
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual void get_opaque_dap4(char **val, int64_t &len)
-
A class for software fault reporting.
Definition: InternalErr.h:64
- -
static xdrproc_t xdr_coder(const Type &t)
Returns a function used to encode elements of an array.
Definition: XDRUtils.cc:145
-
A class for error processing.
Definition: Error.h:92
-
-
- - - - diff --git a/html/D4StreamUnMarshaller_8h_source.html b/html/D4StreamUnMarshaller_8h_source.html deleted file mode 100644 index b90c7e1bb..000000000 --- a/html/D4StreamUnMarshaller_8h_source.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - -libdap: D4StreamUnMarshaller.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
D4StreamUnMarshaller.h
-
-
-
1 // D4StreamUnMarshaller.h
2 
3 // -*- mode: c++; c-basic-offset:4 -*-
4 
5 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
6 // Access Protocol.
7 
8 // Copyright (c) 2012 OPeNDAP, Inc.
9 // Author: James Gallagher <jgallagher@opendap.org>
10 //
11 // This library is free software; you can redistribute it and/or
12 // modify it under the terms of the GNU Lesser General Public
13 // License as published by the Free Software Foundation; either
14 // version 2.1 of the License, or (at your option) any later version.
15 //
16 // This library is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 // Lesser General Public License for more details.
20 //
21 // You should have received a copy of the GNU Lesser General Public
22 // License along with this library; if not, write to the Free Software
23 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 //
25 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
26 
27 #ifndef I_D4StreamUnMarshaller_h
28 #define I_D4StreamUnMarshaller_h 1
29 
30 #include <iostream>
31 
32 // See comment in D4StreamMarshaller
33 #define USE_XDR_FOR_IEEE754_ENCODING 0
34 
35 #if USE_XDR_FOR_IEEE754_ENCODING
36 #ifdef WIN32
37 #include <rpc.h>
38 #include <winsock2.h>
39 #include <xdr.h>
40 #else
41 #include <rpc/types.h>
42 #include <netinet/in.h>
43 #include <rpc/xdr.h>
44 #endif
45 #endif
46 
47 #include <crc.h>
48 
49 // #include "Type.h"
50 #include "dods-datatypes.h"
51 #include "UnMarshaller.h"
52 #include "InternalErr.h"
53 
54 #include "util.h"
55 #include "debug.h"
56 
57 using std::istream;
58 
59 namespace libdap {
60 
61 class Vector;
62 
66 public:
67  const static unsigned int c_checksum_length = 4;
68 
69 private:
70  istream &d_in;
71  bool d_twiddle_bytes;
72 
73 #if USE_XDR_FOR_IEEE754_ENCODING
74  // These are used for reals that need to be converted from IEEE 754
75  XDR d_source;
76  char d_buf[sizeof(dods_float64)];
77 #endif
78 
80  D4StreamUnMarshaller(const D4StreamUnMarshaller &);
81  D4StreamUnMarshaller & operator=(const D4StreamUnMarshaller &);
82 #if USE_XDR_FOR_IEEE754_ENCODING
83  void m_deserialize_reals(char *val, int64_t num, int width, Type type);
84 #endif
85  void m_twidle_vector_elements(char *vals, int64_t num, int width);
86 
87 public:
88  D4StreamUnMarshaller(istream &in, bool twiddle_bytes);
89  D4StreamUnMarshaller(istream &in);
90  virtual ~D4StreamUnMarshaller();
91 
92  void set_twiddle_bytes(bool twiddle) { d_twiddle_bytes = twiddle; }
93 
104  bool is_source_big_endian() const { return (is_host_big_endian() && !d_twiddle_bytes)
105  || (!is_host_big_endian() && d_twiddle_bytes); }
106 
107  Crc32::checksum get_checksum();
108  string get_checksum_str();
109  int64_t get_count();
110 
111  virtual void get_byte(dods_byte &val);
112  virtual void get_int8(dods_int8 &val);
113 
114  virtual void get_int16(dods_int16 &val);
115  virtual void get_int32(dods_int32 &val);
116 
117  virtual void get_int64(dods_int64 &val);
118 
119  virtual void get_float32(dods_float32 &val);
120  virtual void get_float64(dods_float64 &val);
121 
122  virtual void get_uint16(dods_uint16 &val);
123  virtual void get_uint32(dods_uint32 &val);
124 
125  virtual void get_uint64(dods_uint64 &val);
126 
127  virtual void get_str(string &val);
128  virtual void get_url(string &val);
129 
130  virtual void get_opaque(char *, unsigned int) {
131  throw InternalErr(__FILE__, __LINE__, "Not implemented for DAP4, use get_opaque_dap4() instead.");
132  }
133 
134  virtual void get_opaque_dap4(char **val, int64_t &len);
135  virtual void get_opaque_dap4( vector<uint8_t> &val );
136 
137  virtual void get_int(int &) {
138  throw InternalErr(__FILE__, __LINE__, "Not implemented for DAP4");
139  }
140 
141  // Note that DAP4 assumes clients know the size of arrays when they
142  // read the data; it's the 'varying' get methods that read & return the
143  // number of elements. These methods are here to appease the UnMarshaller
144  // 'interface' code
145  virtual void get_vector(char **, unsigned int &, Vector &) {
146  throw InternalErr(__FILE__, __LINE__, "Not implemented for DAP4");
147  }
148 
149  virtual void get_vector(char **, unsigned int &, int, Vector & ) {
150  throw InternalErr(__FILE__, __LINE__, "Not implemented for DAP4");
151  }
152 
153  virtual void get_vector(char *val, int64_t num_bytes);
154  virtual void get_vector(char *val, int64_t num_elem, int elem_size);
155  virtual void get_vector_float32(char *val, int64_t num_elem);
156  virtual void get_vector_float64(char *val, int64_t num_elem);
157 
158  virtual void dump(ostream &strm) const;
159 };
160 
161 } // namespace libdap
162 
163 #endif // I_D4StreamUnMarshaller_h
164 
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
bool is_source_big_endian() const
Is the data source we are reading from a big-endian machine? We need this because the value of the CR...
-
virtual void dump(ostream &strm) const
dump the contents of this object to the specified ostream
-
Holds a one-dimensional collection of DAP2 data types.
Definition: Vector.h:80
-
Read data from the stream made by D4StreamMarshaller.
-
Type
Identifies the data type.
Definition: Type.h:94
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual void get_opaque_dap4(char **val, int64_t &len)
-
A class for software fault reporting.
Definition: InternalErr.h:64
- -
bool is_host_big_endian()
Does this host use big-endian byte order?
Definition: util.cc:94
-
-
- - - - diff --git a/html/DAPCache3_8cc_source.html b/html/DAPCache3_8cc_source.html deleted file mode 100644 index eecf79ad8..000000000 --- a/html/DAPCache3_8cc_source.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - -libdap: DAPCache3.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
DAPCache3.cc
-
-
-
1 // DAPCache3.cc
2 
3 // This file was originally part of bes, A C++ back-end server
4 // implementation framework for the OPeNDAP Data Access Protocol.
5 // Copied to libdap. This is used to cache responses built from
6 // functional CE expressions.
7 
8 // Copyright (c) 2012 OPeNDAP, Inc
9 // Author: James Gallagher <jgallagher@opendap.org>
10 // Patrick West <pwest@ucar.edu> and Jose Garcia <jgarcia@ucar.edu>
11 //
12 // This library is free software; you can redistribute it and/or
13 // modify it under the terms of the GNU Lesser General Public
14 // License as published by the Free Software Foundation; either
15 // version 2.1 of the License, or (at your option) any later version.
16 //
17 // This library is distributed in the hope that it will be useful,
18 // but WITHOUT ANY WARRANTY; without even the implied warranty of
19 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 // Lesser General Public License for more details.
21 //
22 // You should have received a copy of the GNU Lesser General Public
23 // License along with this library; if not, write to the Free Software
24 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
25 //
26 // You can contact University Corporation for Atmospheric Research at
27 // 3080 Center Green Drive, Boulder, CO 80301
28 
29 #include "config.h"
30 
31 #include <sys/file.h>
32 #include <sys/stat.h>
33 #include <unistd.h>
34 #include <dirent.h>
35 #include <fcntl.h>
36 
37 #ifdef HAVE_STDLIB_H
38 #include <stdlib.h>
39 #endif
40 
41 #include <string>
42 #include <sstream>
43 #include <vector>
44 #include <cstring>
45 #include <cerrno>
46 
47 #include "DAPCache3.h"
48 
49 //#define DODS_DEBUG
50 
51 #include "InternalErr.h"
52 #include "DapIndent.h"
53 #include "debug.h"
54 
55 #if 0
56 #include "BESSyntaxUserError.h"
57 #include "BESInternalError.h"
58 
59 #include "TheBESKeys.h"
60 #include "BESDebug.h"
61 #include "BESLog.h"
62 #endif
63 using namespace std;
64 using namespace libdap;
65 
66 namespace libdap {
67 
68 // conversion factor
69 static const unsigned long long BYTES_PER_MEG = 1048576ULL;
70 
71 // Max cache size in megs, so we can check the user input and warn.
72 // 2^64 / 2^20 == 2^44
73 static const unsigned long long MAX_CACHE_SIZE_IN_MEGABYTES = (1ULL << 44);
74 
75 DAPCache3 *DAPCache3::d_instance = 0;
76 
77 
91 DAPCache3::DAPCache3(const string &cache_dir, const string &prefix, unsigned long long size) :
92  d_cache_dir(cache_dir), d_prefix(prefix), d_max_cache_size_in_bytes(size)
93 {
94  m_initialize_cache_info();
95 }
96 
97 void DAPCache3::delete_instance() {
98  DBG(cerr << "DAPCache3::delete_instance() - Deleting singleton DAPCache3 instance." << endl);
99  delete d_instance;
100  d_instance = 0;
101 }
102 
103 #if 0
104 // The BESCache3 code is a singleton that assumes it's running in the absence of threads but that
105 // the cache is shared by several processes, each of which have their own instance of BESCache3.
117 BESCache3 *
118 BESCache3::get_instance(BESKeys *keys, const string &cache_dir_key, const string &prefix_key, const string &size_key)
119 {
120  if (d_instance == 0)
121  d_instance = new BESCache3(keys, cache_dir_key, prefix_key, size_key);
122 
123  return d_instance;
124 }
125 #endif
126 
137 DAPCache3 *
138 DAPCache3::get_instance(const string &cache_dir, const string &prefix, unsigned long long size)
139 {
140  if (d_instance == 0){
141  d_instance = new DAPCache3(cache_dir, prefix, size);
142 #if HAVE_ATEXIT
143  atexit(delete_instance);
144 #endif
145  }
146  return d_instance;
147 }
148 
152 DAPCache3 *
154 {
155  if (d_instance == 0)
156  throw InternalErr(__FILE__, __LINE__, "Tried to get the DAPCache3 instance, but it hasn't been created yet");
157 
158  return d_instance;
159 }
160 
161 static inline string get_errno() {
162  char *s_err = strerror(errno);
163  if (s_err)
164  return s_err;
165  else
166  return "Unknown error.";
167 }
168 
169 // Build a lock of a certain type.
170 static inline struct flock *lock(int type) {
171  static struct flock lock;
172  lock.l_type = type;
173  lock.l_whence = SEEK_SET;
174  lock.l_start = 0;
175  lock.l_len = 0;
176  lock.l_pid = getpid();
177 
178  return &lock;
179 }
180 
181 inline void DAPCache3::m_record_descriptor(const string &file, int fd) {
182  DBG(cerr << "DAP Cache: recording descriptor: " << file << ", " << fd << endl);
183  d_locks.insert(std::pair<string, int>(file, fd));
184 }
185 
186 inline int DAPCache3::m_get_descriptor(const string &file) {
187  FilesAndLockDescriptors::iterator i = d_locks.find(file);
188  int fd = i->second;
189  DBG(cerr << "DAP Cache: getting descriptor: " << file << ", " << fd << endl);
190  d_locks.erase(i);
191  return fd;
192 }
193 
199 static void unlock(int fd)
200 {
201  if (fcntl(fd, F_SETLK, lock(F_UNLCK)) == -1) {
202  throw InternalErr(__FILE__, __LINE__, "An error occurred trying to unlock the file" + get_errno());
203  }
204 
205  if (close(fd) == -1)
206  throw InternalErr(__FILE__, __LINE__, "Could not close the (just) unlocked file.");
207 }
208 
221 static bool getSharedLock(const string &file_name, int &ref_fd)
222 {
223  DBG(cerr << "getSharedLock: " << file_name <<endl);
224 
225  int fd;
226  if ((fd = open(file_name.c_str(), O_RDONLY)) < 0) {
227  switch (errno) {
228  case ENOENT:
229  return false;
230 
231  default:
232  throw InternalErr(__FILE__, __LINE__, get_errno());
233  }
234  }
235 
236  struct flock *l = lock(F_RDLCK);
237  if (fcntl(fd, F_SETLKW, l) == -1) {
238  close(fd);
239  ostringstream oss;
240  oss << "cache process: " << l->l_pid << " triggered a locking error: " << get_errno();
241  throw InternalErr(__FILE__, __LINE__, oss.str());
242  }
243 
244  DBG(cerr << "getSharedLock exit: " << file_name <<endl);
245 
246  // Success
247  ref_fd = fd;
248  return true;
249 }
250 
263 static bool getExclusiveLock(string file_name, int &ref_fd)
264 {
265  DBG(cerr << "getExclusiveLock: " << file_name <<endl);
266 
267  int fd;
268  if ((fd = open(file_name.c_str(), O_RDWR)) < 0) {
269  switch (errno) {
270  case ENOENT:
271  return false;
272 
273  default:
274  throw InternalErr(__FILE__, __LINE__, get_errno());
275  }
276  }
277 
278  struct flock *l = lock(F_WRLCK);
279  if (fcntl(fd, F_SETLKW, l) == -1) {
280  close(fd);
281  ostringstream oss;
282  oss << "cache process: " << l->l_pid << " triggered a locking error: " << get_errno();
283  throw InternalErr(__FILE__, __LINE__, oss.str());
284  }
285 
286  DBG(cerr << "getExclusiveLock exit: " << file_name <<endl);
287 
288  // Success
289  ref_fd = fd;
290  return true;
291 }
292 
304 static bool getExclusiveLockNB(string file_name, int &ref_fd)
305 {
306  DBG(cerr << "getExclusiveLock_nonblocking: " << file_name <<endl);
307 
308  int fd;
309  if ((fd = open(file_name.c_str(), O_RDWR)) < 0) {
310  switch (errno) {
311  case ENOENT:
312  return false;
313 
314  default:
315  throw InternalErr(__FILE__, __LINE__, get_errno());
316  }
317  }
318 
319  struct flock *l = lock(F_WRLCK);
320  if (fcntl(fd, F_SETLK, l) == -1) {
321  switch (errno) {
322  case EAGAIN:
323  DBG(cerr << "getExclusiveLock_nonblocking exit (false): " << file_name << " by: " << l->l_pid << endl);
324  close(fd);
325  return false;
326 
327  default: {
328  close(fd);
329  ostringstream oss;
330  oss << "cache process: " << l->l_pid << " triggered a locking error: " << get_errno();
331  throw InternalErr(__FILE__, __LINE__, oss.str());
332  }
333  }
334  }
335 
336  DBG(cerr << "getExclusiveLock_nonblocking exit (true): " << file_name <<endl);
337 
338  // Success
339  ref_fd = fd;
340  return true;
341 }
342 
356 static bool createLockedFile(string file_name, int &ref_fd)
357 {
358  DBG(cerr << "createLockedFile: " << file_name <<endl);
359 
360  int fd;
361  if ((fd = open(file_name.c_str(), O_CREAT | O_EXCL | O_RDWR, 0666)) < 0) {
362  switch (errno) {
363  case EEXIST:
364  return false;
365 
366  default:
367  throw InternalErr(__FILE__, __LINE__, get_errno());
368  }
369  }
370 
371  struct flock *l = lock(F_WRLCK);
372  if (fcntl(fd, F_SETLKW, l) == -1) {
373  close(fd);
374  ostringstream oss;
375  oss << "cache process: " << l->l_pid << " triggered a locking error: " << get_errno();
376  throw InternalErr(__FILE__, __LINE__, oss.str());
377  }
378 
379  DBG(cerr << "createLockedFile exit: " << file_name <<endl);
380 
381  // Success
382  ref_fd = fd;
383  return true;
384 }
385 
387 void DAPCache3::m_check_ctor_params()
388 {
389  if (d_cache_dir.empty()) {
390  string err = "The cache directory was not specified, must be non-empty";
391  throw InternalErr(__FILE__, __LINE__, err);
392  }
393 
394  // TODO New feature: Makes the directory f it does not exist
395  struct stat buf;
396  int statret = stat(d_cache_dir.c_str(), &buf);
397  if (statret != 0 || !S_ISDIR(buf.st_mode)) {
398  // Try to make the directory
399  int status = mkdir(d_cache_dir.c_str(), 0775);
400  if (status != 0) {
401  string err = "The cache directory " + d_cache_dir + " does not exist or could not be created.";
402  throw InternalErr(__FILE__, __LINE__, err);
403  }
404  }
405 
406  if (d_prefix.empty()) {
407  string err = "The cache file prefix was not specified, must not be empty";
408  throw InternalErr(__FILE__, __LINE__, err);
409  }
410 
411  if (d_max_cache_size_in_bytes <= 0) {
412  string err = "The cache size was not specified, must be greater than zero";
413  throw InternalErr(__FILE__, __LINE__, err);
414  }
415 #if 0
416  // redundant check
417 
418  // If the user specifies a cache that is too large,
419  // it is a user exception and we should tell them.
420  if (d_max_cache_size_in_bytes > MAX_CACHE_SIZE_IN_MEGABYTES) {
421  std::ostringstream msg;
422  msg << "The specified cache size was larger than the max cache size of: " << MAX_CACHE_SIZE_IN_MEGABYTES
423  << " (was " << d_max_cache_size_in_bytes << ").";
424  throw InternalErr(__FILE__, __LINE__, msg.str());
425  }
426 #endif
427  DBG(cerr << "DAP Cache: directory " << d_cache_dir << ", prefix " << d_prefix
428  << ", max size " << d_max_cache_size_in_bytes << endl );
429 }
430 
432 void DAPCache3::m_initialize_cache_info()
433 {
434  // The value set in configuration files, etc., is the size in megabytes. The private
435  // variable holds the size in bytes (converted below).
436  d_max_cache_size_in_bytes = min(d_max_cache_size_in_bytes, MAX_CACHE_SIZE_IN_MEGABYTES);
437  d_max_cache_size_in_bytes *= BYTES_PER_MEG;
438  d_target_size = d_max_cache_size_in_bytes * 0.8;
439 
440  m_check_ctor_params(); // Throws InternalErr on error.
441 
442  d_cache_info = d_cache_dir + "/dap.cache.info";
443 
444  // See if we can create it. If so, that means it doesn't exist. So make it and
445  // set the cache initial size to zero.
446  if (createLockedFile(d_cache_info, d_cache_info_fd)) {
447  // initialize the cache size to zero
448  unsigned long long size = 0;
449  if (write(d_cache_info_fd, &size, sizeof(unsigned long long)) != sizeof(unsigned long long))
450  throw InternalErr(__FILE__, __LINE__, "Could not write size info to the cache info file in startup!");
451 
452  // This leaves the d_cache_info_fd file descriptor open
453  unlock_cache();
454  }
455  else {
456  if ((d_cache_info_fd = open(d_cache_info.c_str(), O_RDWR)) == -1) {
457  throw InternalErr(__FILE__, __LINE__, get_errno());
458  }
459  }
460 
461  DBG(cerr << "d_cache_info_fd: " << d_cache_info_fd << endl);
462 }
463 
464 #if 0
465 
479 BESCache3::BESCache3(BESKeys *keys, const string &cache_dir_key, const string &prefix_key, const string &size_key) :
480  d_max_cache_size_in_bytes(0)
481 {
482  bool found = false;
483  keys->get_value(cache_dir_key, d_cache_dir, found);
484  if (!found)
485  throw BESSyntaxUserError("The cache directory key " + cache_dir_key + " was not found in the BES configuration file", __FILE__, __LINE__);
486 
487  found = false;
488  keys->get_value(prefix_key, d_prefix, found);
489  if (!found)
490  throw BESSyntaxUserError("The prefix key " + prefix_key + " was not found in the BES configuration file", __FILE__, __LINE__);
491 
492  found = false;
493  string cache_size_str;
494  keys->get_value(size_key, cache_size_str, found);
495  if (!found)
496  throw BESSyntaxUserError("The size key " + size_key + " was not found in the BES configuration file", __FILE__, __LINE__);
497 
498  std::istringstream is(cache_size_str);
499  is >> d_max_cache_size_in_bytes;
500 
501  m_initialize_cache_info();
502 }
503 #endif
504 
505 
521 string DAPCache3::get_cache_file_name(const string &src, bool mangle)
522 {
523  string target = src;
524 
525  if (mangle) {
526  if (target.at(0) == '/') {
527  target = src.substr(1, target.length() - 1);
528  }
529  string::size_type slash = 0;
530  while ((slash = target.find('/')) != string::npos) {
531  target.replace(slash, 1, 1, DAPCache3::DAP_CACHE_CHAR);
532  }
533  string::size_type last_dot = target.rfind('.');
534  if (last_dot != string::npos) {
535  target = target.substr(0, last_dot);
536  }
537  }
538  DBG(cerr << " d_cache_dir: '" << d_cache_dir << "'" << endl);
539  DBG(cerr << " d_prefix: '" << d_prefix << "'" << endl);
540  DBG(cerr << " target: '" << target << "'" << endl);
541 
542  return d_cache_dir + "/" + d_prefix + DAPCache3::DAP_CACHE_CHAR + target;
543 }
544 
562 bool DAPCache3::get_read_lock(const string &target, int &fd)
563 {
564  lock_cache_read();
565 
566  bool status = getSharedLock(target, fd);
567 
568  DBG(cerr << "DAP Cache: read_lock: " << target << "(" << status << ")" << endl);
569 
570  if (status)
571  m_record_descriptor(target, fd);
572 
573  unlock_cache();
574 
575  return status;
576 }
577 
590 bool DAPCache3::create_and_lock(const string &target, int &fd)
591 {
592  lock_cache_write();
593 
594  bool status = createLockedFile(target, fd);
595 
596  DBG(cerr << "DAP Cache: create_and_lock: " << target << "(" << status << ")" << endl);
597 
598  if (status)
599  m_record_descriptor(target, fd);
600 
601  unlock_cache();
602 
603  return status;
604 
605 }
606 
621 {
622  struct flock lock;
623  lock.l_type = F_RDLCK;
624  lock.l_whence = SEEK_SET;
625  lock.l_start = 0;
626  lock.l_len = 0;
627  lock.l_pid = getpid();
628 
629  if (fcntl(fd, F_SETLKW, &lock) == -1) {
630  throw InternalErr(__FILE__, __LINE__, get_errno());
631  }
632 }
633 
643 {
644  DBG(cerr << "lock_cache - d_cache_info_fd: " << d_cache_info_fd << endl);
645 
646  if (fcntl(d_cache_info_fd, F_SETLKW, lock(F_WRLCK)) == -1) {
647  throw InternalErr(__FILE__, __LINE__, "An error occurred trying to lock the cache-control file" + get_errno());
648  }
649 }
650 
655 {
656  DBG(cerr << "lock_cache - d_cache_info_fd: " << d_cache_info_fd << endl);
657 
658  if (fcntl(d_cache_info_fd, F_SETLKW, lock(F_RDLCK)) == -1) {
659  throw InternalErr(__FILE__, __LINE__, "An error occurred trying to lock the cache-control file" + get_errno());
660  }
661 }
662 
669 {
670  DBG(cerr << "DAP Cache: unlock: cache_info (fd: " << d_cache_info_fd << ")" << endl);
671 
672  if (fcntl(d_cache_info_fd, F_SETLK, lock(F_UNLCK)) == -1) {
673  throw InternalErr(__FILE__, __LINE__, "An error occurred trying to unlock the cache-control file" + get_errno());
674  }
675 }
676 
688 void DAPCache3::unlock_and_close(const string &file_name)
689 {
690  DBG(cerr << "DAP Cache: unlock file: " << file_name << endl);
691 
692  unlock(m_get_descriptor(file_name));
693 }
694 
700 void DAPCache3::unlock_and_close(int fd)
701 {
702  DBG(cerr << "DAP Cache: unlock fd: " << fd << endl);
703 
704  unlock(fd);
705 
706  DBG(cerr << "DAP Cache: unlock " << fd << " Success" << endl);
707 }
708 
719 unsigned long long DAPCache3::update_cache_info(const string &target)
720 {
721  try {
722  lock_cache_write();
723 
724  if (lseek(d_cache_info_fd, 0, SEEK_SET) == -1)
725  throw InternalErr(__FILE__, __LINE__, "Could not rewind to front of cache info file.");
726 
727  // read the size from the cache info file
728  unsigned long long current_size;
729  if (read(d_cache_info_fd, &current_size, sizeof(unsigned long long)) != sizeof(unsigned long long))
730  throw InternalErr(__FILE__, __LINE__, "Could not get read size info from the cache info file!");
731 
732  struct stat buf;
733  int statret = stat(target.c_str(), &buf);
734  if (statret == 0)
735  current_size += buf.st_size;
736  else
737  throw InternalErr(__FILE__, __LINE__, "Could not read the size of the new file: " + target + " : " + get_errno());
738 
739  DBG(cerr << "DAP Cache: cache size updated to: " << current_size << endl);
740 
741  if (lseek(d_cache_info_fd, 0, SEEK_SET) == -1)
742  throw InternalErr(__FILE__, __LINE__, "Could not rewind to front of cache info file.");
743 
744  if(write(d_cache_info_fd, &current_size, sizeof(unsigned long long)) != sizeof(unsigned long long))
745  throw InternalErr(__FILE__, __LINE__, "Could not write size info from the cache info file!");
746 
747  unlock_cache();
748  return current_size;
749  }
750  catch (...) {
751  unlock_cache();
752  throw;
753  }
754 }
755 
760 bool DAPCache3::cache_too_big(unsigned long long current_size) const
761 {
762  return current_size > d_max_cache_size_in_bytes;
763 }
764 
772 unsigned long long DAPCache3::get_cache_size()
773 {
774  try {
775  lock_cache_read();
776 
777  if (lseek(d_cache_info_fd, 0, SEEK_SET) == -1)
778  throw InternalErr(__FILE__, __LINE__, "Could not rewind to front of cache info file.");
779  // read the size from the cache info file
780  unsigned long long current_size;
781  if(read(d_cache_info_fd, &current_size, sizeof(unsigned long long)) != sizeof(unsigned long long))
782  throw InternalErr(__FILE__, __LINE__, "Could not get read size info from the cache info file!");
783 
784  unlock_cache();
785  return current_size;
786  }
787  catch(...) {
788  unlock_cache();
789  throw;
790  }
791 }
792 
793 
794 static bool entry_op(cache_entry &e1, cache_entry &e2)
795 {
796  return e1.time < e2.time;
797 }
798 
800 unsigned long long DAPCache3::m_collect_cache_dir_info(CacheFiles &contents)
801 {
802  DIR *dip = opendir(d_cache_dir.c_str());
803  if (!dip)
804  throw InternalErr(__FILE__, __LINE__, "Unable to open cache directory " + d_cache_dir);
805 
806  struct dirent *dit;
807  vector<string> files;
808  // go through the cache directory and collect all of the files that
809  // start with the matching prefix
810  while ((dit = readdir(dip)) != NULL) {
811  string dirEntry = dit->d_name;
812  if (dirEntry.compare(0, d_prefix.length(), d_prefix) == 0) {
813  files.push_back(d_cache_dir + "/" + dirEntry);
814  }
815  }
816 
817  closedir(dip);
818 
819  unsigned long long current_size = 0;
820  struct stat buf;
821  for (vector<string>::iterator file = files.begin(); file != files.end(); ++file) {
822  if (stat(file->c_str(), &buf) == 0) {
823  current_size += buf.st_size;
824  cache_entry entry;
825  entry.name = *file;
826  entry.size = buf.st_size;
827  entry.time = buf.st_atime;
828  // Sanity check; Removed after initial testing since some files might be zero bytes
829 #if 0
830  if (entry.size == 0)
831  throw InternalErr(__FILE__, __LINE__, "Zero-byte file found in cache. " + *file);
832 #endif
833  contents.push_back(entry);
834  }
835  }
836 
837  // Sort so smaller (older) times are first.
838  contents.sort(entry_op);
839 
840  return current_size;
841 }
842 
854 void DAPCache3::update_and_purge(const string &new_file)
855 {
856  DBG(cerr << "purge - starting the purge" << endl);
857 
858  try {
859  lock_cache_write();
860 
861  CacheFiles contents;
862  unsigned long long computed_size = m_collect_cache_dir_info(contents);
863 #if 0
864  if (BESISDEBUG( "cache_contents" )) {
865  DBG(endl << "BEFORE Purge " << computed_size/BYTES_PER_MEG << endl );
866  CacheFiles::iterator ti = contents.begin();
867  CacheFiles::iterator te = contents.end();
868  for (; ti != te; ti++) {
869  DBG((*ti).time << ": " << (*ti).name << ": size " << (*ti).size/BYTES_PER_MEG << endl );
870  }
871  }
872 #endif
873  DBG(cerr << "purge - current and target size (in MB) " << computed_size/BYTES_PER_MEG << ", " << d_target_size/BYTES_PER_MEG << endl );
874 
875  // This deletes files and updates computed_size
876  if (cache_too_big(computed_size)) {
877 
878  // d_target_size is 80% of the maximum cache size.
879  // Grab the first which is the oldest in terms of access time.
880  CacheFiles::iterator i = contents.begin();
881  while (i != contents.end() && computed_size > d_target_size) {
882  // Grab an exclusive lock but do not block - if another process has the file locked
883  // just move on to the next file. Also test to see if the current file is the file
884  // this process just added to the cache - don't purge that!
885  int cfile_fd;
886  if (i->name != new_file && getExclusiveLockNB(i->name, cfile_fd)) {
887  DBG(cerr << "purge: " << i->name << " removed." << endl );
888 
889  if (unlink(i->name.c_str()) != 0)
890  throw InternalErr(__FILE__, __LINE__, "Unable to purge the file " + i->name + " from the cache: " + get_errno());
891 
892  unlock(cfile_fd);
893  computed_size -= i->size;
894  }
895 #if 0
896  else {
897  // This information is useful when debugging... Might comment out for production
898  DBG(cerr << "purge: " << i->name << " is in use." << endl );
899  }
900 #endif
901  ++i;
902 
903  DBG(cerr << "purge - current and target size (in MB) " << computed_size/BYTES_PER_MEG << ", " << d_target_size/BYTES_PER_MEG << endl );
904  }
905 
906  }
907 
908  if (lseek(d_cache_info_fd, 0, SEEK_SET) == -1)
909  throw InternalErr(__FILE__, __LINE__, "Could not rewind to front of cache info file.");
910 
911  if(write(d_cache_info_fd, &computed_size, sizeof(unsigned long long)) != sizeof(unsigned long long))
912  throw InternalErr(__FILE__, __LINE__, "Could not write size info to the cache info file!");
913 #if 0
914  if (BESISDEBUG( "cache_contents" )) {
915  contents.clear();
916  computed_size = m_collect_cache_dir_info(contents);
917  DBG(endl << "AFTER Purge " << computed_size/BYTES_PER_MEG << endl );
918  CacheFiles::iterator ti = contents.begin();
919  CacheFiles::iterator te = contents.end();
920  for (; ti != te; ti++) {
921  DBG((*ti).time << ": " << (*ti).name << ": size " << (*ti).size/BYTES_PER_MEG << endl );
922  }
923  }
924 #endif
925  unlock_cache();
926  }
927  catch(...) {
928  unlock_cache();
929  throw;
930  }
931 }
932 
944 void DAPCache3::purge_file(const string &file)
945 {
946  DBG(cerr << "purge_file - starting the purge" << endl);
947 
948  try {
949  lock_cache_write();
950 
951  // Grab an exclusive lock on the file
952  int cfile_fd;
953  if (getExclusiveLock(file, cfile_fd)) {
954  // Get the file's size
955  unsigned long long size = 0;
956  struct stat buf;
957  if (stat(file.c_str(), &buf) == 0) {
958  size = buf.st_size;
959  }
960 
961  DBG(cerr << "purge_file: " << file << " removed." << endl );
962 
963  if (unlink(file.c_str()) != 0)
964  throw InternalErr(__FILE__, __LINE__,
965  "Unable to purge the file " + file + " from the cache: " + get_errno());
966 
967  unlock(cfile_fd);
968 
969  unsigned long long cache_size = get_cache_size() - size;
970 
971  if (lseek(d_cache_info_fd, 0, SEEK_SET) == -1)
972  throw InternalErr(__FILE__, __LINE__, "Could not rewind to front of cache info file.");
973 
974  if (write(d_cache_info_fd, &cache_size, sizeof(unsigned long long)) != sizeof(unsigned long long))
975  throw InternalErr(__FILE__, __LINE__, "Could not write size info to the cache info file!");
976  }
977 
978  unlock_cache();
979  }
980  catch (...) {
981  unlock_cache();
982  throw;
983  }
984 }
985 
993 void DAPCache3::dump(ostream &strm) const
994 {
995  strm << DapIndent::LMarg << "DAPCache3::dump - (" << (void *) this << ")" << endl;
996  DapIndent::Indent();
997  strm << DapIndent::LMarg << "cache dir: " << d_cache_dir << endl;
998  strm << DapIndent::LMarg << "prefix: " << d_prefix << endl;
999  strm << DapIndent::LMarg << "size (bytes): " << d_max_cache_size_in_bytes << endl;
1000  DapIndent::UnIndent();
1001 }
1002 
1003 } // namespace libdap
virtual unsigned long long update_cache_info(const string &target)
Update the cache info file to include &#39;target&#39;.
Definition: DAPCache3.cc:719
-
STL namespace.
-
string get_cache_file_name(const string &src, bool mangle=true)
Definition: DAPCache3.cc:521
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: DAPCache3.cc:993
-
virtual unsigned long long get_cache_size()
Get the cache size. Read the size information from the cache info file and return it...
Definition: DAPCache3.cc:772
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
virtual bool create_and_lock(const string &target, int &fd)
Create a file in the cache and lock it for write access. If the file does not exist, make it, open it for read-write access and get an exclusive lock on it. The locking operation blocks, although that should never happen.
Definition: DAPCache3.cc:590
-
virtual void lock_cache_write()
Definition: DAPCache3.cc:642
-
virtual bool cache_too_big(unsigned long long current_size) const
look at the cache size; is it too large? Look at the cache size and see if it is too big...
Definition: DAPCache3.cc:760
-
virtual void exclusive_to_shared_lock(int fd)
Transfer from an exclusive lock to a shared lock. If the file has an exclusive write lock on it...
Definition: DAPCache3.cc:620
-
virtual bool get_read_lock(const string &target, int &fd)
Get a read-only lock on the file if it exists.
Definition: DAPCache3.cc:562
-
virtual void lock_cache_read()
Definition: DAPCache3.cc:654
-
virtual void update_and_purge(const string &new_file)
Purge files from the cache.
Definition: DAPCache3.cc:854
-
Definition: DAPCache3.h:51
-
static DAPCache3 * get_instance()
Definition: DAPCache3.cc:153
-
Implementation of a caching mechanism for compressed data. This cache uses simple advisory locking fo...
Definition: DAPCache3.h:82
-
virtual void purge_file(const string &file)
Purge a single file from the cache.
Definition: DAPCache3.cc:944
-
virtual void unlock_cache()
Definition: DAPCache3.cc:668
-
-
- - - - diff --git a/html/DAPCache3_8h_source.html b/html/DAPCache3_8h_source.html deleted file mode 100644 index e34e6a341..000000000 --- a/html/DAPCache3_8h_source.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - -libdap: DAPCache3.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
DAPCache3.h
-
-
-
1 // DAPCache3.h
2 
3 // This file was originally part of bes, A C++ back-end server
4 // implementation framework for the OPeNDAP Data Access Protocol.
5 // Copied to libdap. This is used to cache responses built from
6 // functional CE expressions.
7 
8 // Copyright (c) 2012 OPeNDAP, Inc
9 // Author: James Gallagher <jgallagher@opendap.org>,
10 // Patrick West <pwest@ucar.edu> and Jose Garcia <jgarcia@ucar.edu>
11 //
12 // This library is free software; you can redistribute it and/or
13 // modify it under the terms of the GNU Lesser General Public
14 // License as published by the Free Software Foundation; either
15 // version 2.1 of the License, or (at your option) any later version.
16 //
17 // This library is distributed in the hope that it will be useful,
18 // but WITHOUT ANY WARRANTY; without even the implied warranty of
19 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 // Lesser General Public License for more details.
21 //
22 // You should have received a copy of the GNU Lesser General Public
23 // License along with this library; if not, write to the Free Software
24 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
25 //
26 // You can contact University Corporation for Atmospheric Research at
27 // 3080 Center Green Drive, Boulder, CO 80301
28 
29 #ifndef DAPCache3_h_
30 #define DAPCache3_h_ 1
31 
32 // #include <algorithm>
33 #include <map>
34 #include <string>
35 #include <list>
36 // #include <sstream>
37 
38 #include "DapObj.h"
39 
40 #if 0
41 #include "BESObj.h"
42 #include "BESDebug.h"
43 
44 class BESKeys;
45 #endif
46 
47 namespace libdap {
48 
49 // These typedefs are used to record information about the files in the cache.
50 // See DAPCache3.cc and look at the purge() method.
51 typedef struct {
52  string name;
53  unsigned long long size;
54  time_t time;
55 } cache_entry;
56 
57 typedef std::list<cache_entry> CacheFiles;
58 
82 class DAPCache3: public libdap::DapObj {
83 
84 private:
85  static DAPCache3 * d_instance;
86 
87  static const char DAP_CACHE_CHAR = '#';
88 
89  string d_cache_dir;
90  string d_prefix;
91 
93  unsigned long long d_max_cache_size_in_bytes;
94  // When we purge, how much should we throw away. Set in the ctor to 80% of the max size.
95  unsigned long long d_target_size;
96 #if 0
97  // This class implements a singleton, so the constructor is hidden.
98  BESCache3(BESKeys *keys, const string &cache_dir_key, const string &prefix_key, const string &size_key);
99 #endif
100  // Testing
101  DAPCache3(const string &cache_dir, const string &prefix, unsigned long long size);
102 
103  // Suppress the assignment operator and default copy ctor, ...
104  DAPCache3();
105  DAPCache3(const DAPCache3 &);
106  DAPCache3 &operator=(const DAPCache3 &rhs);
107 
108  void m_check_ctor_params();
109  void m_initialize_cache_info();
110 
111  unsigned long long m_collect_cache_dir_info(CacheFiles &contents);
112 
114  string d_cache_info;
115  int d_cache_info_fd;
116 
117  void m_record_descriptor(const string &file, int fd);
118  int m_get_descriptor(const string &file);
119 
120  // map that relates files to the descriptor used to obtain a lock
121  typedef std::map<string, int> FilesAndLockDescriptors;
122  FilesAndLockDescriptors d_locks;
123 
124  // Life-cycle control
125  virtual ~DAPCache3() { }
126  static void delete_instance();
127 
128 public:
129  static DAPCache3 *get_instance(const string &cache_dir, const string &prefix, unsigned long long size);
130  static DAPCache3 *get_instance();
131 
132 
133  string get_cache_file_name(const string &src, bool mangle = true);
134 
135  virtual bool create_and_lock(const string &target, int &fd);
136  virtual bool get_read_lock(const string &target, int &fd);
137  virtual void exclusive_to_shared_lock(int fd);
138  virtual void unlock_and_close(const string &target);
139  virtual void unlock_and_close(int fd);
140 
141  virtual void lock_cache_write();
142  virtual void lock_cache_read();
143  virtual void unlock_cache();
144 
145  virtual unsigned long long update_cache_info(const string &target);
146  virtual bool cache_too_big(unsigned long long current_size) const;
147  virtual unsigned long long get_cache_size();
148  virtual void update_and_purge(const string &new_file);
149  virtual void purge_file(const string &file);
150 
151 #if 0
152  static BESCache3 *get_instance(BESKeys *keys, const string &cache_dir_key, const string &prefix_key, const string &size_key);
153 #endif
154 
155  virtual void dump(ostream &strm) const ;
156 };
157 
158 } // namespace libdap
159 
160 #endif // DAPCache3_h_
virtual unsigned long long update_cache_info(const string &target)
Update the cache info file to include &#39;target&#39;.
Definition: DAPCache3.cc:719
-
string get_cache_file_name(const string &src, bool mangle=true)
Definition: DAPCache3.cc:521
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: DAPCache3.cc:993
-
virtual unsigned long long get_cache_size()
Get the cache size. Read the size information from the cache info file and return it...
Definition: DAPCache3.cc:772
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual bool create_and_lock(const string &target, int &fd)
Create a file in the cache and lock it for write access. If the file does not exist, make it, open it for read-write access and get an exclusive lock on it. The locking operation blocks, although that should never happen.
Definition: DAPCache3.cc:590
-
virtual void lock_cache_write()
Definition: DAPCache3.cc:642
-
virtual bool cache_too_big(unsigned long long current_size) const
look at the cache size; is it too large? Look at the cache size and see if it is too big...
Definition: DAPCache3.cc:760
-
virtual void exclusive_to_shared_lock(int fd)
Transfer from an exclusive lock to a shared lock. If the file has an exclusive write lock on it...
Definition: DAPCache3.cc:620
-
virtual bool get_read_lock(const string &target, int &fd)
Get a read-only lock on the file if it exists.
Definition: DAPCache3.cc:562
-
virtual void lock_cache_read()
Definition: DAPCache3.cc:654
-
virtual void update_and_purge(const string &new_file)
Purge files from the cache.
Definition: DAPCache3.cc:854
-
Definition: DAPCache3.h:51
-
libdap base object for common functionality of libdap objects
Definition: DapObj.h:50
-
static DAPCache3 * get_instance()
Definition: DAPCache3.cc:153
-
Implementation of a caching mechanism for compressed data. This cache uses simple advisory locking fo...
Definition: DAPCache3.h:82
-
virtual void purge_file(const string &file)
Purge a single file from the cache.
Definition: DAPCache3.cc:944
-
virtual void unlock_cache()
Definition: DAPCache3.cc:668
-
-
- - - - diff --git a/html/DAS_8cc_source.html b/html/DAS_8cc_source.html deleted file mode 100644 index 09a68b928..000000000 --- a/html/DAS_8cc_source.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - -libdap: DAS.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
DAS.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1994-1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Methods for the class DAS - a class used to parse the dataset attribute
33 // structure.
34 //
35 // jhrg 7/25/94
36 
37 #include "config.h"
38 
39 #include <cstdio>
40 
41 #ifdef HAVE_UNISTD_H
42 #include <unistd.h>
43 #endif
44 
45 #ifdef WIN32
46 #include <io.h>
47 #endif
48 
49 #include <iostream>
50 #include <string>
51 
52 #include "DAS.h"
53 #include "AttrTable.h"
54 #include "Error.h"
55 #include "InternalErr.h"
56 #include "parser.h"
57 #include "escaping.h"
58 #include "debug.h"
59 #include "DapIndent.h"
60 
61 using std::cerr;
62 using std::endl;
63 
64 // Glue routines declared in das.lex
65 extern void das_switch_to_buffer(void *new_buffer);
66 extern void das_delete_buffer(void * buffer);
67 extern void *das_buffer(FILE *fp);
68 
69 //extern void dasrestart(FILE *yyin);
70 //extern int dasparse(void *arg); // defined in das.tab.c
71 extern int dasparse(libdap::parser_arg *arg); // defined in das.tab.c
72 
73 namespace libdap {
74 
75 void DAS::duplicate(const DAS &src)
76 {
77  // If the container field is set, perform a deep copy
78  if (src.d_container)
79  d_container = new AttrTable(*src.d_container);
80  else
81  d_container = 0;
82 
83  d_container_name = src.d_container_name;
84  d_attrs = src.d_attrs;
85 }
86 
87 DAS &DAS::operator=(const DAS &rhs)
88 {
89  if (this == &rhs)
90  return *this;
91 
92  duplicate(rhs);
93 
94  return *this;
95 }
96 
102 void DAS::container_name(const string &cn)
103 {
104  // We want to find a top level attribute table with the given name. So
105  // set d_container to null first so that we aren't searching some
106  // previous container
107  if (cn != d_container_name) {
108  d_container = 0;
109  if (!cn.empty()) {
110  d_container = get_table(cn);
111  if (!d_container) {
112  d_container = add_table(cn, new AttrTable);
113  }
114  }
115  d_container_name = cn;
116  }
117 }
118 
125 unsigned int DAS::get_size() const
126 {
127  if (d_container) {
128  return d_container->get_size();
129  }
130  return d_attrs.get_size();
131 }
132 
136 {
137  if (d_container) {
138  d_container->erase();
139  }
140  else {
141  d_attrs.erase();
142  }
143 }
144 
147 AttrTable::Attr_iter DAS::var_begin()
148 {
149  if (d_container) {
150  return d_container->attr_begin();
151  }
152  return d_attrs.attr_begin();
153 }
154 
158 AttrTable::Attr_iter DAS::var_end()
159 {
160  if (d_container) {
161  return d_container->attr_end();
162  }
163  return d_attrs.attr_end();
164 }
165 
168 string DAS::get_name(AttrTable::Attr_iter &i)
169 {
170  if (d_container) {
171  return d_container->get_name(i);
172  }
173  return d_attrs.get_name(i);
174 }
175 
178 AttrTable *
179 DAS::get_table(AttrTable::Attr_iter &i)
180 {
181  if (d_container) {
182  return d_container->get_attr_table(i);
183  }
184  return d_attrs.get_attr_table(i);
185 }
186 
189 AttrTable *
190 DAS::get_table(const string &name)
191 {
192  if (d_container) {
193  return d_container->get_attr_table(name);
194  }
195  return d_attrs.get_attr_table(name);
196 }
197 
199 
204 
208 AttrTable *
209 DAS::add_table( const string &name, AttrTable *at )
210 {
211  if (d_container) {
212  at->set_is_global_attribute(false);
213  return d_container->append_container(at, name);
214  }
215  return d_attrs.append_container( at, name ) ;
216 }
217 
219 
225 
226 
231 void
232 DAS::parse(string fname)
233 {
234  FILE *in = fopen(fname.c_str(), "r");
235 
236  if (!in) {
237  throw Error(cannot_read_file, "Could not open: " + fname);
238  }
239 
240  parse(in);
241 
242  int res = fclose(in);
243  if (res) {
244  DBG(cerr << "DAS::parse - Failed to close file " << (void *)in << endl ;) ;
245  }
246 }
247 
258 void
259 DAS::parse(int fd)
260 {
261 #ifdef WIN32
262  int new_fd = _dup(fd);
263 #else
264  int new_fd = dup(fd);
265 #endif
266 
267  if (new_fd < 0)
268  throw InternalErr(__FILE__, __LINE__, "Could not access file.");
269  FILE *in = fdopen(new_fd, "r");
270 
271  if (!in) {
272  throw InternalErr(__FILE__, __LINE__, "Could not access file.");
273  }
274 
275  parse(in);
276 
277  int res = fclose(in);
278  if (res) {
279  DBG(cerr << "DAS::parse(fd) - Failed to close " << (void *)in << endl ;) ;
280  }
281 }
282 
283 
284 
291 void
292 DAS::parse(FILE *in)
293 {
294  if (!in) {
295  throw InternalErr(__FILE__, __LINE__, "Null input stream.");
296  }
297 
298  void *buffer = das_buffer(in);
299  das_switch_to_buffer(buffer);
300 
301  parser_arg arg(this);
302 
303  //bool status = dasparse((void *) & arg) == 0;
304  bool status = dasparse(&arg) == 0;
305 
306  das_delete_buffer(buffer);
307 
308  // STATUS is the result of the parser function; if a recoverable error
309  // was found it will be true but arg.status() will be false.
310  if (!status || !arg.status()) {// Check parse result
311  if (arg.error())
312  throw *arg.error();
313  }
314 }
315 
317 
330 void
331 DAS::print(FILE *out, bool dereference)
332 {
333  fprintf(out, "Attributes {\n") ;
334 
335  d_attrs.print(out, " ", dereference);
336 
337  fprintf(out, "}\n") ;
338 }
339 
352 void
353 DAS::print(ostream &out, bool dereference)
354 {
355  out << "Attributes {\n" ;
356 
357  d_attrs.print(out, " ", dereference);
358 
359  out << "}\n" ;
360 }
361 
369 void DAS::dump(ostream &strm) const
370 {
371  strm << DapIndent::LMarg << "DAS::dump - (" << (void *) this << ")" << endl;
372  DapIndent::Indent();
373  if (d_container) {
374  strm << DapIndent::LMarg << "current container: " << d_container_name << endl;
375  }
376  else {
377  strm << DapIndent::LMarg << "current container: NONE" << endl;
378  }
379  d_attrs.dump(strm);
380  DapIndent::UnIndent();
381 }
382 
383 } // namespace libdap
384 
AttrTable * get_table(AttrTable::Attr_iter &i)
Returns the referenced variable attribute table.
Definition: DAS.cc:179
-
virtual Attr_iter attr_end()
Definition: AttrTable.cc:719
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
AttrTable::Attr_iter var_begin()
Returns a reference to the attribute table for the first variable.
Definition: DAS.cc:147
-
virtual string get_name() const
Get the name of this attribute table.
Definition: AttrTable.cc:238
-
virtual AttrTable * add_table(const string &name, AttrTable *at)
Adds a variable attribute table to the DAS or the current dataset container attribute table...
Definition: DAS.cc:209
-
virtual void print(FILE *out, string pad=" ", bool dereference=false)
Prints the attribute table.
Definition: AttrTable.cc:1243
-
virtual void print(FILE *out, bool dereference=false)
Definition: DAS.cc:331
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
virtual AttrTable * append_container(const string &name)
Add a container to the attribute table.
Definition: AttrTable.cc:410
-
virtual AttrTable * get_attr_table(const string &name)
Get an attribute container.
Definition: AttrTable.cc:607
-
string get_name(AttrTable::Attr_iter &i)
Returns the name of the referenced variable attribute table.
Definition: DAS.cc:168
-
virtual void erase()
Erase the attribute table.
Definition: AttrTable.cc:1036
-
virtual unsigned int get_size() const
Returns the number of attributes in the current attribute table.
Definition: DAS.cc:125
-
virtual void erase()
erase all attributes in this DAS
Definition: DAS.cc:135
-
virtual Attr_iter attr_begin()
Definition: AttrTable.cc:711
-
virtual string container_name() const
Returns the name of the current attribute container when multiple files used to build this DAS...
Definition: DAS.h:149
-
AttrTable::Attr_iter var_end()
Definition: DAS.cc:158
-
virtual void parse(string fname)
Reads a DAS from the named file.
Definition: DAS.cc:232
-
Pass parameters by reference to a parser.
Definition: parser.h:68
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: DAS.cc:369
-
A class for error processing.
Definition: Error.h:92
-
virtual unsigned int get_size() const
Get the number of entries in this attribute table.
Definition: AttrTable.cc:231
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: AttrTable.cc:1510
-
-
- - - - diff --git a/html/DAS_8h_source.html b/html/DAS_8h_source.html deleted file mode 100644 index 353b3a5d7..000000000 --- a/html/DAS_8h_source.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - -libdap: DAS.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
DAS.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1994-1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Using the DASVHMap class, build a parser for the DAS and add functions
33 // that provide access to the variables, their attributes and values.
34 //
35 // jhrg 7/25/94
36 
37 #ifndef _das_h
38 #define _das_h 1
39 
40 
41 #include <cstdio>
42 #include <string>
43 #include <iostream>
44 
45 #ifndef _attrtable_h
46 #include "AttrTable.h"
47 #endif
48 
49 using std::cout;
50 
51 namespace libdap
52 {
53 
121 class DAS : public DapObj
122 {
123 private:
124  // The DAS support the notion of a current attribute table for a given
125  // container. Containers are used by the BES to support datasets that
126  // are built using several files (but not exactly the same way as
127  // NCML builds them.
128  AttrTable *d_container ;
129  string d_container_name ;
130 
131  // A DAS is a shell around an attribute table. Since tables can be nested,
132  // there is one top-level table and the attribute tables for individual
133  // variables are its children.
134  AttrTable d_attrs ;
135 
136  void duplicate(const DAS &src);
137 
138 public:
139  DAS() : DapObj(), d_container( 0 ) { }
140  DAS(const DAS &das) { duplicate(das); }
141 
142  virtual ~DAS() { }
143 
144  DAS & operator=(const DAS &rhs);
145 
149  virtual string container_name() const {return d_container_name; }
150 
151  virtual void container_name( const string &cn ) ;
152 
158  virtual AttrTable *container() { return d_container; }
159 
167  if (d_container)
168  return d_container;
169  return &d_attrs;
170  }
171 
172  virtual void erase() ;
173 
174  virtual unsigned int get_size() const ;
175 
176  AttrTable::Attr_iter var_begin() ;
177  AttrTable::Attr_iter var_end() ;
178 
179  string get_name(AttrTable::Attr_iter &i);
180  AttrTable *get_table(AttrTable::Attr_iter &i);
181 
182  virtual AttrTable *get_table(const string &name);
183 
184  virtual AttrTable *add_table(const string &name, AttrTable *at);
185 
187  virtual void parse(string fname);
188  virtual void parse(int fd);
189  virtual void parse(FILE *in = stdin);
190 
192  virtual void print(FILE *out, bool dereference = false);
193  virtual void print(ostream &out, bool dereference = false);
194 
195  virtual void dump(ostream &strm) const ;
196 };
197 
198 } // namespace libdap
199 
200 #endif // _das_h
AttrTable * get_table(AttrTable::Attr_iter &i)
Returns the referenced variable attribute table.
Definition: DAS.cc:179
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
AttrTable::Attr_iter var_begin()
Returns a reference to the attribute table for the first variable.
Definition: DAS.cc:147
-
virtual AttrTable * add_table(const string &name, AttrTable *at)
Adds a variable attribute table to the DAS or the current dataset container attribute table...
Definition: DAS.cc:209
-
virtual void print(FILE *out, bool dereference=false)
Definition: DAS.cc:331
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
string get_name(AttrTable::Attr_iter &i)
Returns the name of the referenced variable attribute table.
Definition: DAS.cc:168
-
virtual AttrTable * get_top_level_attributes()
Returns the top most set of attributes.
Definition: DAS.h:166
-
virtual unsigned int get_size() const
Returns the number of attributes in the current attribute table.
Definition: DAS.cc:125
-
virtual void erase()
erase all attributes in this DAS
Definition: DAS.cc:135
-
virtual string container_name() const
Returns the name of the current attribute container when multiple files used to build this DAS...
Definition: DAS.h:149
-
AttrTable::Attr_iter var_end()
Definition: DAS.cc:158
-
virtual void parse(string fname)
Reads a DAS from the named file.
Definition: DAS.cc:232
-
virtual AttrTable * container()
Returns the current attribute container when multiple files used to build this DAS.
Definition: DAS.h:158
-
libdap base object for common functionality of libdap objects
Definition: DapObj.h:50
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: DAS.cc:369
-
Hold attribute data for a DAP2 dataset.
Definition: DAS.h:121
-
-
- - - - diff --git a/html/DDS_8cc_source.html b/html/DDS_8cc_source.html deleted file mode 100644 index 886fa3454..000000000 --- a/html/DDS_8cc_source.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - - -libdap: DDS.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
DDS.cc
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2002,2003 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 // (c) COPYRIGHT URI/MIT 1994-1999
26 // Please read the full copyright statement in the file COPYRIGHT_URI.
27 //
28 // Authors:
29 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
30 
31 //
32 // jhrg 9/7/94
33 
34 #include "config.h"
35 
36 #include <cstdio>
37 #include <cmath>
38 #include <climits>
39 
40 #include <sys/types.h>
41 
42 #ifdef WIN32
43 #include <io.h>
44 #include <process.h>
45 #include <fstream>
46 #else
47 #include <unistd.h> // for alarm and dup
48 #include <sys/wait.h>
49 #endif
50 
51 #include <iostream>
52 #include <sstream>
53 #include <algorithm>
54 #include <functional>
55 #include <memory>
56 
57 // #define DODS_DEBUG
58 // #define DODS_DEBUG2
59 
60 #include "GNURegex.h"
61 
62 #include "DAS.h"
63 #include "Clause.h"
64 #include "Error.h"
65 #include "InternalErr.h"
66 #if 0
67 #include "Keywords2.h"
68 #endif
69 
70 #include "parser.h"
71 #include "debug.h"
72 #include "util.h"
73 #include "DapIndent.h"
74 
75 #include "Byte.h"
76 #include "Int16.h"
77 #include "UInt16.h"
78 #include "Int32.h"
79 #include "UInt32.h"
80 #include "Float32.h"
81 #include "Float64.h"
82 #include "Str.h"
83 #include "Url.h"
84 #include "Array.h"
85 #include "Structure.h"
86 #include "Sequence.h"
87 #include "Grid.h"
88 
89 #include "escaping.h"
90 
96 const string c_xml_xsi = "http://www.w3.org/2001/XMLSchema-instance";
97 const string c_xml_namespace = "http://www.w3.org/XML/1998/namespace";
98 
99 const string grddl_transformation_dap32 = "http://xml.opendap.org/transforms/ddxToRdfTriples.xsl";
100 
101 const string c_default_dap20_schema_location = "http://xml.opendap.org/dap/dap2.xsd";
102 const string c_default_dap32_schema_location = "http://xml.opendap.org/dap/dap3.2.xsd";
103 const string c_default_dap40_schema_location = "http://xml.opendap.org/dap/dap4.0.xsd";
104 
105 const string c_dap20_namespace = "http://xml.opendap.org/ns/DAP2";
106 const string c_dap32_namespace = "http://xml.opendap.org/ns/DAP/3.2#";
107 const string c_dap40_namespace = "http://xml.opendap.org/ns/DAP/4.0#";
108 
109 const string c_dap_20_n_sl = c_dap20_namespace + " " + c_default_dap20_schema_location;
110 const string c_dap_32_n_sl = c_dap32_namespace + " " + c_default_dap32_schema_location;
111 const string c_dap_40_n_sl = c_dap40_namespace + " " + c_default_dap40_schema_location;
112 
116 const string TOP_LEVEL_ATTRS_CONTAINER_NAME = "DAP4_GLOBAL";
117 
118 using namespace std;
119 
120 int ddsparse(libdap::parser_arg *arg);
121 
122 // Glue for the DDS parser defined in dds.lex
123 void dds_switch_to_buffer(void *new_buffer);
124 void dds_delete_buffer(void * buffer);
125 void *dds_buffer(FILE *fp);
126 
127 namespace libdap {
128 
129 void
130 DDS::duplicate(const DDS &dds)
131 {
132  DBG(cerr << "Entering DDS::duplicate... " <<endl);
133 #if 0
134  BaseTypeFactory *d_factory;
135 
136  string d_name; // The dataset d_name
137  string d_filename; // File d_name (or other OS identifier) for
138  string d_container_name; // d_name of container structure
139  Structure *d_container; // current container for container d_name
140  // dataset or part of dataset.
141 
142  int d_dap_major; // The protocol major version number
143  int d_dap_minor; // ... and minor version number
144  string d_dap_version; // String version of the protocol
145  string d_request_xml_base;
146  string d_namespace;
147 
148  AttrTable d_attr; // Global attributes.
149 
150  vector<BaseType *> vars; // Variables at the top level
151 
152  int d_timeout; // alarm time in seconds. If greater than
153  // zero, raise the alarm signal if more than
154  // d_timeout seconds are spent reading data.
155  Keywords d_keywords; // Holds keywords parsed from the CE
156 
157  long d_max_response_size_kb; // In bytes
158 #endif
159 
160  d_factory = dds.d_factory;
161 
162  d_name = dds.d_name;
163  d_filename = dds.d_filename;
164  d_container_name = dds.d_container_name;
165  d_container = dds.d_container;
166 
167  d_dap_major = dds.d_dap_major;
168  d_dap_minor = dds.d_dap_minor;
169 
170  d_dap_version = dds.d_dap_version; // String version of the protocol
171  d_request_xml_base = dds.d_request_xml_base;
172  d_namespace = dds.d_namespace;
173 
174  d_attr = dds.d_attr;
175 
176  DDS &dds_tmp = const_cast<DDS &>(dds);
177 
178  // copy the things pointed to by the list, not just the pointers
179  for (Vars_iter i = dds_tmp.var_begin(); i != dds_tmp.var_end(); i++) {
180  add_var(*i); // add_var() dups the BaseType.
181  }
182 
183  d_timeout = dds.d_timeout;
184 
185 #if 0
186  d_keywords = dds.d_keywords; // value copy; Keywords contains no pointers
187 #endif
188 
189  d_max_response_size_kb = dds.d_max_response_size_kb;
190 }
191 
204 DDS::DDS(BaseTypeFactory *factory, const string &name)
205  : d_factory(factory), d_name(name), d_container_name(""), d_container(0),
206  d_request_xml_base(""),
207  d_timeout(0), /*d_keywords(),*/ d_max_response_size_kb(0)
208 {
209  DBG(cerr << "Building a DDS for the default version (2.0)" << endl);
210 
211  // This method sets a number of values, including those returned by
212  // get_protocol_major(), ..., get_namespace().
213  set_dap_version("2.0");
214 }
215 
231 DDS::DDS(BaseTypeFactory *factory, const string &name, const string &version)
232  : d_factory(factory), d_name(name), d_container_name(""), d_container(0),
233  d_request_xml_base(""),
234  d_timeout(0), /*d_keywords(),*/ d_max_response_size_kb(0)
235 {
236  DBG(cerr << "Building a DDS for version: " << version << endl);
237 
238  // This method sets a number of values, including those returned by
239  // get_protocol_major(), ..., get_namespace().
240  set_dap_version(version);
241 }
242 
244 DDS::DDS(const DDS &rhs) : DapObj()
245 {
246  DBG(cerr << "Entering DDS(const DDS &rhs) ..." << endl);
247  duplicate(rhs);
248  DBG(cerr << " bye." << endl);
249 }
250 
251 DDS::~DDS()
252 {
253  // delete all the variables in this DDS
254  for (Vars_iter i = vars.begin(); i != vars.end(); i++) {
255  BaseType *btp = *i ;
256  delete btp ; btp = 0;
257  }
258 }
259 
260 DDS &
261 DDS::operator=(const DDS &rhs)
262 {
263  DBG(cerr << "Entering DDS::operator= ..." << endl);
264  if (this == &rhs)
265  return *this;
266 
267  duplicate(rhs);
268 
269  DBG(cerr << " bye." << endl);
270  return *this;
271 }
272 
287 {
288  // If there is a container set in the DDS then check the container from
289  // the DAS. If they are not the same container, then throw an exception
290  // (should be working on the same container). If the container does not
291  // exist in the DAS, then throw an exception
292  if (d_container && das->container_name() != d_container_name)
293  throw InternalErr(__FILE__, __LINE__,
294  "Error transferring attributes: working on a container in dds, but not das");
295 
296  // Give each variable a chance to claim its attributes.
297  AttrTable *top = das->get_top_level_attributes();
298 
299  for (DDS::Vars_iter i = var_begin(), e = var_end(); i != e; i++) {
300  (*i)->transfer_attributes(top);
301  }
302 #if 0
303  Vars_iter var = var_begin();
304  while (var != var_end()) {
305  try {
306  DBG(cerr << "Processing the attributes for: " << (*var)->d_name() << " a " << (*var)->type_name() << endl);
307  (*var)->transfer_attributes(top);
308  var++;
309  }
310  catch (Error &e) {
311  DBG(cerr << "Got this exception: " << e.get_error_message() << endl);
312  var++;
313  throw e;
314  }
315  }
316 #endif
317  // Now we transfer all of the attributes still marked as global to the
318  // global container in the DDS.
319  for (AttrTable::Attr_iter i = top->attr_begin(), e = top->attr_end(); i != e; ++i) {
320  if ((*i)->type == Attr_container && (*i)->attributes->is_global_attribute()) {
321  // copy the source container so that the DAS passed in can be
322  // deleted after calling this method.
323  AttrTable *at = new AttrTable(*(*i)->attributes);
324  d_attr.append_container(at, at->get_name());
325  }
326  }
327 #if 0
328  AttrTable::Attr_iter at_cont_p = top_level->attr_begin();
329  while (at_cont_p != top_level->attr_end()) {
330  // In truth, all of the top level attributes should be containers, but
331  // this test handles the abnormal case where somehow someone makes a
332  // top level attribute that is not a container by silently dropping it.
333  if ((*at_cont_p)->type == Attr_container && (*at_cont_p)->attributes->is_global_attribute()) {
334  DBG(cerr << (*at_cont_p)->d_name << " is a global attribute." << endl);
335  // copy the source container so that the DAS passed in can be
336  // deleted after calling this method.
337  AttrTable *at = new AttrTable(*(*at_cont_p)->attributes);
338  d_attr.append_container(at, at->get_name());
339  }
340 
341  at_cont_p++;
342  }
343 #endif
344 }
345 
353 
355 string
357 {
358  return d_name;
359 }
360 
362 void
363 DDS::set_dataset_name(const string &n)
364 {
365  d_name = n;
366 }
367 
369 
371 AttrTable &
373 {
374  return d_attr;
375 }
376 
386 string
388 {
389  return d_filename;
390 }
391 
393 void
394 DDS::filename(const string &fn)
395 {
396  d_filename = fn;
397 }
399 
403 void
405 {
406  d_dap_major = p;
407 
408  // This works because regardless of the order set_dap_major and set_dap_minor
409  // are called, once they both are called, the value in the string is
410  // correct. I protect against negative numbers because that would be
411  // nonsensical.
412  if (d_dap_minor >= 0) {
413  ostringstream oss;
414  oss << d_dap_major << "." << d_dap_minor;
415  d_dap_version = oss.str();
416  }
417 }
418 
422 void
424 {
425  d_dap_minor = p;
426 
427  if (d_dap_major >= 0) {
428  ostringstream oss;
429  oss << d_dap_major << "." << d_dap_minor;
430  d_dap_version = oss.str();
431  }
432 }
433 
439 void
440 DDS::set_dap_version(const string &v /* = "2.0" */)
441 {
442  istringstream iss(v);
443 
444  int major = -1, minor = -1;
445  char dot;
446  if (!iss.eof() && !iss.fail())
447  iss >> major;
448  if (!iss.eof() && !iss.fail())
449  iss >> dot;
450  if (!iss.eof() && !iss.fail())
451  iss >> minor;
452 
453  if (major == -1 || minor == -1 or dot != '.')
454  throw InternalErr(__FILE__, __LINE__, "Could not parse dap version. Value given: " + v);
455 
456  d_dap_version = v;
457 
458  d_dap_major = major;
459  d_dap_minor = minor;
460 
461  // Now set the related XML constants. These might be overwritten if
462  // the DDS instance is being built from a document parse, but if it's
463  // being constructed by a server the code to generate the XML document
464  // needs these values to match the DAP version information.
465  switch (d_dap_major) {
466  case 2:
467  d_namespace = c_dap20_namespace;
468  break;
469  case 3:
470  d_namespace = c_dap32_namespace;
471  break;
472  case 4:
473  d_namespace = c_dap40_namespace;
474  break;
475  default:
476  throw InternalErr(__FILE__, __LINE__, "Unknown DAP version.");
477  }
478 }
479 
487 void
489 {
490  int major = floor(d);
491  int minor = (d-major)*10;
492 
493  DBG(cerr << "Major: " << major << ", Minor: " << minor << endl);
494 
495  ostringstream oss;
496  oss << major << "." << minor;
497 
498  set_dap_version(oss.str());
499 }
500 
510 string
512 {
513  return d_container_name;
514 }
515 
518 void
519 DDS::container_name(const string &cn)
520 {
521  // we want to search the DDS for the top level structure with the given
522  // d_name. Set the container to null so that we don't search some previous
523  // container.
524  d_container = 0 ;
525  if( !cn.empty() )
526  {
527  d_container = dynamic_cast<Structure *>( var( cn ) ) ;
528  if( !d_container )
529  {
530  // create a structure for this container. Calling add_var
531  // while_container is null will add the new structure to DDS and
532  // not some sub structure. Adding the new structure makes a copy
533  // of it. So after adding it, go get it and set d_container.
534  Structure *s = new Structure( cn ) ;
535  add_var( s ) ;
536  delete s ;
537  s = 0 ;
538  d_container = dynamic_cast<Structure *>( var( cn ) ) ;
539  }
540  }
541  d_container_name = cn;
542 
543 }
544 
546 Structure *
548 {
549  return d_container ;
550 }
551 
553 
564 int
565 DDS::get_request_size(bool constrained)
566 {
567  int w = 0;
568  for (Vars_iter i = vars.begin(); i != vars.end(); i++) {
569  if (constrained) {
570  if ((*i)->send_p())
571  w += (*i)->width(constrained);
572  }
573  else {
574  w += (*i)->width(constrained);
575  }
576  }
577 
578  return w;
579 }
580 
587  if (!bt)
588  throw InternalErr(__FILE__, __LINE__, "Trying to add a BaseType object with a NULL pointer.");
589 #if 0
590  if (bt->is_dap4_only_type())
591  throw InternalErr(__FILE__, __LINE__, "Attempt to add a DAP4 type to a DAP2 DDS.");
592 #endif
593  DBG2(cerr << "In DDS::add_var(), bt's address is: " << bt << endl);
594 
595  BaseType *btp = bt->ptr_duplicate();
596  DBG2(cerr << "In DDS::add_var(), btp's address is: " << btp << endl);
597  if (d_container) {
598  // Mem leak fix [mjohnson nov 2009]
599  // Structure::add_var() creates ANOTHER copy.
600  d_container->add_var(bt);
601  // So we need to delete btp or else it leaks
602  delete btp;
603  btp = 0;
604  }
605  else {
606  vars.push_back(btp);
607  }
608 }
609 
612 void
614 {
615  if (!bt)
616  throw InternalErr(__FILE__, __LINE__, "Trying to add a BaseType object with a NULL pointer.");
617 
618  DBG2(cerr << "In DDS::add_var(), bt's address is: " << bt << endl);
619 
620  if (d_container) {
621  d_container->add_var_nocopy(bt);
622  }
623  else {
624  vars.push_back(bt);
625  }
626 }
627 
628 
635 void
636 DDS::del_var(const string &n)
637 {
638  if( d_container )
639  {
640  d_container->del_var( n ) ;
641  return ;
642  }
643 
644  for (Vars_iter i = vars.begin(); i != vars.end(); i++) {
645  if ((*i)->name() == n) {
646  BaseType *bt = *i ;
647  vars.erase(i) ;
648  delete bt ; bt = 0;
649  return;
650  }
651  }
652 }
653 
658 void
659 DDS::del_var(Vars_iter i)
660 {
661  if (i != vars.end()) {
662  BaseType *bt = *i ;
663  vars.erase(i) ;
664  delete bt ; bt = 0;
665  }
666 }
667 
674 void
675 DDS::del_var(Vars_iter i1, Vars_iter i2)
676 {
677  for (Vars_iter i_tmp = i1; i_tmp != i2; i_tmp++) {
678  BaseType *bt = *i_tmp ;
679  delete bt ; bt = 0;
680  }
681  vars.erase(i1, i2) ;
682 }
683 
691 BaseType *
692 DDS::var(const string &n, BaseType::btp_stack &s)
693 {
694  return var(n, &s);
695 }
715 BaseType *
716 DDS::var(const string &n, BaseType::btp_stack *s)
717 {
718  string name = www2id(n);
719  if( d_container )
720  return d_container->var( name, false, s ) ;
721 
722  BaseType *v = exact_match(name, s);
723  if (v)
724  return v;
725 
726  return leaf_match(name, s);
727 }
728 
729 BaseType *
730 DDS::leaf_match(const string &n, BaseType::btp_stack *s)
731 {
732  DBG(cerr << "DDS::leaf_match: Looking for " << n << endl);
733 
734  for (Vars_iter i = vars.begin(); i != vars.end(); i++) {
735  BaseType *btp = *i;
736  DBG(cerr << "DDS::leaf_match: Looking for " << n << " in: " << btp->name() << endl);
737  // Look for the d_name in the dataset's top-level
738  if (btp->name() == n) {
739  DBG(cerr << "Found " << n << " in: " << btp->name() << endl);
740  return btp;
741  }
742 
743  if (btp->is_constructor_type()) {
744  BaseType *found = btp->var(n, false, s);
745  if (found) {
746  DBG(cerr << "Found " << n << " in: " << btp->name() << endl);
747  return found;
748  }
749  }
750 #if STRUCTURE_ARRAY_SYNTAX_OLD
751  if (btp->is_vector_type() && btp->var()->is_constructor_type()) {
752  s->push(btp);
753  BaseType *found = btp->var()->var(n, false, s);
754  if (found) {
755  DBG(cerr << "Found " << n << " in: " << btp->var()->d_name() << endl);
756  return found;
757  }
758  }
759 #endif
760  }
761 
762  return 0; // It is not here.
763 }
764 
765 BaseType *
766 DDS::exact_match(const string &name, BaseType::btp_stack *s)
767 {
768  for (Vars_iter i = vars.begin(); i != vars.end(); i++) {
769  BaseType *btp = *i;
770  DBG2(cerr << "Looking for " << d_name << " in: " << btp << endl);
771  // Look for the d_name in the current ctor type or the top level
772  if (btp->name() == name) {
773  DBG2(cerr << "Found " << d_name << " in: " << btp << endl);
774  return btp;
775  }
776  }
777 
778  string::size_type dot_pos = name.find(".");
779  if (dot_pos != string::npos) {
780  string aggregate = name.substr(0, dot_pos);
781  string field = name.substr(dot_pos + 1);
782 
783  BaseType *agg_ptr = var(aggregate, s);
784  if (agg_ptr) {
785  DBG2(cerr << "Descending into " << agg_ptr->name() << endl);
786  return agg_ptr->var(field, true, s);
787  }
788  else
789  return 0; // qualified names must be *fully* qualified
790  }
791 
792  return 0; // It is not here.
793 }
794 
795 
798 DDS::Vars_iter
800 {
801  return vars.begin();
802 }
803 
804 DDS::Vars_riter
806 {
807  return vars.rbegin();
808 }
809 
810 DDS::Vars_iter
812 {
813  return vars.end() ;
814 }
815 
816 DDS::Vars_riter
818 {
819  return vars.rend() ;
820 }
821 
825 DDS::Vars_iter
827 {
828  return vars.begin() + i;
829 }
830 
834 BaseType *
836 {
837  return *(vars.begin() + i);
838 }
839 
844 void
845 DDS::insert_var(Vars_iter i, BaseType *ptr)
846 {
847 #if 0
848  if (ptr->is_dap4_only_type())
849  throw InternalErr(__FILE__, __LINE__, "Attempt to add a DAP4 type to a DAP2 DDS.");
850 #endif
851  vars.insert(i, ptr->ptr_duplicate());
852 }
853 
861 void
863 {
864 #if 0
865  if (ptr->is_dap4_only_type())
866  throw InternalErr(__FILE__, __LINE__, "Attempt to add a DAP4 type to a DAP2 DDS.");
867 #endif
868  vars.insert(i, ptr);
869 }
870 
872 int
874 {
875  return vars.size();
876 }
877 
878 void
879 DDS::timeout_on()
880 {
881 #if USE_LOCAL_TIMEOUT_SCHEME
882 #ifndef WIN32
883  alarm(d_timeout);
884 #endif
885 #endif
886 }
887 
888 void
889 DDS::timeout_off()
890 {
891 #if USE_LOCAL_TIMEOUT_SCHEME
892 #ifndef WIN32
893  // Old behavior commented out. I think it is an error to change the value
894  // of d_timeout. The way this will likely be used is to set the timeout
895  // value once and then 'turn on' or turn off' that timeout as the situation
896  // dictates. The initeded use for the DDS timeout is so that timeouts for
897  // data responses will include the CPU resources needed to build the response
898  // but not the time spent transmitting the response. This may change when
899  // more parallelism is added to the server... These methods are called from
900  // BESDapResponseBuilder in bes/dap. jhrg 12/22/15
901 
902  // d_timeout = alarm(0);
903 
904  alarm(0);
905 #endif
906 #endif
907 }
908 
909 void
910 DDS::set_timeout(int)
911 {
912 #if USE_LOCAL_TIMEOUT_SCHEME
913  // Has no effect under win32
914  d_timeout = t;
915 #endif
916 }
917 
918 int
919 DDS::get_timeout()
920 {
921 #if USE_LOCAL_TIMEOUT_SCHEME
922  // Has to effect under win32
923  return d_timeout;
924 #endif
925  return 0;
926 }
927 
929 void
931 {
932  for (Vars_iter i = vars.begin(); i != vars.end(); i++) {
933  if ((*i)->type() == dods_sequence_c)
934  dynamic_cast<Sequence&>(**i).set_leaf_sequence();
935  else if ((*i)->type() == dods_structure_c)
936  dynamic_cast<Structure&>(**i).set_leaf_sequence();
937  }
938 }
939 
941 void
942 DDS::parse(string fname)
943 {
944  FILE *in = fopen(fname.c_str(), "r");
945 
946  if (!in) {
947  throw Error(cannot_read_file, "Could not open: " + fname);
948  }
949 
950  try {
951  parse(in);
952  fclose(in);
953  }
954  catch (Error &e) {
955  fclose(in);
956  throw ;
957  }
958 }
959 
960 
962 void
963 DDS::parse(int fd)
964 {
965 #ifdef WIN32
966  int new_fd = _dup(fd);
967 #else
968  int new_fd = dup(fd);
969 #endif
970 
971  if (new_fd < 0)
972  throw InternalErr(__FILE__, __LINE__, "Could not access file.");
973  FILE *in = fdopen(new_fd, "r");
974 
975  if (!in) {
976  throw InternalErr(__FILE__, __LINE__, "Could not access file.");
977  }
978 
979  try {
980  parse(in);
981  fclose(in);
982  }
983  catch (Error &e) {
984  fclose(in);
985  throw ;
986  }
987 }
988 
995 void
996 DDS::parse(FILE *in)
997 {
998  if (!in) {
999  throw InternalErr(__FILE__, __LINE__, "Null input stream.");
1000  }
1001 
1002  void *buffer = dds_buffer(in);
1003  dds_switch_to_buffer(buffer);
1004 
1005  parser_arg arg(this);
1006 
1007  bool status = ddsparse(&arg) == 0;
1008 
1009  dds_delete_buffer(buffer);
1010 
1011  DBG2(cout << "Status from parser: " << status << endl);
1012 
1013  // STATUS is the result of the parser function; if a recoverable error
1014  // was found it will be true but arg.status() will be false.
1015  if (!status || !arg.status()) {// Check parse result
1016  if (arg.error())
1017  throw *arg.error();
1018  }
1019 }
1020 
1022 void
1023 DDS::print(FILE *out)
1024 {
1025  ostringstream oss;
1026  print(oss);
1027  fwrite(oss.str().data(), sizeof(char), oss.str().length(), out);
1028 }
1029 
1031 void
1032 DDS::print(ostream &out)
1033 {
1034  out << "Dataset {\n" ;
1035 
1036  for (Vars_citer i = vars.begin(); i != vars.end(); i++) {
1037  (*i)->print_decl(out) ;
1038  }
1039 
1040  out << "} " << id2www(d_name) << ";\n" ;
1041 
1042  return ;
1043 }
1044 
1052 bool
1054 {
1055  for (AttrTable::Attr_iter i = a.attr_begin(), e = a.attr_end(); i != e; ++i) {
1056  if (a.get_attr_type(i) != Attr_container) {
1057  return true;
1058  }
1059  else if (has_dap2_attributes(*a.get_attr_table(i))) {
1060  return true;
1061  }
1062  }
1063 
1064  return false;
1065 
1066 #if 0
1067  vector<AttrTable*> tables;
1068 
1069  for (AttrTable::Attr_iter i = a.attr_begin(), e = a.attr_end(); i != e; ++i) {
1070  if (a.get_attr_type(i) != Attr_container)
1071  return true;
1072  else
1073  tables.push_back(a.get_attr_table(i));
1074  }
1075 
1076  bool it_does = false;
1077  for (vector<AttrTable*>::iterartor i = tables.begin(), e = tables.end(); it_does || i != e; ++i) {
1078  it_does = has_dap2_attributes(**i);
1079  }
1080 
1081  return it_does;
1082 #endif
1083 }
1084 
1092 bool
1094 {
1095  if (btp->get_attr_table().get_size() && has_dap2_attributes(btp->get_attr_table())) {
1096  return true;
1097  }
1098 
1099  Constructor *cons = dynamic_cast<Constructor *>(btp);
1100  if (cons) {
1101  Grid* grid = dynamic_cast<Grid*>(btp);
1102  if(grid){
1103  return has_dap2_attributes(grid->get_array());
1104  }
1105  else {
1106  for (Constructor::Vars_iter i = cons->var_begin(), e = cons->var_end(); i != e; i++) {
1107  if (has_dap2_attributes(*i)) return true;
1108  }
1109  }
1110  }
1111  return false;
1112 }
1113 
1123 static string four_spaces = " ";
1124 void print_var_das(ostream &out, BaseType *bt, string indent = "") {
1125 
1126  if (!has_dap2_attributes(bt))
1127  return;
1128 
1129  AttrTable attr_table = bt->get_attr_table();
1130  out << indent << add_space_encoding(bt->name()) << " {" << endl;
1131 
1132  Constructor *cnstrctr = dynamic_cast<Constructor *>(bt);
1133  if (cnstrctr) {
1134  Grid *grid = dynamic_cast<Grid *>(bt);
1135  if (grid) {
1136  Array *gridArray = grid->get_array();
1137  AttrTable arrayAT = gridArray->get_attr_table();
1138 
1139  if (has_dap2_attributes(gridArray))
1140  gridArray->get_attr_table().print(out, indent + four_spaces);
1141 #if 0
1142  // I dropped this because we don't want the MAP vectors showing up in the DAS
1143  // as children of a Grid (aka flatten the Grid bro) - ndp 5/25/18
1144  for (Grid::Map_iter mIter = grid->map_begin();
1145  mIter != grid->map_end(); ++mIter) {
1146  BaseType *currentMap = *mIter;
1147  if (has_dap2_attributes(currentMap))
1148  print_var_das(out, currentMap, indent + four_spaces);
1149  }
1150 #endif
1151  }
1152  else {
1153  attr_table.print(out, indent + four_spaces);
1154  Constructor::Vars_iter i = cnstrctr->var_begin();
1155  Constructor::Vars_iter e = cnstrctr->var_end();
1156  for (; i != e; i++) {
1157  // Only call print_var_das() if there really are attributes.
1158  // This is made complicated because while there might be none
1159  // for a particular var (*i), that var might be a ctor and its
1160  // descendant might have an attribute. jhrg 3/18/18
1161  if (has_dap2_attributes(*i))
1162  print_var_das(out, *i, indent + four_spaces);
1163  }
1164  }
1165  }
1166  else {
1167  attr_table.print(out, indent + four_spaces);
1168  }
1169 
1170  out << indent << "}" << endl;
1171 }
1172 
1181 void
1182 DDS::print_das(ostream &out)
1183 {
1184 #if 0
1185  string indent(" ");
1186  out << "Attributes {" << endl;
1187  for (Vars_citer i = vars.begin(); i != vars.end(); i++) {
1188  if (has_dap2_attributes(*i))
1189  print_var_das(out, *i, four_spaces);
1190  }
1191  // Print the global attributes at the end.
1192  d_attr.print(out,indent);
1193  out << "}" << endl;
1194 #endif
1195 
1196  auto_ptr<DAS> das(get_das());
1197 
1198  das->print(out);
1199 }
1200 
1210 DAS *
1212 {
1213  DAS *das = new DAS();
1214  get_das(das);
1215  return das;
1216 }
1217 
1223 static string
1224 get_unique_top_level_global_container_name(DAS *das)
1225 {
1226  // It's virtually certain that the TOP_LEVE... name will be unique. If so,
1227  // return the name. The code tests for a table to see if the name _should not_ be used.
1228  AttrTable *table = das->get_table(TOP_LEVEL_ATTRS_CONTAINER_NAME);
1229  if (!table)
1230  return TOP_LEVEL_ATTRS_CONTAINER_NAME;
1231 
1232  // ... but the default name might already be used
1233  unsigned int i = 0;
1234  string name;
1235  ostringstream oss;
1236  while (table) {
1237  oss.str(""); // reset to empty for the next suffix
1238  oss << "_" << ++i;
1239  if (!(i < UINT_MAX))
1240  throw InternalErr(__FILE__, __LINE__, "Cannot add top-level attributes to the DAS");
1241  name = TOP_LEVEL_ATTRS_CONTAINER_NAME + oss.str();
1242  table = das->get_table(name);
1243  }
1244 
1245  return name;
1246 }
1247 
1256  Constructor *cons = dynamic_cast<Constructor *>(bt);
1257  if (cons) {
1258  Grid *grid = dynamic_cast<Grid *>(bt);
1259  if(grid){
1260  Array *gridArray = grid->get_array();
1261  AttrTable arrayAT = gridArray->get_attr_table();
1262 
1263  for( AttrTable::Attr_iter atIter = arrayAT.attr_begin(); atIter!=arrayAT.attr_end(); ++atIter){
1264  AttrType type = arrayAT.get_attr_type(atIter);
1265  string childName = arrayAT.get_name(atIter);
1266  if (type == Attr_container){
1267  at->append_container( new AttrTable(*arrayAT.get_attr_table(atIter)), childName);
1268  }
1269  else {
1270  vector<string>* pAttrTokens = arrayAT.get_attr_vector(atIter);
1271  // append_attr makes a copy of the vector, so we don't have to do so here.
1272  at->append_attr(childName, AttrType_to_String(type), pAttrTokens);
1273  }
1274  }
1275 
1276  }
1277  else {
1278  for (Constructor::Vars_iter i = cons->var_begin(), e = cons->var_end(); i != e; i++) {
1279  if (has_dap2_attributes(*i)) {
1280  AttrTable *childAttrT = new AttrTable((*i)->get_attr_table());
1281  fillConstructorAttrTable(childAttrT, *i);
1282  at->append_container(childAttrT,(*i)->name());
1283  }
1284  }
1285  }
1286  }
1287 }
1288 
1289 void DDS::get_das(DAS *das)
1290 {
1291  for (Vars_citer i = vars.begin(); i != vars.end(); i++) {
1292  if (has_dap2_attributes(*i)) {
1293  AttrTable *childAttrT = new AttrTable((*i)->get_attr_table());
1294  fillConstructorAttrTable(childAttrT, *i);
1295  das->add_table((*i)->name(), childAttrT);
1296  }
1297  }
1298 
1299  // Used in the rare case we have global attributes not in a table.
1300  auto_ptr<AttrTable> global(new AttrTable);
1301 
1302  for (AttrTable::Attr_iter i = d_attr.attr_begin(); i != d_attr.attr_end(); ++i) {
1303  // It's possible, given the API and if the DDS was built from a DMR, that a
1304  // global attribute might not be a container; check for that.
1305  if (d_attr.get_attr_table(i)) {
1306  das->add_table(d_attr.get_name(i), new AttrTable(*(d_attr.get_attr_table(i))));
1307  }
1308  else {
1309  // This must be a top level attribute outside a container. jhrg 4/6/18
1310  global->append_attr(d_attr.get_name(i), d_attr.get_type(i), d_attr.get_attr_vector(i));
1311  }
1312  }
1313 
1314  // if any attributes were added to 'global,' add it to the DAS and take control of the pointer.
1315  if (global->get_size() > 0) {
1316  das->add_table(get_unique_top_level_global_container_name(das), global.get()); // What if this name is not unique?
1317  global.release();
1318  }
1319 }
1320 
1331 void
1333 {
1334  ostringstream oss;
1335  print_constrained(oss);
1336  fwrite(oss.str().data(), sizeof(char), oss.str().length(), out);
1337 }
1338 
1349 void
1351 {
1352  out << "Dataset {\n" ;
1353 
1354  for (Vars_citer i = vars.begin(); i != vars.end(); i++) {
1355  // for each variable, indent with four spaces, print a trailing
1356  // semicolon, do not print debugging information, print only
1357  // variables in the current projection.
1358  (*i)->print_decl(out, " ", true, false, true) ;
1359  }
1360 
1361  out << "} " << id2www(d_name) << ";\n" ;
1362 
1363  return;
1364 }
1365 
1377 void
1378 DDS::print_xml(FILE *out, bool constrained, const string &blob)
1379 {
1380  ostringstream oss;
1381  print_xml_writer(oss, constrained, blob);
1382  fwrite(oss.str().data(), 1, oss.str().length(), out);
1383 }
1384 
1396 void
1397 DDS::print_xml(ostream &out, bool constrained, const string &blob)
1398 {
1399  print_xml_writer(out, constrained, blob);
1400 }
1401 
1402 class VariablePrintXMLWriter : public unary_function<BaseType *, void>
1403 {
1404  XMLWriter &d_xml;
1405  bool d_constrained;
1406 public:
1407  VariablePrintXMLWriter(XMLWriter &xml, bool constrained)
1408  : d_xml(xml), d_constrained(constrained)
1409  {}
1410  void operator()(BaseType *bt)
1411  {
1412  bt->print_xml_writer(d_xml, d_constrained);
1413  }
1414 };
1415 
1432 void
1433 DDS::print_xml_writer(ostream &out, bool constrained, const string &blob)
1434 {
1435  XMLWriter xml(" ");
1436 
1437  // this is the old version of this method. It produced different output for
1438  // different version of DAP. We stopped using version numbers and use different
1439  // web api calls (DMR, DAP for DAP4 and DAS, DDS and DODS for DAP2) so the
1440  // dap version numbers are old and should not be used. There also seems to
1441  // be a bug where these version numbers change 'randomly' but which doesn't
1442  // show up in testing (or with valgrind or asan). jhrg 9/10/18
1443 #if 0
1444  // Stamp and repeat for these sections; trying to economize is makes it
1445  // even more confusing
1446  if (get_dap_major() >= 4) {
1447  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) "Group") < 0)
1448  throw InternalErr(__FILE__, __LINE__, "Could not write Group element");
1449  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name", (const xmlChar*)d_name.c_str()) < 0)
1450  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
1451 
1452  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "dapVersion", (const xmlChar*)get_dap_version().c_str()) < 0)
1453  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for dapVersion");
1454 
1455  if (!get_request_xml_base().empty()) {
1456  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xmlns:xml", (const xmlChar*)c_xml_namespace.c_str()) < 0)
1457  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns:xml");
1458 
1459  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xml:base", (const xmlChar*)get_request_xml_base().c_str()) < 0)
1460  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xml:base");
1461  }
1462  if (!get_namespace().empty()) {
1463  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xmlns", (const xmlChar*)get_namespace().c_str()) < 0)
1464  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns");
1465  }
1466  }
1467  else if (get_dap_major() == 3 && get_dap_minor() >= 2) {
1468  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) "Dataset") < 0)
1469  throw InternalErr(__FILE__, __LINE__, "Could not write Dataset element");
1470  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name", (const xmlChar*)d_name.c_str()) < 0)
1471  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
1472  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xmlns:xsi", (const xmlChar*)"http://www.w3.org/2001/XMLSchema-instance") < 0)
1473  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns:xsi");
1474 
1475  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xsi:schemaLocation", (const xmlChar*)c_dap_32_n_sl.c_str()) < 0)
1476  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns:schemaLocation");
1477 
1478  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xmlns:grddl", (const xmlChar*)"http://www.w3.org/2003/g/data-view#") < 0)
1479  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns:grddl");
1480 
1481  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "grddl:transformation", (const xmlChar*)grddl_transformation_dap32.c_str()) < 0)
1482  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns:transformation");
1483 
1484  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xmlns", (const xmlChar*)c_dap32_namespace.c_str()) < 0)
1485  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns");
1486  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xmlns:dap", (const xmlChar*)c_dap32_namespace.c_str()) < 0)
1487  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns:dap");
1488 
1489  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "dapVersion", (const xmlChar*)"3.2") < 0)
1490  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for dapVersion");
1491 
1492  if (!get_request_xml_base().empty()) {
1493  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xmlns:xml", (const xmlChar*)c_xml_namespace.c_str()) < 0)
1494  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns:xml");
1495 
1496  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xml:base", (const xmlChar*)get_request_xml_base().c_str()) < 0)
1497  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xml:base");
1498  }
1499  }
1500  else { // dap2
1501  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) "Dataset") < 0)
1502  throw InternalErr(__FILE__, __LINE__, "Could not write Dataset element");
1503  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name", (const xmlChar*)d_name.c_str()) < 0)
1504  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for d_name");
1505  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xmlns:xsi", (const xmlChar*)"http://www.w3.org/2001/XMLSchema-instance") < 0)
1506  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns:xsi");
1507 
1508  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xmlns", (const xmlChar*)c_dap20_namespace.c_str()) < 0)
1509  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns");
1510 
1511  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xsi:schemaLocation", (const xmlChar*)c_dap_20_n_sl.c_str()) < 0)
1512  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns:schemaLocation");
1513  }
1514 #endif
1515 
1516 #if DAP2_DDX
1517  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) "Dataset") < 0)
1518  throw InternalErr(__FILE__, __LINE__, "Could not write Dataset element");
1519  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name", (const xmlChar*)d_name.c_str()) < 0)
1520  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for d_name");
1521  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xmlns:xsi", (const xmlChar*)"http://www.w3.org/2001/XMLSchema-instance") < 0)
1522  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns:xsi");
1523 
1524  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xmlns", (const xmlChar*)c_dap20_namespace.c_str()) < 0)
1525  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns");
1526 
1527  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xsi:schemaLocation", (const xmlChar*)c_dap_20_n_sl.c_str()) < 0)
1528  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns:schemaLocation");
1529 #elif DAP3_2_DDX
1530  // This is the 'DAP 3.2' DDX response - now the only response libdap will return.
1531  // jhrg 9/10/18
1532  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) "Dataset") < 0)
1533  throw InternalErr(__FILE__, __LINE__, "Could not write Dataset element");
1534  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name", (const xmlChar*)d_name.c_str()) < 0)
1535  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
1536  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xmlns:xsi", (const xmlChar*)"http://www.w3.org/2001/XMLSchema-instance") < 0)
1537  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns:xsi");
1538 
1539  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xsi:schemaLocation", (const xmlChar*)c_dap_32_n_sl.c_str()) < 0)
1540  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns:schemaLocation");
1541 
1542  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xmlns:grddl", (const xmlChar*)"http://www.w3.org/2003/g/data-view#") < 0)
1543  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns:grddl");
1544 
1545  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "grddl:transformation", (const xmlChar*)grddl_transformation_dap32.c_str()) < 0)
1546  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns:transformation");
1547 
1548  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xmlns", (const xmlChar*)c_dap32_namespace.c_str()) < 0)
1549  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns");
1550  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xmlns:dap", (const xmlChar*)c_dap32_namespace.c_str()) < 0)
1551  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns:dap");
1552 
1553  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "dapVersion", (const xmlChar*)"3.2") < 0)
1554  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for dapVersion");
1555 
1556  if (!get_request_xml_base().empty()) {
1557  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xmlns:xml", (const xmlChar*)c_xml_namespace.c_str()) < 0)
1558  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns:xml");
1559 
1560  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xml:base", (const xmlChar*)get_request_xml_base().c_str()) < 0)
1561  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xml:base");
1562  }
1563 #else
1564 #error Must define DAP2_DDX or DAP3_2_DDX
1565 #endif
1566 
1567  // Print the global attributes
1568  d_attr.print_xml_writer(xml);
1569 
1570  // Print each variable
1571  for_each(var_begin(), var_end(), VariablePrintXMLWriter(xml, constrained));
1572 
1573  // As above, this method now onl returns the DAP 3.2 version of the DDX response.
1574  // jhrg 9/10/28
1575 #if 0
1576  // For DAP 3.2 and greater, use the new syntax and value. The 'blob' is
1577  // the CID of the MIME part that holds the data. For DAP2 (which includes
1578  // 3.0 and 3.1), the blob is an href. For DAP4, only write the CID if it's
1579  // given.
1580  if (get_dap_major() >= 4) {
1581  if (!blob.empty()) {
1582  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) "blob") < 0)
1583  throw InternalErr(__FILE__, __LINE__, "Could not write blob element");
1584  string cid = "cid:" + blob;
1585  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "href", (const xmlChar*) cid.c_str()) < 0)
1586  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for d_name");
1587  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
1588  throw InternalErr(__FILE__, __LINE__, "Could not end blob element");
1589  }
1590  }
1591  else if (get_dap_major() == 3 && get_dap_minor() >= 2) {
1592  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) "blob") < 0)
1593  throw InternalErr(__FILE__, __LINE__, "Could not write blob element");
1594  string cid = "cid:" + blob;
1595  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "href", (const xmlChar*) cid.c_str()) < 0)
1596  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for d_name");
1597  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
1598  throw InternalErr(__FILE__, __LINE__, "Could not end blob element");
1599  }
1600  else { // dap2
1601  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) "dataBLOB") < 0)
1602  throw InternalErr(__FILE__, __LINE__, "Could not write dataBLOB element");
1603  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "href", (const xmlChar*) "") < 0)
1604  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for d_name");
1605  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
1606  throw InternalErr(__FILE__, __LINE__, "Could not end dataBLOB element");
1607  }
1608 #endif
1609 
1610 #if DAP2_DDX
1611  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) "dataBLOB") < 0)
1612  throw InternalErr(__FILE__, __LINE__, "Could not write dataBLOB element");
1613  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "href", (const xmlChar*) "") < 0)
1614  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for d_name");
1615  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
1616  throw InternalErr(__FILE__, __LINE__, "Could not end dataBLOB element");
1617 #elif DAP3_2_DDX
1618  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) "blob") < 0)
1619  throw InternalErr(__FILE__, __LINE__, "Could not write blob element");
1620  string cid = "cid:" + blob;
1621  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "href", (const xmlChar*) cid.c_str()) < 0)
1622  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for d_name");
1623  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
1624  throw InternalErr(__FILE__, __LINE__, "Could not end blob element");
1625 
1626  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
1627  throw InternalErr(__FILE__, __LINE__, "Could not end Dataset element");
1628 #else
1629 #error Must define DAP2_DDX or DAP3_2_DDX
1630 #endif
1631 
1632  out << xml.get_doc();// << ends;// << endl;
1633 }
1634 
1648 void
1649 DDS::print_dmr(ostream &out, bool constrained)
1650 {
1651  if (get_dap_major() < 4)
1652  throw InternalErr(__FILE__, __LINE__, "Tried to print a DMR with DAP major version less than 4");
1653 
1654  XMLWriter xml(" ");
1655 
1656  // DAP4 wraps a dataset in a top-level Group element.
1657  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) "Group") < 0)
1658  throw InternalErr(__FILE__, __LINE__, "Could not write Group element");
1659 
1660  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xmlns:xml",
1661  (const xmlChar*) c_xml_namespace.c_str()) < 0)
1662  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns:xml");
1663 
1664  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xmlns:xsi", (const xmlChar*) c_xml_xsi.c_str())
1665  < 0)
1666  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns:xsi");
1667 
1668  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xsi:schemaLocation",
1669  (const xmlChar*) c_dap_40_n_sl.c_str()) < 0)
1670  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns:schemaLocation");
1671 
1672  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xmlns",
1673  (const xmlChar*) get_namespace().c_str()) < 0)
1674  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns");
1675 
1676  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "dapVersion",
1677  (const xmlChar*) get_dap_version().c_str()) < 0)
1678  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for dapVersion");
1679 
1680  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "dmrVersion", (const xmlChar*) get_dmr_version().c_str()) < 0)
1681  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for dapVersion");
1682 
1683  if (!get_request_xml_base().empty()) {
1684  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xml:base",
1685  (const xmlChar*) get_request_xml_base().c_str()) < 0)
1686  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xml:base");
1687  }
1688 
1689  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name", (const xmlChar*) d_name.c_str()) < 0)
1690  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
1691 
1692  // Print the global attributes
1693  d_attr.print_xml_writer(xml);
1694 
1695  // Print each variable
1696  for_each(var_begin(), var_end(), VariablePrintXMLWriter(xml, constrained));
1697 
1698  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
1699  throw InternalErr(__FILE__, __LINE__, "Could not end the top-level Group element");
1700 
1701  out << xml.get_doc();
1702 }
1703 
1704 // Used by DDS::send() when returning data from a function call.
1719 bool
1721 {
1722  // The dataset must have a d_name
1723  if (d_name == "") {
1724  cerr << "A dataset must have a d_name" << endl;
1725  return false;
1726  }
1727 
1728  string msg;
1729  if (!unique_names(vars, d_name, "Dataset", msg))
1730  return false;
1731 
1732  if (all)
1733  for (Vars_iter i = vars.begin(); i != vars.end(); i++)
1734  if (!(*i)->check_semantics(msg, true))
1735  return false;
1736 
1737  return true;
1738 }
1739 
1763 bool
1764 DDS::mark(const string &n, bool state)
1765 {
1766 #if 0
1767  // TODO use auto_ptr
1768  BaseType::btp_stack *s = new BaseType::btp_stack;
1769 #endif
1770 
1771  auto_ptr<BaseType::btp_stack> s(new BaseType::btp_stack);
1772 
1773  DBG2(cerr << "DDS::mark: Looking for " << n << endl);
1774 
1775  BaseType *variable = var(n, s.get());
1776  if (!variable) {
1777  throw Error(malformed_expr, "Could not find variable " + n);
1778 #if 0
1779  DBG2(cerr << "Could not find variable " << n << endl);
1780 #if 0
1781  delete s; s = 0;
1782 #endif
1783  return false;
1784 #endif
1785  }
1786  variable->set_send_p(state);
1787 
1788  DBG2(cerr << "DDS::mark: Set variable " << variable->d_name()
1789  << " (a " << variable->type_name() << ")" << endl);
1790 
1791  // Now check the btp_stack and run BaseType::set_send_p for every
1792  // BaseType pointer on the stack. Using BaseType::set_send_p() will
1793  // set the property for a Constructor but not its contained variables
1794  // which preserves the semantics of projecting just one field.
1795  while (!s->empty()) {
1796  s->top()->BaseType::set_send_p(state);
1797 
1798  DBG2(cerr << "DDS::mark: Set variable " << s->top()->d_name()
1799  << " (a " << s->top()->type_name() << ")" << endl);
1800 
1801  string parent_name = (s->top()->get_parent()) ? s->top()->get_parent()->name(): "none";
1802  string parent_type = (s->top()->get_parent()) ? s->top()->get_parent()->type_name(): "none";
1803  DBG2(cerr << "DDS::mark: Parent variable " << parent_name << " (a " << parent_type << ")" << endl);
1804 
1805  s->pop();
1806  }
1807 
1808 #if 0
1809  delete s; s = 0;
1810 #endif
1811 
1812  return true;
1813 }
1814 
1820 void
1821 DDS::mark_all(bool state)
1822 {
1823  for (Vars_iter i = vars.begin(); i != vars.end(); i++)
1824  (*i)->set_send_p(state);
1825 }
1826 
1834 void
1835 DDS::dump(ostream &strm) const
1836 {
1837  strm << DapIndent::LMarg << "DDS::dump - ("
1838  << (void *)this << ")" << endl ;
1839  DapIndent::Indent() ;
1840  strm << DapIndent::LMarg << "d_name: " << d_name << endl ;
1841  strm << DapIndent::LMarg << "filename: " << d_filename << endl ;
1842  strm << DapIndent::LMarg << "protocol major: " << d_dap_major << endl;
1843  strm << DapIndent::LMarg << "protocol minor: " << d_dap_minor << endl;
1844  strm << DapIndent::LMarg << "factory: " << (void *)d_factory << endl ;
1845 
1846  strm << DapIndent::LMarg << "global attributes:" << endl ;
1847  DapIndent::Indent() ;
1848  d_attr.dump(strm) ;
1849  DapIndent::UnIndent() ;
1850 
1851  if (vars.size()) {
1852  strm << DapIndent::LMarg << "vars:" << endl ;
1853  DapIndent::Indent() ;
1854  Vars_citer i = vars.begin() ;
1855  Vars_citer ie = vars.end() ;
1856  for (; i != ie; i++) {
1857  (*i)->dump(strm) ;
1858  }
1859  DapIndent::UnIndent() ;
1860  }
1861  else {
1862  strm << DapIndent::LMarg << "vars: none" << endl ;
1863  }
1864 
1865  DapIndent::UnIndent() ;
1866 }
1867 
1868 } // namespace libdap
virtual string name() const
Returns the name of the class instance.
Definition: BaseType.cc:320
-
AttrTable * get_table(AttrTable::Attr_iter &i)
Returns the referenced variable attribute table.
Definition: DAS.cc:179
-
void print(FILE *out)
Print the entire DDS to the specified file.
Definition: DDS.cc:1023
-
virtual Attr_iter attr_end()
Definition: AttrTable.cc:719
-
void insert_var_nocopy(Vars_iter i, BaseType *ptr)
Definition: DDS.cc:862
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
Vars_iter get_vars_iter(int i)
Get an iterator.
Definition: DDS.cc:826
-
string AttrType_to_String(const AttrType at)
Definition: AttrTable.cc:97
-
void insert_var(Vars_iter i, BaseType *ptr)
Insert a variable before the referenced element.
Definition: DDS.cc:845
-
Vars_iter var_begin()
Return an iterator to the first variable.
Definition: DDS.cc:799
-
virtual void print_xml_writer(XMLWriter &xml, bool constrained=false)
Definition: BaseType.cc:1134
-
string add_space_encoding(const string &s)
Definition: AttrTable.cc:78
-
virtual string get_name() const
Get the name of this attribute table.
Definition: AttrTable.cc:238
-
virtual AttrTable * add_table(const string &name, AttrTable *at)
Adds a variable attribute table to the DAS or the current dataset container attribute table...
Definition: DAS.cc:209
-
DDS(BaseTypeFactory *factory, const string &name="")
Definition: DDS.cc:204
-
int get_request_size(bool constrained)
Get the estimated response size.
Definition: DDS.cc:565
-
STL namespace.
-
BaseType * var(const string &n, BaseType::btp_stack &s)
Definition: DDS.cc:692
-
virtual void transfer_attributes(DAS *das)
Definition: DDS.cc:286
-
string filename() const
Definition: DDS.cc:387
-
void print_xml(FILE *out, bool constrained, const string &blob="")
Definition: DDS.cc:1378
-
virtual void print(FILE *out, string pad=" ", bool dereference=false)
Prints the attribute table.
Definition: AttrTable.cc:1243
-
Map_iter map_end()
Definition: Grid.cc:537
-
void print_xml_writer(ostream &out, bool constrained, const string &blob="")
Definition: DDS.cc:1433
-
void add_var_nocopy(BaseType *bt)
Adds the variable to the DDS.
Definition: DDS.cc:613
-
Holds a structure (aggregate) type.
Definition: Structure.h:83
-
Vars_riter var_rend()
Return a reverse iterator.
Definition: DDS.cc:817
-
string get_dataset_name() const
Definition: DDS.cc:356
-
int num_var()
Returns the number of variables in the DDS.
Definition: DDS.cc:873
-
DAS * get_das()
Get a DAS object.
Definition: DDS.cc:1211
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
bool mark(const string &name, bool state)
Mark the send_p flag of the named variable to state.
Definition: DDS.cc:1764
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
void parse(string fname)
Parse a DDS from a file with the given d_name.
Definition: DDS.cc:942
-
Map_iter map_begin()
Returns an iterator referencing the first Map vector.
Definition: Grid.cc:525
-
virtual BaseType * var(const string &name="", bool exact_match=true, btp_stack *s=0)
Returns a pointer to a member of a constructor class.
Definition: BaseType.cc:758
-
virtual bool is_vector_type() const
Returns true if the instance is a vector (i.e., array) type variable.
Definition: BaseType.cc:402
-
virtual void set_send_p(bool state)
Definition: BaseType.cc:568
-
virtual bool is_constructor_type() const
Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable...
Definition: BaseType.cc:412
-
void mark_all(bool state)
Definition: DDS.cc:1821
-
virtual AttrTable * append_container(const string &name)
Add a container to the attribute table.
Definition: AttrTable.cc:410
- -
virtual AttrTable * get_attr_table(const string &name)
Get an attribute container.
Definition: AttrTable.cc:607
- -
void print_das(ostream &out)
write the DAS response given the attribute information in the DDS
Definition: DDS.cc:1182
-
Holds the Grid data type.
Definition: Grid.h:122
-
void print_dmr(ostream &out, bool constrained)
Print the DAP4 DMR object using a DDS.
Definition: DDS.cc:1649
-
virtual AttrTable & get_attr_table()
Definition: DDS.cc:372
-
BaseType * get_var_index(int i)
Get a variable.
Definition: DDS.cc:835
-
bool check_semantics(bool all=false)
Check the semantics of each of the variables represented in the DDS.
Definition: DDS.cc:1720
-
Structure * container()
Definition: DDS.cc:547
-
Array * get_array()
Returns the Grid Array. This method returns the array using an Array*, so no cast is required...
Definition: Grid.cc:518
-
int get_dap_major() const
Get the DAP major version as sent by the client.
Definition: DDS.h:266
-
string get_request_xml_base() const
Get the URL that will return this DDS/DDX/DataThing.
Definition: DDS.h:286
-
string container_name()
Definition: DDS.cc:511
-
std::string get_error_message() const
Definition: Error.cc:278
-
virtual AttrTable * get_top_level_attributes()
Returns the top most set of attributes.
Definition: DAS.h:166
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: DDS.cc:1835
-
virtual Attr_iter attr_begin()
Definition: AttrTable.cc:711
-
virtual string container_name() const
Returns the name of the current attribute container when multiple files used to build this DAS...
Definition: DAS.h:149
-
virtual BaseType * ptr_duplicate()=0
-
string get_namespace() const
Get the namespace associated with the DDS - likely set only by DDX responses.
Definition: DDS.h:292
-
string www2id(const string &in, const string &escape, const string &except)
Definition: escaping.cc:220
-
bool has_dap2_attributes(AttrTable &a)
Definition: DDS.cc:1053
- -
Vars_iter var_end()
Return an iterator.
Definition: DDS.cc:811
-
void tag_nested_sequences()
Traverse DDS, set Sequence leaf nodes.
Definition: DDS.cc:930
-
virtual AttrTable & get_attr_table()
Definition: BaseType.cc:582
-
void set_dap_minor(int p)
Definition: DDS.cc:423
-
virtual unsigned int append_attr(const string &name, const string &type, const string &value)
Add an attribute to the table.
Definition: AttrTable.cc:307
-
void set_dataset_name(const string &n)
Definition: DDS.cc:363
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
libdap base object for common functionality of libdap objects
Definition: DapObj.h:50
-
Pass parameters by reference to a parser.
Definition: parser.h:68
-
virtual AttrType get_attr_type(const string &name)
Get the type of an attribute.
Definition: AttrTable.cc:621
-
void del_var(const string &n)
Removes a variable from the DDS.
Definition: DDS.cc:636
-
virtual string type_name() const
Returns the type of the class instance as a string.
Definition: BaseType.cc:379
-
Vars_iter var_begin()
Definition: Constructor.cc:356
-
Vars_riter var_rbegin()
Return a reverse iterator.
Definition: DDS.cc:805
-
Vars_iter var_end()
Definition: Constructor.cc:364
-
virtual vector< string > * get_attr_vector(const string &name)
Get a vector-valued attribute.
Definition: AttrTable.cc:653
-
Hold attribute data for a DAP2 dataset.
Definition: DAS.h:121
- -
A class for error processing.
Definition: Error.h:92
-
virtual unsigned int get_size() const
Get the number of entries in this attribute table.
Definition: AttrTable.cc:231
-
void fillConstructorAttrTable(AttrTable *at, BaseType *bt)
Recursive helper function for Building DAS entries for Constructor types.
Definition: DDS.cc:1255
-
int get_dap_minor() const
Get the DAP minor version as sent by the client.
Definition: DDS.h:268
-
void set_dap_major(int p)
Definition: DDS.cc:404
-
A multidimensional array of identical data types.
Definition: Array.h:112
-
void print_constrained(FILE *out)
Print a constrained DDS to the specified file.
Definition: DDS.cc:1332
-
AttrType
Definition: AttrTable.h:81
-
void set_dap_version(const string &version_string="2.0")
Definition: DDS.cc:440
-
string id2www(string in, const string &allowable)
Definition: escaping.cc:153
-
void add_var(BaseType *bt)
Adds a copy of the variable to the DDS. Using the ptr_duplicate() method, perform a deep copy on the ...
Definition: DDS.cc:586
-
-
- - - - diff --git a/html/DDS_8h_source.html b/html/DDS_8h_source.html deleted file mode 100644 index b4e5cf8b8..000000000 --- a/html/DDS_8h_source.html +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - - -libdap: DDS.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
DDS.h
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2002,2003 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 // (c) COPYRIGHT URI/MIT 1994-1999
26 // Please read the full copyright statement in the file COPYRIGHT_URI.
27 //
28 // Authors:
29 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
30 
31 // Provide access to the DDS. This class is used to parse DDS text files, to
32 // produce a printed representation of the in-memory variable table, and to
33 // update the table on a per-variable basis.
34 //
35 // jhrg 9/8/94
36 
37 #ifndef _dds_h
38 #define _dds_h 1
39 
40 #include <cstdio>
41 #include <iostream>
42 #include <string>
43 #include <vector>
44 
45 #ifndef _basetype_h
46 #include "BaseType.h"
47 #endif
48 
49 #ifndef _constructor_h
50 #include "Constructor.h"
51 #endif
52 
53 #ifndef base_type_factory_h
54 #include "BaseTypeFactory.h"
55 #endif
56 
57 #ifndef _das_h
58 #include "DAS.h"
59 #endif
60 
61 #ifndef A_DapObj_h
62 #include "DapObj.h"
63 #endif
64 
65 #if 0
66 #ifndef KEYWORDS_H_
67 #include "Keywords2.h"
68 #endif
69 #endif
70 
71 #ifndef XMLWRITER_H_
72 #include "XMLWriter.h"
73 #endif
74 
75 namespace libdap
76 {
77 
78 bool has_dap2_attributes(BaseType *btp);
79 bool has_dap2_attributes(AttrTable &a);
80 
183 class DDS : public DapObj
184 {
185 private:
186  BaseTypeFactory *d_factory;
187 
188  string d_name; // The dataset d_name
189  string d_filename; // File d_name (or other OS identifier) for
190  string d_container_name; // d_name of container structure
191  Structure *d_container; // current container for container d_name
192  // dataset or part of dataset.
193 
194  int d_dap_major; // The protocol major version number
195  int d_dap_minor; // ... and minor version number
196  string d_dap_version; // String version of the protocol
197  string d_request_xml_base;
198  string d_namespace;
199 
200  AttrTable d_attr; // Global attributes.
201 
202  vector<BaseType *> vars; // Variables at the top level
203 
204  int d_timeout; // alarm time in seconds. If greater than
205  // zero, raise the alarm signal if more than
206  // d_timeout seconds are spent reading data.
207 #if 0
208  Keywords d_keywords; // Holds keywords parsed from the CE
209 #endif
210 
211  long d_max_response_size_kb; // In bytes...
212 
213  friend class DDSTest;
214 
215 protected:
216  void duplicate(const DDS &dds);
217  BaseType *leaf_match(const string &name, BaseType::btp_stack *s = 0);
218  BaseType *exact_match(const string &name, BaseType::btp_stack *s = 0);
219 
220 public:
221  typedef std::vector<BaseType *>::const_iterator Vars_citer ;
222  typedef std::vector<BaseType *>::iterator Vars_iter ;
223  typedef std::vector<BaseType *>::reverse_iterator Vars_riter ;
224 
225  DDS(BaseTypeFactory *factory, const string &name = "");
226  DDS(BaseTypeFactory *factory, const string &name, const string &version);
227  DDS(const DDS &dds);
228 
229  virtual ~DDS();
230 
231  DDS & operator=(const DDS &rhs);
232 
233  virtual void transfer_attributes(DAS *das);
234 
235  string get_dataset_name() const;
236  void set_dataset_name(const string &n);
237 
243  {
244  return d_factory;
245  }
246 
254  {
255  BaseTypeFactory *t = d_factory;
256  d_factory = factory;
257  return t;
258  }
259 
260  virtual AttrTable &get_attr_table();
261 
262  string filename() const;
263  void filename(const string &fn);
264 
266  int get_dap_major() const { return d_dap_major; }
268  int get_dap_minor() const { return d_dap_minor; }
269 
270  void set_dap_version(const string &version_string = "2.0");
271  string get_dap_version() const { return d_dap_version; }
272  string get_dmr_version() const { return "1.0"; }
273 
275  void set_dap_major(int p);
277  void set_dap_minor(int p);
279  void set_dap_version(double d);
280 
281 #if 0
282  Keywords &get_keywords() {return d_keywords;}
283 #endif
284 
286  string get_request_xml_base() const { return d_request_xml_base; }
287 
289  void set_request_xml_base(const string &xb) { d_request_xml_base = xb; }
290 
292  string get_namespace() const { return d_namespace; }
293 
295  void set_namespace(const string &ns) { d_namespace = ns; }
296 
298  long get_response_limit() { return d_max_response_size_kb; }
299 
303  void set_response_limit(long size) { d_max_response_size_kb = size * 1024; }
304 
306  int get_request_size(bool constrained);
307 
308  string container_name() ;
309  void container_name( const string &cn ) ;
310  Structure *container() ;
311 
312  void add_var(BaseType *bt);
313  void add_var_nocopy(BaseType *bt);
314 
316  void del_var(const string &n);
317 
318  BaseType *var(const string &n, BaseType::btp_stack &s);
319  BaseType *var(const string &n, BaseType::btp_stack *s = 0);
320  int num_var();
321 
323  Vars_iter var_begin();
324 #if 0
325  Vars_citer var_cbegin() const { return vars.cbegin(); }
327 #endif
328  Vars_riter var_rbegin();
331  Vars_iter var_end();
332 #if 0
333  Vars_citer var_cend() const { return vars.cend(); }
335 #endif
336  Vars_riter var_rend();
339  Vars_iter get_vars_iter(int i);
341  BaseType *get_var_index(int i);
343  void insert_var(Vars_iter i, BaseType *ptr);
344  void insert_var_nocopy(Vars_iter i, BaseType *ptr);
346  void del_var(Vars_iter i);
348  void del_var(Vars_iter i1, Vars_iter i2);
349 
354  void timeout_on();
356  void timeout_off();
357  void set_timeout(int t);
358  int get_timeout();
360 
361  // These parse the DAP2 curly-brace document and make a C++ object.
362  void parse(string fname);
363  void parse(int fd);
364  void parse(FILE *in = stdin);
365 
366  // These print the Binary object in either the curly-brace or XML reps
367  void print(FILE *out);
368  void print_constrained(FILE *out);
369  void print_xml(FILE *out, bool constrained, const string &blob = "");
370 
371  // Same as above, but using C++ i/o streams
372  void print(ostream &out);
373  void print_constrained(ostream &out);
374  void print_xml(ostream &out, bool constrained, const string &blob = "");
375 
376  // Print the XML using libxml2; the other print_xml methods use this impl.
377  void print_xml_writer(ostream &out, bool constrained, const string &blob = "");
378 
379  // Print the DAP4 DMR 'object'
380  void print_dmr(ostream &out, bool constrained);
381 
382  void print_das(ostream &out);
383  DAS *get_das();
384  void get_das(DAS *das);
385 
386  void mark_all(bool state);
387  bool mark(const string &name, bool state);
388  bool check_semantics(bool all = false);
389 
390  void tag_nested_sequences();
391 
392  virtual void dump(ostream &strm) const ;
393 };
394 
395 } // namespace libdap
396 
397 #endif // _dds_h
void print(FILE *out)
Print the entire DDS to the specified file.
Definition: DDS.cc:1023
-
void insert_var_nocopy(Vars_iter i, BaseType *ptr)
Definition: DDS.cc:862
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
Vars_iter get_vars_iter(int i)
Get an iterator.
Definition: DDS.cc:826
-
void set_response_limit(long size)
Definition: DDS.h:303
-
void insert_var(Vars_iter i, BaseType *ptr)
Insert a variable before the referenced element.
Definition: DDS.cc:845
-
Vars_iter var_begin()
Return an iterator to the first variable.
Definition: DDS.cc:799
-
long get_response_limit()
Get the maximum response size, in Bytes. Zero indicates no limit.
Definition: DDS.h:298
-
DDS(BaseTypeFactory *factory, const string &name="")
Definition: DDS.cc:204
-
int get_request_size(bool constrained)
Get the estimated response size.
Definition: DDS.cc:565
-
BaseType * var(const string &n, BaseType::btp_stack &s)
Definition: DDS.cc:692
-
virtual void transfer_attributes(DAS *das)
Definition: DDS.cc:286
-
string filename() const
Definition: DDS.cc:387
-
void print_xml(FILE *out, bool constrained, const string &blob="")
Definition: DDS.cc:1378
-
void print_xml_writer(ostream &out, bool constrained, const string &blob="")
Definition: DDS.cc:1433
-
void add_var_nocopy(BaseType *bt)
Adds the variable to the DDS.
Definition: DDS.cc:613
-
Holds a structure (aggregate) type.
Definition: Structure.h:83
-
Vars_riter var_rend()
Return a reverse iterator.
Definition: DDS.cc:817
-
string get_dataset_name() const
Definition: DDS.cc:356
-
int num_var()
Returns the number of variables in the DDS.
Definition: DDS.cc:873
-
DAS * get_das()
Get a DAS object.
Definition: DDS.cc:1211
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
bool mark(const string &name, bool state)
Mark the send_p flag of the named variable to state.
Definition: DDS.cc:1764
-
void parse(string fname)
Parse a DDS from a file with the given d_name.
Definition: DDS.cc:942
- -
void mark_all(bool state)
Definition: DDS.cc:1821
- - -
void print_das(ostream &out)
write the DAS response given the attribute information in the DDS
Definition: DDS.cc:1182
-
void print_dmr(ostream &out, bool constrained)
Print the DAP4 DMR object using a DDS.
Definition: DDS.cc:1649
-
virtual AttrTable & get_attr_table()
Definition: DDS.cc:372
-
BaseType * get_var_index(int i)
Get a variable.
Definition: DDS.cc:835
-
bool check_semantics(bool all=false)
Check the semantics of each of the variables represented in the DDS.
Definition: DDS.cc:1720
-
Structure * container()
Definition: DDS.cc:547
-
int get_dap_major() const
Get the DAP major version as sent by the client.
Definition: DDS.h:266
-
string get_request_xml_base() const
Get the URL that will return this DDS/DDX/DataThing.
Definition: DDS.h:286
-
string container_name()
Definition: DDS.cc:511
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: DDS.cc:1835
-
string get_namespace() const
Get the namespace associated with the DDS - likely set only by DDX responses.
Definition: DDS.h:292
-
BaseTypeFactory * set_factory(BaseTypeFactory *factory)
Definition: DDS.h:253
-
bool has_dap2_attributes(AttrTable &a)
Definition: DDS.cc:1053
-
Vars_iter var_end()
Return an iterator.
Definition: DDS.cc:811
-
void set_namespace(const string &ns)
Set the namespace for this DDS/DDX object/response.
Definition: DDS.h:295
-
void tag_nested_sequences()
Traverse DDS, set Sequence leaf nodes.
Definition: DDS.cc:930
-
void set_dap_minor(int p)
Definition: DDS.cc:423
-
void set_dataset_name(const string &n)
Definition: DDS.cc:363
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
libdap base object for common functionality of libdap objects
Definition: DapObj.h:50
-
void del_var(const string &n)
Removes a variable from the DDS.
Definition: DDS.cc:636
-
Vars_riter var_rbegin()
Return a reverse iterator.
Definition: DDS.cc:805
-
Hold attribute data for a DAP2 dataset.
Definition: DAS.h:121
-
BaseTypeFactory * get_factory() const
Definition: DDS.h:242
-
int get_dap_minor() const
Get the DAP minor version as sent by the client.
Definition: DDS.h:268
-
void set_dap_major(int p)
Definition: DDS.cc:404
-
void print_constrained(FILE *out)
Print a constrained DDS to the specified file.
Definition: DDS.cc:1332
-
void set_dap_version(const string &version_string="2.0")
Definition: DDS.cc:440
-
void add_var(BaseType *bt)
Adds a copy of the variable to the DDS. Using the ptr_duplicate() method, perform a deep copy on the ...
Definition: DDS.cc:586
-
void set_request_xml_base(const string &xb)
Definition: DDS.h:289
-
-
- - - - diff --git a/html/DDXExceptions_8h_source.html b/html/DDXExceptions_8h_source.html deleted file mode 100644 index 31a1915b3..000000000 --- a/html/DDXExceptions_8h_source.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -libdap: DDXExceptions.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
DDXExceptions.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef ddx_exceptions_h
27 #define ddx_exceptions_h
28 
29 #ifndef _error_h
30 #include "Error.h"
31 #endif
32 
33 namespace libdap
34 {
35 
37 class DDXParseFailed : public Error
38 {
39 public:
40  DDXParseFailed() : Error("The DDX response document parse failed.")
41  {}
42  DDXParseFailed(const string &msg) :
43  Error(string("The DDX response document parse failed: ") + msg)
44  {}
45 };
46 
47 } // namespace libdap
48 
49 #endif // ddx_exceptions_h
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- -
A class for error processing.
Definition: Error.h:92
-
-
- - - - diff --git a/html/DDXParserSAX2_8cc_source.html b/html/DDXParserSAX2_8cc_source.html deleted file mode 100644 index 165dc6cba..000000000 --- a/html/DDXParserSAX2_8cc_source.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - -libdap: DDXParserSAX2.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
DDXParserSAX2.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #include "config.h"
27 
28 //#define DODS_DEBUG 1
29 //#define DODS_DEBUG2 1
30 
31 #include <cstring>
32 #include <cstdarg>
33 
34 #include "BaseType.h"
35 #include "Byte.h"
36 #include "Int16.h"
37 #include "UInt16.h"
38 #include "Int32.h"
39 #include "UInt32.h"
40 #include "Float32.h"
41 #include "Float64.h"
42 #include "Str.h"
43 #include "Url.h"
44 #include "Array.h"
45 #include "Structure.h"
46 #include "Sequence.h"
47 #include "Grid.h"
48 
49 #include "DDXParserSAX2.h"
50 
51 #include "util.h"
52 #include "mime_util.h"
53 #include "debug.h"
54 
55 namespace libdap {
56 
57 #if defined(DODS_DEBUG) || defined(DODS_DEUG2)
58 static const char *states[] =
59  {
60  "start",
61 
62  "dataset",
63 
64  "attribute_container",
65  "attribute",
66  "attribute_value",
67  "other_xml_attribute",
68 
69  "alias",
70 
71  "simple_type",
72 
73  "array",
74  "dimension",
75 
76  "grid",
77  "map",
78 
79  "structure",
80  "sequence",
81 
82  "blob href",
83 
84  "unknown",
85  "error"
86  };
87 #endif
88 // Glue the BaseTypeFactory to the enum-based factory defined statically
89 // here.
90 
91 BaseType *DDXParser::factory(Type t, const string & name)
92 {
93  switch (t) {
94  case dods_byte_c:
95  return d_factory->NewByte(name);
96 
97  case dods_int16_c:
98  return d_factory->NewInt16(name);
99 
100  case dods_uint16_c:
101  return d_factory->NewUInt16(name);
102 
103  case dods_int32_c:
104  return d_factory->NewInt32(name);
105 
106  case dods_uint32_c:
107  return d_factory->NewUInt32(name);
108 
109  case dods_float32_c:
110  return d_factory->NewFloat32(name);
111 
112  case dods_float64_c:
113  return d_factory->NewFloat64(name);
114 
115  case dods_str_c:
116  return d_factory->NewStr(name);
117 
118  case dods_url_c:
119  return d_factory->NewUrl(name);
120 
121  case dods_array_c:
122  return d_factory->NewArray(name);
123 
124  case dods_structure_c:
125  return d_factory->NewStructure(name);
126 
127  case dods_sequence_c:
128  return d_factory->NewSequence(name);
129 
130  case dods_grid_c:
131  return d_factory->NewGrid(name);
132 
133  default:
134  return 0;
135  }
136 }
137 
138 static bool is_not(const char *name, const char *tag)
139 {
140  return strcmp(name, tag) != 0;
141 }
142 
143 void DDXParser::set_state(DDXParser::ParseState state)
144 {
145  s.push(state);
146 }
147 
148 DDXParser::ParseState DDXParser::get_state() const
149 {
150  return s.top();
151 }
152 
153 void DDXParser::pop_state()
154 {
155  s.pop();
156 }
157 
161 void DDXParser::transfer_xml_attrs(const xmlChar **attributes, int nb_attributes)
162 {
163  if (!attribute_table.empty())
164  attribute_table.clear(); // erase old attributes
165 
166  unsigned int index = 0;
167  for (int i = 0; i < nb_attributes; ++i, index += 5) {
168  // Make a value using the attribute name and the prefix, namespace URI
169  // and the value. The prefix might be null.
170  attribute_table.insert(map<string, XMLAttribute>::value_type(
171  string((const char *)attributes[index]),
172  XMLAttribute(attributes + index + 1)));
173 
174  DBG(cerr << "Attribute '" << (const char *)attributes[index] << "': "
175  << attribute_table[(const char *)attributes[index]].value << endl);
176  }
177 }
178 
179 void DDXParser::transfer_xml_ns(const xmlChar **namespaces, int nb_namespaces)
180 {
181  for (int i = 0; i < nb_namespaces; ++i ) {
182  // make a value with the prefix and namespace URI. The prefix might be
183  // null.
184  namespace_table.insert(map<string,string>::value_type(
185  namespaces[i*2] != 0 ? (const char *)namespaces[i*2] : "",
186  (const char *)namespaces[i*2+1]));
187  }
188 }
189 
194 bool DDXParser::check_required_attribute(const string & attr)
195 {
196  map < string, XMLAttribute >::iterator i = attribute_table.find(attr);
197  if (i == attribute_table.end())
198  ddx_fatal_error(this, "Required attribute '%s' not found.",
199  attr.c_str());
200  return true;
201 }
202 
208 bool DDXParser::check_attribute(const string & attr)
209 {
210  return (attribute_table.find(attr) != attribute_table.end());
211 }
212 
221 void DDXParser::process_attribute_element(const xmlChar **attrs, int nb_attributes)
222 {
223  // These methods set the state to parser_error if a problem is found.
224  transfer_xml_attrs(attrs, nb_attributes);
225 
226  bool error = !(check_required_attribute(string("name"))
227  && check_required_attribute(string("type")));
228  if (error)
229  return;
230 
231  if (attribute_table["type"].value == "Container") {
232  set_state(inside_attribute_container);
233 
234  AttrTable *child;
235  AttrTable *parent = at_stack.top();
236 
237  child = parent->append_container(attribute_table["name"].value);
238  at_stack.push(child); // save.
239  DBG2(cerr << "Pushing at" << endl);
240  }
241  else if (attribute_table["type"].value == "OtherXML") {
242  set_state(inside_other_xml_attribute);
243 
244  dods_attr_name = attribute_table["name"].value;
245  dods_attr_type = attribute_table["type"].value;
246  }
247  else {
248  set_state(inside_attribute);
249  // *** Modify parser. Add a special state for inside OtherXML since it
250  // does not use the <value> element.
251 
252  dods_attr_name = attribute_table["name"].value;
253  dods_attr_type = attribute_table["type"].value;
254  }
255 }
256 
260 void DDXParser::process_attribute_alias(const xmlChar **attrs, int nb_attributes)
261 {
262  transfer_xml_attrs(attrs, nb_attributes);
263  if (check_required_attribute(string("name"))
264  && check_required_attribute(string("attribute"))) {
265  set_state(inside_alias);
266  at_stack.top()->attr_alias(attribute_table["name"].value,
267  attribute_table["attribute"].value);
268  }
269 }
270 
278 void DDXParser::process_variable(Type t, ParseState s, const xmlChar **attrs,
279  int nb_attributes)
280 {
281  transfer_xml_attrs(attrs, nb_attributes);
282 
283  set_state(s);
284 
285  if (bt_stack.top()->type() == dods_array_c
286  || check_required_attribute("name")) { // throws on error/false
287  BaseType *btp = factory(t, attribute_table["name"].value);
288  if (!btp) {
289  ddx_fatal_error(this, "Internal parser error; could not instantiate the variable '%s'.",
290  attribute_table["name"].value.c_str());
291  }
292  else {
293  // Only run this code if btp is not null! jhrg 9/14/15
294  // Once we make the new variable, we not only load it on to the
295  // BaseType stack, we also load its AttrTable on the AttrTable stack.
296  // The attribute processing software always operates on the AttrTable
297  // at the top of the AttrTable stack (at_stack).
298  bt_stack.push(btp);
299  at_stack.push(&btp->get_attr_table());
300  }
301  }
302 }
303 
307 void DDXParser::process_dimension(const xmlChar **attrs, int nb_attributes)
308 {
309  transfer_xml_attrs(attrs, nb_attributes);
310  if (check_required_attribute(string("size"))) {
311  set_state(inside_dimension);
312  Array *ap = dynamic_cast < Array * >(bt_stack.top());
313  if (!ap) {
314  ddx_fatal_error(this, "Parse error: Expected an array variable.");
315  return;
316  }
317 
318  ap->append_dim(atoi(attribute_table["size"].value.c_str()),
319  attribute_table["name"].value);
320  }
321 }
322 
325 void DDXParser::process_blob(const xmlChar **attrs, int nb_attributes)
326 {
327  transfer_xml_attrs(attrs, nb_attributes);
328  if (check_required_attribute(string("href"))) {
329  set_state(inside_blob_href);
330  *blob_href = attribute_table["href"].value;
331  }
332 }
333 
340 inline bool
341 DDXParser::is_attribute_or_alias(const char *name, const xmlChar **attrs,
342  int nb_attributes)
343 {
344  if (strcmp(name, "Attribute") == 0) {
345  process_attribute_element(attrs, nb_attributes);
346  // next state: inside_attribtue or inside_attribute_container
347  return true;
348  }
349  else if (strcmp(name, "Alias") == 0) {
350  process_attribute_alias(attrs, nb_attributes);
351  // next state: inside_alias
352  return true;
353  }
354 
355  return false;
356 }
357 
363 inline bool DDXParser::is_variable(const char *name, const xmlChar **attrs,
364  int nb_attributes)
365 {
366  Type t = get_type(name);
367  //if ((t = is_simple_type(name)) != dods_null_c) {
368  if (is_simple_type(t)) {
369  process_variable(t, inside_simple_type, attrs, nb_attributes);
370  return true;
371  }
372  else if (strcmp(name, "Array") == 0) {
373  process_variable(dods_array_c, inside_array, attrs, nb_attributes);
374  return true;
375  }
376  else if (strcmp(name, "Structure") == 0) {
377  process_variable(dods_structure_c, inside_structure, attrs, nb_attributes);
378  return true;
379  }
380  else if (strcmp(name, "Sequence") == 0) {
381  process_variable(dods_sequence_c, inside_sequence, attrs, nb_attributes);
382  return true;
383  }
384  else if (strcmp(name, "Grid") == 0) {
385  process_variable(dods_grid_c, inside_grid, attrs, nb_attributes);
386  return true;
387  }
388 
389  return false;
390 }
391 
392 void DDXParser::finish_variable(const char *tag, Type t, const char *expected)
393 {
394  if (strcmp(tag, expected) != 0) {
396  "Expected an end tag for a %s; found '%s' instead.",
397  expected, tag);
398  return;
399  }
400 
401  pop_state();
402 
403  BaseType *btp = bt_stack.top();
404 
405  bt_stack.pop();
406  at_stack.pop();
407 
408  if (btp->type() != t) {
410  "Internal error: Expected a %s variable.",
411  expected);
412  delete btp;
413  return;
414  }
415  // Once libxml2 validates, this can go away. 05/30/03 jhrg
416  if (t == dods_array_c
417  && static_cast<Array*>(btp)->dimensions() == 0) {
419  "No dimension element included in the Array '%s'.",
420  btp->name().c_str());
421  delete btp;
422  return;
423  }
424 
425  BaseType *parent = bt_stack.top();
426 
427  if (!(parent->is_vector_type() || parent->is_constructor_type())) {
429  "Tried to add the array variable '%s' to a non-constructor type (%s %s).",
430  tag,
431  bt_stack.top()->type_name().c_str(),
432  bt_stack.top()->name().c_str());
433  delete btp;
434  return;
435  }
436 
437  parent->add_var_nocopy(btp);
438 }
439 
446 
452 {
453  DDXParser *parser = static_cast<DDXParser*>(p);
454  parser->error_msg = "";
455  parser->char_data = "";
456 
457  // init attr table stack.
458  parser->at_stack.push(&parser->dds->get_attr_table());
459 
460  // Trick; DDS *should* be a child of Structure. To simplify parsing,
461  // stuff a Structure on the bt_stack and dump the top level variables
462  // there. Once we're done, transfer the variables to the DDS.
463  parser->bt_stack.push(new Structure("dummy_dds"));
464 
465  parser->set_state(parser_start);
466 
467  DBG2(cerr << "Parser state: " << states[parser->get_state()] << endl);
468 }
469 
473 {
474  DDXParser *parser = static_cast<DDXParser*>(p);
475  DBG2(cerr << "Ending state == " << states[parser->get_state()] <<
476  endl);
477 
478  if (parser->get_state() != parser_start)
479  DDXParser::ddx_fatal_error(parser, "The document contained unbalanced tags.");
480 
481  // If we've found any sort of error, don't make the DDX; intern() will
482  // take care of the error.
483  if (parser->get_state() == parser_error) {
484  return;
485  }
486 
487  // Pop the temporary Structure off the stack and transfer its variables
488  // to the DDS.
489  Constructor *cp = dynamic_cast < Constructor * >(parser->bt_stack.top());
490  if (!cp) {
491  delete parser->bt_stack.top();
492  parser->bt_stack.pop();
493  ddx_fatal_error(parser, "Parse error: Expected a Structure, Sequence or Grid variable.");
494  return;
495  }
496 
497  for (Constructor::Vars_iter i = cp->var_begin(); i != cp->var_end(); ++i) {
498  (*i)->set_parent(0); // top-level vars have no parents
499  parser->dds->add_var(*i);
500  }
501 
502  delete parser->bt_stack.top();
503  parser->bt_stack.pop();
504 }
505 
506 void DDXParser::ddx_sax2_start_element(void *p,
507  const xmlChar *l, const xmlChar *prefix, const xmlChar *URI,
508  int nb_namespaces, const xmlChar **namespaces,
509  int nb_attributes, int /*nb_defaulted*/, const xmlChar **attributes)
510 {
511  DDXParser *parser = static_cast<DDXParser*>(p);
512  const char *localname = (const char *)l;
513 
514  DBG2(cerr << "start element: " << localname << ", states: "
515  << states[parser->get_state()]);
516 
517  switch (parser->get_state()) {
518  case parser_start:
519  if (strcmp(localname, "Dataset") == 0) {
520  parser->set_state(inside_dataset);
521  parser->root_ns = URI != 0 ? (const char *)URI: "";
522  parser->transfer_xml_attrs(attributes, nb_attributes);
523 
524  if (parser->check_required_attribute(string("name")))
525  parser->dds->set_dataset_name(parser->attribute_table["name"].value);
526 
527  if (parser->check_attribute("dapVersion"))
528  parser->dds->set_dap_version(parser->attribute_table["dapVersion"].value);
529  }
530  else
532  "Expected response to start with a Dataset element; found '%s' instead.",
533  localname);
534  break;
535 
536  case inside_dataset:
537  if (parser->is_attribute_or_alias(localname, attributes, nb_attributes))
538  break;
539  else if (parser->is_variable(localname, attributes, nb_attributes))
540  break;
541  else if (strcmp(localname, "blob") == 0 || strcmp(localname, "dataBLOB") == 0) {
542  parser->process_blob(attributes, nb_attributes);
543  // next state: inside_data_blob
544  }
545  else
547  "Expected an Attribute, Alias or variable element; found '%s' instead.",
548  localname);
549  break;
550 
551  case inside_attribute_container:
552  if (parser->is_attribute_or_alias(localname, attributes, nb_attributes))
553  break;
554  else
556  "Expected an Attribute or Alias element; found '%s' instead.",
557  localname);
558  break;
559 
560  case inside_attribute:
561  if (parser->is_attribute_or_alias(localname, attributes, nb_attributes))
562  break;
563  else if (strcmp(localname, "value") == 0)
564  parser->set_state(inside_attribute_value);
565  else
566  ddx_fatal_error(parser,
567  "Expected an 'Attribute', 'Alias' or 'value' element; found '%s' instead.",
568  localname);
569  break;
570 
571  case inside_attribute_value:
572  ddx_fatal_error(parser,
573  "Internal parser error; unexpected state, inside value while processing element '%s'.",
574  localname);
575  break;
576 
577  case inside_other_xml_attribute:
578  DBGN(cerr << endl << "\t inside_other_xml_attribute: " << localname << endl);
579 
580  parser->other_xml_depth++;
581 
582  // Accumulate the elements here
583 
584  parser->other_xml.append("<");
585  if (prefix) {
586  parser->other_xml.append((const char *)prefix);
587  parser->other_xml.append(":");
588  }
589  parser->other_xml.append(localname);
590 
591  if (nb_namespaces != 0) {
592  parser->transfer_xml_ns(namespaces, nb_namespaces);
593 
594  for (map<string,string>::iterator i = parser->namespace_table.begin();
595  i != parser->namespace_table.end();
596  ++i) {
597  parser->other_xml.append(" xmlns");
598  if (!i->first.empty()) {
599  parser->other_xml.append(":");
600  parser->other_xml.append(i->first);
601  }
602  parser->other_xml.append("=\"");
603  parser->other_xml.append(i->second);
604  parser->other_xml.append("\"");
605  }
606  }
607 
608  if (nb_attributes != 0) {
609  parser->transfer_xml_attrs(attributes, nb_attributes);
610  for (XMLAttrMap::iterator i = parser->attr_table_begin();
611  i != parser->attr_table_end();
612  ++i) {
613  parser->other_xml.append(" ");
614  if (!i->second.prefix.empty()) {
615  parser->other_xml.append(i->second.prefix);
616  parser->other_xml.append(":");
617  }
618  parser->other_xml.append(i->first);
619  parser->other_xml.append("=\"");
620  parser->other_xml.append(i->second.value);
621  parser->other_xml.append("\"");
622  }
623  }
624 
625  parser->other_xml.append(">");
626  break;
627 
628  case inside_alias:
629  ddx_fatal_error(parser,
630  "Internal parser error; unexpected state, inside alias while processing element '%s'.",
631  localname);
632  break;
633 
634  case inside_simple_type:
635  if (parser->is_attribute_or_alias(localname, attributes, nb_attributes))
636  break;
637  else
638  ddx_fatal_error(parser,
639  "Expected an 'Attribute' or 'Alias' element; found '%s' instead.",
640  localname);
641  break;
642 
643  case inside_array:
644  if (parser->is_attribute_or_alias(localname, attributes, nb_attributes))
645  break;
646  else if (is_not(localname, "Array")
647  && parser->is_variable(localname, attributes, nb_attributes))
648  break;
649  else if (strcmp(localname, "dimension") == 0) {
650  parser->process_dimension(attributes, nb_attributes);
651  // next state: inside_dimension
652  }
653  else
654  ddx_fatal_error(parser,
655  "Expected an 'Attribute' or 'Alias' element; found '%s' instead.",
656  localname);
657  break;
658 
659  case inside_dimension:
660  ddx_fatal_error(parser,
661  "Internal parser error; unexpected state, inside dimension while processing element '%s'.",
662  localname);
663  break;
664 
665  case inside_structure:
666  if (parser->is_attribute_or_alias(localname, attributes, nb_attributes))
667  break;
668  else if (parser->is_variable(localname, attributes, nb_attributes))
669  break;
670  else
672  "Expected an Attribute, Alias or variable element; found '%s' instead.",
673  localname);
674  break;
675 
676  case inside_sequence:
677  if (parser->is_attribute_or_alias(localname, attributes, nb_attributes))
678  break;
679  else if (parser->is_variable(localname, attributes, nb_attributes))
680  break;
681  else
683  "Expected an Attribute, Alias or variable element; found '%s' instead.",
684  localname);
685  break;
686 
687  case inside_grid:
688  if (parser->is_attribute_or_alias(localname, attributes, nb_attributes))
689  break;
690  else if (strcmp(localname, "Array") == 0)
691  parser->process_variable(dods_array_c, inside_array, attributes, nb_attributes);
692  else if (strcmp(localname, "Map") == 0)
693  parser->process_variable(dods_array_c, inside_map, attributes, nb_attributes);
694  else
696  "Expected an Attribute, Alias or variable element; found '%s' instead.",
697  localname);
698  break;
699 
700  case inside_map:
701  if (parser->is_attribute_or_alias(localname, attributes, nb_attributes))
702  break;
703  else if (is_not(localname, "Array") && is_not(localname, "Sequence")
704  && is_not(localname, "Grid")
705  && parser->is_variable(localname, attributes, nb_attributes))
706  break;
707  else if (strcmp(localname, "dimension") == 0) {
708  parser->process_dimension(attributes, nb_attributes);
709  // next state: inside_dimension
710  }
711  else
712  ddx_fatal_error(parser,
713  "Expected an 'Attribute', 'Alias', variable or 'dimension' element; found '%s' instead.",
714  localname);
715  break;
716 
717  case inside_blob_href:
718  ddx_fatal_error(parser,
719  "Internal parser error; unexpected state, inside blob href while processing element '%s'.",
720  localname);
721  break;
722 
723  case parser_unknown:
724  // *** Never used? If so remove/error
725  parser->set_state(parser_unknown);
726  break;
727 
728  case parser_error:
729  break;
730  }
731 
732  DBGN(cerr << " ... " << states[parser->get_state()] << endl);
733 }
734 
735 void DDXParser::ddx_sax2_end_element(void *p, const xmlChar *l,
736  const xmlChar *prefix, const xmlChar *URI)
737 {
738  DDXParser *parser = static_cast<DDXParser*>(p);
739  const char *localname = (const char *)l;
740 
741  DBG2(cerr << "End element " << localname << " (state "
742  << states[parser->get_state()] << ")" << endl);
743 
744  switch (parser->get_state()) {
745  case parser_start:
746  ddx_fatal_error(parser,
747  "Internal parser error; unexpected state, inside start state while processing element '%s'.",
748  localname);
749  break;
750 
751  case inside_dataset:
752  if (strcmp(localname, "Dataset") == 0)
753  parser->pop_state();
754  else
756  "Expected an end Dataset tag; found '%s' instead.",
757  localname);
758  break;
759 
760  case inside_attribute_container:
761  if (strcmp(localname, "Attribute") == 0) {
762  parser->pop_state();
763  parser->at_stack.pop(); // pop when leaving a container.
764  }
765  else
767  "Expected an end Attribute tag; found '%s' instead.",
768  localname);
769  break;
770 
771  case inside_attribute:
772  if (strcmp(localname, "Attribute") == 0)
773  parser->pop_state();
774  else
776  "Expected an end Attribute tag; found '%s' instead.",
777  localname);
778  break;
779 
780  case inside_attribute_value:
781  if (strcmp(localname, "value") == 0) {
782  parser->pop_state();
783  AttrTable *atp = parser->at_stack.top();
784  atp->append_attr(parser->dods_attr_name,
785  parser->dods_attr_type, parser->char_data);
786  parser->char_data = ""; // Null this after use.
787  }
788  else
790  "Expected an end value tag; found '%s' instead.",
791  localname);
792 
793  break;
794 
795  case inside_other_xml_attribute: {
796  if (strcmp(localname, "Attribute") == 0
797  && parser->root_ns == (const char *)URI) {
798 
799  DBGN(cerr << endl << "\t Popping the 'inside_other_xml_attribute' state"
800  << endl);
801 
802  parser->pop_state();
803 
804  AttrTable *atp = parser->at_stack.top();
805  atp->append_attr(parser->dods_attr_name,
806  parser->dods_attr_type, parser->other_xml);
807 
808  parser->other_xml = ""; // Null this after use.
809  }
810  else {
811  DBGN(cerr << endl << "\t inside_other_xml_attribute: " << localname
812  << ", depth: " << parser->other_xml_depth << endl);
813  if (parser->other_xml_depth == 0)
815  "Expected an OtherXML attribute to end! Instead I found '%s'",
816  localname);
817  parser->other_xml_depth--;
818 
819  parser->other_xml.append("</");
820  if (prefix) {
821  parser->other_xml.append((const char *)prefix);
822  parser->other_xml.append(":");
823  }
824  parser->other_xml.append(localname);
825  parser->other_xml.append(">");
826  }
827  break;
828  }
829  // Alias is busted in libdap++ 05/29/03 jhrg
830  case inside_alias:
831  parser->pop_state();
832  break;
833 
834  case inside_simple_type: {
835  Type t = get_type(localname);
836  if (is_simple_type(t)) {
837  parser->pop_state();
838  BaseType *btp = parser->bt_stack.top();
839  parser->bt_stack.pop();
840  parser->at_stack.pop();
841 
842  BaseType *parent = parser->bt_stack.top();
843 
844  if (parent->is_vector_type() || parent->is_constructor_type()) {
845  parent->add_var(btp);
846  delete btp;
847  }
848  else {
850  "Tried to add the simple-type variable '%s' to a non-constructor type (%s %s).",
851  localname,
852  parser->bt_stack.top()->
853  type_name().c_str(),
854  parser->bt_stack.top()->name().
855  c_str());
856  delete btp;
857  }
858  }
859  else {
861  "Expected an end tag for a simple type; found '%s' instead.",
862  localname);
863  }
864  break;
865  }
866 
867  case inside_array:
868  parser->finish_variable(localname, dods_array_c, "Array");
869  break;
870 
871  case inside_dimension:
872  if (strcmp(localname, "dimension") == 0)
873  parser->pop_state();
874  else
876  "Expected an end dimension tag; found '%s' instead.",
877  localname);
878  break;
879 
880  case inside_structure:
881  parser->finish_variable(localname, dods_structure_c, "Structure");
882  break;
883 
884  case inside_sequence:
885  parser->finish_variable(localname, dods_sequence_c, "Sequence");
886  break;
887 
888  case inside_grid:
889  parser->finish_variable(localname, dods_grid_c, "Grid");
890  break;
891 
892  case inside_map:
893  parser->finish_variable(localname, dods_array_c, "Map");
894  break;
895 
896  case inside_blob_href:
897  if (strcmp(localname, "blob") == 0 || strcmp(localname, "dataBLOB") == 0)
898  parser->pop_state();
899  else
901  "Expected an end dataBLOB/blob tag; found '%s' instead.",
902  localname);
903  break;
904 
905  case parser_unknown:
906  parser->pop_state();
907  break;
908 
909  case parser_error:
910  break;
911  }
912 
913 
914  DBGN(cerr << " ... " << states[parser->get_state()] << endl);
915 }
916 
920 void DDXParser::ddx_get_characters(void * p, const xmlChar * ch, int len)
921 {
922  DDXParser *parser = static_cast<DDXParser*>(p);
923 
924  switch (parser->get_state()) {
925  case inside_attribute_value:
926  parser->char_data.append((const char *)(ch), len);
927  DBG2(cerr << "Characters: '" << parser->char_data << "'" << endl);
928  break;
929 
930  case inside_other_xml_attribute:
931  parser->other_xml.append((const char *)(ch), len);
932  DBG2(cerr << "Other XML Characters: '" << parser->other_xml << "'" << endl);
933  break;
934 
935  default:
936  break;
937  }
938 }
939 
944 void DDXParser::ddx_ignoreable_whitespace(void *p, const xmlChar *ch,
945  int len)
946 {
947  DDXParser *parser = static_cast<DDXParser*>(p);
948 
949  switch (parser->get_state()) {
950  case inside_other_xml_attribute:
951  parser->other_xml.append((const char *)(ch), len);
952  break;
953 
954  default:
955  break;
956  }
957 }
958 
964 void DDXParser::ddx_get_cdata(void *p, const xmlChar *value, int len)
965 {
966  DDXParser *parser = static_cast<DDXParser*>(p);
967 
968  switch (parser->get_state()) {
969  case inside_other_xml_attribute:
970  parser->other_xml.append((const char *)(value), len);
971  break;
972 
973  case parser_unknown:
974  break;
975 
976  default:
978  "Found a CData block but none are allowed by DAP.");
979 
980  break;
981  }
982 }
983 
988 xmlEntityPtr DDXParser::ddx_get_entity(void *, const xmlChar * name)
989 {
990  return xmlGetPredefinedEntity(name);
991 }
992 
1000 void DDXParser::ddx_fatal_error(void * p, const char *msg, ...)
1001 {
1002  va_list args;
1003  DDXParser *parser = static_cast<DDXParser*>(p);
1004 
1005  parser->set_state(parser_error);
1006 
1007  va_start(args, msg);
1008  char str[1024];
1009  vsnprintf(str, 1024, msg, args);
1010  va_end(args);
1011 
1012  int line = xmlSAX2GetLineNumber(parser->ctxt);
1013 
1014  parser->error_msg += "At line " + long_to_string(line) + ": ";
1015  parser->error_msg += string(str) + string("\n");
1016 }
1017 
1019 
1020 void DDXParser::cleanup_parse(xmlParserCtxtPtr & context)
1021 {
1022  bool wellFormed = context->wellFormed;
1023  bool valid = context->valid;
1024 
1025  context->sax = NULL;
1026  xmlFreeParserCtxt(context);
1027 
1028  // If there's an error, there may still be items on the stack at the
1029  // end of the parse.
1030  while (!bt_stack.empty()) {
1031  delete bt_stack.top();
1032  bt_stack.pop();
1033  }
1034 
1035  if (!wellFormed) {
1036  throw DDXParseFailed(string("The DDX is not a well formed XML document.\n") + error_msg);
1037  }
1038 
1039  if (!valid) {
1040  throw DDXParseFailed(string("The DDX is not a valid document.\n") + error_msg);
1041  }
1042 
1043  if (get_state() == parser_error) {
1044  throw DDXParseFailed(string("Error parsing DDX response.\n") + error_msg);
1045  }
1046 }
1047 
1055 void DDXParser::intern_stream(istream &in, DDS *dest_dds, string &cid, const string &boundary)
1056 {
1057  // Code example from libxml2 docs re: read from a stream.
1058  if (!in || in.eof())
1059  throw InternalErr(__FILE__, __LINE__, "Input stream not open or read error");
1060 
1061  const int size = 1024;
1062  char chars[size + 1];
1063 
1064  // int res = fread(chars, 1, 4, in);
1065  in.read(chars, 4);
1066  int res = in.gcount();
1067  if (res > 0) {
1068  chars[4]='\0';
1069  xmlParserCtxtPtr context = xmlCreatePushParserCtxt(NULL, NULL, chars, res, "stream");
1070 
1071  if (!context)
1072  throw DDXParseFailed("Error parsing DDX response: Input does not look like XML");
1073 
1074  ctxt = context; // need ctxt for error messages
1075  dds = dest_dds; // dump values here
1076  blob_href = &cid; // cid goes here
1077 
1078  xmlSAXHandler ddx_sax_parser;
1079  memset( &ddx_sax_parser, 0, sizeof(xmlSAXHandler) );
1080 
1081  ddx_sax_parser.getEntity = &DDXParser::ddx_get_entity;
1082  ddx_sax_parser.startDocument = &DDXParser::ddx_start_document;
1083  ddx_sax_parser.endDocument = &DDXParser::ddx_end_document;
1084  ddx_sax_parser.characters = &DDXParser::ddx_get_characters;
1085  ddx_sax_parser.ignorableWhitespace = &DDXParser::ddx_ignoreable_whitespace;
1086  ddx_sax_parser.cdataBlock = &DDXParser::ddx_get_cdata;
1087  ddx_sax_parser.warning = &DDXParser::ddx_fatal_error;
1088  ddx_sax_parser.error = &DDXParser::ddx_fatal_error;
1089  ddx_sax_parser.fatalError = &DDXParser::ddx_fatal_error;
1090  ddx_sax_parser.initialized = XML_SAX2_MAGIC;
1091  ddx_sax_parser.startElementNs = &DDXParser::ddx_sax2_start_element;
1092  ddx_sax_parser.endElementNs = &DDXParser::ddx_sax2_end_element;
1093 
1094  context->sax = &ddx_sax_parser;
1095  context->userData = this;
1096  context->validate = true;
1097 
1098  in.getline(chars, size); // chars has size+1 elements
1099  res = in.gcount();
1100  chars[res-1] = '\n'; // libxml needs the newline; w/o it the parse will fail
1101  chars[res] = '\0';
1102  while (res > 0 && !is_boundary(chars, boundary)) {
1103  DBG(cerr << "line (" << res << "): " << chars << endl);
1104  xmlParseChunk(ctxt, chars, res, 0);
1105 
1106  in.getline(chars, size); // chars has size+1 elements
1107  res = in.gcount();
1108  if (res > 0) {
1109  chars[res-1] = '\n';
1110  chars[res] = '\0';
1111  }
1112  }
1113 
1114  // This call ends the parse: The fourth argument of xmlParseChunk is
1115  // the bool 'terminate.'
1116  xmlParseChunk(ctxt, chars, 0, 1);
1117 
1118  cleanup_parse(context);
1119  }
1120  else {
1121  throw DDXParseFailed("Error parsing DDX response: Could not read from input stream.");
1122  }
1123 }
1124 
1127 void DDXParser::intern_stream(FILE *in, DDS *dest_dds, string &cid, const string &boundary)
1128 {
1129  // Code example from libxml2 docs re: read from a stream.
1130  if (!in || feof(in) || ferror(in))
1131  throw InternalErr(__FILE__, __LINE__, "Input stream not open or read error");
1132 
1133  const int size = 1024;
1134  char chars[size];
1135 
1136  int res = fread(chars, 1, 4, in);
1137  if (res > 0) {
1138  chars[4]='\0';
1139  xmlParserCtxtPtr context = xmlCreatePushParserCtxt(NULL, NULL, chars, res, "stream");
1140 
1141  if (!context)
1142  throw DDXParseFailed("Error parsing DDX response: Input does not look like XML");
1143 
1144  ctxt = context; // need ctxt for error messages
1145  dds = dest_dds; // dump values here
1146  blob_href = &cid; // cid goes here
1147 
1148  xmlSAXHandler ddx_sax_parser;
1149  memset( &ddx_sax_parser, 0, sizeof(xmlSAXHandler) );
1150 
1151  ddx_sax_parser.getEntity = &DDXParser::ddx_get_entity;
1152  ddx_sax_parser.startDocument = &DDXParser::ddx_start_document;
1153  ddx_sax_parser.endDocument = &DDXParser::ddx_end_document;
1154  ddx_sax_parser.characters = &DDXParser::ddx_get_characters;
1155  ddx_sax_parser.ignorableWhitespace = &DDXParser::ddx_ignoreable_whitespace;
1156  ddx_sax_parser.cdataBlock = &DDXParser::ddx_get_cdata;
1157  ddx_sax_parser.warning = &DDXParser::ddx_fatal_error;
1158  ddx_sax_parser.error = &DDXParser::ddx_fatal_error;
1159  ddx_sax_parser.fatalError = &DDXParser::ddx_fatal_error;
1160  ddx_sax_parser.initialized = XML_SAX2_MAGIC;
1161  ddx_sax_parser.startElementNs = &DDXParser::ddx_sax2_start_element;
1162  ddx_sax_parser.endElementNs = &DDXParser::ddx_sax2_end_element;
1163 
1164  context->sax = &ddx_sax_parser;
1165  context->userData = this;
1166  context->validate = true;
1167 
1168 
1169  while ((fgets(chars, size, in) != 0) && !is_boundary(chars, boundary)) {
1170  DBG(cerr << "line (" << strlen(chars) << "): " << chars << endl);
1171  xmlParseChunk(ctxt, chars, strlen(chars), 0);
1172  }
1173  // This call ends the parse: The fourth argument of xmlParseChunk is
1174  // the bool 'terminate.'
1175  xmlParseChunk(ctxt, chars, 0, 1);
1176 
1177  cleanup_parse(context);
1178  }
1179  else {
1180  throw DDXParseFailed("Error parsing DDX response: Could not read from input file.");
1181  }
1182 }
1183 
1184 
1196 void DDXParser::intern(const string & document, DDS * dest_dds, string &cid)
1197 {
1198  // Create the context pointer explicitly so that we can store a pointer
1199  // to it in the DDXParser instance. This provides a way to generate our
1200  // own error messages *with* line numbers. The messages are pretty
1201  // meaningless otherwise. This means that we use an interface from the
1202  // 'parser internals' header, and not the 'parser' header. However, this
1203  // interface is also used in one of the documented examples, so it's
1204  // probably pretty stable. 06/02/03 jhrg
1205  xmlParserCtxtPtr context = xmlCreateFileParserCtxt(document.c_str());
1206  if (!context)
1207  throw
1208  DDXParseFailed(string
1209  ("Could not initialize the parser with the file: '")
1210  + document + string("'."));
1211 
1212  dds = dest_dds; // dump values here
1213  blob_href = &cid;
1214  ctxt = context; // need ctxt for error messages
1215 
1216  xmlSAXHandler ddx_sax_parser;
1217  memset( &ddx_sax_parser, 0, sizeof(xmlSAXHandler) );
1218 
1219  ddx_sax_parser.getEntity = &DDXParser::ddx_get_entity;
1220  ddx_sax_parser.startDocument = &DDXParser::ddx_start_document;
1221  ddx_sax_parser.endDocument = &DDXParser::ddx_end_document;
1222  ddx_sax_parser.characters = &DDXParser::ddx_get_characters;
1223  ddx_sax_parser.ignorableWhitespace = &DDXParser::ddx_ignoreable_whitespace;
1224  ddx_sax_parser.cdataBlock = &DDXParser::ddx_get_cdata;
1225  ddx_sax_parser.warning = &DDXParser::ddx_fatal_error;
1226  ddx_sax_parser.error = &DDXParser::ddx_fatal_error;
1227  ddx_sax_parser.fatalError = &DDXParser::ddx_fatal_error;
1228  ddx_sax_parser.initialized = XML_SAX2_MAGIC;
1229  ddx_sax_parser.startElementNs = &DDXParser::ddx_sax2_start_element;
1230  ddx_sax_parser.endElementNs = &DDXParser::ddx_sax2_end_element;
1231 
1232  context->sax = &ddx_sax_parser;
1233  context->userData = this;
1234  context->validate = false;
1235 
1236  xmlParseDocument(context);
1237 
1238  cleanup_parse(context);
1239 }
1240 
1241 } // namespace libdap
void intern_stream(FILE *in, DDS *dds, string &cid, const string &boundary="")
Read the DDX from a stream instead of a file.
- -
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
static void ddx_start_document(void *parser)
-
static void ddx_get_cdata(void *parser, const xmlChar *value, int len)
-
Holds a structure (aggregate) type.
Definition: Structure.h:83
-
virtual void add_var(BaseType *bt, Part part=nil)
Add a variable.
Definition: BaseType.cc:815
-
Type
Identifies the data type.
Definition: Type.h:94
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
virtual bool is_vector_type() const
Returns true if the instance is a vector (i.e., array) type variable.
Definition: BaseType.cc:402
-
static void ddx_fatal_error(void *parser, const char *msg,...)
-
virtual bool is_constructor_type() const
Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable...
Definition: BaseType.cc:412
- -
ObjectType get_type(const string &value)
Definition: mime_util.cc:326
-
static void ddx_end_document(void *parser)
-
static xmlEntityPtr ddx_get_entity(void *parser, const xmlChar *name)
-
static void ddx_get_characters(void *parser, const xmlChar *ch, int len)
-
bool is_simple_type(Type t)
Returns true if the instance is a numeric, string or URL type variable.
Definition: util.cc:775
-
virtual AttrTable & get_attr_table()
Definition: DDS.cc:372
- -
bool is_boundary(const char *line, const string &boundary)
Definition: mime_util.cc:941
-
virtual unsigned int append_attr(const string &name, const string &type, const string &value)
Add an attribute to the table.
Definition: AttrTable.cc:307
-
void set_dataset_name(const string &n)
Definition: DDS.cc:363
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
Vars_iter var_begin()
Definition: Constructor.cc:356
-
static void ddx_ignoreable_whitespace(void *parser, const xmlChar *ch, int len)
-
Vars_iter var_end()
Definition: Constructor.cc:364
-
void intern(const string &document, DDS *dest_dds, string &cid)
- -
string type_name(Type t)
Definition: util.cc:760
-
void set_dap_version(const string &version_string="2.0")
Definition: DDS.cc:440
-
void add_var(BaseType *bt)
Adds a copy of the variable to the DDS. Using the ptr_duplicate() method, perform a deep copy on the ...
Definition: DDS.cc:586
-
-
- - - - diff --git a/html/DDXParserSAX2_8h_source.html b/html/DDXParserSAX2_8h_source.html deleted file mode 100644 index 814c681d6..000000000 --- a/html/DDXParserSAX2_8h_source.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - -libdap: DDXParserSAX2.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
DDXParserSAX2.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef ddx_parser_h
27 #define ddx_parser_h
28 
29 #include <string>
30 #include <map>
31 #include <stack>
32 
33 #include <libxml/parserInternals.h>
34 
35 #ifndef ddx_exceptions_h
36 #include "DDXExceptions.h"
37 #endif
38 
39 #ifndef _dds_h
40 #include "DDS.h"
41 #endif
42 
43 #ifndef _basetype_h
44 #include "BaseType.h"
45 #endif
46 
47 #ifndef base_type_factory_h
48 #include "BaseTypeFactory.h"
49 #endif
50 
51 namespace libdap
52 {
53 
79 class DDXParser
80 {
81 private:
84  enum ParseState {
85  parser_start,
86 
87  inside_dataset,
88 
89  inside_attribute_container,
90  inside_attribute,
91  inside_attribute_value,
92  inside_other_xml_attribute,
93 
94  inside_alias,
95 
96  // This covers Byte, ..., Url.
97  inside_simple_type,
98 
99  inside_array,
100  inside_dimension,
101 
102  inside_grid,
103  inside_map,
104 
105  inside_structure,
106  inside_sequence,
107 
108  inside_blob_href,
109 
110  parser_unknown,
111  parser_error
112  };
113 
114  BaseTypeFactory *d_factory;
115 
116  // These stacks hold the state of the parse as it progresses.
117  stack<ParseState> s; // Current parse state
118  stack<BaseType*> bt_stack; // current variable(s)
119  stack<AttrTable*> at_stack; // current attribute table
120 
121  // Accumulate stuff inside an 'OtherXML' DAP attribute here
122  string other_xml;
123 
124  // When we're parsing unknown XML, how deeply is it nested? This is used
125  // for the OtherXML DAP attributes.
126  unsigned int other_xml_depth;
127  unsigned int unknown_depth;
128 
129  // These are used for processing errors.
130  string error_msg; // Error message(s), if any.
131  xmlParserCtxtPtr ctxt; // used for error message line numbers
132 
133  // The results of the parse operation are stored in these fields.
134  DDS *dds; // dump DDX here
135  string *blob_href; // put href to blob here
136 
137  // These hold temporary values read during the parse.
138  string dods_attr_name; // DAP2 attributes, not XML attributes
139  string dods_attr_type; // ... not XML ...
140  string char_data; // char data in value elements; null after use
141  string root_ns; // What is the namespace of the root node (Dataset)
142 
143  class XMLAttribute {
144  public:
145  string prefix;
146  string nsURI;
147  string value;
148 
149  void clone(const XMLAttribute &src) {
150  prefix = src.prefix;
151  nsURI = src.nsURI;
152  value = src.value;
153  }
154 
155  XMLAttribute() : prefix(""), nsURI(""), value("") {}
156  XMLAttribute(const string &p, const string &ns, const string &v)
157  : prefix(p), nsURI(ns), value(v) {}
158  // 'attributes' as passed from libxml2 is a five element array but this
159  // ctor gets the back four elements.
160  XMLAttribute(const xmlChar **attributes/*[4]*/) {
161  prefix = attributes[0] != 0 ? (const char *)attributes[0]: "";
162  nsURI = attributes[1] != 0 ? (const char *)attributes[1]: "";
163  value = string((const char *)attributes[2], (const char *)attributes[3]);
164  }
165  XMLAttribute(const XMLAttribute &rhs) {
166  clone(rhs);
167  }
168  ~XMLAttribute() {
169  }
170  XMLAttribute &operator=(const XMLAttribute &rhs) {
171  if (this == &rhs)
172  return *this;
173  clone(rhs);
174  return *this;
175  }
176  };
177 
178  typedef map<string, XMLAttribute> XMLAttrMap;
179  XMLAttrMap attribute_table; // dump XML attributes here
180 
181  XMLAttrMap::iterator attr_table_begin() {
182  return attribute_table.begin();
183  }
184 
185  XMLAttrMap::iterator attr_table_end() {
186  return attribute_table.end();
187  }
188 
189  map<string, string> namespace_table;
190 
191  // These are kind of silly...
192  void set_state(DDXParser::ParseState state);
193  DDXParser::ParseState get_state() const;
194  void pop_state();
195 
196  // Glue for the BaseTypeFactory class.
197  BaseType *factory(Type t, const string &name);
198 
199  // Common cleanup code for intern() and intern_stream()
200  void cleanup_parse(xmlParserCtxtPtr &context);
201 
208  void transfer_xml_attrs(const xmlChar **attrs, int nb_attributes);
209  void transfer_xml_ns(const xmlChar **namespaces, int nb_namespaces);
210  bool check_required_attribute(const string &attr);
211  bool check_attribute(const string & attr);
212 
213  void process_attribute_element(const xmlChar **attrs, int nb_attrs);
214  void process_attribute_alias(const xmlChar **attrs, int nb_attrs);
215 
216  void process_variable(Type t, ParseState s, const xmlChar **attrs,
217  int nb_attributes);
218 
219  void process_dimension(const xmlChar **attrs, int nb_attrs);
220  void process_blob(const xmlChar **attrs, int nb_attrs);
221 
222  bool is_attribute_or_alias(const char *name, const xmlChar **attrs,
223  int nb_attributes);
224  bool is_variable(const char *name, const xmlChar **attrs, int nb_attributes);
225 
226  void finish_variable(const char *tag, Type t, const char *expected);
228 
230  DDXParser();
231 
232  friend class DDXParserTest;
233 
234 public:
235  DDXParser(BaseTypeFactory *factory)
236  : d_factory(factory),
237  other_xml(""), other_xml_depth(0), unknown_depth(0),
238  error_msg(""), ctxt(0), dds(0), blob_href(0),
239  dods_attr_name(""), dods_attr_type(""),
240  char_data(""), root_ns("")
241  {}
242 
243  void intern(const string &document, DDS *dest_dds, string &cid);
244  void intern_stream(FILE *in, DDS *dds, string &cid, const string &boundary = "");
245  void intern_stream(istream &in, DDS *dds, string &cid, const string &boundary = "");
246 
247  static void ddx_start_document(void *parser);
248  static void ddx_end_document(void *parser);
249 
250  static void ddx_sax2_start_element(void *parser,
251  const xmlChar *localname, const xmlChar *prefix, const xmlChar *URI,
252  int nb_namespaces, const xmlChar **namespaces, int nb_attributes,
253  int nb_defaulted, const xmlChar **attributes);
254  static void ddx_sax2_end_element(void *parser, const xmlChar *localname,
255  const xmlChar *prefix, const xmlChar *URI);
256 
257  static void ddx_get_characters(void *parser, const xmlChar *ch, int len);
258  static void ddx_ignoreable_whitespace(void *parser,
259  const xmlChar * ch, int len);
260  static void ddx_get_cdata(void *parser, const xmlChar *value, int len);
261 
262  static xmlEntityPtr ddx_get_entity(void *parser, const xmlChar *name);
263  static void ddx_fatal_error(void *parser, const char *msg, ...);
264 };
265 
266 } // namespace libdap
267 
268 #endif // ddx_parser_h
void intern_stream(FILE *in, DDS *dds, string &cid, const string &boundary="")
Read the DDX from a stream instead of a file.
- -
static void ddx_start_document(void *parser)
-
static void ddx_get_cdata(void *parser, const xmlChar *value, int len)
-
Type
Identifies the data type.
Definition: Type.h:94
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
static void ddx_fatal_error(void *parser, const char *msg,...)
- - -
static void ddx_end_document(void *parser)
-
static xmlEntityPtr ddx_get_entity(void *parser, const xmlChar *name)
-
static void ddx_get_characters(void *parser, const xmlChar *ch, int len)
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
static void ddx_ignoreable_whitespace(void *parser, const xmlChar *ch, int len)
-
void intern(const string &document, DDS *dest_dds, string &cid)
-
-
- - - - diff --git a/html/DMR_8cc_source.html b/html/DMR_8cc_source.html deleted file mode 100644 index d6455d68d..000000000 --- a/html/DMR_8cc_source.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - -libdap: DMR.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
DMR.cc
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2013 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 #include "config.h"
26 
27 #ifdef WIN32
28 #include <io.h>
29 #include <process.h>
30 #include <fstream>
31 #else
32 #include <unistd.h> // for alarm and dup
33 #include <sys/wait.h>
34 #endif
35 
36 #include <cassert>
37 
38 #include <iostream>
39 #include <sstream>
40 
41 //#define DODS_DEBUG
42 //#define DODS_DEBUG2
43 
44 #include "D4Group.h"
45 #include "BaseType.h"
46 #include "Array.h"
47 #include "Grid.h"
48 #include "DMR.h"
49 #include "XMLWriter.h"
50 #include "D4BaseTypeFactory.h"
51 #include "D4Attributes.h"
52 
53 #include "DDS.h" // Included so DMRs can be built using a DDS for 'legacy' handlers
54 
55 #include "debug.h"
56 #include "DapIndent.h"
57 
63 const string c_xml_xsi = "http://www.w3.org/2001/XMLSchema-instance";
64 const string c_xml_namespace = "http://www.w3.org/XML/1998/namespace";
65 
66 const string c_default_dap40_schema_location = "http://xml.opendap.org/dap/dap4.0.xsd";
67 
68 const string c_dap40_namespace = "http://xml.opendap.org/ns/DAP/4.0#";
69 
70 const string c_dap_40_n_sl = c_dap40_namespace + " " + c_default_dap40_schema_location;
71 
72 using namespace std;
73 
74 namespace libdap {
75 
76 void
77 DMR::m_duplicate(const DMR &dmr)
78 {
79  // This is needed because we use the factory to make a new instance of the root group
80  assert(dmr.OK());
81 
82  d_factory = dmr.d_factory; // Shallow copy here
83 
84  d_name = dmr.d_name;
85  d_filename = dmr.d_filename;
86 
87  d_dap_major = dmr.d_dap_major;
88  d_dap_minor = dmr.d_dap_minor;
89  d_dap_version = dmr.d_dap_version; // String version of the protocol
90 
91  d_dmr_version = dmr.d_dmr_version;
92 
93  d_request_xml_base = dmr.d_request_xml_base;
94 
95  d_namespace = dmr.d_namespace;
96 
97  d_max_response_size_kb = dmr.d_max_response_size_kb;
98 
99  // Deep copy, using ptr_duplicate()
100  // d_root can only be a D4Group, so the thing returned by ptr_duplicate() must be a D4Group.
101  d_root = static_cast<D4Group*>(dmr.d_root->ptr_duplicate());
102  DBG(cerr << "dmr.d_root: " << dmr.d_root << endl);
103  DBG(cerr << "d_root (from ptr_dup(): " << d_root << endl);
104 
105  //d_root = static_cast<D4Group*>(dmr.d_factory->NewVariable(dods_group_c, dmr.d_root->name()));
106 }
107 
120 DMR::DMR(D4BaseTypeFactory *factory, const string &name)
121  : d_factory(factory), d_name(name), d_filename(""),
122  d_dap_major(4), d_dap_minor(0),
123  d_dmr_version("1.0"), d_request_xml_base(""),
124  d_namespace(c_dap40_namespace), d_max_response_size_kb(0), d_root(0)
125 {
126  // sets d_dap_version string and the two integer fields too
127  set_dap_version("4.0");
128 }
129 
151  : d_factory(factory), d_name(dds.get_dataset_name()),
152  d_filename(dds.filename()), d_dap_major(4), d_dap_minor(0),
153  d_dmr_version("1.0"), d_request_xml_base(""),
154  d_namespace(c_dap40_namespace), d_max_response_size_kb(0), d_root(0)
155 {
156  // sets d_dap_version string and the two integer fields too
157  set_dap_version("4.0");
158 
159  build_using_dds(dds);
160 #if 0
161  for (DDS::Vars_iter i = dds.var_begin(), e = dds.var_end(); i != e; ++i) {
162  BaseType *new_var = (*i)->transform_to_dap4(root() /*group*/, root() /*container*/);
163  // If the variable being transformed is a Grid,
164  // then Grid::transform_to_dap4() will add all the arrays to the
165  // container (root() in this case) and return null, indicating that
166  // this code does not need to do anything to add the transformed variable.
167  if (new_var)
168  root()->add_var_nocopy(new_var);
169  }
170 
171  // Now copy the global attributes
173 #endif
174 }
175 
183  : d_factory(0), d_name(""), d_filename(""), d_dap_major(4), d_dap_minor(0),
184  d_dap_version("4.0"), d_dmr_version("1.0"), d_request_xml_base(""),
185  d_namespace(c_dap40_namespace), d_max_response_size_kb(0), d_root(0)
186 {
187  // sets d_dap_version string and the two integer fields too
188  set_dap_version("4.0");
189 }
190 
192 DMR::DMR(const DMR &rhs) : DapObj()
193 {
194  m_duplicate(rhs);
195 }
196 
201 {
202 #if 1
203  delete d_root;
204 #endif
205 }
206 
207 DMR &
208 DMR::operator=(const DMR &rhs)
209 {
210  if (this == &rhs)
211  return *this;
212 
213  m_duplicate(rhs);
214 
215  return *this;
216 }
217 
227 {
228  set_name(dds.get_dataset_name());
229  set_filename(dds.filename());
230 
231  D4Group *root_grp = root();
232  for (DDS::Vars_iter i = dds.var_begin(), e = dds.var_end(); i != e; ++i) {
233  BaseType *d4_var = root()->var((*i)->name());
234  // Don't add duplicate variables. We have to make this check
235  // because some of the child variables may add arrays
236  // to the root object. For example, this happens in
237  // Grid with the Map Arrays - ndp - 05/08/17
238  if(!d4_var){
239  // no variable of this name is in the root group at this point. Add it.
240  DBG(cerr << __func__ << "() - Transforming top level variable: " <<
241  " (" << (*i)->type_name() << ":'" << (*i)->name() << "':"<<(void *)(*i) <<
242  ") (root:"<< root_grp << ")"<< endl; );
243  (*i)->transform_to_dap4(root_grp, root_grp);
244  DBG(cerr << __func__ << "() - top level variable: '" <<
245  (*i)->name() << "' (type:" << (*i)->type_name() << ") Transformed"<< endl; );
246  }
247  else {
248  DBG(cerr << __func__ << "() - Skipping variable: " <<
249  d4_var->type_name() << " " << d4_var->name() << " because a variable with" <<
250  " this name already exists in the root group." << endl; );
251  }
252  }
253 
254  // Now copy the global attributes
256 }
257 
258 #if 0
259 
270 DDS *DMR::getDDS(DMR &dmr)
271 {
272  DBG( cerr << __func__ << "() - BEGIN" << endl);
273  D4Group *root = dmr.root();
274 
275  BaseTypeFactory *btf = new BaseTypeFactory();
276  DDS *dds = new DDS(btf, dmr.name());
277  dds->filename(dmr.filename());
278  AttrTable *dds_at = &(dds->get_attr_table());
279 
280  // Now copy the global attributes
281  // D4Attributes::load_AttrTable(dds_at,root->attributes());
282 
283  // TODO Make this a unique_ptr<> and let the compiler delete it. jhrg 6/17/19
284  vector<BaseType *> *top_vars = root->transform_to_dap2(dds_at, true);
285  vector<BaseType *>::iterator vIter = top_vars->begin();
286  vector<BaseType *>::iterator vEnd = top_vars->end();
287  for (; vIter != vEnd; vIter++) {
288  dds->add_var_nocopy(*vIter);
289  }
290  delete top_vars;
291 
292 #if 0
293  set<string> shared_dim_candidates;
294 
295  vector<BaseType *> dropped_vars;
296  for (D4Group::Vars_iter i = root->var_begin(), e = root->var_end(); i != e; ++i)
297  {
298  DBG( cerr << __func__ << "() - Processing top level variable '"<< (*i)->type_name() << " " << (*i)->name() << "' to DDS." << endl; );
299  vector<BaseType *> *new_vars = (*i)->transform_to_dap2(&(dds->get_attr_table()));
300  if(new_vars!=0) {
301  vector<BaseType*>::iterator vIter = new_vars->begin();
302  vector<BaseType*>::iterator end = new_vars->end();
303  for(; vIter!=end; vIter++ ) {
304  BaseType *new_var = (*vIter);
305  DBG( cerr << __func__ << "() - Adding variable name: '"<< new_var->name() << "' " <<
306  "type: " << new_var->type() << " " <<
307  "type_name: " << new_var->type_name() << " to DDS." << endl; );
308  dds->add_var_nocopy(new_var);
309  Grid *grid = dynamic_cast <Grid *>(new_var);
310  if(grid) {
311  Grid::Map_iter m = grid->map_begin();
312  for(; m != grid->map_end(); m++) {
313  shared_dim_candidates.insert((*m)->name());
314  }
315  }
316  (*vIter) = 0;
317  }
318  delete new_vars;
319  }
320  else {
321  DBG( cerr << __func__ << "Adding variable '"<< (*i)->type_name() << " " << (*i)->name() << "' to drop list." << endl; );
322  dropped_vars.push_back((*i));
323  }
324  }
325  AttrTable *dv_table = Constructor::make_dropped_vars_attr_table(&dropped_vars);
326  if(dv_table) {
327  DBG( cerr << __func__ << "() - Adding dropped variable AttrTable." << endl);
328  dds_at->append_container(dv_table,dv_table->get_name());
329  }
330 
331  // Get all the child groups.
332  D4Group::groupsIter gIter = root->grp_begin();
333  D4Group::groupsIter gEnd = root->grp_end();
334  for(; gIter!=gEnd; gIter++) {
335  D4Group *grp = *gIter;
336  DBG( cerr << __func__ << "() - Processing D4Group " << grp->name() << endl);
337  vector<BaseType *> *d2_vars = grp->transform_to_dap2(dds_at);
338  if(d2_vars) {
339  DBG( cerr << __func__ << "() - Processing " << grp->name() << " Member Variables." << endl);
340  vector<BaseType *>::iterator vIter = d2_vars->begin();
341  vector<BaseType *>::iterator vEnd = d2_vars->end();
342  for(; vIter!=vEnd; vIter++) {
343  DBG( cerr << __func__ << "() - Processing " << grp->name() << " Member Variable: " << (*vIter)->name() << endl);
344  dds->add_var(*vIter);
345  }
346  }
347  }
348 #endif
349 
350  DBG( cerr << __func__ << "() - END" << endl);
351  return dds;
352 }
353 #endif
354 
370 DDS *
372 {
373 #if 0
374  return DMR::getDDS(*this);
375 #else
376  DBG( cerr << __func__ << "() - BEGIN" << endl);
377 
378 #if 0
379  BaseTypeFactory *btf = new BaseTypeFactory();
380 #endif
381  BaseTypeFactory btf;
382  DDS *dds = new DDS(&btf, name());
383  dds->filename(filename());
384 
385  // Now copy the global attributes
386  // TODO Make this a unique_ptr<> and let the compiler delete it. jhrg 6/17/19
387  vector<BaseType *> *top_vars = root()->transform_to_dap2(&(dds->get_attr_table())/*, true*/);
388  for (vector<BaseType *>::iterator i = top_vars->begin(), e = top_vars->end(); i != e; i++) {
389  dds->add_var_nocopy(*i);
390  }
391  delete top_vars;
392 
393  DBG( cerr << __func__ << "() - END" << endl);
394 
395  dds->set_factory(0);
396  return dds;
397 #endif
398 }
399 
406 D4Group *
408 {
409  if (!d_root) d_root = static_cast<D4Group*>(d_factory->NewVariable(dods_group_c, "/"));
410  return d_root;
411 }
412 
418 void
419 DMR::set_dap_version(const string &v)
420 {
421  istringstream iss(v);
422 
423  int major = -1, minor = -1;
424  char dot;
425  if (!iss.eof() && !iss.fail())
426  iss >> major;
427  if (!iss.eof() && !iss.fail())
428  iss >> dot;
429  if (!iss.eof() && !iss.fail())
430  iss >> minor;
431 
432  if (major == -1 || minor == -1 or dot != '.')
433  throw InternalErr(__FILE__, __LINE__, "Could not parse dap version. Value given: " + v);
434 
435  d_dap_version = v;
436 
437  d_dap_major = major;
438  d_dap_minor = minor;
439 
440  // Now set the related XML constants. These might be overwritten if
441  // the DMR instance is being built from a document parse, but if it's
442  // being constructed by a server the code to generate the XML document
443  // needs these values to match the DAP version information.
444  switch (d_dap_major) {
445  case 4:
446  d_namespace = c_dap40_namespace;
447  break;
448  default:
449  d_namespace = "";
450  break;
451  }
452 }
453 
464 long
465 DMR::request_size(bool constrained)
466 {
467  return d_root->request_size(constrained);
468 }
469 
477 void
478 DMR::print_dap4(XMLWriter &xml, bool constrained)
479 {
480  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*) "Dataset") < 0)
481  throw InternalErr(__FILE__, __LINE__, "Could not write Dataset element");
482 
483 #if 0
484  // Reintroduce these if they are really useful. jhrg 4/15/13
485  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xmlns:xml",
486  (const xmlChar*) c_xml_namespace.c_str()) < 0)
487  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns:xml");
488 
489  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xmlns:xsi", (const xmlChar*) c_xml_xsi.c_str())
490  < 0)
491  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns:xsi");
492 
493  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xsi:schemaLocation",
494  (const xmlChar*) c_dap_40_n_sl.c_str()) < 0)
495  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns:schemaLocation");
496 #endif
497 
498  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xmlns", (const xmlChar*) get_namespace().c_str()) < 0)
499  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xmlns");
500 
501  if (!request_xml_base().empty()) {
502  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "xml:base",
503  (const xmlChar*)request_xml_base().c_str()) < 0)
504  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for xml:base");
505  }
506 
507  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "dapVersion", (const xmlChar*)dap_version().c_str()) < 0)
508  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for dapVersion");
509 
510  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "dmrVersion", (const xmlChar*)dmr_version().c_str()) < 0)
511  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for dapVersion");
512 
513  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name", (const xmlChar*)name().c_str()) < 0)
514  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
515 
516  root()->print_dap4(xml, constrained);
517 
518  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
519  throw InternalErr(__FILE__, __LINE__, "Could not end the top-level Group element");
520 }
521 
522 
530 void
531 DMR::dump(ostream &strm) const
532 {
533  strm << DapIndent::LMarg << "DMR::dump - ("
534  << (void *)this << ")" << endl ;
535  DapIndent::Indent() ;
536  strm << DapIndent::LMarg << "factory: " << (void *)d_factory << endl ;
537  strm << DapIndent::LMarg << "name: " << d_name << endl ;
538  strm << DapIndent::LMarg << "filename: " << d_filename << endl ;
539  strm << DapIndent::LMarg << "protocol major: " << d_dap_major << endl;
540  strm << DapIndent::LMarg << "protocol minor: " << d_dap_minor << endl;
541 
542  DapIndent::UnIndent() ;
543 }
544 
545 } // namespace libdap
std::string name() const
Definition: DMR.h:115
-
virtual string name() const
Returns the name of the class instance.
Definition: BaseType.cc:320
-
virtual BaseType * var(const string &name, bool exact_match=true, btp_stack *s=0)
btp_stack no longer needed; use back pointers (BaseType::get_parent())
Definition: Constructor.cc:267
-
void print_dap4(XMLWriter &xml, bool constrained=false)
Definition: DMR.cc:478
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
D4Group * root()
Definition: DMR.cc:407
-
Vars_iter var_begin()
Return an iterator to the first variable.
Definition: DDS.cc:799
-
virtual string get_name() const
Get the name of this attribute table.
Definition: AttrTable.cc:238
-
STL namespace.
-
string filename() const
Definition: DDS.cc:387
-
virtual void add_var_nocopy(BaseType *bt, Part part=nil)
Definition: Constructor.cc:432
-
Map_iter map_end()
Definition: Grid.cc:537
-
virtual ~DMR()
Definition: DMR.cc:200
-
void add_var_nocopy(BaseType *bt)
Adds the variable to the DDS.
Definition: DDS.cc:613
-
string get_dataset_name() const
Definition: DDS.cc:356
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
std::string filename() const
Definition: DMR.h:132
-
Map_iter map_begin()
Returns an iterator referencing the first Map vector.
Definition: Grid.cc:525
- - -
long request_size(bool constrained)
Definition: D4Group.cc:409
-
virtual AttrTable * append_container(const string &name)
Add a container to the attribute table.
Definition: AttrTable.cc:410
-
virtual D4BaseTypeFactory * factory()
Definition: DMR.h:123
- -
virtual Type type() const
Returns the type of the class instance.
Definition: BaseType.cc:365
- -
std::string request_xml_base() const
Get the URL that will return this DMR.
Definition: DMR.h:145
-
groupsIter grp_end()
Get an iterator to the end of the values.
Definition: D4Group.h:114
-
long request_size(bool constrained)
Get the estimated response size, in kilo bytes.
Definition: DMR.cc:465
-
Holds the Grid data type.
Definition: Grid.h:122
-
virtual void transform_to_dap4(D4Group *root, Constructor *container)
DAP2 to DAP4 transform.
Definition: BaseType.cc:216
-
virtual D4Attributes * attributes()
Definition: BaseType.cc:599
-
void set_dap_version(const std::string &version_string)
Definition: DMR.cc:419
-
virtual AttrTable & get_attr_table()
Definition: DDS.cc:372
-
virtual void build_using_dds(DDS &dds)
Definition: DMR.cc:226
- -
groupsIter grp_begin()
Get an iterator to the start of the values.
Definition: D4Group.h:111
-
BaseTypeFactory * set_factory(BaseTypeFactory *factory)
Definition: DDS.h:253
-
virtual std::vector< BaseType * > * transform_to_dap2(AttrTable *parent_attr_table)
Transform the D4Group&#39;s variables to DAP2 variables.
Definition: D4Group.cc:663
-
Vars_iter var_end()
Return an iterator.
Definition: DDS.cc:811
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
libdap base object for common functionality of libdap objects
Definition: DapObj.h:50
-
virtual string type_name() const
Returns the type of the class instance as a string.
Definition: BaseType.cc:379
-
Vars_iter var_begin()
Definition: Constructor.cc:356
-
void print_dap4(XMLWriter &xml, bool constrained=false)
Definition: D4Group.cc:574
-
Vars_iter var_end()
Definition: Constructor.cc:364
- - -
virtual DDS * getDDS()
Build a DDS from a DMR.
Definition: DMR.cc:371
-
void transform_to_dap4(AttrTable &at)
copy attributes from DAP2 to DAP4
-
std::string get_namespace() const
Get the namespace associated with the DMR.
Definition: DMR.h:151
-
virtual void dump(std::ostream &strm) const
dumps information about this object
Definition: DMR.cc:531
-
void add_var(BaseType *bt)
Adds a copy of the variable to the DDS. Using the ptr_duplicate() method, perform a deep copy on the ...
Definition: DDS.cc:586
-
-
- - - - diff --git a/html/DMR_8h_source.html b/html/DMR_8h_source.html deleted file mode 100644 index f1f14ab42..000000000 --- a/html/DMR_8h_source.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - -libdap: DMR.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
DMR.h
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2013 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 #ifndef _dmr_h
26 #define _dmr_h 1
27 
28 #include <cassert>
29 
30 #include <iostream>
31 #include <string>
32 #include <vector>
33 
34 #include "DapObj.h"
35 
36 namespace libdap
37 {
38 
39 class D4Group;
40 class D4BaseTypeFactory;
41 class XMLWriter;
42 
43 class DDS;
44 
53 class DMR : public DapObj
54 {
55 private:
56  D4BaseTypeFactory *d_factory;
57 
59  std::string d_name;
61  std::string d_filename;
62 
64  int d_dap_major;
66  int d_dap_minor;
68  std::string d_dap_version;
69 
71  std::string d_dmr_version;
72 
74  std::string d_request_xml_base;
75 
77  std::string d_namespace;
78 
80  long d_max_response_size_kb;
81 
83  D4Group *d_root;
84 
85  friend class DMRTest;
86 
87 protected:
88  void m_duplicate(const DMR &dmr);
89 
90 public:
91  DMR();
92  DMR(const DMR &dmr);
93  DMR(D4BaseTypeFactory *factory, const std::string &name = "");
94 
95  DMR(D4BaseTypeFactory *factory, DDS &dds);
96 
97  virtual ~DMR();
98 
99  DMR &operator=(const DMR &rhs);
100 
101  virtual void build_using_dds(DDS &dds);
102 
107  bool OK() const { return (d_factory && d_root && !d_dap_version.empty()); }
108 
115  std::string name() const { return d_name; }
116  void set_name(const std::string &n) { d_name = n; }
118 
123  virtual D4BaseTypeFactory *factory() { return d_factory; }
124  virtual void set_factory(D4BaseTypeFactory *f) { d_factory = f; }
126 
132  std::string filename() const { return d_filename; }
133  void set_filename(const std::string &fn) { d_filename = fn;}
135 
136  std::string dap_version() const { return d_dap_version; }
137  void set_dap_version(const std::string &version_string);
138  int dap_major() const { return d_dap_major; }
139  int dap_minor() const { return d_dap_minor; }
140 
141  std::string dmr_version() const { return d_dmr_version; }
142  void set_dmr_version(const std::string &v) { d_dmr_version = v; }
143 
145  std::string request_xml_base() const { return d_request_xml_base; }
146 
148  void set_request_xml_base(const std::string &xb) { d_request_xml_base = xb; }
149 
151  std::string get_namespace() const { return d_namespace; }
152 
154  void set_namespace(const std::string &ns) { d_namespace = ns; }
155 
156  // TODO Move the response_limit methods to D4ResponseBuilder? jhrg 5/1/13
158  long response_limit() { return d_max_response_size_kb; }
159 
163  void set_response_limit(long size) { d_max_response_size_kb = size; }
164 
166  long request_size(bool constrained);
167 
172  D4Group *root();
173 
174  // TODO Remove this static method? If we have a DMR, why not use the
175  // getDDS() method below? jhrg 2.28.18
176  //static DDS *getDDS(DMR &dmr);
177  virtual DDS *getDDS();
178 
179  void print_dap4(XMLWriter &xml, bool constrained = false);
180 
181  virtual void dump(std::ostream &strm) const ;
182 };
183 
184 } // namespace libdap
185 
186 #endif // _dmr_h
std::string name() const
Definition: DMR.h:115
-
void set_response_limit(long size)
Definition: DMR.h:163
-
void print_dap4(XMLWriter &xml, bool constrained=false)
Definition: DMR.cc:478
-
void set_namespace(const std::string &ns)
Set the namespace for this DMR.
Definition: DMR.h:154
-
D4Group * root()
Definition: DMR.cc:407
-
long response_limit()
Get the maximum response size, in KB. Zero indicates no limit.
Definition: DMR.h:158
-
virtual ~DMR()
Definition: DMR.cc:200
-
void set_request_xml_base(const std::string &xb)
Definition: DMR.h:148
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
std::string filename() const
Definition: DMR.h:132
- - -
bool OK() const
Definition: DMR.h:107
-
virtual D4BaseTypeFactory * factory()
Definition: DMR.h:123
- -
std::string request_xml_base() const
Get the URL that will return this DMR.
Definition: DMR.h:145
-
long request_size(bool constrained)
Get the estimated response size, in kilo bytes.
Definition: DMR.cc:465
-
void set_dap_version(const std::string &version_string)
Definition: DMR.cc:419
-
virtual void build_using_dds(DDS &dds)
Definition: DMR.cc:226
- -
libdap base object for common functionality of libdap objects
Definition: DapObj.h:50
- - -
virtual DDS * getDDS()
Build a DDS from a DMR.
Definition: DMR.cc:371
-
std::string get_namespace() const
Get the namespace associated with the DMR.
Definition: DMR.h:151
-
virtual void dump(std::ostream &strm) const
dumps information about this object
Definition: DMR.cc:531
-
-
- - - - diff --git a/html/DODSFilter_8cc_source.html b/html/DODSFilter_8cc_source.html deleted file mode 100644 index 9e98854e4..000000000 --- a/html/DODSFilter_8cc_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - -libdap: DODSFilter.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
DODSFilter.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1997-1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Implementation of the DODSFilter class. This class is used to build dods
33 // filter programs which, along with a CGI program, comprise OPeNDAP servers.
34 // jhrg 8/26/97
35 
36 
37 #include "config.h"
38 
39 #include <signal.h>
40 
41 #ifndef WIN32
42 #include <unistd.h> // for getopt
43 #include <sys/wait.h>
44 #else
45 #include <io.h>
46 #include <fcntl.h>
47 #include <process.h>
48 #endif
49 
50 #include <iostream>
51 #include <sstream>
52 #include <string>
53 #include <algorithm>
54 #include <cstdlib>
55 #include <cstring>
56 
57 #ifdef HAVE_UUID_UUID_H
58 #include <uuid/uuid.h> // used to build CID header value for data ddx
59 #elif defined(HAVE_UUID_H)
60 #include <uuid.h>
61 #else
62 #error "Could not find UUID library header"
63 #endif
64 
65 #include <GetOpt.h>
66 
67 #include "DAS.h"
68 #include "DDS.h"
69 #include "debug.h"
70 #include "mime_util.h"
71 #include "Ancillary.h"
72 #include "util.h"
73 #include "escaping.h"
74 #include "DODSFilter.h"
75 #include "XDRStreamMarshaller.h"
76 #include "InternalErr.h"
77 
78 #ifndef WIN32
79 #include "SignalHandler.h"
80 #include "EventHandler.h"
81 #include "AlarmHandler.h"
82 #endif
83 
84 #define CRLF "\r\n" // Change here, expr-test.cc and DODSFilter.cc
85 
86 using namespace std;
87 
88 namespace libdap {
89 
90 const string usage =
91  "Usage: <handler name> -o <response> -u <url> [options ...] [data set]\n\
92  \n\
93  options: -o <response>: DAS, DDS, DataDDS, DDX, BLOB or Version (Required)\n\
94  -u <url>: The complete URL minus the CE (required for DDX)\n\
95  -c: Compress the response using the deflate algorithm.\n\
96  -e <expr>: When returning a DataDDS, use <expr> as the constraint.\n\
97  -v <version>: Use <version> as the version number\n\
98  -d <dir>: Look for ancillary file in <dir> (deprecated).\n\
99  -f <file>: Look for ancillary data in <file> (deprecated).\n\
100  -r <dir>: Use <dir> as a cache directory\n\
101  -l <time>: Conditional request; if data source is unchanged since\n\
102  <time>, return an HTTP 304 response.\n\
103  -t <seconds>: Timeout the handler after <seconds>.\n\
104  -h: This message.";
105 
170 DODSFilter::DODSFilter(int argc, char *argv[]) throw(Error)
171 {
172  initialize(argc, argv);
173 
174  DBG(cerr << "d_comp: " << d_comp << endl);
175  DBG(cerr << "d_dap2ce: " << d_dap2ce << endl);
176  DBG(cerr << "d_cgi_ver: " << d_cgi_ver << endl);
177  DBG(cerr << "d_response: " << d_response << endl);
178  DBG(cerr << "d_anc_dir: " << d_anc_dir << endl);
179  DBG(cerr << "d_anc_file: " << d_anc_file << endl);
180  DBG(cerr << "d_cache_dir: " << d_cache_dir << endl);
181  DBG(cerr << "d_conditional_request: " << d_conditional_request << endl);
182  DBG(cerr << "d_if_modified_since: " << d_if_modified_since << endl);
183  DBG(cerr << "d_url: " << d_url << endl);
184  DBG(cerr << "d_timeout: " << d_timeout << endl);
185 }
186 
187 DODSFilter::~DODSFilter()
188 {
189 }
190 
193 void
194 DODSFilter::initialize()
195 {
196  // Set default values. Don't use the C++ constructor initialization so
197  // that a subclass can have more control over this process.
198  d_comp = false;
199  d_bad_options = false;
200  d_conditional_request = false;
201  d_dataset = "";
202  d_dap2ce = "";
203  d_cgi_ver = "";
204  d_anc_dir = "";
205  d_anc_file = "";
206  d_cache_dir = "";
207  d_response = Unknown_Response;;
208  d_anc_das_lmt = 0;
209  d_anc_dds_lmt = 0;
210  d_if_modified_since = -1;
211  d_url = "";
212  d_program_name = "Unknown";
213  d_timeout = 0;
214 
215 #ifdef WIN32
216  // We want serving from win32 to behave in a manner
217  // similar to the UNIX way - no CR->NL terminated lines
218  // in files. Hence stdout goes to binary mode.
219  _setmode(_fileno(stdout), _O_BINARY);
220 #endif
221 }
222 
234 void
235 DODSFilter::initialize(int argc, char *argv[])
236 {
237  initialize();
238 
239  d_program_name = argv[0];
240 
241  // This should be specialized by a subclass. This may throw Error.
242  int next_arg = process_options(argc, argv);
243 
244  // Look at what's left after processing the command line options. Either
245  // there MUST be a dataset name OR the caller is asking for version
246  // information. If neither is true, then the options are bad.
247  if (next_arg < argc) {
248  d_dataset = argv[next_arg];
249  d_dataset = www2id(d_dataset, "%", "%20");
250  }
251  else if (get_response() != Version_Response)
252  print_usage(); // Throws Error
253 }
254 
263 int
264 DODSFilter::process_options(int argc, char *argv[])
265 {
266  DBG(cerr << "Entering process_options... ");
267 
268  int option_char;
269  GetOpt getopt (argc, argv, "ce: v: d: f: r: l: o: u: t: ");
270 
271  while ((option_char = getopt()) != -1) {
272  switch (option_char) {
273  case 'c': d_comp = true; break;
274  case 'e': set_ce(getopt.optarg); break;
275  case 'v': set_cgi_version(getopt.optarg); break;
276  case 'd': d_anc_dir = getopt.optarg; break;
277  case 'f': d_anc_file = getopt.optarg; break;
278  case 'r': d_cache_dir = getopt.optarg; break;
279  case 'o': set_response(getopt.optarg); break;
280  case 'u': set_URL(getopt.optarg); break;
281  case 't': d_timeout = atoi(getopt.optarg); break;
282  case 'l':
283  d_conditional_request = true;
284  d_if_modified_since
285  = static_cast<time_t>(strtol(getopt.optarg, NULL, 10));
286  break;
287  case 'h': print_usage();
288  break;
289  // exit(1);
290  // Removed 12/29/2011; exit should
291  // not be called by a library. NB:
292  // print_usage() throws Error.
293  default: print_usage(); // Throws Error
294  break;
295  }
296  }
297 
298  DBGN(cerr << "exiting." << endl);
299 
300  return getopt.optind; // return the index of the next argument
301 }
302 
307 bool
308 DODSFilter::is_conditional() const
309 {
310  return d_conditional_request;
311 }
312 
326 void
327 DODSFilter::set_cgi_version(string version)
328 {
329  d_cgi_ver = version;
330 }
331 
337 string
338 DODSFilter::get_cgi_version() const
339 {
340  return d_cgi_ver;
341 }
342 
349 string
350 DODSFilter::get_ce() const
351 {
352  return d_dap2ce;
353 }
354 
355 void
356 DODSFilter::set_ce(string _ce)
357 {
358  d_dap2ce = www2id(_ce, "%", "%20");
359 }
360 
369 string
370 DODSFilter::get_dataset_name() const
371 {
372  return d_dataset;
373 }
374 
375 void
376 DODSFilter::set_dataset_name(const string ds)
377 {
378  d_dataset = www2id(ds, "%", "%20");
379 }
380 
384 string
385 DODSFilter::get_URL() const
386 {
387  return d_url;
388 }
389 
392 void
393 DODSFilter::set_URL(const string &url)
394 {
395  if (url.find('?') != url.npos)
396  print_usage(); // Throws Error
397 
398  d_url = url;
399 }
400 
408 string
409 DODSFilter::get_dataset_version() const
410 {
411  return "";
412 }
413 
420 void DODSFilter::set_response(const string &r)
421 {
422  if (r == "DAS" || r == "das") {
423  d_response = DAS_Response;
424  d_action = "das" ;
425  }
426  else if (r == "DDS" || r == "dds") {
427  d_response = DDS_Response;
428  d_action = "dds" ;
429  }
430  else if (r == "DataDDS" || r == "dods") {
431  d_response = DataDDS_Response;
432  d_action = "dods" ;
433  }
434  else if (r == "DDX" || r == "ddx") {
435  d_response = DDX_Response;
436  d_action = "ddx" ;
437  }
438  else if (r == "DataDDX" || r == "dataddx") {
439  d_response = DataDDX_Response;
440  d_action = "dataddx" ;
441  }
442  else if (r == "Version") {
443  d_response = Version_Response;
444  d_action = "version" ;
445  }
446  else
447  print_usage(); // Throws Error
448 }
449 
452 DODSFilter::get_response() const
453 {
454  return d_response;
455 }
456 
458 string DODSFilter::get_action() const
459 {
460  return d_action;
461 }
462 
483 time_t
484 DODSFilter::get_dataset_last_modified_time() const
485 {
486  return last_modified_time(d_dataset);
487 }
488 
498 time_t
499 DODSFilter::get_das_last_modified_time(const string &anc_location) const
500 {
501  DBG(cerr << "DODSFilter::get_das_last_modified_time(anc_location="
502  << anc_location << "call faf(das) d_dataset=" << d_dataset
503  << " d_anc_file=" << d_anc_file << endl);
504 
505  string name
506  = Ancillary::find_ancillary_file(d_dataset, "das",
507  (anc_location == "") ? d_anc_dir : anc_location,
508  d_anc_file);
509 
510  return max((name != "") ? last_modified_time(name) : 0,
511  get_dataset_last_modified_time());
512 }
513 
521 time_t
522 DODSFilter::get_dds_last_modified_time(const string &anc_location) const
523 {
524  DBG(cerr << "DODSFilter::get_das_last_modified_time(anc_location="
525  << anc_location << "call faf(dds) d_dataset=" << d_dataset
526  << " d_anc_file=" << d_anc_file << endl);
527 
528  string name
529  = Ancillary::find_ancillary_file(d_dataset, "dds",
530  (anc_location == "") ? d_anc_dir : anc_location,
531  d_anc_file);
532 
533  return max((name != "") ? last_modified_time(name) : 0,
534  get_dataset_last_modified_time());
535 }
536 
550 time_t
551 DODSFilter::get_data_last_modified_time(const string &anc_location) const
552 {
553  DBG(cerr << "DODSFilter::get_das_last_modified_time(anc_location="
554  << anc_location << "call faf(both) d_dataset=" << d_dataset
555  << " d_anc_file=" << d_anc_file << endl);
556 
557  string dds_name
558  = Ancillary::find_ancillary_file(d_dataset, "dds",
559  (anc_location == "") ? d_anc_dir : anc_location,
560  d_anc_file);
561  string das_name
562  = Ancillary::find_ancillary_file(d_dataset, "das",
563  (anc_location == "") ? d_anc_dir : anc_location,
564  d_anc_file);
565 
566  time_t m = max((das_name != "") ? last_modified_time(das_name) : (time_t)0,
567  (dds_name != "") ? last_modified_time(dds_name) : (time_t)0);
568  // Note that this is a call to get_dataset_... not get_data_...
569  time_t n = get_dataset_last_modified_time();
570 
571  return max(m, n);
572 }
573 
581 time_t
582 DODSFilter::get_request_if_modified_since() const
583 {
584  return d_if_modified_since;
585 }
586 
593 string
594 DODSFilter::get_cache_dir() const
595 {
596  return d_cache_dir;
597 }
598 
603 void
604 DODSFilter::set_timeout(int t)
605 {
606  d_timeout = t;
607 }
608 
610 int
611 DODSFilter::get_timeout() const
612 {
613  return d_timeout;
614 }
615 
627 void
628 DODSFilter::establish_timeout(FILE *stream) const
629 {
630 #ifndef WIN32
631  if (d_timeout > 0) {
632  SignalHandler *sh = SignalHandler::instance();
633  EventHandler *old_eh = sh->register_handler(SIGALRM, new AlarmHandler(stream));
634  delete old_eh;
635  alarm(d_timeout);
636  }
637 #endif
638 }
639 
640 void
641 DODSFilter::establish_timeout(ostream &stream) const
642 {
643 #ifndef WIN32
644  if (d_timeout > 0) {
645  SignalHandler *sh = SignalHandler::instance();
646  EventHandler *old_eh = sh->register_handler(SIGALRM, new AlarmHandler(stream));
647  delete old_eh;
648  alarm(d_timeout);
649  }
650 #endif
651 }
652 
653 static const char *emessage = "DODS internal server error; usage error. Please report this to the dataset maintainer, or to the opendap-tech@opendap.org mailing list.";
654 
664 void
665 DODSFilter::print_usage() const
666 {
667  // Write a message to the WWW server error log file.
668  ErrMsgT(usage.c_str());
669 
670  throw Error(emessage);
671 }
672 
678 void
679 DODSFilter::send_version_info() const
680 {
681  do_version(d_cgi_ver, get_dataset_version());
682 }
683 
695 void
696 DODSFilter::send_das(FILE *out, DAS &das, const string &anc_location,
697  bool with_mime_headers) const
698 {
699  ostringstream oss;
700  send_das(oss, das, anc_location, with_mime_headers);
701  fwrite(oss.str().data(), sizeof(char), oss.str().length(), out);
702 }
703 
715 void
716 DODSFilter::send_das(ostream &out, DAS &das, const string &anc_location,
717  bool with_mime_headers) const
718 {
719  time_t das_lmt = get_das_last_modified_time(anc_location);
720  if (is_conditional()
721  && das_lmt <= get_request_if_modified_since()
722  && with_mime_headers) {
724  }
725  else {
726  if (with_mime_headers)
727  set_mime_text(out, dods_das, d_cgi_ver, x_plain, das_lmt);
728  das.print(out);
729  }
730  out << flush ;
731 }
732 
733 void
734 DODSFilter::send_das(DAS &das, const string &anc_location,
735  bool with_mime_headers) const
736 {
737  send_das(cout, das, anc_location, with_mime_headers);
738 }
739 
756 void
757 DODSFilter::send_dds(FILE *out, DDS &dds, ConstraintEvaluator &eval,
758  bool constrained,
759  const string &anc_location,
760  bool with_mime_headers) const
761 {
762  ostringstream oss;
763  send_dds(oss, dds, eval, constrained, anc_location, with_mime_headers);
764  fwrite(oss.str().data(), sizeof(char), oss.str().length(), out);
765 }
766 
783 void
784 DODSFilter::send_dds(ostream &out, DDS &dds, ConstraintEvaluator &eval,
785  bool constrained,
786  const string &anc_location,
787  bool with_mime_headers) const
788 {
789  // If constrained, parse the constraint. Throws Error or InternalErr.
790  if (constrained)
791  eval.parse_constraint(d_dap2ce, dds);
792 
793  if (eval.functional_expression())
794  throw Error("Function calls can only be used with data requests. To see the structure of the underlying data source, reissue the URL without the function.");
795 
796  time_t dds_lmt = get_dds_last_modified_time(anc_location);
797  if (is_conditional()
798  && dds_lmt <= get_request_if_modified_since()
799  && with_mime_headers) {
801  }
802  else {
803  if (with_mime_headers)
804  set_mime_text(out, dods_dds, d_cgi_ver, x_plain, dds_lmt);
805  if (constrained)
806  dds.print_constrained(out);
807  else
808  dds.print(out);
809  }
810 
811  out << flush ;
812 }
813 
814 void
815 DODSFilter::send_dds(DDS &dds, ConstraintEvaluator &eval,
816  bool constrained, const string &anc_location,
817  bool with_mime_headers) const
818 {
819  send_dds(cout, dds, eval, constrained, anc_location, with_mime_headers);
820 }
821 
822 // 'lmt' unused. Should it be used to supply a LMT or removed from the
823 // method? jhrg 8/9/05
824 void
825 DODSFilter::functional_constraint(BaseType &var, DDS &dds,
826  ConstraintEvaluator &eval, FILE *out) const
827 {
828  ostringstream oss;
829  functional_constraint(var, dds, eval, oss);
830  fwrite(oss.str().data(), sizeof(char), oss.str().length(), out);
831 }
832 
833 // 'lmt' unused. Should it be used to supply a LMT or removed from the
834 // method? jhrg 8/9/05
835 void
836 DODSFilter::functional_constraint(BaseType &var, DDS &dds,
837  ConstraintEvaluator &eval, ostream &out) const
838 {
839  out << "Dataset {\n" ;
840  var.print_decl(out, " ", true, false, true);
841  out << "} function_value;\n" ;
842  out << "Data:\n" ;
843 
844  out << flush ;
845 
846  // Grab a stream that encodes using XDR.
847  XDRStreamMarshaller m( out ) ;
848 
849  try {
850  // In the following call to serialize, suppress CE evaluation.
851  var.serialize(eval, dds, m, false);
852  }
853  catch (Error &e) {
854  throw;
855  }
856 }
857 
858 void
859 DODSFilter::dataset_constraint(DDS & dds, ConstraintEvaluator & eval,
860  FILE * out, bool ce_eval) const
861 {
862  ostringstream oss;
863  dataset_constraint(dds, eval, oss, ce_eval);
864  fwrite(oss.str().data(), sizeof(char), oss.str().length(), out);
865 }
866 
867 void
868 DODSFilter::dataset_constraint(DDS & dds, ConstraintEvaluator & eval,
869  ostream &out, bool ce_eval) const
870 {
871  // send constrained DDS
872  dds.print_constrained(out);
873  out << "Data:\n" ;
874  out << flush ;
875 
876  // Grab a stream that encodes using XDR.
877  XDRStreamMarshaller m( out ) ;
878 
879  try {
880  // Send all variables in the current projection (send_p())
881  for (DDS::Vars_iter i = dds.var_begin(); i != dds.var_end(); i++)
882  if ((*i)->send_p()) {
883  DBG(cerr << "Sending " << (*i)->name() << endl);
884  (*i)->serialize(eval, dds, m, ce_eval);
885  }
886  }
887  catch (Error & e) {
888  throw;
889  }
890 }
891 
892 void
893 DODSFilter::dataset_constraint_ddx(DDS & dds, ConstraintEvaluator & eval,
894  ostream &out, const string &boundary,
895  const string &start, bool ce_eval) const
896 {
897  // Write the MPM headers for the DDX (text/xml) part of the response
898  set_mime_ddx_boundary(out, boundary, start, dods_ddx);
899 
900  // Make cid
901  uuid_t uu;
902  uuid_generate(uu);
903  char uuid[37];
904  uuid_unparse(uu, &uuid[0]);
905  char domain[256];
906  if (getdomainname(domain, 255) != 0 || strlen(domain) == 0)
907  strncpy(domain, "opendap.org", 255);
908 
909  string cid = string(&uuid[0]) + "@" + string(&domain[0]);
910 
911  // Send constrained DDX with a data blob reference
912  dds.print_xml_writer(out, true, cid);
913 
914  // Write the MPM headers for the data part of the response.
915  set_mime_data_boundary(out, boundary, cid, dap4_data, binary);
916 
917  // Grab a stream that encodes using XDR.
918  XDRStreamMarshaller m( out ) ;
919 
920  try {
921  // Send all variables in the current projection (send_p())
922  for (DDS::Vars_iter i = dds.var_begin(); i != dds.var_end(); i++)
923  if ((*i)->send_p()) {
924  DBG(cerr << "Sending " << (*i)->name() << endl);
925  (*i)->serialize(eval, dds, m, ce_eval);
926  }
927  }
928  catch (Error & e) {
929  throw;
930  }
931 }
932 
949 void
950 DODSFilter::send_data(DDS & dds, ConstraintEvaluator & eval,
951  FILE * data_stream, const string & anc_location,
952  bool with_mime_headers) const
953 {
954  ostringstream oss;
955  send_data(dds, eval, oss, anc_location, with_mime_headers);
956  fwrite(oss.str().data(), sizeof(char), oss.str().length(), data_stream);
957 }
958 
975 void
976 DODSFilter::send_data(DDS & dds, ConstraintEvaluator & eval,
977  ostream & data_stream, const string & anc_location,
978  bool with_mime_headers) const
979 {
980  // If this is a conditional request and the server should send a 304
981  // response, do that and exit. Otherwise, continue on and send the full
982  // response.
983  time_t data_lmt = get_data_last_modified_time(anc_location);
984  if (is_conditional()
985  && data_lmt <= get_request_if_modified_since()
986  && with_mime_headers) {
987  set_mime_not_modified(data_stream);
988  return;
989  }
990  // Set up the alarm.
991  establish_timeout(data_stream);
992  dds.set_timeout(d_timeout);
993 
994  eval.parse_constraint(d_dap2ce, dds); // Throws Error if the ce doesn't
995  // parse.
996 
997  dds.tag_nested_sequences(); // Tag Sequences as Parent or Leaf node.
998 
999  // Start sending the response...
1000 
1001  // Handle *functional* constraint expressions specially
1002 #if 0
1003  if (eval.functional_expression()) {
1004  // Get the result and then start sending the headers. This provides a
1005  // way to send errors back to the client w/o colliding with the
1006  // normal response headers. There's some duplication of code with this
1007  // and the else-clause.
1008  BaseType *var = eval.eval_function(dds, d_dataset);
1009  if (!var)
1010  throw Error(unknown_error, "Error calling the CE function.");
1011 
1012  if (with_mime_headers)
1013  set_mime_binary(data_stream, dods_data, d_cgi_ver, x_plain, data_lmt);
1014 
1015  data_stream << flush ;
1016 
1017  functional_constraint(*var, dds, eval, data_stream);
1018  delete var;
1019  var = 0;
1020  }
1021 #endif
1022  if (eval.function_clauses()) {
1023  DDS *fdds = eval.eval_function_clauses(dds);
1024  if (with_mime_headers)
1025  set_mime_binary(data_stream, dods_data, d_cgi_ver, x_plain, data_lmt);
1026 
1027  dataset_constraint(*fdds, eval, data_stream, false);
1028  delete fdds;
1029  }
1030  else {
1031  if (with_mime_headers)
1032  set_mime_binary(data_stream, dods_data, d_cgi_ver, x_plain, data_lmt);
1033 
1034  dataset_constraint(dds, eval, data_stream);
1035  }
1036 
1037  data_stream << flush ;
1038 }
1039 
1050 void
1051 DODSFilter::send_ddx(DDS &dds, ConstraintEvaluator &eval, FILE *out,
1052  bool with_mime_headers) const
1053 {
1054  ostringstream oss;
1055  send_ddx(dds, eval, oss, with_mime_headers);
1056  fwrite(oss.str().data(), sizeof(char), oss.str().length(), out);
1057 }
1058 
1069 void
1070 DODSFilter::send_ddx(DDS &dds, ConstraintEvaluator &eval, ostream &out,
1071  bool with_mime_headers) const
1072 {
1073  // If constrained, parse the constraint. Throws Error or InternalErr.
1074  if (!d_dap2ce.empty())
1075  eval.parse_constraint(d_dap2ce, dds);
1076 
1077  if (eval.functional_expression())
1078  throw Error("Function calls can only be used with data requests. To see the structure of the underlying data source, reissue the URL without the function.");
1079 
1080  time_t dds_lmt = get_dds_last_modified_time(d_anc_dir);
1081 
1082  // If this is a conditional request and the server should send a 304
1083  // response, do that and exit. Otherwise, continue on and send the full
1084  // response.
1085  if (is_conditional() && dds_lmt <= get_request_if_modified_since()
1086  && with_mime_headers) {
1087  set_mime_not_modified(out);
1088  return;
1089  }
1090  else {
1091  if (with_mime_headers)
1092  set_mime_text(out, dods_ddx, d_cgi_ver, x_plain, dds_lmt);
1093  dds.print_xml_writer(out, !d_dap2ce.empty(), "");
1094  }
1095 }
1096 
1117 void
1118 DODSFilter::send_data_ddx(DDS & dds, ConstraintEvaluator & eval,
1119  ostream & data_stream, const string &start,
1120  const string &boundary, const string & anc_location,
1121  bool with_mime_headers) const
1122 {
1123  // If this is a conditional request and the server should send a 304
1124  // response, do that and exit. Otherwise, continue on and send the full
1125  // response.
1126  time_t data_lmt = get_data_last_modified_time(anc_location);
1127  if (is_conditional()
1128  && data_lmt <= get_request_if_modified_since()
1129  && with_mime_headers) {
1130  set_mime_not_modified(data_stream);
1131  return;
1132  }
1133  // Set up the alarm.
1134  establish_timeout(data_stream);
1135  dds.set_timeout(d_timeout);
1136 
1137  eval.parse_constraint(d_dap2ce, dds); // Throws Error if the ce doesn't
1138  // parse.
1139 
1140  dds.tag_nested_sequences(); // Tag Sequences as Parent or Leaf node.
1141 
1142  // Start sending the response...
1143 
1144  // Handle *functional* constraint expressions specially
1145 #if 0
1146  if (eval.functional_expression()) {
1147  BaseType *var = eval.eval_function(dds, d_dataset);
1148  if (!var)
1149  throw Error(unknown_error, "Error calling the CE function.");
1150 
1151  if (with_mime_headers)
1152  set_mime_multipart(data_stream, boundary, start, dods_data_ddx,
1153  d_cgi_ver, x_plain, data_lmt);
1154  data_stream << flush ;
1155  BaseTypeFactory btf;
1156  DDS var_dds(&btf, var->name());
1157  var->set_send_p(true);
1158  var_dds.add_var(var);
1159  serialize_dap2_data_ddx(var_dds, eval, data_stream, boundary, start);
1160 
1161  // functional_constraint_ddx(*var, dds, eval, data_stream, boundary);
1162  delete var;
1163  var = 0;
1164  }
1165 #endif
1166  if (eval.function_clauses()) {
1167  DDS *fdds = eval.eval_function_clauses(dds);
1168  if (with_mime_headers)
1169  set_mime_multipart(data_stream, boundary, start, dods_data_ddx,
1170  d_cgi_ver, x_plain, data_lmt);
1171  data_stream << flush ;
1172  dataset_constraint(*fdds, eval, data_stream, false);
1173  delete fdds;
1174  }
1175  else {
1176  if (with_mime_headers)
1177  set_mime_multipart(data_stream, boundary, start, dods_data_ddx,
1178  d_cgi_ver, x_plain, data_lmt);
1179  data_stream << flush ;
1180  dataset_constraint_ddx(dds, eval, data_stream, boundary, start);
1181  }
1182 
1183  data_stream << flush ;
1184 
1185  if (with_mime_headers)
1186  data_stream << CRLF << "--" << boundary << "--" << CRLF;
1187 }
1188 
1189 } // namespace libdap
1190 
virtual string name() const
Returns the name of the class instance.
Definition: BaseType.cc:320
-
virtual void print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
Print an ASCII representation of the variable structure.
Definition: BaseType.cc:1003
-
void ErrMsgT(const string &Msgt)
Logs an error message.
Definition: mime_util.cc:222
-
void print(FILE *out)
Print the entire DDS to the specified file.
Definition: DDS.cc:1023
-
time_t last_modified_time(const string &name)
Definition: mime_util.cc:95
- -
Vars_iter var_begin()
Return an iterator to the first variable.
Definition: DDS.cc:799
- -
STL namespace.
-
void set_mime_text(FILE *out, ObjectType type, const string &ver, EncodingType enc, const time_t last_modified)
Definition: mime_util.cc:381
-
void print_xml_writer(ostream &out, bool constrained, const string &blob="")
Definition: DDS.cc:1433
-
Definition: GetOpt.h:38
-
BaseType * eval_function(DDS &dds, const std::string &dataset)
Evaluate a function-valued constraint expression.
-
virtual void print(FILE *out, bool dereference=false)
Definition: DAS.cc:331
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
Move data to the net, then remove them from the object.
Definition: BaseType.cc:937
-
virtual void set_send_p(bool state)
Definition: BaseType.cc:568
-
DDS * eval_function_clauses(DDS &dds)
Evaluate a function-valued constraint expression that contains several function calls.
- - -
void set_mime_binary(FILE *out, ObjectType type, const string &ver, EncodingType enc, const time_t last_modified)
Definition: mime_util.cc:623
-
void parse_constraint(const std::string &constraint, DDS &dds)
Parse the constraint expression given the current DDS.
-
void set_mime_not_modified(FILE *out)
Send a `Not Modified&#39; response.
Definition: mime_util.cc:1145
-
string www2id(const string &in, const string &escape, const string &except)
Definition: escaping.cc:220
-
Vars_iter var_end()
Return an iterator.
Definition: DDS.cc:811
-
Evaluate a constraint expression.
-
void tag_nested_sequences()
Traverse DDS, set Sequence leaf nodes.
Definition: DDS.cc:930
-
bool functional_expression()
Does the current constraint expression return a BaseType pointer? This method does not evaluate the c...
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
Hold attribute data for a DAP2 dataset.
Definition: DAS.h:121
-
bool function_clauses()
Does the current constraint expression contain function clauses.
-
A class for error processing.
Definition: Error.h:92
-
EventHandler * register_handler(int signum, EventHandler *eh, bool override=false)
- -
Marshaller that knows how serialize dap data objects to a C++ iostream using XDR. ...
-
bool do_version(const string &script_ver, const string &dataset_ver)
Send a version number.
Definition: mime_util.cc:189
-
void print_constrained(FILE *out)
Print a constrained DDS to the specified file.
Definition: DDS.cc:1332
- -
-
- - - - diff --git a/html/DODSFilter_8h_source.html b/html/DODSFilter_8h_source.html deleted file mode 100644 index 503163486..000000000 --- a/html/DODSFilter_8h_source.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - -libdap: DODSFilter.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
DODSFilter.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1997-1999
27 // Please first read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 #ifndef _dodsfilter_h
33 #define _dodsfilter_h
34 
35 #include <string>
36 
37 #ifndef _das_h
38 #include "DAS.h"
39 #endif
40 
41 #ifndef _dds_h
42 #include "DDS.h"
43 #endif
44 
45 #ifndef constraint_evaluator_h
46 #include "ConstraintEvaluator.h"
47 #endif
48 
49 namespace libdap
50 {
51 
79 {
80 public:
82  enum Response {
83  Unknown_Response,
84  DAS_Response,
85  DDS_Response,
86  DataDDS_Response,
87  DDX_Response,
88  DataDDX_Response,
89  BLOB_Response,
90  Version_Response
91  };
92 
93 protected:
94  bool d_comp; // True if the output should be compressed.
95  bool d_bad_options; // True if the options (argc,argv) are bad.
96  bool d_conditional_request;
97 
98  string d_program_name; // Name of the filter program
99  string d_dataset; // Name of the dataset/database
100  string d_dap2ce; // DAP2 Constraint expression
101  string d_cgi_ver; // Version of CGI script (caller)
102  string d_anc_dir; // Look here for ancillary files
103  string d_anc_file; // Use this for ancillary file name
104  string d_cache_dir; // Use this for cache files
105  string d_url; // URL minus CE.
106 
107  Response d_response; // enum name of the response to generate
108  string d_action; // string name of the response to generate
109 
110  int d_timeout; // Server timeout after N seconds
111 
112  time_t d_anc_das_lmt; // Last modified time of the anc. DAS.
113  time_t d_anc_dds_lmt; // Last modified time of the anc. DDS.
114  time_t d_if_modified_since; // Time from a conditional request.
115 
116  void initialize();
117  void initialize(int argc, char *argv[]);
118 
119  virtual int process_options(int argc, char *argv[]);
120 
121 public:
130  {
131  initialize();
132  }
133  DODSFilter(int argc, char *argv[]) throw(Error);
134 
135  virtual ~DODSFilter();
136 
137  virtual bool is_conditional() const;
138 
139  virtual string get_cgi_version() const;
140  virtual void set_cgi_version(string version);
141 
142  virtual string get_ce() const;
143  virtual void set_ce(string _ce);
144 
145  virtual string get_dataset_name() const;
146  virtual void set_dataset_name(const string _dataset);
147 
148  virtual string get_URL() const;
149  virtual void set_URL(const string &url);
150 
151  virtual string get_dataset_version() const;
152 
153  virtual Response get_response() const;
154  virtual string get_action() const;
155  virtual void set_response(const string &r);
156 
157  virtual time_t get_dataset_last_modified_time() const;
158 
159  virtual time_t get_das_last_modified_time(const string &anc_location = "") const;
160 
161  virtual time_t get_dds_last_modified_time(const string &anc_location = "") const;
162 
163  virtual time_t get_data_last_modified_time(const string &anc_location = "") const;
164 
165  virtual time_t get_request_if_modified_since() const;
166 
167  virtual string get_cache_dir() const;
168 
169  void set_timeout(int timeout = 0);
170 
171  int get_timeout() const;
172 
173  virtual void establish_timeout(ostream &stream) const;
174 
175  virtual void print_usage() const;
176 
177  virtual void send_version_info() const;
178 
179  virtual void send_das(DAS &das, const string &anc_location = "",
180  bool with_mime_headers = true) const;
181  virtual void send_das(ostream &out, DAS &das, const string &anc_location = "",
182  bool with_mime_headers = true) const;
183 
184  virtual void send_dds(DDS &dds, ConstraintEvaluator &eval,
185  bool constrained = false,
186  const string &anc_location = "",
187  bool with_mime_headers = true) const;
188  virtual void send_dds(ostream &out, DDS &dds, ConstraintEvaluator &eval,
189  bool constrained = false,
190  const string &anc_location = "",
191  bool with_mime_headers = true) const;
192  // deprecated
193  virtual void functional_constraint(BaseType &var, DDS &dds,
194  ConstraintEvaluator &eval, ostream &out) const;
195 
196  virtual void dataset_constraint(DDS &dds, ConstraintEvaluator &eval,
197  ostream &out, bool ce_eval = true) const;
198  virtual void dataset_constraint_ddx(DDS & dds, ConstraintEvaluator & eval,
199  ostream &out, const string &boundary,
200  const string &start,
201  bool ce_eval = true) const;
202 
203  virtual void send_data(DDS &dds, ConstraintEvaluator &eval,
204  ostream &data_stream,
205  const string &anc_location = "",
206  bool with_mime_headers = true) const;
207  virtual void send_ddx(DDS &dds, ConstraintEvaluator &eval, ostream &out,
208  bool with_mime_headers = true) const;
209  virtual void send_data_ddx(DDS &dds, ConstraintEvaluator &eval,
210  ostream &data_stream, const string &start,
211  const string &boundary,
212  const string &anc_location = "",
213  bool with_mime_headers = true) const;
214 
215  virtual void establish_timeout(FILE *stream) const;
216  virtual void send_das(FILE *out, DAS &das, const string &anc_location = "",
217  bool with_mime_headers = true) const;
218  virtual void send_dds(FILE *out, DDS &dds, ConstraintEvaluator &eval,
219  bool constrained = false,
220  const string &anc_location = "",
221  bool with_mime_headers = true) const;
222  // deprecated
223  virtual void functional_constraint(BaseType &var, DDS &dds,
224  ConstraintEvaluator &eval, FILE *out) const;
225 
226  virtual void dataset_constraint(DDS &dds, ConstraintEvaluator &eval,
227  FILE *out, bool ce_eval = true) const;
228  virtual void send_data(DDS &dds, ConstraintEvaluator &eval,
229  FILE *data_stream,
230  const string &anc_location = "",
231  bool with_mime_headers = true) const;
232  virtual void send_ddx(DDS &dds, ConstraintEvaluator &eval, FILE *out,
233  bool with_mime_headers = true) const;
234 };
235 
236 } // namespace libdap
237 
238 #endif // _dodsfilter_h
virtual void send_version_info() const
Send version information back to the client program.
Definition: DODSFilter.cc:679
-
virtual bool is_conditional() const
Is this request conditional?
Definition: DODSFilter.cc:308
-
virtual time_t get_data_last_modified_time(const string &anc_location="") const
Definition: DODSFilter.cc:551
-
virtual void print_usage() const
Print usage information for a filter program.
Definition: DODSFilter.cc:665
-
virtual void send_data_ddx(DDS &dds, ConstraintEvaluator &eval, ostream &data_stream, const string &start, const string &boundary, const string &anc_location="", bool with_mime_headers=true) const
Transmit data.
Definition: DODSFilter.cc:1118
-
virtual string get_dataset_name() const
Get the dataset name.
Definition: DODSFilter.cc:370
-
virtual time_t get_request_if_modified_since() const
Definition: DODSFilter.cc:582
-
virtual string get_action() const
Definition: DODSFilter.cc:458
-
virtual string get_URL() const
Definition: DODSFilter.cc:385
-
virtual int process_options(int argc, char *argv[])
Definition: DODSFilter.cc:264
- -
virtual string get_ce() const
Get the constraint expression.
Definition: DODSFilter.cc:350
- -
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual void send_ddx(DDS &dds, ConstraintEvaluator &eval, ostream &out, bool with_mime_headers=true) const
Definition: DODSFilter.cc:1070
-
virtual time_t get_dataset_last_modified_time() const
Definition: DODSFilter.cc:484
-
virtual string get_dataset_version() const
Get the version information for the dataset.
Definition: DODSFilter.cc:409
-
virtual void set_response(const string &r)
Definition: DODSFilter.cc:420
-
virtual void set_cgi_version(string version)
Definition: DODSFilter.cc:327
-
virtual Response get_response() const
Definition: DODSFilter.cc:452
-
int get_timeout() const
Definition: DODSFilter.cc:611
- -
virtual string get_cache_dir() const
Get the cache directory.
Definition: DODSFilter.cc:594
-
virtual string get_cgi_version() const
Definition: DODSFilter.cc:338
-
Evaluate a constraint expression.
-
Common functions for DODS server filter programs.
Definition: DODSFilter.h:78
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
virtual time_t get_dds_last_modified_time(const string &anc_location="") const
Definition: DODSFilter.cc:522
-
virtual void set_URL(const string &url)
Definition: DODSFilter.cc:393
-
Hold attribute data for a DAP2 dataset.
Definition: DAS.h:121
-
A class for error processing.
Definition: Error.h:92
-
virtual time_t get_das_last_modified_time(const string &anc_location="") const
Definition: DODSFilter.cc:499
-
virtual void send_data(DDS &dds, ConstraintEvaluator &eval, ostream &data_stream, const string &anc_location="", bool with_mime_headers=true) const
Transmit data.
Definition: DODSFilter.cc:976
- -
void set_timeout(int timeout=0)
Definition: DODSFilter.cc:604
-
-
- - - - diff --git a/html/DapIndent_8cc_source.html b/html/DapIndent_8cc_source.html deleted file mode 100644 index 3ae4f17ab..000000000 --- a/html/DapIndent_8cc_source.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - -libdap: DapIndent.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
DapIndent.cc
-
-
-
1 // DapIndent.cc
2 
3 // -*- mode: c++; c-basic-offset:4 -*-
4 
5 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
6 // Access Protocol.
7 
8 // Copyright (c) 2002,2003 OPeNDAP, Inc.
9 // Author: Patrick West <pwest@ucar.edu>
10 //
11 // This library is free software; you can redistribute it and/or
12 // modify it under the terms of the GNU Lesser General Public
13 // License as published by the Free Software Foundation; either
14 // version 2.1 of the License, or (at your option) any later version.
15 //
16 // This library is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 // Lesser General Public License for more details.
20 //
21 // You should have received a copy of the GNU Lesser General Public
22 // License along with this library; if not, write to the Free Software
23 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 //
25 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
26 
27 // (c) COPYRIGHT URI/MIT 1994-1999
28 // Please read the full copyright statement in the file COPYRIGHT_URI.
29 //
30 // Authors:
31 // pwest Patrick West <pwest@ucar.edu>
32 
33 // Methods for the class DapIndent - an indentation class to support
34 // debugging and the dump methods.
35 
36 #include "config.h"
37 
38 #include "DapIndent.h"
39 
40 namespace libdap {
41 
42 string DapIndent::_indent ;
43 
44 void
45 DapIndent::Indent()
46 {
47  _indent += " " ;
48 }
49 
50 void
51 DapIndent::UnIndent()
52 {
53  if (_indent.length() == 0)
54  return ;
55  if (_indent.length() == 4)
56  _indent = "" ;
57  else
58  _indent = _indent.substr(0, _indent.length() - 4) ;
59 }
60 
61 void
62 DapIndent::Reset()
63 {
64  _indent = "" ;
65 }
66 
67 const string &
68 DapIndent::GetIndent()
69 {
70  return _indent ;
71 }
72 
73 void
74 DapIndent::SetIndent(const string &indent)
75 {
76  _indent = indent ;
77 }
78 
79 ostream &
80 DapIndent::LMarg(ostream &strm)
81 {
82  strm << _indent ;
83  return strm ;
84 }
85 
86 } // namespace libdap
87 
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
-
- - - - diff --git a/html/DapIndent_8h_source.html b/html/DapIndent_8h_source.html deleted file mode 100644 index e6681645c..000000000 --- a/html/DapIndent_8h_source.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - -libdap: DapIndent.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
DapIndent.h
-
-
-
1 // DapIndent.h
2 
3 // -*- mode: c++; c-basic-offset:4 -*-
4 
5 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
6 // Access Protocol.
7 
8 // Copyright (c) 2002,2003 OPeNDAP, Inc.
9 // Author: Patrick West <pwest@ucar.org>
10 //
11 // This library is free software; you can redistribute it and/or
12 // modify it under the terms of the GNU Lesser General Public
13 // License as published by the Free Software Foundation; either
14 // version 2.1 of the License, or (at your option) any later version.
15 //
16 // This library is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 // Lesser General Public License for more details.
20 //
21 // You should have received a copy of the GNU Lesser General Public
22 // License along with this library; if not, write to the Free Software
23 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 //
25 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
26 
27 // (c) COPYRIGHT URI/MIT 1994-1999
28 // Please read the full copyright statement in the file COPYRIGHT_URI.
29 //
30 // Authors:
31 // pwest Patrick West <pwest@ucar.edu>
32 
36 #ifndef I_DapIndent_h
37 #define I_DapIndent_h 1
38 
39 #include <string>
40 #include <iostream>
41 
42 using std::string ;
43 using std::ostream ;
44 
45 namespace libdap
46 {
47 
51 class DapIndent
52 {
53 private:
54  static string _indent ;
55 public:
56  static void Indent() ;
57  static void UnIndent() ;
58  static void Reset() ;
59  static const string & GetIndent() ;
60  static void SetIndent(const string &indent) ;
61  static ostream & LMarg(ostream &strm) ;
62 } ;
63 
64 } // namespace libdap
65 
66 #endif // I_DapIndent_h
67 
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
class with static methods to help with indentation of debug information.
Definition: DapIndent.h:51
-
-
- - - - diff --git a/html/DapObj_8h_source.html b/html/DapObj_8h_source.html deleted file mode 100644 index 92435436b..000000000 --- a/html/DapObj_8h_source.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -libdap: DapObj.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
DapObj.h
-
-
-
1 // DapObj.h
2 
3 // -*- mode: c++; c-basic-offset:4 -*-
4 
5 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
6 // Access Protocol.
7 
8 // Copyright (c) 2002,2003 OPeNDAP, Inc.
9 // Author: Patrick West <pwest@ucar.org>
10 //
11 // This library is free software; you can redistribute it and/or
12 // modify it under the terms of the GNU Lesser General Public
13 // License as published by the Free Software Foundation; either
14 // version 2.1 of the License, or (at your option) any later version.
15 //
16 // This library is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 // Lesser General Public License for more details.
20 //
21 // You should have received a copy of the GNU Lesser General Public
22 // License along with this library; if not, write to the Free Software
23 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 //
25 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
26 
27 // (c) COPYRIGHT URI/MIT 1994-1999
28 // Please read the full copyright statement in the file COPYRIGHT_URI.
29 //
30 // Authors:
31 // pwest Patrick West <pwest@ucar.edu>
32 
36 #ifndef A_DapObj_h
37 #define A_DapObj_h 1
38 
39 #include <iostream>
40 
41 namespace libdap
42 {
43 
50 class DapObj
51 {
52 public:
53  virtual ~DapObj()
54  {}
55 
64  virtual void dump(std::ostream &strm) const = 0 ;
65 } ;
66 
67 } // namespace libdap
68 
78 inline std::ostream &
79 operator<<(std::ostream &strm, const libdap::DapObj &obj)
80 {
81  obj.dump(strm) ;
82  return strm ;
83 }
84 
85 #endif // A_DapObj_h
86 
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
ostream & operator<<(ostream &os, const Resource &r)
Definition: AISResources.cc:46
-
libdap base object for common functionality of libdap objects
Definition: DapObj.h:50
-
virtual void dump(std::ostream &strm) const =0
dump the contents of this object to the specified ostream
-
-
- - - - diff --git a/html/DapXmlNamespaces_8cc_source.html b/html/DapXmlNamespaces_8cc_source.html deleted file mode 100644 index 51b1d4899..000000000 --- a/html/DapXmlNamespaces_8cc_source.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -libdap: DapXmlNamespaces.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
DapXmlNamespaces.cc
-
-
-
-
- - - - diff --git a/html/DapXmlNamespaces_8h_source.html b/html/DapXmlNamespaces_8h_source.html deleted file mode 100644 index f55fe63b7..000000000 --- a/html/DapXmlNamespaces_8h_source.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -libdap: DapXmlNamespaces.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
DapXmlNamespaces.h
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2017 OPeNDAP, Inc.
7 // Author: Nathan Potter <ndp@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 #ifndef DAPXMLNAMSPACES_H_
26 #define DAPXMLNAMSPACES_H_
27 
28 #include <string>
29 
30 namespace libdap {
31 
32 enum DAPVersion { DAP_2_0, DAP_3_2, DAP_4_0 };
33 
35 
36 public:
37 
38  virtual ~DapXmlNamspaces() {};
39 
43  static std::string getXmlXsiNamespace(){
44  return "http://www.w3.org/2001/XMLSchema-instance";
45  }
46 
50  static std::string getXmlNamespace(){
51  return "http://www.w3.org/XML/1998/namespace";
52  }
53 
57  static std::string getGrddlTransformation(DAPVersion version){
58 
59  switch(version) {
60  case DAP_2_0:
61  throw InternalErr(__FILE__, __LINE__, "DapXmlNamspaces::getDapXmlNamespaceString() - GRDDL Transformation undefined for DAP 2.0");
62  break;
63 
64  case DAP_3_2:
65  return "http://xml.opendap.org/transforms/ddxToRdfTriples.xsl";
66  break;
67 
68  case DAP_4_0:
69  throw InternalErr(__FILE__, __LINE__, "DapXmlNamspaces::getDapXmlNamespaceString() - GRDDL Transformation undefined for DAP 4.0");
70  break;
71 
72  default:
73  throw InternalErr(__FILE__, __LINE__, "DapXmlNamspaces::getDapXmlNamespaceString() - Unrecognized namespace version.");
74  break;
75  }
76  }
77 
78 
79 
80 
84  static std::string getDapNamespaceString(DAPVersion version){
85 
86  switch(version) {
87  case DAP_2_0:
88  return "http://xml.opendap.org/ns/DAP2";
89  break;
90 
91  case DAP_3_2:
92  return "http://xml.opendap.org/ns/DAP/3.2#";
93  break;
94 
95  case DAP_4_0:
96  return "http://xml.opendap.org/ns/DAP/4.0#";
97  break;
98 
99  default:
100  throw InternalErr(__FILE__, __LINE__, "DapXmlNamspaces::getDapXmlNamespaceString() - Unrecognized namespace version.");
101  break;
102  }
103  }
104 
108  static std::string getSchemaLocationString(DAPVersion version){
109 
110  switch(version) {
111  case DAP_2_0:
112  return "http://xml.opendap.org/dap/dap2.xsd";
113  break;
114 
115  case DAP_3_2:
116  return "http://xml.opendap.org/dap/dap3.2.xsd";
117  break;
118 
119  case DAP_4_0:
120  return "http://xml.opendap.org/dap/dap4.0.xsd";
121  break;
122 
123  default:
124  throw InternalErr(__FILE__, __LINE__, "DapXmlNamspaces::getSchemaLocationString() - Unrecognized namespace version.");
125  break;
126  }
127  }
128 
129 
130 
135  static std::string getSchemaLocationDeclarationString(DAPVersion version){
136  return getDapNamespaceString(version).append(" ").append(getSchemaLocationString(version));
137  }
138 
139 };
140 
141 
142 } /* namespace libdap */
143 #endif /* DAPXMLNAMSPACES_H_ */
static std::string getGrddlTransformation(DAPVersion version)
-
static std::string getSchemaLocationDeclarationString(DAPVersion version)
-
static std::string getSchemaLocationString(DAPVersion version)
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
static std::string getDapNamespaceString(DAPVersion version)
- -
static std::string getXmlXsiNamespace()
-
static std::string getXmlNamespace()
-
-
- - - - diff --git a/html/DataDDS_8cc_source.html b/html/DataDDS_8cc_source.html deleted file mode 100644 index 2cc7cb838..000000000 --- a/html/DataDDS_8cc_source.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -libdap: DataDDS.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
DataDDS.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1997-1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 //
33 // jhrg 9/19/97
34 
35 #include "config.h"
36 
37 #include <iostream>
38 #include <iomanip>
39 #include <sstream>
40 #include <string>
41 
42 #include "DataDDS.h"
43 #include "debug.h"
44 #include "DapIndent.h"
45 
46 using namespace std;
47 
48 namespace libdap {
49 
50 // private
51 
55 void
56 DataDDS::m_version_string_to_numbers()
57 {
58  string num = d_server_version.substr(d_server_version.find('/') + 1);
59 
60  if (!num.empty() && num.find('.') != string::npos) {
61  istringstream iss(num);
62  char c = 0;
63 
64  iss >> d_server_version_major;
65  iss >> c; // This reads the `.' in the version string
66  iss >> d_server_version_minor;
67 
68  // Did it parse?
69  if (!(c == '.' && d_server_version_major > 0
70  && d_server_version_minor > 0)) {
71 
72  d_server_version_major = 0;
73  d_server_version_minor = 0;
74  }
75  }
76  else {
77  d_server_version_major = 0;
78  d_server_version_minor = 0;
79  }
80 
81  DBG(cerr << "Server version: " << d_server_version_major << "." \
82  << d_server_version_minor << endl);
83 }
84 
88 void
89 DataDDS::m_protocol_string_to_numbers()
90 {
91 
92  if (!d_protocol_version.empty() && d_protocol_version.find('.')
93  != string::npos) {
94  istringstream iss(d_protocol_version);
95  char c = 0;
96 
97  iss >> d_server_protocol_major;
98  iss >> c; // This reads the `.' in the version string
99  iss >> d_server_protocol_minor;
100 
101  // Did it parse?
102  if (!(c == '.' && d_server_protocol_major > 0)) {
103  d_server_protocol_major = 2;
104  d_server_protocol_minor = 0;
105  }
106  }
107  else {
108  d_server_protocol_major = 2;
109  d_server_protocol_minor = 0;
110  }
111 
112  DBG(cerr << "Server version: " << d_server_version_major << "." \
113  << d_server_version_minor << endl);
114 }
115 
123 void
124 DataDDS::dump(ostream &strm) const
125 {
126  strm << DapIndent::LMarg << "DataDDS::dump - ("
127  << (void *)this << ")" << endl ;
128  DapIndent::Indent() ;
129  DDS::dump(strm) ;
130  strm << DapIndent::LMarg << "server version: " << d_server_version
131  << endl ;
132  strm << DapIndent::LMarg << "version major: " << d_server_version_major
133  << endl ;
134  strm << DapIndent::LMarg << "version minor: " << d_server_version_minor
135  << endl ;
136  strm << DapIndent::LMarg << "protocol version: " << d_protocol_version
137  << endl ;
138  strm << DapIndent::LMarg << "protocol major: " << d_server_protocol_major
139  << endl ;
140  strm << DapIndent::LMarg << "protocol minor: " << d_server_protocol_minor
141  << endl ;
142  DapIndent::UnIndent() ;
143 }
144 
145 // public
146 
159 DataDDS::DataDDS(BaseTypeFactory *factory, const string &n, const string &v,
160  const string &p)
161  : DDS(factory, n), d_server_version(v), d_protocol_version(p)
162 {
163  m_version_string_to_numbers();
164  m_protocol_string_to_numbers();
165 }
166 
167 } // namespace libdap
168 
STL namespace.
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- - -
-
- - - - diff --git a/html/DataDDS_8h_source.html b/html/DataDDS_8h_source.html deleted file mode 100644 index efc9c3b75..000000000 --- a/html/DataDDS_8h_source.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -libdap: DataDDS.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
DataDDS.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1997-1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Specialize DDS for returned data. This currently means adding version
33 // information about the source of the data. Was it from a version 1, 2 or
34 // later server?
35 //
36 // jhrg 9/19/97
37 
38 #ifndef _datadds_h
39 #define _datadds_h 1
40 
41 #include <iostream>
42 #include <string>
43 
44 #ifndef _dds_h
45 #include "DDS.h"
46 #endif
47 
48 namespace libdap
49 {
50 
77 class DataDDS : public DDS
78 {
79 private:
80  string d_server_version;
81  int d_server_version_major;
82  int d_server_version_minor;
83 
84  string d_protocol_version;
85  int d_server_protocol_major;
86  int d_server_protocol_minor;
87 
88  void m_version_string_to_numbers();
89  void m_protocol_string_to_numbers();
90 
91 public:
92  DataDDS(BaseTypeFactory *factory, const string &n = "",
93  const string &v = "", const string &p = "");
94  // #ifdef DEFAULT_BASETYPE_FACTORY
95  // DataDDS(const string &n = "", const string &v = "");
96  // #endif
97  virtual ~DataDDS()
98  {}
99 
103  void set_version(const string &v)
104  {
105  d_server_version = v;
106  m_version_string_to_numbers();
107  }
109  string get_version() const
110  {
111  return d_server_version;
112  }
114  int get_version_major() const
115  {
116  return d_server_version_major;
117  }
119  int get_version_minor() const
120  {
121  return d_server_version_minor;
122  }
123 
124  void set_protocol(const string &p)
125  {
126  d_protocol_version = p;
127  m_protocol_string_to_numbers();
128  }
129  string get_protocol() const
130  {
131  return d_protocol_version;
132  }
133  int get_protocol_major() const
134  {
135  return d_server_protocol_major;
136  }
137  int get_protocol_minor() const
138  {
139  return d_server_protocol_minor;
140  }
141 
142  virtual void dump(ostream &strm) const ;
143 };
144 
145 } // namespace libdap
146 
147 #endif // _datadds_h
virtual void dump(ostream &strm) const
dumps information about this object
Definition: DataDDS.cc:124
-
int get_version_major() const
Returns the major version number.
Definition: DataDDS.h:114
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- - -
void set_version(const string &v)
Definition: DataDDS.h:103
-
int get_version_minor() const
Returns the minor version number.
Definition: DataDDS.h:119
-
string get_version() const
Get the server version string, unparsed.
Definition: DataDDS.h:109
-
DataDDS(BaseTypeFactory *factory, const string &n="", const string &v="", const string &p="")
Make an instance of DataDDS A DataDDS instance is a DDS with additional information about the version...
Definition: DataDDS.cc:159
-
Holds a DAP2 DDS.
Definition: DataDDS.h:77
-
-
- - - - diff --git a/html/EncodingType_8h_source.html b/html/EncodingType_8h_source.html deleted file mode 100644 index f51f786d6..000000000 --- a/html/EncodingType_8h_source.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - -libdap: EncodingType.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
EncodingType.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef _encodingtype_h
27 #define _encodingtype_h
28 
29 namespace libdap
30 {
31 
49  unknown_enc,
50  deflate,
51  x_plain,
52  gzip,
53  binary
54 };
55 
56 } // namespace libdap
57 
58 #endif
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
EncodingType
The type of encoding used on the current stream.
Definition: EncodingType.h:48
-
-
- - - - diff --git a/html/Error_8cc_source.html b/html/Error_8cc_source.html deleted file mode 100644 index 2af670d0d..000000000 --- a/html/Error_8cc_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -libdap: Error.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Error.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1994-1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Implementation for the Error class.
33 
34 
35 #include "config.h"
36 
37 #include <cstdio>
38 #include <cassert>
39 
40 #include "Error.h"
41 #include "parser.h"
42 #include "InternalErr.h"
43 #include "debug.h"
44 
45 using namespace std;
46 
47 // Glue routines declared in Error.lex
48 extern void Error_switch_to_buffer(void *new_buffer);
49 extern void Error_delete_buffer(void * buffer);
50 extern void *Error_buffer(FILE *fp);
51 
52 //extern void Errorrestart(FILE *yyin); // defined in Error.tab.c
53 extern int Errorparse(libdap::parser_arg *arg);
54 
55 namespace libdap {
56 
57 // There are two entries for 'cannot read file' because of an error made
58 // when the message was first added to this class.
59 static const char *err_messages[] = {
60  "Undefined error",
61  "Unknown error",
62  "Internal error",
63  "No such file",
64  "No such variable",
65  "Malformed expression",
66  "No authorization",
67  "Cannot read file",
68  "Not Implemented",
69  ""
70 };
71 
74 Error::Error() : exception(), _error_code(undefined_error), _error_message("")
75 {}
76 
86 Error::Error(ErrorCode ec, string msg, string file /* default: ""*/, int line /* default 0*/)
87  : exception(), _error_code(ec), _error_message(msg), d_file(file), d_line(line)
88 {}
89 
95 Error::Error(string msg, string file /* default: ""*/, int line /* default 0*/)
96  : exception(), _error_code(unknown_error), _error_message(msg), d_file(file), d_line(line)
97 {}
98 
99 Error::Error(const Error &copy_from)
100  : exception(), _error_code(copy_from._error_code), _error_message(copy_from._error_message)
101 {
102 }
103 
104 Error::~Error() throw()
105 {
106 }
107 
108 Error &
109 Error::operator=(const Error &rhs)
110 {
111  assert(OK());
112 
113  if (&rhs == this) // are they identical?
114  return *this;
115  else {
116  _error_code = rhs._error_code;
117  _error_message = rhs._error_message;
118 
119  d_file = rhs.d_file;
120  d_line = rhs.d_line;
121 
122  assert(this->OK());
123 
124  return *this;
125  }
126 }
127 
134 bool
135 Error::OK() const
136 {
137  // The object is empty - users cannot make these, but this class can!
138  bool empty = ((_error_code == undefined_error)
139  && (_error_message.empty()));
140 
141  // Just a message - the program part is null.
142  bool message = ((_error_code != undefined_error)
143  && (!_error_message.empty()));
144 
145  DBG(cerr << "empty: " << empty << ", message: " << message << endl);
146  return empty || message;
147 }
148 
157 bool
158 Error::parse(FILE *fp)
159 {
160  if (!fp)
161  throw InternalErr(__FILE__, __LINE__, "Null input stream");
162 
163  void *buffer = Error_buffer(fp);
164  Error_switch_to_buffer(buffer);
165 
166  parser_arg arg(this);
167 
168  bool status;
169  try {
170  status = Errorparse(&arg) == 0;
171  Error_delete_buffer(buffer);
172  }
173  catch (Error &e) {
174  Error_delete_buffer(buffer);
175  throw InternalErr(__FILE__, __LINE__, e.get_error_message());
176  }
177 
178  // STATUS is the result of the parser function; if a recoverable error
179  // was found it will be true but arg.status() will be false.
180  // I'm throwing an InternalErr here since Error objects are generated by
181  // the core; they should always parse! 9/21/2000 jhrg
182  if (!status || !arg.status())
183  throw InternalErr(__FILE__, __LINE__, "Error parsing error object!");
184  else
185  return OK(); // Check object consistency
186 }
187 
188 
199 void
200 Error::print(FILE *out) const
201 {
202  assert(OK());
203 
204  fprintf(out, "Error {\n") ;
205 
206  fprintf(out, " code = %d;\n", static_cast<int>(_error_code)) ;
207 
208  // If the error message is wrapped in double quotes, print it, else, add
209  // wrapping double quotes.
210  if (*_error_message.begin() == '"' && *(_error_message.end() - 1) == '"')
211  fprintf(out, " message = %s;\n", _error_message.c_str()) ;
212  else
213  fprintf(out, " message = \"%s\";\n", _error_message.c_str()) ;
214 
215  fprintf(out, "};\n") ;
216 }
217 
228 void
229 Error::print(ostream &strm) const
230 {
231  assert(OK());
232 
233  strm << "Error {\n" ;
234 
235  strm << " code = " << static_cast<int>(_error_code) << ";\n" ;
236 
237  // If the error message is wrapped in double quotes, print it, else, add
238  // wrapping double quotes.
239  if (*_error_message.begin() == '"' && *(_error_message.end() - 1) == '"')
240  strm << " message = " << _error_message.c_str() << ";\n" ;
241  else
242  strm << " message = \"" << _error_message.c_str() << "\";\n" ;
243 
244  strm << "};\n" ;
245 }
246 
248 ErrorCode
250 {
251  assert(OK());
252  return _error_code;
253 }
254 
261 void
263 {
264  _error_code = ec;
265  // Added check to make sure that err_messages is not accessed beyond its
266  // bounds. 02/02/04 jhrg
267  if (_error_message.empty()
268  && ec > undefined_error && ec <= cannot_read_file) {
269  _error_message = err_messages[ec - undefined_error];
270  }
271  else {
272  _error_message = err_messages[0];
273  }
274 }
275 
277 string
279 {
280  assert(OK());
281 
282  return string(_error_message);
283 }
284 
286 void
288 {
289  _error_message = msg;
290 }
291 
292 } // namespace libdap
void set_error_message(std::string msg="")
Definition: Error.cc:287
- -
STL namespace.
-
bool parse(FILE *fp)
Parse an Error object.
Definition: Error.cc:158
-
void set_error_code(ErrorCode ec=undefined_error)
Definition: Error.cc:262
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
bool OK() const
Is the Error object valid?
Definition: Error.cc:135
-
ErrorCode get_error_code() const
Definition: Error.cc:249
-
std::string get_error_message() const
Definition: Error.cc:278
-
int ErrorCode
An enumerated type for common errors.
Definition: Error.h:57
-
void print(FILE *out) const
Definition: Error.cc:200
-
Pass parameters by reference to a parser.
Definition: parser.h:68
-
A class for error processing.
Definition: Error.h:92
-
-
- - - - diff --git a/html/Error_8h_source.html b/html/Error_8h_source.html deleted file mode 100644 index 7b3d6a391..000000000 --- a/html/Error_8h_source.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -libdap: Error.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Error.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1999,2000
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Interface for the Error class
33 //
34 // jhrg 4/23/96
35 
36 #ifndef _error_h
37 #define _error_h
38 
39 #include <iostream>
40 #include <string>
41 #include <exception>
42 
43 #include <cstdio> // For FILE *
44 
45 using std::cout;
46 using std::string;
47 using std::ostream;
48 
49 namespace libdap
50 {
51 
57 typedef int ErrorCode; //using standard errno+netCDF error codes from server
58 
61 #define undefined_error 1000
62 #define unknown_error 1001
63 #define internal_error 1002
64 #define no_such_file 1003
65 #define no_such_variable 1004
66 #define malformed_expr 1005
67 #define no_authorization 1006
68 #define cannot_read_file 1007
69 #define not_implemented 1008
70 #define dummy_message 1009
71 
72 
73 
92 class Error : public std::exception
93 {
94 protected:
95  ErrorCode _error_code;
96  std::string _error_message;
97 
98  std::string d_file;
99  int d_line;
100 
101 public:
102  Error(ErrorCode ec, std::string msg, std::string file = "", int line = 0);
103  Error(std::string msg, std::string file = "", int line = 0);
104  Error();
105 
106  Error(const Error &copy_from);
107 
108  virtual ~Error() throw();
109 
110  Error &operator=(const Error &rhs);
111 
112  bool OK() const;
113  bool parse(FILE *fp);
114  void print(FILE *out) const;
115  void print(std::ostream &out) const;
116  ErrorCode get_error_code() const;
117  std::string get_error_message() const;
118  void set_error_code(ErrorCode ec = undefined_error);
119  void set_error_message(std::string msg = "");
120 
121  std::string get_file() const { return d_file; }
122  void set_file(std::string f) { d_file = f; }
123  int get_line() const { return d_line; }
124  void set_line(int l) { d_line = l; }
125 
127  virtual const char* what() const throw() {
128  return _error_message.c_str();
129  }
130 };
131 
132 } // namespace libdap
133 
134 #endif // _error_h
void set_error_message(std::string msg="")
Definition: Error.cc:287
- -
bool parse(FILE *fp)
Parse an Error object.
Definition: Error.cc:158
-
void set_error_code(ErrorCode ec=undefined_error)
Definition: Error.cc:262
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
bool OK() const
Is the Error object valid?
Definition: Error.cc:135
-
ErrorCode get_error_code() const
Definition: Error.cc:249
-
std::string get_error_message() const
Definition: Error.cc:278
-
int ErrorCode
An enumerated type for common errors.
Definition: Error.h:57
-
void print(FILE *out) const
Definition: Error.cc:200
-
virtual const char * what() const
The pointer is valid only for the lifetime of the Error instance. jhrg 9/22/20.
Definition: Error.h:127
-
A class for error processing.
Definition: Error.h:92
-
-
- - - - diff --git a/html/EventHandler_8h_source.html b/html/EventHandler_8h_source.html deleted file mode 100644 index 7d54d88ad..000000000 --- a/html/EventHandler_8h_source.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -libdap: EventHandler.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
EventHandler.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef event_handler_h
27 #define event_handler_h
28 
29 #include <iostream>
30 
31 namespace libdap
32 {
33 
43 {
44 public:
48  virtual void handle_signal(int signum) = 0;
49 
52  virtual ~EventHandler()
53  {}
54 };
55 
56 #if 0
57 // moved to SignalHandlerTest jhrg 4/26/13
58 
60 class TestHandler : public EventHandler
61 {
62 public:
63  int flag;
64 
65  TestHandler() : flag(0)
66  {}
67 
68  virtual void handle_signal(int ) {
69  flag = 1;
70  }
71 };
72 #endif
73 
74 } // namespace libdap
75 
76 #endif // event_handler_h
virtual ~EventHandler()
Definition: EventHandler.h:52
- -
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual void handle_signal(int signum)=0
-
-
- - - - diff --git a/html/Float32_8cc_source.html b/html/Float32_8cc_source.html deleted file mode 100644 index 7bba4bfc9..000000000 --- a/html/Float32_8cc_source.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - -libdap: Float32.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Float32.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Implementation for Float32.
33 //
34 // 3/22/99 jhrg
35 
36 #include "config.h"
37 
38 //#define DODS_DEBUG
39 
40 #include <sstream>
41 #include <iomanip>
42 
43 #include "Byte.h" // synonymous with UInt8 and Char
44 #include "Int8.h"
45 #include "Int16.h"
46 #include "UInt16.h"
47 #include "Int32.h"
48 #include "UInt32.h"
49 #include "Int64.h"
50 #include "UInt64.h"
51 #include "Float32.h"
52 #include "Float64.h"
53 #include "Str.h"
54 #include "Url.h"
55 
56 #include "DDS.h"
57 #include "Marshaller.h"
58 #include "UnMarshaller.h"
59 
60 #include "DMR.h"
61 #include "D4StreamMarshaller.h"
62 #include "D4StreamUnMarshaller.h"
63 
64 #include "parser.h"
65 #include "Operators.h"
66 #include "dods-limits.h"
67 #include "InternalErr.h"
68 
69 #include "util.h"
70 #include "debug.h"
71 #include "DapIndent.h"
72 
73 using std::cerr;
74 using std::endl;
75 
76 namespace libdap {
77 
85 Float32::Float32(const string &n) : BaseType(n, dods_float32_c), d_buf(0)
86 {}
87 
95 Float32::Float32(const string &n, const string &d) : BaseType(n, d, dods_float32_c), d_buf(0)
96 {}
97 
98 Float32::Float32(const Float32 &copy_from) : BaseType(copy_from)
99 {
100  d_buf = copy_from.d_buf;
101 }
102 
103 BaseType *
105 {
106  return new Float32(*this);
107 }
108 
109 Float32 &
110 Float32::operator=(const Float32 &rhs)
111 {
112  if (this == &rhs)
113  return *this;
114 
115  dynamic_cast<BaseType &>(*this) = rhs;
116 
117  d_buf = rhs.d_buf;
118 
119  return *this;
120 }
121 
122 unsigned int
123 Float32::width(bool) const
124 {
125  return sizeof(dods_float32);
126 }
127 
128 bool
129 Float32::serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval)
130 {
131 #if USE_LOCAL_TIMEOUT_SCHEME
132  dds.timeout_on();
133 #endif
134  if (!read_p())
135  read(); // read() throws Error and InternalErr
136 
137  if (ce_eval && !eval.eval_selection(dds, dataset()))
138  return true;
139 #if USE_LOCAL_TIMEOUT_SCHEME
140  dds.timeout_off();
141 #endif
142  m.put_float32( d_buf ) ;
143 
144  return true;
145 }
146 
147 bool
149 {
150  um.get_float32( d_buf ) ;
151 
152  return false;
153 }
154 
155 void
157 {
158  checksum.AddData(reinterpret_cast<uint8_t*>(&d_buf), sizeof(d_buf));
159 }
160 
169 void
170 Float32::serialize(D4StreamMarshaller &m, DMR &, /*ConstraintEvaluator &,*/ bool)
171 {
172  if (!read_p())
173  read(); // read() throws Error
174 
175  m.put_float32( d_buf ) ;
176 }
177 
178 void
180 {
181  um.get_float32( d_buf ) ;
182 }
183 
184 unsigned int
185 Float32::val2buf(void *val, bool)
186 {
187  // Jose Garcia This method is public I believe it has been
188  // designed to be used by read which must be implemented in a
189  // subclass, thus if the pointer val is NULL, is an Internal
190  // Error.
191  // Changed to InternalErr. jhrg
192  if (!val)
193  throw InternalErr(__FILE__, __LINE__,
194  "The incoming pointer does not contain any data.");
195 
196  d_buf = *(dods_float32 *)val;
197 
198  return width();
199 }
200 
201 unsigned int
202 Float32::buf2val(void **val)
203 {
204  // Jose Garcia
205  // The same comment justifying throwing an Error in val2buf applies here.
206  if (!val)
207  throw InternalErr(__FILE__, __LINE__, "NULL pointer.");
208 
209  if (!*val)
210  *val = new dods_float32;
211 
212  *(dods_float32 *)*val = d_buf;
213 
214  return width();
215 }
216 
217 bool
218 Float32::set_value(dods_float32 f)
219 {
220  d_buf = f;
221  set_read_p(true);
222 
223  return true;
224 }
225 
231 dods_float32
233 {
234  return d_buf;
235 }
236 
237 void
238 Float32::print_val(FILE *out, string space, bool print_decl_p)
239 {
240  ostringstream oss;
241  print_val(oss, space, print_decl_p);
242  fwrite(oss.str().data(), sizeof(char), oss.str().length(), out);
243 }
244 
245 void
246 Float32::print_val(ostream &out, string space, bool print_decl_p)
247 {
248  // FIX: need to set precision in the printing somehow.
249  // os.precision(DODS_FLT_DIG);
250 
251  if (print_decl_p) {
252  print_decl(out, space, false);
253  out << " = " << std::setprecision( 6 ) << d_buf << ";\n" ;
254  }
255  else
256  out << std::setprecision( 6 ) << d_buf ;
257 }
258 
259 bool
261 {
262  // Get this instance's value
263  if (!read_p() && !read()) {
264  // Jose Garcia Since the read method is virtual and
265  // implemented outside libdap++ if we cannot read the data
266  // that is the problem of whomever wrote the implementation of
267  // read and therefore it is an internal error.
268  throw InternalErr(__FILE__, __LINE__, "This value not read!");
269  }
270 
271  // Extract the second arg's value.
272  if (!b || !(b->read_p() || b->read())) {
273  throw InternalErr(__FILE__, __LINE__, "This value not read!");
274  }
275 
276  return d4_ops(b, op);
277 }
278 
282 bool Float32::d4_ops(BaseType *b, int op)
283 {
284  DBG(cerr << "b->typename(): " << b->type_name() << endl);
285 
286  switch (b->type()) {
287  case dods_int8_c:
288  return Cmp<dods_float32, dods_int8>(op, d_buf, static_cast<Int8*>(b)->value());
289  case dods_byte_c:
290  return Cmp<dods_float32, dods_byte>(op, d_buf, static_cast<Byte*>(b)->value());
291  case dods_int16_c:
292  return Cmp<dods_float32, dods_int16>(op, d_buf, static_cast<Int16*>(b)->value());
293  case dods_uint16_c:
294  return Cmp<dods_float32, dods_uint16>(op, d_buf, static_cast<UInt16*>(b)->value());
295  case dods_int32_c:
296  return Cmp<dods_float32, dods_int32>(op, d_buf, static_cast<Int32*>(b)->value());
297  case dods_uint32_c:
298  return Cmp<dods_float32, dods_uint32>(op, d_buf, static_cast<UInt32*>(b)->value());
299  case dods_int64_c:
300  return Cmp<dods_float32, dods_int64>(op, d_buf, static_cast<Int64*>(b)->value());
301  case dods_uint64_c:
302  return Cmp<dods_float32, dods_uint64>(op, d_buf, static_cast<UInt64*>(b)->value());
303  case dods_float32_c:
304  return Cmp<dods_float32, dods_float32>(op, d_buf, static_cast<Float32*>(b)->value());
305  case dods_float64_c:
306  DBG(cerr << "arg1: " << d_buf << " " << op << " arg2: " << static_cast<Float64*>(b)->value() << endl);
307  // See the code in Float64::d4_ops() for an explanation of this odd-looking cast.
308  return Cmp<dods_float32, dods_float32>(op, d_buf, (float)static_cast<Float64*>(b)->value());
309  case dods_str_c:
310  case dods_url_c:
311  throw Error(malformed_expr, "Relational operators can only compare compatible types (number, string).");
312  default:
313  throw Error(malformed_expr, "Relational operators only work with scalar types.");
314  }
315 }
316 
325 void
326 Float32::dump(ostream &strm) const
327 {
328  strm << DapIndent::LMarg << "Float32::dump - (" << (void *)this << ")"
329  << endl ;
330  DapIndent::Indent() ;
331  BaseType::dump(strm) ;
332  strm << DapIndent::LMarg << "value: " << d_buf << endl ;
333  DapIndent::UnIndent() ;
334 }
335 
336 } // namespace libdap
337 
virtual bool read()
Read data into a local buffer.
Definition: BaseType.cc:899
-
Holds an 8-bit signed integer value.
Definition: Int8.h:42
-
Holds a64-bit signed integer.
Definition: Int64.h:49
-
virtual bool read_p()
Has this variable been read?
Definition: BaseType.cc:480
-
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
virtual void print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
Print an ASCII representation of the variable structure.
Definition: BaseType.cc:1003
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: BaseType.cc:291
-
virtual void print_val(FILE *out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: Float32.cc:238
-
virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)
Receive data from the net.
Definition: Float32.cc:148
-
Read data from the stream made by D4StreamMarshaller.
-
Holds an unsigned 16-bit integer.
Definition: UInt16.h:57
-
Definition: crc.h:76
-
BaseType(const string &n, const Type &t, bool is_dap4=false)
The BaseType constructor.
Definition: BaseType.cc:126
-
virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
Move data to the net, then remove them from the object.
Definition: Float32.cc:129
-
virtual unsigned int val2buf(void *val, bool reuse=false)
Loads class data.
Definition: Float32.cc:185
-
virtual unsigned int width(bool constrained=false) const
How many bytes does this variable use Return the number of bytes of storage this variable uses...
Definition: Float32.cc:123
-
Holds a 32-bit floating point value.
Definition: Float32.h:61
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Float32.cc:326
-
Float32(const string &n)
Definition: Float32.cc:85
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
-
Holds a 16-bit signed integer value.
Definition: Int16.h:59
- -
virtual Type type() const
Returns the type of the class instance.
Definition: BaseType.cc:365
-
virtual bool d4_ops(BaseType *b, int op)
Definition: Float32.cc:282
-
virtual void set_read_p(bool state)
Sets the value of the read_p property.
Definition: BaseType.cc:516
-
Holds a 64-bit unsigned integer.
Definition: UInt64.h:49
-
void AddData(const uint8_t *pData, const uint32_t length)
Definition: crc.h:98
-
Evaluate a constraint expression.
-
virtual BaseType * ptr_duplicate()
Definition: Float32.cc:104
-
virtual unsigned int buf2val(void **val)
Reads the class data.
Definition: Float32.cc:202
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
-
virtual string type_name() const
Returns the type of the class instance as a string.
Definition: BaseType.cc:379
-
Holds a single byte.
Definition: Byte.h:60
-
virtual dods_float32 value() const
Definition: Float32.cc:232
-
bool eval_selection(DDS &dds, const std::string &dataset)
Evaluate a boolean-valued constraint expression. This is main method for the evaluator and is called ...
-
A class for error processing.
Definition: Error.h:92
-
virtual void compute_checksum(Crc32 &checksum)
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
Definition: Float32.cc:156
-
Holds a 32-bit unsigned integer.
Definition: UInt32.h:59
-
virtual bool ops(BaseType *b, int op)
Evaluate relational operators.
Definition: Float32.cc:260
-
Holds a 32-bit signed integer.
Definition: Int32.h:65
-
virtual string dataset() const
Returns the name of the dataset used to create this instance.
Definition: BaseType.cc:358
-
-
- - - - diff --git a/html/Float32_8h_source.html b/html/Float32_8h_source.html deleted file mode 100644 index fce166bd2..000000000 --- a/html/Float32_8h_source.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - -libdap: Float32.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Float32.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Interface for Float32 type.
33 //
34 // 3/22/99 jhrg
35 
36 #ifndef _float32_h
37 #define _float32_h 1
38 
39 
40 #ifndef _dods_datatypes_h
41 #include "dods-datatypes.h"
42 #endif
43 
44 #ifndef _basetype_h
45 #include "BaseType.h"
46 #endif
47 
48 #ifndef constraint_evaluator_h
49 #include "ConstraintEvaluator.h"
50 #endif
51 
52 namespace libdap
53 {
54 
55 class DMR;
56 
61 class Float32: public BaseType
62 {
63 protected:
64  dods_float32 d_buf;
65 
66 public:
67  Float32(const string &n);
68  Float32(const string &n, const string &d);
69 
70  Float32(const Float32 &copy_from);
71 
72  Float32 &operator=(const Float32 &rhs);
73 
74  virtual ~Float32()
75  {}
76 
77  virtual BaseType *ptr_duplicate();
78  virtual unsigned int width(bool constrained = false) const;
79 
80  // DAP2
81  virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval = true);
82  virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse = false);
83 
84  // DAP4
85  virtual void compute_checksum(Crc32 &checksum);
86  virtual void serialize(D4StreamMarshaller &m, DMR &dmr, /*ConstraintEvaluator &eval,*/ bool filter = false);
87  virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr);
88 
89  virtual unsigned int val2buf(void *val, bool reuse = false);
90  virtual unsigned int buf2val(void **val);
91 
92  virtual dods_float32 value() const;
93  virtual bool set_value(dods_float32 f);
94 
95  virtual void print_val(FILE *out, string space = "",
96  bool print_decl_p = true);
97  virtual void print_val(ostream &out, string space = "",
98  bool print_decl_p = true);
99 
100  virtual bool ops(BaseType *b, int op);
101  virtual bool d4_ops(BaseType *b, int op);
102 
103  virtual void dump(ostream &strm) const ;
104 };
105 
106 } // namespace libdap
107 
108 #endif // _float32_h
109 
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
virtual void print_val(FILE *out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: Float32.cc:238
-
virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)
Receive data from the net.
Definition: Float32.cc:148
-
Read data from the stream made by D4StreamMarshaller.
-
Definition: crc.h:76
-
virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
Move data to the net, then remove them from the object.
Definition: Float32.cc:129
-
virtual unsigned int val2buf(void *val, bool reuse=false)
Loads class data.
Definition: Float32.cc:185
-
virtual unsigned int width(bool constrained=false) const
How many bytes does this variable use Return the number of bytes of storage this variable uses...
Definition: Float32.cc:123
-
Holds a 32-bit floating point value.
Definition: Float32.h:61
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Float32.cc:326
-
Float32(const string &n)
Definition: Float32.cc:85
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
- -
virtual bool d4_ops(BaseType *b, int op)
Definition: Float32.cc:282
-
Evaluate a constraint expression.
-
virtual BaseType * ptr_duplicate()
Definition: Float32.cc:104
-
virtual unsigned int buf2val(void **val)
Reads the class data.
Definition: Float32.cc:202
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
-
virtual dods_float32 value() const
Definition: Float32.cc:232
-
virtual void compute_checksum(Crc32 &checksum)
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
Definition: Float32.cc:156
-
virtual bool ops(BaseType *b, int op)
Evaluate relational operators.
Definition: Float32.cc:260
-
-
- - - - diff --git a/html/Float64_8cc_source.html b/html/Float64_8cc_source.html deleted file mode 100644 index 85ab7df3a..000000000 --- a/html/Float64_8cc_source.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - -libdap: Float64.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Float64.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1994-1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Implementation for Float64.
33 //
34 // jhrg 9/7/94
35 
36 #include "config.h"
37 
38 //#define DODS_DEBUG
39 
40 #include <sstream>
41 #include <iomanip>
42 
43 #include "Byte.h" // synonymous with UInt8 and Char
44 #include "Int8.h"
45 #include "Int16.h"
46 #include "UInt16.h"
47 #include "Int32.h"
48 #include "UInt32.h"
49 #include "Int64.h"
50 #include "UInt64.h"
51 #include "Float32.h"
52 #include "Float64.h"
53 #include "Str.h"
54 #include "Url.h"
55 
56 #include "DDS.h"
57 #include "Marshaller.h"
58 #include "UnMarshaller.h"
59 
60 #include "DMR.h"
61 #include "D4StreamMarshaller.h"
62 #include "D4StreamUnMarshaller.h"
63 
64 #include "util.h"
65 #include "parser.h"
66 #include "Operators.h"
67 #include "dods-limits.h"
68 #include "InternalErr.h"
69 #include "DapIndent.h"
70 
71 using std::cerr;
72 using std::endl;
73 
74 namespace libdap {
75 
84 Float64::Float64(const string &n) : BaseType(n, dods_float64_c), d_buf(0)
85 {}
86 
94 Float64::Float64(const string &n, const string &d) : BaseType(n, d, dods_float64_c), d_buf(0)
95 {}
96 
97 Float64::Float64(const Float64 &copy_from) : BaseType(copy_from)
98 {
99  d_buf = copy_from.d_buf;
100 }
101 
102 BaseType *
104 {
105  return new Float64(*this);
106 }
107 
108 Float64 &
109 Float64::operator=(const Float64 &rhs)
110 {
111  if (this == &rhs)
112  return *this;
113 
114  dynamic_cast<BaseType &>(*this) = rhs;
115 
116  d_buf = rhs.d_buf;
117 
118  return *this;
119 }
120 
121 unsigned int
122 Float64::width(bool) const
123 {
124  return sizeof(dods_float64);
125 }
126 
127 bool
128 Float64::serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval)
129 {
130 #if USE_LOCAL_TIMEOUT_SCHEME
131  dds.timeout_on();
132 #endif
133  if (!read_p())
134  read(); // read() throws Error and InternalErr
135 
136  if (ce_eval && !eval.eval_selection(dds, dataset()))
137  return true;
138 #if USE_LOCAL_TIMEOUT_SCHEME
139  dds.timeout_off();
140 #endif
141  m.put_float64( d_buf ) ;
142 
143  return true;
144 }
145 
146 bool
148 {
149  um.get_float64( d_buf ) ;
150 
151  return false;
152 }
153 
154 void
156 {
157  checksum.AddData(reinterpret_cast<uint8_t*>(&d_buf), sizeof(d_buf));
158 }
159 
168 void
169 Float64::serialize(D4StreamMarshaller &m, DMR &, /*ConstraintEvaluator &,*/ bool)
170 {
171  if (!read_p())
172  read(); // read() throws Error
173 
174  m.put_float64( d_buf ) ;
175 }
176 
177 void
179 {
180  um.get_float64( d_buf ) ;
181 }
182 
183 unsigned int
184 Float64::val2buf(void *val, bool)
185 {
186  // Jose Garcia
187  // This method is public therefore and I believe it has being designed
188  // to be use by read which must be implemented on the surrogated library,
189  // thus if the pointer val is NULL, is an Internal Error.
190  if (!val)
191  throw InternalErr(__FILE__, __LINE__,
192  "The incoming pointer does not contain any data.");
193 
194  d_buf = *(dods_float64 *)val;
195 
196  return width();
197 }
198 
199 unsigned int
200 Float64::buf2val(void **val)
201 {
202  // Jose Garcia
203  // The same comment justifying throwing an Error in val2buf applies here.
204  if (!val)
205  throw InternalErr(__FILE__, __LINE__, "NULL pointer.");
206 
207  if (!*val)
208  *val = new dods_float64;
209 
210  *(dods_float64 *)*val = d_buf;
211 
212  return width();
213 }
214 
220 dods_float64
222 {
223  return d_buf;
224 }
225 
226 bool
227 Float64::set_value(dods_float64 val)
228 {
229  d_buf = val;
230  set_read_p(true);
231 
232  return true;
233 }
234 
235 void
236 Float64::print_val(FILE *out, string space, bool print_decl_p)
237 {
238  ostringstream oss;
239  print_val(oss, space, print_decl_p);
240  fwrite(oss.str().data(), sizeof(char), oss.str().length(), out);
241 }
242 
243 void
244 Float64::print_val(ostream &out, string space, bool print_decl_p)
245 {
246  // Set the precision to 15 digits
247  std::streamsize prec = out.precision(15);
248 
249  if (print_decl_p) {
250  print_decl(out, space, false);
251  out << " = " << d_buf << ";\n";
252  }
253  else
254  out << d_buf;
255 
256  // reset the precision
257  out.precision(prec);
258 }
259 
260 bool
262 {
263  // Extract the Byte arg's value.
264  if (!read_p() && !read()) {
265  // Jose Garcia
266  // Since the read method is virtual and implemented outside
267  // libdap++ if we cannot read the data that is the problem
268  // of the user or of whoever wrote the surrogate library
269  // implemeting read therefore it is an internal error.
270  throw InternalErr(__FILE__, __LINE__, "This value not read!");
271  }
272 
273  // Extract the second arg's value.
274  if (!b || !(b->read_p() || b->read())) {
275  // Jose Garcia
276  // Since the read method is virtual and implemented outside
277  // libdap++ if we cannot read the data that is the problem
278  // of the user or of whoever wrote the surrogate library
279  // implemeting read therefore it is an internal error.
280  throw InternalErr(__FILE__, __LINE__, "This value not read!");
281  }
282 
283  return d4_ops(b, op);
284 }
285 
286 bool
288 {
289  DBG(cerr << "b->typename(): " << b->type_name() << endl);
290 
291  switch (b->type()) {
292  case dods_int8_c:
293  return Cmp<dods_float64, dods_int8>(op, d_buf, static_cast<Int8*>(b)->value());
294  case dods_byte_c:
295  return Cmp<dods_float64, dods_byte>(op, d_buf, static_cast<Byte*>(b)->value());
296  case dods_int16_c:
297  return Cmp<dods_float64, dods_int16>(op, d_buf, static_cast<Int16*>(b)->value());
298  case dods_uint16_c:
299  return Cmp<dods_float64, dods_uint16>(op, d_buf, static_cast<UInt16*>(b)->value());
300  case dods_int32_c:
301  return Cmp<dods_float64, dods_int32>(op, d_buf, static_cast<Int32*>(b)->value());
302  case dods_uint32_c:
303  return Cmp<dods_float64, dods_uint32>(op, d_buf, static_cast<UInt32*>(b)->value());
304  case dods_int64_c:
305  return Cmp<dods_float64, dods_int64>(op, d_buf, static_cast<Int64*>(b)->value());
306  case dods_uint64_c:
307  return Cmp<dods_float64, dods_uint64>(op, d_buf, static_cast<UInt64*>(b)->value());
308  case dods_float32_c:
309  // Note that this code casts the double (dods_float64) to a float because when
310  // real numbers are approximated using float or double, errors are larger in the float
311  // case, making <= and == operators fail. By casting to the smaller type, the
312  // same values have the same error and we can avoid using a range compare and a
313  // delta value.
314  return Cmp<dods_float32, dods_float32>(op, (float)d_buf, static_cast<Float32*>(b)->value());
315  case dods_float64_c:
316  return Cmp<dods_float64, dods_float64>(op, d_buf, static_cast<Float64*>(b)->value());
317  case dods_str_c:
318  case dods_url_c:
319  throw Error(malformed_expr, "Relational operators can only compare compatible types (number, string).");
320  default:
321  throw Error(malformed_expr, "Relational operators only work with scalar types.");
322  }
323 
324 }
333 void
334 Float64::dump(ostream &strm) const
335 {
336  strm << DapIndent::LMarg << "Float64::dump - ("
337  << (void *)this << ")" << endl ;
338  DapIndent::Indent() ;
339  BaseType::dump(strm) ;
340  strm << DapIndent::LMarg << "value: " << d_buf << endl ;
341  DapIndent::UnIndent() ;
342 }
343 
344 } // namespace libdap
345 
virtual bool read()
Read data into a local buffer.
Definition: BaseType.cc:899
-
Holds an 8-bit signed integer value.
Definition: Int8.h:42
-
Holds a64-bit signed integer.
Definition: Int64.h:49
-
virtual bool read_p()
Has this variable been read?
Definition: BaseType.cc:480
-
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
virtual void print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
Print an ASCII representation of the variable structure.
Definition: BaseType.cc:1003
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: BaseType.cc:291
-
virtual unsigned int buf2val(void **val)
Reads the class data.
Definition: Float64.cc:200
-
virtual void compute_checksum(Crc32 &checksum)
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
Definition: Float64.cc:155
-
virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)
Receive data from the net.
Definition: Float64.cc:147
-
virtual unsigned int width(bool constrained=false) const
How many bytes does this variable use Return the number of bytes of storage this variable uses...
Definition: Float64.cc:122
-
Read data from the stream made by D4StreamMarshaller.
-
virtual BaseType * ptr_duplicate()
Definition: Float64.cc:103
-
Holds an unsigned 16-bit integer.
Definition: UInt16.h:57
-
Definition: crc.h:76
-
BaseType(const string &n, const Type &t, bool is_dap4=false)
The BaseType constructor.
Definition: BaseType.cc:126
-
virtual bool d4_ops(BaseType *b, int op)
Evaluator a relop for DAP4.
Definition: Float64.cc:287
-
virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
Move data to the net, then remove them from the object.
Definition: Float64.cc:128
-
virtual dods_float64 value() const
Definition: Float64.cc:221
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
virtual bool ops(BaseType *b, int op)
Evaluate relational operators.
Definition: Float64.cc:261
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
-
Holds a 16-bit signed integer value.
Definition: Int16.h:59
- -
virtual Type type() const
Returns the type of the class instance.
Definition: BaseType.cc:365
-
Float64(const string &n)
Definition: Float64.cc:84
-
virtual void set_read_p(bool state)
Sets the value of the read_p property.
Definition: BaseType.cc:516
-
Holds a 64-bit unsigned integer.
Definition: UInt64.h:49
-
void AddData(const uint8_t *pData, const uint32_t length)
Definition: crc.h:98
-
virtual unsigned int val2buf(void *val, bool reuse=false)
Loads class data.
Definition: Float64.cc:184
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Float64.cc:334
-
Evaluate a constraint expression.
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
-
virtual string type_name() const
Returns the type of the class instance as a string.
Definition: BaseType.cc:379
-
Holds a 64-bit (double precision) floating point value.
Definition: Float64.h:60
-
Holds a single byte.
Definition: Byte.h:60
-
bool eval_selection(DDS &dds, const std::string &dataset)
Evaluate a boolean-valued constraint expression. This is main method for the evaluator and is called ...
-
A class for error processing.
Definition: Error.h:92
-
Holds a 32-bit unsigned integer.
Definition: UInt32.h:59
-
virtual void print_val(FILE *out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: Float64.cc:236
-
Holds a 32-bit signed integer.
Definition: Int32.h:65
-
virtual string dataset() const
Returns the name of the dataset used to create this instance.
Definition: BaseType.cc:358
-
-
- - - - diff --git a/html/Float64_8h_source.html b/html/Float64_8h_source.html deleted file mode 100644 index 846aeda17..000000000 --- a/html/Float64_8h_source.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - -libdap: Float64.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Float64.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1994-1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Interface for Float64 type.
33 //
34 // jhrg 9/7/94
35 
36 #ifndef _float64_h
37 #define _float64_h 1
38 
39 
40 #ifndef _dods_datatypes_h
41 #include "dods-datatypes.h"
42 #endif
43 
44 #ifndef _basetype_h
45 #include "BaseType.h"
46 #endif
47 
48 #ifndef constraint_evaluator_h
49 #include "ConstraintEvaluator.h"
50 #endif
51 
52 namespace libdap
53 {
54 
60 class Float64: public BaseType
61 {
62 protected:
63  dods_float64 d_buf;
64 
65 public:
66  Float64(const string &n);
67  Float64(const string &n, const string &d);
68  virtual ~Float64()
69  {}
70 
71  Float64(const Float64 &copy_from);
72 
73  Float64 &operator=(const Float64 &rhs);
74 
75  virtual BaseType *ptr_duplicate();
76  virtual unsigned int width(bool constrained = false) const;
77 
78  // DAP2
79  virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval = true);
80  virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse = false);
81 
82  // DAP4
83  virtual void compute_checksum(Crc32 &checksum);
84  virtual void serialize(D4StreamMarshaller &m, DMR &dmr, /*ConstraintEvaluator &eval,*/ bool filter = false);
85  virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr);
86 
87  virtual unsigned int val2buf(void *val, bool reuse = false);
88  virtual unsigned int buf2val(void **val);
89 
90  virtual dods_float64 value() const;
91  virtual bool set_value(dods_float64 val);
92 
93  virtual void print_val(FILE *out, string space = "",
94  bool print_decl_p = true);
95  virtual void print_val(ostream &out, string space = "",
96  bool print_decl_p = true);
97 
98  virtual bool ops(BaseType *b, int op);
99  virtual bool d4_ops(BaseType *b, int op);
100 
101  virtual void dump(ostream &strm) const ;
102 };
103 
104 } // namespace libdap
105 
106 #endif // _float64_h
107 
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
virtual unsigned int buf2val(void **val)
Reads the class data.
Definition: Float64.cc:200
-
virtual void compute_checksum(Crc32 &checksum)
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
Definition: Float64.cc:155
-
virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)
Receive data from the net.
Definition: Float64.cc:147
-
virtual unsigned int width(bool constrained=false) const
How many bytes does this variable use Return the number of bytes of storage this variable uses...
Definition: Float64.cc:122
-
Read data from the stream made by D4StreamMarshaller.
-
virtual BaseType * ptr_duplicate()
Definition: Float64.cc:103
-
Definition: crc.h:76
-
virtual bool d4_ops(BaseType *b, int op)
Evaluator a relop for DAP4.
Definition: Float64.cc:287
-
virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
Move data to the net, then remove them from the object.
Definition: Float64.cc:128
-
virtual dods_float64 value() const
Definition: Float64.cc:221
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual bool ops(BaseType *b, int op)
Evaluate relational operators.
Definition: Float64.cc:261
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
- -
Float64(const string &n)
Definition: Float64.cc:84
-
virtual unsigned int val2buf(void *val, bool reuse=false)
Loads class data.
Definition: Float64.cc:184
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Float64.cc:334
-
Evaluate a constraint expression.
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
-
Holds a 64-bit (double precision) floating point value.
Definition: Float64.h:60
-
virtual void print_val(FILE *out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: Float64.cc:236
-
-
- - - - diff --git a/html/GNURegex_8cc_source.html b/html/GNURegex_8cc_source.html deleted file mode 100644 index d1694cbe4..000000000 --- a/html/GNURegex_8cc_source.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -libdap: GNURegex.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
GNURegex.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2005 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 
27 //#define DODS_DEBUG
28 
29 #include <config.h>
30 
31 #ifndef WIN32
32 #include <alloca.h>
33 #endif
34 #include <stdlib.h>
35 
36 #include <sys/types.h>
37 #include <regex.h>
38 
39 #include <new>
40 #include <string>
41 #include <vector>
42 #include <stdexcept>
43 
44 #include "GNURegex.h"
45 #include "Error.h"
46 #include "util.h"
47 #include "debug.h"
48 
49 
50 using namespace std;
51 
52 namespace libdap {
53 
54 void
55 Regex::init(const char *t)
56 {
57  DBG( cerr << "Regex::init() - BEGIN" << endl);
58 
59  DBG( cerr << "Regex::init() - creating new regex..." << endl);
60  d_preg = static_cast<void*>(new regex_t);
61 
62  DBG( cerr << "Regex::init() - Calling regcomp()..." << endl);
63  int result = regcomp(static_cast<regex_t*>(d_preg), t, REG_EXTENDED);
64 
65  if (result != 0) {
66  DBG( cerr << "Regex::init() - Call to regcomp FAILED" << endl);
67  DBG( cerr << "Regex::init() - Calling regerror()..." << endl);
68  size_t msg_len = regerror(result, static_cast<regex_t*>(d_preg),
69  static_cast<char*>(NULL),
70  static_cast<size_t>(0));
71 
72  DBG( cerr << "Regex::init() - Creating message" << endl);
73  vector<char> msg(msg_len+1);
74  //char *msg = new char[msg_len+1];
75  DBG( cerr << "Regex::init() - Calling regerror() again..." << endl);
76  regerror(result, static_cast<regex_t*>(d_preg), &msg[0], msg_len);
77  DBG( cerr << "Regex::init() - Throwing libdap::Error" << endl);
78  throw Error(string("Regex error: ") + string(&msg[0]));
79  //delete[] msg;
80  //throw e;
81  }
82  DBG( cerr << "Regex::init() - Call to regcomp() SUCCEEDED" << endl);
83  DBG( cerr << "Regex::init() - END" << endl);
84 }
85 
86 Regex::~Regex()
87 {
88  regfree(static_cast<regex_t*>(d_preg));
89  delete static_cast<regex_t*>(d_preg); d_preg = 0;
90 
91 }
92 
96 Regex::Regex(const char* t)
97 {
98  init(t);
99 }
100 
103 Regex::Regex(const char* t, int)
104 {
105  init(t);
106 }
107 
114 int
115 Regex::match(const char* s, int len, int pos)
116 {
117  if (len > 32766) // Integer overflow protection
118  return -1;
119 
120  regmatch_t *pmatch = new regmatch_t[len+1];
121  string ss = s;
122 
123  int result = regexec(static_cast<regex_t*>(d_preg),
124  ss.substr(pos, len-pos).c_str(), len, pmatch, 0);
125  int matchnum;
126  if (result == REG_NOMATCH)
127  matchnum = -1;
128  else
129  matchnum = pmatch[0].rm_eo - pmatch[0].rm_so;
130 
131  delete[] pmatch; pmatch = 0;
132 
133  return matchnum;
134 }
135 
146 int
147 Regex::search(const char* s, int len, int& matchlen, int pos)
148 {
149  // sanitize allocation
150  if (!size_ok(sizeof(regmatch_t), len+1))
151  return -1;
152 
153  // alloc space for len matches, which is theoretical max.
154  // Problem: If somehow 'len' is very large - say the size of a 32-bit int,
155  // then len+1 is a an integer overflow and this might be exploited by
156  // an attacker. It's not likely there will be more than a handful of
157  // matches, so I am going to limit this value to 32766. jhrg 3/4/09
158  if (len > 32766)
159  return -1;
160 
161  regmatch_t *pmatch = new regmatch_t[len+1];
162  string ss = s;
163 
164  int result = regexec(static_cast<regex_t*>(d_preg),
165  ss.substr(pos, len-pos).c_str(), len, pmatch, 0);
166  if (result == REG_NOMATCH) {
167  delete[] pmatch; pmatch = 0;
168  return -1;
169  }
170 
171  // Match found, find the first one (pmatch lists the longest first)
172  int m = 0;
173  for (int i = 1; i < len; ++i)
174  if (pmatch[i].rm_so != -1 && pmatch[i].rm_so < pmatch[m].rm_so)
175  m = i;
176 
177  matchlen = pmatch[m].rm_eo - pmatch[m].rm_so;
178  int matchpos = pmatch[m].rm_so;
179 
180  delete[] pmatch; pmatch = 0;
181  return matchpos;
182 }
183 
184 } // namespace libdap
185 
bool size_ok(unsigned int sz, unsigned int nelem)
sanitize the size of an array. Test for integer overflow when dynamically allocating an array...
Definition: util.cc:1148
-
STL namespace.
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
-
- - - - diff --git a/html/GNURegex_8h_source.html b/html/GNURegex_8h_source.html deleted file mode 100644 index c17aa822d..000000000 --- a/html/GNURegex_8h_source.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - -libdap: GNURegex.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
GNURegex.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2005 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef _Regex_h
27 #define _Regex_h 1
28 
29 namespace libdap
30 {
31 
35 class Regex
36 {
37 private:
38  // d_preg was a regex_t* but I needed to include both regex.h and config.h
39  // to make the gnulib code work. Because this header is installed (and is
40  // used by other libraries) it cannot include config.h, so I moved the
41  // regex.h and config.h (among other) includes to the implementation. It
42  // would be cleaner to use a special class, but for one field that seems
43  // like overkill.
44  void *d_preg;
45  void init(const char *t);
46 
47 public:
48  Regex(const char *t);
49  Regex(const char *t, int dummy);
50  ~Regex();
51 
53  int match(const char* s, int len, int pos = 0);
55  int search(const char* s, int len, int& matchlen, int pos = 0);
56 };
57 
58 } // namespace libdap
59 
60 #endif
int search(const char *s, int len, int &matchlen, int pos=0)
How much of the string does the pattern match.
Definition: GNURegex.cc:147
- -
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
int match(const char *s, int len, int pos=0)
Does the pattern match.
Definition: GNURegex.cc:115
-
Regex(const char *t)
Definition: GNURegex.cc:96
-
-
- - - - diff --git a/html/GSEClause_8cc_source.html b/html/GSEClause_8cc_source.html deleted file mode 100644 index 1e7133f43..000000000 --- a/html/GSEClause_8cc_source.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - -libdap: GSEClause.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
GSEClause.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // The Grid Selection Expression Clause class.
33 
34 
35 #include "config.h"
36 
37 #include <iostream>
38 #include <sstream>
39 
40 #include <Array.h>
41 #include <Grid.h>
42 #include <dods-datatypes.h>
43 #include <Error.h>
44 #include <InternalErr.h>
45 #include <debug.h>
46 
47 #include "GSEClause.h"
48 #include "parser.h"
49 #include "gse.tab.hh"
50 
51 using namespace std;
52 using namespace libdap;
53 
54 namespace functions {
55 
56 // For the comparisons here, we should use an epsilon to catch issues
57 // with floating point values. jhrg 01/12/06
58 template<class T>
59 static bool
60 compare(T elem, relop op, double value)
61 {
62  switch (op) {
63  case dods_greater_op:
64  return elem > value;
65  case dods_greater_equal_op:
66  return elem >= value;
67  case dods_less_op:
68  return elem < value;
69  case dods_less_equal_op:
70  return elem <= value;
71  case dods_equal_op:
72  return elem == value;
73  case dods_not_equal_op:
74  return elem != value;
75  case dods_nop_op:
76  throw Error(malformed_expr, "Attempt to use NOP in Grid selection.");
77  default:
78  throw Error(malformed_expr, "Unknown relational operator in Grid selection.");
79  }
80 }
81 
82 // These values are used in error messages, hence the strings.
83 template<class T>
84 void
85 GSEClause::set_map_min_max_value(T min, T max)
86 {
87  DBG(cerr << "Inside set map min max value " << min << ", " << max << endl);
88  std::ostringstream oss1;
89  oss1 << min;
90  d_map_min_value = oss1.str();
91 
92  std::ostringstream oss2;
93  oss2 << max;
94  d_map_max_value = oss2.str();
95 }
96 
97 // Read the map array, scan, set start and stop.
98 template<class T>
99 void
100 GSEClause::set_start_stop()
101 {
102  T *vals = new T[d_map->length()];
103  d_map->value(vals);
104 
105  // Set the map's max and min values for use in error messages (it's a lot
106  // easier to do here, now, than later... 9/20/2001 jhrg)
107  set_map_min_max_value<T>(vals[d_start], vals[d_stop]);
108 
109  // Starting at the current start point in the map (initially index position
110  // zero), scan forward until the comparison is true. Set the new value
111  // of d_start to that location. Note that each clause applies to exactly
112  // one map. The 'i <= end' test keeps us from setting start _past_ the
113  // end ;-)
114  int i = d_start;
115  int end = d_stop;
116  while (i <= end && !compare<T>(vals[i], d_op1, d_value1))
117  i++;
118 
119  d_start = i;
120 
121  // Now scan backward from the end. We scan all the way to the actual start
122  // although it would probably work to stop at 'i >= d_start'.
123  i = end;
124  while (i >= 0 && !compare<T>(vals[i], d_op1, d_value1))
125  i--;
126  d_stop = i;
127 
128  // Every clause must have one operator but the second is optional since
129  // the more complex form of a clause is optional. That is, the above two
130  // loops took care of constraints like 'x < 7' but we need the following
131  // for ones like '3 < x < 7'.
132  if (d_op2 != dods_nop_op) {
133  int i = d_start;
134  int end = d_stop;
135  while (i <= end && !compare<T>(vals[i], d_op2, d_value2))
136  i++;
137 
138  d_start = i;
139 
140  i = end;
141  while (i >= 0 && !compare<T>(vals[i], d_op2, d_value2))
142  i--;
143 
144  d_stop = i;
145  }
146 
147  delete[] vals;
148 }
149 
150 void
151 GSEClause::compute_indices()
152 {
153  switch (d_map->var()->type()) {
154  case dods_byte_c:
155  set_start_stop<dods_byte>();
156  break;
157  case dods_int16_c:
158  set_start_stop<dods_int16>();
159  break;
160  case dods_uint16_c:
161  set_start_stop<dods_uint16>();
162  break;
163  case dods_int32_c:
164  set_start_stop<dods_int32>();
165  break;
166  case dods_uint32_c:
167  set_start_stop<dods_uint32>();
168  break;
169  case dods_float32_c:
170  set_start_stop<dods_float32>();
171  break;
172  case dods_float64_c:
173  set_start_stop<dods_float64>();
174  break;
175  default:
176  throw Error(malformed_expr,
177  "Grid selection using non-numeric map vectors is not supported");
178  }
179 
180 }
181 
182 // Public methods
183 
185 GSEClause::GSEClause(Grid *grid, const string &map, const double value,
186  const relop op)
187  : d_map(0),
188  d_value1(value), d_value2(0), d_op1(op), d_op2(dods_nop_op),
189  d_map_min_value(""), d_map_max_value("")
190 {
191  d_map = dynamic_cast<Array *>(grid->var(map));
192  if (!d_map)
193  throw Error(string("The map variable '") + map
194  + string("' does not exist in the grid '")
195  + grid->name() + string("'."));
196 
197  DBG(cerr << d_map->toString());
198 
199  // Initialize the start and stop indices.
200  Array::Dim_iter iter = d_map->dim_begin();
201  d_start = d_map->dimension_start(iter);
202  d_stop = d_map->dimension_stop(iter);
203 
204  compute_indices();
205 }
206 
208 GSEClause::GSEClause(Grid *grid, const string &map, const double value1,
209  const relop op1, const double value2, const relop op2)
210  : d_map(0),
211  d_value1(value1), d_value2(value2), d_op1(op1), d_op2(op2),
212  d_map_min_value(""), d_map_max_value("")
213 {
214  d_map = dynamic_cast<Array *>(grid->var(map));
215  if (!d_map)
216  throw Error(string("The map variable '") + map
217  + string("' does not exist in the grid '")
218  + grid->name() + string("'."));
219 
220  DBG(cerr << d_map->toString());
221 
222  // Initialize the start and stop indices.
223  Array::Dim_iter iter = d_map->dim_begin();
224  d_start = d_map->dimension_start(iter);
225  d_stop = d_map->dimension_stop(iter);
226 
227  compute_indices();
228 }
229 
230 GSEClause::~GSEClause()
231 {
232  delete d_map;
233 }
234 
237 bool
239 {
240  if (!d_map)
241  return false;
242 
243  // More ...
244 
245  return true;
246 }
247 
250 Array *
252 {
253  return d_map;
254 }
255 
260 void
262 {
263  d_map = map;
264 }
265 
268 string
270 {
271  return d_map->name();
272 }
273 
277 int
279 {
280  return d_start;
281 }
282 
285 void
287 {
288  d_start = start;
289 }
290 
294 int
296 {
297  DBG(cerr << "Returning stop index value of: " << d_stop << endl);
298  return d_stop;
299 }
300 
303 void
305 {
306  d_stop = stop;
307 }
308 
313 string
315 {
316  return d_map_min_value;
317 }
318 
323 string
325 {
326  return d_map_max_value;
327 }
328 
329 } // namespace functions
330 
virtual string name() const
Returns the name of the class instance.
Definition: BaseType.cc:320
-
string get_map_max_value() const
Get the maximum map vector value.
Definition: GSEClause.cc:324
-
virtual BaseType * var(const string &name, bool exact_match=true, btp_stack *s=0)
btp_stack no longer needed; use back pointers (BaseType::get_parent())
Definition: Constructor.cc:267
- -
STL namespace.
-
int get_stop() const
Get the stopping index of the clause&#39;s map variable as constrained by this clause.
Definition: GSEClause.cc:295
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
std::vector< dimension >::iterator Dim_iter
Definition: Array.h:206
-
Holds the Grid data type.
Definition: Grid.h:122
-
void set_stop(int stop)
Set the stopping index.
Definition: GSEClause.cc:304
-
bool OK() const
Definition: GSEClause.cc:238
-
libdap::Array * get_map() const
Get a pointer to the map variable constrained by this clause.
Definition: GSEClause.cc:251
-
void set_start(int start)
Set the starting index.
Definition: GSEClause.cc:286
-
void set_map(libdap::Array *map)
Set the pointer to the map vector contrained by this clause.
Definition: GSEClause.cc:261
-
int get_start() const
Get the starting index of the clause&#39;s map variable as constrained by this clause.
Definition: GSEClause.cc:278
-
A class for error processing.
Definition: Error.h:92
-
string get_map_name() const
Get the name of the map variable constrained by this clause.
Definition: GSEClause.cc:269
-
string get_map_min_value() const
Get the minimum map vector value.
Definition: GSEClause.cc:314
-
A multidimensional array of identical data types.
Definition: Array.h:112
-
-
- - - - diff --git a/html/GSEClause_8h_source.html b/html/GSEClause_8h_source.html deleted file mode 100644 index a8d73e479..000000000 --- a/html/GSEClause_8h_source.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - -libdap: GSEClause.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
GSEClause.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // The Grid Selection Expression Clause class.
33 
34 #ifndef _gseclause_h
35 #define _gseclause_h 1
36 
37 #include <string>
38 #include <sstream>
39 
40 #if 0
41 #include <BaseType.h>
42 #include <Array.h>
43 #include <Grid.h>
44 #endif
45 
46 namespace libdap {
47 class BaseType;
48 class Array;
49 class Grid;
50 }
51 
52 namespace functions
53 {
54 
55 enum relop {
56  dods_nop_op,
57  dods_greater_op,
58  dods_greater_equal_op,
59  dods_less_op,
60  dods_less_equal_op,
61  dods_equal_op,
62  dods_not_equal_op
63 };
64 
73 class GSEClause
74 {
75 private:
76  libdap::Array *d_map;
77  // _value1, 2 and _op1, 2 hold the first and second operators and
78  // operands. For a clause like `var op value' only _op1 and _value1 have
79  // valid information. For a clause like `value op var op value' the
80  // second operator and operand are on _op2 and _value2. 1/19/99 jhrg
81  double d_value1, d_value2;
82  relop d_op1, d_op2;
83  int d_start;
84  int d_stop;
85 
86  string d_map_min_value, d_map_max_value;
87 
88  GSEClause(); // Hidden default constructor.
89 
90  GSEClause(const GSEClause &param); // Hide
91  GSEClause &operator=(GSEClause &rhs); // Hide
92 
93  template<class T> void set_start_stop();
94  template<class T> void set_map_min_max_value(T min, T max);
95 
96  void compute_indices();
97 
98 public:
101  GSEClause(libdap::Grid *grid, const string &map, const double value,
102  const relop op);
103 
104  GSEClause(libdap::Grid *grid, const string &map, const double value1,
105  const relop op1, const double value2, const relop op2);
107 
108  virtual ~GSEClause();
109 
110  bool OK() const;
111 
114  libdap::Array *get_map() const;
115 
116  string get_map_name() const;
117 
118  int get_start() const;
119 
120  int get_stop() const;
121 
122  string get_map_min_value() const;
123 
124  string get_map_max_value() const;
126 
129  void set_map(libdap::Array *map);
130 
131  void set_start(int start);
132 
133  void set_stop(int stop);
135 };
136 
137 } // namespace functions
138 
139 #endif // _gseclause_h
140 
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
Holds the Grid data type.
Definition: Grid.h:122
- -
A multidimensional array of identical data types.
Definition: Array.h:112
-
-
- - - - diff --git a/html/GeoConstraint_8cc_source.html b/html/GeoConstraint_8cc_source.html deleted file mode 100644 index 9fd9513c3..000000000 --- a/html/GeoConstraint_8cc_source.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - -libdap: GeoConstraint.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
GeoConstraint.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2006 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // The Grid Selection Expression Clause class.
27 
28 #include "config.h"
29 
30 #include <cstring>
31 #include <cmath>
32 #include <iostream>
33 #include <sstream>
34 #include <algorithm> // for find_if
35 
36 //#define DODS_DEBUG
37 //#define DODS_DEBUG2
38 
39 #include <Float64.h>
40 #include <Array.h>
41 #include <Error.h>
42 #include <InternalErr.h>
43 #include <dods-datatypes.h>
44 #include <util.h>
45 #include <debug.h>
46 
47 #include "GeoConstraint.h"
48 
49 using namespace std;
50 using namespace libdap;
51 
52 namespace functions {
53 
58 class is_prefix
59 {
60 private:
61  string s;
62 public:
63  is_prefix(const string & in): s(in)
64  {}
65 
66  bool operator()(const string & prefix)
67  {
68  return s.find(prefix) == 0;
69  }
70 };
71 
82 bool
83 unit_or_name_match(set < string > units, set < string > names,
84  const string & var_units, const string & var_name)
85 {
86  return (units.find(var_units) != units.end()
87  || find_if(names.begin(), names.end(),
88  is_prefix(var_name)) != names.end());
89 }
90 
105 GeoConstraint::Notation
106 GeoConstraint::categorize_notation(const double left,
107  const double right) const
108 {
109  return (left < 0 || right < 0) ? neg_pos : pos;
110 }
111 
112 /* A private method to translate the longitude constraint from -180/179
113  notation to 0/359 notation.
114 
115  About the two notations:
116  0 180 360
117  |---------------------------|-------------------------|
118  0 180,-180 0
119 
120  so in the neg-pos notation (using the name I give it in this class) both
121  180 and -180 are the same longitude. And in the pos notation 0 and 360 are
122  the same.
123 
124  @param left Value-result parameter; the left side of the bounding box
125  @parm right Value-result parameter; the right side of the bounding box */
126 void
127 GeoConstraint::transform_constraint_to_pos_notation(double &left,
128  double &right) const
129 {
130  if (left < 0)
131  left += 360 ;
132 
133  if (right < 0)
134  right += 360;
135 }
136 
145 void GeoConstraint::transform_longitude_to_pos_notation()
146 {
147  // Assume earlier logic is correct (since the test is expensive)
148  // for each value, add 180
149  // Longitude could be represented using any of the numeric types
150  for (int i = 0; i < d_lon_length; ++i)
151  if (d_lon[i] < 0)
152  d_lon[i] += 360;
153 }
154 
164 void GeoConstraint::transform_longitude_to_neg_pos_notation()
165 {
166  for (int i = 0; i < d_lon_length; ++i)
167  if (d_lon[i] > 180)
168  d_lon[i] -= 360;
169 }
170 
171 bool GeoConstraint::is_bounding_box_valid(const double left, const double top,
172  const double right, const double bottom) const
173 {
174  if ((left < d_lon[0] && right < d_lon[0])
175  || (left > d_lon[d_lon_length-1] && right > d_lon[d_lon_length-1]))
176  return false;
177 
178  if (d_latitude_sense == normal) {
179  // When sense is normal, the largest values are at the origin.
180  if ((top > d_lat[0] && bottom > d_lat[0])
181  || (top < d_lat[d_lat_length-1] && bottom < d_lat[d_lat_length-1]))
182  return false;
183  }
184  else {
185  if ((top < d_lat[0] && bottom < d_lat[0])
186  || (top > d_lat[d_lat_length-1] && bottom > d_lat[d_lat_length-1]))
187  return false;
188  }
189 
190  return true;
191 }
192 
203 void GeoConstraint::find_longitude_indeces(double left, double right,
204  int &longitude_index_left, int &longitude_index_right) const
205 {
206  // Use all values 'modulo 360' to take into account the cases where the
207  // constraint and/or the longitude vector are given using values greater
208  // than 360 (i.e., when 380 is used to mean 20).
209  double t_left = fmod(left, 360.0);
210  double t_right = fmod(right, 360.0);
211 
212  // Find the place where 'longitude starts.' That is, what value of the
213  // index 'i' corresponds to the smallest value of d_lon. Why we do this:
214  // Some data sources use offset longitude axes so that the 'seam' is
215  // shifted to a place other than the date line.
216  int i = 0;
217  int lon_origin_index = 0;
218  double smallest_lon = fmod(d_lon[0], 360.0);
219  while (i < d_lon_length) {
220  double curent_lon_value = fmod(d_lon[i], 360.0);
221  if (smallest_lon > curent_lon_value) {
222  smallest_lon = curent_lon_value;
223  lon_origin_index = i;
224  }
225  ++i;
226  }
227 
228  DBG2(cerr << "lon_origin_index: " << lon_origin_index << endl);
229 
230  // Scan from the index of the smallest value looking for the place where
231  // the value is greater than or equal to the left most point of the bounding
232  // box.
233  i = lon_origin_index;
234  while (fmod(d_lon[i], 360.0) < t_left) {
235  ++i;
236  i = i % d_lon_length;
237 
238  // If we cycle completely through all the values/indices, throw
239  if (i == lon_origin_index)
240  throw Error("geogrid: Could not find an index for the longitude value '" + double_to_string(left) + "'");
241  }
242 
243  if (fmod(d_lon[i], 360.0) == t_left)
244  longitude_index_left = i;
245  else
246  longitude_index_left = (i - 1) > 0 ? i - 1 : 0;
247 
248  DBG2(cerr << "longitude_index_left: " << longitude_index_left << endl);
249 
250  // Assume the vector is circular --> the largest value is next to the
251  // smallest.
252  int largest_lon_index = (lon_origin_index - 1 + d_lon_length) % d_lon_length;
253  i = largest_lon_index;
254  while (fmod(d_lon[i], 360.0) > t_right) {
255  // This is like modulus but for 'counting down'
256  i = (i == 0) ? d_lon_length - 1 : i - 1;
257  if (i == largest_lon_index)
258  throw Error("geogrid: Could not find an index for the longitude value '" + double_to_string(right) + "'");
259  }
260 
261  if (fmod(d_lon[i], 360.0) == t_right)
262  longitude_index_right = i;
263  else
264  longitude_index_right = (i + 1) < d_lon_length - 1 ? i + 1 : d_lon_length - 1;
265 
266  DBG2(cerr << "longitude_index_right: " << longitude_index_right << endl);
267 }
268 
281 void GeoConstraint::find_latitude_indeces(double top, double bottom,
282  LatitudeSense sense,
283  int &latitude_index_top,
284  int &latitude_index_bottom) const
285 {
286  int i, j;
287 
288  if (sense == normal) {
289  i = 0;
290  while (i < d_lat_length - 1 && top < d_lat[i])
291  ++i;
292 
293  j = d_lat_length - 1;
294  while (j > 0 && bottom > d_lat[j])
295  --j;
296 
297  if (d_lat[i] == top)
298  latitude_index_top = i;
299  else
300  latitude_index_top = (i - 1) > 0 ? i - 1 : 0;
301 
302  if (d_lat[j] == bottom)
303  latitude_index_bottom = j;
304  else
305  latitude_index_bottom =
306  (j + 1) < d_lat_length - 1 ? j + 1 : d_lat_length - 1;
307  }
308  else {
309  i = d_lat_length - 1;
310  while (i > 0 && d_lat[i] > top)
311  --i;
312 
313  j = 0;
314  while (j < d_lat_length - 1 && d_lat[j] < bottom)
315  ++j;
316 
317  if (d_lat[i] == top)
318  latitude_index_top = i;
319  else
320  latitude_index_top = (i + 1) < d_lat_length - 1 ? i + 1 : d_lat_length - 1;
321 
322  if (d_lat[j] == bottom)
323  latitude_index_bottom = j;
324  else
325  latitude_index_bottom = (j - 1) > 0 ? j - 1 : 0;
326  }
327 }
328 
332 GeoConstraint::LatitudeSense GeoConstraint::categorize_latitude() const
333 {
334  return d_lat[0] >= d_lat[d_lat_length - 1] ? normal : inverted;
335 }
336 
337 // Use 'index' as the pivot point. Move the points behind index to the front of
338 // the vector and those points in front of and at index to the rear.
339 static void
340 swap_vector_ends(char *dest, char *src, int len, int index, int elem_sz)
341 {
342  memcpy(dest, src + index * elem_sz, (len - index) * elem_sz);
343 
344  memcpy(dest + (len - index) * elem_sz, src, index * elem_sz);
345 }
346 
347 template<class T>
348 static void transpose(std::vector<std::vector<T> > a,
349  std::vector<std::vector<T> > b, int width, int height)
350 {
351  for (int i = 0; i < width; i++) {
352  for (int j = 0; j < height; j++) {
353  b[j][i] = a[i][j];
354  }
355  }
356 }
357 
365 void GeoConstraint::transpose_vector(double *src, const int length)
366 {
367  double *tmp = new double[length];
368 
369  int i = 0, j = length-1;
370  while (i < length)
371  tmp[j--] = src[i++];
372 
373  memcpy(src, tmp,length * sizeof(double));
374 
375  delete[] tmp;
376 }
377 
378 static int
379 count_size_except_latitude_and_longitude(Array &a)
380 {
381  if (a.dim_end() - a.dim_begin() <= 2) // < 2 is really an error...
382  return 1;
383 
384  int size = 1;
385  for (Array::Dim_iter i = a.dim_begin(); (i + 2) != a.dim_end(); ++i)
386  size *= a.dimension_size(i, true);
387 
388  return size;
389 }
390 
391 void GeoConstraint::flip_latitude_within_array(Array &a, int lat_length,
392  int lon_length)
393 {
394  if (!d_array_data) {
395  a.read();
396  d_array_data = static_cast<char*>(a.value());
397  d_array_data_size = a.width(true); // Bytes not elements
398  }
399 
400  int size = count_size_except_latitude_and_longitude(a);
401  // char *tmp_data = new char[d_array_data_size];
402  vector<char> tmp_data(d_array_data_size);
403  int array_elem_size = a.var()->width(true);
404  int lat_lon_size = (d_array_data_size / size);
405 
406  DBG(cerr << "lat, lon_length: " << lat_length << ", " << lon_length << endl);
407  DBG(cerr << "size: " << size << endl);
408  DBG(cerr << "d_array_data_size: " << d_array_data_size << endl);
409  DBG(cerr << "array_elem_size: " << array_elem_size<< endl);
410  DBG(cerr << "lat_lon_size: " << lat_lon_size<< endl);
411 
412  for (int i = 0; i < size; ++i) {
413  int lat = 0;
414  int s_lat = lat_length - 1;
415  // lon_length is the element size; memcpy() needs the number of bytes
416  int lon_size = array_elem_size * lon_length;
417  int offset = i * lat_lon_size;
418  while (s_lat > -1)
419  memcpy(&tmp_data[0] + offset + (lat++ * lon_size),
420  d_array_data + offset + (s_lat-- * lon_size),
421  lon_size);
422  }
423 
424  memcpy(d_array_data, &tmp_data[0], d_array_data_size);
425 }
426 
435 void GeoConstraint::reorder_longitude_map(int longitude_index_left)
436 {
437  double *tmp_lon = new double[d_lon_length];
438 
439  swap_vector_ends((char *) tmp_lon, (char *) d_lon, d_lon_length,
440  longitude_index_left, sizeof(double));
441 
442  memcpy(d_lon, tmp_lon, d_lon_length * sizeof(double));
443 
444  delete[]tmp_lon;
445 }
446 
447 static int
448 count_dimensions_except_longitude(Array &a)
449 {
450  int size = 1;
451  for (Array::Dim_iter i = a.dim_begin(); (i + 1) != a.dim_end(); ++i)
452  size *= a.dimension_size(i, true);
453 
454  return size;
455 }
456 
474 void GeoConstraint::reorder_data_longitude_axis(Array &a, Array::Dim_iter lon_dim)
475 {
476 
477  if (!is_longitude_rightmost())
478  throw Error("This grid does not have Longitude as its rightmost dimension, the geogrid()\ndoes not support constraints that wrap around the edges of this type of grid.");
479 
480  DBG(cerr << "Constraint for the left half: " << get_longitude_index_left()
481  << ", " << get_lon_length() - 1 << endl);
482 
483  // Build a constraint for the left part and get those values
484  a.add_constraint(lon_dim, get_longitude_index_left(), 1,
485  get_lon_length() - 1);
486  a.set_read_p(false);
487  a.read();
488  DBG2(a.print_val(stderr));
489 
490  // Save the left-hand data to local storage
491  int left_size = a.width(true); // width() == length() * element size
492  char *left_data = (char*)a.value(); // value() allocates and copies
493 
494  // Build a constraint for the 'right' part, which goes from the left edge
495  // of the array to the right index and read those data.
496  // (Don't call a.clear_constraint() since that will clear the constraint on
497  // all the dimensions while add_constraint() will replace a constraint on
498  // the given dimension).
499 
500  DBG(cerr << "Constraint for the right half: " << 0
501  << ", " << get_longitude_index_right() << endl);
502 
503  a.add_constraint(lon_dim, 0, 1, get_longitude_index_right());
504  a.set_read_p(false);
505  a.read();
506  DBG2(a.print_val(stderr));
507 
508  char *right_data = (char*)a.value();
509  int right_size = a.width(true);
510 
511  // Make one big lump O'data
512  d_array_data_size = left_size + right_size;
513  d_array_data = new char[d_array_data_size];
514 
515  // Assume COARDS conventions are being followed: lon varies fastest.
516  // These *_elements variables are actually elements * bytes/element since
517  // memcpy() uses bytes.
518  int elem_size = a.var()->width(true);
519  int left_row_size = (get_lon_length() - get_longitude_index_left()) * elem_size;
520  int right_row_size = (get_longitude_index_right() + 1) * elem_size;
521  int total_bytes_per_row = left_row_size + right_row_size;
522 
523  DBG2(cerr << "elem_size: " << elem_size << "; left & right size: "
524  << left_row_size << ", " << right_row_size << endl);
525 
526  // This will work for any number of dimension so long as longitude is the
527  // right-most array dimension.
528  int rows_to_copy = count_dimensions_except_longitude(a);
529  for (int i = 0; i < rows_to_copy; ++i) {
530  DBG(cerr << "Copying " << i << "th row" << endl);
531  DBG(cerr << "left memcpy: " << *(float *)(left_data + (left_row_size * i)) << endl);
532 
533  memcpy(d_array_data + (total_bytes_per_row * i),
534  left_data + (left_row_size * i),
535  left_row_size);
536 
537  DBG(cerr << "right memcpy: " << *(float *)(right_data + (right_row_size * i)) << endl);
538 
539  memcpy(d_array_data + (total_bytes_per_row * i) + left_row_size,
540  right_data + (right_row_size * i),
541  right_row_size);
542  }
543 
544  delete[]left_data;
545  delete[]right_data;
546 }
547 
550 GeoConstraint::GeoConstraint()
551  : d_array_data(0), d_array_data_size(0),
552  d_lat(0), d_lon(0), d_lat_length(0), d_lon_length(0),
553  d_latitude_index_top(0),
554  d_latitude_index_bottom(0),
555  d_longitude_index_left(0),
556  d_longitude_index_right(0),
557  d_bounding_box_set(false),
558  d_longitude_rightmost(false),
559  d_longitude_notation(unknown_notation),
560  d_latitude_sense(unknown_sense)
561 {
562  // Build sets of attribute values for easy searching. Maybe overkill???
563  d_coards_lat_units.insert("degrees_north");
564  d_coards_lat_units.insert("degree_north");
565  d_coards_lat_units.insert("degree_N");
566  d_coards_lat_units.insert("degrees_N");
567 
568  d_coards_lon_units.insert("degrees_east");
569  d_coards_lon_units.insert("degree_east");
570  d_coards_lon_units.insert("degrees_E");
571  d_coards_lon_units.insert("degree_E");
572 
573  d_lat_names.insert("COADSY");
574  d_lat_names.insert("lat");
575  d_lat_names.insert("Lat");
576  d_lat_names.insert("LAT");
577 
578  d_lon_names.insert("COADSX");
579  d_lon_names.insert("lon");
580  d_lon_names.insert("Lon");
581  d_lon_names.insert("LON");
582 }
583 
594 void GeoConstraint::set_bounding_box(double top, double left,
595  double bottom, double right)
596 {
597  // Ensure this method is called only once. What about pthreads?
598  // The method Array::reset_constraint() might make this so it could be
599  // called more than once. jhrg 8/30/06
600  if (d_bounding_box_set)
601  throw Error("It is not possible to register more than one geographical constraint on a variable.");
602 
603  // Record the 'sense' of the latitude for use here and later on.
604  d_latitude_sense = categorize_latitude();
605 #if 0
606  if (d_latitude_sense == inverted)
607  throw Error("geogrid() does not currently work with inverted data (data where the north pole is at a negative latitude value).");
608 #endif
609 
610  // Categorize the notation used by the bounding box (0/359 or -180/179).
611  d_longitude_notation = categorize_notation(left, right);
612 
613  // If the notation uses -180/179, transform the request to 0/359 notation.
614  if (d_longitude_notation == neg_pos)
615  transform_constraint_to_pos_notation(left, right);
616 
617  // If the grid uses -180/179, transform it to 0/359 as well. This will make
618  // subsequent logic easier and adds only a few extra operations, even with
619  // large maps.
620  Notation longitude_notation =
621  categorize_notation(d_lon[0], d_lon[d_lon_length - 1]);
622 
623  if (longitude_notation == neg_pos)
625 
626  if (!is_bounding_box_valid(left, top, right, bottom))
627  throw Error("The bounding box does not intersect any data within this Grid or Array. The\ngeographical extent of these data are from latitude "
628  + double_to_string(d_lat[0]) + " to "
629  + double_to_string(d_lat[d_lat_length-1])
630  + "\nand longitude " + double_to_string(d_lon[0])
631  + " to " + double_to_string(d_lon[d_lon_length-1])
632  + " while the bounding box provided was latitude "
633  + double_to_string(top) + " to "
634  + double_to_string(bottom) + "\nand longitude "
635  + double_to_string(left) + " to "
636  + double_to_string(right));
637 
638  // This is simpler than the longitude case because there's no need to
639  // test for several notations, no need to accommodate them in the return,
640  // no modulo arithmetic for the axis and no need to account for a
641  // constraint with two disconnected parts to be joined.
642  find_latitude_indeces(top, bottom, d_latitude_sense,
643  d_latitude_index_top, d_latitude_index_bottom);
644 
645 
646  // Find the longitude map indexes that correspond to the bounding box.
647  find_longitude_indeces(left, right, d_longitude_index_left,
648  d_longitude_index_right);
649 
650  DBG(cerr << "Bounding box (tlbr): " << d_latitude_index_top << ", "
651  << d_longitude_index_left << ", "
652  << d_latitude_index_bottom << ", "
653  << d_longitude_index_right << endl);
654 
655  d_bounding_box_set = true;
656 }
657 
658 } // namespace libdap
virtual bool read()
Read data into a local buffer.
Definition: BaseType.cc:899
-
virtual void add_constraint(Dim_iter i, int start, int stride, int stop)
Adds a constraint to an Array dimension.
Definition: Array.cc:647
-
virtual LatitudeSense categorize_latitude() const
- -
virtual unsigned int width(bool constrained=false) const
Returns the width of the data, in bytes.
Definition: Vector.cc:536
-
virtual void set_read_p(bool state)
Indicates that the data is ready to send.
Definition: Vector.cc:391
-
STL namespace.
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
Dim_iter dim_end()
Definition: Array.cc:696
-
virtual BaseType * var(const string &name="", bool exact_match=true, btp_stack *s=0)
Definition: Vector.cc:433
-
virtual int dimension_size(Dim_iter i, bool constrained=false)
Returns the size of the dimension.
Definition: Array.cc:733
-
void find_longitude_indeces(double left, double right, int &longitude_index_left, int &longitude_index_right) const
-
Notation categorize_notation(const double left, const double right) const
-
std::vector< dimension >::iterator Dim_iter
Definition: Array.h:206
- -
virtual void transform_longitude_to_pos_notation()
-
void find_latitude_indeces(double top, double bottom, LatitudeSense sense, int &latitude_index_top, int &latitude_index_bottom) const
-
Dim_iter dim_begin()
Definition: Array.cc:690
-
void set_bounding_box(double top, double left, double bottom, double right)
-
A class for error processing.
Definition: Error.h:92
-
A multidimensional array of identical data types.
Definition: Array.h:112
-
virtual void print_val(ostream &out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: Array.cc:1271
-
virtual unsigned int width(bool constrained=false) const
How many bytes does this variable use Return the number of bytes of storage this variable uses...
Definition: BaseType.cc:1299
- -
-
- - - - diff --git a/html/GeoConstraint_8h_source.html b/html/GeoConstraint_8h_source.html deleted file mode 100644 index 71f829857..000000000 --- a/html/GeoConstraint_8h_source.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -libdap: GeoConstraint.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
GeoConstraint.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2006 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef _geo_constraint_h
27 #define _geo_constraint_h 1
28 
29 #include <string>
30 #include <sstream>
31 #include <set>
32 
33 namespace libdap {
34 class BaseType;
35 class Array;
36 class Grid;
37 }
38 
39 namespace functions
40 {
41 
98 {
99 public:
103  enum Notation {
104  unknown_notation,
105  pos,
106  neg_pos
107  };
108 
113  unknown_sense,
114  normal,
115  inverted
116  };
117 
118 private:
119  char *d_array_data; //< Holds the Grid's data values
120  int d_array_data_size; //< Total size (bytes) of the array data
121 
122  double *d_lat; //< Holds the latitude values
123  double *d_lon; //< Holds the longitude values
124  int d_lat_length; //< Elements (not bytes) in the latitude vector
125  int d_lon_length; //< ... longitude vector
126 
127  // These four are indexes of the constraint
128  int d_latitude_index_top;
129  int d_latitude_index_bottom;
130  int d_longitude_index_left;
131  int d_longitude_index_right;
132 
133  bool d_bounding_box_set; //< Has the bounding box been set?
134  bool d_longitude_rightmost; //< Is longitude the rightmost dimension?
135 
136  Notation d_longitude_notation;
137  LatitudeSense d_latitude_sense;
138 
139  libdap::Array::Dim_iter d_lon_dim; //< References the longitude dimension
140  libdap::Array::Dim_iter d_lat_dim; //< References the latitude dimension
141 
142  // Sets of string values used to find stuff in attributes
143  set<string> d_coards_lat_units;
144  set<string> d_coards_lon_units;
145 
146  set<string> d_lat_names;
147  set<string> d_lon_names;
148 
149  // Hide these three automatically provided methods
150  GeoConstraint(const GeoConstraint &param);
151  GeoConstraint &operator=(GeoConstraint &rhs);
152 
153 protected:
162  virtual bool build_lat_lon_maps() = 0;
163 
174  virtual bool lat_lon_dimensions_ok() = 0;
175 
176  Notation categorize_notation(const double left, const double right) const;
177  void transform_constraint_to_pos_notation(double &left, double &right) const;
178  virtual void transform_longitude_to_pos_notation();
179  virtual void transform_longitude_to_neg_pos_notation();
180  virtual bool is_bounding_box_valid(const double left, const double top,
181  const double right, const double bottom) const;
182  void find_longitude_indeces(double left, double right,
183  int &longitude_index_left,
184  int &longitude_index_right) const;
185 
186  virtual void transpose_vector(double *src, const int length);
187  virtual void reorder_longitude_map(int longitude_index_left);
188 
189  virtual LatitudeSense categorize_latitude() const;
190  void find_latitude_indeces(double top, double bottom, LatitudeSense sense,
191  int &latitude_index_top,
192  int &latitude_index_bottom) const;
193 
194  virtual void reorder_data_longitude_axis(libdap::Array &a,libdap:: Array::Dim_iter lon_dim);
195  virtual void flip_latitude_within_array(libdap::Array &a, int lat_length, int lon_length);
196 
197  friend class GridGeoConstraintTest; // Unit tests
198 
199 public:
202  GeoConstraint();
204 
205  virtual ~GeoConstraint()
206  {
207  delete [] d_lat; d_lat = 0;
208  delete [] d_lon; d_lon = 0;
209  delete [] d_array_data; d_array_data = 0;
210  }
211 
214  // These are set in reorder_data_longitude_axis()
215  char *get_array_data() const
216  {
217  return d_array_data;
218  }
219  int get_array_data_size() const
220  {
221  return d_array_data_size;
222  }
223 
224  double *get_lat() const
225  {
226  return d_lat;
227  }
228  double *get_lon() const
229  {
230  return d_lon;
231  }
232  void set_lat(double *lat)
233  {
234  d_lat = lat;
235  }
236  void set_lon(double *lon)
237  {
238  d_lon = lon;
239  }
240 
241  int get_lat_length() const
242  {
243  return d_lat_length;
244  }
245  int get_lon_length() const
246  {
247  return d_lon_length;
248  }
249  void set_lat_length(int len)
250  {
251  d_lat_length = len;
252  }
253  void set_lon_length(int len)
254  {
255  d_lon_length = len;
256  }
257 
258  libdap::Array::Dim_iter get_lon_dim() const
259  {
260  return d_lon_dim;
261  }
262  libdap::Array::Dim_iter get_lat_dim() const
263  {
264  return d_lat_dim;
265  }
266  void set_lon_dim(libdap::Array::Dim_iter lon)
267  {
268  d_lon_dim = lon;
269  }
270  void set_lat_dim(libdap::Array::Dim_iter lat)
271  {
272  d_lat_dim = lat;
273  }
274 
275  // These four are indexes of the constraint
276  int get_latitude_index_top() const
277  {
278  return d_latitude_index_top;
279  }
280  int get_latitude_index_bottom() const
281  {
282  return d_latitude_index_bottom;
283  }
284  void set_latitude_index_top(int top)
285  {
286  d_latitude_index_top = top;
287  }
288  void set_latitude_index_bottom(int bottom)
289  {
290  d_latitude_index_bottom = bottom;
291  }
292 
293  int get_longitude_index_left() const
294  {
295  return d_longitude_index_left;
296  }
297  int get_longitude_index_right() const
298  {
299  return d_longitude_index_right;
300  }
301  void set_longitude_index_left(int left)
302  {
303  d_longitude_index_left = left;
304  }
305  void set_longitude_index_right(int right)
306  {
307  d_longitude_index_right = right;
308  }
309 
310  bool is_bounding_box_set() const
311  {
312  return d_bounding_box_set;
313  }
314  bool is_longitude_rightmost() const
315  {
316  return d_longitude_rightmost;
317  }
318  void set_longitude_rightmost(bool state)
319  {
320  d_longitude_rightmost = state;
321  }
322 
323  Notation get_longitude_notation() const
324  {
325  return d_longitude_notation;
326  }
327  LatitudeSense get_latitude_sense() const
328  {
329  return d_latitude_sense;
330  }
331  void set_longitude_notation(Notation n)
332  {
333  d_longitude_notation = n;
334  }
335  void set_latitude_sense(LatitudeSense l)
336  {
337  d_latitude_sense = l;
338  }
339 
340  set<string> get_coards_lat_units() const
341  {
342  return d_coards_lat_units;
343  }
344  set<string> get_coards_lon_units() const
345  {
346  return d_coards_lon_units;
347  }
348 
349  set<string> get_lat_names() const
350  {
351  return d_lat_names;
352  }
353  set<string> get_lon_names() const
354  {
355  return d_lon_names;
356  }
358 
359  void set_bounding_box(double top, double left, double bottom, double right);
360 
363  virtual void apply_constraint_to_data() = 0;
364 };
365 
366 } // namespace libdap
367 
368 #endif // _geo_constraint_h
369 
- -
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
std::vector< dimension >::iterator Dim_iter
Definition: Array.h:206
- -
A multidimensional array of identical data types.
Definition: Array.h:112
- -
-
- - - - diff --git a/html/GeoGridFunction_8cc_source.html b/html/GeoGridFunction_8cc_source.html deleted file mode 100644 index bc332fe82..000000000 --- a/html/GeoGridFunction_8cc_source.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - -libdap: GeoGridFunction.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
GeoGridFunction.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2003,2013 OPeNDAP, Inc.
8 // Authors: Nathan Potter <npotter@opendap.org>
9 // James Gallagher <jgallagher@opendap.org>
10 //
11 // This library is free software; you can redistribute it and/or
12 // modify it under the terms of the GNU Lesser General Public
13 // License as published by the Free Software Foundation; either
14 // version 2.1 of the License, or (at your option) any later version.
15 //
16 // This library is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 // Lesser General Public License for more details.
20 //
21 // You should have received a copy of the GNU Lesser General Public
22 // License along with this library; if not, write to the Free Software
23 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 //
25 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
26 
27 #include "config.h"
28 
29 #include <BaseType.h>
30 #include <Str.h>
31 #include <Array.h>
32 #include <Grid.h>
33 #include <Error.h>
34 #include <DDS.h>
35 #include <debug.h>
36 #include <util.h>
37 
38 #include "GeoGridFunction.h"
39 #include "GridGeoConstraint.h"
40 #include "gse_parser.h"
41 #include "grid_utils.h"
42 
43 using namespace libdap;
44 
45 namespace functions {
46 
81 void
82 function_geogrid(int argc, BaseType *argv[], DDS &, BaseType **btpp)
83 {
84  string info =
85  string("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n") +
86  "<function name=\"geogrid\" version=\"1.2\" href=\"http://docs.opendap.org/index.php/Server_Side_Processing_Functions#geogrid\">\n"+
87  "</function>";
88 
89  if (argc == 0) {
90  Str *response = new Str("version");
91  response->set_value(info);
92  *btpp = response;
93  return ;
94  }
95 
96  // There are two main forms of this function, one that takes a Grid and one
97  // that takes a Grid and two Arrays. The latter provides a way to explicitly
98  // tell the function which maps contain lat and lon data. The remaining
99  // arguments are the same for both versions, although that includes a
100  // varying argument list.
101 
102  // Look at the types of the first three arguments to determine which of the
103  // two forms were used to call this function.
104  Grid *l_grid = 0;
105  if (argc < 1 || !(l_grid = dynamic_cast < Grid * >(argv[0]->ptr_duplicate())))
106  throw Error(malformed_expr,"The first argument to geogrid() must be a Grid variable!");
107 
108  // Both forms require at least this many args
109  if (argc < 5)
110  throw Error(malformed_expr,"Wrong number of arguments to geogrid() (expected at least 5 args). See geogrid() for more information.");
111 
112  bool grid_lat_lon_form;
113  Array *l_lat = 0;
114  Array *l_lon = 0;
115  if (!(l_lat = dynamic_cast < Array * >(argv[1]))) //->ptr_duplicate())))
116  grid_lat_lon_form = false;
117  else if (!(l_lon = dynamic_cast < Array * >(argv[2]))) //->ptr_duplicate())))
118  throw Error(malformed_expr,"When using the Grid, Lat, Lon form of geogrid() both the lat and lon maps must be given (lon map missing)!");
119  else
120  grid_lat_lon_form = true;
121 
122  if (grid_lat_lon_form && argc < 7)
123  throw Error(malformed_expr,"Wrong number of arguments to geogrid() (expected at least 7 args). See geogrid() for more information.");
124 
125 #if 0
126  Grid *l_grid = dynamic_cast < Grid * >(argv[0]->ptr_duplicate());
127  if (!l_grid)
128  throw Error(malformed_expr,"The first argument to geogrid() must be a Grid variable!");
129 #endif
130  // Read the maps. Do this before calling parse_gse_expression(). Avoid
131  // reading the array until the constraints have been applied because it
132  // might be really large.
133  //
134  // Trick: Some handlers build Grids from a combination of Array
135  // variables and attributes. Those handlers (e.g., hdf4) use the send_p
136  // property to determine which parts of the Grid to read *but they can
137  // only read the maps from within Grid::read(), not the map's read()*.
138  // Since the Grid's array does not have send_p set, it will not be read
139  // by the call below to Grid::read().
140  Grid::Map_iter i = l_grid->map_begin();
141  while (i != l_grid->map_end())
142  (*i++)->set_send_p(true);
143 
144  l_grid->read();
145  // Calling read() above sets the read_p flag for the entire grid; clear it
146  // for the grid's array so that later on the code will be sure to read it
147  // under all circumstances.
148  l_grid->get_array()->set_read_p(false);
149 
150  // Look for Grid Selection Expressions tacked onto the end of the BB
151  // specification. If there are any, evaluate them before evaluating the BB.
152  int min_arg_count = (grid_lat_lon_form) ? 7 : 5;
153  if (argc > min_arg_count) {
154  // argv[5..n] holds strings; each are little Grid Selection Expressions
155  // to be parsed and evaluated.
156  vector < GSEClause * > clauses;
157  gse_arg *arg = new gse_arg(l_grid);
158  for (int i = min_arg_count; i < argc; ++i) {
159  parse_gse_expression(arg, argv[i]);
160  clauses.push_back(arg->get_gsec());
161  }
162  delete arg;
163  arg = 0;
164 
165  apply_grid_selection_expressions(l_grid, clauses);
166  }
167 
168  try {
169  // Build a GeoConstraint object. If there are no longitude/latitude
170  // maps then this constructor throws Error.
171  GridGeoConstraint gc(l_grid);
172 
173  // This sets the bounding box and modifies the maps to match the
174  // notation of the box (0/359 or -180/179)
175  int box_index_offset = (grid_lat_lon_form) ? 3 : 1;
176  double top = extract_double_value(argv[box_index_offset]);
177  double left = extract_double_value(argv[box_index_offset + 1]);
178  double bottom = extract_double_value(argv[box_index_offset + 2]);
179  double right = extract_double_value(argv[box_index_offset + 3]);
180  gc.set_bounding_box(top, left, bottom, right);
181  DBG(cerr << "geogrid: past bounding box set" << endl);
182 
183  // This also reads all of the data into the grid variable
184  gc.apply_constraint_to_data();
185  DBG(cerr << "geogrid: past apply constraint" << endl);
186 
187  // In this function the l_grid pointer is the same as the pointer returned
188  // by this call. The caller of the function must free the pointer.
189  *btpp = gc.get_constrained_grid();
190  return;
191  }
192  catch (Error &e) {
193  throw e;
194  }
195  catch (exception & e) {
196  throw
197  InternalErr(string
198  ("A C++ exception was thrown from inside geogrid(): ")
199  + e.what());
200  }
201 }
202 
203 
210 bool GeoGridFunction::canOperateOn(DDS &dds)
211 {
212  bool usable = false;
213 
214  // Go find all the Grid variables.
215  //vector<Grid *> *grids = new vector<Grid *>();
216  vector<Grid*> grids;
217  get_grids(dds, &grids);
218 
219  // Were there any?
220  if(!grids.empty()){
221  // Apparently so...
222 
223  // See if any one of them looks like suitable GeoGrid
224  vector<Grid *>::iterator git;
225  for(git=grids.begin(); !usable && git!=grids.end() ; git++){
226  Grid *grid = *git;
227  usable = is_geo_grid(grid);
228  }
229  }
230  //delete grids;
231 
232  return usable;
233 }
234 
235 } // namesspace libdap
-
virtual void set_read_p(bool state)
Indicates that the data is ready to send.
Definition: Vector.cc:391
-
Map_iter map_end()
Definition: Grid.cc:537
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
Holds character string data.
Definition: Str.h:62
-
Map_iter map_begin()
Returns an iterator referencing the first Map vector.
Definition: Grid.cc:525
- -
virtual bool read()
simple implementation of read that iterates through vars and calls read on them
Definition: Constructor.cc:476
-
Holds the Grid data type.
Definition: Grid.h:122
-
virtual bool set_value(const string &value)
Definition: Str.cc:253
-
Array * get_array()
Returns the Grid Array. This method returns the array using an Array*, so no cast is required...
Definition: Grid.cc:518
-
double extract_double_value(BaseType *arg)
Definition: util.cc:402
-
virtual BaseType * ptr_duplicate()=0
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
A class for error processing.
Definition: Error.h:92
-
A multidimensional array of identical data types.
Definition: Array.h:112
-
-
- - - - diff --git a/html/GeoGridFunction_8h_source.html b/html/GeoGridFunction_8h_source.html deleted file mode 100644 index f1c3a809b..000000000 --- a/html/GeoGridFunction_8h_source.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -libdap: GeoGridFunction.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
GeoGridFunction.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2013 OPeNDAP, Inc.
8 // Author: Nathan Potter <npotter@opendap.org>
9 // James Gallagher <jgallagher@opendap.org>
10 //
11 // This library is free software; you can redistribute it and/or
12 // modify it under the terms of the GNU Lesser General Public
13 // License as published by the Free Software Foundation; either
14 // version 2.1 of the License, or (at your option) any later version.
15 //
16 // This library is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 // Lesser General Public License for more details.
20 //
21 // You should have received a copy of the GNU Lesser General Public
22 // License along with this library; if not, write to the Free Software
23 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 //
25 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
26 
27 #include <ServerFunction.h>
28 
29 namespace libdap {
30 class BaseType;
31 class DDS;
32 }
33 
34 namespace functions {
35 
36 void function_geogrid(int argc, libdap::BaseType *argv[], libdap::DDS &dds, libdap::BaseType **btpp) ;
37 
39 public:
41  {
42  setName("geogrid");
43  setDescriptionString("Subsets a grid by the values of it's geo-located map variables.");
44  setUsageString("geogrid(...)");
45  setRole("http://services.opendap.org/dap4/server-side-function/geogrid");
46  setDocUrl("http://docs.opendap.org/index.php/Server_Side_Processing_Functions#geogrid");
47  setFunction(function_geogrid);
48  setVersion("1.2");
49  }
50  virtual ~GeoGridFunction()
51  {
52  }
53 
54  bool canOperateOn(libdap::DDS &dds);
55 };
56 
57 } // functions namespace
- - -
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- -
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
-
- - - - diff --git a/html/GetOpt_8cc_source.html b/html/GetOpt_8cc_source.html deleted file mode 100644 index e1c22829f..000000000 --- a/html/GetOpt_8cc_source.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -libdap: GetOpt.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
GetOpt.cc
-
-
-
1 /*
2 Getopt for GNU.
3 Copyright (C) 1987, 1989 Free Software Foundation, Inc.
4 
5 (Modified by Douglas C. Schmidt for use with GNU G++.)
6 This file is part of the GNU C++ Library. This library is free
7 software; you can redistribute it and/or modify it under the terms of
8 the GNU Library General Public License as published by the Free
9 Software Foundation; either version 2 of the License, or (at your
10 option) any later version. This library is distributed in the hope
11 that it will be useful, but WITHOUT ANY WARRANTY; without even the
12 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
13 PURPOSE. See the GNU Library General Public License for more details.
14 You should have received a copy of the GNU Library General Public
15 License along with this library; if not, write to the Free Software
16 Foundation, 59 Temple Place - Fifth Floor, Boston, MA 02110-1301, USA.
17 */
18 
19 #include "config.h"
20 
21 /* AIX requires the alloca decl to be the first thing in the file. */
22 #ifdef __GNUC__
23 #define alloca __builtin_alloca
24 #elif defined(sparc)
25 #include <alloca.h>
26 #elif defined(_AIX)
27 #pragma alloca
28 #elif defined(WIN32)
29 #include <malloc.h>
30 #else
31 char *alloca ();
32 #endif
33 
34 #include <vector>
35 
36 #ifdef HAVE_UNISTD_H
37 #include <unistd.h>
38 #endif
39 #include <cstdio>
40 #include <cstring> // Added these. 10/20/98 jhrg
41 #include <cstdlib>
42 
43 #include "GetOpt.h"
44 
45 //#include <string.h>
46 
47 char* GetOpt::nextchar = 0;
48 int GetOpt::first_nonopt = 0;
49 int GetOpt::last_nonopt = 0;
50 
51 GetOpt::GetOpt (int argc, char **argv, const char *optstring)
52  :opterr (1), nargc (argc), nargv (argv), noptstring (optstring)
53 {
54  /* Initialize the internal data when the first call is made.
55  Start processing options with ARGV-element 1 (since ARGV-element 0
56  is the program name); the sequence of previously skipped
57  non-option ARGV-elements is empty. */
58 
59  first_nonopt = last_nonopt = optind = 1;
60  optarg = nextchar = 0;
61 
62  /* Determine how to handle the ordering of options and nonoptions. */
63 
64  if (optstring[0] == '-')
65  ordering = RETURN_IN_ORDER;
66  else if (getenv ("_POSIX_OPTION_ORDER") != 0)
67  ordering = REQUIRE_ORDER;
68  else
69  ordering = PERMUTE;
70 }
71 
72 void
73 GetOpt::exchange (char **argv)
74 {
75  int nonopts_size = (last_nonopt - first_nonopt) * sizeof(char *);
76  /* char **temp = (char **) alloca (nonopts_size); */
77  /* char **temp = (char **)malloc(nonopts_size); */
78  std::vector<char> temp(nonopts_size);
79 
80  /* Interchange the two blocks of data in argv. */
81 
82  memcpy (&temp[0], &argv[first_nonopt], nonopts_size);
83 
84  /* valgrind complains about this because in some cases the memory areas
85  overlap. I switched to memmove. See the memcpy & memmove man pages.
86  02/12/04 jhrg */
87 #if 0
88  memcpy (&argv[first_nonopt], &argv[last_nonopt],
89  (optind - last_nonopt) * sizeof (char *));
90 #endif
91  memmove (&argv[first_nonopt], &argv[last_nonopt],
92  (optind - last_nonopt) * sizeof (char *));
93 
94  memcpy (&argv[first_nonopt + optind - last_nonopt], &temp[0],
95  nonopts_size);
96 
97  /* Update records for the slots the non-options now occupy. */
98 
99  first_nonopt += (optind - last_nonopt);
100  last_nonopt = optind;
101 
102  //free(temp);
103 }
104 
105 /* Scan elements of ARGV (whose length is ARGC) for option characters
106  given in OPTSTRING.
107 
108  If an element of ARGV starts with '-', and is not exactly "-" or "--",
109  then it is an option element. The characters of this element
110  (aside from the initial '-') are option characters. If `getopt'
111  is called repeatedly, it returns successively each of theoption characters
112  from each of the option elements.
113 
114  If `getopt' finds another option character, it returns that character,
115  updating `optind' and `nextchar' so that the next call to `getopt' can
116  resume the scan with the following option character or ARGV-element.
117 
118  If there are no more option characters, `getopt' returns `EOF'.
119  Then `optind' is the index in ARGV of the first ARGV-element
120  that is not an option. (The ARGV-elements have been permuted
121  so that those that are not options now come last.)
122 
123  OPTSTRING is a string containing the legitimate option characters.
124  A colon in OPTSTRING means that the previous character is an option
125  that wants an argument. The argument is taken from the rest of the
126  current ARGV-element, or from the following ARGV-element,
127  and returned in `optarg'.
128 
129  If an option character is seen that is not listed in OPTSTRING,
130  return '?' after printing an error message. If you set `opterr' to
131  zero, the error message is suppressed but we still return '?'.
132 
133  If a char in OPTSTRING is followed by a colon, that means it wants an arg,
134  so the following text in the same ARGV-element, or the text of the following
135  ARGV-element, is returned in `optarg. Two colons mean an option that
136  wants an optional arg; if there is text in the current ARGV-element,
137  it is returned in `optarg'.
138 
139  If OPTSTRING starts with `-', it requests a different method of handling the
140  non-option ARGV-elements. See the comments about RETURN_IN_ORDER, above. */
141 
142 int
143 GetOpt::operator () (void)
144 {
145  if (nextchar == 0 || *nextchar == 0)
146  {
147  if (ordering == PERMUTE)
148  {
149  /* If we have just processed some options following some non-options,
150  exchange them so that the options come first. */
151 
152  if (first_nonopt != last_nonopt && last_nonopt != optind)
153  exchange (nargv);
154  else if (last_nonopt != optind)
155  first_nonopt = optind;
156 
157  /* Now skip any additional non-options
158  and extend the range of non-options previously skipped. */
159 
160  while (optind < nargc
161  && (nargv[optind][0] != '-'
162  || nargv[optind][1] == 0))
163  optind++;
164  last_nonopt = optind;
165  }
166 
167  /* Special ARGV-element `--' means premature end of options.
168  Skip it like a null option,
169  then exchange with previous non-options as if it were an option,
170  then skip everything else like a non-option. */
171 
172  if (optind != nargc && !strcmp (nargv[optind], "--"))
173  {
174  optind++;
175 
176  if (first_nonopt != last_nonopt && last_nonopt != optind)
177  exchange (nargv);
178  else if (first_nonopt == last_nonopt)
179  first_nonopt = optind;
180  last_nonopt = nargc;
181 
182  optind = nargc;
183  }
184 
185  /* If we have done all the ARGV-elements, stop the scan
186  and back over any non-options that we skipped and permuted. */
187 
188  if (optind == nargc)
189  {
190  /* Set the next-arg-index to point at the non-options
191  that we previously skipped, so the caller will digest them. */
192  if (first_nonopt != last_nonopt)
193  optind = first_nonopt;
194  return EOF;
195  }
196 
197  /* If we have come to a non-option and did not permute it,
198  either stop the scan or describe it to the caller and pass it by. */
199 
200  if (nargv[optind][0] != '-' || nargv[optind][1] == 0)
201  {
202  if (ordering == REQUIRE_ORDER)
203  return EOF;
204  optarg = nargv[optind++];
205  return 0;
206  }
207 
208  /* We have found another option-ARGV-element.
209  Start decoding its characters. */
210 
211  nextchar = nargv[optind] + 1;
212  }
213 
214  /* Look at and handle the next option-character. */
215 
216  {
217  char c = *nextchar++;
218  char *temp = (char *) strchr (noptstring, c);
219 
220  /* Increment `optind' when we start to process its last character. */
221  if (*nextchar == 0)
222  optind++;
223 
224  if (temp == 0 || c == ':')
225  {
226  if (opterr != 0)
227  {
228  if (c < 040 || c >= 0177)
229  fprintf (stderr, "%s: unrecognized option, character code 0%o\n",
230  nargv[0], c);
231  else
232  fprintf (stderr, "%s: unrecognized option `-%c'\n",
233  nargv[0], c);
234  }
235  return '?';
236  }
237  if (temp[1] == ':')
238  {
239  if (temp[2] == ':')
240  {
241  /* This is an option that accepts an argument optionally. */
242  if (*nextchar != 0)
243  {
244  optarg = nextchar;
245  optind++;
246  }
247  else
248  optarg = 0;
249  nextchar = 0;
250  }
251  else
252  {
253  /* This is an option that requires an argument. */
254  if (*nextchar != 0)
255  {
256  optarg = nextchar;
257  /* If we end this ARGV-element by taking the rest as an arg,
258  we must advance to the next element now. */
259  optind++;
260  }
261  else if (optind == nargc)
262  {
263  if (opterr != 0)
264  fprintf (stderr, "%s: no argument for `-%c' option\n",
265  nargv[0], c);
266  c = '?';
267  }
268  else
269  /* We already incremented `optind' once;
270  increment it again when taking next ARGV-elt as argument. */
271  optarg = nargv[optind++];
272  nextchar = 0;
273  }
274  }
275  return c;
276  }
277 }
-
- - - - diff --git a/html/GetOpt_8h_source.html b/html/GetOpt_8h_source.html deleted file mode 100644 index f68160acb..000000000 --- a/html/GetOpt_8h_source.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - -libdap: GetOpt.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
GetOpt.h
-
-
-
1 /* Getopt for GNU.
2  Copyright (C) 1987, 1989, 1992 Free Software Foundation, Inc.
3  (Modified by Douglas C. Schmidt for use with GNU G++.)
4 
5 This file is part of the GNU C++ Library. This library is free
6 software; you can redistribute it and/or modify it under the terms of
7 the GNU Library General Public License as published by the Free
8 Software Foundation; either version 2 of the License, or (at your
9 option) any later version. This library is distributed in the hope
10 that it will be useful, but WITHOUT ANY WARRANTY; without even the
11 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12 PURPOSE. See the GNU Library General Public License for more details.
13 You should have received a copy of the GNU Library General Public
14 License along with this library; if not, write to the Free Software
15 Foundation 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA.
16 */
17 
18 
19 /* This version of `getopt' appears to the caller like standard Unix `getopt'
20  but it behaves differently for the user, since it allows the user
21  to intersperse the options with the other arguments.
22 
23  As `getopt' works, it permutes the elements of `argv' so that,
24  when it is done, all the options precede everything else. Thus
25  all application programs are extended to handle flexible argument order.
26 
27  Setting the environment variable _POSIX_OPTION_ORDER disables permutation.
28  Then the behavior is completely standard.
29 
30  GNU application programs can use a third alternative mode in which
31  they can distinguish the relative order of options and other arguments. */
32 
33 #ifndef GetOpt_h
34 #define GetOpt_h 1
35 
36 // #include <stdio.h>
37 
38 class GetOpt
39 {
40 private:
41  /* The next char to be scanned in the option-element
42  in which the last option character we returned was found.
43  This allows us to pick up the scan where we left off.
44 
45  If this is zero, or a null string, it means resume the scan
46  by advancing to the next ARGV-element. */
47 
48  static char *nextchar;
49 
50 
51  /* Describe how to deal with options that follow non-option ARGV-elements.
52 
53  UNSPECIFIED means the caller did not specify anything;
54  the default is then REQUIRE_ORDER if the environment variable
55  _OPTIONS_FIRST is defined, PERMUTE otherwise.
56 
57  REQUIRE_ORDER means don't recognize them as options.
58  Stop option processing when the first non-option is seen.
59  This is what Unix does.
60 
61  PERMUTE is the default. We permute the contents of `argv' as we scan,
62  so that eventually all the options are at the end. This allows options
63  to be given in any order, even with programs that were not written to
64  expect this.
65 
66  RETURN_IN_ORDER is an option available to programs that were written
67  to expect options and other ARGV-elements in any order and that care about
68  the ordering of the two. We describe each non-option ARGV-element
69  as if it were the argument of an option with character code zero.
70  Using `-' as the first character of the list of option characters
71  requests this mode of operation.
72 
73  The special argument `--' forces an end of option-scanning regardless
74  of the value of `ordering'. In the case of RETURN_IN_ORDER, only
75  `--' can cause `getopt' to return EOF with `optind' != ARGC. */
76 
77  enum OrderingEnum { REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER };
78  OrderingEnum ordering;
79 
80  /* Handle permutation of arguments. */
81 
82  /* Describe the part of ARGV that contains non-options that have
83  been skipped. `first_nonopt' is the index in ARGV of the first of them;
84  `last_nonopt' is the index after the last of them. */
85 
86  static int first_nonopt;
87  static int last_nonopt;
88 
89  void exchange (char **argv);
90 public:
91  /* For communication from `getopt' to the caller.
92  When `getopt' finds an option that takes an argument,
93  the argument value is returned here.
94  Also, when `ordering' is RETURN_IN_ORDER,
95  each non-option ARGV-element is returned here. */
96 
97  char *optarg;
98 
99  /* Index in ARGV of the next element to be scanned.
100  This is used for communication to and from the caller
101  and for communication between successive calls to `getopt'.
102  On entry to `getopt', zero means this is the first call; initialize.
103 
104  When `getopt' returns EOF, this is the index of the first of the
105  non-option elements that the caller should itself scan.
106 
107  Otherwise, `optind' communicates from one call to the next
108  how much of ARGV has been scanned so far. */
109 
110  int optind;
111 
112  /* Callers store zero here to inhibit the error message
113  for unrecognized options. */
114 
115  int opterr;
116 
117  int nargc;
118  char **nargv;
119  const char *noptstring;
120 
121  GetOpt (int argc, char **argv, const char *optstring);
122  int operator () (void);
123 };
124 
125 #endif
Definition: GetOpt.h:38
-
-
- - - - diff --git a/html/GridFunction_8cc_source.html b/html/GridFunction_8cc_source.html deleted file mode 100644 index 276b8481f..000000000 --- a/html/GridFunction_8cc_source.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - -libdap: GridFunction.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
GridFunction.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003,2013 OPeNDAP, Inc.
8 // Authors: Nathan Potter <npotter@opendap.org>
9 // James Gallagher <jgallagher@opendap.org>
10 //
11 // This library is free software; you can redistribute it and/or
12 // modify it under the terms of the GNU Lesser General Public
13 // License as published by the Free Software Foundation; either
14 // version 2.1 of the License, or (at your option) any later version.
15 //
16 // This library is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 // Lesser General Public License for more details.
20 //
21 // You should have received a copy of the GNU Lesser General Public
22 // License along with this library; if not, write to the Free Software
23 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 //
25 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
26 
27 #include "config.h"
28 
29 #include <BaseType.h>
30 #include <Str.h>
31 #include <Array.h>
32 #include <Grid.h>
33 #include <Error.h>
34 #include <DDS.h>
35 #include <debug.h>
36 #include <util.h>
37 
38 #include <BESDebug.h>
39 
40 #include "GridFunction.h"
41 #include "gse_parser.h"
42 #include "grid_utils.h"
43 
44 using namespace libdap;
45 
46 namespace functions {
47 
77 void
78 function_grid(int argc, BaseType *argv[], DDS &, BaseType **btpp)
79 {
80  DBG(cerr << "Entering function_grid..." << endl);
81 
82  string info =
83  string("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n") +
84  "<function name=\"grid\" version=\"1.0\" href=\"http://docs.opendap.org/index.php/Server_Side_Processing_Functions#grid\">\n" +
85  "</function>\n";
86 
87  if (argc == 0) {
88  Str *response = new Str("info");
89  response->set_value(info);
90  *btpp = response;
91  return;
92  }
93 
94  Grid *original_grid = dynamic_cast < Grid * >(argv[0]);
95  if (!original_grid)
96  throw Error(malformed_expr,"The first argument to grid() must be a Grid variable!");
97 
98  // Duplicate the grid; ResponseBuilder::send_data() will delete the variable
99  // after serializing it.
100  BaseType *btp = original_grid->ptr_duplicate();
101  Grid *l_grid = dynamic_cast < Grid * >(btp);
102  if (!l_grid) {
103  delete btp;
104  throw InternalErr(__FILE__, __LINE__, "Expected a Grid.");
105  }
106 
107  DBG(cerr << "grid: past initialization code" << endl);
108 
109  // Read the maps. Do this before calling parse_gse_expression(). Avoid
110  // reading the array until the constraints have been applied because it
111  // might be large.
112 
113  BESDEBUG("functions", "original_grid: read_p: " << original_grid->read_p() << endl);
114  BESDEBUG("functions", "l_grid: read_p: " << l_grid->read_p() << endl);
115 
116  BESDEBUG("functions", "original_grid->array_(): read_p: " << original_grid->array_var()->read_p() << endl);
117  BESDEBUG("functions", "l_grid->array+var(): read_p: " << l_grid->array_var()->read_p() << endl);
118 
119  // This version makes sure to set the send_p flags which is needed for
120  // the hdf4 handler (and is what should be done in general).
121  Grid::Map_iter i = l_grid->map_begin();
122  while (i != l_grid->map_end())
123  (*i++)->set_send_p(true);
124 
125  l_grid->read();
126 
127  DBG(cerr << "grid: past map read" << endl);
128 
129  // argv[1..n] holds strings; each are little expressions to be parsed.
130  // When each expression is parsed, the parser makes a new instance of
131  // GSEClause. GSEClause checks to make sure the named map really exists
132  // in the Grid and that the range of values given makes sense.
133  vector < GSEClause * > clauses;
134  gse_arg *arg = new gse_arg(l_grid); // unique_ptr here
135  for (int i = 1; i < argc; ++i) {
136  parse_gse_expression(arg, argv[i]);
137  clauses.push_back(arg->get_gsec());
138  }
139  delete arg;
140  arg = 0;
141 
142  apply_grid_selection_expressions(l_grid, clauses);
143 
144  DBG(cerr << "grid: past gse application" << endl);
145 
146  l_grid->get_array()->set_send_p(true);
147 
148  l_grid->read();
149 
150  // Make a new grid here and copy just the parts of the Grid
151  // that are in the current projection - this means reading
152  // the array slicing information, extracting the correct
153  // values and building destination arrays with just those
154  // values.
155 
156  *btpp = l_grid;
157  return;
158 }
159 
165 bool GridFunction::canOperateOn(DDS &dds)
166 {
167  vector<Grid *> grids;
168  get_grids(dds, &grids);
169 
170  return !grids.empty();
171 }
172 
173 } // namesspace functions
virtual bool read_p()
Has this variable been read?
Definition: BaseType.cc:480
- -
Map_iter map_end()
Definition: Grid.cc:537
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
Holds character string data.
Definition: Str.h:62
-
Map_iter map_begin()
Returns an iterator referencing the first Map vector.
Definition: Grid.cc:525
-
virtual BaseType * ptr_duplicate()
Definition: Grid.cc:116
- -
virtual bool read()
simple implementation of read that iterates through vars and calls read on them
Definition: Constructor.cc:476
-
Holds the Grid data type.
Definition: Grid.h:122
-
virtual bool set_value(const string &value)
Definition: Str.cc:253
-
Array * get_array()
Returns the Grid Array. This method returns the array using an Array*, so no cast is required...
Definition: Grid.cc:518
-
virtual void set_send_p(bool state)
Indicates that the data is ready to send.
Definition: Vector.cc:354
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
BaseType * array_var()
Returns the Grid Array.
Definition: Grid.cc:501
-
A class for error processing.
Definition: Error.h:92
-
-
- - - - diff --git a/html/GridFunction_8h_source.html b/html/GridFunction_8h_source.html deleted file mode 100644 index bcaa7d9d6..000000000 --- a/html/GridFunction_8h_source.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -libdap: GridFunction.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
GridFunction.h
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2013 OPeNDAP, Inc.
7 // Author: Nathan Potter <npotter@opendap.org>
8 // James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #include <ServerFunction.h>
27 
28 namespace libdap {
29 class BaseType;
30 class DDS;
31 }
32 
33 namespace functions {
34 
35 void function_grid(int argc, libdap::BaseType *argv[], libdap::DDS &dds, libdap::BaseType **btpp);
36 
38 {
39 public:
40  GridFunction()
41  {
42  setName("grid");
43  setDescriptionString("Subsets a grid by the values of it's geo-located map variables.");
44  setUsageString("grid(...)");
45  setRole("http://services.opendap.org/dap4/server-side-function/grid");
46  setDocUrl("http://docs.opendap.org/index.php/Server_Side_Processing_Functions#grid");
47  setFunction(function_grid);
48  setVersion("1.0");
49  }
50  virtual ~GridFunction()
51  {
52  }
53 
54  bool canOperateOn(libdap::DDS &dds);
55 };
56 
57 } // functions namespace
- -
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- -
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
- -
-
- - - - diff --git a/html/GridGeoConstraint_8cc_source.html b/html/GridGeoConstraint_8cc_source.html deleted file mode 100644 index 8eb64b5bb..000000000 --- a/html/GridGeoConstraint_8cc_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - -libdap: GridGeoConstraint.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
GridGeoConstraint.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // The Grid Selection Expression Clause class.
27 
28 
29 #include "config.h"
30 
31 #include <cmath>
32 
33 #include <iostream>
34 #include <sstream>
35 
36 //#define DODS_DEBUG
37 
38 #include <Float64.h>
39 #include <Grid.h>
40 #include <dods-datatypes.h>
41 #include <Error.h>
42 #include <InternalErr.h>
43 #include <util.h>
44 #include <debug.h>
45 
46 #include "GridGeoConstraint.h"
47 
48 using namespace std;
49 using namespace libdap;
50 
51 namespace functions {
52 
59 GridGeoConstraint::GridGeoConstraint(Grid *grid)
60  : GeoConstraint(), d_grid(grid), d_latitude(0), d_longitude(0)
61 {
62  if (d_grid->get_array()->dimensions() < 2
63  || d_grid->get_array()->dimensions() > 3)
64  throw Error("The geogrid() function works only with Grids of two or three dimensions.");
65 
66  // Is this Grid a geo-referenced grid? Throw Error if not.
67  if (!build_lat_lon_maps())
68  throw Error(string("The grid '") + d_grid->name()
69  + "' does not have identifiable latitude/longitude map vectors.");
70 
71  if (!lat_lon_dimensions_ok())
72  throw Error("The geogrid() function will only work when the Grid's Longitude and Latitude maps are the rightmost dimensions (grid: " + grid->name() + ", 1).");
73 }
74 
76  : GeoConstraint(), d_grid(grid), d_latitude(0), d_longitude(0)
77 {
78  if (d_grid->get_array()->dimensions() < 2
79  || d_grid->get_array()->dimensions() > 3)
80  throw Error("The geogrid() function works only with Grids of two or three dimensions.");
81 
82  // Is this Grid a geo-referenced grid? Throw Error if not.
83  if (!build_lat_lon_maps(lat, lon))
84  throw Error(string("The grid '") + d_grid->name()
85  + "' does not have valid latitude/longitude map vectors.");
86 
87 
88  if (!lat_lon_dimensions_ok())
89  throw Error("The geogrid() function will only work when the Grid's Longitude and Latitude maps are the rightmost dimensions (grid: " + grid->name() + ", 2).");
90 }
91 
107 bool GridGeoConstraint::build_lat_lon_maps()
108 {
109  Grid::Map_iter m = d_grid->map_begin();
110 
111  // Assume that a Grid is correct and thus has exactly as many maps as its
112  // array part has dimensions. Thus don't bother to test the Grid's array
113  // dimension iterator for '!= dim_end()'.
114  Array::Dim_iter d = d_grid->get_array()->dim_begin();
115 
116  // The fields d_latitude and d_longitude may be initialized to null or they
117  // may already contain pointers to the maps to use. In the latter case,
118  // skip the heuristics used in this code. However, given that all this
119  // method does is find the lat/lon maps, if they are given in the ctor,
120  // This method will likely not be called at all.
121  while (m != d_grid->map_end() && (!d_latitude || !d_longitude)) {
122  string units_value = (*m)->get_attr_table().get_attr("units");
123  units_value = remove_quotes(units_value);
124  string map_name = (*m)->name();
125 
126  // The 'units' attribute must match exactly; the name only needs to
127  // match a prefix.
128  if (!d_latitude
129  && unit_or_name_match(get_coards_lat_units(), get_lat_names(),
130  units_value, map_name)) {
131 
132  // Set both d_latitude (a pointer to the real map vector) and
133  // d_lat, a vector of the values represented as doubles. It's easier
134  // to work with d_lat, but it's d_latitude that needs to be set
135  // when constraining the grid. Also, record the grid variable's
136  // dimension iterator so that it's easier to set the Grid's Array
137  // (which also has to be constrained).
138  d_latitude = dynamic_cast < Array * >(*m);
139  if (!d_latitude)
140  throw InternalErr(__FILE__, __LINE__, "Expected an array.");
141  if (!d_latitude->read_p())
142  d_latitude->read();
143 
144  set_lat(extract_double_array(d_latitude)); // throws Error
145  set_lat_length(d_latitude->length());
146 
147  set_lat_dim(d);
148  }
149 
150  if (!d_longitude // && !units_value.empty()
151  && unit_or_name_match(get_coards_lon_units(), get_lon_names(),
152  units_value, map_name)) {
153 
154  d_longitude = dynamic_cast < Array * >(*m);
155  if (!d_longitude)
156  throw InternalErr(__FILE__, __LINE__, "Expected an array.");
157  if (!d_longitude->read_p())
158  d_longitude->read();
159 
160  set_lon(extract_double_array(d_longitude));
161  set_lon_length(d_longitude->length());
162 
163  set_lon_dim(d);
164 
165  if (m + 1 == d_grid->map_end())
166  set_longitude_rightmost(true);
167  }
168 
169  ++m;
170  ++d;
171  }
172 
173  return get_lat() && get_lon();
174 }
175 
183 bool GridGeoConstraint::build_lat_lon_maps(Array *lat, Array *lon)
184 {
185  Grid::Map_iter m = d_grid->map_begin();
186 
187  Array::Dim_iter d = d_grid->get_array()->dim_begin();
188 
189  while (m != d_grid->map_end() && (!d_latitude || !d_longitude)) {
190  // Look for the Grid map that matches the variable passed as 'lat'
191  if (!d_latitude && *m == lat) {
192 
193  d_latitude = lat;
194 
195  if (!d_latitude->read_p())
196  d_latitude->read();
197 
198  set_lat(extract_double_array(d_latitude)); // throws Error
199  set_lat_length(d_latitude->length());
200 
201  set_lat_dim(d);
202  }
203 
204  if (!d_longitude && *m == lon) {
205 
206  d_longitude = lon;
207 
208  if (!d_longitude->read_p())
209  d_longitude->read();
210 
211  set_lon(extract_double_array(d_longitude));
212  set_lon_length(d_longitude->length());
213 
214  set_lon_dim(d);
215 
216  if (m + 1 == d_grid->map_end())
217  set_longitude_rightmost(true);
218  }
219 
220  ++m;
221  ++d;
222  }
223 
224  return get_lat() && get_lon();
225 }
226 
237 bool
238 GridGeoConstraint::lat_lon_dimensions_ok()
239 {
240  // get the last two map iterators
241  Grid::Map_riter rightmost = d_grid->map_rbegin();
242  Grid::Map_riter next_rightmost = rightmost + 1;
243 
244  if (*rightmost == d_longitude && *next_rightmost == d_latitude)
245  set_longitude_rightmost(true);
246  else if (*rightmost == d_latitude && *next_rightmost == d_longitude)
247  set_longitude_rightmost(false);
248  else
249  return false;
250 
251  return true;
252 }
253 
276 {
277  if (!is_bounding_box_set())
278  throw InternalErr("The Latitude and Longitude constraints must be set before calling apply_constraint_to_data().");
279 
280  Array::Dim_iter fd = d_latitude->dim_begin();
281 
282  if (get_latitude_sense() == inverted) {
283  int tmp = get_latitude_index_top();
284  set_latitude_index_top(get_latitude_index_bottom());
285  set_latitude_index_bottom(tmp);
286  }
287 
288  // It's easy to flip the Latitude values; if the bottom index value
289  // is before/above the top index, return an error explaining that.
290  if (get_latitude_index_top() > get_latitude_index_bottom())
291  throw Error("The upper and lower latitude indices appear to be reversed. Please provide the latitude bounding box numbers giving the northern-most latitude first.");
292 
293  // Constrain the lat vector and lat dim of the array
294  d_latitude->add_constraint(fd, get_latitude_index_top(), 1,
295  get_latitude_index_bottom());
296  d_grid->get_array()->add_constraint(get_lat_dim(),
297  get_latitude_index_top(), 1,
298  get_latitude_index_bottom());
299 
300  // Does the longitude constraint cross the edge of the longitude vector?
301  // If so, reorder the grid's data (array), longitude map vector and the
302  // local vector of longitude data used for computation.
303  if (get_longitude_index_left() > get_longitude_index_right()) {
304  reorder_longitude_map(get_longitude_index_left());
305 
306  // If the longitude constraint is 'split', join the two parts, reload
307  // the data into the Grid's Array and make sure the Array is marked as
308  // already read. This should be true for the whole Grid, but if some
309  // future modification changes that, the array will be covered here.
310  // Note that the following method only reads the data out and stores
311  // it in this object after joining the two parts. The method
312  // apply_constraint_to_data() transfers the data back from the this
313  // object to the DAP Grid variable.
314  reorder_data_longitude_axis(*d_grid->get_array(), get_lon_dim());
315 
316  // Now that the data are all in local storage alter the indices; the
317  // left index has now been moved to 0, and the right index is now
318  // at lon_vector_length-left+right.
319  set_longitude_index_right(get_lon_length() - get_longitude_index_left()
320  + get_longitude_index_right());
321  set_longitude_index_left(0);
322  }
323 
324  // If the constraint used the -180/179 (neg_pos) notation, transform
325  // the longitude map so it uses the -180/179 notation. Note that at this
326  // point, d_longitude always uses the pos notation because of the earlier
327  // conditional transformation.
328 
329  // Do this _before_ applying the constraint since set_array_using_double()
330  // tests the array length using Vector::length() and that method returns
331  // the length _as constrained_. We want to move all of the longitude
332  // values from d_lon back into the map, not just the number that will be
333  // sent (although an optimization might do this, it's hard to imagine
334  // it would gain much).
335  if (get_longitude_notation() == neg_pos) {
337  }
338 
339  // Apply constraint; stride is always one and maps only have one dimension
340  fd = d_longitude->dim_begin();
341  d_longitude->add_constraint(fd, get_longitude_index_left(), 1,
342  get_longitude_index_right());
343 
344  d_grid->get_array()->add_constraint(get_lon_dim(),
345  get_longitude_index_left(),
346  1, get_longitude_index_right());
347 
348  // Transfer values from the local lat vector to the Grid's
349  // Here test the sense of the latitude vector and invert the vector if the
350  // sense is 'inverted' so that the top is always the northern-most value
351  if (get_latitude_sense() == inverted) {
352  DBG(cerr << "Inverted latitude sense" << endl);
353  transpose_vector(get_lat() + get_latitude_index_top(),
354  get_latitude_index_bottom() - get_latitude_index_top() + 1);
355  // Now read the Array data and flip the latitudes.
356  flip_latitude_within_array(*d_grid->get_array(),
357  get_latitude_index_bottom() - get_latitude_index_top() + 1,
358  get_longitude_index_right() - get_longitude_index_left() + 1);
359  }
360 
361  set_array_using_double(d_latitude, get_lat() + get_latitude_index_top(),
362  get_latitude_index_bottom() - get_latitude_index_top() + 1);
363 
364  set_array_using_double(d_longitude, get_lon() + get_longitude_index_left(),
365  get_longitude_index_right() - get_longitude_index_left() + 1);
366 
367  // Look for any non-lat/lon maps and make sure they are read correctly
368  Grid::Map_iter i = d_grid->map_begin();
369  Grid::Map_iter end = d_grid->map_end();
370  while (i != end) {
371  if (*i != d_latitude && *i != d_longitude) {
372  if ((*i)->send_p()) {
373  DBG(cerr << "reading grid map: " << (*i)->name() << endl);
374  //(*i)->set_read_p(false);
375  (*i)->read();
376  }
377  }
378  ++i;
379  }
380 
381  // ... and then the Grid's array if it has been read.
382  if (get_array_data()) {
383  int size = d_grid->get_array()->val2buf(get_array_data());
384 
385  if (size != get_array_data_size())
386  throw InternalErr(__FILE__, __LINE__, "Expected data size not copied to the Grid's buffer.");
387 
388  d_grid->set_read_p(true);
389  }
390  else {
391  d_grid->get_array()->read();
392  }
393 }
394 
395 } // namespace functions
GridGeoConstraint(libdap::Grid *grid)
Initialize GeoConstraint with a Grid.
-
virtual bool read()
Read data into a local buffer.
Definition: BaseType.cc:899
-
virtual void add_constraint(Dim_iter i, int start, int stride, int stop)
Adds a constraint to an Array dimension.
Definition: Array.cc:647
-
virtual bool read_p()
Has this variable been read?
Definition: BaseType.cc:480
-
virtual string name() const
Returns the name of the class instance.
Definition: BaseType.cc:320
-
virtual unsigned int dimensions(bool constrained=false)
Return the total number of dimensions in the array.
Definition: Array.cc:711
- - -
STL namespace.
-
Map_iter map_end()
Definition: Grid.cc:537
- -
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
Map_riter map_rbegin()
Returns an iterator referencing the first Map vector.
Definition: Grid.cc:544
-
Map_iter map_begin()
Returns an iterator referencing the first Map vector.
Definition: Grid.cc:525
-
void set_array_using_double(Array *dest, double *src, int src_len)
Definition: util.cc:166
-
double * extract_double_array(Array *a)
Definition: util.cc:261
-
std::vector< dimension >::iterator Dim_iter
Definition: Array.h:206
-
Holds the Grid data type.
Definition: Grid.h:122
-
virtual unsigned int val2buf(void *val, bool reuse=false)
Reads data into the Vector buffer.
Definition: Vector.cc:1144
-
Array * get_array()
Returns the Grid Array. This method returns the array using an Array*, so no cast is required...
Definition: Grid.cc:518
-
GeoConstraint()
Initialize GeoConstraint.
-
virtual void reorder_longitude_map(int longitude_index_left)
-
string remove_quotes(const string &s)
Definition: util.cc:585
-
virtual void transpose_vector(double *src, const int length)
-
Dim_iter dim_begin()
Definition: Array.cc:690
-
virtual int length() const
Definition: Vector.cc:548
-
virtual void transform_longitude_to_neg_pos_notation()
-
A class for error processing.
Definition: Error.h:92
-
A multidimensional array of identical data types.
Definition: Array.h:112
-
virtual void reorder_data_longitude_axis(libdap::Array &a, libdap::Array::Dim_iter lon_dim)
-
virtual void set_read_p(bool state)
Sets the value of the read_p property.
Definition: Constructor.cc:218
-
-
- - - - diff --git a/html/GridGeoConstraint_8h_source.html b/html/GridGeoConstraint_8h_source.html deleted file mode 100644 index 15375cf48..000000000 --- a/html/GridGeoConstraint_8h_source.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -libdap: GridGeoConstraint.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
GridGeoConstraint.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2006 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef _grid_geo_constraint_h
27 #define _grid_geo_constraint_h 1
28 
29 #include <string>
30 #include <sstream>
31 #include <set>
32 
33 #ifndef _geo_constraint_h
34 #include "GeoConstraint.h"
35 #endif
36 
37 namespace functions
38 {
39 
40 // Defined in GeoConstraint; maybe move to util.cc/h?
41 extern bool unit_or_name_match(set < string > units, set < string > names,
42  const string & var_units,
43  const string & var_name);
44 
49 {
50 
51 private:
52  // Specific to a Grid
53  libdap::Grid *d_grid; //< Constrain this Grid (weak pointer)
54 
55  libdap::Array *d_latitude; //< A (weak) pointer to the Grid's latitude map
56  libdap::Array *d_longitude; //< A (weak) pointer to the Grid's longitude map
57 
58  bool build_lat_lon_maps();
59  bool build_lat_lon_maps(libdap::Array *lat, libdap::Array *lon);
60 
61  bool lat_lon_dimensions_ok();
62 
63  friend class GridGeoConstraintTest; // Unit tests
64 
65 public:
71 
72  virtual ~GridGeoConstraint()
73  {}
74 
75  virtual void apply_constraint_to_data() ;
76 
77  virtual libdap::Grid *get_constrained_grid() const
78  {
79  return d_grid;
80  }
81 };
82 
83 } // namespace libdap
84 
85 #endif // _grid_geo_constraint_h
86 
GridGeoConstraint(libdap::Grid *grid)
Initialize GeoConstraint with a Grid.
- - - -
Holds the Grid data type.
Definition: Grid.h:122
- -
A multidimensional array of identical data types.
Definition: Array.h:112
-
-
- - - - diff --git a/html/Grid_8cc_source.html b/html/Grid_8cc_source.html deleted file mode 100644 index 4b407bf8c..000000000 --- a/html/Grid_8cc_source.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - -libdap: Grid.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Grid.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1994-1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // implementation for Grid.
33 //
34 // jhrg 9/15/94
35 
36 #include "config.h"
37 
38 // #define DODS_DEBUG
39 
40 #include <sstream>
41 #include <functional>
42 #include <algorithm>
43 
44 #include "Grid.h"
45 #include "DDS.h"
46 #include "Array.h" // for downcasts
47 #include "util.h"
48 #include "InternalErr.h"
49 #include "escaping.h"
50 #include "XDRStreamMarshaller.h"
51 #include "debug.h"
52 
53 #include "XMLWriter.h"
54 #include "DMR.h"
55 #include "D4Group.h"
56 #include "D4Maps.h"
57 #include "D4Attributes.h"
58 
59 #include "DapIndent.h"
60 
61 using namespace std;
62 
63 namespace libdap {
64 
65 void
66 Grid::m_duplicate(const Grid &s)
67 {
68  // TODO revisit this code once/if the class is switched from using it's
69  // own vars to those in Constructor. jhrg 4/3/13
70 
71  // copy the weak pointer - Constructor will take care of copying
72  // the 'strong' pointers.
73  //d_array_var = s.d_array_var;
74  d_is_array_set = s.d_is_array_set;
75 }
76 
86 Grid::Grid(const string &n) : Constructor(n, dods_grid_c), d_is_array_set(false)
87 {}
88 
100 Grid::Grid(const string &n, const string &d)
101  : Constructor(n, d, dods_grid_c), d_is_array_set(false)
102 {}
103 
105 Grid::Grid(const Grid &rhs) : Constructor(rhs)
106 {
107  m_duplicate(rhs);
108 }
109 
110 Grid::~Grid()
111 {
112  //d_array_var = 0; // Weak pointer; object will be freed by Constructor
113 }
114 
115 BaseType *
117 {
118  return new Grid(*this);
119 }
120 
121 Grid &
122 Grid::operator=(const Grid &rhs)
123 {
124  if (this == &rhs)
125  return *this;
126 
127  // Removed this; it makes this operator= work differently than the rest
128 #if 0
129  delete d_array_var; d_array_var = 0;
130 
131  for (Map_iter i = d_map_vars.begin(); i != d_map_vars.end(); i++) {
132  BaseType *btp = *i ;
133  delete btp ;
134  }
135 #endif
136 
137  dynamic_cast<Constructor &>(*this) = rhs;
138 
139  m_duplicate(rhs);
140 
141  return *this;
142 }
143 
147 void
149 {
150  DBG(cerr << __func__ << "() - BEGIN (name:"<< name() <<
151  ")(type:"<< type_name()<<
152  ")(root:'"<< root->name()<<"':"<<(void*)root <<
153  ")(container:'"<< container->name()<<"':"<< (void *) container<< ")"
154  << endl;);
155 
156  vector<Array*> d4_map_arrays;
157 
158  // We do the Map Arrays first because some people expect to see them
159  // delclared prior to the coverage array the utilizes them - even though that
160  // is not a requirement of DAP4 I did it here to make people happier.
161  // We add the maps arrays to the current container if needed and make a
162  // a vector of them so we can add D4Map objects to our Precious down
163  // below.
164  for (Map_iter i = map_begin(), e = map_end(); i != e; ++i) {
165  DBG(cerr << __func__ << "() - Processing Map Array: '"<< (*i)->name() << "' ("<< (void *)(*i)<< ")" << endl;);
166  // Only add the map/array if it's not already present in the target DAP2 container.
167  // Given the scoping rules for DAP2 and the assumption the DDS is valid, testing for
168  // the same name is good enough. The point here is to be sure to only use the
169  // existing maps. This is an important issue when there are multiple Grids in the same
170  // dataset that utilize the same Map arrays data.
171  Array *the_map_array;;
172  Array *container_map_array = static_cast<Array*>(container->var((*i)->name()));
173  if(!container_map_array){
174  DBG(cerr << __func__ << "() - No Map Array '" << (*i)->name() << "' present in the current DAP4 container ("<<container->name()<< ":"<<(void*)container<< "). Let's fix that..." << endl;);
175  // Not in the container, so we check root group
176  Array *root_map_array = static_cast<Array*>(root->var((*i)->name()));
177  if (!root_map_array) {
178  // Not in the root group so we transform a new array and add it to container.
179  DBG(cerr << __func__ << "() - No Map Array '" << (*i)->name() << "' present in the root Group ("<<root->name()<< ":"<<(void*)root<< "). Let's fix that..." << endl;);
180  // transform it and add it to the container
181  (*i)->transform_to_dap4(root, container);
182  // Recover the new dap4 version from the container.
183  the_map_array = static_cast<Array*>(container->var((*i)->name()));
184  DBG(cerr << __func__ << "() - Transformed array '"<< the_map_array->name() <<
185  "' to DAP4 Array (" << (void *) the_map_array << ") added to container: '"<<
186  container->name() <<"'" << endl;);
187  }
188  else {
189  the_map_array = root_map_array;
190  DBG(cerr << __func__ << "() - Located Map Array '" << the_map_array->name() << "' (" <<
191  (void *) the_map_array << ") present in the root group ("<<root->name()<< ":"<<(void*)root <<
192  ")"<< endl;);
193  }
194  }
195  else {
196  the_map_array = container_map_array;
197  DBG(cerr << __func__ << "() - Located Map Array '" << the_map_array->name() << "' (" <<
198  (void *) the_map_array << ") present in the current DAP4 container ("<<container->name( )<< ":"<<
199  (void*)container<< ")" << endl;);
200  }
201  // We'll use these (below) to make D4Map objects for the coverage
202  d4_map_arrays.push_back(the_map_array);
203  }
204 
205  // Adds the coverage array to the container.
206  array_var()->transform_to_dap4(root, container);
207  // Get the new coverage array
208  BaseType *btp = container->var(array_var()->name());
209  Array *coverage = static_cast<Array*>(btp);
210  DBG(cerr << __func__ << "() - Transformed and added DAP4 coverage Array '"<< coverage->name() <<
211  "' to parent container: '" << container->name() << "'" << endl;);
212 
214 
215  DBG(cerr << __func__ << "() - " << "Coverage Array '"<< coverage->name() << "' attributes: " << endl;
216  XMLWriter xmlw;
217  coverage->get_attr_table().print_dap4(xmlw);
218  cerr << xmlw.get_doc() << endl;);
219 
220  // Add the D4Maps
221  vector<Array*>::iterator d4aItr=d4_map_arrays.begin();
222  vector<Array*>::iterator end=d4_map_arrays.end();
223  for( ; d4aItr!=end ; d4aItr++){
224  Array *the_map_array = *d4aItr;
225  // Here we use the Map Array that we saved the Map
226  // name and Map Array reference for our map.
227  D4Map *d4_map = new D4Map(the_map_array->FQN(), the_map_array, coverage); // bind the 'map' to the coverage
228  coverage->maps()->add_map(d4_map); // bind the coverage to the map
229  // Clear the vector entry to ensure that ~Array doesn't
230  // get called when the (stack declared) vector goes out of scope.
231  *d4aItr = 0;
232  DBG(cerr << __func__ << "() - Added DAP4 Map Array: '"<< d4_map->name() <<
233  "' (" << (void *) d4_map->array() << ") to coverage: '" << coverage->name() << "'" << endl;);
234 
235  }
236  DBG(cerr << __func__ << "() - END (grid:" << name() << ")" << endl;);
237 }
238 
239 
245 bool
247 {
248  return true;
249 }
250 
263 void
265 {
266  if (!bt)
267  throw InternalErr(__FILE__, __LINE__, "Passing NULL pointer as variable to be added.");
268 
269  if (part == array && d_is_array_set/*get_array()*/) {
270  // Avoid leaking memory... Function is add, not set, so it is an error to call again for the array part.
271  throw InternalErr(__FILE__, __LINE__, "Error: Grid::add_var called with part==Array, but the array was already set!");
272  }
273 
274  // avoid obvious broken semantics
275  if (!dynamic_cast<Array*>(bt)) {
276  throw InternalErr(__FILE__, __LINE__, "Grid::add_var(): object is not an Array!");
277  }
278 
279  // Set to the clone of bt if we get that far.
280  BaseType* bt_clone = 0;
281 
282  switch (part) {
283 
284  case array: {
285  // Add it as a copy to preserve old semantics. This sets parent too.
286  bt_clone = bt->ptr_duplicate();
287  set_array(static_cast<Array*>(bt_clone));
288  }
289  break;
290 
291  case maps: {
292  bt_clone = bt->ptr_duplicate();
293  bt_clone->set_parent(this);
294  d_vars.push_back(bt_clone);
295  }
296  break;
297 
298  default: {
299  if (!d_is_array_set) {
300  // Add it as a copy to preserve old semantics. This sets parent too.
301  bt_clone = bt->ptr_duplicate();
302  set_array(static_cast<Array*>(bt_clone));
303  }
304  else {
305  bt_clone = bt->ptr_duplicate();
306  bt_clone->set_parent(this);
307  d_vars.push_back(bt_clone);
308  }
309  }
310  break;
311  }
312 }
313 
329 void
331 {
332  if (!bt)
333  throw InternalErr(__FILE__, __LINE__, "Passing NULL pointer as variable to be added.");
334 
335  if (part == array && d_is_array_set/*get_array()*/) {
336  // Avoid leaking memory... Function is add, not set, so it is an error to call again for the array part.
337  throw InternalErr(__FILE__, __LINE__, "Error: Grid::add_var called with part==Array, but the array was already set!");
338  }
339 
340  // avoid obvious broken semantics
341  if (!dynamic_cast<Array*>(bt)) {
342  throw InternalErr(__FILE__, __LINE__, "Grid::add_var(): object is not an Array!");
343  }
344 
345  bt->set_parent(this);
346 
347  switch (part) {
348 
349  case array: {
350  // Refactored to use new set_array ([mjohnson 11 nov 2009])
351  set_array(static_cast<Array*>(bt));
352  }
353  break;
354 
355  case maps: {
356  // FIXME Why is this commented out?
357  //bt->set_parent(this);
358  d_vars.push_back(bt);
359  }
360  break;
361 
362  default: {
363  if (!d_is_array_set) {
364  // Refactored to use new set_array ([mjohnson 11 nov 2009])
365  // avoid obvious broken semantics
366  set_array(static_cast<Array*>(bt));
367  }
368  else {
369  d_vars.push_back(bt);
370  }
371  }
372  break;
373  }
374 }
375 
389 void Grid::set_array(Array* p_new_arr)
390 {
391  if (!p_new_arr) {
392  throw InternalErr(__FILE__, __LINE__, "Grid::set_array(): Cannot set to null!");
393  }
394 
395  // Make sure not same memory, this would be evil.
396  if (p_new_arr == get_array()) {
397  return;
398  }
399 
400  p_new_arr->set_parent(this);
401 
402  // Three cases: 1. There are no variables set for this grid at all
403  // 2. There are maps but no array
404  // 3. There is already an array set (and maybe maps).
405  // NB: d_array_var is a weak pointer to the Grid's Array
406  if (d_vars.size() == 0) {
407  d_vars.push_back(p_new_arr);
408  }
409  else if (!d_is_array_set) {
410  d_vars.insert(d_vars.begin(), p_new_arr);
411  }
412  else {
413  // clean out old array
414  delete get_array();
415  d_vars[0] = p_new_arr;
416  }
417 
418  d_is_array_set = true;
419 #if 0
420  // store the array pointer locally
421  d_array_var = p_new_arr;
422 
423  // Set the parent
424  d_array_var->set_parent(this);
425 #endif
426 }
427 
454 Array*
455 Grid::add_map(Array* p_new_map, bool add_as_copy)
456 {
457  if (!p_new_map)
458  throw InternalErr(__FILE__, __LINE__, "Grid::add_map(): cannot have p_new_map null!");
459 
460  if (add_as_copy)
461  p_new_map = static_cast<Array*>(p_new_map->ptr_duplicate());
462 
463  p_new_map->set_parent(this);
464 
465  d_vars.push_back(p_new_map);
466 
467  // return the one that got put into the Grid.
468  return p_new_map;
469 }
470 
483 Array*
484 Grid::prepend_map(Array* p_new_map, bool add_copy)
485 {
486  if (add_copy)
487  {
488  p_new_map = static_cast<Array*>(p_new_map->ptr_duplicate());
489  }
490 
491  p_new_map->set_parent(this);
492  d_vars.insert(map_begin(), p_new_map);
493 
494  return p_new_map;
495 }
496 
500 BaseType *
502 {
503  //return d_array_var;
504  // FIXME Should really test that the array has not be set; maps might be added first. jhrg 5/9/13
505 #if 0
506  if (d_array_var)
507  cerr << "In array_var(), d_array_var holds a " << d_array_var->type_name() << endl;
508  else
509  cerr << "In array_var(), d_array_var is null" << endl;
510 #endif
511  return d_is_array_set /*d_vars.size() > 0*/ ? *d_vars.begin() : 0;
512 }
513 
517 Array *
519 {
520  return dynamic_cast<Array*>(array_var());
521 }
522 
524 Grid::Map_iter
526 {
527  // The maps are stored in the second and subsequent elements of the
528  // d_var vector<BaseType*> of Constructor _unless_ the Array part
529  // has yet to be set. In the latter case, there are only maps in
530  // d_vars
531  return d_is_array_set/*(d_array_var != 0)*/ ? d_vars.begin() + 1: d_vars.begin();
532 }
533 
536 Grid::Map_iter
538 {
539  return d_vars.end();
540 }
541 
543 Grid::Map_riter
545 {
546  // see above
547  // return d_is_array_set/*(d_array_var != 0)*/ ? d_vars.rbegin() + 1: d_vars.rbegin();
548  return d_vars.rbegin();
549 }
550 
553 Grid::Map_riter
555 {
556  return d_is_array_set ? d_vars.rend() - 1: d_vars.rend();
557 }
558 
562 Grid::Map_iter
564 {
565  // return map_begin() + i;
566  return d_is_array_set ? map_begin() + 1 + i : map_begin() + i;
567 }
568 
584 int
585 Grid::components(bool constrained)
586 {
587  int comp;
588 
589  if (constrained) {
590  comp = get_array()->send_p() ? 1 : 0;
591 
592  for (Map_iter i = map_begin(); i != map_end(); i++) {
593  if ((*i)->send_p()) {
594  comp++;
595  }
596  }
597  }
598  else {
599  comp = d_vars.size();
600  }
601 
602  return comp;
603 }
604 
611 {
612  DBG( cerr << __func__ << "() - BEGIN "<< type_name() << " " << name() << " (at_container:"<< at_container->get_name() << ":"<<(void*)at_container<< ")" << endl;);
613 
614  // The variable 'at' should be the attribute table for the Grid
615  AttrTable *at = at_container->get_attr_table(name());
616  if (at) {
617  DBG( cerr << __func__ << "() - Found AttrTable ("<< at->get_name() << ":" << (void*)at<< ")" << endl;);
618  at->set_is_global_attribute(false);
619 
620 #if 0
621  // Removing this is left over from a previous version, unknown date.
622  // If the line is added back, some of the DMR round trip tests fail
623  // and the dapreader behavior is changed - tests that build responses
624  // from .dods and .das files fail when they include Grids. jhrg 5/23/18
625  //
626  // See also HYARX-766
628 #endif
629 
630  // If the AttrTable with the name of this Grid (which is also the
631  // name of the Grid's Array) contains a child AttrTable with that
632  // name, mark the attributes as 'not global' and ignore them. This
633  // code has been here for some time; I just added this comment. jhrg 5/23/18
634  AttrTable *dvat = at->get_attr_table(array_var()->name());
635  if (dvat) {
636  dvat->set_is_global_attribute(false);
637  }
638 
639  Map_iter map = map_begin();
640  while (map != map_end()) {
641  (*map)->transfer_attributes(at);
642  map++;
643  }
644 
645  // Trick: If an attribute that's within the container 'at' still has its
646  // is_global_attribute property set, then it's not really a global attr
647  // but instead an attribute that belongs to this Grid.
648  AttrTable::Attr_iter at_p = at->attr_begin();
649  while (at_p != at->attr_end()) {
650  if (at->is_global_attribute(at_p)) {
651  DBG( cerr << __func__ << "() - " <<
652  "Adding unclaimed Attribute ("<<
653  at->get_type(at_p)<< ":" << at->get_name(at_p) << ":" << (void*)(*map)<<
654  ") from AttrTable (" << at->get_name() << ":" << (void*)at << ")" <<
655  " to the variable " << type_name() << " " << name() << endl;);
656 
657  if (at->get_attr_type(at_p) == Attr_container)
658  get_attr_table().append_container(new AttrTable(*at->get_attr_table(at_p)), at->get_name(at_p));
659  else
660  get_attr_table().append_attr(at->get_name(at_p), at->get_type(at_p), at->get_attr_vector(at_p));
661  }
662 
663  at_p++;
664  }
665  }
666  else {
667  DBG( cerr << __func__ << "() - No AttrTable named '"<< name() << "' was found in at_container ("<<at_container->get_name()<<":" << (void*)at<< ")" << endl;);
668  }
669  DBG( cerr << __func__ << "() - END "<< type_name() << " " << name() << " (at_container:"<< at_container->get_name() << ":"<<(void*)at_container<< ")" << endl;);
670 }
671 
672 // When projected (using whatever the current constraint provides in the way
673 // of a projection), is the object still a Grid?
674 
691 bool
693 {
694  // For each dimension in the Array part, check the corresponding Map
695  // vector to make sure it is present in the projected Grid. If for each
696  // projected dimension in the Array component, there is a matching Map
697  // vector, then the Grid is valid.
698  bool valid = true;
699  Array *a = get_array();
700 
701  // Don't bother checking if the Array component is not included.
702  if (!a->send_p())
703  return false;
704 
705  // If only one part is being sent, it's clearly not a grid (it must be
706  // the array part of the Grid that's being sent (given that the above
707  // test passed and the array is being sent).
708  if (components(true) == 1)
709  return false;
710 
711  Array::Dim_iter d = a->dim_begin() ;
712  Map_iter m = map_begin() ;
713 
714  while (valid && d != a->dim_end() && m != map_end()) {
715  Array &map = dynamic_cast<Array&>(**m);
716  if (a->dimension_size(d, true) && map.send_p()) {
717  // Check the matching Map vector; the Map projection must equal
718  // the Array dimension projection
719  Array::Dim_iter fd = map.dim_begin(); // Maps have only one dim!
720  valid = map.dimension_start(fd, true) == a->dimension_start(d, true)
721  && map.dimension_stop(fd, true) == a->dimension_stop(d, true)
722  && map.dimension_stride(fd, true) == a->dimension_stride(d, true);
723  }
724  else {
725  valid = false;
726  }
727 
728  d++, m++;
729  }
730 
731  return valid;
732 }
733 
735 void
737 {
739  for (Map_iter m = map_begin(); m != map_end(); ++m)
740  dynamic_cast<Array&>(*(*m)).clear_constraint();
741 }
742 
743 void
744 Grid::print_decl(FILE *out, string space, bool print_semi,
745  bool constraint_info, bool constrained)
746 {
747  ostringstream oss;
748  print_decl(oss, space, print_semi, constraint_info, constrained);
749  fwrite(oss.str().data(), sizeof(char), oss.str().length(), out);
750 }
751 
752 void
753 Grid::print_decl(ostream &out, string space, bool print_semi,
754  bool constraint_info, bool constrained)
755 {
756  if (constrained && !send_p())
757  return;
758 
759  // See comment for the FILE* version of this method.
760  if (constrained && !projection_yields_grid()) {
761  out << space << "Structure {\n" ;
762 
763  get_array()->print_decl(out, space + " ", true, constraint_info,
764  constrained);
765 
766  for (Map_citer i = map_begin(); i != map_end(); i++) {
767  (*i)->print_decl(out, space + " ", true,
768  constraint_info, constrained);
769  }
770 
771  out << space << "} " << id2www(name()) ;
772  }
773  else {
774  // The number of elements in the (projected) Grid must be such that
775  // we have a valid Grid object; send it as such.
776  out << space << type_name() << " {\n" ;
777 
778  out << space << " Array:\n" ;
779  get_array()->print_decl(out, space + " ", true, constraint_info,
780  constrained);
781 
782  out << space << " Maps:\n" ;
783  for (Map_citer i = map_begin(); i != map_end(); i++) {
784  (*i)->print_decl(out, space + " ", true,
785  constraint_info, constrained);
786  }
787 
788  out << space << "} " << id2www(name()) ;
789  }
790 
791  if (constraint_info) {
792  if (send_p())
793  out << ": Send True";
794  else
795  out << ": Send False";
796  }
797 
798  if (print_semi)
799  out << ";\n" ;
800 
801  return;
802 }
803 
807 void
808 Grid::print_xml(FILE *out, string space, bool constrained)
809 {
810  XMLWriter xml(space);
811  print_xml_writer(xml, constrained);
812  fwrite(xml.get_doc(), sizeof(char), xml.get_doc_size(), out);
813 }
814 
818 void
819 Grid::print_xml(ostream &out, string space, bool constrained)
820 {
821  XMLWriter xml(space);
822  print_xml_writer(xml, constrained);
823  out << xml.get_doc();
824 }
825 
826 
827 class PrintGridFieldXMLWriter : public unary_function<BaseType *, void>
828 {
829  XMLWriter &d_xml;
830  bool d_constrained;
831  string d_tag;
832 public:
833  PrintGridFieldXMLWriter(XMLWriter &x, bool c, const string &t = "Map")
834  : d_xml(x), d_constrained(c), d_tag(t)
835  {}
836 
837  void operator()(BaseType *btp)
838  {
839  Array *a = dynamic_cast<Array*>(btp);
840  if (!a)
841  throw InternalErr(__FILE__, __LINE__, "Expected an Array.");
842  a->print_xml_writer_core(d_xml, d_constrained, d_tag);
843  }
844 };
845 
846 void
847 Grid::print_xml_writer(XMLWriter &xml, bool constrained)
848 {
849  if (constrained && !send_p())
850  return;
851 
852  if (constrained && !projection_yields_grid()) {
853  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*)"Structure") < 0)
854  throw InternalErr(__FILE__, __LINE__, "Could not write Structure element");
855 
856  if (!name().empty())
857  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name", (const xmlChar*)name().c_str()) < 0)
858  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
859 
861 
862  get_array()->print_xml_writer(xml, constrained);
863 
864  for_each(map_begin(), map_end(),
865  PrintGridFieldXMLWriter(xml, constrained, "Array"));
866 
867  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
868  throw InternalErr(__FILE__, __LINE__, "Could not end Structure element");
869  }
870  else {
871  // The number of elements in the (projected) Grid must be such that
872  // we have a valid Grid object; send it as such.
873  if (xmlTextWriterStartElement(xml.get_writer(), (const xmlChar*)"Grid") < 0)
874  throw InternalErr(__FILE__, __LINE__, "Could not write Grid element");
875 
876  if (!name().empty())
877  if (xmlTextWriterWriteAttribute(xml.get_writer(), (const xmlChar*) "name", (const xmlChar*)name().c_str()) < 0)
878  throw InternalErr(__FILE__, __LINE__, "Could not write attribute for name");
879 
881 
882  get_array()->print_xml_writer(xml, constrained);
883 
884  for_each(map_begin(), map_end(),
885  PrintGridFieldXMLWriter(xml, constrained, "Map"));
886 
887  if (xmlTextWriterEndElement(xml.get_writer()) < 0)
888  throw InternalErr(__FILE__, __LINE__, "Could not end Grid element");
889  }
890 }
891 
892 void
893 Grid::print_val(FILE *out, string space, bool print_decl_p)
894 {
895  ostringstream oss;
896  print_val(oss, space, print_decl_p);
897  fwrite(oss.str().data(), sizeof(char), oss.str().length(), out);
898 }
899 
900 void Grid::print_val(ostream &out, string space, bool print_decl_p)
901 {
902  if (print_decl_p) {
903  print_decl(out, space, false);
904  out << " = ";
905  }
906 
907  // If we are printing a value on the client-side, projection_yields_grid
908  // should not be called since we don't *have* a projection without a
909  // Constraint. I think that if we are here and send_p() is not true, then
910  // the value of this function should be ignored. 4/6/2000 jhrg
911  bool pyg = projection_yields_grid(); // hack 12/1/99 jhrg
912  if (pyg || !send_p())
913  out << "{ Array: ";
914  else
915  out << "{";
916 
917  get_array()->print_val(out, "", false);
918 
919  if (pyg || !send_p()) out << " Maps: ";
920 
921  for (Map_citer i = map_begin(); i != map_end(); i++, (void) (i != map_end() && out << ", ")) {
922  (*i)->print_val(out, "", false);
923  }
924 
925  out << " }";
926 
927  if (print_decl_p) out << ";\n";
928 }
929 
930 // Grids have ugly semantics.
931 
936 bool
937 Grid::check_semantics(string &msg, bool all)
938 {
939  if (!BaseType::check_semantics(msg))
940  return false;
941 
942  msg = "";
943 
944  if (!get_array()) {
945  msg += "Null grid base array in `" + name() + "'\n";
946  return false;
947  }
948 
949  // Is it an array?
950  if (get_array()->type() != dods_array_c) {
951  msg += "Grid `" + name() + "'s' member `" + get_array()->name() + "' must be an array\n";
952  return false;
953  }
954 
955  Array *av = (Array *)get_array(); // past test above, must be an array
956 
957  // Array must be of a simple_type.
958  if (!av->var()->is_simple_type()) {
959  msg += "The field variable `" + this->name() + "' must be an array of simple type elements (e.g., int32, String)\n";
960  return false;
961  }
962 
963  // enough maps?
964  if ((unsigned)d_vars.size()-1 != av->dimensions()) {
965  msg += "The number of map variables for grid `" + this->name() + "' does not match the number of dimensions of `";
966  msg += av->name() + "'\n";
967  return false;
968  }
969 
970  const string array_var_name = av->name();
971  Array::Dim_iter asi = av->dim_begin() ;
972  for (Map_iter mvi = map_begin(); mvi != map_end(); mvi++, asi++) {
973 
974  BaseType *mv = *mvi;
975 
976  // check names
977  if (array_var_name == mv->name()) {
978  msg += "Grid map variable `" + mv->name() + "' conflicts with the grid array name in grid `" + name() + "'\n";
979  return false;
980  }
981  // check types
982  if (mv->type() != dods_array_c) {
983  msg += "Grid map variable `" + mv->name() + "' is not an array\n";
984  return false;
985  }
986 
987  Array *mv_a = (Array *)mv; // downcast to (Array *)
988 
989  // Array must be of a simple_type.
990  if (!mv_a->var()->is_simple_type()) {
991  msg += "The field variable `" + this->name() + "' must be an array of simple type elements (e.g., int32, String)\n";
992  return false;
993  }
994 
995  // check shape
996  if (mv_a->dimensions() != 1) {// maps must have one dimension
997  msg += "Grid map variable `" + mv_a->name() + "' must be only one dimension\n";
998  return false;
999  }
1000  // size of map must match corresponding array dimension
1001  Array::Dim_iter mv_asi = mv_a->dim_begin() ;
1002  int mv_a_size = mv_a->dimension_size(mv_asi) ;
1003  int av_size = av->dimension_size(asi) ;
1004  if (mv_a_size != av_size) {
1005  msg += "Grid map variable `" + mv_a->name() + "'s' size does not match the size of array variable '";
1006  msg += get_array()->name() + "'s' cooresponding dimension\n";
1007  return false;
1008  }
1009  }
1010 
1011  if (all) {
1012  if (!get_array()->check_semantics(msg, true))
1013  return false;
1014  for (Map_iter mvi = map_begin(); mvi != map_end(); mvi++) {
1015  if (!(*mvi)->check_semantics(msg, true)) {
1016  return false;
1017  }
1018  }
1019  }
1020 
1021  return true;
1022 }
1023 
1032 void
1033 Grid::dump(ostream &strm) const
1034 {
1035  strm << DapIndent::LMarg << "Grid::dump - ("
1036  << (void *)this << ")" << endl ;
1037  DapIndent::Indent() ;
1038  Constructor::dump(strm) ;
1039 
1040  DapIndent::UnIndent() ;
1041 }
1042 
1043 } // namespace libdap
1044 
virtual void print_xml_writer(XMLWriter &xml, bool constrained=false)
Definition: Array.cc:1124
-
virtual string name() const
Returns the name of the class instance.
Definition: BaseType.cc:320
-
Map_riter map_rend()
Definition: Grid.cc:554
-
virtual unsigned int dimensions(bool constrained=false)
Return the total number of dimensions in the array.
Definition: Array.cc:711
-
virtual Array * prepend_map(Array *p_new_map, bool add_copy)
Definition: Grid.cc:484
-
virtual void add_var_nocopy(BaseType *bt, Part part)
Definition: Grid.cc:330
-
virtual BaseType * var(const string &name, bool exact_match=true, btp_stack *s=0)
btp_stack no longer needed; use back pointers (BaseType::get_parent())
Definition: Constructor.cc:267
-
Part
Names the parts of multi-section constructor data types.
Definition: Type.h:48
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
virtual void print_xml(ostream &out, string space=" ", bool constrained=false)
Definition: Grid.cc:819
-
virtual string get_name() const
Get the name of this attribute table.
Definition: AttrTable.cc:238
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Grid.cc:1033
-
STL namespace.
-
void print_xml_writer(XMLWriter &xml)
Definition: AttrTable.cc:1425
- -
virtual bool is_simple_type() const
Returns true if the instance is a numeric, string or URL type variable.
Definition: BaseType.cc:393
-
Map_iter map_end()
Definition: Grid.cc:537
-
virtual void set_parent(BaseType *parent)
Definition: BaseType.cc:733
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
void print_dap4(XMLWriter &xml)
Definition: AttrTable.cc:1498
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
Dim_iter dim_end()
Definition: Array.cc:696
-
virtual std::string FQN() const
Definition: BaseType.cc:332
-
virtual int components(bool constrained=false)
Returns the number of components in the Grid object.
Definition: Grid.cc:585
-
Map_riter map_rbegin()
Returns an iterator referencing the first Map vector.
Definition: Grid.cc:544
-
virtual void set_array(Array *p_new_arr)
Definition: Grid.cc:389
-
virtual BaseType * var(const string &name="", bool exact_match=true, btp_stack *s=0)
Definition: Vector.cc:433
-
virtual bool projection_yields_grid()
Definition: Grid.cc:692
-
Map_iter map_begin()
Returns an iterator referencing the first Map vector.
Definition: Grid.cc:525
-
virtual int dimension_size(Dim_iter i, bool constrained=false)
Returns the size of the dimension.
Definition: Array.cc:733
-
virtual BaseType * ptr_duplicate()
Definition: Grid.cc:116
-
Map_iter get_map_iter(int i)
Definition: Grid.cc:563
-
virtual void add_var(BaseType *bt, Part part)
Definition: Grid.cc:264
-
virtual AttrTable * append_container(const string &name)
Add a container to the attribute table.
Definition: AttrTable.cc:410
-
virtual void transfer_attributes(AttrTable *at_container)
Definition: Grid.cc:610
-
virtual void clear_constraint()
Definition: Grid.cc:736
-
virtual AttrTable * get_attr_table(const string &name)
Get an attribute container.
Definition: AttrTable.cc:607
-
virtual Type type() const
Returns the type of the class instance.
Definition: BaseType.cc:365
-
std::vector< dimension >::iterator Dim_iter
Definition: Array.h:206
-
virtual BaseType * ptr_duplicate()
Definition: Array.cc:175
-
virtual int dimension_stride(Dim_iter i, bool constrained=false)
Returns the stride value of the constraint.
Definition: Array.cc:812
-
Holds the Grid data type.
Definition: Grid.h:122
-
virtual void transform_to_dap4(D4Group *root, Constructor *container)
DAP2 to DAP4 transform.
Definition: BaseType.cc:216
-
virtual void print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
Prints a DDS entry for the Array.
Definition: Array.cc:1039
-
virtual D4Attributes * attributes()
Definition: BaseType.cc:599
-
virtual void print_val(ostream &out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: Grid.cc:900
-
virtual Array * add_map(Array *p_new_map, bool add_copy)
Definition: Grid.cc:455
-
Array * get_array()
Returns the Grid Array. This method returns the array using an Array*, so no cast is required...
Definition: Grid.cc:518
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Constructor.cc:913
-
virtual bool is_dap2_only_type()
Definition: Grid.cc:246
-
virtual BaseType * ptr_duplicate()=0
-
virtual int dimension_stop(Dim_iter i, bool constrained=false)
Return the stop index of the constraint.
Definition: Array.cc:788
- -
virtual void print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
Print an ASCII representation of the variable structure.
Definition: Grid.cc:753
-
virtual int dimension_start(Dim_iter i, bool constrained=false)
Return the start index of a dimension.
Definition: Array.cc:765
-
virtual AttrTable & get_attr_table()
Definition: BaseType.cc:582
-
virtual unsigned int append_attr(const string &name, const string &type, const string &value)
Add an attribute to the table.
Definition: AttrTable.cc:307
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
Dim_iter dim_begin()
Definition: Array.cc:690
-
virtual string type_name() const
Returns the type of the class instance as a string.
Definition: BaseType.cc:379
-
virtual bool check_semantics(string &msg, bool all=false)
Return true if this Grid is well formed.
Definition: Grid.cc:937
- -
virtual void transform_to_dap4(D4Group *root, Constructor *container)
DAP2 to DAP4 transform.
Definition: Grid.cc:148
- -
BaseType * array_var()
Returns the Grid Array.
Definition: Grid.cc:501
-
void add_map(D4Map *map)
Definition: D4Maps.h:115
-
virtual void transfer_attributes(AttrTable *at)
Definition: BaseType.cc:644
-
void transform_to_dap4(AttrTable &at)
copy attributes from DAP2 to DAP4
-
A multidimensional array of identical data types.
Definition: Array.h:112
-
virtual void print_val(ostream &out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: Array.cc:1271
-
virtual bool send_p()
Should this variable be sent?
Definition: BaseType.cc:554
-
virtual void print_xml_writer(XMLWriter &xml, bool constrained=false)
Definition: Grid.cc:847
-
Grid(const string &n)
The Grid constructor.
Definition: Grid.cc:86
-
string id2www(string in, const string &allowable)
Definition: escaping.cc:153
-
virtual void clear_constraint()
Clears the projection; add each projected dimension explicitly using add_constraint.
Definition: Array.cc:616
-
virtual bool check_semantics(string &msg, bool all=false)
Compare an object&#39;s current state with the semantics of its type.
Definition: BaseType.cc:1209
-
-
- - - - diff --git a/html/Grid_8h_source.html b/html/Grid_8h_source.html deleted file mode 100644 index e43d0b6b8..000000000 --- a/html/Grid_8h_source.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - -libdap: Grid.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Grid.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1994-1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Interface to the Grid ctor class. Grids contain a single array (the `main'
33 // array) of dimension N and N single dimension arrays (map arrays). For any
34 // dimension n of the main array, the size of the nth map array must match
35 // the size of the main array's nth dimension. Grids are used to map
36 // non-integer scales to multidimensional point data.
37 //
38 // jhrg 9/15/94
39 
40 #ifndef _grid_h
41 #define _grid_h 1
42 
43 #include <vector>
44 
45 #ifndef _basetype_h
46 #include "BaseType.h"
47 #endif
48 
49 #ifndef _array_h
50 #include "Array.h"
51 #endif
52 
53 #ifndef _constructor_h
54 #include "Constructor.h"
55 #endif
56 
57 #ifndef constraint_evaluator_h
58 #include "ConstraintEvaluator.h"
59 #endif
60 
61 namespace libdap
62 {
63 
64 class D4Grup;
65 class XMLWriter;
66 
122 class Grid: public Constructor
123 {
124 private:
125  //BaseType *d_array_var; // weak pointer to the
126  bool d_is_array_set;
127 
128 protected: // subclasses need access [mjohnson 11 nov 2009]
129  void m_duplicate(const Grid &s);
130 
131 public:
132 
133  Grid(const string &n);
134  Grid(const string &n, const string &d);
135  Grid(const Grid &rhs);
136  virtual ~Grid();
137 
138  typedef std::vector<BaseType *>::const_iterator Map_citer ;
139  typedef std::vector<BaseType *>::iterator Map_iter ;
140  typedef std::vector<BaseType *>::reverse_iterator Map_riter ;
141 
142 
143  Grid &operator=(const Grid &rhs);
144  virtual BaseType *ptr_duplicate();
145 
146  virtual void transform_to_dap4(D4Group *root, Constructor *container);
147 
148  virtual bool is_dap2_only_type();
149 
150  virtual void add_var(BaseType *bt, Part part);
151  virtual void add_var_nocopy(BaseType *bt, Part part);
152 
153  virtual void set_array(Array* p_new_arr);
154  virtual Array* add_map(Array* p_new_map, bool add_copy);
155  virtual Array* prepend_map(Array* p_new_map, bool add_copy);
156 
157  BaseType *array_var();
158  Array *get_array();
159 
160  // virtual unsigned int width(bool constrained = false);
161 
162  virtual int components(bool constrained = false);
163 
164  virtual bool projection_yields_grid();
165 
166  virtual void clear_constraint();
167 
168  virtual void print_decl(ostream &out, string space = " ",
169  bool print_semi = true,
170  bool constraint_info = false,
171  bool constrained = false);
172 
173  virtual void print_xml(ostream &out, string space = " ",
174  bool constrained = false);
175  virtual void print_xml_writer(XMLWriter &xml, bool constrained = false);
176 
177  virtual void print_val(ostream &out, string space = "",
178  bool print_decl_p = true);
179 
180  virtual void print_decl(FILE *out, string space = " ",
181  bool print_semi = true,
182  bool constraint_info = false,
183  bool constrained = false);
184  virtual void print_xml(FILE *out, string space = " ",
185  bool constrained = false);
186  virtual void print_val(FILE *out, string space = "",
187  bool print_decl_p = true);
188 
189  virtual void transfer_attributes(AttrTable *at_container);
190 
191  virtual bool check_semantics(string &msg, bool all = false);
192 
193  Map_iter map_begin() ;
194  Map_iter map_end() ;
195  Map_riter map_rbegin() ;
196  Map_riter map_rend() ;
197  Map_iter get_map_iter(int i);
198 
199  virtual void dump(ostream &strm) const ;
200 };
201 
202 } // namespace libdap
203 
204 #endif // _grid_h
205 
Map_riter map_rend()
Definition: Grid.cc:554
-
virtual Array * prepend_map(Array *p_new_map, bool add_copy)
Definition: Grid.cc:484
-
virtual void add_var_nocopy(BaseType *bt, Part part)
Definition: Grid.cc:330
-
Part
Names the parts of multi-section constructor data types.
Definition: Type.h:48
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
virtual void print_xml(ostream &out, string space=" ", bool constrained=false)
Definition: Grid.cc:819
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Grid.cc:1033
-
Map_iter map_end()
Definition: Grid.cc:537
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual int components(bool constrained=false)
Returns the number of components in the Grid object.
Definition: Grid.cc:585
-
Map_riter map_rbegin()
Returns an iterator referencing the first Map vector.
Definition: Grid.cc:544
-
virtual void set_array(Array *p_new_arr)
Definition: Grid.cc:389
-
virtual bool projection_yields_grid()
Definition: Grid.cc:692
-
Map_iter map_begin()
Returns an iterator referencing the first Map vector.
Definition: Grid.cc:525
-
virtual BaseType * ptr_duplicate()
Definition: Grid.cc:116
-
Map_iter get_map_iter(int i)
Definition: Grid.cc:563
-
virtual void add_var(BaseType *bt, Part part)
Definition: Grid.cc:264
-
virtual void transfer_attributes(AttrTable *at_container)
Definition: Grid.cc:610
-
virtual void clear_constraint()
Definition: Grid.cc:736
-
Holds the Grid data type.
Definition: Grid.h:122
-
virtual void print_val(ostream &out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: Grid.cc:900
-
virtual Array * add_map(Array *p_new_map, bool add_copy)
Definition: Grid.cc:455
-
Array * get_array()
Returns the Grid Array. This method returns the array using an Array*, so no cast is required...
Definition: Grid.cc:518
-
virtual bool is_dap2_only_type()
Definition: Grid.cc:246
- -
virtual void print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
Print an ASCII representation of the variable structure.
Definition: Grid.cc:753
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
virtual bool check_semantics(string &msg, bool all=false)
Return true if this Grid is well formed.
Definition: Grid.cc:937
- -
virtual void transform_to_dap4(D4Group *root, Constructor *container)
DAP2 to DAP4 transform.
Definition: Grid.cc:148
- -
BaseType * array_var()
Returns the Grid Array.
Definition: Grid.cc:501
-
A multidimensional array of identical data types.
Definition: Array.h:112
-
virtual void print_xml_writer(XMLWriter &xml, bool constrained=false)
Definition: Grid.cc:847
-
Grid(const string &n)
The Grid constructor.
Definition: Grid.cc:86
-
-
- - - - diff --git a/html/HTTPCacheDisconnectedMode_8h_source.html b/html/HTTPCacheDisconnectedMode_8h_source.html deleted file mode 100644 index 8d59e0e48..000000000 --- a/html/HTTPCacheDisconnectedMode_8h_source.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - -libdap: HTTPCacheDisconnectedMode.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
HTTPCacheDisconnectedMode.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef _http_cache_disconnected_mode_h
27 #define _http_cache_disconnected_mode_h
28 
29 namespace libdap
30 {
31 
47 typedef enum {
48  DISCONNECT_NONE = 0,
49  DISCONNECT_NORMAL = 1,
50  DISCONNECT_EXTERNAL = 2
52 
53 } // namespace libdap
54 
55 #endif // _http_cache_disconnected_mode_h
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- -
-
- - - - diff --git a/html/HTTPCacheInterruptHandler_8h_source.html b/html/HTTPCacheInterruptHandler_8h_source.html deleted file mode 100644 index 528c35635..000000000 --- a/html/HTTPCacheInterruptHandler_8h_source.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -libdap: HTTPCacheInterruptHandler.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
HTTPCacheInterruptHandler.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef http_cache_interrupt_handler_h
27 #define http_cache_interrupt_handler_h
28 
29 #include <signal.h>
30 
31 #include <cassert>
32 #include <iostream>
33 #include <algorithm>
34 
35 #include "HTTPCache.h"
36 #include "EventHandler.h"
37 #include "debug.h"
38 
39 namespace libdap
40 {
41 
42 static void
43 unlink_file(const string &f)
44 {
45  unlink(f.c_str());
46 }
47 
58 {
59 private:
60 
61 public:
64  {}
65 
67  virtual ~HTTPCacheInterruptHandler()
68  {}
69 
77  virtual void handle_signal(int signum)
78  {
79  assert(signum == SIGINT);
80  DBG(cerr << "Inside the HTTPCacheInterruptHandler." << endl);
81 
82  vector<string> *of = &HTTPCache::_instance->d_open_files;
83 
84  DBG(copy(of->begin(), of->end(),
85  ostream_iterator<string>(cerr, "\n")));
86 
87  for_each(of->begin(), of->end(), unlink_file);
88 
89  HTTPCache::delete_instance();
90  }
91 };
92 
93 } // namespace libdap
94 
95 #endif // http_cache_interrupt_handler_h
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- - -
-
- - - - diff --git a/html/HTTPCacheMacros_8h_source.html b/html/HTTPCacheMacros_8h_source.html deleted file mode 100644 index 9bd78ddda..000000000 --- a/html/HTTPCacheMacros_8h_source.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -libdap: HTTPCacheMacros.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
HTTPCacheMacros.h
-
-
-
1 /*
2  * HTTPCacheMacros.h
3  *
4  * Created on: Dec 28, 2011
5  * Author: jimg
6  */
7 
8 #ifndef HTTPCACHEMACROS_H_
9 #define HTTPCACHEMACROS_H_
10 
11 #ifdef WIN32
12 #include <direct.h>
13 #include <time.h>
14 #include <fcntl.h>
15 #define MKDIR(a,b) _mkdir((a))
16 #define UMASK(a) _umask((a))
17 
18 #if 0
19 #define REMOVE(a) do { \
20  int s = remove((a)); \
21  if (s != 0) \
22  throw InternalErr(__FILE__, __LINE__, "Cache error; could not remove file: " + long_to_string(s)); \
23  } while(0)
24 #endif
25 
26 #define REMOVE_BOOL(a) remove((a))
27 #define REMOVE(a) ((void)remove((a)))
28 #define MKSTEMP(a) _open(_mktemp((a)),_O_CREAT,_S_IREAD|_S_IWRITE)
29 #define DIR_SEPARATOR_CHAR '\\'
30 #define DIR_SEPARATOR_STR "\\"
31 
32 #else
33 #include <cerrno>
34 #define MKDIR(a,b) mkdir((a), (b))
35 #define UMASK(a) umask((a))
36 
37 #if 0
38 // Replaced this with something that signals errors. jhrg 12/28/2011
39 // A great idea, but it breaks things in ways that complicate
40 // testing. Push this change forward to H 1.9. jhrg 12/28/2011
41 #define REMOVE(a) do { \
42  errno = 0; \
43  int s = remove((a)); \
44  if (s != 0) \
45  throw InternalErr(__FILE__, __LINE__, "Cache error; could not remove file: " + long_to_string(errno)); \
46  } while(0)
47 #endif
48 
49 #define REMOVE_BOOL(a) remove((a))
50 #define REMOVE(a) ((void)remove((a)))
51 
52 #define MKSTEMP(a) mkstemp((a))
53 #define DIR_SEPARATOR_CHAR '/'
54 #define DIR_SEPARATOR_STR "/"
55 #endif
56 
57 #ifdef WIN32
58 #define CACHE_LOCATION "\\tmp\\"
59 #define CACHE_ROOT "dods-cache\\"
60 #else
61 #define CACHE_LOCATION "/tmp/"
62 #define CACHE_ROOT "dods-cache/"
63 #endif
64 
65 #define CACHE_INDEX ".index"
66 #define CACHE_LOCK ".lock"
67 #define CACHE_META ".meta"
68 #define CACHE_EMPTY_ETAG "@cache@"
69 
70 
71 #endif /* HTTPCACHEMACROS_H_ */
-
- - - - diff --git a/html/HTTPCacheResponse_8h_source.html b/html/HTTPCacheResponse_8h_source.html deleted file mode 100644 index ecad90c50..000000000 --- a/html/HTTPCacheResponse_8h_source.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -libdap: HTTPCacheResponse.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
HTTPCacheResponse.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef cache_http_response_h
27 #define cache_http_response_h
28 
29 #include <cstdio>
30 
31 #ifndef response_h
32 #include "Response.h"
33 #endif
34 
35 #ifndef _debug_h
36 #include "debug.h"
37 #endif
38 
39 namespace libdap
40 {
41 
45 {
46 private:
47  HTTPCache *d_cache; // pointer to singleton instance
48 
49 protected:
54  HTTPCacheResponse &operator=(const HTTPCacheResponse &);
56 
57 public:
64  HTTPCacheResponse(FILE *s, int status_code, vector<string> *headers, HTTPCache *c)
65  : HTTPResponse(s, status_code, headers, ""), d_cache(c)
66  {}
67 
74  HTTPCacheResponse(FILE *s, int status_code, vector<string> *headers,
75  const string &file_name, HTTPCache *c)
76  : HTTPResponse(s, status_code, headers, file_name), d_cache(c)
77  {}
78 
81  {
82  DBG(cerr << "Freeing HTTPCache resources... ");
83  set_file(""); // This keeps ~HTTPResponse() from removing the cache entry.
84  d_cache->release_cached_response(get_stream());
85  DBGN(cerr << endl);
86  }
87 };
88 
89 } // namespace libdap
90 
91 #endif // cache_http_response_h
-
HTTPCacheResponse(FILE *s, int status_code, vector< string > *headers, const string &file_name, HTTPCache *c)
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
HTTPCacheResponse(FILE *s, int status_code, vector< string > *headers, HTTPCache *c)
- - - -
void release_cached_response(FILE *response)
Definition: HTTPCache.cc:1571
-
-
- - - - diff --git a/html/HTTPCacheTable_8cc_source.html b/html/HTTPCacheTable_8cc_source.html deleted file mode 100644 index dff45d0f0..000000000 --- a/html/HTTPCacheTable_8cc_source.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -libdap: HTTPCacheTable.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
HTTPCacheTable.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #include "config.h"
27 
28 // #define DODS_DEBUG
29 
30 // TODO: Remove unneeded includes.
31 
32 #include <pthread.h>
33 #include <limits.h>
34 #include <unistd.h> // for stat
35 #include <sys/types.h> // for stat and mkdir
36 #include <sys/stat.h>
37 
38 #include <cstring>
39 #include <cerrno>
40 
41 #include <iostream>
42 #include <sstream>
43 #include <algorithm>
44 #include <iterator>
45 #include <set>
46 
47 #include "Error.h"
48 #include "InternalErr.h"
49 #include "ResponseTooBigErr.h"
50 #ifndef WIN32
51 #include "SignalHandler.h"
52 #endif
53 #include "HTTPCacheInterruptHandler.h"
54 #include "HTTPCacheTable.h"
55 #include "HTTPCacheMacros.h"
56 
57 #include "util_mit.h"
58 #include "debug.h"
59 
60 #ifdef WIN32
61 #include <direct.h>
62 #include <time.h>
63 #include <fcntl.h>
64 #define MKDIR(a,b) _mkdir((a))
65 #define REMOVE(a) do { \
66  int s = remove((a)); \
67  if (s != 0) \
68  throw InternalErr(__FILE__, __LINE__, "Cache error; could not remove file: " + long_to_string(s)); \
69  } while(0);
70 #define MKSTEMP(a) _open(_mktemp((a)),_O_CREAT,_S_IREAD|_S_IWRITE)
71 #define DIR_SEPARATOR_CHAR '\\'
72 #define DIR_SEPARATOR_STR "\\"
73 #else
74 #define MKDIR(a,b) mkdir((a), (b))
75 #define MKSTEMP(a) mkstemp((a))
76 #define DIR_SEPARATOR_CHAR '/'
77 #define DIR_SEPARATOR_STR "/"
78 #endif
79 
80 #define CACHE_META ".meta"
81 #define CACHE_INDEX ".index"
82 #define CACHE_EMPTY_ETAG "@cache@"
83 
84 #define NO_LM_EXPIRATION 24*3600 // 24 hours
85 #define MAX_LM_EXPIRATION 48*3600 // Max expiration from LM
86 
87 // If using LM to find the expiration then take 10% and no more than
88 // MAX_LM_EXPIRATION.
89 #ifndef LM_EXPIRATION
90 #define LM_EXPIRATION(t) (min((MAX_LM_EXPIRATION), static_cast<int>((t) / 10)))
91 #endif
92 
93 const int CACHE_TABLE_SIZE = 1499;
94 
95 using namespace std;
96 
97 namespace libdap {
98 
102 int
103 get_hash(const string &url)
104 {
105  int hash = 0;
106 
107  for (const char *ptr = url.c_str(); *ptr; ptr++)
108  hash = (int)((hash * 3 + (*(unsigned char *)ptr)) % CACHE_TABLE_SIZE);
109 
110  return hash;
111 }
112 
113 HTTPCacheTable::HTTPCacheTable(const string &cache_root, int block_size) :
114  d_cache_root(cache_root), d_block_size(block_size), d_current_size(0), d_new_entries(0)
115 {
116  d_cache_index = cache_root + CACHE_INDEX;
117 
118  d_cache_table = new CacheEntries*[CACHE_TABLE_SIZE];
119 
120  // Initialize the cache table.
121  for (int i = 0; i < CACHE_TABLE_SIZE; ++i)
122  d_cache_table[i] = 0;
123 
124  cache_index_read();
125 }
126 
130 static inline void
131 delete_cache_entry(HTTPCacheTable::CacheEntry *e)
132 {
133  DBG2(cerr << "Deleting CacheEntry: " << e << endl);
134  delete e;
135 }
136 
137 HTTPCacheTable::~HTTPCacheTable()
138 {
139  for (int i = 0; i < CACHE_TABLE_SIZE; ++i) {
140  HTTPCacheTable::CacheEntries *cp = get_cache_table()[i];
141  if (cp) {
142  // delete each entry
143  for_each(cp->begin(), cp->end(), delete_cache_entry);
144 
145  // now delete the vector that held the entries
146  delete get_cache_table()[i];
147  get_cache_table()[i] = 0;
148  }
149  }
150 
151  delete[] d_cache_table;
152 }
153 
161 class DeleteExpired : public unary_function<HTTPCacheTable::CacheEntry *&, void> {
162  time_t d_time;
163  HTTPCacheTable &d_table;
164 
165 public:
166  DeleteExpired(HTTPCacheTable &table, time_t t) :
167  d_time(t), d_table(table) {
168  if (!t)
169  d_time = time(0); // 0 == now
170  }
171 
172  void operator()(HTTPCacheTable::CacheEntry *&e) {
173  if (e && !e->readers && (e->freshness_lifetime
174  < (e->corrected_initial_age + (d_time - e->response_time)))) {
175  DBG(cerr << "Deleting expired cache entry: " << e->url << endl);
176  d_table.remove_cache_entry(e);
177  delete e; e = 0;
178  }
179  }
180 };
181 
182 // @param time base deletes againt this time, defaults to 0 (now)
183 void HTTPCacheTable::delete_expired_entries(time_t time) {
184  // Walk through and delete all the expired entries.
185  for (int cnt = 0; cnt < CACHE_TABLE_SIZE; cnt++) {
186  HTTPCacheTable::CacheEntries *slot = get_cache_table()[cnt];
187  if (slot) {
188  for_each(slot->begin(), slot->end(), DeleteExpired(*this, time));
189  slot->erase(remove(slot->begin(), slot->end(),
190  static_cast<HTTPCacheTable::CacheEntry *>(0)), slot->end());
191  }
192  }
193 }
194 
201 class DeleteByHits : public unary_function<HTTPCacheTable::CacheEntry *&, void> {
202  HTTPCacheTable &d_table;
203  int d_hits;
204 
205 public:
206  DeleteByHits(HTTPCacheTable &table, int hits) :
207  d_table(table), d_hits(hits) {
208  }
209 
210  void operator()(HTTPCacheTable::CacheEntry *&e) {
211  if (e && !e->readers && e->hits <= d_hits) {
212  DBG(cerr << "Deleting cache entry: " << e->url << endl);
213  d_table.remove_cache_entry(e);
214  delete e; e = 0;
215  }
216  }
217 };
218 
219 void
220 HTTPCacheTable::delete_by_hits(int hits) {
221  for (int cnt = 0; cnt < CACHE_TABLE_SIZE; cnt++) {
222  if (get_cache_table()[cnt]) {
223  HTTPCacheTable::CacheEntries *slot = get_cache_table()[cnt];
224  for_each(slot->begin(), slot->end(), DeleteByHits(*this, hits));
225  slot->erase(remove(slot->begin(), slot->end(),
226  static_cast<HTTPCacheTable::CacheEntry*>(0)),
227  slot->end());
228 
229  }
230  }
231 }
232 
237 class DeleteBySize : public unary_function<HTTPCacheTable::CacheEntry *&, void> {
238  HTTPCacheTable &d_table;
239  unsigned int d_size;
240 
241 public:
242  DeleteBySize(HTTPCacheTable &table, unsigned int size) :
243  d_table(table), d_size(size) {
244  }
245 
246  void operator()(HTTPCacheTable::CacheEntry *&e) {
247  if (e && !e->readers && e->size > d_size) {
248  DBG(cerr << "Deleting cache entry: " << e->url << endl);
249  d_table.remove_cache_entry(e);
250  delete e; e = 0;
251  }
252  }
253 };
254 
255 void HTTPCacheTable::delete_by_size(unsigned int size) {
256  for (int cnt = 0; cnt < CACHE_TABLE_SIZE; cnt++) {
257  if (get_cache_table()[cnt]) {
258  HTTPCacheTable::CacheEntries *slot = get_cache_table()[cnt];
259  for_each(slot->begin(), slot->end(), DeleteBySize(*this, size));
260  slot->erase(remove(slot->begin(), slot->end(),
261  static_cast<HTTPCacheTable::CacheEntry*>(0)),
262  slot->end());
263 
264  }
265  }
266 }
267 
274 
281 bool
282 HTTPCacheTable::cache_index_delete()
283 {
284  d_new_entries = 0;
285 
286  return (REMOVE_BOOL(d_cache_index.c_str()) == 0);
287 }
288 
297 bool
298 HTTPCacheTable::cache_index_read()
299 {
300  FILE *fp = fopen(d_cache_index.c_str(), "r");
301  // If the cache index can't be opened that's OK; start with an empty
302  // cache. 09/05/02 jhrg
303  if (!fp) {
304  return false;
305  }
306 
307  char line[1024];
308  while (!feof(fp) && fgets(line, 1024, fp)) {
309  add_entry_to_cache_table(cache_index_parse_line(line));
310  DBG2(cerr << line << endl);
311  }
312 
313  int res = fclose(fp) ;
314  if (res) {
315  DBG(cerr << "HTTPCache::cache_index_read - Failed to close " << (void *)fp << endl);
316  }
317 
318  d_new_entries = 0;
319 
320  return true;
321 }
322 
331 HTTPCacheTable::cache_index_parse_line(const char *line)
332 {
333  // Read the line and create the cache object
335  istringstream iss(line);
336  iss >> entry->url;
337  iss >> entry->cachename;
338 
339  iss >> entry->etag;
340  if (entry->etag == CACHE_EMPTY_ETAG)
341  entry->etag = "";
342 
343  iss >> entry->lm;
344  iss >> entry->expires;
345  iss >> entry->size;
346  iss >> entry->range; // range is not used. 10/02/02 jhrg
347 
348  iss >> entry->hash;
349  iss >> entry->hits;
350  iss >> entry->freshness_lifetime;
351  iss >> entry->response_time;
352  iss >> entry->corrected_initial_age;
353 
354  iss >> entry->must_revalidate;
355 
356  return entry;
357 }
358 
361 class WriteOneCacheEntry :
362  public unary_function<HTTPCacheTable::CacheEntry *, void>
363 {
364 
365  FILE *d_fp;
366 
367 public:
368  WriteOneCacheEntry(FILE *fp) : d_fp(fp)
369  {}
370 
371  void operator()(HTTPCacheTable::CacheEntry *e)
372  {
373  if (e && fprintf(d_fp,
374  "%s %s %s %ld %ld %ld %c %d %d %ld %ld %ld %c\r\n",
375  e->url.c_str(),
376  e->cachename.c_str(),
377  e->etag == "" ? CACHE_EMPTY_ETAG : e->etag.c_str(),
378  (long)(e->lm),
379  (long)(e->expires),
380  e->size,
381  e->range ? '1' : '0', // not used. 10/02/02 jhrg
382  e->hash,
383  e->hits,
384  (long)(e->freshness_lifetime),
385  (long)(e->response_time),
386  (long)(e->corrected_initial_age),
387  e->must_revalidate ? '1' : '0') < 0)
388  throw Error(internal_error, "Cache Index. Error writing cache index\n");
389  }
390 };
391 
401 void
402 HTTPCacheTable::cache_index_write()
403 {
404  DBG(cerr << "Cache Index. Writing index " << d_cache_index << endl);
405 
406  // Open the file for writing.
407  FILE * fp = NULL;
408  if ((fp = fopen(d_cache_index.c_str(), "wb")) == NULL) {
409  throw Error(string("Cache Index. Can't open `") + d_cache_index
410  + string("' for writing"));
411  }
412 
413  // Walk through the list and write it out. The format is really
414  // simple as we keep it all in ASCII.
415 
416  for (int cnt = 0; cnt < CACHE_TABLE_SIZE; cnt++) {
417  HTTPCacheTable::CacheEntries *cp = get_cache_table()[cnt];
418  if (cp)
419  for_each(cp->begin(), cp->end(), WriteOneCacheEntry(fp));
420  }
421 
422  /* Done writing */
423  int res = fclose(fp);
424  if (res) {
425  DBG(cerr << "HTTPCache::cache_index_write - Failed to close "
426  << (void *)fp << endl);
427  }
428 
429  d_new_entries = 0;
430 }
431 
433 
446 string
447 HTTPCacheTable::create_hash_directory(int hash)
448 {
449 #if 0
450  struct stat stat_info;
451  ostringstream path;
452 
453  path << d_cache_root << hash;
454  string p = path.str();
455 
456  if (stat(p.c_str(), &stat_info) == -1) {
457  DBG2(cerr << "Cache....... Create dir " << p << endl);
458  if (MKDIR(p.c_str(), 0777) < 0) {
459  DBG2(cerr << "Cache....... Can't create..." << endl);
460  throw Error("Could not create cache slot to hold response! Check the write permissions on your disk cache directory. Cache root: " + d_cache_root + ".");
461  }
462  }
463  else {
464  DBG2(cerr << "Cache....... Directory " << p << " already exists"
465  << endl);
466  }
467 
468  return p;
469 #endif
470 
471  ostringstream path;
472  path << d_cache_root << hash;
473 
474  // Save the mask
475  mode_t mask = umask(0);
476 
477  // Ignore the error if the directory exists
478  errno = 0;
479  if (mkdir(path.str().c_str(), 0777) < 0 && errno != EEXIST) {
480  umask(mask);
481  throw Error(internal_error, "Could not create the directory for the cache at '" + path.str() + "' (" + strerror(errno) + ").");
482  }
483 
484  // Restore themask
485  umask(mask);
486 
487  return path.str();
488 }
489 
504 void
505 HTTPCacheTable::create_location(HTTPCacheTable::CacheEntry *entry)
506 {
507  string hash_dir = create_hash_directory(entry->hash);
508 #ifdef WIN32
509  hash_dir += "\\dodsXXXXXX";
510 #else
511  hash_dir += "/dodsXXXXXX"; // mkstemp uses six characters.
512 #endif
513 
514  // mkstemp uses the storage passed to it; must be writable and local.
515  // char *templat = new char[hash_dir.size() + 1];
516  vector<char> templat(hash_dir.size() + 1);
517  strncpy(&templat[0], hash_dir.c_str(), hash_dir.size() + 1);
518 
519  // Open truncated for update. NB: mkstemp() returns a file descriptor.
520  // man mkstemp says "... The file is opened with the O_EXCL flag,
521  // guaranteeing that when mkstemp returns successfully we are the only
522  // user." 09/19/02 jhrg
523 #ifndef WIN32
524  // Make sure that temp files are accessible only by the owner.
525  umask(077);
526 #endif
527  int fd = MKSTEMP(&templat[0]); // fd mode is 666 or 600 (Unix)
528  if (fd < 0) {
529  // delete[] templat; templat = 0;
530  // close(fd); Calling close() when fd is < 0 is a bad idea! jhrg 7/2/15
531  throw Error(internal_error, "The HTTP Cache could not create a file to hold the response; it will not be cached.");
532  }
533 
534  entry->cachename = &templat[0];
535  // delete[] templat; templat = 0;
536  close(fd);
537 }
538 
539 
541 static inline int
542 entry_disk_space(int size, unsigned int block_size)
543 {
544  unsigned int num_of_blocks = (size + block_size) / block_size;
545 
546  DBG(cerr << "size: " << size << ", block_size: " << block_size
547  << ", num_of_blocks: " << num_of_blocks << endl);
548 
549  return num_of_blocks * block_size;
550 }
551 
555 
561 void
562 HTTPCacheTable::add_entry_to_cache_table(CacheEntry *entry)
563 {
564  int hash = entry->hash;
565  if (hash > CACHE_TABLE_SIZE-1 || hash < 0)
566  throw InternalErr(__FILE__, __LINE__, "Hash value too large!");
567 
568  if (!d_cache_table[hash])
569  d_cache_table[hash] = new CacheEntries;
570 
571  d_cache_table[hash]->push_back(entry);
572 
573  DBG(cerr << "add_entry_to_cache_table, current_size: " << d_current_size
574  << ", entry->size: " << entry->size << ", block size: " << d_block_size
575  << endl);
576 
577  d_current_size += entry_disk_space(entry->size, d_block_size);
578 
579  DBG(cerr << "add_entry_to_cache_table, current_size: " << d_current_size << endl);
580 
581  increment_new_entries();
582 }
583 
588 HTTPCacheTable::get_locked_entry_from_cache_table(const string &url) /*const*/
589 {
590  return get_locked_entry_from_cache_table(get_hash(url), url);
591 }
592 
601 HTTPCacheTable::get_locked_entry_from_cache_table(int hash, const string &url) /*const*/
602 {
603  DBG(cerr << "url: " << url << "; hash: " << hash << endl);
604  DBG(cerr << "d_cache_table: " << hex << d_cache_table << dec << endl);
605  if (d_cache_table[hash]) {
606  CacheEntries *cp = d_cache_table[hash];
607  for (CacheEntriesIter i = cp->begin(); i != cp->end(); ++i) {
608  // Must test *i because perform_garbage_collection may have
609  // removed this entry; the CacheEntry will then be null.
610  if ((*i) && (*i)->url == url) {
611  (*i)->lock_read_response(); // Lock the response
612  return *i;
613  }
614  }
615  }
616 
617  return 0;
618 }
619 
627 HTTPCacheTable::get_write_locked_entry_from_cache_table(const string &url)
628 {
629  int hash = get_hash(url);
630  if (d_cache_table[hash]) {
631  CacheEntries *cp = d_cache_table[hash];
632  for (CacheEntriesIter i = cp->begin(); i != cp->end(); ++i) {
633  // Must test *i because perform_garbage_collection may have
634  // removed this entry; the CacheEntry will then be null.
635  if ((*i) && (*i)->url == url) {
636  (*i)->lock_write_response(); // Lock the response
637  return *i;
638  }
639  }
640  }
641 
642  return 0;
643 }
644 
652 void
653 HTTPCacheTable::remove_cache_entry(HTTPCacheTable::CacheEntry *entry)
654 {
655  // This should never happen; all calls to this method are protected by
656  // the caller, hence the InternalErr.
657  if (entry->readers)
658  throw InternalErr(__FILE__, __LINE__, "Tried to delete a cache entry that is in use.");
659 
660  REMOVE(entry->cachename.c_str());
661  REMOVE(string(entry->cachename + CACHE_META).c_str());
662 
663  DBG(cerr << "remove_cache_entry, current_size: " << get_current_size() << endl);
664 
665  unsigned int eds = entry_disk_space(entry->size, get_block_size());
666  set_current_size((eds > get_current_size()) ? 0 : get_current_size() - eds);
667 
668  DBG(cerr << "remove_cache_entry, current_size: " << get_current_size() << endl);
669 }
670 
673 class DeleteCacheEntry: public unary_function<HTTPCacheTable::CacheEntry *&, void>
674 {
675  string d_url;
676  HTTPCacheTable *d_cache_table;
677 
678 public:
679  DeleteCacheEntry(HTTPCacheTable *c, const string &url)
680  : d_url(url), d_cache_table(c)
681  {}
682 
683  void operator()(HTTPCacheTable::CacheEntry *&e)
684  {
685  if (e && e->url == d_url) {
686  e->lock_write_response();
687  d_cache_table->remove_cache_entry(e);
688  e->unlock_write_response();
689  delete e; e = 0;
690  }
691  }
692 };
693 
700 void
701 HTTPCacheTable::remove_entry_from_cache_table(const string &url)
702 {
703  int hash = get_hash(url);
704  if (d_cache_table[hash]) {
705  CacheEntries *cp = d_cache_table[hash];
706  for_each(cp->begin(), cp->end(), DeleteCacheEntry(this, url));
707  cp->erase(remove(cp->begin(), cp->end(), static_cast<HTTPCacheTable::CacheEntry*>(0)),
708  cp->end());
709  }
710 }
711 
714 class DeleteUnlockedCacheEntry: public unary_function<HTTPCacheTable::CacheEntry *&, void> {
715  HTTPCacheTable &d_table;
716 
717 public:
718  DeleteUnlockedCacheEntry(HTTPCacheTable &t) :
719  d_table(t)
720  {
721  }
722  void operator()(HTTPCacheTable::CacheEntry *&e)
723  {
724  if (e) {
725  d_table.remove_cache_entry(e);
726  delete e;
727  e = 0;
728  }
729  }
730 };
731 
732 void HTTPCacheTable::delete_all_entries()
733 {
734  // Walk through the cache table and, for every entry in the cache, delete
735  // it on disk and in the cache table.
736  for (int cnt = 0; cnt < CACHE_TABLE_SIZE; cnt++) {
737  HTTPCacheTable::CacheEntries *slot = get_cache_table()[cnt];
738  if (slot) {
739  for_each(slot->begin(), slot->end(), DeleteUnlockedCacheEntry(*this));
740  slot->erase(remove(slot->begin(), slot->end(), static_cast<HTTPCacheTable::CacheEntry *> (0)), slot->end());
741  }
742  }
743 
744  cache_index_delete();
745 }
746 
760 void
761 HTTPCacheTable::calculate_time(HTTPCacheTable::CacheEntry *entry, int default_expiration, time_t request_time)
762 {
763  entry->response_time = time(NULL);
764  time_t apparent_age = max(0, static_cast<int>(entry->response_time - entry->date));
765  time_t corrected_received_age = max(apparent_age, entry->age);
766  time_t response_delay = entry->response_time - request_time;
767  entry->corrected_initial_age = corrected_received_age + response_delay;
768 
769  // Estimate an expires time using the max-age and expires time. If we
770  // don't have an explicit expires time then set it to 10% of the LM date
771  // (although max 24 h). If no LM date is available then use 24 hours.
772  time_t freshness_lifetime = entry->max_age;
773  if (freshness_lifetime < 0) {
774  if (entry->expires < 0) {
775  if (entry->lm < 0) {
776  freshness_lifetime = default_expiration;
777  }
778  else {
779  freshness_lifetime = LM_EXPIRATION(entry->date - entry->lm);
780  }
781  }
782  else
783  freshness_lifetime = entry->expires - entry->date;
784  }
785 
786  entry->freshness_lifetime = max(0, static_cast<int>(freshness_lifetime));
787 
788  DBG2(cerr << "Cache....... Received Age " << entry->age
789  << ", corrected " << entry->corrected_initial_age
790  << ", freshness lifetime " << entry->freshness_lifetime << endl);
791 }
792 
804 void HTTPCacheTable::parse_headers(HTTPCacheTable::CacheEntry *entry, unsigned long max_entry_size,
805  const vector<string> &headers)
806 {
807  vector<string>::const_iterator i;
808  for (i = headers.begin(); i != headers.end(); ++i) {
809  // skip a blank header.
810  if ((*i).empty())
811  continue;
812 
813  string::size_type colon = (*i).find(':');
814 
815  // skip a header with no colon in it.
816  if (colon == string::npos)
817  continue;
818 
819  string header = (*i).substr(0, (*i).find(':'));
820  string value = (*i).substr((*i).find(": ") + 2);
821  DBG2(cerr << "Header: " << header << endl);DBG2(cerr << "Value: " << value << endl);
822 
823  if (header == "ETag") {
824  entry->etag = value;
825  }
826  else if (header == "Last-Modified") {
827  entry->lm = parse_time(value.c_str());
828  }
829  else if (header == "Expires") {
830  entry->expires = parse_time(value.c_str());
831  }
832  else if (header == "Date") {
833  entry->date = parse_time(value.c_str());
834  }
835  else if (header == "Age") {
836  entry->age = parse_time(value.c_str());
837  }
838  else if (header == "Content-Length") {
839  unsigned long clength = strtoul(value.c_str(), 0, 0);
840  if (clength > max_entry_size)
841  entry->set_no_cache(true);
842  }
843  else if (header == "Cache-Control") {
844  // Ignored Cache-Control values: public, private, no-transform,
845  // proxy-revalidate, s-max-age. These are used by shared caches.
846  // See section 14.9 of RFC 2612. 10/02/02 jhrg
847  if (value == "no-cache" || value == "no-store")
848  // Note that we *can* store a 'no-store' response in volatile
849  // memory according to RFC 2616 (section 14.9.2) but those
850  // will be rare coming from DAP servers. 10/02/02 jhrg
851  entry->set_no_cache(true);
852  else if (value == "must-revalidate")
853  entry->must_revalidate = true;
854  else if (value.find("max-age") != string::npos) {
855  string max_age = value.substr(value.find("=" + 1));
856  entry->max_age = parse_time(max_age.c_str());
857  }
858  }
859  }
860 }
861 
863 
864 // @TODO Change name to record locked response
865 void HTTPCacheTable::bind_entry_to_data(HTTPCacheTable::CacheEntry *entry, FILE *body) {
866  entry->hits++; // Mark hit
867  d_locked_entries[body] = entry; // record lock, see release_cached_r...
868 }
869 
870 void HTTPCacheTable::uncouple_entry_from_data(FILE *body) {
871 
872  HTTPCacheTable::CacheEntry *entry = d_locked_entries[body];
873  if (!entry)
874  throw InternalErr("There is no cache entry for the response given.");
875 
876  d_locked_entries.erase(body);
877  entry->unlock_read_response();
878 
879  if (entry->readers < 0)
880  throw InternalErr("An unlocked entry was released");
881 }
882 
883 bool HTTPCacheTable::is_locked_read_responses() {
884  return !d_locked_entries.empty();
885 }
886 
887 } // namespace libdap
void remove_cache_entry(HTTPCacheTable::CacheEntry *entry)
-
time_t parse_time(const char *str, bool expand)
Definition: util_mit.cc:129
- -
STL namespace.
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
int get_hash(const string &url)
-
A class for error processing.
Definition: Error.h:92
- -
-
- - - - diff --git a/html/HTTPCacheTable_8h_source.html b/html/HTTPCacheTable_8h_source.html deleted file mode 100644 index 4beaed314..000000000 --- a/html/HTTPCacheTable_8h_source.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - -libdap: HTTPCacheTable.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
HTTPCacheTable.h
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2008 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 #ifndef _http_cache_table_h
26 #define _http_cache_table_h
27 
28 //#define DODS_DEBUG
29 
30 #include <pthread.h>
31 
32 #ifdef WIN32
33 #include <io.h> // stat for win32? 09/05/02 jhrg
34 #endif
35 
36 #include <cstring>
37 
38 #include <string>
39 #include <vector>
40 #include <map>
41 
42 #ifndef _http_cache_h
43 #include "HTTPCache.h"
44 #endif
45 
46 #ifndef _error_h
47 #include "Error.h"
48 #endif
49 
50 #ifndef _internalerr_h
51 #include "InternalErr.h"
52 #endif
53 
54 #ifndef _util_h
55 #include "util.h"
56 #endif
57 
58 #ifndef _debug_h
59 #include "debug.h"
60 #endif
61 
62  //long_to_string(code));
63 #define LOCK(m) do { \
64  int code = pthread_mutex_lock((m)); \
65  if (code != 0) \
66  throw InternalErr(__FILE__, __LINE__, string("Mutex lock: ") + strerror(code)); \
67  } while(0);
68 
69 //+ long_to_string(code));
70 #define UNLOCK(m) do { \
71  int code = pthread_mutex_unlock((m)); \
72  if (code != 0) \
73  throw InternalErr(__FILE__, __LINE__, string("Mutex unlock: ") + strerror(code)); \
74  } while(0);
75 
76 #define TRYLOCK(m) pthread_mutex_trylock((m))
77 #define INIT(m) pthread_mutex_init((m), 0)
78 #define DESTROY(m) pthread_mutex_destroy((m))
79 
80 //using namespace std;
81 
82 namespace libdap {
83 
84 int get_hash(const string &url);
85 
102 public:
114  struct CacheEntry {
115  private:
116  string url; // Location
117  int hash;
118  int hits; // Hit counts
119  string cachename;
120 
121  string etag;
122  time_t lm; // Last modified
123  time_t expires;
124  time_t date; // From the response header.
125  time_t age;
126  time_t max_age; // From Cache-Control
127 
128  unsigned long size; // Size of cached entity body
129  bool range; // Range is not currently supported. 10/02/02 jhrg
130 
131  time_t freshness_lifetime;
132  time_t response_time;
133  time_t corrected_initial_age;
134 
135  bool must_revalidate;
136  bool no_cache; // This field is not saved in the index.
137 
138  int readers;
139  pthread_mutex_t d_response_lock; // set if being read
140  pthread_mutex_t d_response_write_lock; // set if being written
141 
142  // Allow HTTPCacheTable methods access and the test class, too
143  friend class HTTPCacheTable;
144  friend class HTTPCacheTest;
145 
146  // Allow access by the functors used in HTTPCacheTable
147  friend class DeleteCacheEntry;
148  friend class WriteOneCacheEntry;
149  friend class DeleteExpired;
150  friend class DeleteByHits;
151  friend class DeleteBySize;
152 
153  public:
154  string get_cachename()
155  {
156  return cachename;
157  }
158  string get_etag()
159  {
160  return etag;
161  }
162  time_t get_lm()
163  {
164  return lm;
165  }
166  time_t get_expires()
167  {
168  return expires;
169  }
170  time_t get_max_age()
171  {
172  return max_age;
173  }
174  void set_size(unsigned long sz)
175  {
176  size = sz;
177  }
178  time_t get_freshness_lifetime()
179  {
180  return freshness_lifetime;
181  }
182  time_t get_response_time()
183  {
184  return response_time;
185  }
186  time_t get_corrected_initial_age()
187  {
188  return corrected_initial_age;
189  }
190  bool get_must_revalidate()
191  {
192  return must_revalidate;
193  }
194  void set_no_cache(bool state)
195  {
196  no_cache = state;
197  }
198  bool is_no_cache()
199  {
200  return no_cache;
201  }
202 
203  void lock_read_response()
204  {
205  DBG(cerr << "Try locking read response... (" << hex << &d_response_lock << dec << ") ");
206  int status = TRYLOCK(&d_response_lock);
207  if (status != 0 /*&& status == EBUSY*/) {
208  // If locked, wait for any writers
209  LOCK(&d_response_write_lock);
210  UNLOCK(&d_response_write_lock);
211  }
212 
213  readers++; // Record number of readers
214 
215  DBGN(cerr << "Done" << endl);
216 
217  }
218 
219  void unlock_read_response()
220  {
221  readers--;
222  if (readers == 0) {
223  DBG(cerr << "Unlocking read response... (" << hex << &d_response_lock << dec << ") ");
224  UNLOCK(&d_response_lock); DBGN(cerr << "Done" << endl);
225  }
226  }
227 
228  void lock_write_response()
229  {
230  DBG(cerr << "locking write response... (" << hex << &d_response_lock << dec << ") ");
231  LOCK(&d_response_lock);
232  LOCK(&d_response_write_lock); DBGN(cerr << "Done" << endl);
233  }
234 
235  void unlock_write_response()
236  {
237  DBG(cerr << "Unlocking write response... (" << hex << &d_response_lock << dec << ") ");
238  UNLOCK(&d_response_write_lock);
239  UNLOCK(&d_response_lock); DBGN(cerr << "Done" << endl);
240  }
241 
242  CacheEntry() :
243  url(""), hash(-1), hits(0), cachename(""), etag(""), lm(-1), expires(-1), date(-1), age(-1), max_age(-1), size(
244  0), range(false), freshness_lifetime(0), response_time(0), corrected_initial_age(0), must_revalidate(
245  false), no_cache(false), readers(0)
246  {
247  INIT(&d_response_lock);
248  INIT(&d_response_write_lock);
249  }
250  CacheEntry(const string &u) :
251  url(u), hash(-1), hits(0), cachename(""), etag(""), lm(-1), expires(-1), date(-1), age(-1), max_age(-1), size(
252  0), range(false), freshness_lifetime(0), response_time(0), corrected_initial_age(0), must_revalidate(
253  false), no_cache(false), readers(0)
254  {
255  INIT(&d_response_lock);
256  INIT(&d_response_write_lock);
257  hash = get_hash(url);
258  }
259  };
260 
261  // Typedefs for CacheTable. A CacheTable is a vector of vectors of
262  // CacheEntries. The outer vector is accessed using the hash value.
263  // Entries with matching hashes occupy successive positions in the inner
264  // vector (that's how hash collisions are resolved). Search the inner
265  // vector for a specific match.
266  typedef vector<CacheEntry *> CacheEntries;
267  typedef CacheEntries::iterator CacheEntriesIter;
268 
269  typedef CacheEntries **CacheTable; // Array of pointers to CacheEntries
270 
271  friend class HTTPCacheTest;
272 
273 private:
274  CacheTable d_cache_table;
275 
276  string d_cache_root;
277  unsigned int d_block_size; // File block size.
278  unsigned long d_current_size;
279 
280  string d_cache_index;
281  int d_new_entries;
282 
283  map<FILE *, HTTPCacheTable::CacheEntry *> d_locked_entries;
284 
285  // Make these private to prevent use
287  HTTPCacheTable &operator=(const HTTPCacheTable &);
288  HTTPCacheTable();
289 
290  CacheTable &get_cache_table()
291  {
292  return d_cache_table;
293  }
294 
295  CacheEntry *get_locked_entry_from_cache_table(int hash, const string &url); /*const*/
296 
297 public:
298  HTTPCacheTable(const string &cache_root, int block_size);
299  ~HTTPCacheTable();
300 
302  unsigned long get_current_size() const
303  {
304  return d_current_size;
305  }
306  void set_current_size(unsigned long sz)
307  {
308  d_current_size = sz;
309  }
310 
311  unsigned int get_block_size() const
312  {
313  return d_block_size;
314  }
315  void set_block_size(unsigned int sz)
316  {
317  d_block_size = sz;
318  }
319 
320  int get_new_entries() const
321  {
322  return d_new_entries;
323  }
324  void increment_new_entries()
325  {
326  ++d_new_entries;
327  }
328 
329  string get_cache_root()
330  {
331  return d_cache_root;
332  }
333  void set_cache_root(const string &cr)
334  {
335  d_cache_root = cr;
336  }
338 
339  void delete_expired_entries(time_t time = 0);
340  void delete_by_hits(int hits);
341  void delete_by_size(unsigned int size);
342  void delete_all_entries();
343 
344  bool cache_index_delete();
345  bool cache_index_read();
346  CacheEntry *cache_index_parse_line(const char *line);
347  void cache_index_write();
348 
349  string create_hash_directory(int hash);
350  void create_location(CacheEntry *entry);
351 
354 
355  void remove_entry_from_cache_table(const string &url);
356  CacheEntry *get_locked_entry_from_cache_table(const string &url);
358 
359  void calculate_time(HTTPCacheTable::CacheEntry *entry, int default_expiration, time_t request_time);
360  void parse_headers(HTTPCacheTable::CacheEntry *entry, unsigned long max_entry_size, const vector<string> &headers);
361 
362  // These should move back to HTTPCache
363  void bind_entry_to_data(CacheEntry *entry, FILE *body);
364  void uncouple_entry_from_data(FILE *body);
365  bool is_locked_read_responses();
366 };
367 
368 } // namespace libdap
369 #endif
void remove_cache_entry(HTTPCacheTable::CacheEntry *entry)
- -
void create_location(CacheEntry *entry)
-
void parse_headers(HTTPCacheTable::CacheEntry *entry, unsigned long max_entry_size, const vector< string > &headers)
-
void add_entry_to_cache_table(CacheEntry *entry)
- -
void calculate_time(HTTPCacheTable::CacheEntry *entry, int default_expiration, time_t request_time)
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
int get_hash(const string &url)
-
CacheEntry * cache_index_parse_line(const char *line)
-
void remove_entry_from_cache_table(const string &url)
-
CacheEntry * get_write_locked_entry_from_cache_table(const string &url)
- -
string create_hash_directory(int hash)
- - -
-
- - - - diff --git a/html/HTTPCache_8cc_source.html b/html/HTTPCache_8cc_source.html deleted file mode 100644 index 1f1e6df20..000000000 --- a/html/HTTPCache_8cc_source.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - -libdap: HTTPCache.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
HTTPCache.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #include "config.h"
27 
28 // #define DODS_DEBUG
29 // #define DODS_DEBUG2
30 #undef USE_GETENV
31 
32 #include <pthread.h>
33 #include <limits.h>
34 #include <unistd.h> // for stat
35 #include <sys/types.h> // for stat and mkdir
36 #include <sys/stat.h>
37 
38 #include <cstring>
39 #include <cerrno>
40 
41 #include <iostream>
42 #include <sstream>
43 #include <algorithm>
44 #include <iterator>
45 #include <set>
46 
47 #include "Error.h"
48 #include "InternalErr.h"
49 #include "ResponseTooBigErr.h"
50 #ifndef WIN32
51 #include "SignalHandler.h"
52 #endif
53 #include "HTTPCacheInterruptHandler.h"
54 #include "HTTPCacheTable.h"
55 #include "HTTPCache.h"
56 #include "HTTPCacheMacros.h"
57 #include "SignalHandlerRegisteredErr.h"
58 
59 #include "util_mit.h"
60 #include "debug.h"
61 
62 using namespace std;
63 
64 namespace libdap {
65 
66 HTTPCache *HTTPCache::_instance = 0;
67 
68 // instance_mutex is used to ensure that only one instance is created.
69 // That is, it protects the body of the HTTPCache::instance() method. This
70 // mutex is initialized from within the static function once_init_routine()
71 // and the call to that takes place using pthread_once_init() where the mutex
72 // once_block is used to protect that call. All of this ensures that no matter
73 // how many threads call the instance() method, only one instance is ever
74 // made.
75 static pthread_mutex_t instance_mutex;
76 static pthread_once_t once_block = PTHREAD_ONCE_INIT;
77 
78 
79 #define NO_LM_EXPIRATION 24*3600 // 24 hours
80 
81 #define DUMP_FREQUENCY 10 // Dump index every x loads
82 
83 #define MEGA 0x100000L
84 #define CACHE_TOTAL_SIZE 20 // Default cache size is 20M
85 #define CACHE_FOLDER_PCT 10 // 10% of cache size for metainfo etc.
86 #define CACHE_GC_PCT 10 // 10% of cache size free after GC
87 #define MIN_CACHE_TOTAL_SIZE 5 // 5M Min cache size
88 #define MAX_CACHE_ENTRY_SIZE 3 // 3M Max size of single cached entry
89 
90 static void
91 once_init_routine()
92 {
93  int status;
94  status = INIT(&instance_mutex);
95 
96  if (status != 0)
97  throw InternalErr(__FILE__, __LINE__, "Could not initialize the HTTP Cache mutex. Exiting.");
98 }
99 
128 HTTPCache *
129 HTTPCache::instance(const string &cache_root, bool force)
130 {
131  int status = pthread_once(&once_block, once_init_routine);
132  if (status != 0)
133  throw InternalErr(__FILE__, __LINE__, "Could not initialize the HTTP Cache mutex. Exiting.");
134 
135  LOCK(&instance_mutex);
136 
137  DBG(cerr << "Entering instance(); (" << hex << _instance << dec << ")" << "... ");
138 
139  try {
140  if (!_instance) {
141  _instance = new HTTPCache(cache_root, force);
142 
143  DBG(cerr << "New instance: " << _instance << ", cache root: "
144  << _instance->d_cache_root << endl);
145 
146  atexit(delete_instance);
147 
148 #ifndef WIN32
149  // Register the interrupt handler. If we've already registered
150  // one, barf. If this becomes a problem, hack SignalHandler so
151  // that we can chain these handlers... 02/10/04 jhrg
152  //
153  // Technically we're leaking memory here. However, since this
154  // class is a singleton, we know that only three objects will
155  // ever be created and they will all exist until the process
156  // exits. We can let this slide... 02/12/04 jhrg
157  EventHandler *old_eh = SignalHandler::instance()->register_handler(SIGINT, new HTTPCacheInterruptHandler, true);
158  if (old_eh) {
159  SignalHandler::instance()->register_handler(SIGINT, old_eh);
161  "Could not register event handler for SIGINT without superseding an existing one.");
162  }
163 
164  old_eh = SignalHandler::instance()->register_handler(SIGPIPE, new HTTPCacheInterruptHandler, true);
165  if (old_eh) {
166  SignalHandler::instance()->register_handler(SIGPIPE, old_eh);
168  "Could not register event handler for SIGPIPE without superseding an existing one.");
169  }
170 
171  old_eh = SignalHandler::instance()->register_handler(SIGTERM, new HTTPCacheInterruptHandler, true);
172  if (old_eh) {
173  SignalHandler::instance()->register_handler(SIGTERM, old_eh);
175  "Could not register event handler for SIGTERM without superseding an existing one.");
176  }
177 #endif
178  }
179  }
180  catch (...) {
181  DBG2(cerr << "The constructor threw an Error!" << endl);
182  UNLOCK(&instance_mutex);
183  throw;
184  }
185 
186  UNLOCK(&instance_mutex);
187  DBGN(cerr << "returning " << hex << _instance << dec << endl);
188 
189  return _instance;
190 }
191 
195 void
196 HTTPCache::delete_instance()
197 {
198  DBG(cerr << "Entering delete_instance()..." << endl);
199 
200  if (HTTPCache::_instance) {
201  DBG(cerr << "Deleting the cache: " << HTTPCache::_instance << endl);
202  delete HTTPCache::_instance;
203  HTTPCache::_instance = 0;
204 
205  //Now remove the signal handlers
206  delete SignalHandler::instance()->remove_handler(SIGINT);
207  delete SignalHandler::instance()->remove_handler(SIGPIPE);
208  delete SignalHandler::instance()->remove_handler(SIGTERM);
209  }
210 
211  DBG(cerr << "Exiting delete_instance()" << endl);
212 }
213 
228 HTTPCache::HTTPCache(string cache_root, bool force) :
229  d_locked_open_file(0),
230  d_cache_enabled(false),
231  d_cache_protected(false),
232 
233  d_cache_disconnected(DISCONNECT_NONE),
234 
235  d_expire_ignored(false),
236  d_always_validate(false),
237  d_total_size(CACHE_TOTAL_SIZE * MEGA),
238  d_folder_size(CACHE_TOTAL_SIZE / CACHE_FOLDER_PCT),
239  d_gc_buffer(CACHE_TOTAL_SIZE / CACHE_GC_PCT),
240  d_max_entry_size(MAX_CACHE_ENTRY_SIZE * MEGA),
241  d_default_expiration(NO_LM_EXPIRATION),
242  d_max_age(-1),
243  d_max_stale(-1),
244  d_min_fresh(-1),
245  d_http_cache_table(0)
246 {
247  DBG(cerr << "Entering the constructor for " << this << "... ");
248 #if 0
249  int status = pthread_once(&once_block, once_init_routine);
250  if (status != 0)
251  throw InternalErr(__FILE__, __LINE__, "Could not initialize the HTTP Cache mutex. Exiting.");
252 #endif
253  INIT(&d_cache_mutex);
254 
255  // This used to throw an Error object if we could not get the
256  // single user lock. However, that results in an invalid object. It's
257  // better to have an instance that has default values. If we cannot get
258  // the lock, make sure to set the cache as *disabled*. 03/12/03 jhrg
259  //
260  // I fixed this block so that the cache root is set before we try to get
261  // the single user lock. That was the fix for bug #661. To make that
262  // work, I had to move the call to create_cache_root out of
263  // set_cache_root(). 09/08/03 jhrg
264 
265  set_cache_root(cache_root);
266  int block_size;
267 
268  if (!get_single_user_lock(force))
269  throw Error(internal_error, "Could not get single user lock for the cache");
270 
271 #ifdef WIN32
272  // Windows is unable to provide us this information. 4096 appears
273  // a best guess. It is likely to be in the range [2048, 8192] on
274  // windows, but will the level of truth of that statement vary over
275  // time ?
276  block_size = 4096;
277 #else
278  struct stat s;
279  if (stat(cache_root.c_str(), &s) == 0)
280  block_size = s.st_blksize;
281  else
282  throw Error(internal_error, "Could not set file system block size.");
283 #endif
284  d_http_cache_table = new HTTPCacheTable(d_cache_root, block_size);
285  d_cache_enabled = true;
286 
287  DBGN(cerr << "exiting" << endl);
288 }
289 
302 HTTPCache::~HTTPCache()
303 {
304  DBG(cerr << "Entering the destructor for " << this << "... ");
305 
306  try {
307  if (startGC())
308  perform_garbage_collection();
309 
310  d_http_cache_table->cache_index_write();
311  }
312  catch (Error &e) {
313  // If the cache index cannot be written, we've got problems. However,
314  // unless we're debugging, still free up the cache table in memory.
315  // How should we let users know they cache index is not being
316  // written?? 10/03/02 jhrg
317  DBG(cerr << e.get_error_message() << endl);
318  }
319 
320  delete d_http_cache_table;
321 
322  release_single_user_lock();
323 
324  DBGN(cerr << "exiting destructor." << endl);
325  DESTROY(&d_cache_mutex);
326 }
327 
328 
332 
336 bool
337 HTTPCache::stopGC() const
338 {
339  return (d_http_cache_table->get_current_size() + d_folder_size < d_total_size - d_gc_buffer);
340 }
341 
348 bool
349 HTTPCache::startGC() const
350 {
351  DBG(cerr << "startGC, current_size: " << d_http_cache_table->get_current_size() << endl);
352  return (d_http_cache_table->get_current_size() + d_folder_size > d_total_size);
353 }
354 
369 void
370 HTTPCache::perform_garbage_collection()
371 {
372  DBG(cerr << "Performing garbage collection" << endl);
373 
374  // Remove all the expired responses.
375  expired_gc();
376 
377  // Remove entries larger than max_entry_size.
378  too_big_gc();
379 
380  // Remove entries starting with zero hits, 1, ..., until stopGC()
381  // returns true.
382  hits_gc();
383 }
384 
390 void
391 HTTPCache::expired_gc()
392 {
393  if (!d_expire_ignored) {
394  d_http_cache_table->delete_expired_entries();
395  }
396 }
397 
414 void
415 HTTPCache::hits_gc()
416 {
417  int hits = 0;
418 
419  if (startGC()) {
420  while (!stopGC()) {
421  d_http_cache_table->delete_by_hits(hits);
422  hits++;
423  }
424  }
425 }
426 
431 void HTTPCache::too_big_gc() {
432  if (startGC())
433  d_http_cache_table->delete_by_size(d_max_entry_size);
434 }
435 
437 
448 bool HTTPCache::get_single_user_lock(bool force)
449 {
450  if (!d_locked_open_file) {
451  FILE * fp = NULL;
452 
453  try {
454  // It's OK to call create_cache_root if the directory already
455  // exists.
456  create_cache_root(d_cache_root);
457  }
458  catch (Error &e) {
459  // We need to catch and return false because this method is
460  // called from a ctor and throwing at this point will result in a
461  // partially constructed object. 01/22/04 jhrg
462  DBG(cerr << "Failure to create the cache root" << endl);
463  return false;
464  }
465 
466  // Try to read the lock file. If we can open for reading, it exists.
467  string lock = d_cache_root + CACHE_LOCK;
468  if ((fp = fopen(lock.c_str(), "r")) != NULL) {
469  int res = fclose(fp);
470  if (res) {
471  DBG(cerr << "Failed to close " << (void *)fp << endl);
472  }
473  if (force)
474  REMOVE(lock.c_str());
475  else
476  return false;
477  }
478 
479  if ((fp = fopen(lock.c_str(), "w")) == NULL) {
480  DBG(cerr << "Could not open for write access" << endl);
481  return false;
482  }
483 
484  d_locked_open_file = fp;
485  return true;
486  }
487 
488  DBG(cerr << "locked_open_file is true" << endl);
489  return false;
490 }
491 
494 void
495 HTTPCache::release_single_user_lock()
496 {
497  if (d_locked_open_file) {
498  int res = fclose(d_locked_open_file);
499  if (res) {
500  DBG(cerr << "Failed to close " << (void *)d_locked_open_file << endl) ;
501  }
502  d_locked_open_file = 0;
503  }
504 
505  string lock = d_cache_root + CACHE_LOCK;
506  REMOVE(lock.c_str());
507 }
508 
511 
515 string
516 HTTPCache::get_cache_root() const
517 {
518  return d_cache_root;
519 }
520 
521 
530 void
531 HTTPCache::create_cache_root(const string &cache_root)
532 {
533 #ifdef WIN32
534  string::size_type cur = cache_root[1] == ':' ? 3 : 1;
535  typedef int mode_t;
536 
537  while ((cur = cache_root.find(DIR_SEPARATOR_CHAR, cur)) != string::npos) {
538  string dir = cache_root.substr(0, cur);
539  struct stat stat_info;
540  if (stat(dir.c_str(), &stat_info) == -1) {
541  DBG2(cerr << "Cache....... Creating " << dir << endl);
542  mode_t mask = UMASK(0);
543  if (MKDIR(dir.c_str(), 0777) < 0) {
544  DBG2(cerr << "Error: can't create." << endl);
545  UMASK(mask);
546  throw Error(string("Could not create the directory for the cache. Failed when building path at ") + dir + string("."));
547  }
548  UMASK(mask);
549  }
550  else {
551  DBG2(cerr << "Cache....... Found " << dir << endl);
552  }
553  cur++;
554  }
555 #else
556  // OSX and Linux
557 
558  // Save the mask
559  mode_t mask = umask(0);
560 
561  // Ignore the error if the directory exists
562  errno = 0;
563  if (mkdir(cache_root.c_str(), 0777) < 0 && errno != EEXIST) {
564  umask(mask);
565  throw Error("Could not create the directory for the cache at '" + cache_root + "' (" + strerror(errno) + ").");
566  }
567 
568  // Restore themask
569  umask(mask);
570 
571 #endif
572 }
573 
588 void
589 HTTPCache::set_cache_root(const string &root)
590 {
591  if (root != "") {
592  d_cache_root = root;
593  // cache root should end in /.
594  if (d_cache_root[d_cache_root.size()-1] != DIR_SEPARATOR_CHAR)
595  d_cache_root += DIR_SEPARATOR_CHAR;
596  }
597  else {
598  // If no cache root has been indicated then look for a suitable
599  // location.
600 #ifdef USE_GETENV
601  char * cr = (char *) getenv("DODS_CACHE");
602  if (!cr) cr = (char *) getenv("TMP");
603  if (!cr) cr = (char *) getenv("TEMP");
604  if (!cr) cr = (char*)CACHE_LOCATION;
605  d_cache_root = cr;
606 #else
607  d_cache_root = CACHE_LOCATION;
608 #endif
609 
610  if (d_cache_root[d_cache_root.size()-1] != DIR_SEPARATOR_CHAR)
611  d_cache_root += DIR_SEPARATOR_CHAR;
612 
613  d_cache_root += CACHE_ROOT;
614  }
615 
616  // Test d_hhtp_cache_table because this method can be called before that
617  // instance is created and also can be called later to change the cache
618  // root. jhrg 05.14.08
619  if (d_http_cache_table)
620  d_http_cache_table->set_cache_root(d_cache_root);
621 }
622 
634 void
635 HTTPCache::set_cache_enabled(bool mode)
636 {
637  lock_cache_interface();
638 
639  d_cache_enabled = mode;
640 
641  unlock_cache_interface();
642 }
643 
646 bool
647 HTTPCache::is_cache_enabled() const
648 {
649  DBG2(cerr << "In HTTPCache::is_cache_enabled: (" << d_cache_enabled << ")"
650  << endl);
651  return d_cache_enabled;
652 }
653 
663 void
664 HTTPCache::set_cache_disconnected(CacheDisconnectedMode mode)
665 {
666  lock_cache_interface();
667 
668  d_cache_disconnected = mode;
669 
670  unlock_cache_interface();
671 }
672 
676 HTTPCache::get_cache_disconnected() const
677 {
678  return d_cache_disconnected;
679 }
680 
689 void
690 HTTPCache::set_expire_ignored(bool mode)
691 {
692  lock_cache_interface();
693 
694  d_expire_ignored = mode;
695 
696  unlock_cache_interface();
697 }
698 
699 /* Is the cache ignoring Expires headers returned with responses that have
700  been cached? */
701 
702 bool
703 HTTPCache::is_expire_ignored() const
704 {
705  return d_expire_ignored;
706 }
707 
723 void
724 HTTPCache::set_max_size(unsigned long size)
725 {
726  lock_cache_interface();
727 
728  try {
729  unsigned long new_size = size < MIN_CACHE_TOTAL_SIZE ?
730  MIN_CACHE_TOTAL_SIZE * MEGA : size * MEGA;
731  unsigned long old_size = d_total_size;
732  d_total_size = new_size;
733  d_folder_size = d_total_size / CACHE_FOLDER_PCT;
734  d_gc_buffer = d_total_size / CACHE_GC_PCT;
735 
736  if (new_size < old_size && startGC()) {
737  perform_garbage_collection();
738  d_http_cache_table->cache_index_write();
739  }
740  }
741  catch (...) {
742  unlock_cache_interface();
743  DBGN(cerr << "Unlocking interface." << endl);
744  throw;
745  }
746 
747  DBG2(cerr << "Cache....... Total cache size: " << d_total_size
748  << " with " << d_folder_size
749  << " bytes for meta information and folders and at least "
750  << d_gc_buffer << " bytes free after every gc" << endl);
751 
752  unlock_cache_interface();
753 }
754 
757 unsigned long
758 HTTPCache::get_max_size() const
759 {
760  return d_total_size / MEGA;
761 }
762 
771 void
772 HTTPCache::set_max_entry_size(unsigned long size)
773 {
774  lock_cache_interface();
775 
776  try {
777  unsigned long new_size = size * MEGA;
778  if (new_size > 0 && new_size < d_total_size - d_folder_size) {
779  unsigned long old_size = d_max_entry_size;
780  d_max_entry_size = new_size;
781  if (new_size < old_size && startGC()) {
782  perform_garbage_collection();
783  d_http_cache_table->cache_index_write();
784  }
785  }
786  }
787  catch (...) {
788  unlock_cache_interface();
789  throw;
790  }
791 
792  DBG2(cerr << "Cache...... Max entry cache size is "
793  << d_max_entry_size << endl);
794 
795  unlock_cache_interface();
796 }
797 
802 unsigned long
803 HTTPCache::get_max_entry_size() const
804 {
805  return d_max_entry_size / MEGA;
806 }
807 
818 void
819 HTTPCache::set_default_expiration(const int exp_time)
820 {
821  lock_cache_interface();
822 
823  d_default_expiration = exp_time;
824 
825  unlock_cache_interface();
826 }
827 
830 int
831 HTTPCache::get_default_expiration() const
832 {
833  return d_default_expiration;
834 }
835 
840 void
841 HTTPCache::set_always_validate(bool validate)
842 {
843  d_always_validate = validate;
844 }
845 
849 bool
850 HTTPCache::get_always_validate() const
851 {
852  return d_always_validate;
853 }
854 
871 void
872 HTTPCache::set_cache_control(const vector<string> &cc)
873 {
874  lock_cache_interface();
875 
876  try {
877  d_cache_control = cc;
878 
879  vector<string>::const_iterator i;
880  for (i = cc.begin(); i != cc.end(); ++i) {
881  string header = (*i).substr(0, (*i).find(':'));
882  string value = (*i).substr((*i).find(": ") + 2);
883  if (header != "Cache-Control") {
884  throw InternalErr(__FILE__, __LINE__, "Expected cache control header not found.");
885  }
886  else {
887  if (value == "no-cache" || value == "no-store")
888  d_cache_enabled = false;
889  else if (value.find("max-age") != string::npos) {
890  string max_age = value.substr(value.find("=" + 1));
891  d_max_age = parse_time(max_age.c_str());
892  }
893  else if (value == "max-stale")
894  d_max_stale = 0; // indicates will take anything;
895  else if (value.find("max-stale") != string::npos) {
896  string max_stale = value.substr(value.find("=" + 1));
897  d_max_stale = parse_time(max_stale.c_str());
898  }
899  else if (value.find("min-fresh") != string::npos) {
900  string min_fresh = value.substr(value.find("=" + 1));
901  d_min_fresh = parse_time(min_fresh.c_str());
902  }
903  }
904  }
905  }
906  catch (...) {
907  unlock_cache_interface();
908  throw;
909  }
910 
911  unlock_cache_interface();
912 }
913 
914 
919 vector<string>
920 HTTPCache::get_cache_control()
921 {
922  return d_cache_control;
923 }
924 
926 
935 bool
936 HTTPCache::is_url_in_cache(const string &url)
937 {
938  DBG(cerr << "Is this url in the cache? (" << url << ")" << endl);
939 
940  HTTPCacheTable::CacheEntry *entry = d_http_cache_table->get_locked_entry_from_cache_table(url);
941  bool status = entry != 0;
942  if (entry) {
943  entry->unlock_read_response();
944  }
945  return status;
946 }
947 
953 bool
954 is_hop_by_hop_header(const string &header)
955 {
956  return header.find("Connection") != string::npos
957  || header.find("Keep-Alive") != string::npos
958  || header.find("Proxy-Authenticate") != string::npos
959  || header.find("Proxy-Authorization") != string::npos
960  || header.find("Transfer-Encoding") != string::npos
961  || header.find("Upgrade") != string::npos;
962 }
963 
975 void
976 HTTPCache::write_metadata(const string &cachename, const vector<string> &headers)
977 {
978  string fname = cachename + CACHE_META;
979  d_open_files.push_back(fname);
980 
981  FILE *dest = fopen(fname.c_str(), "w");
982  if (!dest) {
983  throw InternalErr(__FILE__, __LINE__,
984  "Could not open named cache entry file.");
985  }
986 
987  vector<string>::const_iterator i;
988  for (i = headers.begin(); i != headers.end(); ++i) {
989  if (!is_hop_by_hop_header(*i)) {
990  int s = fwrite((*i).c_str(), (*i).size(), 1, dest);
991  if (s != 1) {
992  fclose(dest);
993  throw InternalErr(__FILE__, __LINE__, "could not write header: '" + (*i) + "' " + long_to_string(s));
994  }
995  s = fwrite("\n", 1, 1, dest);
996  if (s != 1) {
997  fclose(dest);
998  throw InternalErr(__FILE__, __LINE__, "could not write header: " + long_to_string(s));
999  }
1000  }
1001  }
1002 
1003  int res = fclose(dest);
1004  if (res) {
1005  DBG(cerr << "HTTPCache::write_metadata - Failed to close "
1006  << dest << endl);
1007  }
1008 
1009  d_open_files.pop_back();
1010 }
1011 
1022 void
1023 HTTPCache::read_metadata(const string &cachename, vector<string> &headers)
1024 {
1025  FILE *md = fopen(string(cachename + CACHE_META).c_str(), "r");
1026  if (!md) {
1027  throw InternalErr(__FILE__, __LINE__,
1028  "Could not open named cache entry meta data file.");
1029  }
1030 
1031  char line[1024];
1032  while (!feof(md) && fgets(line, 1024, md)) {
1033  line[min(1024, static_cast<int>(strlen(line)))-1] = '\0'; // erase newline
1034  headers.push_back(string(line));
1035  }
1036 
1037  int res = fclose(md);
1038  if (res) {
1039  DBG(cerr << "HTTPCache::read_metadata - Failed to close "
1040  << md << endl);
1041  }
1042 }
1043 
1065 int
1066 HTTPCache::write_body(const string &cachename, const FILE *src)
1067 {
1068  d_open_files.push_back(cachename);
1069 
1070  FILE *dest = fopen(cachename.c_str(), "wb");
1071  if (!dest) {
1072  throw InternalErr(__FILE__, __LINE__,
1073  "Could not open named cache entry file.");
1074  }
1075 
1076  // Read and write in 1k blocks; an attempt at doing this efficiently.
1077  // 09/30/02 jhrg
1078  char line[1024];
1079  size_t n;
1080  int total = 0;
1081  while ((n = fread(line, 1, 1024, const_cast<FILE *>(src))) > 0) {
1082  total += fwrite(line, 1, n, dest);
1083  DBG2(sleep(3));
1084  }
1085 
1086  if (ferror(const_cast<FILE *>(src)) || ferror(dest)) {
1087  int res = fclose(dest);
1088  res = res & unlink(cachename.c_str());
1089  if (res) {
1090  DBG(cerr << "HTTPCache::write_body - Failed to close/unlink "
1091  << dest << endl);
1092  }
1093  throw InternalErr(__FILE__, __LINE__,
1094  "I/O error transferring data to the cache.");
1095  }
1096 
1097  rewind(const_cast<FILE *>(src));
1098 
1099  int res = fclose(dest);
1100  if (res) {
1101  DBG(cerr << "HTTPCache::write_body - Failed to close "
1102  << dest << endl);
1103  }
1104 
1105  d_open_files.pop_back();
1106 
1107  return total;
1108 }
1109 
1118 FILE *
1119 HTTPCache::open_body(const string &cachename)
1120 {
1121  DBG(cerr << "cachename: " << cachename << endl);
1122 
1123  FILE *src = fopen(cachename.c_str(), "rb"); // Read only
1124  if (!src)
1125  throw InternalErr(__FILE__, __LINE__, "Could not open cache file.");
1126 
1127  return src;
1128 }
1129 
1155 bool
1156 HTTPCache::cache_response(const string &url, time_t request_time,
1157  const vector<string> &headers, const FILE *body)
1158 {
1159  lock_cache_interface();
1160 
1161  DBG(cerr << "Caching url: " << url << "." << endl);
1162 
1163  try {
1164  // If this is not an http or https URL, don't cache.
1165  if (url.find("http:") == string::npos &&
1166  url.find("https:") == string::npos) {
1167  unlock_cache_interface();
1168  return false;
1169  }
1170 
1171  // This does nothing if url is not already in the cache. It's
1172  // more efficient to do this than to first check and see if the entry
1173  // exists. 10/10/02 jhrg
1174  d_http_cache_table->remove_entry_from_cache_table(url);
1175 
1177  entry->lock_write_response();
1178 
1179  try {
1180  d_http_cache_table->parse_headers(entry, d_max_entry_size, headers); // etag, lm, date, age, expires, max_age.
1181  if (entry->is_no_cache()) {
1182  DBG(cerr << "Not cache-able; deleting HTTPCacheTable::CacheEntry: " << entry
1183  << "(" << url << ")" << endl);
1184  entry->unlock_write_response();
1185  delete entry; entry = 0;
1186  unlock_cache_interface();
1187  return false;
1188  }
1189 
1190  // corrected_initial_age, freshness_lifetime, response_time.
1191  d_http_cache_table->calculate_time(entry, d_default_expiration, request_time);
1192 
1193  d_http_cache_table->create_location(entry); // cachename, cache_body_fd
1194  // move these write function to cache table
1195  entry->set_size(write_body(entry->get_cachename(), body));
1196  write_metadata(entry->get_cachename(), headers);
1197  d_http_cache_table->add_entry_to_cache_table(entry);
1198  entry->unlock_write_response();
1199  }
1200  catch (ResponseTooBigErr &e) {
1201  // Oops. Bummer. Clean up and exit.
1202  DBG(cerr << e.get_error_message() << endl);
1203  REMOVE(entry->get_cachename().c_str());
1204  REMOVE(string(entry->get_cachename() + CACHE_META).c_str());
1205  DBG(cerr << "Too big; deleting HTTPCacheTable::CacheEntry: " << entry << "(" << url
1206  << ")" << endl);
1207  entry->unlock_write_response();
1208  delete entry; entry = 0;
1209  unlock_cache_interface();
1210  return false;
1211  }
1212 
1213  if (d_http_cache_table->get_new_entries() > DUMP_FREQUENCY) {
1214  if (startGC())
1215  perform_garbage_collection();
1216 
1217  d_http_cache_table->cache_index_write(); // resets new_entries
1218  }
1219  }
1220  catch (...) {
1221  unlock_cache_interface();
1222  throw;
1223  }
1224 
1225  unlock_cache_interface();
1226 
1227  return true;
1228 }
1229 
1248 vector<string>
1249 HTTPCache::get_conditional_request_headers(const string &url)
1250 {
1251  lock_cache_interface();
1252 
1253  HTTPCacheTable::CacheEntry *entry = 0;
1254  vector<string> headers;
1255 
1256  DBG(cerr << "Getting conditional request headers for " << url << endl);
1257 
1258  try {
1259  entry = d_http_cache_table->get_locked_entry_from_cache_table(url);
1260  if (!entry)
1261  throw Error(internal_error, "There is no cache entry for the URL: " + url);
1262 
1263  if (entry->get_etag() != "")
1264  headers.push_back(string("If-None-Match: ") + entry->get_etag());
1265 
1266  if (entry->get_lm() > 0) {
1267  time_t lm = entry->get_lm();
1268  headers.push_back(string("If-Modified-Since: ")
1269  + date_time_str(&lm));
1270  }
1271  else if (entry->get_max_age() > 0) {
1272  time_t max_age = entry->get_max_age();
1273  headers.push_back(string("If-Modified-Since: ")
1274  + date_time_str(&max_age));
1275  }
1276  else if (entry->get_expires() > 0) {
1277  time_t expires = entry->get_expires();
1278  headers.push_back(string("If-Modified-Since: ")
1279  + date_time_str(&expires));
1280  }
1281  entry->unlock_read_response();
1282  unlock_cache_interface();
1283  }
1284  catch (...) {
1285  unlock_cache_interface();
1286  if (entry) {
1287  entry->unlock_read_response();
1288  }
1289  throw;
1290  }
1291 
1292  return headers;
1293 }
1294 
1298 struct HeaderLess: binary_function<const string&, const string&, bool>
1299 {
1300  bool operator()(const string &s1, const string &s2) const {
1301  return s1.substr(0, s1.find(':')) < s2.substr(0, s2.find(':'));
1302  }
1303 };
1304 
1318 void
1319 HTTPCache::update_response(const string &url, time_t request_time,
1320  const vector<string> &headers)
1321 {
1322  lock_cache_interface();
1323 
1324  HTTPCacheTable::CacheEntry *entry = 0;
1325  DBG(cerr << "Updating the response headers for: " << url << endl);
1326 
1327  try {
1328  entry = d_http_cache_table->get_write_locked_entry_from_cache_table(url);
1329  if (!entry)
1330  throw Error(internal_error, "There is no cache entry for the URL: " + url);
1331 
1332  // Merge the new headers with the exiting HTTPCacheTable::CacheEntry object.
1333  d_http_cache_table->parse_headers(entry, d_max_entry_size, headers);
1334 
1335  // Update corrected_initial_age, freshness_lifetime, response_time.
1336  d_http_cache_table->calculate_time(entry, d_default_expiration, request_time);
1337 
1338  // Merge the new headers with those in the persistent store. How:
1339  // Load the new headers into a set, then merge the old headers. Since
1340  // set<> ignores duplicates, old headers with the same name as a new
1341  // header will got into the bit bucket. Define a special compare
1342  // functor to make sure that headers are compared using only their
1343  // name and not their value too.
1344  set<string, HeaderLess> merged_headers;
1345 
1346  // Load in the new headers
1347  copy(headers.begin(), headers.end(),
1348  inserter(merged_headers, merged_headers.begin()));
1349 
1350  // Get the old headers and load them in.
1351  vector<string> old_headers;
1352  read_metadata(entry->get_cachename(), old_headers);
1353  copy(old_headers.begin(), old_headers.end(),
1354  inserter(merged_headers, merged_headers.begin()));
1355 
1356  // Read the values back out. Use reverse iterators with back_inserter
1357  // to preserve header order. NB: vector<> does not support push_front
1358  // so we can't use front_inserter(). 01/09/03 jhrg
1359  vector<string> result;
1360  copy(merged_headers.rbegin(), merged_headers.rend(),
1361  back_inserter(result));
1362 
1363  write_metadata(entry->get_cachename(), result);
1364  entry->unlock_write_response();
1365  unlock_cache_interface();
1366  }
1367  catch (...) {
1368  if (entry) {
1369  entry->unlock_read_response();
1370  }
1371  unlock_cache_interface();
1372  throw;
1373  }
1374 }
1375 
1387 bool
1388 HTTPCache::is_url_valid(const string &url)
1389 {
1390  lock_cache_interface();
1391 
1392  bool freshness;
1393  HTTPCacheTable::CacheEntry *entry = 0;
1394 
1395  DBG(cerr << "Is this URL valid? (" << url << ")" << endl);
1396 
1397  try {
1398  if (d_always_validate) {
1399  unlock_cache_interface();
1400  return false; // force re-validation.
1401  }
1402 
1403  entry = d_http_cache_table->get_locked_entry_from_cache_table(url);
1404  if (!entry)
1405  throw Error(internal_error, "There is no cache entry for the URL: " + url);
1406 
1407  // If we supported range requests, we'd need code here to check if
1408  // there was only a partial response in the cache. 10/02/02 jhrg
1409 
1410  // In case this entry is of type "must-revalidate" then we consider it
1411  // invalid.
1412  if (entry->get_must_revalidate()) {
1413  entry->unlock_read_response();
1414  unlock_cache_interface();
1415  return false;
1416  }
1417 
1418  time_t resident_time = time(NULL) - entry->get_response_time();
1419  time_t current_age = entry->get_corrected_initial_age() + resident_time;
1420 
1421  // Check that the max-age, max-stale, and min-fresh directives
1422  // given in the request cache control header is followed.
1423  if (d_max_age >= 0 && current_age > d_max_age) {
1424  DBG(cerr << "Cache....... Max-age validation" << endl);
1425  entry->unlock_read_response();
1426  unlock_cache_interface();
1427  return false;
1428  }
1429  if (d_min_fresh >= 0
1430  && entry->get_freshness_lifetime() < current_age + d_min_fresh) {
1431  DBG(cerr << "Cache....... Min-fresh validation" << endl);
1432  entry->unlock_read_response();
1433  unlock_cache_interface();
1434  return false;
1435  }
1436 
1437  freshness = (entry->get_freshness_lifetime()
1438  + (d_max_stale >= 0 ? d_max_stale : 0) > current_age);
1439  entry->unlock_read_response();
1440  unlock_cache_interface();
1441  }
1442  catch (...) {
1443  if (entry) {
1444  entry->unlock_read_response();
1445  }
1446  unlock_cache_interface();
1447  throw;
1448  }
1449 
1450  return freshness;
1451 }
1452 
1480 FILE * HTTPCache::get_cached_response(const string &url,
1481  vector<string> &headers, string &cacheName) {
1482  lock_cache_interface();
1483 
1484  FILE *body = 0;
1485  HTTPCacheTable::CacheEntry *entry = 0;
1486 
1487  DBG(cerr << "Getting the cached response for " << url << endl);
1488 
1489  try {
1490  entry = d_http_cache_table->get_locked_entry_from_cache_table(url);
1491  if (!entry) {
1492  unlock_cache_interface();
1493  return 0;
1494  }
1495 
1496  cacheName = entry->get_cachename();
1497  read_metadata(entry->get_cachename(), headers);
1498 
1499  DBG(cerr << "Headers just read from cache: " << endl);
1500  DBGN(copy(headers.begin(), headers.end(), ostream_iterator<string>(cerr, "\n")));
1501 
1502  body = open_body(entry->get_cachename());
1503 
1504  DBG(cerr << "Returning: " << url << " from the cache." << endl);
1505 
1506  d_http_cache_table->bind_entry_to_data(entry, body);
1507  }
1508  catch (...) {
1509  // Why make this unlock operation conditional on entry?
1510  if (entry)
1511  unlock_cache_interface();
1512  if (body != 0)
1513  fclose(body);
1514  throw;
1515  }
1516 
1517  unlock_cache_interface();
1518 
1519  return body;
1520 }
1521 
1533 FILE *
1534 HTTPCache::get_cached_response(const string &url, vector<string> &headers)
1535 {
1536  string discard_name;
1537  return get_cached_response(url, headers, discard_name);
1538 }
1539 
1550 FILE *
1551 HTTPCache::get_cached_response(const string &url)
1552 {
1553  string discard_name;
1554  vector<string> discard_headers;
1555  return get_cached_response(url, discard_headers, discard_name);
1556 }
1557 
1570 void
1571 HTTPCache::release_cached_response(FILE *body)
1572 {
1573  lock_cache_interface();
1574 
1575  try {
1576  // fclose(body); This results in a seg fault on linux jhrg 8/27/13
1577  d_http_cache_table->uncouple_entry_from_data(body);
1578  }
1579  catch (...) {
1580  unlock_cache_interface();
1581  throw;
1582  }
1583 
1584  unlock_cache_interface();
1585 }
1586 
1599 void
1600 HTTPCache::purge_cache()
1601 {
1602  lock_cache_interface();
1603 
1604  try {
1605  if (d_http_cache_table->is_locked_read_responses())
1606  throw Error(internal_error, "Attempt to purge the cache with entries in use.");
1607 
1608  d_http_cache_table->delete_all_entries();
1609  }
1610  catch (...) {
1611  unlock_cache_interface();
1612  throw;
1613  }
1614 
1615  unlock_cache_interface();
1616 }
1617 
1618 } // namespace libdap
time_t parse_time(const char *str, bool expand)
Definition: util_mit.cc:129
- - -
STL namespace.
- -
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
bool is_hop_by_hop_header(const string &header)
Definition: HTTPCache.cc:954
-
string date_time_str(time_t *calendar, bool local)
Definition: util_mit.cc:281
-
std::string get_error_message() const
Definition: Error.cc:278
- - - - -
A class for error processing.
Definition: Error.h:92
- - -
-
- - - - diff --git a/html/HTTPCache_8h_source.html b/html/HTTPCache_8h_source.html deleted file mode 100644 index b271bfca1..000000000 --- a/html/HTTPCache_8h_source.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - - -libdap: HTTPCache.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
HTTPCache.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2008 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef _http_cache_h
27 #define _http_cache_h
28 
29 #include <pthread.h>
30 
31 #ifdef WIN32
32 #include <io.h> // stat for win32? 09/05/02 jhrg
33 #endif
34 
35 #include <string>
36 #include <vector>
37 #include <map>
38 
39 #include "HTTPCacheTable.h" // included for macros
40 
41 #include "HTTPCacheDisconnectedMode.h"
42 //using namespace std;
43 
44 namespace libdap
45 {
46 
47 class HTTPCacheTabe;
48 
49 // This function is exported so the test code can use it too.
50 bool is_hop_by_hop_header(const string &header);
51 
104 {
105 private:
106  string d_cache_root;
107  FILE *d_locked_open_file; // Lock for single process use.
108 
109  bool d_cache_enabled;
110  bool d_cache_protected;
111  CacheDisconnectedMode d_cache_disconnected;
112  bool d_expire_ignored;
113  bool d_always_validate;
114 
115  unsigned long d_total_size; // How much can we store?
116  unsigned long d_folder_size; // How much of that is meta data?
117  unsigned long d_gc_buffer; // How much memory needed as buffer?
118  unsigned long d_max_entry_size; // Max individual entry size.
119  int d_default_expiration;
120 
121  vector<string> d_cache_control;
122  // these are values read from a request-directive Cache-Control header.
123  // Not to be confused with values read from the response or a cached
124  // response (e.g., CacheEntry has a max_age field, too). These fields are
125  // set when the set_cache_control method is called.
126  time_t d_max_age;
127  time_t d_max_stale; // -1: not set, 0:any response, >0 max time.
128  time_t d_min_fresh;
129 
130  // Lock non-const methods (also ones that use the STL).
131  pthread_mutex_t d_cache_mutex;
132 
133  HTTPCacheTable *d_http_cache_table;
134 
135  // d_open_files is used by the interrupt handler to clean up
136  vector<string> d_open_files;
137 
138  static HTTPCache *_instance;
139 
140  friend class HTTPCacheTest; // Unit tests
141  friend class HTTPConnectTest;
142 
143  friend class HTTPCacheInterruptHandler;
144 
145  // Private methods
146  HTTPCache(const HTTPCache &);
147  HTTPCache();
148  HTTPCache &operator=(const HTTPCache &);
149 
150  HTTPCache(string cache_root, bool force);
151 
152  static void delete_instance(); // Run by atexit (hence static)
153 
154  void set_cache_root(const string &root = "");
155  void create_cache_root(const string &cache_root);
156 
157  // These will go away when the cache can be used by multiple processes.
158  bool get_single_user_lock(bool force = false);
159  void release_single_user_lock();
160 
161  bool is_url_in_cache(const string &url);
162 
163  // I made these four methods so they could be tested by HTTPCacheTest.
164  // Otherwise they would be static functions. jhrg 10/01/02
165  void write_metadata(const string &cachename, const vector<string> &headers);
166  void read_metadata(const string &cachename, vector<string> &headers);
167  int write_body(const string &cachename, const FILE *src);
168  FILE *open_body(const string &cachename);
169 
170  bool stopGC() const;
171  bool startGC() const;
172 
173  void perform_garbage_collection();
174  void too_big_gc();
175  void expired_gc();
176  void hits_gc();
177 
178 public:
179  static HTTPCache *instance(const string &cache_root, bool force = false);
180  virtual ~HTTPCache();
181 
182  string get_cache_root() const;
183 
184  void set_cache_enabled(bool mode);
185  bool is_cache_enabled() const;
186 
189 
190  void set_expire_ignored(bool mode);
191  bool is_expire_ignored() const;
192 
193  void set_max_size(unsigned long size);
194  unsigned long get_max_size() const;
195 
196  void set_max_entry_size(unsigned long size);
197  unsigned long get_max_entry_size() const;
198 
199  void set_default_expiration(int exp_time);
200  int get_default_expiration() const;
201 
202  void set_always_validate(bool validate);
203  bool get_always_validate() const;
204 
205  void set_cache_control(const vector<string> &cc);
206  vector<string> get_cache_control();
207 
208  void lock_cache_interface() {
209  DBG(cerr << "Locking interface... ");
210  LOCK(&d_cache_mutex);
211  DBGN(cerr << "Done" << endl);
212  }
213  void unlock_cache_interface() {
214  DBG(cerr << "Unlocking interface... " );
215  UNLOCK(&d_cache_mutex);
216  DBGN(cerr << "Done" << endl);
217  }
218 
219  // This must lock for writing
220  bool cache_response(const string &url, time_t request_time,
221  const vector<string> &headers, const FILE *body);
222  void update_response(const string &url, time_t request_time,
223  const vector<string> &headers);
224 
225  // This is separate from get_cached_response() because often an invalid
226  // cache entry just needs a header update. That is best left to the HTTP
227  // Connection code.
228  bool is_url_valid(const string &url);
229 
230  // Lock these for reading
231  vector<string> get_conditional_request_headers(const string &url);
232  FILE *get_cached_response(const string &url, vector<string> &headers,
233  string &cacheName);
234  FILE *get_cached_response(const string &url, vector<string> &headers);
235  FILE *get_cached_response(const string &url);
236 
237  void release_cached_response(FILE *response);
238 
239  void purge_cache();
240 };
241 
242 } // namespace libdap
243 
244 #endif // _http_cache_h
vector< string > get_conditional_request_headers(const string &url)
Definition: HTTPCache.cc:1249
-
vector< string > get_cache_control()
Definition: HTTPCache.cc:920
-
void set_cache_enabled(bool mode)
Definition: HTTPCache.cc:635
- -
bool is_url_valid(const string &url)
Definition: HTTPCache.cc:1388
-
virtual ~HTTPCache()
Definition: HTTPCache.cc:302
-
static HTTPCache * instance(const string &cache_root, bool force=false)
Definition: HTTPCache.cc:129
-
void set_max_size(unsigned long size)
Definition: HTTPCache.cc:724
-
string get_cache_root() const
Definition: HTTPCache.cc:516
-
FILE * get_cached_response(const string &url, vector< string > &headers, string &cacheName)
Definition: HTTPCache.cc:1480
-
unsigned long get_max_entry_size() const
Definition: HTTPCache.cc:803
- -
CacheDisconnectedMode get_cache_disconnected() const
Definition: HTTPCache.cc:676
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
int get_default_expiration() const
Definition: HTTPCache.cc:831
-
bool is_hop_by_hop_header(const string &header)
Definition: HTTPCache.cc:954
- -
unsigned long get_max_size() const
Definition: HTTPCache.cc:758
-
void update_response(const string &url, time_t request_time, const vector< string > &headers)
Definition: HTTPCache.cc:1319
-
void set_cache_control(const vector< string > &cc)
Definition: HTTPCache.cc:872
-
bool cache_response(const string &url, time_t request_time, const vector< string > &headers, const FILE *body)
Definition: HTTPCache.cc:1156
- - -
bool is_cache_enabled() const
Definition: HTTPCache.cc:647
-
void set_always_validate(bool validate)
Definition: HTTPCache.cc:841
-
void set_default_expiration(int exp_time)
Definition: HTTPCache.cc:819
-
void release_cached_response(FILE *response)
Definition: HTTPCache.cc:1571
-
void set_expire_ignored(bool mode)
Definition: HTTPCache.cc:690
-
bool get_always_validate() const
Definition: HTTPCache.cc:850
-
void set_max_entry_size(unsigned long size)
Definition: HTTPCache.cc:772
-
void set_cache_disconnected(CacheDisconnectedMode mode)
Definition: HTTPCache.cc:664
-
-
- - - - diff --git a/html/HTTPConnect_8cc_source.html b/html/HTTPConnect_8cc_source.html deleted file mode 100644 index 0bd6299cb..000000000 --- a/html/HTTPConnect_8cc_source.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - -libdap: HTTPConnect.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
HTTPConnect.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 
27 #include "config.h"
28 
29 #ifdef HAVE_UNISTD_H
30 #include <unistd.h>
31 #endif
32 
33 #include <sys/stat.h>
34 
35 #ifdef WIN32
36 #include <io.h>
37 #endif
38 
39 #include <string>
40 #include <vector>
41 #include <functional>
42 #include <algorithm>
43 #include <sstream>
44 #include <fstream>
45 #include <iterator>
46 #include <cstdlib>
47 #include <cstring>
48 #include <cerrno>
49 
50 //#define DODS_DEBUG2
51 //#define HTTP_TRACE
52 //#define DODS_DEBUG
53 
54 #undef USE_GETENV
55 
56 
57 #include "debug.h"
58 #include "mime_util.h"
59 #include "media_types.h"
60 #include "GNURegex.h"
61 #include "HTTPCache.h"
62 #include "HTTPConnect.h"
63 #include "RCReader.h"
64 #include "HTTPResponse.h"
65 #include "HTTPCacheResponse.h"
66 
67 using namespace std;
68 
69 namespace libdap {
70 
71 // These global variables are not MT-Safe, but I'm leaving them as is because
72 // they are used only for debugging (set them in a debugger like gdb or ddd).
73 // They are not static because I think that many debuggers cannot access
74 // static variables. 08/07/02 jhrg
75 
76 // Set this to 1 to turn on libcurl's verbose mode (for debugging).
77 int www_trace = 0;
78 
79 // Set this to 1 to turn on libcurl's VERY verbose mode.
80 int www_trace_extensive = 0;
81 
82 // Keep the temporary files; useful for debugging.
83 int dods_keep_temps = 0;
84 
85 #define CLIENT_ERR_MIN 400
86 #define CLIENT_ERR_MAX 417
87 static const char *http_client_errors[CLIENT_ERR_MAX - CLIENT_ERR_MIN +1] =
88  {
89  "Bad Request:",
90  "Unauthorized: Contact the server administrator.",
91  "Payment Required.",
92  "Forbidden: Contact the server administrator.",
93  "Not Found: The data source or server could not be found.\n\
94  Often this means that the OPeNDAP server is missing or needs attention.\n\
95  Please contact the server administrator.",
96  "Method Not Allowed.",
97  "Not Acceptable.",
98  "Proxy Authentication Required.",
99  "Request Time-out.",
100  "Conflict.",
101  "Gone:.",
102  "Length Required.",
103  "Precondition Failed.",
104  "Request Entity Too Large.",
105  "Request URI Too Large.",
106  "Unsupported Media Type.",
107  "Requested Range Not Satisfiable.",
108  "Expectation Failed."
109  };
110 
111 #define SERVER_ERR_MIN 500
112 #define SERVER_ERR_MAX 505
113 static const char *http_server_errors[SERVER_ERR_MAX - SERVER_ERR_MIN + 1] =
114  {
115  "Internal Server Error.",
116  "Not Implemented.",
117  "Bad Gateway.",
118  "Service Unavailable.",
119  "Gateway Time-out.",
120  "HTTP Version Not Supported."
121  };
122 
125 static string
126 http_status_to_string(int status)
127 {
128  if (status >= CLIENT_ERR_MIN && status <= CLIENT_ERR_MAX)
129  return string(http_client_errors[status - CLIENT_ERR_MIN]);
130  else if (status >= SERVER_ERR_MIN && status <= SERVER_ERR_MAX)
131  return string(http_server_errors[status - SERVER_ERR_MIN]);
132  else
133  return string("Unknown Error: This indicates a problem with libdap++.\nPlease report this to support@opendap.org.");
134 }
135 
136 static ObjectType
137 determine_object_type(const string &header_value)
138 {
139  // DAP4 Data: application/vnd.opendap.dap4.data
140  // DAP4 DMR: application/vnd.opendap.dap4.dataset-metadata+xml
141 
142  string::size_type plus = header_value.find('+');
143  string base_type;
144  string type_extension = "";
145  if (plus != string::npos) {
146  base_type= header_value.substr(0, plus);
147  type_extension = header_value.substr(plus+1);
148  }
149  else
150  base_type = header_value;
151 
152  if (base_type == DMR_Content_Type
153  || (base_type.find("application/") != string::npos
154  && base_type.find("dap4.dataset-metadata") != string::npos)) {
155  if (type_extension == "xml")
156  return dap4_dmr;
157  else
158  return unknown_type;
159  }
160  else if (base_type == DAP4_DATA_Content_Type
161  || (base_type.find("application/") != string::npos
162  && base_type.find("dap4.data") != string::npos)) {
163  return dap4_data;
164  }
165  else if (header_value.find("text/html") != string::npos) {
166  return web_error;
167  }
168  else
169  return unknown_type;
170 }
171 
176 class ParseHeader : public unary_function<const string &, void>
177 {
178  ObjectType type; // What type of object is in the stream?
179  string server; // Server's version string.
180  string protocol; // Server's protocol version.
181  string location; // Url returned by server
182 
183 public:
184  ParseHeader() : type(unknown_type), server("dods/0.0"), protocol("2.0")
185  { }
186 
187  void operator()(const string &line)
188  {
189  string name, value;
190  parse_mime_header(line, name, value);
191 
192  DBG2(cerr << name << ": " << value << endl);
193 
194  // Content-Type is used to determine the content of DAP4 responses, but allow the
195  // Content-Description header to override CT o preserve operation with DAP2 servers.
196  // jhrg 11/12/13
197  if (type == unknown_type && name == "content-type") {
198  type = determine_object_type(value); // see above
199  }
200  if (name == "content-description" && !(type == dap4_dmr || type == dap4_data || type == dap4_error)) {
201  type = get_description_type(value); // defined in mime_util.cc
202  }
203  // The second test (== "dods/0.0") tests if xopendap-server has already
204  // been seen. If so, use that header in preference to the old
205  // XDODS-Server header. jhrg 2/7/06
206  else if (name == "xdods-server" && server == "dods/0.0") {
207  server = value;
208  }
209  else if (name == "xopendap-server") {
210  server = value;
211  }
212  else if (name == "xdap") {
213  protocol = value;
214  }
215  else if (server == "dods/0.0" && name == "server") {
216  server = value;
217  }
218  else if (name == "location") {
219  location = value;
220  }
221  }
222 
223  ObjectType get_object_type()
224  {
225  return type;
226  }
227 
228  string get_server()
229  {
230  return server;
231  }
232 
233  string get_protocol()
234  {
235  return protocol;
236  }
237 
238  string get_location() {
239  return location;
240  }
241 };
242 
258 static size_t
259 save_raw_http_headers(void *ptr, size_t size, size_t nmemb, void *resp_hdrs)
260 {
261  DBG2(cerr << "Inside the header parser." << endl);
262  vector<string> *hdrs = static_cast<vector<string> * >(resp_hdrs);
263 
264  // Grab the header, minus the trailing newline. Or \r\n pair.
265  string complete_line;
266  if (nmemb > 1 && *(static_cast<char*>(ptr) + size * (nmemb - 2)) == '\r')
267  complete_line.assign(static_cast<char *>(ptr), size * (nmemb - 2));
268  else
269  complete_line.assign(static_cast<char *>(ptr), size * (nmemb - 1));
270 
271  // Store all non-empty headers that are not HTTP status codes
272  if (complete_line != "" && complete_line.find("HTTP") == string::npos) {
273  DBG(cerr << "Header line: " << complete_line << endl);
274  hdrs->push_back(complete_line);
275  }
276 
277  return size * nmemb;
278 }
279 
281 static int
282 curl_debug(CURL *, curl_infotype info, char *msg, size_t size, void *)
283 {
284  string message(msg, size);
285 
286  switch (info) {
287  case CURLINFO_TEXT:
288  cerr << "Text: " << message; break;
289  case CURLINFO_HEADER_IN:
290  cerr << "Header in: " << message; break;
291  case CURLINFO_HEADER_OUT:
292  cerr << "Header out: " << message; break;
293  case CURLINFO_DATA_IN:
294  if (www_trace_extensive)
295  cerr << "Data in: " << message; break;
296  case CURLINFO_DATA_OUT:
297  if (www_trace_extensive)
298  cerr << "Data out: " << message; break;
299  case CURLINFO_END:
300  cerr << "End: " << message; break;
301 #ifdef CURLINFO_SSL_DATA_IN
302  case CURLINFO_SSL_DATA_IN:
303  cerr << "SSL Data in: " << message; break;
304 #endif
305 #ifdef CURLINFO_SSL_DATA_OUT
306  case CURLINFO_SSL_DATA_OUT:
307  cerr << "SSL Data out: " << message; break;
308 #endif
309  default:
310  if (www_trace_extensive)
311  cerr << "Curl info: " << message; break;
312  }
313  return 0;
314 }
315 
319 void
320 HTTPConnect::www_lib_init()
321 {
322  d_curl = curl_easy_init();
323  if (!d_curl)
324  throw InternalErr(__FILE__, __LINE__, "Could not initialize libcurl.");
325 
326  // Now set options that will remain constant for the duration of this
327  // CURL object.
328 
329  // Set the proxy host.
330  if (!d_rcr->get_proxy_server_host().empty()) {
331  DBG(cerr << "Setting up a proxy server." << endl);
332  DBG(cerr << "Proxy host: " << d_rcr->get_proxy_server_host()
333  << endl);
334  DBG(cerr << "Proxy port: " << d_rcr->get_proxy_server_port()
335  << endl);
336  DBG(cerr << "Proxy pwd : " << d_rcr->get_proxy_server_userpw()
337  << endl);
338  curl_easy_setopt(d_curl, CURLOPT_PROXY,
339  d_rcr->get_proxy_server_host().c_str());
340  curl_easy_setopt(d_curl, CURLOPT_PROXYPORT,
341  d_rcr->get_proxy_server_port());
342 
343  // As of 4/21/08 only NTLM, Digest and Basic work.
344 #ifdef CURLOPT_PROXYAUTH
345  curl_easy_setopt(d_curl, CURLOPT_PROXYAUTH, (long)CURLAUTH_ANY);
346 #endif
347 
348  // Password might not be required. 06/21/04 jhrg
349  if (!d_rcr->get_proxy_server_userpw().empty())
350  curl_easy_setopt(d_curl, CURLOPT_PROXYUSERPWD,
351  d_rcr->get_proxy_server_userpw().c_str());
352  }
353 
354  curl_easy_setopt(d_curl, CURLOPT_ERRORBUFFER, d_error_buffer);
355  // We have to set FailOnError to false for any of the non-Basic
356  // authentication schemes to work. 07/28/03 jhrg
357  curl_easy_setopt(d_curl, CURLOPT_FAILONERROR, 0);
358 
359  // This means libcurl will use Basic, Digest, GSS Negotiate, or NTLM,
360  // choosing the the 'safest' one supported by the server.
361  // This requires curl 7.10.6 which is still in pre-release. 07/25/03 jhrg
362  curl_easy_setopt(d_curl, CURLOPT_HTTPAUTH, (long)CURLAUTH_ANY);
363 
364  curl_easy_setopt(d_curl, CURLOPT_NOPROGRESS, 1);
365  curl_easy_setopt(d_curl, CURLOPT_NOSIGNAL, 1);
366  curl_easy_setopt(d_curl, CURLOPT_HEADERFUNCTION, save_raw_http_headers);
367  // In read_url a call to CURLOPT_WRITEHEADER is used to set the fourth
368  // param of save_raw_http_headers to a vector<string> object.
369 
370  // Follow 302 (redirect) responses
371  curl_easy_setopt(d_curl, CURLOPT_FOLLOWLOCATION, 1);
372  curl_easy_setopt(d_curl, CURLOPT_MAXREDIRS, 5);
373 
374  // If the user turns off SSL validation...
375  if (d_rcr->get_validate_ssl() == 0) {
376  curl_easy_setopt(d_curl, CURLOPT_SSL_VERIFYPEER, 0);
377  curl_easy_setopt(d_curl, CURLOPT_SSL_VERIFYHOST, 0);
378  }
379 
380  // Set libcurl to use netrc to access data behind URS auth.
381  // libcurl will use the provided pathname for the ~/.netrc info. 08/23/19 kln
382  curl_easy_setopt(d_curl, CURLOPT_NETRC, 1);
383 
384  // Look to see if cookies are turned on in the .dodsrc file. If so,
385  // activate here. We honor 'session cookies' (cookies without an
386  // expiration date) here so that session-based SSO systems will work as
387  // expected.
388  if (!d_cookie_jar.empty()) {
389  DBG(cerr << "Setting the cookie jar to: " << d_cookie_jar << endl);
390  curl_easy_setopt(d_curl, CURLOPT_COOKIEJAR, d_cookie_jar.c_str());
391  curl_easy_setopt(d_curl, CURLOPT_COOKIESESSION, 1);
392  }
393 
394  if (www_trace) {
395  cerr << "Curl version: " << curl_version() << endl;
396  curl_easy_setopt(d_curl, CURLOPT_VERBOSE, 1);
397  curl_easy_setopt(d_curl, CURLOPT_DEBUGFUNCTION, curl_debug);
398  }
399 }
400 
404 class BuildHeaders : public unary_function<const string &, void>
405 {
406  struct curl_slist *d_cl;
407 
408 public:
409  BuildHeaders() : d_cl(0)
410  {}
411 
412  void operator()(const string &header)
413  {
414  DBG(cerr << "Adding '" << header.c_str() << "' to the header list."
415  << endl);
416  d_cl = curl_slist_append(d_cl, header.c_str());
417  }
418 
419  struct curl_slist *get_headers()
420  {
421  return d_cl;
422  }
423 };
424 
439 long
440 HTTPConnect::read_url(const string &url, FILE *stream, vector<string> *resp_hdrs, const vector<string> *headers)
441 {
442  curl_easy_setopt(d_curl, CURLOPT_URL, url.c_str());
443 
444 #ifdef WIN32
445  // See the curl documentation for CURLOPT_FILE (aka CURLOPT_WRITEDATA)
446  // and the CURLOPT_WRITEFUNCTION option. Quote: "If you are using libcurl as
447  // a win32 DLL, you MUST use the CURLOPT_WRITEFUNCTION option if you set the
448  // CURLOPT_WRITEDATA option or you will experience crashes". At the root of
449  // this issue is that one should not pass a FILE * to a windows DLL. Close
450  // inspection of libcurl yields that their default write function when using
451  // the CURLOPT_WRITEDATA is just "fwrite".
452  curl_easy_setopt(d_curl, CURLOPT_WRITEDATA, stream);
453  curl_easy_setopt(d_curl, CURLOPT_WRITEFUNCTION, &fwrite);
454 #else
455  curl_easy_setopt(d_curl, CURLOPT_WRITEDATA, stream);
456 #endif
457 
458  DBG(copy(d_request_headers.begin(), d_request_headers.end(),
459  ostream_iterator<string>(cerr, "\n")));
460 
461  BuildHeaders req_hdrs;
462  req_hdrs = for_each(d_request_headers.begin(), d_request_headers.end(),
463  req_hdrs);
464  if (headers)
465  req_hdrs = for_each(headers->begin(), headers->end(), req_hdrs);
466 
467  curl_easy_setopt(d_curl, CURLOPT_HTTPHEADER, req_hdrs.get_headers());
468 
469  // Turn off the proxy for this URL?
470  bool temporary_proxy = false;
471  if ((temporary_proxy = url_uses_no_proxy_for(url))) {
472  DBG(cerr << "Suppress proxy for url: " << url << endl);
473  curl_easy_setopt(d_curl, CURLOPT_PROXY, 0);
474  }
475 
476  string::size_type at_sign = url.find('@');
477  // Assume username:password present *and* assume it's an HTTP URL; it *is*
478  // HTTPConnect, after all. 7 is position after "http://"; the second arg
479  // to substr() is the sub string length.
480  if (at_sign != url.npos)
481  d_upstring = url.substr(7, at_sign - 7);
482 
483  if (!d_upstring.empty())
484  curl_easy_setopt(d_curl, CURLOPT_USERPWD, d_upstring.c_str());
485 
486  // Pass save_raw_http_headers() a pointer to the vector<string> where the
487  // response headers may be stored. Callers can use the resp_hdrs
488  // value/result parameter to get the raw response header information .
489  curl_easy_setopt(d_curl, CURLOPT_WRITEHEADER, resp_hdrs);
490 
491  // This is the call that causes curl to go and get the remote resource and "write it down"
492  // utilizing the configuration state that has been previously conditioned by various perturbations
493  // of calls to curl_easy_setopt().
494  CURLcode res = curl_easy_perform(d_curl);
495 
496  // Free the header list and null the value in d_curl.
497  curl_slist_free_all(req_hdrs.get_headers());
498  curl_easy_setopt(d_curl, CURLOPT_HTTPHEADER, 0);
499 
500  // Reset the proxy?
501  if (temporary_proxy && !d_rcr->get_proxy_server_host().empty())
502  curl_easy_setopt(d_curl, CURLOPT_PROXY,
503  d_rcr->get_proxy_server_host().c_str());
504 
505  if (res != 0)
506  throw Error(d_error_buffer);
507 
508  long status;
509  res = curl_easy_getinfo(d_curl, CURLINFO_HTTP_CODE, &status);
510  if (res != 0)
511  throw Error(d_error_buffer);
512 
513  char *ct_ptr = 0;
514  res = curl_easy_getinfo(d_curl, CURLINFO_CONTENT_TYPE, &ct_ptr);
515  if (res == CURLE_OK && ct_ptr)
516  d_content_type = ct_ptr;
517  else
518  d_content_type = "";
519 
520  return status;
521 }
522 
526 bool
527 HTTPConnect::url_uses_proxy_for(const string &url)
528 {
529  if (d_rcr->is_proxy_for_used()) {
530  Regex host_regex(d_rcr->get_proxy_for_regexp().c_str());
531  int index = 0, matchlen;
532  return host_regex.search(url.c_str(), url.size(), matchlen, index) != -1;
533  }
534 
535  return false;
536 }
537 
541 bool
542 HTTPConnect::url_uses_no_proxy_for(const string &url) throw()
543 {
544  return d_rcr->is_no_proxy_for_used()
545  && url.find(d_rcr->get_no_proxy_for_host()) != string::npos;
546 }
547 
548 // Public methods. Mostly...
549 
556 HTTPConnect::HTTPConnect(RCReader *rcr, bool use_cpp) : d_username(""), d_password(""), d_cookie_jar(""),
557  d_dap_client_protocol_major(2), d_dap_client_protocol_minor(0), d_use_cpp_streams(use_cpp)
558 
559 {
560  d_accept_deflate = rcr->get_deflate();
561  d_rcr = rcr;
562 
563  // Load in the default headers to send with a request. The empty Pragma
564  // headers overrides libcurl's default Pragma: no-cache header (which
565  // will disable caching by Squid, et c.). The User-Agent header helps
566  // make server logs more readable. 05/05/03 jhrg
567  d_request_headers.push_back(string("Pragma:"));
568  string user_agent = string("User-Agent: ") + string(CNAME)
569  + string("/") + string(CVER);
570  d_request_headers.push_back(user_agent);
571  if (d_accept_deflate)
572  d_request_headers.push_back(string("Accept-Encoding: deflate, gzip, compress"));
573 
574  // HTTPCache::instance returns a valid ptr or 0.
575  if (d_rcr->get_use_cache())
576  d_http_cache = HTTPCache::instance(d_rcr->get_dods_cache_root(),true);
577  else
578  d_http_cache = 0;
579 
580  DBG2(cerr << "Cache object created (" << hex << d_http_cache << dec
581  << ")" << endl);
582 
583  if (d_http_cache) {
584  d_http_cache->set_cache_enabled(d_rcr->get_use_cache());
585  d_http_cache->set_expire_ignored(d_rcr->get_ignore_expires() != 0);
586  d_http_cache->set_max_size(d_rcr->get_max_cache_size());
587  d_http_cache->set_max_entry_size(d_rcr->get_max_cached_obj());
588  d_http_cache->set_default_expiration(d_rcr->get_default_expires());
589  d_http_cache->set_always_validate(d_rcr->get_always_validate() != 0);
590  }
591 
592  d_cookie_jar = rcr->get_cookie_jar();
593 
594  www_lib_init(); // This may throw either Error or InternalErr
595 }
596 
597 HTTPConnect::~HTTPConnect()
598 {
599  DBG2(cerr << "Entering the HTTPConnect dtor" << endl);
600 
601  curl_easy_cleanup(d_curl);
602 
603  DBG2(cerr << "Leaving the HTTPConnect dtor" << endl);
604 }
605 
607 class HeaderMatch : public unary_function<const string &, bool> {
608  const string &d_header;
609  public:
610  HeaderMatch(const string &header) : d_header(header) {}
611  bool operator()(const string &arg) { return arg.find(d_header) == 0; }
612 };
613 
626 HTTPResponse *
627 HTTPConnect::fetch_url(const string &url)
628 {
629 #ifdef HTTP_TRACE
630  cout << "GET " << url << " HTTP/1.0" << endl;
631 #endif
632 
633  HTTPResponse *stream;
634 
635  if (/*d_http_cache && d_http_cache->*/is_cache_enabled()) {
636  stream = caching_fetch_url(url);
637  }
638  else {
639  stream = plain_fetch_url(url);
640  }
641 
642 #ifdef HTTP_TRACE
643  stringstream ss;
644  ss << "HTTP/1.0 " << stream->get_status() << " -" << endl;
645  for (size_t i = 0; i < stream->get_headers()->size(); i++) {
646  ss << stream->get_headers()->at(i) << endl;
647  }
648  cout << ss.str();
649 #endif
650 
651  ParseHeader parser;
652 
653  // An apparent quirk of libcurl is that it does not pass the Content-type
654  // header to the callback used to save them, but check and add it from the
655  // saved state variable only if it's not there (without this a test failed
656  // in HTTPCacheTest). jhrg 11/12/13
657  if (!d_content_type.empty() && find_if(stream->get_headers()->begin(), stream->get_headers()->end(),
658  HeaderMatch("Content-Type:")) == stream->get_headers()->end())
659  stream->get_headers()->push_back("Content-Type: " + d_content_type);
660 
661  parser = for_each(stream->get_headers()->begin(), stream->get_headers()->end(), ParseHeader());
662 
663 #ifdef HTTP_TRACE
664  cout << endl << endl;
665 #endif
666 
667  // handle redirection case (2007-04-27, gaffigan@sfos.uaf.edu)
668  if (parser.get_location() != "" &&
669  url.substr(0,url.find("?",0)).compare(parser.get_location().substr(0,url.find("?",0))) != 0) {
670  delete stream;
671  return fetch_url(parser.get_location());
672  }
673 
674  stream->set_type(parser.get_object_type()); // uses the value of content-description
675 
676  stream->set_version(parser.get_server());
677  stream->set_protocol(parser.get_protocol());
678 
679  if (d_use_cpp_streams) {
680  stream->transform_to_cpp();
681  }
682 
683  return stream;
684 }
685 
686 // Look around for a reasonable place to put a temporary file. Check first
687 // the value of the TMPDIR env var. If that does not yeild a path that's
688 // writable (as defined by access(..., W_OK|R_OK)) then look at P_tmpdir (as
689 // defined in stdio.h. If both come up empty, then use `./'.
690 
691 // Change this to a version that either returns a string or an open file
692 // descriptor. Use information from https://buildsecurityin.us-cert.gov/
693 // (see open()) to make it more secure. Ideal solution: get deserialize()
694 // methods to read from a stream returned by libcurl, not from a temporary
695 // file. 9/21/07 jhrg Updated to use strings, other misc changes. 3/22/11
696 static string
697 get_tempfile_template(const string &file_template)
698 {
699  string c;
700 
701  // Windows has one idea of the standard name(s) for a temporary files dir
702 #ifdef WIN32
703  // white list for a WIN32 directory
704  Regex directory("[-a-zA-Z0-9_:\\]*");
705 
706  // If we're OK to use getenv(), try it.
707 #ifdef USE_GETENV
708  c = getenv("TEMP");
709  if (c && directory.match(c.c_str(), c.length()) && (access(c.c_str(), 6) == 0))
710  goto valid_temp_directory;
711 
712  c= getenv("TMP");
713  if (c && directory.match(c.c_str(), c.length()) && (access(c.c_str(), 6) == 0))
714  goto valid_temp_directory;
715 #endif // USE_GETENV
716 
717  // The windows default
718  c = "c:\tmp";
719  if (c && directory.match(c.c_str(), c.length()) && (access(c.c_str(), 6) == 0))
720  goto valid_temp_directory;
721 
722 #else // Unix/Linux/OSX has another...
723  // white list for a directory
724  Regex directory("[-a-zA-Z0-9_/]*");
725 #ifdef USE_GETENV
726  c = getenv("TMPDIR");
727  if (directory.match(c.c_str(), c.length()) && (access(c.c_str(), W_OK | R_OK) == 0))
728  goto valid_temp_directory;
729 #endif // USE_GETENV
730 
731  // Unix defines this sometimes - if present, use it.
732 #ifdef P_tmpdir
733  if (access(P_tmpdir, W_OK | R_OK) == 0) {
734  c = P_tmpdir;
735  goto valid_temp_directory;
736  }
737 #endif
738 
739  // The Unix default
740  c = "/tmp";
741  if (directory.match(c.c_str(), c.length()) && (access(c.c_str(), W_OK | R_OK) == 0))
742  goto valid_temp_directory;
743 
744 #endif // WIN32
745 
746  // If we found nothing useful, use the current directory
747  c = ".";
748 
749 valid_temp_directory:
750 
751 #ifdef WIN32
752  c += "\\" + file_template;
753 #else
754  c += "/" + file_template;
755 #endif
756 
757  return c;
758 }
759 
778 string
779 get_temp_file(FILE *&stream) throw(Error)
780 {
781  string dods_temp = get_tempfile_template((string)"dodsXXXXXX");
782 
783  vector<char> pathname(dods_temp.length() + 1);
784 
785  strncpy(&pathname[0], dods_temp.c_str(), dods_temp.length());
786 
787  DBG(cerr << "pathanme: " << &pathname[0] << " (" << dods_temp.length() + 1 << ")" << endl);
788 
789  // Open truncated for update. NB: mkstemp() returns a file descriptor.
790 #if defined(WIN32) || defined(TEST_WIN32_TEMPS)
791  stream = fopen(_mktemp(&pathname[0]), "w+b");
792 #else
793  // Make sure that temp files are accessible only by the owner.
794  int mask = umask(077);
795  if (mask < 0)
796  throw Error("Could not set the file creation mask: " + string(strerror(errno)));
797  int fd = mkstemp(&pathname[0]);
798  if (fd < 0)
799  throw Error("Could not create a temporary file to store the response: " + string(strerror(errno)));
800 
801  stream = fdopen(fd, "w+");
802  umask(mask);
803 #endif
804 
805  if (!stream)
806  throw Error("Failed to open a temporary file for the data values (" + dods_temp + ")");
807 
808  dods_temp = &pathname[0];
809  return dods_temp;
810 }
811 
812 
818 void
819 close_temp(FILE *s, const string &name)
820 {
821  int res = fclose(s);
822  if (res)
823  throw InternalErr(__FILE__, __LINE__, "!FAIL! " + long_to_string(res));
824 
825  res = unlink(name.c_str());
826  if (res != 0)
827  throw InternalErr(__FILE__, __LINE__, "!FAIL! " + long_to_string(res));
828 }
829 
851 HTTPResponse *
852 HTTPConnect::caching_fetch_url(const string &url)
853 {
854  DBG(cerr << "Is this URL (" << url << ") in the cache?... ");
855 
856  vector<string> *headers = new vector<string>;
857  string file_name;
858  FILE *s = d_http_cache->get_cached_response(url, *headers, file_name);
859  if (!s) {
860  // url not in cache; get it and cache it
861  DBGN(cerr << "no; getting response and caching." << endl);
862  delete headers; headers = 0;
863  time_t now = time(0);
864  HTTPResponse *rs = plain_fetch_url(url);
865  d_http_cache->cache_response(url, now, *(rs->get_headers()), rs->get_stream());
866 
867  return rs;
868  }
869  else { // url in cache
870  DBGN(cerr << "yes... ");
871 
872  if (d_http_cache->is_url_valid(url)) { // url in cache and valid
873  DBGN(cerr << "and it's valid; using cached response." << endl);
874  HTTPCacheResponse *crs = new HTTPCacheResponse(s, 200, headers, file_name, d_http_cache);
875  return crs;
876  }
877  else { // url in cache but not valid; validate
878  DBGN(cerr << "but it's not valid; validating... ");
879 
880  d_http_cache->release_cached_response(s); // This closes 's'
881  headers->clear();
882  vector<string> cond_hdrs = d_http_cache->get_conditional_request_headers(url);
883  FILE *body = 0;
884  string dods_temp = get_temp_file(body);
885  time_t now = time(0); // When was the request made (now).
886  long http_status;
887 
888  try {
889  http_status = read_url(url, body, /*resp_hdrs*/headers, &cond_hdrs);
890  rewind(body);
891  }
892  catch (Error &e) {
893  close_temp(body, dods_temp);
894  delete headers;
895  throw ;
896  }
897 
898  switch (http_status) {
899  case 200: { // New headers and new body
900  DBGN(cerr << "read a new response; caching." << endl);
901 
902  d_http_cache->cache_response(url, now, /* *resp_hdrs*/*headers, body);
903  HTTPResponse *rs = new HTTPResponse(body, http_status, /*resp_hdrs*/headers, dods_temp);
904 
905  return rs;
906  }
907 
908  case 304: { // Just new headers, use cached body
909  DBGN(cerr << "cached response valid; updating." << endl);
910 
911  close_temp(body, dods_temp);
912  d_http_cache->update_response(url, now, /* *resp_hdrs*/ *headers);
913  string file_name;
914  FILE *hs = d_http_cache->get_cached_response(url, *headers, file_name);
915  HTTPCacheResponse *crs = new HTTPCacheResponse(hs, 304, headers, file_name, d_http_cache);
916  return crs;
917  }
918 
919  default: { // Oops.
920  close_temp(body, dods_temp);
921  if (http_status >= 400) {
922  delete headers; headers = 0;
923  string msg = "Error while reading the URL: ";
924  msg += url;
925  msg
926  += ".\nThe OPeNDAP server returned the following message:\n";
927  msg += http_status_to_string(http_status);
928  throw Error(msg);
929  }
930  else {
931  delete headers; headers = 0;
932  throw InternalErr(__FILE__, __LINE__,
933  "Bad response from the HTTP server: " + long_to_string(http_status));
934  }
935  }
936  }
937  }
938  }
939 
940  throw InternalErr(__FILE__, __LINE__, "Should never get here");
941 }
942 
954 HTTPResponse *
955 HTTPConnect::plain_fetch_url(const string &url)
956 {
957  DBG(cerr << "Getting URL: " << url << endl);
958  FILE *stream = 0;
959  string dods_temp = get_temp_file(stream);
960  vector<string> *resp_hdrs = new vector<string>;
961 
962  int status = -1;
963  try {
964  status = read_url(url, stream, resp_hdrs); // Throws Error.
965  if (status >= 400) {
966  // delete resp_hdrs; resp_hdrs = 0;
967  string msg = "Error while reading the URL: ";
968  msg += url;
969  msg += ".\nThe OPeNDAP server returned the following message:\n";
970  msg += http_status_to_string(status);
971  throw Error(msg);
972  }
973  }
974 
975  catch (Error &e) {
976  delete resp_hdrs;
977  close_temp(stream, dods_temp);
978  throw;
979  }
980 
981 #if 0
982  if (d_use_cpp_streams) {
983  fclose(stream);
984  fstream *in = new fstream(dods_temp.c_str(), ios::in|ios::binary);
985  return new HTTPResponse(in, status, resp_hdrs, dods_temp);
986  }
987  else {
988 #endif
989  rewind(stream);
990  return new HTTPResponse(stream, status, resp_hdrs, dods_temp);
991 #if 0
992 }
993 #endif
994 }
995 
1007 void
1009 {
1010  d_accept_deflate = deflate;
1011 
1012  if (d_accept_deflate) {
1013  if (find(d_request_headers.begin(), d_request_headers.end(),
1014  "Accept-Encoding: deflate, gzip, compress") == d_request_headers.end())
1015  d_request_headers.push_back(string("Accept-Encoding: deflate, gzip, compress"));
1016  DBG(copy(d_request_headers.begin(), d_request_headers.end(),
1017  ostream_iterator<string>(cerr, "\n")));
1018  }
1019  else {
1020  vector<string>::iterator i;
1021  i = remove_if(d_request_headers.begin(), d_request_headers.end(),
1022  bind2nd(equal_to<string>(),
1023  string("Accept-Encoding: deflate, gzip, compress")));
1024  d_request_headers.erase(i, d_request_headers.end());
1025  }
1026 }
1027 
1036 void
1037 HTTPConnect::set_xdap_protocol(int major, int minor)
1038 {
1039  // Look for, and remove if one exists, an XDAP-Accept header
1040  vector<string>::iterator i;
1041  i = find_if(d_request_headers.begin(), d_request_headers.end(),
1042  HeaderMatch("XDAP-Accept:"));
1043  if (i != d_request_headers.end())
1044  d_request_headers.erase(i);
1045 
1046  // Record and add the new header value
1047  d_dap_client_protocol_major = major;
1048  d_dap_client_protocol_minor = minor;
1049  ostringstream xdap_accept;
1050  xdap_accept << "XDAP-Accept: " << major << "." << minor;
1051 
1052  d_request_headers.push_back(xdap_accept.str());
1053 
1054  DBG(copy(d_request_headers.begin(), d_request_headers.end(),
1055  ostream_iterator<string>(cerr, "\n")));
1056 }
1057 
1073 void
1074 HTTPConnect::set_credentials(const string &u, const string &p)
1075 {
1076  if (u.empty())
1077  return;
1078 
1079  // Store the credentials locally.
1080  d_username = u;
1081  d_password = p;
1082 
1083  d_upstring = u + ":" + p;
1084 }
1085 
1086 } // namespace libdap
- -
void set_cache_enabled(bool mode)
Definition: HTTPCache.cc:635
-
void set_credentials(const string &u, const string &p)
-
static HTTPCache * instance(const string &cache_root, bool force=false)
Definition: HTTPCache.cc:129
-
void set_max_size(unsigned long size)
Definition: HTTPCache.cc:724
-
STL namespace.
-
ObjectType
The type of object in the stream coming from the data server.
Definition: ObjectType.h:58
-
HTTPResponse * fetch_url(const string &url)
Definition: HTTPConnect.cc:627
- -
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
void parse_mime_header(const string &header, string &name, string &value)
Definition: mime_util.cc:912
-
int match(const char *s, int len, int pos=0)
Does the pattern match.
Definition: GNURegex.cc:115
-
ObjectType get_description_type(const string &value)
Definition: mime_util.cc:339
-
void close_temp(FILE *s, const string &name)
Definition: HTTPConnect.cc:819
-
string get_temp_file(FILE *&stream)
Definition: HTTPConnect.cc:779
- -
void set_accept_deflate(bool defalte)
- - -
void set_always_validate(bool validate)
Definition: HTTPCache.cc:841
-
void set_xdap_protocol(int major, int minor)
-
void set_default_expiration(int exp_time)
Definition: HTTPCache.cc:819
-
A class for error processing.
Definition: Error.h:92
-
void set_expire_ignored(bool mode)
Definition: HTTPCache.cc:690
-
void set_max_entry_size(unsigned long size)
Definition: HTTPCache.cc:772
-
-
- - - - diff --git a/html/HTTPConnect_8h_source.html b/html/HTTPConnect_8h_source.html deleted file mode 100644 index 35ec3786d..000000000 --- a/html/HTTPConnect_8h_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -libdap: HTTPConnect.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
HTTPConnect.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef _httpconnect_h
27 #define _httpconnect_h
28 
29 
30 #include <string>
31 
32 #include <curl/curl.h>
33 //No longer used in CURL - pwest April 09, 2012
34 //#include <curl/types.h>
35 #include <curl/easy.h>
36 
37 #ifndef _rc_reader_h_
38 #include "RCReader.h"
39 #endif
40 
41 #ifndef _object_type_h
42 #include "ObjectType.h"
43 #endif
44 
45 #ifndef _http_cache_h
46 #include "HTTPCache.h"
47 #endif
48 
49 #ifndef http_response_h
50 #include "HTTPResponse.h"
51 #endif
52 
53 #ifndef _util_h
54 #include "util.h"
55 #endif
56 
57 using std::string;
58 using std::vector;
59 
60 namespace libdap
61 {
62 
63 extern int www_trace;
64 extern int www_trace_extensive;
65 extern int dods_keep_temps;
66 
74 {
75 private:
76  CURL *d_curl;
77  RCReader *d_rcr;
78  HTTPCache *d_http_cache;
79 
80  char d_error_buffer[CURL_ERROR_SIZE]; // A human-readable message.
81  std::string d_content_type; // apparently read by libcurl; this is valid only after curl_easy_perform()
82 
83  bool d_accept_deflate;
84 
85  string d_username; // extracted from URL
86  string d_password; // extracted from URL
87  string d_upstring; // used to pass info into curl
88 
89  string d_cookie_jar;
90 
91  vector<string> d_request_headers; // Request headers
92 
93  int d_dap_client_protocol_major;
94  int d_dap_client_protocol_minor;
95 
96  bool d_use_cpp_streams; // Build HTTPResponse objects using fstream and not FILE*
97 
98  void www_lib_init();
99  long read_url(const string &url, FILE *stream, vector<string> *resp_hdrs,
100  const vector<string> *headers = 0);
101 
102  HTTPResponse *plain_fetch_url(const string &url);
103  HTTPResponse *caching_fetch_url(const string &url);
104 
105  bool url_uses_proxy_for(const string &url);
106  bool url_uses_no_proxy_for(const string &url) throw();
107 
108  void extract_auth_info(string &url);
109 
110  friend size_t save_raw_http_header(void *ptr, size_t size, size_t nmemb,
111  void *http_connect);
112  friend class HTTPConnectTest;
113  friend class ParseHeader;
114 
115 protected:
121  HTTPConnect();
122  HTTPConnect(const HTTPConnect &);
123  HTTPConnect &operator=(const HTTPConnect &);
125 
126 public:
127  HTTPConnect(RCReader *rcr, bool use_cpp = false);
128 
129  virtual ~HTTPConnect();
130 
131  void set_credentials(const string &u, const string &p);
132  void set_accept_deflate(bool defalte);
133  void set_xdap_protocol(int major, int minor);
134 
135  bool use_cpp_streams() const { return d_use_cpp_streams; }
136  void set_use_cpp_streams(bool use_cpp_streams) { d_use_cpp_streams = use_cpp_streams; }
137 
144  void set_cookie_jar(const string &cookie_jar) { d_cookie_jar = cookie_jar; }
145 
151  void set_cache_enabled(bool enabled) {
152  if (d_http_cache)
153  d_http_cache->set_cache_enabled(enabled);
154  }
155 
157  bool is_cache_enabled() { return (d_http_cache) ? d_http_cache->is_cache_enabled() : false; }
158 
159  HTTPResponse *fetch_url(const string &url);
160 };
161 
162 } // namespace libdap
163 
164 #endif // _httpconnect_h
- -
void set_cache_enabled(bool mode)
Definition: HTTPCache.cc:635
-
void set_credentials(const string &u, const string &p)
-
void set_cookie_jar(const string &cookie_jar)
Definition: HTTPConnect.h:144
-
void set_cache_enabled(bool enabled)
Definition: HTTPConnect.h:151
- -
HTTPResponse * fetch_url(const string &url)
Definition: HTTPConnect.cc:627
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
void set_accept_deflate(bool defalte)
- - -
bool is_cache_enabled() const
Definition: HTTPCache.cc:647
-
void set_xdap_protocol(int major, int minor)
-
-
- - - - diff --git a/html/HTTPResponse_8h_source.html b/html/HTTPResponse_8h_source.html deleted file mode 100644 index 3dfdc540c..000000000 --- a/html/HTTPResponse_8h_source.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -libdap: HTTPResponse.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
HTTPResponse.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef http_response_h
27 #define http_response_h
28 
29 #include <unistd.h>
30 
31 #include <cstdio>
32 
33 #include <string>
34 #include <iostream>
35 #include <algorithm>
36 #include <iterator>
37 #include <vector>
38 
39 #include "Response.h"
40 #include "util.h"
41 #include "debug.h"
42 
43 namespace libdap
44 {
45 
46 // defined in HTTPConnect.cc
47 extern int dods_keep_temps;
48 extern void close_temp(FILE *s, const string &name);
49 
56 class HTTPResponse : public Response
57 {
58 private:
59  std::vector<std::string> *d_headers; // Response headers
60  std::string d_file; // Temp file that holds response body
61 
62 protected:
65  HTTPResponse();
66  HTTPResponse(const HTTPResponse &rs);
67  HTTPResponse &operator=(const HTTPResponse &);
69 
70 public:
87  HTTPResponse(FILE *s, int status, std::vector<std::string> *h, const std::string &temp_file)
88  : Response(s, status), d_headers(h), d_file(temp_file)
89  {
90  DBG(cerr << "Headers: " << endl);
91  DBGN(copy(d_headers->begin(), d_headers->end(),
92  ostream_iterator<string>(cerr, "\n")));
93  DBGN(cerr << "end of headers." << endl);
94  }
95 
105  HTTPResponse(std::fstream *s, int status, std::vector<std::string> *h, const std::string &temp_file)
106  : Response(s, status), d_headers(h), d_file(temp_file)
107  {
108  DBG(cerr << "Headers: " << endl);
109  DBGN(copy(d_headers->begin(), d_headers->end(),
110  ostream_iterator<string>(cerr, "\n")));
111  DBGN(cerr << "end of headers." << endl);
112  }
113 
117  virtual ~HTTPResponse()
118  {
119  DBG(cerr << "Freeing HTTPConnect resources (" + d_file + ")... ");
120 
121  // This can always be done - if the cpp_stream is null, delete has no effect;
122  // if non-null in this class it was allocated in HTTPConnect::plain_fetch_url
123  // (or caching_fetch_url when that's implemented)
124  delete get_cpp_stream();
125  set_cpp_stream(0);
126 
127  if (!dods_keep_temps && !d_file.empty()) {
128  if (get_stream()) {
129  close_temp(get_stream(), d_file);
130  set_stream(0);
131  }
132  else {
133  (void) unlink(d_file.c_str());
134 #if 0
135  long res = unlink(d_file.c_str());
136  if (res != 0) throw InternalErr(__FILE__, __LINE__, "!FAIL! " + long_to_string(res));
137 #endif
138  }
139  }
140 
141  delete d_headers;
142 
143  DBGN(cerr << endl);
144  }
145 
152  // ~Response() will take care of closing the FILE*. A better version of this
153  // code would not leave the FILE* open when it's not needed, but this implementation
154  // can use the existing HTTPConnect and HTTPCache software with very minimal
155  // (or no) modification. jhrg 11/8/13
156  set_cpp_stream(new std::fstream(d_file.c_str(), std::ios::in|std::ios::binary));
157  }
158 
161  virtual std::vector<std::string> *get_headers() const { return d_headers; }
162  virtual std::string get_file() const { return d_file; }
164 
167  virtual void set_headers(std::vector<std::string> *h) { d_headers = h; }
168  virtual void set_file(const std::string &n) { d_file = n; }
170 };
171 
172 } // namespace libdap
173 
174 #endif // http_response_h
- -
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
void close_temp(FILE *s, const string &name)
Definition: HTTPConnect.cc:819
- - -
HTTPResponse(FILE *s, int status, std::vector< std::string > *h, const std::string &temp_file)
Definition: HTTPResponse.h:87
-
HTTPResponse(std::fstream *s, int status, std::vector< std::string > *h, const std::string &temp_file)
Build a HTTPResponse using a cpp fstream When working with DAP4 responses, use C++ streams for I/0...
Definition: HTTPResponse.h:105
-
-
- - - - diff --git a/html/Info.plist b/html/Info.plist deleted file mode 100644 index bb74d5db4..000000000 --- a/html/Info.plist +++ /dev/null @@ -1,23 +0,0 @@ - - - - - CFBundleName - libdap - CFBundleIdentifier - org.opendap.libdap - CFBundleVersion - Updated for version 3.20.6 - DocSetFeedName - libdap Doxygen generated docs - DocSetPublisherIdentifier - org.doxygen.Publisher - DocSetPublisherName - Publisher - DashDocSetFamily - doxy - DocSetPlatformFamily - doxygen - - diff --git a/html/Int16_8cc_source.html b/html/Int16_8cc_source.html deleted file mode 100644 index d74ecd158..000000000 --- a/html/Int16_8cc_source.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - -libdap: Int16.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Int16.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1996-1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Implementation for Int32.
33 //
34 // jhrg 9/7/94
35 
36 
37 #include "config.h"
38 
39 #include <sstream>
40 
41 #include "Byte.h" // synonymous with UInt8 and Char
42 #include "Int8.h"
43 #include "Int16.h"
44 #include "UInt16.h"
45 #include "Int32.h"
46 #include "UInt32.h"
47 #include "Int64.h"
48 #include "UInt64.h"
49 #include "Float32.h"
50 #include "Float64.h"
51 #include "Str.h"
52 #include "Url.h"
53 
54 #include "DDS.h"
55 #include "Marshaller.h"
56 #include "UnMarshaller.h"
57 
58 #include "DMR.h"
59 #include "D4StreamMarshaller.h"
60 #include "D4StreamUnMarshaller.h"
61 
62 #include "util.h"
63 #include "parser.h"
64 #include "Operators.h"
65 #include "dods-limits.h"
66 #include "debug.h"
67 #include "InternalErr.h"
68 #include "DapIndent.h"
69 
70 using std::cerr;
71 using std::endl;
72 
73 namespace libdap {
74 
79 Int16::Int16(const string &n) : BaseType(n, dods_int16_c), d_buf(0)
80 {}
81 
89 Int16::Int16(const string &n, const string &d) : BaseType(n, d, dods_int16_c), d_buf(0)
90 {}
91 
92 Int16::Int16(const Int16 &copy_from) : BaseType(copy_from)
93 {
94  d_buf = copy_from.d_buf;
95 }
96 
97 BaseType *
99 {
100  return new Int16(*this);
101 }
102 
103 Int16 &
104 Int16::operator=(const Int16 &rhs)
105 {
106  if (this == &rhs)
107  return *this;
108 
109  dynamic_cast<BaseType &>(*this) = rhs;
110 
111  d_buf = rhs.d_buf;
112 
113  return *this;
114 }
115 
116 unsigned int
117 Int16::width(bool) const
118 {
119  return sizeof(dods_int16);
120 }
121 
122 bool
123 Int16::serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval)
124 {
125 #if USE_LOCAL_TIMEOUT_SCHEME
126  dds.timeout_on();
127 #endif
128  if (!read_p())
129  read(); // read() throws Error and InternalErr
130 
131  if (ce_eval && !eval.eval_selection(dds, dataset()))
132  return true;
133 #if USE_LOCAL_TIMEOUT_SCHEME
134  dds.timeout_off();
135 #endif
136  m.put_int16( d_buf ) ;
137 
138  return true;
139 }
140 
141 bool
143 {
144  um.get_int16( d_buf ) ;
145 
146  return false;
147 }
148 
149 void
151 {
152  checksum.AddData(reinterpret_cast<uint8_t*>(&d_buf), sizeof(d_buf));
153 }
154 
163 void
164 Int16::serialize(D4StreamMarshaller &m, DMR &, /*ConstraintEvaluator &,*/ bool)
165 {
166  if (!read_p())
167  read(); // read() throws Error
168 
169  m.put_int16( d_buf ) ;
170 }
171 
172 void
174 {
175  um.get_int16( d_buf ) ;
176 }
177 
178 unsigned int
179 Int16::val2buf(void *val, bool)
180 {
181  // Jose Garcia
182  // This method is public therefore and I believe it has being designed
183  // to be use by read which must be implemented on the surrogated library,
184  // thus if the pointer val is NULL, is an Internal Error.
185  if (!val)
186  throw InternalErr(__FILE__, __LINE__,
187  "The incoming pointer does not contain any data.");
188 
189  d_buf = *(dods_int16 *)val;
190 
191  return width();
192 }
193 
194 unsigned int
195 Int16::buf2val(void **val)
196 {
197  // Jose Garcia
198  // The same comment justifying throwing an Error in val2buf applies here.
199  if (!val)
200  throw InternalErr(__FILE__, __LINE__, "NULL pointer.");
201 
202  if (!*val)
203  *val = new dods_int16;
204 
205  *(dods_int16 *)*val = d_buf;
206 
207  return width();
208 }
209 
210 dods_int16
211 Int16::value() const
212 {
213  return d_buf;
214 }
215 
216 bool
217 Int16::set_value(dods_int16 i)
218 {
219  d_buf = i;
220  set_read_p(true);
221 
222  return true;
223 }
224 
225 void
226 Int16::print_val(FILE *out, string space, bool print_decl_p)
227 {
228  ostringstream oss;
229  print_val(oss, space, print_decl_p);
230  fwrite(oss.str().data(), sizeof(char), oss.str().length(), out);
231 }
232 
233 void
234 Int16::print_val(ostream &out, string space, bool print_decl_p)
235 {
236  if (print_decl_p) {
237  print_decl(out, space, false);
238  out << " = " << d_buf << ";\n" ;
239  }
240  else
241  out << d_buf ;
242 }
243 
244 bool
245 Int16::ops(BaseType *b, int op)
246 {
247 
248  // Extract the Byte arg's value.
249  if (!read_p() && !read()) {
250  // Jose Garcia
251  // Since the read method is virtual and implemented outside
252  // libdap++ if we cannot read the data that is the problem
253  // of the user or of whoever wrote the surrogate library
254  // implemeting read therefore it is an internal error.
255  throw InternalErr(__FILE__, __LINE__, "This value not read!");
256  }
257 
258  // Extract the second arg's value.
259  if (!b || !(b->read_p() || b->read())) {
260  // Jose Garcia
261  // Since the read method is virtual and implemented outside
262  // libdap++ if we cannot read the data that is the problem
263  // of the user or of whoever wrote the surrogate library
264  // implemeting read therefore it is an internal error.
265  throw InternalErr(__FILE__, __LINE__, "This value not read!");
266  }
267 
268  return d4_ops(b, op);
269 }
270 
274 bool Int16::d4_ops(BaseType *b, int op)
275 {
276  switch (b->type()) {
277  case dods_int8_c:
278  return Cmp<dods_int16, dods_int8>(op, d_buf, static_cast<Int8*>(b)->value());
279  case dods_byte_c:
280  return Cmp<dods_int16, dods_byte>(op, d_buf, static_cast<Byte*>(b)->value());
281  case dods_int16_c:
282  return Cmp<dods_int16, dods_int16>(op, d_buf, static_cast<Int16*>(b)->value());
283  case dods_uint16_c:
284  return Cmp<dods_int16, dods_uint16>(op, d_buf, static_cast<UInt16*>(b)->value());
285  case dods_int32_c:
286  return Cmp<dods_int16, dods_int32>(op, d_buf, static_cast<Int32*>(b)->value());
287  case dods_uint32_c:
288  return Cmp<dods_int16, dods_uint32>(op, d_buf, static_cast<UInt32*>(b)->value());
289  case dods_int64_c:
290  return Cmp<dods_int16, dods_int64>(op, d_buf, static_cast<Int64*>(b)->value());
291  case dods_uint64_c:
292  return Cmp<dods_int16, dods_uint64>(op, d_buf, static_cast<UInt64*>(b)->value());
293  case dods_float32_c:
294  return Cmp<dods_int16, dods_float32>(op, d_buf, static_cast<Float32*>(b)->value());
295  case dods_float64_c:
296  return Cmp<dods_int16, dods_float64>(op, d_buf, static_cast<Float64*>(b)->value());
297  case dods_str_c:
298  case dods_url_c:
299  throw Error(malformed_expr, "Relational operators can only compare compatible types (number, string).");
300  default:
301  throw Error(malformed_expr, "Relational operators only work with scalar types.");
302  }
303 }
304 
313 void
314 Int16::dump(ostream &strm) const
315 {
316  strm << DapIndent::LMarg << "Int16::dump - ("
317  << (void *)this << ")" << endl ;
318  DapIndent::Indent() ;
319  BaseType::dump(strm) ;
320  strm << DapIndent::LMarg << "value: " << d_buf << endl ;
321  DapIndent::UnIndent() ;
322 }
323 
324 } // namespace libdap
325 
virtual bool read()
Read data into a local buffer.
Definition: BaseType.cc:899
-
Holds an 8-bit signed integer value.
Definition: Int8.h:42
-
Holds a64-bit signed integer.
Definition: Int64.h:49
-
virtual bool read_p()
Has this variable been read?
Definition: BaseType.cc:480
-
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
virtual void print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
Print an ASCII representation of the variable structure.
Definition: BaseType.cc:1003
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: BaseType.cc:291
-
virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)
Receive data from the net.
Definition: Int16.cc:142
-
Read data from the stream made by D4StreamMarshaller.
-
Holds an unsigned 16-bit integer.
Definition: UInt16.h:57
-
Definition: crc.h:76
-
BaseType(const string &n, const Type &t, bool is_dap4=false)
The BaseType constructor.
Definition: BaseType.cc:126
-
virtual bool ops(BaseType *b, int op)
Evaluate relational operators.
Definition: Int16.cc:245
-
virtual BaseType * ptr_duplicate()
Definition: Int16.cc:98
-
Holds a 32-bit floating point value.
Definition: Float32.h:61
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
-
Holds a 16-bit signed integer value.
Definition: Int16.h:59
- -
virtual Type type() const
Returns the type of the class instance.
Definition: BaseType.cc:365
-
virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
Move data to the net, then remove them from the object.
Definition: Int16.cc:123
-
virtual unsigned int width(bool constrained=false) const
How many bytes does this variable use Return the number of bytes of storage this variable uses...
Definition: Int16.cc:117
-
virtual unsigned int buf2val(void **val)
Reads the class data.
Definition: Int16.cc:195
-
virtual void set_read_p(bool state)
Sets the value of the read_p property.
Definition: BaseType.cc:516
-
Int16(const string &n)
Definition: Int16.cc:79
-
Holds a 64-bit unsigned integer.
Definition: UInt64.h:49
-
void AddData(const uint8_t *pData, const uint32_t length)
Definition: crc.h:98
-
virtual void compute_checksum(Crc32 &checksum)
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
Definition: Int16.cc:150
-
virtual void print_val(FILE *out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: Int16.cc:226
-
Evaluate a constraint expression.
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Int16.cc:314
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
-
Holds a 64-bit (double precision) floating point value.
Definition: Float64.h:60
-
Holds a single byte.
Definition: Byte.h:60
-
virtual bool d4_ops(BaseType *b, int op)
Definition: Int16.cc:274
-
bool eval_selection(DDS &dds, const std::string &dataset)
Evaluate a boolean-valued constraint expression. This is main method for the evaluator and is called ...
-
A class for error processing.
Definition: Error.h:92
-
Holds a 32-bit unsigned integer.
Definition: UInt32.h:59
-
virtual unsigned int val2buf(void *val, bool reuse=false)
Loads class data.
Definition: Int16.cc:179
-
Holds a 32-bit signed integer.
Definition: Int32.h:65
-
virtual string dataset() const
Returns the name of the dataset used to create this instance.
Definition: BaseType.cc:358
-
-
- - - - diff --git a/html/Int16_8h_source.html b/html/Int16_8h_source.html deleted file mode 100644 index 973ddfbaf..000000000 --- a/html/Int16_8h_source.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - -libdap: Int16.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Int16.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1997,1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Interface for Int16 type.
33 //
34 // jhrg 9/7/94
35 
36 #ifndef _int16_h
37 #define _int16_h 1
38 
39 
40 #ifndef _dods_datatypes_h
41 #include "dods-datatypes.h"
42 #endif
43 
44 #ifndef _basetype_h
45 #include "BaseType.h"
46 #endif
47 
48 #ifndef constraint_evaluator_h
49 #include "ConstraintEvaluator.h"
50 #endif
51 
52 namespace libdap
53 {
54 
55 class DMR;
56 
59 class Int16: public BaseType
60 {
61 protected:
62  dods_int16 d_buf;
63 
64 public:
65  Int16(const string &n);
66  Int16(const string &n, const string &d);
67  virtual ~Int16()
68  {}
69 
70  Int16(const Int16 &copy_from);
71 
72  Int16 &operator=(const Int16 &rhs);
73 
74  virtual BaseType *ptr_duplicate();
75  virtual unsigned int width(bool constrained = false) const;
76 
77  // DAP2
78  virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval = true);
79  virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse = false);
80 
81  // DAP4
82  virtual void compute_checksum(Crc32 &checksum);
83  virtual void serialize(D4StreamMarshaller &m, DMR &dmr, /*ConstraintEvaluator &eval,*/ bool filter = false);
84  virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr);
85 
86  virtual unsigned int val2buf(void *val, bool reuse = false);
87  virtual unsigned int buf2val(void **val);
88 
89  virtual dods_int16 value() const;
90  virtual bool set_value(dods_int16 val);
91 
92  virtual void print_val(FILE *out, string space = "",
93  bool print_decl_p = true);
94  virtual void print_val(ostream &out, string space = "",
95  bool print_decl_p = true);
96 
97  virtual bool ops(BaseType *b, int op);
98  virtual bool d4_ops(BaseType *b, int op);
99 
100  virtual void dump(ostream &strm) const ;
101 };
102 
103 } // namespace libdap
104 
105 #endif // _int16_h
106 
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)
Receive data from the net.
Definition: Int16.cc:142
-
Read data from the stream made by D4StreamMarshaller.
-
Definition: crc.h:76
-
virtual bool ops(BaseType *b, int op)
Evaluate relational operators.
Definition: Int16.cc:245
-
virtual BaseType * ptr_duplicate()
Definition: Int16.cc:98
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
-
Holds a 16-bit signed integer value.
Definition: Int16.h:59
- -
virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
Move data to the net, then remove them from the object.
Definition: Int16.cc:123
-
virtual unsigned int width(bool constrained=false) const
How many bytes does this variable use Return the number of bytes of storage this variable uses...
Definition: Int16.cc:117
-
virtual unsigned int buf2val(void **val)
Reads the class data.
Definition: Int16.cc:195
-
Int16(const string &n)
Definition: Int16.cc:79
-
virtual void compute_checksum(Crc32 &checksum)
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
Definition: Int16.cc:150
-
virtual void print_val(FILE *out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: Int16.cc:226
-
Evaluate a constraint expression.
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Int16.cc:314
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
-
virtual bool d4_ops(BaseType *b, int op)
Definition: Int16.cc:274
-
virtual unsigned int val2buf(void *val, bool reuse=false)
Loads class data.
Definition: Int16.cc:179
-
-
- - - - diff --git a/html/Int32_8cc_source.html b/html/Int32_8cc_source.html deleted file mode 100644 index d127709f3..000000000 --- a/html/Int32_8cc_source.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - -libdap: Int32.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Int32.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1994-1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Implementation for Int32.
33 //
34 // jhrg 9/7/94
35 
36 
37 #include "config.h"
38 
39 //#define DODS_DEBUG
40 
41 #include <sstream>
42 
43 #include "Byte.h" // synonymous with UInt8 and Char
44 #include "Int8.h"
45 #include "Int16.h"
46 #include "UInt16.h"
47 #include "Int32.h"
48 #include "UInt32.h"
49 #include "Int64.h"
50 #include "UInt64.h"
51 #include "Float32.h"
52 #include "Float64.h"
53 #include "Str.h"
54 #include "Url.h"
55 
56 #include "DDS.h"
57 #include "Marshaller.h"
58 #include "UnMarshaller.h"
59 
60 #include "DMR.h"
61 #include "D4StreamMarshaller.h"
62 #include "D4StreamUnMarshaller.h"
63 
64 #include "util.h"
65 #include "parser.h"
66 #include "Operators.h"
67 #include "dods-limits.h"
68 #include "debug.h"
69 #include "InternalErr.h"
70 #include "DapIndent.h"
71 
72 using std::cerr;
73 using std::endl;
74 
75 namespace libdap {
76 
84 Int32::Int32(const string &n) : BaseType(n, dods_int32_c), d_buf(0)
85 {}
86 
94 Int32::Int32(const string &n, const string &d) : BaseType(n, d, dods_int32_c), d_buf(0)
95 {}
96 
97 Int32::Int32(const Int32 &copy_from) : BaseType(copy_from)
98 {
99  d_buf = copy_from.d_buf;
100 }
101 
102 BaseType *
104 {
105  return new Int32(*this);
106 }
107 
108 Int32::~Int32()
109 {
110  DBG(cerr << "~Int32" << endl);
111 }
112 
113 Int32 &
114 Int32::operator=(const Int32 &rhs)
115 {
116  if (this == &rhs)
117  return *this;
118 
119  dynamic_cast<BaseType &>(*this) = rhs;
120 
121  d_buf = rhs.d_buf;
122 
123  return *this;
124 }
125 
126 unsigned int
127 Int32::width(bool) const
128 {
129  return sizeof(dods_int32);
130 }
131 
132 bool
134  Marshaller &m, bool ce_eval)
135 {
136 #if USE_LOCAL_TIMEOUT_SCHEME
137  dds.timeout_on();
138 #endif
139  if (!read_p())
140  read(); // read() throws Error and InternalErr
141 
142  if (ce_eval && !eval.eval_selection(dds, dataset()))
143  return true;
144 #if USE_LOCAL_TIMEOUT_SCHEME
145  dds.timeout_off();
146 #endif
147  m.put_int32( d_buf ) ;
148 
149  return true;
150 }
151 
152 bool
154 {
155  um.get_int32( d_buf ) ;
156 
157  return false;
158 }
159 
160 void
162 {
163  checksum.AddData(reinterpret_cast<uint8_t*>(&d_buf), sizeof(d_buf));
164 }
165 
174 void
175 Int32::serialize(D4StreamMarshaller &m, DMR &, /*ConstraintEvaluator &,*/ bool)
176 {
177  if (!read_p())
178  read(); // read() throws Error
179 
180  m.put_int32( d_buf ) ;
181 }
182 
183 void
185 {
186  um.get_int32( d_buf ) ;
187 }
188 
189 unsigned int
190 Int32::val2buf(void *val, bool)
191 {
192  // Jose Garcia
193  // This method is public therefore and I believe it has being designed
194  // to be use by read which must be implemented on the surrogated library,
195  // thus if the pointer val is NULL, is an Internal Error.
196  if (!val)
197  throw InternalErr(__FILE__, __LINE__,
198  "The incoming pointer does not contain any data.");
199 
200  d_buf = *(dods_int32 *)val;
201 
202  return width();
203 }
204 
205 unsigned int
206 Int32::buf2val(void **val)
207 {
208  // Jose Garcia
209  // The same comment justifying throwing an Error in val2buf applies here.
210  if (!val)
211  throw InternalErr(__FILE__, __LINE__, "NULL pointer.");
212 
213  if (!*val)
214  *val = new dods_int32;
215 
216  *(dods_int32 *)*val = d_buf;
217 
218  return width();
219 }
220 
221 dods_int32
222 Int32::value() const
223 {
224  return d_buf;
225 }
226 
227 bool
228 Int32::set_value(dods_int32 i)
229 {
230  d_buf = i;
231  set_read_p(true);
232 
233  return true;
234 }
235 
236 void
237 Int32::print_val(FILE *out, string space, bool print_decl_p)
238 {
239  ostringstream oss;
240  print_val(oss, space, print_decl_p);
241  fwrite(oss.str().data(), sizeof(char), oss.str().length(), out);
242 }
243 
244 void Int32::print_val(ostream &out, string space, bool print_decl_p)
245 {
246  if (print_decl_p) {
247  print_decl(out, space, false);
248  out << " = " << (int) d_buf << ";\n";
249  }
250  else
251  out << (int) d_buf;
252 }
253 
254 bool
255 Int32::ops(BaseType *b, int op)
256 {
257  if (!read_p() && !read()) {
258  // Jose Garcia
259  // Since the read method is virtual and implemented outside
260  // libdap++ if we cannot read the data that is the problem
261  // of the user or of whoever wrote the surrogate library
262  // implemeting read therefore it is an internal error.
263  throw InternalErr(__FILE__, __LINE__, "This value not read!");
264  }
265 
266  // Extract the second arg's value.
267  if (!b || !(b->read_p() || b->read())) {
268  // Jose Garcia
269  // Since the read method is virtual and implemented outside
270  // libdap++ if we cannot read the data that is the problem
271  // of the user or of whoever wrote the surrogate library
272  // implemeting read therefore it is an internal error.
273  throw InternalErr(__FILE__, __LINE__, "This value not read!");
274  }
275 
276  return d4_ops(b, op);
277 }
278 
282 bool Int32::d4_ops(BaseType *b, int op)
283 {
284  DBG(cerr << "b->typename(): " << b->type_name() << endl);
285  switch (b->type()) {
286  case dods_int8_c:
287  return Cmp<dods_int32, dods_int8>(op, d_buf, static_cast<Int8*>(b)->value());
288  case dods_byte_c:
289  return Cmp<dods_int32, dods_byte>(op, d_buf, static_cast<Byte*>(b)->value());
290  case dods_int16_c:
291  return Cmp<dods_int32, dods_int16>(op, d_buf, static_cast<Int16*>(b)->value());
292  case dods_uint16_c:
293  return Cmp<dods_int32, dods_uint16>(op, d_buf, static_cast<UInt16*>(b)->value());
294  case dods_int32_c:
295  return Cmp<dods_int32, dods_int32>(op, d_buf, static_cast<Int32*>(b)->value());
296  case dods_uint32_c:
297  return Cmp<dods_int32, dods_uint32>(op, d_buf, static_cast<UInt32*>(b)->value());
298  case dods_int64_c:
299  return Cmp<dods_int32, dods_int64>(op, d_buf, static_cast<Int64*>(b)->value());
300  case dods_uint64_c:
301  return Cmp<dods_int32, dods_uint64>(op, d_buf, static_cast<UInt64*>(b)->value());
302  case dods_float32_c:
303  return Cmp<dods_int32, dods_float32>(op, d_buf, static_cast<Float32*>(b)->value());
304  case dods_float64_c:
305  return Cmp<dods_int32, dods_float64>(op, d_buf, static_cast<Float64*>(b)->value());
306  case dods_str_c:
307  case dods_url_c:
308  throw Error(malformed_expr, "Relational operators can only compare compatible types (number, string).");
309  default:
310  throw Error(malformed_expr, "Relational operators only work with scalar types.");
311  }
312 }
313 
322 void
323 Int32::dump(ostream &strm) const
324 {
325  strm << DapIndent::LMarg << "Int32::dump - ("
326  << (void *)this << ")" << endl ;
327  DapIndent::Indent() ;
328  BaseType::dump(strm) ;
329  strm << DapIndent::LMarg << "value: " << d_buf << endl ;
330  DapIndent::UnIndent() ;
331 }
332 
333 } // namespace libdap
334 
virtual bool read()
Read data into a local buffer.
Definition: BaseType.cc:899
-
Holds an 8-bit signed integer value.
Definition: Int8.h:42
-
Holds a64-bit signed integer.
Definition: Int64.h:49
-
virtual bool d4_ops(BaseType *b, int op)
Definition: Int32.cc:282
-
virtual bool read_p()
Has this variable been read?
Definition: BaseType.cc:480
-
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
virtual void print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
Print an ASCII representation of the variable structure.
Definition: BaseType.cc:1003
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: BaseType.cc:291
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Int32.cc:323
-
virtual bool ops(BaseType *b, int op)
Evaluate relational operators.
Definition: Int32.cc:255
-
Int32(const string &n)
Definition: Int32.cc:84
-
Read data from the stream made by D4StreamMarshaller.
-
virtual void compute_checksum(Crc32 &checksum)
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
Definition: Int32.cc:161
-
Holds an unsigned 16-bit integer.
Definition: UInt16.h:57
-
Definition: crc.h:76
-
BaseType(const string &n, const Type &t, bool is_dap4=false)
The BaseType constructor.
Definition: BaseType.cc:126
-
Holds a 32-bit floating point value.
Definition: Float32.h:61
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)
Receive data from the net.
Definition: Int32.cc:153
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
-
Holds a 16-bit signed integer value.
Definition: Int16.h:59
- -
virtual Type type() const
Returns the type of the class instance.
Definition: BaseType.cc:365
-
virtual void set_read_p(bool state)
Sets the value of the read_p property.
Definition: BaseType.cc:516
-
virtual BaseType * ptr_duplicate()
Definition: Int32.cc:103
-
Holds a 64-bit unsigned integer.
Definition: UInt64.h:49
-
void AddData(const uint8_t *pData, const uint32_t length)
Definition: crc.h:98
-
Evaluate a constraint expression.
-
virtual void print_val(FILE *out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: Int32.cc:237
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
-
virtual string type_name() const
Returns the type of the class instance as a string.
Definition: BaseType.cc:379
-
Holds a 64-bit (double precision) floating point value.
Definition: Float64.h:60
-
Holds a single byte.
Definition: Byte.h:60
-
bool eval_selection(DDS &dds, const std::string &dataset)
Evaluate a boolean-valued constraint expression. This is main method for the evaluator and is called ...
-
A class for error processing.
Definition: Error.h:92
-
virtual unsigned int buf2val(void **val)
Reads the class data.
Definition: Int32.cc:206
-
Holds a 32-bit unsigned integer.
Definition: UInt32.h:59
-
virtual unsigned int width(bool constrained=false) const
How many bytes does this variable use Return the number of bytes of storage this variable uses...
Definition: Int32.cc:127
-
virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
Move data to the net, then remove them from the object.
Definition: Int32.cc:133
-
Holds a 32-bit signed integer.
Definition: Int32.h:65
-
virtual unsigned int val2buf(void *val, bool reuse=false)
Loads class data.
Definition: Int32.cc:190
-
virtual string dataset() const
Returns the name of the dataset used to create this instance.
Definition: BaseType.cc:358
-
-
- - - - diff --git a/html/Int32_8h_source.html b/html/Int32_8h_source.html deleted file mode 100644 index 7116c055b..000000000 --- a/html/Int32_8h_source.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - -libdap: Int32.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Int32.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1994-1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Interface for Int32 type.
33 //
34 // jhrg 9/7/94
35 
36 #ifndef _int32_h
37 #define _int32_h 1
38 
39 
40 #ifndef _dods_datatypes_h
41 #include "dods-datatypes.h"
42 #endif
43 
44 #ifndef _basetype_h
45 #include "BaseType.h"
46 #endif
47 
48 #if 0
49 #ifndef constraint_evaluator_h
50 #include "ConstraintEvaluator.h"
51 #endif
52 #endif
53 
54 namespace libdap
55 {
56 
57 class DMR;
58 class ConstraintEvaluator;
59 
65 class Int32: public BaseType
66 {
67 protected:
68  dods_int32 d_buf;
69 
70 public:
71  Int32(const string &n);
72  Int32(const string &n, const string &d);
73 
74  Int32(const Int32 &copy_from);
75 
76  Int32 &operator=(const Int32 &rhs);
77 
78  virtual ~Int32();
79 
80  virtual BaseType *ptr_duplicate();
81  virtual unsigned int width(bool constrained = false) const;
82 
83  //DAP2
84  virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval = true);
85  virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse = false);
86 
87  // DAP4
88  virtual void compute_checksum(Crc32 &checksum);
89  virtual void serialize(D4StreamMarshaller &m, DMR &dmr, /*ConstraintEvaluator &eval,*/ bool filter = false);
90  virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr);
91 
92  virtual unsigned int val2buf(void *val, bool reuse = false);
93  virtual unsigned int buf2val(void **val);
94 
95  virtual bool set_value(dods_int32 i);
96  virtual dods_int32 value() const;
97 
98  virtual void print_val(FILE *out, string space = "",
99  bool print_decl_p = true);
100  virtual void print_val(ostream &out, string space = "",
101  bool print_decl_p = true);
102 
103  virtual bool ops(BaseType *b, int op);
104  virtual bool d4_ops(BaseType *b, int op);
105 
106  virtual void dump(ostream &strm) const ;
107 };
108 
109 } // namespace libdap
110 
111 #endif // _int32_h
112 
virtual bool d4_ops(BaseType *b, int op)
Definition: Int32.cc:282
-
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Int32.cc:323
-
virtual bool ops(BaseType *b, int op)
Evaluate relational operators.
Definition: Int32.cc:255
-
Int32(const string &n)
Definition: Int32.cc:84
-
Read data from the stream made by D4StreamMarshaller.
-
virtual void compute_checksum(Crc32 &checksum)
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
Definition: Int32.cc:161
-
Definition: crc.h:76
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)
Receive data from the net.
Definition: Int32.cc:153
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
- -
virtual BaseType * ptr_duplicate()
Definition: Int32.cc:103
-
Evaluate a constraint expression.
-
virtual void print_val(FILE *out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: Int32.cc:237
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
-
virtual unsigned int buf2val(void **val)
Reads the class data.
Definition: Int32.cc:206
-
virtual unsigned int width(bool constrained=false) const
How many bytes does this variable use Return the number of bytes of storage this variable uses...
Definition: Int32.cc:127
-
virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
Move data to the net, then remove them from the object.
Definition: Int32.cc:133
-
Holds a 32-bit signed integer.
Definition: Int32.h:65
-
virtual unsigned int val2buf(void *val, bool reuse=false)
Loads class data.
Definition: Int32.cc:190
-
-
- - - - diff --git a/html/Int64_8cc_source.html b/html/Int64_8cc_source.html deleted file mode 100644 index f439d573b..000000000 --- a/html/Int64_8cc_source.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - -libdap: Int64.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Int64.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1994-1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Implementation for Int64.
33 //
34 // jhrg 9/7/94
35 
36 
37 #include "config.h"
38 
39 #include <cassert>
40 #include <sstream>
41 
42 #include "Byte.h" // synonymous with UInt8 and Char
43 #include "Int8.h"
44 #include "Int16.h"
45 #include "UInt16.h"
46 #include "Int32.h"
47 #include "UInt32.h"
48 #include "Int64.h"
49 #include "UInt64.h"
50 #include "Float32.h"
51 #include "Float64.h"
52 #include "Str.h"
53 #include "Url.h"
54 
55 #if 0
56 #include "Array.h"
57 #include "Structure.h"
58 #include "Sequence.h"
59 #include "Grid.h"
60 #endif
61 
62 #include "DMR.h"
63 #include "D4StreamMarshaller.h"
64 #include "D4StreamUnMarshaller.h"
65 
66 #include "util.h"
67 #include "parser.h"
68 #include "Operators.h"
69 #include "dods-limits.h"
70 #include "debug.h"
71 #include "InternalErr.h"
72 #include "DapIndent.h"
73 
74 using std::cerr;
75 using std::endl;
76 
77 namespace libdap {
78 
89 Int64::Int64(const string &n) : BaseType(n, dods_int64_c, true /*is_dap4*/), d_buf(0)
90 {}
91 
102 Int64::Int64(const string &n, const string &d) : BaseType(n, d, dods_int64_c, true /*is_dap4*/), d_buf(0)
103 {}
104 
105 Int64::Int64(const Int64 &copy_from) : BaseType(copy_from)
106 {
107  d_buf = copy_from.d_buf;
108 }
109 
110 BaseType *
112 {
113  return new Int64(*this);
114 }
115 
116 Int64::~Int64()
117 {
118  DBG(cerr << "~Int64" << endl);
119 }
120 
121 Int64 &
122 Int64::operator=(const Int64 &rhs)
123 {
124  if (this == &rhs)
125  return *this;
126 
127  dynamic_cast<BaseType &>(*this) = rhs;
128 
129  d_buf = rhs.d_buf;
130 
131  return *this;
132 }
133 
134 unsigned int
135 Int64::width(bool) const
136 {
137  return sizeof(dods_int64);
138 }
139 
140 void
142 {
143  checksum.AddData(reinterpret_cast<uint8_t*>(&d_buf), sizeof(d_buf));
144 }
145 
154 void
155 Int64::serialize(D4StreamMarshaller &m, DMR &, /*ConstraintEvaluator &,*/ bool)
156 {
157  if (!read_p())
158  read(); // read() throws Error
159 
160  m.put_int64( d_buf ) ;
161 }
162 
163 void
165 {
166  um.get_int64( d_buf ) ;
167 }
168 
169 dods_int64
170 Int64::value() const
171 {
172  return d_buf;
173 }
174 
175 bool
176 Int64::set_value(dods_int64 i)
177 {
178  d_buf = i;
179  set_read_p(true);
180 
181  return true;
182 }
183 
184 unsigned int
185 Int64::buf2val(void **val)
186 {
187  if (!val)
188  throw InternalErr(__FILE__, __LINE__, "NULL pointer.");
189 
190  if (!*val)
191  *val = new dods_int64;
192 
193  *(dods_int64 *)*val = d_buf;
194 
195  return width();
196 }
197 void Int64::print_val(ostream &out, string space, bool print_decl_p)
198 {
199  if (print_decl_p) {
200  print_decl(out, space, false);
201  out << " = " << d_buf << ";\n";
202  }
203  else
204  out << d_buf;
205 }
206 
207 bool
208 Int64::ops(BaseType *b, int op)
209 {
210  // Get the arg's value.
211  if (!read_p() && !read())
212  throw InternalErr(__FILE__, __LINE__, "This value not read!");
213 
214  // Get the second arg's value.
215  if (!b || !(b->read_p() || b->read()))
216  throw InternalErr(__FILE__, __LINE__, "This value not read!");
217 
218  return d4_ops(b, op);
219 }
220 
224 bool Int64::d4_ops(BaseType *b, int op)
225 {
226  switch (b->type()) {
227  case dods_int8_c:
228  return Cmp<dods_int64, dods_int8>(op, d_buf, static_cast<Int8*>(b)->value());
229  case dods_byte_c:
230  return Cmp<dods_int64, dods_byte>(op, d_buf, static_cast<Byte*>(b)->value());
231  case dods_int16_c:
232  return Cmp<dods_int64, dods_int16>(op, d_buf, static_cast<Int16*>(b)->value());
233  case dods_uint16_c:
234  return Cmp<dods_int64, dods_uint16>(op, d_buf, static_cast<UInt16*>(b)->value());
235  case dods_int32_c:
236  return Cmp<dods_int64, dods_int32>(op, d_buf, static_cast<Int32*>(b)->value());
237  case dods_uint32_c:
238  return Cmp<dods_int64, dods_uint32>(op, d_buf, static_cast<UInt32*>(b)->value());
239  case dods_int64_c:
240  return Cmp<dods_int64, dods_int64>(op, d_buf, static_cast<Int64*>(b)->value());
241  case dods_uint64_c:
242  return Cmp<dods_int64, dods_uint64>(op, d_buf, static_cast<UInt64*>(b)->value());
243  case dods_float32_c:
244  return Cmp<dods_int64, dods_float32>(op, d_buf, static_cast<Float32*>(b)->value());
245  case dods_float64_c:
246  return Cmp<dods_int64, dods_float64>(op, d_buf, static_cast<Float64*>(b)->value());
247  case dods_str_c:
248  case dods_url_c:
249  throw Error(malformed_expr, "Relational operators can only compare compatible types (number, string).");
250  default:
251  throw Error(malformed_expr, "Relational operators only work with scalar types.");
252  }
253 }
254 
261 vector<BaseType *> *
263 {
264 #if 0
265  BaseType *dest = this->ptr_duplicate();
266  // convert the d4 attributes to a dap2 attribute table.
267  AttrTable *attrs = this->attributes()->get_AttrTable();
268  attrs->set_name(name());
269  dest->set_attr_table(*attrs);
270  dest->set_is_dap4(false);
271  // attrs->print(cerr,"",true);
272  return dest;
273 #endif
274 
275  return NULL;
276 }
277 
286 void
287 Int64::dump(ostream &strm) const
288 {
289  strm << DapIndent::LMarg << "Int64::dump - ("
290  << (void *)this << ")" << endl ;
291  DapIndent::Indent() ;
292  BaseType::dump(strm) ;
293  strm << DapIndent::LMarg << "value: " << d_buf << endl ;
294  DapIndent::UnIndent() ;
295 }
296 
297 } // namespace libdap
298 
virtual bool d4_ops(BaseType *b, int op)
Definition: Int64.cc:224
-
virtual bool read()
Read data into a local buffer.
Definition: BaseType.cc:899
-
Holds an 8-bit signed integer value.
Definition: Int8.h:42
-
Holds a64-bit signed integer.
Definition: Int64.h:49
-
virtual bool read_p()
Has this variable been read?
Definition: BaseType.cc:480
-
virtual string name() const
Returns the name of the class instance.
Definition: BaseType.cc:320
-
virtual void print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
Print an ASCII representation of the variable structure.
Definition: BaseType.cc:1003
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: BaseType.cc:291
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
virtual bool ops(BaseType *b, int op)
Evaluate relational operators.
Definition: Int64.cc:208
-
Read data from the stream made by D4StreamMarshaller.
-
Holds an unsigned 16-bit integer.
Definition: UInt16.h:57
-
Definition: crc.h:76
-
BaseType(const string &n, const Type &t, bool is_dap4=false)
The BaseType constructor.
Definition: BaseType.cc:126
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Int64.cc:287
-
Holds a 32-bit floating point value.
Definition: Float32.h:61
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
-
Holds a 16-bit signed integer value.
Definition: Int16.h:59
-
virtual std::vector< BaseType * > * transform_to_dap2(AttrTable *parent_attr_table)
DAP4 to DAP2 transform.
Definition: Int64.cc:262
-
virtual Type type() const
Returns the type of the class instance.
Definition: BaseType.cc:365
-
virtual void serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)
Serialize an Int8.
Definition: Int64.cc:155
-
virtual void set_read_p(bool state)
Sets the value of the read_p property.
Definition: BaseType.cc:516
-
virtual void compute_checksum(Crc32 &checksum)
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
Definition: Int64.cc:141
-
virtual D4Attributes * attributes()
Definition: BaseType.cc:599
-
Holds a 64-bit unsigned integer.
Definition: UInt64.h:49
-
virtual BaseType * ptr_duplicate()
Definition: Int64.cc:111
-
void AddData(const uint8_t *pData, const uint32_t length)
Definition: crc.h:98
-
Int64(const string &n)
Definition: Int64.cc:89
-
virtual unsigned int width(bool constrained=false) const
How many bytes does this variable use Return the number of bytes of storage this variable uses...
Definition: Int64.cc:135
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
Holds a 64-bit (double precision) floating point value.
Definition: Float64.h:60
-
virtual void set_attr_table(const AttrTable &at)
Definition: BaseType.cc:590
-
Holds a single byte.
Definition: Byte.h:60
-
A class for error processing.
Definition: Error.h:92
-
virtual void set_name(const string &n)
Set the name of this attribute table.
Definition: AttrTable.cc:245
-
Holds a 32-bit unsigned integer.
Definition: UInt32.h:59
-
virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr)
Definition: Int64.cc:164
-
Holds a 32-bit signed integer.
Definition: Int32.h:65
-
-
- - - - diff --git a/html/Int64_8h_source.html b/html/Int64_8h_source.html deleted file mode 100644 index 087fca972..000000000 --- a/html/Int64_8h_source.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - -libdap: Int64.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Int64.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2012 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef _int64_h
27 #define _int64_h 1
28 
29 #ifndef _dods_datatypes_h
30 #include "dods-datatypes.h"
31 #endif
32 
33 #ifndef _basetype_h
34 #include "BaseType.h"
35 #endif
36 
37 namespace libdap
38 {
39 
40 class ConstraintEvaluator;
41 class Marshaller;
42 class UnMarshaller;
43 
49 class Int64: public BaseType
50 {
51  virtual unsigned int val2buf(void *val, bool) {
52  set_value(*reinterpret_cast<dods_int64*>(val));
53  return sizeof(dods_int64);
54  }
55  //virtual unsigned int buf2val(void **) { throw InternalErr(__FILE__, __LINE__, "Not implemented for Int64"); }
56  virtual unsigned int buf2val(void **);
57  virtual void print_val(FILE *, string, bool) { throw InternalErr(__FILE__, __LINE__, "Not implemented for Int64"); }
58 
59 protected:
60  dods_int64 d_buf;
61 
62 public:
63  Int64(const string &n);
64  Int64(const string &n, const string &d);
65 
66  Int64(const Int64 &copy_from);
67 
68  Int64 &operator=(const Int64 &rhs);
69 
70  virtual ~Int64();
71 
72  virtual BaseType *ptr_duplicate();
73 
74  virtual unsigned int width(bool constrained = false) const;
75 
76  // DAP4
77  virtual void compute_checksum(Crc32 &checksum);
78  virtual void serialize(D4StreamMarshaller &m, DMR &dmr, /*ConstraintEvaluator &eval,*/ bool filter = false);
79  virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr);
80 
81  virtual bool set_value(dods_int64 i);
82  virtual dods_int64 value() const;
83 
84  virtual void print_val(ostream &out, string space = "", bool print_decl_p = true);
85 
86  virtual bool ops(BaseType *b, int op);
87  virtual bool d4_ops(BaseType *b, int op);
88  virtual std::vector<BaseType *> *transform_to_dap2(AttrTable *parent_attr_table);
89 
90  virtual void dump(ostream &strm) const ;
91 };
92 
93 } // namespace libdap
94 
95 #endif // _int64_h
96 
virtual bool d4_ops(BaseType *b, int op)
Definition: Int64.cc:224
-
Holds a64-bit signed integer.
Definition: Int64.h:49
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
virtual bool ops(BaseType *b, int op)
Evaluate relational operators.
Definition: Int64.cc:208
-
Read data from the stream made by D4StreamMarshaller.
-
Definition: crc.h:76
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Int64.cc:287
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
-
virtual std::vector< BaseType * > * transform_to_dap2(AttrTable *parent_attr_table)
DAP4 to DAP2 transform.
Definition: Int64.cc:262
-
virtual void serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)
Serialize an Int8.
Definition: Int64.cc:155
-
virtual void compute_checksum(Crc32 &checksum)
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
Definition: Int64.cc:141
-
virtual BaseType * ptr_duplicate()
Definition: Int64.cc:111
-
Int64(const string &n)
Definition: Int64.cc:89
-
virtual unsigned int width(bool constrained=false) const
How many bytes does this variable use Return the number of bytes of storage this variable uses...
Definition: Int64.cc:135
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr)
Definition: Int64.cc:164
-
-
- - - - diff --git a/html/Int8_8cc_source.html b/html/Int8_8cc_source.html deleted file mode 100644 index 7d598eb30..000000000 --- a/html/Int8_8cc_source.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - -libdap: Int8.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Int8.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2012 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #include "config.h"
27 
28 #include <cassert>
29 #include <sstream>
30 
31 #include "Byte.h" // synonymous with UInt8 and Char
32 #include "Int8.h"
33 #include "Int16.h"
34 #include "UInt16.h"
35 #include "Int32.h"
36 #include "UInt32.h"
37 #include "Int64.h"
38 #include "UInt64.h"
39 #include "Float32.h"
40 #include "Float64.h"
41 #include "Str.h"
42 #include "Url.h"
43 
44 #include "D4StreamMarshaller.h"
45 #include "D4StreamUnMarshaller.h"
46 
47 #include "DDS.h"
48 #include "util.h"
49 #include "parser.h"
50 #include "Operators.h"
51 #include "dods-limits.h"
52 #include "debug.h"
53 #include "InternalErr.h"
54 #include "DapIndent.h"
55 
56 using std::cerr;
57 using std::endl;
58 
59 namespace libdap {
60 
68 Int8::Int8(const string &n) : BaseType(n, dods_int8_c, true /*is_dap4*/), d_buf(0)
69 {}
70 
83 Int8::Int8(const string &n, const string &d) : BaseType(n, d, dods_int8_c, true /*is_dap4*/), d_buf(0)
84 {}
85 
86 Int8::Int8(const Int8 &copy_from) : BaseType(copy_from)
87 {
88  d_buf = copy_from.d_buf;
89 }
90 
91 BaseType *
93 {
94  return new Int8(*this);
95 }
96 
97 Int8 &
98 Int8::operator=(const Int8 &rhs)
99 {
100  if (this == &rhs)
101  return *this;
102 
103  static_cast<BaseType &>(*this) = rhs;
104 
105  d_buf = rhs.d_buf;
106 
107  return *this;
108 }
109 
110 unsigned int
111 Int8::width(bool) const
112 {
113  return sizeof(dods_int8);
114 }
115 
116 void
118 {
119  checksum.AddData(reinterpret_cast<uint8_t*>(&d_buf), sizeof(d_buf));
120 }
121 
130 void
131 Int8::serialize(D4StreamMarshaller &m, DMR &, /*ConstraintEvaluator &,*/ bool)
132 {
133  if (!read_p())
134  read(); // read() throws Error
135 
136  m.put_int8( d_buf ) ;
137 }
138 
139 void
141 {
142  um.get_int8( d_buf ) ;
143 }
144 
145 dods_int8
146 Int8::value() const
147 {
148  return d_buf;
149 }
150 
151 bool
152 Int8::set_value(dods_int8 i)
153 {
154  d_buf = i;
155  set_read_p(true);
156 
157  return true;
158 }
159 
160 void Int8::print_val(ostream &out, string space, bool print_decl_p)
161 {
162  if (print_decl_p) {
163  print_decl(out, space, false);
164  out << " = " << (int)d_buf << ";\n";
165  }
166  else
167  out << (int)d_buf;
168 }
169 
170 bool
171 Int8::ops(BaseType *b, int op)
172 {
173  // Get the arg's value.
174  if (!read_p() && !read())
175  throw InternalErr(__FILE__, __LINE__, "This value not read!");
176 
177  // Get the second arg's value.
178  if (!b || !(b->read_p() || b->read()))
179  throw InternalErr(__FILE__, __LINE__, "This value not read!");
180 
181  return d4_ops(b, op);
182 }
183 
187 bool Int8::d4_ops(BaseType *b, int op)
188 {
189  switch (b->type()) {
190  case dods_int8_c:
191  return Cmp<dods_int8, dods_int8>(op, d_buf, static_cast<Int8*>(b)->value());
192  case dods_byte_c:
193  return Cmp<dods_int8, dods_byte>(op, d_buf, static_cast<Byte*>(b)->value());
194  case dods_int16_c:
195  return Cmp<dods_int8, dods_int16>(op, d_buf, static_cast<Int16*>(b)->value());
196  case dods_uint16_c:
197  return Cmp<dods_int8, dods_uint16>(op, d_buf, static_cast<UInt16*>(b)->value());
198  case dods_int32_c:
199  return Cmp<dods_int8, dods_int32>(op, d_buf, static_cast<Int32*>(b)->value());
200  case dods_uint32_c:
201  return Cmp<dods_int8, dods_uint32>(op, d_buf, static_cast<UInt32*>(b)->value());
202  case dods_int64_c:
203  return Cmp<dods_int8, dods_int64>(op, d_buf, static_cast<Int64*>(b)->value());
204  case dods_uint64_c:
205  return Cmp<dods_int8, dods_uint64>(op, d_buf, static_cast<UInt64*>(b)->value());
206  case dods_float32_c:
207  return Cmp<dods_int8, dods_float32>(op, d_buf, static_cast<Float32*>(b)->value());
208  case dods_float64_c:
209  return Cmp<dods_int8, dods_float64>(op, d_buf, static_cast<Float64*>(b)->value());
210  case dods_str_c:
211  case dods_url_c:
212  throw Error(malformed_expr, "Relational operators can only compare compatible types (number, string).");
213  default:
214  throw Error(malformed_expr, "Relational operators only work with scalar types.");
215  }
216 }
217 
231 std::vector<BaseType *> *
233 {
234  vector<BaseType *> *vec = BaseType::transform_to_dap2(parent_attr_table);
235  if(vec->size()!=1){
236  ostringstream oss;
237  oss << __func__ << "() - Something Bad Happened. This transform should produce only ";
238  oss << " a single BaseType yet it produced " << vec->size();
239  throw Error(internal_error,oss.str());
240  }
241  (*vec)[0]->set_type(dods_byte_c);
242  return vec;
243 }
253 void
254 Int8::dump(ostream &strm) const
255 {
256  strm << DapIndent::LMarg << "Int8::dump - ("
257  << (void *)this << ")" << endl ;
258  DapIndent::Indent() ;
259  BaseType::dump(strm) ;
260  strm << DapIndent::LMarg << "value: " << d_buf << endl ;
261  DapIndent::UnIndent() ;
262 }
263 
264 } // namespace libdap
265 
virtual bool ops(BaseType *b, int op)
Evaluate relational operators.
Definition: Int8.cc:171
-
virtual bool read()
Read data into a local buffer.
Definition: BaseType.cc:899
-
Holds an 8-bit signed integer value.
Definition: Int8.h:42
-
Holds a64-bit signed integer.
Definition: Int64.h:49
-
virtual bool read_p()
Has this variable been read?
Definition: BaseType.cc:480
-
Int8(const string &n)
Definition: Int8.cc:68
-
virtual void print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
Print an ASCII representation of the variable structure.
Definition: BaseType.cc:1003
-
virtual std::vector< BaseType * > * transform_to_dap2(AttrTable *parent_attr_table)
DAP4 to DAP2 transform.
Definition: Int8.cc:232
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: BaseType.cc:291
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
Read data from the stream made by D4StreamMarshaller.
-
Holds an unsigned 16-bit integer.
Definition: UInt16.h:57
-
Definition: crc.h:76
-
BaseType(const string &n, const Type &t, bool is_dap4=false)
The BaseType constructor.
Definition: BaseType.cc:126
-
virtual void compute_checksum(Crc32 &checksum)
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
Definition: Int8.cc:117
-
Holds a 32-bit floating point value.
Definition: Float32.h:61
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual BaseType * ptr_duplicate()
Definition: Int8.cc:92
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
virtual unsigned int width(bool constrained=false) const
How many bytes does this variable use Return the number of bytes of storage this variable uses...
Definition: Int8.cc:111
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
-
Holds a 16-bit signed integer value.
Definition: Int16.h:59
-
virtual Type type() const
Returns the type of the class instance.
Definition: BaseType.cc:365
-
virtual void set_read_p(bool state)
Sets the value of the read_p property.
Definition: BaseType.cc:516
-
Holds a 64-bit unsigned integer.
Definition: UInt64.h:49
-
void AddData(const uint8_t *pData, const uint32_t length)
Definition: crc.h:98
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Int8.cc:254
-
virtual std::vector< BaseType * > * transform_to_dap2(AttrTable *parent_attr_table)
DAP4 to DAP2 transform.
Definition: BaseType.cc:259
-
virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr)
Definition: Int8.cc:140
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
Holds a 64-bit (double precision) floating point value.
Definition: Float64.h:60
-
Holds a single byte.
Definition: Byte.h:60
-
virtual bool d4_ops(BaseType *b, int op)
Definition: Int8.cc:187
-
A class for error processing.
Definition: Error.h:92
-
Holds a 32-bit unsigned integer.
Definition: UInt32.h:59
-
virtual void serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)
Serialize an Int8.
Definition: Int8.cc:131
-
Holds a 32-bit signed integer.
Definition: Int32.h:65
-
-
- - - - diff --git a/html/Int8_8h_source.html b/html/Int8_8h_source.html deleted file mode 100644 index 9c3c15e26..000000000 --- a/html/Int8_8h_source.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - -libdap: Int8.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Int8.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2012 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef _int8_h
27 #define _int8_h 1
28 
29 #ifndef _dods_datatypes_h
30 #include "dods-datatypes.h"
31 #endif
32 
33 #ifndef _basetype_h
34 #include "BaseType.h"
35 #endif
36 
37 namespace libdap
38 {
39 
42 class Int8: public BaseType
43 {
44  // This is used in BaseType *Vector::var(unsigned int i)
45  virtual unsigned int val2buf(void *val, bool) {
46  set_value(*reinterpret_cast<dods_int8*>(val));
47  return sizeof(dods_int8);
48  }
49  virtual unsigned int buf2val(void **) { throw InternalErr(__FILE__, __LINE__, "buf2val: Not implemented for Int8"); }
50  virtual void print_val(FILE *, string , bool) { throw InternalErr(__FILE__, __LINE__, "print_val: Not implemented for Int8"); }
51 
52 protected:
53  dods_int8 d_buf;
54 
55 public:
56  Int8(const string &n);
57  Int8(const string &n, const string &d);
58  virtual ~Int8()
59  {}
60 
61  Int8(const Int8 &copy_from);
62 
63  Int8 &operator=(const Int8 &rhs);
64 
65  virtual BaseType *ptr_duplicate();
66 
67  virtual unsigned int width(bool constrained = false) const;
68 
69  // DAP4
70  virtual void compute_checksum(Crc32 &checksum);
71  virtual void serialize(D4StreamMarshaller &m, DMR &dmr, /*ConstraintEvaluator &eval,*/ bool filter = false);
72  virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr);
73 
74  virtual dods_int8 value() const;
75  virtual bool set_value(dods_int8 val);
76 
77  virtual void print_val(ostream &out, string space = "", bool print_decl_p = true);
78 
79  virtual bool ops(BaseType *b, int op);
80  virtual bool d4_ops(BaseType *b, int op);
81  virtual std::vector<BaseType *> *transform_to_dap2(AttrTable *parent_attr_table);
82 
83  virtual void dump(ostream &strm) const ;
84 };
85 
86 } // namespace libdap
87 
88 #endif // _int16_h
89 
virtual bool ops(BaseType *b, int op)
Evaluate relational operators.
Definition: Int8.cc:171
-
Holds an 8-bit signed integer value.
Definition: Int8.h:42
-
Int8(const string &n)
Definition: Int8.cc:68
-
virtual std::vector< BaseType * > * transform_to_dap2(AttrTable *parent_attr_table)
DAP4 to DAP2 transform.
Definition: Int8.cc:232
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
Read data from the stream made by D4StreamMarshaller.
-
Definition: crc.h:76
-
virtual void compute_checksum(Crc32 &checksum)
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
Definition: Int8.cc:117
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual BaseType * ptr_duplicate()
Definition: Int8.cc:92
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
virtual unsigned int width(bool constrained=false) const
How many bytes does this variable use Return the number of bytes of storage this variable uses...
Definition: Int8.cc:111
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Int8.cc:254
-
virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr)
Definition: Int8.cc:140
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
virtual bool d4_ops(BaseType *b, int op)
Definition: Int8.cc:187
-
virtual void serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)
Serialize an Int8.
Definition: Int8.cc:131
-
-
- - - - diff --git a/html/InternalErr_8cc_source.html b/html/InternalErr_8cc_source.html deleted file mode 100644 index 33001a254..000000000 --- a/html/InternalErr_8cc_source.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -libdap: InternalErr.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
InternalErr.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Implementation for the InternalErr class.
33 
34 
35 #include "config.h"
36 
37 #include <string>
38 #include <sstream>
39 
40 #include "InternalErr.h"
41 #include "util.h"
42 
43 using std::endl;
44 using std::ostringstream;
45 
46 namespace libdap {
47 
48 InternalErr::InternalErr() : Error()
49 {
50  _error_code = internal_error;
51 }
52 
53 InternalErr::InternalErr(const string &msg) : Error()
54 {
55  _error_code = internal_error;
56  _error_message = "";
57  _error_message += "An internal error was encountered:\n";
58  _error_message += msg + "\n";
59  _error_message += "Please report this to support@opendap.org\n";
60 }
61 
62 
63 //InternalErr::InternalErr(string msg, string file, int line)
64 // : Error(unknown_error, msg)
65 InternalErr::InternalErr(const string &file, const int &line, const string &msg) : Error(msg, file, line)
66 {
67  _error_code = internal_error;
68  _error_message = "";
69  _error_message += "An internal error was encountered in " + file + " at line ";
70  // Jose Garcia. Next we append line to the string _error_code.
71  // This function is defined in util.h
72  append_long_to_string(line, 10, _error_message);
73  _error_message += ":\n";
74  _error_message += msg + "\n";
75  _error_message += "Please report this to support@opendap.org\n";
76 }
77 
78 InternalErr::InternalErr(const InternalErr &copy_from)
79  : Error(copy_from)
80 {}
81 
82 InternalErr::~InternalErr() throw()
83 {}
84 
85 InternalErr &
86 InternalErr::operator=(const InternalErr &rhs) {
87  if (this == &rhs) return *this;
88 
89  _error_code = rhs._error_code;
90  _error_message = rhs._error_message;
91 
92  d_file = rhs.d_file;
93  d_line = rhs.d_line;
94 
95  return *this;
96 }
97 
101 bool
103 {
104  return Error::OK();
105 }
106 
107 } // namespace libdap
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
bool OK() const
Is the Error object valid?
Definition: Error.cc:135
-
bool OK()
Is the InternalErr object valid?
Definition: InternalErr.cc:102
-
-
- - - - diff --git a/html/InternalErr_8h_source.html b/html/InternalErr_8h_source.html deleted file mode 100644 index d622aa5bc..000000000 --- a/html/InternalErr_8h_source.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -libdap: InternalErr.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
InternalErr.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Interface for the InternalErr class
33 //
34 // 5/3/99 jhrg
35 
36 #ifndef _internalerr_h
37 #define _internalerr_h 1
38 
39 
40 #include <string>
41 
42 #ifndef _error_h
43 #include "Error.h"
44 #endif
45 
46 namespace libdap
47 {
48 
49 
64 class InternalErr: public Error
65 {
66 
67 public:
76  InternalErr(const string &msg);
79  InternalErr(const string &file, const int &line, const string &msg);
81  InternalErr();
83  InternalErr(const InternalErr &copy_from);
85 
86  virtual ~InternalErr() throw();
87 
88  InternalErr &operator=(const InternalErr &rhs);
89 
90  bool OK();
91 };
92 
93 } // namespace libdap
94 
95 #endif // _internalerr_h
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
bool OK()
Is the InternalErr object valid?
Definition: InternalErr.cc:102
-
A class for error processing.
Definition: Error.h:92
-
-
- - - - diff --git a/html/Keywords2_8cc_source.html b/html/Keywords2_8cc_source.html deleted file mode 100644 index ac7eb8751..000000000 --- a/html/Keywords2_8cc_source.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -libdap: Keywords2.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Keywords2.cc
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2011 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 #include "config.h"
25 
26 #include <iostream>
27 #include <vector>
28 
29 //#define DODS_DEBUG
30 
31 #include "Keywords2.h"
32 #include "Error.h"
33 #include "escaping.h"
34 #include "debug.h"
35 
36 using namespace std;
37 
38 namespace libdap {
39 
40 Keywords::Keywords()
41 {
42  // Load known keywords and their allowed values
43  vector<string> v1(7);
44  v1[0] = "2"; v1[1] = "2.0"; v1[2] = "3.2"; v1[3] = "3.3"; v1[4] = "3.4";
45  v1[5] = "4"; v1[6] = "4.0";
46  value_set_t vs = value_set_t(v1.begin(), v1.end());
47  d_known_keywords["dap"] = vs;
48 
49  vector<string> v2(4);
50  v2[0] = "md5"; v2[1] = "MD5"; v2[2] = "sha1"; v2[3] = "SHA1";
51  value_set_t vs2 = value_set_t(v2.begin(), v2.end());
52  d_known_keywords["checksum"] = vs2;
53 }
54 
55 Keywords::~Keywords()
56 {
57 }
58 
66 static bool f_parse_keyword(const string &kw, string &word, string &value)
67 {
68  word = "";
69  value = "";
70  string::size_type i = kw.find('(');
71  if (i == string::npos)
72  return false;
73  word = kw.substr(0, i);
74  string::size_type j = kw.find(')');
75  if (j == string::npos)
76  return false;
77  ++i; // Move past the opening paren
78  value = kw.substr(i, j-i);
79 
80  return (!word.empty() && !value.empty());
81 }
82 
89 void Keywords::m_add_keyword(const keyword &word, const keyword_value &value)
90 {
91  d_parsed_keywords[word] = value;
92 }
93 
101 bool Keywords::m_is_valid_keyword(const keyword &word, const keyword_value &value) const
102 {
103  map<keyword, value_set_t>::const_iterator ci = d_known_keywords.find(word);
104  if (ci == d_known_keywords.end())
105  return false;
106  else {
107  value_set_t vs = ci->second;
108 
109  if (vs.find(value) == vs.end())
110  throw Error("Bad value passed to the keyword/function: " + word);
111  }
112 
113  return true;
114 }
115 
121 bool Keywords::is_known_keyword(const string &word) const
122 {
123  return d_known_keywords.count(word) == 1;
124 }
125 
131 list<Keywords::keyword> Keywords::get_keywords() const
132 {
133  list<keyword> kws;
134  map<keyword, keyword_value>::const_iterator i;
135  for (i = d_parsed_keywords.begin(); i != d_parsed_keywords.end(); ++i)
136  kws.push_front((*i).first);
137 
138  return kws;
139 }
140 
141 
148 bool Keywords::has_keyword(const keyword &kw) const
149 {
150  return d_parsed_keywords.count(kw) == 1;
151 }
152 
158 Keywords::keyword_value Keywords::get_keyword_value(const keyword &kw) const
159 {
160  if (d_known_keywords.find(kw) == d_known_keywords.end())
161  throw Error("Keyword not known (" + kw + ")");
162 
163  return d_parsed_keywords.find(kw)->second;
164 }
165 
171 string Keywords::parse_keywords(const string &ce)
172 {
173  // Get the whole CE
174  string projection = www2id(ce, "%", "%20");
175  string selection = "";
176 
177  // Separate the selection part (which follows/includes the first '&')
178  string::size_type amp = projection.find('&');
179  if (amp != string::npos) {
180  selection = projection.substr(amp);
181  projection = projection.substr(0, amp);
182  }
183 
184  // Extract keywords; add to the Keywords keywords. For this, scan for
185  // a known set of keywords and assume that anything else is part of the
186  // projection and should be left alone. Keywords must come before variables
187  // The 'projection' string will look like: '' or 'dap4.0' or 'dap4.0,u,v'
188  while (!projection.empty()) {
189  string::size_type i = projection.find(',');
190  string next_word = projection.substr(0, i);
191  string word, value;
192  if (f_parse_keyword(next_word, word, value)
193  && m_is_valid_keyword(word, value)) {
194  m_add_keyword(word, value);
195  if (i != string::npos)
196  projection = projection.substr(i + 1);
197  else
198  projection = "";
199  }
200  else {
201  break; // exit on first non-keyword
202  }
203  }
204 
205  // The CE is whatever is left after removing the keywords
206  return projection + selection;
207 }
208 
209 }
STL namespace.
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
string www2id(const string &in, const string &escape, const string &except)
Definition: escaping.cc:220
-
A class for error processing.
Definition: Error.h:92
-
-
- - - - diff --git a/html/Keywords2_8h_source.html b/html/Keywords2_8h_source.html deleted file mode 100644 index c09c4bb23..000000000 --- a/html/Keywords2_8h_source.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -libdap: Keywords2.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Keywords2.h
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2011 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 #ifndef KEYWORDS_H_
26 #define KEYWORDS_H_
27 
28 #include <string>
29 #include <set>
30 #include <map>
31 #include <list>
32 
33 using namespace std;
34 
35 namespace libdap {
36 
52 class Keywords {
53 public:
54  // convenience types
55  typedef string keyword;
56  typedef string keyword_value;
57  typedef set<keyword_value> value_set_t;
58 
59 private:
61  map<keyword, keyword_value> d_parsed_keywords;
62 
64  map<keyword, value_set_t> d_known_keywords;
65 
66  virtual void m_add_keyword(const keyword &word, const keyword_value &value);
67  virtual bool m_is_valid_keyword(const keyword &word, const keyword_value &value) const;
68 
69 public:
70  Keywords();
71  virtual ~Keywords();
72 
73  virtual string parse_keywords(const string &ce);
74 
75  // Is this keyword in the dictionary?
76  virtual bool is_known_keyword(const string &s) const;
77 
78  // Get a list of all of the keywords parsed
79  virtual list<keyword> get_keywords() const;
80  // Has a particular keyword been parsed
81  virtual bool has_keyword(const keyword &kw) const;
82 
83  // Get the parsed keyword (and it's dictionary value) of a particular kind
84  virtual keyword_value get_keyword_value(const keyword &kw) const;
85 };
86 
87 }
88 
89 #endif /* KEYWORDS_H_ */
STL namespace.
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- -
-
- - - - diff --git a/html/Makefile b/html/Makefile deleted file mode 100644 index db181d786..000000000 --- a/html/Makefile +++ /dev/null @@ -1,38 +0,0 @@ -DOCSET_NAME=org.opendap.libdap.docset -DOCSET_CONTENTS=$(DOCSET_NAME)/Contents -DOCSET_RESOURCES=$(DOCSET_CONTENTS)/Resources -DOCSET_DOCUMENTS=$(DOCSET_RESOURCES)/Documents -DESTDIR=~/Library/Developer/Shared/Documentation/DocSets -XCODE_INSTALL="$(shell xcode-select -print-path)" - -all: docset - -docset: - mkdir -p $(DOCSET_DOCUMENTS) - cp Nodes.xml $(DOCSET_RESOURCES) - cp Tokens.xml $(DOCSET_RESOURCES) - cp Info.plist $(DOCSET_CONTENTS) - tar --exclude $(DOCSET_NAME) \ - --exclude Nodes.xml \ - --exclude Tokens.xml \ - --exclude Info.plist \ - --exclude Makefile -c -f - . \ - | (cd $(DOCSET_DOCUMENTS); tar xvf -) - $(XCODE_INSTALL)/usr/bin/docsetutil index $(DOCSET_NAME) - rm -f $(DOCSET_DOCUMENTS)/Nodes.xml - rm -f $(DOCSET_DOCUMENTS)/Info.plist - rm -f $(DOCSET_DOCUMENTS)/Makefile - rm -f $(DOCSET_RESOURCES)/Nodes.xml - rm -f $(DOCSET_RESOURCES)/Tokens.xml - -clean: - rm -rf $(DOCSET_NAME) - -install: docset - mkdir -p $(DESTDIR) - cp -R $(DOCSET_NAME) $(DESTDIR) - -uninstall: - rm -rf $(DESTDIR)/$(DOCSET_NAME) - -always: diff --git a/html/MarshallerThread_8cc_source.html b/html/MarshallerThread_8cc_source.html deleted file mode 100644 index 09dddc6a8..000000000 --- a/html/MarshallerThread_8cc_source.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -libdap: MarshallerThread.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
MarshallerThread.cc
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2015 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 /*
26  * MarshallerThread.cc
27  *
28  * Created on: Aug 27, 2015
29  * Author: jimg
30  */
31 
32 #include "config.h"
33 
34 #include <pthread.h>
35 #include <sys/time.h>
36 #include <fcntl.h>
37 #include <unistd.h>
38 
39 #include <ostream>
40 #include <sstream>
41 
42 #include "MarshallerThread.h"
43 #include "Error.h"
44 #include "InternalErr.h"
45 #include "debug.h"
46 
47 using namespace libdap;
48 using namespace std;
49 
50 #if 0
51 bool MarshallerThread::print_time = false;
52 
58 static double time_diff_to_hundredths(struct timeval *stop, struct timeval *start)
59 {
60  /* Perform the carry for the later subtraction by updating y. */
61  if (stop->tv_usec < start->tv_usec) {
62  int nsec = (start->tv_usec - stop->tv_usec) / 1000000 + 1;
63  start->tv_usec -= 1000000 * nsec;
64  start->tv_sec += nsec;
65  }
66  if (stop->tv_usec - start->tv_usec > 1000000) {
67  int nsec = (start->tv_usec - stop->tv_usec) / 1000000;
68  start->tv_usec += 1000000 * nsec;
69  start->tv_sec -= nsec;
70  }
71 
72  double result = stop->tv_sec - start->tv_sec;
73  result += double(stop->tv_usec - start->tv_usec) / 1000000;
74  return result;
75 }
76 #endif
77 
78 
88 Locker::Locker(pthread_mutex_t &lock, pthread_cond_t &cond, int &count) :
89  m_mutex(lock)
90 {
91  int status = pthread_mutex_lock(&m_mutex);
92 
93  DBG(cerr << "Locking the mutex! (waiting; " << pthread_self() << ")" << endl);
94 
95  if (status != 0) throw InternalErr(__FILE__, __LINE__, "Could not lock m_mutex");
96  while (count != 0) {
97  status = pthread_cond_wait(&cond, &m_mutex);
98  if (status != 0) throw InternalErr(__FILE__, __LINE__, "Could not wait on m_cond");
99  }
100  if (count != 0) throw InternalErr(__FILE__, __LINE__, "FAIL: left m_cond wait with non-zero child thread count");
101 
102  DBG(cerr << "Locked! (" << pthread_self() << ")" << endl);
103 }
104 
109 {
110  DBG(cerr << "Unlocking the mutex! (" << pthread_self() << ")" << endl);
111 
112  (void) pthread_mutex_unlock(&m_mutex);
113 #if 0
114  int status = pthread_mutex_unlock(&m_mutex);
115  if (status != 0) throw InternalErr(__FILE__, __LINE__, "Could not unlock m_mutex");
116 #endif
117 }
118 
119 
133 ChildLocker::ChildLocker(pthread_mutex_t &lock, pthread_cond_t &cond, int &count) :
134  m_mutex(lock), m_cond(cond), m_count(count)
135 {
136  int status = pthread_mutex_lock(&m_mutex);
137 
138  DBG(cerr << "Locking the mutex! (simple; " << pthread_self() << ")" << endl);
139 
140  if (status != 0) throw InternalErr(__FILE__, __LINE__, "Could not lock m_mutex");
141 
142  DBG(cerr << "Locked! (" << pthread_self() << ")" << endl);
143 }
144 
145 ChildLocker::~ChildLocker()
146 {
147  DBG(cerr << "Unlocking the mutex! (" << pthread_self() << ")" << endl);
148 
149  m_count = 0;
150 
151  (void) pthread_cond_signal(&m_cond);
152  (void) pthread_mutex_unlock(&m_mutex);
153 
154 #if 0
155  int status = pthread_cond_signal(&m_cond);
156  if (status != 0)
157  throw InternalErr(__FILE__, __LINE__, "Could not signal main thread from ChildLocker!");
158 
159  status = pthread_mutex_unlock(&m_mutex);
160  if (status != 0) throw InternalErr(__FILE__, __LINE__, "Could not unlock m_mutex");
161 #endif
162 }
163 
164 MarshallerThread::MarshallerThread() :
165  d_thread(0), d_child_thread_count(0)
166 {
167  if (pthread_attr_init(&d_thread_attr) != 0) throw Error(internal_error, "Failed to initialize pthread attributes.");
168  if (pthread_attr_setdetachstate(&d_thread_attr, PTHREAD_CREATE_DETACHED /*PTHREAD_CREATE_JOINABLE*/) != 0)
169  throw Error(internal_error, "Failed to complete pthread attribute initialization.");
170 
171  if (pthread_mutex_init(&d_out_mutex, 0) != 0) throw Error(internal_error, "Failed to initialize mutex.");
172  if (pthread_cond_init(&d_out_cond, 0) != 0) throw Error(internal_error, "Failed to initialize cond.");
173 }
174 
175 MarshallerThread::~MarshallerThread()
176 {
177  (void) pthread_mutex_lock(&d_out_mutex);
178 #if 0
179  int status = pthread_mutex_lock(&d_out_mutex);
180  if (status != 0) throw InternalErr(__FILE__, __LINE__, "Could not lock m_mutex");
181 #endif
182  // d_child_thread_count is passed into the thread in a structure (see write_thread())
183  // and is decremented by the ChildLocker dtor when write_thread() exits. jhrg 2/7/19
184  if (d_child_thread_count != 0) {
185  (void) pthread_cond_wait(&d_out_cond, &d_out_mutex);
186  d_child_thread_count = 0;
187 #if 0
188  status = pthread_cond_wait(&d_out_cond, &d_out_mutex);
189  if (status != 0) throw InternalErr(__FILE__, __LINE__, "Could not wait on m_cond");
190 #endif
191  }
192 
193  (void) pthread_mutex_unlock(&d_out_mutex);
194 
195 #if 0
196  if (d_child_thread_count != 0)
197  throw InternalErr(__FILE__, __LINE__, "FAIL: left m_cond wait with non-zero child thread count");
198 
199  status = pthread_mutex_unlock(&d_out_mutex);
200  if (status != 0) throw InternalErr(__FILE__, __LINE__, "Could not unlock m_mutex");
201 #endif
202 
203  pthread_mutex_destroy(&d_out_mutex);
204  pthread_cond_destroy(&d_out_cond);
205 
206  pthread_attr_destroy(&d_thread_attr);
207 }
208 
209 // not a static method
215 void MarshallerThread::start_thread(void* (*thread)(void *arg), ostream &out, char *byte_buf,
216  unsigned int bytes)
217 {
218  write_args *args = new write_args(d_out_mutex, d_out_cond, d_child_thread_count, d_thread_error, out, byte_buf,
219  bytes);
220  int status = pthread_create(&d_thread, &d_thread_attr, thread, args);
221  if (status != 0) throw InternalErr(__FILE__, __LINE__, "Could not start child thread");
222 }
223 
227 void MarshallerThread::start_thread(void* (*thread)(void *arg), int fd, char *byte_buf, unsigned int bytes)
228 {
229  write_args *args = new write_args(d_out_mutex, d_out_cond, d_child_thread_count, d_thread_error, fd, byte_buf,
230  bytes);
231  int status = pthread_create(&d_thread, &d_thread_attr, thread, args);
232  if (status != 0) throw InternalErr(__FILE__, __LINE__, "Could not start child thread");
233 }
234 
244 void *
246 {
247  write_args *args = reinterpret_cast<write_args *>(arg);
248 
249  ChildLocker lock(args->d_mutex, args->d_cond, args->d_count); // RAII; will unlock on exit
250 
251 #if 0
252  struct timeval tp_s;
253  if (print_time && gettimeofday(&tp_s, 0) != 0) cerr << "could not read time" << endl;
254 #endif
255 
256  // force an error
257  // return (void*)-1;
258 
259  if (args->d_out_file != -1) {
260  int bytes_written = write(args->d_out_file, args->d_buf, args->d_num);
261  if (bytes_written != args->d_num)
262  return (void*) -1;
263  }
264  else {
265  args->d_out.write(args->d_buf, args->d_num);
266  if (args->d_out.fail()) {
267  ostringstream oss;
268  oss << "Could not write data: " << __FILE__ << ":" << __LINE__;
269  args->d_error = oss.str();
270  return (void*) -1;
271  }
272  }
273 
274  delete [] args->d_buf;
275  delete args;
276 
277 #if 0
278  struct timeval tp_e;
279  if (print_time) {
280  if (gettimeofday(&tp_e, 0) != 0) cerr << "could not read time" << endl;
281 
282  cerr << "time for child thread write: " << time_diff_to_hundredths(&tp_e, &tp_s) << endl;
283  }
284 #endif
285 
286  return 0;
287 }
288 
301 void *
303 {
304  write_args *args = reinterpret_cast<write_args *>(arg);
305 
306  ChildLocker lock(args->d_mutex, args->d_cond, args->d_count); // RAII; will unlock on exit
307 
308  if (args->d_out_file != -1) {
309  int bytes_written = write(args->d_out_file, args->d_buf, args->d_num);
310  if (bytes_written != args->d_num) return (void*) -1;
311  }
312  else {
313  args->d_out.write(args->d_buf + 4, args->d_num);
314  if (args->d_out.fail()) {
315  ostringstream oss;
316  oss << "Could not write data: " << __FILE__ << ":" << __LINE__;
317  args->d_error = oss.str();
318  return (void*) -1;
319  }
320  }
321 
322  delete [] args->d_buf;
323  delete args;
324 
325  return 0;
326 }
327 
static void * write_thread(void *arg)
-
void start_thread(void *(*thread)(void *arg), std::ostream &out, char *byte_buf, unsigned int bytes_written)
-
STL namespace.
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
- - -
static void * write_thread_part(void *arg)
-
A class for error processing.
Definition: Error.h:92
-
-
- - - - diff --git a/html/MarshallerThread_8h_source.html b/html/MarshallerThread_8h_source.html deleted file mode 100644 index bb7817c17..000000000 --- a/html/MarshallerThread_8h_source.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - -libdap: MarshallerThread.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
MarshallerThread.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2015 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 /*
27  * MarshallerThread.h
28  *
29  * Created on: Aug 27, 2015
30  * Author: jimg
31  */
32 
33 #ifndef MARSHALLERTHREAD_H_
34 #define MARSHALLERTHREAD_H_
35 
36 #include <pthread.h>
37 
38 #include <iostream>
39 #include <ostream>
40 #include <string>
41 
42 namespace libdap {
43 
52 class Locker {
53 public:
54  Locker(pthread_mutex_t &lock, pthread_cond_t &cond, int &count);
55  virtual ~Locker();
56 
57 private:
58  pthread_mutex_t& m_mutex;
59 
60  Locker();
61  Locker(const Locker &rhs);
62 };
63 
74 class ChildLocker {
75 public:
76  ChildLocker(pthread_mutex_t &lock, pthread_cond_t &cond, int &count);
77  virtual ~ChildLocker();
78 
79 private:
80  pthread_mutex_t& m_mutex;
81  pthread_cond_t& m_cond;
82  int& m_count;
83 
84  ChildLocker();
85  ChildLocker(const Locker &rhs);
86 };
87 
97 private:
98  pthread_t d_thread;
99  pthread_attr_t d_thread_attr;
100 
101  pthread_mutex_t d_out_mutex;
102  pthread_cond_t d_out_cond;
103 
104  int d_child_thread_count; // 0 or 1
105  std::string d_thread_error; // non-null indicates an error
106 
113  struct write_args {
114  pthread_mutex_t &d_mutex;
115  pthread_cond_t &d_cond;
116  int &d_count;
117  std::string &d_error;
118  std::ostream &d_out; // The output stream protected by the mutex, ...
119  int d_out_file; // file descriptor; if not -1, use this.
120  char *d_buf; // The data to write to the stream
121  int d_num; // The size of d_buf
122 
126  write_args(pthread_mutex_t &m, pthread_cond_t &c, int &count, std::string &e, std::ostream &s, char *vals, int num) :
127  d_mutex(m), d_cond(c), d_count(count), d_error(e), d_out(s), d_out_file(-1), d_buf(vals), d_num(num)
128  {
129  }
130 
135  write_args(pthread_mutex_t &m, pthread_cond_t &c, int &count, std::string &e, int fd, char *vals, int num) :
136  d_mutex(m), d_cond(c), d_count(count), d_error(e), d_out(std::cerr), d_out_file(fd), d_buf(vals), d_num(num)
137  {
138  }
139  };
140 
141 public:
143  virtual ~MarshallerThread();
144 
145  pthread_mutex_t &get_mutex() { return d_out_mutex; }
146  pthread_cond_t &get_cond() { return d_out_cond; }
147 
148  int &get_child_thread_count() { return d_child_thread_count; }
149  void increment_child_thread_count() { ++d_child_thread_count; }
150 
151  void start_thread(void* (*thread)(void *arg), std::ostream &out, char *byte_buf, unsigned int bytes_written);
152  void start_thread(void* (*thread)(void *arg), int fd, char *byte_buf, unsigned int bytes_written);
153 
154  // These are static so they will have c-linkage - required because they
155  // are passed to pthread_create()
156  static void *write_thread(void *arg);
157  static void *write_thread_part(void *arg);
158 };
159 
160 }
161 
162 #endif /* MARSHALLERTHREAD_H_ */
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- - - - -
-
- - - - diff --git a/html/Marshaller_8h_source.html b/html/Marshaller_8h_source.html deleted file mode 100644 index 9b81a5d66..000000000 --- a/html/Marshaller_8h_source.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -libdap: Marshaller.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Marshaller.h
-
-
-
1 // Marshaller.h
2 
3 // -*- mode: c++; c-basic-offset:4 -*-
4 
5 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
6 // Access Protocol.
7 
8 // Copyright (c) 2002,2003 OPeNDAP, Inc.
9 // Author: Patrick West <pwest@ucar.edu>
10 //
11 // This library is free software; you can redistribute it and/or
12 // modify it under the terms of the GNU Lesser General Public
13 // License as published by the Free Software Foundation; either
14 // version 2.1 of the License, or (at your option) any later version.
15 //
16 // This library is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 // Lesser General Public License for more details.
20 //
21 // You should have received a copy of the GNU Lesser General Public
22 // License along with this library; if not, write to the Free Software
23 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 //
25 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
26 
27 // (c) COPYRIGHT URI/MIT 1994-1999
28 // Please read the full copyright statement in the file COPYRIGHT_URI.
29 //
30 // Authors:
31 // pwest Patrick West <pwest@ucar.edu>
32 
33 #ifndef A_Marshaller_h
34 #define A_Marshaller_h 1
35 
36 #include <string>
37 #include <vector>
38 
39 #include "DapObj.h"
40 #include "Type.h"
41 #include "dods-datatypes.h"
42 #include "InternalErr.h"
43 
44 namespace libdap {
45 
46 class Vector;
47 
50 class Marshaller: public DapObj {
51 public:
52  virtual void put_byte(dods_byte val) = 0;
53 
54  virtual void put_int16(dods_int16 val) = 0;
55  virtual void put_int32(dods_int32 val) = 0;
56 
57  virtual void put_float32(dods_float32 val) = 0;
58  virtual void put_float64(dods_float64 val) = 0;
59 
60  virtual void put_uint16(dods_uint16 val) = 0;
61  virtual void put_uint32(dods_uint32 val) = 0;
62 
63  virtual void put_str(const std::string &val) = 0;
64  virtual void put_url(const std::string &val) = 0;
65 
66  virtual void put_opaque(char *val, unsigned int len) = 0;
67  virtual void put_int(int val) = 0;
68 
69  virtual void put_vector(char *val, int num, Vector &vec) = 0;
70  virtual void put_vector(char *val, int num, int width, Vector &vec) = 0;
71 
79  virtual void put_vector_start(int /*num*/) {
80  throw InternalErr(__FILE__, __LINE__, "Not Implemented yet");
81  }// = 0;
82 
91  virtual void put_vector_part(char */*val*/, unsigned int /*num*/, int /*width*/, Type /*type*/) {
92  throw InternalErr(__FILE__, __LINE__, "Not Implemented yet");
93  }// = 0;
94 
98  virtual void put_vector_end() {
99  throw InternalErr(__FILE__, __LINE__, "Not Implemented yet");
100  }// = 0;
101 
102  virtual void dump(std::ostream &strm) const = 0;
103 };
104 
105 } // namespace libdap
106 
107 #endif // A_Marshaller_h
108 
Holds a one-dimensional collection of DAP2 data types.
Definition: Vector.h:80
-
virtual void put_vector_end()
Definition: Marshaller.h:98
-
Type
Identifies the data type.
Definition: Type.h:94
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
virtual void dump(std::ostream &strm) const =0
dump the contents of this object to the specified ostream
-
virtual void put_vector_part(char *, unsigned int, int, Type)
Definition: Marshaller.h:91
-
virtual void put_vector_start(int)
Definition: Marshaller.h:79
-
libdap base object for common functionality of libdap objects
Definition: DapObj.h:50
-
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
-
-
- - - - diff --git a/html/Nodes.xml b/html/Nodes.xml deleted file mode 100644 index 19aeceb6a..000000000 --- a/html/Nodes.xml +++ /dev/null @@ -1,22131 +0,0 @@ - - - - - Root - index.html - - - Introduction - index.html - intro - - - Doxygen Conventions - index.html - conventions - - - General - index.html - general - - - Classes - index.html - classes - - - Methods and Functions - index.html - methods - - - - - Todo List - todo.html - - - Deprecated List - deprecated.html - - - Modules - modules.html - - - The 'strict' mode - group__strict.html - - - get_strict - group__strict.html - ga030fddcb0529be0999faffd9c0fb7e16 - - - set_strict - group__strict.html - gad0fb36451a4348afb0a294f709c905f2 - - - - - Check_type - group__check__type.html - - - check_byte - group__check__type.html - ga6159f969729b3625cfb42b97b76a29b6 - - - check_url - group__check__type.html - ga0e96bac2251d066910b2647830b6959c - - - - - type and set value - group__check.html - - - - - Get_type - group__get__type.html - - - - - - - Namespaces - - - - Namespace List - namespaces.html - - - libdap - namespacelibdap.html - - - - - Namespace Members - namespacemembers.html - - - All - namespacemembers.html - - - Functions - namespacemembers_func.html - - - Typedefs - namespacemembers_type.html - - - Enumerations - namespacemembers_enum.html - - - - - - - Classes - annotated.html - - - Class List - annotated.html - - - functions - - - - GeoConstraint - classfunctions_1_1GeoConstraint.html - - - LatitudeSense - classfunctions_1_1GeoConstraint.html - a466ff99a9e60267b70085b49cfd21652 - - - unknown_sense - classfunctions_1_1GeoConstraint.html - a466ff99a9e60267b70085b49cfd21652a45d9f461f049c0f5fe19e6b0155aeeee - - - normal - classfunctions_1_1GeoConstraint.html - a466ff99a9e60267b70085b49cfd21652acdd61229b63eba6058874646c5ab4009 - - - inverted - classfunctions_1_1GeoConstraint.html - a466ff99a9e60267b70085b49cfd21652a2c137f894b5c1d1f6efaff52fe488707 - - - - - Notation - classfunctions_1_1GeoConstraint.html - aea01a18443b479e4a8eec04311bceaed - - - unknown_notation - classfunctions_1_1GeoConstraint.html - aea01a18443b479e4a8eec04311bceaeda2821b0f971dd6c0ef43fd329eb6c99e6 - - - pos - classfunctions_1_1GeoConstraint.html - aea01a18443b479e4a8eec04311bceaeda078d4cc94cfa3c17c098aac4c63f6c14 - - - neg_pos - classfunctions_1_1GeoConstraint.html - aea01a18443b479e4a8eec04311bceaedac83298766d14a0dde110207c7cab474d - - - - - GeoConstraint - classfunctions_1_1GeoConstraint.html - a0aeedfbc40843f3edc332fabc2395de6 - - - ~GeoConstraint - classfunctions_1_1GeoConstraint.html - aa38d1bc160891e5ffda6e6314eef9b59 - - - apply_constraint_to_data - classfunctions_1_1GeoConstraint.html - a7b61dd0dd08d721764cced64c2b02672 - - - build_lat_lon_maps - classfunctions_1_1GeoConstraint.html - a225f1a1ef91e1df9f6a9da4879858725 - - - categorize_latitude - classfunctions_1_1GeoConstraint.html - af89805663f0534a8addedaea2f3073cd - - - categorize_notation - classfunctions_1_1GeoConstraint.html - a8e57a12e7c30c0a6834759b203470833 - - - find_latitude_indeces - classfunctions_1_1GeoConstraint.html - a74db78b6220b59f1f4fb3564d7974754 - - - find_longitude_indeces - classfunctions_1_1GeoConstraint.html - aba588b366dbb024457c89ce33a7ebb38 - - - flip_latitude_within_array - classfunctions_1_1GeoConstraint.html - ab543dda3c43cd853346dc253d020e608 - - - get_array_data - classfunctions_1_1GeoConstraint.html - abc1a079d788614cf3c2c62a3aaa901d7 - - - get_array_data_size - classfunctions_1_1GeoConstraint.html - a27f2690b99c4dafea44f230614aa6227 - - - get_coards_lat_units - classfunctions_1_1GeoConstraint.html - ad9e4dc8c0dfe47d6ea4bbcd0117e1e28 - - - get_coards_lon_units - classfunctions_1_1GeoConstraint.html - aa9ed7bbf6915796e68725700e50039fe - - - get_lat - classfunctions_1_1GeoConstraint.html - a4e28cbf83a9428c3bb1571ceb383c0f8 - - - get_lat_dim - classfunctions_1_1GeoConstraint.html - a27cc77ebf8e70f05171c9d7a37548e8c - - - get_lat_length - classfunctions_1_1GeoConstraint.html - a904fa6294ad859b71a7a2c76066023c8 - - - get_lat_names - classfunctions_1_1GeoConstraint.html - ad515fdb9c4092978c53027a2b10e653d - - - get_latitude_index_bottom - classfunctions_1_1GeoConstraint.html - a13aaec2f1497f296224bc7e22ceda963 - - - get_latitude_index_top - classfunctions_1_1GeoConstraint.html - a652bc2a104d7226427da48100b7db7e9 - - - get_latitude_sense - classfunctions_1_1GeoConstraint.html - a6796dcecd0e2714c516ab923ca66ad8f - - - get_lon - classfunctions_1_1GeoConstraint.html - a4e0a7ee2d26ebe3c5c4fc999e4dc6003 - - - get_lon_dim - classfunctions_1_1GeoConstraint.html - a174898231382f70a1aa7be5350c9c2d8 - - - get_lon_length - classfunctions_1_1GeoConstraint.html - acd32245d55854ed510a5a6e1512263e9 - - - get_lon_names - classfunctions_1_1GeoConstraint.html - a394092f0d92b61cacaf6307f357b3ed6 - - - get_longitude_index_left - classfunctions_1_1GeoConstraint.html - a7562a0094e636d80dc84011b063aa70b - - - get_longitude_index_right - classfunctions_1_1GeoConstraint.html - ac518336815fc93820f9e957cc5a82f0a - - - get_longitude_notation - classfunctions_1_1GeoConstraint.html - a65f7243a143572fb7d1f1f6b8ebb10ae - - - is_bounding_box_set - classfunctions_1_1GeoConstraint.html - a9b86ba8c6771ca3433356e67e7cfb174 - - - is_bounding_box_valid - classfunctions_1_1GeoConstraint.html - af153ea490c37f4b43401ad6294084e72 - - - is_longitude_rightmost - classfunctions_1_1GeoConstraint.html - a54053531db798ad6b754d69f591d7619 - - - lat_lon_dimensions_ok - classfunctions_1_1GeoConstraint.html - adba123828c5e852139d00e1ca6e92a5b - - - reorder_data_longitude_axis - classfunctions_1_1GeoConstraint.html - a4dcd6ab2bcfe9f1a31cc22d036525e01 - - - reorder_longitude_map - classfunctions_1_1GeoConstraint.html - a44066d960eb11d1395ea6762e511ad4b - - - set_bounding_box - classfunctions_1_1GeoConstraint.html - afdcce3490cf3e4e7c9427d002c9aa1d1 - - - set_lat - classfunctions_1_1GeoConstraint.html - a59e0aa4128c08054dfa97693cdff13b9 - - - set_lat_dim - classfunctions_1_1GeoConstraint.html - a74fe4b4a3f51383b246147fd37ea71ef - - - set_lat_length - classfunctions_1_1GeoConstraint.html - a9890b176d0dbc05caee6409263c666e7 - - - set_latitude_index_bottom - classfunctions_1_1GeoConstraint.html - ae850811aea6ced9e31ba8e088718208a - - - set_latitude_index_top - classfunctions_1_1GeoConstraint.html - aa23fa93e66571fa98c73367f03856405 - - - set_latitude_sense - classfunctions_1_1GeoConstraint.html - af5f39f633bbd1dbb8bdf030beb15ead1 - - - set_lon - classfunctions_1_1GeoConstraint.html - a4e2a3fa25e5bc7ee42b8b4a37574fe16 - - - set_lon_dim - classfunctions_1_1GeoConstraint.html - a52c4e2ad8b9f340e79918cecb1f94586 - - - set_lon_length - classfunctions_1_1GeoConstraint.html - aca70fc726212902bda33e4c15367d28d - - - set_longitude_index_left - classfunctions_1_1GeoConstraint.html - afa5523b16235c5ec56955883ef642e2d - - - set_longitude_index_right - classfunctions_1_1GeoConstraint.html - a63c287d4aef76ffa5bc37b80314536e3 - - - set_longitude_notation - classfunctions_1_1GeoConstraint.html - a811d53147f4563afe3615296afb97c8a - - - set_longitude_rightmost - classfunctions_1_1GeoConstraint.html - a531557d47ea67b781486c828198433f7 - - - transform_constraint_to_pos_notation - classfunctions_1_1GeoConstraint.html - a1cb2d5b6277ffc5e02810ffcdaecefc4 - - - transform_longitude_to_neg_pos_notation - classfunctions_1_1GeoConstraint.html - a465ae9bfaf84501740e0c90a13f88d17 - - - transform_longitude_to_pos_notation - classfunctions_1_1GeoConstraint.html - a42facca9c9db0f8d41e41dbae81edc7d - - - transpose_vector - classfunctions_1_1GeoConstraint.html - aebcb9ed78095f98c047622cd66448466 - - - GridGeoConstraintTest - classfunctions_1_1GeoConstraint.html - a0f73deef1213b085f34d2d6be78eaff1 - - - - - GeoGridFunction - classfunctions_1_1GeoGridFunction.html - - - GeoGridFunction - classfunctions_1_1GeoGridFunction.html - af6acff84eff9dd3499c33ac79d885847 - - - ~GeoGridFunction - classfunctions_1_1GeoGridFunction.html - a61e435f6306cbb5aae91dc65d026836f - - - canOperateOn - classfunctions_1_1GeoGridFunction.html - a59fde66559f6222db4c55479a42ec782 - - - canOperateOn - classfunctions_1_1GeoGridFunction.html - a8a3921a3d3a0ef39e1ee6bdd6011ccaf - - - get_bool_func - classfunctions_1_1GeoGridFunction.html - a5bdae20325085b8ddd916aeee11ba430 - - - get_btp_func - classfunctions_1_1GeoGridFunction.html - a70f7e4e77dfc01329905fec7bdd0cb11 - - - get_d4_function - classfunctions_1_1GeoGridFunction.html - a9241fa333c68968452774496f2be5a1d - - - get_proj_func - classfunctions_1_1GeoGridFunction.html - a7fac40c961c981efc88f4af915fca9cc - - - getDescriptionString - classfunctions_1_1GeoGridFunction.html - ace2f37824655a26ea2829f8dc45c86e0 - - - getDocUrl - classfunctions_1_1GeoGridFunction.html - a83e00f6c062a1b1c74596d7855b6b5d5 - - - getName - classfunctions_1_1GeoGridFunction.html - ace9a7b770f7393a2dbaf82105f292935 - - - getRole - classfunctions_1_1GeoGridFunction.html - ac1e65b16ed6d92d7d84bbdb712b1fc3e - - - getTypeString - classfunctions_1_1GeoGridFunction.html - a1af2b7f618f59a597218a3669bd3b391 - - - getUsageString - classfunctions_1_1GeoGridFunction.html - aeed53f72098111d0d45d3600bd1a9ae9 - - - getVersion - classfunctions_1_1GeoGridFunction.html - ad8456f2fadd48af3d95bcc047feef647 - - - setDescriptionString - classfunctions_1_1GeoGridFunction.html - abe5e41829ca9f51b598589ee2ac42bae - - - setDocUrl - classfunctions_1_1GeoGridFunction.html - a6fda8e417484c1bd614995d5b2fb5e4e - - - setFunction - classfunctions_1_1GeoGridFunction.html - a3235a206a2933b96360c00d5b021a1e5 - - - setFunction - classfunctions_1_1GeoGridFunction.html - a86998e0c972070c7199cf8e25778234c - - - setFunction - classfunctions_1_1GeoGridFunction.html - a133c0bb3a95dcd7f1930a302afe376e8 - - - setFunction - classfunctions_1_1GeoGridFunction.html - a3d2fd4489c8513bbd5642d7f0961ada7 - - - setName - classfunctions_1_1GeoGridFunction.html - a497a6ca1cb5a83ae13b2a97b31694cc0 - - - setRole - classfunctions_1_1GeoGridFunction.html - a18f6129a02f468a0fafdb8bf57792ebc - - - setUsageString - classfunctions_1_1GeoGridFunction.html - a157a6d045575300466eb0271ed887123 - - - setVersion - classfunctions_1_1GeoGridFunction.html - a2da5e645eb715667335f839b4fa3fd42 - - - - - GridFunction - classfunctions_1_1GridFunction.html - - - GridFunction - classfunctions_1_1GridFunction.html - a27f5fa0f85657d19dcda49e841a49fb4 - - - ~GridFunction - classfunctions_1_1GridFunction.html - a0ab2d62f7d0f5d20d4a8ff554ab50e79 - - - canOperateOn - classfunctions_1_1GridFunction.html - abe8f0692c35c711151d5d81a8e5a308d - - - canOperateOn - classfunctions_1_1GridFunction.html - a8a3921a3d3a0ef39e1ee6bdd6011ccaf - - - get_bool_func - classfunctions_1_1GridFunction.html - a5bdae20325085b8ddd916aeee11ba430 - - - get_btp_func - classfunctions_1_1GridFunction.html - a70f7e4e77dfc01329905fec7bdd0cb11 - - - get_d4_function - classfunctions_1_1GridFunction.html - a9241fa333c68968452774496f2be5a1d - - - get_proj_func - classfunctions_1_1GridFunction.html - a7fac40c961c981efc88f4af915fca9cc - - - getDescriptionString - classfunctions_1_1GridFunction.html - ace2f37824655a26ea2829f8dc45c86e0 - - - getDocUrl - classfunctions_1_1GridFunction.html - a83e00f6c062a1b1c74596d7855b6b5d5 - - - getName - classfunctions_1_1GridFunction.html - ace9a7b770f7393a2dbaf82105f292935 - - - getRole - classfunctions_1_1GridFunction.html - ac1e65b16ed6d92d7d84bbdb712b1fc3e - - - getTypeString - classfunctions_1_1GridFunction.html - a1af2b7f618f59a597218a3669bd3b391 - - - getUsageString - classfunctions_1_1GridFunction.html - aeed53f72098111d0d45d3600bd1a9ae9 - - - getVersion - classfunctions_1_1GridFunction.html - ad8456f2fadd48af3d95bcc047feef647 - - - setDescriptionString - classfunctions_1_1GridFunction.html - abe5e41829ca9f51b598589ee2ac42bae - - - setDocUrl - classfunctions_1_1GridFunction.html - a6fda8e417484c1bd614995d5b2fb5e4e - - - setFunction - classfunctions_1_1GridFunction.html - a3235a206a2933b96360c00d5b021a1e5 - - - setFunction - classfunctions_1_1GridFunction.html - a86998e0c972070c7199cf8e25778234c - - - setFunction - classfunctions_1_1GridFunction.html - a133c0bb3a95dcd7f1930a302afe376e8 - - - setFunction - classfunctions_1_1GridFunction.html - a3d2fd4489c8513bbd5642d7f0961ada7 - - - setName - classfunctions_1_1GridFunction.html - a497a6ca1cb5a83ae13b2a97b31694cc0 - - - setRole - classfunctions_1_1GridFunction.html - a18f6129a02f468a0fafdb8bf57792ebc - - - setUsageString - classfunctions_1_1GridFunction.html - a157a6d045575300466eb0271ed887123 - - - setVersion - classfunctions_1_1GridFunction.html - a2da5e645eb715667335f839b4fa3fd42 - - - - - GridGeoConstraint - classfunctions_1_1GridGeoConstraint.html - - - LatitudeSense - classfunctions_1_1GridGeoConstraint.html - a466ff99a9e60267b70085b49cfd21652 - - - unknown_sense - classfunctions_1_1GridGeoConstraint.html - a466ff99a9e60267b70085b49cfd21652a45d9f461f049c0f5fe19e6b0155aeeee - - - normal - classfunctions_1_1GridGeoConstraint.html - a466ff99a9e60267b70085b49cfd21652acdd61229b63eba6058874646c5ab4009 - - - inverted - classfunctions_1_1GridGeoConstraint.html - a466ff99a9e60267b70085b49cfd21652a2c137f894b5c1d1f6efaff52fe488707 - - - - - Notation - classfunctions_1_1GridGeoConstraint.html - aea01a18443b479e4a8eec04311bceaed - - - unknown_notation - classfunctions_1_1GridGeoConstraint.html - aea01a18443b479e4a8eec04311bceaeda2821b0f971dd6c0ef43fd329eb6c99e6 - - - pos - classfunctions_1_1GridGeoConstraint.html - aea01a18443b479e4a8eec04311bceaeda078d4cc94cfa3c17c098aac4c63f6c14 - - - neg_pos - classfunctions_1_1GridGeoConstraint.html - aea01a18443b479e4a8eec04311bceaedac83298766d14a0dde110207c7cab474d - - - - - GridGeoConstraint - classfunctions_1_1GridGeoConstraint.html - aea3d88980a9c0500c1c51e877b3347b5 - - - GridGeoConstraint - classfunctions_1_1GridGeoConstraint.html - a62851b089c8723b1acc3f2409f544507 - - - ~GridGeoConstraint - classfunctions_1_1GridGeoConstraint.html - af6cd8b34b56a06bbec100f6defa4dddb - - - apply_constraint_to_data - classfunctions_1_1GridGeoConstraint.html - aef185fdc0541881d39d19d6e1fd364d7 - - - categorize_latitude - classfunctions_1_1GridGeoConstraint.html - af89805663f0534a8addedaea2f3073cd - - - categorize_notation - classfunctions_1_1GridGeoConstraint.html - a8e57a12e7c30c0a6834759b203470833 - - - find_latitude_indeces - classfunctions_1_1GridGeoConstraint.html - a74db78b6220b59f1f4fb3564d7974754 - - - find_longitude_indeces - classfunctions_1_1GridGeoConstraint.html - aba588b366dbb024457c89ce33a7ebb38 - - - flip_latitude_within_array - classfunctions_1_1GridGeoConstraint.html - ab543dda3c43cd853346dc253d020e608 - - - get_array_data - classfunctions_1_1GridGeoConstraint.html - abc1a079d788614cf3c2c62a3aaa901d7 - - - get_array_data_size - classfunctions_1_1GridGeoConstraint.html - a27f2690b99c4dafea44f230614aa6227 - - - get_coards_lat_units - classfunctions_1_1GridGeoConstraint.html - ad9e4dc8c0dfe47d6ea4bbcd0117e1e28 - - - get_coards_lon_units - classfunctions_1_1GridGeoConstraint.html - aa9ed7bbf6915796e68725700e50039fe - - - get_constrained_grid - classfunctions_1_1GridGeoConstraint.html - a6bd786c150f086831853fdbc9564a9b2 - - - get_lat - classfunctions_1_1GridGeoConstraint.html - a4e28cbf83a9428c3bb1571ceb383c0f8 - - - get_lat_dim - classfunctions_1_1GridGeoConstraint.html - a27cc77ebf8e70f05171c9d7a37548e8c - - - get_lat_length - classfunctions_1_1GridGeoConstraint.html - a904fa6294ad859b71a7a2c76066023c8 - - - get_lat_names - classfunctions_1_1GridGeoConstraint.html - ad515fdb9c4092978c53027a2b10e653d - - - get_latitude_index_bottom - classfunctions_1_1GridGeoConstraint.html - a13aaec2f1497f296224bc7e22ceda963 - - - get_latitude_index_top - classfunctions_1_1GridGeoConstraint.html - a652bc2a104d7226427da48100b7db7e9 - - - get_latitude_sense - classfunctions_1_1GridGeoConstraint.html - a6796dcecd0e2714c516ab923ca66ad8f - - - get_lon - classfunctions_1_1GridGeoConstraint.html - a4e0a7ee2d26ebe3c5c4fc999e4dc6003 - - - get_lon_dim - classfunctions_1_1GridGeoConstraint.html - a174898231382f70a1aa7be5350c9c2d8 - - - get_lon_length - classfunctions_1_1GridGeoConstraint.html - acd32245d55854ed510a5a6e1512263e9 - - - get_lon_names - classfunctions_1_1GridGeoConstraint.html - a394092f0d92b61cacaf6307f357b3ed6 - - - get_longitude_index_left - classfunctions_1_1GridGeoConstraint.html - a7562a0094e636d80dc84011b063aa70b - - - get_longitude_index_right - classfunctions_1_1GridGeoConstraint.html - ac518336815fc93820f9e957cc5a82f0a - - - get_longitude_notation - classfunctions_1_1GridGeoConstraint.html - a65f7243a143572fb7d1f1f6b8ebb10ae - - - is_bounding_box_set - classfunctions_1_1GridGeoConstraint.html - a9b86ba8c6771ca3433356e67e7cfb174 - - - is_bounding_box_valid - classfunctions_1_1GridGeoConstraint.html - af153ea490c37f4b43401ad6294084e72 - - - is_longitude_rightmost - classfunctions_1_1GridGeoConstraint.html - a54053531db798ad6b754d69f591d7619 - - - reorder_data_longitude_axis - classfunctions_1_1GridGeoConstraint.html - a4dcd6ab2bcfe9f1a31cc22d036525e01 - - - reorder_longitude_map - classfunctions_1_1GridGeoConstraint.html - a44066d960eb11d1395ea6762e511ad4b - - - set_bounding_box - classfunctions_1_1GridGeoConstraint.html - afdcce3490cf3e4e7c9427d002c9aa1d1 - - - set_lat - classfunctions_1_1GridGeoConstraint.html - a59e0aa4128c08054dfa97693cdff13b9 - - - set_lat_dim - classfunctions_1_1GridGeoConstraint.html - a74fe4b4a3f51383b246147fd37ea71ef - - - set_lat_length - classfunctions_1_1GridGeoConstraint.html - a9890b176d0dbc05caee6409263c666e7 - - - set_latitude_index_bottom - classfunctions_1_1GridGeoConstraint.html - ae850811aea6ced9e31ba8e088718208a - - - set_latitude_index_top - classfunctions_1_1GridGeoConstraint.html - aa23fa93e66571fa98c73367f03856405 - - - set_latitude_sense - classfunctions_1_1GridGeoConstraint.html - af5f39f633bbd1dbb8bdf030beb15ead1 - - - set_lon - classfunctions_1_1GridGeoConstraint.html - a4e2a3fa25e5bc7ee42b8b4a37574fe16 - - - set_lon_dim - classfunctions_1_1GridGeoConstraint.html - a52c4e2ad8b9f340e79918cecb1f94586 - - - set_lon_length - classfunctions_1_1GridGeoConstraint.html - aca70fc726212902bda33e4c15367d28d - - - set_longitude_index_left - classfunctions_1_1GridGeoConstraint.html - afa5523b16235c5ec56955883ef642e2d - - - set_longitude_index_right - classfunctions_1_1GridGeoConstraint.html - a63c287d4aef76ffa5bc37b80314536e3 - - - set_longitude_notation - classfunctions_1_1GridGeoConstraint.html - a811d53147f4563afe3615296afb97c8a - - - set_longitude_rightmost - classfunctions_1_1GridGeoConstraint.html - a531557d47ea67b781486c828198433f7 - - - transform_constraint_to_pos_notation - classfunctions_1_1GridGeoConstraint.html - a1cb2d5b6277ffc5e02810ffcdaecefc4 - - - transform_longitude_to_neg_pos_notation - classfunctions_1_1GridGeoConstraint.html - a465ae9bfaf84501740e0c90a13f88d17 - - - transform_longitude_to_pos_notation - classfunctions_1_1GridGeoConstraint.html - a42facca9c9db0f8d41e41dbae81edc7d - - - transpose_vector - classfunctions_1_1GridGeoConstraint.html - aebcb9ed78095f98c047622cd66448466 - - - GridGeoConstraintTest - classfunctions_1_1GridGeoConstraint.html - a0f73deef1213b085f34d2d6be78eaff1 - - - - - gse_arg - structfunctions_1_1gse__arg.html - - - gse_arg - structfunctions_1_1gse__arg.html - a0c8090f49986d3bdac649e431a68d73c - - - gse_arg - structfunctions_1_1gse__arg.html - a8d68f4baf8b5be6390705ba72f0fdb7f - - - ~gse_arg - structfunctions_1_1gse__arg.html - a723004585e85310af3145c9b43efef3c - - - get_grid - structfunctions_1_1gse__arg.html - afac282d7c611eda59e60d83ff7ad5e8e - - - get_gsec - structfunctions_1_1gse__arg.html - a99b4fb9f939a3e1e04060cb8ce86d483 - - - get_status - structfunctions_1_1gse__arg.html - a5574a1ad5c5205f0c0b422084cdf12cf - - - set_grid - structfunctions_1_1gse__arg.html - a4ec4c082ecafa3203c56a3903c6a60c7 - - - set_gsec - structfunctions_1_1gse__arg.html - a8f47bce557d7fe9afbe8699242b64d3c - - - set_status - structfunctions_1_1gse__arg.html - a544f15ae5a9c35920d3478a82bcbdaad - - - _grid - structfunctions_1_1gse__arg.html - adf3a3bbd265a1af6bf7d494258845d1b - - - _gsec - structfunctions_1_1gse__arg.html - a2d9b9553df769df8b3802020e1c8cafd - - - _status - structfunctions_1_1gse__arg.html - a65f75dfb55747c508bb57f35a75c3e43 - - - - - GSEClause - classfunctions_1_1GSEClause.html - - - GSEClause - classfunctions_1_1GSEClause.html - a66711f0a29af7d07f605969e40dc68dd - - - GSEClause - classfunctions_1_1GSEClause.html - a27a281e7af0833dcccbaf73b91d2036e - - - ~GSEClause - classfunctions_1_1GSEClause.html - a48204b08b5556b5052dd4c63542b7389 - - - get_map - classfunctions_1_1GSEClause.html - a421d3e10992fca87eff85d5baa5a7e74 - - - get_map_max_value - classfunctions_1_1GSEClause.html - abc9a7d7b0ee725eaa7ff0a028d47f607 - - - get_map_min_value - classfunctions_1_1GSEClause.html - adb2676c9f7409cd092414b5ee6835a8a - - - get_map_name - classfunctions_1_1GSEClause.html - a1973c47ef5ecc920d7a79ac627cfc335 - - - get_start - classfunctions_1_1GSEClause.html - ad3c0a7c9c9989cdae01e5c106ae18aa8 - - - get_stop - classfunctions_1_1GSEClause.html - a6d2a1d6a8356c627e5280d1fc9bf867c - - - OK - classfunctions_1_1GSEClause.html - a7fd18899b9cbab6f866fe21a8330e163 - - - set_map - classfunctions_1_1GSEClause.html - ae7e84764029f1fb554aa10ceb09aa386 - - - set_start - classfunctions_1_1GSEClause.html - ab1ea8b17260adabda8b44e23aad574d3 - - - set_stop - classfunctions_1_1GSEClause.html - a5f0309f54e1735acd8d0406f7f54d107 - - - - - - - libdap - namespacelibdap.html - - - AISConnect - classlibdap_1_1AISConnect.html - - - AISConnect - classlibdap_1_1AISConnect.html - a2f599cdf78085aa7a4e57162fc376aeb - - - AISConnect - classlibdap_1_1AISConnect.html - adf545ed05ef60bf6fa61c54257b7b0a6 - - - AISConnect - classlibdap_1_1AISConnect.html - a30a96b7d5fde2d619185879a8dbcb264 - - - AISConnect - classlibdap_1_1AISConnect.html - ad4142b6a66d33862c69e7f0846658d18 - - - ~AISConnect - classlibdap_1_1AISConnect.html - a9e9aad50a31427df596f04b39fb15be3 - - - CE - classlibdap_1_1AISConnect.html - a0e55cc99530cab779ae83984c2a22f51 - - - get_protocol - classlibdap_1_1AISConnect.html - a4223a898b3da719509d173dd990c45f1 - - - get_version - classlibdap_1_1AISConnect.html - a30fe6746add5a210d59b5dc9d678355f - - - is_cache_enabled - classlibdap_1_1AISConnect.html - a00fa7d5e2e658e8c882e07f48562ea62 - - - is_local - classlibdap_1_1AISConnect.html - a3901ce9383c3df11d1a1c28d4a09bb54 - - - read_data - classlibdap_1_1AISConnect.html - ae50d98d353023b9786c9bd5b0833a7de - - - read_data - classlibdap_1_1AISConnect.html - a8c9abb99d35684b48fa659f398d7cff8 - - - read_data_no_mime - classlibdap_1_1AISConnect.html - a486b095a58614dfc2be0321035784306 - - - read_data_no_mime - classlibdap_1_1AISConnect.html - aed1c2c967013975076c03a783f3fd421 - - - request_das - classlibdap_1_1AISConnect.html - acddb989623fc4e3aed42710a50f45178 - - - request_das_url - classlibdap_1_1AISConnect.html - abcf814710de1e252e74a4e1b72d3c6b3 - - - request_data - classlibdap_1_1AISConnect.html - a814e98ac5e99927ccc79bb0feb32d241 - - - request_data_ddx - classlibdap_1_1AISConnect.html - ab3bc39b8320ae5a79af7bf168f930b07 - - - request_data_ddx_url - classlibdap_1_1AISConnect.html - aac752fcacdab76339318c1c333ea0953 - - - request_data_url - classlibdap_1_1AISConnect.html - ac8582099411b8d74b03e761129df5b5c - - - request_dds - classlibdap_1_1AISConnect.html - aad5ef370110577e9ca2a0161928f9efa - - - request_dds_url - classlibdap_1_1AISConnect.html - a08795a9e160db409423fcd9058ba975d - - - request_ddx - classlibdap_1_1AISConnect.html - a4395cc18cf5ec1a5167795a5a5491958 - - - request_ddx_url - classlibdap_1_1AISConnect.html - a9a3e1fe01455b60a90a1974a7e871bb4 - - - request_protocol - classlibdap_1_1AISConnect.html - aaa1ab562899da9a4630de01f943d1aa9 - - - request_version - classlibdap_1_1AISConnect.html - ac7a5896a09882004b75e581999940526 - - - set_accept_deflate - classlibdap_1_1AISConnect.html - a186f76bfea3b61dc3587bcff5760ed8b - - - set_cache_enabled - classlibdap_1_1AISConnect.html - a25c97c4ad0239a9dd10812c880c40efe - - - set_credentials - classlibdap_1_1AISConnect.html - a847af75e149f123a51a560119dfc06aa - - - set_xdap_accept - classlibdap_1_1AISConnect.html - ab9c4a1243218c98d46fbaace37a821fc - - - set_xdap_protocol - classlibdap_1_1AISConnect.html - a4af759a2313d9ecbc1db1c811f549379 - - - URL - classlibdap_1_1AISConnect.html - a523bf24520185e3d71f36ac0203b98e6 - - - - - AISDatabaseParser - classlibdap_1_1AISDatabaseParser.html - - - intern - classlibdap_1_1AISDatabaseParser.html - abbe7487f5e9b25db0919cdf80c8ec2ce - - - - - AISDatabaseReadFailed - classlibdap_1_1AISDatabaseReadFailed.html - - - AISDatabaseReadFailed - classlibdap_1_1AISDatabaseReadFailed.html - a018b1d806c70ca9769dbbe5ec7aaef37 - - - AISDatabaseReadFailed - classlibdap_1_1AISDatabaseReadFailed.html - aa93c6d6a3502ff5446697d07cabf73ec - - - get_error_code - classlibdap_1_1AISDatabaseReadFailed.html - aaca0caca09e939602cade604cbc9824f - - - get_error_message - classlibdap_1_1AISDatabaseReadFailed.html - ab24a61e4974aae62962a40f9975e674c - - - get_file - classlibdap_1_1AISDatabaseReadFailed.html - a5165d667334a9fd6f337735c2b57e28c - - - get_line - classlibdap_1_1AISDatabaseReadFailed.html - a44b91121bdbc7d9d389db3440e2299cf - - - OK - classlibdap_1_1AISDatabaseReadFailed.html - acf3ab60821773bd8b62284750b02cfc0 - - - parse - classlibdap_1_1AISDatabaseReadFailed.html - ac705b3c1cfab1f7530d66a974eb0e8b6 - - - print - classlibdap_1_1AISDatabaseReadFailed.html - a552d711be27e6695854bd2b977a5cf31 - - - print - classlibdap_1_1AISDatabaseReadFailed.html - a4c58ef196c2b247bd37529bb7ad6a666 - - - set_error_code - classlibdap_1_1AISDatabaseReadFailed.html - a47c0f4b6a38d8ca075d1056076d2845d - - - set_error_message - classlibdap_1_1AISDatabaseReadFailed.html - a3ca90d33bf1c95529c9eefdfe8646e34 - - - set_file - classlibdap_1_1AISDatabaseReadFailed.html - a94a26bbdd9f4ede88c74de97e9e9e98d - - - set_line - classlibdap_1_1AISDatabaseReadFailed.html - a63a9c54019daa8b406c4287faba5e60a - - - what - classlibdap_1_1AISDatabaseReadFailed.html - accc5eeb469c8c18ec16dbf7fefe3cc41 - - - _error_code - classlibdap_1_1AISDatabaseReadFailed.html - a30226017ae9dfbe2e27be502b4fbdef4 - - - _error_message - classlibdap_1_1AISDatabaseReadFailed.html - a87f74c6be2134736ca1e400c90a3d571 - - - d_file - classlibdap_1_1AISDatabaseReadFailed.html - ac947a4c3d229d7ec505ad921a77702ea - - - d_line - classlibdap_1_1AISDatabaseReadFailed.html - af7d939b4b8154518f870d5424ff55f62 - - - - - AISDatabaseWriteFailed - classlibdap_1_1AISDatabaseWriteFailed.html - - - AISDatabaseWriteFailed - classlibdap_1_1AISDatabaseWriteFailed.html - ad0f488cda94eea30b1894623af095600 - - - AISDatabaseWriteFailed - classlibdap_1_1AISDatabaseWriteFailed.html - af910c43b5551cb05a4a0b6eb68993bec - - - get_error_code - classlibdap_1_1AISDatabaseWriteFailed.html - aaca0caca09e939602cade604cbc9824f - - - get_error_message - classlibdap_1_1AISDatabaseWriteFailed.html - ab24a61e4974aae62962a40f9975e674c - - - get_file - classlibdap_1_1AISDatabaseWriteFailed.html - a5165d667334a9fd6f337735c2b57e28c - - - get_line - classlibdap_1_1AISDatabaseWriteFailed.html - a44b91121bdbc7d9d389db3440e2299cf - - - OK - classlibdap_1_1AISDatabaseWriteFailed.html - acf3ab60821773bd8b62284750b02cfc0 - - - parse - classlibdap_1_1AISDatabaseWriteFailed.html - ac705b3c1cfab1f7530d66a974eb0e8b6 - - - print - classlibdap_1_1AISDatabaseWriteFailed.html - a552d711be27e6695854bd2b977a5cf31 - - - print - classlibdap_1_1AISDatabaseWriteFailed.html - a4c58ef196c2b247bd37529bb7ad6a666 - - - set_error_code - classlibdap_1_1AISDatabaseWriteFailed.html - a47c0f4b6a38d8ca075d1056076d2845d - - - set_error_message - classlibdap_1_1AISDatabaseWriteFailed.html - a3ca90d33bf1c95529c9eefdfe8646e34 - - - set_file - classlibdap_1_1AISDatabaseWriteFailed.html - a94a26bbdd9f4ede88c74de97e9e9e98d - - - set_line - classlibdap_1_1AISDatabaseWriteFailed.html - a63a9c54019daa8b406c4287faba5e60a - - - what - classlibdap_1_1AISDatabaseWriteFailed.html - accc5eeb469c8c18ec16dbf7fefe3cc41 - - - _error_code - classlibdap_1_1AISDatabaseWriteFailed.html - a30226017ae9dfbe2e27be502b4fbdef4 - - - _error_message - classlibdap_1_1AISDatabaseWriteFailed.html - a87f74c6be2134736ca1e400c90a3d571 - - - d_file - classlibdap_1_1AISDatabaseWriteFailed.html - ac947a4c3d229d7ec505ad921a77702ea - - - d_line - classlibdap_1_1AISDatabaseWriteFailed.html - af7d939b4b8154518f870d5424ff55f62 - - - - - AISMerge - classlibdap_1_1AISMerge.html - - - AISMerge - classlibdap_1_1AISMerge.html - ac8bbb72add970ed61f8e5a98ae269571 - - - ~AISMerge - classlibdap_1_1AISMerge.html - a51595e4888180773cf9bfcd26f6c80d8 - - - get_ais_resource - classlibdap_1_1AISMerge.html - a998f5e989f6707d1a4c40a1f6b22b8a7 - - - merge - classlibdap_1_1AISMerge.html - a39cdca8a9bcf3834f826ebbb45694961 - - - AISMergeTest - classlibdap_1_1AISMerge.html - a0e5283869b3f630b238fc3f666fe1603 - - - - - AISResources - classlibdap_1_1AISResources.html - - - AISResources - classlibdap_1_1AISResources.html - a1bc02aaf8ce2ade3aae43cdb9ae52da7 - - - AISResources - classlibdap_1_1AISResources.html - ad78ad28fe4984fc735cbe2acca8d298c - - - ~AISResources - classlibdap_1_1AISResources.html - a29cdff1d231e0c769a10af0df07b2d56 - - - add_regexp_resource - classlibdap_1_1AISResources.html - abb38b5dda71db72797538218ae16305d - - - add_regexp_resource - classlibdap_1_1AISResources.html - a596d28e5be60838234b3efe64532e25f - - - add_url_resource - classlibdap_1_1AISResources.html - adc3494e028bbacd2fc2e1c34f929fad4 - - - add_url_resource - classlibdap_1_1AISResources.html - a84c7411fe8b00a2f96a578695cca676a - - - get_resource - classlibdap_1_1AISResources.html - a35cb470d61a9e94a013520f45514f600 - - - has_resource - classlibdap_1_1AISResources.html - a5db1857c00f33c7962ba02f7ffff08ef - - - read_database - classlibdap_1_1AISResources.html - aa8bef9e8affa5cdffbf40a6a73935fd3 - - - write_database - classlibdap_1_1AISResources.html - a2867d445f918e4902ec6fe45c695ebb1 - - - AISResourcesTest - classlibdap_1_1AISResources.html - a4b45a9fddd36e299e96b57ce42fc48b6 - - - operator<< - classlibdap_1_1AISResources.html - a56056b9b3a7729494d6790e56394abbb - - - - - AlarmHandler - classlibdap_1_1AlarmHandler.html - - - AlarmHandler - classlibdap_1_1AlarmHandler.html - af135024cae3ee1340f10a35ec80f639e - - - AlarmHandler - classlibdap_1_1AlarmHandler.html - a35ed5f5a237b749d58e9f5a14eb096fa - - - AlarmHandler - classlibdap_1_1AlarmHandler.html - a27edcc310cb14706adb1dd42eb50e136 - - - ~AlarmHandler - classlibdap_1_1AlarmHandler.html - afc0167a0ce74afa5a014bba867660815 - - - handle_signal - classlibdap_1_1AlarmHandler.html - abe52f8939c85b0285c2a8cb48b970a9b - - - - - Ancillary - classlibdap_1_1Ancillary.html - - - - - Array - classlibdap_1_1Array.html - - - dimension - structlibdap_1_1Array_1_1dimension.html - - - dimension - structlibdap_1_1Array_1_1dimension.html - a12d06aa80839fa51ccc8c5888f9f7469 - - - dimension - structlibdap_1_1Array_1_1dimension.html - a9390697cde8f5249b6aad8b22454a307 - - - dimension - structlibdap_1_1Array_1_1dimension.html - a41d9b07870e639d95203003b3188e0cb - - - c_size - structlibdap_1_1Array_1_1dimension.html - afe3967fd170363af8cf22785e500e6e6 - - - dim - structlibdap_1_1Array_1_1dimension.html - a4b4b2890af4664c2708fb2097e7e76b8 - - - name - structlibdap_1_1Array_1_1dimension.html - a3a669f3c6655d1abe8d425ea2ee9b6f1 - - - size - structlibdap_1_1Array_1_1dimension.html - a9755d2f4f1ee36ef45c6d72ab2231841 - - - start - structlibdap_1_1Array_1_1dimension.html - a6f00f58d28ba435d093c5e7f1683dde3 - - - stop - structlibdap_1_1Array_1_1dimension.html - ac5f0e3960dde02014e031d6a3e457c4c - - - stride - structlibdap_1_1Array_1_1dimension.html - a056a67e3c91acd7c815f279c2dab2ea8 - - - use_sdim_for_slice - structlibdap_1_1Array_1_1dimension.html - a6b32a6d4afbc18a696217ffff0a6ea4e - - - - - btp_stack - classlibdap_1_1Array.html - ae9c6e71855b90a0e552713011c9ab81f - - - Dim_citer - classlibdap_1_1Array.html - aa36e3487697c25295d1b74a346b82720 - - - Dim_iter - classlibdap_1_1Array.html - a7a557c05085a83d1501dbfa249d3cc52 - - - Array - classlibdap_1_1Array.html - ae9a0d029981757fdb6b67c6c020c37e0 - - - Array - classlibdap_1_1Array.html - a3c9bb7698219bdcdc4dba1fa38543975 - - - Array - classlibdap_1_1Array.html - a893a3fa9df80aae3ec926037fd2debea - - - ~Array - classlibdap_1_1Array.html - ad30dc4754b0040a453d00cf5e0b4ddb7 - - - _duplicate - classlibdap_1_1Array.html - afc1bc92f368ea3a8b136dd751d79752e - - - add_constraint - classlibdap_1_1Array.html - a538f7c336e26b873f50e033d553bba26 - - - add_constraint - classlibdap_1_1Array.html - a3ebaff571eb68683238b1afe3063f25d - - - add_var - classlibdap_1_1Array.html - ac9a68fa480403f9b80285073c653570c - - - add_var_nocopy - classlibdap_1_1Array.html - a41559fa8a060e048f286d7d521fa1a03 - - - append_dim - classlibdap_1_1Array.html - a76e2d807204976c179ca07e7a3f6f142 - - - append_dim - classlibdap_1_1Array.html - a7fde3d514197a700572e497299b38274 - - - attributes - classlibdap_1_1Array.html - a97452f06d2188eb838399a709246b5e9 - - - buf2val - classlibdap_1_1Array.html - af20a56a72c3108b31418ebf01f779253 - - - check_semantics - classlibdap_1_1Array.html - aa2dcec843f64da6142a7a3208651a5e4 - - - clear_all_dims - classlibdap_1_1Array.html - a9640d5aa2c37123f06220b9c3d77ce82 - - - clear_constraint - classlibdap_1_1Array.html - a151f9eaea5f7b22980b1ef86c75723ce - - - clear_local_data - classlibdap_1_1Array.html - ac12023f8bf9ecc97998c3bb021ba2772 - - - compute_checksum - classlibdap_1_1Array.html - a9c61fcb646f1813e350549b6ddf48204 - - - d4_ops - classlibdap_1_1Array.html - a512a356f31ed6c4c1a368da0b054408a - - - dataset - classlibdap_1_1Array.html - a47521ce321a17e6ce217870cb6a1a7aa - - - deserialize - classlibdap_1_1Array.html - aba86cc0f3915d85e37f4b9e00ebfde7e - - - deserialize - classlibdap_1_1Array.html - ad78d293754a1d78b90c86f8e33c22bec - - - dim_begin - classlibdap_1_1Array.html - ae6e6943cd895fa8dc1c58621ffad42a0 - - - dim_end - classlibdap_1_1Array.html - a1e6b13c4a5d3e825df7ebae3a9dc300d - - - dimension_D4dim - classlibdap_1_1Array.html - a8084269cb03dde18d94377e3c6faf702 - - - dimension_name - classlibdap_1_1Array.html - a594eec9c83ef39c93f735e6cc3216c8b - - - dimension_size - classlibdap_1_1Array.html - a8f29497af9c33c0d66939d5f9a16d92a - - - dimension_start - classlibdap_1_1Array.html - a12084880777d27d782b0e1f2f4d5ae01 - - - dimension_stop - classlibdap_1_1Array.html - a446f239be3ef678a4476058c8041552a - - - dimension_stride - classlibdap_1_1Array.html - afc530e71ace953992a5b314a6f885d31 - - - dimensions - classlibdap_1_1Array.html - afa75d1ff3c75b8359d03b3f382bfd179 - - - dump - classlibdap_1_1Array.html - a19bf36db03a5a700c80ec33e76bfc9a6 - - - element_count - classlibdap_1_1Array.html - ab78981c9e05e7d1dc24f913dbd2021d7 - - - FQN - classlibdap_1_1Array.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - - - get_attr_table - classlibdap_1_1Array.html - a1fcd9537c67e3bf88964b2656ff5bac1 - - - get_buf - classlibdap_1_1Array.html - a285ee3b0cc0adf6a54ea388ea71a69fc - - - get_compound_buf - classlibdap_1_1Array.html - ad6d99474ab74d8b9752e4e77b3350121 - - - get_parent - classlibdap_1_1Array.html - a3459cdaa239c33ce111ef360d8dc3017 - - - get_str - classlibdap_1_1Array.html - ab53f2eb57de3f0f99961f6ab6f470638 - - - get_value_capacity - classlibdap_1_1Array.html - a16b89988deda0413d1eb2cdc615a38df - - - intern_data - classlibdap_1_1Array.html - a6b5ee8fec4de3700e2564a64ef4f6d76 - - - intern_data - classlibdap_1_1Array.html - abe772a228c62c7960bf2eb92be77732f - - - is_constructor_type - classlibdap_1_1Array.html - a8b8490e0047c6da52945699a132008ea - - - is_dap4 - classlibdap_1_1Array.html - a7f6835cb5e5589ab5dad3fb4813d3bea - - - is_in_selection - classlibdap_1_1Array.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - - - is_simple_type - classlibdap_1_1Array.html - aae57e5b270b3a015d40c8db10b9b5549 - - - is_vector_type - classlibdap_1_1Array.html - a7107c76dbcab71015141142383b6d022 - - - length - classlibdap_1_1Array.html - a2476a541aad16bedc64d99805fcc9c0c - - - m_create_cardinal_data_buffer_for_type - classlibdap_1_1Array.html - af175806a557f627a0ee70c5f05ed7c5c - - - m_delete_cardinal_data_buffer - classlibdap_1_1Array.html - ad2e46d6d52fcb609658baf5ac1f9892e - - - m_duplicate - classlibdap_1_1Array.html - acffc202435cee93a54af98cd471beb98 - - - m_duplicate - classlibdap_1_1Array.html - a0c55b826c8c5dfe7a454dc670e859a41 - - - m_is_cardinal_type - classlibdap_1_1Array.html - ac00c2a2ebd65c86022b82dfb1a32485c - - - m_set_cardinal_values_internal - classlibdap_1_1Array.html - a1fb2c5dc539e55203fc61845089c67e8 - - - maps - classlibdap_1_1Array.html - a7c1d6ce5c4143a9dac90240278c547d1 - - - name - classlibdap_1_1Array.html - a24c5d67823b3cff7f4245a993072a142 - - - operator= - classlibdap_1_1Array.html - afc4c6d411b46e29214c9b19fb7fb28c1 - - - ops - classlibdap_1_1Array.html - a8a0000be2a244e3e07abda3020af8800 - - - prepend_dim - classlibdap_1_1Array.html - adcb475b8a855515df7d9ddd254c3f08a - - - prepend_dim - classlibdap_1_1Array.html - ac2cef6fe1d7fe76626f33130380d9752 - - - print_array - classlibdap_1_1Array.html - a435534a45cea53181d30dc09d46734a7 - - - print_array - classlibdap_1_1Array.html - a88a4492771892695010496d2dfb6071e - - - print_as_map_xml - classlibdap_1_1Array.html - abafb35e8c77673793f2d3897ca1eec4b - - - print_as_map_xml - classlibdap_1_1Array.html - a5a3d7064fae4cfc94d4fc9026fce0667 - - - print_as_map_xml_writer - classlibdap_1_1Array.html - a0077e85bac2620d8746dc50cfd7104ae - - - print_dap4 - classlibdap_1_1Array.html - a976af6f6189ee1f404cd7995df51eabc - - - print_decl - classlibdap_1_1Array.html - a62456490e14832bd55b9b79d6e37397a - - - print_decl - classlibdap_1_1Array.html - ada4cee027a63ce185940fd8c019741d7 - - - print_val - classlibdap_1_1Array.html - af7bdf05ad5a57a517aa6b122b03f06df - - - print_val - classlibdap_1_1Array.html - aedea9b76dc355fde465f8163d80fafbb - - - print_xml - classlibdap_1_1Array.html - a3ce1bd161426e6950dc97511f33b2845 - - - print_xml - classlibdap_1_1Array.html - a630bb8bac280ba540af9035df5968c2b - - - print_xml_core - classlibdap_1_1Array.html - ad38718861c5dd21a677746a2211059f1 - - - print_xml_core - classlibdap_1_1Array.html - a29755e9dcff905940b9ee6138ee556be - - - print_xml_writer - classlibdap_1_1Array.html - af27b27e6edec29098e938bd7bb26d8f6 - - - print_xml_writer_core - classlibdap_1_1Array.html - a9c0901b2cee44ee6c2ea851822f8f6b1 - - - prototype - classlibdap_1_1Array.html - a31fb64d322e4db4892ceffa54a3e427b - - - ptr_duplicate - classlibdap_1_1Array.html - a31dc321bd9314239474f30d290e0599a - - - read - classlibdap_1_1Array.html - a1da003c53f2e663223f603ab3fbd7c8e - - - read_p - classlibdap_1_1Array.html - a38ff819a432217c55db2e9071928d20c - - - rename_dim - classlibdap_1_1Array.html - a843af00a8cdb4e4c87eae166d57db5d4 - - - reserve_value_capacity - classlibdap_1_1Array.html - aaaa7c0f36266ef3df9f4fb90de220867 - - - reserve_value_capacity - classlibdap_1_1Array.html - adade15ffa55c59f6205e1c3c9ea78a35 - - - reset_constraint - classlibdap_1_1Array.html - ac375d728d50c8b27422c766c84e12300 - - - send_p - classlibdap_1_1Array.html - a980c0013817836aa77ef74aeec7fb192 - - - serialize - classlibdap_1_1Array.html - a993d46232faadb5914cc0519d013e9b2 - - - serialize - classlibdap_1_1Array.html - af478e3d5cbb3235081fe8daa6d6629a9 - - - set_attr_table - classlibdap_1_1Array.html - a572a1d76a75981abac83a4241e90c0fa - - - set_attributes - classlibdap_1_1Array.html - ad4dda4cf43dca838d3de183b8e01cd09 - - - set_attributes_nocopy - classlibdap_1_1Array.html - afd0e5f87d19020f560d5c1ff8dd4d6a3 - - - set_in_selection - classlibdap_1_1Array.html - a2bc036248cdaf1affac464170f32ad30 - - - set_is_dap4 - classlibdap_1_1Array.html - abca9ddaa9a1ada8447cbe7193e8e288a - - - set_length - classlibdap_1_1Array.html - a05a61e24fd295934dfc3c37c9f55ca57 - - - set_name - classlibdap_1_1Array.html - aacfca48c7db65e3a2c3c94734dee8c36 - - - set_parent - classlibdap_1_1Array.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - - - set_read_p - classlibdap_1_1Array.html - a58712de8871e28a48fdc95e72a09df71 - - - set_send_p - classlibdap_1_1Array.html - a64815467570490a4a6cddc89f09a2413 - - - set_synthesized_p - classlibdap_1_1Array.html - a595cb4059cff24f801a1b6da79bd2f9e - - - set_type - classlibdap_1_1Array.html - af74f8d1ef57c9fcca46f620f75d175a3 - - - set_value - classlibdap_1_1Array.html - ac6ffab2a00584c2963c0d521ad4028b5 - - - set_value - classlibdap_1_1Array.html - af0c29cba5f93a8571754f2324a6fc170 - - - set_value - classlibdap_1_1Array.html - a040fe60aa43a3beecd078c3c7bb4f42f - - - set_value - classlibdap_1_1Array.html - ab6d2f9bc8fdbb433ddb3d2ceb995ac7d - - - set_value - classlibdap_1_1Array.html - a8c122828120daf1ff5e850e8f7b9ce89 - - - set_value - classlibdap_1_1Array.html - a565daf922503ff615dac4c6cdb14c1ea - - - set_value - classlibdap_1_1Array.html - af264f7a752cc501bfbccee813733bde3 - - - set_value - classlibdap_1_1Array.html - acfe7846fc2aeb383b9b6263f09c92f63 - - - set_value - classlibdap_1_1Array.html - a0ba340343eda47f274185ee7a3e6761e - - - set_value - classlibdap_1_1Array.html - a5d20f40b94b9d901f8124d7d54ed423f - - - set_value - classlibdap_1_1Array.html - abd6e429e907214c593b6fb37f97511ee - - - set_value - classlibdap_1_1Array.html - ac4ba1b5ff3e1283a3ead8e5ef2b3be99 - - - set_value - classlibdap_1_1Array.html - a20e3ce67dddefd2e941833f84d8fb129 - - - set_value - classlibdap_1_1Array.html - a2c1c39cad25264854e751b67478c36ac - - - set_value - classlibdap_1_1Array.html - ae18e02e571fec26f5ee7e6fe03b9ccf6 - - - set_value - classlibdap_1_1Array.html - a6479561bdefac3ab843d09fe2a8467c0 - - - set_value - classlibdap_1_1Array.html - aa73493691f34dc6a871a5557b147ba4d - - - set_value - classlibdap_1_1Array.html - abaa596cea00692617d5af9cb89eab60c - - - set_value - classlibdap_1_1Array.html - a1f18c590ea763d25de3595a7b96cfad2 - - - set_value - classlibdap_1_1Array.html - a8d818139d7bd98c4d6e16494e4414ea9 - - - set_value - classlibdap_1_1Array.html - a9f4bfe3aba7506d5e8d3d5182a518359 - - - set_value - classlibdap_1_1Array.html - a068afd2353ad32f904361253e1b6e807 - - - set_value_slice_from_row_major_vector - classlibdap_1_1Array.html - a559d8ca948ca40f179e4e3da0bfdfdc4 - - - set_vec - classlibdap_1_1Array.html - a8bf6e565dcb2eab1f3f7037518a9acb3 - - - set_vec_nocopy - classlibdap_1_1Array.html - a175f1a51686798061c2147f2eccde33a - - - synthesized_p - classlibdap_1_1Array.html - ae64e677da27249473cdba0b60cdbb90a - - - toString - classlibdap_1_1Array.html - a701eb3361f5b5628329ece019cd34519 - - - transfer_attributes - classlibdap_1_1Array.html - add8e836c622042a339152a6c31e5bdfb - - - transform_to_dap2 - classlibdap_1_1Array.html - a1cc230189460ef65076e8091cf3b6e36 - - - transform_to_dap4 - classlibdap_1_1Array.html - a2dea8a711559cb0e0b9c36bf41df6473 - - - type - classlibdap_1_1Array.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - - - type_name - classlibdap_1_1Array.html - a18a42c8ec35cb5b15cd651a4152f8a2c - - - update_length - classlibdap_1_1Array.html - a4c4fe08ce144a3fa2d6b15b7ae15ccc0 - - - val2buf - classlibdap_1_1Array.html - a96ecf84f2798065878755d9a9014ee69 - - - value - classlibdap_1_1Array.html - a624bc74ea64985cdf4f9980809ff3892 - - - value - classlibdap_1_1Array.html - a66fca662d9754b45b0a386bf08b869d2 - - - value - classlibdap_1_1Array.html - a1a24b162aa214f95b0f82a466573cb3e - - - value - classlibdap_1_1Array.html - a3ad2e9a815fd5b6809da0d7f09de410b - - - value - classlibdap_1_1Array.html - ac447641e95e7e000c83aa351f23c3a48 - - - value - classlibdap_1_1Array.html - ab23253ee97cc725ba4d87063464ebfaf - - - value - classlibdap_1_1Array.html - a335127b963207a457c362fc6a1a73523 - - - value - classlibdap_1_1Array.html - a7f834fcdcaf597e35d732ddb5c7cc5a4 - - - value - classlibdap_1_1Array.html - ab72e65b9578f8743d3c180be7de413c4 - - - value - classlibdap_1_1Array.html - a0e76df3852b26e453ed75e24623f968a - - - value - classlibdap_1_1Array.html - a0725f0e3304f9ad00bf90a19b5650368 - - - value - classlibdap_1_1Array.html - a279e96b1bac813a30e361d6db1d14932 - - - value - classlibdap_1_1Array.html - a675d1fea0d560bca688809dd4792f414 - - - value - classlibdap_1_1Array.html - a5c5f7e24624d3fdf37c60396c8cb5b8b - - - value - classlibdap_1_1Array.html - af27644af35f69c4c7920bbc481d87f9f - - - value - classlibdap_1_1Array.html - abc69c8a1b1eb45f7a91186f247c10f10 - - - value - classlibdap_1_1Array.html - aa599da1cff6457453c2b6cb2ea1b3b7c - - - value - classlibdap_1_1Array.html - ae15909a6fd5e1b2bedf3cb09de41801c - - - value - classlibdap_1_1Array.html - a707c5198cef8c3753565301ada3db0e7 - - - value - classlibdap_1_1Array.html - a145e75e2d47b6c918162e2c556ab2faa - - - value - classlibdap_1_1Array.html - a8470e7dc052e327237457ffb50f4660b - - - value - classlibdap_1_1Array.html - af9fd1c331a511989ac2bf4a0ad5b27da - - - value - classlibdap_1_1Array.html - aca5000630369cb4217827c2f136afec0 - - - var - classlibdap_1_1Array.html - aa5ccb30d1f27ae587f35216b859feec7 - - - var - classlibdap_1_1Array.html - ac07a950727d2ac58934ba4cc03206c8d - - - var - classlibdap_1_1Array.html - adf286762e63295675850c41cedf33370 - - - vec_resize - classlibdap_1_1Array.html - ad180a87244b0b6f32b47711a4ae0330e - - - width - classlibdap_1_1Array.html - a8fe5d7b06814653b6cf5408b2a8671db - - - ArrayTest - classlibdap_1_1Array.html - a76052f084a0023044a84ff5b75a24036 - - - D4Group - classlibdap_1_1Array.html - a68515702cd7a6b5b46aa3e00f4e5261b - - - d_in_selection - classlibdap_1_1Array.html - a949a89714965d7afdcd1e3edc8b7f0d4 - - - d_is_synthesized - classlibdap_1_1Array.html - a629e97e8eb7d285b54c9af8c1ec9a29a - - - d_maps - classlibdap_1_1Array.html - a83f21fdd6e522e5ea14aae8682862029 - - - - - AttrTable - classlibdap_1_1AttrTable.html - - - entry - structlibdap_1_1AttrTable_1_1entry.html - - - entry - structlibdap_1_1AttrTable_1_1entry.html - ab320813490910bbbfd32f1e90c53be90 - - - entry - structlibdap_1_1AttrTable_1_1entry.html - a6fdd679c67ba91156945a6754a84cb8a - - - ~entry - structlibdap_1_1AttrTable_1_1entry.html - aab237508e54dac117bd2e873253afe4b - - - clone - structlibdap_1_1AttrTable_1_1entry.html - a1e27b2515a3a9ab782bdd0c4a7a3d25b - - - delete_entry - structlibdap_1_1AttrTable_1_1entry.html - a2a3edc1474eaf5a443704fed6cbcfe01 - - - operator= - structlibdap_1_1AttrTable_1_1entry.html - a03884510f2a5b2e745a9398d11ed0919 - - - aliased_to - structlibdap_1_1AttrTable_1_1entry.html - a46aca5e9ac178e67b78059a553d67b20 - - - attr - structlibdap_1_1AttrTable_1_1entry.html - a09b4c87f7859554ac6390ed632f64117 - - - attributes - structlibdap_1_1AttrTable_1_1entry.html - a491a2518fc391fbc1b892f75a7e90797 - - - is_alias - structlibdap_1_1AttrTable_1_1entry.html - a9d1e4aef0aefa68788a2c06e3072b0db - - - is_global - structlibdap_1_1AttrTable_1_1entry.html - a429b23653f96767623d29e8a2d3c8d7e - - - name - structlibdap_1_1AttrTable_1_1entry.html - a36ed731e3d0e620c41157ee8bd96bc42 - - - type - structlibdap_1_1AttrTable_1_1entry.html - a6491612f53754b89de9fc0168f800b04 - - - - - Attr_citer - classlibdap_1_1AttrTable.html - a18087581e0377a852a029d4aa9d64a1e - - - Attr_iter - classlibdap_1_1AttrTable.html - a3647edf8906b672bad7a8c5ffc81d62a - - - AttrTable - classlibdap_1_1AttrTable.html - a09533d67357ad866f5e499f9eff2253e - - - AttrTable - classlibdap_1_1AttrTable.html - a709c15ac098ebf761aafff16945eea4a - - - ~AttrTable - classlibdap_1_1AttrTable.html - ac1a2ad7a01b70b53a0995f63649e23b7 - - - add_container_alias - classlibdap_1_1AttrTable.html - acd28a0951ff0764a6d740fbc30d3052f - - - add_value_alias - classlibdap_1_1AttrTable.html - a77971a429d7c23360fd41a4df177489c - - - append_attr - classlibdap_1_1AttrTable.html - a7a526505d174c7a2f33e6b57761f8bc4 - - - append_attr - classlibdap_1_1AttrTable.html - a5b55410e211497f89ebcfad559920cbf - - - append_container - classlibdap_1_1AttrTable.html - a03f3a1197f9529d4c0328830c765cfe1 - - - append_container - classlibdap_1_1AttrTable.html - aa731fefe3e52fb193f7f2b5a39e04a4d - - - attr_alias - classlibdap_1_1AttrTable.html - a2b9a67d2cc96dee860e6fb2d713a8252 - - - attr_alias - classlibdap_1_1AttrTable.html - aaf0369980f799252f9f133390c8b4d79 - - - attr_begin - classlibdap_1_1AttrTable.html - a8881bb7044577dae3098f4a1d8bf4f2f - - - attr_end - classlibdap_1_1AttrTable.html - a543955729bad6b7a9d1d6b336596b1ba - - - clone - classlibdap_1_1AttrTable.html - a4fa4213ffc8bd5ab96ff6ba148fd9eb1 - - - del_attr - classlibdap_1_1AttrTable.html - a9c8feb09ec38a783817bcd2fbd3421c8 - - - del_attr_table - classlibdap_1_1AttrTable.html - abcdd3b10325085a3dd345343df159e48 - - - dump - classlibdap_1_1AttrTable.html - adf622bbd401676f089b194812bac7290 - - - erase - classlibdap_1_1AttrTable.html - aad6a9557cc76cfb925e55077e0470859 - - - find - classlibdap_1_1AttrTable.html - a33653c34e856e2e5fc0578240eb7a959 - - - find_container - classlibdap_1_1AttrTable.html - ae403d070910c829f74a59fbf4648588f - - - get_attr - classlibdap_1_1AttrTable.html - a615b618bb2333da0d7114eec2101defe - - - get_attr - classlibdap_1_1AttrTable.html - a060eb65435ff7deb0905c640f17b35dc - - - get_attr_iter - classlibdap_1_1AttrTable.html - a8b9dd1020a256e884747e8ecf57c10a3 - - - get_attr_num - classlibdap_1_1AttrTable.html - a1c86cb6c91dfdc37b9787828dd09483c - - - get_attr_num - classlibdap_1_1AttrTable.html - acd12f3bd820be114b3cc3dd97aad7d89 - - - get_attr_table - classlibdap_1_1AttrTable.html - a4010172de5c41cd88f2422d5e1975522 - - - get_attr_table - classlibdap_1_1AttrTable.html - afd8cf7a6bf36504f48eda8a6ff11a56c - - - get_attr_type - classlibdap_1_1AttrTable.html - aefcd82370930ba94a288f135d9417a93 - - - get_attr_type - classlibdap_1_1AttrTable.html - a0893b78039439185dd39c69beaf0324e - - - get_attr_vector - classlibdap_1_1AttrTable.html - a7352d886789e9e38d530fc44c6cbef30 - - - get_attr_vector - classlibdap_1_1AttrTable.html - a19f9153c5bad64f5bc783d493ffa0733 - - - get_name - classlibdap_1_1AttrTable.html - aaaec827895fd8897594969159f1203e6 - - - get_name - classlibdap_1_1AttrTable.html - ad7ce1789497599e99014696aa5afe736 - - - get_parent - classlibdap_1_1AttrTable.html - ac5889e66ffa861ce098628de19840d89 - - - get_size - classlibdap_1_1AttrTable.html - acdacb74f3a5f5c8ce7eb022562a8f971 - - - get_type - classlibdap_1_1AttrTable.html - a689563c3beb8e6f571387c5105821f27 - - - get_type - classlibdap_1_1AttrTable.html - abfdfb5b51ff84a41596ebf0f28ca77df - - - is_container - classlibdap_1_1AttrTable.html - a2ca5cf1e2aa163259b00affe49547a0d - - - is_global_attribute - classlibdap_1_1AttrTable.html - a68ab27e367c98769d9c3d98fc9c23ed4 - - - is_global_attribute - classlibdap_1_1AttrTable.html - a6923d18999608d59c02883b12cb18788 - - - operator= - classlibdap_1_1AttrTable.html - a5110c171d6fa7911f4022145f2ad9027 - - - print - classlibdap_1_1AttrTable.html - acc2d83b4f1c8e704a6f83ff966a999c8 - - - print - classlibdap_1_1AttrTable.html - a785014928633842a93352cc05038ea38 - - - print_dap4 - classlibdap_1_1AttrTable.html - a93a445b9e6fb665076834e99dd7e4a0e - - - print_xml - classlibdap_1_1AttrTable.html - a5e27ea09f83831eded1b3d86de7f4534 - - - print_xml - classlibdap_1_1AttrTable.html - a21ee9e5f68e06fb698ef93553dcdc592 - - - print_xml_writer - classlibdap_1_1AttrTable.html - ab85de16a14335a3c1b757ae271d13644 - - - recurrsive_find - classlibdap_1_1AttrTable.html - aefdc93c9514013ebd644488cd8365924 - - - set_is_global_attribute - classlibdap_1_1AttrTable.html - aadba23c830a02aa19c24c2a6f442dfd2 - - - set_is_global_attribute - classlibdap_1_1AttrTable.html - abf6da8bcff87a1976c9227f801b36d47 - - - set_name - classlibdap_1_1AttrTable.html - a3d09ff6bf5a12789308b20440dcaf302 - - - simple_find - classlibdap_1_1AttrTable.html - ae7824f413ad036d91df0ef62cac14351 - - - simple_find_container - classlibdap_1_1AttrTable.html - a6602967438b96bf1ba08e2b8195b9238 - - - simple_print - classlibdap_1_1AttrTable.html - a1abee354d7f609ed55b849b0431bc48f - - - simple_print - classlibdap_1_1AttrTable.html - ae167683da221e8d64aaf2fab58dbf22f - - - AttrTableTest - classlibdap_1_1AttrTable.html - aaf41c5b6e5f9c13e92735511139b18b3 - - - - - BaseType - classlibdap_1_1BaseType.html - - - btp_stack - classlibdap_1_1BaseType.html - ae9c6e71855b90a0e552713011c9ab81f - - - BaseType - classlibdap_1_1BaseType.html - af4a9a00892a89fea323acbc391aeef32 - - - BaseType - classlibdap_1_1BaseType.html - a3100d033d3d321486f0f2939fcb2b14a - - - BaseType - classlibdap_1_1BaseType.html - ae11f0e6e4286438aad85bf01dba8ddfd - - - ~BaseType - classlibdap_1_1BaseType.html - a78afe1ba971edce362b0f0360ad7a86f - - - add_var - classlibdap_1_1BaseType.html - adca3c2621c4a509537c18362005d7f7f - - - add_var_nocopy - classlibdap_1_1BaseType.html - aa1192360cea4dc516c822cd3e13dc723 - - - attributes - classlibdap_1_1BaseType.html - a97452f06d2188eb838399a709246b5e9 - - - buf2val - classlibdap_1_1BaseType.html - accb15b7411e1988ef0a085ebdc88ce5d - - - check_semantics - classlibdap_1_1BaseType.html - aec503abec2fd3090e7738c0a575491f8 - - - clear_local_data - classlibdap_1_1BaseType.html - aaddb97a4efbe035f41deaf03c6e8683f - - - compute_checksum - classlibdap_1_1BaseType.html - adacd263e05baa44861eec811037dee05 - - - d4_ops - classlibdap_1_1BaseType.html - a512a356f31ed6c4c1a368da0b054408a - - - dataset - classlibdap_1_1BaseType.html - a47521ce321a17e6ce217870cb6a1a7aa - - - deserialize - classlibdap_1_1BaseType.html - a1f27d99250e857efd86ac9db788bbf1b - - - deserialize - classlibdap_1_1BaseType.html - a10101e702d03e2a30ebecc341ebc7a08 - - - dump - classlibdap_1_1BaseType.html - adea4e1a5116f488343825c9657e92ffe - - - element_count - classlibdap_1_1BaseType.html - a5c2235737737b482bfa7536b8aeab810 - - - FQN - classlibdap_1_1BaseType.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - - - get_attr_table - classlibdap_1_1BaseType.html - a1fcd9537c67e3bf88964b2656ff5bac1 - - - get_parent - classlibdap_1_1BaseType.html - a3459cdaa239c33ce111ef360d8dc3017 - - - intern_data - classlibdap_1_1BaseType.html - a722d33783aa0272d339b0301a4f77e59 - - - intern_data - classlibdap_1_1BaseType.html - a1956e6ea90a745516f5372c859173433 - - - is_constructor_type - classlibdap_1_1BaseType.html - a8b8490e0047c6da52945699a132008ea - - - is_dap4 - classlibdap_1_1BaseType.html - a7f6835cb5e5589ab5dad3fb4813d3bea - - - is_in_selection - classlibdap_1_1BaseType.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - - - is_simple_type - classlibdap_1_1BaseType.html - aae57e5b270b3a015d40c8db10b9b5549 - - - is_vector_type - classlibdap_1_1BaseType.html - a7107c76dbcab71015141142383b6d022 - - - length - classlibdap_1_1BaseType.html - aadcda7a659157bc6a832d8a5fb775b3f - - - m_duplicate - classlibdap_1_1BaseType.html - a0c55b826c8c5dfe7a454dc670e859a41 - - - name - classlibdap_1_1BaseType.html - a24c5d67823b3cff7f4245a993072a142 - - - operator= - classlibdap_1_1BaseType.html - a03e4440b91a651f16d17c3baf6812ebd - - - ops - classlibdap_1_1BaseType.html - a8a0000be2a244e3e07abda3020af8800 - - - print_dap4 - classlibdap_1_1BaseType.html - afcddbe441380b95c894510c02980b163 - - - print_decl - classlibdap_1_1BaseType.html - a2d799fad93255d7f2b803562ae7a5784 - - - print_decl - classlibdap_1_1BaseType.html - afd744b0ddeb04e7b173c9e83423ec572 - - - print_val - classlibdap_1_1BaseType.html - afb5e13838a599ec0efe2adbb2ae18f47 - - - print_val - classlibdap_1_1BaseType.html - a94edd5b610afb1432144158740710488 - - - print_xml - classlibdap_1_1BaseType.html - a825820edee179550cfde3dfd4d274f2a - - - print_xml - classlibdap_1_1BaseType.html - a8bd2c7682edd48c64b210bdf247bdef7 - - - print_xml_writer - classlibdap_1_1BaseType.html - a11554ff931528b243e9af8173d205b44 - - - ptr_duplicate - classlibdap_1_1BaseType.html - a0b130311c9901fb8a7ab11ea19090ef0 - - - read - classlibdap_1_1BaseType.html - a1da003c53f2e663223f603ab3fbd7c8e - - - read_p - classlibdap_1_1BaseType.html - a38ff819a432217c55db2e9071928d20c - - - send_p - classlibdap_1_1BaseType.html - a980c0013817836aa77ef74aeec7fb192 - - - serialize - classlibdap_1_1BaseType.html - adc24a735977e28acb0e6f78667c1dd21 - - - serialize - classlibdap_1_1BaseType.html - a30331db8b6a7cdc843652376fa683b71 - - - set_attr_table - classlibdap_1_1BaseType.html - a572a1d76a75981abac83a4241e90c0fa - - - set_attributes - classlibdap_1_1BaseType.html - ad4dda4cf43dca838d3de183b8e01cd09 - - - set_attributes_nocopy - classlibdap_1_1BaseType.html - afd0e5f87d19020f560d5c1ff8dd4d6a3 - - - set_in_selection - classlibdap_1_1BaseType.html - a2bc036248cdaf1affac464170f32ad30 - - - set_is_dap4 - classlibdap_1_1BaseType.html - abca9ddaa9a1ada8447cbe7193e8e288a - - - set_length - classlibdap_1_1BaseType.html - a4fe343c1eeb6fb1d61ab030433651d90 - - - set_name - classlibdap_1_1BaseType.html - a86504564f45a3e6748c6f1cc0ff4e9fa - - - set_parent - classlibdap_1_1BaseType.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - - - set_read_p - classlibdap_1_1BaseType.html - a4533905a450d2a7af32e7d5acd557676 - - - set_send_p - classlibdap_1_1BaseType.html - aba7b27635c95b74536de18393133628e - - - set_synthesized_p - classlibdap_1_1BaseType.html - a595cb4059cff24f801a1b6da79bd2f9e - - - set_type - classlibdap_1_1BaseType.html - af74f8d1ef57c9fcca46f620f75d175a3 - - - synthesized_p - classlibdap_1_1BaseType.html - ae64e677da27249473cdba0b60cdbb90a - - - toString - classlibdap_1_1BaseType.html - a701eb3361f5b5628329ece019cd34519 - - - transfer_attributes - classlibdap_1_1BaseType.html - add8e836c622042a339152a6c31e5bdfb - - - transform_to_dap2 - classlibdap_1_1BaseType.html - affec8a11e9cc035d4b1e8fb9a87b2072 - - - transform_to_dap4 - classlibdap_1_1BaseType.html - adb03e2e1e40c3c888577c4666831a949 - - - type - classlibdap_1_1BaseType.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - - - type_name - classlibdap_1_1BaseType.html - a18a42c8ec35cb5b15cd651a4152f8a2c - - - val2buf - classlibdap_1_1BaseType.html - ac360679317a411d7812ca235a1528281 - - - var - classlibdap_1_1BaseType.html - a4dc4fac1bb6083f6db645f37bfd59b85 - - - var - classlibdap_1_1BaseType.html - adecfc442b5927c79933c7f71cfe03fd2 - - - width - classlibdap_1_1BaseType.html - a433dcd53f227a431c6479234d1b52220 - - - d_in_selection - classlibdap_1_1BaseType.html - a949a89714965d7afdcd1e3edc8b7f0d4 - - - d_is_synthesized - classlibdap_1_1BaseType.html - a629e97e8eb7d285b54c9af8c1ec9a29a - - - - - BaseTypeFactory - classlibdap_1_1BaseTypeFactory.html - - - BaseTypeFactory - classlibdap_1_1BaseTypeFactory.html - a7a4c5fb2ec417df8bb9ec438903aad4e - - - ~BaseTypeFactory - classlibdap_1_1BaseTypeFactory.html - ad1af66eee2dba9ae73db9258eb4fbe44 - - - NewArray - classlibdap_1_1BaseTypeFactory.html - ac8cedc7e30aa1334e0ba079cc5979894 - - - NewByte - classlibdap_1_1BaseTypeFactory.html - ae9736db69abe3fc4ff6252d7978d2c11 - - - NewFloat32 - classlibdap_1_1BaseTypeFactory.html - a3183fd2a34582b51252e29e04502c412 - - - NewFloat64 - classlibdap_1_1BaseTypeFactory.html - a6f667863b98000402463fcb938f9c31d - - - NewGrid - classlibdap_1_1BaseTypeFactory.html - a44b70b9301d146261db6ac3c5f74e511 - - - NewInt16 - classlibdap_1_1BaseTypeFactory.html - a397d8be1ba5e2c4e67a0aeb13aee4553 - - - NewInt32 - classlibdap_1_1BaseTypeFactory.html - a4b7fc0e2fbf981d04fe11bed8873c35e - - - NewSequence - classlibdap_1_1BaseTypeFactory.html - ab41dd430aeff02683be5a396da770ba7 - - - NewStr - classlibdap_1_1BaseTypeFactory.html - a3a1cb0cf7f033b0b803cdcbdc0a7ca08 - - - NewStructure - classlibdap_1_1BaseTypeFactory.html - af5f873b6d6f241256f89f3c81c04e85c - - - NewUInt16 - classlibdap_1_1BaseTypeFactory.html - af9420f0e89b4e196c87d7c911ff7dfd4 - - - NewUInt32 - classlibdap_1_1BaseTypeFactory.html - a3fab7ae914077f60819ab7d54f96ee62 - - - NewUrl - classlibdap_1_1BaseTypeFactory.html - a9630a8c57d8ff2f22dcbab23ee3459c4 - - - NewVariable - classlibdap_1_1BaseTypeFactory.html - a1ac2aff8a85bbfba4c012e01f087149c - - - ptr_duplicate - classlibdap_1_1BaseTypeFactory.html - a7715687224ed81f7e94b3af463ca5b8b - - - - - Byte - classlibdap_1_1Byte.html - - - btp_stack - classlibdap_1_1Byte.html - ae9c6e71855b90a0e552713011c9ab81f - - - Byte - classlibdap_1_1Byte.html - a6b22d844cd6418102466954f8e1e3106 - - - Byte - classlibdap_1_1Byte.html - aa0470214af169a5e1c080baa8257fbba - - - ~Byte - classlibdap_1_1Byte.html - a85d098199c9f39f50e205a9da566c561 - - - Byte - classlibdap_1_1Byte.html - a5931c171a88042d65f65117fc237e5ac - - - add_var - classlibdap_1_1Byte.html - adca3c2621c4a509537c18362005d7f7f - - - add_var_nocopy - classlibdap_1_1Byte.html - aa1192360cea4dc516c822cd3e13dc723 - - - attributes - classlibdap_1_1Byte.html - a97452f06d2188eb838399a709246b5e9 - - - buf2val - classlibdap_1_1Byte.html - a2de44757203d23419d59c8731ca0b96c - - - check_semantics - classlibdap_1_1Byte.html - aec503abec2fd3090e7738c0a575491f8 - - - clear_local_data - classlibdap_1_1Byte.html - aaddb97a4efbe035f41deaf03c6e8683f - - - compute_checksum - classlibdap_1_1Byte.html - a9aceffe3fc1b898adf50ce44151c2444 - - - d4_ops - classlibdap_1_1Byte.html - a44a8efbbd1e0423b4959bc76baf92dfd - - - dataset - classlibdap_1_1Byte.html - a47521ce321a17e6ce217870cb6a1a7aa - - - deserialize - classlibdap_1_1Byte.html - a11a4fa1e2e5c6477c38af9fa5c3118b4 - - - deserialize - classlibdap_1_1Byte.html - a9ffbfab78e18db036bfcf03fd0afc05c - - - dump - classlibdap_1_1Byte.html - a3cf81110f37a9b2d31a491de936b6d51 - - - element_count - classlibdap_1_1Byte.html - a5c2235737737b482bfa7536b8aeab810 - - - FQN - classlibdap_1_1Byte.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - - - get_attr_table - classlibdap_1_1Byte.html - a1fcd9537c67e3bf88964b2656ff5bac1 - - - get_parent - classlibdap_1_1Byte.html - a3459cdaa239c33ce111ef360d8dc3017 - - - intern_data - classlibdap_1_1Byte.html - a722d33783aa0272d339b0301a4f77e59 - - - intern_data - classlibdap_1_1Byte.html - a1956e6ea90a745516f5372c859173433 - - - is_constructor_type - classlibdap_1_1Byte.html - a8b8490e0047c6da52945699a132008ea - - - is_dap4 - classlibdap_1_1Byte.html - a7f6835cb5e5589ab5dad3fb4813d3bea - - - is_in_selection - classlibdap_1_1Byte.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - - - is_simple_type - classlibdap_1_1Byte.html - aae57e5b270b3a015d40c8db10b9b5549 - - - is_vector_type - classlibdap_1_1Byte.html - a7107c76dbcab71015141142383b6d022 - - - length - classlibdap_1_1Byte.html - aadcda7a659157bc6a832d8a5fb775b3f - - - m_duplicate - classlibdap_1_1Byte.html - a0c55b826c8c5dfe7a454dc670e859a41 - - - name - classlibdap_1_1Byte.html - a24c5d67823b3cff7f4245a993072a142 - - - operator= - classlibdap_1_1Byte.html - a38a34e521485f8c9c436b9cf1d44c3b9 - - - ops - classlibdap_1_1Byte.html - ad97b380875f85f6e7c3d02488f209afa - - - print_dap4 - classlibdap_1_1Byte.html - afcddbe441380b95c894510c02980b163 - - - print_decl - classlibdap_1_1Byte.html - a2d799fad93255d7f2b803562ae7a5784 - - - print_decl - classlibdap_1_1Byte.html - afd744b0ddeb04e7b173c9e83423ec572 - - - print_val - classlibdap_1_1Byte.html - a54af53582af918c4a94ad98ba9845630 - - - print_val - classlibdap_1_1Byte.html - adc3565bb42fd7454205e61a8f16119e4 - - - print_xml - classlibdap_1_1Byte.html - a825820edee179550cfde3dfd4d274f2a - - - print_xml - classlibdap_1_1Byte.html - a8bd2c7682edd48c64b210bdf247bdef7 - - - print_xml_writer - classlibdap_1_1Byte.html - a11554ff931528b243e9af8173d205b44 - - - ptr_duplicate - classlibdap_1_1Byte.html - a599c7dec30fe35df45c9a66cbb7030be - - - read - classlibdap_1_1Byte.html - a1da003c53f2e663223f603ab3fbd7c8e - - - read_p - classlibdap_1_1Byte.html - a38ff819a432217c55db2e9071928d20c - - - send_p - classlibdap_1_1Byte.html - a980c0013817836aa77ef74aeec7fb192 - - - serialize - classlibdap_1_1Byte.html - aa70aeb6aaddd570ed5bc32215b53c88e - - - serialize - classlibdap_1_1Byte.html - a2799f2bb1a9f1992ec57c7f31761abe1 - - - set_attr_table - classlibdap_1_1Byte.html - a572a1d76a75981abac83a4241e90c0fa - - - set_attributes - classlibdap_1_1Byte.html - ad4dda4cf43dca838d3de183b8e01cd09 - - - set_attributes_nocopy - classlibdap_1_1Byte.html - afd0e5f87d19020f560d5c1ff8dd4d6a3 - - - set_in_selection - classlibdap_1_1Byte.html - a2bc036248cdaf1affac464170f32ad30 - - - set_is_dap4 - classlibdap_1_1Byte.html - abca9ddaa9a1ada8447cbe7193e8e288a - - - set_length - classlibdap_1_1Byte.html - a4fe343c1eeb6fb1d61ab030433651d90 - - - set_name - classlibdap_1_1Byte.html - a86504564f45a3e6748c6f1cc0ff4e9fa - - - set_parent - classlibdap_1_1Byte.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - - - set_read_p - classlibdap_1_1Byte.html - a4533905a450d2a7af32e7d5acd557676 - - - set_send_p - classlibdap_1_1Byte.html - aba7b27635c95b74536de18393133628e - - - set_synthesized_p - classlibdap_1_1Byte.html - a595cb4059cff24f801a1b6da79bd2f9e - - - set_type - classlibdap_1_1Byte.html - af74f8d1ef57c9fcca46f620f75d175a3 - - - set_value - classlibdap_1_1Byte.html - ad79ed596e502d99c450a8a1e23b381b7 - - - synthesized_p - classlibdap_1_1Byte.html - ae64e677da27249473cdba0b60cdbb90a - - - toString - classlibdap_1_1Byte.html - a701eb3361f5b5628329ece019cd34519 - - - transfer_attributes - classlibdap_1_1Byte.html - add8e836c622042a339152a6c31e5bdfb - - - transform_to_dap2 - classlibdap_1_1Byte.html - a21e180be842b140b3d0772dc94ab4583 - - - transform_to_dap4 - classlibdap_1_1Byte.html - adb03e2e1e40c3c888577c4666831a949 - - - type - classlibdap_1_1Byte.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - - - type_name - classlibdap_1_1Byte.html - a18a42c8ec35cb5b15cd651a4152f8a2c - - - val2buf - classlibdap_1_1Byte.html - a8b8afd3348f7d22e6ff02c0c605c7bfd - - - value - classlibdap_1_1Byte.html - a96312bb8da28d27316a0077143e42360 - - - var - classlibdap_1_1Byte.html - a4dc4fac1bb6083f6db645f37bfd59b85 - - - var - classlibdap_1_1Byte.html - adecfc442b5927c79933c7f71cfe03fd2 - - - width - classlibdap_1_1Byte.html - a4d4eb99a6d1022ca4e1808776438399d - - - d_buf - classlibdap_1_1Byte.html - a47a666acf4bc1d3a2f4beb7f2199cb90 - - - d_in_selection - classlibdap_1_1Byte.html - a949a89714965d7afdcd1e3edc8b7f0d4 - - - d_is_synthesized - classlibdap_1_1Byte.html - a629e97e8eb7d285b54c9af8c1ec9a29a - - - - - cache_entry - structlibdap_1_1cache__entry.html - - - name - structlibdap_1_1cache__entry.html - a2064982968d1ddb3c15bd061a942f36c - - - size - structlibdap_1_1cache__entry.html - a10120ea240ad31384f4c84b8455ffae2 - - - time - structlibdap_1_1cache__entry.html - a9c8a236e2257b50cd5794b581449d688 - - - - - ce_parser_arg - structlibdap_1_1ce__parser__arg.html - - - ce_parser_arg - structlibdap_1_1ce__parser__arg.html - a568855bf443f03c7eb076d1e459ad790 - - - ce_parser_arg - structlibdap_1_1ce__parser__arg.html - a89225ccdce2380c53daf90b9314dac2d - - - ~ce_parser_arg - structlibdap_1_1ce__parser__arg.html - ad79bd8874f4b8a2ad00e324a189e949a - - - get_dds - structlibdap_1_1ce__parser__arg.html - a4e5e68e10c4fa1820940704acd4a1d9d - - - get_eval - structlibdap_1_1ce__parser__arg.html - a092ae2519c7e4e60d418c61f3bf4ee9c - - - set_dds - structlibdap_1_1ce__parser__arg.html - a4aa1a361de603e6607b7353a1b90cd94 - - - set_eval - structlibdap_1_1ce__parser__arg.html - a215e79e032d634cfe9ab62510ed0f9f1 - - - dds - structlibdap_1_1ce__parser__arg.html - a548c71062aa32e672ed64ccdbe4844ef - - - eval - structlibdap_1_1ce__parser__arg.html - a2b9aca031c78b5032e5c120e8d16b851 - - - - - ChildLocker - classlibdap_1_1ChildLocker.html - - - ChildLocker - classlibdap_1_1ChildLocker.html - a310d79ab9441523c68541035bf2d511a - - - ~ChildLocker - classlibdap_1_1ChildLocker.html - a5d439cc3f58d99598dfe895c70e21ff5 - - - - - chunked_inbuf - classlibdap_1_1chunked__inbuf.html - - - chunked_inbuf - classlibdap_1_1chunked__inbuf.html - a26d2bc25f975262555a73e42ae13cf98 - - - ~chunked_inbuf - classlibdap_1_1chunked__inbuf.html - a2d52e70d5ecf155154c8892dd4b793b0 - - - bytes_in_buffer - classlibdap_1_1chunked__inbuf.html - acd20e632036de43146af89d7ae0a84d0 - - - error - classlibdap_1_1chunked__inbuf.html - a6ec5097a1065a74033a60e84cc075195 - - - error_message - classlibdap_1_1chunked__inbuf.html - a1af04415cf582c4c5f07acf5c89a1f7a - - - read_next_chunk - classlibdap_1_1chunked__inbuf.html - a70b29d2d6f5c4772e7950e8930ed71cb - - - twiddle_bytes - classlibdap_1_1chunked__inbuf.html - a454ecd7945ac2d361552aa39d905cca8 - - - underflow - classlibdap_1_1chunked__inbuf.html - a45c0f6e2f7bfc6bd4f953e5de8dbd241 - - - xsgetn - classlibdap_1_1chunked__inbuf.html - ac98a38a08d371dfb97c32c9235bbc129 - - - - - chunked_istream - classlibdap_1_1chunked__istream.html - - - chunked_istream - classlibdap_1_1chunked__istream.html - a4d8d4b915fafa1727232a28d20030591 - - - bytes_in_buffer - classlibdap_1_1chunked__istream.html - af6d129dcc1a429bfdf8162500713bd1a - - - error - classlibdap_1_1chunked__istream.html - a16334134851952c3f8c4f2da09e7ba1d - - - error_message - classlibdap_1_1chunked__istream.html - a92063f50f4749527fd31d09ffaf83747 - - - read_next_chunk - classlibdap_1_1chunked__istream.html - a62dc7cf5331c2e78772d391e0c59f94a - - - twiddle_bytes - classlibdap_1_1chunked__istream.html - adb26664f72dbcd5a9563b73196e781b6 - - - d_cbuf - classlibdap_1_1chunked__istream.html - ad03a90f167e749639e0b886815ecea08 - - - - - chunked_ostream - classlibdap_1_1chunked__ostream.html - - - chunked_ostream - classlibdap_1_1chunked__ostream.html - a4f41bc4f32e8d08cb68d8b71620aa0de - - - write_data_chunk - classlibdap_1_1chunked__ostream.html - a823bbbcdabed51009b401abb3a45122c - - - write_end_chunk - classlibdap_1_1chunked__ostream.html - ab8c65417a57f00ab08c69b00facd802d - - - write_err_chunk - classlibdap_1_1chunked__ostream.html - aea5b6730d0194747d98b43a9f2a83d8f - - - d_cbuf - classlibdap_1_1chunked__ostream.html - a3bc7d71e811abf20973ecaa9302cc442 - - - - - chunked_outbuf - classlibdap_1_1chunked__outbuf.html - - - chunked_outbuf - classlibdap_1_1chunked__outbuf.html - a7b5484aefc52663318e90a6d3dabc395 - - - ~chunked_outbuf - classlibdap_1_1chunked__outbuf.html - a32789f8d172991b17e7fc9ff948c5423 - - - data_chunk - classlibdap_1_1chunked__outbuf.html - a2eb3a61bf3e82204a8ffca358558dead - - - end_chunk - classlibdap_1_1chunked__outbuf.html - a1c6c9891d360d5d9b7085ec8cf543610 - - - err_chunk - classlibdap_1_1chunked__outbuf.html - abefa71794597aa2b9edcfc9d7101bba1 - - - overflow - classlibdap_1_1chunked__outbuf.html - ade3250bbda968c561cfb390ba77504db - - - sync - classlibdap_1_1chunked__outbuf.html - ad31279e06619ddbe49382adf03cf5803 - - - xsputn - classlibdap_1_1chunked__outbuf.html - a07bcec83a5f20ac5a8f76e3c490d0768 - - - chunked_ostream - classlibdap_1_1chunked__outbuf.html - ae2a1ee739728da6bb7001bebd357b036 - - - d_big_endian - classlibdap_1_1chunked__outbuf.html - af880ffbdbba0d1431be7b216889a9978 - - - d_buf_size - classlibdap_1_1chunked__outbuf.html - a74ec24aa5c42f065fe4e562a05932755 - - - d_buffer - classlibdap_1_1chunked__outbuf.html - a35bb0a16e9f3a1b1818598738721a6cd - - - d_os - classlibdap_1_1chunked__outbuf.html - a113c91bdcef81b9f954065de58d6690f - - - - - Clause - structlibdap_1_1Clause.html - - - Clause - structlibdap_1_1Clause.html - af59809927231f35f29eae3ab972bf8ce - - - Clause - structlibdap_1_1Clause.html - ae932a2f99ee42df567e1b5581040d643 - - - Clause - structlibdap_1_1Clause.html - ac8c43eee6cceb5613379d8b2917b1641 - - - Clause - structlibdap_1_1Clause.html - a86f7ce9fd2b9db982268cc2b121989f3 - - - ~Clause - structlibdap_1_1Clause.html - aaaeec48bcba4c7a9608c1bb3ef72983a - - - boolean_clause - structlibdap_1_1Clause.html - a80d81003665b96012ee3ba175d80e608 - - - OK - structlibdap_1_1Clause.html - aeaccc72688521a8b08aeae970d983473 - - - value - structlibdap_1_1Clause.html - abfff44c4db49ad7462d14665b2458588 - - - value - structlibdap_1_1Clause.html - a7b124a939247dce1320c494a3b18f6a1 - - - value_clause - structlibdap_1_1Clause.html - a7bd5122be1851f0bf32ec1c58b46eaa9 - - - - - Connect - classlibdap_1_1Connect.html - - - Connect - classlibdap_1_1Connect.html - a519d36213fc5f0fefc0c11a6b131beb8 - - - Connect - classlibdap_1_1Connect.html - a5d78784ceacab07c922c2999c335807a - - - Connect - classlibdap_1_1Connect.html - a03b8c9f6773a25c3c837b9890099d5e8 - - - ~Connect - classlibdap_1_1Connect.html - acacffa987a2d9a36f355dd471970fdcf - - - CE - classlibdap_1_1Connect.html - a0e55cc99530cab779ae83984c2a22f51 - - - get_protocol - classlibdap_1_1Connect.html - a4223a898b3da719509d173dd990c45f1 - - - get_version - classlibdap_1_1Connect.html - a30fe6746add5a210d59b5dc9d678355f - - - is_cache_enabled - classlibdap_1_1Connect.html - a00fa7d5e2e658e8c882e07f48562ea62 - - - is_local - classlibdap_1_1Connect.html - a3901ce9383c3df11d1a1c28d4a09bb54 - - - operator= - classlibdap_1_1Connect.html - a2b8e5380df6d65484a329fa5332ab324 - - - read_data - classlibdap_1_1Connect.html - ae50d98d353023b9786c9bd5b0833a7de - - - read_data - classlibdap_1_1Connect.html - a8c9abb99d35684b48fa659f398d7cff8 - - - read_data_no_mime - classlibdap_1_1Connect.html - a486b095a58614dfc2be0321035784306 - - - read_data_no_mime - classlibdap_1_1Connect.html - aed1c2c967013975076c03a783f3fd421 - - - request_das - classlibdap_1_1Connect.html - a816ef3bb8e729712ffeb6523f2cc4f0e - - - request_das_url - classlibdap_1_1Connect.html - abcf814710de1e252e74a4e1b72d3c6b3 - - - request_data - classlibdap_1_1Connect.html - a814e98ac5e99927ccc79bb0feb32d241 - - - request_data_ddx - classlibdap_1_1Connect.html - ab3bc39b8320ae5a79af7bf168f930b07 - - - request_data_ddx_url - classlibdap_1_1Connect.html - aac752fcacdab76339318c1c333ea0953 - - - request_data_url - classlibdap_1_1Connect.html - ac8582099411b8d74b03e761129df5b5c - - - request_dds - classlibdap_1_1Connect.html - aad5ef370110577e9ca2a0161928f9efa - - - request_dds_url - classlibdap_1_1Connect.html - a08795a9e160db409423fcd9058ba975d - - - request_ddx - classlibdap_1_1Connect.html - a4395cc18cf5ec1a5167795a5a5491958 - - - request_ddx_url - classlibdap_1_1Connect.html - a9a3e1fe01455b60a90a1974a7e871bb4 - - - request_protocol - classlibdap_1_1Connect.html - aaa1ab562899da9a4630de01f943d1aa9 - - - request_version - classlibdap_1_1Connect.html - ac7a5896a09882004b75e581999940526 - - - set_accept_deflate - classlibdap_1_1Connect.html - a186f76bfea3b61dc3587bcff5760ed8b - - - set_cache_enabled - classlibdap_1_1Connect.html - a25c97c4ad0239a9dd10812c880c40efe - - - set_credentials - classlibdap_1_1Connect.html - a847af75e149f123a51a560119dfc06aa - - - set_xdap_accept - classlibdap_1_1Connect.html - ab9c4a1243218c98d46fbaace37a821fc - - - set_xdap_protocol - classlibdap_1_1Connect.html - a4af759a2313d9ecbc1db1c811f549379 - - - URL - classlibdap_1_1Connect.html - a523bf24520185e3d71f36ac0203b98e6 - - - - - ConstraintEvaluator - classlibdap_1_1ConstraintEvaluator.html - - - Clause_citer - classlibdap_1_1ConstraintEvaluator.html - abffbe592e2282493954bdfe3ceac7445 - - - Clause_iter - classlibdap_1_1ConstraintEvaluator.html - a369a03eac7969bb6955cfc90ababb8aa - - - Constants_citer - classlibdap_1_1ConstraintEvaluator.html - a9702bcb82a4a27c93665490d651cf816 - - - Constants_iter - classlibdap_1_1ConstraintEvaluator.html - a1c38b776ba27bc78a1e484a45bbe8747 - - - ConstraintEvaluator - classlibdap_1_1ConstraintEvaluator.html - a61250e6c1cec9b2411a529c7fb4efd94 - - - ~ConstraintEvaluator - classlibdap_1_1ConstraintEvaluator.html - ae46662e1cbe013a6f6ad65d2e0c24186 - - - append_clause - classlibdap_1_1ConstraintEvaluator.html - a796b573bb1ec8bbce8c22c4caf58af2e - - - append_clause - classlibdap_1_1ConstraintEvaluator.html - a2439b21977caf80d57c5faa0342dfcb4 - - - append_clause - classlibdap_1_1ConstraintEvaluator.html - af4769219d99fe7ec3f4f4d7b1cd560dc - - - append_constant - classlibdap_1_1ConstraintEvaluator.html - abf7511f38a4c5f8fc0cde0eca91ef338 - - - boolean_expression - classlibdap_1_1ConstraintEvaluator.html - a155da913af4458d96fa60ecd0ecbe377 - - - clause_begin - classlibdap_1_1ConstraintEvaluator.html - a81135cc86f8bef397b59577dfa224f62 - - - clause_end - classlibdap_1_1ConstraintEvaluator.html - ad193b3ca4cef59d2b46c04ab08f4675f - - - clause_value - classlibdap_1_1ConstraintEvaluator.html - a5c53cfac881da05b7ed6eb6404b0c4f9 - - - eval_function - classlibdap_1_1ConstraintEvaluator.html - a989c6db94b0a4079ea4ee333f4b699bf - - - eval_function_clauses - classlibdap_1_1ConstraintEvaluator.html - ab0dba1657e9aadd85b3ce713c6a4036a - - - eval_function_clauses - classlibdap_1_1ConstraintEvaluator.html - a0e36171a34caa85d21e18adbd83a831b - - - eval_selection - classlibdap_1_1ConstraintEvaluator.html - a25acac693348360167a2c352df746acb - - - find_function - classlibdap_1_1ConstraintEvaluator.html - a27ed41e76c8147cde9456dd516053ca7 - - - find_function - classlibdap_1_1ConstraintEvaluator.html - a0845a2c4494e9ce1ecbb636da434b01f - - - find_function - classlibdap_1_1ConstraintEvaluator.html - adf406811a741bd0461b192d493b96710 - - - function_clauses - classlibdap_1_1ConstraintEvaluator.html - a9985c6a30247ced32a4b6e764deebf45 - - - functional_expression - classlibdap_1_1ConstraintEvaluator.html - add46ce1d9ef36fa26a2913d8d7c51096 - - - parse_constraint - classlibdap_1_1ConstraintEvaluator.html - a6290d897c82ddba106741ee8720f7ea0 - - - func_name_is - classlibdap_1_1ConstraintEvaluator.html - abdcdfafb252f26c4af32af89b0f699dc - - - - - Constructor - classlibdap_1_1Constructor.html - - - btp_stack - classlibdap_1_1Constructor.html - ae9c6e71855b90a0e552713011c9ab81f - - - Vars_citer - classlibdap_1_1Constructor.html - a5a585c58a099833c4ca26561963e0f83 - - - Vars_iter - classlibdap_1_1Constructor.html - a2b73df890f61ebb628359c8fd12839b0 - - - Vars_riter - classlibdap_1_1Constructor.html - a6122400e3f40d457751fb0372a650d03 - - - Constructor - classlibdap_1_1Constructor.html - af32a49aae27b67258c2b0ec494e964c7 - - - Constructor - classlibdap_1_1Constructor.html - aada6a0aa97adc6adff2398f8c7d0ff35 - - - Constructor - classlibdap_1_1Constructor.html - a483aa6ff5e9ea1f6b9e8d3ca617ebb54 - - - ~Constructor - classlibdap_1_1Constructor.html - aa948f77ae2fc511e348717e065562f32 - - - add_var - classlibdap_1_1Constructor.html - a2585c69c45b9ebec9c63993248eb5b4b - - - add_var_nocopy - classlibdap_1_1Constructor.html - abdb52463a46e1b10040f245d4ed7642b - - - attributes - classlibdap_1_1Constructor.html - a97452f06d2188eb838399a709246b5e9 - - - buf2val - classlibdap_1_1Constructor.html - ac4dc7e8099322b5b403a7d0ae9079006 - - - check_semantics - classlibdap_1_1Constructor.html - afe010638fd2ca9aab00dd1c21a9e4825 - - - clear_local_data - classlibdap_1_1Constructor.html - aaddb97a4efbe035f41deaf03c6e8683f - - - compute_checksum - classlibdap_1_1Constructor.html - a287ab9a4deb81a8ced6d8432be647925 - - - d4_ops - classlibdap_1_1Constructor.html - a512a356f31ed6c4c1a368da0b054408a - - - dataset - classlibdap_1_1Constructor.html - a47521ce321a17e6ce217870cb6a1a7aa - - - del_var - classlibdap_1_1Constructor.html - af38d3785c4a7cd0063cbb9fc5943333c - - - del_var - classlibdap_1_1Constructor.html - a69291878fc48217902fb0dcf1e2e1aff - - - deserialize - classlibdap_1_1Constructor.html - a63763d2bae05463b100e823fb461a784 - - - deserialize - classlibdap_1_1Constructor.html - a6f4253236d69c3c0ef64343136b5039b - - - dump - classlibdap_1_1Constructor.html - a8efdfb84ef6b287142442252c00b4444 - - - element_count - classlibdap_1_1Constructor.html - a1c2eecff00fa7e3af175c711d00fb86e - - - FQN - classlibdap_1_1Constructor.html - afa6c06dab830b4e089641b44fea8293c - - - get_attr_table - classlibdap_1_1Constructor.html - a1fcd9537c67e3bf88964b2656ff5bac1 - - - get_parent - classlibdap_1_1Constructor.html - a3459cdaa239c33ce111ef360d8dc3017 - - - get_var_index - classlibdap_1_1Constructor.html - ac2b4b28ed9d6f435129aa599ab809799 - - - get_vars_iter - classlibdap_1_1Constructor.html - a1e6d8224e04d75e3d2a21263957cd42f - - - intern_data - classlibdap_1_1Constructor.html - a065056826ef9c6fb2d08463af9e15a34 - - - intern_data - classlibdap_1_1Constructor.html - a822a036364c56df5288a55670f51197e - - - is_constructor_type - classlibdap_1_1Constructor.html - a8b8490e0047c6da52945699a132008ea - - - is_dap4 - classlibdap_1_1Constructor.html - a7f6835cb5e5589ab5dad3fb4813d3bea - - - is_in_selection - classlibdap_1_1Constructor.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - - - is_linear - classlibdap_1_1Constructor.html - af26f89e9c0732a9c32bd5e15d716a7d7 - - - is_simple_type - classlibdap_1_1Constructor.html - aae57e5b270b3a015d40c8db10b9b5549 - - - is_vector_type - classlibdap_1_1Constructor.html - a7107c76dbcab71015141142383b6d022 - - - length - classlibdap_1_1Constructor.html - aadcda7a659157bc6a832d8a5fb775b3f - - - m_duplicate - classlibdap_1_1Constructor.html - a88b282d06686fc88a74c91e289ef31d7 - - - m_duplicate - classlibdap_1_1Constructor.html - a0c55b826c8c5dfe7a454dc670e859a41 - - - m_exact_match - classlibdap_1_1Constructor.html - aa5cd6124619d35e81bcfd426f1e569d3 - - - m_leaf_match - classlibdap_1_1Constructor.html - a8fe3863a609488f4d5125abea96b82ed - - - name - classlibdap_1_1Constructor.html - a24c5d67823b3cff7f4245a993072a142 - - - operator= - classlibdap_1_1Constructor.html - ae01fd846f387bcb51643407574fce6d8 - - - ops - classlibdap_1_1Constructor.html - a8a0000be2a244e3e07abda3020af8800 - - - print_dap4 - classlibdap_1_1Constructor.html - a0f130e129b06773a9f3c94e3b492bb5c - - - print_decl - classlibdap_1_1Constructor.html - ab7fb094be8da2a9f80f6d3b85e452934 - - - print_decl - classlibdap_1_1Constructor.html - a6c2c4d7cbe1d6239c037272ec865f80b - - - print_val - classlibdap_1_1Constructor.html - aa7f9cce8ca18461af332aab61123bf23 - - - print_val - classlibdap_1_1Constructor.html - af50641301757ed26eb75fb2d29eae7ee - - - print_xml - classlibdap_1_1Constructor.html - a32de0413045173aa8803f540a6cea39b - - - print_xml - classlibdap_1_1Constructor.html - a7bbe6beabd94f576140e132e7a1017ff - - - print_xml_writer - classlibdap_1_1Constructor.html - ab775a5e7e63757ac961b43800a95635f - - - ptr_duplicate - classlibdap_1_1Constructor.html - a0b130311c9901fb8a7ab11ea19090ef0 - - - read - classlibdap_1_1Constructor.html - ad0af40e2565972fa44985d173370c264 - - - read_p - classlibdap_1_1Constructor.html - a38ff819a432217c55db2e9071928d20c - - - send_p - classlibdap_1_1Constructor.html - a980c0013817836aa77ef74aeec7fb192 - - - serialize - classlibdap_1_1Constructor.html - a64268840654a0b37a15ccc601dbcfd33 - - - serialize - classlibdap_1_1Constructor.html - ab868fe97d5075b702bd084c2e9540913 - - - set_attr_table - classlibdap_1_1Constructor.html - a572a1d76a75981abac83a4241e90c0fa - - - set_attributes - classlibdap_1_1Constructor.html - ad4dda4cf43dca838d3de183b8e01cd09 - - - set_attributes_nocopy - classlibdap_1_1Constructor.html - afd0e5f87d19020f560d5c1ff8dd4d6a3 - - - set_in_selection - classlibdap_1_1Constructor.html - ac30becb1ffe7d2cd4cbcd24fc216c9a3 - - - set_is_dap4 - classlibdap_1_1Constructor.html - abca9ddaa9a1ada8447cbe7193e8e288a - - - set_length - classlibdap_1_1Constructor.html - a4fe343c1eeb6fb1d61ab030433651d90 - - - set_name - classlibdap_1_1Constructor.html - a86504564f45a3e6748c6f1cc0ff4e9fa - - - set_parent - classlibdap_1_1Constructor.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - - - set_read_p - classlibdap_1_1Constructor.html - af52e60d8589eed1a18a14e9c6a57db65 - - - set_send_p - classlibdap_1_1Constructor.html - aafbcf9bef6719fe60ac707e02956e09d - - - set_synthesized_p - classlibdap_1_1Constructor.html - a595cb4059cff24f801a1b6da79bd2f9e - - - set_type - classlibdap_1_1Constructor.html - af74f8d1ef57c9fcca46f620f75d175a3 - - - synthesized_p - classlibdap_1_1Constructor.html - ae64e677da27249473cdba0b60cdbb90a - - - toString - classlibdap_1_1Constructor.html - a701eb3361f5b5628329ece019cd34519 - - - transfer_attributes - classlibdap_1_1Constructor.html - a799d2bd8ef9505b1d493d8cd73b72746 - - - transform_to_dap2 - classlibdap_1_1Constructor.html - affec8a11e9cc035d4b1e8fb9a87b2072 - - - transform_to_dap4 - classlibdap_1_1Constructor.html - a3affad818961b2e7e984415cdd3c6e9e - - - type - classlibdap_1_1Constructor.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - - - type_name - classlibdap_1_1Constructor.html - a18a42c8ec35cb5b15cd651a4152f8a2c - - - val2buf - classlibdap_1_1Constructor.html - ac742b1bf93889e541128b1d123821ee6 - - - var - classlibdap_1_1Constructor.html - a36a7412da7b5257d7666add726fea1a6 - - - var - classlibdap_1_1Constructor.html - a68f1779dc328f890062722d90fad084a - - - var_begin - classlibdap_1_1Constructor.html - adeafe3d6c82d07b456a598a7b446c2c6 - - - var_end - classlibdap_1_1Constructor.html - a936b38c7c35ffb4fe17c5b8e85bdaaa2 - - - var_rbegin - classlibdap_1_1Constructor.html - aa025cf546ca35250454653c1ec684d91 - - - var_rend - classlibdap_1_1Constructor.html - aede7cf5889e101db1ea8f22c3a84a5d3 - - - width - classlibdap_1_1Constructor.html - a0b1e3ae7195f95c42ca98f42826a1ff5 - - - d_in_selection - classlibdap_1_1Constructor.html - a949a89714965d7afdcd1e3edc8b7f0d4 - - - d_is_synthesized - classlibdap_1_1Constructor.html - a629e97e8eb7d285b54c9af8c1ec9a29a - - - d_vars - classlibdap_1_1Constructor.html - a75b2aa694dc76294d6aa5f7456e49aa2 - - - - - D4AsyncUtil - classlibdap_1_1D4AsyncUtil.html - - - D4AsyncUtil - classlibdap_1_1D4AsyncUtil.html - a42e849d5d33c743a9ebacb3a7fdc17d7 - - - ~D4AsyncUtil - classlibdap_1_1D4AsyncUtil.html - a875f557391b13daf8c470d5e9f82438d - - - getRejectReasonCodeString - classlibdap_1_1D4AsyncUtil.html - a08431d896452d73549badf87f3612029 - - - writeD2AsyncAccepted - classlibdap_1_1D4AsyncUtil.html - a7e37e3382a2058fc8ee79bd13a0ebf58 - - - writeD2AsyncPending - classlibdap_1_1D4AsyncUtil.html - a18ffab8b91a82b8a6e31e14db03a1afc - - - writeD2AsyncRequired - classlibdap_1_1D4AsyncUtil.html - acb8335ad353653ec35148f8c38895a54 - - - writeD2AsyncResponseGone - classlibdap_1_1D4AsyncUtil.html - aac8992b90c27561f21400e61b94ae3e2 - - - writeD2AsyncResponseRejected - classlibdap_1_1D4AsyncUtil.html - a7267613ccd32a033248ee7147d234543 - - - writeD4AsyncAccepted - classlibdap_1_1D4AsyncUtil.html - ad7ce372878ff0d5a6ebda401c7e630f6 - - - writeD4AsyncPending - classlibdap_1_1D4AsyncUtil.html - a8d8e9c8eb128fc4d8e799f2e7faa3205 - - - writeD4AsyncRequired - classlibdap_1_1D4AsyncUtil.html - a9f98ddda0707692370fe2af20f894b45 - - - writeD4AsyncResponseGone - classlibdap_1_1D4AsyncUtil.html - ae46e9b6a9eddbd13edbd5a503a8e71dc - - - writeD4AsyncResponseRejected - classlibdap_1_1D4AsyncUtil.html - a398106b8e1d5c52bf23fc7f556bd7d26 - - - - - D4Attribute - classlibdap_1_1D4Attribute.html - - - D4AttributeCIter - classlibdap_1_1D4Attribute.html - a5eeffbe9532d7c3918462f361a1bcf1a - - - D4AttributeIter - classlibdap_1_1D4Attribute.html - ac0191a7e5855c94f91afc7e458832cd5 - - - D4Attribute - classlibdap_1_1D4Attribute.html - a954a0392699c1d1a25e9700dcd74e1f4 - - - D4Attribute - classlibdap_1_1D4Attribute.html - ad51263d682ce8abbd1a4dc88014b33e4 - - - D4Attribute - classlibdap_1_1D4Attribute.html - a592ae893dc8ef53a68de2fa0018fdf52 - - - ~D4Attribute - classlibdap_1_1D4Attribute.html - a29211c37884cb2e1140a4fbe05eee60d - - - add_value - classlibdap_1_1D4Attribute.html - a9d67f3a325f7ac4e5689aa0b562d9612 - - - add_value_vector - classlibdap_1_1D4Attribute.html - a2fda46b086b4ffa46071aaf38f0b0094 - - - attributes - classlibdap_1_1D4Attribute.html - a09015c3356a01f3566547b22e4b0f9e9 - - - dump - classlibdap_1_1D4Attribute.html - ad0609a07cdfb90a2c1be50b27c60460f - - - name - classlibdap_1_1D4Attribute.html - ada6816db3caf22746632220d4f7a61e0 - - - num_values - classlibdap_1_1D4Attribute.html - a912de0ce558c77a6e173c089eaf19288 - - - operator= - classlibdap_1_1D4Attribute.html - a844194d3cde586289a7cf3a2d3e02846 - - - print_dap4 - classlibdap_1_1D4Attribute.html - a30ed7b9a4d987b8b9ad9cfb56b8c3b02 - - - set_name - classlibdap_1_1D4Attribute.html - ac4b573346b69dc7396644dbe70b9e666 - - - set_type - classlibdap_1_1D4Attribute.html - ac0216f7595e92780256c6e116e75d97f - - - type - classlibdap_1_1D4Attribute.html - ad75700c05d6e7854d1a7a95378c651c8 - - - value - classlibdap_1_1D4Attribute.html - ab7defbb147b33cfa239a330253338299 - - - value_begin - classlibdap_1_1D4Attribute.html - a5cc3b6984b3e1df94368a8b8a0e78d90 - - - value_end - classlibdap_1_1D4Attribute.html - af25240a807be1700e208655d295e7c93 - - - - - D4Attributes - classlibdap_1_1D4Attributes.html - - - D4AttributesCIter - classlibdap_1_1D4Attributes.html - aff87d5bb2159b4b5879a55ef0380558e - - - D4AttributesIter - classlibdap_1_1D4Attributes.html - af01f6e1bb2a4eb066fefeede5ba24755 - - - D4Attributes - classlibdap_1_1D4Attributes.html - a6cdf853f3d58a3dc67254f94c6632620 - - - D4Attributes - classlibdap_1_1D4Attributes.html - a1d2d72ae03b5e4310845aad01b249998 - - - ~D4Attributes - classlibdap_1_1D4Attributes.html - ad731a1e9037d697a5ff81d0497eb2383 - - - add_attribute - classlibdap_1_1D4Attributes.html - a373b0dc02b9653c9083d1ae45fb2b1c1 - - - add_attribute_nocopy - classlibdap_1_1D4Attributes.html - a30562d531cc32782a6789484cd97b3cc - - - attribute_begin - classlibdap_1_1D4Attributes.html - a759970f338df1b66060f0607c35d4f52 - - - attribute_end - classlibdap_1_1D4Attributes.html - a8584405e7329078e51364cdbb27a3092 - - - dump - classlibdap_1_1D4Attributes.html - adefff20cb6cdcf82469529c7b309a910 - - - empty - classlibdap_1_1D4Attributes.html - a90815497f4ab6b29238a8ef3d05a58e7 - - - find - classlibdap_1_1D4Attributes.html - a053c7c806e4a21151957abfa751131c9 - - - get - classlibdap_1_1D4Attributes.html - a2a7201c33ab93bfbd7b876ba8e93444f - - - operator= - classlibdap_1_1D4Attributes.html - a6440e0f4c9a1b0b2788e5e06b625224b - - - print_dap4 - classlibdap_1_1D4Attributes.html - a8a68331e0e50bc4d708b35b95d4addc0 - - - transform_attrs_to_dap2 - classlibdap_1_1D4Attributes.html - abcc9c129081018d9c4c411052382caaa - - - transform_to_dap4 - classlibdap_1_1D4Attributes.html - a1dfd8c42a188d627be7d11857fe723b6 - - - - - D4BaseTypeFactory - classlibdap_1_1D4BaseTypeFactory.html - - - D4BaseTypeFactory - classlibdap_1_1D4BaseTypeFactory.html - a7a884b7d89c1fc2088ece1dabd87a7e7 - - - ~D4BaseTypeFactory - classlibdap_1_1D4BaseTypeFactory.html - aa06257e3923ab6a973e27ee834e78795 - - - NewArray - classlibdap_1_1D4BaseTypeFactory.html - ada1408f514d46f12ef5341caadb5eae2 - - - NewByte - classlibdap_1_1D4BaseTypeFactory.html - a26c1bed3e5dd4bba5422520b61a12d96 - - - NewChar - classlibdap_1_1D4BaseTypeFactory.html - af34c6e3ca9ae23fd84cdc2ddbd272a61 - - - NewD4Sequence - classlibdap_1_1D4BaseTypeFactory.html - a4eb32f5b4a100182e1c52fc385bc85ef - - - NewEnum - classlibdap_1_1D4BaseTypeFactory.html - aa8100d8119cc1ffcc4875b144cfa347f - - - NewFloat32 - classlibdap_1_1D4BaseTypeFactory.html - a3914155606394c5daded56ccca4c54ce - - - NewFloat64 - classlibdap_1_1D4BaseTypeFactory.html - ae511294671d2386c6652bfa48a843a7d - - - NewGrid - classlibdap_1_1D4BaseTypeFactory.html - a44b70b9301d146261db6ac3c5f74e511 - - - NewGroup - classlibdap_1_1D4BaseTypeFactory.html - ac50c5665a27807b3e5c9d95bfb0cf35c - - - NewInt16 - classlibdap_1_1D4BaseTypeFactory.html - a0e4dc091e48a77a95c4e43b55c39997f - - - NewInt32 - classlibdap_1_1D4BaseTypeFactory.html - add23eaf62d681ee9039e9dc5860a567e - - - NewInt64 - classlibdap_1_1D4BaseTypeFactory.html - ac2ee621cca64234bb751753f7d67d334 - - - NewInt8 - classlibdap_1_1D4BaseTypeFactory.html - aea64d154912d5f3642c0416eaced3f6a - - - NewOpaque - classlibdap_1_1D4BaseTypeFactory.html - a53614e26fc98ea6cda25e288cb8a8115 - - - NewSequence - classlibdap_1_1D4BaseTypeFactory.html - ab41dd430aeff02683be5a396da770ba7 - - - NewStr - classlibdap_1_1D4BaseTypeFactory.html - a42edd7ef61ad81675e916dc0dd0c6726 - - - NewStructure - classlibdap_1_1D4BaseTypeFactory.html - a80dcf6ff77a380a232e2747db73208a5 - - - NewUInt16 - classlibdap_1_1D4BaseTypeFactory.html - ab8c867b00d67c7265a91be34a34238a2 - - - NewUInt32 - classlibdap_1_1D4BaseTypeFactory.html - a11225902c4ab0b94a85ab46ffb0ede30 - - - NewUInt64 - classlibdap_1_1D4BaseTypeFactory.html - a26218490e2d9812a6da1cb5eac5c4528 - - - NewUInt8 - classlibdap_1_1D4BaseTypeFactory.html - aa3cc29a25b3e049ba5b4a65d1d06f8d3 - - - NewUrl - classlibdap_1_1D4BaseTypeFactory.html - af63678cd058a2332483354aa7d9b5479 - - - NewURL - classlibdap_1_1D4BaseTypeFactory.html - aff5d085d548134aa931dbf3527249b0a - - - NewVariable - classlibdap_1_1D4BaseTypeFactory.html - ad1ba5f8a8aa850d5eb66b1b398013180 - - - ptr_duplicate - classlibdap_1_1D4BaseTypeFactory.html - a134cf00bb72aacbd3ce737c35f575168 - - - - - D4CEScanner - classlibdap_1_1D4CEScanner.html - - - D4CEScanner - classlibdap_1_1D4CEScanner.html - adcb9491e49f4e1969320b2efcbdff4ce - - - yylex - classlibdap_1_1D4CEScanner.html - ac811dd880a0c52c387f2890d4e7f9ced - - - - - D4Connect - classlibdap_1_1D4Connect.html - - - D4Connect - classlibdap_1_1D4Connect.html - ae47fadcaad41ff4eaa90fcbcd43de83e - - - D4Connect - classlibdap_1_1D4Connect.html - a052c65e1eb3c1b42b747cf96143e8e86 - - - D4Connect - classlibdap_1_1D4Connect.html - a03973f6a80a96bdbe031dc03d869221d - - - ~D4Connect - classlibdap_1_1D4Connect.html - a140e2390fd31fcc817bf574c3c73a116 - - - CE - classlibdap_1_1D4Connect.html - abc87a0902e3e31e29cafeec1a05d30d2 - - - get_protocol - classlibdap_1_1D4Connect.html - a1ab3646633cc0049c281dc1f855b76e2 - - - get_version - classlibdap_1_1D4Connect.html - ad778bc535395b26df0b15870760086d9 - - - is_cache_enabled - classlibdap_1_1D4Connect.html - acbf08dd9e8ee9cf0171e1f420108cce0 - - - is_local - classlibdap_1_1D4Connect.html - a0dd879db1e9bf3d113df3a2ce25d66d9 - - - operator= - classlibdap_1_1D4Connect.html - a9e4c0f9c971c7e8f6da7c8f4c0b84257 - - - read_data - classlibdap_1_1D4Connect.html - a2bf5e3ca807062b1d33f982219aa09f2 - - - read_data_no_mime - classlibdap_1_1D4Connect.html - a267e3f4184faabcbcf9c3093eacc714c - - - read_dmr - classlibdap_1_1D4Connect.html - a665c1cf50724276ecdb90a3325af24d0 - - - read_dmr_no_mime - classlibdap_1_1D4Connect.html - a11c7025926c0fa2ff997058996afe7ef - - - request_dap4_data - classlibdap_1_1D4Connect.html - a282312af221a221719367b0038d8a0e2 - - - request_dmr - classlibdap_1_1D4Connect.html - a3fb6d2a7764fc414c68358e890aa3c52 - - - set_accept_deflate - classlibdap_1_1D4Connect.html - a380e999d58c53bd1d6911bafbb0654ee - - - set_cache_enabled - classlibdap_1_1D4Connect.html - a85c1176feebb30cd484c6ef20c22e01d - - - set_credentials - classlibdap_1_1D4Connect.html - ab124422662436dc0ede86cd1b3e4f467 - - - set_xdap_accept - classlibdap_1_1D4Connect.html - a2f03566f53ec96f965ff043ce5825d33 - - - set_xdap_protocol - classlibdap_1_1D4Connect.html - a86734a9dd1c1de2017548cc54afd01e3 - - - URL - classlibdap_1_1D4Connect.html - aa41d2a07551e40a5e77739294937489f - - - - - D4ConstraintEvaluator - classlibdap_1_1D4ConstraintEvaluator.html - - - D4ConstraintEvaluator - classlibdap_1_1D4ConstraintEvaluator.html - a54248b202845a3c195400a9c2d0cfc93 - - - D4ConstraintEvaluator - classlibdap_1_1D4ConstraintEvaluator.html - a87d4cbb38469bc8a33824060e8ebc9aa - - - ~D4ConstraintEvaluator - classlibdap_1_1D4ConstraintEvaluator.html - ac48e08c1d80e518c70683f83462bf0bd - - - dmr - classlibdap_1_1D4ConstraintEvaluator.html - a651c247fd019a07e2dc8cb733f9700f7 - - - error - classlibdap_1_1D4ConstraintEvaluator.html - a84e156d695af645943e92b4e965fcf49 - - - parse - classlibdap_1_1D4ConstraintEvaluator.html - a6ac0c5000a0db175549ce085b1faa363 - - - result - classlibdap_1_1D4ConstraintEvaluator.html - a5f5ec63627126c5d45885ef51453fd0c - - - set_dmr - classlibdap_1_1D4ConstraintEvaluator.html - a440e0a889f83b32cf00b918b4d270fc7 - - - set_result - classlibdap_1_1D4ConstraintEvaluator.html - a08920466aefa6c7c75beec1c7f3f029f - - - set_trace_parsing - classlibdap_1_1D4ConstraintEvaluator.html - a759213bd75a98bbf96525bf57cd7a4c2 - - - set_trace_scanning - classlibdap_1_1D4ConstraintEvaluator.html - a3f3513e31ab66c76eba77c89529620b7 - - - trace_parsing - classlibdap_1_1D4ConstraintEvaluator.html - a994e94fe7faa53dff81256511f200b65 - - - trace_scanning - classlibdap_1_1D4ConstraintEvaluator.html - afe86d58ff6e74effd8d4cfa7b26720c0 - - - D4CEParser - classlibdap_1_1D4ConstraintEvaluator.html - a1109c669dcd6d48c26b8f291bb610aab - - - - - D4Dimension - classlibdap_1_1D4Dimension.html - - - D4Dimension - classlibdap_1_1D4Dimension.html - ae113af3a4b118830093c2119195fb2d9 - - - D4Dimension - classlibdap_1_1D4Dimension.html - a79a828c9b293b59d99bfc4ff8d0ec02d - - - c_start - classlibdap_1_1D4Dimension.html - a4697a551c79005ca28acca7355312d3d - - - c_stop - classlibdap_1_1D4Dimension.html - a5fa7b682a07b39c3bf79c80e11759c0f - - - c_stride - classlibdap_1_1D4Dimension.html - aef606840a3b14b8ce927772abba5b4f8 - - - constrained - classlibdap_1_1D4Dimension.html - a98a7f1d925e4ad37792d79dea818833b - - - fully_qualified_name - classlibdap_1_1D4Dimension.html - a91a7616fcd4ac5f59248de675dbae3f2 - - - name - classlibdap_1_1D4Dimension.html - a678e20b851ac14430b45293878c9bc62 - - - parent - classlibdap_1_1D4Dimension.html - a3d9cc2bf5c2f515628983d242d107932 - - - print_dap4 - classlibdap_1_1D4Dimension.html - a816571e2cbc792e1aa53cbb2829bb147 - - - set_constraint - classlibdap_1_1D4Dimension.html - ab63edc1e631b4501178d2bc3018577e9 - - - set_name - classlibdap_1_1D4Dimension.html - af92f63f9e700c16ab357b70fbb6c803a - - - set_parent - classlibdap_1_1D4Dimension.html - a498dd09d0436aef92f15aa5acd8c3258 - - - set_size - classlibdap_1_1D4Dimension.html - af03f62fbaf7806487fdff80357c5c59c - - - set_size - classlibdap_1_1D4Dimension.html - a0fe75da4c00a79f11c77d4a8dd90ded1 - - - set_used_by_projected_var - classlibdap_1_1D4Dimension.html - a84ba99dd5963cff36eaf0177864b622f - - - size - classlibdap_1_1D4Dimension.html - a3d1e987ab3c7ac6c467c8bbe5a759e79 - - - used_by_projected_var - classlibdap_1_1D4Dimension.html - a63550abe59eec6b0352d9bf6e8ed2cf9 - - - - - D4Dimensions - classlibdap_1_1D4Dimensions.html - - - D4DimensionsCIter - classlibdap_1_1D4Dimensions.html - a645a8863bb31fbde5ea2728dded8adf7 - - - D4DimensionsIter - classlibdap_1_1D4Dimensions.html - a24b00181a66826733d2e779cbc4df817 - - - D4Dimensions - classlibdap_1_1D4Dimensions.html - a86a75774de16238b5243d3e6ff934e71 - - - D4Dimensions - classlibdap_1_1D4Dimensions.html - a16995dbaa4e3f73367f93837f349a094 - - - D4Dimensions - classlibdap_1_1D4Dimensions.html - ad95a41d996830ea0a1ff06aa14dfe9fe - - - ~D4Dimensions - classlibdap_1_1D4Dimensions.html - a12ad5e211fda2ab93a1d4a523340de5c - - - add_dim - classlibdap_1_1D4Dimensions.html - a6a5a16bc3375f9e23ca7aaca4646bec2 - - - add_dim_nocopy - classlibdap_1_1D4Dimensions.html - a54589e5cdb731298d8ef7e28068d967e - - - dim_begin - classlibdap_1_1D4Dimensions.html - acdde711563706573cf03888bee31105e - - - dim_end - classlibdap_1_1D4Dimensions.html - aae49956b1831fadab0477846c9576819 - - - empty - classlibdap_1_1D4Dimensions.html - ac8392d924d693bf312e215cabb384c76 - - - find_dim - classlibdap_1_1D4Dimensions.html - a951d043d8e1cdbd5ae8bbbb2f2ca43f8 - - - insert_dim - classlibdap_1_1D4Dimensions.html - adf5daf7a4ff69d794f4ee8f6141748a4 - - - insert_dim_nocopy - classlibdap_1_1D4Dimensions.html - a848b4d805a85adcbda0810a88b209644 - - - m_duplicate - classlibdap_1_1D4Dimensions.html - a7babecc5bdd76655d3d245aa7a22edbb - - - operator= - classlibdap_1_1D4Dimensions.html - ad544f97a8ec905bc6ce1879524764655 - - - parent - classlibdap_1_1D4Dimensions.html - ac31f1f30e0c03dfc610f44d37b005790 - - - print_dap4 - classlibdap_1_1D4Dimensions.html - af4984ece63c5f6ca98fd1b8e84dc33dc - - - set_parent - classlibdap_1_1D4Dimensions.html - ae43d26e16b4ff90fe42ed2379e7e8b0c - - - - - D4Enum - classlibdap_1_1D4Enum.html - - - btp_stack - classlibdap_1_1D4Enum.html - ae9c6e71855b90a0e552713011c9ab81f - - - D4Enum - classlibdap_1_1D4Enum.html - af1579d21ee1db9d3f8107924d66e4b26 - - - D4Enum - classlibdap_1_1D4Enum.html - a21c90ac91317ae1cbc051e4590fcb154 - - - D4Enum - classlibdap_1_1D4Enum.html - adb1b1b72b44048612d6b4d6bd9ee9650 - - - D4Enum - classlibdap_1_1D4Enum.html - ad6053f4506d3f1d116ae6ac86165a518 - - - ~D4Enum - classlibdap_1_1D4Enum.html - a3e63f98a9a3113052ba2e1f13c9172bb - - - add_var - classlibdap_1_1D4Enum.html - adca3c2621c4a509537c18362005d7f7f - - - add_var_nocopy - classlibdap_1_1D4Enum.html - aa1192360cea4dc516c822cd3e13dc723 - - - attributes - classlibdap_1_1D4Enum.html - a97452f06d2188eb838399a709246b5e9 - - - buf2val - classlibdap_1_1D4Enum.html - a5508dbda78827898d8728590bb1130b4 - - - check_semantics - classlibdap_1_1D4Enum.html - aec503abec2fd3090e7738c0a575491f8 - - - clear_local_data - classlibdap_1_1D4Enum.html - aaddb97a4efbe035f41deaf03c6e8683f - - - compute_checksum - classlibdap_1_1D4Enum.html - a5353acc53445e30f4c189e07ae1f3aa1 - - - d4_ops - classlibdap_1_1D4Enum.html - a512a356f31ed6c4c1a368da0b054408a - - - dataset - classlibdap_1_1D4Enum.html - a47521ce321a17e6ce217870cb6a1a7aa - - - deserialize - classlibdap_1_1D4Enum.html - a4e9df94181f86c427666f10b2b7211bf - - - deserialize - classlibdap_1_1D4Enum.html - a1f27d99250e857efd86ac9db788bbf1b - - - dump - classlibdap_1_1D4Enum.html - a59b75c34bcb3210f235e226482529e81 - - - element_count - classlibdap_1_1D4Enum.html - a5c2235737737b482bfa7536b8aeab810 - - - element_type - classlibdap_1_1D4Enum.html - a07314bc68166a21ccf9bcdc0d3911a5e - - - enumeration - classlibdap_1_1D4Enum.html - a71018e270cea7bd50ed88964cfa85e4d - - - FQN - classlibdap_1_1D4Enum.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - - - get_attr_table - classlibdap_1_1D4Enum.html - a1fcd9537c67e3bf88964b2656ff5bac1 - - - get_parent - classlibdap_1_1D4Enum.html - a3459cdaa239c33ce111ef360d8dc3017 - - - intern_data - classlibdap_1_1D4Enum.html - a722d33783aa0272d339b0301a4f77e59 - - - intern_data - classlibdap_1_1D4Enum.html - a1956e6ea90a745516f5372c859173433 - - - is_constructor_type - classlibdap_1_1D4Enum.html - a8b8490e0047c6da52945699a132008ea - - - is_dap4 - classlibdap_1_1D4Enum.html - a7f6835cb5e5589ab5dad3fb4813d3bea - - - is_in_selection - classlibdap_1_1D4Enum.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - - - is_signed - classlibdap_1_1D4Enum.html - ae91242794950049386186c9f76521c2b - - - is_simple_type - classlibdap_1_1D4Enum.html - aae57e5b270b3a015d40c8db10b9b5549 - - - is_vector_type - classlibdap_1_1D4Enum.html - a7107c76dbcab71015141142383b6d022 - - - length - classlibdap_1_1D4Enum.html - aadcda7a659157bc6a832d8a5fb775b3f - - - m_duplicate - classlibdap_1_1D4Enum.html - a0c55b826c8c5dfe7a454dc670e859a41 - - - name - classlibdap_1_1D4Enum.html - a24c5d67823b3cff7f4245a993072a142 - - - operator= - classlibdap_1_1D4Enum.html - acd6d55f3699cbb54421c624b56ce57ae - - - ops - classlibdap_1_1D4Enum.html - a300dfa8bd3ce44b3e2123397ac8c6415 - - - print_dap4 - classlibdap_1_1D4Enum.html - afcddbe441380b95c894510c02980b163 - - - print_decl - classlibdap_1_1D4Enum.html - a2d799fad93255d7f2b803562ae7a5784 - - - print_decl - classlibdap_1_1D4Enum.html - afd744b0ddeb04e7b173c9e83423ec572 - - - print_val - classlibdap_1_1D4Enum.html - a87421c728d4728c38a6d62154306d420 - - - print_val - classlibdap_1_1D4Enum.html - afb5e13838a599ec0efe2adbb2ae18f47 - - - print_xml - classlibdap_1_1D4Enum.html - a825820edee179550cfde3dfd4d274f2a - - - print_xml - classlibdap_1_1D4Enum.html - a8bd2c7682edd48c64b210bdf247bdef7 - - - print_xml_writer - classlibdap_1_1D4Enum.html - a87c488f6f90a079df648d45b6c0657ef - - - ptr_duplicate - classlibdap_1_1D4Enum.html - a8585358b06d90e8d689f572fb09ee326 - - - read - classlibdap_1_1D4Enum.html - a1da003c53f2e663223f603ab3fbd7c8e - - - read_p - classlibdap_1_1D4Enum.html - a38ff819a432217c55db2e9071928d20c - - - send_p - classlibdap_1_1D4Enum.html - a980c0013817836aa77ef74aeec7fb192 - - - serialize - classlibdap_1_1D4Enum.html - a524417cc7f1fd3776be4680c0af5c669 - - - serialize - classlibdap_1_1D4Enum.html - adc24a735977e28acb0e6f78667c1dd21 - - - set_attr_table - classlibdap_1_1D4Enum.html - a572a1d76a75981abac83a4241e90c0fa - - - set_attributes - classlibdap_1_1D4Enum.html - ad4dda4cf43dca838d3de183b8e01cd09 - - - set_attributes_nocopy - classlibdap_1_1D4Enum.html - afd0e5f87d19020f560d5c1ff8dd4d6a3 - - - set_element_type - classlibdap_1_1D4Enum.html - a4aa42beff78d5daf826cbfe6b6168f3c - - - set_enumeration - classlibdap_1_1D4Enum.html - ad2e7ed76ef9598c6b7b8e76482729e56 - - - set_in_selection - classlibdap_1_1D4Enum.html - a2bc036248cdaf1affac464170f32ad30 - - - set_is_dap4 - classlibdap_1_1D4Enum.html - abca9ddaa9a1ada8447cbe7193e8e288a - - - set_is_signed - classlibdap_1_1D4Enum.html - a7dd244148c5ec73c9ad975c9e83866c4 - - - set_length - classlibdap_1_1D4Enum.html - a4fe343c1eeb6fb1d61ab030433651d90 - - - set_name - classlibdap_1_1D4Enum.html - a86504564f45a3e6748c6f1cc0ff4e9fa - - - set_parent - classlibdap_1_1D4Enum.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - - - set_read_p - classlibdap_1_1D4Enum.html - a4533905a450d2a7af32e7d5acd557676 - - - set_send_p - classlibdap_1_1D4Enum.html - aba7b27635c95b74536de18393133628e - - - set_synthesized_p - classlibdap_1_1D4Enum.html - a595cb4059cff24f801a1b6da79bd2f9e - - - set_type - classlibdap_1_1D4Enum.html - af74f8d1ef57c9fcca46f620f75d175a3 - - - set_value - classlibdap_1_1D4Enum.html - abc945a62587b02fe85c9146fd92a392b - - - synthesized_p - classlibdap_1_1D4Enum.html - ae64e677da27249473cdba0b60cdbb90a - - - toString - classlibdap_1_1D4Enum.html - a701eb3361f5b5628329ece019cd34519 - - - transfer_attributes - classlibdap_1_1D4Enum.html - add8e836c622042a339152a6c31e5bdfb - - - transform_to_dap2 - classlibdap_1_1D4Enum.html - a0c3a33d704e3970e53922b6e7d0a541d - - - transform_to_dap4 - classlibdap_1_1D4Enum.html - adb03e2e1e40c3c888577c4666831a949 - - - type - classlibdap_1_1D4Enum.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - - - type_name - classlibdap_1_1D4Enum.html - a18a42c8ec35cb5b15cd651a4152f8a2c - - - val2buf - classlibdap_1_1D4Enum.html - a9eff2897992fa47ddb3e459d19c54838 - - - value - classlibdap_1_1D4Enum.html - ac8a61f83c03511688b764d18ba53c0a8 - - - var - classlibdap_1_1D4Enum.html - a4dc4fac1bb6083f6db645f37bfd59b85 - - - var - classlibdap_1_1D4Enum.html - adecfc442b5927c79933c7f71cfe03fd2 - - - width - classlibdap_1_1D4Enum.html - a7c97d06faba4257c9d50af2a7edd54d1 - - - D4EnumTest - classlibdap_1_1D4Enum.html - a484f375486fe27239d28b791c991678f - - - d_buf - classlibdap_1_1D4Enum.html - a5851d45097256d87118633522316ef44 - - - d_in_selection - classlibdap_1_1D4Enum.html - a949a89714965d7afdcd1e3edc8b7f0d4 - - - d_is_synthesized - classlibdap_1_1D4Enum.html - a629e97e8eb7d285b54c9af8c1ec9a29a - - - - - D4EnumDef - classlibdap_1_1D4EnumDef.html - - - D4EnumValueIter - classlibdap_1_1D4EnumDef.html - a51fbced480f0bf5c34399442605f52db - - - D4EnumDef - classlibdap_1_1D4EnumDef.html - a147060c99e6d2bd2a065bc27b4ca5cde - - - D4EnumDef - classlibdap_1_1D4EnumDef.html - a89f496c725ac7479b38986a5ae12ff8f - - - D4EnumDef - classlibdap_1_1D4EnumDef.html - a7cd877b0864aa853a14f0bb8c78b49c8 - - - ~D4EnumDef - classlibdap_1_1D4EnumDef.html - a09e6ad82439d5a736fc62f050492aa9e - - - add_value - classlibdap_1_1D4EnumDef.html - a7ebbcd814c5516cc5bd8f81d88b40c55 - - - empty - classlibdap_1_1D4EnumDef.html - a617d24e9298285af187aa14a1a95553e - - - is_valid_enum_value - classlibdap_1_1D4EnumDef.html - af2c114ec827866cd344fc4dc620caa06 - - - label - classlibdap_1_1D4EnumDef.html - a86e2dd0180d50a62e1b6c9458bc80bc9 - - - name - classlibdap_1_1D4EnumDef.html - ae3fafc9b61586d13f0d5c3c569676422 - - - operator= - classlibdap_1_1D4EnumDef.html - a74552a23eb2c131d0faafee6483ea91c - - - parent - classlibdap_1_1D4EnumDef.html - a1829485c70be6cd11b970ecf1f716b65 - - - print_dap4 - classlibdap_1_1D4EnumDef.html - aa64f66f4aa65f99a8e8a0509a4857206 - - - set_name - classlibdap_1_1D4EnumDef.html - a55ac64d339aa55fbd1afb3576a4782ef - - - set_parent - classlibdap_1_1D4EnumDef.html - aaf9020df7ec3a318f8170904db21e496 - - - set_type - classlibdap_1_1D4EnumDef.html - a5eb39aa9ffa5e7e9be32078a4862e69a - - - type - classlibdap_1_1D4EnumDef.html - a27b1f8ef6f896df6805686327f0f1274 - - - value - classlibdap_1_1D4EnumDef.html - a613776c1f6ab77e97e174d40448a5cb3 - - - value_begin - classlibdap_1_1D4EnumDef.html - a9ecf7791accad7c0d03ae0a242accb9d - - - value_end - classlibdap_1_1D4EnumDef.html - a097e0a7674866d28c9468a33f8cd865b - - - - - D4EnumDefs - classlibdap_1_1D4EnumDefs.html - - - D4EnumDefCIter - classlibdap_1_1D4EnumDefs.html - ae171025a5e8c27d0fb5ddd43fed1e043 - - - D4EnumDefIter - classlibdap_1_1D4EnumDefs.html - a26a989264f3a85b4af585ea1a4f53924 - - - D4EnumDefs - classlibdap_1_1D4EnumDefs.html - afc16d7a23d7555f3834f2454b54bce6d - - - D4EnumDefs - classlibdap_1_1D4EnumDefs.html - ac1e6a3fe53cbf25f4d9f2ecb0f4c1fb8 - - - ~D4EnumDefs - classlibdap_1_1D4EnumDefs.html - a3cfbaafcd03f6b09bf5ef780cda4ae3e - - - add_enum - classlibdap_1_1D4EnumDefs.html - a79d4486eb22736c01552a591a48239f3 - - - add_enum_nocopy - classlibdap_1_1D4EnumDefs.html - a865e8d255f58705d08c6b04e8e6159ce - - - empty - classlibdap_1_1D4EnumDefs.html - a3e27b472ef9397d38d4d5f605b20c5c9 - - - enum_begin - classlibdap_1_1D4EnumDefs.html - adc6ee4d3059ddc1c78e38416df6aede4 - - - enum_end - classlibdap_1_1D4EnumDefs.html - a791cd139eb848e2dc4ba13387abbea4a - - - find_enum_def - classlibdap_1_1D4EnumDefs.html - afef2369e71b0fd88a180f9e26fc32cbc - - - insert_enum - classlibdap_1_1D4EnumDefs.html - a4988b9d5ad3729b3ecc86ee914d04b96 - - - operator= - classlibdap_1_1D4EnumDefs.html - a7ac9626f598d10c7b8aefd99660c3356 - - - parent - classlibdap_1_1D4EnumDefs.html - a7f97c8e1602d98ba2fbeec6c6d23cd65 - - - print_dap4 - classlibdap_1_1D4EnumDefs.html - a49f23d7d067df71c12752a9eb35e3156 - - - set_parent - classlibdap_1_1D4EnumDefs.html - a4eac1c62e71ed7be3aaf769967e0123a - - - - - D4FilterClause - classlibdap_1_1D4FilterClause.html - - - ops - classlibdap_1_1D4FilterClause.html - ad47cb9f3fbd100cee1a6bcf295c32de6 - - - null - classlibdap_1_1D4FilterClause.html - ad47cb9f3fbd100cee1a6bcf295c32de6a00283cc61117548dbc446eec57fb6fe1 - - - less - classlibdap_1_1D4FilterClause.html - ad47cb9f3fbd100cee1a6bcf295c32de6ab431391984b3eae1e7f91fc35b4827be - - - greater - classlibdap_1_1D4FilterClause.html - ad47cb9f3fbd100cee1a6bcf295c32de6a98a1b971572b7eb493092b0033de734a - - - less_equal - classlibdap_1_1D4FilterClause.html - ad47cb9f3fbd100cee1a6bcf295c32de6ab343a5fa0fdddd515bc35d8dd22ac225 - - - greater_equal - classlibdap_1_1D4FilterClause.html - ad47cb9f3fbd100cee1a6bcf295c32de6af08f571b34ee32e845dfd9f9d3f230e0 - - - equal - classlibdap_1_1D4FilterClause.html - ad47cb9f3fbd100cee1a6bcf295c32de6a3a7c0a9bb9497875627be5d6a7df9fab - - - not_equal - classlibdap_1_1D4FilterClause.html - ad47cb9f3fbd100cee1a6bcf295c32de6ab5b8d9722252665ad08ba7aa19d8e847 - - - match - classlibdap_1_1D4FilterClause.html - ad47cb9f3fbd100cee1a6bcf295c32de6a6ede6e1fc1cc400c56e1de03c6492960 - - - map - classlibdap_1_1D4FilterClause.html - ad47cb9f3fbd100cee1a6bcf295c32de6aa90e63b2c487cc09650a70715941e074 - - - ND - classlibdap_1_1D4FilterClause.html - ad47cb9f3fbd100cee1a6bcf295c32de6a7dd219b884fb166ff578d1f438424ce2 - - - - - D4FilterClause - classlibdap_1_1D4FilterClause.html - a74c6d2b4e479c186b924d96ddff9466f - - - D4FilterClause - classlibdap_1_1D4FilterClause.html - a4d2a4b5c4c20762ab123e887050bcd92 - - - ~D4FilterClause - classlibdap_1_1D4FilterClause.html - aee2c2422e5e5b3d2bee8ea357d178390 - - - operator= - classlibdap_1_1D4FilterClause.html - a400f0ec3c17c0e51edfbf01af000e2f0 - - - value - classlibdap_1_1D4FilterClause.html - ab49550e5f468040ee40bf54a72156b1a - - - value - classlibdap_1_1D4FilterClause.html - a4860fa85c00f973512f4bf86ae4126f4 - - - D4FilterClauseList - classlibdap_1_1D4FilterClause.html - a08ab1e3d9dea607c02ec0b676a13718f - - - - - D4FilterClauseList - classlibdap_1_1D4FilterClauseList.html - - - citer - classlibdap_1_1D4FilterClauseList.html - a42eb9eccf2dbf506eedec855e964cd9f - - - iter - classlibdap_1_1D4FilterClauseList.html - a3547abeda0ec94d32907cf1864d8cd17 - - - D4FilterClauseList - classlibdap_1_1D4FilterClauseList.html - a68b5030e5ecf8fca6207eedd0f1be15a - - - D4FilterClauseList - classlibdap_1_1D4FilterClauseList.html - a8b5abd21a5464b9f5367ff3abd72a3f3 - - - D4FilterClauseList - classlibdap_1_1D4FilterClauseList.html - aad8707258bb6c2beb06d73d0e066cad4 - - - ~D4FilterClauseList - classlibdap_1_1D4FilterClauseList.html - a819e2f20a7cfa418cd41d18db6de1258 - - - add_clause - classlibdap_1_1D4FilterClauseList.html - a835e4bbd1c377c7de142bfb14cce0369 - - - cbegin - classlibdap_1_1D4FilterClauseList.html - a43cdd52d8252278737aa5c80b8bebff2 - - - cend - classlibdap_1_1D4FilterClauseList.html - a672b885017adec530cb6d00522c99c9d - - - get_clause - classlibdap_1_1D4FilterClauseList.html - a4fe082d4e38bcfdff15c33dc61209fc4 - - - operator= - classlibdap_1_1D4FilterClauseList.html - aedc9a4f23f37701ee3a871d2316c9e7f - - - size - classlibdap_1_1D4FilterClauseList.html - a3ffb783cc382930c5c61148bea3affeb - - - value - classlibdap_1_1D4FilterClauseList.html - ae559b853739a7394299311f8e32e55c4 - - - value - classlibdap_1_1D4FilterClauseList.html - a7bcb42d6670d47622f1666e709b20f47 - - - - - D4FunctionEvaluator - classlibdap_1_1D4FunctionEvaluator.html - - - D4FunctionEvaluator - classlibdap_1_1D4FunctionEvaluator.html - abf20115172f99d9e754bbe3c8f25eaac - - - D4FunctionEvaluator - classlibdap_1_1D4FunctionEvaluator.html - aed292b6811cfe7745693ad8ec89f6b58 - - - ~D4FunctionEvaluator - classlibdap_1_1D4FunctionEvaluator.html - a5a0e688afb7d21dfce18d5d9cebc0fb6 - - - dmr - classlibdap_1_1D4FunctionEvaluator.html - af365767d9e2f71985e78dfb4fdeef21c - - - error - classlibdap_1_1D4FunctionEvaluator.html - a8da245eff9adc831824a6e690b9387fb - - - eval - classlibdap_1_1D4FunctionEvaluator.html - a71d80e1a6835ebc27104460698a3ac75 - - - get_arg_length_hint - classlibdap_1_1D4FunctionEvaluator.html - a90928b2d946b079334e151e86c76d3a3 - - - init_arg_list - classlibdap_1_1D4FunctionEvaluator.html - a33433788bcecd7ac24fde5682b52f273 - - - init_arg_list - classlibdap_1_1D4FunctionEvaluator.html - a69447d03120a444b821bb3c1f2dd4173 - - - parse - classlibdap_1_1D4FunctionEvaluator.html - aa652eafd055aa4781a5804ee765b1767 - - - result - classlibdap_1_1D4FunctionEvaluator.html - add490246e6e7726cf1f8f19536147b80 - - - set_arg_length_hint - classlibdap_1_1D4FunctionEvaluator.html - ada3590f68661d1788f6ac8a8b485be19 - - - set_dmr - classlibdap_1_1D4FunctionEvaluator.html - a77e9bf6a42c85ad5bea0f4861ee5c3a4 - - - set_result - classlibdap_1_1D4FunctionEvaluator.html - a9c969cecaf6cf388b8c3a9c7a35845a3 - - - set_sf_list - classlibdap_1_1D4FunctionEvaluator.html - ac52e6b2f49c67b664f3c98a633e04e84 - - - set_trace_parsing - classlibdap_1_1D4FunctionEvaluator.html - ab0e58a9a89e2f3b273948bf45ab908af - - - set_trace_scanning - classlibdap_1_1D4FunctionEvaluator.html - a77cbfc035fd5e91c191d20b5ef76842c - - - sf_list - classlibdap_1_1D4FunctionEvaluator.html - a9407c0245fe941a60bf621853ebb38ff - - - trace_parsing - classlibdap_1_1D4FunctionEvaluator.html - a1ca7f272762e77b176a71cf4b412a3b3 - - - trace_scanning - classlibdap_1_1D4FunctionEvaluator.html - a651b2119a6dec763554d74412d67f435 - - - D4FunctionParser - classlibdap_1_1D4FunctionEvaluator.html - ae9c1c1ab3d1aadc109a90ef37db92eb7 - - - - - D4FunctionScanner - classlibdap_1_1D4FunctionScanner.html - - - D4FunctionScanner - classlibdap_1_1D4FunctionScanner.html - a86c6c841b88d457d73c1efdd6ee813fb - - - yylex - classlibdap_1_1D4FunctionScanner.html - a2ce348ad7ce26c96a799c520a4824516 - - - - - D4Group - classlibdap_1_1D4Group.html - - - btp_stack - classlibdap_1_1D4Group.html - ae9c6e71855b90a0e552713011c9ab81f - - - groupsCIter - classlibdap_1_1D4Group.html - aaf5f12600767bdba2eee5f7ca44720fc - - - groupsIter - classlibdap_1_1D4Group.html - afe30e587348bfba8e0707a8039109edd - - - Vars_citer - classlibdap_1_1D4Group.html - a5a585c58a099833c4ca26561963e0f83 - - - Vars_iter - classlibdap_1_1D4Group.html - a2b73df890f61ebb628359c8fd12839b0 - - - Vars_riter - classlibdap_1_1D4Group.html - a6122400e3f40d457751fb0372a650d03 - - - D4Group - classlibdap_1_1D4Group.html - ae112f35481f750daceca3511700b865c - - - D4Group - classlibdap_1_1D4Group.html - a89252477edc2d38676e75c69fb8a84ac - - - D4Group - classlibdap_1_1D4Group.html - a7f9e2d2bc50eb55e3772cba4f0d7c273 - - - ~D4Group - classlibdap_1_1D4Group.html - a9e05db028da3fb511a62421a93d7cfe7 - - - add_group - classlibdap_1_1D4Group.html - afdff2623d90c929d0194698159ac1175 - - - add_group_nocopy - classlibdap_1_1D4Group.html - a39fd2772ce3aa2f1bb8e150d9840df79 - - - add_var - classlibdap_1_1D4Group.html - a2585c69c45b9ebec9c63993248eb5b4b - - - add_var_nocopy - classlibdap_1_1D4Group.html - abdb52463a46e1b10040f245d4ed7642b - - - attributes - classlibdap_1_1D4Group.html - a97452f06d2188eb838399a709246b5e9 - - - buf2val - classlibdap_1_1D4Group.html - ac4dc7e8099322b5b403a7d0ae9079006 - - - check_semantics - classlibdap_1_1D4Group.html - afe010638fd2ca9aab00dd1c21a9e4825 - - - clear_local_data - classlibdap_1_1D4Group.html - aaddb97a4efbe035f41deaf03c6e8683f - - - compute_checksum - classlibdap_1_1D4Group.html - a287ab9a4deb81a8ced6d8432be647925 - - - d4_ops - classlibdap_1_1D4Group.html - a512a356f31ed6c4c1a368da0b054408a - - - dataset - classlibdap_1_1D4Group.html - a47521ce321a17e6ce217870cb6a1a7aa - - - del_var - classlibdap_1_1D4Group.html - af38d3785c4a7cd0063cbb9fc5943333c - - - del_var - classlibdap_1_1D4Group.html - a69291878fc48217902fb0dcf1e2e1aff - - - deserialize - classlibdap_1_1D4Group.html - a63763d2bae05463b100e823fb461a784 - - - deserialize - classlibdap_1_1D4Group.html - a702bdf9b8fa0a218594220d0f8b9bab1 - - - dims - classlibdap_1_1D4Group.html - a034d8c0e622ad5de382d4dfd21ad2ff9 - - - dump - classlibdap_1_1D4Group.html - a8efdfb84ef6b287142442252c00b4444 - - - element_count - classlibdap_1_1D4Group.html - a1c2eecff00fa7e3af175c711d00fb86e - - - enum_defs - classlibdap_1_1D4Group.html - a8b9ac5b00e42a4fd6e8b1e276fe33cd7 - - - find_child_grp - classlibdap_1_1D4Group.html - a6b8fe8800f7ea9d6e9fcde7225940157 - - - find_dim - classlibdap_1_1D4Group.html - a14e4b548e4e5b53c68c4a27fea9133d4 - - - find_enum_def - classlibdap_1_1D4Group.html - a2c01368660b60b3c1b088ed3d6df99e7 - - - find_first_var_that_uses_dimension - classlibdap_1_1D4Group.html - afb85c9a93fbe5b2815b5d9e5195487d0 - - - find_first_var_that_uses_enumeration - classlibdap_1_1D4Group.html - a721e2c66ddcbc747ce13d21d14769451 - - - find_map_source - classlibdap_1_1D4Group.html - a35c2341eb4c0a0dfeffaf7af75039a99 - - - find_var - classlibdap_1_1D4Group.html - a40872115c2d90536dac4f98f998416c4 - - - FQN - classlibdap_1_1D4Group.html - a49310c234dfeb5ac8e40e20881199794 - - - get_attr_table - classlibdap_1_1D4Group.html - a1fcd9537c67e3bf88964b2656ff5bac1 - - - get_parent - classlibdap_1_1D4Group.html - a3459cdaa239c33ce111ef360d8dc3017 - - - get_var_index - classlibdap_1_1D4Group.html - ac2b4b28ed9d6f435129aa599ab809799 - - - get_vars_iter - classlibdap_1_1D4Group.html - a1e6d8224e04d75e3d2a21263957cd42f - - - grp_begin - classlibdap_1_1D4Group.html - a4e1ccf4eac9bf132014f175ffa934d35 - - - grp_end - classlibdap_1_1D4Group.html - a893a28e64abefede77aca1d5a38e55e9 - - - insert_group_nocopy - classlibdap_1_1D4Group.html - a4ad9fc466d42f5fe4c130a75ba984c15 - - - intern_data - classlibdap_1_1D4Group.html - a065056826ef9c6fb2d08463af9e15a34 - - - intern_data - classlibdap_1_1D4Group.html - a368a83899f9abbbda1deaba7db8920bb - - - is_constructor_type - classlibdap_1_1D4Group.html - a8b8490e0047c6da52945699a132008ea - - - is_dap4 - classlibdap_1_1D4Group.html - a7f6835cb5e5589ab5dad3fb4813d3bea - - - is_in_selection - classlibdap_1_1D4Group.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - - - is_linear - classlibdap_1_1D4Group.html - af26f89e9c0732a9c32bd5e15d716a7d7 - - - is_simple_type - classlibdap_1_1D4Group.html - aae57e5b270b3a015d40c8db10b9b5549 - - - is_vector_type - classlibdap_1_1D4Group.html - a7107c76dbcab71015141142383b6d022 - - - length - classlibdap_1_1D4Group.html - aadcda7a659157bc6a832d8a5fb775b3f - - - m_duplicate - classlibdap_1_1D4Group.html - a88b282d06686fc88a74c91e289ef31d7 - - - m_duplicate - classlibdap_1_1D4Group.html - aa29dfa477c763d7d2641eb505fca356e - - - m_duplicate - classlibdap_1_1D4Group.html - a0c55b826c8c5dfe7a454dc670e859a41 - - - m_exact_match - classlibdap_1_1D4Group.html - aa5cd6124619d35e81bcfd426f1e569d3 - - - m_leaf_match - classlibdap_1_1D4Group.html - a8fe3863a609488f4d5125abea96b82ed - - - name - classlibdap_1_1D4Group.html - a24c5d67823b3cff7f4245a993072a142 - - - operator= - classlibdap_1_1D4Group.html - ab76e380cc608e96044216d15c6a06c3a - - - ops - classlibdap_1_1D4Group.html - a8a0000be2a244e3e07abda3020af8800 - - - print_dap4 - classlibdap_1_1D4Group.html - ae18a505436325aac9b7522fe293638e6 - - - print_decl - classlibdap_1_1D4Group.html - ab7fb094be8da2a9f80f6d3b85e452934 - - - print_decl - classlibdap_1_1D4Group.html - a6c2c4d7cbe1d6239c037272ec865f80b - - - print_val - classlibdap_1_1D4Group.html - aa7f9cce8ca18461af332aab61123bf23 - - - print_val - classlibdap_1_1D4Group.html - af50641301757ed26eb75fb2d29eae7ee - - - print_xml - classlibdap_1_1D4Group.html - a32de0413045173aa8803f540a6cea39b - - - print_xml - classlibdap_1_1D4Group.html - a7bbe6beabd94f576140e132e7a1017ff - - - print_xml_writer - classlibdap_1_1D4Group.html - ab775a5e7e63757ac961b43800a95635f - - - ptr_duplicate - classlibdap_1_1D4Group.html - aa56c17b1f5cca717df57604b9c7614d0 - - - read - classlibdap_1_1D4Group.html - ad0af40e2565972fa44985d173370c264 - - - read_p - classlibdap_1_1D4Group.html - a38ff819a432217c55db2e9071928d20c - - - request_size - classlibdap_1_1D4Group.html - ace2c9ad32397a47d87fdad9111693420 - - - send_p - classlibdap_1_1D4Group.html - a980c0013817836aa77ef74aeec7fb192 - - - serialize - classlibdap_1_1D4Group.html - a64268840654a0b37a15ccc601dbcfd33 - - - serialize - classlibdap_1_1D4Group.html - ae2f8b233c32b222df7106661860b68dd - - - set_attr_table - classlibdap_1_1D4Group.html - a572a1d76a75981abac83a4241e90c0fa - - - set_attributes - classlibdap_1_1D4Group.html - ad4dda4cf43dca838d3de183b8e01cd09 - - - set_attributes_nocopy - classlibdap_1_1D4Group.html - afd0e5f87d19020f560d5c1ff8dd4d6a3 - - - set_in_selection - classlibdap_1_1D4Group.html - ac30becb1ffe7d2cd4cbcd24fc216c9a3 - - - set_is_dap4 - classlibdap_1_1D4Group.html - abca9ddaa9a1ada8447cbe7193e8e288a - - - set_length - classlibdap_1_1D4Group.html - a4fe343c1eeb6fb1d61ab030433651d90 - - - set_name - classlibdap_1_1D4Group.html - a86504564f45a3e6748c6f1cc0ff4e9fa - - - set_parent - classlibdap_1_1D4Group.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - - - set_read_p - classlibdap_1_1D4Group.html - a391e0b9fa30f8afbd9dea69d5f5fd897 - - - set_send_p - classlibdap_1_1D4Group.html - a71f6bd0a32c30966ded9ccf8578f5cfb - - - set_synthesized_p - classlibdap_1_1D4Group.html - a595cb4059cff24f801a1b6da79bd2f9e - - - set_type - classlibdap_1_1D4Group.html - af74f8d1ef57c9fcca46f620f75d175a3 - - - synthesized_p - classlibdap_1_1D4Group.html - ae64e677da27249473cdba0b60cdbb90a - - - toString - classlibdap_1_1D4Group.html - a701eb3361f5b5628329ece019cd34519 - - - transfer_attributes - classlibdap_1_1D4Group.html - a799d2bd8ef9505b1d493d8cd73b72746 - - - transform_to_dap2 - classlibdap_1_1D4Group.html - ab8aa023211f1ed226b73def5e11da787 - - - transform_to_dap4 - classlibdap_1_1D4Group.html - a3affad818961b2e7e984415cdd3c6e9e - - - type - classlibdap_1_1D4Group.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - - - type_name - classlibdap_1_1D4Group.html - a18a42c8ec35cb5b15cd651a4152f8a2c - - - val2buf - classlibdap_1_1D4Group.html - ac742b1bf93889e541128b1d123821ee6 - - - var - classlibdap_1_1D4Group.html - a36a7412da7b5257d7666add726fea1a6 - - - var - classlibdap_1_1D4Group.html - a68f1779dc328f890062722d90fad084a - - - var_begin - classlibdap_1_1D4Group.html - adeafe3d6c82d07b456a598a7b446c2c6 - - - var_end - classlibdap_1_1D4Group.html - a936b38c7c35ffb4fe17c5b8e85bdaaa2 - - - var_rbegin - classlibdap_1_1D4Group.html - aa025cf546ca35250454653c1ec684d91 - - - var_rend - classlibdap_1_1D4Group.html - aede7cf5889e101db1ea8f22c3a84a5d3 - - - width - classlibdap_1_1D4Group.html - a0b1e3ae7195f95c42ca98f42826a1ff5 - - - d_in_selection - classlibdap_1_1D4Group.html - a949a89714965d7afdcd1e3edc8b7f0d4 - - - d_is_synthesized - classlibdap_1_1D4Group.html - a629e97e8eb7d285b54c9af8c1ec9a29a - - - d_vars - classlibdap_1_1D4Group.html - a75b2aa694dc76294d6aa5f7456e49aa2 - - - - - D4Map - classlibdap_1_1D4Map.html - - - D4Map - classlibdap_1_1D4Map.html - ac0babe29e03e4a6608194ae9ba009d17 - - - D4Map - classlibdap_1_1D4Map.html - af3f0a335ea35b80c3a06f214c205bef6 - - - ~D4Map - classlibdap_1_1D4Map.html - a14c14714fab094fc5b7d71480b92ddaa - - - array - classlibdap_1_1D4Map.html - a6028ddc0b19815fb572b237059971953 - - - name - classlibdap_1_1D4Map.html - aad2e8058431f0edd6534dbbfeef40db5 - - - parent - classlibdap_1_1D4Map.html - a98ec8c14264c5a37d7009db73bd96e89 - - - print_dap4 - classlibdap_1_1D4Map.html - a1342078f96f506497e4b2d0f5c1b79d0 - - - set_array - classlibdap_1_1D4Map.html - a629312283609f922aaec37324ff65223 - - - set_name - classlibdap_1_1D4Map.html - aa5f9092dc886c3939ba49ac2dcde9977 - - - set_parent - classlibdap_1_1D4Map.html - aca0d3f7e28d71f3ba548372fe0c55c48 - - - - - D4Maps - classlibdap_1_1D4Maps.html - - - D4MapsCIter - classlibdap_1_1D4Maps.html - a7fd61631848dff6f45a28d114ccf4ed8 - - - D4MapsIter - classlibdap_1_1D4Maps.html - a5c5682f17bea4636ead7fdf90a97ab7e - - - D4Maps - classlibdap_1_1D4Maps.html - a8fb624d7ea66f522c0fb3cb53b1cf830 - - - D4Maps - classlibdap_1_1D4Maps.html - a8cc8dd043c7bde83deec633ff5e3ceb8 - - - D4Maps - classlibdap_1_1D4Maps.html - aa87c1846d37b80efdf374af03ccd2fb6 - - - ~D4Maps - classlibdap_1_1D4Maps.html - addff73445ba70df96be90b38f7eab253 - - - add_map - classlibdap_1_1D4Maps.html - afc9c47e9fcf1372407567a047f6642b5 - - - empty - classlibdap_1_1D4Maps.html - af30e9d78634641113e4d884fa36fdfa9 - - - get_map - classlibdap_1_1D4Maps.html - a065e596ce27b0eba34b224995bfee8d1 - - - map_begin - classlibdap_1_1D4Maps.html - a261348349e944f67affc937565caff85 - - - map_end - classlibdap_1_1D4Maps.html - a9546f2742f69e98967f21d668279885f - - - operator= - classlibdap_1_1D4Maps.html - a950b5d569d40ab43ec16187a6d14cf0b - - - print_dap4 - classlibdap_1_1D4Maps.html - af348afac518049c15c598a1628bfbb57 - - - remove_map - classlibdap_1_1D4Maps.html - add260bf46c431fbe6b0ef2a3bb164a1b - - - size - classlibdap_1_1D4Maps.html - a099f8024498f2b0ed230fd849dfd858b - - - - - D4Opaque - classlibdap_1_1D4Opaque.html - - - btp_stack - classlibdap_1_1D4Opaque.html - ae9c6e71855b90a0e552713011c9ab81f - - - dods_opaque - classlibdap_1_1D4Opaque.html - a33dfb82b293a8c4c0bd9cd72ae7cbccd - - - D4Opaque - classlibdap_1_1D4Opaque.html - a8eddfbec1b6ef521571494641a3660de - - - D4Opaque - classlibdap_1_1D4Opaque.html - a190880ff7cfb16fdb8065903dc29851b - - - ~D4Opaque - classlibdap_1_1D4Opaque.html - a4d15fd40998bb261bf88d43e3ef3eeaa - - - D4Opaque - classlibdap_1_1D4Opaque.html - aacbfb0eb2c1dea1409556650d743b3e7 - - - add_var - classlibdap_1_1D4Opaque.html - adca3c2621c4a509537c18362005d7f7f - - - add_var_nocopy - classlibdap_1_1D4Opaque.html - aa1192360cea4dc516c822cd3e13dc723 - - - attributes - classlibdap_1_1D4Opaque.html - a97452f06d2188eb838399a709246b5e9 - - - buf2val - classlibdap_1_1D4Opaque.html - a144049483741bfd39e3ac17bc480f6e4 - - - check_semantics - classlibdap_1_1D4Opaque.html - aec503abec2fd3090e7738c0a575491f8 - - - clear_local_data - classlibdap_1_1D4Opaque.html - a1902dc3e133b35b1cab454b8136525b3 - - - compute_checksum - classlibdap_1_1D4Opaque.html - a084b31aa9073775472a8ca16d30950a6 - - - d4_ops - classlibdap_1_1D4Opaque.html - a512a356f31ed6c4c1a368da0b054408a - - - dataset - classlibdap_1_1D4Opaque.html - a47521ce321a17e6ce217870cb6a1a7aa - - - deserialize - classlibdap_1_1D4Opaque.html - a055e793d61a140ffbfcde18d0395f6f6 - - - deserialize - classlibdap_1_1D4Opaque.html - a05a39516928c96e53b5c63ebf003de01 - - - dump - classlibdap_1_1D4Opaque.html - aaa416d5ed6dc0d114abbbd32e7c17c05 - - - element_count - classlibdap_1_1D4Opaque.html - a5c2235737737b482bfa7536b8aeab810 - - - FQN - classlibdap_1_1D4Opaque.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - - - get_attr_table - classlibdap_1_1D4Opaque.html - a1fcd9537c67e3bf88964b2656ff5bac1 - - - get_parent - classlibdap_1_1D4Opaque.html - a3459cdaa239c33ce111ef360d8dc3017 - - - intern_data - classlibdap_1_1D4Opaque.html - a722d33783aa0272d339b0301a4f77e59 - - - intern_data - classlibdap_1_1D4Opaque.html - a1956e6ea90a745516f5372c859173433 - - - is_constructor_type - classlibdap_1_1D4Opaque.html - a8b8490e0047c6da52945699a132008ea - - - is_dap4 - classlibdap_1_1D4Opaque.html - a7f6835cb5e5589ab5dad3fb4813d3bea - - - is_in_selection - classlibdap_1_1D4Opaque.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - - - is_simple_type - classlibdap_1_1D4Opaque.html - aae57e5b270b3a015d40c8db10b9b5549 - - - is_vector_type - classlibdap_1_1D4Opaque.html - a7107c76dbcab71015141142383b6d022 - - - length - classlibdap_1_1D4Opaque.html - a23a23d312b74ec2989372033aebaa72f - - - m_duplicate - classlibdap_1_1D4Opaque.html - a0c55b826c8c5dfe7a454dc670e859a41 - - - name - classlibdap_1_1D4Opaque.html - a24c5d67823b3cff7f4245a993072a142 - - - operator= - classlibdap_1_1D4Opaque.html - ad804a3a03e56e8b8165fc11061488215 - - - ops - classlibdap_1_1D4Opaque.html - aedf47172b055ecbe59363808903b5f94 - - - print_dap4 - classlibdap_1_1D4Opaque.html - afcddbe441380b95c894510c02980b163 - - - print_decl - classlibdap_1_1D4Opaque.html - a2d799fad93255d7f2b803562ae7a5784 - - - print_decl - classlibdap_1_1D4Opaque.html - afd744b0ddeb04e7b173c9e83423ec572 - - - print_val - classlibdap_1_1D4Opaque.html - ae4521e7e5c38c7002dea687ada0e46f9 - - - print_val - classlibdap_1_1D4Opaque.html - ae27d35b688dd9a246c4ac0d9eed8d2cb - - - print_xml - classlibdap_1_1D4Opaque.html - a825820edee179550cfde3dfd4d274f2a - - - print_xml - classlibdap_1_1D4Opaque.html - a8bd2c7682edd48c64b210bdf247bdef7 - - - print_xml_writer - classlibdap_1_1D4Opaque.html - a11554ff931528b243e9af8173d205b44 - - - ptr_duplicate - classlibdap_1_1D4Opaque.html - ada8cd83c8995fa8099adc1e23b8aeb1f - - - read - classlibdap_1_1D4Opaque.html - a1da003c53f2e663223f603ab3fbd7c8e - - - read_p - classlibdap_1_1D4Opaque.html - a38ff819a432217c55db2e9071928d20c - - - send_p - classlibdap_1_1D4Opaque.html - a980c0013817836aa77ef74aeec7fb192 - - - serialize - classlibdap_1_1D4Opaque.html - a5d6753586eefbca214e866fea703e743 - - - serialize - classlibdap_1_1D4Opaque.html - a83417f08ec539cc7ec6a1c76fd9029a8 - - - set_attr_table - classlibdap_1_1D4Opaque.html - a572a1d76a75981abac83a4241e90c0fa - - - set_attributes - classlibdap_1_1D4Opaque.html - ad4dda4cf43dca838d3de183b8e01cd09 - - - set_attributes_nocopy - classlibdap_1_1D4Opaque.html - afd0e5f87d19020f560d5c1ff8dd4d6a3 - - - set_in_selection - classlibdap_1_1D4Opaque.html - a2bc036248cdaf1affac464170f32ad30 - - - set_is_dap4 - classlibdap_1_1D4Opaque.html - abca9ddaa9a1ada8447cbe7193e8e288a - - - set_length - classlibdap_1_1D4Opaque.html - a4fe343c1eeb6fb1d61ab030433651d90 - - - set_name - classlibdap_1_1D4Opaque.html - a86504564f45a3e6748c6f1cc0ff4e9fa - - - set_parent - classlibdap_1_1D4Opaque.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - - - set_read_p - classlibdap_1_1D4Opaque.html - a4533905a450d2a7af32e7d5acd557676 - - - set_send_p - classlibdap_1_1D4Opaque.html - aba7b27635c95b74536de18393133628e - - - set_synthesized_p - classlibdap_1_1D4Opaque.html - a595cb4059cff24f801a1b6da79bd2f9e - - - set_type - classlibdap_1_1D4Opaque.html - af74f8d1ef57c9fcca46f620f75d175a3 - - - set_value - classlibdap_1_1D4Opaque.html - ae2a2a38798436fcff40bdf0f2d7895b2 - - - synthesized_p - classlibdap_1_1D4Opaque.html - ae64e677da27249473cdba0b60cdbb90a - - - toString - classlibdap_1_1D4Opaque.html - a701eb3361f5b5628329ece019cd34519 - - - transfer_attributes - classlibdap_1_1D4Opaque.html - add8e836c622042a339152a6c31e5bdfb - - - transform_to_dap2 - classlibdap_1_1D4Opaque.html - a055cc952c257d9069d4da12c47f1f148 - - - transform_to_dap4 - classlibdap_1_1D4Opaque.html - adb03e2e1e40c3c888577c4666831a949 - - - type - classlibdap_1_1D4Opaque.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - - - type_name - classlibdap_1_1D4Opaque.html - a18a42c8ec35cb5b15cd651a4152f8a2c - - - val2buf - classlibdap_1_1D4Opaque.html - abaec2b7412c175c02116ace998b57bf2 - - - value - classlibdap_1_1D4Opaque.html - ab5240d13c4373a6913d1e263567cd5b6 - - - var - classlibdap_1_1D4Opaque.html - a4dc4fac1bb6083f6db645f37bfd59b85 - - - var - classlibdap_1_1D4Opaque.html - adecfc442b5927c79933c7f71cfe03fd2 - - - width - classlibdap_1_1D4Opaque.html - a209fc10e6550ae7a5e19ad12453a7e26 - - - d_buf - classlibdap_1_1D4Opaque.html - ac29a174a6c256ea66f3b423053c6cdee - - - d_in_selection - classlibdap_1_1D4Opaque.html - a949a89714965d7afdcd1e3edc8b7f0d4 - - - d_is_synthesized - classlibdap_1_1D4Opaque.html - a629e97e8eb7d285b54c9af8c1ec9a29a - - - - - D4ParseError - classlibdap_1_1D4ParseError.html - - - D4ParseError - classlibdap_1_1D4ParseError.html - ac5ec08fa35253f6f738ca8e247b21597 - - - D4ParseError - classlibdap_1_1D4ParseError.html - a985a380206c94f33faa84026f75a0c52 - - - get_error_code - classlibdap_1_1D4ParseError.html - aaca0caca09e939602cade604cbc9824f - - - get_error_message - classlibdap_1_1D4ParseError.html - ab24a61e4974aae62962a40f9975e674c - - - get_file - classlibdap_1_1D4ParseError.html - a5165d667334a9fd6f337735c2b57e28c - - - get_line - classlibdap_1_1D4ParseError.html - a44b91121bdbc7d9d389db3440e2299cf - - - OK - classlibdap_1_1D4ParseError.html - acf3ab60821773bd8b62284750b02cfc0 - - - parse - classlibdap_1_1D4ParseError.html - ac705b3c1cfab1f7530d66a974eb0e8b6 - - - print - classlibdap_1_1D4ParseError.html - a552d711be27e6695854bd2b977a5cf31 - - - print - classlibdap_1_1D4ParseError.html - a4c58ef196c2b247bd37529bb7ad6a666 - - - set_error_code - classlibdap_1_1D4ParseError.html - a47c0f4b6a38d8ca075d1056076d2845d - - - set_error_message - classlibdap_1_1D4ParseError.html - a3ca90d33bf1c95529c9eefdfe8646e34 - - - set_file - classlibdap_1_1D4ParseError.html - a94a26bbdd9f4ede88c74de97e9e9e98d - - - set_line - classlibdap_1_1D4ParseError.html - a63a9c54019daa8b406c4287faba5e60a - - - what - classlibdap_1_1D4ParseError.html - accc5eeb469c8c18ec16dbf7fefe3cc41 - - - _error_code - classlibdap_1_1D4ParseError.html - a30226017ae9dfbe2e27be502b4fbdef4 - - - _error_message - classlibdap_1_1D4ParseError.html - a87f74c6be2134736ca1e400c90a3d571 - - - d_file - classlibdap_1_1D4ParseError.html - ac947a4c3d229d7ec505ad921a77702ea - - - d_line - classlibdap_1_1D4ParseError.html - af7d939b4b8154518f870d5424ff55f62 - - - - - D4ParserSax2 - classlibdap_1_1D4ParserSax2.html - - - D4ParserSax2 - classlibdap_1_1D4ParserSax2.html - a10d8a1945835254cd96a49cb89eb07ba - - - get_strict - group__strict.html - ga030fddcb0529be0999faffd9c0fb7e16 - - - intern - classlibdap_1_1D4ParserSax2.html - a836eb9e1878e02353979808b14118286 - - - intern - classlibdap_1_1D4ParserSax2.html - a7ab5148623018195a2a913bce2312d54 - - - intern - classlibdap_1_1D4ParserSax2.html - a0470239619369dc7f3110dd0119d1ca4 - - - set_strict - group__strict.html - gad0fb36451a4348afb0a294f709c905f2 - - - D4ParserSax2Test - classlibdap_1_1D4ParserSax2.html - a060b039c3ff9ed6f9d8db21bdc036cfb - - - - - D4RValue - classlibdap_1_1D4RValue.html - - - value_kind - classlibdap_1_1D4RValue.html - a0331ea420038af809ca2f4efab77d21e - - - unknown - classlibdap_1_1D4RValue.html - a0331ea420038af809ca2f4efab77d21eae28908d33d1a3fd26b7cdd8a5da5b51f - - - basetype - classlibdap_1_1D4RValue.html - a0331ea420038af809ca2f4efab77d21eae12ce33f1f449cb686b99847ef889eaa - - - function - classlibdap_1_1D4RValue.html - a0331ea420038af809ca2f4efab77d21eaf91820a4206b80a1c7fe63350f662b98 - - - constant - classlibdap_1_1D4RValue.html - a0331ea420038af809ca2f4efab77d21ead3817f8c948a4f374cb4decbbb3c858f - - - - - D4RValue - classlibdap_1_1D4RValue.html - a56deb1fb134a013bfaabb49068daa940 - - - D4RValue - classlibdap_1_1D4RValue.html - ae7518893db9efcff624e6d2e5263ddd8 - - - D4RValue - classlibdap_1_1D4RValue.html - a8f9e0f6660c7f68439c0cfec3414cc84 - - - D4RValue - classlibdap_1_1D4RValue.html - a8891adb3dde7ceac0c1dc71cdfe05bbd - - - D4RValue - classlibdap_1_1D4RValue.html - a5dd16a8ab9fff7b5f4549f00ab366f1f - - - D4RValue - classlibdap_1_1D4RValue.html - a5e4825631f385a3e9909d20495ad3b08 - - - D4RValue - classlibdap_1_1D4RValue.html - a44151fe9c8332c587b87b033ea038d31 - - - D4RValue - classlibdap_1_1D4RValue.html - a31593f70efd09830fc39e0d3272c8a70 - - - D4RValue - classlibdap_1_1D4RValue.html - add542d284fd2b9b148a64b036fa35b6c - - - D4RValue - classlibdap_1_1D4RValue.html - a960d79f62502c13f6fa1d726f083036f - - - D4RValue - classlibdap_1_1D4RValue.html - aa091cf6d7595939f5a9934d3209ff3ed - - - D4RValue - classlibdap_1_1D4RValue.html - a23589615974d6304283d6755973ef9fd - - - D4RValue - classlibdap_1_1D4RValue.html - ad3ad3049615244d33c483d66e6ea91e2 - - - D4RValue - classlibdap_1_1D4RValue.html - a3212e576d8d2334a5cfa4c87fdb8fe2f - - - D4RValue - classlibdap_1_1D4RValue.html - a969ca3efdc704809b31624fc0df7b062 - - - D4RValue - classlibdap_1_1D4RValue.html - a45ef9377cf3fb0293de08a618bf32ef7 - - - D4RValue - classlibdap_1_1D4RValue.html - ab581841d72de1a2ca25a57a6cb115435 - - - D4RValue - classlibdap_1_1D4RValue.html - ab82ba0fc0f7d3dd4850397a1cd38a97e - - - ~D4RValue - classlibdap_1_1D4RValue.html - a5de87b939219993f403b3e998f8127ef - - - get_kind - classlibdap_1_1D4RValue.html - a0ec4de806c9988928ba70ddf370e8b57 - - - operator= - classlibdap_1_1D4RValue.html - a6d12e286a6094463c6279f20a211b008 - - - value - classlibdap_1_1D4RValue.html - adf12fcbb253d9c336527ae12354ae56d - - - value - classlibdap_1_1D4RValue.html - a2f997dd3fef21a46b2655bb4e44f4821 - - - D4RValueList - classlibdap_1_1D4RValue.html - a4e6436fedcbcab34a40e114625c0ae2f - - - - - D4RValueList - classlibdap_1_1D4RValueList.html - - - iter - classlibdap_1_1D4RValueList.html - ae12525ce91bc3b68fdb5b94901b3b88e - - - D4RValueList - classlibdap_1_1D4RValueList.html - af81d90d0db1b832c70a5966e214dde34 - - - D4RValueList - classlibdap_1_1D4RValueList.html - ac6408d83a4a8b9d73bfa0a0f33a72054 - - - D4RValueList - classlibdap_1_1D4RValueList.html - ac621690d970b07bae9fde8bedc5458ac - - - ~D4RValueList - classlibdap_1_1D4RValueList.html - ada37f187d89c37e038315b7fb69e8cac - - - add_rvalue - classlibdap_1_1D4RValueList.html - a21ee262b409763d0d747a0f43762ba35 - - - begin - classlibdap_1_1D4RValueList.html - aa98356b1be0e33459253be03711133aa - - - end - classlibdap_1_1D4RValueList.html - a5c38d5172f010b48661f2c4952aef962 - - - get_rvalue - classlibdap_1_1D4RValueList.html - ac2a1a7c195c3bac7887dbc6f01bb05ff - - - operator= - classlibdap_1_1D4RValueList.html - a414e5402bd77e23868021e43be4ff081 - - - size - classlibdap_1_1D4RValueList.html - ac4c82d95a7ad0b0cb753660bfbf9d0c7 - - - - - D4Sequence - classlibdap_1_1D4Sequence.html - - - btp_stack - classlibdap_1_1D4Sequence.html - ae9c6e71855b90a0e552713011c9ab81f - - - Vars_citer - classlibdap_1_1D4Sequence.html - a5a585c58a099833c4ca26561963e0f83 - - - Vars_iter - classlibdap_1_1D4Sequence.html - a2b73df890f61ebb628359c8fd12839b0 - - - Vars_riter - classlibdap_1_1D4Sequence.html - a6122400e3f40d457751fb0372a650d03 - - - D4Sequence - classlibdap_1_1D4Sequence.html - a2aaf91e5a87163c7cc9f345c93cd15c7 - - - D4Sequence - classlibdap_1_1D4Sequence.html - ae702ae63e21cc1751466ca0358ef2ddb - - - D4Sequence - classlibdap_1_1D4Sequence.html - aa1c1e3db85c05113ec8f894f147e427a - - - ~D4Sequence - classlibdap_1_1D4Sequence.html - af5d3ae3e41cad5369cc81d7fced29131 - - - add_var - classlibdap_1_1D4Sequence.html - a2585c69c45b9ebec9c63993248eb5b4b - - - add_var_nocopy - classlibdap_1_1D4Sequence.html - abdb52463a46e1b10040f245d4ed7642b - - - attributes - classlibdap_1_1D4Sequence.html - a97452f06d2188eb838399a709246b5e9 - - - buf2val - classlibdap_1_1D4Sequence.html - ac4dc7e8099322b5b403a7d0ae9079006 - - - check_semantics - classlibdap_1_1D4Sequence.html - afe010638fd2ca9aab00dd1c21a9e4825 - - - clauses - classlibdap_1_1D4Sequence.html - a5dd9d6d34a348bae0dcbc0f69f41bcea - - - clear_local_data - classlibdap_1_1D4Sequence.html - afb387a094931d25177c61fd0fff9c833 - - - compute_checksum - classlibdap_1_1D4Sequence.html - a287ab9a4deb81a8ced6d8432be647925 - - - d4_ops - classlibdap_1_1D4Sequence.html - a512a356f31ed6c4c1a368da0b054408a - - - dataset - classlibdap_1_1D4Sequence.html - a47521ce321a17e6ce217870cb6a1a7aa - - - del_var - classlibdap_1_1D4Sequence.html - af38d3785c4a7cd0063cbb9fc5943333c - - - del_var - classlibdap_1_1D4Sequence.html - a69291878fc48217902fb0dcf1e2e1aff - - - deserialize - classlibdap_1_1D4Sequence.html - aa0bee29380a5dd0de2b87f13ea7787d7 - - - deserialize - classlibdap_1_1D4Sequence.html - a86cf5e86a736777e4211fd8e82f4bb2a - - - dump - classlibdap_1_1D4Sequence.html - acbe77409b7341fd19c03d6bb6e827819 - - - element_count - classlibdap_1_1D4Sequence.html - a1c2eecff00fa7e3af175c711d00fb86e - - - FQN - classlibdap_1_1D4Sequence.html - afa6c06dab830b4e089641b44fea8293c - - - get_attr_table - classlibdap_1_1D4Sequence.html - a1fcd9537c67e3bf88964b2656ff5bac1 - - - get_parent - classlibdap_1_1D4Sequence.html - a3459cdaa239c33ce111ef360d8dc3017 - - - get_var_index - classlibdap_1_1D4Sequence.html - ac2b4b28ed9d6f435129aa599ab809799 - - - get_vars_iter - classlibdap_1_1D4Sequence.html - a1e6d8224e04d75e3d2a21263957cd42f - - - intern_data - classlibdap_1_1D4Sequence.html - af9e0a54e85a84702353dacef30ead588 - - - intern_data - classlibdap_1_1D4Sequence.html - a714bcce811fd596d88cd81c104e928c1 - - - is_constructor_type - classlibdap_1_1D4Sequence.html - a8b8490e0047c6da52945699a132008ea - - - is_dap4 - classlibdap_1_1D4Sequence.html - a7f6835cb5e5589ab5dad3fb4813d3bea - - - is_in_selection - classlibdap_1_1D4Sequence.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - - - is_linear - classlibdap_1_1D4Sequence.html - af26f89e9c0732a9c32bd5e15d716a7d7 - - - is_simple_type - classlibdap_1_1D4Sequence.html - aae57e5b270b3a015d40c8db10b9b5549 - - - is_vector_type - classlibdap_1_1D4Sequence.html - a7107c76dbcab71015141142383b6d022 - - - length - classlibdap_1_1D4Sequence.html - afd54c5799e2d87fde4f1a28cdd5ff95d - - - m_duplicate - classlibdap_1_1D4Sequence.html - a88b282d06686fc88a74c91e289ef31d7 - - - m_duplicate - classlibdap_1_1D4Sequence.html - a0c55b826c8c5dfe7a454dc670e859a41 - - - m_duplicate - classlibdap_1_1D4Sequence.html - a7d90852ff161b3eafacfe9c0f6280df4 - - - m_exact_match - classlibdap_1_1D4Sequence.html - aa5cd6124619d35e81bcfd426f1e569d3 - - - m_leaf_match - classlibdap_1_1D4Sequence.html - a8fe3863a609488f4d5125abea96b82ed - - - name - classlibdap_1_1D4Sequence.html - a24c5d67823b3cff7f4245a993072a142 - - - operator= - classlibdap_1_1D4Sequence.html - aca271b6631f208471c93c84c322a6882 - - - ops - classlibdap_1_1D4Sequence.html - a8a0000be2a244e3e07abda3020af8800 - - - print_dap4 - classlibdap_1_1D4Sequence.html - a0f130e129b06773a9f3c94e3b492bb5c - - - print_decl - classlibdap_1_1D4Sequence.html - ab7fb094be8da2a9f80f6d3b85e452934 - - - print_decl - classlibdap_1_1D4Sequence.html - a6c2c4d7cbe1d6239c037272ec865f80b - - - print_one_row - classlibdap_1_1D4Sequence.html - a35d4423b080247ff0fa9fc1cffad9c93 - - - print_val - classlibdap_1_1D4Sequence.html - aa7f9cce8ca18461af332aab61123bf23 - - - print_val - classlibdap_1_1D4Sequence.html - a12be119aa3e3ef128a213c3c3ed162d2 - - - print_val_by_rows - classlibdap_1_1D4Sequence.html - a60b0c3db11f1e26d0bc5dcb9c7087858 - - - print_xml - classlibdap_1_1D4Sequence.html - a32de0413045173aa8803f540a6cea39b - - - print_xml - classlibdap_1_1D4Sequence.html - a7bbe6beabd94f576140e132e7a1017ff - - - print_xml_writer - classlibdap_1_1D4Sequence.html - ab775a5e7e63757ac961b43800a95635f - - - ptr_duplicate - classlibdap_1_1D4Sequence.html - a784f34f6c6c058546d03341a59a4d228 - - - read - classlibdap_1_1D4Sequence.html - ad0af40e2565972fa44985d173370c264 - - - read_next_instance - classlibdap_1_1D4Sequence.html - a10c99a2d311fa1db0c4ffd09499d33e6 - - - read_p - classlibdap_1_1D4Sequence.html - a38ff819a432217c55db2e9071928d20c - - - read_sequence_values - classlibdap_1_1D4Sequence.html - aba8a56e291c0aa8058c80be4f956bd74 - - - row_value - classlibdap_1_1D4Sequence.html - a01ae73579db91a6d55ace7278ecd58a1 - - - send_p - classlibdap_1_1D4Sequence.html - a980c0013817836aa77ef74aeec7fb192 - - - serialize - classlibdap_1_1D4Sequence.html - a2fb5f1dea7b57cef2ffb184f4855a3f4 - - - serialize - classlibdap_1_1D4Sequence.html - aac396e4b859d246caf2a719be66a3cac - - - set_attr_table - classlibdap_1_1D4Sequence.html - a572a1d76a75981abac83a4241e90c0fa - - - set_attributes - classlibdap_1_1D4Sequence.html - ad4dda4cf43dca838d3de183b8e01cd09 - - - set_attributes_nocopy - classlibdap_1_1D4Sequence.html - afd0e5f87d19020f560d5c1ff8dd4d6a3 - - - set_in_selection - classlibdap_1_1D4Sequence.html - ac30becb1ffe7d2cd4cbcd24fc216c9a3 - - - set_is_dap4 - classlibdap_1_1D4Sequence.html - abca9ddaa9a1ada8447cbe7193e8e288a - - - set_length - classlibdap_1_1D4Sequence.html - abb2e9c282480cee7f53f7af00618a441 - - - set_name - classlibdap_1_1D4Sequence.html - a86504564f45a3e6748c6f1cc0ff4e9fa - - - set_parent - classlibdap_1_1D4Sequence.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - - - set_read_p - classlibdap_1_1D4Sequence.html - af52e60d8589eed1a18a14e9c6a57db65 - - - set_send_p - classlibdap_1_1D4Sequence.html - aafbcf9bef6719fe60ac707e02956e09d - - - set_synthesized_p - classlibdap_1_1D4Sequence.html - a595cb4059cff24f801a1b6da79bd2f9e - - - set_type - classlibdap_1_1D4Sequence.html - af74f8d1ef57c9fcca46f620f75d175a3 - - - set_value - classlibdap_1_1D4Sequence.html - a1f5efd16cb2c3d0a6f3ef12eb2f0fc67 - - - synthesized_p - classlibdap_1_1D4Sequence.html - ae64e677da27249473cdba0b60cdbb90a - - - toString - classlibdap_1_1D4Sequence.html - a701eb3361f5b5628329ece019cd34519 - - - transfer_attributes - classlibdap_1_1D4Sequence.html - a799d2bd8ef9505b1d493d8cd73b72746 - - - transform_to_dap2 - classlibdap_1_1D4Sequence.html - affec8a11e9cc035d4b1e8fb9a87b2072 - - - transform_to_dap4 - classlibdap_1_1D4Sequence.html - a3affad818961b2e7e984415cdd3c6e9e - - - type - classlibdap_1_1D4Sequence.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - - - type_name - classlibdap_1_1D4Sequence.html - a18a42c8ec35cb5b15cd651a4152f8a2c - - - val2buf - classlibdap_1_1D4Sequence.html - ac742b1bf93889e541128b1d123821ee6 - - - value - classlibdap_1_1D4Sequence.html - a6d5152308495305816b986891a7d3529 - - - value_ref - classlibdap_1_1D4Sequence.html - aee7a551768b2b80ad1189c48fd92f832 - - - var - classlibdap_1_1D4Sequence.html - a36a7412da7b5257d7666add726fea1a6 - - - var - classlibdap_1_1D4Sequence.html - a68f1779dc328f890062722d90fad084a - - - var_begin - classlibdap_1_1D4Sequence.html - adeafe3d6c82d07b456a598a7b446c2c6 - - - var_end - classlibdap_1_1D4Sequence.html - a936b38c7c35ffb4fe17c5b8e85bdaaa2 - - - var_rbegin - classlibdap_1_1D4Sequence.html - aa025cf546ca35250454653c1ec684d91 - - - var_rend - classlibdap_1_1D4Sequence.html - aede7cf5889e101db1ea8f22c3a84a5d3 - - - var_value - classlibdap_1_1D4Sequence.html - ac7d746f2ab07a0779d7c9219dfadf31c - - - var_value - classlibdap_1_1D4Sequence.html - ac47ec6d389020cea11e414a7fe2e65b0 - - - width - classlibdap_1_1D4Sequence.html - a0b1e3ae7195f95c42ca98f42826a1ff5 - - - D4SequenceTest - classlibdap_1_1D4Sequence.html - aaf919d007dcbca783e988cbf9169ac01 - - - d_in_selection - classlibdap_1_1D4Sequence.html - a949a89714965d7afdcd1e3edc8b7f0d4 - - - d_is_synthesized - classlibdap_1_1D4Sequence.html - a629e97e8eb7d285b54c9af8c1ec9a29a - - - d_length - classlibdap_1_1D4Sequence.html - a4348f6cc0a91e4145e546050f2d8b5e3 - - - d_values - classlibdap_1_1D4Sequence.html - a69232a3fe413e73eb7160005ac267bf5 - - - d_vars - classlibdap_1_1D4Sequence.html - a75b2aa694dc76294d6aa5f7456e49aa2 - - - - - D4StreamMarshaller - classlibdap_1_1D4StreamMarshaller.html - - - D4StreamMarshaller - classlibdap_1_1D4StreamMarshaller.html - a978005078f2c0810e424a97dcf9f3317 - - - ~D4StreamMarshaller - classlibdap_1_1D4StreamMarshaller.html - a5e20e73f0aa4c2be62bf0c6e007970ae - - - checksum_update - classlibdap_1_1D4StreamMarshaller.html - ae2d562a21a2631f32f305eb387817014 - - - dump - classlibdap_1_1D4StreamMarshaller.html - a92b392f76e951b1611796870b82a3af9 - - - get_checksum - classlibdap_1_1D4StreamMarshaller.html - af8ab8224637c2c673b59baa6dd583759 - - - put_byte - classlibdap_1_1D4StreamMarshaller.html - a7a4c48925d2c65b4c6aebcf96ab1b3cf - - - put_checksum - classlibdap_1_1D4StreamMarshaller.html - a16a0f121e713cb391fe00284f6c656c4 - - - put_count - classlibdap_1_1D4StreamMarshaller.html - a9ac90afeac1465d2c35719ede1e3c0ec - - - put_float32 - classlibdap_1_1D4StreamMarshaller.html - af559b42bd8940be2d89435784da3b71d - - - put_float64 - classlibdap_1_1D4StreamMarshaller.html - ae3d6f85a47ca42b8261230f02cb22a1b - - - put_int - classlibdap_1_1D4StreamMarshaller.html - a9123dfde32be90c5226422e4a5cf824c - - - put_int16 - classlibdap_1_1D4StreamMarshaller.html - acb820f7d65e6234cd76a65eaec4d1c6e - - - put_int32 - classlibdap_1_1D4StreamMarshaller.html - a26fa20c2ff973a0e1282bf7bc135c63a - - - put_int64 - classlibdap_1_1D4StreamMarshaller.html - aac0868cbf6586c8921c61ebf36456f4e - - - put_int8 - classlibdap_1_1D4StreamMarshaller.html - a9b3e898993236a8df8fb551b40ed38e8 - - - put_opaque - classlibdap_1_1D4StreamMarshaller.html - af4c18b2dbaf48948a8aae7fcdbd99f28 - - - put_opaque_dap4 - classlibdap_1_1D4StreamMarshaller.html - a50b4b015d7e6aaad1db72a635981f889 - - - put_str - classlibdap_1_1D4StreamMarshaller.html - a8f09b0c43cbc64ad8ba7d36a5bfe377d - - - put_uint16 - classlibdap_1_1D4StreamMarshaller.html - a070a83ffce32e59815b00c9a3a99f0e8 - - - put_uint32 - classlibdap_1_1D4StreamMarshaller.html - adb1ab1cae5aa4a98423824bab78ed9be - - - put_uint64 - classlibdap_1_1D4StreamMarshaller.html - a5a81d9401be0d05971f9d41a89f7aa21 - - - put_url - classlibdap_1_1D4StreamMarshaller.html - ab1798da31bb80cc8cfc7dd3dca58cd4d - - - put_vector - classlibdap_1_1D4StreamMarshaller.html - a8f6b04b483ed9847e4e36969af2a08e0 - - - put_vector - classlibdap_1_1D4StreamMarshaller.html - a7ac2c25895bde1ace566367eb7d23f36 - - - put_vector - classlibdap_1_1D4StreamMarshaller.html - ad9ed11a93d2db1e415120fa2e1a815f8 - - - put_vector - classlibdap_1_1D4StreamMarshaller.html - aecb796da2494b81fa2b4d9013a4b1e44 - - - put_vector_end - classlibdap_1_1D4StreamMarshaller.html - af8ee88d2bbe84932a14719c7b176167d - - - put_vector_float32 - classlibdap_1_1D4StreamMarshaller.html - a6fb8d61bd9c50d6e6821d849e02d9fb5 - - - put_vector_float64 - classlibdap_1_1D4StreamMarshaller.html - af2513d572ee927a7ffc98ab4a271fac6 - - - put_vector_part - classlibdap_1_1D4StreamMarshaller.html - a792123584b2e6700a8f61663ebbf0460 - - - put_vector_start - classlibdap_1_1D4StreamMarshaller.html - a20af2f5bb5f046c1749b4dad380047ed - - - reset_checksum - classlibdap_1_1D4StreamMarshaller.html - a4009f8aba9d7c19ae464af849c504177 - - - - - D4StreamUnMarshaller - classlibdap_1_1D4StreamUnMarshaller.html - - - D4StreamUnMarshaller - classlibdap_1_1D4StreamUnMarshaller.html - a5a42def8c559570e04f46ea6feba7efa - - - D4StreamUnMarshaller - classlibdap_1_1D4StreamUnMarshaller.html - afcf81b26351507aa4ed3b011648646b6 - - - ~D4StreamUnMarshaller - classlibdap_1_1D4StreamUnMarshaller.html - a9aebbc212ef92e54cce03cb546b3fa69 - - - dump - classlibdap_1_1D4StreamUnMarshaller.html - ab25aaee0813767bad8309e21945fe8fb - - - get_byte - classlibdap_1_1D4StreamUnMarshaller.html - a20488ddfa257f28a6e12b8305d04bded - - - get_checksum - classlibdap_1_1D4StreamUnMarshaller.html - a3c4713b26d736b226d2cf935614ae17f - - - get_checksum_str - classlibdap_1_1D4StreamUnMarshaller.html - a08e0d9075031d7ffd80804f51393a11d - - - get_count - classlibdap_1_1D4StreamUnMarshaller.html - a891d4d6570feaac2cf6558940b0c82ed - - - get_float32 - classlibdap_1_1D4StreamUnMarshaller.html - ada14cfa6ec7e05135275b545373a0c02 - - - get_float64 - classlibdap_1_1D4StreamUnMarshaller.html - a7411dc274329760ac3b8d7bf3fc23183 - - - get_int - classlibdap_1_1D4StreamUnMarshaller.html - a6d11ae3b74e880c32c9ee85bf460374f - - - get_int16 - classlibdap_1_1D4StreamUnMarshaller.html - aa05594fb1ffdcd3a358b602c2d664511 - - - get_int32 - classlibdap_1_1D4StreamUnMarshaller.html - a60cd6a748e4b8e9100b2d7a2a688597e - - - get_int64 - classlibdap_1_1D4StreamUnMarshaller.html - ae349b901ed2602ffbd9c0f62f994b5b6 - - - get_int8 - classlibdap_1_1D4StreamUnMarshaller.html - ad8f1995f50dcdd2e1047535ee3a5408c - - - get_opaque - classlibdap_1_1D4StreamUnMarshaller.html - afadcf57084fe640801cb6683aa957196 - - - get_opaque_dap4 - classlibdap_1_1D4StreamUnMarshaller.html - a98fcfd8205bc819fc4548acba9402946 - - - get_opaque_dap4 - classlibdap_1_1D4StreamUnMarshaller.html - aa7da5a3125d3cee9970ec976dce8550b - - - get_str - classlibdap_1_1D4StreamUnMarshaller.html - a6cf80500bec74801353f52203f6ed172 - - - get_uint16 - classlibdap_1_1D4StreamUnMarshaller.html - a62e4a5c71a4de92a8d1199ef491ed3dd - - - get_uint32 - classlibdap_1_1D4StreamUnMarshaller.html - ae39d1ad0b2d97e8ae0ee6210eff91bc9 - - - get_uint64 - classlibdap_1_1D4StreamUnMarshaller.html - a506f22cc2080747f0f8cbf6cc2815707 - - - get_url - classlibdap_1_1D4StreamUnMarshaller.html - a8556867a933b3269f4340df8972c5396 - - - get_vector - classlibdap_1_1D4StreamUnMarshaller.html - ad7890e3cdd371db06c03bb65de25bceb - - - get_vector - classlibdap_1_1D4StreamUnMarshaller.html - acf95264ce4c33c9c42c37a6376138a80 - - - get_vector - classlibdap_1_1D4StreamUnMarshaller.html - a4d78db6e07b654a8bdb6b1f7cee5900b - - - get_vector - classlibdap_1_1D4StreamUnMarshaller.html - a461cdb09b2e6c966a3141f375e1974bc - - - get_vector_float32 - classlibdap_1_1D4StreamUnMarshaller.html - a61f7f5b4ca7da0b76a1360def1fd8f14 - - - get_vector_float64 - classlibdap_1_1D4StreamUnMarshaller.html - a2c16755bd8337478c6db2dd10d1f772e - - - is_source_big_endian - classlibdap_1_1D4StreamUnMarshaller.html - a476fdcae5c5b7a077548fa138275b842 - - - set_twiddle_bytes - classlibdap_1_1D4StreamUnMarshaller.html - a83cc5d2256b5902b8e9effdba7bd7f7d - - - - - DAPCache3 - classlibdap_1_1DAPCache3.html - - - cache_too_big - classlibdap_1_1DAPCache3.html - a485d7a65317308cefff252998acdd142 - - - create_and_lock - classlibdap_1_1DAPCache3.html - afcf4ad0cb6808bf453a262d29b8f6169 - - - dump - classlibdap_1_1DAPCache3.html - a51e52c3fbaad17173676a8bd48d16047 - - - dump - classlibdap_1_1DAPCache3.html - a7c688942b296c46d7977e4f87a7220e0 - - - exclusive_to_shared_lock - classlibdap_1_1DAPCache3.html - a89b43f4929a90b4708c155257b40fae2 - - - get_cache_file_name - classlibdap_1_1DAPCache3.html - a3620d839ba6727d0245c61541ef8e6d0 - - - get_cache_size - classlibdap_1_1DAPCache3.html - a20cccf6a9c84957acf358418f2f920fe - - - get_read_lock - classlibdap_1_1DAPCache3.html - a5065a7f6678bdb34ba3e9615e9f5554e - - - lock_cache_read - classlibdap_1_1DAPCache3.html - a8b68e963914b0fe307a37b86a6986599 - - - lock_cache_write - classlibdap_1_1DAPCache3.html - af75c177ee450c8f18e3570c0ebefd8ac - - - purge_file - classlibdap_1_1DAPCache3.html - a48cd52daa0ae17a1b3abc84473d0e66e - - - unlock_and_close - classlibdap_1_1DAPCache3.html - a8ee589484c58c3c6959000fae1e010a4 - - - unlock_and_close - classlibdap_1_1DAPCache3.html - a782bf630f76e5bcab4c356db6101d346 - - - unlock_cache - classlibdap_1_1DAPCache3.html - a72f2d56a33176ac93ade3bf16c6c7ec6 - - - update_and_purge - classlibdap_1_1DAPCache3.html - ae115f42c90bdadc1e6700994c85c9176 - - - update_cache_info - classlibdap_1_1DAPCache3.html - ac3cc2b1e37e3c54080bb38d1abbc3b60 - - - - - DapIndent - classlibdap_1_1DapIndent.html - - - - - DapObj - classlibdap_1_1DapObj.html - - - ~DapObj - classlibdap_1_1DapObj.html - a18783d1c71c1ccec3d2d0c8ee995530b - - - dump - classlibdap_1_1DapObj.html - a51e52c3fbaad17173676a8bd48d16047 - - - - - DapXmlNamspaces - classlibdap_1_1DapXmlNamspaces.html - - - ~DapXmlNamspaces - classlibdap_1_1DapXmlNamspaces.html - a536f625a02210fe23f7de681f22a7036 - - - - - DAS - classlibdap_1_1DAS.html - - - DAS - classlibdap_1_1DAS.html - a89fa25390938a00076584ff7edbc85cf - - - DAS - classlibdap_1_1DAS.html - a47c193658638af264b666e0ed2f5e9d6 - - - ~DAS - classlibdap_1_1DAS.html - ab1a8dca7f96e4a6769031da39111a891 - - - add_table - classlibdap_1_1DAS.html - a77e38a71ab41ab58fd098603e1cd9cb8 - - - container - classlibdap_1_1DAS.html - ae5d31b2dd7b948ed3b1fa71db3fa32eb - - - container_name - classlibdap_1_1DAS.html - afbb88a74e1fcfa857526019e4f730b57 - - - container_name - classlibdap_1_1DAS.html - a46a47320689bd71f2f640de1848e958c - - - dump - classlibdap_1_1DAS.html - a95501eff38ff4c1078a9d659fc6bd14b - - - erase - classlibdap_1_1DAS.html - aee2b84645cf0825b20e0e68cca07bd2f - - - get_name - classlibdap_1_1DAS.html - af4463849acea7b327626fc6f5f58da28 - - - get_size - classlibdap_1_1DAS.html - a6b096a1c76874f7338a8e4a1d17ea724 - - - get_table - classlibdap_1_1DAS.html - ac0cd00dbb4425986999832275ce84303 - - - get_table - classlibdap_1_1DAS.html - a64edb34eb9e89df6f5b1cd383319afde - - - get_top_level_attributes - classlibdap_1_1DAS.html - a3bce04e836fabf8b0303e6a2dfd8664b - - - operator= - classlibdap_1_1DAS.html - a2e429ec68d1e03cf4b1b5f2b6ca53f2f - - - parse - classlibdap_1_1DAS.html - aa84ac295a96a12f9f083a8210732f5a8 - - - parse - classlibdap_1_1DAS.html - a24a6bf97aae19d9d05f8172b424b11e2 - - - parse - classlibdap_1_1DAS.html - a9afb27cb11b659ec8252c04b68935ba8 - - - print - classlibdap_1_1DAS.html - a8983b961e6fba3a6fd33ffcfd944eaf2 - - - print - classlibdap_1_1DAS.html - a32e72f6ecc303f270e40724dc7d3dfb7 - - - var_begin - classlibdap_1_1DAS.html - a0f2d73b7f882231e2ff452cb4e89c113 - - - var_end - classlibdap_1_1DAS.html - a9a9c295e437408d7c91641f8d8dd23f7 - - - - - DataDDS - classlibdap_1_1DataDDS.html - - - Vars_citer - classlibdap_1_1DataDDS.html - ae18628332086dd04361e0ba745cd91ca - - - Vars_iter - classlibdap_1_1DataDDS.html - a5140f67d8f7eecf0a260d8a5d9fc39c5 - - - Vars_riter - classlibdap_1_1DataDDS.html - a03816194d9596596926d6c8fa1872604 - - - DataDDS - classlibdap_1_1DataDDS.html - a726223338475f0ad01315475b358c0c6 - - - ~DataDDS - classlibdap_1_1DataDDS.html - a0cdbbfa0f61fba687ce292dc0fb6ba2d - - - add_var - classlibdap_1_1DataDDS.html - ade87418e97ee5c7efd92279cd41e421c - - - add_var_nocopy - classlibdap_1_1DataDDS.html - a0a9c873e5cbd8e75b4427875a38455bd - - - check_semantics - classlibdap_1_1DataDDS.html - a0d1bf35c18c77a15bb266a895f99f1c6 - - - container - classlibdap_1_1DataDDS.html - add7c78964a7574239e2d3dd6717a0f31 - - - container_name - classlibdap_1_1DataDDS.html - aaca262d193346e04d4a6caa7acd117e2 - - - container_name - classlibdap_1_1DataDDS.html - a025d5fef84ebc2d958a59e4297883d20 - - - del_var - classlibdap_1_1DataDDS.html - a7030e5bf19371742219f14d6b3aeeedf - - - del_var - classlibdap_1_1DataDDS.html - ac06f060770215ad790aa5437e567a215 - - - del_var - classlibdap_1_1DataDDS.html - a6ae053eca0eadcfa1368da8486bf5e06 - - - dump - classlibdap_1_1DataDDS.html - a386e17c1cd81a9c01ebf80489aee7127 - - - duplicate - classlibdap_1_1DataDDS.html - a88195f7e5c14124b3d70d07b290dcea4 - - - exact_match - classlibdap_1_1DataDDS.html - a6f4fb3cf9a40d44e2e154ab1c0096a5d - - - filename - classlibdap_1_1DataDDS.html - a1106220194c07459b481a2c190f62482 - - - filename - classlibdap_1_1DataDDS.html - a3dc8062cbb44db0d9b5f47b1109effd9 - - - get_attr_table - classlibdap_1_1DataDDS.html - a177e3df069cb0dcb3b30c0dcd236f8b3 - - - get_dap_major - classlibdap_1_1DataDDS.html - aced9c6fed3f727de8bff5d759780b966 - - - get_dap_minor - classlibdap_1_1DataDDS.html - a8ecd1a8f622ead2c379567295f6b99a4 - - - get_dap_version - classlibdap_1_1DataDDS.html - a1ed5890202999a874b2edafd18f3054e - - - get_das - classlibdap_1_1DataDDS.html - aa02904d9b79b8d7a92b4f3bcbacc68aa - - - get_das - classlibdap_1_1DataDDS.html - a7bff1a465b6b26e5d1ab9633ae49c6f0 - - - get_dataset_name - classlibdap_1_1DataDDS.html - a60042aabde37ccaefd56174641284673 - - - get_dmr_version - classlibdap_1_1DataDDS.html - abee41546bc1b77d4836716be64538763 - - - get_factory - classlibdap_1_1DataDDS.html - a28fe4bd419122bd8a82ededae0ab4a8b - - - get_namespace - classlibdap_1_1DataDDS.html - a3c066d28e6aec58d2169a9099d0979a2 - - - get_protocol - classlibdap_1_1DataDDS.html - ad318ec809085a0705e29d24468977738 - - - get_protocol_major - classlibdap_1_1DataDDS.html - a267a17823d2118f876f000cf27fc6f1e - - - get_protocol_minor - classlibdap_1_1DataDDS.html - aaf282a51b67654461749c4f03837387f - - - get_request_size - classlibdap_1_1DataDDS.html - a51bc473c9614419e880378686e7462b2 - - - get_request_xml_base - classlibdap_1_1DataDDS.html - ac2c33bda0c2148fce3da754f27a0323f - - - get_response_limit - classlibdap_1_1DataDDS.html - af37da63ace68d6f07649913ac7ab95d2 - - - get_timeout - classlibdap_1_1DataDDS.html - a24bd3f9014033dbf054b901028427c33 - - - get_var_index - classlibdap_1_1DataDDS.html - a5161e73a84f49c759bd411c8a3c3c356 - - - get_vars_iter - classlibdap_1_1DataDDS.html - a415f3083d3864eb04d6508772b3c4128 - - - get_version - classlibdap_1_1DataDDS.html - a1c8b566c9413d7f50a9bcea1a4b23d46 - - - get_version_major - classlibdap_1_1DataDDS.html - a88cab0c2f0a783017691a47f7067c254 - - - get_version_minor - classlibdap_1_1DataDDS.html - ab86723ce18922f12e0d24e7dcb0579c7 - - - insert_var - classlibdap_1_1DataDDS.html - a828c46d43447678bd736135946c9bacc - - - insert_var_nocopy - classlibdap_1_1DataDDS.html - abf72254ae41d26940b300c792611fa4e - - - leaf_match - classlibdap_1_1DataDDS.html - a2f60c6b71b5534d5b16c14c9c1dbed00 - - - mark - classlibdap_1_1DataDDS.html - a88c063f273e5aa68b38df4d8e09fb426 - - - mark_all - classlibdap_1_1DataDDS.html - a03c7fb8494b890e227279e70ba4b483e - - - num_var - classlibdap_1_1DataDDS.html - a3e99a99da58051c745cc8a3ab82e3b38 - - - parse - classlibdap_1_1DataDDS.html - a733c8e49ed42ab47d74afe68056340e6 - - - parse - classlibdap_1_1DataDDS.html - a3af2c3d3707f1a9c91d9c00937bb7325 - - - parse - classlibdap_1_1DataDDS.html - a02857d9355cd01dec621ae0bdf453075 - - - print - classlibdap_1_1DataDDS.html - a471a9e61f7154518b040a7818fa5a2b5 - - - print - classlibdap_1_1DataDDS.html - a535b5900c31f0038061f4aef5fa1c6c1 - - - print_constrained - classlibdap_1_1DataDDS.html - aac3dca048c1d085d72b44df8b7088cd5 - - - print_constrained - classlibdap_1_1DataDDS.html - ab2e1cacd542373312d5154565b3c1571 - - - print_das - classlibdap_1_1DataDDS.html - afb0339f6ff59ad01a00cf132d68cb548 - - - print_dmr - classlibdap_1_1DataDDS.html - a06da8fda5e65e039be2000f8fd22d295 - - - print_xml - classlibdap_1_1DataDDS.html - a80902a2bd86bd08392abbd3178a49b8b - - - print_xml - classlibdap_1_1DataDDS.html - af319354a044d02ea89732160131004dc - - - print_xml_writer - classlibdap_1_1DataDDS.html - af1b1fca603ab8d48220218a7771d064c - - - set_dap_major - classlibdap_1_1DataDDS.html - a03062495c46ed3fad9fa0a5f6f6e8d00 - - - set_dap_minor - classlibdap_1_1DataDDS.html - a358929d8f517dcdfe439037fb402351b - - - set_dap_version - classlibdap_1_1DataDDS.html - adcb80ef551e544b1cf527163cf54a30a - - - set_dap_version - classlibdap_1_1DataDDS.html - a38cc72c3b47c508d597535b9c9a39c37 - - - set_dataset_name - classlibdap_1_1DataDDS.html - a0138ce1c3b26968f968a6b723ec70dfb - - - set_factory - classlibdap_1_1DataDDS.html - abd73e1da6d32409062399c6e3333814a - - - set_namespace - classlibdap_1_1DataDDS.html - a0d1c1e04bc651072a5a56210d86dd801 - - - set_protocol - classlibdap_1_1DataDDS.html - a5048c753969354f9710948c961f77afb - - - set_request_xml_base - classlibdap_1_1DataDDS.html - a1872d99f10b845eb15960916229a2457 - - - set_response_limit - classlibdap_1_1DataDDS.html - a1d8dc5bcfaf287b360a10857837da952 - - - set_timeout - classlibdap_1_1DataDDS.html - ac97d9bc59c742b46614779f9381baf6a - - - set_version - classlibdap_1_1DataDDS.html - a971a9fa89f7a210c2d6fd2207a0041e5 - - - tag_nested_sequences - classlibdap_1_1DataDDS.html - a9d4421c2ccfdbc5ebd4a7d963ab53795 - - - timeout_off - classlibdap_1_1DataDDS.html - a6740f99a5fc64640505924c5603ace0a - - - timeout_on - classlibdap_1_1DataDDS.html - a8cd9b6a34f5e1a49665de3189e141de8 - - - transfer_attributes - classlibdap_1_1DataDDS.html - a2810a944fbdc7d21b08f2d8c19022b52 - - - var - classlibdap_1_1DataDDS.html - a74c67b99babe3317a0f76c8d8f7ba37a - - - var - classlibdap_1_1DataDDS.html - ab53f39cffc45142b4cb38117e5650487 - - - var_begin - classlibdap_1_1DataDDS.html - aac98f248cd5730a8769f9d71af9788d3 - - - var_end - classlibdap_1_1DataDDS.html - ad204bbd6eed8d440fb996f41bc986058 - - - var_rbegin - classlibdap_1_1DataDDS.html - a395947ea7f5abab45e7bfe7541ec9dc2 - - - var_rend - classlibdap_1_1DataDDS.html - a098d88f09002ad80e27acdb81a52659e - - - - - DDS - classlibdap_1_1DDS.html - - - Vars_citer - classlibdap_1_1DDS.html - ae18628332086dd04361e0ba745cd91ca - - - Vars_iter - classlibdap_1_1DDS.html - a5140f67d8f7eecf0a260d8a5d9fc39c5 - - - Vars_riter - classlibdap_1_1DDS.html - a03816194d9596596926d6c8fa1872604 - - - DDS - classlibdap_1_1DDS.html - a9c1073a70ad827f48791d62c472399e3 - - - DDS - classlibdap_1_1DDS.html - a4baeb0eea6ebee7c0ed684817aca1f27 - - - DDS - classlibdap_1_1DDS.html - aee64217da3a62758690e62767e25168d - - - ~DDS - classlibdap_1_1DDS.html - a090d0721ce2fd39ea411646cd9ffc264 - - - add_var - classlibdap_1_1DDS.html - ade87418e97ee5c7efd92279cd41e421c - - - add_var_nocopy - classlibdap_1_1DDS.html - a0a9c873e5cbd8e75b4427875a38455bd - - - check_semantics - classlibdap_1_1DDS.html - a0d1bf35c18c77a15bb266a895f99f1c6 - - - container - classlibdap_1_1DDS.html - add7c78964a7574239e2d3dd6717a0f31 - - - container_name - classlibdap_1_1DDS.html - aaca262d193346e04d4a6caa7acd117e2 - - - container_name - classlibdap_1_1DDS.html - a025d5fef84ebc2d958a59e4297883d20 - - - del_var - classlibdap_1_1DDS.html - a7030e5bf19371742219f14d6b3aeeedf - - - del_var - classlibdap_1_1DDS.html - ac06f060770215ad790aa5437e567a215 - - - del_var - classlibdap_1_1DDS.html - a6ae053eca0eadcfa1368da8486bf5e06 - - - dump - classlibdap_1_1DDS.html - afb88b506187aac19b45cfe8b7d28af86 - - - duplicate - classlibdap_1_1DDS.html - a88195f7e5c14124b3d70d07b290dcea4 - - - exact_match - classlibdap_1_1DDS.html - a6f4fb3cf9a40d44e2e154ab1c0096a5d - - - filename - classlibdap_1_1DDS.html - a1106220194c07459b481a2c190f62482 - - - filename - classlibdap_1_1DDS.html - a3dc8062cbb44db0d9b5f47b1109effd9 - - - get_attr_table - classlibdap_1_1DDS.html - a177e3df069cb0dcb3b30c0dcd236f8b3 - - - get_dap_major - classlibdap_1_1DDS.html - aced9c6fed3f727de8bff5d759780b966 - - - get_dap_minor - classlibdap_1_1DDS.html - a8ecd1a8f622ead2c379567295f6b99a4 - - - get_dap_version - classlibdap_1_1DDS.html - a1ed5890202999a874b2edafd18f3054e - - - get_das - classlibdap_1_1DDS.html - aa02904d9b79b8d7a92b4f3bcbacc68aa - - - get_das - classlibdap_1_1DDS.html - a7bff1a465b6b26e5d1ab9633ae49c6f0 - - - get_dataset_name - classlibdap_1_1DDS.html - a60042aabde37ccaefd56174641284673 - - - get_dmr_version - classlibdap_1_1DDS.html - abee41546bc1b77d4836716be64538763 - - - get_factory - classlibdap_1_1DDS.html - a28fe4bd419122bd8a82ededae0ab4a8b - - - get_namespace - classlibdap_1_1DDS.html - a3c066d28e6aec58d2169a9099d0979a2 - - - get_request_size - classlibdap_1_1DDS.html - a51bc473c9614419e880378686e7462b2 - - - get_request_xml_base - classlibdap_1_1DDS.html - ac2c33bda0c2148fce3da754f27a0323f - - - get_response_limit - classlibdap_1_1DDS.html - af37da63ace68d6f07649913ac7ab95d2 - - - get_timeout - classlibdap_1_1DDS.html - a24bd3f9014033dbf054b901028427c33 - - - get_var_index - classlibdap_1_1DDS.html - a5161e73a84f49c759bd411c8a3c3c356 - - - get_vars_iter - classlibdap_1_1DDS.html - a415f3083d3864eb04d6508772b3c4128 - - - insert_var - classlibdap_1_1DDS.html - a828c46d43447678bd736135946c9bacc - - - insert_var_nocopy - classlibdap_1_1DDS.html - abf72254ae41d26940b300c792611fa4e - - - leaf_match - classlibdap_1_1DDS.html - a2f60c6b71b5534d5b16c14c9c1dbed00 - - - mark - classlibdap_1_1DDS.html - a88c063f273e5aa68b38df4d8e09fb426 - - - mark_all - classlibdap_1_1DDS.html - a03c7fb8494b890e227279e70ba4b483e - - - num_var - classlibdap_1_1DDS.html - a3e99a99da58051c745cc8a3ab82e3b38 - - - operator= - classlibdap_1_1DDS.html - afa02245fb564ba26b76c2fd2fd1634ed - - - parse - classlibdap_1_1DDS.html - a733c8e49ed42ab47d74afe68056340e6 - - - parse - classlibdap_1_1DDS.html - a3af2c3d3707f1a9c91d9c00937bb7325 - - - parse - classlibdap_1_1DDS.html - a02857d9355cd01dec621ae0bdf453075 - - - print - classlibdap_1_1DDS.html - a471a9e61f7154518b040a7818fa5a2b5 - - - print - classlibdap_1_1DDS.html - a535b5900c31f0038061f4aef5fa1c6c1 - - - print_constrained - classlibdap_1_1DDS.html - aac3dca048c1d085d72b44df8b7088cd5 - - - print_constrained - classlibdap_1_1DDS.html - ab2e1cacd542373312d5154565b3c1571 - - - print_das - classlibdap_1_1DDS.html - afb0339f6ff59ad01a00cf132d68cb548 - - - print_dmr - classlibdap_1_1DDS.html - a06da8fda5e65e039be2000f8fd22d295 - - - print_xml - classlibdap_1_1DDS.html - a80902a2bd86bd08392abbd3178a49b8b - - - print_xml - classlibdap_1_1DDS.html - af319354a044d02ea89732160131004dc - - - print_xml_writer - classlibdap_1_1DDS.html - af1b1fca603ab8d48220218a7771d064c - - - set_dap_major - classlibdap_1_1DDS.html - a03062495c46ed3fad9fa0a5f6f6e8d00 - - - set_dap_minor - classlibdap_1_1DDS.html - a358929d8f517dcdfe439037fb402351b - - - set_dap_version - classlibdap_1_1DDS.html - adcb80ef551e544b1cf527163cf54a30a - - - set_dap_version - classlibdap_1_1DDS.html - a38cc72c3b47c508d597535b9c9a39c37 - - - set_dataset_name - classlibdap_1_1DDS.html - a0138ce1c3b26968f968a6b723ec70dfb - - - set_factory - classlibdap_1_1DDS.html - abd73e1da6d32409062399c6e3333814a - - - set_namespace - classlibdap_1_1DDS.html - a0d1c1e04bc651072a5a56210d86dd801 - - - set_request_xml_base - classlibdap_1_1DDS.html - a1872d99f10b845eb15960916229a2457 - - - set_response_limit - classlibdap_1_1DDS.html - a1d8dc5bcfaf287b360a10857837da952 - - - set_timeout - classlibdap_1_1DDS.html - ac97d9bc59c742b46614779f9381baf6a - - - tag_nested_sequences - classlibdap_1_1DDS.html - a9d4421c2ccfdbc5ebd4a7d963ab53795 - - - timeout_off - classlibdap_1_1DDS.html - a6740f99a5fc64640505924c5603ace0a - - - timeout_on - classlibdap_1_1DDS.html - a8cd9b6a34f5e1a49665de3189e141de8 - - - transfer_attributes - classlibdap_1_1DDS.html - a2810a944fbdc7d21b08f2d8c19022b52 - - - var - classlibdap_1_1DDS.html - a74c67b99babe3317a0f76c8d8f7ba37a - - - var - classlibdap_1_1DDS.html - ab53f39cffc45142b4cb38117e5650487 - - - var_begin - classlibdap_1_1DDS.html - aac98f248cd5730a8769f9d71af9788d3 - - - var_end - classlibdap_1_1DDS.html - ad204bbd6eed8d440fb996f41bc986058 - - - var_rbegin - classlibdap_1_1DDS.html - a395947ea7f5abab45e7bfe7541ec9dc2 - - - var_rend - classlibdap_1_1DDS.html - a098d88f09002ad80e27acdb81a52659e - - - DDSTest - classlibdap_1_1DDS.html - a93e283c2829a7c7fb6cc2bf6c990bfbc - - - - - DDXParseFailed - classlibdap_1_1DDXParseFailed.html - - - DDXParseFailed - classlibdap_1_1DDXParseFailed.html - a6444854bd98d8b24bffab03cf7c3392e - - - DDXParseFailed - classlibdap_1_1DDXParseFailed.html - a68d582abdf8f1af822f5290b26598cc1 - - - get_error_code - classlibdap_1_1DDXParseFailed.html - aaca0caca09e939602cade604cbc9824f - - - get_error_message - classlibdap_1_1DDXParseFailed.html - ab24a61e4974aae62962a40f9975e674c - - - get_file - classlibdap_1_1DDXParseFailed.html - a5165d667334a9fd6f337735c2b57e28c - - - get_line - classlibdap_1_1DDXParseFailed.html - a44b91121bdbc7d9d389db3440e2299cf - - - OK - classlibdap_1_1DDXParseFailed.html - acf3ab60821773bd8b62284750b02cfc0 - - - parse - classlibdap_1_1DDXParseFailed.html - ac705b3c1cfab1f7530d66a974eb0e8b6 - - - print - classlibdap_1_1DDXParseFailed.html - a552d711be27e6695854bd2b977a5cf31 - - - print - classlibdap_1_1DDXParseFailed.html - a4c58ef196c2b247bd37529bb7ad6a666 - - - set_error_code - classlibdap_1_1DDXParseFailed.html - a47c0f4b6a38d8ca075d1056076d2845d - - - set_error_message - classlibdap_1_1DDXParseFailed.html - a3ca90d33bf1c95529c9eefdfe8646e34 - - - set_file - classlibdap_1_1DDXParseFailed.html - a94a26bbdd9f4ede88c74de97e9e9e98d - - - set_line - classlibdap_1_1DDXParseFailed.html - a63a9c54019daa8b406c4287faba5e60a - - - what - classlibdap_1_1DDXParseFailed.html - accc5eeb469c8c18ec16dbf7fefe3cc41 - - - _error_code - classlibdap_1_1DDXParseFailed.html - a30226017ae9dfbe2e27be502b4fbdef4 - - - _error_message - classlibdap_1_1DDXParseFailed.html - a87f74c6be2134736ca1e400c90a3d571 - - - d_file - classlibdap_1_1DDXParseFailed.html - ac947a4c3d229d7ec505ad921a77702ea - - - d_line - classlibdap_1_1DDXParseFailed.html - af7d939b4b8154518f870d5424ff55f62 - - - - - DDXParser - classlibdap_1_1DDXParser.html - - - DDXParser - classlibdap_1_1DDXParser.html - abfbc95ad430e73daf1b31049feb71dd5 - - - intern - classlibdap_1_1DDXParser.html - ab9b18fbb234851a7047e8fe4d38233b8 - - - intern_stream - classlibdap_1_1DDXParser.html - a76537c4e78cb5913b2c2f78b9f7cd458 - - - intern_stream - classlibdap_1_1DDXParser.html - a569959217f75a9e7334bd02e951bd099 - - - DDXParserTest - classlibdap_1_1DDXParser.html - a99e6fccac5f43590df51a5d657c002da - - - - - DMR - classlibdap_1_1DMR.html - - - DMR - classlibdap_1_1DMR.html - af1bd5ebee7ec448c98d55c006178a2f7 - - - DMR - classlibdap_1_1DMR.html - a32cd8e199dbe1ff6de21fe6ead07ed5d - - - DMR - classlibdap_1_1DMR.html - ab5662afa1f91fbb97fa279498959245c - - - DMR - classlibdap_1_1DMR.html - a38543e91dc011b905e186753f3b0c387 - - - ~DMR - classlibdap_1_1DMR.html - a798392d82895753cc8fc55fcc0e1dff4 - - - build_using_dds - classlibdap_1_1DMR.html - a955fff9d3339f3b72580ecc495640f36 - - - dap_major - classlibdap_1_1DMR.html - af0a8e41da24594292f6ca18bfcbd8a3f - - - dap_minor - classlibdap_1_1DMR.html - afd2c7ee87b356498220dd5db8dcecee0 - - - dap_version - classlibdap_1_1DMR.html - a3d981d7d583f763153e4baa0a8acc44b - - - dmr_version - classlibdap_1_1DMR.html - aedf566e3f1d42c6765c7343673a030af - - - dump - classlibdap_1_1DMR.html - a64aecb065a2df76d59494a9b016076a5 - - - factory - classlibdap_1_1DMR.html - a8fe55cd7ad530103f70fadfb0bede195 - - - filename - classlibdap_1_1DMR.html - adab6bba727b8b80aca7d639836c87e0c - - - get_namespace - classlibdap_1_1DMR.html - a394c0eac5282eb5d660145fe2361c19f - - - getDDS - classlibdap_1_1DMR.html - a0a8f854d9ab41ce5f212e0ef666e5fca - - - m_duplicate - classlibdap_1_1DMR.html - a13f58ede19889f21c981f192ba2e6227 - - - name - classlibdap_1_1DMR.html - a184f08e2119726b02c1e17c6f0a1e87e - - - OK - classlibdap_1_1DMR.html - abd615e04485de5ed0680eb662bec8842 - - - operator= - classlibdap_1_1DMR.html - a602a35289f65a64f486e063bef3151a7 - - - print_dap4 - classlibdap_1_1DMR.html - afb5a4eaa1681c1a594022ea17f58b656 - - - request_size - classlibdap_1_1DMR.html - aa3b8799bbfd1db2b93c72dbd271a8724 - - - request_xml_base - classlibdap_1_1DMR.html - a4884c28f2f91d747f94d6946b6c6e4d8 - - - response_limit - classlibdap_1_1DMR.html - a1a4db5f5e76e824efb67268ea05b9cfe - - - root - classlibdap_1_1DMR.html - a9d76d4fe1ae853c98d0cc783c4636316 - - - set_dap_version - classlibdap_1_1DMR.html - a2cc86493e515e990a7ea5a71fef38f6d - - - set_dmr_version - classlibdap_1_1DMR.html - ab08049e1a4014dc7f1f9c5915b822512 - - - set_factory - classlibdap_1_1DMR.html - a33a7a982e3a85edb4ee0d9fb5f98bd31 - - - set_filename - classlibdap_1_1DMR.html - acb4a1bd91706bd81503094151f74fd57 - - - set_name - classlibdap_1_1DMR.html - a6dded2bfba57cc4676e972a8d4b9881b - - - set_namespace - classlibdap_1_1DMR.html - acd9202bbb351dd09aded3d89432325de - - - set_request_xml_base - classlibdap_1_1DMR.html - ade8d164421de4f11a01f66b81ed5acb4 - - - set_response_limit - classlibdap_1_1DMR.html - a3116407e0a666d94059c97a9c0b1ca11 - - - DMRTest - classlibdap_1_1DMR.html - a6274f1c88e1a22d128bcddcaffdccebe - - - - - DODSFilter - classlibdap_1_1DODSFilter.html - - - Response - classlibdap_1_1DODSFilter.html - a908589f76cb20a5acdbc1eee0707fe9c - - - Unknown_Response - classlibdap_1_1DODSFilter.html - a908589f76cb20a5acdbc1eee0707fe9ca8dc83891bc5af14f36728cf41ae8a56d - - - DAS_Response - classlibdap_1_1DODSFilter.html - a908589f76cb20a5acdbc1eee0707fe9ca76e8a72ea312936dea238527ce4695c4 - - - DDS_Response - classlibdap_1_1DODSFilter.html - a908589f76cb20a5acdbc1eee0707fe9ca8b6e5aa1130bc4ad747f7a206144c900 - - - DataDDS_Response - classlibdap_1_1DODSFilter.html - a908589f76cb20a5acdbc1eee0707fe9caa78c10a0edfb814265ff23373af482fc - - - DDX_Response - classlibdap_1_1DODSFilter.html - a908589f76cb20a5acdbc1eee0707fe9ca4019280b92b56b01a879c0235dc8419c - - - DataDDX_Response - classlibdap_1_1DODSFilter.html - a908589f76cb20a5acdbc1eee0707fe9caee571a8ebbbf7085de41bf30c25d14f0 - - - BLOB_Response - classlibdap_1_1DODSFilter.html - a908589f76cb20a5acdbc1eee0707fe9cab5315b3a7bd11190e8067cd5897de28f - - - Version_Response - classlibdap_1_1DODSFilter.html - a908589f76cb20a5acdbc1eee0707fe9ca9c4a350a040f60ac49d34e20ca528159 - - - - - DODSFilter - classlibdap_1_1DODSFilter.html - aa802f48ceffcaff00634940067a1ba02 - - - DODSFilter - classlibdap_1_1DODSFilter.html - aab6e493b315d390b41f6d6e806c90045 - - - ~DODSFilter - classlibdap_1_1DODSFilter.html - a31b50cf60ff28ac38e73703abb432cb7 - - - dataset_constraint - classlibdap_1_1DODSFilter.html - ab7d2372a8cd192af7fb3cd208b912645 - - - dataset_constraint - classlibdap_1_1DODSFilter.html - a1865c3f7958bdfb6eee32b95b545103e - - - dataset_constraint_ddx - classlibdap_1_1DODSFilter.html - af4b9844c5b110f8943a7edb2b2f3c754 - - - establish_timeout - classlibdap_1_1DODSFilter.html - a65b1b9febdb2465a561931d663bf4c0c - - - establish_timeout - classlibdap_1_1DODSFilter.html - a75106d93808b268b9f3ef1ac97c5e551 - - - functional_constraint - classlibdap_1_1DODSFilter.html - a85eb20e4cbe2b711cb477dc719b8c2dd - - - functional_constraint - classlibdap_1_1DODSFilter.html - a9e77d7aeaf71b17e2fc04dd80d27ea9b - - - get_action - classlibdap_1_1DODSFilter.html - a74f7f411df86c7a57f08f6a311a422fd - - - get_cache_dir - classlibdap_1_1DODSFilter.html - adac7f923c25d16410b0f4b73afba08c1 - - - get_ce - classlibdap_1_1DODSFilter.html - a08084f202b86f92c50611eec2b929ff3 - - - get_cgi_version - classlibdap_1_1DODSFilter.html - ab2ddf2af37fcb080e86285721825ae2a - - - get_das_last_modified_time - classlibdap_1_1DODSFilter.html - ae4e6c33243d991ad4eefc28d27c50750 - - - get_data_last_modified_time - classlibdap_1_1DODSFilter.html - af53e6f349847054152c4e1eee63980ff - - - get_dataset_last_modified_time - classlibdap_1_1DODSFilter.html - a5a7323353dcce227beeb503aeba0f1e1 - - - get_dataset_name - classlibdap_1_1DODSFilter.html - aaae008cb404f7b434b6af72b6b23bcba - - - get_dataset_version - classlibdap_1_1DODSFilter.html - aa40d06abb824f427fa66314eccd91460 - - - get_dds_last_modified_time - classlibdap_1_1DODSFilter.html - a207b77e0c203ed54251869e4911f0ee8 - - - get_request_if_modified_since - classlibdap_1_1DODSFilter.html - aed25e11334c3184da363a4dffc172a29 - - - get_response - classlibdap_1_1DODSFilter.html - a3a062aefb96045bdba4fd7f4e2d39325 - - - get_timeout - classlibdap_1_1DODSFilter.html - ada3d864292534694594bdda03f7f9839 - - - get_URL - classlibdap_1_1DODSFilter.html - ad93a5c5bfef30ab4036cd79d8ff996c0 - - - initialize - classlibdap_1_1DODSFilter.html - a8ac695c5b7ebe39e2a7c8dd44079f317 - - - initialize - classlibdap_1_1DODSFilter.html - a1420d214791dc0c4bb907cd9f6d967a6 - - - is_conditional - classlibdap_1_1DODSFilter.html - aa9c03b6da01df9fb71baa5b2d973cb39 - - - print_usage - classlibdap_1_1DODSFilter.html - a916548931d78abba139bea6641db6e72 - - - process_options - classlibdap_1_1DODSFilter.html - a609ed4df55fdf7cc995e3951a1f2ddd0 - - - send_das - classlibdap_1_1DODSFilter.html - a8f3f0d7fd7542f3984cc8024b48e0c47 - - - send_das - classlibdap_1_1DODSFilter.html - a88c4473e601409f5268bf19159242b8c - - - send_das - classlibdap_1_1DODSFilter.html - a7315eee0c3a733e568840784f445aa3c - - - send_data - classlibdap_1_1DODSFilter.html - a1ca0cdc66d2eaa77dc7bbe126cb7eb04 - - - send_data - classlibdap_1_1DODSFilter.html - a4236f7ac38d4499d01bda826fd98bde5 - - - send_data_ddx - classlibdap_1_1DODSFilter.html - ac46088698a88e1452b381b18015785d7 - - - send_dds - classlibdap_1_1DODSFilter.html - a34bdffa81c6910650bb3457ff9389705 - - - send_dds - classlibdap_1_1DODSFilter.html - ad84000bbbfbdcd3bf41bab6136e55790 - - - send_dds - classlibdap_1_1DODSFilter.html - a99f2e1dde433219446073ed3fba41cc0 - - - send_ddx - classlibdap_1_1DODSFilter.html - aae5ece89f0fb09dbc8b30f2018e02295 - - - send_ddx - classlibdap_1_1DODSFilter.html - a42e19516994bd9cc154cafed7e5ac3aa - - - send_version_info - classlibdap_1_1DODSFilter.html - abb9505908d58a0c2a058dc4ea6065e8d - - - set_ce - classlibdap_1_1DODSFilter.html - a7a3b83c758edb5ed45270004673a355d - - - set_cgi_version - classlibdap_1_1DODSFilter.html - ad95070bc42a8aff97cb6c626c78480b6 - - - set_dataset_name - classlibdap_1_1DODSFilter.html - ab4aa216d0b462b2a18234a241d9b6b01 - - - set_response - classlibdap_1_1DODSFilter.html - acdf3c3346d326a252d17f5dc346aed5c - - - set_timeout - classlibdap_1_1DODSFilter.html - a8d9a76bd0ef270d86ef40b7cc4dc03ff - - - set_URL - classlibdap_1_1DODSFilter.html - a6c1b6941a1a6421607eadd675d341077 - - - d_action - classlibdap_1_1DODSFilter.html - a18f324b6760e82d1a0fea5a272125af3 - - - d_anc_das_lmt - classlibdap_1_1DODSFilter.html - a32605daab8497b578477748934b009cc - - - d_anc_dds_lmt - classlibdap_1_1DODSFilter.html - a10ec1bad5515cb040d6b67e42a738a5c - - - d_anc_dir - classlibdap_1_1DODSFilter.html - ad3b704cdf6eae452da68dc16731ee5ce - - - d_anc_file - classlibdap_1_1DODSFilter.html - a624e0d9fd279c1d75ec769655d6db372 - - - d_bad_options - classlibdap_1_1DODSFilter.html - aafe1eced520da8420b3a3a4aee610fe2 - - - d_cache_dir - classlibdap_1_1DODSFilter.html - a71eee99308f72e94171ceca9ad161e5a - - - d_cgi_ver - classlibdap_1_1DODSFilter.html - a20a3784b4893aa9344908e60c228101d - - - d_comp - classlibdap_1_1DODSFilter.html - ac341bef83b259326604a80d39662c8ba - - - d_conditional_request - classlibdap_1_1DODSFilter.html - a61a5b0904d54eb56c7a6ad1684c05a34 - - - d_dap2ce - classlibdap_1_1DODSFilter.html - a25c4f064890c0c4ea98aab7f26ac795f - - - d_dataset - classlibdap_1_1DODSFilter.html - abd2238d1d57f34a1d3a0a1d074b9530f - - - d_if_modified_since - classlibdap_1_1DODSFilter.html - a6e1e20b5e89ce89556d3ef2a818a9093 - - - d_program_name - classlibdap_1_1DODSFilter.html - aff22b76e40a2a5341fcc2b0551080b24 - - - d_response - classlibdap_1_1DODSFilter.html - aab229b7ab7035001dbfbc664c5b31a06 - - - d_timeout - classlibdap_1_1DODSFilter.html - aacd4a007b3849111d16f53fbdad31268 - - - d_url - classlibdap_1_1DODSFilter.html - ae415bfa9bee1c09e58a4330f51c761f8 - - - - - Error - classlibdap_1_1Error.html - - - Error - classlibdap_1_1Error.html - a39c3001623d0eda5d40cf132ac82b00f - - - Error - classlibdap_1_1Error.html - abc68351bbd6df70d666c4bcb499d338c - - - Error - classlibdap_1_1Error.html - a0d75f4244ed27998bf2e5e031bc1bf4b - - - Error - classlibdap_1_1Error.html - a749c827344436b813dc86b6c202069ad - - - ~Error - classlibdap_1_1Error.html - a746f8a7ae2a12f2c8f5c7b6d0e5c6283 - - - get_error_code - classlibdap_1_1Error.html - aaca0caca09e939602cade604cbc9824f - - - get_error_message - classlibdap_1_1Error.html - ab24a61e4974aae62962a40f9975e674c - - - get_file - classlibdap_1_1Error.html - a5165d667334a9fd6f337735c2b57e28c - - - get_line - classlibdap_1_1Error.html - a44b91121bdbc7d9d389db3440e2299cf - - - OK - classlibdap_1_1Error.html - acf3ab60821773bd8b62284750b02cfc0 - - - operator= - classlibdap_1_1Error.html - a351366d737b8b5899e68599b055fd596 - - - parse - classlibdap_1_1Error.html - ac705b3c1cfab1f7530d66a974eb0e8b6 - - - print - classlibdap_1_1Error.html - a552d711be27e6695854bd2b977a5cf31 - - - print - classlibdap_1_1Error.html - a4c58ef196c2b247bd37529bb7ad6a666 - - - set_error_code - classlibdap_1_1Error.html - a47c0f4b6a38d8ca075d1056076d2845d - - - set_error_message - classlibdap_1_1Error.html - a3ca90d33bf1c95529c9eefdfe8646e34 - - - set_file - classlibdap_1_1Error.html - a94a26bbdd9f4ede88c74de97e9e9e98d - - - set_line - classlibdap_1_1Error.html - a63a9c54019daa8b406c4287faba5e60a - - - what - classlibdap_1_1Error.html - accc5eeb469c8c18ec16dbf7fefe3cc41 - - - _error_code - classlibdap_1_1Error.html - a30226017ae9dfbe2e27be502b4fbdef4 - - - _error_message - classlibdap_1_1Error.html - a87f74c6be2134736ca1e400c90a3d571 - - - d_file - classlibdap_1_1Error.html - ac947a4c3d229d7ec505ad921a77702ea - - - d_line - classlibdap_1_1Error.html - af7d939b4b8154518f870d5424ff55f62 - - - - - EventHandler - classlibdap_1_1EventHandler.html - - - ~EventHandler - classlibdap_1_1EventHandler.html - a3124eab6cce13c78e66bda0f8724f394 - - - handle_signal - classlibdap_1_1EventHandler.html - a9cb4e0ec28ce8562067c1a9103f93559 - - - - - fdinbuf - classlibdap_1_1fdinbuf.html - - - fdinbuf - classlibdap_1_1fdinbuf.html - aa776f5ddbe7e5d03dee835bbcd5f44b7 - - - ~fdinbuf - classlibdap_1_1fdinbuf.html - afa35aa6df7d9c0bd0fdd9e096fa65225 - - - underflow - classlibdap_1_1fdinbuf.html - ac9990736a27a4538332f1b30b331a45b - - - buffer - classlibdap_1_1fdinbuf.html - ac050ce3ac598636683c6fce5675f25fa - - - close - classlibdap_1_1fdinbuf.html - a8df7e5fa426bf8cb0ccc9d4d6706259d - - - fd - classlibdap_1_1fdinbuf.html - a919a264c977ad3fe7c7680d42f405211 - - - - - fdistream - classlibdap_1_1fdistream.html - - - fdistream - classlibdap_1_1fdistream.html - a30f09221e96f9dd1bf49ba698ccc545d - - - buf - classlibdap_1_1fdistream.html - af9602392d0c9dea765f2559a08dbbef5 - - - - - fdostream - classlibdap_1_1fdostream.html - - - fdostream - classlibdap_1_1fdostream.html - aa9d9a229c670a71c18645ed782d8dabc - - - buf - classlibdap_1_1fdostream.html - a436cda58fc810e9058f09b8dbacc98f2 - - - - - fdoutbuf - classlibdap_1_1fdoutbuf.html - - - fdoutbuf - classlibdap_1_1fdoutbuf.html - ad9660035f6a20e351be2d90dc8614ff4 - - - ~fdoutbuf - classlibdap_1_1fdoutbuf.html - ac4ea28a81df0a1104ccf80a207a335ca - - - flushBuffer - classlibdap_1_1fdoutbuf.html - a156a3e9861ec7b0414483a6e19304c5e - - - overflow - classlibdap_1_1fdoutbuf.html - a4b9aa160b729361664b1db56be71989e - - - sync - classlibdap_1_1fdoutbuf.html - a12720ae836a467f70edd5abcac5551e7 - - - xsputn - classlibdap_1_1fdoutbuf.html - a753ce8a08038d4a697fcd25a7be9e31d - - - buffer - classlibdap_1_1fdoutbuf.html - aa6ec061b3fc94fee10921e539a60fff1 - - - close - classlibdap_1_1fdoutbuf.html - a47531c330de1ed94a915d8343e76f287 - - - fd - classlibdap_1_1fdoutbuf.html - ad1d1f9e4f9e943671e2d8c5f9d05335b - - - - - Float32 - classlibdap_1_1Float32.html - - - btp_stack - classlibdap_1_1Float32.html - ae9c6e71855b90a0e552713011c9ab81f - - - Float32 - classlibdap_1_1Float32.html - a440340df1382b7a5ddb0c5de7c690d39 - - - Float32 - classlibdap_1_1Float32.html - abb78eb0831332e4203c02d587bdc622c - - - Float32 - classlibdap_1_1Float32.html - a5a2c3a95ef18f47d32643fff1a71435c - - - ~Float32 - classlibdap_1_1Float32.html - aa9c18f00b3d208eb4facd2f3f8fffc41 - - - add_var - classlibdap_1_1Float32.html - adca3c2621c4a509537c18362005d7f7f - - - add_var_nocopy - classlibdap_1_1Float32.html - aa1192360cea4dc516c822cd3e13dc723 - - - attributes - classlibdap_1_1Float32.html - a97452f06d2188eb838399a709246b5e9 - - - buf2val - classlibdap_1_1Float32.html - af6f943ec5481067249a6b56ec57c6ec5 - - - check_semantics - classlibdap_1_1Float32.html - aec503abec2fd3090e7738c0a575491f8 - - - clear_local_data - classlibdap_1_1Float32.html - aaddb97a4efbe035f41deaf03c6e8683f - - - compute_checksum - classlibdap_1_1Float32.html - a0e7dc43c3ed796b87941ba4a70635820 - - - d4_ops - classlibdap_1_1Float32.html - a37db8a37ba94af597cd3cfbc6e31f20f - - - dataset - classlibdap_1_1Float32.html - a47521ce321a17e6ce217870cb6a1a7aa - - - deserialize - classlibdap_1_1Float32.html - a8c274b30cfb8ebcb34ccecae15438da1 - - - deserialize - classlibdap_1_1Float32.html - a08debecb23f1026013ca0b1a2a866753 - - - dump - classlibdap_1_1Float32.html - abc04a7fe1914803c9854f0a26635c81f - - - element_count - classlibdap_1_1Float32.html - a5c2235737737b482bfa7536b8aeab810 - - - FQN - classlibdap_1_1Float32.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - - - get_attr_table - classlibdap_1_1Float32.html - a1fcd9537c67e3bf88964b2656ff5bac1 - - - get_parent - classlibdap_1_1Float32.html - a3459cdaa239c33ce111ef360d8dc3017 - - - intern_data - classlibdap_1_1Float32.html - a722d33783aa0272d339b0301a4f77e59 - - - intern_data - classlibdap_1_1Float32.html - a1956e6ea90a745516f5372c859173433 - - - is_constructor_type - classlibdap_1_1Float32.html - a8b8490e0047c6da52945699a132008ea - - - is_dap4 - classlibdap_1_1Float32.html - a7f6835cb5e5589ab5dad3fb4813d3bea - - - is_in_selection - classlibdap_1_1Float32.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - - - is_simple_type - classlibdap_1_1Float32.html - aae57e5b270b3a015d40c8db10b9b5549 - - - is_vector_type - classlibdap_1_1Float32.html - a7107c76dbcab71015141142383b6d022 - - - length - classlibdap_1_1Float32.html - aadcda7a659157bc6a832d8a5fb775b3f - - - m_duplicate - classlibdap_1_1Float32.html - a0c55b826c8c5dfe7a454dc670e859a41 - - - name - classlibdap_1_1Float32.html - a24c5d67823b3cff7f4245a993072a142 - - - operator= - classlibdap_1_1Float32.html - a3a2a80201f53d63e874cf8ec80eba67a - - - ops - classlibdap_1_1Float32.html - accebf037e94f4e455cce505295c4cb0a - - - print_dap4 - classlibdap_1_1Float32.html - afcddbe441380b95c894510c02980b163 - - - print_decl - classlibdap_1_1Float32.html - a2d799fad93255d7f2b803562ae7a5784 - - - print_decl - classlibdap_1_1Float32.html - afd744b0ddeb04e7b173c9e83423ec572 - - - print_val - classlibdap_1_1Float32.html - a4dcf48f6faa3d8b00655d18d396391f5 - - - print_val - classlibdap_1_1Float32.html - a16d3bc5792e80d6bf660416391f81dde - - - print_xml - classlibdap_1_1Float32.html - a825820edee179550cfde3dfd4d274f2a - - - print_xml - classlibdap_1_1Float32.html - a8bd2c7682edd48c64b210bdf247bdef7 - - - print_xml_writer - classlibdap_1_1Float32.html - a11554ff931528b243e9af8173d205b44 - - - ptr_duplicate - classlibdap_1_1Float32.html - a05e8f21ce016d9bea6b572a900e4d473 - - - read - classlibdap_1_1Float32.html - a1da003c53f2e663223f603ab3fbd7c8e - - - read_p - classlibdap_1_1Float32.html - a38ff819a432217c55db2e9071928d20c - - - send_p - classlibdap_1_1Float32.html - a980c0013817836aa77ef74aeec7fb192 - - - serialize - classlibdap_1_1Float32.html - af2aa447cb5128232e6f7cd4d7b3cac53 - - - serialize - classlibdap_1_1Float32.html - a4fa3abf9221449b4254f0e005429667a - - - set_attr_table - classlibdap_1_1Float32.html - a572a1d76a75981abac83a4241e90c0fa - - - set_attributes - classlibdap_1_1Float32.html - ad4dda4cf43dca838d3de183b8e01cd09 - - - set_attributes_nocopy - classlibdap_1_1Float32.html - afd0e5f87d19020f560d5c1ff8dd4d6a3 - - - set_in_selection - classlibdap_1_1Float32.html - a2bc036248cdaf1affac464170f32ad30 - - - set_is_dap4 - classlibdap_1_1Float32.html - abca9ddaa9a1ada8447cbe7193e8e288a - - - set_length - classlibdap_1_1Float32.html - a4fe343c1eeb6fb1d61ab030433651d90 - - - set_name - classlibdap_1_1Float32.html - a86504564f45a3e6748c6f1cc0ff4e9fa - - - set_parent - classlibdap_1_1Float32.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - - - set_read_p - classlibdap_1_1Float32.html - a4533905a450d2a7af32e7d5acd557676 - - - set_send_p - classlibdap_1_1Float32.html - aba7b27635c95b74536de18393133628e - - - set_synthesized_p - classlibdap_1_1Float32.html - a595cb4059cff24f801a1b6da79bd2f9e - - - set_type - classlibdap_1_1Float32.html - af74f8d1ef57c9fcca46f620f75d175a3 - - - set_value - classlibdap_1_1Float32.html - a39f5adac2bd94e2fc0de1d483396afcb - - - synthesized_p - classlibdap_1_1Float32.html - ae64e677da27249473cdba0b60cdbb90a - - - toString - classlibdap_1_1Float32.html - a701eb3361f5b5628329ece019cd34519 - - - transfer_attributes - classlibdap_1_1Float32.html - add8e836c622042a339152a6c31e5bdfb - - - transform_to_dap2 - classlibdap_1_1Float32.html - affec8a11e9cc035d4b1e8fb9a87b2072 - - - transform_to_dap4 - classlibdap_1_1Float32.html - adb03e2e1e40c3c888577c4666831a949 - - - type - classlibdap_1_1Float32.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - - - type_name - classlibdap_1_1Float32.html - a18a42c8ec35cb5b15cd651a4152f8a2c - - - val2buf - classlibdap_1_1Float32.html - a3204d0d25e857aeefc00b36065e5bde8 - - - value - classlibdap_1_1Float32.html - a5d9d9573f17e8fdd16aa07ee8c6dca5d - - - var - classlibdap_1_1Float32.html - a4dc4fac1bb6083f6db645f37bfd59b85 - - - var - classlibdap_1_1Float32.html - adecfc442b5927c79933c7f71cfe03fd2 - - - width - classlibdap_1_1Float32.html - ae9e5884f35ed3c99e6f0ab22c7dae3ef - - - d_buf - classlibdap_1_1Float32.html - a49ffc98cc7bdd11e0b5e850cb5217945 - - - d_in_selection - classlibdap_1_1Float32.html - a949a89714965d7afdcd1e3edc8b7f0d4 - - - d_is_synthesized - classlibdap_1_1Float32.html - a629e97e8eb7d285b54c9af8c1ec9a29a - - - - - Float64 - classlibdap_1_1Float64.html - - - btp_stack - classlibdap_1_1Float64.html - ae9c6e71855b90a0e552713011c9ab81f - - - Float64 - classlibdap_1_1Float64.html - a60797eb0a6d96ba4cac22d687dfb59b6 - - - Float64 - classlibdap_1_1Float64.html - a8ead3377a8a7f64edae16efefa6e4071 - - - ~Float64 - classlibdap_1_1Float64.html - a743409089a8e2391bb2ac93aeb97a02b - - - Float64 - classlibdap_1_1Float64.html - a69e557e54a470602c1b411d1dd384125 - - - add_var - classlibdap_1_1Float64.html - adca3c2621c4a509537c18362005d7f7f - - - add_var_nocopy - classlibdap_1_1Float64.html - aa1192360cea4dc516c822cd3e13dc723 - - - attributes - classlibdap_1_1Float64.html - a97452f06d2188eb838399a709246b5e9 - - - buf2val - classlibdap_1_1Float64.html - a34faaf7e5c2f5d3ed0010aca6bdac3ba - - - check_semantics - classlibdap_1_1Float64.html - aec503abec2fd3090e7738c0a575491f8 - - - clear_local_data - classlibdap_1_1Float64.html - aaddb97a4efbe035f41deaf03c6e8683f - - - compute_checksum - classlibdap_1_1Float64.html - a07e2562d92832ce1ea1ec6673f99ec30 - - - d4_ops - classlibdap_1_1Float64.html - a157203407e1db27b876b9fceacfbf375 - - - dataset - classlibdap_1_1Float64.html - a47521ce321a17e6ce217870cb6a1a7aa - - - deserialize - classlibdap_1_1Float64.html - ac58d25ee3cc87aaa1608322f9fbe5962 - - - deserialize - classlibdap_1_1Float64.html - a7bcd1b10ab54094640b87b25308eed98 - - - dump - classlibdap_1_1Float64.html - af90cf75012ca7573411ac9da4e55cacf - - - element_count - classlibdap_1_1Float64.html - a5c2235737737b482bfa7536b8aeab810 - - - FQN - classlibdap_1_1Float64.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - - - get_attr_table - classlibdap_1_1Float64.html - a1fcd9537c67e3bf88964b2656ff5bac1 - - - get_parent - classlibdap_1_1Float64.html - a3459cdaa239c33ce111ef360d8dc3017 - - - intern_data - classlibdap_1_1Float64.html - a722d33783aa0272d339b0301a4f77e59 - - - intern_data - classlibdap_1_1Float64.html - a1956e6ea90a745516f5372c859173433 - - - is_constructor_type - classlibdap_1_1Float64.html - a8b8490e0047c6da52945699a132008ea - - - is_dap4 - classlibdap_1_1Float64.html - a7f6835cb5e5589ab5dad3fb4813d3bea - - - is_in_selection - classlibdap_1_1Float64.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - - - is_simple_type - classlibdap_1_1Float64.html - aae57e5b270b3a015d40c8db10b9b5549 - - - is_vector_type - classlibdap_1_1Float64.html - a7107c76dbcab71015141142383b6d022 - - - length - classlibdap_1_1Float64.html - aadcda7a659157bc6a832d8a5fb775b3f - - - m_duplicate - classlibdap_1_1Float64.html - a0c55b826c8c5dfe7a454dc670e859a41 - - - name - classlibdap_1_1Float64.html - a24c5d67823b3cff7f4245a993072a142 - - - operator= - classlibdap_1_1Float64.html - a25bbf834d30867b40e55dd284f1b7b30 - - - ops - classlibdap_1_1Float64.html - a32114121abfd8b081b4834fb87dc19ac - - - print_dap4 - classlibdap_1_1Float64.html - afcddbe441380b95c894510c02980b163 - - - print_decl - classlibdap_1_1Float64.html - a2d799fad93255d7f2b803562ae7a5784 - - - print_decl - classlibdap_1_1Float64.html - afd744b0ddeb04e7b173c9e83423ec572 - - - print_val - classlibdap_1_1Float64.html - a83adee2778296322406f557c191cd416 - - - print_val - classlibdap_1_1Float64.html - aa9a669b0fe9efa0d188759a5ace09ab2 - - - print_xml - classlibdap_1_1Float64.html - a825820edee179550cfde3dfd4d274f2a - - - print_xml - classlibdap_1_1Float64.html - a8bd2c7682edd48c64b210bdf247bdef7 - - - print_xml_writer - classlibdap_1_1Float64.html - a11554ff931528b243e9af8173d205b44 - - - ptr_duplicate - classlibdap_1_1Float64.html - af0c3dbeab0fb34e94f99b2dbb577fb16 - - - read - classlibdap_1_1Float64.html - a1da003c53f2e663223f603ab3fbd7c8e - - - read_p - classlibdap_1_1Float64.html - a38ff819a432217c55db2e9071928d20c - - - send_p - classlibdap_1_1Float64.html - a980c0013817836aa77ef74aeec7fb192 - - - serialize - classlibdap_1_1Float64.html - a1d155177c95e19a1d101de3b54ae1acf - - - serialize - classlibdap_1_1Float64.html - ab9180d68989a963df839faf0fab604f8 - - - set_attr_table - classlibdap_1_1Float64.html - a572a1d76a75981abac83a4241e90c0fa - - - set_attributes - classlibdap_1_1Float64.html - ad4dda4cf43dca838d3de183b8e01cd09 - - - set_attributes_nocopy - classlibdap_1_1Float64.html - afd0e5f87d19020f560d5c1ff8dd4d6a3 - - - set_in_selection - classlibdap_1_1Float64.html - a2bc036248cdaf1affac464170f32ad30 - - - set_is_dap4 - classlibdap_1_1Float64.html - abca9ddaa9a1ada8447cbe7193e8e288a - - - set_length - classlibdap_1_1Float64.html - a4fe343c1eeb6fb1d61ab030433651d90 - - - set_name - classlibdap_1_1Float64.html - a86504564f45a3e6748c6f1cc0ff4e9fa - - - set_parent - classlibdap_1_1Float64.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - - - set_read_p - classlibdap_1_1Float64.html - a4533905a450d2a7af32e7d5acd557676 - - - set_send_p - classlibdap_1_1Float64.html - aba7b27635c95b74536de18393133628e - - - set_synthesized_p - classlibdap_1_1Float64.html - a595cb4059cff24f801a1b6da79bd2f9e - - - set_type - classlibdap_1_1Float64.html - af74f8d1ef57c9fcca46f620f75d175a3 - - - set_value - classlibdap_1_1Float64.html - a3633bdb0e786fe6cb6298f7ed00617c3 - - - synthesized_p - classlibdap_1_1Float64.html - ae64e677da27249473cdba0b60cdbb90a - - - toString - classlibdap_1_1Float64.html - a701eb3361f5b5628329ece019cd34519 - - - transfer_attributes - classlibdap_1_1Float64.html - add8e836c622042a339152a6c31e5bdfb - - - transform_to_dap2 - classlibdap_1_1Float64.html - affec8a11e9cc035d4b1e8fb9a87b2072 - - - transform_to_dap4 - classlibdap_1_1Float64.html - adb03e2e1e40c3c888577c4666831a949 - - - type - classlibdap_1_1Float64.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - - - type_name - classlibdap_1_1Float64.html - a18a42c8ec35cb5b15cd651a4152f8a2c - - - val2buf - classlibdap_1_1Float64.html - a65af2862bce9334100736d2eb400aa7b - - - value - classlibdap_1_1Float64.html - af96b650288179aa3f5fcbcbc215c1721 - - - var - classlibdap_1_1Float64.html - a4dc4fac1bb6083f6db645f37bfd59b85 - - - var - classlibdap_1_1Float64.html - adecfc442b5927c79933c7f71cfe03fd2 - - - width - classlibdap_1_1Float64.html - a1627393eea6b9990f444236e0787774d - - - d_buf - classlibdap_1_1Float64.html - a875d80666ee4e7e4e900fb1cc2423429 - - - d_in_selection - classlibdap_1_1Float64.html - a949a89714965d7afdcd1e3edc8b7f0d4 - - - d_is_synthesized - classlibdap_1_1Float64.html - a629e97e8eb7d285b54c9af8c1ec9a29a - - - - - fpinbuf - classlibdap_1_1fpinbuf.html - - - fpinbuf - classlibdap_1_1fpinbuf.html - afdd1f4682dc010db945a586b593a795a - - - ~fpinbuf - classlibdap_1_1fpinbuf.html - a3c047833a58a99cf540248c68f211cd3 - - - underflow - classlibdap_1_1fpinbuf.html - aaa3e9e18fb090cc4b12849eed3406382 - - - buffer - classlibdap_1_1fpinbuf.html - a351356fca7ed1e3ea96666643ee45a3d - - - close - classlibdap_1_1fpinbuf.html - a1a774d76c5f79ea6a2a659f559a2dba4 - - - fp - classlibdap_1_1fpinbuf.html - acb3897665c697610847729e86d9dd613 - - - - - fpistream - classlibdap_1_1fpistream.html - - - fpistream - classlibdap_1_1fpistream.html - a87b68645511cb36236ba1dc7d552f733 - - - buf - classlibdap_1_1fpistream.html - ab7d4682d3d7715028e3d770e5a13657f - - - - - Grid - classlibdap_1_1Grid.html - - - btp_stack - classlibdap_1_1Grid.html - ae9c6e71855b90a0e552713011c9ab81f - - - Map_citer - classlibdap_1_1Grid.html - ad147322e168c6750893b6913d7f3edc5 - - - Map_iter - classlibdap_1_1Grid.html - a69ee284e8087d1482373989f3256f95d - - - Map_riter - classlibdap_1_1Grid.html - a1c1791bdfac09f6ec42a71089fdccc75 - - - Vars_citer - classlibdap_1_1Grid.html - a5a585c58a099833c4ca26561963e0f83 - - - Vars_iter - classlibdap_1_1Grid.html - a2b73df890f61ebb628359c8fd12839b0 - - - Vars_riter - classlibdap_1_1Grid.html - a6122400e3f40d457751fb0372a650d03 - - - Grid - classlibdap_1_1Grid.html - a75774a8fe1c7c7ec9a1e48a7d6d2cbc0 - - - Grid - classlibdap_1_1Grid.html - adec10faa3280dde1bee9c1bf2eda9038 - - - Grid - classlibdap_1_1Grid.html - ad9c190d610f40faee6165467f554fb9a - - - ~Grid - classlibdap_1_1Grid.html - a6a81c2fe6689b4159d7ea9e6eb8f5e78 - - - add_map - classlibdap_1_1Grid.html - ad24067d02100d7ad77053d2fd9cac680 - - - add_var - classlibdap_1_1Grid.html - ae8356b6e1b8c6c67718bb9bfefd9f7e8 - - - add_var_nocopy - classlibdap_1_1Grid.html - afa0b5bb14fec2675e7fd7da245e95ca1 - - - array_var - classlibdap_1_1Grid.html - a13f73ec1242460db6be3b7a818c8328f - - - attributes - classlibdap_1_1Grid.html - a97452f06d2188eb838399a709246b5e9 - - - buf2val - classlibdap_1_1Grid.html - ac4dc7e8099322b5b403a7d0ae9079006 - - - check_semantics - classlibdap_1_1Grid.html - ae66a262518b81ff354061528654fae75 - - - clear_constraint - classlibdap_1_1Grid.html - a3b7ce41c5ab7b86bdb30508d39127600 - - - clear_local_data - classlibdap_1_1Grid.html - aaddb97a4efbe035f41deaf03c6e8683f - - - components - classlibdap_1_1Grid.html - ad26dc472b37af0abeb540a43fb04d8dc - - - compute_checksum - classlibdap_1_1Grid.html - a287ab9a4deb81a8ced6d8432be647925 - - - d4_ops - classlibdap_1_1Grid.html - a512a356f31ed6c4c1a368da0b054408a - - - dataset - classlibdap_1_1Grid.html - a47521ce321a17e6ce217870cb6a1a7aa - - - del_var - classlibdap_1_1Grid.html - af38d3785c4a7cd0063cbb9fc5943333c - - - del_var - classlibdap_1_1Grid.html - a69291878fc48217902fb0dcf1e2e1aff - - - deserialize - classlibdap_1_1Grid.html - a63763d2bae05463b100e823fb461a784 - - - deserialize - classlibdap_1_1Grid.html - a6f4253236d69c3c0ef64343136b5039b - - - dump - classlibdap_1_1Grid.html - acf0402fd88c5ab7d1307615f8597d002 - - - element_count - classlibdap_1_1Grid.html - a1c2eecff00fa7e3af175c711d00fb86e - - - FQN - classlibdap_1_1Grid.html - afa6c06dab830b4e089641b44fea8293c - - - get_array - classlibdap_1_1Grid.html - a905ac86a44a9d8ce576056ba244cf558 - - - get_attr_table - classlibdap_1_1Grid.html - a1fcd9537c67e3bf88964b2656ff5bac1 - - - get_map_iter - classlibdap_1_1Grid.html - a30dd7f9fa8a28b4bf6ccd6e94a12b62c - - - get_parent - classlibdap_1_1Grid.html - a3459cdaa239c33ce111ef360d8dc3017 - - - get_var_index - classlibdap_1_1Grid.html - ac2b4b28ed9d6f435129aa599ab809799 - - - get_vars_iter - classlibdap_1_1Grid.html - a1e6d8224e04d75e3d2a21263957cd42f - - - intern_data - classlibdap_1_1Grid.html - a065056826ef9c6fb2d08463af9e15a34 - - - intern_data - classlibdap_1_1Grid.html - a822a036364c56df5288a55670f51197e - - - is_constructor_type - classlibdap_1_1Grid.html - a8b8490e0047c6da52945699a132008ea - - - is_dap2_only_type - classlibdap_1_1Grid.html - afef375f10211131b5fbea773b0011e5c - - - is_dap4 - classlibdap_1_1Grid.html - a7f6835cb5e5589ab5dad3fb4813d3bea - - - is_in_selection - classlibdap_1_1Grid.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - - - is_linear - classlibdap_1_1Grid.html - af26f89e9c0732a9c32bd5e15d716a7d7 - - - is_simple_type - classlibdap_1_1Grid.html - aae57e5b270b3a015d40c8db10b9b5549 - - - is_vector_type - classlibdap_1_1Grid.html - a7107c76dbcab71015141142383b6d022 - - - length - classlibdap_1_1Grid.html - aadcda7a659157bc6a832d8a5fb775b3f - - - m_duplicate - classlibdap_1_1Grid.html - a88b282d06686fc88a74c91e289ef31d7 - - - m_duplicate - classlibdap_1_1Grid.html - a86b8fa7bc7a3aa88985f2c151e502ec8 - - - m_duplicate - classlibdap_1_1Grid.html - a0c55b826c8c5dfe7a454dc670e859a41 - - - m_exact_match - classlibdap_1_1Grid.html - aa5cd6124619d35e81bcfd426f1e569d3 - - - m_leaf_match - classlibdap_1_1Grid.html - a8fe3863a609488f4d5125abea96b82ed - - - map_begin - classlibdap_1_1Grid.html - a2e9d2e436c0ff138a977dbba54c018eb - - - map_end - classlibdap_1_1Grid.html - aaebbf2a5329ec01b6527b4bafde87837 - - - map_rbegin - classlibdap_1_1Grid.html - afdddc12f67c7f4f6bb6c78d55a2f75b2 - - - map_rend - classlibdap_1_1Grid.html - ab821c8beb7c653ce38842fcb27d644ca - - - name - classlibdap_1_1Grid.html - a24c5d67823b3cff7f4245a993072a142 - - - operator= - classlibdap_1_1Grid.html - aecf55730764a11b15858bb94b5a56988 - - - ops - classlibdap_1_1Grid.html - a8a0000be2a244e3e07abda3020af8800 - - - prepend_map - classlibdap_1_1Grid.html - a5a39d31cad6c5a9437bc07b696bb8db4 - - - print_dap4 - classlibdap_1_1Grid.html - a0f130e129b06773a9f3c94e3b492bb5c - - - print_decl - classlibdap_1_1Grid.html - a5a239b053928636e13e3a478faf8e334 - - - print_decl - classlibdap_1_1Grid.html - a1c0bcf75f8474ef140d133f47a78ed67 - - - print_val - classlibdap_1_1Grid.html - a5322f6b5ce04e5d00347bf50b341f4e6 - - - print_val - classlibdap_1_1Grid.html - abc90f12653afefe765bea1917dcecc08 - - - print_xml - classlibdap_1_1Grid.html - a29d53347639f843c164f19e3a3f19b7d - - - print_xml - classlibdap_1_1Grid.html - a7e55419705f8a64c5d86f3b0a236709e - - - print_xml_writer - classlibdap_1_1Grid.html - adb96de26565e6498cb0e8df6789a9f1c - - - projection_yields_grid - classlibdap_1_1Grid.html - aa737cef63a1b9c8b8b0952fcb22a621b - - - ptr_duplicate - classlibdap_1_1Grid.html - a0c4a5aefa252d3eab94b8a0ce5232dc6 - - - read - classlibdap_1_1Grid.html - ad0af40e2565972fa44985d173370c264 - - - read_p - classlibdap_1_1Grid.html - a38ff819a432217c55db2e9071928d20c - - - send_p - classlibdap_1_1Grid.html - a980c0013817836aa77ef74aeec7fb192 - - - serialize - classlibdap_1_1Grid.html - a64268840654a0b37a15ccc601dbcfd33 - - - serialize - classlibdap_1_1Grid.html - ab868fe97d5075b702bd084c2e9540913 - - - set_array - classlibdap_1_1Grid.html - a35412b1401ff8795504af40be6d09aa1 - - - set_attr_table - classlibdap_1_1Grid.html - a572a1d76a75981abac83a4241e90c0fa - - - set_attributes - classlibdap_1_1Grid.html - ad4dda4cf43dca838d3de183b8e01cd09 - - - set_attributes_nocopy - classlibdap_1_1Grid.html - afd0e5f87d19020f560d5c1ff8dd4d6a3 - - - set_in_selection - classlibdap_1_1Grid.html - ac30becb1ffe7d2cd4cbcd24fc216c9a3 - - - set_is_dap4 - classlibdap_1_1Grid.html - abca9ddaa9a1ada8447cbe7193e8e288a - - - set_length - classlibdap_1_1Grid.html - a4fe343c1eeb6fb1d61ab030433651d90 - - - set_name - classlibdap_1_1Grid.html - a86504564f45a3e6748c6f1cc0ff4e9fa - - - set_parent - classlibdap_1_1Grid.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - - - set_read_p - classlibdap_1_1Grid.html - af52e60d8589eed1a18a14e9c6a57db65 - - - set_send_p - classlibdap_1_1Grid.html - aafbcf9bef6719fe60ac707e02956e09d - - - set_synthesized_p - classlibdap_1_1Grid.html - a595cb4059cff24f801a1b6da79bd2f9e - - - set_type - classlibdap_1_1Grid.html - af74f8d1ef57c9fcca46f620f75d175a3 - - - synthesized_p - classlibdap_1_1Grid.html - ae64e677da27249473cdba0b60cdbb90a - - - toString - classlibdap_1_1Grid.html - a701eb3361f5b5628329ece019cd34519 - - - transfer_attributes - classlibdap_1_1Grid.html - a9483bb65505c86e3fc44a9b856a55323 - - - transform_to_dap2 - classlibdap_1_1Grid.html - affec8a11e9cc035d4b1e8fb9a87b2072 - - - transform_to_dap4 - classlibdap_1_1Grid.html - a160c21980788f0b732f2562feff971ef - - - type - classlibdap_1_1Grid.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - - - type_name - classlibdap_1_1Grid.html - a18a42c8ec35cb5b15cd651a4152f8a2c - - - val2buf - classlibdap_1_1Grid.html - ac742b1bf93889e541128b1d123821ee6 - - - var - classlibdap_1_1Grid.html - a36a7412da7b5257d7666add726fea1a6 - - - var - classlibdap_1_1Grid.html - a68f1779dc328f890062722d90fad084a - - - var_begin - classlibdap_1_1Grid.html - adeafe3d6c82d07b456a598a7b446c2c6 - - - var_end - classlibdap_1_1Grid.html - a936b38c7c35ffb4fe17c5b8e85bdaaa2 - - - var_rbegin - classlibdap_1_1Grid.html - aa025cf546ca35250454653c1ec684d91 - - - var_rend - classlibdap_1_1Grid.html - aede7cf5889e101db1ea8f22c3a84a5d3 - - - width - classlibdap_1_1Grid.html - a0b1e3ae7195f95c42ca98f42826a1ff5 - - - d_in_selection - classlibdap_1_1Grid.html - a949a89714965d7afdcd1e3edc8b7f0d4 - - - d_is_synthesized - classlibdap_1_1Grid.html - a629e97e8eb7d285b54c9af8c1ec9a29a - - - d_vars - classlibdap_1_1Grid.html - a75b2aa694dc76294d6aa5f7456e49aa2 - - - - - HTTPCache - classlibdap_1_1HTTPCache.html - - - ~HTTPCache - classlibdap_1_1HTTPCache.html - ac8fcde4b345c50bad6c3507dcbd2f447 - - - cache_response - classlibdap_1_1HTTPCache.html - a0cbaded239e55f3e328448adcc180365 - - - get_always_validate - classlibdap_1_1HTTPCache.html - a95f59f69a7ca0c9104748e5a7cb07101 - - - get_cache_control - classlibdap_1_1HTTPCache.html - a15d15a90105d60b0d743fc90456d223e - - - get_cache_disconnected - classlibdap_1_1HTTPCache.html - a0745589ca1ed117b11efc52765a25b7e - - - get_cache_root - classlibdap_1_1HTTPCache.html - a2c872a03a4065237cf384f778cceb126 - - - get_cached_response - classlibdap_1_1HTTPCache.html - aefcbe732444c6160c839b9e2c3468b1d - - - get_cached_response - classlibdap_1_1HTTPCache.html - a151026836e9f397857dd76aa080ddfef - - - get_cached_response - classlibdap_1_1HTTPCache.html - a6f3bbb3dc0b1e85f32e2291006ff858e - - - get_conditional_request_headers - classlibdap_1_1HTTPCache.html - a635a277480a95d7d37d0e9fddd480362 - - - get_default_expiration - classlibdap_1_1HTTPCache.html - a9b03792f717b8d584e782d6797a1b331 - - - get_max_entry_size - classlibdap_1_1HTTPCache.html - a66ec8c722b1c82124e697916b73036fe - - - get_max_size - classlibdap_1_1HTTPCache.html - a7e89f36cc369c826aa6cd414adc06393 - - - is_cache_enabled - classlibdap_1_1HTTPCache.html - af9960970163436617a8753f95866c5a9 - - - is_expire_ignored - classlibdap_1_1HTTPCache.html - aba172e9218a416213aa1d9f54e59e669 - - - is_url_valid - classlibdap_1_1HTTPCache.html - aa695d43815cc2588458232f37095b780 - - - lock_cache_interface - classlibdap_1_1HTTPCache.html - a71ed87540113c4403a33bb436d3f8b9c - - - purge_cache - classlibdap_1_1HTTPCache.html - afee7fca59d1a37f495ea74c95fad600a - - - release_cached_response - classlibdap_1_1HTTPCache.html - a4de0458e4ab0e89049a0f0fa7b819b91 - - - set_always_validate - classlibdap_1_1HTTPCache.html - aa9a13a18ec837e891e81823a4d30da47 - - - set_cache_control - classlibdap_1_1HTTPCache.html - ac6823b2de27745c20c7e8d41af5a2088 - - - set_cache_disconnected - classlibdap_1_1HTTPCache.html - a44857ae03334d09e34cc5b2275669a71 - - - set_cache_enabled - classlibdap_1_1HTTPCache.html - a71aa835c2b38bc0e891f40b5a77c53ce - - - set_default_expiration - classlibdap_1_1HTTPCache.html - a1ca5c8c205241f62596e283943906386 - - - set_expire_ignored - classlibdap_1_1HTTPCache.html - a1a8c5f13e82c3038e97eca9979ebd39c - - - set_max_entry_size - classlibdap_1_1HTTPCache.html - a92cc5b035dc08ae2704924002144fa29 - - - set_max_size - classlibdap_1_1HTTPCache.html - ab2447c27c88ebb29511379ede8ac5b6f - - - unlock_cache_interface - classlibdap_1_1HTTPCache.html - a5b6a28e17912e87389260f7695fdf876 - - - update_response - classlibdap_1_1HTTPCache.html - ab0b1e3fb63084b93e277c53d189ad6c2 - - - HTTPCacheInterruptHandler - classlibdap_1_1HTTPCache.html - a99997995a5158687260499f88ea57f36 - - - HTTPCacheTest - classlibdap_1_1HTTPCache.html - a76bd6ce419aad54c8c87e993f5bd11c9 - - - HTTPConnectTest - classlibdap_1_1HTTPCache.html - a9aed79b4a282abc0feb24f3e28234f13 - - - - - HTTPCacheInterruptHandler - classlibdap_1_1HTTPCacheInterruptHandler.html - - - HTTPCacheInterruptHandler - classlibdap_1_1HTTPCacheInterruptHandler.html - ab8c290e6df3e6ce64b1e93037ba1ee6b - - - ~HTTPCacheInterruptHandler - classlibdap_1_1HTTPCacheInterruptHandler.html - a8a673024265a0c273c4aa2411b6890e2 - - - handle_signal - classlibdap_1_1HTTPCacheInterruptHandler.html - a61f19f17f5da4f50969494b6f24cdfc7 - - - - - HTTPCacheResponse - classlibdap_1_1HTTPCacheResponse.html - - - HTTPCacheResponse - classlibdap_1_1HTTPCacheResponse.html - a3ef35c42f312c9d2b1316d5ca7773400 - - - HTTPCacheResponse - classlibdap_1_1HTTPCacheResponse.html - a2ac39b915210c7bf3907de5d92066c47 - - - HTTPCacheResponse - classlibdap_1_1HTTPCacheResponse.html - a98dcff76b943f4da0d1a54e43e119938 - - - HTTPCacheResponse - classlibdap_1_1HTTPCacheResponse.html - a319dc8cc6540adbc5c53154ab706cf33 - - - ~HTTPCacheResponse - classlibdap_1_1HTTPCacheResponse.html - a3f42de3899515f12b97f20233901d6c7 - - - get_cpp_stream - classlibdap_1_1HTTPCacheResponse.html - a0e9f20410cc36e2bd9f427840b7be3e1 - - - get_file - classlibdap_1_1HTTPCacheResponse.html - a445f06e173d3112bf4db050946c30fe9 - - - get_headers - classlibdap_1_1HTTPCacheResponse.html - a14d0202b95a11038b4b5283691fb2f9d - - - get_protocol - classlibdap_1_1HTTPCacheResponse.html - a2a6b775e5fa6265fc9ac4f9c576e815c - - - get_status - classlibdap_1_1HTTPCacheResponse.html - a1cba94a4d25c344985f5182a54e789b8 - - - get_stream - classlibdap_1_1HTTPCacheResponse.html - ad90b4fce34ae4d8c0b806c6424213b28 - - - get_type - classlibdap_1_1HTTPCacheResponse.html - ae39b13938ed524bbf14807c8a35b31cc - - - get_version - classlibdap_1_1HTTPCacheResponse.html - afe78405b68946981c4b2d4e8cd305651 - - - operator= - classlibdap_1_1HTTPCacheResponse.html - a5d46d8d674d8c19d3b9ff0962c138176 - - - set_cpp_stream - classlibdap_1_1HTTPCacheResponse.html - a4f4ff88c4b09e011d285f633a6b6aba0 - - - set_file - classlibdap_1_1HTTPCacheResponse.html - a98b820cc398d3adc65731be4c2350f3e - - - set_headers - classlibdap_1_1HTTPCacheResponse.html - a553706aaed4202ada58e49ab2eb1bf05 - - - set_protocol - classlibdap_1_1HTTPCacheResponse.html - aeeab3df1376b578b865c313dfe7b26ee - - - set_status - classlibdap_1_1HTTPCacheResponse.html - a3de0ea86ac433904efdc0e4f4c86fa26 - - - set_stream - classlibdap_1_1HTTPCacheResponse.html - a5cda40501a3ce7b1675b13a6e0858020 - - - set_type - classlibdap_1_1HTTPCacheResponse.html - a7a7807d0a45dd1f6111987f054956e24 - - - set_version - classlibdap_1_1HTTPCacheResponse.html - a0eb078feca514d7d1f8428d9c001f262 - - - transform_to_cpp - classlibdap_1_1HTTPCacheResponse.html - aeb73ee749ec7e6f6b26b8a9985485184 - - - - - HTTPCacheTable - classlibdap_1_1HTTPCacheTable.html - - - CacheEntry - structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html - - - CacheEntry - structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html - afde4845d8168a3f81dd039439882014d - - - CacheEntry - structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html - a7beadf359df8d7abae1660f24ab3c92e - - - get_cachename - structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html - a78b388e7b644a3548a7d548550603fd9 - - - get_corrected_initial_age - structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html - a83412eeb15ec59d73b2407943d0a4a04 - - - get_etag - structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html - a6c442bb2e75458b0221fdc0e33a1b987 - - - get_expires - structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html - ad6c75b405f431deafaba0ce949e514bc - - - get_freshness_lifetime - structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html - a59da6c588993d40d2829a90cc0c67f1a - - - get_lm - structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html - a45a937fc7a01fe7b9eff6ed71234ae90 - - - get_max_age - structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html - a15c27c48f367f79bded48569b4d12351 - - - get_must_revalidate - structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html - ad654840f637bcaf7232ccf851469daba - - - get_response_time - structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html - a7002294360aa52d1dd86dedca57c7e6d - - - is_no_cache - structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html - ac58af16f8cfb31f08020d64ca1914407 - - - lock_read_response - structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html - a95089334635e3f0116257bb62c329395 - - - lock_write_response - structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html - a127f19c06a5f0d2da8b55e4d0d175ae2 - - - set_no_cache - structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html - a112b8ac8aa541ca9a06af7de4d80fc03 - - - set_size - structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html - a6711b2f4b3ebc87f2f6b87da87d0f44b - - - unlock_read_response - structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html - ae2db6d25b27dd657dd0a2ef553e28246 - - - unlock_write_response - structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html - a0cddc0fbf4569c5e323e79c5ec098c22 - - - DeleteByHits - structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html - ac472190ef1064a54cdd7ce172a30c57d - - - DeleteBySize - structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html - ae50b4ed6c2560ac5bce0f837c1c29f8a - - - DeleteCacheEntry - structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html - a7ed7618e87371b669cb062d8315022b6 - - - DeleteExpired - structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html - a2084b474fcedc349564e2ad51420c464 - - - HTTPCacheTable - structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html - a10b3dd04aa2ab3de230f8102d4293d17 - - - HTTPCacheTest - structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html - a76bd6ce419aad54c8c87e993f5bd11c9 - - - WriteOneCacheEntry - structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html - ac86f22df4e25865ad192898454e22534 - - - - - CacheEntries - classlibdap_1_1HTTPCacheTable.html - a36425575bbfac384964ce2f364f15679 - - - CacheEntriesIter - classlibdap_1_1HTTPCacheTable.html - a8527d6a5b1e720e2d500e1ec1eeecf9f - - - CacheTable - classlibdap_1_1HTTPCacheTable.html - aa8e43995c010ac4fae6ca8cc13395930 - - - HTTPCacheTable - classlibdap_1_1HTTPCacheTable.html - a03e241526025dfaeb2662f7c15ce1d17 - - - ~HTTPCacheTable - classlibdap_1_1HTTPCacheTable.html - a78d0655261edb7f9ff0b2d61b7f97917 - - - add_entry_to_cache_table - classlibdap_1_1HTTPCacheTable.html - a8f5660848048a98454fce23c28de573c - - - bind_entry_to_data - classlibdap_1_1HTTPCacheTable.html - a24b2c86910ba623a59184ab42410b4cb - - - cache_index_delete - classlibdap_1_1HTTPCacheTable.html - a3e636690b069b3384e908135fcaebd51 - - - cache_index_parse_line - classlibdap_1_1HTTPCacheTable.html - a48569affedb01e6e0e87343bcc621c0a - - - cache_index_read - classlibdap_1_1HTTPCacheTable.html - a24e70dae002ffeef9641bb6493109513 - - - cache_index_write - classlibdap_1_1HTTPCacheTable.html - a7cd5a3a24fd0cd41ac0d9a3192075e9c - - - calculate_time - classlibdap_1_1HTTPCacheTable.html - a0ca63c76e70064549d128ff8f5951534 - - - create_hash_directory - classlibdap_1_1HTTPCacheTable.html - a0f7f6193848fb3ba8ad17082fd95b6c6 - - - create_location - classlibdap_1_1HTTPCacheTable.html - a0ab52cb3d5d01575977adb33a21b31d2 - - - delete_all_entries - classlibdap_1_1HTTPCacheTable.html - ad02f9346125f4c311d6e74b6a8354f9e - - - delete_by_hits - classlibdap_1_1HTTPCacheTable.html - a51707b1b5533c2d06e57dc52a0ea90b2 - - - delete_by_size - classlibdap_1_1HTTPCacheTable.html - a04655ab9af621a261420ed8af681cf80 - - - delete_expired_entries - classlibdap_1_1HTTPCacheTable.html - a107d8cc87728a855eaa18210b90c09d5 - - - get_block_size - classlibdap_1_1HTTPCacheTable.html - a3c7c90f1c20eb4b8bc2e8f056be5ad50 - - - get_cache_root - classlibdap_1_1HTTPCacheTable.html - a86f13e699f533ebdfd4e7ca3ef83401d - - - get_current_size - classlibdap_1_1HTTPCacheTable.html - acafa29f363fd70558e3719b34178fe2d - - - get_locked_entry_from_cache_table - classlibdap_1_1HTTPCacheTable.html - ac8c8e58c208b8c542b89f500829032a0 - - - get_new_entries - classlibdap_1_1HTTPCacheTable.html - aade9a27801741f7c01d62b9ae22f25ae - - - get_write_locked_entry_from_cache_table - classlibdap_1_1HTTPCacheTable.html - a57c01c8b9462f0e0ea6541b7d9fcf2f5 - - - increment_new_entries - classlibdap_1_1HTTPCacheTable.html - af17bd7a96186412f3ef53caed42db767 - - - is_locked_read_responses - classlibdap_1_1HTTPCacheTable.html - afc2ef03d687c3db809e2bfbc3bca3bd3 - - - parse_headers - classlibdap_1_1HTTPCacheTable.html - a53379f3151fe6b85e85c75c401a14963 - - - remove_cache_entry - classlibdap_1_1HTTPCacheTable.html - a85d4438820f0920002f5e77b51900ea9 - - - remove_entry_from_cache_table - classlibdap_1_1HTTPCacheTable.html - ad1b8ffd257ff335b3d87b90600f5bffd - - - set_block_size - classlibdap_1_1HTTPCacheTable.html - a3ffe278c93c2d3a0dc2f180fefc6ae3c - - - set_cache_root - classlibdap_1_1HTTPCacheTable.html - a9e6fada9e04ddcf835160780222e9a43 - - - set_current_size - classlibdap_1_1HTTPCacheTable.html - abf4e75cf192355d7c7bfcf9f0e736168 - - - uncouple_entry_from_data - classlibdap_1_1HTTPCacheTable.html - ad0ac242f618a804562e18546738904df - - - HTTPCacheTest - classlibdap_1_1HTTPCacheTable.html - a76bd6ce419aad54c8c87e993f5bd11c9 - - - - - HTTPConnect - classlibdap_1_1HTTPConnect.html - - - HTTPConnect - classlibdap_1_1HTTPConnect.html - a6648957e9aa38739b953e61241fdb162 - - - HTTPConnect - classlibdap_1_1HTTPConnect.html - a510d3277f37839b275aca7f26a82d082 - - - HTTPConnect - classlibdap_1_1HTTPConnect.html - a0b211b1afe685d706c8d0a235f626a5d - - - ~HTTPConnect - classlibdap_1_1HTTPConnect.html - adaecf86117db43a3d4d78971d897252e - - - fetch_url - classlibdap_1_1HTTPConnect.html - a5e3558838e245a96c9392b33ef4ba298 - - - is_cache_enabled - classlibdap_1_1HTTPConnect.html - a1e9a7b25527264a342dbe9c2aff59f2f - - - operator= - classlibdap_1_1HTTPConnect.html - aad5c634ebb6237e8449e76d83abde372 - - - set_accept_deflate - classlibdap_1_1HTTPConnect.html - a01d67a5afa18a84ef744b8f222094260 - - - set_cache_enabled - classlibdap_1_1HTTPConnect.html - aaf200f19c2a64adc4b17887372dcc595 - - - set_cookie_jar - classlibdap_1_1HTTPConnect.html - ac6641c75c291e2908be9caade2eb5547 - - - set_credentials - classlibdap_1_1HTTPConnect.html - a84190d0d80154943ee997c4982a7c96a - - - set_use_cpp_streams - classlibdap_1_1HTTPConnect.html - a7d9988dbd935a1e3df58e7fc358ae476 - - - set_xdap_protocol - classlibdap_1_1HTTPConnect.html - ac232e85c5d2448c66c1a24f62dcbf89a - - - use_cpp_streams - classlibdap_1_1HTTPConnect.html - a365ed606f3976009be1f69d1c99d2318 - - - HTTPConnectTest - classlibdap_1_1HTTPConnect.html - a9aed79b4a282abc0feb24f3e28234f13 - - - ParseHeader - classlibdap_1_1HTTPConnect.html - a6cf7d84a8b4cb42b8503948b6c5973cc - - - save_raw_http_header - classlibdap_1_1HTTPConnect.html - af4392e8b4c78632ef10da4542127388a - - - - - HTTPResponse - classlibdap_1_1HTTPResponse.html - - - HTTPResponse - classlibdap_1_1HTTPResponse.html - ad811b78884b86fe0028c9aa7fe91e63d - - - HTTPResponse - classlibdap_1_1HTTPResponse.html - ab8145e01fcaa440bf7d3d8b0e1f010a9 - - - HTTPResponse - classlibdap_1_1HTTPResponse.html - afcfa13c872457f0f46af2ef8c3d09baa - - - HTTPResponse - classlibdap_1_1HTTPResponse.html - a544c05dec998de91e78c9a517041ac3c - - - ~HTTPResponse - classlibdap_1_1HTTPResponse.html - aaaa8595779b1608ad1727bce9a308341 - - - get_cpp_stream - classlibdap_1_1HTTPResponse.html - a0e9f20410cc36e2bd9f427840b7be3e1 - - - get_file - classlibdap_1_1HTTPResponse.html - a445f06e173d3112bf4db050946c30fe9 - - - get_headers - classlibdap_1_1HTTPResponse.html - a14d0202b95a11038b4b5283691fb2f9d - - - get_protocol - classlibdap_1_1HTTPResponse.html - a2a6b775e5fa6265fc9ac4f9c576e815c - - - get_status - classlibdap_1_1HTTPResponse.html - a1cba94a4d25c344985f5182a54e789b8 - - - get_stream - classlibdap_1_1HTTPResponse.html - ad90b4fce34ae4d8c0b806c6424213b28 - - - get_type - classlibdap_1_1HTTPResponse.html - ae39b13938ed524bbf14807c8a35b31cc - - - get_version - classlibdap_1_1HTTPResponse.html - afe78405b68946981c4b2d4e8cd305651 - - - operator= - classlibdap_1_1HTTPResponse.html - aab2833dfcf4fd409e6ecee928e9faef8 - - - set_cpp_stream - classlibdap_1_1HTTPResponse.html - a4f4ff88c4b09e011d285f633a6b6aba0 - - - set_file - classlibdap_1_1HTTPResponse.html - a98b820cc398d3adc65731be4c2350f3e - - - set_headers - classlibdap_1_1HTTPResponse.html - a553706aaed4202ada58e49ab2eb1bf05 - - - set_protocol - classlibdap_1_1HTTPResponse.html - aeeab3df1376b578b865c313dfe7b26ee - - - set_status - classlibdap_1_1HTTPResponse.html - a3de0ea86ac433904efdc0e4f4c86fa26 - - - set_stream - classlibdap_1_1HTTPResponse.html - a5cda40501a3ce7b1675b13a6e0858020 - - - set_type - classlibdap_1_1HTTPResponse.html - a7a7807d0a45dd1f6111987f054956e24 - - - set_version - classlibdap_1_1HTTPResponse.html - a0eb078feca514d7d1f8428d9c001f262 - - - transform_to_cpp - classlibdap_1_1HTTPResponse.html - aeb73ee749ec7e6f6b26b8a9985485184 - - - - - Int16 - classlibdap_1_1Int16.html - - - btp_stack - classlibdap_1_1Int16.html - ae9c6e71855b90a0e552713011c9ab81f - - - Int16 - classlibdap_1_1Int16.html - a8221f1fa8aaf054c72059a48e5ec2753 - - - Int16 - classlibdap_1_1Int16.html - a40e5dd3ede0dce7a1b15320358519d6f - - - ~Int16 - classlibdap_1_1Int16.html - a6c6285fb38705f00e8b766e5edc17923 - - - Int16 - classlibdap_1_1Int16.html - a89761a72409722d72d5186d9aea825e0 - - - add_var - classlibdap_1_1Int16.html - adca3c2621c4a509537c18362005d7f7f - - - add_var_nocopy - classlibdap_1_1Int16.html - aa1192360cea4dc516c822cd3e13dc723 - - - attributes - classlibdap_1_1Int16.html - a97452f06d2188eb838399a709246b5e9 - - - buf2val - classlibdap_1_1Int16.html - a7b1983c756a0c27942fc2a7563bb5d2e - - - check_semantics - classlibdap_1_1Int16.html - aec503abec2fd3090e7738c0a575491f8 - - - clear_local_data - classlibdap_1_1Int16.html - aaddb97a4efbe035f41deaf03c6e8683f - - - compute_checksum - classlibdap_1_1Int16.html - aa413c9da6c53e3bc7a7c3e727b139941 - - - d4_ops - classlibdap_1_1Int16.html - ae02bd87bfcc0479c36c1e6b625e0fcdc - - - dataset - classlibdap_1_1Int16.html - a47521ce321a17e6ce217870cb6a1a7aa - - - deserialize - classlibdap_1_1Int16.html - a2f5bf801ac701d4b886c22abd75794df - - - deserialize - classlibdap_1_1Int16.html - a0f454a350731ba04f593466e6c45551e - - - dump - classlibdap_1_1Int16.html - a39829155a76b195e6a9c62e06d50bc0f - - - element_count - classlibdap_1_1Int16.html - a5c2235737737b482bfa7536b8aeab810 - - - FQN - classlibdap_1_1Int16.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - - - get_attr_table - classlibdap_1_1Int16.html - a1fcd9537c67e3bf88964b2656ff5bac1 - - - get_parent - classlibdap_1_1Int16.html - a3459cdaa239c33ce111ef360d8dc3017 - - - intern_data - classlibdap_1_1Int16.html - a722d33783aa0272d339b0301a4f77e59 - - - intern_data - classlibdap_1_1Int16.html - a1956e6ea90a745516f5372c859173433 - - - is_constructor_type - classlibdap_1_1Int16.html - a8b8490e0047c6da52945699a132008ea - - - is_dap4 - classlibdap_1_1Int16.html - a7f6835cb5e5589ab5dad3fb4813d3bea - - - is_in_selection - classlibdap_1_1Int16.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - - - is_simple_type - classlibdap_1_1Int16.html - aae57e5b270b3a015d40c8db10b9b5549 - - - is_vector_type - classlibdap_1_1Int16.html - a7107c76dbcab71015141142383b6d022 - - - length - classlibdap_1_1Int16.html - aadcda7a659157bc6a832d8a5fb775b3f - - - m_duplicate - classlibdap_1_1Int16.html - a0c55b826c8c5dfe7a454dc670e859a41 - - - name - classlibdap_1_1Int16.html - a24c5d67823b3cff7f4245a993072a142 - - - operator= - classlibdap_1_1Int16.html - a68375240267e7ab5324bd77cf86379d8 - - - ops - classlibdap_1_1Int16.html - ad72c7db64b35bf1e8ad8aa7e27526cb9 - - - print_dap4 - classlibdap_1_1Int16.html - afcddbe441380b95c894510c02980b163 - - - print_decl - classlibdap_1_1Int16.html - a2d799fad93255d7f2b803562ae7a5784 - - - print_decl - classlibdap_1_1Int16.html - afd744b0ddeb04e7b173c9e83423ec572 - - - print_val - classlibdap_1_1Int16.html - a172f4ff5eb67a2e64c918700406a5f4f - - - print_val - classlibdap_1_1Int16.html - ac60b82349f40d252114773c7f6361aaf - - - print_xml - classlibdap_1_1Int16.html - a825820edee179550cfde3dfd4d274f2a - - - print_xml - classlibdap_1_1Int16.html - a8bd2c7682edd48c64b210bdf247bdef7 - - - print_xml_writer - classlibdap_1_1Int16.html - a11554ff931528b243e9af8173d205b44 - - - ptr_duplicate - classlibdap_1_1Int16.html - a2deba43131c5ca63ae81f4f7449b6327 - - - read - classlibdap_1_1Int16.html - a1da003c53f2e663223f603ab3fbd7c8e - - - read_p - classlibdap_1_1Int16.html - a38ff819a432217c55db2e9071928d20c - - - send_p - classlibdap_1_1Int16.html - a980c0013817836aa77ef74aeec7fb192 - - - serialize - classlibdap_1_1Int16.html - a3c6904ab6d9679c194c6519dde592892 - - - serialize - classlibdap_1_1Int16.html - afa863cbbe21b125528965176b3e8498f - - - set_attr_table - classlibdap_1_1Int16.html - a572a1d76a75981abac83a4241e90c0fa - - - set_attributes - classlibdap_1_1Int16.html - ad4dda4cf43dca838d3de183b8e01cd09 - - - set_attributes_nocopy - classlibdap_1_1Int16.html - afd0e5f87d19020f560d5c1ff8dd4d6a3 - - - set_in_selection - classlibdap_1_1Int16.html - a2bc036248cdaf1affac464170f32ad30 - - - set_is_dap4 - classlibdap_1_1Int16.html - abca9ddaa9a1ada8447cbe7193e8e288a - - - set_length - classlibdap_1_1Int16.html - a4fe343c1eeb6fb1d61ab030433651d90 - - - set_name - classlibdap_1_1Int16.html - a86504564f45a3e6748c6f1cc0ff4e9fa - - - set_parent - classlibdap_1_1Int16.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - - - set_read_p - classlibdap_1_1Int16.html - a4533905a450d2a7af32e7d5acd557676 - - - set_send_p - classlibdap_1_1Int16.html - aba7b27635c95b74536de18393133628e - - - set_synthesized_p - classlibdap_1_1Int16.html - a595cb4059cff24f801a1b6da79bd2f9e - - - set_type - classlibdap_1_1Int16.html - af74f8d1ef57c9fcca46f620f75d175a3 - - - set_value - classlibdap_1_1Int16.html - acc13cb757d7ba3da5422935105f46cdd - - - synthesized_p - classlibdap_1_1Int16.html - ae64e677da27249473cdba0b60cdbb90a - - - toString - classlibdap_1_1Int16.html - a701eb3361f5b5628329ece019cd34519 - - - transfer_attributes - classlibdap_1_1Int16.html - add8e836c622042a339152a6c31e5bdfb - - - transform_to_dap2 - classlibdap_1_1Int16.html - affec8a11e9cc035d4b1e8fb9a87b2072 - - - transform_to_dap4 - classlibdap_1_1Int16.html - adb03e2e1e40c3c888577c4666831a949 - - - type - classlibdap_1_1Int16.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - - - type_name - classlibdap_1_1Int16.html - a18a42c8ec35cb5b15cd651a4152f8a2c - - - val2buf - classlibdap_1_1Int16.html - ab2c9d7ed6f92e1dbdb08b179943bab4f - - - value - classlibdap_1_1Int16.html - a645d9c79731e1fde18fa662aaa2f456c - - - var - classlibdap_1_1Int16.html - a4dc4fac1bb6083f6db645f37bfd59b85 - - - var - classlibdap_1_1Int16.html - adecfc442b5927c79933c7f71cfe03fd2 - - - width - classlibdap_1_1Int16.html - a4999690c9bc6d0fa42138e10ee33cb4f - - - d_buf - classlibdap_1_1Int16.html - a796017764317567e0e620880ca656bb3 - - - d_in_selection - classlibdap_1_1Int16.html - a949a89714965d7afdcd1e3edc8b7f0d4 - - - d_is_synthesized - classlibdap_1_1Int16.html - a629e97e8eb7d285b54c9af8c1ec9a29a - - - - - Int32 - classlibdap_1_1Int32.html - - - btp_stack - classlibdap_1_1Int32.html - ae9c6e71855b90a0e552713011c9ab81f - - - Int32 - classlibdap_1_1Int32.html - aca0a0d84a219e98c4ebbd7afda49af26 - - - Int32 - classlibdap_1_1Int32.html - aa965395a50cee7277d9773f762a9c205 - - - Int32 - classlibdap_1_1Int32.html - a8afca7647664422621ee75f1aa13b5df - - - ~Int32 - classlibdap_1_1Int32.html - a7ac41b60930b8ffbf78104d44298512c - - - add_var - classlibdap_1_1Int32.html - adca3c2621c4a509537c18362005d7f7f - - - add_var_nocopy - classlibdap_1_1Int32.html - aa1192360cea4dc516c822cd3e13dc723 - - - attributes - classlibdap_1_1Int32.html - a97452f06d2188eb838399a709246b5e9 - - - buf2val - classlibdap_1_1Int32.html - a56e6f9ece856568be871fab239328912 - - - check_semantics - classlibdap_1_1Int32.html - aec503abec2fd3090e7738c0a575491f8 - - - clear_local_data - classlibdap_1_1Int32.html - aaddb97a4efbe035f41deaf03c6e8683f - - - compute_checksum - classlibdap_1_1Int32.html - a64d749e3500405c7f6f0ae194cc0fd69 - - - d4_ops - classlibdap_1_1Int32.html - ab74be58716d8c3e6d26462dff2a9b565 - - - dataset - classlibdap_1_1Int32.html - a47521ce321a17e6ce217870cb6a1a7aa - - - deserialize - classlibdap_1_1Int32.html - aac0c8bdfad94663d57af5f7a571451a4 - - - deserialize - classlibdap_1_1Int32.html - aad1329f624040df27cb880d7e2640a4a - - - dump - classlibdap_1_1Int32.html - aaae2d081b7d4d852854648b37441ed4d - - - element_count - classlibdap_1_1Int32.html - a5c2235737737b482bfa7536b8aeab810 - - - FQN - classlibdap_1_1Int32.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - - - get_attr_table - classlibdap_1_1Int32.html - a1fcd9537c67e3bf88964b2656ff5bac1 - - - get_parent - classlibdap_1_1Int32.html - a3459cdaa239c33ce111ef360d8dc3017 - - - intern_data - classlibdap_1_1Int32.html - a722d33783aa0272d339b0301a4f77e59 - - - intern_data - classlibdap_1_1Int32.html - a1956e6ea90a745516f5372c859173433 - - - is_constructor_type - classlibdap_1_1Int32.html - a8b8490e0047c6da52945699a132008ea - - - is_dap4 - classlibdap_1_1Int32.html - a7f6835cb5e5589ab5dad3fb4813d3bea - - - is_in_selection - classlibdap_1_1Int32.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - - - is_simple_type - classlibdap_1_1Int32.html - aae57e5b270b3a015d40c8db10b9b5549 - - - is_vector_type - classlibdap_1_1Int32.html - a7107c76dbcab71015141142383b6d022 - - - length - classlibdap_1_1Int32.html - aadcda7a659157bc6a832d8a5fb775b3f - - - m_duplicate - classlibdap_1_1Int32.html - a0c55b826c8c5dfe7a454dc670e859a41 - - - name - classlibdap_1_1Int32.html - a24c5d67823b3cff7f4245a993072a142 - - - operator= - classlibdap_1_1Int32.html - a80c3a12adf61bc928a616df9c08ee96c - - - ops - classlibdap_1_1Int32.html - ac319d1cdae57d4fc7bfbd972f2f8d4a1 - - - print_dap4 - classlibdap_1_1Int32.html - afcddbe441380b95c894510c02980b163 - - - print_decl - classlibdap_1_1Int32.html - a2d799fad93255d7f2b803562ae7a5784 - - - print_decl - classlibdap_1_1Int32.html - afd744b0ddeb04e7b173c9e83423ec572 - - - print_val - classlibdap_1_1Int32.html - abd206d26908919c73e932a59d02966ba - - - print_val - classlibdap_1_1Int32.html - ae8cb63e9eb85cbc3e378267670b0aef5 - - - print_xml - classlibdap_1_1Int32.html - a825820edee179550cfde3dfd4d274f2a - - - print_xml - classlibdap_1_1Int32.html - a8bd2c7682edd48c64b210bdf247bdef7 - - - print_xml_writer - classlibdap_1_1Int32.html - a11554ff931528b243e9af8173d205b44 - - - ptr_duplicate - classlibdap_1_1Int32.html - aa7ff77174068c8b33d51d065ed922af4 - - - read - classlibdap_1_1Int32.html - a1da003c53f2e663223f603ab3fbd7c8e - - - read_p - classlibdap_1_1Int32.html - a38ff819a432217c55db2e9071928d20c - - - send_p - classlibdap_1_1Int32.html - a980c0013817836aa77ef74aeec7fb192 - - - serialize - classlibdap_1_1Int32.html - ac769546107e556cfdefa0fb4961711e8 - - - serialize - classlibdap_1_1Int32.html - a8c67aae2fbbbe48c5b6d8049d5af04a2 - - - set_attr_table - classlibdap_1_1Int32.html - a572a1d76a75981abac83a4241e90c0fa - - - set_attributes - classlibdap_1_1Int32.html - ad4dda4cf43dca838d3de183b8e01cd09 - - - set_attributes_nocopy - classlibdap_1_1Int32.html - afd0e5f87d19020f560d5c1ff8dd4d6a3 - - - set_in_selection - classlibdap_1_1Int32.html - a2bc036248cdaf1affac464170f32ad30 - - - set_is_dap4 - classlibdap_1_1Int32.html - abca9ddaa9a1ada8447cbe7193e8e288a - - - set_length - classlibdap_1_1Int32.html - a4fe343c1eeb6fb1d61ab030433651d90 - - - set_name - classlibdap_1_1Int32.html - a86504564f45a3e6748c6f1cc0ff4e9fa - - - set_parent - classlibdap_1_1Int32.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - - - set_read_p - classlibdap_1_1Int32.html - a4533905a450d2a7af32e7d5acd557676 - - - set_send_p - classlibdap_1_1Int32.html - aba7b27635c95b74536de18393133628e - - - set_synthesized_p - classlibdap_1_1Int32.html - a595cb4059cff24f801a1b6da79bd2f9e - - - set_type - classlibdap_1_1Int32.html - af74f8d1ef57c9fcca46f620f75d175a3 - - - set_value - classlibdap_1_1Int32.html - a5268f9af882bbc19ac5dccf2bcb5ea9a - - - synthesized_p - classlibdap_1_1Int32.html - ae64e677da27249473cdba0b60cdbb90a - - - toString - classlibdap_1_1Int32.html - a701eb3361f5b5628329ece019cd34519 - - - transfer_attributes - classlibdap_1_1Int32.html - add8e836c622042a339152a6c31e5bdfb - - - transform_to_dap2 - classlibdap_1_1Int32.html - affec8a11e9cc035d4b1e8fb9a87b2072 - - - transform_to_dap4 - classlibdap_1_1Int32.html - adb03e2e1e40c3c888577c4666831a949 - - - type - classlibdap_1_1Int32.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - - - type_name - classlibdap_1_1Int32.html - a18a42c8ec35cb5b15cd651a4152f8a2c - - - val2buf - classlibdap_1_1Int32.html - a8beb52ecacfe72077489b5687db7b9a4 - - - value - classlibdap_1_1Int32.html - a473e8004d97400c60905fd82e2bc26b7 - - - var - classlibdap_1_1Int32.html - a4dc4fac1bb6083f6db645f37bfd59b85 - - - var - classlibdap_1_1Int32.html - adecfc442b5927c79933c7f71cfe03fd2 - - - width - classlibdap_1_1Int32.html - a38a592e39c59f44933d490373f6fbe7c - - - d_buf - classlibdap_1_1Int32.html - a8081532830cd553bf75b79f8925a5068 - - - d_in_selection - classlibdap_1_1Int32.html - a949a89714965d7afdcd1e3edc8b7f0d4 - - - d_is_synthesized - classlibdap_1_1Int32.html - a629e97e8eb7d285b54c9af8c1ec9a29a - - - - - Int64 - classlibdap_1_1Int64.html - - - btp_stack - classlibdap_1_1Int64.html - ae9c6e71855b90a0e552713011c9ab81f - - - Int64 - classlibdap_1_1Int64.html - a3fb9408eeebf8d532d58f276573aa32e - - - Int64 - classlibdap_1_1Int64.html - a33ab39f101e981b5d097f8f558f3857f - - - Int64 - classlibdap_1_1Int64.html - a1046d1e94c13462b4a911afc0c7f7d24 - - - ~Int64 - classlibdap_1_1Int64.html - a8255c11acaf27befda854fac5fb579a7 - - - add_var - classlibdap_1_1Int64.html - adca3c2621c4a509537c18362005d7f7f - - - add_var_nocopy - classlibdap_1_1Int64.html - aa1192360cea4dc516c822cd3e13dc723 - - - attributes - classlibdap_1_1Int64.html - a97452f06d2188eb838399a709246b5e9 - - - check_semantics - classlibdap_1_1Int64.html - aec503abec2fd3090e7738c0a575491f8 - - - clear_local_data - classlibdap_1_1Int64.html - aaddb97a4efbe035f41deaf03c6e8683f - - - compute_checksum - classlibdap_1_1Int64.html - ab18cb68a6ac3fafc03fa223408fd1108 - - - d4_ops - classlibdap_1_1Int64.html - ac066aff6a587475d50ddd60b3279eb17 - - - dataset - classlibdap_1_1Int64.html - a47521ce321a17e6ce217870cb6a1a7aa - - - deserialize - classlibdap_1_1Int64.html - a8c1a1dddd04b2e892f9efca2058e833d - - - deserialize - classlibdap_1_1Int64.html - a1f27d99250e857efd86ac9db788bbf1b - - - dump - classlibdap_1_1Int64.html - a63ad042799beb2ccf9a902df4e36d1f6 - - - element_count - classlibdap_1_1Int64.html - a5c2235737737b482bfa7536b8aeab810 - - - FQN - classlibdap_1_1Int64.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - - - get_attr_table - classlibdap_1_1Int64.html - a1fcd9537c67e3bf88964b2656ff5bac1 - - - get_parent - classlibdap_1_1Int64.html - a3459cdaa239c33ce111ef360d8dc3017 - - - intern_data - classlibdap_1_1Int64.html - a722d33783aa0272d339b0301a4f77e59 - - - intern_data - classlibdap_1_1Int64.html - a1956e6ea90a745516f5372c859173433 - - - is_constructor_type - classlibdap_1_1Int64.html - a8b8490e0047c6da52945699a132008ea - - - is_dap4 - classlibdap_1_1Int64.html - a7f6835cb5e5589ab5dad3fb4813d3bea - - - is_in_selection - classlibdap_1_1Int64.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - - - is_simple_type - classlibdap_1_1Int64.html - aae57e5b270b3a015d40c8db10b9b5549 - - - is_vector_type - classlibdap_1_1Int64.html - a7107c76dbcab71015141142383b6d022 - - - length - classlibdap_1_1Int64.html - aadcda7a659157bc6a832d8a5fb775b3f - - - m_duplicate - classlibdap_1_1Int64.html - a0c55b826c8c5dfe7a454dc670e859a41 - - - name - classlibdap_1_1Int64.html - a24c5d67823b3cff7f4245a993072a142 - - - operator= - classlibdap_1_1Int64.html - a142cc658ec33613edef79e3df688e5af - - - ops - classlibdap_1_1Int64.html - a80a9bdafa15ee063ad3d387cffe36cf1 - - - print_dap4 - classlibdap_1_1Int64.html - afcddbe441380b95c894510c02980b163 - - - print_decl - classlibdap_1_1Int64.html - a2d799fad93255d7f2b803562ae7a5784 - - - print_decl - classlibdap_1_1Int64.html - afd744b0ddeb04e7b173c9e83423ec572 - - - print_val - classlibdap_1_1Int64.html - a569745a0983529a9e752dc2f221fc45c - - - print_xml - classlibdap_1_1Int64.html - a825820edee179550cfde3dfd4d274f2a - - - print_xml - classlibdap_1_1Int64.html - a8bd2c7682edd48c64b210bdf247bdef7 - - - print_xml_writer - classlibdap_1_1Int64.html - a11554ff931528b243e9af8173d205b44 - - - ptr_duplicate - classlibdap_1_1Int64.html - a5b550206f8c98647d01660f9f2405408 - - - read - classlibdap_1_1Int64.html - a1da003c53f2e663223f603ab3fbd7c8e - - - read_p - classlibdap_1_1Int64.html - a38ff819a432217c55db2e9071928d20c - - - send_p - classlibdap_1_1Int64.html - a980c0013817836aa77ef74aeec7fb192 - - - serialize - classlibdap_1_1Int64.html - a540f4af6a2b78079a9b6d4c9edaa10b7 - - - serialize - classlibdap_1_1Int64.html - adc24a735977e28acb0e6f78667c1dd21 - - - set_attr_table - classlibdap_1_1Int64.html - a572a1d76a75981abac83a4241e90c0fa - - - set_attributes - classlibdap_1_1Int64.html - ad4dda4cf43dca838d3de183b8e01cd09 - - - set_attributes_nocopy - classlibdap_1_1Int64.html - afd0e5f87d19020f560d5c1ff8dd4d6a3 - - - set_in_selection - classlibdap_1_1Int64.html - a2bc036248cdaf1affac464170f32ad30 - - - set_is_dap4 - classlibdap_1_1Int64.html - abca9ddaa9a1ada8447cbe7193e8e288a - - - set_length - classlibdap_1_1Int64.html - a4fe343c1eeb6fb1d61ab030433651d90 - - - set_name - classlibdap_1_1Int64.html - a86504564f45a3e6748c6f1cc0ff4e9fa - - - set_parent - classlibdap_1_1Int64.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - - - set_read_p - classlibdap_1_1Int64.html - a4533905a450d2a7af32e7d5acd557676 - - - set_send_p - classlibdap_1_1Int64.html - aba7b27635c95b74536de18393133628e - - - set_synthesized_p - classlibdap_1_1Int64.html - a595cb4059cff24f801a1b6da79bd2f9e - - - set_type - classlibdap_1_1Int64.html - af74f8d1ef57c9fcca46f620f75d175a3 - - - set_value - classlibdap_1_1Int64.html - a15db735ca24143c3a4f67a2c250eba5e - - - synthesized_p - classlibdap_1_1Int64.html - ae64e677da27249473cdba0b60cdbb90a - - - toString - classlibdap_1_1Int64.html - a701eb3361f5b5628329ece019cd34519 - - - transfer_attributes - classlibdap_1_1Int64.html - add8e836c622042a339152a6c31e5bdfb - - - transform_to_dap2 - classlibdap_1_1Int64.html - ac95e288099ac33fa8a6b0197ef315f08 - - - transform_to_dap4 - classlibdap_1_1Int64.html - adb03e2e1e40c3c888577c4666831a949 - - - type - classlibdap_1_1Int64.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - - - type_name - classlibdap_1_1Int64.html - a18a42c8ec35cb5b15cd651a4152f8a2c - - - value - classlibdap_1_1Int64.html - ac7c2c886f37a5870b667b76f9dac8511 - - - var - classlibdap_1_1Int64.html - a4dc4fac1bb6083f6db645f37bfd59b85 - - - var - classlibdap_1_1Int64.html - adecfc442b5927c79933c7f71cfe03fd2 - - - width - classlibdap_1_1Int64.html - a2f157a10955f9b51973863e4683462d6 - - - d_buf - classlibdap_1_1Int64.html - aedef6b320401ffee13c8f1ea4ca4cf76 - - - d_in_selection - classlibdap_1_1Int64.html - a949a89714965d7afdcd1e3edc8b7f0d4 - - - d_is_synthesized - classlibdap_1_1Int64.html - a629e97e8eb7d285b54c9af8c1ec9a29a - - - - - Int8 - classlibdap_1_1Int8.html - - - btp_stack - classlibdap_1_1Int8.html - ae9c6e71855b90a0e552713011c9ab81f - - - Int8 - classlibdap_1_1Int8.html - a97bcbc8d5851b032caab70db6a8514db - - - Int8 - classlibdap_1_1Int8.html - a916571c6be394d1f30c195094353d4d7 - - - ~Int8 - classlibdap_1_1Int8.html - af8e7f66a8bf65f1f4cea65e17a9705ff - - - Int8 - classlibdap_1_1Int8.html - a9d9b9248272d830d96d7c7018a2e0bb5 - - - add_var - classlibdap_1_1Int8.html - adca3c2621c4a509537c18362005d7f7f - - - add_var_nocopy - classlibdap_1_1Int8.html - aa1192360cea4dc516c822cd3e13dc723 - - - attributes - classlibdap_1_1Int8.html - a97452f06d2188eb838399a709246b5e9 - - - check_semantics - classlibdap_1_1Int8.html - aec503abec2fd3090e7738c0a575491f8 - - - clear_local_data - classlibdap_1_1Int8.html - aaddb97a4efbe035f41deaf03c6e8683f - - - compute_checksum - classlibdap_1_1Int8.html - a3cca62e5feff92761fdaa8f02295c881 - - - d4_ops - classlibdap_1_1Int8.html - aba2aa5b603379c089a2dba07442dfcb9 - - - dataset - classlibdap_1_1Int8.html - a47521ce321a17e6ce217870cb6a1a7aa - - - deserialize - classlibdap_1_1Int8.html - a7afc5e4a5c43f76e37a8dcbd7c39799b - - - deserialize - classlibdap_1_1Int8.html - a1f27d99250e857efd86ac9db788bbf1b - - - dump - classlibdap_1_1Int8.html - a0ccf9a858616fc6e67f6764dade84a9b - - - element_count - classlibdap_1_1Int8.html - a5c2235737737b482bfa7536b8aeab810 - - - FQN - classlibdap_1_1Int8.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - - - get_attr_table - classlibdap_1_1Int8.html - a1fcd9537c67e3bf88964b2656ff5bac1 - - - get_parent - classlibdap_1_1Int8.html - a3459cdaa239c33ce111ef360d8dc3017 - - - intern_data - classlibdap_1_1Int8.html - a722d33783aa0272d339b0301a4f77e59 - - - intern_data - classlibdap_1_1Int8.html - a1956e6ea90a745516f5372c859173433 - - - is_constructor_type - classlibdap_1_1Int8.html - a8b8490e0047c6da52945699a132008ea - - - is_dap4 - classlibdap_1_1Int8.html - a7f6835cb5e5589ab5dad3fb4813d3bea - - - is_in_selection - classlibdap_1_1Int8.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - - - is_simple_type - classlibdap_1_1Int8.html - aae57e5b270b3a015d40c8db10b9b5549 - - - is_vector_type - classlibdap_1_1Int8.html - a7107c76dbcab71015141142383b6d022 - - - length - classlibdap_1_1Int8.html - aadcda7a659157bc6a832d8a5fb775b3f - - - m_duplicate - classlibdap_1_1Int8.html - a0c55b826c8c5dfe7a454dc670e859a41 - - - name - classlibdap_1_1Int8.html - a24c5d67823b3cff7f4245a993072a142 - - - operator= - classlibdap_1_1Int8.html - a90c4b39e43854a1211c6f32463355633 - - - ops - classlibdap_1_1Int8.html - a2d63b4ba6571ce6d2c673fe7f9adb59a - - - print_dap4 - classlibdap_1_1Int8.html - afcddbe441380b95c894510c02980b163 - - - print_decl - classlibdap_1_1Int8.html - a2d799fad93255d7f2b803562ae7a5784 - - - print_decl - classlibdap_1_1Int8.html - afd744b0ddeb04e7b173c9e83423ec572 - - - print_val - classlibdap_1_1Int8.html - a6232678aa95847bee75c063c1175f706 - - - print_xml - classlibdap_1_1Int8.html - a825820edee179550cfde3dfd4d274f2a - - - print_xml - classlibdap_1_1Int8.html - a8bd2c7682edd48c64b210bdf247bdef7 - - - print_xml_writer - classlibdap_1_1Int8.html - a11554ff931528b243e9af8173d205b44 - - - ptr_duplicate - classlibdap_1_1Int8.html - a8c468c88483f4d926bb79c26d6e27c65 - - - read - classlibdap_1_1Int8.html - a1da003c53f2e663223f603ab3fbd7c8e - - - read_p - classlibdap_1_1Int8.html - a38ff819a432217c55db2e9071928d20c - - - send_p - classlibdap_1_1Int8.html - a980c0013817836aa77ef74aeec7fb192 - - - serialize - classlibdap_1_1Int8.html - a9825b8d30a147936f4e69e3db56ae1a6 - - - serialize - classlibdap_1_1Int8.html - adc24a735977e28acb0e6f78667c1dd21 - - - set_attr_table - classlibdap_1_1Int8.html - a572a1d76a75981abac83a4241e90c0fa - - - set_attributes - classlibdap_1_1Int8.html - ad4dda4cf43dca838d3de183b8e01cd09 - - - set_attributes_nocopy - classlibdap_1_1Int8.html - afd0e5f87d19020f560d5c1ff8dd4d6a3 - - - set_in_selection - classlibdap_1_1Int8.html - a2bc036248cdaf1affac464170f32ad30 - - - set_is_dap4 - classlibdap_1_1Int8.html - abca9ddaa9a1ada8447cbe7193e8e288a - - - set_length - classlibdap_1_1Int8.html - a4fe343c1eeb6fb1d61ab030433651d90 - - - set_name - classlibdap_1_1Int8.html - a86504564f45a3e6748c6f1cc0ff4e9fa - - - set_parent - classlibdap_1_1Int8.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - - - set_read_p - classlibdap_1_1Int8.html - a4533905a450d2a7af32e7d5acd557676 - - - set_send_p - classlibdap_1_1Int8.html - aba7b27635c95b74536de18393133628e - - - set_synthesized_p - classlibdap_1_1Int8.html - a595cb4059cff24f801a1b6da79bd2f9e - - - set_type - classlibdap_1_1Int8.html - af74f8d1ef57c9fcca46f620f75d175a3 - - - set_value - classlibdap_1_1Int8.html - a0c8c3539e59f231d33fc60ef6c0e7da9 - - - synthesized_p - classlibdap_1_1Int8.html - ae64e677da27249473cdba0b60cdbb90a - - - toString - classlibdap_1_1Int8.html - a701eb3361f5b5628329ece019cd34519 - - - transfer_attributes - classlibdap_1_1Int8.html - add8e836c622042a339152a6c31e5bdfb - - - transform_to_dap2 - classlibdap_1_1Int8.html - ad27c8597a1c0d8efdca4f0e844ea1ee0 - - - transform_to_dap4 - classlibdap_1_1Int8.html - adb03e2e1e40c3c888577c4666831a949 - - - type - classlibdap_1_1Int8.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - - - type_name - classlibdap_1_1Int8.html - a18a42c8ec35cb5b15cd651a4152f8a2c - - - value - classlibdap_1_1Int8.html - af9e3b82e40c4b00e130f5ce92369884e - - - var - classlibdap_1_1Int8.html - a4dc4fac1bb6083f6db645f37bfd59b85 - - - var - classlibdap_1_1Int8.html - adecfc442b5927c79933c7f71cfe03fd2 - - - width - classlibdap_1_1Int8.html - a377dd97f28aa950ba6ff98ffe0d26808 - - - d_buf - classlibdap_1_1Int8.html - a169bb2e8366ef610671c5a1beee54a87 - - - d_in_selection - classlibdap_1_1Int8.html - a949a89714965d7afdcd1e3edc8b7f0d4 - - - d_is_synthesized - classlibdap_1_1Int8.html - a629e97e8eb7d285b54c9af8c1ec9a29a - - - - - InternalErr - classlibdap_1_1InternalErr.html - - - InternalErr - classlibdap_1_1InternalErr.html - a230ac6033046f6c0d49da403bca191a4 - - - InternalErr - classlibdap_1_1InternalErr.html - aa79be065b91588a473ef9fb9d488d004 - - - InternalErr - classlibdap_1_1InternalErr.html - aec58ae4106a19d656ef8a0fd56f38059 - - - InternalErr - classlibdap_1_1InternalErr.html - a7c3f3492b6bd00b2864dd9777587bcdc - - - ~InternalErr - classlibdap_1_1InternalErr.html - a93c4a08c26e8c2ce41a7ea41ea8e109f - - - get_error_code - classlibdap_1_1InternalErr.html - aaca0caca09e939602cade604cbc9824f - - - get_error_message - classlibdap_1_1InternalErr.html - ab24a61e4974aae62962a40f9975e674c - - - get_file - classlibdap_1_1InternalErr.html - a5165d667334a9fd6f337735c2b57e28c - - - get_line - classlibdap_1_1InternalErr.html - a44b91121bdbc7d9d389db3440e2299cf - - - OK - classlibdap_1_1InternalErr.html - ae3487b9f8d63ae20250ba8148689a278 - - - OK - classlibdap_1_1InternalErr.html - acf3ab60821773bd8b62284750b02cfc0 - - - operator= - classlibdap_1_1InternalErr.html - a2274ad30c112ecce66b751ba352af781 - - - parse - classlibdap_1_1InternalErr.html - ac705b3c1cfab1f7530d66a974eb0e8b6 - - - print - classlibdap_1_1InternalErr.html - a552d711be27e6695854bd2b977a5cf31 - - - print - classlibdap_1_1InternalErr.html - a4c58ef196c2b247bd37529bb7ad6a666 - - - set_error_code - classlibdap_1_1InternalErr.html - a47c0f4b6a38d8ca075d1056076d2845d - - - set_error_message - classlibdap_1_1InternalErr.html - a3ca90d33bf1c95529c9eefdfe8646e34 - - - set_file - classlibdap_1_1InternalErr.html - a94a26bbdd9f4ede88c74de97e9e9e98d - - - set_line - classlibdap_1_1InternalErr.html - a63a9c54019daa8b406c4287faba5e60a - - - what - classlibdap_1_1InternalErr.html - accc5eeb469c8c18ec16dbf7fefe3cc41 - - - _error_code - classlibdap_1_1InternalErr.html - a30226017ae9dfbe2e27be502b4fbdef4 - - - _error_message - classlibdap_1_1InternalErr.html - a87f74c6be2134736ca1e400c90a3d571 - - - d_file - classlibdap_1_1InternalErr.html - ac947a4c3d229d7ec505ad921a77702ea - - - d_line - classlibdap_1_1InternalErr.html - af7d939b4b8154518f870d5424ff55f62 - - - - - Keywords - classlibdap_1_1Keywords.html - - - keyword - classlibdap_1_1Keywords.html - a22df47305e66d7aa6f977db8bad430e0 - - - keyword_value - classlibdap_1_1Keywords.html - aaf312a34ee1571b1d6b7e08476c18c3e - - - value_set_t - classlibdap_1_1Keywords.html - a15bea7067913e777eee68574269c47b8 - - - Keywords - classlibdap_1_1Keywords.html - ab1894eb34c0734655f482bf7c72f6ca2 - - - ~Keywords - classlibdap_1_1Keywords.html - a540d4747ae624a570596c3f032503bac - - - get_keyword_value - classlibdap_1_1Keywords.html - a0738caba6444fbf51305f1c53b46c35e - - - get_keywords - classlibdap_1_1Keywords.html - a14a91e22db14749c3d84dec48304ca9e - - - has_keyword - classlibdap_1_1Keywords.html - a6cedb7cd4c9dafbea36ae9d2301ebebd - - - is_known_keyword - classlibdap_1_1Keywords.html - a8cd25d75f81739917a9898a2155896e7 - - - parse_keywords - classlibdap_1_1Keywords.html - acc56ce43a21cce844f2a2de3ecd54e8c - - - - - Locker - classlibdap_1_1Locker.html - - - Locker - classlibdap_1_1Locker.html - aeeefa18f8a9713d91b830589e5c2b6a9 - - - ~Locker - classlibdap_1_1Locker.html - a6332fec7611d1507cb7323987ec86845 - - - - - Marshaller - classlibdap_1_1Marshaller.html - - - dump - classlibdap_1_1Marshaller.html - a0e88a4aed6f7fa1908c50695cbf9e2df - - - put_byte - classlibdap_1_1Marshaller.html - a3dca09eaab7f05d389a86a0c962da1ac - - - put_float32 - classlibdap_1_1Marshaller.html - ac251489a50acd9fa32990c2cb48c28f5 - - - put_float64 - classlibdap_1_1Marshaller.html - a6c670e9d28ec15bda0dc26326157d00e - - - put_int - classlibdap_1_1Marshaller.html - a8504f5f478559a36f23f1ab094a586e1 - - - put_int16 - classlibdap_1_1Marshaller.html - ad304d979a115c073bf8919ad426d4465 - - - put_int32 - classlibdap_1_1Marshaller.html - ae5b3b71fd28aa50e2ed281233721d38f - - - put_opaque - classlibdap_1_1Marshaller.html - ad8ebf5e88e4969821b5d4274a3d41516 - - - put_str - classlibdap_1_1Marshaller.html - a158c49be88a397c570513d2124d670c0 - - - put_uint16 - classlibdap_1_1Marshaller.html - a73463c9be72dbd79b2889e0f4b00dc15 - - - put_uint32 - classlibdap_1_1Marshaller.html - a8b5c2bd2460ae0e5407947e9d4b5fadf - - - put_url - classlibdap_1_1Marshaller.html - ae7a22d714586ceac9e84c5510c7e2ce0 - - - put_vector - classlibdap_1_1Marshaller.html - a986c4ae898e02d846406a72bdbaf0846 - - - put_vector - classlibdap_1_1Marshaller.html - a37f9aa990375bf5ae54bdb0c8ead6b2f - - - put_vector_end - classlibdap_1_1Marshaller.html - a3409a138c4a67bc9dd24a3a2ad6f97db - - - put_vector_part - classlibdap_1_1Marshaller.html - a8b303c96939749f6aca62d0e582909b0 - - - put_vector_start - classlibdap_1_1Marshaller.html - ae0cd4b847386e89eace23e6b2fc08826 - - - - - MarshallerThread - classlibdap_1_1MarshallerThread.html - - - MarshallerThread - classlibdap_1_1MarshallerThread.html - a89665213cc052beff7f145a45c44a777 - - - ~MarshallerThread - classlibdap_1_1MarshallerThread.html - ab274b1fd609eac2a8c093f2f6cf97023 - - - get_child_thread_count - classlibdap_1_1MarshallerThread.html - af0b7469e14024ac75dfff14f7f1b1ef0 - - - get_cond - classlibdap_1_1MarshallerThread.html - a688cdb82161fa003bf5dd7802ffc8a27 - - - get_mutex - classlibdap_1_1MarshallerThread.html - a268171c55887184a00afb3285e0889b8 - - - increment_child_thread_count - classlibdap_1_1MarshallerThread.html - a4841f510da304cc6e1693801131cdc50 - - - start_thread - classlibdap_1_1MarshallerThread.html - acc8bb280ae10063aca52d5b73000c247 - - - start_thread - classlibdap_1_1MarshallerThread.html - a7c22686ec230b6725aa811fe53b53ade - - - - - NoSuchPrimaryResource - classlibdap_1_1NoSuchPrimaryResource.html - - - NoSuchPrimaryResource - classlibdap_1_1NoSuchPrimaryResource.html - a70768a07f380bf41eca5aa7e157b99b6 - - - get_error_code - classlibdap_1_1NoSuchPrimaryResource.html - aaca0caca09e939602cade604cbc9824f - - - get_error_message - classlibdap_1_1NoSuchPrimaryResource.html - ab24a61e4974aae62962a40f9975e674c - - - get_file - classlibdap_1_1NoSuchPrimaryResource.html - a5165d667334a9fd6f337735c2b57e28c - - - get_line - classlibdap_1_1NoSuchPrimaryResource.html - a44b91121bdbc7d9d389db3440e2299cf - - - OK - classlibdap_1_1NoSuchPrimaryResource.html - acf3ab60821773bd8b62284750b02cfc0 - - - parse - classlibdap_1_1NoSuchPrimaryResource.html - ac705b3c1cfab1f7530d66a974eb0e8b6 - - - print - classlibdap_1_1NoSuchPrimaryResource.html - a552d711be27e6695854bd2b977a5cf31 - - - print - classlibdap_1_1NoSuchPrimaryResource.html - a4c58ef196c2b247bd37529bb7ad6a666 - - - set_error_code - classlibdap_1_1NoSuchPrimaryResource.html - a47c0f4b6a38d8ca075d1056076d2845d - - - set_error_message - classlibdap_1_1NoSuchPrimaryResource.html - a3ca90d33bf1c95529c9eefdfe8646e34 - - - set_file - classlibdap_1_1NoSuchPrimaryResource.html - a94a26bbdd9f4ede88c74de97e9e9e98d - - - set_line - classlibdap_1_1NoSuchPrimaryResource.html - a63a9c54019daa8b406c4287faba5e60a - - - what - classlibdap_1_1NoSuchPrimaryResource.html - accc5eeb469c8c18ec16dbf7fefe3cc41 - - - _error_code - classlibdap_1_1NoSuchPrimaryResource.html - a30226017ae9dfbe2e27be502b4fbdef4 - - - _error_message - classlibdap_1_1NoSuchPrimaryResource.html - a87f74c6be2134736ca1e400c90a3d571 - - - d_file - classlibdap_1_1NoSuchPrimaryResource.html - ac947a4c3d229d7ec505ad921a77702ea - - - d_line - classlibdap_1_1NoSuchPrimaryResource.html - af7d939b4b8154518f870d5424ff55f62 - - - - - parser_arg - structlibdap_1_1parser__arg.html - - - parser_arg - structlibdap_1_1parser__arg.html - adff2d73194c4cf53b07e04b03ffbb2a3 - - - parser_arg - structlibdap_1_1parser__arg.html - a0accba0cdb65224a3711f763ba3aa26c - - - ~parser_arg - structlibdap_1_1parser__arg.html - ab54c9eb5fbb20a40c6ff98547cfc6b74 - - - error - structlibdap_1_1parser__arg.html - aac907c4af9223d97d27ee38b4ebc1623 - - - object - structlibdap_1_1parser__arg.html - a0a7751413e25e9bbf4056e173c9ddb4c - - - set_error - structlibdap_1_1parser__arg.html - a2cb138c323c70e10bc2dd88c620da8fb - - - set_object - structlibdap_1_1parser__arg.html - a34ebeb31383ed403bdcb51c1296e045c - - - set_status - structlibdap_1_1parser__arg.html - af85c0af7b6334cf672679469eb7387a4 - - - status - structlibdap_1_1parser__arg.html - a9d4f550e0ca6188501290d42382e85a2 - - - _error - structlibdap_1_1parser__arg.html - a912598a01de6e4754d574e6f44ff6175 - - - _object - structlibdap_1_1parser__arg.html - a2d6b2caec66541320ce53f9a09dd041f - - - _status - structlibdap_1_1parser__arg.html - a79ae292787f4b27d51eef39a6affc186 - - - - - PipeResponse - classlibdap_1_1PipeResponse.html - - - PipeResponse - classlibdap_1_1PipeResponse.html - a37f0a6670887caa96ea5b9381b2e5e10 - - - ~PipeResponse - classlibdap_1_1PipeResponse.html - ae6837a191d34e2b686634e52bee73a4c - - - get_cpp_stream - classlibdap_1_1PipeResponse.html - a0e9f20410cc36e2bd9f427840b7be3e1 - - - get_protocol - classlibdap_1_1PipeResponse.html - a2a6b775e5fa6265fc9ac4f9c576e815c - - - get_status - classlibdap_1_1PipeResponse.html - a1cba94a4d25c344985f5182a54e789b8 - - - get_stream - classlibdap_1_1PipeResponse.html - a8fdea44223fe03662d322322c2d642f6 - - - get_type - classlibdap_1_1PipeResponse.html - ae39b13938ed524bbf14807c8a35b31cc - - - get_version - classlibdap_1_1PipeResponse.html - afe78405b68946981c4b2d4e8cd305651 - - - set_cpp_stream - classlibdap_1_1PipeResponse.html - a4f4ff88c4b09e011d285f633a6b6aba0 - - - set_protocol - classlibdap_1_1PipeResponse.html - aeeab3df1376b578b865c313dfe7b26ee - - - set_status - classlibdap_1_1PipeResponse.html - a3de0ea86ac433904efdc0e4f4c86fa26 - - - set_stream - classlibdap_1_1PipeResponse.html - a388249c36decc15f92514eaf2a1a8119 - - - set_type - classlibdap_1_1PipeResponse.html - a7a7807d0a45dd1f6111987f054956e24 - - - set_version - classlibdap_1_1PipeResponse.html - a0eb078feca514d7d1f8428d9c001f262 - - - - - RCReader - classlibdap_1_1RCReader.html - - - get_ais_database - classlibdap_1_1RCReader.html - a596627abec0b9211c9b82673f0c1c5be - - - get_always_validate - classlibdap_1_1RCReader.html - a828c75cac86bf55e928bd8509271afea - - - get_cookie_jar - classlibdap_1_1RCReader.html - aa3419548d7748f9dcc628d6093be40b4 - - - get_default_expires - classlibdap_1_1RCReader.html - a0d4ca99ac823638cb2ade5dda79a4236 - - - get_deflate - classlibdap_1_1RCReader.html - a1f0e3dc088b637cc64f6c77e3ce0f0ae - - - get_dods_cache_root - classlibdap_1_1RCReader.html - a14b4e0edc8158ce0faebddfa28fcd3f7 - - - get_ignore_expires - classlibdap_1_1RCReader.html - a94fe77268ca89cdcc4674a1ec9bc9a57 - - - get_max_cache_size - classlibdap_1_1RCReader.html - ac000d8006d77d0a73cf122791e559e4b - - - get_max_cached_obj - classlibdap_1_1RCReader.html - ab8f8943fb4b313ffa810b51492426a0a - - - get_no_proxy_for_host - classlibdap_1_1RCReader.html - a0c7e63ca4900cf6a1635fa4c0fc1fd77 - - - get_no_proxy_for_port - classlibdap_1_1RCReader.html - a21db450d67811148259166705a2ddfae - - - get_no_proxy_for_protocol - classlibdap_1_1RCReader.html - a54263416c9be177aaac543ea78489e43 - - - get_proxy_for_proxy_host_url - classlibdap_1_1RCReader.html - aac6dd12779e6a81fef84ee7bbb1738dd - - - get_proxy_for_regexp - classlibdap_1_1RCReader.html - a72e1a556abbde9fb05a330c0072bcb0d - - - get_proxy_for_regexp_flags - classlibdap_1_1RCReader.html - acf4d55aa8d41827d8b616a9fe5fb784c - - - get_proxy_server_host - classlibdap_1_1RCReader.html - a0f5a320d221c226a9dffd58d844d47cb - - - get_proxy_server_host_url - classlibdap_1_1RCReader.html - a99bf90838d13c4f9b7b010129fc11347 - - - get_proxy_server_port - classlibdap_1_1RCReader.html - a46ca3c57a3e33c5f873fe26ab150f39c - - - get_proxy_server_protocol - classlibdap_1_1RCReader.html - abf8b0c2e7e70bfa96ef1613b2bbeddf0 - - - get_proxy_server_userpw - classlibdap_1_1RCReader.html - a658abf6e30be88545faff67b1f741698 - - - get_use_cache - classlibdap_1_1RCReader.html - a03eaafd39d2b46256a9bb9137ecd0169 - - - get_validate_ssl - classlibdap_1_1RCReader.html - ab79855b1e8dea2dd6a4485db9c85b7c9 - - - is_no_proxy_for_used - classlibdap_1_1RCReader.html - a11c97a64bbdfe8fde587c24d5e84c80e - - - is_proxy_for_used - classlibdap_1_1RCReader.html - ad02ee19bd75bb0747cfee0d70ee1dcc1 - - - set_ais_database - classlibdap_1_1RCReader.html - ad7cc710c4fda07ae6f06f44a607ed32d - - - set_always_validate - classlibdap_1_1RCReader.html - a6578513aaf6b55c17500db5643751b87 - - - set_default_expires - classlibdap_1_1RCReader.html - a2e009fc999cb3f8e6bac6680678fc860 - - - set_deflate - classlibdap_1_1RCReader.html - ae5f8195beee988e13795df81357e38a0 - - - set_ignore_expires - classlibdap_1_1RCReader.html - a7282ab702aadec104fc831f01a24e22f - - - set_max_cache_size - classlibdap_1_1RCReader.html - ad3467c90f9042b582a459b11ed13f354 - - - set_max_cached_obj - classlibdap_1_1RCReader.html - ad7f6d868d7a1c20eaf936637aeaaed6c - - - set_no_proxy_for_host - classlibdap_1_1RCReader.html - a80bfbde806114f639c847e23e33c167a - - - set_no_proxy_for_port - classlibdap_1_1RCReader.html - a02d730936d88cb18b1d0e012eac28f46 - - - set_no_proxy_for_protocol - classlibdap_1_1RCReader.html - a31e3f6c9e292e35e57be78f186207638 - - - set_proxy_for_proxy_host_url - classlibdap_1_1RCReader.html - a1bf789ccd96b83babb833e9b9ec6110a - - - set_proxy_for_regexp - classlibdap_1_1RCReader.html - a360d2280601f9dfb17d7c954ca333b40 - - - set_proxy_for_regexp_flags - classlibdap_1_1RCReader.html - ade479cf9efffe7aa52652aff13cc365e - - - set_proxy_server_host - classlibdap_1_1RCReader.html - a6c552e37f77747f0ed99882e195a1a88 - - - set_proxy_server_host_url - classlibdap_1_1RCReader.html - a80ac516bfcdd856a512e114f22d22046 - - - set_proxy_server_port - classlibdap_1_1RCReader.html - a66b779d044a90d0555ef629ab75267df - - - set_proxy_server_protocol - classlibdap_1_1RCReader.html - abb3e00fb518363d0976f7f3f8ca2f465 - - - set_proxy_server_userpw - classlibdap_1_1RCReader.html - a78fdd136c662339e1a434e518ccb6d00 - - - set_use_cache - classlibdap_1_1RCReader.html - ae3620724d52e3bd7d8c6d0e364efddd3 - - - set_validate_ssl - classlibdap_1_1RCReader.html - a8510e2ab47143d64f0a1a2e0d3f1d113 - - - HTTPConnectTest - classlibdap_1_1RCReader.html - a9aed79b4a282abc0feb24f3e28234f13 - - - RCReaderTest - classlibdap_1_1RCReader.html - aee3d15d5e4815038af9dc54deebab864 - - - - - Regex - classlibdap_1_1Regex.html - - - Regex - classlibdap_1_1Regex.html - add461a940025b957d42d0dbf06d7f7ac - - - Regex - classlibdap_1_1Regex.html - acfe8656faf0ba34834337148fcd64d23 - - - ~Regex - classlibdap_1_1Regex.html - a88fb53e845d31abf6bed07fb1b8e5285 - - - match - classlibdap_1_1Regex.html - aaf743b4f3528a40f435fa1e55ff51b5f - - - search - classlibdap_1_1Regex.html - ae1ce41e1da66aa2d9dcad055b619be21 - - - - - Resource - classlibdap_1_1Resource.html - - - rule - classlibdap_1_1Resource.html - ad59dde2f5e40839ae61430f746faa9db - - - overwrite - classlibdap_1_1Resource.html - ad59dde2f5e40839ae61430f746faa9dba6f45d9ce9f7ef1a86bf61f0b8a0a05e6 - - - replace - classlibdap_1_1Resource.html - ad59dde2f5e40839ae61430f746faa9dba57f09b056e2330d476992375e735a2d9 - - - fallback - classlibdap_1_1Resource.html - ad59dde2f5e40839ae61430f746faa9dbaab6da0bd4132968a72d1fc30b00eac15 - - - - - Resource - classlibdap_1_1Resource.html - a4900c98c095abda49d70e302940abbdc - - - Resource - classlibdap_1_1Resource.html - a762d0f0c90046fd2ae9cf560d4034853 - - - Resource - classlibdap_1_1Resource.html - ae00f0e40bbf9b6adad22f7317e760ac8 - - - Resource - classlibdap_1_1Resource.html - a2761a9823e5b26e0160cc1f5377e7f42 - - - ~Resource - classlibdap_1_1Resource.html - af1c6d2556cf5cc77a823014c1aeccfd6 - - - get_rule - classlibdap_1_1Resource.html - a1fc9cb3d7ab36cede2e621d0c11abc93 - - - get_url - classlibdap_1_1Resource.html - a1be16a2532ccdaac0b996ff5402f1459 - - - set_rule - classlibdap_1_1Resource.html - a96b702c32c4dd26d303f48c47b1d6748 - - - set_url - classlibdap_1_1Resource.html - a369191cef05aefab3c0da0d2c3beb0ed - - - operator<< - classlibdap_1_1Resource.html - a1a74855fb08b3d9c092487e988d273b0 - - - - - Response - classlibdap_1_1Response.html - - - Response - classlibdap_1_1Response.html - a0b0452a3508c1d96e1e3725cf5103069 - - - Response - classlibdap_1_1Response.html - a00151838968ecfb1993bb0be43298676 - - - Response - classlibdap_1_1Response.html - a00c3edee81b107d3cc9e52952ce4e3e5 - - - Response - classlibdap_1_1Response.html - a0539283c17802de3251ec1a54ea469be - - - ~Response - classlibdap_1_1Response.html - ad49cacc9050fc52103f285f79b1a71c1 - - - get_cpp_stream - classlibdap_1_1Response.html - a0e9f20410cc36e2bd9f427840b7be3e1 - - - get_protocol - classlibdap_1_1Response.html - a2a6b775e5fa6265fc9ac4f9c576e815c - - - get_status - classlibdap_1_1Response.html - a1cba94a4d25c344985f5182a54e789b8 - - - get_stream - classlibdap_1_1Response.html - ad90b4fce34ae4d8c0b806c6424213b28 - - - get_type - classlibdap_1_1Response.html - ae39b13938ed524bbf14807c8a35b31cc - - - get_version - classlibdap_1_1Response.html - afe78405b68946981c4b2d4e8cd305651 - - - operator= - classlibdap_1_1Response.html - ac2b3d6f2d4625c3540f656a2224a7436 - - - set_cpp_stream - classlibdap_1_1Response.html - a4f4ff88c4b09e011d285f633a6b6aba0 - - - set_protocol - classlibdap_1_1Response.html - aeeab3df1376b578b865c313dfe7b26ee - - - set_status - classlibdap_1_1Response.html - a3de0ea86ac433904efdc0e4f4c86fa26 - - - set_stream - classlibdap_1_1Response.html - a5cda40501a3ce7b1675b13a6e0858020 - - - set_type - classlibdap_1_1Response.html - a7a7807d0a45dd1f6111987f054956e24 - - - set_version - classlibdap_1_1Response.html - a0eb078feca514d7d1f8428d9c001f262 - - - - - ResponseTooBigErr - classlibdap_1_1ResponseTooBigErr.html - - - ResponseTooBigErr - classlibdap_1_1ResponseTooBigErr.html - a9cb28cd65b6496db24ba4fa0b0c02153 - - - ResponseTooBigErr - classlibdap_1_1ResponseTooBigErr.html - acf4ada20ba43f41d025bed00761e86b7 - - - get_error_code - classlibdap_1_1ResponseTooBigErr.html - aaca0caca09e939602cade604cbc9824f - - - get_error_message - classlibdap_1_1ResponseTooBigErr.html - ab24a61e4974aae62962a40f9975e674c - - - get_file - classlibdap_1_1ResponseTooBigErr.html - a5165d667334a9fd6f337735c2b57e28c - - - get_line - classlibdap_1_1ResponseTooBigErr.html - a44b91121bdbc7d9d389db3440e2299cf - - - OK - classlibdap_1_1ResponseTooBigErr.html - acf3ab60821773bd8b62284750b02cfc0 - - - parse - classlibdap_1_1ResponseTooBigErr.html - ac705b3c1cfab1f7530d66a974eb0e8b6 - - - print - classlibdap_1_1ResponseTooBigErr.html - a552d711be27e6695854bd2b977a5cf31 - - - print - classlibdap_1_1ResponseTooBigErr.html - a4c58ef196c2b247bd37529bb7ad6a666 - - - set_error_code - classlibdap_1_1ResponseTooBigErr.html - a47c0f4b6a38d8ca075d1056076d2845d - - - set_error_message - classlibdap_1_1ResponseTooBigErr.html - a3ca90d33bf1c95529c9eefdfe8646e34 - - - set_file - classlibdap_1_1ResponseTooBigErr.html - a94a26bbdd9f4ede88c74de97e9e9e98d - - - set_line - classlibdap_1_1ResponseTooBigErr.html - a63a9c54019daa8b406c4287faba5e60a - - - what - classlibdap_1_1ResponseTooBigErr.html - accc5eeb469c8c18ec16dbf7fefe3cc41 - - - _error_code - classlibdap_1_1ResponseTooBigErr.html - a30226017ae9dfbe2e27be502b4fbdef4 - - - _error_message - classlibdap_1_1ResponseTooBigErr.html - a87f74c6be2134736ca1e400c90a3d571 - - - d_file - classlibdap_1_1ResponseTooBigErr.html - ac947a4c3d229d7ec505ad921a77702ea - - - d_line - classlibdap_1_1ResponseTooBigErr.html - af7d939b4b8154518f870d5424ff55f62 - - - - - rvalue - classlibdap_1_1rvalue.html - - - Args_citer - classlibdap_1_1rvalue.html - aa546ba3e34b52de03a2ad226201042eb - - - Args_iter - classlibdap_1_1rvalue.html - a3ba3fb841b7b8a1a02e369268d116f78 - - - rvalue - classlibdap_1_1rvalue.html - a1f7ffe31e84d0d159cc600c258de3ec2 - - - rvalue - classlibdap_1_1rvalue.html - a0ece0ca2136a788b4ce1c8c6e4261553 - - - rvalue - classlibdap_1_1rvalue.html - a3acc265c79602bb7e146df157d9f48aa - - - ~rvalue - classlibdap_1_1rvalue.html - ad5accfe3e920e31b930e2598db0cbfbf - - - bvalue - classlibdap_1_1rvalue.html - a5ec1d2d66b162aa9ad82b658e70ce7de - - - value_name - classlibdap_1_1rvalue.html - aed22027f3256cd2595761cc8e1f8588f - - - - - Sequence - classlibdap_1_1Sequence.html - - - btp_stack - classlibdap_1_1Sequence.html - ae9c6e71855b90a0e552713011c9ab81f - - - sequence_values_stack_t - classlibdap_1_1Sequence.html - afa1dc14e98a94efc8944cdb08214a166 - - - Vars_citer - classlibdap_1_1Sequence.html - a5a585c58a099833c4ca26561963e0f83 - - - Vars_iter - classlibdap_1_1Sequence.html - a2b73df890f61ebb628359c8fd12839b0 - - - Vars_riter - classlibdap_1_1Sequence.html - a6122400e3f40d457751fb0372a650d03 - - - Sequence - classlibdap_1_1Sequence.html - a92b97c9d8c1431fd7e619186a557d875 - - - Sequence - classlibdap_1_1Sequence.html - ab5a772197dc7c62037cca19b27bacba6 - - - Sequence - classlibdap_1_1Sequence.html - a26c7416d7314d45aee035d09ef3db49c - - - ~Sequence - classlibdap_1_1Sequence.html - a8a90ca537aeb073da447e4bd55c072a4 - - - add_var - classlibdap_1_1Sequence.html - a2585c69c45b9ebec9c63993248eb5b4b - - - add_var_nocopy - classlibdap_1_1Sequence.html - abdb52463a46e1b10040f245d4ed7642b - - - attributes - classlibdap_1_1Sequence.html - a97452f06d2188eb838399a709246b5e9 - - - buf2val - classlibdap_1_1Sequence.html - ac4dc7e8099322b5b403a7d0ae9079006 - - - check_semantics - classlibdap_1_1Sequence.html - afe010638fd2ca9aab00dd1c21a9e4825 - - - clear_local_data - classlibdap_1_1Sequence.html - ab881dcea1786d36ad3a4ef579ace5805 - - - compute_checksum - classlibdap_1_1Sequence.html - a287ab9a4deb81a8ced6d8432be647925 - - - d4_ops - classlibdap_1_1Sequence.html - a512a356f31ed6c4c1a368da0b054408a - - - dataset - classlibdap_1_1Sequence.html - a47521ce321a17e6ce217870cb6a1a7aa - - - del_var - classlibdap_1_1Sequence.html - af38d3785c4a7cd0063cbb9fc5943333c - - - del_var - classlibdap_1_1Sequence.html - a69291878fc48217902fb0dcf1e2e1aff - - - deserialize - classlibdap_1_1Sequence.html - a6f4253236d69c3c0ef64343136b5039b - - - deserialize - classlibdap_1_1Sequence.html - adf58298f58caf27d467ad41b7ecbb6ec - - - dump - classlibdap_1_1Sequence.html - a50ff267e44d2df91722116e2acbfd1cb - - - element_count - classlibdap_1_1Sequence.html - a1c2eecff00fa7e3af175c711d00fb86e - - - FQN - classlibdap_1_1Sequence.html - afa6c06dab830b4e089641b44fea8293c - - - get_attr_table - classlibdap_1_1Sequence.html - a1fcd9537c67e3bf88964b2656ff5bac1 - - - get_ending_row_number - classlibdap_1_1Sequence.html - ae1489f3bc8bb269e51831add438aa392 - - - get_parent - classlibdap_1_1Sequence.html - a3459cdaa239c33ce111ef360d8dc3017 - - - get_row_number - classlibdap_1_1Sequence.html - a421b3392840b8f0524158b23b0436df6 - - - get_row_stride - classlibdap_1_1Sequence.html - ae1461dd491795a2d6b0bd3112aca8550 - - - get_starting_row_number - classlibdap_1_1Sequence.html - ad15a2b640e4bee850577ca9500ad31c3 - - - get_unsent_data - classlibdap_1_1Sequence.html - ac95128bf22d4556564e27cc3d6f51222 - - - get_var_index - classlibdap_1_1Sequence.html - ac2b4b28ed9d6f435129aa599ab809799 - - - get_vars_iter - classlibdap_1_1Sequence.html - a1e6d8224e04d75e3d2a21263957cd42f - - - increment_row_number - classlibdap_1_1Sequence.html - a06cc031608183a676e3740a51ac206b8 - - - intern_data - classlibdap_1_1Sequence.html - a822a036364c56df5288a55670f51197e - - - intern_data - classlibdap_1_1Sequence.html - aaa428c1a32fea386549399dd19b756ac - - - intern_data_for_leaf - classlibdap_1_1Sequence.html - a25f2ba65cd6ff7553988739a5c1a08d4 - - - intern_data_parent_part_one - classlibdap_1_1Sequence.html - a6593f7531b7b2a307f5fe4a7bb276225 - - - intern_data_parent_part_two - classlibdap_1_1Sequence.html - abf937ace290ad55a995d1baf5a05232b - - - intern_data_private - classlibdap_1_1Sequence.html - ac193f301017ed380059b94907f9e0be4 - - - is_constructor_type - classlibdap_1_1Sequence.html - a8b8490e0047c6da52945699a132008ea - - - is_dap2_only_type - classlibdap_1_1Sequence.html - ab8d629ae2ec9c85add8f181bc05f2269 - - - is_dap4 - classlibdap_1_1Sequence.html - a7f6835cb5e5589ab5dad3fb4813d3bea - - - is_in_selection - classlibdap_1_1Sequence.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - - - is_leaf_sequence - classlibdap_1_1Sequence.html - a3cb03f3ccb14372106e91461b468c1bd - - - is_linear - classlibdap_1_1Sequence.html - aae52bdb038d59fbce4f8f6128dfc4559 - - - is_simple_type - classlibdap_1_1Sequence.html - aae57e5b270b3a015d40c8db10b9b5549 - - - is_vector_type - classlibdap_1_1Sequence.html - a7107c76dbcab71015141142383b6d022 - - - length - classlibdap_1_1Sequence.html - ad8e2d23c39b11886e10d0a5d0ae37e5f - - - m_duplicate - classlibdap_1_1Sequence.html - a88b282d06686fc88a74c91e289ef31d7 - - - m_duplicate - classlibdap_1_1Sequence.html - a0c55b826c8c5dfe7a454dc670e859a41 - - - m_duplicate - classlibdap_1_1Sequence.html - a0246b92d1263183285dbea344791c27a - - - m_exact_match - classlibdap_1_1Sequence.html - aa5cd6124619d35e81bcfd426f1e569d3 - - - m_leaf_match - classlibdap_1_1Sequence.html - a8fe3863a609488f4d5125abea96b82ed - - - name - classlibdap_1_1Sequence.html - a24c5d67823b3cff7f4245a993072a142 - - - number_of_rows - classlibdap_1_1Sequence.html - afc84c914de74839b7214d682f008c1ee - - - operator= - classlibdap_1_1Sequence.html - a8edd3c82bd969c6f286607731a597aeb - - - ops - classlibdap_1_1Sequence.html - a8a0000be2a244e3e07abda3020af8800 - - - print_dap4 - classlibdap_1_1Sequence.html - a0f130e129b06773a9f3c94e3b492bb5c - - - print_decl - classlibdap_1_1Sequence.html - ab7fb094be8da2a9f80f6d3b85e452934 - - - print_decl - classlibdap_1_1Sequence.html - a6c2c4d7cbe1d6239c037272ec865f80b - - - print_one_row - classlibdap_1_1Sequence.html - a6bbdd92e1d38e00948592b0764d859ab - - - print_one_row - classlibdap_1_1Sequence.html - acdd568667443c96e6b7b25d3db0f6129 - - - print_val - classlibdap_1_1Sequence.html - a675995a38339e5139b80a4faa1a46824 - - - print_val - classlibdap_1_1Sequence.html - ade8d2f9a5c73eafeb180fb3782a0a199 - - - print_val_by_rows - classlibdap_1_1Sequence.html - ab9e02fc99e9739e565b4e59377acf56d - - - print_val_by_rows - classlibdap_1_1Sequence.html - ae924f28d4c0253a3ab8d7912358ccac2 - - - print_xml - classlibdap_1_1Sequence.html - a32de0413045173aa8803f540a6cea39b - - - print_xml - classlibdap_1_1Sequence.html - a7bbe6beabd94f576140e132e7a1017ff - - - print_xml_writer - classlibdap_1_1Sequence.html - ab775a5e7e63757ac961b43800a95635f - - - ptr_duplicate - classlibdap_1_1Sequence.html - aacf58704fe079b65130800589e59fa9e - - - read - classlibdap_1_1Sequence.html - ad0af40e2565972fa44985d173370c264 - - - read_p - classlibdap_1_1Sequence.html - a38ff819a432217c55db2e9071928d20c - - - read_row - classlibdap_1_1Sequence.html - a62d79555aa03b0a862314ccfdad090f8 - - - reset_row_number - classlibdap_1_1Sequence.html - ad555ad129354768a042f4e94f36f299a - - - reset_row_number - classlibdap_1_1Sequence.html - a64ff6191d320ded37975e20e4a45a742 - - - row_value - classlibdap_1_1Sequence.html - af034547151c98b59dee6d2d6cb1a954b - - - send_p - classlibdap_1_1Sequence.html - a980c0013817836aa77ef74aeec7fb192 - - - serialize - classlibdap_1_1Sequence.html - ab868fe97d5075b702bd084c2e9540913 - - - serialize - classlibdap_1_1Sequence.html - ad89a496720935e04e472a75ce7804065 - - - serialize_leaf - classlibdap_1_1Sequence.html - a1e28f9c0d173929383e1ffc2002e66ce - - - serialize_parent_part_one - classlibdap_1_1Sequence.html - a30fcc5756f357e1c14f3fafac66e0a30 - - - serialize_parent_part_two - classlibdap_1_1Sequence.html - a7e73cc4aecdca6ca600a5ce81fe1780c - - - set_attr_table - classlibdap_1_1Sequence.html - a572a1d76a75981abac83a4241e90c0fa - - - set_attributes - classlibdap_1_1Sequence.html - ad4dda4cf43dca838d3de183b8e01cd09 - - - set_attributes_nocopy - classlibdap_1_1Sequence.html - afd0e5f87d19020f560d5c1ff8dd4d6a3 - - - set_in_selection - classlibdap_1_1Sequence.html - ac30becb1ffe7d2cd4cbcd24fc216c9a3 - - - set_is_dap4 - classlibdap_1_1Sequence.html - abca9ddaa9a1ada8447cbe7193e8e288a - - - set_leaf_p - classlibdap_1_1Sequence.html - ab6618d3ef634d6c8ace79ca030c96378 - - - set_leaf_sequence - classlibdap_1_1Sequence.html - a630ae5ad80cc4ddbd1c07e7cae0eec6d - - - set_length - classlibdap_1_1Sequence.html - a4fe343c1eeb6fb1d61ab030433651d90 - - - set_name - classlibdap_1_1Sequence.html - a86504564f45a3e6748c6f1cc0ff4e9fa - - - set_parent - classlibdap_1_1Sequence.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - - - set_read_p - classlibdap_1_1Sequence.html - af52e60d8589eed1a18a14e9c6a57db65 - - - set_row_number_constraint - classlibdap_1_1Sequence.html - af182686c5766d73e5d896eecaadb96bc - - - set_send_p - classlibdap_1_1Sequence.html - aafbcf9bef6719fe60ac707e02956e09d - - - set_synthesized_p - classlibdap_1_1Sequence.html - a595cb4059cff24f801a1b6da79bd2f9e - - - set_type - classlibdap_1_1Sequence.html - af74f8d1ef57c9fcca46f620f75d175a3 - - - set_unsent_data - classlibdap_1_1Sequence.html - ad7820138d2f1c9c8ff7dfa632dff60c2 - - - set_value - classlibdap_1_1Sequence.html - aa581124c5883b3c020a843ddc5566192 - - - synthesized_p - classlibdap_1_1Sequence.html - ae64e677da27249473cdba0b60cdbb90a - - - toString - classlibdap_1_1Sequence.html - a24016ba1d3b9b755699959abf0219ff1 - - - transfer_attributes - classlibdap_1_1Sequence.html - a799d2bd8ef9505b1d493d8cd73b72746 - - - transform_to_dap2 - classlibdap_1_1Sequence.html - affec8a11e9cc035d4b1e8fb9a87b2072 - - - transform_to_dap4 - classlibdap_1_1Sequence.html - a11072c45623476f3fd0745cdd519b376 - - - type - classlibdap_1_1Sequence.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - - - type_name - classlibdap_1_1Sequence.html - a18a42c8ec35cb5b15cd651a4152f8a2c - - - val2buf - classlibdap_1_1Sequence.html - ac742b1bf93889e541128b1d123821ee6 - - - value - classlibdap_1_1Sequence.html - a1efebfab9247785a056d085b1f3aab41 - - - value_ref - classlibdap_1_1Sequence.html - a954e428e0d3532246c0411e2b3bd30e8 - - - var - classlibdap_1_1Sequence.html - a36a7412da7b5257d7666add726fea1a6 - - - var - classlibdap_1_1Sequence.html - a68f1779dc328f890062722d90fad084a - - - var_begin - classlibdap_1_1Sequence.html - adeafe3d6c82d07b456a598a7b446c2c6 - - - var_end - classlibdap_1_1Sequence.html - a936b38c7c35ffb4fe17c5b8e85bdaaa2 - - - var_rbegin - classlibdap_1_1Sequence.html - aa025cf546ca35250454653c1ec684d91 - - - var_rend - classlibdap_1_1Sequence.html - aede7cf5889e101db1ea8f22c3a84a5d3 - - - var_value - classlibdap_1_1Sequence.html - ab17e4f1aedda0b734442001b5c81f269 - - - var_value - classlibdap_1_1Sequence.html - a75cd422251a9c49294e25f2971164638 - - - width - classlibdap_1_1Sequence.html - a0b1e3ae7195f95c42ca98f42826a1ff5 - - - SequenceTest - classlibdap_1_1Sequence.html - a81667f7d1cfd26791cb795fc88839fd2 - - - d_in_selection - classlibdap_1_1Sequence.html - a949a89714965d7afdcd1e3edc8b7f0d4 - - - d_is_synthesized - classlibdap_1_1Sequence.html - a629e97e8eb7d285b54c9af8c1ec9a29a - - - d_vars - classlibdap_1_1Sequence.html - a75b2aa694dc76294d6aa5f7456e49aa2 - - - - - ServerFunction - classlibdap_1_1ServerFunction.html - - - ServerFunction - classlibdap_1_1ServerFunction.html - ab2fadaf7b3255b7a9c3b8f94f8c0027d - - - ServerFunction - classlibdap_1_1ServerFunction.html - ad5aa045d31ac3fe404f4086849252a63 - - - ServerFunction - classlibdap_1_1ServerFunction.html - af4a88a23720fd6abc979de7e1ce6ade2 - - - ServerFunction - classlibdap_1_1ServerFunction.html - a1ceea4d364cf160b13cf95164af42a66 - - - ServerFunction - classlibdap_1_1ServerFunction.html - aea519edb589756d8a94f3d299426dce1 - - - ~ServerFunction - classlibdap_1_1ServerFunction.html - a9cc4dda466240d5a6547e0ed95e1fbd6 - - - canOperateOn - classlibdap_1_1ServerFunction.html - a37deabffd71441809f9e7839bed90414 - - - canOperateOn - classlibdap_1_1ServerFunction.html - a8a3921a3d3a0ef39e1ee6bdd6011ccaf - - - get_bool_func - classlibdap_1_1ServerFunction.html - a5bdae20325085b8ddd916aeee11ba430 - - - get_btp_func - classlibdap_1_1ServerFunction.html - a70f7e4e77dfc01329905fec7bdd0cb11 - - - get_d4_function - classlibdap_1_1ServerFunction.html - a9241fa333c68968452774496f2be5a1d - - - get_proj_func - classlibdap_1_1ServerFunction.html - a7fac40c961c981efc88f4af915fca9cc - - - getDescriptionString - classlibdap_1_1ServerFunction.html - ace2f37824655a26ea2829f8dc45c86e0 - - - getDocUrl - classlibdap_1_1ServerFunction.html - a83e00f6c062a1b1c74596d7855b6b5d5 - - - getName - classlibdap_1_1ServerFunction.html - ace9a7b770f7393a2dbaf82105f292935 - - - getRole - classlibdap_1_1ServerFunction.html - ac1e65b16ed6d92d7d84bbdb712b1fc3e - - - getTypeString - classlibdap_1_1ServerFunction.html - a1af2b7f618f59a597218a3669bd3b391 - - - getUsageString - classlibdap_1_1ServerFunction.html - aeed53f72098111d0d45d3600bd1a9ae9 - - - getVersion - classlibdap_1_1ServerFunction.html - ad8456f2fadd48af3d95bcc047feef647 - - - setDescriptionString - classlibdap_1_1ServerFunction.html - abe5e41829ca9f51b598589ee2ac42bae - - - setDocUrl - classlibdap_1_1ServerFunction.html - a6fda8e417484c1bd614995d5b2fb5e4e - - - setFunction - classlibdap_1_1ServerFunction.html - a3235a206a2933b96360c00d5b021a1e5 - - - setFunction - classlibdap_1_1ServerFunction.html - a86998e0c972070c7199cf8e25778234c - - - setFunction - classlibdap_1_1ServerFunction.html - a133c0bb3a95dcd7f1930a302afe376e8 - - - setFunction - classlibdap_1_1ServerFunction.html - a3d2fd4489c8513bbd5642d7f0961ada7 - - - setName - classlibdap_1_1ServerFunction.html - a497a6ca1cb5a83ae13b2a97b31694cc0 - - - setRole - classlibdap_1_1ServerFunction.html - a18f6129a02f468a0fafdb8bf57792ebc - - - setUsageString - classlibdap_1_1ServerFunction.html - a157a6d045575300466eb0271ed887123 - - - setVersion - classlibdap_1_1ServerFunction.html - a2da5e645eb715667335f839b4fa3fd42 - - - - - ServerFunctionsList - classlibdap_1_1ServerFunctionsList.html - - - SFLCIter - classlibdap_1_1ServerFunctionsList.html - ae198ea5d124f8a633e8b2ca091252b4b - - - SFLIter - classlibdap_1_1ServerFunctionsList.html - abc7986d5cd2e8fcf5f29003c29d30507 - - - ServerFunctionsList - classlibdap_1_1ServerFunctionsList.html - a081ab62f464a2acc477c0838db8af919 - - - add_function - classlibdap_1_1ServerFunctionsList.html - a6541bd8eebd85b0faada8ce3d2f9d08a - - - begin - classlibdap_1_1ServerFunctionsList.html - a6a76bd67fbdda8c038f0c2000f24eb6c - - - end - classlibdap_1_1ServerFunctionsList.html - a95627422406ad0ab08fee27d8c274d56 - - - find_function - classlibdap_1_1ServerFunctionsList.html - a12a23d0582bf7b53b65c5d95ed4ce601 - - - find_function - classlibdap_1_1ServerFunctionsList.html - a65101c8eb7d0dead6cc781287a52f2aa - - - find_function - classlibdap_1_1ServerFunctionsList.html - a63e5f6a54a21a0da686306f996414aa2 - - - find_function - classlibdap_1_1ServerFunctionsList.html - a895bc1627d93588bd1f8f9eac5eb7b28 - - - getFunction - classlibdap_1_1ServerFunctionsList.html - a9b5a854642a7707c70e84dc88c67d2f8 - - - getFunctionNames - classlibdap_1_1ServerFunctionsList.html - a35d0792e474f55547d53e9bb959537e0 - - - ServerFunctionsListUnitTest - classlibdap_1_1ServerFunctionsList.html - accf50e7be70739c721639671d23aa3a8 - - - - - SignalHandler - classlibdap_1_1SignalHandler.html - - - ~SignalHandler - classlibdap_1_1SignalHandler.html - a3aafd093a1a3e93f144cd9e0b048a60d - - - register_handler - classlibdap_1_1SignalHandler.html - a1188177d392bdc1db6cf4450132c6d9f - - - remove_handler - classlibdap_1_1SignalHandler.html - ac9a9ddb318ad6b372604a4c8d58481de - - - HTTPCacheTest - classlibdap_1_1SignalHandler.html - a76bd6ce419aad54c8c87e993f5bd11c9 - - - SignalHandlerTest - classlibdap_1_1SignalHandler.html - a6856f863c401edb2bf3b0b147a5008f6 - - - - - SignalHandlerRegisteredErr - classlibdap_1_1SignalHandlerRegisteredErr.html - - - SignalHandlerRegisteredErr - classlibdap_1_1SignalHandlerRegisteredErr.html - adf551280fad2d1965284eff48111de6d - - - SignalHandlerRegisteredErr - classlibdap_1_1SignalHandlerRegisteredErr.html - ac198af4d98ec6e59e317c902dad59241 - - - get_error_code - classlibdap_1_1SignalHandlerRegisteredErr.html - aaca0caca09e939602cade604cbc9824f - - - get_error_message - classlibdap_1_1SignalHandlerRegisteredErr.html - ab24a61e4974aae62962a40f9975e674c - - - get_file - classlibdap_1_1SignalHandlerRegisteredErr.html - a5165d667334a9fd6f337735c2b57e28c - - - get_line - classlibdap_1_1SignalHandlerRegisteredErr.html - a44b91121bdbc7d9d389db3440e2299cf - - - OK - classlibdap_1_1SignalHandlerRegisteredErr.html - acf3ab60821773bd8b62284750b02cfc0 - - - parse - classlibdap_1_1SignalHandlerRegisteredErr.html - ac705b3c1cfab1f7530d66a974eb0e8b6 - - - print - classlibdap_1_1SignalHandlerRegisteredErr.html - a552d711be27e6695854bd2b977a5cf31 - - - print - classlibdap_1_1SignalHandlerRegisteredErr.html - a4c58ef196c2b247bd37529bb7ad6a666 - - - set_error_code - classlibdap_1_1SignalHandlerRegisteredErr.html - a47c0f4b6a38d8ca075d1056076d2845d - - - set_error_message - classlibdap_1_1SignalHandlerRegisteredErr.html - a3ca90d33bf1c95529c9eefdfe8646e34 - - - set_file - classlibdap_1_1SignalHandlerRegisteredErr.html - a94a26bbdd9f4ede88c74de97e9e9e98d - - - set_line - classlibdap_1_1SignalHandlerRegisteredErr.html - a63a9c54019daa8b406c4287faba5e60a - - - what - classlibdap_1_1SignalHandlerRegisteredErr.html - accc5eeb469c8c18ec16dbf7fefe3cc41 - - - _error_code - classlibdap_1_1SignalHandlerRegisteredErr.html - a30226017ae9dfbe2e27be502b4fbdef4 - - - _error_message - classlibdap_1_1SignalHandlerRegisteredErr.html - a87f74c6be2134736ca1e400c90a3d571 - - - d_file - classlibdap_1_1SignalHandlerRegisteredErr.html - ac947a4c3d229d7ec505ad921a77702ea - - - d_line - classlibdap_1_1SignalHandlerRegisteredErr.html - af7d939b4b8154518f870d5424ff55f62 - - - - - StdinResponse - classlibdap_1_1StdinResponse.html - - - StdinResponse - classlibdap_1_1StdinResponse.html - a493426389b258aca4595f6090ee5a8bb - - - StdinResponse - classlibdap_1_1StdinResponse.html - abba5fdeb0152e8b6c3affa48a2f19577 - - - ~StdinResponse - classlibdap_1_1StdinResponse.html - af21584956ced23448dcb88da165258e7 - - - get_cpp_stream - classlibdap_1_1StdinResponse.html - aa2b9b6a9e27cd8bfee56566009777cfc - - - get_protocol - classlibdap_1_1StdinResponse.html - a2a6b775e5fa6265fc9ac4f9c576e815c - - - get_status - classlibdap_1_1StdinResponse.html - a1cba94a4d25c344985f5182a54e789b8 - - - get_stream - classlibdap_1_1StdinResponse.html - ad397111a0fe34b67cd5177771a083b30 - - - get_type - classlibdap_1_1StdinResponse.html - ae39b13938ed524bbf14807c8a35b31cc - - - get_version - classlibdap_1_1StdinResponse.html - afe78405b68946981c4b2d4e8cd305651 - - - set_cpp_stream - classlibdap_1_1StdinResponse.html - aaa5dc4cc8c5f99aed42ea3e7a5c43e07 - - - set_protocol - classlibdap_1_1StdinResponse.html - aeeab3df1376b578b865c313dfe7b26ee - - - set_status - classlibdap_1_1StdinResponse.html - a3de0ea86ac433904efdc0e4f4c86fa26 - - - set_stream - classlibdap_1_1StdinResponse.html - a618f6c7f62c64477e95620bd0a4e5274 - - - set_type - classlibdap_1_1StdinResponse.html - a7a7807d0a45dd1f6111987f054956e24 - - - set_version - classlibdap_1_1StdinResponse.html - a0eb078feca514d7d1f8428d9c001f262 - - - - - Str - classlibdap_1_1Str.html - - - btp_stack - classlibdap_1_1Str.html - ae9c6e71855b90a0e552713011c9ab81f - - - Str - classlibdap_1_1Str.html - a23a93ec403dc5cbb5264cdf47ea01c44 - - - Str - classlibdap_1_1Str.html - a37e6b66c284c38052eb0bdebec18bba6 - - - ~Str - classlibdap_1_1Str.html - a673fe723d05512ef61d9967c6524847f - - - Str - classlibdap_1_1Str.html - a167bf89f44f4ca6daa132ecd7b0b70a5 - - - add_var - classlibdap_1_1Str.html - adca3c2621c4a509537c18362005d7f7f - - - add_var_nocopy - classlibdap_1_1Str.html - aa1192360cea4dc516c822cd3e13dc723 - - - attributes - classlibdap_1_1Str.html - a97452f06d2188eb838399a709246b5e9 - - - buf2val - classlibdap_1_1Str.html - aa63cf0376fe71ceb030b48e7fdbad863 - - - check_semantics - classlibdap_1_1Str.html - aec503abec2fd3090e7738c0a575491f8 - - - clear_local_data - classlibdap_1_1Str.html - aaddb97a4efbe035f41deaf03c6e8683f - - - compute_checksum - classlibdap_1_1Str.html - ae98348772288b417561f39b445f48c9e - - - d4_ops - classlibdap_1_1Str.html - a051efecca32b2679bd0b1700453db617 - - - dataset - classlibdap_1_1Str.html - a47521ce321a17e6ce217870cb6a1a7aa - - - deserialize - classlibdap_1_1Str.html - a2bafe2f1851b3a4cac6089b0e2282010 - - - deserialize - classlibdap_1_1Str.html - afdeab29d40e99baa3d0def2f8f6d8b2e - - - dump - classlibdap_1_1Str.html - a9bae029c10a3824cd95d7e3fb2c11911 - - - element_count - classlibdap_1_1Str.html - a5c2235737737b482bfa7536b8aeab810 - - - FQN - classlibdap_1_1Str.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - - - get_attr_table - classlibdap_1_1Str.html - a1fcd9537c67e3bf88964b2656ff5bac1 - - - get_parent - classlibdap_1_1Str.html - a3459cdaa239c33ce111ef360d8dc3017 - - - intern_data - classlibdap_1_1Str.html - a722d33783aa0272d339b0301a4f77e59 - - - intern_data - classlibdap_1_1Str.html - a1956e6ea90a745516f5372c859173433 - - - is_constructor_type - classlibdap_1_1Str.html - a8b8490e0047c6da52945699a132008ea - - - is_dap4 - classlibdap_1_1Str.html - a7f6835cb5e5589ab5dad3fb4813d3bea - - - is_in_selection - classlibdap_1_1Str.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - - - is_simple_type - classlibdap_1_1Str.html - aae57e5b270b3a015d40c8db10b9b5549 - - - is_vector_type - classlibdap_1_1Str.html - a7107c76dbcab71015141142383b6d022 - - - length - classlibdap_1_1Str.html - a6159e681dd78ac9d7660df1a734fd9d4 - - - m_duplicate - classlibdap_1_1Str.html - a0c55b826c8c5dfe7a454dc670e859a41 - - - name - classlibdap_1_1Str.html - a24c5d67823b3cff7f4245a993072a142 - - - operator= - classlibdap_1_1Str.html - a00993d910a5bdb55dceee229bc0be336 - - - ops - classlibdap_1_1Str.html - a5b74994fb52ceb3248c558015c4520a5 - - - print_dap4 - classlibdap_1_1Str.html - afcddbe441380b95c894510c02980b163 - - - print_decl - classlibdap_1_1Str.html - a2d799fad93255d7f2b803562ae7a5784 - - - print_decl - classlibdap_1_1Str.html - afd744b0ddeb04e7b173c9e83423ec572 - - - print_val - classlibdap_1_1Str.html - a3fd0df896926273b491fa8b3dc040b20 - - - print_val - classlibdap_1_1Str.html - a7984e46de9b21ef554b156dec40cc559 - - - print_xml - classlibdap_1_1Str.html - a825820edee179550cfde3dfd4d274f2a - - - print_xml - classlibdap_1_1Str.html - a8bd2c7682edd48c64b210bdf247bdef7 - - - print_xml_writer - classlibdap_1_1Str.html - a11554ff931528b243e9af8173d205b44 - - - ptr_duplicate - classlibdap_1_1Str.html - a4e92b00a6a3a8056c80b2f4467646f42 - - - read - classlibdap_1_1Str.html - a1da003c53f2e663223f603ab3fbd7c8e - - - read_p - classlibdap_1_1Str.html - a38ff819a432217c55db2e9071928d20c - - - send_p - classlibdap_1_1Str.html - a980c0013817836aa77ef74aeec7fb192 - - - serialize - classlibdap_1_1Str.html - a1f71320548c6cf29b85d66de5998144d - - - serialize - classlibdap_1_1Str.html - af341f5722961ea40812d1fde478d1f79 - - - set_attr_table - classlibdap_1_1Str.html - a572a1d76a75981abac83a4241e90c0fa - - - set_attributes - classlibdap_1_1Str.html - ad4dda4cf43dca838d3de183b8e01cd09 - - - set_attributes_nocopy - classlibdap_1_1Str.html - afd0e5f87d19020f560d5c1ff8dd4d6a3 - - - set_in_selection - classlibdap_1_1Str.html - a2bc036248cdaf1affac464170f32ad30 - - - set_is_dap4 - classlibdap_1_1Str.html - abca9ddaa9a1ada8447cbe7193e8e288a - - - set_length - classlibdap_1_1Str.html - a4fe343c1eeb6fb1d61ab030433651d90 - - - set_name - classlibdap_1_1Str.html - a86504564f45a3e6748c6f1cc0ff4e9fa - - - set_parent - classlibdap_1_1Str.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - - - set_read_p - classlibdap_1_1Str.html - a4533905a450d2a7af32e7d5acd557676 - - - set_send_p - classlibdap_1_1Str.html - aba7b27635c95b74536de18393133628e - - - set_synthesized_p - classlibdap_1_1Str.html - a595cb4059cff24f801a1b6da79bd2f9e - - - set_type - classlibdap_1_1Str.html - af74f8d1ef57c9fcca46f620f75d175a3 - - - set_value - classlibdap_1_1Str.html - ac4083a612e46a9ef2d1cddc2d40a955f - - - synthesized_p - classlibdap_1_1Str.html - ae64e677da27249473cdba0b60cdbb90a - - - toString - classlibdap_1_1Str.html - a701eb3361f5b5628329ece019cd34519 - - - transfer_attributes - classlibdap_1_1Str.html - add8e836c622042a339152a6c31e5bdfb - - - transform_to_dap2 - classlibdap_1_1Str.html - affec8a11e9cc035d4b1e8fb9a87b2072 - - - transform_to_dap4 - classlibdap_1_1Str.html - adb03e2e1e40c3c888577c4666831a949 - - - type - classlibdap_1_1Str.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - - - type_name - classlibdap_1_1Str.html - a18a42c8ec35cb5b15cd651a4152f8a2c - - - val2buf - classlibdap_1_1Str.html - add396308f45a14355b60c411ed33bf7a - - - value - classlibdap_1_1Str.html - a6a184f229c17879291dba8f7477db677 - - - var - classlibdap_1_1Str.html - a4dc4fac1bb6083f6db645f37bfd59b85 - - - var - classlibdap_1_1Str.html - adecfc442b5927c79933c7f71cfe03fd2 - - - width - classlibdap_1_1Str.html - a636ebae6c75fb6dc5d929dc6db6f9558 - - - d_buf - classlibdap_1_1Str.html - ae743e901dfa00288dace899faa78aafc - - - d_in_selection - classlibdap_1_1Str.html - a949a89714965d7afdcd1e3edc8b7f0d4 - - - d_is_synthesized - classlibdap_1_1Str.html - a629e97e8eb7d285b54c9af8c1ec9a29a - - - - - Structure - classlibdap_1_1Structure.html - - - btp_stack - classlibdap_1_1Structure.html - ae9c6e71855b90a0e552713011c9ab81f - - - Vars_citer - classlibdap_1_1Structure.html - a5a585c58a099833c4ca26561963e0f83 - - - Vars_iter - classlibdap_1_1Structure.html - a2b73df890f61ebb628359c8fd12839b0 - - - Vars_riter - classlibdap_1_1Structure.html - a6122400e3f40d457751fb0372a650d03 - - - Structure - classlibdap_1_1Structure.html - a4187f25219b1fc7ec93e761795047e0a - - - Structure - classlibdap_1_1Structure.html - aa48289fa5979febe73ae74a90f2d246b - - - Structure - classlibdap_1_1Structure.html - a469f0fe441ac54689db27d7527d28748 - - - ~Structure - classlibdap_1_1Structure.html - a6ed7d2f86ea9f6e59c9a97ac5de3c7ae - - - add_var - classlibdap_1_1Structure.html - a2585c69c45b9ebec9c63993248eb5b4b - - - add_var_nocopy - classlibdap_1_1Structure.html - abdb52463a46e1b10040f245d4ed7642b - - - attributes - classlibdap_1_1Structure.html - a97452f06d2188eb838399a709246b5e9 - - - buf2val - classlibdap_1_1Structure.html - ac4dc7e8099322b5b403a7d0ae9079006 - - - check_semantics - classlibdap_1_1Structure.html - afe010638fd2ca9aab00dd1c21a9e4825 - - - clear_local_data - classlibdap_1_1Structure.html - aaddb97a4efbe035f41deaf03c6e8683f - - - compute_checksum - classlibdap_1_1Structure.html - a287ab9a4deb81a8ced6d8432be647925 - - - d4_ops - classlibdap_1_1Structure.html - a512a356f31ed6c4c1a368da0b054408a - - - dataset - classlibdap_1_1Structure.html - a47521ce321a17e6ce217870cb6a1a7aa - - - del_var - classlibdap_1_1Structure.html - af38d3785c4a7cd0063cbb9fc5943333c - - - del_var - classlibdap_1_1Structure.html - a69291878fc48217902fb0dcf1e2e1aff - - - deserialize - classlibdap_1_1Structure.html - a63763d2bae05463b100e823fb461a784 - - - deserialize - classlibdap_1_1Structure.html - a6f4253236d69c3c0ef64343136b5039b - - - dump - classlibdap_1_1Structure.html - a5c51539ddf185011301d04e1c927538a - - - element_count - classlibdap_1_1Structure.html - a1c2eecff00fa7e3af175c711d00fb86e - - - FQN - classlibdap_1_1Structure.html - afa6c06dab830b4e089641b44fea8293c - - - get_attr_table - classlibdap_1_1Structure.html - a1fcd9537c67e3bf88964b2656ff5bac1 - - - get_parent - classlibdap_1_1Structure.html - a3459cdaa239c33ce111ef360d8dc3017 - - - get_var_index - classlibdap_1_1Structure.html - ac2b4b28ed9d6f435129aa599ab809799 - - - get_vars_iter - classlibdap_1_1Structure.html - a1e6d8224e04d75e3d2a21263957cd42f - - - intern_data - classlibdap_1_1Structure.html - a065056826ef9c6fb2d08463af9e15a34 - - - intern_data - classlibdap_1_1Structure.html - a822a036364c56df5288a55670f51197e - - - is_constructor_type - classlibdap_1_1Structure.html - a8b8490e0047c6da52945699a132008ea - - - is_dap4 - classlibdap_1_1Structure.html - a7f6835cb5e5589ab5dad3fb4813d3bea - - - is_in_selection - classlibdap_1_1Structure.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - - - is_linear - classlibdap_1_1Structure.html - ac4687a4edb60d00fd781c82de40d53a4 - - - is_simple_type - classlibdap_1_1Structure.html - aae57e5b270b3a015d40c8db10b9b5549 - - - is_vector_type - classlibdap_1_1Structure.html - a7107c76dbcab71015141142383b6d022 - - - length - classlibdap_1_1Structure.html - aadcda7a659157bc6a832d8a5fb775b3f - - - m_duplicate - classlibdap_1_1Structure.html - a88b282d06686fc88a74c91e289ef31d7 - - - m_duplicate - classlibdap_1_1Structure.html - a0c55b826c8c5dfe7a454dc670e859a41 - - - m_exact_match - classlibdap_1_1Structure.html - aa5cd6124619d35e81bcfd426f1e569d3 - - - m_leaf_match - classlibdap_1_1Structure.html - a8fe3863a609488f4d5125abea96b82ed - - - name - classlibdap_1_1Structure.html - a24c5d67823b3cff7f4245a993072a142 - - - operator= - classlibdap_1_1Structure.html - aebf03bb4b5ce61f556edace7b1dd8db7 - - - ops - classlibdap_1_1Structure.html - a8a0000be2a244e3e07abda3020af8800 - - - print_dap4 - classlibdap_1_1Structure.html - a0f130e129b06773a9f3c94e3b492bb5c - - - print_decl - classlibdap_1_1Structure.html - ab7fb094be8da2a9f80f6d3b85e452934 - - - print_decl - classlibdap_1_1Structure.html - a6c2c4d7cbe1d6239c037272ec865f80b - - - print_val - classlibdap_1_1Structure.html - aa7f9cce8ca18461af332aab61123bf23 - - - print_val - classlibdap_1_1Structure.html - af50641301757ed26eb75fb2d29eae7ee - - - print_xml - classlibdap_1_1Structure.html - a32de0413045173aa8803f540a6cea39b - - - print_xml - classlibdap_1_1Structure.html - a7bbe6beabd94f576140e132e7a1017ff - - - print_xml_writer - classlibdap_1_1Structure.html - ab775a5e7e63757ac961b43800a95635f - - - ptr_duplicate - classlibdap_1_1Structure.html - ae20b384171ecded1940c3cb9780eda7e - - - read - classlibdap_1_1Structure.html - ad0af40e2565972fa44985d173370c264 - - - read_p - classlibdap_1_1Structure.html - a38ff819a432217c55db2e9071928d20c - - - send_p - classlibdap_1_1Structure.html - a980c0013817836aa77ef74aeec7fb192 - - - serialize - classlibdap_1_1Structure.html - a64268840654a0b37a15ccc601dbcfd33 - - - serialize - classlibdap_1_1Structure.html - ab868fe97d5075b702bd084c2e9540913 - - - set_attr_table - classlibdap_1_1Structure.html - a572a1d76a75981abac83a4241e90c0fa - - - set_attributes - classlibdap_1_1Structure.html - ad4dda4cf43dca838d3de183b8e01cd09 - - - set_attributes_nocopy - classlibdap_1_1Structure.html - afd0e5f87d19020f560d5c1ff8dd4d6a3 - - - set_in_selection - classlibdap_1_1Structure.html - ac30becb1ffe7d2cd4cbcd24fc216c9a3 - - - set_is_dap4 - classlibdap_1_1Structure.html - abca9ddaa9a1ada8447cbe7193e8e288a - - - set_leaf_sequence - classlibdap_1_1Structure.html - a69851299078fd4bfc39d722c8cdc3cb9 - - - set_length - classlibdap_1_1Structure.html - a4fe343c1eeb6fb1d61ab030433651d90 - - - set_name - classlibdap_1_1Structure.html - a86504564f45a3e6748c6f1cc0ff4e9fa - - - set_parent - classlibdap_1_1Structure.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - - - set_read_p - classlibdap_1_1Structure.html - af52e60d8589eed1a18a14e9c6a57db65 - - - set_send_p - classlibdap_1_1Structure.html - aafbcf9bef6719fe60ac707e02956e09d - - - set_synthesized_p - classlibdap_1_1Structure.html - a595cb4059cff24f801a1b6da79bd2f9e - - - set_type - classlibdap_1_1Structure.html - af74f8d1ef57c9fcca46f620f75d175a3 - - - synthesized_p - classlibdap_1_1Structure.html - ae64e677da27249473cdba0b60cdbb90a - - - toString - classlibdap_1_1Structure.html - a701eb3361f5b5628329ece019cd34519 - - - transfer_attributes - classlibdap_1_1Structure.html - a799d2bd8ef9505b1d493d8cd73b72746 - - - transform_to_dap2 - classlibdap_1_1Structure.html - a9e00a214b9076b4849e2b9bc2605af21 - - - transform_to_dap4 - classlibdap_1_1Structure.html - af687033917e49b86356f23ead6353e6f - - - type - classlibdap_1_1Structure.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - - - type_name - classlibdap_1_1Structure.html - a18a42c8ec35cb5b15cd651a4152f8a2c - - - val2buf - classlibdap_1_1Structure.html - ac742b1bf93889e541128b1d123821ee6 - - - var - classlibdap_1_1Structure.html - a36a7412da7b5257d7666add726fea1a6 - - - var - classlibdap_1_1Structure.html - a68f1779dc328f890062722d90fad084a - - - var_begin - classlibdap_1_1Structure.html - adeafe3d6c82d07b456a598a7b446c2c6 - - - var_end - classlibdap_1_1Structure.html - a936b38c7c35ffb4fe17c5b8e85bdaaa2 - - - var_rbegin - classlibdap_1_1Structure.html - aa025cf546ca35250454653c1ec684d91 - - - var_rend - classlibdap_1_1Structure.html - aede7cf5889e101db1ea8f22c3a84a5d3 - - - width - classlibdap_1_1Structure.html - a0b1e3ae7195f95c42ca98f42826a1ff5 - - - d_in_selection - classlibdap_1_1Structure.html - a949a89714965d7afdcd1e3edc8b7f0d4 - - - d_is_synthesized - classlibdap_1_1Structure.html - a629e97e8eb7d285b54c9af8c1ec9a29a - - - d_vars - classlibdap_1_1Structure.html - a75b2aa694dc76294d6aa5f7456e49aa2 - - - - - UInt16 - classlibdap_1_1UInt16.html - - - btp_stack - classlibdap_1_1UInt16.html - ae9c6e71855b90a0e552713011c9ab81f - - - UInt16 - classlibdap_1_1UInt16.html - ab4b8895483d15ab84eb4fda029089bc8 - - - UInt16 - classlibdap_1_1UInt16.html - a4481b161be1fad4e9c2ea3c1293d540b - - - ~UInt16 - classlibdap_1_1UInt16.html - a80f06928519cce10294f8ef2b65ebfcb - - - UInt16 - classlibdap_1_1UInt16.html - a7461c6700f93df720efd8fd540cb98e8 - - - add_var - classlibdap_1_1UInt16.html - adca3c2621c4a509537c18362005d7f7f - - - add_var_nocopy - classlibdap_1_1UInt16.html - aa1192360cea4dc516c822cd3e13dc723 - - - attributes - classlibdap_1_1UInt16.html - a97452f06d2188eb838399a709246b5e9 - - - buf2val - classlibdap_1_1UInt16.html - a80b1b42ac738b62de9a8d4d0b1c2d50c - - - check_semantics - classlibdap_1_1UInt16.html - aec503abec2fd3090e7738c0a575491f8 - - - clear_local_data - classlibdap_1_1UInt16.html - aaddb97a4efbe035f41deaf03c6e8683f - - - compute_checksum - classlibdap_1_1UInt16.html - a019f53455cc1e502103dc1e4f2b1ba22 - - - d4_ops - classlibdap_1_1UInt16.html - a512a356f31ed6c4c1a368da0b054408a - - - dataset - classlibdap_1_1UInt16.html - a47521ce321a17e6ce217870cb6a1a7aa - - - deserialize - classlibdap_1_1UInt16.html - aa2291137d78a57a433db3b6ab2f31d1b - - - deserialize - classlibdap_1_1UInt16.html - ac647da7d972e876ebd5e9855a33deb13 - - - dump - classlibdap_1_1UInt16.html - ad9f239f1e7b1ec47d67777fd1592ede8 - - - element_count - classlibdap_1_1UInt16.html - a5c2235737737b482bfa7536b8aeab810 - - - FQN - classlibdap_1_1UInt16.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - - - get_attr_table - classlibdap_1_1UInt16.html - a1fcd9537c67e3bf88964b2656ff5bac1 - - - get_parent - classlibdap_1_1UInt16.html - a3459cdaa239c33ce111ef360d8dc3017 - - - intern_data - classlibdap_1_1UInt16.html - a722d33783aa0272d339b0301a4f77e59 - - - intern_data - classlibdap_1_1UInt16.html - a1956e6ea90a745516f5372c859173433 - - - is_constructor_type - classlibdap_1_1UInt16.html - a8b8490e0047c6da52945699a132008ea - - - is_dap4 - classlibdap_1_1UInt16.html - a7f6835cb5e5589ab5dad3fb4813d3bea - - - is_in_selection - classlibdap_1_1UInt16.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - - - is_simple_type - classlibdap_1_1UInt16.html - aae57e5b270b3a015d40c8db10b9b5549 - - - is_vector_type - classlibdap_1_1UInt16.html - a7107c76dbcab71015141142383b6d022 - - - length - classlibdap_1_1UInt16.html - aadcda7a659157bc6a832d8a5fb775b3f - - - m_duplicate - classlibdap_1_1UInt16.html - a0c55b826c8c5dfe7a454dc670e859a41 - - - name - classlibdap_1_1UInt16.html - a24c5d67823b3cff7f4245a993072a142 - - - operator= - classlibdap_1_1UInt16.html - ab5ae01efca7bb3bd61433be58af14213 - - - ops - classlibdap_1_1UInt16.html - a0f82046f304407cb218bfbe88e89518b - - - print_dap4 - classlibdap_1_1UInt16.html - afcddbe441380b95c894510c02980b163 - - - print_decl - classlibdap_1_1UInt16.html - a2d799fad93255d7f2b803562ae7a5784 - - - print_decl - classlibdap_1_1UInt16.html - afd744b0ddeb04e7b173c9e83423ec572 - - - print_val - classlibdap_1_1UInt16.html - a482e6f61f36b497517830b68023ac803 - - - print_val - classlibdap_1_1UInt16.html - ac814682caeef62518ae7c7cddceeb45a - - - print_xml - classlibdap_1_1UInt16.html - a825820edee179550cfde3dfd4d274f2a - - - print_xml - classlibdap_1_1UInt16.html - a8bd2c7682edd48c64b210bdf247bdef7 - - - print_xml_writer - classlibdap_1_1UInt16.html - a11554ff931528b243e9af8173d205b44 - - - ptr_duplicate - classlibdap_1_1UInt16.html - a9522d2413078b922c4e499545f623021 - - - read - classlibdap_1_1UInt16.html - a1da003c53f2e663223f603ab3fbd7c8e - - - read_p - classlibdap_1_1UInt16.html - a38ff819a432217c55db2e9071928d20c - - - send_p - classlibdap_1_1UInt16.html - a980c0013817836aa77ef74aeec7fb192 - - - serialize - classlibdap_1_1UInt16.html - a1db616a4ec9989c3cee3d18c30bf4f27 - - - serialize - classlibdap_1_1UInt16.html - aa7772b37ff53b02e70c146da59c9c4c7 - - - set_attr_table - classlibdap_1_1UInt16.html - a572a1d76a75981abac83a4241e90c0fa - - - set_attributes - classlibdap_1_1UInt16.html - ad4dda4cf43dca838d3de183b8e01cd09 - - - set_attributes_nocopy - classlibdap_1_1UInt16.html - afd0e5f87d19020f560d5c1ff8dd4d6a3 - - - set_in_selection - classlibdap_1_1UInt16.html - a2bc036248cdaf1affac464170f32ad30 - - - set_is_dap4 - classlibdap_1_1UInt16.html - abca9ddaa9a1ada8447cbe7193e8e288a - - - set_length - classlibdap_1_1UInt16.html - a4fe343c1eeb6fb1d61ab030433651d90 - - - set_name - classlibdap_1_1UInt16.html - a86504564f45a3e6748c6f1cc0ff4e9fa - - - set_parent - classlibdap_1_1UInt16.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - - - set_read_p - classlibdap_1_1UInt16.html - a4533905a450d2a7af32e7d5acd557676 - - - set_send_p - classlibdap_1_1UInt16.html - aba7b27635c95b74536de18393133628e - - - set_synthesized_p - classlibdap_1_1UInt16.html - a595cb4059cff24f801a1b6da79bd2f9e - - - set_type - classlibdap_1_1UInt16.html - af74f8d1ef57c9fcca46f620f75d175a3 - - - set_value - classlibdap_1_1UInt16.html - a584b569a4013469967b5c0275c6f4b21 - - - synthesized_p - classlibdap_1_1UInt16.html - ae64e677da27249473cdba0b60cdbb90a - - - toString - classlibdap_1_1UInt16.html - a701eb3361f5b5628329ece019cd34519 - - - transfer_attributes - classlibdap_1_1UInt16.html - add8e836c622042a339152a6c31e5bdfb - - - transform_to_dap2 - classlibdap_1_1UInt16.html - affec8a11e9cc035d4b1e8fb9a87b2072 - - - transform_to_dap4 - classlibdap_1_1UInt16.html - adb03e2e1e40c3c888577c4666831a949 - - - type - classlibdap_1_1UInt16.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - - - type_name - classlibdap_1_1UInt16.html - a18a42c8ec35cb5b15cd651a4152f8a2c - - - val2buf - classlibdap_1_1UInt16.html - a0212ba69258238b711d8aef3174f3fb7 - - - value - classlibdap_1_1UInt16.html - aae80af0be593369452916b7bdd115afc - - - var - classlibdap_1_1UInt16.html - a4dc4fac1bb6083f6db645f37bfd59b85 - - - var - classlibdap_1_1UInt16.html - adecfc442b5927c79933c7f71cfe03fd2 - - - width - classlibdap_1_1UInt16.html - a8545ca3b3a55da3eabc9b4d43e008e3e - - - d_buf - classlibdap_1_1UInt16.html - a0fda36917d73f1a603c254991ed97757 - - - d_in_selection - classlibdap_1_1UInt16.html - a949a89714965d7afdcd1e3edc8b7f0d4 - - - d_is_synthesized - classlibdap_1_1UInt16.html - a629e97e8eb7d285b54c9af8c1ec9a29a - - - - - UInt32 - classlibdap_1_1UInt32.html - - - btp_stack - classlibdap_1_1UInt32.html - ae9c6e71855b90a0e552713011c9ab81f - - - UInt32 - classlibdap_1_1UInt32.html - a01d713f1eae7c2b0c9e8287ca1670bcf - - - UInt32 - classlibdap_1_1UInt32.html - a2a57e3fcd5013cd0ea6ec1161d5f1ff8 - - - ~UInt32 - classlibdap_1_1UInt32.html - a45811751ce2b56f434e6f91ac0bfe96c - - - UInt32 - classlibdap_1_1UInt32.html - a79d3102b59d24815fab55bbee5600e1f - - - add_var - classlibdap_1_1UInt32.html - adca3c2621c4a509537c18362005d7f7f - - - add_var_nocopy - classlibdap_1_1UInt32.html - aa1192360cea4dc516c822cd3e13dc723 - - - attributes - classlibdap_1_1UInt32.html - a97452f06d2188eb838399a709246b5e9 - - - buf2val - classlibdap_1_1UInt32.html - a132425225a24d8a0d3b2242660533494 - - - check_semantics - classlibdap_1_1UInt32.html - aec503abec2fd3090e7738c0a575491f8 - - - clear_local_data - classlibdap_1_1UInt32.html - aaddb97a4efbe035f41deaf03c6e8683f - - - compute_checksum - classlibdap_1_1UInt32.html - a2dbfaff74220c15ec27b42310781a286 - - - d4_ops - classlibdap_1_1UInt32.html - a512a356f31ed6c4c1a368da0b054408a - - - dataset - classlibdap_1_1UInt32.html - a47521ce321a17e6ce217870cb6a1a7aa - - - deserialize - classlibdap_1_1UInt32.html - a1bf98390bea0fffe8a9b9f0d560f3b72 - - - deserialize - classlibdap_1_1UInt32.html - a87953ef0a0ef20ecbbc9ec646a14d8b9 - - - dump - classlibdap_1_1UInt32.html - a2506c7fb8f214f635cabc0fabc6b8e62 - - - element_count - classlibdap_1_1UInt32.html - a5c2235737737b482bfa7536b8aeab810 - - - FQN - classlibdap_1_1UInt32.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - - - get_attr_table - classlibdap_1_1UInt32.html - a1fcd9537c67e3bf88964b2656ff5bac1 - - - get_parent - classlibdap_1_1UInt32.html - a3459cdaa239c33ce111ef360d8dc3017 - - - intern_data - classlibdap_1_1UInt32.html - a722d33783aa0272d339b0301a4f77e59 - - - intern_data - classlibdap_1_1UInt32.html - a1956e6ea90a745516f5372c859173433 - - - is_constructor_type - classlibdap_1_1UInt32.html - a8b8490e0047c6da52945699a132008ea - - - is_dap4 - classlibdap_1_1UInt32.html - a7f6835cb5e5589ab5dad3fb4813d3bea - - - is_in_selection - classlibdap_1_1UInt32.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - - - is_simple_type - classlibdap_1_1UInt32.html - aae57e5b270b3a015d40c8db10b9b5549 - - - is_vector_type - classlibdap_1_1UInt32.html - a7107c76dbcab71015141142383b6d022 - - - length - classlibdap_1_1UInt32.html - aadcda7a659157bc6a832d8a5fb775b3f - - - m_duplicate - classlibdap_1_1UInt32.html - a0c55b826c8c5dfe7a454dc670e859a41 - - - name - classlibdap_1_1UInt32.html - a24c5d67823b3cff7f4245a993072a142 - - - operator= - classlibdap_1_1UInt32.html - a43983c6c4430c4f6c0cfd408aced9cca - - - ops - classlibdap_1_1UInt32.html - a33a7ffcc50faa13ed94a48e7766ffd1e - - - print_dap4 - classlibdap_1_1UInt32.html - afcddbe441380b95c894510c02980b163 - - - print_decl - classlibdap_1_1UInt32.html - a2d799fad93255d7f2b803562ae7a5784 - - - print_decl - classlibdap_1_1UInt32.html - afd744b0ddeb04e7b173c9e83423ec572 - - - print_val - classlibdap_1_1UInt32.html - ae627cfc24d4d9dfaf34b538385f1712c - - - print_val - classlibdap_1_1UInt32.html - a2f15a6d4c69db84e0dad12c42630b7e3 - - - print_xml - classlibdap_1_1UInt32.html - a825820edee179550cfde3dfd4d274f2a - - - print_xml - classlibdap_1_1UInt32.html - a8bd2c7682edd48c64b210bdf247bdef7 - - - print_xml_writer - classlibdap_1_1UInt32.html - a11554ff931528b243e9af8173d205b44 - - - ptr_duplicate - classlibdap_1_1UInt32.html - ae3ea27e286caaf645c5d61cdf4d455f4 - - - read - classlibdap_1_1UInt32.html - a1da003c53f2e663223f603ab3fbd7c8e - - - read_p - classlibdap_1_1UInt32.html - a38ff819a432217c55db2e9071928d20c - - - send_p - classlibdap_1_1UInt32.html - a980c0013817836aa77ef74aeec7fb192 - - - serialize - classlibdap_1_1UInt32.html - af76d9ef68ae7861401bdf611e4bacd16 - - - serialize - classlibdap_1_1UInt32.html - ac05e4247715d52c8bc6459a32a810471 - - - set_attr_table - classlibdap_1_1UInt32.html - a572a1d76a75981abac83a4241e90c0fa - - - set_attributes - classlibdap_1_1UInt32.html - ad4dda4cf43dca838d3de183b8e01cd09 - - - set_attributes_nocopy - classlibdap_1_1UInt32.html - afd0e5f87d19020f560d5c1ff8dd4d6a3 - - - set_in_selection - classlibdap_1_1UInt32.html - a2bc036248cdaf1affac464170f32ad30 - - - set_is_dap4 - classlibdap_1_1UInt32.html - abca9ddaa9a1ada8447cbe7193e8e288a - - - set_length - classlibdap_1_1UInt32.html - a4fe343c1eeb6fb1d61ab030433651d90 - - - set_name - classlibdap_1_1UInt32.html - a86504564f45a3e6748c6f1cc0ff4e9fa - - - set_parent - classlibdap_1_1UInt32.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - - - set_read_p - classlibdap_1_1UInt32.html - a4533905a450d2a7af32e7d5acd557676 - - - set_send_p - classlibdap_1_1UInt32.html - aba7b27635c95b74536de18393133628e - - - set_synthesized_p - classlibdap_1_1UInt32.html - a595cb4059cff24f801a1b6da79bd2f9e - - - set_type - classlibdap_1_1UInt32.html - af74f8d1ef57c9fcca46f620f75d175a3 - - - set_value - classlibdap_1_1UInt32.html - adaec104ee8280822a4c4f2287854efab - - - synthesized_p - classlibdap_1_1UInt32.html - ae64e677da27249473cdba0b60cdbb90a - - - toString - classlibdap_1_1UInt32.html - a701eb3361f5b5628329ece019cd34519 - - - transfer_attributes - classlibdap_1_1UInt32.html - add8e836c622042a339152a6c31e5bdfb - - - transform_to_dap2 - classlibdap_1_1UInt32.html - affec8a11e9cc035d4b1e8fb9a87b2072 - - - transform_to_dap4 - classlibdap_1_1UInt32.html - adb03e2e1e40c3c888577c4666831a949 - - - type - classlibdap_1_1UInt32.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - - - type_name - classlibdap_1_1UInt32.html - a18a42c8ec35cb5b15cd651a4152f8a2c - - - val2buf - classlibdap_1_1UInt32.html - a4670043bd9007f36807c7df7fd49cb69 - - - value - classlibdap_1_1UInt32.html - a81e29c57dab738e83a4d476060668b72 - - - var - classlibdap_1_1UInt32.html - a4dc4fac1bb6083f6db645f37bfd59b85 - - - var - classlibdap_1_1UInt32.html - adecfc442b5927c79933c7f71cfe03fd2 - - - width - classlibdap_1_1UInt32.html - a38405864c06780759d24d85f95621c62 - - - d_buf - classlibdap_1_1UInt32.html - afa20beed0e1a181f523bd88969d58bda - - - d_in_selection - classlibdap_1_1UInt32.html - a949a89714965d7afdcd1e3edc8b7f0d4 - - - d_is_synthesized - classlibdap_1_1UInt32.html - a629e97e8eb7d285b54c9af8c1ec9a29a - - - - - UInt64 - classlibdap_1_1UInt64.html - - - btp_stack - classlibdap_1_1UInt64.html - ae9c6e71855b90a0e552713011c9ab81f - - - UInt64 - classlibdap_1_1UInt64.html - ab516d59cb6050179081971ffd3d70a6d - - - UInt64 - classlibdap_1_1UInt64.html - a329aa12343f9df0b1b50fca996c85ac1 - - - ~UInt64 - classlibdap_1_1UInt64.html - ae6376ea59d763c022248129c88614b7a - - - UInt64 - classlibdap_1_1UInt64.html - afadb6ed18059d5be089be1e8966e52d9 - - - add_var - classlibdap_1_1UInt64.html - adca3c2621c4a509537c18362005d7f7f - - - add_var_nocopy - classlibdap_1_1UInt64.html - aa1192360cea4dc516c822cd3e13dc723 - - - attributes - classlibdap_1_1UInt64.html - a97452f06d2188eb838399a709246b5e9 - - - check_semantics - classlibdap_1_1UInt64.html - aec503abec2fd3090e7738c0a575491f8 - - - clear_local_data - classlibdap_1_1UInt64.html - aaddb97a4efbe035f41deaf03c6e8683f - - - compute_checksum - classlibdap_1_1UInt64.html - a23e6785e872f60ab600dbd7ccbf76391 - - - d4_ops - classlibdap_1_1UInt64.html - a1c177d21c0eeeb26083a4cf6a01f7873 - - - dataset - classlibdap_1_1UInt64.html - a47521ce321a17e6ce217870cb6a1a7aa - - - deserialize - classlibdap_1_1UInt64.html - ad1287870ab52d0aa6c4f60015bcb6e9f - - - deserialize - classlibdap_1_1UInt64.html - a1f27d99250e857efd86ac9db788bbf1b - - - dump - classlibdap_1_1UInt64.html - afc3afdbf38c4097caba0a1db85e3a9a6 - - - element_count - classlibdap_1_1UInt64.html - a5c2235737737b482bfa7536b8aeab810 - - - FQN - classlibdap_1_1UInt64.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - - - get_attr_table - classlibdap_1_1UInt64.html - a1fcd9537c67e3bf88964b2656ff5bac1 - - - get_parent - classlibdap_1_1UInt64.html - a3459cdaa239c33ce111ef360d8dc3017 - - - intern_data - classlibdap_1_1UInt64.html - a722d33783aa0272d339b0301a4f77e59 - - - intern_data - classlibdap_1_1UInt64.html - a1956e6ea90a745516f5372c859173433 - - - is_constructor_type - classlibdap_1_1UInt64.html - a8b8490e0047c6da52945699a132008ea - - - is_dap4 - classlibdap_1_1UInt64.html - a7f6835cb5e5589ab5dad3fb4813d3bea - - - is_in_selection - classlibdap_1_1UInt64.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - - - is_simple_type - classlibdap_1_1UInt64.html - aae57e5b270b3a015d40c8db10b9b5549 - - - is_vector_type - classlibdap_1_1UInt64.html - a7107c76dbcab71015141142383b6d022 - - - length - classlibdap_1_1UInt64.html - aadcda7a659157bc6a832d8a5fb775b3f - - - m_duplicate - classlibdap_1_1UInt64.html - a0c55b826c8c5dfe7a454dc670e859a41 - - - name - classlibdap_1_1UInt64.html - a24c5d67823b3cff7f4245a993072a142 - - - operator= - classlibdap_1_1UInt64.html - a08ec11387fd1fe67f1e6b76ec17d148b - - - ops - classlibdap_1_1UInt64.html - a4ceb6fa4a9fc731410962dc9e1c787a4 - - - print_dap4 - classlibdap_1_1UInt64.html - afcddbe441380b95c894510c02980b163 - - - print_decl - classlibdap_1_1UInt64.html - a2d799fad93255d7f2b803562ae7a5784 - - - print_decl - classlibdap_1_1UInt64.html - afd744b0ddeb04e7b173c9e83423ec572 - - - print_val - classlibdap_1_1UInt64.html - ae4eed9eaa057932bd1e817cea8477d79 - - - print_xml - classlibdap_1_1UInt64.html - a825820edee179550cfde3dfd4d274f2a - - - print_xml - classlibdap_1_1UInt64.html - a8bd2c7682edd48c64b210bdf247bdef7 - - - print_xml_writer - classlibdap_1_1UInt64.html - a11554ff931528b243e9af8173d205b44 - - - ptr_duplicate - classlibdap_1_1UInt64.html - ab87b5a08c9627f4813af802d2eb7e8da - - - read - classlibdap_1_1UInt64.html - a1da003c53f2e663223f603ab3fbd7c8e - - - read_p - classlibdap_1_1UInt64.html - a38ff819a432217c55db2e9071928d20c - - - send_p - classlibdap_1_1UInt64.html - a980c0013817836aa77ef74aeec7fb192 - - - serialize - classlibdap_1_1UInt64.html - a8f9ff4dfa4f7e93d838c35097b2e3930 - - - serialize - classlibdap_1_1UInt64.html - adc24a735977e28acb0e6f78667c1dd21 - - - set_attr_table - classlibdap_1_1UInt64.html - a572a1d76a75981abac83a4241e90c0fa - - - set_attributes - classlibdap_1_1UInt64.html - ad4dda4cf43dca838d3de183b8e01cd09 - - - set_attributes_nocopy - classlibdap_1_1UInt64.html - afd0e5f87d19020f560d5c1ff8dd4d6a3 - - - set_in_selection - classlibdap_1_1UInt64.html - a2bc036248cdaf1affac464170f32ad30 - - - set_is_dap4 - classlibdap_1_1UInt64.html - abca9ddaa9a1ada8447cbe7193e8e288a - - - set_length - classlibdap_1_1UInt64.html - a4fe343c1eeb6fb1d61ab030433651d90 - - - set_name - classlibdap_1_1UInt64.html - a86504564f45a3e6748c6f1cc0ff4e9fa - - - set_parent - classlibdap_1_1UInt64.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - - - set_read_p - classlibdap_1_1UInt64.html - a4533905a450d2a7af32e7d5acd557676 - - - set_send_p - classlibdap_1_1UInt64.html - aba7b27635c95b74536de18393133628e - - - set_synthesized_p - classlibdap_1_1UInt64.html - a595cb4059cff24f801a1b6da79bd2f9e - - - set_type - classlibdap_1_1UInt64.html - af74f8d1ef57c9fcca46f620f75d175a3 - - - set_value - classlibdap_1_1UInt64.html - ad5080488563e2dc7b4c3e06287aa355e - - - synthesized_p - classlibdap_1_1UInt64.html - ae64e677da27249473cdba0b60cdbb90a - - - toString - classlibdap_1_1UInt64.html - a701eb3361f5b5628329ece019cd34519 - - - transfer_attributes - classlibdap_1_1UInt64.html - add8e836c622042a339152a6c31e5bdfb - - - transform_to_dap2 - classlibdap_1_1UInt64.html - a128cc879ec5b5c5541d0f3b4289d879e - - - transform_to_dap4 - classlibdap_1_1UInt64.html - adb03e2e1e40c3c888577c4666831a949 - - - type - classlibdap_1_1UInt64.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - - - type_name - classlibdap_1_1UInt64.html - a18a42c8ec35cb5b15cd651a4152f8a2c - - - value - classlibdap_1_1UInt64.html - a1f24888d9690bddf56ee7a0f39f19cfb - - - var - classlibdap_1_1UInt64.html - a4dc4fac1bb6083f6db645f37bfd59b85 - - - var - classlibdap_1_1UInt64.html - adecfc442b5927c79933c7f71cfe03fd2 - - - width - classlibdap_1_1UInt64.html - a924125a6d5bfb10ae1ad42c40ab4dfff - - - d_buf - classlibdap_1_1UInt64.html - aaad9aa337708abc0c52cf7d2c1c73250 - - - d_in_selection - classlibdap_1_1UInt64.html - a949a89714965d7afdcd1e3edc8b7f0d4 - - - d_is_synthesized - classlibdap_1_1UInt64.html - a629e97e8eb7d285b54c9af8c1ec9a29a - - - - - UnMarshaller - classlibdap_1_1UnMarshaller.html - - - dump - classlibdap_1_1UnMarshaller.html - a2aba5bbe9a2990b03668c78817312782 - - - get_byte - classlibdap_1_1UnMarshaller.html - a3bd83db8260c855db81eaeaf0078342e - - - get_float32 - classlibdap_1_1UnMarshaller.html - a9cc9a16495b80c7f29d1bc7b2f4b29dc - - - get_float64 - classlibdap_1_1UnMarshaller.html - a4dc8a9a808e5a4184c9a4ee0e706ec6d - - - get_int - classlibdap_1_1UnMarshaller.html - a6d8fcf5497c6a6f21e44662fceaad48a - - - get_int16 - classlibdap_1_1UnMarshaller.html - a399095f74628e9acb3c8aa7a65735fdd - - - get_int32 - classlibdap_1_1UnMarshaller.html - a4b1d9aa890831d5e4efd4d8e9a641d53 - - - get_opaque - classlibdap_1_1UnMarshaller.html - a6d7751b2b559e872041e1c8e53ad2298 - - - get_str - classlibdap_1_1UnMarshaller.html - ac2b025e1bbede8039c8ed3a11ccf794e - - - get_uint16 - classlibdap_1_1UnMarshaller.html - a49899ddc472246a6fb528cdc804cb572 - - - get_uint32 - classlibdap_1_1UnMarshaller.html - ad8593133d4964af5970f0cf33855f2c5 - - - get_url - classlibdap_1_1UnMarshaller.html - a8df17d5aef596cf5123a265d508ec600 - - - get_vector - classlibdap_1_1UnMarshaller.html - a895d04c43ab9b843e79884e151207a26 - - - get_vector - classlibdap_1_1UnMarshaller.html - a9e54eb20f010ddcada6d25c84c88c213 - - - - - Url - classlibdap_1_1Url.html - - - btp_stack - classlibdap_1_1Url.html - ae9c6e71855b90a0e552713011c9ab81f - - - Url - classlibdap_1_1Url.html - a9fb1b73af8ce02df5081945250f64eb8 - - - Url - classlibdap_1_1Url.html - a210226151d8473808acbeba12122f1c2 - - - Url - classlibdap_1_1Url.html - aad2be543f502c1e95b2b055c6cd80e93 - - - Url - classlibdap_1_1Url.html - a85d593f6bb6cd3d5c6ddacbfa61ad930 - - - ~Url - classlibdap_1_1Url.html - a4ad513e5855df24483f197fb19c88629 - - - add_var - classlibdap_1_1Url.html - adca3c2621c4a509537c18362005d7f7f - - - add_var_nocopy - classlibdap_1_1Url.html - aa1192360cea4dc516c822cd3e13dc723 - - - attributes - classlibdap_1_1Url.html - a97452f06d2188eb838399a709246b5e9 - - - buf2val - classlibdap_1_1Url.html - aa63cf0376fe71ceb030b48e7fdbad863 - - - check_semantics - classlibdap_1_1Url.html - aec503abec2fd3090e7738c0a575491f8 - - - clear_local_data - classlibdap_1_1Url.html - aaddb97a4efbe035f41deaf03c6e8683f - - - compute_checksum - classlibdap_1_1Url.html - ae98348772288b417561f39b445f48c9e - - - d4_ops - classlibdap_1_1Url.html - a051efecca32b2679bd0b1700453db617 - - - dataset - classlibdap_1_1Url.html - a47521ce321a17e6ce217870cb6a1a7aa - - - deserialize - classlibdap_1_1Url.html - a2bafe2f1851b3a4cac6089b0e2282010 - - - deserialize - classlibdap_1_1Url.html - afdeab29d40e99baa3d0def2f8f6d8b2e - - - dump - classlibdap_1_1Url.html - a9bae029c10a3824cd95d7e3fb2c11911 - - - element_count - classlibdap_1_1Url.html - a5c2235737737b482bfa7536b8aeab810 - - - FQN - classlibdap_1_1Url.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - - - get_attr_table - classlibdap_1_1Url.html - a1fcd9537c67e3bf88964b2656ff5bac1 - - - get_parent - classlibdap_1_1Url.html - a3459cdaa239c33ce111ef360d8dc3017 - - - intern_data - classlibdap_1_1Url.html - a722d33783aa0272d339b0301a4f77e59 - - - intern_data - classlibdap_1_1Url.html - a1956e6ea90a745516f5372c859173433 - - - is_constructor_type - classlibdap_1_1Url.html - a8b8490e0047c6da52945699a132008ea - - - is_dap4 - classlibdap_1_1Url.html - a7f6835cb5e5589ab5dad3fb4813d3bea - - - is_in_selection - classlibdap_1_1Url.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - - - is_simple_type - classlibdap_1_1Url.html - aae57e5b270b3a015d40c8db10b9b5549 - - - is_vector_type - classlibdap_1_1Url.html - a7107c76dbcab71015141142383b6d022 - - - length - classlibdap_1_1Url.html - a6159e681dd78ac9d7660df1a734fd9d4 - - - m_duplicate - classlibdap_1_1Url.html - a0c55b826c8c5dfe7a454dc670e859a41 - - - name - classlibdap_1_1Url.html - a24c5d67823b3cff7f4245a993072a142 - - - ops - classlibdap_1_1Url.html - a5b74994fb52ceb3248c558015c4520a5 - - - print_dap4 - classlibdap_1_1Url.html - afcddbe441380b95c894510c02980b163 - - - print_decl - classlibdap_1_1Url.html - a2d799fad93255d7f2b803562ae7a5784 - - - print_decl - classlibdap_1_1Url.html - afd744b0ddeb04e7b173c9e83423ec572 - - - print_val - classlibdap_1_1Url.html - a3fd0df896926273b491fa8b3dc040b20 - - - print_val - classlibdap_1_1Url.html - a7984e46de9b21ef554b156dec40cc559 - - - print_xml - classlibdap_1_1Url.html - a825820edee179550cfde3dfd4d274f2a - - - print_xml - classlibdap_1_1Url.html - a8bd2c7682edd48c64b210bdf247bdef7 - - - print_xml_writer - classlibdap_1_1Url.html - a11554ff931528b243e9af8173d205b44 - - - ptr_duplicate - classlibdap_1_1Url.html - a1064f1f9a75dba713a8e676a278f291c - - - read - classlibdap_1_1Url.html - a1da003c53f2e663223f603ab3fbd7c8e - - - read_p - classlibdap_1_1Url.html - a38ff819a432217c55db2e9071928d20c - - - send_p - classlibdap_1_1Url.html - a980c0013817836aa77ef74aeec7fb192 - - - serialize - classlibdap_1_1Url.html - a1f71320548c6cf29b85d66de5998144d - - - serialize - classlibdap_1_1Url.html - af341f5722961ea40812d1fde478d1f79 - - - set_attr_table - classlibdap_1_1Url.html - a572a1d76a75981abac83a4241e90c0fa - - - set_attributes - classlibdap_1_1Url.html - ad4dda4cf43dca838d3de183b8e01cd09 - - - set_attributes_nocopy - classlibdap_1_1Url.html - afd0e5f87d19020f560d5c1ff8dd4d6a3 - - - set_in_selection - classlibdap_1_1Url.html - a2bc036248cdaf1affac464170f32ad30 - - - set_is_dap4 - classlibdap_1_1Url.html - abca9ddaa9a1ada8447cbe7193e8e288a - - - set_length - classlibdap_1_1Url.html - a4fe343c1eeb6fb1d61ab030433651d90 - - - set_name - classlibdap_1_1Url.html - a86504564f45a3e6748c6f1cc0ff4e9fa - - - set_parent - classlibdap_1_1Url.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - - - set_read_p - classlibdap_1_1Url.html - a4533905a450d2a7af32e7d5acd557676 - - - set_send_p - classlibdap_1_1Url.html - aba7b27635c95b74536de18393133628e - - - set_synthesized_p - classlibdap_1_1Url.html - a595cb4059cff24f801a1b6da79bd2f9e - - - set_type - classlibdap_1_1Url.html - af74f8d1ef57c9fcca46f620f75d175a3 - - - set_value - classlibdap_1_1Url.html - ac4083a612e46a9ef2d1cddc2d40a955f - - - synthesized_p - classlibdap_1_1Url.html - ae64e677da27249473cdba0b60cdbb90a - - - toString - classlibdap_1_1Url.html - a701eb3361f5b5628329ece019cd34519 - - - transfer_attributes - classlibdap_1_1Url.html - add8e836c622042a339152a6c31e5bdfb - - - transform_to_dap2 - classlibdap_1_1Url.html - affec8a11e9cc035d4b1e8fb9a87b2072 - - - transform_to_dap4 - classlibdap_1_1Url.html - adb03e2e1e40c3c888577c4666831a949 - - - type - classlibdap_1_1Url.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - - - type_name - classlibdap_1_1Url.html - a18a42c8ec35cb5b15cd651a4152f8a2c - - - val2buf - classlibdap_1_1Url.html - add396308f45a14355b60c411ed33bf7a - - - value - classlibdap_1_1Url.html - a6a184f229c17879291dba8f7477db677 - - - var - classlibdap_1_1Url.html - a4dc4fac1bb6083f6db645f37bfd59b85 - - - var - classlibdap_1_1Url.html - adecfc442b5927c79933c7f71cfe03fd2 - - - width - classlibdap_1_1Url.html - a636ebae6c75fb6dc5d929dc6db6f9558 - - - d_buf - classlibdap_1_1Url.html - ae743e901dfa00288dace899faa78aafc - - - d_in_selection - classlibdap_1_1Url.html - a949a89714965d7afdcd1e3edc8b7f0d4 - - - d_is_synthesized - classlibdap_1_1Url.html - a629e97e8eb7d285b54c9af8c1ec9a29a - - - - - Vector - classlibdap_1_1Vector.html - - - btp_stack - classlibdap_1_1Vector.html - ae9c6e71855b90a0e552713011c9ab81f - - - Vector - classlibdap_1_1Vector.html - af6dc3e80b6398ecaa098b5c46df5376c - - - Vector - classlibdap_1_1Vector.html - a90baf84028f16afe1344943400fb79a7 - - - Vector - classlibdap_1_1Vector.html - ae3a9cea6f164319908ed5b9cd35af668 - - - ~Vector - classlibdap_1_1Vector.html - a99efd5981bb8d00fc215a9762103a4d8 - - - add_var - classlibdap_1_1Vector.html - a033417b3c3056fa77f1e32f62a0a2f3b - - - add_var_nocopy - classlibdap_1_1Vector.html - a2605aeda39e4e6c6fd5e3bc1636c19e3 - - - attributes - classlibdap_1_1Vector.html - a97452f06d2188eb838399a709246b5e9 - - - buf2val - classlibdap_1_1Vector.html - af20a56a72c3108b31418ebf01f779253 - - - check_semantics - classlibdap_1_1Vector.html - afd220155b44708d85d0bb5aa2f756549 - - - clear_local_data - classlibdap_1_1Vector.html - ac12023f8bf9ecc97998c3bb021ba2772 - - - compute_checksum - classlibdap_1_1Vector.html - a9c61fcb646f1813e350549b6ddf48204 - - - d4_ops - classlibdap_1_1Vector.html - a512a356f31ed6c4c1a368da0b054408a - - - dataset - classlibdap_1_1Vector.html - a47521ce321a17e6ce217870cb6a1a7aa - - - deserialize - classlibdap_1_1Vector.html - aba86cc0f3915d85e37f4b9e00ebfde7e - - - deserialize - classlibdap_1_1Vector.html - ad78d293754a1d78b90c86f8e33c22bec - - - dump - classlibdap_1_1Vector.html - a9dc0a17c575e0f1ffc0571731bb8de78 - - - element_count - classlibdap_1_1Vector.html - ab78981c9e05e7d1dc24f913dbd2021d7 - - - FQN - classlibdap_1_1Vector.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - - - get_attr_table - classlibdap_1_1Vector.html - a1fcd9537c67e3bf88964b2656ff5bac1 - - - get_buf - classlibdap_1_1Vector.html - a285ee3b0cc0adf6a54ea388ea71a69fc - - - get_compound_buf - classlibdap_1_1Vector.html - ad6d99474ab74d8b9752e4e77b3350121 - - - get_parent - classlibdap_1_1Vector.html - a3459cdaa239c33ce111ef360d8dc3017 - - - get_str - classlibdap_1_1Vector.html - ab53f2eb57de3f0f99961f6ab6f470638 - - - get_value_capacity - classlibdap_1_1Vector.html - a16b89988deda0413d1eb2cdc615a38df - - - intern_data - classlibdap_1_1Vector.html - a6b5ee8fec4de3700e2564a64ef4f6d76 - - - intern_data - classlibdap_1_1Vector.html - abe772a228c62c7960bf2eb92be77732f - - - is_constructor_type - classlibdap_1_1Vector.html - a8b8490e0047c6da52945699a132008ea - - - is_dap4 - classlibdap_1_1Vector.html - a7f6835cb5e5589ab5dad3fb4813d3bea - - - is_in_selection - classlibdap_1_1Vector.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - - - is_simple_type - classlibdap_1_1Vector.html - aae57e5b270b3a015d40c8db10b9b5549 - - - is_vector_type - classlibdap_1_1Vector.html - a7107c76dbcab71015141142383b6d022 - - - length - classlibdap_1_1Vector.html - a2476a541aad16bedc64d99805fcc9c0c - - - m_create_cardinal_data_buffer_for_type - classlibdap_1_1Vector.html - af175806a557f627a0ee70c5f05ed7c5c - - - m_delete_cardinal_data_buffer - classlibdap_1_1Vector.html - ad2e46d6d52fcb609658baf5ac1f9892e - - - m_duplicate - classlibdap_1_1Vector.html - acffc202435cee93a54af98cd471beb98 - - - m_duplicate - classlibdap_1_1Vector.html - a0c55b826c8c5dfe7a454dc670e859a41 - - - m_is_cardinal_type - classlibdap_1_1Vector.html - ac00c2a2ebd65c86022b82dfb1a32485c - - - m_set_cardinal_values_internal - classlibdap_1_1Vector.html - a1fb2c5dc539e55203fc61845089c67e8 - - - name - classlibdap_1_1Vector.html - a24c5d67823b3cff7f4245a993072a142 - - - operator= - classlibdap_1_1Vector.html - a2f1a859dad81b2c10f944e9890225a44 - - - ops - classlibdap_1_1Vector.html - a8a0000be2a244e3e07abda3020af8800 - - - print_dap4 - classlibdap_1_1Vector.html - afcddbe441380b95c894510c02980b163 - - - print_decl - classlibdap_1_1Vector.html - a2d799fad93255d7f2b803562ae7a5784 - - - print_decl - classlibdap_1_1Vector.html - afd744b0ddeb04e7b173c9e83423ec572 - - - print_val - classlibdap_1_1Vector.html - afb5e13838a599ec0efe2adbb2ae18f47 - - - print_val - classlibdap_1_1Vector.html - a94edd5b610afb1432144158740710488 - - - print_xml - classlibdap_1_1Vector.html - a825820edee179550cfde3dfd4d274f2a - - - print_xml - classlibdap_1_1Vector.html - a8bd2c7682edd48c64b210bdf247bdef7 - - - print_xml_writer - classlibdap_1_1Vector.html - a11554ff931528b243e9af8173d205b44 - - - prototype - classlibdap_1_1Vector.html - a31fb64d322e4db4892ceffa54a3e427b - - - ptr_duplicate - classlibdap_1_1Vector.html - a08158ed75b297c395e2f665958be0ffe - - - read - classlibdap_1_1Vector.html - a1da003c53f2e663223f603ab3fbd7c8e - - - read_p - classlibdap_1_1Vector.html - a38ff819a432217c55db2e9071928d20c - - - reserve_value_capacity - classlibdap_1_1Vector.html - aaaa7c0f36266ef3df9f4fb90de220867 - - - reserve_value_capacity - classlibdap_1_1Vector.html - adade15ffa55c59f6205e1c3c9ea78a35 - - - send_p - classlibdap_1_1Vector.html - a980c0013817836aa77ef74aeec7fb192 - - - serialize - classlibdap_1_1Vector.html - a993d46232faadb5914cc0519d013e9b2 - - - serialize - classlibdap_1_1Vector.html - af478e3d5cbb3235081fe8daa6d6629a9 - - - set_attr_table - classlibdap_1_1Vector.html - a572a1d76a75981abac83a4241e90c0fa - - - set_attributes - classlibdap_1_1Vector.html - ad4dda4cf43dca838d3de183b8e01cd09 - - - set_attributes_nocopy - classlibdap_1_1Vector.html - afd0e5f87d19020f560d5c1ff8dd4d6a3 - - - set_in_selection - classlibdap_1_1Vector.html - a2bc036248cdaf1affac464170f32ad30 - - - set_is_dap4 - classlibdap_1_1Vector.html - abca9ddaa9a1ada8447cbe7193e8e288a - - - set_length - classlibdap_1_1Vector.html - a05a61e24fd295934dfc3c37c9f55ca57 - - - set_name - classlibdap_1_1Vector.html - aacfca48c7db65e3a2c3c94734dee8c36 - - - set_parent - classlibdap_1_1Vector.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - - - set_read_p - classlibdap_1_1Vector.html - a58712de8871e28a48fdc95e72a09df71 - - - set_send_p - classlibdap_1_1Vector.html - a64815467570490a4a6cddc89f09a2413 - - - set_synthesized_p - classlibdap_1_1Vector.html - a595cb4059cff24f801a1b6da79bd2f9e - - - set_type - classlibdap_1_1Vector.html - af74f8d1ef57c9fcca46f620f75d175a3 - - - set_value - classlibdap_1_1Vector.html - ac6ffab2a00584c2963c0d521ad4028b5 - - - set_value - classlibdap_1_1Vector.html - af0c29cba5f93a8571754f2324a6fc170 - - - set_value - classlibdap_1_1Vector.html - a040fe60aa43a3beecd078c3c7bb4f42f - - - set_value - classlibdap_1_1Vector.html - ab6d2f9bc8fdbb433ddb3d2ceb995ac7d - - - set_value - classlibdap_1_1Vector.html - a8c122828120daf1ff5e850e8f7b9ce89 - - - set_value - classlibdap_1_1Vector.html - a565daf922503ff615dac4c6cdb14c1ea - - - set_value - classlibdap_1_1Vector.html - af264f7a752cc501bfbccee813733bde3 - - - set_value - classlibdap_1_1Vector.html - acfe7846fc2aeb383b9b6263f09c92f63 - - - set_value - classlibdap_1_1Vector.html - a0ba340343eda47f274185ee7a3e6761e - - - set_value - classlibdap_1_1Vector.html - a5d20f40b94b9d901f8124d7d54ed423f - - - set_value - classlibdap_1_1Vector.html - abd6e429e907214c593b6fb37f97511ee - - - set_value - classlibdap_1_1Vector.html - ac4ba1b5ff3e1283a3ead8e5ef2b3be99 - - - set_value - classlibdap_1_1Vector.html - a20e3ce67dddefd2e941833f84d8fb129 - - - set_value - classlibdap_1_1Vector.html - a2c1c39cad25264854e751b67478c36ac - - - set_value - classlibdap_1_1Vector.html - ae18e02e571fec26f5ee7e6fe03b9ccf6 - - - set_value - classlibdap_1_1Vector.html - a6479561bdefac3ab843d09fe2a8467c0 - - - set_value - classlibdap_1_1Vector.html - aa73493691f34dc6a871a5557b147ba4d - - - set_value - classlibdap_1_1Vector.html - abaa596cea00692617d5af9cb89eab60c - - - set_value - classlibdap_1_1Vector.html - a1f18c590ea763d25de3595a7b96cfad2 - - - set_value - classlibdap_1_1Vector.html - a8d818139d7bd98c4d6e16494e4414ea9 - - - set_value - classlibdap_1_1Vector.html - a9f4bfe3aba7506d5e8d3d5182a518359 - - - set_value - classlibdap_1_1Vector.html - a068afd2353ad32f904361253e1b6e807 - - - set_value_slice_from_row_major_vector - classlibdap_1_1Vector.html - a559d8ca948ca40f179e4e3da0bfdfdc4 - - - set_vec - classlibdap_1_1Vector.html - a8bf6e565dcb2eab1f3f7037518a9acb3 - - - set_vec_nocopy - classlibdap_1_1Vector.html - a175f1a51686798061c2147f2eccde33a - - - synthesized_p - classlibdap_1_1Vector.html - ae64e677da27249473cdba0b60cdbb90a - - - toString - classlibdap_1_1Vector.html - a701eb3361f5b5628329ece019cd34519 - - - transfer_attributes - classlibdap_1_1Vector.html - add8e836c622042a339152a6c31e5bdfb - - - transform_to_dap2 - classlibdap_1_1Vector.html - affec8a11e9cc035d4b1e8fb9a87b2072 - - - transform_to_dap4 - classlibdap_1_1Vector.html - adb03e2e1e40c3c888577c4666831a949 - - - type - classlibdap_1_1Vector.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - - - type_name - classlibdap_1_1Vector.html - a18a42c8ec35cb5b15cd651a4152f8a2c - - - val2buf - classlibdap_1_1Vector.html - a96ecf84f2798065878755d9a9014ee69 - - - value - classlibdap_1_1Vector.html - a624bc74ea64985cdf4f9980809ff3892 - - - value - classlibdap_1_1Vector.html - a66fca662d9754b45b0a386bf08b869d2 - - - value - classlibdap_1_1Vector.html - a1a24b162aa214f95b0f82a466573cb3e - - - value - classlibdap_1_1Vector.html - a3ad2e9a815fd5b6809da0d7f09de410b - - - value - classlibdap_1_1Vector.html - ac447641e95e7e000c83aa351f23c3a48 - - - value - classlibdap_1_1Vector.html - ab23253ee97cc725ba4d87063464ebfaf - - - value - classlibdap_1_1Vector.html - a335127b963207a457c362fc6a1a73523 - - - value - classlibdap_1_1Vector.html - a7f834fcdcaf597e35d732ddb5c7cc5a4 - - - value - classlibdap_1_1Vector.html - ab72e65b9578f8743d3c180be7de413c4 - - - value - classlibdap_1_1Vector.html - a0e76df3852b26e453ed75e24623f968a - - - value - classlibdap_1_1Vector.html - a0725f0e3304f9ad00bf90a19b5650368 - - - value - classlibdap_1_1Vector.html - a279e96b1bac813a30e361d6db1d14932 - - - value - classlibdap_1_1Vector.html - a675d1fea0d560bca688809dd4792f414 - - - value - classlibdap_1_1Vector.html - a5c5f7e24624d3fdf37c60396c8cb5b8b - - - value - classlibdap_1_1Vector.html - af27644af35f69c4c7920bbc481d87f9f - - - value - classlibdap_1_1Vector.html - abc69c8a1b1eb45f7a91186f247c10f10 - - - value - classlibdap_1_1Vector.html - aa599da1cff6457453c2b6cb2ea1b3b7c - - - value - classlibdap_1_1Vector.html - ae15909a6fd5e1b2bedf3cb09de41801c - - - value - classlibdap_1_1Vector.html - a707c5198cef8c3753565301ada3db0e7 - - - value - classlibdap_1_1Vector.html - a145e75e2d47b6c918162e2c556ab2faa - - - value - classlibdap_1_1Vector.html - a8470e7dc052e327237457ffb50f4660b - - - value - classlibdap_1_1Vector.html - af9fd1c331a511989ac2bf4a0ad5b27da - - - value - classlibdap_1_1Vector.html - aca5000630369cb4217827c2f136afec0 - - - var - classlibdap_1_1Vector.html - aa5ccb30d1f27ae587f35216b859feec7 - - - var - classlibdap_1_1Vector.html - ac07a950727d2ac58934ba4cc03206c8d - - - var - classlibdap_1_1Vector.html - adf286762e63295675850c41cedf33370 - - - vec_resize - classlibdap_1_1Vector.html - ad180a87244b0b6f32b47711a4ae0330e - - - width - classlibdap_1_1Vector.html - a8fe5d7b06814653b6cf5408b2a8671db - - - MarshallerTest - classlibdap_1_1Vector.html - a1fff161da8726dcea8f5af4428342f73 - - - d_in_selection - classlibdap_1_1Vector.html - a949a89714965d7afdcd1e3edc8b7f0d4 - - - d_is_synthesized - classlibdap_1_1Vector.html - a629e97e8eb7d285b54c9af8c1ec9a29a - - - - - XDRFileMarshaller - classlibdap_1_1XDRFileMarshaller.html - - - XDRFileMarshaller - classlibdap_1_1XDRFileMarshaller.html - ac492a403b2021e54beb6117a16777a85 - - - ~XDRFileMarshaller - classlibdap_1_1XDRFileMarshaller.html - a0e9c48d5dac7c7e23ad73041250e42e5 - - - dump - classlibdap_1_1XDRFileMarshaller.html - ac18c437e979e0689411fe0327660fe21 - - - put_byte - classlibdap_1_1XDRFileMarshaller.html - ae59b2ed13e57db21dfee45048647b5dc - - - put_float32 - classlibdap_1_1XDRFileMarshaller.html - afef2b5f926f316108940ada99dcbbe52 - - - put_float64 - classlibdap_1_1XDRFileMarshaller.html - a30a90f2a1c1621a6aea60d7529195a17 - - - put_int - classlibdap_1_1XDRFileMarshaller.html - ae8471d29021141ff723ba00ebfed199b - - - put_int16 - classlibdap_1_1XDRFileMarshaller.html - a31b0b5e3a20a62fc78bc7b5de73b5432 - - - put_int32 - classlibdap_1_1XDRFileMarshaller.html - a43ff6ab7c5899c6ed5d00fabfe7378d5 - - - put_opaque - classlibdap_1_1XDRFileMarshaller.html - a3e982b1af7e682aa54b88143a2d94264 - - - put_str - classlibdap_1_1XDRFileMarshaller.html - a631ed426774e48c51c84c11ae0b19670 - - - put_uint16 - classlibdap_1_1XDRFileMarshaller.html - a8aa245cea6b01fe61abe430d42ed87d1 - - - put_uint32 - classlibdap_1_1XDRFileMarshaller.html - a77192c7e8103b7417c7327b2c768622d - - - put_url - classlibdap_1_1XDRFileMarshaller.html - a6c489d731cb385ab535c8be961a47551 - - - put_vector - classlibdap_1_1XDRFileMarshaller.html - a7bbe202d8e4942230a1c27615d23abbb - - - put_vector - classlibdap_1_1XDRFileMarshaller.html - a34f2e689f1363a2ce4052c5a04a7619d - - - put_vector_end - classlibdap_1_1XDRFileMarshaller.html - a3409a138c4a67bc9dd24a3a2ad6f97db - - - put_vector_part - classlibdap_1_1XDRFileMarshaller.html - a8b303c96939749f6aca62d0e582909b0 - - - put_vector_start - classlibdap_1_1XDRFileMarshaller.html - ae0cd4b847386e89eace23e6b2fc08826 - - - - - XDRFileUnMarshaller - classlibdap_1_1XDRFileUnMarshaller.html - - - XDRFileUnMarshaller - classlibdap_1_1XDRFileUnMarshaller.html - a094838fb44e7f33e351bcb010ac1cd9f - - - ~XDRFileUnMarshaller - classlibdap_1_1XDRFileUnMarshaller.html - a655034ba162aa33888fb0fde2565fe46 - - - dump - classlibdap_1_1XDRFileUnMarshaller.html - ae77f16074759c9d855f6155a93380635 - - - get_byte - classlibdap_1_1XDRFileUnMarshaller.html - a93670ac3bf26e9ae1fda68670afd0094 - - - get_float32 - classlibdap_1_1XDRFileUnMarshaller.html - a51f8aebded24bd4a5fcb246aded341c1 - - - get_float64 - classlibdap_1_1XDRFileUnMarshaller.html - af5ecc08a045dc82fa262ff411cf25f08 - - - get_int - classlibdap_1_1XDRFileUnMarshaller.html - a0e23e1a7153099f155746d34d6975782 - - - get_int16 - classlibdap_1_1XDRFileUnMarshaller.html - afbbcc6a95207b4f2eced695d31b89ccd - - - get_int32 - classlibdap_1_1XDRFileUnMarshaller.html - a19156324e5936f82b378c412994e79b2 - - - get_opaque - classlibdap_1_1XDRFileUnMarshaller.html - a243b48a28f702f80455691bbbf403ee5 - - - get_str - classlibdap_1_1XDRFileUnMarshaller.html - a81e70905e5187223a987e41f356769c7 - - - get_uint16 - classlibdap_1_1XDRFileUnMarshaller.html - a14b3dbbb1bc6bff52f51a3471caf5fc6 - - - get_uint32 - classlibdap_1_1XDRFileUnMarshaller.html - a5d22491e5703e481c0f8bb272483f288 - - - get_url - classlibdap_1_1XDRFileUnMarshaller.html - af98228fb5d1e56e6a6969c65ec57be04 - - - get_vector - classlibdap_1_1XDRFileUnMarshaller.html - a8337fdb7575006038ae324110f9f44ce - - - get_vector - classlibdap_1_1XDRFileUnMarshaller.html - a072ecad7d0f66f91454d0afae6276eec - - - - - XDRStreamMarshaller - classlibdap_1_1XDRStreamMarshaller.html - - - XDRStreamMarshaller - classlibdap_1_1XDRStreamMarshaller.html - a172f3cad856e8d1528fb97e0d34b5163 - - - ~XDRStreamMarshaller - classlibdap_1_1XDRStreamMarshaller.html - a316682ad41aa9452a2943d184ac40fb2 - - - dump - classlibdap_1_1XDRStreamMarshaller.html - a3601923f45d9182c92eb684e64d20d47 - - - put_byte - classlibdap_1_1XDRStreamMarshaller.html - aefd9b5209bd7a7f0ef4f09839ec7d946 - - - put_float32 - classlibdap_1_1XDRStreamMarshaller.html - a9c4ba2e1d9426099ad05f6f37d74e944 - - - put_float64 - classlibdap_1_1XDRStreamMarshaller.html - a40b7e93f5a7836ebb887af167e1966ac - - - put_int - classlibdap_1_1XDRStreamMarshaller.html - ab95d8967294368ac7ac0cca15994a2f6 - - - put_int16 - classlibdap_1_1XDRStreamMarshaller.html - a5fca4ee0c826201f18580d7993d7110f - - - put_int32 - classlibdap_1_1XDRStreamMarshaller.html - abff85411e7d070689e763c2fbf36c352 - - - put_opaque - classlibdap_1_1XDRStreamMarshaller.html - abd3f852b1de706a5df7e87d8168ad3dd - - - put_str - classlibdap_1_1XDRStreamMarshaller.html - a49439f41adb1cbe99085270e034be860 - - - put_uint16 - classlibdap_1_1XDRStreamMarshaller.html - a9d3d3fd47e7c5d91dc78a6e1fc91fa42 - - - put_uint32 - classlibdap_1_1XDRStreamMarshaller.html - ac82fab79aaf18be87c28cd8293780f96 - - - put_url - classlibdap_1_1XDRStreamMarshaller.html - a98a25c0e971ecd5c4c2217671986373a - - - put_vector - classlibdap_1_1XDRStreamMarshaller.html - a7bc1ab8d516f9ef24b1ceb27814c5307 - - - put_vector - classlibdap_1_1XDRStreamMarshaller.html - ae2afb4cff43b5836838bd5261c81ed7c - - - put_vector_end - classlibdap_1_1XDRStreamMarshaller.html - a4ffeb114ca4cf161366d82e6abc68acf - - - put_vector_part - classlibdap_1_1XDRStreamMarshaller.html - af1ce1f82a6e78f649e124bded447026b - - - put_vector_start - classlibdap_1_1XDRStreamMarshaller.html - ac29944748706b36e48cb7428752cf467 - - - MarshallerTest - classlibdap_1_1XDRStreamMarshaller.html - a1fff161da8726dcea8f5af4428342f73 - - - - - XDRStreamUnMarshaller - classlibdap_1_1XDRStreamUnMarshaller.html - - - XDRStreamUnMarshaller - classlibdap_1_1XDRStreamUnMarshaller.html - a2f198611509f1c92d833a59019d3aef2 - - - ~XDRStreamUnMarshaller - classlibdap_1_1XDRStreamUnMarshaller.html - a8eaf54024dd92c94cccdcc9912fa869c - - - dump - classlibdap_1_1XDRStreamUnMarshaller.html - a9ae38967a1c736b5ad7d851e2bc746fa - - - get_byte - classlibdap_1_1XDRStreamUnMarshaller.html - a340f2532faac2192394beeb33c2f768f - - - get_float32 - classlibdap_1_1XDRStreamUnMarshaller.html - ad4201be4b41fcecc7dea8accd2fd5944 - - - get_float64 - classlibdap_1_1XDRStreamUnMarshaller.html - a7e598c6c7462c92483203626b5ab728c - - - get_int - classlibdap_1_1XDRStreamUnMarshaller.html - a1014ada10f5712e4a5bc26e9ebca3c69 - - - get_int16 - classlibdap_1_1XDRStreamUnMarshaller.html - a464d4586233c9275474f31ecc7eb5367 - - - get_int32 - classlibdap_1_1XDRStreamUnMarshaller.html - a25eabe5ab065866e285efc9c8d352830 - - - get_opaque - classlibdap_1_1XDRStreamUnMarshaller.html - ac06867d030af3b9b0309f4a17a88642c - - - get_str - classlibdap_1_1XDRStreamUnMarshaller.html - a2545622a8a1ad1e70adcb592c53aab23 - - - get_uint16 - classlibdap_1_1XDRStreamUnMarshaller.html - a63cc7ff3acfcfdef0b867bb9477741cd - - - get_uint32 - classlibdap_1_1XDRStreamUnMarshaller.html - a7646829dc1610ea0b47f58a283148c2c - - - get_url - classlibdap_1_1XDRStreamUnMarshaller.html - a6ae6a6c0d3bdf4548836ef97ca997d7a - - - get_vector - classlibdap_1_1XDRStreamUnMarshaller.html - ae0bbd240a30d298592f80e88dc282fa6 - - - get_vector - classlibdap_1_1XDRStreamUnMarshaller.html - aba4e6e35c50b0a574a1c48f8a74fe522 - - - get_vector - classlibdap_1_1XDRStreamUnMarshaller.html - a18d475a8812cc64402feb59e2dc3bc92 - - - - - XDRUtils - classlibdap_1_1XDRUtils.html - - - - - XMLWriter - classlibdap_1_1XMLWriter.html - - - XMLWriter - classlibdap_1_1XMLWriter.html - a9a78b602c06cf6e37eb2c9d787a5451f - - - ~XMLWriter - classlibdap_1_1XMLWriter.html - a9c6bf07349c5764a9f7805d83fa4bc6c - - - get_doc - classlibdap_1_1XMLWriter.html - a6e7d1d7a70398ca2e89612885b8e97a5 - - - get_doc_size - classlibdap_1_1XMLWriter.html - a20aa97be3f0c6f29dad2adc34f370d17 - - - get_writer - classlibdap_1_1XMLWriter.html - ae78a49c5f17e5bee6e32c3a6820a9ba9 - - - - - - - binary_function - classbinary__function.html - - - Crc32 - classCrc32.html - - - checksum - classCrc32.html - a8756f4605109e402248bd603bd56fc19 - - - Crc32 - classCrc32.html - ae9fe98ed803007de13e63c03e80fe322 - - - ~Crc32 - classCrc32.html - a007ddcc8fdae521f8635cd93bde4d9e7 - - - AddData - classCrc32.html - a79e430ee82b3cec76543f345f2361784 - - - GetCrc32 - classCrc32.html - a386ca030f3214b8d3a9560e09478ca66 - - - Reset - classCrc32.html - a3722922b4cd2902eff207e78d03e66c2 - - - - - d4_ceFlexLexer - classd4__ceFlexLexer.html - - - d4_functionFlexLexer - classd4__functionFlexLexer.html - - - GetOpt - classGetOpt.html - - - GetOpt - classGetOpt.html - a3913c6f8599a646f4c6d38b1a8ba6d02 - - - operator() - classGetOpt.html - a82a1d7889a8d09e26642cd37910bff69 - - - nargc - classGetOpt.html - a19f6ceaa6e052ea635631251bce834d1 - - - nargv - classGetOpt.html - ae38ae4602c7c714f5786a4c861fa5307 - - - noptstring - classGetOpt.html - a771a4ce3aaf4024fdf38da2e8eb29cbe - - - optarg - classGetOpt.html - a91ea52012d129019668f18031778e220 - - - opterr - classGetOpt.html - a1d1996d4af2d28ad67544bcb2c54f420 - - - optind - classGetOpt.html - ac7c98d20c4259638e8588c28e70724c2 - - - - - - - Class Index - classes.html - - - Class Hierarchy - hierarchy.html - - - libdap::AISDatabaseParser - classlibdap_1_1AISDatabaseParser.html - - - libdap::AISMerge - classlibdap_1_1AISMerge.html - - - libdap::AISResources - classlibdap_1_1AISResources.html - - - libdap::Ancillary - classlibdap_1_1Ancillary.html - - - libdap::BaseTypeFactory - classlibdap_1_1BaseTypeFactory.html - - - libdap::D4BaseTypeFactory - classlibdap_1_1D4BaseTypeFactory.html - - - - - binary_function - classbinary__function.html - - - libdap::cache_entry - structlibdap_1_1cache__entry.html - - - libdap::HTTPCacheTable::CacheEntry - structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html - - - libdap::ce_parser_arg - structlibdap_1_1ce__parser__arg.html - - - libdap::ChildLocker - classlibdap_1_1ChildLocker.html - - - libdap::Clause - structlibdap_1_1Clause.html - - - libdap::Connect - classlibdap_1_1Connect.html - - - libdap::AISConnect - classlibdap_1_1AISConnect.html - - - - - libdap::ConstraintEvaluator - classlibdap_1_1ConstraintEvaluator.html - - - Crc32 - classCrc32.html - - - d4_ceFlexLexer - classd4__ceFlexLexer.html - - - libdap::D4CEScanner - classlibdap_1_1D4CEScanner.html - - - - - d4_functionFlexLexer - classd4__functionFlexLexer.html - - - libdap::D4FunctionScanner - classlibdap_1_1D4FunctionScanner.html - - - - - libdap::D4AsyncUtil - classlibdap_1_1D4AsyncUtil.html - - - libdap::D4Connect - classlibdap_1_1D4Connect.html - - - libdap::D4ConstraintEvaluator - classlibdap_1_1D4ConstraintEvaluator.html - - - libdap::D4Dimension - classlibdap_1_1D4Dimension.html - - - libdap::D4Dimensions - classlibdap_1_1D4Dimensions.html - - - libdap::D4EnumDef - classlibdap_1_1D4EnumDef.html - - - libdap::D4EnumDefs - classlibdap_1_1D4EnumDefs.html - - - libdap::D4FilterClause - classlibdap_1_1D4FilterClause.html - - - libdap::D4FilterClauseList - classlibdap_1_1D4FilterClauseList.html - - - libdap::D4FunctionEvaluator - classlibdap_1_1D4FunctionEvaluator.html - - - libdap::D4Map - classlibdap_1_1D4Map.html - - - libdap::D4Maps - classlibdap_1_1D4Maps.html - - - libdap::D4ParserSax2 - classlibdap_1_1D4ParserSax2.html - - - libdap::D4RValue - classlibdap_1_1D4RValue.html - - - libdap::D4RValueList - classlibdap_1_1D4RValueList.html - - - libdap::DapIndent - classlibdap_1_1DapIndent.html - - - libdap::DapObj - classlibdap_1_1DapObj.html - - - libdap::AttrTable - classlibdap_1_1AttrTable.html - - - libdap::BaseType - classlibdap_1_1BaseType.html - - - libdap::Byte - classlibdap_1_1Byte.html - - - libdap::Constructor - classlibdap_1_1Constructor.html - - - libdap::D4Group - classlibdap_1_1D4Group.html - - - libdap::D4Sequence - classlibdap_1_1D4Sequence.html - - - libdap::Grid - classlibdap_1_1Grid.html - - - libdap::Sequence - classlibdap_1_1Sequence.html - - - libdap::Structure - classlibdap_1_1Structure.html - - - - - libdap::D4Enum - classlibdap_1_1D4Enum.html - - - libdap::D4Opaque - classlibdap_1_1D4Opaque.html - - - libdap::Float32 - classlibdap_1_1Float32.html - - - libdap::Float64 - classlibdap_1_1Float64.html - - - libdap::Int16 - classlibdap_1_1Int16.html - - - libdap::Int32 - classlibdap_1_1Int32.html - - - libdap::Int64 - classlibdap_1_1Int64.html - - - libdap::Int8 - classlibdap_1_1Int8.html - - - libdap::Str - classlibdap_1_1Str.html - - - libdap::Url - classlibdap_1_1Url.html - - - - - libdap::UInt16 - classlibdap_1_1UInt16.html - - - libdap::UInt32 - classlibdap_1_1UInt32.html - - - libdap::UInt64 - classlibdap_1_1UInt64.html - - - libdap::Vector - classlibdap_1_1Vector.html - - - libdap::Array - classlibdap_1_1Array.html - - - - - - - libdap::D4Attribute - classlibdap_1_1D4Attribute.html - - - libdap::D4Attributes - classlibdap_1_1D4Attributes.html - - - libdap::DAPCache3 - classlibdap_1_1DAPCache3.html - - - libdap::DAS - classlibdap_1_1DAS.html - - - libdap::DDS - classlibdap_1_1DDS.html - - - libdap::DataDDS - classlibdap_1_1DataDDS.html - - - - - libdap::DMR - classlibdap_1_1DMR.html - - - libdap::Marshaller - classlibdap_1_1Marshaller.html - - - libdap::D4StreamMarshaller - classlibdap_1_1D4StreamMarshaller.html - - - libdap::XDRFileMarshaller - classlibdap_1_1XDRFileMarshaller.html - - - libdap::XDRStreamMarshaller - classlibdap_1_1XDRStreamMarshaller.html - - - - - libdap::UnMarshaller - classlibdap_1_1UnMarshaller.html - - - libdap::D4StreamUnMarshaller - classlibdap_1_1D4StreamUnMarshaller.html - - - libdap::XDRFileUnMarshaller - classlibdap_1_1XDRFileUnMarshaller.html - - - libdap::XDRStreamUnMarshaller - classlibdap_1_1XDRStreamUnMarshaller.html - - - - - - - libdap::DapXmlNamspaces - classlibdap_1_1DapXmlNamspaces.html - - - libdap::DDXParser - classlibdap_1_1DDXParser.html - - - libdap::Array::dimension - structlibdap_1_1Array_1_1dimension.html - - - libdap::DODSFilter - classlibdap_1_1DODSFilter.html - - - libdap::AttrTable::entry - structlibdap_1_1AttrTable_1_1entry.html - - - libdap::EventHandler - classlibdap_1_1EventHandler.html - - - libdap::AlarmHandler - classlibdap_1_1AlarmHandler.html - - - libdap::HTTPCacheInterruptHandler - classlibdap_1_1HTTPCacheInterruptHandler.html - - - - - std::exception - - - - libdap::Error - classlibdap_1_1Error.html - - - libdap::AISDatabaseReadFailed - classlibdap_1_1AISDatabaseReadFailed.html - - - libdap::AISDatabaseWriteFailed - classlibdap_1_1AISDatabaseWriteFailed.html - - - libdap::D4ParseError - classlibdap_1_1D4ParseError.html - - - libdap::DDXParseFailed - classlibdap_1_1DDXParseFailed.html - - - libdap::InternalErr - classlibdap_1_1InternalErr.html - - - libdap::NoSuchPrimaryResource - classlibdap_1_1NoSuchPrimaryResource.html - - - libdap::ResponseTooBigErr - classlibdap_1_1ResponseTooBigErr.html - - - libdap::SignalHandlerRegisteredErr - classlibdap_1_1SignalHandlerRegisteredErr.html - - - - - - - functions::GeoConstraint - classfunctions_1_1GeoConstraint.html - - - functions::GridGeoConstraint - classfunctions_1_1GridGeoConstraint.html - - - - - GetOpt - classGetOpt.html - - - functions::gse_arg - structfunctions_1_1gse__arg.html - - - functions::GSEClause - classfunctions_1_1GSEClause.html - - - libdap::HTTPCache - classlibdap_1_1HTTPCache.html - - - libdap::HTTPCacheTable - classlibdap_1_1HTTPCacheTable.html - - - libdap::HTTPConnect - classlibdap_1_1HTTPConnect.html - - - std::ios_base - - - - std::basic_ios< Char > - - - - std::basic_istream< Char > - - - - std::istream - - - - libdap::chunked_istream - classlibdap_1_1chunked__istream.html - - - libdap::fdistream - classlibdap_1_1fdistream.html - - - libdap::fpistream - classlibdap_1_1fpistream.html - - - - - - - std::basic_ostream< Char > - - - - std::ostream - - - - libdap::chunked_ostream - classlibdap_1_1chunked__ostream.html - - - libdap::fdostream - classlibdap_1_1fdostream.html - - - - - - - - - - - libdap::Keywords - classlibdap_1_1Keywords.html - - - libdap::Locker - classlibdap_1_1Locker.html - - - libdap::MarshallerThread - classlibdap_1_1MarshallerThread.html - - - libdap::parser_arg - structlibdap_1_1parser__arg.html - - - libdap::RCReader - classlibdap_1_1RCReader.html - - - libdap::Regex - classlibdap_1_1Regex.html - - - libdap::Resource - classlibdap_1_1Resource.html - - - libdap::Response - classlibdap_1_1Response.html - - - libdap::HTTPResponse - classlibdap_1_1HTTPResponse.html - - - libdap::HTTPCacheResponse - classlibdap_1_1HTTPCacheResponse.html - - - - - libdap::PipeResponse - classlibdap_1_1PipeResponse.html - - - libdap::StdinResponse - classlibdap_1_1StdinResponse.html - - - - - libdap::rvalue - classlibdap_1_1rvalue.html - - - libdap::ServerFunction - classlibdap_1_1ServerFunction.html - - - functions::GeoGridFunction - classfunctions_1_1GeoGridFunction.html - - - functions::GridFunction - classfunctions_1_1GridFunction.html - - - - - libdap::ServerFunctionsList - classlibdap_1_1ServerFunctionsList.html - - - libdap::SignalHandler - classlibdap_1_1SignalHandler.html - - - streambuf - - - - libdap::chunked_inbuf - classlibdap_1_1chunked__inbuf.html - - - libdap::chunked_outbuf - classlibdap_1_1chunked__outbuf.html - - - libdap::fdinbuf - classlibdap_1_1fdinbuf.html - - - libdap::fdoutbuf - classlibdap_1_1fdoutbuf.html - - - libdap::fpinbuf - classlibdap_1_1fpinbuf.html - - - - - libdap::XDRUtils - classlibdap_1_1XDRUtils.html - - - libdap::XMLWriter - classlibdap_1_1XMLWriter.html - - - - - Class Members - functions.html - - - All - functions.html - - - a - functions.html - - - b - functions_b.html - - - c - functions_c.html - - - d - functions_d.html - - - e - functions_e.html - - - f - functions_f.html - - - g - functions_g.html - - - h - functions_h.html - - - i - functions_i.html - - - l - functions_l.html - - - m - functions_m.html - - - n - functions_n.html - - - o - functions_o.html - - - p - functions_p.html - - - r - functions_r.html - - - s - functions_s.html - - - t - functions_t.html - - - u - functions_u.html - - - v - functions_v.html - - - w - functions_w.html - - - x - functions_x.html - - - ~ - functions_0x7e.html - - - - - Functions - functions_func.html - - - a - functions_func.html - - - b - functions_func_b.html - - - c - functions_func_c.html - - - d - functions_func_d.html - - - e - functions_func_e.html - - - f - functions_func_f.html - - - g - functions_func_g.html - - - h - functions_func_h.html - - - i - functions_func_i.html - - - l - functions_func_l.html - - - m - functions_func_m.html - - - n - functions_func_n.html - - - o - functions_func_o.html - - - p - functions_func_p.html - - - r - functions_func_r.html - - - s - functions_func_s.html - - - t - functions_func_t.html - - - u - functions_func_u.html - - - v - functions_func_v.html - - - w - functions_func_w.html - - - x - functions_func_x.html - - - ~ - functions_func_0x7e.html - - - - - Variables - functions_vars.html - - - Typedefs - functions_type.html - - - Enumerations - functions_enum.html - - - Related Functions - functions_rela.html - - - - - - - Files - - - - File List - files.html - - - AISConnect.cc - AISConnect_8cc_source.html - - - AISConnect.h - AISConnect_8h_source.html - - - AISDatabaseParser.cc - AISDatabaseParser_8cc_source.html - - - AISDatabaseParser.h - AISDatabaseParser_8h_source.html - - - AISExceptions.h - AISExceptions_8h_source.html - - - AISMerge.cc - AISMerge_8cc_source.html - - - AISMerge.h - AISMerge_8h_source.html - - - AISResources.cc - AISResources_8cc_source.html - - - AISResources.h - AISResources_8h_source.html - - - AlarmHandler.h - AlarmHandler_8h_source.html - - - Ancillary.cc - Ancillary_8cc_source.html - - - Ancillary.h - Ancillary_8h_source.html - - - arg-nonnull.h - arg-nonnull_8h_source.html - - - Array.cc - Array_8cc_source.html - - - Array.h - Array_8h_source.html - - - AttrTable.cc - AttrTable_8cc_source.html - - - AttrTable.h - AttrTable_8h_source.html - - - BaseType.cc - BaseType_8cc_source.html - - - BaseType.h - BaseType_8h_source.html - - - BaseTypeFactory.cc - BaseTypeFactory_8cc_source.html - - - BaseTypeFactory.h - BaseTypeFactory_8h_source.html - - - Byte.cc - Byte_8cc_source.html - - - Byte.h - Byte_8h_source.html - - - c++defs.h - c_09_09defs_8h_source.html - - - ce_parser.h - ce__parser_8h_source.html - - - cgi_util.h - cgi__util_8h_source.html - - - chunked_istream.cc - chunked__istream_8cc_source.html - - - chunked_istream.h - chunked__istream_8h_source.html - - - chunked_ostream.cc - chunked__ostream_8cc_source.html - - - chunked_ostream.h - chunked__ostream_8h_source.html - - - chunked_stream.h - chunked__stream_8h_source.html - - - Clause.cc - Clause_8cc_source.html - - - Clause.h - Clause_8h_source.html - - - config.h - config_8h_source.html - - - config_dap.h - config__dap_8h_source.html - - - Connect.cc - Connect_8cc_source.html - - - Connect.h - Connect_8h_source.html - - - ConstraintEvaluator.cc - ConstraintEvaluator_8cc_source.html - - - ConstraintEvaluator.h - ConstraintEvaluator_8h_source.html - - - Constructor.cc - Constructor_8cc_source.html - - - Constructor.h - Constructor_8h_source.html - - - crc.h - crc_8h_source.html - - - D4AsyncUtil.cc - D4AsyncUtil_8cc_source.html - - - D4AsyncUtil.h - D4AsyncUtil_8h_source.html - - - D4Attributes.cc - D4Attributes_8cc_source.html - - - D4Attributes.h - D4Attributes_8h_source.html - - - D4AttributeType.h - D4AttributeType_8h_source.html - - - D4BaseTypeFactory.cc - D4BaseTypeFactory_8cc_source.html - - - D4BaseTypeFactory.h - D4BaseTypeFactory_8h_source.html - - - D4CEScanner.h - D4CEScanner_8h_source.html - - - D4Connect.cc - D4Connect_8cc_source.html - - - D4Connect.h - D4Connect_8h_source.html - - - D4ConstraintEvaluator.cc - D4ConstraintEvaluator_8cc_source.html - - - D4ConstraintEvaluator.h - D4ConstraintEvaluator_8h_source.html - - - D4Dimensions.cc - D4Dimensions_8cc_source.html - - - D4Dimensions.h - D4Dimensions_8h_source.html - - - D4Enum.cc - D4Enum_8cc_source.html - - - D4Enum.h - D4Enum_8h_source.html - - - D4EnumDefs.cc - D4EnumDefs_8cc_source.html - - - D4EnumDefs.h - D4EnumDefs_8h_source.html - - - D4FilterClause.cc - D4FilterClause_8cc_source.html - - - D4FilterClause.h - D4FilterClause_8h_source.html - - - D4Function.h - D4Function_8h_source.html - - - D4FunctionEvaluator.cc - D4FunctionEvaluator_8cc_source.html - - - D4FunctionEvaluator.h - D4FunctionEvaluator_8h_source.html - - - D4FunctionScanner.h - D4FunctionScanner_8h_source.html - - - D4Group.cc - D4Group_8cc_source.html - - - D4Group.h - D4Group_8h_source.html - - - D4Maps.cc - D4Maps_8cc_source.html - - - D4Maps.h - D4Maps_8h_source.html - - - D4Opaque.cc - D4Opaque_8cc_source.html - - - D4Opaque.h - D4Opaque_8h_source.html - - - D4ParseError.h - D4ParseError_8h_source.html - - - D4ParserSax2.cc - D4ParserSax2_8cc_source.html - - - D4ParserSax2.h - D4ParserSax2_8h_source.html - - - D4RValue.cc - D4RValue_8cc_source.html - - - D4RValue.h - D4RValue_8h_source.html - - - D4Sequence.cc - D4Sequence_8cc_source.html - - - D4Sequence.h - D4Sequence_8h_source.html - - - D4StreamMarshaller.cc - D4StreamMarshaller_8cc_source.html - - - D4StreamMarshaller.h - D4StreamMarshaller_8h_source.html - - - D4StreamUnMarshaller.cc - D4StreamUnMarshaller_8cc_source.html - - - D4StreamUnMarshaller.h - D4StreamUnMarshaller_8h_source.html - - - DAPCache3.cc - DAPCache3_8cc_source.html - - - DAPCache3.h - DAPCache3_8h_source.html - - - DapIndent.cc - DapIndent_8cc_source.html - - - DapIndent.h - DapIndent_8h_source.html - - - DapObj.h - DapObj_8h_source.html - - - DapXmlNamespaces.cc - DapXmlNamespaces_8cc_source.html - - - DapXmlNamespaces.h - DapXmlNamespaces_8h_source.html - - - DAS.cc - DAS_8cc_source.html - - - DAS.h - DAS_8h_source.html - - - DataDDS.cc - DataDDS_8cc_source.html - - - DataDDS.h - DataDDS_8h_source.html - - - DDS.cc - DDS_8cc_source.html - - - DDS.h - DDS_8h_source.html - - - DDXExceptions.h - DDXExceptions_8h_source.html - - - DDXParserSAX2.cc - DDXParserSAX2_8cc_source.html - - - DDXParserSAX2.h - DDXParserSAX2_8h_source.html - - - debug.h - debug_8h_source.html - - - DMR.cc - DMR_8cc_source.html - - - DMR.h - DMR_8h_source.html - - - dods-datatypes-config.h - dods-datatypes-config_8h_source.html - - - dods-datatypes-static.h - dods-datatypes-static_8h_source.html - - - dods-datatypes.h - dods-datatypes_8h_source.html - - - dods-limits.h - dods-limits_8h_source.html - - - DODSFilter.cc - DODSFilter_8cc_source.html - - - DODSFilter.h - DODSFilter_8h_source.html - - - EncodingType.h - EncodingType_8h_source.html - - - error-test.cc - error-test_8cc_source.html - - - Error.cc - Error_8cc_source.html - - - Error.h - Error_8h_source.html - - - escaping.cc - escaping_8cc_source.html - - - escaping.h - escaping_8h_source.html - - - EventHandler.h - EventHandler_8h_source.html - - - fdiostream.cc - fdiostream_8cc_source.html - - - fdiostream.h - fdiostream_8h_source.html - - - Float32.cc - Float32_8cc_source.html - - - Float32.h - Float32_8h_source.html - - - Float64.cc - Float64_8cc_source.html - - - Float64.h - Float64_8h_source.html - - - GeoConstraint.cc - GeoConstraint_8cc_source.html - - - GeoConstraint.h - GeoConstraint_8h_source.html - - - GeoGridFunction.cc - GeoGridFunction_8cc_source.html - - - GeoGridFunction.h - GeoGridFunction_8h_source.html - - - getdap.cc - getdap_8cc_source.html - - - getdap4.cc - getdap4_8cc_source.html - - - GetOpt.cc - GetOpt_8cc_source.html - - - GetOpt.h - GetOpt_8h_source.html - - - GNURegex.cc - GNURegex_8cc_source.html - - - GNURegex.h - GNURegex_8h_source.html - - - Grid.cc - Grid_8cc_source.html - - - Grid.h - Grid_8h_source.html - - - grid_utils.cc - grid__utils_8cc_source.html - - - grid_utils.h - grid__utils_8h_source.html - - - GridFunction.cc - GridFunction_8cc_source.html - - - GridFunction.h - GridFunction_8h_source.html - - - GridGeoConstraint.cc - GridGeoConstraint_8cc_source.html - - - GridGeoConstraint.h - GridGeoConstraint_8h_source.html - - - gse_parser.h - gse__parser_8h_source.html - - - GSEClause.cc - GSEClause_8cc_source.html - - - GSEClause.h - GSEClause_8h_source.html - - - HTTPCache.cc - HTTPCache_8cc_source.html - - - HTTPCache.h - HTTPCache_8h_source.html - - - HTTPCacheDisconnectedMode.h - HTTPCacheDisconnectedMode_8h_source.html - - - HTTPCacheInterruptHandler.h - HTTPCacheInterruptHandler_8h_source.html - - - HTTPCacheMacros.h - HTTPCacheMacros_8h_source.html - - - HTTPCacheResponse.h - HTTPCacheResponse_8h_source.html - - - HTTPCacheTable.cc - HTTPCacheTable_8cc_source.html - - - HTTPCacheTable.h - HTTPCacheTable_8h_source.html - - - HTTPConnect.cc - HTTPConnect_8cc_source.html - - - HTTPConnect.h - HTTPConnect_8h_source.html - - - HTTPResponse.h - HTTPResponse_8h_source.html - - - Int16.cc - Int16_8cc_source.html - - - Int16.h - Int16_8h_source.html - - - Int32.cc - Int32_8cc_source.html - - - Int32.h - Int32_8h_source.html - - - Int64.cc - Int64_8cc_source.html - - - Int64.h - Int64_8h_source.html - - - Int8.cc - Int8_8cc_source.html - - - Int8.h - Int8_8h_source.html - - - InternalErr.cc - InternalErr_8cc_source.html - - - InternalErr.h - InternalErr_8h_source.html - - - Keywords2.cc - Keywords2_8cc_source.html - - - Keywords2.h - Keywords2_8h_source.html - - - main_page.doxygen - main__page_8doxygen_source.html - - - Marshaller.h - Marshaller_8h_source.html - - - MarshallerThread.cc - MarshallerThread_8cc_source.html - - - MarshallerThread.h - MarshallerThread_8h_source.html - - - media_types.h - media__types_8h_source.html - - - mime_util.cc - mime__util_8cc_source.html - - - mime_util.h - mime__util_8h_source.html - - - ObjectType.h - ObjectType_8h_source.html - - - Operators.h - Operators_8h_source.html - - - parser-util.cc - parser-util_8cc_source.html - - - parser-util.h - parser-util_8h_source.html - - - parser.h - parser_8h_source.html - - - PipeResponse.h - PipeResponse_8h_source.html - - - RCReader.cc - RCReader_8cc_source.html - - - RCReader.h - RCReader_8h_source.html - - - regex_test.cc - regex__test_8cc_source.html - - - Resource.h - Resource_8h_source.html - - - Response.h - Response_8h_source.html - - - ResponseTooBigErr.cc - ResponseTooBigErr_8cc_source.html - - - ResponseTooBigErr.h - ResponseTooBigErr_8h_source.html - - - RValue.cc - RValue_8cc_source.html - - - RValue.h - RValue_8h_source.html - - - Sequence.cc - Sequence_8cc_source.html - - - Sequence.h - Sequence_8h_source.html - - - ServerFunction.cc - ServerFunction_8cc_source.html - - - ServerFunction.h - ServerFunction_8h_source.html - - - ServerFunctionsList.cc - ServerFunctionsList_8cc_source.html - - - ServerFunctionsList.h - ServerFunctionsList_8h_source.html - - - SignalHandler.cc - SignalHandler_8cc_source.html - - - SignalHandler.h - SignalHandler_8h_source.html - - - SignalHandlerRegisteredErr.h - SignalHandlerRegisteredErr_8h_source.html - - - StdinResponse.h - StdinResponse_8h_source.html - - - Str.cc - Str_8cc_source.html - - - Str.h - Str_8h_source.html - - - Structure.cc - Structure_8cc_source.html - - - Structure.h - Structure_8h_source.html - - - Type.h - Type_8h_source.html - - - UInt16.cc - UInt16_8cc_source.html - - - UInt16.h - UInt16_8h_source.html - - - UInt32.cc - UInt32_8cc_source.html - - - UInt32.h - UInt32_8h_source.html - - - UInt64.cc - UInt64_8cc_source.html - - - UInt64.h - UInt64_8h_source.html - - - UnMarshaller.h - UnMarshaller_8h_source.html - - - Url.cc - Url_8cc_source.html - - - Url.h - Url_8h_source.html - - - util.cc - util_8cc_source.html - - - util.h - util_8h_source.html - - - util_mit.cc - util__mit_8cc_source.html - - - util_mit.h - util__mit_8h_source.html - - - Vector.cc - Vector_8cc_source.html - - - Vector.h - Vector_8h_source.html - - - warn-on-use.h - warn-on-use_8h_source.html - - - xdr-datatypes-config.h - xdr-datatypes-config_8h_source.html - - - xdr-datatypes-static.h - xdr-datatypes-static_8h_source.html - - - xdr-datatypes.h - xdr-datatypes_8h_source.html - - - XDRFileMarshaller.cc - XDRFileMarshaller_8cc_source.html - - - XDRFileMarshaller.h - XDRFileMarshaller_8h_source.html - - - XDRFileUnMarshaller.cc - XDRFileUnMarshaller_8cc_source.html - - - XDRFileUnMarshaller.h - XDRFileUnMarshaller_8h_source.html - - - XDRStreamMarshaller.cc - XDRStreamMarshaller_8cc_source.html - - - XDRStreamMarshaller.h - XDRStreamMarshaller_8h_source.html - - - XDRStreamUnMarshaller.cc - XDRStreamUnMarshaller_8cc_source.html - - - XDRStreamUnMarshaller.h - XDRStreamUnMarshaller_8h_source.html - - - XDRUtils.cc - XDRUtils_8cc_source.html - - - XDRUtils.h - XDRUtils_8h_source.html - - - XMLWriter.cc - XMLWriter_8cc_source.html - - - XMLWriter.h - XMLWriter_8h_source.html - - - - - - - - - diff --git a/html/ObjectType_8h_source.html b/html/ObjectType_8h_source.html deleted file mode 100644 index 0ab52e2a7..000000000 --- a/html/ObjectType_8h_source.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - -libdap: ObjectType.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
ObjectType.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003,2013 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef _object_type_h
27 #define _object_type_h
28 
29 namespace libdap
30 {
31 
58 enum ObjectType {
59  unknown_type,
60  dods_das,
61  dods_dds,
62  dods_data,
63  dods_ddx, // This is the old XML DDS/DAS used prior to dap4
64  dods_data_ddx, // This is used for caching data responses
65  dods_error,
66  web_error,
67 
68  dap4_dmr, // DAP4 metadata
69  dap4_data, // The DMR with a data blob
70  dap4_error // The error response for DAP4
71 };
72 
73 } // namespace libdap
74 
75 #endif
ObjectType
The type of object in the stream coming from the data server.
Definition: ObjectType.h:58
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
-
- - - - diff --git a/html/Operators_8h_source.html b/html/Operators_8h_source.html deleted file mode 100644 index d52cd9dd2..000000000 --- a/html/Operators_8h_source.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -libdap: Operators.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Operators.h
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2002,2003 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 // (c) COPYRIGHT URI/MIT 1999
26 // Please read the full copyright statement in the file COPYRIGHT_URI.
27 //
28 // Authors:
29 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
30 
31 // Templates for relational operations.
32 //
33 // jhrg 3/24/99
34 
35 #ifndef _operators_h
36 #define _operators_h
37 
38 #include "GNURegex.h" // GNU Regex class used for string =~ op.
39 #include "ce_expr.tab.hh"
40 
41 #pragma GCC diagnostic ignored "-Wsign-compare"
42 
43 namespace libdap {
44 
52 template<class T1, class T2>
53 bool Cmp(int op, T1 v1, T2 v2)
54 {
55  DBGN(cerr << __PRETTY_FUNCTION__ << v1 << " " << op << " " << v2 << endl);
56 
57  switch (op) {
58  case SCAN_EQUAL:
59  return v1 == v2;
60  case SCAN_NOT_EQUAL:
61  return v1 != v2;
62  case SCAN_GREATER:
63  return v1 > v2;
64  case SCAN_GREATER_EQL:
65  return v1 >= v2;
66  case SCAN_LESS:
67  return v1 < v2;
68  case SCAN_LESS_EQL:
69  return v1 <= v2;
70  case SCAN_REGEXP:
71  throw Error(malformed_expr, "Regular expressions are supported for strings only.");
72  default:
73  throw Error(malformed_expr, "Unrecognized operator.");
74  }
75 }
76 
77 #if 0
78 template<class T>
79 static inline unsigned long long dap_floor_zero(T i)
80 {
81  return (unsigned long long) ((i < 0) ? 0 : i);
82 }
83 #endif
84 
85 #if 0
86 // Hack
87 template<class T>
88 static inline T dap_floor_zero(T i)
89 {
90  return i;
91 }
92 
101 template<class UT1, class T2>
102 bool USCmp(int op, UT1 v1, T2 v2)
103 {
104  DBGN(cerr << __PRETTY_FUNCTION__ << v1 << " " << op << " " << v2 << endl);
105 
106  switch (op) {
107  case SCAN_EQUAL:
108  return v1 == dap_floor_zero<T2>(v2);
109  case SCAN_NOT_EQUAL:
110  return v1 != dap_floor_zero<T2>(v2);
111  case SCAN_GREATER:
112  return v1 > dap_floor_zero<T2>(v2);
113  case SCAN_GREATER_EQL:
114  return v1 >= dap_floor_zero<T2>(v2);
115  case SCAN_LESS:
116  return v1 < dap_floor_zero<T2>(v2);
117  case SCAN_LESS_EQL:
118  return v1 <= dap_floor_zero<T2>(v2);
119  case SCAN_REGEXP:
120  throw Error(malformed_expr, "Regular expressions are supported for strings only.");
121  default:
122  throw Error(malformed_expr, "Unrecognized operator.");
123  }
124 }
125 
138 template<class T1, class UT2>
139 bool SUCmp(int op, T1 v1, UT2 v2)
140 {
141  DBGN(cerr << __PRETTY_FUNCTION__ << v1 << " " << op << " " << v2 << endl);
142 
143  switch (op) {
144  case SCAN_EQUAL:
145  return dap_floor_zero<T1>(v1) == v2;
146  case SCAN_NOT_EQUAL:
147  return dap_floor_zero<T1>(v1) != v2;
148  case SCAN_GREATER:
149  return dap_floor_zero<T1>(v1) > v2;
150  case SCAN_GREATER_EQL:
151  return dap_floor_zero<T1>(v1) >= v2;
152  case SCAN_LESS:
153  return dap_floor_zero<T1>(v1) < v2;
154  case SCAN_LESS_EQL:
155  return dap_floor_zero<T1>(v1) <= v2;
156  case SCAN_REGEXP:
157  throw Error(malformed_expr, "Regular expressions are supported for strings only.");
158  default:
159  throw Error(malformed_expr, "Unrecognized operator.");
160  }
161 }
162 #endif
163 
169 template<class T1, class T2>
170 bool StrCmp(int op, T1 v1, T2 v2)
171 {
172  switch (op) {
173  case SCAN_EQUAL:
174  return v1 == v2;
175  case SCAN_NOT_EQUAL:
176  return v1 != v2;
177  case SCAN_GREATER:
178  return v1 > v2;
179  case SCAN_GREATER_EQL:
180  return v1 >= v2;
181  case SCAN_LESS:
182  return v1 < v2;
183  case SCAN_LESS_EQL:
184  return v1 <= v2;
185  case SCAN_REGEXP: {
186  Regex r(v2.c_str());
187  return r.match(v1.c_str(), v1.length()) > 0;
188  }
189  default:
190  throw Error(malformed_expr, "Unrecognized operator.");
191  }
192 }
193 
194 } // namespace libdap
195 
196 #endif // _operators_h
bool Cmp(int op, T1 v1, T2 v2)
Definition: Operators.h:53
- -
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
int match(const char *s, int len, int pos=0)
Does the pattern match.
Definition: GNURegex.cc:115
-
bool StrCmp(int op, T1 v1, T2 v2)
Definition: Operators.h:170
-
A class for error processing.
Definition: Error.h:92
-
-
- - - - diff --git a/html/PipeResponse_8h_source.html b/html/PipeResponse_8h_source.html deleted file mode 100644 index 7565ee121..000000000 --- a/html/PipeResponse_8h_source.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -libdap: PipeResponse.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
PipeResponse.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef pipe_response_h
27 #define pipe_response_h
28 
29 #include <cstdio>
30 
31 #ifndef response_h
32 #include "Response.h"
33 #endif
34 
35 #ifndef _debug_h
36 #include "debug.h"
37 #endif
38 
39 using namespace std;
40 
41 namespace libdap
42 {
43 
47 class PipeResponse: public Response
48 {
49 private:
50  FILE *d_pstream;
51 
52 protected:
53 
54 public:
70  PipeResponse(FILE *s) : Response(0), d_pstream(s)
71  {}
72 
74  virtual ~PipeResponse()
75  {
76  if (d_pstream)
77  pclose(d_pstream);
78  }
79 
80  virtual FILE *get_stream() const
81  {
82  return d_pstream;
83  }
84  virtual void set_stream(FILE *s)
85  {
86  d_pstream = s;
87  }
88 };
89 
90 } // namespace libdap
91 
92 #endif // pipe_response_h
STL namespace.
-
virtual ~PipeResponse()
Definition: PipeResponse.h:74
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
PipeResponse(FILE *s)
Initialize with a stream returned by popen().
Definition: PipeResponse.h:70
- -
Encapsulate a response. This class provides special treatment for &#39;stream pipes.&#39; It arranges to clos...
Definition: PipeResponse.h:47
-
-
- - - - diff --git a/html/RCReader_8cc_source.html b/html/RCReader_8cc_source.html deleted file mode 100644 index 0139e75c3..000000000 --- a/html/RCReader_8cc_source.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -libdap: RCReader.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
RCReader.cc
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2002,2003 OPeNDAP, Inc.
7 // Author: Jose Garcia <jgarcia@ucar.edu>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 // (c) COPYRIGHT URI/MIT 2001,2002
26 // Please read the full copyright statement in the file COPYRIGHT_URI.
27 //
28 // Authors:
29 // jose Jose Garcia <jgarcia@ucar.edu>
30 
36 // #define DODS_DEBUG
37 #include "config.h"
38 
39 #include <cstring>
40 #include <cstdlib>
41 
42 #include <unistd.h> // for stat
43 #include <sys/types.h>
44 #include <sys/stat.h>
45 
46 #ifdef WIN32
47 #define FALSE 0
48 // Win32 does not define F_OK. 08/21/02 jhrg
49 #define F_OK 0
50 #define DIR_SEP_STRING "\\"
51 #define DIR_SEP_CHAR '\\'
52 #include <direct.h>
53 #else
54 #define DIR_SEP_STRING "/"
55 #define DIR_SEP_CHAR '/'
56 #endif
57 
58 #include <pthread.h>
59 
60 #include <fstream>
61 
62 #include "debug.h"
63 #include "RCReader.h"
64 #include "Error.h"
65 
66 using namespace std;
67 
68 namespace libdap {
69 
70 RCReader* RCReader::_instance = 0;
71 
72 // This variable (instance_control) is used to ensure that in a MT
73 // environment _instance is correctly initialized. See the get_instance
74 // method. 08/07/02 jhrg
75 static pthread_once_t instance_control = PTHREAD_ONCE_INIT;
76 
81 bool RCReader::write_rc_file(const string &pathname)
82 {
83  DBG(cerr << "Writing the RC file to " << pathname << endl);
84  ofstream fpo(pathname.c_str());
85 
86  // If the file couldn't be created. Nothing needs to be done here,
87  // the program will simply use the defaults.
88 
89  if (fpo) {
90  // This means we just created the file. We will now save
91  // the defaults in it for future use.
92  fpo << "# OPeNDAP client configuration file. See the OPeNDAP" << endl;
93  fpo << "# users guide for information." << endl;
94  fpo << "USE_CACHE=" << _dods_use_cache << endl;
95  fpo << "# Cache and object size are given in megabytes (20 ==> 20Mb)." << endl;
96  fpo << "MAX_CACHE_SIZE=" << _dods_cache_max << endl;
97  fpo << "MAX_CACHED_OBJ=" << _dods_cached_obj << endl;
98  fpo << "IGNORE_EXPIRES=" << _dods_ign_expires << endl;
99  fpo << "CACHE_ROOT=" << d_cache_root << endl;
100  fpo << "DEFAULT_EXPIRES=" << _dods_default_expires << endl;
101  fpo << "ALWAYS_VALIDATE=" << _dods_always_validate << endl;
102  fpo << "# Request servers compress responses if possible?" << endl;
103  fpo << "# 1 (yes) or 0 (false)." << endl;
104  fpo << "DEFLATE=" << _dods_deflate << endl;
105 
106  fpo << "# Should SSL certificates and hosts be validated? SSL" << endl;
107  fpo << "# will only work with signed certificates." << endl;
108  fpo << "VALIDATE_SSL=" << d_validate_ssl << endl;
109 
110  fpo << "# Proxy configuration (optional parts in []s)." << endl;
111  fpo << "# You may also use the 'http_proxy' environment variable" << endl;
112  fpo << "# but a value in this file will override that env variable." << endl;
113  fpo << "# PROXY_SERVER=[http://][username:password@]host[:port]" << endl;
114  if (!d_dods_proxy_server_host.empty()) {
115  fpo << "PROXY_SERVER=" << d_dods_proxy_server_protocol << "://"
116  << (d_dods_proxy_server_userpw.empty() ? "" : d_dods_proxy_server_userpw + "@")
117  + d_dods_proxy_server_host + ":" + long_to_string(d_dods_proxy_server_port) << endl;
118  }
119 
120  fpo << "# NO_PROXY_FOR=<host|domain>" << endl;
121  if (!d_dods_no_proxy_for_host.empty()) {
122  fpo << "NO_PROXY_FOR=" << d_dods_no_proxy_for_host << endl;
123  }
124 
125  fpo << "# AIS_DATABASE=<file or url>" << endl;
126 
127  fpo << "# COOKIE_JAR=.dods_cookies" << endl;
128  fpo << "# The cookie jar is a file that holds cookies sent from" << endl;
129  fpo << "# servers such as single signon systems. Uncomment this" << endl;
130  fpo << "# option and provide a file name to activate this feature." << endl;
131  fpo << "# If the value is a filename, it will be created in this" << endl;
132  fpo << "# directory; a full pathname can be used to force a specific" << endl;
133  fpo << "# location." << endl;
134 
135  fpo.close();
136  return true;
137  }
138 
139  return false;
140 }
141 
142 bool RCReader::read_rc_file(const string &pathname)
143 {
144  DBG(cerr << "Reading the RC file from " << pathname << endl);
145 
146  ifstream fpi(pathname.c_str());
147  if (fpi) {
148  // The file exists and we may now begin to parse it.
149  // Defaults are already stored in the variables, if the correct
150  // tokens are found in the file then those defaults will be
151  // overwritten.
152  char *value;
153  // TODO Replace with a vector<char>
154  //char *tempstr = new char[1024];
155  vector<char> tempstr(1024);
156  int tokenlength;
157  while (true) {
158  fpi.getline(&tempstr[0], 1023);
159  if (!fpi.good()) break;
160 
161  value = strchr(&tempstr[0], '=');
162  if (!value) continue;
163  tokenlength = value - &tempstr[0];
164  value++;
165 
166  if ((strncmp(&tempstr[0], "USE_CACHE", 9) == 0) && tokenlength == 9) {
167  _dods_use_cache = atoi(value) ? true : false;
168  }
169  else if ((strncmp(&tempstr[0], "MAX_CACHE_SIZE", 14) == 0) && tokenlength == 14) {
170  _dods_cache_max = atoi(value);
171  }
172  else if ((strncmp(&tempstr[0], "MAX_CACHED_OBJ", 14) == 0) && tokenlength == 14) {
173  _dods_cached_obj = atoi(value);
174  }
175  else if ((strncmp(&tempstr[0], "IGNORE_EXPIRES", 14) == 0) && tokenlength == 14) {
176  _dods_ign_expires = atoi(value);
177  }
178  else if ((strncmp(&tempstr[0], "DEFLATE", 7) == 0) && tokenlength == 7) {
179  _dods_deflate = atoi(value) ? true : false;
180  }
181  else if ((strncmp(&tempstr[0], "CACHE_ROOT", 10) == 0) && tokenlength == 10) {
182  d_cache_root = value;
183  if (d_cache_root[d_cache_root.length() - 1] != DIR_SEP_CHAR) d_cache_root += string(DIR_SEP_STRING);
184  }
185  else if ((strncmp(&tempstr[0], "DEFAULT_EXPIRES", 15) == 0) && tokenlength == 15) {
186  _dods_default_expires = atoi(value);
187  }
188  else if ((strncmp(&tempstr[0], "ALWAYS_VALIDATE", 15) == 0) && tokenlength == 15) {
189  _dods_always_validate = atoi(value);
190  }
191  else if ((strncmp(&tempstr[0], "VALIDATE_SSL", 12) == 0) && tokenlength == 12) {
192  d_validate_ssl = atoi(value);
193  }
194  else if (strncmp(&tempstr[0], "AIS_DATABASE", 12) == 0 && tokenlength == 12) {
195  d_ais_database = value;
196  }
197  else if (strncmp(&tempstr[0], "COOKIE_JAR", 10) == 0 && tokenlength == 10) {
198  // if the value of COOKIE_JAR starts with a slash, use it as
199  // is. However, if it does not start with a slash, prefix it
200  // with the directory that contains the .dodsrc file.
201  if (value[0] == '/') {
202  d_cookie_jar = value;
203  }
204  else {
205  d_cookie_jar = d_rc_file_path.substr(0, d_rc_file_path.find(".dodsrc")) + string(value);
206  } DBG(cerr << "set cookie jar to: " << d_cookie_jar << endl);
207  }
208  else if ((strncmp(&tempstr[0], "PROXY_SERVER", 12) == 0) && tokenlength == 12) {
209  // Setup a proxy server for all requests.
210  // The original syntax was <protocol>,<machine> where the
211  // machine could also contain the user/pass and port info.
212  // Support that but also support machine prefixed by
213  // 'http://' with and without the '<protocol>,' prefix. jhrg
214  // 4/21/08 (see bug 1095).
215  string proxy = value;
216  string::size_type comma = proxy.find(',');
217 
218  // Since the <protocol> is now optional, the comma might be
219  // here. If it is, check that the protocol given is http.
220  if (comma != string::npos) {
221  d_dods_proxy_server_protocol = proxy.substr(0, comma);
222  downcase(d_dods_proxy_server_protocol);
223  if (d_dods_proxy_server_protocol != "http")
224  throw Error("The only supported protocol for a proxy server is \"HTTP\". Correct your \".dodsrc\" file.");
225  proxy = proxy.substr(comma + 1);
226  }
227  else {
228  d_dods_proxy_server_protocol = "http";
229  }
230 
231  // Look for a 'protocol://' prefix; skip if found
232  string::size_type protocol = proxy.find("://");
233  if (protocol != string::npos) {
234  proxy = proxy.substr(protocol + 3);
235  }
236 
237  // Break apart into userpw, host and port.
238  string::size_type at_sign = proxy.find('@');
239  if (at_sign != string::npos) { // has userpw
240  d_dods_proxy_server_userpw = proxy.substr(0, at_sign);
241  proxy = proxy.substr(at_sign + 1);
242  }
243  else
244  d_dods_proxy_server_userpw = "";
245 
246  // Get host and look for a port number
247  string::size_type colon = proxy.find(':');
248  if (colon != string::npos) {
249  d_dods_proxy_server_host = proxy.substr(0, colon);
250  d_dods_proxy_server_port = strtol(proxy.substr(colon + 1).c_str(), 0, 0);
251  }
252  else {
253  d_dods_proxy_server_host = proxy;
254  d_dods_proxy_server_port = 80;
255  }
256  }
257  else if ((strncmp(&tempstr[0], "NO_PROXY_FOR", 12) == 0) && tokenlength == 12) {
258  // Setup a proxy server for all requests.
259  string no_proxy = value;
260  string::size_type comma = no_proxy.find(',');
261 
262  // Since the protocol is required, the comma *must* be
263  // present. We could throw an Error on the malformed line...
264  if (comma == string::npos) {
265  d_dods_no_proxy_for_protocol = "http";
266  d_dods_no_proxy_for_host = no_proxy;
267  d_dods_no_proxy_for = true;
268  }
269  else {
270  d_dods_no_proxy_for_protocol = no_proxy.substr(0, comma);
271  d_dods_no_proxy_for_host = no_proxy.substr(comma + 1);
272  d_dods_no_proxy_for = true;
273  }
274  }
275  }
276 
277  //delete [] tempstr; tempstr = 0;
278 
279  fpi.close(); // Close the .dodsrc file. 12/14/99 jhrg
280 
281  return true;
282  } // End of cache file parsing.
283 
284  return false;
285 }
286 
287 // Helper for check_env_var(). This is its main logic, separated out for the
288 // cases under WIN32 where we don't use an environment variable. 09/19/03
289 // jhrg
290 string RCReader::check_string(string env_var)
291 {
292  DBG(cerr << "Entering check_string... (" << env_var << ")" << endl);
293  struct stat stat_info;
294 
295  if (stat(env_var.c_str(), &stat_info) != 0) {
296  DBG(cerr << "stat returned non-zero" << endl);
297  return ""; // ENV VAR not a file or dir, bail
298  }
299 
300  if (S_ISREG(stat_info.st_mode)) {
301  DBG(cerr << "S_ISREG: " << S_ISREG(stat_info.st_mode) << endl);
302  return env_var; // ENV VAR is a file, use it
303  }
304 
305  // ENV VAR is a directory, does it contain .dodsrc? Can we create
306  // .dodsrc if it's not there?
307  if (S_ISDIR(stat_info.st_mode)) {
308  DBG(cerr << "S_ISDIR: " << S_ISDIR(stat_info.st_mode) << endl);
309  if (*env_var.rbegin() != DIR_SEP_CHAR) // Add trailing / if missing
310  env_var += DIR_SEP_STRING;
311  // Trick: set d_cache_root here in case we're going to create the
312  // .dodsrc later on. If the .dodsrc file exists, its value will
313  // overwrite this value, if not write_rc_file() will use the correct
314  // value. 09/19/03 jhrg
315  d_cache_root = env_var + string(".dods_cache") + DIR_SEP_STRING;
316  env_var += ".dodsrc";
317  if (stat(env_var.c_str(), &stat_info) == 0 && S_ISREG(stat_info.st_mode)) {
318  DBG(cerr << "Found .dodsrc in \"" << env_var << "\"" << endl);
319  return env_var; // Found .dodsrc in ENV VAR
320  }
321 
322  // Didn't find .dodsrc in ENV VAR and ENV VAR is a directory; try to
323  // create it. Note write_rc_file uses d_cache_root (set above) when
324  // it creates the RC file's contents.
325  if (write_rc_file(env_var)) {
326  DBG(cerr << "Wrote .dodsrc in \"" << env_var << "\"" << endl);
327  return env_var;
328  }
329  }
330 
331  // If we're here, then we've neither found nor created the RC file.
332  DBG(cerr << "could neither find nor create a .dodsrc file" << endl);
333  return "";
334 }
335 
345 string RCReader::check_env_var(const string &variable_name)
346 {
347  char *ev = getenv(variable_name.c_str());
348  if (!ev || strlen(ev) == 0) return "";
349 
350  return check_string(ev);
351 }
352 
353 RCReader::RCReader() // throw (Error) jhrg 7/2/15
354 {
355  d_rc_file_path = "";
356  d_cache_root = "";
357 
358  // ** Set default values **
359  // Users must explicitly turn caching on.
360  _dods_use_cache = false;
361  _dods_cache_max = 20;
362  _dods_cached_obj = 5;
363  _dods_ign_expires = 0;
364  _dods_default_expires = 86400;
365  _dods_always_validate = 0;
366 
367  _dods_deflate = 0;
368  d_validate_ssl = 1;
369 
370  //flags for PROXY_SERVER=<protocol>,<host url>
371  // New syntax PROXY_SERVER=[http://][user:pw@]host[:port]
372  d_dods_proxy_server_protocol = "";
373  d_dods_proxy_server_host = "";
374  d_dods_proxy_server_port = 0;
375  d_dods_proxy_server_userpw = "";
376 
377  _dods_proxy_server_host_url = ""; // deprecated
378 
379  // PROXY_FOR is deprecated.
380  // flags for PROXY_FOR=<regex>,<proxy host url>,<flags>
381  _dods_proxy_for = false; // true if proxy_for is used.
382  _dods_proxy_for_regexp = "";
383  _dods_proxy_for_proxy_host_url = "";
384  _dods_proxy_for_regexp_flags = 0;
385 
386  //flags for NO_PROXY_FOR=<protocol>,<host>,<port>
387  // New syntax NO_PROXY_FOR=<host|domain>
388  d_dods_no_proxy_for = false;
389  d_dods_no_proxy_for_protocol = ""; // deprecated
390  d_dods_no_proxy_for_host = "";
391  // default to port 0 if not specified. This means all ports. Using 80
392  // will fail when the URL does not contain the port number. That's
393  // probably a bug in libwww. 10/23/2000 jhrg
394  _dods_no_proxy_for_port = 0; // deprecated
395 
396  d_cookie_jar = "";
397 
398 #ifdef WIN32
399  string homedir = string("C:") + string(DIR_SEP_STRING) + string("Dods");
400  d_rc_file_path = check_string(homedir);
401  if (d_rc_file_path.empty()) {
402  homedir = string("C:") + string(DIR_SEP_STRING) + string("opendap");
403  d_rc_file_path = check_string(homedir);
404  }
405  // Normally, I'd prefer this for WinNT-based systems.
406  if (d_rc_file_path.empty())
407  d_rc_file_path = check_env_var("APPDATA");
408  if (d_rc_file_path.empty())
409  d_rc_file_path = check_env_var("TEMP");
410  if (d_rc_file_path.empty())
411  d_rc_file_path = check_env_var("TMP");
412 #else
413  d_rc_file_path = check_env_var("DODS_CONF");
414  if (d_rc_file_path.empty()) d_rc_file_path = check_env_var("HOME");
415 #endif
416  DBG(cerr << "Looking for .dodsrc in: " << d_rc_file_path << endl);
417 
418  if (!d_rc_file_path.empty()) read_rc_file(d_rc_file_path);
419 }
420 
421 RCReader::~RCReader()
422 {
423 }
424 
426 void RCReader::delete_instance()
427 {
428  if (RCReader::_instance) {
429  delete RCReader::_instance;
430  RCReader::_instance = 0;
431  }
432 }
433 
435 void RCReader::initialize_instance()
436 {
437  DBGN(cerr << "RCReader::initialize_instance() ... ");
438 
439  RCReader::_instance = new RCReader;
440  atexit(RCReader::delete_instance);
441 
442  DBG(cerr << "exiting." << endl);
443 }
444 
445 RCReader*
446 RCReader::instance()
447 {
448  DBG(cerr << "Entring RCReader::instance" << endl);
449  // The instance_control variable is defined at the top of this file.
450  // 08/07/02 jhrg
451  pthread_once(&instance_control, initialize_instance);
452 
453  DBG(cerr << "Instance value: " << hex << _instance << dec << endl);
454 
455  return _instance;
456 }
457 
458 #if 0
459 RCReader*
460 RCReader::instance(const string &rc_file_path)
461 {
462  DBG(cerr << "Entring RCReader::instance" << endl);
463 
464  d_rc_file_path = rc_file_path;
465  // The instance_control variable is defined at the top of this file.
466  // 08/07/02 jhrg
467  pthread_once(&instance_control, initialize_instance);
468 
469  DBG(cerr << "Instance value: " << hex << _instance << dec << endl);
470 
471  return _instance;
472 }
473 #endif
474 } // namespace libdap
void downcase(string &s)
Definition: util.cc:563
-
STL namespace.
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
-
- - - - diff --git a/html/RCReader_8h_source.html b/html/RCReader_8h_source.html deleted file mode 100644 index 69c6b616a..000000000 --- a/html/RCReader_8h_source.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - -libdap: RCReader.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
RCReader.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: Jose Garcia <jgarcia@ucar.edu>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 2001-2002
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jose Jose Garcia <jgarcia@ucar.edu>
31 
32 #ifndef _rc_reader_h_
33 #define _rc_reader_h_
34 
35 #include <iostream>
36 #include <string>
37 
38 #include "Error.h"
39 #include "util.h"
40 
41 using namespace std;
42 
43 namespace libdap
44 {
45 
54 class RCReader
55 {
56 private:
57  string d_rc_file_path;
58  string d_cache_root;
59 
60  bool _dods_use_cache; // 0- Disabled 1- Enabled
61  unsigned int _dods_cache_max; // Max cache size in Mbytes
62  unsigned int _dods_cached_obj; // Max cache entry size in Mbytes
63  int _dods_ign_expires; // 0- Honor expires 1- Ignore them
64 
65  // NB: NEVER_DEFLATE: I added this (12/1/99 jhrg) because libwww 5.2.9
66  // cannot process compressed (i.e., deflated) documents in the cache.
67  // Users must be able to choose whether they want compressed data that
68  // will always be refreshed or uncompressed data that will be cached.
69  // When set this flag overrides the value passed into the Connect
70  // object's constructor. This gives users control over the value.
71  // Previously, this could only be set by the program that called
72  // Connect(...). Note that I've now (4/6/2000 jhrg) fixed libwww so this
73  // parameter is no longer needed.111
74  //
75  // Added back in, but with a better name (removed double negative).
76  // 6/27/2002 jhrg
77  bool _dods_deflate; // 1- request comp responses, 0- don't
78 
79  int _dods_default_expires; // 24 hours in seconds
80  int _dods_always_validate; // Let libwww decide by default so set to 0
81 
82  // flags for PROXY_SERVER=<protocol>,<host url>
83  string d_dods_proxy_server_protocol;
84  string d_dods_proxy_server_host;
85  int d_dods_proxy_server_port;
86  string d_dods_proxy_server_userpw;
87 
88  // Should libcurl validate SSL hosts/certificates"
89  int d_validate_ssl;
90 
91  string _dods_proxy_server_host_url; // deprecated
92 
93  // The proxy-for stuff is all deprecated. 06/17/04 jhrg
94  // flags for PROXY_FOR=<regex>,<proxy host url>,<flags>
95  bool _dods_proxy_for; // true if proxy_for is used.
96  string _dods_proxy_for_regexp;
97  string _dods_proxy_for_proxy_host_url;
98  int _dods_proxy_for_regexp_flags; // not used w/libcurl. 6/27/2002 jhrg
99 
100  //flags for NO_PROXY_FOR=<protocol>,<host>,<port>
101  bool d_dods_no_proxy_for; // true if no_proxy_for is used.
102  string d_dods_no_proxy_for_protocol;
103  string d_dods_no_proxy_for_host;
104  int _dods_no_proxy_for_port; // not used w/libcurl. 6/27/2002 jhrg
105 
106  // Make this a vector of strings or support a PATH-style list. 02/26/03
107  // jhrg
108  string d_ais_database;
109 
110  string d_cookie_jar;
111 
112  static RCReader* _instance;
113 
114  RCReader();
115  ~RCReader();
116 
117  // File I/O methods
118  bool write_rc_file(const string &pathname);
119  bool read_rc_file(const string &pathname);
120 
121  // Look for the RC file
122  string check_env_var(const string &variable_name);
123  string check_string(string env_var);
124 
125  static void initialize_instance();
126  static void delete_instance();
127 
128  friend class RCReaderTest;
129  friend class HTTPConnectTest;
130 
131 public:
132  static RCReader* instance();
133 #if 0
134  static RCReader* instance(const string &rc_file_path);
135 #endif
136  // GET METHODS
137  string get_dods_cache_root() const throw()
138  {
139  return d_cache_root;
140  }
141  bool get_use_cache() const throw()
142  {
143  return _dods_use_cache;
144  }
145  int get_max_cache_size() const throw()
146  {
147  return _dods_cache_max;
148  }
149  unsigned int get_max_cached_obj() const throw()
150  {
151  return _dods_cached_obj;
152  }
153  int get_ignore_expires() const throw()
154  {
155  return _dods_ign_expires;
156  }
157  int get_default_expires() const throw()
158  {
159  return _dods_default_expires;
160  }
161  int get_always_validate() const throw()
162  {
163  return _dods_always_validate;
164  }
165  int get_validate_ssl() const throw()
166  {
167  return d_validate_ssl;
168  }
169 
170  bool get_deflate() const throw()
171  {
172  return _dods_deflate;
173  }
174 
176  string get_proxy_server_protocol() const throw()
177  {
178  return d_dods_proxy_server_protocol;
179  }
181  string get_proxy_server_host() const throw()
182  {
183  return d_dods_proxy_server_host;
184  }
186  int get_proxy_server_port() const throw()
187  {
188  return d_dods_proxy_server_port;
189  }
191  string get_proxy_server_userpw() const throw()
192  {
193  return d_dods_proxy_server_userpw;
194  }
196  string get_proxy_server_host_url() const throw()
197  {
198  return (d_dods_proxy_server_userpw.empty() ? "" : d_dods_proxy_server_userpw + "@")
199  + d_dods_proxy_server_host
200  + ":" + long_to_string(d_dods_proxy_server_port);
201  }
202 
203  // The whole regex/proxy-for implementation needs reworking. We really
204  // need a vector of structs which hold the information on a set of regexes
205  // and matching proxies. Then in the code that derefs a URL, we should
206  // check to see if the URL matches any of the regexs, et cetera. I'm
207  // going to disable the entire feature and see if anyone complains. If
208  // they do, we can fix it. If not, one less thing to do... 06/17/04 jhrg
210  bool is_proxy_for_used() throw()
211  {
212  return _dods_proxy_for;
213  }
215  string get_proxy_for_regexp() const throw()
216  {
217  return _dods_proxy_for_regexp;
218  }
220  string get_proxy_for_proxy_host_url() const throw()
221  {
222  return _dods_proxy_for_proxy_host_url;
223  }
224 
226  int get_proxy_for_regexp_flags() const throw()
227  {
228  return _dods_proxy_for_regexp_flags;
229  }
230 
231  // The whole no_proxy implementation also needs a rewrite. However, it is
232  // useful as it is since the user can give a domain and there's often a
233  // real need for suppressing proxy access for the local domain. The
234  // ..._port() method is bogus, however, so it is deprecated. There's no
235  // code that uses it. 06/17/04 jhrg
236  bool is_no_proxy_for_used() throw()
237  {
238  return d_dods_no_proxy_for;
239  }
240  string get_no_proxy_for_protocol() const throw()
241  {
242  return d_dods_no_proxy_for_protocol;
243  }
244  string get_no_proxy_for_host() const throw()
245  {
246  return d_dods_no_proxy_for_host;
247  }
248 
250  int get_no_proxy_for_port() const throw()
251  {
252  return _dods_no_proxy_for_port;
253  }
254 
255  string get_ais_database() const throw()
256  {
257  return d_ais_database;
258  }
259 
260  string get_cookie_jar() const throw()
261  {
262  return d_cookie_jar;
263  }
264 
265  // SET METHODS
266  void set_use_cache(bool b) throw()
267  {
268  _dods_use_cache = b;
269  }
270  void set_max_cache_size(int i) throw()
271  {
272  _dods_cache_max = i;
273  }
274  void set_max_cached_obj(int i) throw()
275  {
276  _dods_cached_obj = i;
277  }
278  void set_ignore_expires(int i) throw()
279  {
280  _dods_ign_expires = i;
281  }
282  void set_default_expires(int i) throw()
283  {
284  _dods_default_expires = i;
285  }
286  void set_always_validate(int i) throw()
287  {
288  _dods_always_validate = i;
289  }
290  void set_validate_ssl(int i) throw()
291  {
292  d_validate_ssl = i;
293  }
294 
295  void set_deflate(bool b) throw()
296  {
297  _dods_deflate = b;
298  }
299 
300  void set_proxy_server_protocol(const string &s) throw()
301  {
302  d_dods_proxy_server_protocol = s;
303  }
304  void set_proxy_server_host(const string &s) throw()
305  {
306  d_dods_proxy_server_host = s;
307  }
308  void set_proxy_server_port(int l) throw()
309  {
310  d_dods_proxy_server_port = l;
311  }
312  void set_proxy_server_userpw(const string &s) throw()
313  {
314  d_dods_proxy_server_userpw = s;
315  }
316 
318  void set_proxy_server_host_url(const string &s) throw()
319  {
320  _dods_proxy_server_host_url = s;
321  }
322 
324  void set_proxy_for_regexp(const string &s) throw()
325  {
326  _dods_proxy_for_regexp = s;
327  }
329  void set_proxy_for_proxy_host_url(const string &s) throw()
330  {
331  _dods_proxy_for_proxy_host_url = s;
332  }
334  void set_proxy_for_regexp_flags(int i) throw()
335  {
336  _dods_proxy_for_regexp_flags = i;
337  }
338 
339  void set_no_proxy_for_protocol(const string &s) throw()
340  {
341  d_dods_no_proxy_for_protocol = s;
342  }
343  void set_no_proxy_for_host(const string &s) throw()
344  {
345  d_dods_no_proxy_for_host = s;
346  }
347 
349  void set_no_proxy_for_port(int i) throw()
350  {
351  _dods_no_proxy_for_port = i;
352  }
353 
354  void set_ais_database(const string &db) throw()
355  {
356  d_ais_database = db;
357  }
358 };
359 
360 } // namespace libdap
361 
362 #endif // _RCReader_h_
string get_proxy_server_userpw() const
Get the proxy username and password.
Definition: RCReader.h:191
-
bool is_proxy_for_used()
Definition: RCReader.h:210
-
void set_proxy_for_regexp(const string &s)
Definition: RCReader.h:324
-
void set_proxy_for_proxy_host_url(const string &s)
Definition: RCReader.h:329
-
void set_proxy_server_host_url(const string &s)
Definition: RCReader.h:318
-
STL namespace.
-
void set_no_proxy_for_port(int i)
Definition: RCReader.h:349
-
string get_proxy_for_regexp() const
Definition: RCReader.h:215
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
int get_proxy_server_port() const
Get the proxy port.
Definition: RCReader.h:186
-
void set_proxy_for_regexp_flags(int i)
Definition: RCReader.h:334
-
string get_proxy_server_host() const
Get the proxy host.
Definition: RCReader.h:181
- -
int get_no_proxy_for_port() const
Definition: RCReader.h:250
-
string get_proxy_server_protocol() const
Get the proxy server protocol.
Definition: RCReader.h:176
-
string get_proxy_server_host_url() const
Definition: RCReader.h:196
-
string get_proxy_for_proxy_host_url() const
Definition: RCReader.h:220
-
int get_proxy_for_regexp_flags() const
Definition: RCReader.h:226
-
-
- - - - diff --git a/html/RValue_8cc_source.html b/html/RValue_8cc_source.html deleted file mode 100644 index d2ae079f0..000000000 --- a/html/RValue_8cc_source.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -libdap: RValue.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
RValue.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1996-1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // This file contains mfuncs defined for struct rvalue (see expr.h) that
33 // *cannot* be included in that struct's declaration because their
34 // definitions must follow *both* rvalue's and func_rvalue's declarations.
35 // jhrg 3/4/96
36 
37 #include "config.h"
38 
39 #include <cassert>
40 #include <iostream>
41 
42 #include "BaseType.h"
43 #include "expr.h"
44 #include "RValue.h"
45 #include "DDS.h"
46 #include "dods-limits.h"
47 #include "util.h"
48 
49 using namespace std;
50 
51 namespace libdap {
52 
53 rvalue_list *
54 make_rvalue_list(rvalue *rv)
55 {
56  assert(rv);
57 
58  rvalue_list *rvals = new rvalue_list;
59 
60  return append_rvalue_list(rvals, rv);
61 }
62 
63 // Given a rvalue_list pointer RVALS and a value pointer VAL, make a variable
64 // to hold VAL and append that variable to the list RVALS.
65 //
66 // Returns: A pointer to the updated rvalue_list.
67 
68 rvalue_list *
69 append_rvalue_list(rvalue_list *rvals, rvalue *rv)
70 {
71  rvals->push_back(rv);
72 
73  return rvals;
74 }
75 
76 
87 BaseType **
88 build_btp_args(rvalue_list *args, DDS &dds)
89 {
90  int argc = 0;
91 
92  if (args)
93  argc = args->size();
94 
95  // Sanitize allocation size
96  if (!size_ok(sizeof(BaseType*), argc + 1))
97  throw Error(malformed_expr, string("Malformed argument list (")
98  + long_to_string(argc) + string(")."));
99 
100  // Add space for a null terminator
101  BaseType **argv = new BaseType*[argc + 1];
102 
103  int index = 0;
104  if (argv && argc) {
105  for (rvalue::Args_iter i = args->begin(); i != args->end() && index
106  < argc + 1; ++i)
107  argv[index++] = (*i)->bvalue(dds);
108 
109  argv[index] = 0; // Add the null terminator.
110  }
111 
112  if (index != argc) {
113  delete[] argv;
114  throw InternalErr(__FILE__, __LINE__, "index out of range.");
115  }
116 #if 0
117  argv[index] = 0; // Add the null terminator.
118 #endif
119  return argv;
120 }
121 
122 rvalue::rvalue(BaseType *bt): d_value(bt), d_func(0), d_args(0)
123 {}
124 
125 rvalue::rvalue(btp_func f, vector<rvalue *> *a) : d_value(0), d_func(f), d_args(a)
126 {}
127 
128 rvalue::rvalue(): d_value(0), d_func(0), d_args(0)
129 {}
130 
131 rvalue::~rvalue()
132 {
133  // Deleting the BaseType pointers in value and args is a bad idea since
134  // those might be variables in the dataset. The DDS dtor will take care
135  // of deleting them. The constants wrapped in BaseType objects should be
136  // pushed on the list of CE-allocated temp objects which the CE frees.
137 
138  // ADB: the d_args vector still needs to be deleted
139  if (d_args != 0) {
140  for (std::vector<rvalue *>::iterator iter = d_args->begin(); iter != d_args->end(); ++iter) {
141  delete *iter;
142  }
143  delete d_args;
144  }
145 }
146 
147 string
148 rvalue::value_name()
149 {
150  assert(d_value);
151 
152  return d_value->name();
153 }
154 
162 BaseType *
163 rvalue::bvalue(DDS &dds)
164 {
165  if (d_value) { // i.e., if this RValue is a BaseType
166  return d_value;
167  }
168  else if (d_func) {
169  // If func is true, then args must be set. See the constructor.
170  // 12/23/04 jhrg
171  BaseType **argv = build_btp_args(d_args, dds);
172  BaseType *ret_val;
173  (*d_func)(d_args->size(), argv, dds, &ret_val);
174  delete[] argv;
175  return ret_val;
176  }
177  else {
178  return 0;
179  }
180 }
181 
182 } // namespace libdap
183 
bool size_ok(unsigned int sz, unsigned int nelem)
sanitize the size of an array. Test for integer overflow when dynamically allocating an array...
Definition: util.cc:1148
-
STL namespace.
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
- -
BaseType ** build_btp_args(rvalue_list *args, DDS &dds)
Definition: RValue.cc:88
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
A class for error processing.
Definition: Error.h:92
-
-
- - - - diff --git a/html/RValue_8h_source.html b/html/RValue_8h_source.html deleted file mode 100644 index 81deafe55..000000000 --- a/html/RValue_8h_source.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -libdap: RValue.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
RValue.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1998-1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 #ifndef _rvalue_h
33 #define _rvalue_h
34 
35 #include <dods-datatypes.h>
36 
37 namespace libdap
38 {
39 
46 class rvalue
47 {
48 private:
49  BaseType *d_value;
50  btp_func d_func; // pointer to a function returning BaseType *
51  std::vector<rvalue *> *d_args; // arguments to the function
52 
53 public:
54  typedef std::vector<rvalue *>::iterator Args_iter ;
55  typedef std::vector<rvalue *>::const_iterator Args_citer ;
56 
57  rvalue(BaseType *bt);
58  rvalue(btp_func f, std::vector<rvalue *> *a);
59  rvalue();
60 
61  virtual ~rvalue();
62  std::string value_name();
63 
64  BaseType *bvalue(DDS &dds);
65 };
66 
67 // This type def must come after the class definition above. It is used in
68 // the Clause and DDS classes.
69 typedef std::vector<rvalue *> rvalue_list;
70 typedef std::vector<rvalue *>::const_iterator rvalue_list_citer ;
71 typedef std::vector<rvalue *>::iterator rvalue_list_iter ;
72 
73 typedef std::vector<dods_byte> *byte_arg_list;
74 typedef std::vector<dods_int16> *int16_arg_list;
75 typedef std::vector<dods_uint16> *uint16_arg_list;
76 typedef std::vector<dods_int32> *int32_arg_list;
77 typedef std::vector<dods_uint32> *uint32_arg_list;
78 typedef std::vector<dods_float32> *float32_arg_list;
79 typedef std::vector<dods_float64> *float64_arg_list;
80 
81 rvalue_list *make_rvalue_list(rvalue *rv);
82 rvalue_list *append_rvalue_list(rvalue_list *rvals, rvalue *rv);
83 
84 BaseType **build_btp_args(rvalue_list *args, DDS &dds);
85 
86 } // namespace libdap
87 #endif // _rvalue_h
BaseType * bvalue(DDS &dds)
Definition: RValue.cc:163
- -
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- -
BaseType ** build_btp_args(rvalue_list *args, DDS &dds)
Definition: RValue.cc:88
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
-
- - - - diff --git a/html/Resource_8h_source.html b/html/Resource_8h_source.html deleted file mode 100644 index efba74ab7..000000000 --- a/html/Resource_8h_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -libdap: Resource.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Resource.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef resource_h
27 #define resource_h
28 
29 #include <string>
30 #include <iostream>
31 
32 #ifndef _error_h
33 #include "Error.h"
34 #endif
35 
36 using namespace std;
37 
38 namespace libdap
39 {
40 
50 class Resource
51 {
52 public:
53 
71  enum rule { overwrite, replace, fallback };
72 
75  Resource() : d_url(""), d_rule(overwrite)
76  {}
77 
81  Resource(const string &u) : d_url(u), d_rule(overwrite)
82  {}
83 
87  Resource(const string &u, const rule &r) : d_url(u), d_rule(r)
88  {}
89 
100  Resource(const string &u, const string &r) throw(Error) : d_url(u)
101  {
102  if (r == "replace")
103  d_rule = replace;
104  else if (r == "fallback")
105  d_rule = fallback;
106  else if (r == "overwrite" || r == "default")
107  d_rule = overwrite;
108  else
109  throw Error(string("An AIS Resource object was created with an unknown rule type '") + r);
110  }
111 
112  virtual ~Resource()
113 {}
114 
116  virtual string get_url() const
117  {
118  return d_url;
119  }
120 
123  virtual void set_url(const string &u)
124  {
125  d_url = u;
126  }
127 
129  virtual Resource::rule get_rule() const
130  {
131  return d_rule;
132  }
133 
136  virtual void set_rule(const Resource::rule &r)
137  {
138  d_rule = r;
139  }
140 
145  friend ostream &operator<<(ostream &os, const Resource &r);
146 
147 
148 private:
149 
150  string d_url;
151  Resource::rule d_rule;
152 };
153 
154 } // namespace libdap
155 
156 #endif // resource_h
virtual string get_url() const
Definition: Resource.h:116
-
Resource(const string &u, const string &r)
Definition: Resource.h:100
-
Resource(const string &u)
Definition: Resource.h:81
-
STL namespace.
-
virtual void set_rule(const Resource::rule &r)
Definition: Resource.h:136
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- -
Resource(const string &u, const rule &r)
Definition: Resource.h:87
-
rule
How are ancillary resources used.
Definition: Resource.h:71
-
ostream & operator<<(ostream &os, const Resource &r)
Definition: AISResources.cc:46
-
virtual void set_url(const string &u)
Definition: Resource.h:123
-
virtual Resource::rule get_rule() const
Definition: Resource.h:129
-
Associate a rule with an ancillary resource.
Definition: Resource.h:50
-
A class for error processing.
Definition: Error.h:92
-
-
- - - - diff --git a/html/ResponseTooBigErr_8cc_source.html b/html/ResponseTooBigErr_8cc_source.html deleted file mode 100644 index a51129ed2..000000000 --- a/html/ResponseTooBigErr_8cc_source.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - -libdap: ResponseTooBigErr.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
ResponseTooBigErr.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 
27 #include "config.h"
28 
29 #include <string>
30 
31 #include "ResponseTooBigErr.h"
32 
33 namespace libdap {
34 
35 ResponseTooBigErr::ResponseTooBigErr() : Error()
36 {
37  _error_code = unknown_error;
38 }
39 
40 ResponseTooBigErr::ResponseTooBigErr(const string &msg) : Error()
41 {
42  _error_code = unknown_error;
43  _error_message = "";
44  _error_message += "A caching error was encounterd:\n";
45  _error_message += msg + "\n";
46 }
47 
48 } // namespace libdap
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
-
- - - - diff --git a/html/ResponseTooBigErr_8h_source.html b/html/ResponseTooBigErr_8h_source.html deleted file mode 100644 index 51d381221..000000000 --- a/html/ResponseTooBigErr_8h_source.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -libdap: ResponseTooBigErr.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
ResponseTooBigErr.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef _response_too_big_err_h
27 #define _response_too_big_err_h 1
28 
29 
30 #include <string>
31 
32 #ifndef _error_h
33 #include "Error.h"
34 #endif
35 
36 namespace libdap
37 {
38 
45 class ResponseTooBigErr: public Error
46 {
47 
48 public:
49  ResponseTooBigErr(const string &msg);
51 };
52 
53 } // namespace libdap
54 
55 #endif // _response_too_big_err_h
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for error processing.
Definition: Error.h:92
- -
-
- - - - diff --git a/html/Response_8h_source.html b/html/Response_8h_source.html deleted file mode 100644 index d4126b192..000000000 --- a/html/Response_8h_source.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - -libdap: Response.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Response.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef response_h
27 #define response_h
28 
29 #include <cstdio>
30 #include <string>
31 //#include <iostream>
32 #include <fstream>
33 
34 #include "ObjectType.h"
35 #include "debug.h"
36 
37 namespace libdap
38 {
39 
53 class Response
54 {
55 private:
57  FILE *d_stream;
58  std::fstream *d_cpp_stream;
59 
61  ObjectType d_type;
63  std::string d_version;
65  std::string d_protocol;
67  int d_status;
68 
69 protected:
72  Response(const Response &);
73  Response &operator=(const Response &);
75 
76 public:
77  Response() : d_stream(0), d_cpp_stream(0), d_type(unknown_type), d_version("dods/0.0"), d_protocol("2.0"),
78  d_status(0)
79  { }
80 
88  Response(FILE *s, int status = 0) : d_stream(s), d_cpp_stream(0), d_type(unknown_type),
89  d_version("dods/0.0"), d_protocol("2.0"), d_status(status) { }
90 
91  Response(std::fstream *s, int status = 0) : d_stream(0), d_cpp_stream(s), d_type(unknown_type),
92  d_version("dods/0.0"), d_protocol("2.0"), d_status(status) { }
93 
95  virtual ~Response()
96  {
97  if (d_stream)
98  fclose(d_stream);
99  if (d_cpp_stream)
100  d_cpp_stream->close();
101  }
102 
105  virtual int get_status() const { return d_status; }
106  virtual FILE *get_stream() const { return d_stream; }
107  virtual std::istream *get_cpp_stream() const { return d_cpp_stream; }
108 
109  virtual ObjectType get_type() const { return d_type; }
110  virtual std::string get_version() const { return d_version; }
111  virtual std::string get_protocol() const { return d_protocol; }
113 
116  virtual void set_status(int s) { d_status = s; }
117 
118  virtual void set_stream(FILE *s) { d_stream = s; }
119  virtual void set_cpp_stream(std::istream *s) { d_cpp_stream = dynamic_cast<std::fstream*>(s); }
120 
121  virtual void set_type(ObjectType o) { d_type = o; }
122  virtual void set_version(const std::string &v) { d_version = v; }
123  virtual void set_protocol(const std::string &p) { d_protocol = p; }
125 };
126 
127 } // namespace libdap
128 
129 #endif // response_h
Response(FILE *s, int status=0)
Definition: Response.h:88
-
ObjectType
The type of object in the stream coming from the data server.
Definition: ObjectType.h:58
-
virtual ~Response()
Definition: Response.h:95
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- -
-
- - - - diff --git a/html/Sequence_8cc_source.html b/html/Sequence_8cc_source.html deleted file mode 100644 index aa1230920..000000000 --- a/html/Sequence_8cc_source.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - -libdap: Sequence.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Sequence.cc
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2002,2003 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 // (c) COPYRIGHT URI/MIT 1994-1999
26 // Please read the full copyright statement in the file COPYRIGHT_URI.
27 //
28 // Authors:
29 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
30 
31 // Implementation for the class Structure
32 //
33 // jhrg 9/14/94
34 
35 #include "config.h"
36 
37 //#define DODS_DEBUG
38 //#define DODS_DEBUG2
39 
40 #include <algorithm>
41 #include <string>
42 #include <sstream>
43 
44 #include "Byte.h"
45 #include "Int16.h"
46 #include "UInt16.h"
47 #include "Int32.h"
48 #include "UInt32.h"
49 #include "Float32.h"
50 #include "Float64.h"
51 #include "Str.h"
52 #include "Url.h"
53 #include "Array.h"
54 #include "Structure.h"
55 #include "Sequence.h"
56 #include "Grid.h"
57 
58 #include "Marshaller.h"
59 #include "UnMarshaller.h"
60 
61 #include "debug.h"
62 #include "Error.h"
63 #include "InternalErr.h"
64 #include "Sequence.h"
65 #include "DDS.h"
66 #include "DataDDS.h"
67 #include "util.h"
68 #include "InternalErr.h"
69 #include "escaping.h"
70 
71 #include "D4Attributes.h"
72 #include "D4Sequence.h"
73 #include "D4Group.h"
74 #include "Constructor.h"
75 #include "DMR.h"
76 #include "DapIndent.h"
77 
78 #undef CLEAR_LOCAL_DATA
79 
80 using namespace std;
81 
82 namespace libdap {
83 
84 static const unsigned char end_of_sequence = 0xA5; // binary pattern 1010 0101
85 static const unsigned char start_of_instance = 0x5A; // binary pattern 0101 1010
86 
87 // Private member functions
88 
89 void Sequence::m_duplicate(const Sequence &s)
90 {
91  DBG(cerr << "In Sequence::m_duplicate" << endl);
92 
93  d_row_number = s.d_row_number;
94  d_starting_row_number = s.d_starting_row_number;
95  d_ending_row_number = s.d_ending_row_number;
96  d_row_stride = s.d_row_stride;
97  d_leaf_sequence = s.d_leaf_sequence;
98  d_unsent_data = s.d_unsent_data;
99  d_wrote_soi = s.d_wrote_soi;
100  d_top_most = s.d_top_most;
101 
102  Sequence &cs = const_cast<Sequence &>(s);
103 
104  // Copy the BaseType objects used to hold values.
105  for (vector<BaseTypeRow *>::iterator rows_iter = cs.d_values.begin(); rows_iter != cs.d_values.end(); rows_iter++) {
106  // Get the current BaseType Row
107  BaseTypeRow *src_bt_row_ptr = *rows_iter;
108  // Create a new row.
109  BaseTypeRow *dest_bt_row_ptr = new BaseTypeRow;
110  // Copy the BaseType objects from a row to new BaseType objects.
111  // Push new BaseType objects onto new row.
112  for (BaseTypeRow::iterator bt_row_iter = src_bt_row_ptr->begin(); bt_row_iter != src_bt_row_ptr->end();
113  bt_row_iter++) {
114  BaseType *src_bt_ptr = *bt_row_iter;
115  BaseType *dest_bt_ptr = src_bt_ptr->ptr_duplicate();
116  dest_bt_row_ptr->push_back(dest_bt_ptr);
117  }
118  // Push new row onto d_values.
119  d_values.push_back(dest_bt_row_ptr);
120  }
121 }
122 
123 static void write_end_of_sequence(Marshaller &m)
124 {
125  m.put_opaque((char *) &end_of_sequence, 1);
126 }
127 
128 static void write_start_of_instance(Marshaller &m)
129 {
130  m.put_opaque((char *) &start_of_instance, 1);
131 }
132 
133 static unsigned char read_marker(UnMarshaller &um)
134 {
135  unsigned char marker;
136  um.get_opaque((char *) &marker, 1);
137 
138  return marker;
139 }
140 
141 static bool is_start_of_instance(unsigned char marker)
142 {
143  return (marker == start_of_instance);
144 }
145 
146 static bool is_end_of_sequence(unsigned char marker)
147 {
148  return (marker == end_of_sequence);
149 }
150 
151 // Public member functions
152 
161 Sequence::Sequence(const string &n) :
162  Constructor(n, dods_sequence_c), d_row_number(-1), d_starting_row_number(-1), d_row_stride(1), d_ending_row_number(
163  -1), d_unsent_data(false), d_wrote_soi(false), d_leaf_sequence(false), d_top_most(false)
164 {
165 }
166 
177 Sequence::Sequence(const string &n, const string &d) :
178  Constructor(n, d, dods_sequence_c), d_row_number(-1), d_starting_row_number(-1),
179  d_row_stride(1), d_ending_row_number(-1), d_unsent_data(false),
180  d_wrote_soi(false), d_leaf_sequence(false), d_top_most(false)
181 {
182 }
183 
186  Constructor(rhs)
187 {
188  m_duplicate(rhs);
189 }
190 
191 BaseType *
193 {
194  return new Sequence(*this);
195 }
196 
211 void
213 {
214  D4Sequence *dest;
215  // If it's already a DAP4 object then we can just return it!
216  if(is_dap4()){
217  dest = static_cast<D4Sequence*>(ptr_duplicate());
218  dest->set_length(-1);
219  container->add_var_nocopy(dest);
220  return;
221  }
222  dest = new D4Sequence(name());
223  Constructor::transform_to_dap4(root, dest);
224  dest->set_length(-1);
225  container->add_var_nocopy(dest);
226 }
227 
228 static inline void delete_bt(BaseType *bt_ptr)
229 {
230  delete bt_ptr;
231  bt_ptr = 0;
232 }
233 
234 static inline void delete_rows(BaseTypeRow *bt_row_ptr)
235 {
236  for_each(bt_row_ptr->begin(), bt_row_ptr->end(), delete_bt);
237 
238  delete bt_row_ptr;
239  bt_row_ptr = 0;
240 }
241 
242 Sequence::~Sequence()
243 {
245 }
246 
248 {
249  if (!d_values.empty()) {
250  for_each(d_values.begin(), d_values.end(), delete_rows);
251  d_values.resize(0);
252  }
253 
254  set_read_p(false);
255 }
256 
257 Sequence &
258 Sequence::operator=(const Sequence &rhs)
259 {
260  if (this == &rhs) return *this;
261 
262  dynamic_cast<Constructor &>(*this) = rhs; // run Constructor=
263 
264  m_duplicate(rhs);
265 
266  return *this;
267 }
268 
273 {
274  return true;
275 }
276 
278 {
279  ostringstream oss;
280 
281  oss << BaseType::toString();
282 
283  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
284  oss << (*i)->toString();
285  }
286 
287  oss << endl;
288 
289  return oss.str();
290 }
291 
293 {
294  bool linear = true;
295  bool seq_found = false;
296  for (Vars_iter iter = d_vars.begin(); linear && iter != d_vars.end(); iter++) {
297  if ((*iter)->type() == dods_sequence_c) {
298  // A linear sequence cannot have more than one child seq. at any
299  // one level. If we've already found a seq at this level, return
300  // false.
301  if (seq_found) {
302  linear = false;
303  break;
304  }
305  seq_found = true;
306  linear = static_cast<Sequence *>((*iter))->is_linear();
307  }
308  else if ((*iter)->type() == dods_structure_c) {
309  linear = static_cast<Structure*>((*iter))->is_linear();
310  }
311  else {
312  // A linear sequence cannot have Arrays, Lists or Grids.
313  linear = (*iter)->is_simple_type();
314  }
315  }
316 
317  return linear;
318 }
319 
324 BaseTypeRow *
326 {
327  if (row >= d_values.size()) return 0; //nullptr
328  return d_values[row];
329 }
330 
338 {
339  d_values = values;
340 }
341 
345 {
346  return d_values;
347 }
348 
353 {
354  return d_values;
355 }
356 
362 BaseType *
363 Sequence::var_value(size_t row, const string &name)
364 {
365  BaseTypeRow *bt_row_ptr = row_value(row);
366  if (!bt_row_ptr) return 0;
367 
368  BaseTypeRow::iterator bt_row_iter = bt_row_ptr->begin();
369  BaseTypeRow::iterator bt_row_end = bt_row_ptr->end();
370  while (bt_row_iter != bt_row_end && (*bt_row_iter)->name() != name)
371  ++bt_row_iter;
372 
373  if (bt_row_iter == bt_row_end)
374  return 0;
375  else
376  return *bt_row_iter;
377 }
378 
384 BaseType *
385 Sequence::var_value(size_t row, size_t i)
386 {
387  BaseTypeRow *bt_row_ptr = row_value(row);
388  if (!bt_row_ptr) return 0;
389 
390  if (i >= bt_row_ptr->size()) return 0;
391 
392  return (*bt_row_ptr)[i];
393 }
394 
395 // This version returns -1. Each API-specific subclass should define a more
396 // reasonable version. jhrg 5/24/96
397 
413 int Sequence::length() const
414 {
415  return -1;
416 }
417 
418 // Hmmm. how is this different from length()?
419 int Sequence::number_of_rows() const
420 {
421  return d_values.size();
422 }
423 
428 {
429  d_row_number = -1;
430 }
431 
438 {
440 
441  if (recur)
442  for (Vars_iter i = var_begin(), e = var_end(); i != e; ++i)
443  if ((*i)->type() == dods_sequence_c)
444  reset_row_number(true);
445 }
446 
447 // Notes:
448 // Assume that read() is implemented so that, when reading data for a nested
449 // sequence, only the outer most level is *actually* read.
450 // This is a consequence of our current (12/7/99) implementation of
451 // the JGOFS server (which is the only server to actually use nested
452 // sequences). 12/7/99 jhrg
453 //
454 // Stop assuming this. This logic is being moved into the JGOFS server
455 // itself. 6/1/2001 jhrg
456 
457 // The read() function returns a boolean value, with TRUE
458 // indicating that read() should be called again because there's
459 // more data to read, and FALSE indicating there's no more data
460 // to read. Note that this behavior is necessary to properly
461 // handle variables that contain Sequences. Jose Garcia If an
462 // error exists while reading, the implementers of the surrogate
463 // library SHOULD throw an Error object which will propagate
464 // beyond this point to to the original caller.
465 // Jose Garcia
466 
499 bool Sequence::read_row(int row, DDS &dds, ConstraintEvaluator &eval, bool ce_eval)
500 {
501  DBG2(cerr << "Entering Sequence::read_row for " << name() << ", row number " << row << ", current row " << d_row_number << endl);
502  if (row < d_row_number) throw InternalErr("Trying to back up inside a sequence!");
503 
504  if (row == d_row_number) {
505  DBG2(cerr << "Leaving Sequence::read_row for " << name() << endl);
506  return false;
507  }
508 
509  bool eof = false; // Start out assuming EOF is false.
510  while (!eof && d_row_number < row) {
511  if (!read_p()) {
512  // jhrg original version from 10/9/13 : eof = (read() == false);
513  eof = read();
514  }
515 
516  // Advance the row number if ce_eval is false (we're not supposed to
517  // evaluate the selection) or both ce_eval and the selection are
518  // true.
519  if (!eof && (!ce_eval || eval.eval_selection(dds, dataset()))) d_row_number++;
520 
521  set_read_p(false); // ...so that the next instance will be read
522  }
523 
524  // Once we finish the above loop, set read_p to true so that the caller
525  // knows that data *has* been read. This is how the read() methods of the
526  // elements of the sequence know to not call read() but instead look for
527  // data values inside themselves.
528  set_read_p(true);
529 
530  // Return true if we have valid data, false if we've read to the EOF.
531  DBG2(cerr << "Leaving Sequence::read_row for " << name() << " with eof: " << eof << endl);
532  return !eof; // jhrg 10/10/13 was: eof == 0;
533 }
534 
535 // Private. This is used to process constraints on the rows of a sequence.
536 // Starting with 3.2 we support constraints like Sequence[10:2:20]. This
537 // odd-looking logic first checks if d_ending_row_number is the sentinel
538 // value of -1. If so, the sequence was not constrained by row number and
539 // this method should never return true (which indicates that we're at the
540 // end of a row-number constraint). If d_ending_row_number is not -1, then is
541 // \e i at the end point? 6/1/2001 jhrg
542 inline bool Sequence::is_end_of_rows(int i)
543 {
544  return ((d_ending_row_number == -1) ? false : (i > d_ending_row_number));
545 }
546 
607 bool Sequence::serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval)
608 {
609  // Special case leaf sequences!
610  bool status = false;
611 
612  if (is_leaf_sequence())
613  status = serialize_leaf(dds, eval, m, ce_eval);
614  else
615  status = serialize_parent_part_one(dds, eval, m);
616 
617  return status;
618 }
619 
620 // We know this is not a leaf Sequence. That means that this Sequence holds
621 // another Sequence as one of its fields _and_ that child Sequence triggers
622 // the actual transmission of values.
623 
624 bool Sequence::serialize_parent_part_one(DDS &dds, ConstraintEvaluator &eval, Marshaller &m)
625 {
626  DBG2(cerr << "Entering serialize_parent_part_one for " << name() << endl);
627 
628  int i = (d_starting_row_number != -1) ? d_starting_row_number : 0;
629 
630  // read_row returns true if valid data was read, false if the EOF was
631  // found. 6/1/2001 jhrg
632  // Since this is a parent sequence, read the row ignoring the CE (all of
633  // the CE clauses will be evaluated by the leaf sequence).
634  bool status = read_row(i, dds, eval, false);
635  DBG2(cerr << "Sequence::serialize_parent_part_one::read_row() status: " << status << endl);
636 
637  while (status && !is_end_of_rows(i)) {
638  i += d_row_stride;
639 
640  // DBG(cerr << "Writing Start of Instance marker" << endl);
641  // write_start_of_instance(sink);
642 
643  // In this loop serialize will signal an error with an exception.
644  for (Vars_iter iter = d_vars.begin(); iter != d_vars.end(); iter++) {
645  // Only call serialize for child Sequences; the leaf sequence
646  // will trigger the transmission of values for its parents (this
647  // sequence and maybe others) once it gets some valid data to
648  // send.
649  // Note that if the leaf sequence has no variables in the current
650  // projection, its serialize() method will never be called and that's
651  // the method that triggers actually sending values. Thus the leaf
652  // sequence must be the lowest level sequence with values whose send_p
653  // property is true.
654  if ((*iter)->send_p() && (*iter)->type() == dods_sequence_c) (*iter)->serialize(eval, dds, m);
655  }
656 
657  set_read_p(false); // ...so this will read the next instance
658 
659  status = read_row(i, dds, eval, false);
660  DBG(cerr << "Sequence::serialize_parent_part_one::read_row() status: " << status << endl);
661  }
662  // Reset current row number for next nested sequence element.
663  d_row_number = -1;
664 
665  // Always write the EOS marker? 12/23/04 jhrg
666  // Yes. According to DAP2, a completely empty response is signaled by
667  // a return value of only the EOS marker for the outermost sequence.
668  if (d_top_most || d_wrote_soi) {
669  DBG(cerr << "Writing End of Sequence marker" << endl);
670  write_end_of_sequence(m);
671  d_wrote_soi = false;
672  }
673 
674  return true; // Signal errors with exceptions.
675 }
676 
677 // If we are here then we know that this is 'parent sequence' and that the
678 // leaf sequence has found valid data to send. We also know that
679 // serialize_parent_part_one has been called so data are in the instance's
680 // fields. This is where we send data. Whereas ..._part_one() contains a
681 // loop to iterate over all of rows in a parent sequence, this does not. This
682 // method assumes that the serialize_leaf() will call it each time it needs
683 // to be called.
684 //
685 // NB: This code only works if the child sequences appear after all other
686 // variables.
687 void Sequence::serialize_parent_part_two(DDS &dds, ConstraintEvaluator &eval, Marshaller &m)
688 {
689  DBG(cerr << "Entering serialize_parent_part_two for " << name() << endl);
690 
691  BaseType *btp = get_parent();
692  if (btp && btp->type() == dods_sequence_c) static_cast<Sequence&>(*btp).serialize_parent_part_two(dds, eval, m);
693 
694  if (d_unsent_data) {
695  DBG(cerr << "Writing Start of Instance marker" << endl);
696  d_wrote_soi = true;
697  write_start_of_instance(m);
698 
699  // In this loop serialize will signal an error with an exception.
700  for (Vars_iter iter = d_vars.begin(); iter != d_vars.end(); iter++) {
701  // Send all the non-sequence variables
702  DBG(cerr << "Sequence::serialize_parent_part_two(), serializing "
703  << (*iter)->name() << endl);
704  if ((*iter)->send_p() && (*iter)->type() != dods_sequence_c) {
705  DBG(cerr << "Send P is true, sending " << (*iter)->name() << endl);
706  (*iter)->serialize(eval, dds, m, false);
707  }
708  }
709 
710  d_unsent_data = false; // read should set this.
711  }
712 }
713 
714 // This code is only run by a leaf sequence. Note that a one level sequence
715 // is also a leaf sequence.
716 bool Sequence::serialize_leaf(DDS &dds, ConstraintEvaluator &eval, Marshaller &m, bool ce_eval)
717 {
718  DBG(cerr << "Entering Sequence::serialize_leaf for " << name() << endl);
719  int i = (d_starting_row_number != -1) ? d_starting_row_number : 0;
720 
721  // read_row returns true if valid data was read, false if the EOF was
722  // found. 6/1/2001 jhrg
723  bool status = read_row(i, dds, eval, ce_eval);
724  DBG(cerr << "Sequence::serialize_leaf::read_row() status: " << status << endl);
725 
726  // Once the first valid (satisfies the CE) row of the leaf sequence has
727  // been read, we know we're going to send data. Send the current instance
728  // of the parent/ancestor sequences now, if there are any. We only need
729  // to do this once, hence it's not inside the while loop, but we only
730  // send the parent seq data _if_ there's data in the leaf to send, that's
731  // why we wait until after the first call to read_row() here in the leaf
732  // sequence.
733  //
734  // NB: It's important to only call serialize_parent_part_two() for a
735  // Sequence that really is the parent of a leaf sequence.
736  if (status && !is_end_of_rows(i)) {
737  BaseType *btp = get_parent();
738  if (btp && btp->type() == dods_sequence_c) static_cast<Sequence&>(*btp).serialize_parent_part_two(dds, eval, m);
739  }
740 
741  d_wrote_soi = false;
742  while (status && !is_end_of_rows(i)) {
743  i += d_row_stride;
744 
745  DBG(cerr << "Writing Start of Instance marker" << endl);
746  d_wrote_soi = true;
747  write_start_of_instance(m);
748 
749  // In this loop serialize will signal an error with an exception.
750  for (Vars_iter iter = d_vars.begin(); iter != d_vars.end(); iter++) {
751  DBG(cerr << "Sequence::serialize_leaf(), serializing "
752  << (*iter)->name() << endl);
753  if ((*iter)->send_p()) {
754  DBG(cerr << "Send P is true, sending " << (*iter)->name() << endl);
755  (*iter)->serialize(eval, dds, m, false);
756  }
757  }
758 
759  set_read_p(false); // ...so this will read the next instance
760 
761  status = read_row(i, dds, eval, ce_eval);
762  DBG(cerr << "Sequence::serialize_leaf::read_row() status: " << status << endl);
763  }
764 
765  // Only write the EOS marker if there's a matching Start Of Instance
766  // Marker in the stream.
767  if (d_wrote_soi || d_top_most) {
768  DBG(cerr << "Writing End of Sequence marker" << endl);
769  write_end_of_sequence(m);
770  }
771 
772  return true; // Signal errors with exceptions.
773 }
774 
798 {
799  DBG(cerr << "Sequence::intern_data - for " << name() << endl); DBG2(cerr << " intern_data, values: " << &d_values << endl);
800 
801  // Why use a stack instead of return values? We need the stack because
802  // Sequences nested three of more levels deep will loose the middle
803  // instances when the intern_data_parent_part_two() code is run.
804  sequence_values_stack_t sequence_values_stack;
805 
806  sequence_values_stack.push(&d_values);
807 
808  intern_data_private(eval, dds, sequence_values_stack);
809 }
810 
811 void Sequence::intern_data_private(ConstraintEvaluator &eval, DDS &dds, sequence_values_stack_t &sequence_values_stack)
812 {
813  DBG(cerr << "Entering intern_data_private for " << name() << endl);
814 
815  if (is_leaf_sequence())
816  intern_data_for_leaf(dds, eval, sequence_values_stack);
817  else
818  intern_data_parent_part_one(dds, eval, sequence_values_stack);
819 }
820 
821 void Sequence::intern_data_parent_part_one(DDS & dds, ConstraintEvaluator & eval,
822  sequence_values_stack_t & sequence_values_stack)
823 {
824  DBG(cerr << "Entering intern_data_parent_part_one for " << name() << endl);
825 
826  int i = (get_starting_row_number() != -1) ? get_starting_row_number() : 0;
827 
828  // read_row returns true if valid data was read, false if the EOF was
829  // found. 6/1/2001 jhrg
830  // Since this is a parent sequence, read the row ignoring the CE (all of
831  // the CE clauses will be evaluated by the leaf sequence).
832  bool status = read_row(i, dds, eval, false);
833 
834  // Grab the current size of the value stack. We do this because it is
835  // possible that no nested sequences for this row happened to be
836  // selected because of a constraint evaluation or the last row is not
837  // selected because of a constraint evaluation. In either case, no
838  // nested sequence d_values are pushed onto the stack, so there is
839  // nothing to pop at the end of this function. pcw 07/14/08
840  SequenceValues::size_type orig_stack_size = sequence_values_stack.size();
841 
842  while (status && (get_ending_row_number() == -1 || i <= get_ending_row_number())) {
843  i += get_row_stride();
844  for (Vars_iter iter = var_begin(); iter != var_end(); iter++) {
845  if ((*iter)->send_p()) {
846  switch ((*iter)->type()) {
847  case dods_sequence_c:
848  static_cast<Sequence&>(**iter).intern_data_private(eval, dds, sequence_values_stack);
849  break;
850 
851  default:
852  (*iter)->intern_data(eval, dds);
853  break;
854  }
855  }
856  }
857 
858  set_read_p(false); // ...so this will read the next instance
859 
860  status = read_row(i, dds, eval, false);
861  }
862 
863  // Reset current row number for next nested sequence element.
865 
866  // if the size of the stack is larger than the original size (retrieved
867  // above) then pop the top set of d_values from the stack. If it's the
868  // same, then no nested sequences, or possibly the last nested sequence,
869  // were pushed onto the stack, so there is nothing to pop.
870  if (sequence_values_stack.size() > orig_stack_size) {
871  DBG2(cerr << " popping d_values (" << sequence_values_stack.top()
872  << ") off stack; size: " << sequence_values_stack.size() << endl);
873  sequence_values_stack.pop();
874  }
875 
876  DBG(cerr << "Leaving intern_data_parent_part_one for " << name() << endl);
877 }
878 
879 void Sequence::intern_data_parent_part_two(DDS &dds, ConstraintEvaluator &eval,
880  sequence_values_stack_t &sequence_values_stack)
881 {
882  DBG(cerr << "Entering intern_data_parent_part_two for " << name() << endl);
883 
884  BaseType *btp = get_parent();
885  if (btp && btp->type() == dods_sequence_c) {
886  static_cast<Sequence&>(*btp).intern_data_parent_part_two(dds, eval, sequence_values_stack);
887  }
888 
889  DBG2(cerr << " stack size: " << sequence_values_stack.size() << endl);
890  SequenceValues *values = sequence_values_stack.top();
891  DBG2(cerr << " using values = " << (void *)values << endl);
892 
893  if (get_unsent_data()) {
894  BaseTypeRow *row_data = new BaseTypeRow;
895 
896  // In this loop transfer_data will signal an error with an exception.
897  for (Vars_iter iter = var_begin(); iter != var_end(); iter++) {
898 
899  if ((*iter)->send_p() && (*iter)->type() != dods_sequence_c) {
900  row_data->push_back((*iter)->ptr_duplicate());
901  }
902  else if ((*iter)->send_p()) { //Sequence; must be the last variable
903  Sequence *tmp = dynamic_cast<Sequence*>((*iter)->ptr_duplicate());
904  if (!tmp) {
905  delete row_data;
906  throw InternalErr(__FILE__, __LINE__, "Expected a Sequence.");
907  }
908  row_data->push_back(tmp);
909  DBG2(cerr << " pushing d_values of " << tmp->name()
910  << " (" << &(tmp->d_values)
911  << ") on stack; size: " << sequence_values_stack.size()
912  << endl);
913  // This pushes the d_values field of the newly created leaf
914  // Sequence onto the stack. The code then returns to intern
915  // _data_for_leaf() where this value will be used.
916  sequence_values_stack.push(&(tmp->d_values));
917  }
918  }
919 
920  DBG2(cerr << " pushing values for " << name()
921  << " to " << values << endl);
922  values->push_back(row_data);
923  set_unsent_data(false);
924  }
925 
926  DBG(cerr << "Leaving intern_data_parent_part_two for " << name() << endl);
927 }
928 
929 void Sequence::intern_data_for_leaf(DDS &dds, ConstraintEvaluator &eval, sequence_values_stack_t &sequence_values_stack)
930 {
931  DBG(cerr << "Entering intern_data_for_leaf for " << name() << endl);
932 
933  int i = (get_starting_row_number() != -1) ? get_starting_row_number() : 0;
934 
935  DBG2(cerr << " reading row " << i << endl);
936  bool status = read_row(i, dds, eval, true);
937  DBG2(cerr << " status: " << status << endl); DBG2(cerr << " ending row number: " << get_ending_row_number() << endl);
938 
939  if (status && (get_ending_row_number() == -1 || i <= get_ending_row_number())) {
940  BaseType *btp = get_parent();
941  if (btp && btp->type() == dods_sequence_c) {
942  // This call will read the values for the parent sequences and
943  // then allocate a new instance for the leaf and push that onto
944  // the stack.
945  static_cast<Sequence&>(*btp).intern_data_parent_part_two(dds, eval, sequence_values_stack);
946  }
947 
948  // intern_data_parent_part_two pushes the d_values field of the leaf
949  // onto the stack, so this operation grabs that value and then loads
950  // data into it.
951  SequenceValues *values = sequence_values_stack.top();
952  DBG2(cerr << " using values = " << values << endl);
953 
954  while (status && (get_ending_row_number() == -1 || i <= get_ending_row_number())) {
955  i += get_row_stride();
956 
957  // Copy data from the object's fields to this new BaeTypeRow instance
958  BaseTypeRow *row_data = new BaseTypeRow;
959  for (Vars_iter iter = var_begin(); iter != var_end(); iter++) {
960  if ((*iter)->send_p()) {
961  row_data->push_back((*iter)->ptr_duplicate());
962  }
963  }
964 
965  DBG2(cerr << " pushing values for " << name()
966  << " to " << values << endl);
967  // Save the row_data to values().
968  values->push_back(row_data);
969 
970  set_read_p(false); // ...so this will read the next instance
971  // Read the ith row into this object's fields
972  status = read_row(i, dds, eval, true);
973  }
974 
975  DBG2(cerr << " popping d_values (" << sequence_values_stack.top()
976  << ") off stack; size: " << sequence_values_stack.size() << endl);
977  sequence_values_stack.pop();
978  }
979 
980  DBG(cerr << "Leaving intern_data_for_leaf for " << name() << endl);
981 }
982 
1003 bool Sequence::deserialize(UnMarshaller &um, DDS *dds, bool reuse)
1004 {
1005 #if 0
1006  // Nathan's tip - this is something that should never happen
1007  DataDDS *dd = dynamic_cast<DataDDS *>(dds);
1008  if (!dd) throw InternalErr("Expected argument 'dds' to be a DataDDS!");
1009 
1010  DBG2(cerr << "Reading from server/protocol version: "
1011  << dd->get_protocol_major() << "." << dd->get_protocol_minor()
1012  << endl);
1013 
1014  // Check for old servers.
1015  if (dd->get_protocol_major() < 2) {
1016  throw Error(
1017  string("The protocl version (") + dd->get_protocol()
1018  + ") indicates that this\nis an old server which may not correctly transmit Sequence variables.\nContact the server administrator.");
1019  }
1020 #endif
1021  while (true) {
1022  // Grab the sequence stream's marker.
1023  unsigned char marker = read_marker(um);
1024  if (is_end_of_sequence(marker))
1025  break; // EXIT the while loop here!!!
1026  else if (is_start_of_instance(marker)) {
1027  d_row_number++;
1028  DBG2(cerr << "Reading row " << d_row_number << " of "
1029  << name() << endl);
1030  BaseTypeRow *bt_row_ptr = new BaseTypeRow;
1031  // Read the instance's values, building up the row
1032  for (Vars_iter iter = d_vars.begin(); iter != d_vars.end(); iter++) {
1033  BaseType *bt_ptr = (*iter)->ptr_duplicate();
1034  bt_ptr->deserialize(um, dds, reuse);
1035  DBG2(cerr << "Deserialized " << bt_ptr->name() << " ("
1036  << bt_ptr << ") = "); DBG2(bt_ptr->print_val(stderr, ""));
1037  bt_row_ptr->push_back(bt_ptr);
1038  }
1039  // Append this row to those accumulated.
1040  d_values.push_back(bt_row_ptr);
1041  }
1042  else
1043  throw Error("I could not read the expected Sequence data stream marker!");
1044  };
1045 
1046  return false;
1047 }
1048 
1049 // Return the current row number.
1050 
1063 {
1064  return d_starting_row_number;
1065 }
1066 
1078 {
1079  return d_row_stride;
1080 }
1081 
1094 {
1095  return d_ending_row_number;
1096 }
1097 
1106 void Sequence::set_row_number_constraint(int start, int stop, int stride)
1107 {
1108  if (stop < start) throw Error(malformed_expr, "Starting row number must precede the ending row number.");
1109 
1110  d_starting_row_number = start;
1111  d_row_stride = stride;
1112  d_ending_row_number = stop;
1113 }
1114 
1115 void Sequence::print_one_row(FILE *out, int row, string space, bool print_row_num)
1116 {
1117  ostringstream oss;
1118  print_one_row(oss, row, space, print_row_num);
1119  fwrite(oss.str().data(), sizeof(char), oss.str().length(), out);
1120 }
1121 
1122 void Sequence::print_one_row(ostream &out, int row, string space, bool print_row_num)
1123 {
1124  if (print_row_num) out << "\n" << space << row << ": ";
1125 
1126  out << "{ ";
1127 
1128  int elements = element_count();
1129  int j = 0;
1130  BaseType *bt_ptr = 0;
1131 
1132  // This version of print_one_row() works for both data read with
1133  // deserialize(), where each variable is assumed to have valid data, and
1134  // intern_data(), where some/many variables do not. Because of that, it's
1135  // not correct to assume that all of the elements will be printed, which
1136  // is what the old code did.
1137  // Print the first value
1138  while (j < elements && !bt_ptr) {
1139  bt_ptr = var_value(row, j++);
1140  if (bt_ptr) { // data
1141  if (bt_ptr->type() == dods_sequence_c)
1142  static_cast<Sequence*>(bt_ptr)->print_val_by_rows(out, space + " ", false, print_row_num);
1143  else
1144  bt_ptr->print_val(out, space, false);
1145  }
1146  }
1147 
1148  // Print the remaining values
1149  while (j < elements) {
1150  bt_ptr = var_value(row, j++);
1151  if (bt_ptr) { // data
1152  out << ", ";
1153  if (bt_ptr->type() == dods_sequence_c)
1154  static_cast<Sequence*>(bt_ptr)->print_val_by_rows(out, space + " ", false, print_row_num);
1155  else
1156  bt_ptr->print_val(out, space, false);
1157  }
1158  }
1159 
1160  out << " }";
1161 }
1162 
1163 void Sequence::print_val_by_rows(FILE *out, string space, bool print_decl_p, bool print_row_numbers)
1164 {
1165  ostringstream oss;
1166  print_val_by_rows(oss, space, print_decl_p, print_row_numbers);
1167  fwrite(oss.str().data(), sizeof(char), oss.str().length(), out);
1168 }
1169 
1170 void Sequence::print_val_by_rows(ostream &out, string space, bool print_decl_p, bool print_row_numbers)
1171 {
1172  if (print_decl_p) {
1173  print_decl(out, space, false);
1174  out << " = ";
1175  }
1176 
1177  out << "{ ";
1178 
1179  int rows = number_of_rows() - 1;
1180  int i;
1181  for (i = 0; i < rows; ++i) {
1182  print_one_row(out, i, space, print_row_numbers);
1183  out << ", ";
1184  }
1185  print_one_row(out, i, space, print_row_numbers);
1186 
1187  out << " }";
1188 
1189  if (print_decl_p) out << ";\n";
1190 }
1191 
1192 void Sequence::print_val(FILE *out, string space, bool print_decl_p)
1193 {
1194  print_val_by_rows(out, space, print_decl_p, false);
1195 }
1196 
1197 void Sequence::print_val(ostream &out, string space, bool print_decl_p)
1198 {
1199  print_val_by_rows(out, space, print_decl_p, false);
1200 }
1201 
1202 void Sequence::set_leaf_p(bool state)
1203 {
1204  d_leaf_sequence = state;
1205 }
1206 
1207 bool Sequence::is_leaf_sequence()
1208 {
1209  return d_leaf_sequence;
1210 }
1211 
1237 {
1238  bool has_child_sequence = false;
1239 
1240  if (lvl == 1) d_top_most = true;
1241 
1242  DBG2(cerr << "Processing sequence " << name() << endl);
1243 
1244  for (Vars_iter iter = d_vars.begin(); iter != d_vars.end(); iter++) {
1245  // About the test for send_p(): Only descend into a sequence if it has
1246  // fields that might be sent. Thus if, in a two-level sequence, nothing
1247  // in the lower level is to be sent, the upper level is marked as the
1248  // leaf sequence. This ensures that values _will_ be sent (see the comment
1249  // in serialize_leaf() and serialize_parent_part_one()).
1250  if ((*iter)->type() == dods_sequence_c && (*iter)->send_p()) {
1251  if (has_child_sequence)
1252  throw Error("This implementation does not support more than one nested sequence at a level. Contact the server administrator.");
1253 
1254  has_child_sequence = true;
1255  static_cast<Sequence&>(**iter).set_leaf_sequence(++lvl);
1256  }
1257  else if ((*iter)->type() == dods_structure_c) {
1258  static_cast<Structure&>(**iter).set_leaf_sequence(lvl);
1259  }
1260  }
1261 
1262  if (!has_child_sequence)
1263  set_leaf_p(true);
1264  else
1265  set_leaf_p(false);
1266 
1267  DBG2(cerr << "is_leaf_sequence(): " << is_leaf_sequence() << " (" << name() << ")" << endl);
1268 }
1269 
1278 void Sequence::dump(ostream &strm) const
1279 {
1280  strm << DapIndent::LMarg << "Sequence::dump - (" << (void *) this << ")" << endl;
1281  DapIndent::Indent();
1282  Constructor::dump(strm);
1283  strm << DapIndent::LMarg << "# rows deserialized: " << d_row_number << endl;
1284  strm << DapIndent::LMarg << "bracket notation information:" << endl;
1285  DapIndent::Indent();
1286  strm << DapIndent::LMarg << "starting row #: " << d_starting_row_number << endl;
1287  strm << DapIndent::LMarg << "row stride: " << d_row_stride << endl;
1288  strm << DapIndent::LMarg << "ending row #: " << d_ending_row_number << endl;
1289  DapIndent::UnIndent();
1290 
1291  strm << DapIndent::LMarg << "data been sent? " << d_unsent_data << endl;
1292  strm << DapIndent::LMarg << "start of instance? " << d_wrote_soi << endl;
1293  strm << DapIndent::LMarg << "is leaf sequence? " << d_leaf_sequence << endl;
1294  strm << DapIndent::LMarg << "top most in hierarchy? " << d_top_most << endl;
1295  DapIndent::UnIndent();
1296 }
1297 
1298 } // namespace libdap
1299 
virtual void clear_local_data()
Definition: Sequence.cc:247
-
virtual bool read_p()
Has this variable been read?
Definition: BaseType.cc:480
-
virtual string name() const
Returns the name of the class instance.
Definition: BaseType.cc:320
-
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
bool get_unsent_data() const
Get the unsent data property.
Definition: Sequence.h:271
-
void set_unsent_data(bool usd)
Set the unsent data property.
Definition: Sequence.h:277
-
virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)
Receive data from the net.
Definition: BaseType.cc:943
-
virtual bool read_row(int row, DDS &dds, ConstraintEvaluator &eval, bool ce_eval=true)
Definition: Sequence.cc:499
-
virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)
Deserialize (read from the network) the entire Sequence.
Definition: Sequence.cc:1003
-
virtual bool is_dap2_only_type()
Definition: Sequence.cc:272
-
virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
Definition: Sequence.cc:607
-
STL namespace.
-
virtual void add_var_nocopy(BaseType *bt, Part part=nil)
Definition: Constructor.cc:432
-
virtual BaseTypeRow * row_value(size_t row)
Get a whole row from the sequence.
Definition: Sequence.cc:325
-
vector< BaseTypeRow * > SequenceValues
Definition: D4Sequence.h:53
-
virtual void set_row_number_constraint(int start, int stop, int stride=1)
Definition: Sequence.cc:1106
-
Holds a structure (aggregate) type.
Definition: Structure.h:83
-
virtual string toString()
Definition: BaseType.cc:184
-
virtual int element_count(bool leaves=false)
Count the members of constructor types.
Definition: Constructor.cc:194
-
virtual void set_leaf_sequence(int level=1)
Traverse Structure, set Sequence leaf nodes.
Definition: Structure.cc:331
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
virtual bool is_linear()
Check to see whether this variable can be printed simply.
Definition: Sequence.cc:292
-
virtual void transform_to_dap4(D4Group *root, Constructor *dest)
DAP2 to DAP4 transform.
Definition: Constructor.cc:141
-
virtual void print_val(FILE *out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: BaseType.cc:1090
- -
Sequence(const string &n)
The Sequence constructor.
Definition: Sequence.cc:161
-
virtual Type type() const
Returns the type of the class instance.
Definition: BaseType.cc:365
-
virtual void set_length(int count)
Definition: D4Sequence.h:199
-
Holds a sequence.
Definition: D4Sequence.h:133
-
virtual bool read()
simple implementation of read that iterates through vars and calls read on them
Definition: Constructor.cc:476
-
virtual void set_leaf_sequence(int lvl=1)
Mark the Sequence which holds the leaf elements.
Definition: Sequence.cc:1236
-
Holds a sequence.
Definition: Sequence.h:162
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Constructor.cc:913
-
virtual string toString()
Definition: Sequence.cc:277
-
virtual BaseType * ptr_duplicate()=0
- -
int get_starting_row_number()
Get the starting row number.
Definition: Sequence.cc:1062
-
Evaluate a constraint expression.
-
virtual SequenceValues & value_ref()
Definition: Sequence.cc:352
-
virtual SequenceValues value()
Definition: Sequence.cc:344
-
void reset_row_number()
Rest the row number counter.
Definition: Sequence.cc:427
-
virtual int length() const
Definition: Sequence.cc:413
-
virtual BaseType * get_parent() const
Definition: BaseType.cc:751
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
-
virtual BaseType * var_value(size_t row, const string &name)
Get the BaseType pointer to the named variable of a given row.
Definition: Sequence.cc:363
-
virtual void print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
Print an ASCII representation of the variable structure.
Definition: Constructor.cc:626
-
Vars_iter var_begin()
Definition: Constructor.cc:356
-
Vars_iter var_end()
Definition: Constructor.cc:364
-
virtual void print_val(ostream &out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: Sequence.cc:1197
- -
bool eval_selection(DDS &dds, const std::string &dataset)
Evaluate a boolean-valued constraint expression. This is main method for the evaluator and is called ...
-
virtual void intern_data()
Read data into this variable.
Definition: Constructor.cc:556
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Sequence.cc:1278
-
virtual void transform_to_dap4(D4Group *root, Constructor *container)
Definition: Sequence.cc:212
-
A class for error processing.
Definition: Error.h:92
-
virtual int get_ending_row_number()
Get the ending row number.
Definition: Sequence.cc:1093
-
virtual BaseType * ptr_duplicate()
Definition: Sequence.cc:192
-
Holds a DAP2 DDS.
Definition: DataDDS.h:77
-
virtual int get_row_stride()
Get the row stride.
Definition: Sequence.cc:1077
-
virtual void set_value(SequenceValues &values)
Definition: Sequence.cc:337
-
virtual string dataset() const
Returns the name of the dataset used to create this instance.
Definition: BaseType.cc:358
-
virtual void set_read_p(bool state)
Sets the value of the read_p property.
Definition: Constructor.cc:218
-
vector< BaseType * > BaseTypeRow
Definition: D4Sequence.h:50
-
-
- - - - diff --git a/html/Sequence_8h_source.html b/html/Sequence_8h_source.html deleted file mode 100644 index 03f834313..000000000 --- a/html/Sequence_8h_source.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - -libdap: Sequence.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Sequence.h
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2002,2003 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 // (c) COPYRIGHT URI/MIT 1994-1999
26 // Please read the full copyright statement in the file COPYRIGHT_URI.
27 //
28 // Authors:
29 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
30 
31 // Interface for the class Sequence. A sequence contains a single set
32 // of variables, all at the same lexical level just like a structure
33 // (and like a structure, it may contain other ctor types...). Unlike
34 // a structure, a sequence defines a pattern that is repeated N times
35 // for a sequence of N elements. Thus, Sequence { String name; Int32
36 // age; } person; means a sequence of N persons where each contain a
37 // name and age. The sequence can be arbitrarily long (i.e., you don't
38 // know N by looking at the sequence declaration.
39 //
40 // jhrg 9/14/94
41 
42 #ifndef _sequence_h
43 #define _sequence_h 1
44 
45 #include <stack>
46 
47 #include "Constructor.h"
48 
49 #ifndef S_XDRUtils_h
50 #include "XDRUtils.h"
51 #endif
52 
53 namespace libdap {
54 
55 class BaseType;
56 class ConstraintEvaluator;
57 class D4Group;
58 
61 typedef vector<BaseType *> BaseTypeRow;
62 
64 typedef vector<BaseTypeRow *> SequenceValues;
65 
162 class Sequence: public Constructor
163 {
164 private:
165  // This holds the values read off the wire. Values are stored in
166  // instances of BaseTypeRow objects which hold instances of BaseType.
167  SequenceValues d_values;
168 
169  // The number of the row that has just been deserialized. Before
170  // deserialized has been called, this field is -1.
171  int d_row_number;
172 
173  // If a client asks for certain rows of a sequence using the bracket
174  // notation (<tt>[<start>:<stride>:<stop>]</tt>) primarily intended for
175  // arrays
176  // and grids, record that information in the next three fields. This
177  // information can be used by the translation software. s.a. the accessor
178  // and mutator methods for these members. Values of -1 indicate that
179  // these have not yet been set.
180  int d_starting_row_number;
181  int d_row_stride;
182  int d_ending_row_number;
183 
184  // Used to track if data has not already been sent.
185  bool d_unsent_data;
186 
187  // Track if the Start Of Instance marker has been written. Needed to
188  // properly send EOS for only the outer Sequence when a selection
189  // returns an empty Sequence.
190  bool d_wrote_soi;
191 
192  // This signals whether the sequence is a leaf or parent.
193  bool d_leaf_sequence;
194 
195  // In a hierarchy of sequences, is this the top most?
196  bool d_top_most;
197 
198  bool is_end_of_rows(int i);
199 
200  friend class SequenceTest;
201 
202 protected:
203  void m_duplicate(const Sequence &s);
204  typedef stack<SequenceValues*> sequence_values_stack_t;
205 
206  virtual bool serialize_parent_part_one(DDS &dds, ConstraintEvaluator &eval, Marshaller &m);
207  virtual void serialize_parent_part_two(DDS &dds, ConstraintEvaluator &eval, Marshaller &m);
208  virtual bool serialize_leaf(DDS &dds, ConstraintEvaluator &eval, Marshaller &m, bool ce_eval);
209 
210  virtual void intern_data_private(ConstraintEvaluator &eval, DDS &dds,
211  sequence_values_stack_t &sequence_values_stack);
212  virtual void intern_data_for_leaf(DDS &dds, ConstraintEvaluator &eval,
213  sequence_values_stack_t &sequence_values_stack);
214 
215  virtual void intern_data_parent_part_one(DDS &dds, ConstraintEvaluator &eval,
216  sequence_values_stack_t &sequence_values_stack);
217 
218  virtual void intern_data_parent_part_two(DDS &dds, ConstraintEvaluator &eval,
219  sequence_values_stack_t &sequence_values_stack);
220 
221 public:
222 
223  Sequence(const string &n);
224  Sequence(const string &n, const string &d);
225 
226  Sequence(const Sequence &rhs);
227 
228  virtual ~Sequence();
229 
230  Sequence &operator=(const Sequence &rhs);
231 
232  virtual BaseType *ptr_duplicate();
233 
234  virtual void clear_local_data();
235 
236  virtual void transform_to_dap4(D4Group *root, Constructor *container);
237 
238  virtual bool is_dap2_only_type();
239 
240  virtual string toString();
241 
242  virtual bool is_linear();
243 
244  virtual int length() const;
245 
246  virtual int number_of_rows() const;
247 
248  virtual bool read_row(int row, DDS &dds, ConstraintEvaluator &eval, bool ce_eval = true);
249 
250  virtual void intern_data(ConstraintEvaluator &eval, DDS &dds);
251  virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval = true);
252  virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse = false);
253 
255  void reset_row_number();
256  // I added a second method instead of a param with a default value because I think
257  // this will result only in an addition to the ABI/API, not a change. 5/16/15 jhrg
258  void reset_row_number(bool recur);
259  void increment_row_number(unsigned int i) { d_row_number += i; }
260  int get_row_number() const { return d_row_number; }
261 
263 
264  virtual int get_row_stride();
265 
266  virtual int get_ending_row_number();
267 
268  virtual void set_row_number_constraint(int start, int stop, int stride = 1);
269 
271  bool get_unsent_data() const
272  {
273  return d_unsent_data;
274  }
275 
277  void set_unsent_data(bool usd)
278  {
279  d_unsent_data = usd;
280  }
281 
282  virtual void set_value(SequenceValues &values);
283  virtual SequenceValues value();
284  virtual SequenceValues &value_ref();
285 
286  virtual BaseType *var_value(size_t row, const string &name);
287 
288  virtual BaseType *var_value(size_t row, size_t i);
289 
290  virtual BaseTypeRow *row_value(size_t row);
291  virtual void print_one_row(ostream &out, int row, string space, bool print_row_num = false);
292  virtual void print_val_by_rows(ostream &out, string space = "", bool print_decl_p = true, bool print_row_numbers =
293  true);
294  virtual void print_val(ostream &out, string space = "", bool print_decl_p = true);
295 
296  virtual void print_one_row(FILE *out, int row, string space, bool print_row_num = false);
297  virtual void print_val_by_rows(FILE *out, string space = "", bool print_decl_p = true,
298  bool print_row_numbers = true);
299  virtual void print_val(FILE *out, string space = "", bool print_decl_p = true);
300 
301  virtual void set_leaf_p(bool state);
302 
303  virtual bool is_leaf_sequence();
304 
305  virtual void set_leaf_sequence(int lvl = 1);
306 
307  virtual void dump(ostream &strm) const;
308 };
309 
310 } // namespace libdap
311 
312 #endif //_sequence_h
virtual void clear_local_data()
Definition: Sequence.cc:247
-
virtual string name() const
Returns the name of the class instance.
Definition: BaseType.cc:320
-
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
bool get_unsent_data() const
Get the unsent data property.
Definition: Sequence.h:271
-
void set_unsent_data(bool usd)
Set the unsent data property.
Definition: Sequence.h:277
-
virtual bool read_row(int row, DDS &dds, ConstraintEvaluator &eval, bool ce_eval=true)
Definition: Sequence.cc:499
-
virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)
Deserialize (read from the network) the entire Sequence.
Definition: Sequence.cc:1003
-
virtual bool is_dap2_only_type()
Definition: Sequence.cc:272
-
virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
Definition: Sequence.cc:607
-
virtual BaseTypeRow * row_value(size_t row)
Get a whole row from the sequence.
Definition: Sequence.cc:325
-
vector< BaseTypeRow * > SequenceValues
Definition: D4Sequence.h:53
-
virtual void set_row_number_constraint(int start, int stop, int stride=1)
Definition: Sequence.cc:1106
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual bool is_linear()
Check to see whether this variable can be printed simply.
Definition: Sequence.cc:292
- -
Sequence(const string &n)
The Sequence constructor.
Definition: Sequence.cc:161
-
virtual void set_leaf_sequence(int lvl=1)
Mark the Sequence which holds the leaf elements.
Definition: Sequence.cc:1236
-
Holds a sequence.
Definition: Sequence.h:162
-
virtual string toString()
Definition: Sequence.cc:277
- -
int get_starting_row_number()
Get the starting row number.
Definition: Sequence.cc:1062
-
Evaluate a constraint expression.
-
virtual SequenceValues & value_ref()
Definition: Sequence.cc:352
-
virtual SequenceValues value()
Definition: Sequence.cc:344
-
void reset_row_number()
Rest the row number counter.
Definition: Sequence.cc:427
-
virtual int length() const
Definition: Sequence.cc:413
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
-
virtual BaseType * var_value(size_t row, const string &name)
Get the BaseType pointer to the named variable of a given row.
Definition: Sequence.cc:363
-
virtual void print_val(ostream &out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: Sequence.cc:1197
- -
virtual void intern_data()
Read data into this variable.
Definition: Constructor.cc:556
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Sequence.cc:1278
-
virtual void transform_to_dap4(D4Group *root, Constructor *container)
Definition: Sequence.cc:212
-
virtual int get_ending_row_number()
Get the ending row number.
Definition: Sequence.cc:1093
-
virtual BaseType * ptr_duplicate()
Definition: Sequence.cc:192
-
virtual int get_row_stride()
Get the row stride.
Definition: Sequence.cc:1077
-
virtual void set_value(SequenceValues &values)
Definition: Sequence.cc:337
-
vector< BaseType * > BaseTypeRow
Definition: D4Sequence.h:50
-
-
- - - - diff --git a/html/ServerFunction_8cc_source.html b/html/ServerFunction_8cc_source.html deleted file mode 100644 index 229ca2d9c..000000000 --- a/html/ServerFunction_8cc_source.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -libdap: ServerFunction.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
ServerFunction.cc
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2013 OPeNDAP, Inc.
7 // Author: Nathan Potter <npotter@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 /*
26  * AbstractFunction.cc
27  *
28  * Created on: Feb 2, 2013
29  * Author: ndp
30  */
31 
32 #include "config.h"
33 
34 #include "ServerFunction.h"
35 
36 using namespace std;
37 
38 namespace libdap {
39 
40 ServerFunction::ServerFunction() : d_bool_func(0), d_btp_func(0), d_proj_func(0), d_d4_function(0)
41 {
42  setName("abstract_function");
43  setDescriptionString("This function does nothing.");
44  setUsageString("You can't use this function");
45  setRole("http://services.opendap.org/dap4/server-side-function/null");
46  setDocUrl("http://docs.opendap.org/index.php/Server_Side_Processing_Functions");
47 }
48 
49 ServerFunction::ServerFunction(string name, string version, string description, string usage, string doc_url,
50  string role, bool_func f) : d_bool_func(0), d_btp_func(0), d_proj_func(0), d_d4_function(0)
51 {
52  setName(name);
53  setVersion(version);
54  setDescriptionString(description);
55  setUsageString(usage);
56  setRole(role);
57  setDocUrl(doc_url);
58  setFunction(f);
59 }
60 
61 ServerFunction::ServerFunction(string name, string version, string description, string usage, string doc_url,
62  string role, btp_func f) : d_bool_func(0), d_btp_func(0), d_proj_func(0), d_d4_function(0)
63 {
64  setName(name);
65  setVersion(version);
66  setDescriptionString(description);
67  setUsageString(usage);
68  setRole(role);
69  setDocUrl(doc_url);
70  setFunction(f);
71 
72 }
73 
74 ServerFunction::ServerFunction(string name, string version, string description, string usage, string doc_url,
75  string role, proj_func f) : d_bool_func(0), d_btp_func(0), d_proj_func(0), d_d4_function(0)
76 {
77  setName(name);
78  setVersion(version);
79  setDescriptionString(description);
80  setUsageString(usage);
81  setRole(role);
82  setDocUrl(doc_url);
83  setFunction(f);
84 }
85 
86 ServerFunction::ServerFunction(string name, string version, string description, string usage, string doc_url,
87  string role, D4Function f) : d_bool_func(0), d_btp_func(0), d_proj_func(0), d_d4_function(0)
88 {
89  setName(name);
90  setVersion(version);
91  setDescriptionString(description);
92  setUsageString(usage);
93  setRole(role);
94  setDocUrl(doc_url);
95  setFunction(f);
96 }
97 
98 } /* namespace libdap */
virtual string name() const
Returns the name of the class instance.
Definition: BaseType.cc:320
-
STL namespace.
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
-
- - - - diff --git a/html/ServerFunction_8h_source.html b/html/ServerFunction_8h_source.html deleted file mode 100644 index a64b83fad..000000000 --- a/html/ServerFunction_8h_source.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -libdap: ServerFunction.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
ServerFunction.h
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2013 OPeNDAP, Inc.
7 // Author: Nathan Potter <npotter@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 /*
26  * ServerFunction.h
27  *
28  * Created on: Feb 2, 2013
29  * Author: ndp
30  */
31 
32 #ifndef SERVER_FUNCTION_H_
33 #define SERVER_FUNCTION_H_
34 
35 #include <iostream>
36 
37 #include <expr.h>
38 #include <D4Function.h>
39 
40 namespace libdap {
41 
43 
44 private:
45  std::string name;
46  std::string description;
47  std::string usage;
48  std::string doc_url;
49  std::string role;
50  std::string version;
51 
52  // These are typedefs from DAP2 that are used with its CE parser
53  // and are found in expr.h. jhrg 3/10/14
54  bool_func d_bool_func;
55  btp_func d_btp_func;
56  proj_func d_proj_func;
57 
58  D4Function d_d4_function;
59 
60 public:
62  ServerFunction(std::string name, std::string version, std::string description, std::string usage,
63  std::string doc_url, std::string role, bool_func f);
64  ServerFunction(std::string name, std::string version, std::string description, std::string usage,
65  std::string doc_url, std::string role, btp_func f);
66  ServerFunction(std::string name, std::string version, std::string description, std::string usage,
67  std::string doc_url, std::string role, proj_func f);
68  ServerFunction(std::string name, std::string version, std::string description, std::string usage,
69  std::string doc_url, std::string role, D4Function f);
70 
71  virtual ~ServerFunction() { }
72 
73  std::string getName() { return name; }
74  void setName(const std::string &n){ name = n; }
75 
76  std::string getUsageString() { return usage; }
77  void setUsageString(const std::string &u){ usage = u; }
78 
79  std::string getDocUrl() { return doc_url; }
80  void setDocUrl(const std::string &url){ doc_url = url; }
81 
82  std::string getRole() { return role; }
83  void setRole(const std::string &r){ role = r; }
84 
85  std::string getDescriptionString(){ return description; }
86  void setDescriptionString(const std::string &desc){ description = desc; }
87 
88  std::string getVersion(){ return version; }
89  void setVersion(const std::string &ver){ version = ver; }
90 
103  virtual bool canOperateOn(DDS &) { return true; }
104 
110  virtual bool canOperateOn(DMR &) { return true; }
111 
120  void setFunction(bool_func bf) {
121  d_bool_func = bf;
122  }
123 
124  void setFunction(btp_func btp) {
125  d_btp_func = btp;
126  }
127 
128  void setFunction(proj_func pf) {
129  d_proj_func = pf;
130  }
131 
132  void setFunction(D4Function pf) {
133  d_d4_function = pf;
134  }
135 
136  std::string getTypeString() {
137  if (d_bool_func) return "boolean";
138  if (d_btp_func) return "basetype";
139  if (d_proj_func) return "projection";
140  if (d_d4_function) return "D4Function";
141  return "null";
142  }
143 
144  bool_func get_bool_func(){ return d_bool_func; }
145  btp_func get_btp_func() { return d_btp_func; }
146  proj_func get_proj_func(){ return d_proj_func; }
147  D4Function get_d4_function() { return d_d4_function; }
148 };
149 
150 } /* namespace libdap */
151 #endif /* SERVER_FUNCTION_H_ */
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- - -
virtual bool canOperateOn(DMR &)
-
virtual bool canOperateOn(DDS &)
-
void setFunction(bool_func bf)
-
-
- - - - diff --git a/html/ServerFunctionsList_8cc_source.html b/html/ServerFunctionsList_8cc_source.html deleted file mode 100644 index dacae8eef..000000000 --- a/html/ServerFunctionsList_8cc_source.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -libdap: ServerFunctionsList.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
ServerFunctionsList.cc
-
-
-
1 // ServerFunctionsList.cc
2 
3 // This file is part of bes, A C++ back-end server implementation framework
4 // for the OPeNDAP Data Access Protocol.
5 
6 // Copyright (c) 2013 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 #include "config.h"
26 
27 #ifdef HAVE_STDLIB_H
28 #include <stdlib.h>
29 #endif
30 
31 #include <pthread.h>
32 
33 #include <iostream>
34 #include <algorithm>
35 
36 //#define DODS_DEBUG
37 
38 #include <expr.h>
39 #include "debug.h"
40 
41 #include "ServerFunctionsList.h"
42 
43 using namespace std;
44 using namespace libdap;
45 
46 namespace libdap {
47 
48 static pthread_once_t ServerFunctionsList_instance_control = PTHREAD_ONCE_INIT;
49 
50 ServerFunctionsList *ServerFunctionsList::d_instance = 0 ;
51 
55 void ServerFunctionsList::initialize_instance() {
56  if (d_instance == 0) {
57  DBG(cerr << "ServerFunctionsList::initialize_instance() - Creating singleton ServerFunctionList instance." << endl);
58  d_instance = new ServerFunctionsList;
59  #if HAVE_ATEXIT
60  atexit(delete_instance);
61  #endif
62  }
63 }
64 
68 void ServerFunctionsList::delete_instance() {
69  DBG(cerr << "ServerFunctionsList::delete_instance() - Deleting singleton ServerFunctionList instance." << endl);
70  delete d_instance;
71  d_instance = 0;
72 }
73 
78 ServerFunctionsList::~ServerFunctionsList() {
79  SFLIter fit;
80  for(fit=d_func_list.begin(); fit!=d_func_list.end() ; fit++){
81  ServerFunction *func = fit->second;
82  DBG(cerr << "ServerFunctionsList::~ServerFunctionsList() - Deleting ServerFunction " << func->getName() << " from ServerFunctionsList." << endl);
83  delete func;
84  }
85  d_func_list.clear();
86 }
87 
88 ServerFunctionsList * ServerFunctionsList::TheList() {
89  pthread_once(&ServerFunctionsList_instance_control, initialize_instance);
90  DBG(cerr << "ServerFunctionsList::TheList() - Returning singleton ServerFunctionList instance." << endl);
91  return d_instance;
92 }
93 
103 void ServerFunctionsList::add_function(ServerFunction *func )
104 {
105  DBG(cerr << "ServerFunctionsList::add_function() - Adding ServerFunction " << func->getName() << endl);
106  d_func_list.insert(std::make_pair(func->getName(),func));
107 }
108 
129 bool ServerFunctionsList::find_function(const std::string &name, bool_func *f) const
130 {
131  if (d_func_list.empty())
132  return false;
133 
134  std::pair <SFLCIter, SFLCIter> ret;
135  ret = d_func_list.equal_range(name);
136  for (SFLCIter it = ret.first; it != ret.second; ++it) {
137  if (name == it->first && (*f = it->second->get_bool_func())){
138  DBG(cerr << "ServerFunctionsList::find_function() - Found boolean function " << it->second->getName() << endl);
139  return true;
140  }
141  }
142 
143  return false;
144 }
145 
166 bool ServerFunctionsList::find_function(const string &name, btp_func *f) const
167 {
168  if (d_func_list.empty())
169  return false;
170  DBG(cerr << "ServerFunctionsList::find_function() - Looking for ServerFunction '" << name << "'" << endl);
171 
172  std::pair <SFLCIter, SFLCIter> ret;
173  ret = d_func_list.equal_range(name);
174  for (SFLCIter it = ret.first; it != ret.second; ++it) {
175  if (name == it->first && (*f = it->second->get_btp_func())){
176  DBG(cerr << "ServerFunctionsList::find_function() - Found basetype function " << it->second->getName() << endl);
177  return true;
178  }
179  }
180 
181  return false;
182 }
183 
204 bool ServerFunctionsList::find_function(const string &name, proj_func *f) const
205 {
206  if (d_func_list.empty())
207  return false;
208 
209  std::pair <SFLCIter, SFLCIter> ret;
210  ret = d_func_list.equal_range(name);
211  for (SFLCIter it = ret.first; it != ret.second; ++it) {
212  if (name == it->first && (*f = it->second->get_proj_func())){
213  DBG(cerr << "ServerFunctionsList::find_function() - Found projection function " << it->second->getName() << endl);
214  return true;
215  }
216  }
217 
218  return false;
219 }
220 
228 bool ServerFunctionsList::find_function(const string &name, D4Function *f) const
229 {
230  if (d_func_list.empty())
231  return false;
232 
233  std::pair <SFLCIter, SFLCIter> ret;
234  ret = d_func_list.equal_range(name);
235  for (SFLCIter it = ret.first; it != ret.second; ++it) {
236  if (name == it->first && (*f = it->second->get_d4_function())) {
237  return true;
238  }
239  }
240 
241  return false;
242 }
243 
245 ServerFunctionsList::SFLIter ServerFunctionsList::begin()
246 {
247  return d_func_list.begin();
248 }
249 
251 ServerFunctionsList::SFLIter ServerFunctionsList::end()
252 {
253  return d_func_list.end();
254 }
255 
262 ServerFunction *ServerFunctionsList::getFunction(SFLIter it)
263 {
264  return (*it).second;
265 }
266 
267 void ServerFunctionsList::getFunctionNames(vector<string> *names){
268  SFLIter fit;
269  for(fit = d_func_list.begin(); fit != d_func_list.end(); fit++) {
270  ServerFunction *func = fit->second;
271  names->push_back(func->getName());
272  }
273 }
274 
275 } // namespace libdap
-
STL namespace.
- -
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
-
- - - - diff --git a/html/ServerFunctionsList_8h_source.html b/html/ServerFunctionsList_8h_source.html deleted file mode 100644 index 70a98e7cb..000000000 --- a/html/ServerFunctionsList_8h_source.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -libdap: ServerFunctionsList.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
ServerFunctionsList.h
-
-
-
1 // ServerFunctionsList.h
2 
3 // This file is part of bes, A C++ back-end server implementation framework
4 // for the OPeNDAP Data Access Protocol.
5 
6 // -*- mode: c++; c-basic-offset:4 -*-
7 
8 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
9 // Access Protocol.
10 
11 // Copyright (c) 2013 OPeNDAP, Inc.
12 // Author: Nathan Potter <npotter@opendap.org>
13 //
14 // This library is free software; you can redistribute it and/or
15 // modify it under the terms of the GNU Lesser General Public
16 // License as published by the Free Software Foundation; either
17 // version 2.1 of the License, or (at your option) any later version.
18 //
19 // This library is distributed in the hope that it will be useful,
20 // but WITHOUT ANY WARRANTY; without even the implied warranty of
21 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22 // Lesser General Public License for more details.
23 //
24 // You should have received a copy of the GNU Lesser General Public
25 // License along with this library; if not, write to the Free Software
26 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
27 //
28 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
29 
30 #ifndef I_ServerFunctionsList_h
31 #define I_ServerFunctionsList_h 1
32 
33 #include <map>
34 #include <string>
35 
36 #include <expr.h>
37 #include <D4Function.h>
38 
39 #include <ServerFunction.h>
40 
41 namespace libdap {
42 
43 class ServerFunctionsListUnitTest;
44 class ConstraintEvaluator;
45 
47 private:
48  static ServerFunctionsList * d_instance;
49  std::multimap<std::string, ServerFunction *> d_func_list;
50 
51  static void initialize_instance();
52  static void delete_instance();
53 
54  virtual ~ServerFunctionsList();
55 
56  friend class ServerFunctionsListUnitTest;
57 
58 protected:
60 
61 public:
62  // Added typedefs to reduce clutter jhrg 3/12/14
63  typedef std::multimap<std::string, ServerFunction *>::iterator SFLIter;
64  typedef std::multimap<std::string, ServerFunction *>::const_iterator SFLCIter;
65 
66  static ServerFunctionsList * TheList();
67 
68  virtual void add_function(ServerFunction *func);
69 
70  virtual bool find_function(const std::string &name, bool_func *f) const;
71  virtual bool find_function(const std::string &name, btp_func *f) const;
72  virtual bool find_function(const std::string &name, proj_func *f) const;
73  virtual bool find_function(const std::string &name, D4Function *f) const;
74 
75  SFLIter begin();
76  SFLIter end();
77  ServerFunction *getFunction(SFLIter it);
78 
79  virtual void getFunctionNames(std::vector<std::string> *names);
80 };
81 
82 }
83 
84 #endif // I_ServerFunctionsList_h
SFLIter begin()
Returns an iterator pointing to the first key pair in the ServerFunctionList.
- -
virtual bool find_function(const std::string &name, bool_func *f) const
Find a boolean function with a given name in the function list.
-
virtual void add_function(ServerFunction *func)
Adds the passed ServerFunction pointer to the list of ServerFunctions.
- -
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
ServerFunction * getFunction(SFLIter it)
Returns the ServerFunction pointed to by the passed iterator.
-
SFLIter end()
Returns an iterator pointing to the last key pair in the ServerFunctionList.
-
-
- - - - diff --git a/html/SignalHandlerRegisteredErr_8h_source.html b/html/SignalHandlerRegisteredErr_8h_source.html deleted file mode 100644 index 56af7188d..000000000 --- a/html/SignalHandlerRegisteredErr_8h_source.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -libdap: SignalHandlerRegisteredErr.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
SignalHandlerRegisteredErr.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2004 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef _signal_handler_registered_err_h
27 #define _signal_handler_registered_err_h 1
28 
29 #include <string>
30 
31 #ifndef _error_h
32 #include "Error.h"
33 #endif
34 
35 namespace libdap
36 {
37 
44 {
45 
46 public:
47  SignalHandlerRegisteredErr(const string &msg) : Error()
48  {
49  _error_code = unknown_error;
50  _error_message = "";
51  _error_message += "A caching error was encountered:\n";
52  _error_message += msg + "\n";
53  }
54 
56  {
57  _error_code = unknown_error;
58  }
59 };
60 
61 } // namespace libdap
62 
63 #endif // _signal_handler_registered_err_h
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- -
A class for error processing.
Definition: Error.h:92
-
-
- - - - diff --git a/html/SignalHandler_8cc_source.html b/html/SignalHandler_8cc_source.html deleted file mode 100644 index 323631047..000000000 --- a/html/SignalHandler_8cc_source.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -libdap: SignalHandler.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
SignalHandler.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1994-2002
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 #include "config.h"
33 
34 #include <cstdlib>
35 
36 #include <signal.h>
37 #include <pthread.h>
38 
39 #ifdef HAVE_UNISTD_H
40 #include <unistd.h> //for _exit
41 #endif
42 
43 #include "SignalHandler.h"
44 #include "util.h"
45 
46 namespace libdap {
47 
48 EventHandler *SignalHandler::d_signal_handlers[NSIG];
49 Sigfunc *SignalHandler::d_old_handlers[NSIG];
50 SignalHandler *SignalHandler::d_instance = 0;
51 
52 // instance_control is used to ensure that in a MT environment d_instance is
53 // correctly initialized.
54 static pthread_once_t instance_control = PTHREAD_ONCE_INIT;
55 
57 void
58 SignalHandler::initialize_instance()
59 {
60  // MT-Safe if called via pthread_once or similar
61  SignalHandler::d_instance = new SignalHandler;
62  atexit(SignalHandler::delete_instance);
63 }
64 
66 void
67 SignalHandler::delete_instance()
68 {
69  if (SignalHandler::d_instance) {
70  for (int i = 0; i < NSIG; ++i) {
71  // Fortify warns about a leak because the EventHandler objects
72  // are not deleted, but that's OK - this is a singleton and
73  // so the 'leak' is really just a constant amount of memory that
74  // gets used.
75  d_signal_handlers[i] = 0;
76  d_old_handlers[i] = 0;
77  }
78 
79  delete SignalHandler::d_instance;
80  SignalHandler::d_instance = 0;
81  }
82 }
83 
90 void
91 SignalHandler::dispatcher(int signum)
92 {
93  // Perform a sanity check...
94  if (SignalHandler::d_signal_handlers[signum] != 0)
95  // Dispatch the handler's hook method.
96  SignalHandler::d_signal_handlers[signum]->handle_signal(signum);
97 
98  Sigfunc *old_handler = SignalHandler::d_old_handlers[signum];
99  if (old_handler == SIG_IGN || old_handler == SIG_ERR)
100  return;
101  else if (old_handler == SIG_DFL) {
102  switch (signum) {
103 #if 0
104 #ifndef WIN32
105  case SIGHUP:
106  case SIGKILL:
107  case SIGUSR1:
108  case SIGUSR2:
109  case SIGPIPE:
110  case SIGALRM:
111 #endif
112  case SIGINT:
113  case SIGTERM: _exit(EXIT_FAILURE);
114 
115  // register_handler() should never allow any fiddling with
116  // signals other than those listed above.
117  default: abort();
118 #endif
119  // Calling _exit() or abort() is not a good thing for a library to be
120  // doing. This results in a warning from rpmlint
121  default:
122  throw Error(internal_error, "Signal handler operation on an unsupported signal.");
123  }
124  }
125  else
126  old_handler(signum);
127 }
128 
130 SignalHandler*
132 {
133  pthread_once(&instance_control, initialize_instance);
134 
135  return d_instance;
136 }
137 
150 EventHandler *
151 SignalHandler::register_handler(int signum, EventHandler *eh, bool override)
152 {
153  // Check first for improper use.
154  switch (signum) {
155 #ifndef WIN32
156  case SIGHUP:
157  case SIGKILL:
158  case SIGUSR1:
159  case SIGUSR2:
160  case SIGPIPE:
161  case SIGALRM:
162 #endif
163  case SIGINT:
164  case SIGTERM: break;
165 
166  default: throw InternalErr(__FILE__, __LINE__,
167  string("Call to register_handler with unsupported signal (")
168  + long_to_string(signum) + string(")."));
169  }
170 
171  // Save the old EventHandler
172  EventHandler *old_eh = SignalHandler::d_signal_handlers[signum];
173 
174  SignalHandler::d_signal_handlers[signum] = eh;
175 
176  // Register the dispatcher to handle this signal. See Stevens, Advanced
177  // Programming in the UNIX Environment, p.298.
178 #ifndef WIN32
179  struct sigaction sa;
180  sa.sa_handler = dispatcher;
181  sigemptyset(&sa.sa_mask);
182  sa.sa_flags = 0;
183 
184  // Try to suppress restarting system calls if we're handling an alarm.
185  // This lets alarms block I/O calls that would normally restart. 07/18/03
186  // jhrg
187  if (signum == SIGALRM) {
188 #ifdef SA_INTERUPT
189  sa.sa_flags |= SA_INTERUPT;
190 #endif
191  }
192  else {
193 #ifdef SA_RESTART
194  sa.sa_flags |= SA_RESTART;
195 #endif
196  }
197 
198  struct sigaction osa; // extract the old handler/action
199 
200  if (sigaction(signum, &sa, &osa) < 0)
201  throw InternalErr(__FILE__, __LINE__, "Could not register a signal handler.");
202 
203  // Take care of the case where this interface is used to register a
204  // handler more than once. We want to make sure that the dispatcher is
205  // not installed as the 'old handler' because that results in an infinite
206  // loop. 02/10/04 jhrg
207  if (override)
208  SignalHandler::d_old_handlers[signum] = SIG_IGN;
209  else if (osa.sa_handler != dispatcher)
210  SignalHandler::d_old_handlers[signum] = osa.sa_handler;
211 #endif
212 
213  return old_eh;
214 }
215 
219 EventHandler *
221 {
222  EventHandler *old_eh = SignalHandler::d_signal_handlers[signum];
223 
224  SignalHandler::d_signal_handlers[signum] = 0;
225 
226  return old_eh;
227 }
228 
229 } // namespace libdap
-
static SignalHandler * instance()
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
EventHandler * register_handler(int signum, EventHandler *eh, bool override=false)
-
EventHandler * remove_handler(int signum)
-
-
- - - - diff --git a/html/SignalHandler_8h_source.html b/html/SignalHandler_8h_source.html deleted file mode 100644 index 14a5db95d..000000000 --- a/html/SignalHandler_8h_source.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -libdap: SignalHandler.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
SignalHandler.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef signal_handler_h
27 #define signal_handler_h
28 
29 #include <signal.h>
30 
31 #include "EventHandler.h"
32 #include "InternalErr.h"
33 
34 namespace libdap
35 {
36 
37 typedef void Sigfunc(int); // Plauger, 1992
38 
67 {
68 private:
69  // Ensure we're a Singleton.
70  SignalHandler() {}
71  SignalHandler(const SignalHandler &) {}
72 
73  // Singleton pointer.
74  static SignalHandler *d_instance;
75 
76  // Table of pointers to instances of EventHandlers. Since EventHandler is
77  // abstract, the pointers will actually reference instances that are
78  // children of EventHandler. NSIG is defined in signal.h but this may be
79  // a portability issue.
80  static EventHandler *d_signal_handlers[NSIG];
81 
82  // This array holds the old signal handlers. Once the handler in
83  // d_signal_handler[signum] is run, look here to see what the original
84  // action was. This is important since libdap++ is often embedded in code
85  // that already has a non-default signal handler for things like SIGINT.
86  static Sigfunc *d_old_handlers[NSIG];
87 
88  // Entry point adapter installed into sigaction(). This must be a static
89  // method (or a regular C-function) to conform to sigaction's interface.
90  // this is the part of SignalHandler that uses the Adapter pattern.
91  static void dispatcher(int signum);
92 
93  // Delete the global instance. Call this with atexit().
94  static void delete_instance();
95 
96  // Call this using pthread_once() to ensure there's only one instance
97  // when running in a MT world.
98  static void initialize_instance();
99 
100  friend class SignalHandlerTest;
101  friend class HTTPCacheTest;
102 
103 public:
104  static SignalHandler *instance();
105 
107  virtual ~SignalHandler() {}
108 
109  EventHandler *register_handler(int signum, EventHandler *eh,
110  bool override = false);
111 
112  EventHandler *remove_handler(int signum);
113 };
114 
115 } // namespace libdap
116 
117 #endif // signal_handler_h
- -
static SignalHandler * instance()
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
EventHandler * register_handler(int signum, EventHandler *eh, bool override=false)
-
EventHandler * remove_handler(int signum)
-
-
- - - - diff --git a/html/StdinResponse_8h_source.html b/html/StdinResponse_8h_source.html deleted file mode 100644 index cec8a595f..000000000 --- a/html/StdinResponse_8h_source.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -libdap: StdinResponse.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
StdinResponse.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef stdin_response_h
27 #define stdin_response_h
28 
29 #include <cstdio>
30 
31 #include "Response.h"
32 
33 namespace libdap
34 {
35 
44 class StdinResponse: public Response
45 {
46 private:
47  FILE *d_stdin;
48  std::istream *d_cin;
49 
50 protected:
51 
52 public:
62  StdinResponse(FILE *s) : Response(), d_stdin(s), d_cin(0) {}
63 
68  StdinResponse(std::istream &in) : Response(), d_stdin(0), d_cin(&in) {}
69 
71  virtual ~StdinResponse() {}
72 
73  virtual FILE *get_stream() const { return d_stdin; }
74  virtual void set_stream(FILE *s) { d_stdin = s; }
75 
76  virtual std::istream *get_cpp_stream() const { return d_cin; }
77  virtual void set_cpp_stream(std::istream *in) { d_cin = in; }
78 };
79 
80 } // namespace libdap
81 
82 #endif // pipe_response_h
StdinResponse(FILE *s)
Initialize with standard input.
Definition: StdinResponse.h:62
- -
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- -
StdinResponse(std::istream &in)
Build a instance using a C++ istream.
Definition: StdinResponse.h:68
-
Encapsulate a response read from stdin.
Definition: StdinResponse.h:44
-
-
- - - - diff --git a/html/Str_8cc_source.html b/html/Str_8cc_source.html deleted file mode 100644 index 68bf5b53a..000000000 --- a/html/Str_8cc_source.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - -libdap: Str.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Str.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1994-1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Implementation for Str.
33 //
34 // jhrg 9/7/94
35 
36 
37 #include "config.h"
38 
39 #include <sstream>
40 
41 #include "Byte.h"
42 #include "Int16.h"
43 #include "UInt16.h"
44 #include "Int32.h"
45 #include "UInt32.h"
46 #include "Float32.h"
47 #include "Float64.h"
48 #include "Str.h"
49 #include "Url.h"
50 #include "Array.h"
51 #include "Structure.h"
52 #include "Sequence.h"
53 #include "Grid.h"
54 
55 #include "DDS.h"
56 #include "Marshaller.h"
57 #include "UnMarshaller.h"
58 
59 #include "DMR.h"
60 #include "D4StreamMarshaller.h"
61 #include "D4StreamUnMarshaller.h"
62 
63 #include "util.h"
64 #include "parser.h"
65 #include "Operators.h"
66 #include "InternalErr.h"
67 #include "escaping.h"
68 #include "debug.h"
69 #include "DapIndent.h"
70 
71 using std::cerr;
72 using std::endl;
73 
74 namespace libdap {
75 
84 Str::Str(const string &n) : BaseType(n, dods_str_c), d_buf("")
85 {}
86 
94 Str::Str(const string &n, const string &d) : BaseType(n, d, dods_str_c), d_buf("")
95 {}
96 
97 Str::Str(const Str &copy_from) : BaseType(copy_from)
98 {
99  d_buf = copy_from.d_buf;
100 }
101 
102 BaseType *
104 {
105  return new Str(*this);
106 }
107 
108 Str &
109 Str::operator=(const Str &rhs)
110 {
111  if (this == &rhs)
112  return *this;
113 
114  // Call BaseType::operator=.
115  dynamic_cast<BaseType &>(*this) = rhs;
116 
117  d_buf = rhs.d_buf;
118 
119  return *this;
120 }
121 
122 int
123 Str::length() const
124 {
125  return d_buf.length();
126 }
127 
128 unsigned int
129 Str::width(bool) const
130 {
131  return sizeof(string);
132 }
133 
134 bool
135 Str::serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval)
136 {
137 
138  DBG(cerr << "Entering (" << this->name() << " [" << this << "])" << endl);
139 #if USE_LOCAL_TIMEOUT_SCHEME
140  dds.timeout_on();
141 #endif
142  if (!read_p())
143  read();
144 
145  if (ce_eval && !eval.eval_selection(dds, dataset()))
146  return true;
147 #if USE_LOCAL_TIMEOUT_SCHEME
148  dds.timeout_off();
149 #endif
150  m.put_str( d_buf ) ;
151 
152  DBG(cerr << "Exiting: buf = " << d_buf << endl);
153 
154  return true;
155 }
156 
157 // deserialize the string on stdin and put the result in BUF.
158 
159 bool
161 {
162  um.get_str( d_buf ) ;
163 
164  return false;
165 }
166 
167 void
169 {
170  checksum.AddData(reinterpret_cast<const uint8_t*>(d_buf.data()), d_buf.length());
171 }
172 
181 void
182 Str::serialize(D4StreamMarshaller &m, DMR &, /*ConstraintEvaluator &,*/ bool)
183 {
184  if (!read_p())
185  read(); // read() throws Error
186 
187  m.put_str( d_buf ) ;
188 }
189 
190 void
192 {
193  um.get_str( d_buf ) ;
194 }
195 
205 unsigned int
206 Str::buf2val(void **val)
207 {
208  // Jose Garcia
209  // The same comment justifying throwing an Error in val2buf applies here.
210  if (!val)
211  throw InternalErr(__FILE__, __LINE__,
212  "No place to store a reference to the data.");
213  // If *val is null, then the caller has not allocated storage for the
214  // value; we must. If there is storage there, assume it is a string and
215  // assign d_buf's value to that storage.
216  if (!*val)
217  *val = new string(d_buf);
218  else
219  *static_cast<string*>(*val) = d_buf;
220 
221  return sizeof(string*);
222 }
223 
233 unsigned int
234 Str::val2buf(void *val, bool)
235 {
236  // Jose Garcia
237  // This method is public therefore and I believe it has being designed
238  // to be use by read which must be implemented on the surrogated library,
239  // thus if the pointer val is NULL, is an Internal Error.
240  if (!val)
241  throw InternalErr(__FILE__, __LINE__, "NULL pointer.");
242 
243  d_buf = *static_cast<string*>(val);
244 
245  return sizeof(string*);
246 }
247 
252 bool
253 Str::set_value(const string &value)
254 {
255  d_buf = value;
256  set_read_p(true);
257 
258  return true;
259 }
260 
263 string
264 Str::value() const
265 {
266  return d_buf;
267 }
268 
269 void
270 Str::print_val(FILE *out, string space, bool print_decl_p)
271 {
272  ostringstream oss;
273  print_val(oss, space, print_decl_p);
274  fwrite(oss.str().data(), sizeof(char), oss.str().length(), out);
275 }
276 
277 void
278 Str::print_val(ostream &out, string space, bool print_decl_p)
279 {
280  if (print_decl_p) {
281  print_decl(out, space, false);
282  out << " = \"" << escattr(d_buf) << "\";\n" ;
283  }
284  else
285  out << "\"" << escattr(d_buf) << "\"" ;
286 }
287 
288 bool
289 Str::ops(BaseType *b, int op)
290 {
291  // Extract the Byte arg's value.
292  if (!read_p() && !read()) {
293  // Jose Garcia
294  // Since the read method is virtual and implemented outside
295  // libdap++ if we cannot read the data that is the problem
296  // of the user or of whoever wrote the surrogate library
297  // implemeting read therefore it is an internal error.
298  throw InternalErr(__FILE__, __LINE__, "This value was not read!");
299  }
300 
301  // Extract the second arg's value.
302  if (!b || !(b->read_p() || b->read())) {
303  // Jose Garcia
304  // Since the read method is virtual and implemented outside
305  // libdap++ if we cannot read the data that is the problem
306  // of the user or of whoever wrote the surrogate library
307  // implemeting read therefore it is an internal error.
308  throw InternalErr(__FILE__, __LINE__, "Argument value was not read!");
309  }
310 
311  return d4_ops(b, op);
312 }
313 
317 bool Str::d4_ops(BaseType *b, int op)
318 {
319  switch (b->type()) {
320  case dods_byte_c:
321  case dods_int8_c:
322  case dods_int16_c:
323  case dods_uint16_c:
324  case dods_int32_c:
325  case dods_uint32_c:
326  case dods_int64_c:
327  case dods_uint64_c:
328  case dods_float32_c:
329  case dods_float64_c:
330  throw Error(malformed_expr, "Relational operators can only compare compatible types (string, number).");
331  case dods_str_c:
332  return StrCmp<string, string>(op, d_buf, static_cast<Str*>(b)->value());
333  case dods_url_c:
334  return StrCmp<string, string>(op, d_buf, static_cast<Url*>(b)->value());
335  default:
336  throw Error(malformed_expr, "Relational operators only work with scalar types.");
337  }
338 }
339 
348 void
349 Str::dump(ostream &strm) const
350 {
351  strm << DapIndent::LMarg << "Str::dump - ("
352  << (void *)this << ")" << endl ;
353  DapIndent::Indent() ;
354  BaseType::dump(strm) ;
355  strm << DapIndent::LMarg << "value: " << d_buf << endl ;
356  DapIndent::UnIndent() ;
357 }
358 
359 } // namespace libdap
360 
virtual bool read()
Read data into a local buffer.
Definition: BaseType.cc:899
-
Holds an Internet address (URL).
Definition: Url.h:68
-
virtual bool read_p()
Has this variable been read?
Definition: BaseType.cc:480
-
virtual string name() const
Returns the name of the class instance.
Definition: BaseType.cc:320
-
virtual void print_val(FILE *out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: Str.cc:270
-
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
virtual void print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
Print an ASCII representation of the variable structure.
Definition: BaseType.cc:1003
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: BaseType.cc:291
-
virtual unsigned int val2buf(void *val, bool reuse=false)
Definition: Str.cc:234
-
virtual BaseType * ptr_duplicate()
Definition: Str.cc:103
-
Read data from the stream made by D4StreamMarshaller.
-
Definition: crc.h:76
-
BaseType(const string &n, const Type &t, bool is_dap4=false)
The BaseType constructor.
Definition: BaseType.cc:126
-
Str(const string &n)
Definition: Str.cc:84
-
virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
Move data to the net, then remove them from the object.
Definition: Str.cc:135
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
Holds character string data.
Definition: Str.h:62
-
virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)
Receive data from the net.
Definition: Str.cc:160
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Str.cc:349
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
- -
virtual Type type() const
Returns the type of the class instance.
Definition: BaseType.cc:365
-
virtual void set_read_p(bool state)
Sets the value of the read_p property.
Definition: BaseType.cc:516
-
virtual bool ops(BaseType *b, int op)
Evaluate relational operators.
Definition: Str.cc:289
-
virtual bool set_value(const string &value)
Definition: Str.cc:253
-
void AddData(const uint8_t *pData, const uint32_t length)
Definition: crc.h:98
-
virtual void compute_checksum(Crc32 &checksum)
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
Definition: Str.cc:168
-
virtual bool d4_ops(BaseType *b, int op)
Definition: Str.cc:317
-
Evaluate a constraint expression.
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
-
virtual string value() const
Definition: Str.cc:264
-
bool eval_selection(DDS &dds, const std::string &dataset)
Evaluate a boolean-valued constraint expression. This is main method for the evaluator and is called ...
-
virtual unsigned int width(bool constrained=false) const
How many bytes does this variable use Return the number of bytes of storage this variable uses...
Definition: Str.cc:129
-
A class for error processing.
Definition: Error.h:92
-
virtual int length() const
How many elements are in this variable.
Definition: Str.cc:123
-
virtual unsigned int buf2val(void **val)
Definition: Str.cc:206
-
virtual string dataset() const
Returns the name of the dataset used to create this instance.
Definition: BaseType.cc:358
-
string escattr(string s)
Definition: escaping.cc:368
-
-
- - - - diff --git a/html/Str_8h_source.html b/html/Str_8h_source.html deleted file mode 100644 index 5cbdb8aae..000000000 --- a/html/Str_8h_source.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - -libdap: Str.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Str.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1995-1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Interface for Str type.
33 //
34 // jhrg 9/7/94
35 
36 #ifndef _str_h
37 #define _str_h 1
38 
39 #include <string>
40 
41 #include "dods-limits.h"
42 #include "BaseType.h"
43 
44 namespace libdap
45 {
46 
47 // max_str_len should be large since we always send strings with length bytes
48 // as a prefix (so xdr_string will always know how much memory to malloc) but
49 // if deserialize gets confused and thinks a ctor (in particular) is a string
50 // xdr_string in turn will max_str_len if it cannot get a length byte. A long
51 // term solution is to fix libdap, but strings should not routinely be > 32k
52 // for the time being... jhrg 4/30/97
53 
54 const unsigned int max_str_len = DODS_USHRT_MAX - 1;
55 
62 class Str: public BaseType
63 {
64 protected:
65  string d_buf;
66 
67 public:
68  Str(const string &n);
69  Str(const string &n, const string &d);
70 
71  virtual ~Str()
72  {}
73 
74  Str(const Str &copy_from);
75 
76  Str &operator=(const Str &rhs);
77 
78  virtual BaseType *ptr_duplicate();
79 
80  virtual unsigned int width(bool constrained = false) const;
81 
82  // Return the length of the stored string or zero if no string has been
83  // stored in the instance's internal buffer.
84  virtual int length() const;
85 
86  // DAP2
87  virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval = true);
88  virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse = false);
89 
90  // DAP4
91  virtual void compute_checksum(Crc32 &checksum);
92  virtual void serialize(D4StreamMarshaller &m, DMR &dmr, /*ConstraintEvaluator &eval,*/ bool filter = false);
93  virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr);
94 
95  virtual unsigned int val2buf(void *val, bool reuse = false);
96  virtual unsigned int buf2val(void **val);
97 
98  virtual bool set_value(const string &value);
99  virtual string value() const;
100 
101  virtual void print_val(FILE *out, string space = "",
102  bool print_decl_p = true);
103  virtual void print_val(ostream &out, string space = "",
104  bool print_decl_p = true);
105 
106  virtual bool ops(BaseType *b, int op);
107  virtual bool d4_ops(BaseType *b, int op);
108 
109  virtual void dump(ostream &strm) const ;
110 };
111 
112 } // namespace libdap
113 
114 #endif // _str_h
115 
virtual void print_val(FILE *out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: Str.cc:270
-
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
virtual unsigned int val2buf(void *val, bool reuse=false)
Definition: Str.cc:234
-
virtual BaseType * ptr_duplicate()
Definition: Str.cc:103
-
Read data from the stream made by D4StreamMarshaller.
-
Definition: crc.h:76
-
Str(const string &n)
Definition: Str.cc:84
-
virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
Move data to the net, then remove them from the object.
Definition: Str.cc:135
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
Holds character string data.
Definition: Str.h:62
-
virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)
Receive data from the net.
Definition: Str.cc:160
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Str.cc:349
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
- -
virtual bool ops(BaseType *b, int op)
Evaluate relational operators.
Definition: Str.cc:289
-
virtual bool set_value(const string &value)
Definition: Str.cc:253
-
virtual void compute_checksum(Crc32 &checksum)
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
Definition: Str.cc:168
-
virtual bool d4_ops(BaseType *b, int op)
Definition: Str.cc:317
-
Evaluate a constraint expression.
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
-
virtual string value() const
Definition: Str.cc:264
-
virtual unsigned int width(bool constrained=false) const
How many bytes does this variable use Return the number of bytes of storage this variable uses...
Definition: Str.cc:129
-
virtual int length() const
How many elements are in this variable.
Definition: Str.cc:123
-
virtual unsigned int buf2val(void **val)
Definition: Str.cc:206
-
-
- - - - diff --git a/html/Structure_8cc_source.html b/html/Structure_8cc_source.html deleted file mode 100644 index 7ebec72f9..000000000 --- a/html/Structure_8cc_source.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - -libdap: Structure.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Structure.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1994-1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Implementation for the class Structure
33 //
34 // jhrg 9/14/94
35 
36 //#define DODS_DEBUG
37 
38 #include "config.h"
39 
40 #include <sstream>
41 
42 #include "Byte.h"
43 #include "Int16.h"
44 #include "UInt16.h"
45 #include "Int32.h"
46 #include "UInt32.h"
47 #include "Float32.h"
48 #include "Float64.h"
49 #include "Str.h"
50 #include "Url.h"
51 #include "Array.h"
52 #include "Structure.h"
53 #include "Sequence.h"
54 #include "Grid.h"
55 
56 #include "DDS.h"
57 #include "ConstraintEvaluator.h"
58 
59 #include "D4Attributes.h"
60 #include "D4Group.h"
61 
62 #include "XDRStreamMarshaller.h"
63 #include "util.h"
64 #include "debug.h"
65 #include "InternalErr.h"
66 #include "escaping.h"
67 #include "DapIndent.h"
68 
69 using std::cerr;
70 using std::endl;
71 
72 namespace libdap {
73 
74 #if 0
75 
79 void
80 Structure::m_duplicate(const Structure &s)
81 {
82  Constructor::m_duplicate(s);
83 #if 0
84  Structure &cs = const_cast<Structure &>(s);
85 
86  DBG(cerr << "Copying structure: " << name() << endl);
87 
88  for (Vars_iter i = cs.d_vars.begin(); i != cs.d_vars.end(); i++) {
89  DBG(cerr << "Copying field: " << (*i)->name() << endl);
90  // Jose Garcia
91  // I think this assert here is part of a debugging
92  // process since it is going along with a DBG call
93  // I leave it here since it can be remove by defining NDEBUG.
94  // assert(*i);
95  BaseType *btp = (*i)->ptr_duplicate();
96  btp->set_parent(this);
97  d_vars.push_back(btp);
98  }
99 #endif
100 }
101 #endif
102 
110 Structure::Structure(const string &n) : Constructor(n, dods_structure_c)
111 {}
112 
122 Structure::Structure(const string &n, const string &d)
123  : Constructor(n, d, dods_structure_c)
124 {}
125 
128 {
129  DBG(cerr << "In Structure::copy_ctor for " << name() << endl);
130  //m_duplicate(rhs);
131 }
132 
133 Structure::~Structure()
134 {
135 }
136 
137 BaseType *
139 {
140  return new Structure(*this);
141 }
142 
152 void
154 {
155  DBG(cerr << __func__ <<"() - BEGIN" << endl;);
156  // Here we create a new Structure and then use it
157  // as the target container for the transformed versions of
158  // all the member variables by calling Constructor::transform_to_dap4() and
159  // passing our new target Structure in as the target container.
160  Structure *dest = new Structure(name());
161  DBG(cerr << __func__ <<"() - Calling Constructor::transform_to_dap4("<<
162  "'" << root->name() << "':" << (void*)root << ","
163  "'" << dest->name() << "':" << (void*)dest << ")"
164  << endl; );
165  Constructor::transform_to_dap4(root, dest);
166  container->add_var_nocopy(dest);
167  DBG(cerr << __func__ <<"() - Added new Structure '" << dest->name() << "' (" << (void*)dest <<
168  ") to the container '" << container->name() <<"'" << endl;);
169  DBG(cerr << __func__ <<"() - END"<< endl;);
170 }
171 
172 
179 vector<BaseType *> *
181 {
182  DBG(cerr << " " << __func__ << " BEGIN" << endl);
183  Structure *dest = new Structure(name());
184 
185  // convert the Structure's d4 attributes to a dap2 attribute table.
186 #if 0
187  AttrTable *attrs = this->attributes()->get_AttrTable(name());
188 #else
189  if (dest->get_attr_table().get_size() == 0) {
191  dest->get_attr_table().set_name(name());
192  }
193 #endif
194 
195  dest->set_is_dap4(false);
196 
197  vector<BaseType *> dropped_vars;
198  for (Structure::Vars_citer i = var_begin(), e = var_end(); i != e; ++i) {
199  vector<BaseType *> *new_vars = (*i)->transform_to_dap2(&dest->get_attr_table() /*attrs*/);
200  if (new_vars) { // Might be un-mappable
201  // It's not so game on..
202 #if 0
203  vector<BaseType*>::iterator vIter = new_vars->begin();
204  vector<BaseType*>::iterator end = new_vars->end();
205 #endif
206  for (vector<BaseType*>::iterator vi = new_vars->begin(), ve = new_vars->end(); vi != ve ; ++vi ) {
207  BaseType *new_var = (*vi);
208  new_var->set_parent(dest);
209  dest->add_var_nocopy(new_var);
210  (*vi) = NULL;
211  }
212  delete new_vars;
213 
214  }
215  else {
216  // Got a NULL, so we are dropping this var.
217  dropped_vars.push_back(*i);
218  }
219  }
220 
221  AttrTable *dv_attr_table = make_dropped_vars_attr_table(&dropped_vars);
222  if(dv_attr_table){
223  dest->get_attr_table().append_container(dv_attr_table,dv_attr_table->get_name());
224  }
225 
226  DBG(attrs->print(cerr,"",true););
227 
228 #if 0
229  // Since this does a copy we gotta delete the attrs when done
230  // FIXME This is a bug. jhrg 6/17/19
231  dest->set_attr_table(*attrs);
232  delete attrs;
233 #endif
234 
235  vector<BaseType *> *result = new vector<BaseType *>();
236  result->push_back(dest);
237 
238  DBG(cerr << " " << __func__ << " END" << endl);
239 
240  return result;
241 }
242 
243 
244 
245 
246 
247 Structure &
248 Structure::operator=(const Structure &rhs)
249 {
250  DBG(cerr << "Entering Structure::operator=" << endl);
251  if (this == &rhs)
252  return *this;
253 
254  dynamic_cast<Constructor &>(*this) = rhs; // run Constructor=
255 
256  //m_duplicate(rhs);
257 
258  DBG(cerr << "Exiting Structure::operator=" << endl);
259  return *this;
260 }
261 
262 #if 0
263 int
264 Structure::element_count(bool leaves)
265 {
266  if (!leaves)
267  return d_vars.size();
268  else {
269  int i = 0;
270  for (Vars_iter j = d_vars.begin(); j != d_vars.end(); j++) {
271  i += (*j)->element_count(leaves);
272  }
273  return i;
274  }
275 }
276 #endif
277 
278 bool
280 {
281  bool linear = true;
282  for (Vars_iter i = d_vars.begin(); linear && i != d_vars.end(); i++) {
283  if ((*i)->type() == dods_structure_c)
284  linear = linear && static_cast<Structure*>((*i))->is_linear();
285  else
286  linear = linear && (*i)->is_simple_type();
287  }
288 
289  return linear;
290 }
291 
292 #if 0
293 void
294 Structure::set_send_p(bool state)
295 {
296  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
297  (*i)->set_send_p(state);
298  }
299 
300  BaseType::set_send_p(state);
301 }
302 
303 void
304 Structure::set_read_p(bool state)
305 {
306  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
307  (*i)->set_read_p(state);
308  }
309 
310  BaseType::set_read_p(state);
311 }
312 #endif
313 #if 0
314 
319 void
320 Structure::set_in_selection(bool state)
321 {
322  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
323  (*i)->set_in_selection(state);
324  }
325 
327 }
328 #endif
329 
330 void
332 {
333  for (Vars_iter i = var_begin(); i != var_end(); i++) {
334  if ((*i)->type() == dods_sequence_c)
335  static_cast<Sequence&>(**i).set_leaf_sequence(++level);
336  else if ((*i)->type() == dods_structure_c)
337  static_cast<Structure&>(**i).set_leaf_sequence(level);
338  }
339 }
340 
341 #if 0
342 
346 void
348 {
349  // Jose Garcia
350  // Passing and invalid pointer to an object is a developer's error.
351  if (!bt)
352  throw InternalErr(__FILE__, __LINE__, "The BaseType parameter cannot be null.");
353 
354  if (bt->is_dap4_only_type())
355  throw InternalErr(__FILE__, __LINE__, "Attempt to add a DAP4 type to a DAP2 Structure.");
356 
357  // Jose Garcia
358  // Now we add a copy of bt so the external user is able to destroy bt as
359  // he/she wishes. The policy is: "If it is allocated outside, it is
360  // deallocated outside, if it is allocated inside, it is deallocated
361  // inside"
362  BaseType *btp = bt->ptr_duplicate();
363  btp->set_parent(this);
364  d_vars.push_back(btp);
365 }
366 
371 void
373 {
374  if (!bt)
375  throw InternalErr(__FILE__, __LINE__, "The BaseType parameter cannot be null.");
376 
377  if (bt->is_dap4_only_type())
378  throw InternalErr(__FILE__, __LINE__, "Attempt to add a DAP4 type to a DAP2 Structure.");
379 
380  bt->set_parent(this);
381  d_vars.push_back(bt);
382 }
383 
384 
388 void
389 Structure::del_var(const string &n)
390 {
391  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
392  if ((*i)->name() == n) {
393  BaseType *bt = *i ;
394  d_vars.erase(i) ;
395  delete bt ; bt = 0;
396  return;
397  }
398  }
399 }
400 #endif
401 #if 0
402 
407 bool Structure::read()
408 {
409  if (!read_p()) {
410  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
411  (*i)->read();
412  }
413  set_read_p(true);
414  }
415 
416  return false;
417 }
418 #endif
419 #if 0
420 // TODO Recode to use width(bool)
421 unsigned int
423 {
424  unsigned int sz = 0;
425 
426  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
427  sz += (*i)->width();
428  }
429 
430  return sz;
431 }
432 
440 unsigned int
441 Structure::width(bool constrained)
442 {
443  unsigned int sz = 0;
444 
445  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
446  if (constrained) {
447  if ((*i)->send_p())
448  sz += (*i)->width(constrained);
449  }
450  else {
451  sz += (*i)->width(constrained);
452  }
453  }
454 
455  return sz;
456 }
457 #endif
458 
459 #if 0
460 void
462 {
463  DBG(cerr << "Structure::intern_data: " << name() << endl);
464  if (!read_p())
465  read(); // read() throws Error and InternalErr
466 
467  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
468  if ((*i)->send_p()) {
469  (*i)->intern_data(eval, dds);
470  }
471  }
472 }
473 
474 bool
476  Marshaller &m, bool ce_eval)
477 {
478 #if USE_LOCAL_TIMEOUT_SCHEME
479  dds.timeout_on();
480 #endif
481  if (!read_p())
482  read(); // read() throws Error and InternalErr
483 
484 #if EVAL
485  if (ce_eval && !eval.eval_selection(dds, dataset()))
486  return true;
487 #endif
488 #if USE_LOCAL_TIMEOUT_SCHEME
489  dds.timeout_off();
490 #endif
491  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
492  if ((*i)->send_p()) {
493 #ifdef CHECKSUMS
494  XDRStreamMarshaller *sm = dynamic_cast<XDRStreamMarshaller*>(&m);
495  if (sm && sm->checksums() && (*i)->type() != dods_structure_c && (*i)->type() != dods_grid_c)
496  sm->reset_checksum();
497 
498  (*i)->serialize(eval, dds, m, false);
499 
500  if (sm && sm->checksums() && (*i)->type() != dods_structure_c && (*i)->type() != dods_grid_c)
501  sm->get_checksum();
502 #else
503  (*i)->serialize(eval, dds, m, false);
504 #endif
505  }
506  }
507 
508  return true;
509 }
510 
511 bool
512 Structure::deserialize(UnMarshaller &um, DDS *dds, bool reuse)
513 {
514  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
515  (*i)->deserialize(um, dds, reuse);
516  }
517 
518  return false;
519 }
520 #endif
521 #if 0
522 
531 unsigned int
532 Structure::val2buf(void *, bool)
533 {
534  return sizeof(Structure);
535 }
536 
540 unsigned int
541 Structure::buf2val(void **)
542 {
543  return sizeof(Structure);
544 }
545 #endif
546 
547 #if 0
548 BaseType *
549 Structure::var(const string &name, bool exact_match, btp_stack *s)
550 {
551  string n = www2id(name);
552 
553  if (exact_match)
554  return m_exact_match(n, s);
555  else
556  return m_leaf_match(n, s);
557 }
558 
560 BaseType *
561 Structure::var(const string &n, btp_stack &s)
562 {
563  string name = www2id(n);
564 
565  BaseType *btp = m_exact_match(name, &s);
566  if (btp)
567  return btp;
568 
569  return m_leaf_match(name, &s);
570 }
571 #endif
572 #if 0
573 // Private method to find a variable using the shorthand name. This
574 // should be moved to Constructor.
575 BaseType *
576 Structure::m_leaf_match(const string &name, btp_stack *s)
577 {
578  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
579  if ((*i)->name() == name) {
580  if (s) {
581  DBG(cerr << "Pushing " << this->name() << endl);
582  s->push(static_cast<BaseType *>(this));
583  }
584  return *i;
585  }
586  if ((*i)->is_constructor_type()) {
587  BaseType *btp = (*i)->var(name, false, s);
588  if (btp) {
589  if (s) {
590  DBG(cerr << "Pushing " << this->name() << endl);
591  s->push(static_cast<BaseType *>(this));
592  }
593  return btp;
594  }
595  }
596  }
597 
598  return 0;
599 }
600 
601 // Breadth-first search for NAME. If NAME contains one or more dots (.)
602 // TODO The btp_stack is not needed since there are 'back pointers' in
603 // BaseType.
604 BaseType *
605 Structure::m_exact_match(const string &name, btp_stack *s)
606 {
607  // Look for name at the top level first.
608  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
609  if ((*i)->name() == name) {
610  if (s)
611  s->push(static_cast<BaseType *>(this));
612 
613  return *i;
614  }
615  }
616 
617  // If it was not found using the simple search, look for a dot and
618  // search the hierarchy.
619  string::size_type dot_pos = name.find("."); // zero-based index of `.'
620  if (dot_pos != string::npos) {
621  string aggregate = name.substr(0, dot_pos);
622  string field = name.substr(dot_pos + 1);
623 
624  BaseType *agg_ptr = var(aggregate);
625  if (agg_ptr) {
626  if (s)
627  s->push(static_cast<BaseType *>(this));
628 
629  return agg_ptr->var(field, true, s); // recurse
630  }
631  else
632  return 0; // qualified names must be *fully* qualified
633  }
634 
635  return 0;
636 }
637 #endif
638 #if 0
639 void
640 Structure::print_val(FILE *out, string space, bool print_decl_p)
641 {
642  ostringstream oss;
643  print_val(oss, space, print_decl_p);
644  fwrite(oss.str().data(), sizeof(char), oss.str().length(), out);
645 }
646 
647 void
648 Structure::print_val(ostream &out, string space, bool print_decl_p)
649 {
650  if (print_decl_p) {
651  print_decl(out, space, false);
652  out << " = " ;
653  }
654 
655  out << "{ " ;
656  for (Vars_citer i = d_vars.begin(); i != d_vars.end();
657  i++, (void)(i != d_vars.end() && out << ", ")) {
658  (*i)->print_val(out, "", false);
659  }
660 
661  out << " }" ;
662 
663  if (print_decl_p)
664  out << ";\n" ;
665 }
666 #endif
667 
668 #if 0
669 bool
670 Structure::check_semantics(string &msg, bool all)
671 {
672  if (!BaseType::check_semantics(msg))
673  return false;
674 
675  bool status = true;
676 
677  if (!unique_names(d_vars, name(), type_name(), msg))
678  return false;
679 
680  if (all) {
681  for (Vars_iter i = d_vars.begin(); i != d_vars.end(); i++) {
682  //assert(*i);
683  if (!(*i)->check_semantics(msg, true)) {
684  status = false;
685  goto exit;
686  }
687  }
688  }
689 
690 exit:
691  return status;
692 }
693 #endif
694 
703 void
704 Structure::dump(ostream &strm) const
705 {
706  strm << DapIndent::LMarg << "Structure::dump - ("
707  << (void *)this << ")" << endl ;
708  DapIndent::Indent() ;
709  Constructor::dump(strm) ;
710  DapIndent::UnIndent() ;
711 }
712 
713 } // namespace libdap
714 
virtual unsigned int width(bool constrained=false) const
Definition: Constructor.cc:249
-
virtual bool read_p()
Has this variable been read?
Definition: BaseType.cc:480
-
virtual string name() const
Returns the name of the class instance.
Definition: BaseType.cc:320
-
virtual void set_in_selection(bool state)
Set the in_selection property.
Definition: Constructor.cc:834
-
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
virtual BaseType * ptr_duplicate()
Definition: Structure.cc:138
-
virtual BaseType * var(const string &name, bool exact_match=true, btp_stack *s=0)
btp_stack no longer needed; use back pointers (BaseType::get_parent())
Definition: Constructor.cc:267
-
Part
Names the parts of multi-section constructor data types.
Definition: Type.h:48
-
virtual void transform_to_dap4(D4Group *root, Constructor *container)
Definition: Structure.cc:153
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
virtual string get_name() const
Get the name of this attribute table.
Definition: AttrTable.cc:238
-
BaseType(const string &n, const Type &t, bool is_dap4=false)
The BaseType constructor.
Definition: BaseType.cc:126
-
Structure(const string &n)
Definition: Structure.cc:110
-
virtual vector< BaseType * > * transform_to_dap2(AttrTable *parent_attr_table)
DAP4 to DAP2 transform.
Definition: Structure.cc:180
-
virtual void add_var_nocopy(BaseType *bt, Part part=nil)
Definition: Constructor.cc:432
-
virtual void print(FILE *out, string pad=" ", bool dereference=false)
Prints the attribute table.
Definition: AttrTable.cc:1243
-
Holds a structure (aggregate) type.
Definition: Structure.h:83
-
virtual void add_var(BaseType *bt, Part part=nil)
Definition: Constructor.cc:407
-
virtual void set_in_selection(bool state)
Definition: BaseType.cc:718
-
virtual int element_count(bool leaves=false)
Count the members of constructor types.
Definition: Constructor.cc:194
-
virtual void set_parent(BaseType *parent)
Definition: BaseType.cc:733
-
virtual void set_leaf_sequence(int level=1)
Traverse Structure, set Sequence leaf nodes.
Definition: Structure.cc:331
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
void transform_attrs_to_dap2(AttrTable *d2_attr_table)
Copy the attributes from this D4Attributes object to a DAP2 AttrTable.
-
virtual BaseType * var(const string &name="", bool exact_match=true, btp_stack *s=0)
Returns a pointer to a member of a constructor class.
Definition: BaseType.cc:758
-
virtual void transform_to_dap4(D4Group *root, Constructor *dest)
DAP2 to DAP4 transform.
Definition: Constructor.cc:141
-
virtual void set_send_p(bool state)
Definition: BaseType.cc:568
-
virtual AttrTable * append_container(const string &name)
Add a container to the attribute table.
Definition: AttrTable.cc:410
- -
virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
Move data to the net, then remove them from the object.
Definition: Constructor.cc:504
-
virtual bool read()
simple implementation of read that iterates through vars and calls read on them
Definition: Constructor.cc:476
-
virtual void set_read_p(bool state)
Sets the value of the read_p property.
Definition: BaseType.cc:516
-
virtual D4Attributes * attributes()
Definition: BaseType.cc:599
-
virtual bool check_semantics(string &msg, bool all=false)
Compare an object&#39;s current state with the semantics of its type.
Definition: Constructor.cc:792
-
virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)
Receive data from the net.
Definition: Constructor.cc:540
-
virtual void print_val(FILE *out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: Constructor.cc:650
-
virtual unsigned int val2buf(void *, bool)
Loads class data.
Definition: Constructor.h:115
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Constructor.cc:913
-
virtual BaseType * ptr_duplicate()=0
-
string www2id(const string &in, const string &escape, const string &except)
Definition: escaping.cc:220
- -
Evaluate a constraint expression.
-
virtual unsigned int buf2val(void **)
Reads the class data.
Definition: Constructor.h:118
-
virtual AttrTable & get_attr_table()
Definition: BaseType.cc:582
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
-
virtual void print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
Print an ASCII representation of the variable structure.
Definition: Constructor.cc:626
-
virtual string type_name() const
Returns the type of the class instance as a string.
Definition: BaseType.cc:379
-
virtual bool is_linear()
Check to see whether this variable can be printed simply.
Definition: Structure.cc:279
-
Vars_iter var_begin()
Definition: Constructor.cc:356
-
virtual void set_attr_table(const AttrTable &at)
Definition: BaseType.cc:590
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Structure.cc:704
-
Vars_iter var_end()
Definition: Constructor.cc:364
- -
bool eval_selection(DDS &dds, const std::string &dataset)
Evaluate a boolean-valued constraint expression. This is main method for the evaluator and is called ...
-
virtual void intern_data()
Read data into this variable.
Definition: Constructor.cc:556
-
virtual unsigned int get_size() const
Get the number of entries in this attribute table.
Definition: AttrTable.cc:231
-
virtual void set_name(const string &n)
Set the name of this attribute table.
Definition: AttrTable.cc:245
-
virtual void del_var(const string &name)
Definition: Constructor.cc:448
-
virtual void set_send_p(bool state)
Definition: Constructor.cc:208
-
Marshaller that knows how serialize dap data objects to a C++ iostream using XDR. ...
-
virtual string dataset() const
Returns the name of the dataset used to create this instance.
Definition: BaseType.cc:358
-
virtual void set_read_p(bool state)
Sets the value of the read_p property.
Definition: Constructor.cc:218
-
virtual bool check_semantics(string &msg, bool all=false)
Compare an object&#39;s current state with the semantics of its type.
Definition: BaseType.cc:1209
-
-
- - - - diff --git a/html/Structure_8h_source.html b/html/Structure_8h_source.html deleted file mode 100644 index 7f624676c..000000000 --- a/html/Structure_8h_source.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - -libdap: Structure.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Structure.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1995-1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Interface for the class Structure. A structure contains a single set of
33 // variables, all at the same lexical level. Of course, a structure may
34 // contain other structures... The variables contained in a structure are
35 // stored by instances of this class in a SLList of BaseType pointers.
36 //
37 // jhrg 9/14/94
38 
39 #ifndef _structure_h
40 #define _structure_h 1
41 
42 #include <vector>
43 
44 #include "Constructor.h"
45 
46 namespace libdap
47 {
48 
49 class DDS;
50 class ConstraintEvaluator;
51 class D4Group;
52 
83 class Structure: public Constructor
84 {
85 private:
86 protected:
87 
88 public:
89  Structure(const string &n);
90  Structure(const string &n, const string &d);
91 
92  Structure(const Structure &rhs);
93  virtual ~Structure();
94 
95  Structure &operator=(const Structure &rhs);
96  virtual BaseType *ptr_duplicate();
97 
98  virtual void transform_to_dap4(D4Group *root, Constructor *container);
99  virtual vector<BaseType *> *transform_to_dap2(AttrTable *parent_attr_table);
100 
101  virtual bool is_linear();
102 
103  virtual void set_leaf_sequence(int level = 1);
104 
105  virtual void dump(ostream &strm) const ;
106 };
107 
108 } // namespace libdap
109 
110 #endif // _structure_h
virtual BaseType * ptr_duplicate()
Definition: Structure.cc:138
-
virtual void transform_to_dap4(D4Group *root, Constructor *container)
Definition: Structure.cc:153
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
Structure(const string &n)
Definition: Structure.cc:110
-
virtual vector< BaseType * > * transform_to_dap2(AttrTable *parent_attr_table)
DAP4 to DAP2 transform.
Definition: Structure.cc:180
-
Holds a structure (aggregate) type.
Definition: Structure.h:83
-
virtual void set_leaf_sequence(int level=1)
Traverse Structure, set Sequence leaf nodes.
Definition: Structure.cc:331
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- -
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
virtual bool is_linear()
Check to see whether this variable can be printed simply.
Definition: Structure.cc:279
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Structure.cc:704
- -
-
- - - - diff --git a/html/Tokens.xml b/html/Tokens.xml deleted file mode 100644 index 51bdf7702..000000000 --- a/html/Tokens.xml +++ /dev/null @@ -1,29462 +0,0 @@ - - - - - todo - unknown - - todo.html - - - - deprecated - unknown - - deprecated.html - - - - strict - c - - group__strict.html - - - - get_strict - cpp - instm - libdap::D4ParserSax2 - - group__strict.html - ga030fddcb0529be0999faffd9c0fb7e16 - Get the setting of the &#39;strict&#39; mode. - D4ParserSax2.h - - - - set_strict - cpp - instm - libdap::D4ParserSax2 - - group__strict.html - gad0fb36451a4348afb0a294f709c905f2 - Set the &#39;strict&#39; mode to true or false. - D4ParserSax2.h - - - - check_type - c - - group__check__type.html - Can the given string be converted into a byte, ...? - - - - check_byte - cpp - func - libdap - - group__check__type.html - ga6159f969729b3625cfb42b97b76a29b6 - Is the value a valid byte? - parser-util.cc - - - - check_url - cpp - func - libdap - - group__check__type.html - ga0e96bac2251d066910b2647830b6959c - Is the value a valid URL? - parser-util.cc - - - - check - c - - group__check.html - Like &#39;test and set,&#39; check a type and set a value in one go. - - - - get_type - c - - group__get__type.html - Convert the string to a value; throw if the conversion fails. - - - - binary_function - c - cl - binary_function - - classbinary__function.html - - - - Crc32 - c - cl - Crc32 - - classCrc32.html - - - - AddData - cpp - instm - Crc32 - - classCrc32.html - a79e430ee82b3cec76543f345f2361784 - crc.h - - - - Crc32 - cpp - instm - Crc32 - - classCrc32.html - ae9fe98ed803007de13e63c03e80fe322 - crc.h - - - - GetCrc32 - cpp - instm - Crc32 - - classCrc32.html - a386ca030f3214b8d3a9560e09478ca66 - crc.h - - - - Reset - cpp - instm - Crc32 - - classCrc32.html - a3722922b4cd2902eff207e78d03e66c2 - crc.h - - - - d4_ceFlexLexer - c - cl - d4_ceFlexLexer - - classd4__ceFlexLexer.html - - - - d4_functionFlexLexer - c - cl - d4_functionFlexLexer - - classd4__functionFlexLexer.html - - - - GetOpt - c - cl - GetOpt - - classGetOpt.html - - - - functions::GeoConstraint - c - cl - functions::GeoConstraint - - classfunctions_1_1GeoConstraint.html - GeoConstraint.h - - - - apply_constraint_to_data - cpp - instm - functions::GeoConstraint - - classfunctions_1_1GeoConstraint.html - a7b61dd0dd08d721764cced64c2b02672 - Once the bounding box is set use this method to apply the constraint. - GeoConstraint.h - - - - set_bounding_box - cpp - instm - functions::GeoConstraint - - classfunctions_1_1GeoConstraint.html - afdcce3490cf3e4e7c9427d002c9aa1d1 - GeoConstraint.h - - - - GeoConstraint - cpp - instm - functions::GeoConstraint - - classfunctions_1_1GeoConstraint.html - a0aeedfbc40843f3edc332fabc2395de6 - Initialize GeoConstraint. - GeoConstraint.h - - - - build_lat_lon_maps - cpp - instm - functions::GeoConstraint - - classfunctions_1_1GeoConstraint.html - a225f1a1ef91e1df9f6a9da4879858725 - GeoConstraint.h - - - - categorize_latitude - cpp - instm - functions::GeoConstraint - - classfunctions_1_1GeoConstraint.html - af89805663f0534a8addedaea2f3073cd - GeoConstraint.h - - - - categorize_notation - cpp - instm - functions::GeoConstraint - - classfunctions_1_1GeoConstraint.html - a8e57a12e7c30c0a6834759b203470833 - GeoConstraint.h - - - - find_latitude_indeces - cpp - instm - functions::GeoConstraint - - classfunctions_1_1GeoConstraint.html - a74db78b6220b59f1f4fb3564d7974754 - GeoConstraint.h - - - - find_longitude_indeces - cpp - instm - functions::GeoConstraint - - classfunctions_1_1GeoConstraint.html - aba588b366dbb024457c89ce33a7ebb38 - GeoConstraint.h - - - - lat_lon_dimensions_ok - cpp - instm - functions::GeoConstraint - - classfunctions_1_1GeoConstraint.html - adba123828c5e852139d00e1ca6e92a5b - GeoConstraint.h - - - - reorder_data_longitude_axis - cpp - instm - functions::GeoConstraint - - classfunctions_1_1GeoConstraint.html - a4dcd6ab2bcfe9f1a31cc22d036525e01 - GeoConstraint.h - - - - reorder_longitude_map - cpp - instm - functions::GeoConstraint - - classfunctions_1_1GeoConstraint.html - a44066d960eb11d1395ea6762e511ad4b - GeoConstraint.h - - - - transform_longitude_to_neg_pos_notation - cpp - instm - functions::GeoConstraint - - classfunctions_1_1GeoConstraint.html - a465ae9bfaf84501740e0c90a13f88d17 - GeoConstraint.h - - - - transform_longitude_to_pos_notation - cpp - instm - functions::GeoConstraint - - classfunctions_1_1GeoConstraint.html - a42facca9c9db0f8d41e41dbae81edc7d - GeoConstraint.h - - - - transpose_vector - cpp - instm - functions::GeoConstraint - - classfunctions_1_1GeoConstraint.html - aebcb9ed78095f98c047622cd66448466 - GeoConstraint.h - - - - functions::GeoGridFunction - c - cl - functions::GeoGridFunction - - classfunctions_1_1GeoGridFunction.html - - - - canOperateOn - cpp - instm - functions::GeoGridFunction - - classfunctions_1_1GeoGridFunction.html - a59fde66559f6222db4c55479a42ec782 - GeoGridFunction.h - - - - canOperateOn - cpp - instm - libdap::ServerFunction - - classlibdap_1_1ServerFunction.html - a8a3921a3d3a0ef39e1ee6bdd6011ccaf - ServerFunction.h - - - - setFunction - cpp - instm - libdap::ServerFunction - - classlibdap_1_1ServerFunction.html - a3235a206a2933b96360c00d5b021a1e5 - ServerFunction.h - - - - functions::GridFunction - c - cl - functions::GridFunction - - classfunctions_1_1GridFunction.html - - - - canOperateOn - cpp - instm - functions::GridFunction - - classfunctions_1_1GridFunction.html - abe8f0692c35c711151d5d81a8e5a308d - GridFunction.h - - - - canOperateOn - cpp - instm - libdap::ServerFunction - - classlibdap_1_1ServerFunction.html - a8a3921a3d3a0ef39e1ee6bdd6011ccaf - ServerFunction.h - - - - setFunction - cpp - instm - libdap::ServerFunction - - classlibdap_1_1ServerFunction.html - a3235a206a2933b96360c00d5b021a1e5 - ServerFunction.h - - - - functions::GridGeoConstraint - c - cl - functions::GridGeoConstraint - - classfunctions_1_1GridGeoConstraint.html - GridGeoConstraint.h - - - - apply_constraint_to_data - cpp - instm - functions::GridGeoConstraint - - classfunctions_1_1GridGeoConstraint.html - aef185fdc0541881d39d19d6e1fd364d7 - GridGeoConstraint.h - - - - set_bounding_box - cpp - instm - functions::GeoConstraint - - classfunctions_1_1GeoConstraint.html - afdcce3490cf3e4e7c9427d002c9aa1d1 - GeoConstraint.h - - - - GridGeoConstraint - cpp - instm - functions::GridGeoConstraint - - classfunctions_1_1GridGeoConstraint.html - aea3d88980a9c0500c1c51e877b3347b5 - Initialize GeoConstraint with a Grid. - GridGeoConstraint.h - - - - categorize_latitude - cpp - instm - functions::GeoConstraint - - classfunctions_1_1GeoConstraint.html - af89805663f0534a8addedaea2f3073cd - GeoConstraint.h - - - - categorize_notation - cpp - instm - functions::GeoConstraint - - classfunctions_1_1GeoConstraint.html - a8e57a12e7c30c0a6834759b203470833 - GeoConstraint.h - - - - find_latitude_indeces - cpp - instm - functions::GeoConstraint - - classfunctions_1_1GeoConstraint.html - a74db78b6220b59f1f4fb3564d7974754 - GeoConstraint.h - - - - find_longitude_indeces - cpp - instm - functions::GeoConstraint - - classfunctions_1_1GeoConstraint.html - aba588b366dbb024457c89ce33a7ebb38 - GeoConstraint.h - - - - reorder_data_longitude_axis - cpp - instm - functions::GeoConstraint - - classfunctions_1_1GeoConstraint.html - a4dcd6ab2bcfe9f1a31cc22d036525e01 - GeoConstraint.h - - - - reorder_longitude_map - cpp - instm - functions::GeoConstraint - - classfunctions_1_1GeoConstraint.html - a44066d960eb11d1395ea6762e511ad4b - GeoConstraint.h - - - - transform_longitude_to_neg_pos_notation - cpp - instm - functions::GeoConstraint - - classfunctions_1_1GeoConstraint.html - a465ae9bfaf84501740e0c90a13f88d17 - GeoConstraint.h - - - - transform_longitude_to_pos_notation - cpp - instm - functions::GeoConstraint - - classfunctions_1_1GeoConstraint.html - a42facca9c9db0f8d41e41dbae81edc7d - GeoConstraint.h - - - - transpose_vector - cpp - instm - functions::GeoConstraint - - classfunctions_1_1GeoConstraint.html - aebcb9ed78095f98c047622cd66448466 - GeoConstraint.h - - - - functions::gse_arg - c - cl - functions::gse_arg - - structfunctions_1_1gse__arg.html - gse_parser.h - - - - functions::GSEClause - c - cl - functions::GSEClause - - classfunctions_1_1GSEClause.html - GSEClause.h - - - - OK - cpp - instm - functions::GSEClause - - classfunctions_1_1GSEClause.html - a7fd18899b9cbab6f866fe21a8330e163 - GSEClause.h - - - - get_map - cpp - instm - functions::GSEClause - - classfunctions_1_1GSEClause.html - a421d3e10992fca87eff85d5baa5a7e74 - Get a pointer to the map variable constrained by this clause. - GSEClause.h - - - - get_map_name - cpp - instm - functions::GSEClause - - classfunctions_1_1GSEClause.html - a1973c47ef5ecc920d7a79ac627cfc335 - Get the name of the map variable constrained by this clause. - GSEClause.h - - - - get_start - cpp - instm - functions::GSEClause - - classfunctions_1_1GSEClause.html - ad3c0a7c9c9989cdae01e5c106ae18aa8 - Get the starting index of the clause&#39;s map variable as constrained by this clause. - GSEClause.h - - - - get_stop - cpp - instm - functions::GSEClause - - classfunctions_1_1GSEClause.html - a6d2a1d6a8356c627e5280d1fc9bf867c - Get the stopping index of the clause&#39;s map variable as constrained by this clause. - GSEClause.h - - - - get_map_min_value - cpp - instm - functions::GSEClause - - classfunctions_1_1GSEClause.html - adb2676c9f7409cd092414b5ee6835a8a - Get the minimum map vector value. - GSEClause.h - - - - get_map_max_value - cpp - instm - functions::GSEClause - - classfunctions_1_1GSEClause.html - abc9a7d7b0ee725eaa7ff0a028d47f607 - Get the maximum map vector value. - GSEClause.h - - - - set_map - cpp - instm - functions::GSEClause - - classfunctions_1_1GSEClause.html - ae7e84764029f1fb554aa10ceb09aa386 - Set the pointer to the map vector contrained by this clause. - GSEClause.h - - - - set_start - cpp - instm - functions::GSEClause - - classfunctions_1_1GSEClause.html - ab1ea8b17260adabda8b44e23aad574d3 - Set the starting index. - GSEClause.h - - - - set_stop - cpp - instm - functions::GSEClause - - classfunctions_1_1GSEClause.html - a5f0309f54e1735acd8d0406f7f54d107 - Set the stopping index. - GSEClause.h - - - - libdap - c - ns - libdap - - namespacelibdap.html - top level DAP object to house generic methods - - - - BaseTypeRow - cpp - tdef - libdap - - namespacelibdap.html - a2282a2360f34712dee8d85da65229a14 - D4Sequence.h - - - - D4SeqRow - cpp - tdef - libdap - - namespacelibdap.html - a37b6f78da686ad9fefd03232f7d8c378 - D4Sequence.h - - - - D4SeqValues - cpp - tdef - libdap - - namespacelibdap.html - adfc0200c041e26204ad14e51956cefc1 - D4Sequence.h - - - - ErrorCode - cpp - tdef - libdap - - namespacelibdap.html - a4d08204a35e99e555cda79022648362f - An enumerated type for common errors. - Error.h - - - - SequenceValues - cpp - tdef - libdap - - namespacelibdap.html - a9cf10a1365a3abac18c17e4cc18ebbd2 - D4Sequence.h - - - - add_space_encoding - cpp - func - libdap - - namespacelibdap.html - a67170660297bc012a29fe03ac7ebd349 - AttrTable.cc - - - - AttrType_to_String - cpp - func - libdap - - namespacelibdap.html - a84d1b6bca4eb21023f90f7b4ae6f382b - AttrTable.cc - - - - build_btp_args - cpp - func - libdap - - namespacelibdap.html - a928b16257bc714971a2a3c91cb42d882 - RValue.cc - - - - check_byte - cpp - func - libdap - - group__check__type.html - ga6159f969729b3625cfb42b97b76a29b6 - Is the value a valid byte? - parser-util.cc - - - - check_url - cpp - func - libdap - - group__check__type.html - ga0e96bac2251d066910b2647830b6959c - Is the value a valid URL? - parser-util.cc - - - - close_temp - cpp - func - libdap - - namespacelibdap.html - a9696b8596e7a5858d494e8a8d7d082c1 - HTTPConnect.cc - - - - Cmp - cpp - func - libdap - - namespacelibdap.html - a786edd1e80b39397432942d12d1f2c2b - Operators.h - - - - D2type_name - cpp - func - libdap - - namespacelibdap.html - a84c3754d6e7ab7deeea26297434b1468 - Returns the type of the class instance as a string. Supports all DAP2 types and not the DAP4-only typ... - util.cc - - - - D4AttributeTypeToString - cpp - func - libdap - - namespacelibdap.html - a8f24f0478f336e494fd6307b32e569c7 - D4Attributes.cc - - - - D4RValueFactory - cpp - func - libdap - - namespacelibdap.html - ad6f176510a4e6240272e60b3b4a17e77 - Build an appropriate RValue. - D4RValue.cc - - - - D4type_name - cpp - func - libdap - - namespacelibdap.html - aa452631fa64311abbcda885ee07f3876 - Returns the type of the class instance as a string. Supports all DAP4 types and not the DAP2-only typ... - util.cc - - - - dap_version - cpp - func - libdap - - namespacelibdap.html - affccb78f3a718e01f5fac17b682430d1 - util.cc - - - - date_time_str - cpp - func - libdap - - namespacelibdap.html - ab9983dcf36d072b24f4ecee5558d790a - util_mit.cc - - - - dir_exists - cpp - func - libdap - - namespacelibdap.html - a786f5711d1671e3f8af85c545fc627c5 - util.cc - - - - double_eq - cpp - func - libdap - - namespacelibdap.html - a7e55035aed27d6e56f7219405c803628 - util.h - - - - downcase - cpp - func - libdap - - namespacelibdap.html - a7edce266869606fc7bb46124f8d63809 - util.cc - - - - esc2underscore - cpp - func - libdap - - namespacelibdap.html - a164a636683af9444c41c17c84d88e5f7 - escaping.cc - - - - escape_double_quotes - cpp - func - libdap - - namespacelibdap.html - aa26bd967ca156771d2bd79db8bd3a91f - escaping.cc - - - - escattr - cpp - func - libdap - - namespacelibdap.html - a17b72fe083734a5fefaf5542f640d87e - escaping.cc - - - - extract_double_array - cpp - func - libdap - - namespacelibdap.html - ae9717ce6442b4909dcd7add356a7ff88 - util.cc - - - - extract_double_array - cpp - func - libdap - - namespacelibdap.html - aa04d5fddff07ca50affc36529e4bc0c8 - util.cc - - - - extract_double_value - cpp - func - libdap - - namespacelibdap.html - a3c8b08223f4ea1841cf82dfc743a0d3a - util.cc - - - - extract_string_argument - cpp - func - libdap - - namespacelibdap.html - aca7eee077ab6dadb25126a92cf82737a - util.cc - - - - fillConstructorAttrTable - cpp - func - libdap - - namespacelibdap.html - af39f3758ad6050f66d1a0d7f7013fb09 - Recursive helper function for Building DAS entries for Constructor types. - DDS.cc - - - - get_hash - cpp - func - libdap - - namespacelibdap.html - a68a16ef70e29c367dabd3cb5165c386a - HTTPCacheTable.cc - - - - get_temp_file - cpp - func - libdap - - namespacelibdap.html - a38c36ee6057b9229779ba3053bb37d4c - HTTPConnect.cc - - - - get_type - cpp - func - libdap - - namespacelibdap.html - acae01d86178254213ffd234c1e1fd8b4 - util.cc - - - - glob - cpp - func - libdap - - namespacelibdap.html - abf6c5d7d890cc00d0545d72b05265a53 - util.cc - - - - has_dap2_attributes - cpp - func - libdap - - namespacelibdap.html - a26c34b4f9cb1a6515ce4412ed65b0d59 - DDS.cc - - - - has_dap2_attributes - cpp - func - libdap - - namespacelibdap.html - a9b8d3200efbd82d48ade94bf7e599206 - DDS.cc - - - - id2www - cpp - func - libdap - - namespacelibdap.html - afbd709ed83699c11234a213463d16b9c - escaping.cc - - - - id2www_ce - cpp - func - libdap - - namespacelibdap.html - adc33774947740cc181b6d4d7ca90e22d - escaping.cc - - - - id2xml - cpp - func - libdap - - namespacelibdap.html - a62463a13bf510db3a14c0053fea14f4d - escaping.cc - - - - is_constructor_type - cpp - func - libdap - - namespacelibdap.html - aaa5926a7932be603a4ef9a89a96b135b - Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable... - util.cc - - - - is_hop_by_hop_header - cpp - func - libdap - - namespacelibdap.html - a1987f9d225c2778a297eab61a6a612b3 - HTTPCache.cc - - - - is_host_big_endian - cpp - func - libdap - - namespacelibdap.html - a3abf36cb3ebe713e8ff377085b4637a4 - Does this host use big-endian byte order? - util.cc - - - - is_integer_type - cpp - func - libdap - - namespacelibdap.html - ab99b40f36be23399fdf10fe3fa055afe - util.cc - - - - is_quoted - cpp - func - libdap - - namespacelibdap.html - af5f0e11f33c1eb25b831c02d65b2a9ee - util.cc - - - - is_simple_type - cpp - func - libdap - - namespacelibdap.html - a73e3f05015e5722fab9553d0d30441fe - Returns true if the instance is a numeric, string or URL type variable. - util.cc - - - - is_vector_type - cpp - func - libdap - - namespacelibdap.html - ab4b80891f6216b0cda757788cbc6feb2 - Returns true if the instance is a vector (i.e., array) type variable. - util.cc - - - - libdap_version - cpp - func - libdap - - namespacelibdap.html - a3c2e481465a4567eaf6d1f22d84c0ef9 - util.cc - - - - open_temp_fstream - cpp - func - libdap - - namespacelibdap.html - a14d91991ecd682d9bc212a00ac45d43c - util.cc - - - - operator<< - cpp - func - libdap - - namespacelibdap.html - ab3c20d5978c31aa69a0d4b5b61aaa0d3 - AISResources.cc - - - - operator<< - cpp - func - libdap - - namespacelibdap.html - ae3c75369b7863f4284f3fae3feacf71c - AISResources.cc - - - - parse_time - cpp - func - libdap - - namespacelibdap.html - abaf4e1a6a665dbfe9324b25ec9fa701a - util.h - - - - path_to_filename - cpp - func - libdap - - namespacelibdap.html - a38d9163360ace25ebe5dec96b17039ac - util.cc - - - - prune_spaces - cpp - func - libdap - - namespacelibdap.html - a4b1fc86f3e9e75f967ad66f07962d406 - util.cc - - - - remove_quotes - cpp - func - libdap - - namespacelibdap.html - a37a24fcba1630ac658ec4c8a902dd92c - util.cc - - - - remove_space_encoding - cpp - func - libdap - - namespacelibdap.html - aba04c51de3fc39e8e8cc41e4f1fd1286 - AttrTable.cc - - - - save_str - cpp - func - libdap - - namespacelibdap.html - a88b0cc055e14caf84865c2d5730d4fb3 - Save a string to a temporary variable during the parse. - parser-util.cc - - - - set_array_using_double - cpp - func - libdap - - namespacelibdap.html - a5d52ca5c40dd022353469e7b5d8a9ad4 - util.cc - - - - StrCmp - cpp - func - libdap - - namespacelibdap.html - a0cacdf95ef71800420109088d0928d7b - Operators.h - - - - systime - cpp - func - libdap - - namespacelibdap.html - aa865553d4933d667330f305dcb2564b0 - util.cc - - - - type_name - cpp - func - libdap - - namespacelibdap.html - a53e4b7d109c66e3b5ab39e9c2ae5da3c - util.cc - - - - unescape_double_quotes - cpp - func - libdap - - namespacelibdap.html - a4c3ce7a705067cd34a90d2481033fdb6 - escaping.cc - - - - unescattr - cpp - func - libdap - - namespacelibdap.html - a8ea51bd234898fe461d77dfbe3a678fe - escaping.cc - - - - www2id - cpp - func - libdap - - namespacelibdap.html - a376f9593431111a80ef78c98b8f4a0e2 - escaping.cc - - - - xml2id - cpp - func - libdap - - namespacelibdap.html - a613e8502fe2c16fd938d1bd9065fceb0 - escaping.cc - - - - last_modified_time - cpp - func - libdap - - namespacelibdap.html - a394c0b1380a16e886f96bf4a9081ed3a - mime_util.cc - - - - rfc822_date - cpp - func - libdap - - namespacelibdap.html - addaf5cee5de886a546a7861b4f37f206 - mime_util.cc - - - - do_version - cpp - func - libdap - - namespacelibdap.html - a7e95f81049cb65e60edcc5ec41d445d7 - Send a version number. - mime_util.cc - - - - ErrMsgT - cpp - func - libdap - - namespacelibdap.html - ac76ab0ba8dd2e6d2db8e4d07175ea266 - Logs an error message. - mime_util.cc - - - - name_path - cpp - func - libdap - - namespacelibdap.html - a3afc3528d387dce83384c0cb9d87d840 - Returns the filename portion of a pathname. - mime_util.cc - - - - get_type - cpp - func - libdap - - namespacelibdap.html - aceb42dce2c3676ca9785ee89190ab4ce - mime_util.cc - - - - get_description_type - cpp - func - libdap - - namespacelibdap.html - a284c1c548cbcea75bb1b7c8374dc04e9 - mime_util.cc - - - - get_next_mime_header - cpp - func - libdap - - namespacelibdap.html - af40aaa18e8202054344f62bea89a843c - mime_util.cc - - - - get_next_mime_header - cpp - func - libdap - - namespacelibdap.html - a9b9ec754b75ede55b1d84b5bec3d15f7 - mime_util.cc - - - - parse_mime_header - cpp - func - libdap - - namespacelibdap.html - a3853818a415408fd980e8f3a9321d5d8 - mime_util.cc - - - - is_boundary - cpp - func - libdap - - namespacelibdap.html - adf7e4c413496dc6047a0ea00855e78cb - mime_util.cc - - - - read_multipart_boundary - cpp - func - libdap - - namespacelibdap.html - a1ad87923a4c147b72d5bbeefa727a2cb - mime_util.cc - - - - read_multipart_headers - cpp - func - libdap - - namespacelibdap.html - a96c1d42b551af831c26287053386e244 - mime_util.cc - - - - cid_to_header_value - cpp - func - libdap - - namespacelibdap.html - a305177e6d1357f0315156510475cc633 - mime_util.cc - - - - remove_mime_header - cpp - func - libdap - - namespacelibdap.html - a84080cf0736578f62620dde0fd3f2110 - Read and discard the MIME header of the stream in. - mime_util.cc - - - - remove_mime_header - cpp - func - libdap - - namespacelibdap.html - a6cfae80981a6cc8aa55ab2fb437f4c82 - mime_util.cc - - - - set_mime_text - cpp - func - libdap - - namespacelibdap.html - aef829d3d34220c1f9db6cd02ae56847a - mime_util.cc - - - - set_mime_text - cpp - func - libdap - - namespacelibdap.html - a7a785b8fcc89e5be01284c06a9dbc97d - mime_util.cc - - - - set_mime_text - cpp - func - libdap - - namespacelibdap.html - ade7dc06f598ad61f115cc82264a0ed6c - mime_util.cc - - - - set_mime_html - cpp - func - libdap - - namespacelibdap.html - a244daa3bbc88d3d96624ec6359d07bcc - mime_util.cc - - - - set_mime_html - cpp - func - libdap - - namespacelibdap.html - a2d47123836f484835fd6d85d66ca0129 - mime_util.cc - - - - set_mime_html - cpp - func - libdap - - namespacelibdap.html - ac3041f3ea7e105872be409fdf78d745d - mime_util.cc - - - - set_mime_binary - cpp - func - libdap - - namespacelibdap.html - a57a713334cf4756cabd29e7468ef8bae - mime_util.cc - - - - set_mime_binary - cpp - func - libdap - - namespacelibdap.html - ae55c70a6b2073269d49dd7654d625710 - mime_util.cc - - - - set_mime_binary - cpp - func - libdap - - namespacelibdap.html - a0182d4b204fc9c5bb3e7216c34ed44df - mime_util.cc - - - - set_mime_multipart - cpp - func - libdap - - namespacelibdap.html - a8d713feb5dc68aa9ec81058f39ca9a95 - mime_util.cc - - - - set_mime_error - cpp - func - libdap - - namespacelibdap.html - a21859ebeabd395e729583e2b15328cfa - mime_util.cc - - - - set_mime_error - cpp - func - libdap - - namespacelibdap.html - ab2d00f30883d50ec4c6a7e48e489f8c0 - mime_util.cc - - - - set_mime_not_modified - cpp - func - libdap - - namespacelibdap.html - a46842454008837163552f30754a7388a - Send a `Not Modified&#39; response. - mime_util.cc - - - - set_mime_not_modified - cpp - func - libdap - - namespacelibdap.html - a9ff38622675d29e932726aea56525a40 - Send a `Not Modified&#39; response. - mime_util.cc - - - - size_ok - cpp - func - libdap - - namespacelibdap.html - a36c4fc80766718669c9790c6cb20c895 - sanitize the size of an array. Test for integer overflow when dynamically allocating an array... - util.cc - - - - pathname_ok - cpp - func - libdap - - namespacelibdap.html - a7c34f89476954f3a2fd0eaa1d1e8cd32 - Does the string name a potentially valid pathname? Test the given pathname to verify that it is a val... - util.cc - - - - libdap::AISConnect - c - cl - libdap::AISConnect - - classlibdap_1_1AISConnect.html - AISConnect.h - - - - AISConnect - cpp - instm - libdap::AISConnect - - classlibdap_1_1AISConnect.html - a30a96b7d5fde2d619185879a8dbcb264 - AISConnect.h - - - - AISConnect - cpp - instm - libdap::AISConnect - - classlibdap_1_1AISConnect.html - ad4142b6a66d33862c69e7f0846658d18 - AISConnect.h - - - - CE - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - a0e55cc99530cab779ae83984c2a22f51 - Get the Connect&#39;s constraint expression. - Connect.h - - - - get_protocol - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - a4223a898b3da719509d173dd990c45f1 - Connect.h - - - - get_version - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - a30fe6746add5a210d59b5dc9d678355f - Connect.h - - - - read_data - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - ae50d98d353023b9786c9bd5b0833a7de - Read data which is preceded by MIME headers. This method works for both data dds and data ddx respons... - Connect.h - - - - read_data_no_mime - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - a486b095a58614dfc2be0321035784306 - Read data from a file which does not have response MIME headers. This method is a companion to read_d... - Connect.h - - - - request_das - cpp - instm - libdap::AISConnect - - classlibdap_1_1AISConnect.html - acddb989623fc4e3aed42710a50f45178 - AISConnect.h - - - - request_das_url - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - abcf814710de1e252e74a4e1b72d3c6b3 - Get the DAS from a server. - Connect.h - - - - request_data - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - a814e98ac5e99927ccc79bb0feb32d241 - Get the DAS from a server. - Connect.h - - - - request_data_url - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - ac8582099411b8d74b03e761129df5b5c - Get the DAS from a server. - Connect.h - - - - request_dds - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - aad5ef370110577e9ca2a0161928f9efa - Get the DDS from a server. - Connect.h - - - - request_dds_url - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - a08795a9e160db409423fcd9058ba975d - Get the DDS from a server. - Connect.h - - - - request_ddx - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - a4395cc18cf5ec1a5167795a5a5491958 - Get the DDX from a server. - Connect.h - - - - request_ddx_url - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - a9a3e1fe01455b60a90a1974a7e871bb4 - The &#39;url&#39; version of request_ddx. - Connect.h - - - - request_protocol - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - aaa1ab562899da9a4630de01f943d1aa9 - Connect.h - - - - request_version - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - ac7a5896a09882004b75e581999940526 - Connect.h - - - - set_accept_deflate - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - a186f76bfea3b61dc3587bcff5760ed8b - Connect.h - - - - set_cache_enabled - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - a25c97c4ad0239a9dd10812c880c40efe - Connect.h - - - - set_credentials - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - a847af75e149f123a51a560119dfc06aa - Set the credentials for responding to challenges while dereferencing URLs. - Connect.h - - - - set_xdap_protocol - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - a4af759a2313d9ecbc1db1c811f549379 - Connect.h - - - - URL - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - a523bf24520185e3d71f36ac0203b98e6 - Get the object&#39;s URL. - Connect.h - - - - ~AISConnect - cpp - instm - libdap::AISConnect - - classlibdap_1_1AISConnect.html - a9e9aad50a31427df596f04b39fb15be3 - AISConnect.h - - - - libdap::AISDatabaseParser - c - cl - libdap::AISDatabaseParser - - classlibdap_1_1AISDatabaseParser.html - AISDatabaseParser.h - - - - intern - cpp - instm - libdap::AISDatabaseParser - - classlibdap_1_1AISDatabaseParser.html - abbe7487f5e9b25db0919cdf80c8ec2ce - AISDatabaseParser.h - - - - aisStartDocument - cpp - clm - libdap::AISDatabaseParser - - classlibdap_1_1AISDatabaseParser.html - a9fdcd3abdf636bcab9def08fba9895f8 - AISDatabaseParser.h - - - - aisEndDocument - cpp - clm - libdap::AISDatabaseParser - - classlibdap_1_1AISDatabaseParser.html - acf0d559e97ccd9bf16f46d3fed5e6fba - AISDatabaseParser.h - - - - aisStartElement - cpp - clm - libdap::AISDatabaseParser - - classlibdap_1_1AISDatabaseParser.html - a2e8fe3a27faf0140897a1e037ece43d0 - AISDatabaseParser.h - - - - aisEndElement - cpp - clm - libdap::AISDatabaseParser - - classlibdap_1_1AISDatabaseParser.html - ac9906556bd78127332d12d32d9e18184 - AISDatabaseParser.h - - - - aisGetEntity - cpp - clm - libdap::AISDatabaseParser - - classlibdap_1_1AISDatabaseParser.html - a7c8d19b0ebfb926e154a413d72165a90 - AISDatabaseParser.h - - - - aisWarning - cpp - clm - libdap::AISDatabaseParser - - classlibdap_1_1AISDatabaseParser.html - a2e896bce2dce2b89feb09f118db3bb50 - AISDatabaseParser.h - - - - aisError - cpp - clm - libdap::AISDatabaseParser - - classlibdap_1_1AISDatabaseParser.html - aec6c4f504d1278539045d468e35ff039 - AISDatabaseParser.h - - - - aisFatalError - cpp - clm - libdap::AISDatabaseParser - - classlibdap_1_1AISDatabaseParser.html - adb51810ab85a2f8dbe5537e6e79e9bb4 - AISDatabaseParser.h - - - - libdap::AISDatabaseReadFailed - c - cl - libdap::AISDatabaseReadFailed - - classlibdap_1_1AISDatabaseReadFailed.html - AISExceptions.h - - - - get_error_code - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - aaca0caca09e939602cade604cbc9824f - Error.h - - - - get_error_message - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - ab24a61e4974aae62962a40f9975e674c - Error.h - - - - OK - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - acf3ab60821773bd8b62284750b02cfc0 - Is the Error object valid? - Error.h - - - - parse - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - ac705b3c1cfab1f7530d66a974eb0e8b6 - Parse an Error object. - Error.h - - - - print - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a552d711be27e6695854bd2b977a5cf31 - Error.h - - - - print - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a4c58ef196c2b247bd37529bb7ad6a666 - Error.h - - - - set_error_code - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a47c0f4b6a38d8ca075d1056076d2845d - Error.h - - - - set_error_message - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a3ca90d33bf1c95529c9eefdfe8646e34 - Error.h - - - - what - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - accc5eeb469c8c18ec16dbf7fefe3cc41 - The pointer is valid only for the lifetime of the Error instance. jhrg 9/22/20. - Error.h - - - - libdap::AISDatabaseWriteFailed - c - cl - libdap::AISDatabaseWriteFailed - - classlibdap_1_1AISDatabaseWriteFailed.html - AISExceptions.h - - - - get_error_code - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - aaca0caca09e939602cade604cbc9824f - Error.h - - - - get_error_message - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - ab24a61e4974aae62962a40f9975e674c - Error.h - - - - OK - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - acf3ab60821773bd8b62284750b02cfc0 - Is the Error object valid? - Error.h - - - - parse - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - ac705b3c1cfab1f7530d66a974eb0e8b6 - Parse an Error object. - Error.h - - - - print - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a552d711be27e6695854bd2b977a5cf31 - Error.h - - - - print - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a4c58ef196c2b247bd37529bb7ad6a666 - Error.h - - - - set_error_code - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a47c0f4b6a38d8ca075d1056076d2845d - Error.h - - - - set_error_message - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a3ca90d33bf1c95529c9eefdfe8646e34 - Error.h - - - - what - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - accc5eeb469c8c18ec16dbf7fefe3cc41 - The pointer is valid only for the lifetime of the Error instance. jhrg 9/22/20. - Error.h - - - - libdap::AISMerge - c - cl - libdap::AISMerge - - classlibdap_1_1AISMerge.html - Merge AIS resources. - AISMerge.h - - - - AISMerge - cpp - instm - libdap::AISMerge - - classlibdap_1_1AISMerge.html - ac8bbb72add970ed61f8e5a98ae269571 - AISMerge.h - - - - get_ais_resource - cpp - instm - libdap::AISMerge - - classlibdap_1_1AISMerge.html - a998f5e989f6707d1a4c40a1f6b22b8a7 - AISMerge.h - - - - merge - cpp - instm - libdap::AISMerge - - classlibdap_1_1AISMerge.html - a39cdca8a9bcf3834f826ebbb45694961 - AISMerge.h - - - - ~AISMerge - cpp - instm - libdap::AISMerge - - classlibdap_1_1AISMerge.html - a51595e4888180773cf9bfcd26f6c80d8 - AISMerge.h - - - - libdap::AISResources - c - cl - libdap::AISResources - - classlibdap_1_1AISResources.html - Manage AIS resources. - AISResources.h - - - - AISResources - cpp - instm - libdap::AISResources - - classlibdap_1_1AISResources.html - a1bc02aaf8ce2ade3aae43cdb9ae52da7 - AISResources.h - - - - AISResources - cpp - instm - libdap::AISResources - - classlibdap_1_1AISResources.html - ad78ad28fe4984fc735cbe2acca8d298c - AISResources.h - - - - get_resource - cpp - instm - libdap::AISResources - - classlibdap_1_1AISResources.html - a35cb470d61a9e94a013520f45514f600 - AISResources.h - - - - has_resource - cpp - instm - libdap::AISResources - - classlibdap_1_1AISResources.html - a5db1857c00f33c7962ba02f7ffff08ef - AISResources.h - - - - read_database - cpp - instm - libdap::AISResources - - classlibdap_1_1AISResources.html - aa8bef9e8affa5cdffbf40a6a73935fd3 - AISResources.h - - - - write_database - cpp - instm - libdap::AISResources - - classlibdap_1_1AISResources.html - a2867d445f918e4902ec6fe45c695ebb1 - AISResources.h - - - - add_url_resource - cpp - instm - libdap::AISResources - - classlibdap_1_1AISResources.html - adc3494e028bbacd2fc2e1c34f929fad4 - AISResources.h - - - - add_url_resource - cpp - instm - libdap::AISResources - - classlibdap_1_1AISResources.html - a84c7411fe8b00a2f96a578695cca676a - AISResources.h - - - - add_regexp_resource - cpp - instm - libdap::AISResources - - classlibdap_1_1AISResources.html - abb38b5dda71db72797538218ae16305d - AISResources.h - - - - add_regexp_resource - cpp - instm - libdap::AISResources - - classlibdap_1_1AISResources.html - a596d28e5be60838234b3efe64532e25f - AISResources.h - - - - operator<< - cpp - ffunc - libdap::AISResources - - classlibdap_1_1AISResources.html - a56056b9b3a7729494d6790e56394abbb - AISResources.h - - - - libdap::AlarmHandler - c - cl - libdap::AlarmHandler - - classlibdap_1_1AlarmHandler.html - AlarmHandler.h - - - - AlarmHandler - cpp - instm - libdap::AlarmHandler - - classlibdap_1_1AlarmHandler.html - a27edcc310cb14706adb1dd42eb50e136 - AlarmHandler.h - - - - handle_signal - cpp - instm - libdap::AlarmHandler - - classlibdap_1_1AlarmHandler.html - abe52f8939c85b0285c2a8cb48b970a9b - AlarmHandler.h - - - - libdap::Ancillary - c - cl - libdap::Ancillary - - classlibdap_1_1Ancillary.html - - - - find_ancillary_file - cpp - clm - libdap::Ancillary - - classlibdap_1_1Ancillary.html - ab1bcf7b1c9c9dc3d981db69aa58f24c1 - Find a file with ancillary data. - Ancillary.h - - - - find_group_ancillary_file - cpp - clm - libdap::Ancillary - - classlibdap_1_1Ancillary.html - a2732498600d700e6fb806db2ba39d024 - Ancillary.h - - - - libdap::Array - c - cl - libdap::Array - - classlibdap_1_1Array.html - A multidimensional array of identical data types. - Array.h - - - - Dim_citer - cpp - tdef - libdap::Array - - classlibdap_1_1Array.html - aa36e3487697c25295d1b74a346b82720 - - - - Dim_iter - cpp - tdef - libdap::Array - - classlibdap_1_1Array.html - a7a557c05085a83d1501dbfa249d3cc52 - - - - add_constraint - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - a538f7c336e26b873f50e033d553bba26 - Adds a constraint to an Array dimension. - Array.h - - - - add_var - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - ac9a68fa480403f9b80285073c653570c - Add the BaseType pointer to this constructor type instance. - Array.h - - - - append_dim - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - a76e2d807204976c179ca07e7a3f6f142 - Add a dimension of a given size. - Array.h - - - - Array - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - ae9a0d029981757fdb6b67c6c020c37e0 - Array constructor. - Array.h - - - - Array - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - a3c9bb7698219bdcdc4dba1fa38543975 - Array constructor. - Array.h - - - - Array - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - a893a3fa9df80aae3ec926037fd2debea - The Array copy constructor. - Array.h - - - - buf2val - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - af20a56a72c3108b31418ebf01f779253 - Copies data from the Vector buffer. - Vector.h - - - - check_semantics - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - aa2dcec843f64da6142a7a3208651a5e4 - Check semantic features of the Array. - Array.h - - - - clear_all_dims - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - a9640d5aa2c37123f06220b9c3d77ce82 - Array.h - - - - clear_constraint - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - a151f9eaea5f7b22980b1ef86c75723ce - Clears the projection; add each projected dimension explicitly using add_constraint. - Array.h - - - - clear_local_data - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - ac12023f8bf9ecc97998c3bb021ba2772 - Vector.h - - - - compute_checksum - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a9c61fcb646f1813e350549b6ddf48204 - include the data for this variable in the checksum DAP4 includes a checksum with every data response... - Vector.h - - - - d4_ops - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a512a356f31ed6c4c1a368da0b054408a - Evaluator a relop for DAP4. - BaseType.h - - - - dataset - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a47521ce321a17e6ce217870cb6a1a7aa - Returns the name of the dataset used to create this instance. - BaseType.h - - - - deserialize - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - aba86cc0f3915d85e37f4b9e00ebfde7e - Receive data from the net. - Vector.h - - - - deserialize - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - ad78d293754a1d78b90c86f8e33c22bec - Vector.h - - - - dim_begin - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - ae6e6943cd895fa8dc1c58621ffad42a0 - Array.h - - - - dim_end - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - a1e6b13c4a5d3e825df7ebae3a9dc300d - Array.h - - - - dimension_name - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - a594eec9c83ef39c93f735e6cc3216c8b - Returns the name of the specified dimension. - Array.h - - - - dimension_size - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - a8f29497af9c33c0d66939d5f9a16d92a - Returns the size of the dimension. - Array.h - - - - dimension_start - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - a12084880777d27d782b0e1f2f4d5ae01 - Return the start index of a dimension. - Array.h - - - - dimension_stop - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - a446f239be3ef678a4476058c8041552a - Return the stop index of the constraint. - Array.h - - - - dimension_stride - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - afc530e71ace953992a5b314a6f885d31 - Returns the stride value of the constraint. - Array.h - - - - dimensions - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - afa75d1ff3c75b8359d03b3f382bfd179 - Return the total number of dimensions in the array. - Array.h - - - - dump - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - a19bf36db03a5a700c80ec33e76bfc9a6 - dumps information about this object - Array.h - - - - element_count - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - ab78981c9e05e7d1dc24f913dbd2021d7 - Count the members of constructor types. - Vector.h - - - - FQN - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - BaseType.h - - - - get_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1fcd9537c67e3bf88964b2656ff5bac1 - BaseType.h - - - - get_buf - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a285ee3b0cc0adf6a54ea388ea71a69fc - Vector.h - - - - get_compound_buf - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - ad6d99474ab74d8b9752e4e77b3350121 - Vector.h - - - - get_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a3459cdaa239c33ce111ef360d8dc3017 - BaseType.h - - - - get_str - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - ab53f2eb57de3f0f99961f6ab6f470638 - Vector.h - - - - get_value_capacity - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a16b89988deda0413d1eb2cdc615a38df - Vector.h - - - - intern_data - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a6b5ee8fec4de3700e2564a64ef4f6d76 - read data into a variable for later use - Vector.h - - - - intern_data - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - abe772a228c62c7960bf2eb92be77732f - Read data into this variable. - Vector.h - - - - is_constructor_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8b8490e0047c6da52945699a132008ea - Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable... - BaseType.h - - - - is_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - Is this variable part of the current selection? - BaseType.h - - - - is_simple_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aae57e5b270b3a015d40c8db10b9b5549 - Returns true if the instance is a numeric, string or URL type variable. - BaseType.h - - - - is_vector_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a7107c76dbcab71015141142383b6d022 - Returns true if the instance is a vector (i.e., array) type variable. - BaseType.h - - - - length - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a2476a541aad16bedc64d99805fcc9c0c - Vector.h - - - - name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a24c5d67823b3cff7f4245a993072a142 - Returns the name of the class instance. - BaseType.h - - - - ops - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8a0000be2a244e3e07abda3020af8800 - Evaluate relational operators. - BaseType.h - - - - prepend_dim - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - adcb475b8a855515df7d9ddd254c3f08a - Array.h - - - - print_as_map_xml - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - abafb35e8c77673793f2d3897ca1eec4b - Array.h - - - - print_as_map_xml - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - a5a3d7064fae4cfc94d4fc9026fce0667 - Array.h - - - - print_dap4 - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - a976af6f6189ee1f404cd7995df51eabc - Print the DAP4 representation of an array. - Array.h - - - - print_decl - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - a62456490e14832bd55b9b79d6e37397a - Prints a DDS entry for the Array. - Array.h - - - - print_decl - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - ada4cee027a63ce185940fd8c019741d7 - Prints a DDS entry for the Array. - Array.h - - - - print_val - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - af7bdf05ad5a57a517aa6b122b03f06df - Prints the value of the variable. - Array.h - - - - print_val - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - aedea9b76dc355fde465f8163d80fafbb - Prints the value of the variable. - Array.h - - - - print_xml - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - a3ce1bd161426e6950dc97511f33b2845 - Array.h - - - - print_xml - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - a630bb8bac280ba540af9035df5968c2b - Array.h - - - - print_xml_core - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - ad38718861c5dd21a677746a2211059f1 - Array.h - - - - print_xml_core - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - a29755e9dcff905940b9ee6138ee556be - Array.h - - - - print_xml_writer - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - af27b27e6edec29098e938bd7bb26d8f6 - Array.h - - - - ptr_duplicate - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - a31dc321bd9314239474f30d290e0599a - Array.h - - - - read - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1da003c53f2e663223f603ab3fbd7c8e - Read data into a local buffer. - BaseType.h - - - - read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a38ff819a432217c55db2e9071928d20c - Has this variable been read? - BaseType.h - - - - rename_dim - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - a843af00a8cdb4e4c87eae166d57db5d4 - Renames dimension. - Array.h - - - - reserve_value_capacity - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - aaaa7c0f36266ef3df9f4fb90de220867 - Vector.h - - - - reserve_value_capacity - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - adade15ffa55c59f6205e1c3c9ea78a35 - Vector.h - - - - reset_constraint - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - ac375d728d50c8b27422c766c84e12300 - Reset constraint to select entire array. - Array.h - - - - send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a980c0013817836aa77ef74aeec7fb192 - Should this variable be sent? - BaseType.h - - - - serialize - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a993d46232faadb5914cc0519d013e9b2 - Serialize a Vector. - Vector.h - - - - serialize - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - af478e3d5cbb3235081fe8daa6d6629a9 - The DAP4 serialization method. Serialize a variable&#39;s values for DAP4. This does not write the DMR pe... - Vector.h - - - - set_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a572a1d76a75981abac83a4241e90c0fa - BaseType.h - - - - set_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2bc036248cdaf1affac464170f32ad30 - BaseType.h - - - - set_length - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a05a61e24fd295934dfc3c37c9f55ca57 - Vector.h - - - - set_name - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - aacfca48c7db65e3a2c3c94734dee8c36 - Sets the name of the class instance. - Vector.h - - - - set_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - BaseType.h - - - - set_read_p - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a58712de8871e28a48fdc95e72a09df71 - Indicates that the data is ready to send. - Vector.h - - - - set_send_p - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a64815467570490a4a6cddc89f09a2413 - Indicates that the data is ready to send. - Vector.h - - - - set_synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a595cb4059cff24f801a1b6da79bd2f9e - BaseType.h - - - - set_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af74f8d1ef57c9fcca46f620f75d175a3 - Sets the type of the class instance. - BaseType.h - - - - set_value_slice_from_row_major_vector - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a559d8ca948ca40f179e4e3da0bfdfdc4 - Vector.h - - - - set_vec - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a8bf6e565dcb2eab1f3f7037518a9acb3 - Sets element i to value val. - Vector.h - - - - set_vec_nocopy - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a175f1a51686798061c2147f2eccde33a - Sets element i to value val. Set the ith element to val. Extend the vector if needed. - Vector.h - - - - synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae64e677da27249473cdba0b60cdbb90a - BaseType.h - - - - toString - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a701eb3361f5b5628329ece019cd34519 - BaseType.h - - - - transfer_attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - add8e836c622042a339152a6c31e5bdfb - BaseType.h - - - - transform_to_dap2 - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - a1cc230189460ef65076e8091cf3b6e36 - Transforms this instance of a D4Array into the corresponding DAP2 object. - Array.h - - - - transform_to_dap4 - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - a2dea8a711559cb0e0b9c36bf41df6473 - DAP2 to DAP4 transform. - Array.h - - - - type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - Returns the type of the class instance. - BaseType.h - - - - type_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a18a42c8ec35cb5b15cd651a4152f8a2c - Returns the type of the class instance as a string. - BaseType.h - - - - update_length - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - a4c4fe08ce144a3fa2d6b15b7ae15ccc0 - Array.h - - - - val2buf - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a96ecf84f2798065878755d9a9014ee69 - Reads data into the Vector buffer. - Vector.h - - - - var - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - aa5ccb30d1f27ae587f35216b859feec7 - Vector.h - - - - var - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - ac07a950727d2ac58934ba4cc03206c8d - Vector.h - - - - var - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - adf286762e63295675850c41cedf33370 - Vector.h - - - - vec_resize - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - ad180a87244b0b6f32b47711a4ae0330e - Vector.h - - - - width - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a8fe5d7b06814653b6cf5408b2a8671db - Returns the width of the data, in bytes. - Vector.h - - - - ~Array - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - ad30dc4754b0040a453d00cf5e0b4ddb7 - The Array destructor. - Array.h - - - - set_value - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - abd6e429e907214c593b6fb37f97511ee - set the value of a string or url array - Vector.h - - - - set_value - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a068afd2353ad32f904361253e1b6e807 - set the value of a string or url array - Vector.h - - - - value - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a0725f0e3304f9ad00bf90a19b5650368 - Get a copy of the data held by this variable. - Vector.h - - - - value - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - af9fd1c331a511989ac2bf4a0ad5b27da - Get a copy of the data held by this variable using the passed subsetIndex vector to identify which va... - Vector.h - - - - value - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - aca5000630369cb4217827c2f136afec0 - Vector.h - - - - attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a97452f06d2188eb838399a709246b5e9 - BaseType.h - - - - m_create_cardinal_data_buffer_for_type - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - af175806a557f627a0ee70c5f05ed7c5c - Vector.h - - - - m_delete_cardinal_data_buffer - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - ad2e46d6d52fcb609658baf5ac1f9892e - Vector.h - - - - m_duplicate - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a0c55b826c8c5dfe7a454dc670e859a41 - Perform a deep copy. - BaseType.h - - - - m_is_cardinal_type - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - ac00c2a2ebd65c86022b82dfb1a32485c - Vector.h - - - - m_set_cardinal_values_internal - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a1fb2c5dc539e55203fc61845089c67e8 - Vector.h - - - - print_array - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - a435534a45cea53181d30dc09d46734a7 - Print the value given the current constraint. - Array.h - - - - print_array - cpp - instm - libdap::Array - - classlibdap_1_1Array.html - a88a4492771892695010496d2dfb6071e - Print the value given the current constraint. - Array.h - - - - libdap::Array::dimension - c - cl - libdap::Array::dimension - - structlibdap_1_1Array_1_1dimension.html - Array.h - - - - c_size - cpp - data - libdap::Array::dimension - - structlibdap_1_1Array_1_1dimension.html - afe3967fd170363af8cf22785e500e6e6 - Size of dimension once constrained. - - - - dim - cpp - data - libdap::Array::dimension - - structlibdap_1_1Array_1_1dimension.html - a4b4b2890af4664c2708fb2097e7e76b8 - If not null, a weak pointer to the D4Dimension. - - - - name - cpp - data - libdap::Array::dimension - - structlibdap_1_1Array_1_1dimension.html - a3a669f3c6655d1abe8d425ea2ee9b6f1 - The name of this dimension. - - - - size - cpp - data - libdap::Array::dimension - - structlibdap_1_1Array_1_1dimension.html - a9755d2f4f1ee36ef45c6d72ab2231841 - The unconstrained dimension size. - - - - start - cpp - data - libdap::Array::dimension - - structlibdap_1_1Array_1_1dimension.html - a6f00f58d28ba435d093c5e7f1683dde3 - The constraint start index. - - - - stop - cpp - data - libdap::Array::dimension - - structlibdap_1_1Array_1_1dimension.html - ac5f0e3960dde02014e031d6a3e457c4c - The constraint end index. - - - - stride - cpp - data - libdap::Array::dimension - - structlibdap_1_1Array_1_1dimension.html - a056a67e3c91acd7c815f279c2dab2ea8 - The constraint stride. - - - - use_sdim_for_slice - cpp - data - libdap::Array::dimension - - structlibdap_1_1Array_1_1dimension.html - a6b32a6d4afbc18a696217ffff0a6ea4e - Used to control printing the DMR in data responses. - - - - libdap::AttrTable - c - cl - libdap::AttrTable - - classlibdap_1_1AttrTable.html - Contains the attributes for a dataset. - AttrTable.h - - - - add_container_alias - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - acd28a0951ff0764a6d740fbc30d3052f - Add an alias to a container held by this attribute table. - AttrTable.h - - - - add_value_alias - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - a77971a429d7c23360fd41a4df177489c - Add an alias for an attribute. - AttrTable.h - - - - append_attr - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - a7a526505d174c7a2f33e6b57761f8bc4 - Add an attribute to the table. - AttrTable.h - - - - append_attr - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - a5b55410e211497f89ebcfad559920cbf - Add an attribute to the table. - AttrTable.h - - - - append_container - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - a03f3a1197f9529d4c0328830c765cfe1 - Add a container to the attribute table. - AttrTable.h - - - - append_container - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - aa731fefe3e52fb193f7f2b5a39e04a4d - Add a container to the attribute table. - AttrTable.h - - - - attr_alias - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - a2b9a67d2cc96dee860e6fb2d713a8252 - Adds an alias to the set of attributes. - AttrTable.h - - - - attr_alias - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - aaf0369980f799252f9f133390c8b4d79 - AttrTable.h - - - - dump - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - adf622bbd401676f089b194812bac7290 - dumps information about this object - AttrTable.h - - - - erase - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - aad6a9557cc76cfb925e55077e0470859 - Erase the attribute table. - AttrTable.h - - - - find - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - a33653c34e856e2e5fc0578240eb7a959 - AttrTable.h - - - - find_container - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - ae403d070910c829f74a59fbf4648588f - Find an attribute with a given name. - AttrTable.h - - - - get_name - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - aaaec827895fd8897594969159f1203e6 - Get the name of this attribute table. - AttrTable.h - - - - get_parent - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - ac5889e66ffa861ce098628de19840d89 - AttrTable.h - - - - get_size - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - acdacb74f3a5f5c8ce7eb022562a8f971 - Get the number of entries in this attribute table. - AttrTable.h - - - - print - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - acc2d83b4f1c8e704a6f83ff966a999c8 - Prints the attribute table. - AttrTable.h - - - - print - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - a785014928633842a93352cc05038ea38 - Prints the attribute table. - AttrTable.h - - - - print_dap4 - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - a93a445b9e6fb665076834e99dd7e4a0e - AttrTable.h - - - - print_xml - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - a5e27ea09f83831eded1b3d86de7f4534 - AttrTable.h - - - - print_xml - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - a21ee9e5f68e06fb698ef93553dcdc592 - AttrTable.h - - - - print_xml_writer - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - ab85de16a14335a3c1b757ae271d13644 - AttrTable.h - - - - recurrsive_find - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - aefdc93c9514013ebd644488cd8365924 - AttrTable.h - - - - set_name - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - a3d09ff6bf5a12789308b20440dcaf302 - Set the name of this attribute table. - AttrTable.h - - - - simple_find - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - ae7824f413ad036d91df0ef62cac14351 - AttrTable.h - - - - get_attr_table - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - a4010172de5c41cd88f2422d5e1975522 - Get an attribute container. - AttrTable.h - - - - get_type - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - a689563c3beb8e6f571387c5105821f27 - Get the type name of an attribute within this attribute table. - AttrTable.h - - - - get_attr_type - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - aefcd82370930ba94a288f135d9417a93 - Get the type of an attribute. - AttrTable.h - - - - get_attr_num - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - a1c86cb6c91dfdc37b9787828dd09483c - Get the number of attributes in this container. - AttrTable.h - - - - get_attr_vector - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - a7352d886789e9e38d530fc44c6cbef30 - Get a vector-valued attribute. - AttrTable.h - - - - del_attr - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - a9c8feb09ec38a783817bcd2fbd3421c8 - Deletes an attribute. - AttrTable.h - - - - attr_begin - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - a8881bb7044577dae3098f4a1d8bf4f2f - AttrTable.h - - - - attr_end - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - a543955729bad6b7a9d1d6b336596b1ba - AttrTable.h - - - - get_attr_iter - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - a8b9dd1020a256e884747e8ecf57c10a3 - AttrTable.h - - - - get_name - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - ad7ce1789497599e99014696aa5afe736 - AttrTable.h - - - - is_container - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - a2ca5cf1e2aa163259b00affe49547a0d - AttrTable.h - - - - get_attr_table - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - afd8cf7a6bf36504f48eda8a6ff11a56c - AttrTable.h - - - - del_attr_table - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - abcdd3b10325085a3dd345343df159e48 - AttrTable.h - - - - get_type - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - abfdfb5b51ff84a41596ebf0f28ca77df - AttrTable.h - - - - get_attr_type - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - a0893b78039439185dd39c69beaf0324e - AttrTable.h - - - - get_attr_num - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - acd12f3bd820be114b3cc3dd97aad7d89 - AttrTable.h - - - - get_attr - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - a060eb65435ff7deb0905c640f17b35dc - AttrTable.h - - - - get_attr_vector - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - a19f9153c5bad64f5bc783d493ffa0733 - AttrTable.h - - - - clone - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - a4fa4213ffc8bd5ab96ff6ba148fd9eb1 - AttrTable.h - - - - simple_print - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - a1abee354d7f609ed55b849b0431bc48f - AttrTable.h - - - - simple_print - cpp - instm - libdap::AttrTable - - classlibdap_1_1AttrTable.html - ae167683da221e8d64aaf2fab58dbf22f - AttrTable.h - - - - libdap::AttrTable::entry - c - cl - libdap::AttrTable::entry - - structlibdap_1_1AttrTable_1_1entry.html - AttrTable.h - - - - libdap::BaseType - c - cl - libdap::BaseType - - classlibdap_1_1BaseType.html - The basic data type for the DODS DAP types. - BaseType.h - - - - add_var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adca3c2621c4a509537c18362005d7f7f - Add a variable. - BaseType.h - - - - BaseType - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af4a9a00892a89fea323acbc391aeef32 - The BaseType constructor. - BaseType.h - - - - BaseType - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a3100d033d3d321486f0f2939fcb2b14a - The BaseType constructor. - BaseType.h - - - - BaseType - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae11f0e6e4286438aad85bf01dba8ddfd - The BaseType copy constructor. - BaseType.h - - - - check_semantics - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aec503abec2fd3090e7738c0a575491f8 - Compare an object&#39;s current state with the semantics of its type. - BaseType.h - - - - clear_local_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aaddb97a4efbe035f41deaf03c6e8683f - BaseType.h - - - - d4_ops - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a512a356f31ed6c4c1a368da0b054408a - Evaluator a relop for DAP4. - BaseType.h - - - - dataset - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a47521ce321a17e6ce217870cb6a1a7aa - Returns the name of the dataset used to create this instance. - BaseType.h - - - - dump - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adea4e1a5116f488343825c9657e92ffe - dumps information about this object - BaseType.h - - - - element_count - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5c2235737737b482bfa7536b8aeab810 - Count the members of constructor types. - BaseType.h - - - - FQN - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - BaseType.h - - - - get_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1fcd9537c67e3bf88964b2656ff5bac1 - BaseType.h - - - - get_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a3459cdaa239c33ce111ef360d8dc3017 - BaseType.h - - - - is_constructor_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8b8490e0047c6da52945699a132008ea - Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable... - BaseType.h - - - - is_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - Is this variable part of the current selection? - BaseType.h - - - - is_simple_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aae57e5b270b3a015d40c8db10b9b5549 - Returns true if the instance is a numeric, string or URL type variable. - BaseType.h - - - - is_vector_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a7107c76dbcab71015141142383b6d022 - Returns true if the instance is a vector (i.e., array) type variable. - BaseType.h - - - - length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aadcda7a659157bc6a832d8a5fb775b3f - How many elements are in this variable. - BaseType.h - - - - name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a24c5d67823b3cff7f4245a993072a142 - Returns the name of the class instance. - BaseType.h - - - - ops - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8a0000be2a244e3e07abda3020af8800 - Evaluate relational operators. - BaseType.h - - - - print_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afcddbe441380b95c894510c02980b163 - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2d799fad93255d7f2b803562ae7a5784 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afd744b0ddeb04e7b173c9e83423ec572 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a825820edee179550cfde3dfd4d274f2a - BaseType.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8bd2c7682edd48c64b210bdf247bdef7 - BaseType.h - - - - print_xml_writer - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a11554ff931528b243e9af8173d205b44 - BaseType.h - - - - ptr_duplicate - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a0b130311c9901fb8a7ab11ea19090ef0 - BaseType.h - - - - read - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1da003c53f2e663223f603ab3fbd7c8e - Read data into a local buffer. - BaseType.h - - - - read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a38ff819a432217c55db2e9071928d20c - Has this variable been read? - BaseType.h - - - - send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a980c0013817836aa77ef74aeec7fb192 - Should this variable be sent? - BaseType.h - - - - set_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a572a1d76a75981abac83a4241e90c0fa - BaseType.h - - - - set_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2bc036248cdaf1affac464170f32ad30 - BaseType.h - - - - set_length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4fe343c1eeb6fb1d61ab030433651d90 - Set the number of elements for this variable. - BaseType.h - - - - set_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a86504564f45a3e6748c6f1cc0ff4e9fa - Sets the name of the class instance. - BaseType.h - - - - set_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - BaseType.h - - - - set_read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4533905a450d2a7af32e7d5acd557676 - Sets the value of the read_p property. - BaseType.h - - - - set_send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aba7b27635c95b74536de18393133628e - BaseType.h - - - - set_synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a595cb4059cff24f801a1b6da79bd2f9e - BaseType.h - - - - set_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af74f8d1ef57c9fcca46f620f75d175a3 - Sets the type of the class instance. - BaseType.h - - - - synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae64e677da27249473cdba0b60cdbb90a - BaseType.h - - - - toString - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a701eb3361f5b5628329ece019cd34519 - BaseType.h - - - - transfer_attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - add8e836c622042a339152a6c31e5bdfb - BaseType.h - - - - transform_to_dap2 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - affec8a11e9cc035d4b1e8fb9a87b2072 - DAP4 to DAP2 transform. - BaseType.h - - - - transform_to_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adb03e2e1e40c3c888577c4666831a949 - DAP2 to DAP4 transform. - BaseType.h - - - - type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - Returns the type of the class instance. - BaseType.h - - - - type_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a18a42c8ec35cb5b15cd651a4152f8a2c - Returns the type of the class instance as a string. - BaseType.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4dc4fac1bb6083f6db645f37bfd59b85 - Returns a pointer to a member of a constructor class. - BaseType.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adecfc442b5927c79933c7f71cfe03fd2 - BaseType.h - - - - width - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a433dcd53f227a431c6479234d1b52220 - How many bytes does this variable use Return the number of bytes of storage this variable uses... - BaseType.h - - - - attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a97452f06d2188eb838399a709246b5e9 - BaseType.h - - - - buf2val - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - accb15b7411e1988ef0a085ebdc88ce5d - Reads the class data. - BaseType.h - - - - val2buf - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ac360679317a411d7812ca235a1528281 - Loads class data. - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a722d33783aa0272d339b0301a4f77e59 - BaseType.h - - - - serialize - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adc24a735977e28acb0e6f78667c1dd21 - Move data to the net, then remove them from the object. - BaseType.h - - - - compute_checksum - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adacd263e05baa44861eec811037dee05 - include the data for this variable in the checksum DAP4 includes a checksum with every data response... - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1956e6ea90a745516f5372c859173433 - Read data into this variable. - BaseType.h - - - - serialize - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a30331db8b6a7cdc843652376fa683b71 - The DAP4 serialization method. Serialize a variable&#39;s values for DAP4. This does not write the DMR pe... - BaseType.h - - - - deserialize - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1f27d99250e857efd86ac9db788bbf1b - Receive data from the net. - BaseType.h - - - - deserialize - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a10101e702d03e2a30ebecc341ebc7a08 - BaseType.h - - - - print_val - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afb5e13838a599ec0efe2adbb2ae18f47 - Prints the value of the variable. - BaseType.h - - - - print_val - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a94edd5b610afb1432144158740710488 - Prints the value of the variable. - BaseType.h - - - - m_duplicate - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a0c55b826c8c5dfe7a454dc670e859a41 - Perform a deep copy. - BaseType.h - - - - libdap::BaseTypeFactory - c - cl - libdap::BaseTypeFactory - - classlibdap_1_1BaseTypeFactory.html - BaseTypeFactory.h - - - - NewVariable - cpp - instm - libdap::BaseTypeFactory - - classlibdap_1_1BaseTypeFactory.html - a1ac2aff8a85bbfba4c012e01f087149c - BaseTypeFactory.h - - - - ptr_duplicate - cpp - instm - libdap::BaseTypeFactory - - classlibdap_1_1BaseTypeFactory.html - a7715687224ed81f7e94b3af463ca5b8b - BaseTypeFactory.h - - - - libdap::Byte - c - cl - libdap::Byte - - classlibdap_1_1Byte.html - Holds a single byte. - Byte.h - - - - add_var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adca3c2621c4a509537c18362005d7f7f - Add a variable. - BaseType.h - - - - buf2val - cpp - instm - libdap::Byte - - classlibdap_1_1Byte.html - a2de44757203d23419d59c8731ca0b96c - Reads the class data. - Byte.h - - - - Byte - cpp - instm - libdap::Byte - - classlibdap_1_1Byte.html - a6b22d844cd6418102466954f8e1e3106 - The Byte constructor. - Byte.h - - - - Byte - cpp - instm - libdap::Byte - - classlibdap_1_1Byte.html - aa0470214af169a5e1c080baa8257fbba - The Byte server-side constructor. - Byte.h - - - - check_semantics - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aec503abec2fd3090e7738c0a575491f8 - Compare an object&#39;s current state with the semantics of its type. - BaseType.h - - - - clear_local_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aaddb97a4efbe035f41deaf03c6e8683f - BaseType.h - - - - compute_checksum - cpp - instm - libdap::Byte - - classlibdap_1_1Byte.html - a9aceffe3fc1b898adf50ce44151c2444 - include the data for this variable in the checksum DAP4 includes a checksum with every data response... - Byte.h - - - - d4_ops - cpp - instm - libdap::Byte - - classlibdap_1_1Byte.html - a44a8efbbd1e0423b4959bc76baf92dfd - Byte.h - - - - dataset - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a47521ce321a17e6ce217870cb6a1a7aa - Returns the name of the dataset used to create this instance. - BaseType.h - - - - deserialize - cpp - instm - libdap::Byte - - classlibdap_1_1Byte.html - a11a4fa1e2e5c6477c38af9fa5c3118b4 - Deserialize the char on stdin and put the result in _BUF. - Byte.h - - - - deserialize - cpp - instm - libdap::Byte - - classlibdap_1_1Byte.html - a9ffbfab78e18db036bfcf03fd0afc05c - Byte.h - - - - dump - cpp - instm - libdap::Byte - - classlibdap_1_1Byte.html - a3cf81110f37a9b2d31a491de936b6d51 - dumps information about this object - Byte.h - - - - element_count - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5c2235737737b482bfa7536b8aeab810 - Count the members of constructor types. - BaseType.h - - - - FQN - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - BaseType.h - - - - get_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1fcd9537c67e3bf88964b2656ff5bac1 - BaseType.h - - - - get_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a3459cdaa239c33ce111ef360d8dc3017 - BaseType.h - - - - is_constructor_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8b8490e0047c6da52945699a132008ea - Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable... - BaseType.h - - - - is_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - Is this variable part of the current selection? - BaseType.h - - - - is_simple_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aae57e5b270b3a015d40c8db10b9b5549 - Returns true if the instance is a numeric, string or URL type variable. - BaseType.h - - - - is_vector_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a7107c76dbcab71015141142383b6d022 - Returns true if the instance is a vector (i.e., array) type variable. - BaseType.h - - - - length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aadcda7a659157bc6a832d8a5fb775b3f - How many elements are in this variable. - BaseType.h - - - - name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a24c5d67823b3cff7f4245a993072a142 - Returns the name of the class instance. - BaseType.h - - - - ops - cpp - instm - libdap::Byte - - classlibdap_1_1Byte.html - ad97b380875f85f6e7c3d02488f209afa - Evaluate relational operators. - Byte.h - - - - print_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afcddbe441380b95c894510c02980b163 - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2d799fad93255d7f2b803562ae7a5784 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afd744b0ddeb04e7b173c9e83423ec572 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_val - cpp - instm - libdap::Byte - - classlibdap_1_1Byte.html - a54af53582af918c4a94ad98ba9845630 - Prints the value of the variable. - Byte.h - - - - print_val - cpp - instm - libdap::Byte - - classlibdap_1_1Byte.html - adc3565bb42fd7454205e61a8f16119e4 - Prints the value of the variable. - Byte.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a825820edee179550cfde3dfd4d274f2a - BaseType.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8bd2c7682edd48c64b210bdf247bdef7 - BaseType.h - - - - print_xml_writer - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a11554ff931528b243e9af8173d205b44 - BaseType.h - - - - ptr_duplicate - cpp - instm - libdap::Byte - - classlibdap_1_1Byte.html - a599c7dec30fe35df45c9a66cbb7030be - Byte.h - - - - read - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1da003c53f2e663223f603ab3fbd7c8e - Read data into a local buffer. - BaseType.h - - - - read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a38ff819a432217c55db2e9071928d20c - Has this variable been read? - BaseType.h - - - - send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a980c0013817836aa77ef74aeec7fb192 - Should this variable be sent? - BaseType.h - - - - serialize - cpp - instm - libdap::Byte - - classlibdap_1_1Byte.html - aa70aeb6aaddd570ed5bc32215b53c88e - Byte.h - - - - serialize - cpp - instm - libdap::Byte - - classlibdap_1_1Byte.html - a2799f2bb1a9f1992ec57c7f31761abe1 - Serialize a Byte. - Byte.h - - - - set_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a572a1d76a75981abac83a4241e90c0fa - BaseType.h - - - - set_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2bc036248cdaf1affac464170f32ad30 - BaseType.h - - - - set_length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4fe343c1eeb6fb1d61ab030433651d90 - Set the number of elements for this variable. - BaseType.h - - - - set_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a86504564f45a3e6748c6f1cc0ff4e9fa - Sets the name of the class instance. - BaseType.h - - - - set_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - BaseType.h - - - - set_read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4533905a450d2a7af32e7d5acd557676 - Sets the value of the read_p property. - BaseType.h - - - - set_send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aba7b27635c95b74536de18393133628e - BaseType.h - - - - set_synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a595cb4059cff24f801a1b6da79bd2f9e - BaseType.h - - - - set_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af74f8d1ef57c9fcca46f620f75d175a3 - Sets the type of the class instance. - BaseType.h - - - - set_value - cpp - instm - libdap::Byte - - classlibdap_1_1Byte.html - ad79ed596e502d99c450a8a1e23b381b7 - Byte.h - - - - synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae64e677da27249473cdba0b60cdbb90a - BaseType.h - - - - toString - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a701eb3361f5b5628329ece019cd34519 - BaseType.h - - - - transfer_attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - add8e836c622042a339152a6c31e5bdfb - BaseType.h - - - - transform_to_dap2 - cpp - instm - libdap::Byte - - classlibdap_1_1Byte.html - a21e180be842b140b3d0772dc94ab4583 - DAP4 to DAP2 transform. - Byte.h - - - - transform_to_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adb03e2e1e40c3c888577c4666831a949 - DAP2 to DAP4 transform. - BaseType.h - - - - type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - Returns the type of the class instance. - BaseType.h - - - - type_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a18a42c8ec35cb5b15cd651a4152f8a2c - Returns the type of the class instance as a string. - BaseType.h - - - - val2buf - cpp - instm - libdap::Byte - - classlibdap_1_1Byte.html - a8b8afd3348f7d22e6ff02c0c605c7bfd - Byte.h - - - - value - cpp - instm - libdap::Byte - - classlibdap_1_1Byte.html - a96312bb8da28d27316a0077143e42360 - Byte.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4dc4fac1bb6083f6db645f37bfd59b85 - Returns a pointer to a member of a constructor class. - BaseType.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adecfc442b5927c79933c7f71cfe03fd2 - BaseType.h - - - - width - cpp - instm - libdap::Byte - - classlibdap_1_1Byte.html - a4d4eb99a6d1022ca4e1808776438399d - How many bytes does this variable use Return the number of bytes of storage this variable uses... - Byte.h - - - - attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a97452f06d2188eb838399a709246b5e9 - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a722d33783aa0272d339b0301a4f77e59 - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1956e6ea90a745516f5372c859173433 - Read data into this variable. - BaseType.h - - - - m_duplicate - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a0c55b826c8c5dfe7a454dc670e859a41 - Perform a deep copy. - BaseType.h - - - - libdap::cache_entry - c - cl - libdap::cache_entry - - structlibdap_1_1cache__entry.html - - - - libdap::ce_parser_arg - c - cl - libdap::ce_parser_arg - - structlibdap_1_1ce__parser__arg.html - - - - libdap::ChildLocker - c - cl - libdap::ChildLocker - - classlibdap_1_1ChildLocker.html - MarshallerThread.h - - - - ChildLocker - cpp - instm - libdap::ChildLocker - - classlibdap_1_1ChildLocker.html - a310d79ab9441523c68541035bf2d511a - MarshallerThread.h - - - - libdap::chunked_inbuf - c - cl - libdap::chunked_inbuf - - classlibdap_1_1chunked__inbuf.html - - - - chunked_inbuf - cpp - instm - libdap::chunked_inbuf - - classlibdap_1_1chunked__inbuf.html - a26d2bc25f975262555a73e42ae13cf98 - Build a chunked input buffer. - chunked_istream.h - - - - read_next_chunk - cpp - instm - libdap::chunked_inbuf - - classlibdap_1_1chunked__inbuf.html - a70b29d2d6f5c4772e7950e8930ed71cb - Read a chunk Normally the chunked nature of a chunked_istream/chunked_inbuf is hidden from the caller... - chunked_istream.h - - - - underflow - cpp - instm - libdap::chunked_inbuf - - classlibdap_1_1chunked__inbuf.html - a45c0f6e2f7bfc6bd4f953e5de8dbd241 - Insert new characters into the buffer This specialization of underflow is called when the gptr() is a... - chunked_istream.h - - - - xsgetn - cpp - instm - libdap::chunked_inbuf - - classlibdap_1_1chunked__inbuf.html - ac98a38a08d371dfb97c32c9235bbc129 - Read a block of data This specialization of xsgetn() reads num bytes and puts them in s first reading... - chunked_istream.h - - - - libdap::chunked_istream - c - cl - libdap::chunked_istream - - classlibdap_1_1chunked__istream.html - - - - bytes_in_buffer - cpp - instm - libdap::chunked_istream - - classlibdap_1_1chunked__istream.html - af6d129dcc1a429bfdf8162500713bd1a - chunked_istream.h - - - - twiddle_bytes - cpp - instm - libdap::chunked_istream - - classlibdap_1_1chunked__istream.html - adb26664f72dbcd5a9563b73196e781b6 - chunked_istream.h - - - - libdap::chunked_ostream - c - cl - libdap::chunked_ostream - - classlibdap_1_1chunked__ostream.html - A C++ stream class for chunked data. This class uses the chunked_outbuf class to provide for chunked ... - chunked_ostream.h - - - - chunked_ostream - cpp - instm - libdap::chunked_ostream - - classlibdap_1_1chunked__ostream.html - a4f41bc4f32e8d08cb68d8b71620aa0de - chunked_ostream.h - - - - write_data_chunk - cpp - instm - libdap::chunked_ostream - - classlibdap_1_1chunked__ostream.html - a823bbbcdabed51009b401abb3a45122c - Send the current contents of the buffer as a data chunk. Normally, the chunked_ostream object waits u... - chunked_ostream.h - - - - write_end_chunk - cpp - instm - libdap::chunked_ostream - - classlibdap_1_1chunked__ostream.html - ab8c65417a57f00ab08c69b00facd802d - Send an end chunk. Normally, an end chunk is sent by closing the chunked_ostream, but this method can... - chunked_ostream.h - - - - write_err_chunk - cpp - instm - libdap::chunked_ostream - - classlibdap_1_1chunked__ostream.html - aea5b6730d0194747d98b43a9f2a83d8f - Send an error message down the stream. When called, this method dumps all the data currently in the b... - chunked_ostream.h - - - - libdap::chunked_outbuf - c - cl - libdap::chunked_outbuf - - classlibdap_1_1chunked__outbuf.html - output buffer for a chunked stream This performs buffered output encoding the data in the stream usin... - chunked_ostream.h - - - - data_chunk - cpp - instm - libdap::chunked_outbuf - - classlibdap_1_1chunked__outbuf.html - a2eb3a61bf3e82204a8ffca358558dead - Write out the contents of the buffer as a chunk. - chunked_ostream.h - - - - end_chunk - cpp - instm - libdap::chunked_outbuf - - classlibdap_1_1chunked__outbuf.html - a1c6c9891d360d5d9b7085ec8cf543610 - Send an end chunk. - chunked_ostream.h - - - - err_chunk - cpp - instm - libdap::chunked_outbuf - - classlibdap_1_1chunked__outbuf.html - abefa71794597aa2b9edcfc9d7101bba1 - Send an error chunk While building up the next chunk, send an error chunk, ignoring the data currentl... - chunked_ostream.h - - - - overflow - cpp - instm - libdap::chunked_outbuf - - classlibdap_1_1chunked__outbuf.html - ade3250bbda968c561cfb390ba77504db - Virtual method called when the internal buffer would overflow. When the internal buffer fills... - chunked_ostream.h - - - - sync - cpp - instm - libdap::chunked_outbuf - - classlibdap_1_1chunked__outbuf.html - ad31279e06619ddbe49382adf03cf5803 - Synchronize the stream with its data sink. - chunked_ostream.h - - - - xsputn - cpp - instm - libdap::chunked_outbuf - - classlibdap_1_1chunked__outbuf.html - a07bcec83a5f20ac5a8f76e3c490d0768 - Write bytes to the chunked stream Write the bytes in s to the chunked stream. - chunked_ostream.h - - - - libdap::Clause - c - cl - libdap::Clause - - structlibdap_1_1Clause.html - Holds a fragment of a constraint expression. - Clause.h - - - - boolean_clause - cpp - func - libdap::Clause - - structlibdap_1_1Clause.html - a80d81003665b96012ee3ba175d80e608 - Return true if the clause returns a boolean value. - Clause.h - - - - OK - cpp - func - libdap::Clause - - structlibdap_1_1Clause.html - aeaccc72688521a8b08aeae970d983473 - Checks the "representation invariant" of a clause. - Clause.h - - - - value - cpp - func - libdap::Clause - - structlibdap_1_1Clause.html - abfff44c4db49ad7462d14665b2458588 - Evaluate a clause which returns a boolean value This method must only be evaluated for clauses with r... - Clause.h - - - - value - cpp - func - libdap::Clause - - structlibdap_1_1Clause.html - a7b124a939247dce1320c494a3b18f6a1 - Evaluate a clause that returns a value via a BaseType pointer. This method should be called only for ... - Clause.h - - - - value_clause - cpp - func - libdap::Clause - - structlibdap_1_1Clause.html - a7bd5122be1851f0bf32ec1c58b46eaa9 - Return true if the clause returns a value in a BaseType pointer. - Clause.h - - - - libdap::Connect - c - cl - libdap::Connect - - classlibdap_1_1Connect.html - Holds information about the link from a DAP2 client to a dataset. - Connect.h - - - - CE - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - a0e55cc99530cab779ae83984c2a22f51 - Get the Connect&#39;s constraint expression. - Connect.h - - - - Connect - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - a03b8c9f6773a25c3c837b9890099d5e8 - Create an instance of Connect. - Connect.h - - - - get_protocol - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - a4223a898b3da719509d173dd990c45f1 - Connect.h - - - - get_version - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - a30fe6746add5a210d59b5dc9d678355f - Connect.h - - - - read_data - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - ae50d98d353023b9786c9bd5b0833a7de - Read data which is preceded by MIME headers. This method works for both data dds and data ddx respons... - Connect.h - - - - read_data_no_mime - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - a486b095a58614dfc2be0321035784306 - Read data from a file which does not have response MIME headers. This method is a companion to read_d... - Connect.h - - - - request_das - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - a816ef3bb8e729712ffeb6523f2cc4f0e - Get the DAS from a server. - Connect.h - - - - request_das_url - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - abcf814710de1e252e74a4e1b72d3c6b3 - Get the DAS from a server. - Connect.h - - - - request_data - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - a814e98ac5e99927ccc79bb0feb32d241 - Get the DAS from a server. - Connect.h - - - - request_data_url - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - ac8582099411b8d74b03e761129df5b5c - Get the DAS from a server. - Connect.h - - - - request_dds - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - aad5ef370110577e9ca2a0161928f9efa - Get the DDS from a server. - Connect.h - - - - request_dds_url - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - a08795a9e160db409423fcd9058ba975d - Get the DDS from a server. - Connect.h - - - - request_ddx - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - a4395cc18cf5ec1a5167795a5a5491958 - Get the DDX from a server. - Connect.h - - - - request_ddx_url - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - a9a3e1fe01455b60a90a1974a7e871bb4 - The &#39;url&#39; version of request_ddx. - Connect.h - - - - request_protocol - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - aaa1ab562899da9a4630de01f943d1aa9 - Connect.h - - - - request_version - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - ac7a5896a09882004b75e581999940526 - Connect.h - - - - set_accept_deflate - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - a186f76bfea3b61dc3587bcff5760ed8b - Connect.h - - - - set_cache_enabled - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - a25c97c4ad0239a9dd10812c880c40efe - Connect.h - - - - set_credentials - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - a847af75e149f123a51a560119dfc06aa - Set the credentials for responding to challenges while dereferencing URLs. - Connect.h - - - - set_xdap_protocol - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - a4af759a2313d9ecbc1db1c811f549379 - Connect.h - - - - URL - cpp - instm - libdap::Connect - - classlibdap_1_1Connect.html - a523bf24520185e3d71f36ac0203b98e6 - Get the object&#39;s URL. - Connect.h - - - - libdap::ConstraintEvaluator - c - cl - libdap::ConstraintEvaluator - - classlibdap_1_1ConstraintEvaluator.html - Evaluate a constraint expression. - ConstraintEvaluator.h - - - - append_clause - cpp - instm - libdap::ConstraintEvaluator - - classlibdap_1_1ConstraintEvaluator.html - a796b573bb1ec8bbce8c22c4caf58af2e - Add a clause to a constraint expression. - ConstraintEvaluator.h - - - - append_clause - cpp - instm - libdap::ConstraintEvaluator - - classlibdap_1_1ConstraintEvaluator.html - a2439b21977caf80d57c5faa0342dfcb4 - Add a clause to a constraint expression. - ConstraintEvaluator.h - - - - append_clause - cpp - instm - libdap::ConstraintEvaluator - - classlibdap_1_1ConstraintEvaluator.html - af4769219d99fe7ec3f4f4d7b1cd560dc - Add a clause to a constraint expression. - ConstraintEvaluator.h - - - - append_constant - cpp - instm - libdap::ConstraintEvaluator - - classlibdap_1_1ConstraintEvaluator.html - abf7511f38a4c5f8fc0cde0eca91ef338 - ConstraintEvaluator.h - - - - boolean_expression - cpp - instm - libdap::ConstraintEvaluator - - classlibdap_1_1ConstraintEvaluator.html - a155da913af4458d96fa60ecd0ecbe377 - Does the current constraint expression return a boolean value? - ConstraintEvaluator.h - - - - clause_begin - cpp - instm - libdap::ConstraintEvaluator - - classlibdap_1_1ConstraintEvaluator.html - a81135cc86f8bef397b59577dfa224f62 - ConstraintEvaluator.h - - - - clause_end - cpp - instm - libdap::ConstraintEvaluator - - classlibdap_1_1ConstraintEvaluator.html - ad193b3ca4cef59d2b46c04ab08f4675f - ConstraintEvaluator.h - - - - clause_value - cpp - instm - libdap::ConstraintEvaluator - - classlibdap_1_1ConstraintEvaluator.html - a5c53cfac881da05b7ed6eb6404b0c4f9 - ConstraintEvaluator.h - - - - eval_function - cpp - instm - libdap::ConstraintEvaluator - - classlibdap_1_1ConstraintEvaluator.html - a989c6db94b0a4079ea4ee333f4b699bf - Evaluate a function-valued constraint expression. - ConstraintEvaluator.h - - - - eval_function_clauses - cpp - instm - libdap::ConstraintEvaluator - - classlibdap_1_1ConstraintEvaluator.html - ab0dba1657e9aadd85b3ce713c6a4036a - Evaluate a function-valued constraint expression that contains several function calls. - ConstraintEvaluator.h - - - - eval_function_clauses - cpp - instm - libdap::ConstraintEvaluator - - classlibdap_1_1ConstraintEvaluator.html - a0e36171a34caa85d21e18adbd83a831b - Evaluate a function-valued constraint expression that contains several function calls. Takes and returns a DataDDS. - ConstraintEvaluator.h - - - - eval_selection - cpp - instm - libdap::ConstraintEvaluator - - classlibdap_1_1ConstraintEvaluator.html - a25acac693348360167a2c352df746acb - Evaluate a boolean-valued constraint expression. This is main method for the evaluator and is called ... - ConstraintEvaluator.h - - - - find_function - cpp - instm - libdap::ConstraintEvaluator - - classlibdap_1_1ConstraintEvaluator.html - a27ed41e76c8147cde9456dd516053ca7 - Find a Boolean function with a given name in the function list. - ConstraintEvaluator.h - - - - find_function - cpp - instm - libdap::ConstraintEvaluator - - classlibdap_1_1ConstraintEvaluator.html - a0845a2c4494e9ce1ecbb636da434b01f - Find a BaseType function with a given name in the function list. - ConstraintEvaluator.h - - - - find_function - cpp - instm - libdap::ConstraintEvaluator - - classlibdap_1_1ConstraintEvaluator.html - adf406811a741bd0461b192d493b96710 - Find a projection function with a given name in the function list. - ConstraintEvaluator.h - - - - function_clauses - cpp - instm - libdap::ConstraintEvaluator - - classlibdap_1_1ConstraintEvaluator.html - a9985c6a30247ced32a4b6e764deebf45 - Does the current constraint expression contain function clauses. - ConstraintEvaluator.h - - - - functional_expression - cpp - instm - libdap::ConstraintEvaluator - - classlibdap_1_1ConstraintEvaluator.html - add46ce1d9ef36fa26a2913d8d7c51096 - Does the current constraint expression return a BaseType pointer? This method does not evaluate the c... - ConstraintEvaluator.h - - - - parse_constraint - cpp - instm - libdap::ConstraintEvaluator - - classlibdap_1_1ConstraintEvaluator.html - a6290d897c82ddba106741ee8720f7ea0 - Parse the constraint expression given the current DDS. - ConstraintEvaluator.h - - - - libdap::Constructor - c - cl - libdap::Constructor - - classlibdap_1_1Constructor.html - Constructor.h - - - - add_var - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a2585c69c45b9ebec9c63993248eb5b4b - Constructor.h - - - - add_var_nocopy - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - abdb52463a46e1b10040f245d4ed7642b - Constructor.h - - - - buf2val - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ac4dc7e8099322b5b403a7d0ae9079006 - Reads the class data. - Constructor.h - - - - check_semantics - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - afe010638fd2ca9aab00dd1c21a9e4825 - Compare an object&#39;s current state with the semantics of its type. - Constructor.h - - - - clear_local_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aaddb97a4efbe035f41deaf03c6e8683f - BaseType.h - - - - compute_checksum - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a287ab9a4deb81a8ced6d8432be647925 - include the data for this variable in the checksum DAP4 includes a checksum with every data response... - Constructor.h - - - - d4_ops - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a512a356f31ed6c4c1a368da0b054408a - Evaluator a relop for DAP4. - BaseType.h - - - - dataset - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a47521ce321a17e6ce217870cb6a1a7aa - Returns the name of the dataset used to create this instance. - BaseType.h - - - - del_var - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - af38d3785c4a7cd0063cbb9fc5943333c - Constructor.h - - - - deserialize - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a63763d2bae05463b100e823fb461a784 - Receive data from the net. - Constructor.h - - - - deserialize - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a6f4253236d69c3c0ef64343136b5039b - Constructor.h - - - - dump - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a8efdfb84ef6b287142442252c00b4444 - dumps information about this object - Constructor.h - - - - element_count - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a1c2eecff00fa7e3af175c711d00fb86e - Count the members of constructor types. - Constructor.h - - - - FQN - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - afa6c06dab830b4e089641b44fea8293c - Constructor.h - - - - get_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1fcd9537c67e3bf88964b2656ff5bac1 - BaseType.h - - - - get_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a3459cdaa239c33ce111ef360d8dc3017 - BaseType.h - - - - get_var_index - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ac2b4b28ed9d6f435129aa599ab809799 - Constructor.h - - - - get_vars_iter - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a1e6d8224e04d75e3d2a21263957cd42f - Constructor.h - - - - intern_data - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a065056826ef9c6fb2d08463af9e15a34 - Constructor.h - - - - intern_data - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a822a036364c56df5288a55670f51197e - Read data into this variable. - Constructor.h - - - - is_constructor_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8b8490e0047c6da52945699a132008ea - Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable... - BaseType.h - - - - is_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - Is this variable part of the current selection? - BaseType.h - - - - is_linear - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - af26f89e9c0732a9c32bd5e15d716a7d7 - Check to see whether this variable can be printed simply. - Constructor.h - - - - is_simple_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aae57e5b270b3a015d40c8db10b9b5549 - Returns true if the instance is a numeric, string or URL type variable. - BaseType.h - - - - is_vector_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a7107c76dbcab71015141142383b6d022 - Returns true if the instance is a vector (i.e., array) type variable. - BaseType.h - - - - length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aadcda7a659157bc6a832d8a5fb775b3f - How many elements are in this variable. - BaseType.h - - - - name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a24c5d67823b3cff7f4245a993072a142 - Returns the name of the class instance. - BaseType.h - - - - ops - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8a0000be2a244e3e07abda3020af8800 - Evaluate relational operators. - BaseType.h - - - - print_dap4 - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a0f130e129b06773a9f3c94e3b492bb5c - Constructor.h - - - - print_decl - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ab7fb094be8da2a9f80f6d3b85e452934 - Print an ASCII representation of the variable structure. - Constructor.h - - - - print_decl - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a6c2c4d7cbe1d6239c037272ec865f80b - Print an ASCII representation of the variable structure. - Constructor.h - - - - print_val - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - aa7f9cce8ca18461af332aab61123bf23 - Prints the value of the variable. - Constructor.h - - - - print_val - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - af50641301757ed26eb75fb2d29eae7ee - Prints the value of the variable. - Constructor.h - - - - print_xml - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a32de0413045173aa8803f540a6cea39b - Constructor.h - - - - print_xml - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a7bbe6beabd94f576140e132e7a1017ff - Constructor.h - - - - print_xml_writer - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ab775a5e7e63757ac961b43800a95635f - Constructor.h - - - - ptr_duplicate - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a0b130311c9901fb8a7ab11ea19090ef0 - BaseType.h - - - - read - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ad0af40e2565972fa44985d173370c264 - simple implementation of read that iterates through vars and calls read on them - Constructor.h - - - - read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a38ff819a432217c55db2e9071928d20c - Has this variable been read? - BaseType.h - - - - send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a980c0013817836aa77ef74aeec7fb192 - Should this variable be sent? - BaseType.h - - - - serialize - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a64268840654a0b37a15ccc601dbcfd33 - Move data to the net, then remove them from the object. - Constructor.h - - - - serialize - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ab868fe97d5075b702bd084c2e9540913 - Serialize a Constructor. - Constructor.h - - - - set_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a572a1d76a75981abac83a4241e90c0fa - BaseType.h - - - - set_in_selection - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ac30becb1ffe7d2cd4cbcd24fc216c9a3 - Set the in_selection property. - Constructor.h - - - - set_length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4fe343c1eeb6fb1d61ab030433651d90 - Set the number of elements for this variable. - BaseType.h - - - - set_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a86504564f45a3e6748c6f1cc0ff4e9fa - Sets the name of the class instance. - BaseType.h - - - - set_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - BaseType.h - - - - set_read_p - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - af52e60d8589eed1a18a14e9c6a57db65 - Sets the value of the read_p property. - Constructor.h - - - - set_send_p - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - aafbcf9bef6719fe60ac707e02956e09d - Constructor.h - - - - set_synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a595cb4059cff24f801a1b6da79bd2f9e - BaseType.h - - - - set_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af74f8d1ef57c9fcca46f620f75d175a3 - Sets the type of the class instance. - BaseType.h - - - - synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae64e677da27249473cdba0b60cdbb90a - BaseType.h - - - - toString - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a701eb3361f5b5628329ece019cd34519 - BaseType.h - - - - transfer_attributes - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a799d2bd8ef9505b1d493d8cd73b72746 - Constructor.h - - - - transform_to_dap2 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - affec8a11e9cc035d4b1e8fb9a87b2072 - DAP4 to DAP2 transform. - BaseType.h - - - - transform_to_dap4 - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a3affad818961b2e7e984415cdd3c6e9e - DAP2 to DAP4 transform. - Constructor.h - - - - type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - Returns the type of the class instance. - BaseType.h - - - - type_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a18a42c8ec35cb5b15cd651a4152f8a2c - Returns the type of the class instance as a string. - BaseType.h - - - - val2buf - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ac742b1bf93889e541128b1d123821ee6 - Loads class data. - Constructor.h - - - - var - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a36a7412da7b5257d7666add726fea1a6 - btp_stack no longer needed; use back pointers (BaseType::get_parent()) - Constructor.h - - - - var - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a68f1779dc328f890062722d90fad084a - Constructor.h - - - - var_begin - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - adeafe3d6c82d07b456a598a7b446c2c6 - Constructor.h - - - - var_end - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a936b38c7c35ffb4fe17c5b8e85bdaaa2 - Constructor.h - - - - var_rbegin - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - aa025cf546ca35250454653c1ec684d91 - Constructor.h - - - - var_rend - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - aede7cf5889e101db1ea8f22c3a84a5d3 - Constructor.h - - - - width - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a0b1e3ae7195f95c42ca98f42826a1ff5 - Constructor.h - - - - attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a97452f06d2188eb838399a709246b5e9 - BaseType.h - - - - Constructor - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - aada6a0aa97adc6adff2398f8c7d0ff35 - Constructor.h - - - - m_duplicate - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a0c55b826c8c5dfe7a454dc670e859a41 - Perform a deep copy. - BaseType.h - - - - libdap::D4AsyncUtil - c - cl - libdap::D4AsyncUtil - - classlibdap_1_1D4AsyncUtil.html - - - - writeD2AsyncRequired - cpp - instm - libdap::D4AsyncUtil - - classlibdap_1_1D4AsyncUtil.html - acb8335ad353653ec35148f8c38895a54 - Write the DAP2 AsyncRequired response . Write the DAP2 AsyncRequired in XML form. ... - D4AsyncUtil.h - - - - writeD4AsyncAccepted - cpp - instm - libdap::D4AsyncUtil - - classlibdap_1_1D4AsyncUtil.html - ad7ce372878ff0d5a6ebda401c7e630f6 - Write the DAP4 AsyncAccepted response. Write the AsyncAccepted in XML form. - D4AsyncUtil.h - - - - writeD4AsyncPending - cpp - instm - libdap::D4AsyncUtil - - classlibdap_1_1D4AsyncUtil.html - a8d8e9c8eb128fc4d8e799f2e7faa3205 - Write the DAP4 AsyncPending response. Write the DAP4 AsyncPending in XML form. - D4AsyncUtil.h - - - - writeD4AsyncRequired - cpp - instm - libdap::D4AsyncUtil - - classlibdap_1_1D4AsyncUtil.html - a9f98ddda0707692370fe2af20f894b45 - Write the DAP4 AsyncRequired response. Print the AsyncRequired in XML form. - D4AsyncUtil.h - - - - writeD4AsyncResponseGone - cpp - instm - libdap::D4AsyncUtil - - classlibdap_1_1D4AsyncUtil.html - ae46e9b6a9eddbd13edbd5a503a8e71dc - Write the DAP4 AsyncResponseGone response. Write the DAP4 AsyncRequired in XML form. - D4AsyncUtil.h - - - - writeD4AsyncResponseRejected - cpp - instm - libdap::D4AsyncUtil - - classlibdap_1_1D4AsyncUtil.html - a398106b8e1d5c52bf23fc7f556bd7d26 - Write the DAP4 ResponseRejected response. Write the DAP4 AsyncRequired in XML form. - D4AsyncUtil.h - - - - libdap::D4Attribute - c - cl - libdap::D4Attribute - - classlibdap_1_1D4Attribute.html - - - - dump - cpp - instm - libdap::D4Attribute - - classlibdap_1_1D4Attribute.html - ad0609a07cdfb90a2c1be50b27c60460f - dumps information about this object - D4Attributes.h - - - - libdap::D4Attributes - c - cl - libdap::D4Attributes - - classlibdap_1_1D4Attributes.html - - - - attribute_begin - cpp - instm - libdap::D4Attributes - - classlibdap_1_1D4Attributes.html - a759970f338df1b66060f0607c35d4f52 - Get an iterator to the start of the enumerations. - D4Attributes.h - - - - attribute_end - cpp - instm - libdap::D4Attributes - - classlibdap_1_1D4Attributes.html - a8584405e7329078e51364cdbb27a3092 - Get an iterator to the end of the enumerations. - D4Attributes.h - - - - dump - cpp - instm - libdap::D4Attributes - - classlibdap_1_1D4Attributes.html - adefff20cb6cdcf82469529c7b309a910 - dumps information about this object - D4Attributes.h - - - - get - cpp - instm - libdap::D4Attributes - - classlibdap_1_1D4Attributes.html - a2a7201c33ab93bfbd7b876ba8e93444f - D4Attributes.h - - - - transform_attrs_to_dap2 - cpp - instm - libdap::D4Attributes - - classlibdap_1_1D4Attributes.html - abcc9c129081018d9c4c411052382caaa - Copy the attributes from this D4Attributes object to a DAP2 AttrTable. - D4Attributes.h - - - - transform_to_dap4 - cpp - instm - libdap::D4Attributes - - classlibdap_1_1D4Attributes.html - a1dfd8c42a188d627be7d11857fe723b6 - copy attributes from DAP2 to DAP4 - D4Attributes.h - - - - libdap::D4BaseTypeFactory - c - cl - libdap::D4BaseTypeFactory - - classlibdap_1_1D4BaseTypeFactory.html - D4BaseTypeFactory.h - - - - NewEnum - cpp - instm - libdap::D4BaseTypeFactory - - classlibdap_1_1D4BaseTypeFactory.html - aa8100d8119cc1ffcc4875b144cfa347f - D4BaseTypeFactory.h - - - - NewURL - cpp - instm - libdap::D4BaseTypeFactory - - classlibdap_1_1D4BaseTypeFactory.html - aff5d085d548134aa931dbf3527249b0a - D4BaseTypeFactory.h - - - - NewVariable - cpp - instm - libdap::D4BaseTypeFactory - - classlibdap_1_1D4BaseTypeFactory.html - ad1ba5f8a8aa850d5eb66b1b398013180 - D4BaseTypeFactory.h - - - - ptr_duplicate - cpp - instm - libdap::D4BaseTypeFactory - - classlibdap_1_1D4BaseTypeFactory.html - a134cf00bb72aacbd3ce737c35f575168 - D4BaseTypeFactory.h - - - - libdap::D4CEScanner - c - cl - libdap::D4CEScanner - - classlibdap_1_1D4CEScanner.html - - - - libdap::D4Connect - c - cl - libdap::D4Connect - - classlibdap_1_1D4Connect.html - - - - D4Connect - cpp - instm - libdap::D4Connect - - classlibdap_1_1D4Connect.html - a03973f6a80a96bdbe031dc03d869221d - Create an instance of Connect. - D4Connect.h - - - - set_credentials - cpp - instm - libdap::D4Connect - - classlibdap_1_1D4Connect.html - ab124422662436dc0ede86cd1b3e4f467 - Set the credentials for responding to challenges while dereferencing URLs. - D4Connect.h - - - - set_accept_deflate - cpp - instm - libdap::D4Connect - - classlibdap_1_1D4Connect.html - a380e999d58c53bd1d6911bafbb0654ee - D4Connect.h - - - - set_xdap_protocol - cpp - instm - libdap::D4Connect - - classlibdap_1_1D4Connect.html - a86734a9dd1c1de2017548cc54afd01e3 - D4Connect.h - - - - set_cache_enabled - cpp - instm - libdap::D4Connect - - classlibdap_1_1D4Connect.html - a85c1176feebb30cd484c6ef20c22e01d - D4Connect.h - - - - get_version - cpp - instm - libdap::D4Connect - - classlibdap_1_1D4Connect.html - ad778bc535395b26df0b15870760086d9 - D4Connect.h - - - - get_protocol - cpp - instm - libdap::D4Connect - - classlibdap_1_1D4Connect.html - a1ab3646633cc0049c281dc1f855b76e2 - D4Connect.h - - - - libdap::D4ConstraintEvaluator - c - cl - libdap::D4ConstraintEvaluator - - classlibdap_1_1D4ConstraintEvaluator.html - D4ConstraintEvaluator.h - - - - libdap::D4Dimension - c - cl - libdap::D4Dimension - - classlibdap_1_1D4Dimension.html - - - - fully_qualified_name - cpp - instm - libdap::D4Dimension - - classlibdap_1_1D4Dimension.html - a91a7616fcd4ac5f59248de675dbae3f2 - Get the FQN for the dimension. - D4Dimensions.h - - - - print_dap4 - cpp - instm - libdap::D4Dimension - - classlibdap_1_1D4Dimension.html - a816571e2cbc792e1aa53cbb2829bb147 - Print the Dimension declaration. Print the Dimension in a form suitable for use in a Group definition... - D4Dimensions.h - - - - set_constraint - cpp - instm - libdap::D4Dimension - - classlibdap_1_1D4Dimension.html - ab63edc1e631b4501178d2bc3018577e9 - D4Dimensions.h - - - - libdap::D4Dimensions - c - cl - libdap::D4Dimensions - - classlibdap_1_1D4Dimensions.html - D4Dimensions.h - - - - D4DimensionsIter - cpp - tdef - libdap::D4Dimensions - - classlibdap_1_1D4Dimensions.html - a24b00181a66826733d2e779cbc4df817 - Iterator used for D4Dimensions. - - - - add_dim - cpp - instm - libdap::D4Dimensions - - classlibdap_1_1D4Dimensions.html - a6a5a16bc3375f9e23ca7aaca4646bec2 - D4Dimensions.h - - - - add_dim_nocopy - cpp - instm - libdap::D4Dimensions - - classlibdap_1_1D4Dimensions.html - a54589e5cdb731298d8ef7e28068d967e - D4Dimensions.h - - - - dim_begin - cpp - instm - libdap::D4Dimensions - - classlibdap_1_1D4Dimensions.html - acdde711563706573cf03888bee31105e - Get an iterator to the start of the dimensions. - D4Dimensions.h - - - - dim_end - cpp - instm - libdap::D4Dimensions - - classlibdap_1_1D4Dimensions.html - aae49956b1831fadab0477846c9576819 - Get an iterator to the end of the dimensions. - D4Dimensions.h - - - - empty - cpp - instm - libdap::D4Dimensions - - classlibdap_1_1D4Dimensions.html - ac8392d924d693bf312e215cabb384c76 - Does this D4Dimensions object actually have dimensions? - D4Dimensions.h - - - - insert_dim - cpp - instm - libdap::D4Dimensions - - classlibdap_1_1D4Dimensions.html - adf5daf7a4ff69d794f4ee8f6141748a4 - D4Dimensions.h - - - - insert_dim_nocopy - cpp - instm - libdap::D4Dimensions - - classlibdap_1_1D4Dimensions.html - a848b4d805a85adcbda0810a88b209644 - D4Dimensions.h - - - - libdap::D4Enum - c - cl - libdap::D4Enum - - classlibdap_1_1D4Enum.html - Holds a DAP4 enumeration. - D4Enum.h - - - - add_var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adca3c2621c4a509537c18362005d7f7f - Add a variable. - BaseType.h - - - - buf2val - cpp - instm - libdap::D4Enum - - classlibdap_1_1D4Enum.html - a5508dbda78827898d8728590bb1130b4 - Reads the class data. - D4Enum.h - - - - check_semantics - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aec503abec2fd3090e7738c0a575491f8 - Compare an object&#39;s current state with the semantics of its type. - BaseType.h - - - - clear_local_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aaddb97a4efbe035f41deaf03c6e8683f - BaseType.h - - - - compute_checksum - cpp - instm - libdap::D4Enum - - classlibdap_1_1D4Enum.html - a5353acc53445e30f4c189e07ae1f3aa1 - include the data for this variable in the checksum DAP4 includes a checksum with every data response... - D4Enum.h - - - - d4_ops - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a512a356f31ed6c4c1a368da0b054408a - Evaluator a relop for DAP4. - BaseType.h - - - - dataset - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a47521ce321a17e6ce217870cb6a1a7aa - Returns the name of the dataset used to create this instance. - BaseType.h - - - - deserialize - cpp - instm - libdap::D4Enum - - classlibdap_1_1D4Enum.html - a4e9df94181f86c427666f10b2b7211bf - D4Enum.h - - - - dump - cpp - instm - libdap::D4Enum - - classlibdap_1_1D4Enum.html - a59b75c34bcb3210f235e226482529e81 - dumps information about this object - D4Enum.h - - - - element_count - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5c2235737737b482bfa7536b8aeab810 - Count the members of constructor types. - BaseType.h - - - - FQN - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - BaseType.h - - - - get_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1fcd9537c67e3bf88964b2656ff5bac1 - BaseType.h - - - - get_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a3459cdaa239c33ce111ef360d8dc3017 - BaseType.h - - - - is_constructor_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8b8490e0047c6da52945699a132008ea - Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable... - BaseType.h - - - - is_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - Is this variable part of the current selection? - BaseType.h - - - - is_simple_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aae57e5b270b3a015d40c8db10b9b5549 - Returns true if the instance is a numeric, string or URL type variable. - BaseType.h - - - - is_vector_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a7107c76dbcab71015141142383b6d022 - Returns true if the instance is a vector (i.e., array) type variable. - BaseType.h - - - - length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aadcda7a659157bc6a832d8a5fb775b3f - How many elements are in this variable. - BaseType.h - - - - name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a24c5d67823b3cff7f4245a993072a142 - Returns the name of the class instance. - BaseType.h - - - - ops - cpp - instm - libdap::D4Enum - - classlibdap_1_1D4Enum.html - a300dfa8bd3ce44b3e2123397ac8c6415 - Evaluate relational operators. - D4Enum.h - - - - print_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afcddbe441380b95c894510c02980b163 - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2d799fad93255d7f2b803562ae7a5784 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afd744b0ddeb04e7b173c9e83423ec572 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_val - cpp - instm - libdap::D4Enum - - classlibdap_1_1D4Enum.html - a87421c728d4728c38a6d62154306d420 - Prints the value of the variable. - D4Enum.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a825820edee179550cfde3dfd4d274f2a - BaseType.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8bd2c7682edd48c64b210bdf247bdef7 - BaseType.h - - - - print_xml_writer - cpp - instm - libdap::D4Enum - - classlibdap_1_1D4Enum.html - a87c488f6f90a079df648d45b6c0657ef - D4Enum.h - - - - ptr_duplicate - cpp - instm - libdap::D4Enum - - classlibdap_1_1D4Enum.html - a8585358b06d90e8d689f572fb09ee326 - D4Enum.h - - - - read - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1da003c53f2e663223f603ab3fbd7c8e - Read data into a local buffer. - BaseType.h - - - - read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a38ff819a432217c55db2e9071928d20c - Has this variable been read? - BaseType.h - - - - send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a980c0013817836aa77ef74aeec7fb192 - Should this variable be sent? - BaseType.h - - - - serialize - cpp - instm - libdap::D4Enum - - classlibdap_1_1D4Enum.html - a524417cc7f1fd3776be4680c0af5c669 - Serialize a D4Enum Use the (integer) data type associated with an Enumeration definition to serialize... - D4Enum.h - - - - set_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a572a1d76a75981abac83a4241e90c0fa - BaseType.h - - - - set_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2bc036248cdaf1affac464170f32ad30 - BaseType.h - - - - set_length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4fe343c1eeb6fb1d61ab030433651d90 - Set the number of elements for this variable. - BaseType.h - - - - set_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a86504564f45a3e6748c6f1cc0ff4e9fa - Sets the name of the class instance. - BaseType.h - - - - set_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - BaseType.h - - - - set_read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4533905a450d2a7af32e7d5acd557676 - Sets the value of the read_p property. - BaseType.h - - - - set_send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aba7b27635c95b74536de18393133628e - BaseType.h - - - - set_synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a595cb4059cff24f801a1b6da79bd2f9e - BaseType.h - - - - set_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af74f8d1ef57c9fcca46f620f75d175a3 - Sets the type of the class instance. - BaseType.h - - - - set_value - cpp - instm - libdap::D4Enum - - classlibdap_1_1D4Enum.html - abc945a62587b02fe85c9146fd92a392b - Set the value of the Enum Template member function to set the value of the Enum. The libdap library c... - D4Enum.h - - - - synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae64e677da27249473cdba0b60cdbb90a - BaseType.h - - - - toString - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a701eb3361f5b5628329ece019cd34519 - BaseType.h - - - - transfer_attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - add8e836c622042a339152a6c31e5bdfb - BaseType.h - - - - transform_to_dap2 - cpp - instm - libdap::D4Enum - - classlibdap_1_1D4Enum.html - a0c3a33d704e3970e53922b6e7d0a541d - Convert an Enum to a DAP2 int type. - D4Enum.h - - - - transform_to_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adb03e2e1e40c3c888577c4666831a949 - DAP2 to DAP4 transform. - BaseType.h - - - - type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - Returns the type of the class instance. - BaseType.h - - - - type_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a18a42c8ec35cb5b15cd651a4152f8a2c - Returns the type of the class instance as a string. - BaseType.h - - - - val2buf - cpp - instm - libdap::D4Enum - - classlibdap_1_1D4Enum.html - a9eff2897992fa47ddb3e459d19c54838 - Loads class data. - D4Enum.h - - - - value - cpp - instm - libdap::D4Enum - - classlibdap_1_1D4Enum.html - ac8a61f83c03511688b764d18ba53c0a8 - Get the value of an Enum Get the value of this instance. The caller is responsible for using a type T... - D4Enum.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4dc4fac1bb6083f6db645f37bfd59b85 - Returns a pointer to a member of a constructor class. - BaseType.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adecfc442b5927c79933c7f71cfe03fd2 - BaseType.h - - - - width - cpp - instm - libdap::D4Enum - - classlibdap_1_1D4Enum.html - a7c97d06faba4257c9d50af2a7edd54d1 - Return the number of bytes in an instance of an Enum. This returns the number of bytes an instance of... - D4Enum.h - - - - attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a97452f06d2188eb838399a709246b5e9 - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a722d33783aa0272d339b0301a4f77e59 - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1956e6ea90a745516f5372c859173433 - Read data into this variable. - BaseType.h - - - - serialize - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adc24a735977e28acb0e6f78667c1dd21 - Move data to the net, then remove them from the object. - BaseType.h - - - - deserialize - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1f27d99250e857efd86ac9db788bbf1b - Receive data from the net. - BaseType.h - - - - print_val - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afb5e13838a599ec0efe2adbb2ae18f47 - Prints the value of the variable. - BaseType.h - - - - m_duplicate - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a0c55b826c8c5dfe7a454dc670e859a41 - Perform a deep copy. - BaseType.h - - - - libdap::D4EnumDef - c - cl - libdap::D4EnumDef - - classlibdap_1_1D4EnumDef.html - - - - is_valid_enum_value - cpp - instm - libdap::D4EnumDef - - classlibdap_1_1D4EnumDef.html - af2c114ec827866cd344fc4dc620caa06 - D4EnumDefs.h - - - - libdap::D4EnumDefs - c - cl - libdap::D4EnumDefs - - classlibdap_1_1D4EnumDefs.html - D4EnumDefs.h - - - - add_enum - cpp - instm - libdap::D4EnumDefs - - classlibdap_1_1D4EnumDefs.html - a79d4486eb22736c01552a591a48239f3 - D4EnumDefs.h - - - - enum_begin - cpp - instm - libdap::D4EnumDefs - - classlibdap_1_1D4EnumDefs.html - adc6ee4d3059ddc1c78e38416df6aede4 - Get an iterator to the start of the enumerations. - D4EnumDefs.h - - - - enum_end - cpp - instm - libdap::D4EnumDefs - - classlibdap_1_1D4EnumDefs.html - a791cd139eb848e2dc4ba13387abbea4a - Get an iterator to the end of the enumerations. - D4EnumDefs.h - - - - insert_enum - cpp - instm - libdap::D4EnumDefs - - classlibdap_1_1D4EnumDefs.html - a4988b9d5ad3729b3ecc86ee914d04b96 - Insert a D4EnumDef. Insert a D4EnumDef before the position specified by the iterator. - D4EnumDefs.h - - - - libdap::D4FilterClause - c - cl - libdap::D4FilterClause - - classlibdap_1_1D4FilterClause.html - DAP4 filter clauses. - D4FilterClause.h - - - - D4FilterClause - cpp - instm - libdap::D4FilterClause - - classlibdap_1_1D4FilterClause.html - a74c6d2b4e479c186b924d96ddff9466f - D4FilterClause.h - - - - value - cpp - instm - libdap::D4FilterClause - - classlibdap_1_1D4FilterClause.html - ab49550e5f468040ee40bf54a72156b1a - Get the value of this relational expression. This version of value() works for function clauses... - D4FilterClause.h - - - - value - cpp - instm - libdap::D4FilterClause - - classlibdap_1_1D4FilterClause.html - a4860fa85c00f973512f4bf86ae4126f4 - Get the value of this relational expression. This version of value() will not work for clauses where ... - D4FilterClause.h - - - - libdap::D4FilterClauseList - c - cl - libdap::D4FilterClauseList - - classlibdap_1_1D4FilterClauseList.html - List of DAP4 Filter Clauses. - D4FilterClause.h - - - - value - cpp - instm - libdap::D4FilterClauseList - - classlibdap_1_1D4FilterClauseList.html - ae559b853739a7394299311f8e32e55c4 - Evaluate the list of clauses. - D4FilterClause.h - - - - value - cpp - instm - libdap::D4FilterClauseList - - classlibdap_1_1D4FilterClauseList.html - a7bcb42d6670d47622f1666e709b20f47 - Evaluate the list of clauses. - D4FilterClause.h - - - - libdap::D4FunctionEvaluator - c - cl - libdap::D4FunctionEvaluator - - classlibdap_1_1D4FunctionEvaluator.html - D4FunctionEvaluator.h - - - - eval - cpp - instm - libdap::D4FunctionEvaluator - - classlibdap_1_1D4FunctionEvaluator.html - a71d80e1a6835ebc27104460698a3ac75 - D4FunctionEvaluator.h - - - - parse - cpp - instm - libdap::D4FunctionEvaluator - - classlibdap_1_1D4FunctionEvaluator.html - aa652eafd055aa4781a5804ee765b1767 - D4FunctionEvaluator.h - - - - result - cpp - instm - libdap::D4FunctionEvaluator - - classlibdap_1_1D4FunctionEvaluator.html - add490246e6e7726cf1f8f19536147b80 - D4FunctionEvaluator.h - - - - libdap::D4FunctionScanner - c - cl - libdap::D4FunctionScanner - - classlibdap_1_1D4FunctionScanner.html - - - - libdap::D4Group - c - cl - libdap::D4Group - - classlibdap_1_1D4Group.html - D4Group.h - - - - add_var - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a2585c69c45b9ebec9c63993248eb5b4b - Constructor.h - - - - add_var_nocopy - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - abdb52463a46e1b10040f245d4ed7642b - Constructor.h - - - - buf2val - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ac4dc7e8099322b5b403a7d0ae9079006 - Reads the class data. - Constructor.h - - - - check_semantics - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - afe010638fd2ca9aab00dd1c21a9e4825 - Compare an object&#39;s current state with the semantics of its type. - Constructor.h - - - - clear_local_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aaddb97a4efbe035f41deaf03c6e8683f - BaseType.h - - - - compute_checksum - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a287ab9a4deb81a8ced6d8432be647925 - include the data for this variable in the checksum DAP4 includes a checksum with every data response... - Constructor.h - - - - d4_ops - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a512a356f31ed6c4c1a368da0b054408a - Evaluator a relop for DAP4. - BaseType.h - - - - D4Group - cpp - instm - libdap::D4Group - - classlibdap_1_1D4Group.html - ae112f35481f750daceca3511700b865c - D4Group.h - - - - D4Group - cpp - instm - libdap::D4Group - - classlibdap_1_1D4Group.html - a89252477edc2d38676e75c69fb8a84ac - D4Group.h - - - - D4Group - cpp - instm - libdap::D4Group - - classlibdap_1_1D4Group.html - a7f9e2d2bc50eb55e3772cba4f0d7c273 - D4Group.h - - - - dataset - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a47521ce321a17e6ce217870cb6a1a7aa - Returns the name of the dataset used to create this instance. - BaseType.h - - - - del_var - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - af38d3785c4a7cd0063cbb9fc5943333c - Constructor.h - - - - deserialize - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a63763d2bae05463b100e823fb461a784 - Receive data from the net. - Constructor.h - - - - deserialize - cpp - instm - libdap::D4Group - - classlibdap_1_1D4Group.html - a702bdf9b8fa0a218594220d0f8b9bab1 - D4Group.h - - - - dims - cpp - instm - libdap::D4Group - - classlibdap_1_1D4Group.html - a034d8c0e622ad5de382d4dfd21ad2ff9 - Get the dimensions defined for this Group. - D4Group.h - - - - dump - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a8efdfb84ef6b287142442252c00b4444 - dumps information about this object - Constructor.h - - - - element_count - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a1c2eecff00fa7e3af175c711d00fb86e - Count the members of constructor types. - Constructor.h - - - - enum_defs - cpp - instm - libdap::D4Group - - classlibdap_1_1D4Group.html - a8b9ac5b00e42a4fd6e8b1e276fe33cd7 - Get the enumerations defined for this Group. - D4Group.h - - - - find_dim - cpp - instm - libdap::D4Group - - classlibdap_1_1D4Group.html - a14e4b548e4e5b53c68c4a27fea9133d4 - Find the dimension using a path. Using the DAP4 name syntax, lookup a dimension. The dimension must b... - D4Group.h - - - - find_var - cpp - instm - libdap::D4Group - - classlibdap_1_1D4Group.html - a40872115c2d90536dac4f98f998416c4 - D4Group.h - - - - FQN - cpp - instm - libdap::D4Group - - classlibdap_1_1D4Group.html - a49310c234dfeb5ac8e40e20881199794 - D4Group.h - - - - get_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1fcd9537c67e3bf88964b2656ff5bac1 - BaseType.h - - - - get_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a3459cdaa239c33ce111ef360d8dc3017 - BaseType.h - - - - get_var_index - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ac2b4b28ed9d6f435129aa599ab809799 - Constructor.h - - - - get_vars_iter - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a1e6d8224e04d75e3d2a21263957cd42f - Constructor.h - - - - grp_begin - cpp - instm - libdap::D4Group - - classlibdap_1_1D4Group.html - a4e1ccf4eac9bf132014f175ffa934d35 - Get an iterator to the start of the values. - D4Group.h - - - - grp_end - cpp - instm - libdap::D4Group - - classlibdap_1_1D4Group.html - a893a28e64abefede77aca1d5a38e55e9 - Get an iterator to the end of the values. - D4Group.h - - - - intern_data - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a065056826ef9c6fb2d08463af9e15a34 - Constructor.h - - - - intern_data - cpp - instm - libdap::D4Group - - classlibdap_1_1D4Group.html - a368a83899f9abbbda1deaba7db8920bb - Read data into this variable. - D4Group.h - - - - is_constructor_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8b8490e0047c6da52945699a132008ea - Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable... - BaseType.h - - - - is_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - Is this variable part of the current selection? - BaseType.h - - - - is_linear - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - af26f89e9c0732a9c32bd5e15d716a7d7 - Check to see whether this variable can be printed simply. - Constructor.h - - - - is_simple_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aae57e5b270b3a015d40c8db10b9b5549 - Returns true if the instance is a numeric, string or URL type variable. - BaseType.h - - - - is_vector_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a7107c76dbcab71015141142383b6d022 - Returns true if the instance is a vector (i.e., array) type variable. - BaseType.h - - - - length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aadcda7a659157bc6a832d8a5fb775b3f - How many elements are in this variable. - BaseType.h - - - - name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a24c5d67823b3cff7f4245a993072a142 - Returns the name of the class instance. - BaseType.h - - - - ops - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8a0000be2a244e3e07abda3020af8800 - Evaluate relational operators. - BaseType.h - - - - print_dap4 - cpp - instm - libdap::D4Group - - classlibdap_1_1D4Group.html - ae18a505436325aac9b7522fe293638e6 - D4Group.h - - - - print_decl - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ab7fb094be8da2a9f80f6d3b85e452934 - Print an ASCII representation of the variable structure. - Constructor.h - - - - print_decl - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a6c2c4d7cbe1d6239c037272ec865f80b - Print an ASCII representation of the variable structure. - Constructor.h - - - - print_val - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - aa7f9cce8ca18461af332aab61123bf23 - Prints the value of the variable. - Constructor.h - - - - print_val - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - af50641301757ed26eb75fb2d29eae7ee - Prints the value of the variable. - Constructor.h - - - - print_xml - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a32de0413045173aa8803f540a6cea39b - Constructor.h - - - - print_xml - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a7bbe6beabd94f576140e132e7a1017ff - Constructor.h - - - - print_xml_writer - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ab775a5e7e63757ac961b43800a95635f - Constructor.h - - - - ptr_duplicate - cpp - instm - libdap::D4Group - - classlibdap_1_1D4Group.html - aa56c17b1f5cca717df57604b9c7614d0 - D4Group.h - - - - read - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ad0af40e2565972fa44985d173370c264 - simple implementation of read that iterates through vars and calls read on them - Constructor.h - - - - read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a38ff819a432217c55db2e9071928d20c - Has this variable been read? - BaseType.h - - - - request_size - cpp - instm - libdap::D4Group - - classlibdap_1_1D4Group.html - ace2c9ad32397a47d87fdad9111693420 - D4Group.h - - - - send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a980c0013817836aa77ef74aeec7fb192 - Should this variable be sent? - BaseType.h - - - - serialize - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a64268840654a0b37a15ccc601dbcfd33 - Move data to the net, then remove them from the object. - Constructor.h - - - - serialize - cpp - instm - libdap::D4Group - - classlibdap_1_1D4Group.html - ae2f8b233c32b222df7106661860b68dd - Serialize a Group. - D4Group.h - - - - set_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a572a1d76a75981abac83a4241e90c0fa - BaseType.h - - - - set_in_selection - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ac30becb1ffe7d2cd4cbcd24fc216c9a3 - Set the in_selection property. - Constructor.h - - - - set_length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4fe343c1eeb6fb1d61ab030433651d90 - Set the number of elements for this variable. - BaseType.h - - - - set_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a86504564f45a3e6748c6f1cc0ff4e9fa - Sets the name of the class instance. - BaseType.h - - - - set_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - BaseType.h - - - - set_read_p - cpp - instm - libdap::D4Group - - classlibdap_1_1D4Group.html - a391e0b9fa30f8afbd9dea69d5f5fd897 - Sets the value of the read_p property. - D4Group.h - - - - set_send_p - cpp - instm - libdap::D4Group - - classlibdap_1_1D4Group.html - a71f6bd0a32c30966ded9ccf8578f5cfb - D4Group.h - - - - set_synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a595cb4059cff24f801a1b6da79bd2f9e - BaseType.h - - - - set_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af74f8d1ef57c9fcca46f620f75d175a3 - Sets the type of the class instance. - BaseType.h - - - - synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae64e677da27249473cdba0b60cdbb90a - BaseType.h - - - - toString - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a701eb3361f5b5628329ece019cd34519 - BaseType.h - - - - transfer_attributes - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a799d2bd8ef9505b1d493d8cd73b72746 - Constructor.h - - - - transform_to_dap2 - cpp - instm - libdap::D4Group - - classlibdap_1_1D4Group.html - ab8aa023211f1ed226b73def5e11da787 - Transform the D4Group&#39;s variables to DAP2 variables. - D4Group.h - - - - transform_to_dap4 - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a3affad818961b2e7e984415cdd3c6e9e - DAP2 to DAP4 transform. - Constructor.h - - - - type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - Returns the type of the class instance. - BaseType.h - - - - type_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a18a42c8ec35cb5b15cd651a4152f8a2c - Returns the type of the class instance as a string. - BaseType.h - - - - val2buf - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ac742b1bf93889e541128b1d123821ee6 - Loads class data. - Constructor.h - - - - var - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a36a7412da7b5257d7666add726fea1a6 - btp_stack no longer needed; use back pointers (BaseType::get_parent()) - Constructor.h - - - - var - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a68f1779dc328f890062722d90fad084a - Constructor.h - - - - var_begin - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - adeafe3d6c82d07b456a598a7b446c2c6 - Constructor.h - - - - var_end - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a936b38c7c35ffb4fe17c5b8e85bdaaa2 - Constructor.h - - - - var_rbegin - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - aa025cf546ca35250454653c1ec684d91 - Constructor.h - - - - var_rend - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - aede7cf5889e101db1ea8f22c3a84a5d3 - Constructor.h - - - - width - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a0b1e3ae7195f95c42ca98f42826a1ff5 - Constructor.h - - - - attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a97452f06d2188eb838399a709246b5e9 - BaseType.h - - - - m_duplicate - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a0c55b826c8c5dfe7a454dc670e859a41 - Perform a deep copy. - BaseType.h - - - - libdap::D4Map - c - cl - libdap::D4Map - - classlibdap_1_1D4Map.html - D4Maps.h - - - - parent - cpp - instm - libdap::D4Map - - classlibdap_1_1D4Map.html - a98ec8c14264c5a37d7009db73bd96e89 - The Array that holds this Map. - D4Maps.h - - - - libdap::D4Maps - c - cl - libdap::D4Maps - - classlibdap_1_1D4Maps.html - D4Maps.h - - - - add_map - cpp - instm - libdap::D4Maps - - classlibdap_1_1D4Maps.html - afc9c47e9fcf1372407567a047f6642b5 - D4Maps.h - - - - libdap::D4Opaque - c - cl - libdap::D4Opaque - - classlibdap_1_1D4Opaque.html - - - - add_var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adca3c2621c4a509537c18362005d7f7f - Add a variable. - BaseType.h - - - - buf2val - cpp - instm - libdap::D4Opaque - - classlibdap_1_1D4Opaque.html - a144049483741bfd39e3ac17bc480f6e4 - Reads the class data. - D4Opaque.h - - - - check_semantics - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aec503abec2fd3090e7738c0a575491f8 - Compare an object&#39;s current state with the semantics of its type. - BaseType.h - - - - clear_local_data - cpp - instm - libdap::D4Opaque - - classlibdap_1_1D4Opaque.html - a1902dc3e133b35b1cab454b8136525b3 - D4Opaque.h - - - - compute_checksum - cpp - instm - libdap::D4Opaque - - classlibdap_1_1D4Opaque.html - a084b31aa9073775472a8ca16d30950a6 - include the data for this variable in the checksum DAP4 includes a checksum with every data response... - D4Opaque.h - - - - d4_ops - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a512a356f31ed6c4c1a368da0b054408a - Evaluator a relop for DAP4. - BaseType.h - - - - dataset - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a47521ce321a17e6ce217870cb6a1a7aa - Returns the name of the dataset used to create this instance. - BaseType.h - - - - deserialize - cpp - instm - libdap::D4Opaque - - classlibdap_1_1D4Opaque.html - a055e793d61a140ffbfcde18d0395f6f6 - Receive data from the net. - D4Opaque.h - - - - deserialize - cpp - instm - libdap::D4Opaque - - classlibdap_1_1D4Opaque.html - a05a39516928c96e53b5c63ebf003de01 - D4Opaque.h - - - - dump - cpp - instm - libdap::D4Opaque - - classlibdap_1_1D4Opaque.html - aaa416d5ed6dc0d114abbbd32e7c17c05 - dumps information about this object - D4Opaque.h - - - - element_count - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5c2235737737b482bfa7536b8aeab810 - Count the members of constructor types. - BaseType.h - - - - FQN - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - BaseType.h - - - - get_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1fcd9537c67e3bf88964b2656ff5bac1 - BaseType.h - - - - get_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a3459cdaa239c33ce111ef360d8dc3017 - BaseType.h - - - - is_constructor_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8b8490e0047c6da52945699a132008ea - Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable... - BaseType.h - - - - is_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - Is this variable part of the current selection? - BaseType.h - - - - is_simple_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aae57e5b270b3a015d40c8db10b9b5549 - Returns true if the instance is a numeric, string or URL type variable. - BaseType.h - - - - is_vector_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a7107c76dbcab71015141142383b6d022 - Returns true if the instance is a vector (i.e., array) type variable. - BaseType.h - - - - length - cpp - instm - libdap::D4Opaque - - classlibdap_1_1D4Opaque.html - a23a23d312b74ec2989372033aebaa72f - How many elements are in this variable. - D4Opaque.h - - - - name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a24c5d67823b3cff7f4245a993072a142 - Returns the name of the class instance. - BaseType.h - - - - ops - cpp - instm - libdap::D4Opaque - - classlibdap_1_1D4Opaque.html - aedf47172b055ecbe59363808903b5f94 - Evaluate relational operators. - D4Opaque.h - - - - print_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afcddbe441380b95c894510c02980b163 - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2d799fad93255d7f2b803562ae7a5784 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afd744b0ddeb04e7b173c9e83423ec572 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_val - cpp - instm - libdap::D4Opaque - - classlibdap_1_1D4Opaque.html - ae4521e7e5c38c7002dea687ada0e46f9 - Prints the value of the variable. - D4Opaque.h - - - - print_val - cpp - instm - libdap::D4Opaque - - classlibdap_1_1D4Opaque.html - ae27d35b688dd9a246c4ac0d9eed8d2cb - Prints the value of the variable. - D4Opaque.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a825820edee179550cfde3dfd4d274f2a - BaseType.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8bd2c7682edd48c64b210bdf247bdef7 - BaseType.h - - - - print_xml_writer - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a11554ff931528b243e9af8173d205b44 - BaseType.h - - - - ptr_duplicate - cpp - instm - libdap::D4Opaque - - classlibdap_1_1D4Opaque.html - ada8cd83c8995fa8099adc1e23b8aeb1f - D4Opaque.h - - - - read - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1da003c53f2e663223f603ab3fbd7c8e - Read data into a local buffer. - BaseType.h - - - - read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a38ff819a432217c55db2e9071928d20c - Has this variable been read? - BaseType.h - - - - send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a980c0013817836aa77ef74aeec7fb192 - Should this variable be sent? - BaseType.h - - - - serialize - cpp - instm - libdap::D4Opaque - - classlibdap_1_1D4Opaque.html - a5d6753586eefbca214e866fea703e743 - Move data to the net, then remove them from the object. - D4Opaque.h - - - - serialize - cpp - instm - libdap::D4Opaque - - classlibdap_1_1D4Opaque.html - a83417f08ec539cc7ec6a1c76fd9029a8 - The DAP4 serialization method. Serialize a variable&#39;s values for DAP4. This does not write the DMR pe... - D4Opaque.h - - - - set_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a572a1d76a75981abac83a4241e90c0fa - BaseType.h - - - - set_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2bc036248cdaf1affac464170f32ad30 - BaseType.h - - - - set_length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4fe343c1eeb6fb1d61ab030433651d90 - Set the number of elements for this variable. - BaseType.h - - - - set_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a86504564f45a3e6748c6f1cc0ff4e9fa - Sets the name of the class instance. - BaseType.h - - - - set_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - BaseType.h - - - - set_read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4533905a450d2a7af32e7d5acd557676 - Sets the value of the read_p property. - BaseType.h - - - - set_send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aba7b27635c95b74536de18393133628e - BaseType.h - - - - set_synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a595cb4059cff24f801a1b6da79bd2f9e - BaseType.h - - - - set_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af74f8d1ef57c9fcca46f620f75d175a3 - Sets the type of the class instance. - BaseType.h - - - - set_value - cpp - instm - libdap::D4Opaque - - classlibdap_1_1D4Opaque.html - ae2a2a38798436fcff40bdf0f2d7895b2 - D4Opaque.h - - - - synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae64e677da27249473cdba0b60cdbb90a - BaseType.h - - - - toString - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a701eb3361f5b5628329ece019cd34519 - BaseType.h - - - - transfer_attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - add8e836c622042a339152a6c31e5bdfb - BaseType.h - - - - transform_to_dap2 - cpp - instm - libdap::D4Opaque - - classlibdap_1_1D4Opaque.html - a055cc952c257d9069d4da12c47f1f148 - DAP4 to DAP2 transform. - D4Opaque.h - - - - transform_to_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adb03e2e1e40c3c888577c4666831a949 - DAP2 to DAP4 transform. - BaseType.h - - - - type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - Returns the type of the class instance. - BaseType.h - - - - type_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a18a42c8ec35cb5b15cd651a4152f8a2c - Returns the type of the class instance as a string. - BaseType.h - - - - val2buf - cpp - instm - libdap::D4Opaque - - classlibdap_1_1D4Opaque.html - abaec2b7412c175c02116ace998b57bf2 - Loads class data. - D4Opaque.h - - - - value - cpp - instm - libdap::D4Opaque - - classlibdap_1_1D4Opaque.html - ab5240d13c4373a6913d1e263567cd5b6 - D4Opaque.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4dc4fac1bb6083f6db645f37bfd59b85 - Returns a pointer to a member of a constructor class. - BaseType.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adecfc442b5927c79933c7f71cfe03fd2 - BaseType.h - - - - width - cpp - instm - libdap::D4Opaque - - classlibdap_1_1D4Opaque.html - a209fc10e6550ae7a5e19ad12453a7e26 - How many bytes does this variable use Return the number of bytes of storage this variable uses... - D4Opaque.h - - - - attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a97452f06d2188eb838399a709246b5e9 - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a722d33783aa0272d339b0301a4f77e59 - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1956e6ea90a745516f5372c859173433 - Read data into this variable. - BaseType.h - - - - m_duplicate - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a0c55b826c8c5dfe7a454dc670e859a41 - Perform a deep copy. - BaseType.h - - - - libdap::D4ParseError - c - cl - libdap::D4ParseError - - classlibdap_1_1D4ParseError.html - D4ParseError.h - - - - get_error_code - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - aaca0caca09e939602cade604cbc9824f - Error.h - - - - get_error_message - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - ab24a61e4974aae62962a40f9975e674c - Error.h - - - - OK - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - acf3ab60821773bd8b62284750b02cfc0 - Is the Error object valid? - Error.h - - - - parse - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - ac705b3c1cfab1f7530d66a974eb0e8b6 - Parse an Error object. - Error.h - - - - print - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a552d711be27e6695854bd2b977a5cf31 - Error.h - - - - print - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a4c58ef196c2b247bd37529bb7ad6a666 - Error.h - - - - set_error_code - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a47c0f4b6a38d8ca075d1056076d2845d - Error.h - - - - set_error_message - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a3ca90d33bf1c95529c9eefdfe8646e34 - Error.h - - - - what - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - accc5eeb469c8c18ec16dbf7fefe3cc41 - The pointer is valid only for the lifetime of the Error instance. jhrg 9/22/20. - Error.h - - - - libdap::D4ParserSax2 - c - cl - libdap::D4ParserSax2 - - classlibdap_1_1D4ParserSax2.html - D4ParserSax2.h - - - - get_strict - cpp - instm - libdap::D4ParserSax2 - - group__strict.html - ga030fddcb0529be0999faffd9c0fb7e16 - Get the setting of the &#39;strict&#39; mode. - D4ParserSax2.h - - - - intern - cpp - instm - libdap::D4ParserSax2 - - classlibdap_1_1D4ParserSax2.html - a0470239619369dc7f3110dd0119d1ca4 - D4ParserSax2.h - - - - set_strict - cpp - instm - libdap::D4ParserSax2 - - group__strict.html - gad0fb36451a4348afb0a294f709c905f2 - Set the &#39;strict&#39; mode to true or false. - D4ParserSax2.h - - - - dmr_start_document - cpp - clm - libdap::D4ParserSax2 - - classlibdap_1_1D4ParserSax2.html - a38cecaf3381b7246174ff6f7e778d1ad - D4ParserSax2.h - - - - dmr_end_document - cpp - clm - libdap::D4ParserSax2 - - classlibdap_1_1D4ParserSax2.html - aa277fa53252611de8eb328d444bd9e68 - D4ParserSax2.h - - - - dmr_start_element - cpp - clm - libdap::D4ParserSax2 - - classlibdap_1_1D4ParserSax2.html - a3ff316744cfc6089eb97af4f279fa41f - D4ParserSax2.h - - - - dmr_get_characters - cpp - clm - libdap::D4ParserSax2 - - classlibdap_1_1D4ParserSax2.html - a8141fef163be7a66638a3cbb0dc39226 - D4ParserSax2.h - - - - dmr_ignoreable_whitespace - cpp - clm - libdap::D4ParserSax2 - - classlibdap_1_1D4ParserSax2.html - a5ef9554850be4d66c774a8c57246dcec - D4ParserSax2.h - - - - dmr_get_cdata - cpp - clm - libdap::D4ParserSax2 - - classlibdap_1_1D4ParserSax2.html - ad7764b38a30bc591dc5de3f00ff0af02 - D4ParserSax2.h - - - - dmr_get_entity - cpp - clm - libdap::D4ParserSax2 - - classlibdap_1_1D4ParserSax2.html - aef046d4042bd2f28ce897472f3dfc88e - D4ParserSax2.h - - - - dmr_fatal_error - cpp - clm - libdap::D4ParserSax2 - - classlibdap_1_1D4ParserSax2.html - af3d2bb4ddbb574e821f051311cb2a23c - D4ParserSax2.h - - - - libdap::D4RValue - c - cl - libdap::D4RValue - - classlibdap_1_1D4RValue.html - D4RValue.h - - - - get_kind - cpp - instm - libdap::D4RValue - - classlibdap_1_1D4RValue.html - a0ec4de806c9988928ba70ddf370e8b57 - What kind of thing holds the value Values in DAP4 constraints are either constants, dataset variables or function results. It might be nice to know the source of a given value in order to optimize the evaluation of certain kinds of expressions. - D4RValue.h - - - - value - cpp - instm - libdap::D4RValue - - classlibdap_1_1D4RValue.html - adf12fcbb253d9c336527ae12354ae56d - Get the value for a RValue object Return the BaseType * for a given RValue. For a dataset variable... - D4RValue.h - - - - value - cpp - instm - libdap::D4RValue - - classlibdap_1_1D4RValue.html - a2f997dd3fef21a46b2655bb4e44f4821 - Get the value for a RValue object. - D4RValue.h - - - - libdap::D4RValueList - c - cl - libdap::D4RValueList - - classlibdap_1_1D4RValueList.html - - - - libdap::D4Sequence - c - cl - libdap::D4Sequence - - classlibdap_1_1D4Sequence.html - Holds a sequence. - D4Sequence.h - - - - add_var - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a2585c69c45b9ebec9c63993248eb5b4b - Constructor.h - - - - add_var_nocopy - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - abdb52463a46e1b10040f245d4ed7642b - Constructor.h - - - - buf2val - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ac4dc7e8099322b5b403a7d0ae9079006 - Reads the class data. - Constructor.h - - - - check_semantics - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - afe010638fd2ca9aab00dd1c21a9e4825 - Compare an object&#39;s current state with the semantics of its type. - Constructor.h - - - - clauses - cpp - instm - libdap::D4Sequence - - classlibdap_1_1D4Sequence.html - a5dd9d6d34a348bae0dcbc0f69f41bcea - Access the filter clauses for this D4Sequence. - D4Sequence.h - - - - clear_local_data - cpp - instm - libdap::D4Sequence - - classlibdap_1_1D4Sequence.html - afb387a094931d25177c61fd0fff9c833 - D4Sequence.h - - - - compute_checksum - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a287ab9a4deb81a8ced6d8432be647925 - include the data for this variable in the checksum DAP4 includes a checksum with every data response... - Constructor.h - - - - d4_ops - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a512a356f31ed6c4c1a368da0b054408a - Evaluator a relop for DAP4. - BaseType.h - - - - D4Sequence - cpp - instm - libdap::D4Sequence - - classlibdap_1_1D4Sequence.html - a2aaf91e5a87163c7cc9f345c93cd15c7 - The Sequence constructor. - D4Sequence.h - - - - D4Sequence - cpp - instm - libdap::D4Sequence - - classlibdap_1_1D4Sequence.html - ae702ae63e21cc1751466ca0358ef2ddb - The Sequence server-side constructor. - D4Sequence.h - - - - D4Sequence - cpp - instm - libdap::D4Sequence - - classlibdap_1_1D4Sequence.html - aa1c1e3db85c05113ec8f894f147e427a - The Sequence copy constructor. - D4Sequence.h - - - - dataset - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a47521ce321a17e6ce217870cb6a1a7aa - Returns the name of the dataset used to create this instance. - BaseType.h - - - - del_var - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - af38d3785c4a7cd0063cbb9fc5943333c - Constructor.h - - - - deserialize - cpp - instm - libdap::D4Sequence - - classlibdap_1_1D4Sequence.html - aa0bee29380a5dd0de2b87f13ea7787d7 - Receive data from the net. - D4Sequence.h - - - - deserialize - cpp - instm - libdap::D4Sequence - - classlibdap_1_1D4Sequence.html - a86cf5e86a736777e4211fd8e82f4bb2a - D4Sequence.h - - - - dump - cpp - instm - libdap::D4Sequence - - classlibdap_1_1D4Sequence.html - acbe77409b7341fd19c03d6bb6e827819 - dumps information about this object - D4Sequence.h - - - - element_count - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a1c2eecff00fa7e3af175c711d00fb86e - Count the members of constructor types. - Constructor.h - - - - FQN - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - afa6c06dab830b4e089641b44fea8293c - Constructor.h - - - - get_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1fcd9537c67e3bf88964b2656ff5bac1 - BaseType.h - - - - get_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a3459cdaa239c33ce111ef360d8dc3017 - BaseType.h - - - - get_var_index - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ac2b4b28ed9d6f435129aa599ab809799 - Constructor.h - - - - get_vars_iter - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a1e6d8224e04d75e3d2a21263957cd42f - Constructor.h - - - - intern_data - cpp - instm - libdap::D4Sequence - - classlibdap_1_1D4Sequence.html - af9e0a54e85a84702353dacef30ead588 - D4Sequence.h - - - - intern_data - cpp - instm - libdap::D4Sequence - - classlibdap_1_1D4Sequence.html - a714bcce811fd596d88cd81c104e928c1 - Read data into this variable. - D4Sequence.h - - - - is_constructor_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8b8490e0047c6da52945699a132008ea - Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable... - BaseType.h - - - - is_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - Is this variable part of the current selection? - BaseType.h - - - - is_linear - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - af26f89e9c0732a9c32bd5e15d716a7d7 - Check to see whether this variable can be printed simply. - Constructor.h - - - - is_simple_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aae57e5b270b3a015d40c8db10b9b5549 - Returns true if the instance is a numeric, string or URL type variable. - BaseType.h - - - - is_vector_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a7107c76dbcab71015141142383b6d022 - Returns true if the instance is a vector (i.e., array) type variable. - BaseType.h - - - - length - cpp - instm - libdap::D4Sequence - - classlibdap_1_1D4Sequence.html - afd54c5799e2d87fde4f1a28cdd5ff95d - The number of elements in a Sequence object. - D4Sequence.h - - - - name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a24c5d67823b3cff7f4245a993072a142 - Returns the name of the class instance. - BaseType.h - - - - ops - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8a0000be2a244e3e07abda3020af8800 - Evaluate relational operators. - BaseType.h - - - - print_dap4 - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a0f130e129b06773a9f3c94e3b492bb5c - Constructor.h - - - - print_decl - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ab7fb094be8da2a9f80f6d3b85e452934 - Print an ASCII representation of the variable structure. - Constructor.h - - - - print_decl - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a6c2c4d7cbe1d6239c037272ec865f80b - Print an ASCII representation of the variable structure. - Constructor.h - - - - print_val - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - aa7f9cce8ca18461af332aab61123bf23 - Prints the value of the variable. - Constructor.h - - - - print_val - cpp - instm - libdap::D4Sequence - - classlibdap_1_1D4Sequence.html - a12be119aa3e3ef128a213c3c3ed162d2 - Prints the value of the variable. - D4Sequence.h - - - - print_xml - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a32de0413045173aa8803f540a6cea39b - Constructor.h - - - - print_xml - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a7bbe6beabd94f576140e132e7a1017ff - Constructor.h - - - - print_xml_writer - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ab775a5e7e63757ac961b43800a95635f - Constructor.h - - - - ptr_duplicate - cpp - instm - libdap::D4Sequence - - classlibdap_1_1D4Sequence.html - a784f34f6c6c058546d03341a59a4d228 - D4Sequence.h - - - - read - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ad0af40e2565972fa44985d173370c264 - simple implementation of read that iterates through vars and calls read on them - Constructor.h - - - - read_next_instance - cpp - instm - libdap::D4Sequence - - classlibdap_1_1D4Sequence.html - a10c99a2d311fa1db0c4ffd09499d33e6 - Read the next instance of the sequence While the rest of the variables&#39; read() methods are assumed to... - D4Sequence.h - - - - read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a38ff819a432217c55db2e9071928d20c - Has this variable been read? - BaseType.h - - - - row_value - cpp - instm - libdap::D4Sequence - - classlibdap_1_1D4Sequence.html - a01ae73579db91a6d55ace7278ecd58a1 - Get a whole row from the sequence. - D4Sequence.h - - - - send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a980c0013817836aa77ef74aeec7fb192 - Should this variable be sent? - BaseType.h - - - - serialize - cpp - instm - libdap::D4Sequence - - classlibdap_1_1D4Sequence.html - a2fb5f1dea7b57cef2ffb184f4855a3f4 - Move data to the net, then remove them from the object. - D4Sequence.h - - - - serialize - cpp - instm - libdap::D4Sequence - - classlibdap_1_1D4Sequence.html - aac396e4b859d246caf2a719be66a3cac - Serialize the values of a D4Sequence This method assumes that the underlying data store cannot/does n... - D4Sequence.h - - - - set_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a572a1d76a75981abac83a4241e90c0fa - BaseType.h - - - - set_in_selection - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ac30becb1ffe7d2cd4cbcd24fc216c9a3 - Set the in_selection property. - Constructor.h - - - - set_length - cpp - instm - libdap::D4Sequence - - classlibdap_1_1D4Sequence.html - abb2e9c282480cee7f53f7af00618a441 - D4Sequence.h - - - - set_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a86504564f45a3e6748c6f1cc0ff4e9fa - Sets the name of the class instance. - BaseType.h - - - - set_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - BaseType.h - - - - set_read_p - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - af52e60d8589eed1a18a14e9c6a57db65 - Sets the value of the read_p property. - Constructor.h - - - - set_send_p - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - aafbcf9bef6719fe60ac707e02956e09d - Constructor.h - - - - set_synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a595cb4059cff24f801a1b6da79bd2f9e - BaseType.h - - - - set_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af74f8d1ef57c9fcca46f620f75d175a3 - Sets the type of the class instance. - BaseType.h - - - - set_value - cpp - instm - libdap::D4Sequence - - classlibdap_1_1D4Sequence.html - a1f5efd16cb2c3d0a6f3ef12eb2f0fc67 - Set the internal value. The &#39;values&#39; of a D4Sequence is a vector of vectors of BaseType* objects... - D4Sequence.h - - - - synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae64e677da27249473cdba0b60cdbb90a - BaseType.h - - - - toString - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a701eb3361f5b5628329ece019cd34519 - BaseType.h - - - - transfer_attributes - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a799d2bd8ef9505b1d493d8cd73b72746 - Constructor.h - - - - transform_to_dap2 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - affec8a11e9cc035d4b1e8fb9a87b2072 - DAP4 to DAP2 transform. - BaseType.h - - - - transform_to_dap4 - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a3affad818961b2e7e984415cdd3c6e9e - DAP2 to DAP4 transform. - Constructor.h - - - - type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - Returns the type of the class instance. - BaseType.h - - - - type_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a18a42c8ec35cb5b15cd651a4152f8a2c - Returns the type of the class instance as a string. - BaseType.h - - - - val2buf - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ac742b1bf93889e541128b1d123821ee6 - Loads class data. - Constructor.h - - - - value - cpp - instm - libdap::D4Sequence - - classlibdap_1_1D4Sequence.html - a6d5152308495305816b986891a7d3529 - Get the values for this D4Sequence This method returns a reference to the values held by the instance... - D4Sequence.h - - - - value_ref - cpp - instm - libdap::D4Sequence - - classlibdap_1_1D4Sequence.html - aee7a551768b2b80ad1189c48fd92f832 - Get the sequence values by reference This method returns a reference to the D4Sequence&#39;s values... - D4Sequence.h - - - - var - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a36a7412da7b5257d7666add726fea1a6 - btp_stack no longer needed; use back pointers (BaseType::get_parent()) - Constructor.h - - - - var - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a68f1779dc328f890062722d90fad084a - Constructor.h - - - - var_begin - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - adeafe3d6c82d07b456a598a7b446c2c6 - Constructor.h - - - - var_end - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a936b38c7c35ffb4fe17c5b8e85bdaaa2 - Constructor.h - - - - var_rbegin - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - aa025cf546ca35250454653c1ec684d91 - Constructor.h - - - - var_rend - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - aede7cf5889e101db1ea8f22c3a84a5d3 - Constructor.h - - - - var_value - cpp - instm - libdap::D4Sequence - - classlibdap_1_1D4Sequence.html - ac7d746f2ab07a0779d7c9219dfadf31c - Get the BaseType pointer to the named variable of a given row. - D4Sequence.h - - - - var_value - cpp - instm - libdap::D4Sequence - - classlibdap_1_1D4Sequence.html - ac47ec6d389020cea11e414a7fe2e65b0 - Get the BaseType pointer to the $i^{th}$ variable of row. - D4Sequence.h - - - - width - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a0b1e3ae7195f95c42ca98f42826a1ff5 - Constructor.h - - - - attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a97452f06d2188eb838399a709246b5e9 - BaseType.h - - - - m_duplicate - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a0c55b826c8c5dfe7a454dc670e859a41 - Perform a deep copy. - BaseType.h - - - - read_sequence_values - cpp - instm - libdap::D4Sequence - - classlibdap_1_1D4Sequence.html - aba8a56e291c0aa8058c80be4f956bd74 - Read a Sequence&#39;s value into memory. - D4Sequence.h - - - - libdap::D4StreamMarshaller - c - cl - libdap::D4StreamMarshaller - - classlibdap_1_1D4StreamMarshaller.html - Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv... - D4StreamMarshaller.h - - - - checksum_update - cpp - instm - libdap::D4StreamMarshaller - - classlibdap_1_1D4StreamMarshaller.html - ae2d562a21a2631f32f305eb387817014 - D4StreamMarshaller.h - - - - D4StreamMarshaller - cpp - instm - libdap::D4StreamMarshaller - - classlibdap_1_1D4StreamMarshaller.html - a978005078f2c0810e424a97dcf9f3317 - D4StreamMarshaller.h - - - - dump - cpp - instm - libdap::D4StreamMarshaller - - classlibdap_1_1D4StreamMarshaller.html - a92b392f76e951b1611796870b82a3af9 - dump the contents of this object to the specified ostream - D4StreamMarshaller.h - - - - get_checksum - cpp - instm - libdap::D4StreamMarshaller - - classlibdap_1_1D4StreamMarshaller.html - af8ab8224637c2c673b59baa6dd583759 - D4StreamMarshaller.h - - - - put_checksum - cpp - instm - libdap::D4StreamMarshaller - - classlibdap_1_1D4StreamMarshaller.html - a16a0f121e713cb391fe00284f6c656c4 - Write the checksum Write the checksum for the data sent since the last call to reset_checksum() to th... - D4StreamMarshaller.h - - - - put_count - cpp - instm - libdap::D4StreamMarshaller - - classlibdap_1_1D4StreamMarshaller.html - a9ac90afeac1465d2c35719ede1e3c0ec - D4StreamMarshaller.h - - - - put_vector - cpp - instm - libdap::D4StreamMarshaller - - classlibdap_1_1D4StreamMarshaller.html - a8f6b04b483ed9847e4e36969af2a08e0 - Write a fixed size vector. - D4StreamMarshaller.h - - - - put_vector_end - cpp - instm - libdap::D4StreamMarshaller - - classlibdap_1_1D4StreamMarshaller.html - af8ee88d2bbe84932a14719c7b176167d - D4StreamMarshaller.h - - - - put_vector_float32 - cpp - instm - libdap::D4StreamMarshaller - - classlibdap_1_1D4StreamMarshaller.html - a6fb8d61bd9c50d6e6821d849e02d9fb5 - Write a fixed size vector. - D4StreamMarshaller.h - - - - put_vector_float64 - cpp - instm - libdap::D4StreamMarshaller - - classlibdap_1_1D4StreamMarshaller.html - af2513d572ee927a7ffc98ab4a271fac6 - Write a fixed size vector of float64s. - D4StreamMarshaller.h - - - - put_vector_part - cpp - instm - libdap::D4StreamMarshaller - - classlibdap_1_1D4StreamMarshaller.html - a792123584b2e6700a8f61663ebbf0460 - D4StreamMarshaller.h - - - - put_vector_start - cpp - instm - libdap::D4StreamMarshaller - - classlibdap_1_1D4StreamMarshaller.html - a20af2f5bb5f046c1749b4dad380047ed - D4StreamMarshaller.h - - - - reset_checksum - cpp - instm - libdap::D4StreamMarshaller - - classlibdap_1_1D4StreamMarshaller.html - a4009f8aba9d7c19ae464af849c504177 - D4StreamMarshaller.h - - - - libdap::D4StreamUnMarshaller - c - cl - libdap::D4StreamUnMarshaller - - classlibdap_1_1D4StreamUnMarshaller.html - Read data from the stream made by D4StreamMarshaller. - D4StreamUnMarshaller.h - - - - D4StreamUnMarshaller - cpp - instm - libdap::D4StreamUnMarshaller - - classlibdap_1_1D4StreamUnMarshaller.html - a5a42def8c559570e04f46ea6feba7efa - Build a DAP4 Stream unMarshaller. - D4StreamUnMarshaller.h - - - - D4StreamUnMarshaller - cpp - instm - libdap::D4StreamUnMarshaller - - classlibdap_1_1D4StreamUnMarshaller.html - afcf81b26351507aa4ed3b011648646b6 - D4StreamUnMarshaller.h - - - - dump - cpp - instm - libdap::D4StreamUnMarshaller - - classlibdap_1_1D4StreamUnMarshaller.html - ab25aaee0813767bad8309e21945fe8fb - dump the contents of this object to the specified ostream - D4StreamUnMarshaller.h - - - - get_count - cpp - instm - libdap::D4StreamUnMarshaller - - classlibdap_1_1D4StreamUnMarshaller.html - a891d4d6570feaac2cf6558940b0c82ed - D4StreamUnMarshaller.h - - - - get_opaque_dap4 - cpp - instm - libdap::D4StreamUnMarshaller - - classlibdap_1_1D4StreamUnMarshaller.html - a98fcfd8205bc819fc4548acba9402946 - D4StreamUnMarshaller.h - - - - is_source_big_endian - cpp - instm - libdap::D4StreamUnMarshaller - - classlibdap_1_1D4StreamUnMarshaller.html - a476fdcae5c5b7a077548fa138275b842 - Is the data source we are reading from a big-endian machine? We need this because the value of the CR... - D4StreamUnMarshaller.h - - - - libdap::DAPCache3 - c - cl - libdap::DAPCache3 - - classlibdap_1_1DAPCache3.html - Implementation of a caching mechanism for compressed data. This cache uses simple advisory locking fo... - DAPCache3.h - - - - cache_too_big - cpp - instm - libdap::DAPCache3 - - classlibdap_1_1DAPCache3.html - a485d7a65317308cefff252998acdd142 - look at the cache size; is it too large? Look at the cache size and see if it is too big... - DAPCache3.h - - - - create_and_lock - cpp - instm - libdap::DAPCache3 - - classlibdap_1_1DAPCache3.html - afcf4ad0cb6808bf453a262d29b8f6169 - Create a file in the cache and lock it for write access. If the file does not exist, make it, open it for read-write access and get an exclusive lock on it. The locking operation blocks, although that should never happen. - DAPCache3.h - - - - dump - cpp - instm - libdap::DapObj - - classlibdap_1_1DapObj.html - a51e52c3fbaad17173676a8bd48d16047 - dump the contents of this object to the specified ostream - DapObj.h - - - - dump - cpp - instm - libdap::DAPCache3 - - classlibdap_1_1DAPCache3.html - a7c688942b296c46d7977e4f87a7220e0 - dumps information about this object - DAPCache3.h - - - - exclusive_to_shared_lock - cpp - instm - libdap::DAPCache3 - - classlibdap_1_1DAPCache3.html - a89b43f4929a90b4708c155257b40fae2 - Transfer from an exclusive lock to a shared lock. If the file has an exclusive write lock on it... - DAPCache3.h - - - - get_cache_file_name - cpp - instm - libdap::DAPCache3 - - classlibdap_1_1DAPCache3.html - a3620d839ba6727d0245c61541ef8e6d0 - DAPCache3.h - - - - get_cache_size - cpp - instm - libdap::DAPCache3 - - classlibdap_1_1DAPCache3.html - a20cccf6a9c84957acf358418f2f920fe - Get the cache size. Read the size information from the cache info file and return it... - DAPCache3.h - - - - get_read_lock - cpp - instm - libdap::DAPCache3 - - classlibdap_1_1DAPCache3.html - a5065a7f6678bdb34ba3e9615e9f5554e - Get a read-only lock on the file if it exists. - DAPCache3.h - - - - lock_cache_read - cpp - instm - libdap::DAPCache3 - - classlibdap_1_1DAPCache3.html - a8b68e963914b0fe307a37b86a6986599 - DAPCache3.h - - - - lock_cache_write - cpp - instm - libdap::DAPCache3 - - classlibdap_1_1DAPCache3.html - af75c177ee450c8f18e3570c0ebefd8ac - DAPCache3.h - - - - purge_file - cpp - instm - libdap::DAPCache3 - - classlibdap_1_1DAPCache3.html - a48cd52daa0ae17a1b3abc84473d0e66e - Purge a single file from the cache. - DAPCache3.h - - - - unlock_and_close - cpp - instm - libdap::DAPCache3 - - classlibdap_1_1DAPCache3.html - a782bf630f76e5bcab4c356db6101d346 - DAPCache3.h - - - - unlock_cache - cpp - instm - libdap::DAPCache3 - - classlibdap_1_1DAPCache3.html - a72f2d56a33176ac93ade3bf16c6c7ec6 - DAPCache3.h - - - - update_and_purge - cpp - instm - libdap::DAPCache3 - - classlibdap_1_1DAPCache3.html - ae115f42c90bdadc1e6700994c85c9176 - Purge files from the cache. - DAPCache3.h - - - - update_cache_info - cpp - instm - libdap::DAPCache3 - - classlibdap_1_1DAPCache3.html - ac3cc2b1e37e3c54080bb38d1abbc3b60 - Update the cache info file to include &#39;target&#39;. - DAPCache3.h - - - - get_instance - cpp - clm - libdap::DAPCache3 - - classlibdap_1_1DAPCache3.html - adfa607870d67dba981060b5fd4b0b768 - DAPCache3.h - - - - libdap::DapIndent - c - cl - libdap::DapIndent - - classlibdap_1_1DapIndent.html - class with static methods to help with indentation of debug information. - DapIndent.h - - - - libdap::DapObj - c - cl - libdap::DapObj - - classlibdap_1_1DapObj.html - libdap base object for common functionality of libdap objects - DapObj.h - - - - dump - cpp - instm - libdap::DapObj - - classlibdap_1_1DapObj.html - a51e52c3fbaad17173676a8bd48d16047 - dump the contents of this object to the specified ostream - DapObj.h - - - - libdap::DapXmlNamspaces - c - cl - libdap::DapXmlNamspaces - - classlibdap_1_1DapXmlNamspaces.html - - - - getDapNamespaceString - cpp - clm - libdap::DapXmlNamspaces - - classlibdap_1_1DapXmlNamspaces.html - aa0a6679dce20e370363fdecc3e3db900 - DapXmlNamespaces.h - - - - getGrddlTransformation - cpp - clm - libdap::DapXmlNamspaces - - classlibdap_1_1DapXmlNamspaces.html - a87412eeeda4437acaace734d57fd2340 - DapXmlNamespaces.h - - - - getSchemaLocationDeclarationString - cpp - clm - libdap::DapXmlNamspaces - - classlibdap_1_1DapXmlNamspaces.html - aa658834413eb190efdf5b5fdc1cf3f48 - DapXmlNamespaces.h - - - - getSchemaLocationString - cpp - clm - libdap::DapXmlNamspaces - - classlibdap_1_1DapXmlNamspaces.html - abc94ce74db1226a909f3c7af182fd45b - DapXmlNamespaces.h - - - - getXmlNamespace - cpp - clm - libdap::DapXmlNamspaces - - classlibdap_1_1DapXmlNamspaces.html - ac9d92de72bc32998a15d5a3568a5b791 - DapXmlNamespaces.h - - - - getXmlXsiNamespace - cpp - clm - libdap::DapXmlNamspaces - - classlibdap_1_1DapXmlNamspaces.html - af5894367a3b41eb87352e3c473efb5c8 - DapXmlNamespaces.h - - - - libdap::DAS - c - cl - libdap::DAS - - classlibdap_1_1DAS.html - Hold attribute data for a DAP2 dataset. - DAS.h - - - - container - cpp - instm - libdap::DAS - - classlibdap_1_1DAS.html - ae5d31b2dd7b948ed3b1fa71db3fa32eb - Returns the current attribute container when multiple files used to build this DAS. - DAS.h - - - - container_name - cpp - instm - libdap::DAS - - classlibdap_1_1DAS.html - afbb88a74e1fcfa857526019e4f730b57 - Returns the name of the current attribute container when multiple files used to build this DAS... - DAS.h - - - - container_name - cpp - instm - libdap::DAS - - classlibdap_1_1DAS.html - a46a47320689bd71f2f640de1848e958c - Sets the name of the current attribute container when multiple files used to build this DAS... - DAS.h - - - - dump - cpp - instm - libdap::DAS - - classlibdap_1_1DAS.html - a95501eff38ff4c1078a9d659fc6bd14b - dumps information about this object - DAS.h - - - - erase - cpp - instm - libdap::DAS - - classlibdap_1_1DAS.html - aee2b84645cf0825b20e0e68cca07bd2f - erase all attributes in this DAS - DAS.h - - - - get_name - cpp - instm - libdap::DAS - - classlibdap_1_1DAS.html - af4463849acea7b327626fc6f5f58da28 - Returns the name of the referenced variable attribute table. - DAS.h - - - - get_size - cpp - instm - libdap::DAS - - classlibdap_1_1DAS.html - a6b096a1c76874f7338a8e4a1d17ea724 - Returns the number of attributes in the current attribute table. - DAS.h - - - - get_table - cpp - instm - libdap::DAS - - classlibdap_1_1DAS.html - ac0cd00dbb4425986999832275ce84303 - Returns the referenced variable attribute table. - DAS.h - - - - get_table - cpp - instm - libdap::DAS - - classlibdap_1_1DAS.html - a64edb34eb9e89df6f5b1cd383319afde - Returns the variable attribute table with the given name. - DAS.h - - - - get_top_level_attributes - cpp - instm - libdap::DAS - - classlibdap_1_1DAS.html - a3bce04e836fabf8b0303e6a2dfd8664b - Returns the top most set of attributes. - DAS.h - - - - print - cpp - instm - libdap::DAS - - classlibdap_1_1DAS.html - a8983b961e6fba3a6fd33ffcfd944eaf2 - DAS.h - - - - print - cpp - instm - libdap::DAS - - classlibdap_1_1DAS.html - a32e72f6ecc303f270e40724dc7d3dfb7 - DAS.h - - - - var_begin - cpp - instm - libdap::DAS - - classlibdap_1_1DAS.html - a0f2d73b7f882231e2ff452cb4e89c113 - Returns a reference to the attribute table for the first variable. - DAS.h - - - - var_end - cpp - instm - libdap::DAS - - classlibdap_1_1DAS.html - a9a9c295e437408d7c91641f8d8dd23f7 - DAS.h - - - - add_table - cpp - instm - libdap::DAS - - classlibdap_1_1DAS.html - a77e38a71ab41ab58fd098603e1cd9cb8 - Adds a variable attribute table to the DAS or the current dataset container attribute table... - DAS.h - - - - parse - cpp - instm - libdap::DAS - - classlibdap_1_1DAS.html - aa84ac295a96a12f9f083a8210732f5a8 - Reads a DAS from the named file. - DAS.h - - - - parse - cpp - instm - libdap::DAS - - classlibdap_1_1DAS.html - a24a6bf97aae19d9d05f8172b424b11e2 - Read attributes from a file descriptor. - DAS.h - - - - parse - cpp - instm - libdap::DAS - - classlibdap_1_1DAS.html - a9afb27cb11b659ec8252c04b68935ba8 - Reads a DAS from an open file descriptor. - DAS.h - - - - libdap::DataDDS - c - cl - libdap::DataDDS - - classlibdap_1_1DataDDS.html - Holds a DAP2 DDS. - DataDDS.h - - - - add_var - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - ade87418e97ee5c7efd92279cd41e421c - Adds a copy of the variable to the DDS. Using the ptr_duplicate() method, perform a deep copy on the ... - DDS.h - - - - add_var_nocopy - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a0a9c873e5cbd8e75b4427875a38455bd - Adds the variable to the DDS. - DDS.h - - - - check_semantics - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a0d1bf35c18c77a15bb266a895f99f1c6 - Check the semantics of each of the variables represented in the DDS. - DDS.h - - - - DataDDS - cpp - instm - libdap::DataDDS - - classlibdap_1_1DataDDS.html - a726223338475f0ad01315475b358c0c6 - Make an instance of DataDDS A DataDDS instance is a DDS with additional information about the version... - DataDDS.h - - - - del_var - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a7030e5bf19371742219f14d6b3aeeedf - Removes a variable from the DDS. - DDS.h - - - - del_var - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - ac06f060770215ad790aa5437e567a215 - Removes a variable from the DDS. - DDS.h - - - - del_var - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a6ae053eca0eadcfa1368da8486bf5e06 - Removes a range of variables from the DDS. - DDS.h - - - - dump - cpp - instm - libdap::DataDDS - - classlibdap_1_1DataDDS.html - a386e17c1cd81a9c01ebf80489aee7127 - dumps information about this object - DataDDS.h - - - - get_attr_table - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a177e3df069cb0dcb3b30c0dcd236f8b3 - DDS.h - - - - get_dap_major - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - aced9c6fed3f727de8bff5d759780b966 - Get the DAP major version as sent by the client. - DDS.h - - - - get_dap_minor - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a8ecd1a8f622ead2c379567295f6b99a4 - Get the DAP minor version as sent by the client. - DDS.h - - - - get_das - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - aa02904d9b79b8d7a92b4f3bcbacc68aa - Get a DAS object. - DDS.h - - - - get_factory - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a28fe4bd419122bd8a82ededae0ab4a8b - DDS.h - - - - get_namespace - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a3c066d28e6aec58d2169a9099d0979a2 - Get the namespace associated with the DDS - likely set only by DDX responses. - DDS.h - - - - get_request_size - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a51bc473c9614419e880378686e7462b2 - Get the estimated response size. - DDS.h - - - - get_request_xml_base - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - ac2c33bda0c2148fce3da754f27a0323f - Get the URL that will return this DDS/DDX/DataThing. - DDS.h - - - - get_response_limit - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - af37da63ace68d6f07649913ac7ab95d2 - Get the maximum response size, in Bytes. Zero indicates no limit. - DDS.h - - - - get_var_index - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a5161e73a84f49c759bd411c8a3c3c356 - Get a variable. - DDS.h - - - - get_vars_iter - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a415f3083d3864eb04d6508772b3c4128 - Get an iterator. - DDS.h - - - - get_version - cpp - instm - libdap::DataDDS - - classlibdap_1_1DataDDS.html - a1c8b566c9413d7f50a9bcea1a4b23d46 - Get the server version string, unparsed. - DataDDS.h - - - - get_version_major - cpp - instm - libdap::DataDDS - - classlibdap_1_1DataDDS.html - a88cab0c2f0a783017691a47f7067c254 - Returns the major version number. - DataDDS.h - - - - get_version_minor - cpp - instm - libdap::DataDDS - - classlibdap_1_1DataDDS.html - ab86723ce18922f12e0d24e7dcb0579c7 - Returns the minor version number. - DataDDS.h - - - - insert_var - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a828c46d43447678bd736135946c9bacc - Insert a variable before the referenced element. - DDS.h - - - - insert_var_nocopy - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - abf72254ae41d26940b300c792611fa4e - DDS.h - - - - mark - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a88c063f273e5aa68b38df4d8e09fb426 - Mark the send_p flag of the named variable to state. - DDS.h - - - - mark_all - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a03c7fb8494b890e227279e70ba4b483e - DDS.h - - - - num_var - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a3e99a99da58051c745cc8a3ab82e3b38 - Returns the number of variables in the DDS. - DDS.h - - - - parse - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a733c8e49ed42ab47d74afe68056340e6 - Parse a DDS from a file with the given d_name. - DDS.h - - - - parse - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a3af2c3d3707f1a9c91d9c00937bb7325 - Parse a DDS from a file indicated by the input file descriptor. - DDS.h - - - - parse - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a02857d9355cd01dec621ae0bdf453075 - Parse a DDS from a file indicated by the input file descriptor. Read the persistent representation of... - DDS.h - - - - print - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a471a9e61f7154518b040a7818fa5a2b5 - Print the entire DDS to the specified file. - DDS.h - - - - print - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a535b5900c31f0038061f4aef5fa1c6c1 - Print the entire DDS to the specified ostream. - DDS.h - - - - print_constrained - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - aac3dca048c1d085d72b44df8b7088cd5 - Print a constrained DDS to the specified file. - DDS.h - - - - print_constrained - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - ab2e1cacd542373312d5154565b3c1571 - Print a constrained DDS to the specified ostream. - DDS.h - - - - print_das - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - afb0339f6ff59ad01a00cf132d68cb548 - write the DAS response given the attribute information in the DDS - DDS.h - - - - print_dmr - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a06da8fda5e65e039be2000f8fd22d295 - Print the DAP4 DMR object using a DDS. - DDS.h - - - - print_xml - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a80902a2bd86bd08392abbd3178a49b8b - DDS.h - - - - print_xml - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - af319354a044d02ea89732160131004dc - DDS.h - - - - print_xml_writer - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - af1b1fca603ab8d48220218a7771d064c - DDS.h - - - - set_dap_major - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a03062495c46ed3fad9fa0a5f6f6e8d00 - DDS.h - - - - set_dap_minor - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a358929d8f517dcdfe439037fb402351b - DDS.h - - - - set_dap_version - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - adcb80ef551e544b1cf527163cf54a30a - DDS.h - - - - set_dap_version - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a38cc72c3b47c508d597535b9c9a39c37 - DDS.h - - - - set_factory - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - abd73e1da6d32409062399c6e3333814a - DDS.h - - - - set_namespace - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a0d1c1e04bc651072a5a56210d86dd801 - Set the namespace for this DDS/DDX object/response. - DDS.h - - - - set_request_xml_base - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a1872d99f10b845eb15960916229a2457 - DDS.h - - - - set_response_limit - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a1d8dc5bcfaf287b360a10857837da952 - DDS.h - - - - set_version - cpp - instm - libdap::DataDDS - - classlibdap_1_1DataDDS.html - a971a9fa89f7a210c2d6fd2207a0041e5 - DataDDS.h - - - - tag_nested_sequences - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a9d4421c2ccfdbc5ebd4a7d963ab53795 - Traverse DDS, set Sequence leaf nodes. - DDS.h - - - - transfer_attributes - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a2810a944fbdc7d21b08f2d8c19022b52 - DDS.h - - - - var - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a74c67b99babe3317a0f76c8d8f7ba37a - DDS.h - - - - var - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - ab53f39cffc45142b4cb38117e5650487 - Find the variable with the given d_name. - DDS.h - - - - var_begin - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - aac98f248cd5730a8769f9d71af9788d3 - Return an iterator to the first variable. - DDS.h - - - - var_end - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - ad204bbd6eed8d440fb996f41bc986058 - Return an iterator. - DDS.h - - - - var_rbegin - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a395947ea7f5abab45e7bfe7541ec9dc2 - Return a reverse iterator. - DDS.h - - - - var_rend - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a098d88f09002ad80e27acdb81a52659e - Return a reverse iterator. - DDS.h - - - - get_dataset_name - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a60042aabde37ccaefd56174641284673 - DDS.h - - - - set_dataset_name - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a0138ce1c3b26968f968a6b723ec70dfb - DDS.h - - - - filename - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a1106220194c07459b481a2c190f62482 - DDS.h - - - - filename - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a3dc8062cbb44db0d9b5f47b1109effd9 - DDS.h - - - - container_name - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - aaca262d193346e04d4a6caa7acd117e2 - DDS.h - - - - container_name - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a025d5fef84ebc2d958a59e4297883d20 - DDS.h - - - - container - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - add7c78964a7574239e2d3dd6717a0f31 - DDS.h - - - - libdap::DDS - c - cl - libdap::DDS - - classlibdap_1_1DDS.html - DDS.h - - - - add_var - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - ade87418e97ee5c7efd92279cd41e421c - Adds a copy of the variable to the DDS. Using the ptr_duplicate() method, perform a deep copy on the ... - DDS.h - - - - add_var_nocopy - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a0a9c873e5cbd8e75b4427875a38455bd - Adds the variable to the DDS. - DDS.h - - - - check_semantics - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a0d1bf35c18c77a15bb266a895f99f1c6 - Check the semantics of each of the variables represented in the DDS. - DDS.h - - - - DDS - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a9c1073a70ad827f48791d62c472399e3 - DDS.h - - - - DDS - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a4baeb0eea6ebee7c0ed684817aca1f27 - DDS.h - - - - DDS - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - aee64217da3a62758690e62767e25168d - DDS.h - - - - del_var - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a7030e5bf19371742219f14d6b3aeeedf - Removes a variable from the DDS. - DDS.h - - - - del_var - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - ac06f060770215ad790aa5437e567a215 - Removes a variable from the DDS. - DDS.h - - - - del_var - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a6ae053eca0eadcfa1368da8486bf5e06 - Removes a range of variables from the DDS. - DDS.h - - - - dump - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - afb88b506187aac19b45cfe8b7d28af86 - dumps information about this object - DDS.h - - - - get_attr_table - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a177e3df069cb0dcb3b30c0dcd236f8b3 - DDS.h - - - - get_dap_major - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - aced9c6fed3f727de8bff5d759780b966 - Get the DAP major version as sent by the client. - DDS.h - - - - get_dap_minor - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a8ecd1a8f622ead2c379567295f6b99a4 - Get the DAP minor version as sent by the client. - DDS.h - - - - get_das - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - aa02904d9b79b8d7a92b4f3bcbacc68aa - Get a DAS object. - DDS.h - - - - get_factory - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a28fe4bd419122bd8a82ededae0ab4a8b - DDS.h - - - - get_namespace - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a3c066d28e6aec58d2169a9099d0979a2 - Get the namespace associated with the DDS - likely set only by DDX responses. - DDS.h - - - - get_request_size - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a51bc473c9614419e880378686e7462b2 - Get the estimated response size. - DDS.h - - - - get_request_xml_base - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - ac2c33bda0c2148fce3da754f27a0323f - Get the URL that will return this DDS/DDX/DataThing. - DDS.h - - - - get_response_limit - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - af37da63ace68d6f07649913ac7ab95d2 - Get the maximum response size, in Bytes. Zero indicates no limit. - DDS.h - - - - get_var_index - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a5161e73a84f49c759bd411c8a3c3c356 - Get a variable. - DDS.h - - - - get_vars_iter - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a415f3083d3864eb04d6508772b3c4128 - Get an iterator. - DDS.h - - - - insert_var - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a828c46d43447678bd736135946c9bacc - Insert a variable before the referenced element. - DDS.h - - - - insert_var_nocopy - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - abf72254ae41d26940b300c792611fa4e - DDS.h - - - - mark - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a88c063f273e5aa68b38df4d8e09fb426 - Mark the send_p flag of the named variable to state. - DDS.h - - - - mark_all - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a03c7fb8494b890e227279e70ba4b483e - DDS.h - - - - num_var - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a3e99a99da58051c745cc8a3ab82e3b38 - Returns the number of variables in the DDS. - DDS.h - - - - parse - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a733c8e49ed42ab47d74afe68056340e6 - Parse a DDS from a file with the given d_name. - DDS.h - - - - parse - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a3af2c3d3707f1a9c91d9c00937bb7325 - Parse a DDS from a file indicated by the input file descriptor. - DDS.h - - - - parse - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a02857d9355cd01dec621ae0bdf453075 - Parse a DDS from a file indicated by the input file descriptor. Read the persistent representation of... - DDS.h - - - - print - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a471a9e61f7154518b040a7818fa5a2b5 - Print the entire DDS to the specified file. - DDS.h - - - - print - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a535b5900c31f0038061f4aef5fa1c6c1 - Print the entire DDS to the specified ostream. - DDS.h - - - - print_constrained - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - aac3dca048c1d085d72b44df8b7088cd5 - Print a constrained DDS to the specified file. - DDS.h - - - - print_constrained - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - ab2e1cacd542373312d5154565b3c1571 - Print a constrained DDS to the specified ostream. - DDS.h - - - - print_das - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - afb0339f6ff59ad01a00cf132d68cb548 - write the DAS response given the attribute information in the DDS - DDS.h - - - - print_dmr - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a06da8fda5e65e039be2000f8fd22d295 - Print the DAP4 DMR object using a DDS. - DDS.h - - - - print_xml - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a80902a2bd86bd08392abbd3178a49b8b - DDS.h - - - - print_xml - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - af319354a044d02ea89732160131004dc - DDS.h - - - - print_xml_writer - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - af1b1fca603ab8d48220218a7771d064c - DDS.h - - - - set_dap_major - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a03062495c46ed3fad9fa0a5f6f6e8d00 - DDS.h - - - - set_dap_minor - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a358929d8f517dcdfe439037fb402351b - DDS.h - - - - set_dap_version - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - adcb80ef551e544b1cf527163cf54a30a - DDS.h - - - - set_dap_version - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a38cc72c3b47c508d597535b9c9a39c37 - DDS.h - - - - set_factory - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - abd73e1da6d32409062399c6e3333814a - DDS.h - - - - set_namespace - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a0d1c1e04bc651072a5a56210d86dd801 - Set the namespace for this DDS/DDX object/response. - DDS.h - - - - set_request_xml_base - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a1872d99f10b845eb15960916229a2457 - DDS.h - - - - set_response_limit - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a1d8dc5bcfaf287b360a10857837da952 - DDS.h - - - - tag_nested_sequences - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a9d4421c2ccfdbc5ebd4a7d963ab53795 - Traverse DDS, set Sequence leaf nodes. - DDS.h - - - - transfer_attributes - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a2810a944fbdc7d21b08f2d8c19022b52 - DDS.h - - - - var - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a74c67b99babe3317a0f76c8d8f7ba37a - DDS.h - - - - var - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - ab53f39cffc45142b4cb38117e5650487 - Find the variable with the given d_name. - DDS.h - - - - var_begin - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - aac98f248cd5730a8769f9d71af9788d3 - Return an iterator to the first variable. - DDS.h - - - - var_end - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - ad204bbd6eed8d440fb996f41bc986058 - Return an iterator. - DDS.h - - - - var_rbegin - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a395947ea7f5abab45e7bfe7541ec9dc2 - Return a reverse iterator. - DDS.h - - - - var_rend - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a098d88f09002ad80e27acdb81a52659e - Return a reverse iterator. - DDS.h - - - - get_dataset_name - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a60042aabde37ccaefd56174641284673 - DDS.h - - - - set_dataset_name - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a0138ce1c3b26968f968a6b723ec70dfb - DDS.h - - - - filename - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a1106220194c07459b481a2c190f62482 - DDS.h - - - - filename - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a3dc8062cbb44db0d9b5f47b1109effd9 - DDS.h - - - - container_name - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - aaca262d193346e04d4a6caa7acd117e2 - DDS.h - - - - container_name - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - a025d5fef84ebc2d958a59e4297883d20 - DDS.h - - - - container - cpp - instm - libdap::DDS - - classlibdap_1_1DDS.html - add7c78964a7574239e2d3dd6717a0f31 - DDS.h - - - - libdap::DDXParseFailed - c - cl - libdap::DDXParseFailed - - classlibdap_1_1DDXParseFailed.html - DDXExceptions.h - - - - get_error_code - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - aaca0caca09e939602cade604cbc9824f - Error.h - - - - get_error_message - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - ab24a61e4974aae62962a40f9975e674c - Error.h - - - - OK - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - acf3ab60821773bd8b62284750b02cfc0 - Is the Error object valid? - Error.h - - - - parse - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - ac705b3c1cfab1f7530d66a974eb0e8b6 - Parse an Error object. - Error.h - - - - print - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a552d711be27e6695854bd2b977a5cf31 - Error.h - - - - print - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a4c58ef196c2b247bd37529bb7ad6a666 - Error.h - - - - set_error_code - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a47c0f4b6a38d8ca075d1056076d2845d - Error.h - - - - set_error_message - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a3ca90d33bf1c95529c9eefdfe8646e34 - Error.h - - - - what - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - accc5eeb469c8c18ec16dbf7fefe3cc41 - The pointer is valid only for the lifetime of the Error instance. jhrg 9/22/20. - Error.h - - - - libdap::DDXParser - c - cl - libdap::DDXParser - - classlibdap_1_1DDXParser.html - DDXParserSAX2.h - - - - intern - cpp - instm - libdap::DDXParser - - classlibdap_1_1DDXParser.html - ab9b18fbb234851a7047e8fe4d38233b8 - DDXParserSAX2.h - - - - intern_stream - cpp - instm - libdap::DDXParser - - classlibdap_1_1DDXParser.html - a76537c4e78cb5913b2c2f78b9f7cd458 - Read the DDX from a stream instead of a file. - DDXParserSAX2.h - - - - intern_stream - cpp - instm - libdap::DDXParser - - classlibdap_1_1DDXParser.html - a569959217f75a9e7334bd02e951bd099 - DDXParserSAX2.h - - - - ddx_start_document - cpp - clm - libdap::DDXParser - - classlibdap_1_1DDXParser.html - a6c348bc021092a96a4110e979011bbb4 - DDXParserSAX2.h - - - - ddx_end_document - cpp - clm - libdap::DDXParser - - classlibdap_1_1DDXParser.html - ac17cd783fde5a64b25ea052b20c58e23 - DDXParserSAX2.h - - - - ddx_get_characters - cpp - clm - libdap::DDXParser - - classlibdap_1_1DDXParser.html - a397d57776a44c3f4af9981f9e5352f6e - DDXParserSAX2.h - - - - ddx_ignoreable_whitespace - cpp - clm - libdap::DDXParser - - classlibdap_1_1DDXParser.html - a2a2083b22105ff5d8269642c37e0d429 - DDXParserSAX2.h - - - - ddx_get_cdata - cpp - clm - libdap::DDXParser - - classlibdap_1_1DDXParser.html - ac3d7aedee1616e457ccc507c57e8b156 - DDXParserSAX2.h - - - - ddx_get_entity - cpp - clm - libdap::DDXParser - - classlibdap_1_1DDXParser.html - afaa8276f50340b319d9aa6613bb6014b - DDXParserSAX2.h - - - - ddx_fatal_error - cpp - clm - libdap::DDXParser - - classlibdap_1_1DDXParser.html - a05cf7e51b13e0ecb78008db76f3b131e - DDXParserSAX2.h - - - - libdap::DMR - c - cl - libdap::DMR - - classlibdap_1_1DMR.html - DMR.h - - - - build_using_dds - cpp - instm - libdap::DMR - - classlibdap_1_1DMR.html - a955fff9d3339f3b72580ecc495640f36 - DMR.h - - - - DMR - cpp - instm - libdap::DMR - - classlibdap_1_1DMR.html - af1bd5ebee7ec448c98d55c006178a2f7 - DMR.h - - - - DMR - cpp - instm - libdap::DMR - - classlibdap_1_1DMR.html - a32cd8e199dbe1ff6de21fe6ead07ed5d - DMR.h - - - - DMR - cpp - instm - libdap::DMR - - classlibdap_1_1DMR.html - ab5662afa1f91fbb97fa279498959245c - DMR.h - - - - DMR - cpp - instm - libdap::DMR - - classlibdap_1_1DMR.html - a38543e91dc011b905e186753f3b0c387 - Build a DMR using a DAP2 DDS. - DMR.h - - - - dump - cpp - instm - libdap::DMR - - classlibdap_1_1DMR.html - a64aecb065a2df76d59494a9b016076a5 - dumps information about this object - DMR.h - - - - get_namespace - cpp - instm - libdap::DMR - - classlibdap_1_1DMR.html - a394c0eac5282eb5d660145fe2361c19f - Get the namespace associated with the DMR. - DMR.h - - - - getDDS - cpp - instm - libdap::DMR - - classlibdap_1_1DMR.html - a0a8f854d9ab41ce5f212e0ef666e5fca - Build a DDS from a DMR. - DMR.h - - - - OK - cpp - instm - libdap::DMR - - classlibdap_1_1DMR.html - abd615e04485de5ed0680eb662bec8842 - DMR.h - - - - print_dap4 - cpp - instm - libdap::DMR - - classlibdap_1_1DMR.html - afb5a4eaa1681c1a594022ea17f58b656 - DMR.h - - - - request_size - cpp - instm - libdap::DMR - - classlibdap_1_1DMR.html - aa3b8799bbfd1db2b93c72dbd271a8724 - Get the estimated response size, in kilo bytes. - DMR.h - - - - request_xml_base - cpp - instm - libdap::DMR - - classlibdap_1_1DMR.html - a4884c28f2f91d747f94d6946b6c6e4d8 - Get the URL that will return this DMR. - DMR.h - - - - response_limit - cpp - instm - libdap::DMR - - classlibdap_1_1DMR.html - a1a4db5f5e76e824efb67268ea05b9cfe - Get the maximum response size, in KB. Zero indicates no limit. - DMR.h - - - - root - cpp - instm - libdap::DMR - - classlibdap_1_1DMR.html - a9d76d4fe1ae853c98d0cc783c4636316 - DMR.h - - - - set_dap_version - cpp - instm - libdap::DMR - - classlibdap_1_1DMR.html - a2cc86493e515e990a7ea5a71fef38f6d - DMR.h - - - - set_namespace - cpp - instm - libdap::DMR - - classlibdap_1_1DMR.html - acd9202bbb351dd09aded3d89432325de - Set the namespace for this DMR. - DMR.h - - - - set_request_xml_base - cpp - instm - libdap::DMR - - classlibdap_1_1DMR.html - ade8d164421de4f11a01f66b81ed5acb4 - DMR.h - - - - set_response_limit - cpp - instm - libdap::DMR - - classlibdap_1_1DMR.html - a3116407e0a666d94059c97a9c0b1ca11 - DMR.h - - - - ~DMR - cpp - instm - libdap::DMR - - classlibdap_1_1DMR.html - a798392d82895753cc8fc55fcc0e1dff4 - DMR.h - - - - name - cpp - instm - libdap::DMR - - classlibdap_1_1DMR.html - a184f08e2119726b02c1e17c6f0a1e87e - DMR.h - - - - factory - cpp - instm - libdap::DMR - - classlibdap_1_1DMR.html - a8fe55cd7ad530103f70fadfb0bede195 - DMR.h - - - - filename - cpp - instm - libdap::DMR - - classlibdap_1_1DMR.html - adab6bba727b8b80aca7d639836c87e0c - DMR.h - - - - libdap::DODSFilter - c - cl - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - Common functions for DODS server filter programs. - DODSFilter.h - - - - DODSFilter - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - aa802f48ceffcaff00634940067a1ba02 - DODSFilter.h - - - - DODSFilter - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - aab6e493b315d390b41f6d6e806c90045 - DODSFilter constructor. - DODSFilter.h - - - - establish_timeout - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - a75106d93808b268b9f3ef1ac97c5e551 - DODSFilter.h - - - - get_action - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - a74f7f411df86c7a57f08f6a311a422fd - DODSFilter.h - - - - get_cache_dir - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - adac7f923c25d16410b0f4b73afba08c1 - Get the cache directory. - DODSFilter.h - - - - get_ce - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - a08084f202b86f92c50611eec2b929ff3 - Get the constraint expression. - DODSFilter.h - - - - get_cgi_version - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - ab2ddf2af37fcb080e86285721825ae2a - DODSFilter.h - - - - get_das_last_modified_time - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - ae4e6c33243d991ad4eefc28d27c50750 - DODSFilter.h - - - - get_data_last_modified_time - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - af53e6f349847054152c4e1eee63980ff - DODSFilter.h - - - - get_dataset_last_modified_time - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - a5a7323353dcce227beeb503aeba0f1e1 - DODSFilter.h - - - - get_dataset_name - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - aaae008cb404f7b434b6af72b6b23bcba - Get the dataset name. - DODSFilter.h - - - - get_dataset_version - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - aa40d06abb824f427fa66314eccd91460 - Get the version information for the dataset. - DODSFilter.h - - - - get_dds_last_modified_time - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - a207b77e0c203ed54251869e4911f0ee8 - DODSFilter.h - - - - get_request_if_modified_since - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - aed25e11334c3184da363a4dffc172a29 - DODSFilter.h - - - - get_response - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - a3a062aefb96045bdba4fd7f4e2d39325 - DODSFilter.h - - - - get_timeout - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - ada3d864292534694594bdda03f7f9839 - DODSFilter.h - - - - get_URL - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - ad93a5c5bfef30ab4036cd79d8ff996c0 - DODSFilter.h - - - - is_conditional - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - aa9c03b6da01df9fb71baa5b2d973cb39 - Is this request conditional? - DODSFilter.h - - - - print_usage - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - a916548931d78abba139bea6641db6e72 - Print usage information for a filter program. - DODSFilter.h - - - - send_das - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - a88c4473e601409f5268bf19159242b8c - Transmit a DAS. - DODSFilter.h - - - - send_das - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - a7315eee0c3a733e568840784f445aa3c - Transmit a DAS. - DODSFilter.h - - - - send_data - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - a1ca0cdc66d2eaa77dc7bbe126cb7eb04 - Transmit data. - DODSFilter.h - - - - send_data - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - a4236f7ac38d4499d01bda826fd98bde5 - Transmit data. - DODSFilter.h - - - - send_data_ddx - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - ac46088698a88e1452b381b18015785d7 - Transmit data. - DODSFilter.h - - - - send_dds - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - ad84000bbbfbdcd3bf41bab6136e55790 - Transmit a DDS. - DODSFilter.h - - - - send_dds - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - a99f2e1dde433219446073ed3fba41cc0 - Transmit a DDS. - DODSFilter.h - - - - send_ddx - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - aae5ece89f0fb09dbc8b30f2018e02295 - DODSFilter.h - - - - send_ddx - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - a42e19516994bd9cc154cafed7e5ac3aa - DODSFilter.h - - - - send_version_info - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - abb9505908d58a0c2a058dc4ea6065e8d - Send version information back to the client program. - DODSFilter.h - - - - set_cgi_version - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - ad95070bc42a8aff97cb6c626c78480b6 - DODSFilter.h - - - - set_response - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - acdf3c3346d326a252d17f5dc346aed5c - DODSFilter.h - - - - set_timeout - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - a8d9a76bd0ef270d86ef40b7cc4dc03ff - DODSFilter.h - - - - set_URL - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - a6c1b6941a1a6421607eadd675d341077 - DODSFilter.h - - - - initialize - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - a8ac695c5b7ebe39e2a7c8dd44079f317 - DODSFilter.h - - - - initialize - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - a1420d214791dc0c4bb907cd9f6d967a6 - DODSFilter.h - - - - process_options - cpp - instm - libdap::DODSFilter - - classlibdap_1_1DODSFilter.html - a609ed4df55fdf7cc995e3951a1f2ddd0 - DODSFilter.h - - - - libdap::Error - c - cl - libdap::Error - - classlibdap_1_1Error.html - A class for error processing. - Error.h - - - - Error - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a39c3001623d0eda5d40cf132ac82b00f - Error.h - - - - Error - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - abc68351bbd6df70d666c4bcb499d338c - Error.h - - - - Error - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a0d75f4244ed27998bf2e5e031bc1bf4b - Error.h - - - - get_error_code - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - aaca0caca09e939602cade604cbc9824f - Error.h - - - - get_error_message - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - ab24a61e4974aae62962a40f9975e674c - Error.h - - - - OK - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - acf3ab60821773bd8b62284750b02cfc0 - Is the Error object valid? - Error.h - - - - parse - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - ac705b3c1cfab1f7530d66a974eb0e8b6 - Parse an Error object. - Error.h - - - - print - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a552d711be27e6695854bd2b977a5cf31 - Error.h - - - - print - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a4c58ef196c2b247bd37529bb7ad6a666 - Error.h - - - - set_error_code - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a47c0f4b6a38d8ca075d1056076d2845d - Error.h - - - - set_error_message - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a3ca90d33bf1c95529c9eefdfe8646e34 - Error.h - - - - what - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - accc5eeb469c8c18ec16dbf7fefe3cc41 - The pointer is valid only for the lifetime of the Error instance. jhrg 9/22/20. - Error.h - - - - libdap::EventHandler - c - cl - libdap::EventHandler - - classlibdap_1_1EventHandler.html - EventHandler.h - - - - handle_signal - cpp - instm - libdap::EventHandler - - classlibdap_1_1EventHandler.html - a9cb4e0ec28ce8562067c1a9103f93559 - EventHandler.h - - - - ~EventHandler - cpp - instm - libdap::EventHandler - - classlibdap_1_1EventHandler.html - a3124eab6cce13c78e66bda0f8724f394 - EventHandler.h - - - - libdap::fdinbuf - c - cl - libdap::fdinbuf - - classlibdap_1_1fdinbuf.html - fdiostream.h - - - - fdinbuf - cpp - instm - libdap::fdinbuf - - classlibdap_1_1fdinbuf.html - aa776f5ddbe7e5d03dee835bbcd5f44b7 - fdiostream.h - - - - ~fdinbuf - cpp - instm - libdap::fdinbuf - - classlibdap_1_1fdinbuf.html - afa35aa6df7d9c0bd0fdd9e096fa65225 - fdiostream.h - - - - underflow - cpp - instm - libdap::fdinbuf - - classlibdap_1_1fdinbuf.html - ac9990736a27a4538332f1b30b331a45b - fdiostream.h - - - - libdap::fdistream - c - cl - libdap::fdistream - - classlibdap_1_1fdistream.html - fdiostream.h - - - - libdap::fdostream - c - cl - libdap::fdostream - - classlibdap_1_1fdostream.html - fdiostream.h - - - - fdostream - cpp - instm - libdap::fdostream - - classlibdap_1_1fdostream.html - aa9d9a229c670a71c18645ed782d8dabc - fdiostream.h - - - - libdap::fdoutbuf - c - cl - libdap::fdoutbuf - - classlibdap_1_1fdoutbuf.html - fdiostream.h - - - - fdoutbuf - cpp - instm - libdap::fdoutbuf - - classlibdap_1_1fdoutbuf.html - ad9660035f6a20e351be2d90dc8614ff4 - fdiostream.h - - - - ~fdoutbuf - cpp - instm - libdap::fdoutbuf - - classlibdap_1_1fdoutbuf.html - ac4ea28a81df0a1104ccf80a207a335ca - fdiostream.h - - - - overflow - cpp - instm - libdap::fdoutbuf - - classlibdap_1_1fdoutbuf.html - a4b9aa160b729361664b1db56be71989e - fdiostream.h - - - - sync - cpp - instm - libdap::fdoutbuf - - classlibdap_1_1fdoutbuf.html - a12720ae836a467f70edd5abcac5551e7 - fdiostream.h - - - - xsputn - cpp - instm - libdap::fdoutbuf - - classlibdap_1_1fdoutbuf.html - a753ce8a08038d4a697fcd25a7be9e31d - fdiostream.h - - - - libdap::Float32 - c - cl - libdap::Float32 - - classlibdap_1_1Float32.html - Holds a 32-bit floating point value. - Float32.h - - - - add_var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adca3c2621c4a509537c18362005d7f7f - Add a variable. - BaseType.h - - - - buf2val - cpp - instm - libdap::Float32 - - classlibdap_1_1Float32.html - af6f943ec5481067249a6b56ec57c6ec5 - Reads the class data. - Float32.h - - - - check_semantics - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aec503abec2fd3090e7738c0a575491f8 - Compare an object&#39;s current state with the semantics of its type. - BaseType.h - - - - clear_local_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aaddb97a4efbe035f41deaf03c6e8683f - BaseType.h - - - - compute_checksum - cpp - instm - libdap::Float32 - - classlibdap_1_1Float32.html - a0e7dc43c3ed796b87941ba4a70635820 - include the data for this variable in the checksum DAP4 includes a checksum with every data response... - Float32.h - - - - d4_ops - cpp - instm - libdap::Float32 - - classlibdap_1_1Float32.html - a37db8a37ba94af597cd3cfbc6e31f20f - Float32.h - - - - dataset - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a47521ce321a17e6ce217870cb6a1a7aa - Returns the name of the dataset used to create this instance. - BaseType.h - - - - deserialize - cpp - instm - libdap::Float32 - - classlibdap_1_1Float32.html - a8c274b30cfb8ebcb34ccecae15438da1 - Receive data from the net. - Float32.h - - - - deserialize - cpp - instm - libdap::Float32 - - classlibdap_1_1Float32.html - a08debecb23f1026013ca0b1a2a866753 - Float32.h - - - - dump - cpp - instm - libdap::Float32 - - classlibdap_1_1Float32.html - abc04a7fe1914803c9854f0a26635c81f - dumps information about this object - Float32.h - - - - element_count - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5c2235737737b482bfa7536b8aeab810 - Count the members of constructor types. - BaseType.h - - - - Float32 - cpp - instm - libdap::Float32 - - classlibdap_1_1Float32.html - a440340df1382b7a5ddb0c5de7c690d39 - Float32.h - - - - Float32 - cpp - instm - libdap::Float32 - - classlibdap_1_1Float32.html - abb78eb0831332e4203c02d587bdc622c - Float32.h - - - - FQN - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - BaseType.h - - - - get_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1fcd9537c67e3bf88964b2656ff5bac1 - BaseType.h - - - - get_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a3459cdaa239c33ce111ef360d8dc3017 - BaseType.h - - - - is_constructor_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8b8490e0047c6da52945699a132008ea - Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable... - BaseType.h - - - - is_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - Is this variable part of the current selection? - BaseType.h - - - - is_simple_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aae57e5b270b3a015d40c8db10b9b5549 - Returns true if the instance is a numeric, string or URL type variable. - BaseType.h - - - - is_vector_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a7107c76dbcab71015141142383b6d022 - Returns true if the instance is a vector (i.e., array) type variable. - BaseType.h - - - - length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aadcda7a659157bc6a832d8a5fb775b3f - How many elements are in this variable. - BaseType.h - - - - name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a24c5d67823b3cff7f4245a993072a142 - Returns the name of the class instance. - BaseType.h - - - - ops - cpp - instm - libdap::Float32 - - classlibdap_1_1Float32.html - accebf037e94f4e455cce505295c4cb0a - Evaluate relational operators. - Float32.h - - - - print_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afcddbe441380b95c894510c02980b163 - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2d799fad93255d7f2b803562ae7a5784 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afd744b0ddeb04e7b173c9e83423ec572 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_val - cpp - instm - libdap::Float32 - - classlibdap_1_1Float32.html - a4dcf48f6faa3d8b00655d18d396391f5 - Prints the value of the variable. - Float32.h - - - - print_val - cpp - instm - libdap::Float32 - - classlibdap_1_1Float32.html - a16d3bc5792e80d6bf660416391f81dde - Prints the value of the variable. - Float32.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a825820edee179550cfde3dfd4d274f2a - BaseType.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8bd2c7682edd48c64b210bdf247bdef7 - BaseType.h - - - - print_xml_writer - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a11554ff931528b243e9af8173d205b44 - BaseType.h - - - - ptr_duplicate - cpp - instm - libdap::Float32 - - classlibdap_1_1Float32.html - a05e8f21ce016d9bea6b572a900e4d473 - Float32.h - - - - read - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1da003c53f2e663223f603ab3fbd7c8e - Read data into a local buffer. - BaseType.h - - - - read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a38ff819a432217c55db2e9071928d20c - Has this variable been read? - BaseType.h - - - - send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a980c0013817836aa77ef74aeec7fb192 - Should this variable be sent? - BaseType.h - - - - serialize - cpp - instm - libdap::Float32 - - classlibdap_1_1Float32.html - af2aa447cb5128232e6f7cd4d7b3cac53 - Move data to the net, then remove them from the object. - Float32.h - - - - serialize - cpp - instm - libdap::Float32 - - classlibdap_1_1Float32.html - a4fa3abf9221449b4254f0e005429667a - Serialize an Int8. - Float32.h - - - - set_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a572a1d76a75981abac83a4241e90c0fa - BaseType.h - - - - set_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2bc036248cdaf1affac464170f32ad30 - BaseType.h - - - - set_length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4fe343c1eeb6fb1d61ab030433651d90 - Set the number of elements for this variable. - BaseType.h - - - - set_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a86504564f45a3e6748c6f1cc0ff4e9fa - Sets the name of the class instance. - BaseType.h - - - - set_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - BaseType.h - - - - set_read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4533905a450d2a7af32e7d5acd557676 - Sets the value of the read_p property. - BaseType.h - - - - set_send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aba7b27635c95b74536de18393133628e - BaseType.h - - - - set_synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a595cb4059cff24f801a1b6da79bd2f9e - BaseType.h - - - - set_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af74f8d1ef57c9fcca46f620f75d175a3 - Sets the type of the class instance. - BaseType.h - - - - synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae64e677da27249473cdba0b60cdbb90a - BaseType.h - - - - toString - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a701eb3361f5b5628329ece019cd34519 - BaseType.h - - - - transfer_attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - add8e836c622042a339152a6c31e5bdfb - BaseType.h - - - - transform_to_dap2 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - affec8a11e9cc035d4b1e8fb9a87b2072 - DAP4 to DAP2 transform. - BaseType.h - - - - transform_to_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adb03e2e1e40c3c888577c4666831a949 - DAP2 to DAP4 transform. - BaseType.h - - - - type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - Returns the type of the class instance. - BaseType.h - - - - type_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a18a42c8ec35cb5b15cd651a4152f8a2c - Returns the type of the class instance as a string. - BaseType.h - - - - val2buf - cpp - instm - libdap::Float32 - - classlibdap_1_1Float32.html - a3204d0d25e857aeefc00b36065e5bde8 - Loads class data. - Float32.h - - - - value - cpp - instm - libdap::Float32 - - classlibdap_1_1Float32.html - a5d9d9573f17e8fdd16aa07ee8c6dca5d - Float32.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4dc4fac1bb6083f6db645f37bfd59b85 - Returns a pointer to a member of a constructor class. - BaseType.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adecfc442b5927c79933c7f71cfe03fd2 - BaseType.h - - - - width - cpp - instm - libdap::Float32 - - classlibdap_1_1Float32.html - ae9e5884f35ed3c99e6f0ab22c7dae3ef - How many bytes does this variable use Return the number of bytes of storage this variable uses... - Float32.h - - - - attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a97452f06d2188eb838399a709246b5e9 - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a722d33783aa0272d339b0301a4f77e59 - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1956e6ea90a745516f5372c859173433 - Read data into this variable. - BaseType.h - - - - m_duplicate - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a0c55b826c8c5dfe7a454dc670e859a41 - Perform a deep copy. - BaseType.h - - - - libdap::Float64 - c - cl - libdap::Float64 - - classlibdap_1_1Float64.html - Holds a 64-bit (double precision) floating point value. - Float64.h - - - - add_var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adca3c2621c4a509537c18362005d7f7f - Add a variable. - BaseType.h - - - - buf2val - cpp - instm - libdap::Float64 - - classlibdap_1_1Float64.html - a34faaf7e5c2f5d3ed0010aca6bdac3ba - Reads the class data. - Float64.h - - - - check_semantics - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aec503abec2fd3090e7738c0a575491f8 - Compare an object&#39;s current state with the semantics of its type. - BaseType.h - - - - clear_local_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aaddb97a4efbe035f41deaf03c6e8683f - BaseType.h - - - - compute_checksum - cpp - instm - libdap::Float64 - - classlibdap_1_1Float64.html - a07e2562d92832ce1ea1ec6673f99ec30 - include the data for this variable in the checksum DAP4 includes a checksum with every data response... - Float64.h - - - - d4_ops - cpp - instm - libdap::Float64 - - classlibdap_1_1Float64.html - a157203407e1db27b876b9fceacfbf375 - Evaluator a relop for DAP4. - Float64.h - - - - dataset - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a47521ce321a17e6ce217870cb6a1a7aa - Returns the name of the dataset used to create this instance. - BaseType.h - - - - deserialize - cpp - instm - libdap::Float64 - - classlibdap_1_1Float64.html - ac58d25ee3cc87aaa1608322f9fbe5962 - Receive data from the net. - Float64.h - - - - deserialize - cpp - instm - libdap::Float64 - - classlibdap_1_1Float64.html - a7bcd1b10ab54094640b87b25308eed98 - Float64.h - - - - dump - cpp - instm - libdap::Float64 - - classlibdap_1_1Float64.html - af90cf75012ca7573411ac9da4e55cacf - dumps information about this object - Float64.h - - - - element_count - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5c2235737737b482bfa7536b8aeab810 - Count the members of constructor types. - BaseType.h - - - - Float64 - cpp - instm - libdap::Float64 - - classlibdap_1_1Float64.html - a60797eb0a6d96ba4cac22d687dfb59b6 - Float64.h - - - - Float64 - cpp - instm - libdap::Float64 - - classlibdap_1_1Float64.html - a8ead3377a8a7f64edae16efefa6e4071 - Float64.h - - - - FQN - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - BaseType.h - - - - get_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1fcd9537c67e3bf88964b2656ff5bac1 - BaseType.h - - - - get_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a3459cdaa239c33ce111ef360d8dc3017 - BaseType.h - - - - is_constructor_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8b8490e0047c6da52945699a132008ea - Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable... - BaseType.h - - - - is_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - Is this variable part of the current selection? - BaseType.h - - - - is_simple_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aae57e5b270b3a015d40c8db10b9b5549 - Returns true if the instance is a numeric, string or URL type variable. - BaseType.h - - - - is_vector_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a7107c76dbcab71015141142383b6d022 - Returns true if the instance is a vector (i.e., array) type variable. - BaseType.h - - - - length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aadcda7a659157bc6a832d8a5fb775b3f - How many elements are in this variable. - BaseType.h - - - - name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a24c5d67823b3cff7f4245a993072a142 - Returns the name of the class instance. - BaseType.h - - - - ops - cpp - instm - libdap::Float64 - - classlibdap_1_1Float64.html - a32114121abfd8b081b4834fb87dc19ac - Evaluate relational operators. - Float64.h - - - - print_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afcddbe441380b95c894510c02980b163 - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2d799fad93255d7f2b803562ae7a5784 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afd744b0ddeb04e7b173c9e83423ec572 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_val - cpp - instm - libdap::Float64 - - classlibdap_1_1Float64.html - a83adee2778296322406f557c191cd416 - Prints the value of the variable. - Float64.h - - - - print_val - cpp - instm - libdap::Float64 - - classlibdap_1_1Float64.html - aa9a669b0fe9efa0d188759a5ace09ab2 - Prints the value of the variable. - Float64.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a825820edee179550cfde3dfd4d274f2a - BaseType.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8bd2c7682edd48c64b210bdf247bdef7 - BaseType.h - - - - print_xml_writer - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a11554ff931528b243e9af8173d205b44 - BaseType.h - - - - ptr_duplicate - cpp - instm - libdap::Float64 - - classlibdap_1_1Float64.html - af0c3dbeab0fb34e94f99b2dbb577fb16 - Float64.h - - - - read - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1da003c53f2e663223f603ab3fbd7c8e - Read data into a local buffer. - BaseType.h - - - - read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a38ff819a432217c55db2e9071928d20c - Has this variable been read? - BaseType.h - - - - send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a980c0013817836aa77ef74aeec7fb192 - Should this variable be sent? - BaseType.h - - - - serialize - cpp - instm - libdap::Float64 - - classlibdap_1_1Float64.html - a1d155177c95e19a1d101de3b54ae1acf - Move data to the net, then remove them from the object. - Float64.h - - - - serialize - cpp - instm - libdap::Float64 - - classlibdap_1_1Float64.html - ab9180d68989a963df839faf0fab604f8 - Serialize an Int8. - Float64.h - - - - set_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a572a1d76a75981abac83a4241e90c0fa - BaseType.h - - - - set_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2bc036248cdaf1affac464170f32ad30 - BaseType.h - - - - set_length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4fe343c1eeb6fb1d61ab030433651d90 - Set the number of elements for this variable. - BaseType.h - - - - set_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a86504564f45a3e6748c6f1cc0ff4e9fa - Sets the name of the class instance. - BaseType.h - - - - set_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - BaseType.h - - - - set_read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4533905a450d2a7af32e7d5acd557676 - Sets the value of the read_p property. - BaseType.h - - - - set_send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aba7b27635c95b74536de18393133628e - BaseType.h - - - - set_synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a595cb4059cff24f801a1b6da79bd2f9e - BaseType.h - - - - set_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af74f8d1ef57c9fcca46f620f75d175a3 - Sets the type of the class instance. - BaseType.h - - - - synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae64e677da27249473cdba0b60cdbb90a - BaseType.h - - - - toString - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a701eb3361f5b5628329ece019cd34519 - BaseType.h - - - - transfer_attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - add8e836c622042a339152a6c31e5bdfb - BaseType.h - - - - transform_to_dap2 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - affec8a11e9cc035d4b1e8fb9a87b2072 - DAP4 to DAP2 transform. - BaseType.h - - - - transform_to_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adb03e2e1e40c3c888577c4666831a949 - DAP2 to DAP4 transform. - BaseType.h - - - - type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - Returns the type of the class instance. - BaseType.h - - - - type_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a18a42c8ec35cb5b15cd651a4152f8a2c - Returns the type of the class instance as a string. - BaseType.h - - - - val2buf - cpp - instm - libdap::Float64 - - classlibdap_1_1Float64.html - a65af2862bce9334100736d2eb400aa7b - Loads class data. - Float64.h - - - - value - cpp - instm - libdap::Float64 - - classlibdap_1_1Float64.html - af96b650288179aa3f5fcbcbc215c1721 - Float64.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4dc4fac1bb6083f6db645f37bfd59b85 - Returns a pointer to a member of a constructor class. - BaseType.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adecfc442b5927c79933c7f71cfe03fd2 - BaseType.h - - - - width - cpp - instm - libdap::Float64 - - classlibdap_1_1Float64.html - a1627393eea6b9990f444236e0787774d - How many bytes does this variable use Return the number of bytes of storage this variable uses... - Float64.h - - - - attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a97452f06d2188eb838399a709246b5e9 - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a722d33783aa0272d339b0301a4f77e59 - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1956e6ea90a745516f5372c859173433 - Read data into this variable. - BaseType.h - - - - m_duplicate - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a0c55b826c8c5dfe7a454dc670e859a41 - Perform a deep copy. - BaseType.h - - - - libdap::fpinbuf - c - cl - libdap::fpinbuf - - classlibdap_1_1fpinbuf.html - fdiostream.h - - - - fpinbuf - cpp - instm - libdap::fpinbuf - - classlibdap_1_1fpinbuf.html - afdd1f4682dc010db945a586b593a795a - fdiostream.h - - - - ~fpinbuf - cpp - instm - libdap::fpinbuf - - classlibdap_1_1fpinbuf.html - a3c047833a58a99cf540248c68f211cd3 - fdiostream.h - - - - underflow - cpp - instm - libdap::fpinbuf - - classlibdap_1_1fpinbuf.html - aaa3e9e18fb090cc4b12849eed3406382 - fdiostream.h - - - - libdap::fpistream - c - cl - libdap::fpistream - - classlibdap_1_1fpistream.html - fdiostream.h - - - - libdap::Grid - c - cl - libdap::Grid - - classlibdap_1_1Grid.html - Holds the Grid data type. - Grid.h - - - - add_map - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - ad24067d02100d7ad77053d2fd9cac680 - Grid.h - - - - add_var - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - ae8356b6e1b8c6c67718bb9bfefd9f7e8 - Grid.h - - - - add_var_nocopy - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - afa0b5bb14fec2675e7fd7da245e95ca1 - Grid.h - - - - array_var - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - a13f73ec1242460db6be3b7a818c8328f - Returns the Grid Array. - Grid.h - - - - buf2val - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ac4dc7e8099322b5b403a7d0ae9079006 - Reads the class data. - Constructor.h - - - - check_semantics - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - ae66a262518b81ff354061528654fae75 - Return true if this Grid is well formed. - Grid.h - - - - clear_constraint - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - a3b7ce41c5ab7b86bdb30508d39127600 - Grid.h - - - - clear_local_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aaddb97a4efbe035f41deaf03c6e8683f - BaseType.h - - - - components - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - ad26dc472b37af0abeb540a43fb04d8dc - Returns the number of components in the Grid object. - Grid.h - - - - compute_checksum - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a287ab9a4deb81a8ced6d8432be647925 - include the data for this variable in the checksum DAP4 includes a checksum with every data response... - Constructor.h - - - - d4_ops - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a512a356f31ed6c4c1a368da0b054408a - Evaluator a relop for DAP4. - BaseType.h - - - - dataset - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a47521ce321a17e6ce217870cb6a1a7aa - Returns the name of the dataset used to create this instance. - BaseType.h - - - - del_var - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - af38d3785c4a7cd0063cbb9fc5943333c - Constructor.h - - - - deserialize - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a63763d2bae05463b100e823fb461a784 - Receive data from the net. - Constructor.h - - - - deserialize - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a6f4253236d69c3c0ef64343136b5039b - Constructor.h - - - - dump - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - acf0402fd88c5ab7d1307615f8597d002 - dumps information about this object - Grid.h - - - - element_count - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a1c2eecff00fa7e3af175c711d00fb86e - Count the members of constructor types. - Constructor.h - - - - FQN - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - afa6c06dab830b4e089641b44fea8293c - Constructor.h - - - - get_array - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - a905ac86a44a9d8ce576056ba244cf558 - Returns the Grid Array. This method returns the array using an Array*, so no cast is required... - Grid.h - - - - get_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1fcd9537c67e3bf88964b2656ff5bac1 - BaseType.h - - - - get_map_iter - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - a30dd7f9fa8a28b4bf6ccd6e94a12b62c - Grid.h - - - - get_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a3459cdaa239c33ce111ef360d8dc3017 - BaseType.h - - - - get_var_index - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ac2b4b28ed9d6f435129aa599ab809799 - Constructor.h - - - - get_vars_iter - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a1e6d8224e04d75e3d2a21263957cd42f - Constructor.h - - - - Grid - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - a75774a8fe1c7c7ec9a1e48a7d6d2cbc0 - The Grid constructor. - Grid.h - - - - Grid - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - adec10faa3280dde1bee9c1bf2eda9038 - The Grid constructor. - Grid.h - - - - Grid - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - ad9c190d610f40faee6165467f554fb9a - The Grid copy constructor. - Grid.h - - - - intern_data - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a065056826ef9c6fb2d08463af9e15a34 - Constructor.h - - - - intern_data - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a822a036364c56df5288a55670f51197e - Read data into this variable. - Constructor.h - - - - is_constructor_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8b8490e0047c6da52945699a132008ea - Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable... - BaseType.h - - - - is_dap2_only_type - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - afef375f10211131b5fbea773b0011e5c - Grid.h - - - - is_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - Is this variable part of the current selection? - BaseType.h - - - - is_linear - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - af26f89e9c0732a9c32bd5e15d716a7d7 - Check to see whether this variable can be printed simply. - Constructor.h - - - - is_simple_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aae57e5b270b3a015d40c8db10b9b5549 - Returns true if the instance is a numeric, string or URL type variable. - BaseType.h - - - - is_vector_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a7107c76dbcab71015141142383b6d022 - Returns true if the instance is a vector (i.e., array) type variable. - BaseType.h - - - - length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aadcda7a659157bc6a832d8a5fb775b3f - How many elements are in this variable. - BaseType.h - - - - map_begin - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - a2e9d2e436c0ff138a977dbba54c018eb - Returns an iterator referencing the first Map vector. - Grid.h - - - - map_end - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - aaebbf2a5329ec01b6527b4bafde87837 - Grid.h - - - - map_rbegin - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - afdddc12f67c7f4f6bb6c78d55a2f75b2 - Returns an iterator referencing the first Map vector. - Grid.h - - - - map_rend - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - ab821c8beb7c653ce38842fcb27d644ca - Grid.h - - - - name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a24c5d67823b3cff7f4245a993072a142 - Returns the name of the class instance. - BaseType.h - - - - ops - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8a0000be2a244e3e07abda3020af8800 - Evaluate relational operators. - BaseType.h - - - - prepend_map - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - a5a39d31cad6c5a9437bc07b696bb8db4 - Grid.h - - - - print_dap4 - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a0f130e129b06773a9f3c94e3b492bb5c - Constructor.h - - - - print_decl - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - a5a239b053928636e13e3a478faf8e334 - Print an ASCII representation of the variable structure. - Grid.h - - - - print_decl - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - a1c0bcf75f8474ef140d133f47a78ed67 - Print an ASCII representation of the variable structure. - Grid.h - - - - print_val - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - a5322f6b5ce04e5d00347bf50b341f4e6 - Prints the value of the variable. - Grid.h - - - - print_val - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - abc90f12653afefe765bea1917dcecc08 - Prints the value of the variable. - Grid.h - - - - print_xml - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - a29d53347639f843c164f19e3a3f19b7d - Grid.h - - - - print_xml - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - a7e55419705f8a64c5d86f3b0a236709e - Grid.h - - - - print_xml_writer - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - adb96de26565e6498cb0e8df6789a9f1c - Grid.h - - - - projection_yields_grid - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - aa737cef63a1b9c8b8b0952fcb22a621b - Grid.h - - - - ptr_duplicate - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - a0c4a5aefa252d3eab94b8a0ce5232dc6 - Grid.h - - - - read - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ad0af40e2565972fa44985d173370c264 - simple implementation of read that iterates through vars and calls read on them - Constructor.h - - - - read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a38ff819a432217c55db2e9071928d20c - Has this variable been read? - BaseType.h - - - - send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a980c0013817836aa77ef74aeec7fb192 - Should this variable be sent? - BaseType.h - - - - serialize - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a64268840654a0b37a15ccc601dbcfd33 - Move data to the net, then remove them from the object. - Constructor.h - - - - serialize - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ab868fe97d5075b702bd084c2e9540913 - Serialize a Constructor. - Constructor.h - - - - set_array - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - a35412b1401ff8795504af40be6d09aa1 - Grid.h - - - - set_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a572a1d76a75981abac83a4241e90c0fa - BaseType.h - - - - set_in_selection - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ac30becb1ffe7d2cd4cbcd24fc216c9a3 - Set the in_selection property. - Constructor.h - - - - set_length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4fe343c1eeb6fb1d61ab030433651d90 - Set the number of elements for this variable. - BaseType.h - - - - set_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a86504564f45a3e6748c6f1cc0ff4e9fa - Sets the name of the class instance. - BaseType.h - - - - set_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - BaseType.h - - - - set_read_p - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - af52e60d8589eed1a18a14e9c6a57db65 - Sets the value of the read_p property. - Constructor.h - - - - set_send_p - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - aafbcf9bef6719fe60ac707e02956e09d - Constructor.h - - - - set_synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a595cb4059cff24f801a1b6da79bd2f9e - BaseType.h - - - - set_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af74f8d1ef57c9fcca46f620f75d175a3 - Sets the type of the class instance. - BaseType.h - - - - synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae64e677da27249473cdba0b60cdbb90a - BaseType.h - - - - toString - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a701eb3361f5b5628329ece019cd34519 - BaseType.h - - - - transfer_attributes - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - a9483bb65505c86e3fc44a9b856a55323 - Grid.h - - - - transform_to_dap2 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - affec8a11e9cc035d4b1e8fb9a87b2072 - DAP4 to DAP2 transform. - BaseType.h - - - - transform_to_dap4 - cpp - instm - libdap::Grid - - classlibdap_1_1Grid.html - a160c21980788f0b732f2562feff971ef - DAP2 to DAP4 transform. - Grid.h - - - - type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - Returns the type of the class instance. - BaseType.h - - - - type_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a18a42c8ec35cb5b15cd651a4152f8a2c - Returns the type of the class instance as a string. - BaseType.h - - - - val2buf - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ac742b1bf93889e541128b1d123821ee6 - Loads class data. - Constructor.h - - - - var - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a36a7412da7b5257d7666add726fea1a6 - btp_stack no longer needed; use back pointers (BaseType::get_parent()) - Constructor.h - - - - var - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a68f1779dc328f890062722d90fad084a - Constructor.h - - - - var_begin - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - adeafe3d6c82d07b456a598a7b446c2c6 - Constructor.h - - - - var_end - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a936b38c7c35ffb4fe17c5b8e85bdaaa2 - Constructor.h - - - - var_rbegin - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - aa025cf546ca35250454653c1ec684d91 - Constructor.h - - - - var_rend - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - aede7cf5889e101db1ea8f22c3a84a5d3 - Constructor.h - - - - width - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a0b1e3ae7195f95c42ca98f42826a1ff5 - Constructor.h - - - - attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a97452f06d2188eb838399a709246b5e9 - BaseType.h - - - - m_duplicate - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a0c55b826c8c5dfe7a454dc670e859a41 - Perform a deep copy. - BaseType.h - - - - libdap::HTTPCache - c - cl - libdap::HTTPCache - - classlibdap_1_1HTTPCache.html - HTTPCache.h - - - - cache_response - cpp - instm - libdap::HTTPCache - - classlibdap_1_1HTTPCache.html - a0cbaded239e55f3e328448adcc180365 - HTTPCache.h - - - - get_cached_response - cpp - instm - libdap::HTTPCache - - classlibdap_1_1HTTPCache.html - aefcbe732444c6160c839b9e2c3468b1d - HTTPCache.h - - - - get_cached_response - cpp - instm - libdap::HTTPCache - - classlibdap_1_1HTTPCache.html - a151026836e9f397857dd76aa080ddfef - HTTPCache.h - - - - get_cached_response - cpp - instm - libdap::HTTPCache - - classlibdap_1_1HTTPCache.html - a6f3bbb3dc0b1e85f32e2291006ff858e - HTTPCache.h - - - - get_conditional_request_headers - cpp - instm - libdap::HTTPCache - - classlibdap_1_1HTTPCache.html - a635a277480a95d7d37d0e9fddd480362 - HTTPCache.h - - - - is_url_valid - cpp - instm - libdap::HTTPCache - - classlibdap_1_1HTTPCache.html - aa695d43815cc2588458232f37095b780 - HTTPCache.h - - - - purge_cache - cpp - instm - libdap::HTTPCache - - classlibdap_1_1HTTPCache.html - afee7fca59d1a37f495ea74c95fad600a - HTTPCache.h - - - - release_cached_response - cpp - instm - libdap::HTTPCache - - classlibdap_1_1HTTPCache.html - a4de0458e4ab0e89049a0f0fa7b819b91 - HTTPCache.h - - - - update_response - cpp - instm - libdap::HTTPCache - - classlibdap_1_1HTTPCache.html - ab0b1e3fb63084b93e277c53d189ad6c2 - HTTPCache.h - - - - ~HTTPCache - cpp - instm - libdap::HTTPCache - - classlibdap_1_1HTTPCache.html - ac8fcde4b345c50bad6c3507dcbd2f447 - HTTPCache.h - - - - instance - cpp - clm - libdap::HTTPCache - - classlibdap_1_1HTTPCache.html - a152bdc19fdec15758d9c1a3a029d6900 - HTTPCache.h - - - - get_cache_root - cpp - instm - libdap::HTTPCache - - classlibdap_1_1HTTPCache.html - a2c872a03a4065237cf384f778cceb126 - HTTPCache.h - - - - set_cache_enabled - cpp - instm - libdap::HTTPCache - - classlibdap_1_1HTTPCache.html - a71aa835c2b38bc0e891f40b5a77c53ce - HTTPCache.h - - - - is_cache_enabled - cpp - instm - libdap::HTTPCache - - classlibdap_1_1HTTPCache.html - af9960970163436617a8753f95866c5a9 - HTTPCache.h - - - - set_cache_disconnected - cpp - instm - libdap::HTTPCache - - classlibdap_1_1HTTPCache.html - a44857ae03334d09e34cc5b2275669a71 - HTTPCache.h - - - - get_cache_disconnected - cpp - instm - libdap::HTTPCache - - classlibdap_1_1HTTPCache.html - a0745589ca1ed117b11efc52765a25b7e - HTTPCache.h - - - - set_expire_ignored - cpp - instm - libdap::HTTPCache - - classlibdap_1_1HTTPCache.html - a1a8c5f13e82c3038e97eca9979ebd39c - HTTPCache.h - - - - set_max_size - cpp - instm - libdap::HTTPCache - - classlibdap_1_1HTTPCache.html - ab2447c27c88ebb29511379ede8ac5b6f - HTTPCache.h - - - - get_max_size - cpp - instm - libdap::HTTPCache - - classlibdap_1_1HTTPCache.html - a7e89f36cc369c826aa6cd414adc06393 - HTTPCache.h - - - - set_max_entry_size - cpp - instm - libdap::HTTPCache - - classlibdap_1_1HTTPCache.html - a92cc5b035dc08ae2704924002144fa29 - HTTPCache.h - - - - get_max_entry_size - cpp - instm - libdap::HTTPCache - - classlibdap_1_1HTTPCache.html - a66ec8c722b1c82124e697916b73036fe - HTTPCache.h - - - - set_default_expiration - cpp - instm - libdap::HTTPCache - - classlibdap_1_1HTTPCache.html - a1ca5c8c205241f62596e283943906386 - HTTPCache.h - - - - get_default_expiration - cpp - instm - libdap::HTTPCache - - classlibdap_1_1HTTPCache.html - a9b03792f717b8d584e782d6797a1b331 - HTTPCache.h - - - - set_always_validate - cpp - instm - libdap::HTTPCache - - classlibdap_1_1HTTPCache.html - aa9a13a18ec837e891e81823a4d30da47 - HTTPCache.h - - - - get_always_validate - cpp - instm - libdap::HTTPCache - - classlibdap_1_1HTTPCache.html - a95f59f69a7ca0c9104748e5a7cb07101 - HTTPCache.h - - - - set_cache_control - cpp - instm - libdap::HTTPCache - - classlibdap_1_1HTTPCache.html - ac6823b2de27745c20c7e8d41af5a2088 - HTTPCache.h - - - - get_cache_control - cpp - instm - libdap::HTTPCache - - classlibdap_1_1HTTPCache.html - a15d15a90105d60b0d743fc90456d223e - HTTPCache.h - - - - libdap::HTTPCacheInterruptHandler - c - cl - libdap::HTTPCacheInterruptHandler - - classlibdap_1_1HTTPCacheInterruptHandler.html - HTTPCacheInterruptHandler.h - - - - handle_signal - cpp - instm - libdap::HTTPCacheInterruptHandler - - classlibdap_1_1HTTPCacheInterruptHandler.html - a61f19f17f5da4f50969494b6f24cdfc7 - HTTPCacheInterruptHandler.h - - - - libdap::HTTPCacheResponse - c - cl - libdap::HTTPCacheResponse - - classlibdap_1_1HTTPCacheResponse.html - HTTPCacheResponse.h - - - - HTTPCacheResponse - cpp - instm - libdap::HTTPCacheResponse - - classlibdap_1_1HTTPCacheResponse.html - a98dcff76b943f4da0d1a54e43e119938 - HTTPCacheResponse.h - - - - HTTPCacheResponse - cpp - instm - libdap::HTTPCacheResponse - - classlibdap_1_1HTTPCacheResponse.html - a319dc8cc6540adbc5c53154ab706cf33 - HTTPCacheResponse.h - - - - transform_to_cpp - cpp - instm - libdap::HTTPResponse - - classlibdap_1_1HTTPResponse.html - aeb73ee749ec7e6f6b26b8a9985485184 - HTTPResponse.h - - - - ~HTTPCacheResponse - cpp - instm - libdap::HTTPCacheResponse - - classlibdap_1_1HTTPCacheResponse.html - a3f42de3899515f12b97f20233901d6c7 - HTTPCacheResponse.h - - - - libdap::HTTPCacheTable - c - cl - libdap::HTTPCacheTable - - classlibdap_1_1HTTPCacheTable.html - HTTPCacheTable.h - - - - create_hash_directory - cpp - instm - libdap::HTTPCacheTable - - classlibdap_1_1HTTPCacheTable.html - a0f7f6193848fb3ba8ad17082fd95b6c6 - HTTPCacheTable.h - - - - create_location - cpp - instm - libdap::HTTPCacheTable - - classlibdap_1_1HTTPCacheTable.html - a0ab52cb3d5d01575977adb33a21b31d2 - HTTPCacheTable.h - - - - cache_index_delete - cpp - instm - libdap::HTTPCacheTable - - classlibdap_1_1HTTPCacheTable.html - a3e636690b069b3384e908135fcaebd51 - HTTPCacheTable.h - - - - cache_index_read - cpp - instm - libdap::HTTPCacheTable - - classlibdap_1_1HTTPCacheTable.html - a24e70dae002ffeef9641bb6493109513 - HTTPCacheTable.h - - - - cache_index_parse_line - cpp - instm - libdap::HTTPCacheTable - - classlibdap_1_1HTTPCacheTable.html - a48569affedb01e6e0e87343bcc621c0a - HTTPCacheTable.h - - - - cache_index_write - cpp - instm - libdap::HTTPCacheTable - - classlibdap_1_1HTTPCacheTable.html - a7cd5a3a24fd0cd41ac0d9a3192075e9c - HTTPCacheTable.h - - - - add_entry_to_cache_table - cpp - instm - libdap::HTTPCacheTable - - classlibdap_1_1HTTPCacheTable.html - a8f5660848048a98454fce23c28de573c - HTTPCacheTable.h - - - - remove_cache_entry - cpp - instm - libdap::HTTPCacheTable - - classlibdap_1_1HTTPCacheTable.html - a85d4438820f0920002f5e77b51900ea9 - HTTPCacheTable.h - - - - remove_entry_from_cache_table - cpp - instm - libdap::HTTPCacheTable - - classlibdap_1_1HTTPCacheTable.html - ad1b8ffd257ff335b3d87b90600f5bffd - HTTPCacheTable.h - - - - get_locked_entry_from_cache_table - cpp - instm - libdap::HTTPCacheTable - - classlibdap_1_1HTTPCacheTable.html - ac8c8e58c208b8c542b89f500829032a0 - HTTPCacheTable.h - - - - get_write_locked_entry_from_cache_table - cpp - instm - libdap::HTTPCacheTable - - classlibdap_1_1HTTPCacheTable.html - a57c01c8b9462f0e0ea6541b7d9fcf2f5 - HTTPCacheTable.h - - - - calculate_time - cpp - instm - libdap::HTTPCacheTable - - classlibdap_1_1HTTPCacheTable.html - a0ca63c76e70064549d128ff8f5951534 - HTTPCacheTable.h - - - - parse_headers - cpp - instm - libdap::HTTPCacheTable - - classlibdap_1_1HTTPCacheTable.html - a53379f3151fe6b85e85c75c401a14963 - HTTPCacheTable.h - - - - libdap::HTTPCacheTable::CacheEntry - c - cl - libdap::HTTPCacheTable::CacheEntry - - structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html - HTTPCacheTable.h - - - - libdap::HTTPConnect - c - cl - libdap::HTTPConnect - - classlibdap_1_1HTTPConnect.html - HTTPConnect.h - - - - fetch_url - cpp - instm - libdap::HTTPConnect - - classlibdap_1_1HTTPConnect.html - a5e3558838e245a96c9392b33ef4ba298 - HTTPConnect.h - - - - HTTPConnect - cpp - instm - libdap::HTTPConnect - - classlibdap_1_1HTTPConnect.html - a0b211b1afe685d706c8d0a235f626a5d - HTTPConnect.h - - - - is_cache_enabled - cpp - instm - libdap::HTTPConnect - - classlibdap_1_1HTTPConnect.html - a1e9a7b25527264a342dbe9c2aff59f2f - HTTPConnect.h - - - - set_accept_deflate - cpp - instm - libdap::HTTPConnect - - classlibdap_1_1HTTPConnect.html - a01d67a5afa18a84ef744b8f222094260 - HTTPConnect.h - - - - set_cache_enabled - cpp - instm - libdap::HTTPConnect - - classlibdap_1_1HTTPConnect.html - aaf200f19c2a64adc4b17887372dcc595 - HTTPConnect.h - - - - set_cookie_jar - cpp - instm - libdap::HTTPConnect - - classlibdap_1_1HTTPConnect.html - ac6641c75c291e2908be9caade2eb5547 - HTTPConnect.h - - - - set_credentials - cpp - instm - libdap::HTTPConnect - - classlibdap_1_1HTTPConnect.html - a84190d0d80154943ee997c4982a7c96a - HTTPConnect.h - - - - set_xdap_protocol - cpp - instm - libdap::HTTPConnect - - classlibdap_1_1HTTPConnect.html - ac232e85c5d2448c66c1a24f62dcbf89a - HTTPConnect.h - - - - libdap::HTTPResponse - c - cl - libdap::HTTPResponse - - classlibdap_1_1HTTPResponse.html - HTTPResponse.h - - - - HTTPResponse - cpp - instm - libdap::HTTPResponse - - classlibdap_1_1HTTPResponse.html - afcfa13c872457f0f46af2ef8c3d09baa - HTTPResponse.h - - - - HTTPResponse - cpp - instm - libdap::HTTPResponse - - classlibdap_1_1HTTPResponse.html - a544c05dec998de91e78c9a517041ac3c - Build a HTTPResponse using a cpp fstream When working with DAP4 responses, use C++ streams for I/0... - HTTPResponse.h - - - - transform_to_cpp - cpp - instm - libdap::HTTPResponse - - classlibdap_1_1HTTPResponse.html - aeb73ee749ec7e6f6b26b8a9985485184 - HTTPResponse.h - - - - ~HTTPResponse - cpp - instm - libdap::HTTPResponse - - classlibdap_1_1HTTPResponse.html - aaaa8595779b1608ad1727bce9a308341 - HTTPResponse.h - - - - libdap::Int16 - c - cl - libdap::Int16 - - classlibdap_1_1Int16.html - Holds a 16-bit signed integer value. - Int16.h - - - - add_var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adca3c2621c4a509537c18362005d7f7f - Add a variable. - BaseType.h - - - - buf2val - cpp - instm - libdap::Int16 - - classlibdap_1_1Int16.html - a7b1983c756a0c27942fc2a7563bb5d2e - Reads the class data. - Int16.h - - - - check_semantics - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aec503abec2fd3090e7738c0a575491f8 - Compare an object&#39;s current state with the semantics of its type. - BaseType.h - - - - clear_local_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aaddb97a4efbe035f41deaf03c6e8683f - BaseType.h - - - - compute_checksum - cpp - instm - libdap::Int16 - - classlibdap_1_1Int16.html - aa413c9da6c53e3bc7a7c3e727b139941 - include the data for this variable in the checksum DAP4 includes a checksum with every data response... - Int16.h - - - - d4_ops - cpp - instm - libdap::Int16 - - classlibdap_1_1Int16.html - ae02bd87bfcc0479c36c1e6b625e0fcdc - Int16.h - - - - dataset - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a47521ce321a17e6ce217870cb6a1a7aa - Returns the name of the dataset used to create this instance. - BaseType.h - - - - deserialize - cpp - instm - libdap::Int16 - - classlibdap_1_1Int16.html - a2f5bf801ac701d4b886c22abd75794df - Receive data from the net. - Int16.h - - - - deserialize - cpp - instm - libdap::Int16 - - classlibdap_1_1Int16.html - a0f454a350731ba04f593466e6c45551e - Int16.h - - - - dump - cpp - instm - libdap::Int16 - - classlibdap_1_1Int16.html - a39829155a76b195e6a9c62e06d50bc0f - dumps information about this object - Int16.h - - - - element_count - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5c2235737737b482bfa7536b8aeab810 - Count the members of constructor types. - BaseType.h - - - - FQN - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - BaseType.h - - - - get_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1fcd9537c67e3bf88964b2656ff5bac1 - BaseType.h - - - - get_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a3459cdaa239c33ce111ef360d8dc3017 - BaseType.h - - - - Int16 - cpp - instm - libdap::Int16 - - classlibdap_1_1Int16.html - a8221f1fa8aaf054c72059a48e5ec2753 - Int16.h - - - - Int16 - cpp - instm - libdap::Int16 - - classlibdap_1_1Int16.html - a40e5dd3ede0dce7a1b15320358519d6f - Int16.h - - - - is_constructor_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8b8490e0047c6da52945699a132008ea - Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable... - BaseType.h - - - - is_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - Is this variable part of the current selection? - BaseType.h - - - - is_simple_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aae57e5b270b3a015d40c8db10b9b5549 - Returns true if the instance is a numeric, string or URL type variable. - BaseType.h - - - - is_vector_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a7107c76dbcab71015141142383b6d022 - Returns true if the instance is a vector (i.e., array) type variable. - BaseType.h - - - - length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aadcda7a659157bc6a832d8a5fb775b3f - How many elements are in this variable. - BaseType.h - - - - name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a24c5d67823b3cff7f4245a993072a142 - Returns the name of the class instance. - BaseType.h - - - - ops - cpp - instm - libdap::Int16 - - classlibdap_1_1Int16.html - ad72c7db64b35bf1e8ad8aa7e27526cb9 - Evaluate relational operators. - Int16.h - - - - print_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afcddbe441380b95c894510c02980b163 - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2d799fad93255d7f2b803562ae7a5784 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afd744b0ddeb04e7b173c9e83423ec572 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_val - cpp - instm - libdap::Int16 - - classlibdap_1_1Int16.html - a172f4ff5eb67a2e64c918700406a5f4f - Prints the value of the variable. - Int16.h - - - - print_val - cpp - instm - libdap::Int16 - - classlibdap_1_1Int16.html - ac60b82349f40d252114773c7f6361aaf - Prints the value of the variable. - Int16.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a825820edee179550cfde3dfd4d274f2a - BaseType.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8bd2c7682edd48c64b210bdf247bdef7 - BaseType.h - - - - print_xml_writer - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a11554ff931528b243e9af8173d205b44 - BaseType.h - - - - ptr_duplicate - cpp - instm - libdap::Int16 - - classlibdap_1_1Int16.html - a2deba43131c5ca63ae81f4f7449b6327 - Int16.h - - - - read - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1da003c53f2e663223f603ab3fbd7c8e - Read data into a local buffer. - BaseType.h - - - - read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a38ff819a432217c55db2e9071928d20c - Has this variable been read? - BaseType.h - - - - send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a980c0013817836aa77ef74aeec7fb192 - Should this variable be sent? - BaseType.h - - - - serialize - cpp - instm - libdap::Int16 - - classlibdap_1_1Int16.html - a3c6904ab6d9679c194c6519dde592892 - Move data to the net, then remove them from the object. - Int16.h - - - - serialize - cpp - instm - libdap::Int16 - - classlibdap_1_1Int16.html - afa863cbbe21b125528965176b3e8498f - Serialize an Int8. - Int16.h - - - - set_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a572a1d76a75981abac83a4241e90c0fa - BaseType.h - - - - set_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2bc036248cdaf1affac464170f32ad30 - BaseType.h - - - - set_length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4fe343c1eeb6fb1d61ab030433651d90 - Set the number of elements for this variable. - BaseType.h - - - - set_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a86504564f45a3e6748c6f1cc0ff4e9fa - Sets the name of the class instance. - BaseType.h - - - - set_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - BaseType.h - - - - set_read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4533905a450d2a7af32e7d5acd557676 - Sets the value of the read_p property. - BaseType.h - - - - set_send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aba7b27635c95b74536de18393133628e - BaseType.h - - - - set_synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a595cb4059cff24f801a1b6da79bd2f9e - BaseType.h - - - - set_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af74f8d1ef57c9fcca46f620f75d175a3 - Sets the type of the class instance. - BaseType.h - - - - synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae64e677da27249473cdba0b60cdbb90a - BaseType.h - - - - toString - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a701eb3361f5b5628329ece019cd34519 - BaseType.h - - - - transfer_attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - add8e836c622042a339152a6c31e5bdfb - BaseType.h - - - - transform_to_dap2 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - affec8a11e9cc035d4b1e8fb9a87b2072 - DAP4 to DAP2 transform. - BaseType.h - - - - transform_to_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adb03e2e1e40c3c888577c4666831a949 - DAP2 to DAP4 transform. - BaseType.h - - - - type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - Returns the type of the class instance. - BaseType.h - - - - type_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a18a42c8ec35cb5b15cd651a4152f8a2c - Returns the type of the class instance as a string. - BaseType.h - - - - val2buf - cpp - instm - libdap::Int16 - - classlibdap_1_1Int16.html - ab2c9d7ed6f92e1dbdb08b179943bab4f - Loads class data. - Int16.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4dc4fac1bb6083f6db645f37bfd59b85 - Returns a pointer to a member of a constructor class. - BaseType.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adecfc442b5927c79933c7f71cfe03fd2 - BaseType.h - - - - width - cpp - instm - libdap::Int16 - - classlibdap_1_1Int16.html - a4999690c9bc6d0fa42138e10ee33cb4f - How many bytes does this variable use Return the number of bytes of storage this variable uses... - Int16.h - - - - attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a97452f06d2188eb838399a709246b5e9 - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a722d33783aa0272d339b0301a4f77e59 - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1956e6ea90a745516f5372c859173433 - Read data into this variable. - BaseType.h - - - - m_duplicate - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a0c55b826c8c5dfe7a454dc670e859a41 - Perform a deep copy. - BaseType.h - - - - libdap::Int32 - c - cl - libdap::Int32 - - classlibdap_1_1Int32.html - Holds a 32-bit signed integer. - Int32.h - - - - add_var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adca3c2621c4a509537c18362005d7f7f - Add a variable. - BaseType.h - - - - buf2val - cpp - instm - libdap::Int32 - - classlibdap_1_1Int32.html - a56e6f9ece856568be871fab239328912 - Reads the class data. - Int32.h - - - - check_semantics - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aec503abec2fd3090e7738c0a575491f8 - Compare an object&#39;s current state with the semantics of its type. - BaseType.h - - - - clear_local_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aaddb97a4efbe035f41deaf03c6e8683f - BaseType.h - - - - compute_checksum - cpp - instm - libdap::Int32 - - classlibdap_1_1Int32.html - a64d749e3500405c7f6f0ae194cc0fd69 - include the data for this variable in the checksum DAP4 includes a checksum with every data response... - Int32.h - - - - d4_ops - cpp - instm - libdap::Int32 - - classlibdap_1_1Int32.html - ab74be58716d8c3e6d26462dff2a9b565 - Int32.h - - - - dataset - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a47521ce321a17e6ce217870cb6a1a7aa - Returns the name of the dataset used to create this instance. - BaseType.h - - - - deserialize - cpp - instm - libdap::Int32 - - classlibdap_1_1Int32.html - aac0c8bdfad94663d57af5f7a571451a4 - Receive data from the net. - Int32.h - - - - deserialize - cpp - instm - libdap::Int32 - - classlibdap_1_1Int32.html - aad1329f624040df27cb880d7e2640a4a - Int32.h - - - - dump - cpp - instm - libdap::Int32 - - classlibdap_1_1Int32.html - aaae2d081b7d4d852854648b37441ed4d - dumps information about this object - Int32.h - - - - element_count - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5c2235737737b482bfa7536b8aeab810 - Count the members of constructor types. - BaseType.h - - - - FQN - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - BaseType.h - - - - get_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1fcd9537c67e3bf88964b2656ff5bac1 - BaseType.h - - - - get_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a3459cdaa239c33ce111ef360d8dc3017 - BaseType.h - - - - Int32 - cpp - instm - libdap::Int32 - - classlibdap_1_1Int32.html - aca0a0d84a219e98c4ebbd7afda49af26 - Int32.h - - - - Int32 - cpp - instm - libdap::Int32 - - classlibdap_1_1Int32.html - aa965395a50cee7277d9773f762a9c205 - Int32.h - - - - is_constructor_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8b8490e0047c6da52945699a132008ea - Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable... - BaseType.h - - - - is_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - Is this variable part of the current selection? - BaseType.h - - - - is_simple_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aae57e5b270b3a015d40c8db10b9b5549 - Returns true if the instance is a numeric, string or URL type variable. - BaseType.h - - - - is_vector_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a7107c76dbcab71015141142383b6d022 - Returns true if the instance is a vector (i.e., array) type variable. - BaseType.h - - - - length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aadcda7a659157bc6a832d8a5fb775b3f - How many elements are in this variable. - BaseType.h - - - - name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a24c5d67823b3cff7f4245a993072a142 - Returns the name of the class instance. - BaseType.h - - - - ops - cpp - instm - libdap::Int32 - - classlibdap_1_1Int32.html - ac319d1cdae57d4fc7bfbd972f2f8d4a1 - Evaluate relational operators. - Int32.h - - - - print_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afcddbe441380b95c894510c02980b163 - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2d799fad93255d7f2b803562ae7a5784 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afd744b0ddeb04e7b173c9e83423ec572 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_val - cpp - instm - libdap::Int32 - - classlibdap_1_1Int32.html - abd206d26908919c73e932a59d02966ba - Prints the value of the variable. - Int32.h - - - - print_val - cpp - instm - libdap::Int32 - - classlibdap_1_1Int32.html - ae8cb63e9eb85cbc3e378267670b0aef5 - Prints the value of the variable. - Int32.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a825820edee179550cfde3dfd4d274f2a - BaseType.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8bd2c7682edd48c64b210bdf247bdef7 - BaseType.h - - - - print_xml_writer - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a11554ff931528b243e9af8173d205b44 - BaseType.h - - - - ptr_duplicate - cpp - instm - libdap::Int32 - - classlibdap_1_1Int32.html - aa7ff77174068c8b33d51d065ed922af4 - Int32.h - - - - read - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1da003c53f2e663223f603ab3fbd7c8e - Read data into a local buffer. - BaseType.h - - - - read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a38ff819a432217c55db2e9071928d20c - Has this variable been read? - BaseType.h - - - - send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a980c0013817836aa77ef74aeec7fb192 - Should this variable be sent? - BaseType.h - - - - serialize - cpp - instm - libdap::Int32 - - classlibdap_1_1Int32.html - ac769546107e556cfdefa0fb4961711e8 - Move data to the net, then remove them from the object. - Int32.h - - - - serialize - cpp - instm - libdap::Int32 - - classlibdap_1_1Int32.html - a8c67aae2fbbbe48c5b6d8049d5af04a2 - Serialize an Int8. - Int32.h - - - - set_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a572a1d76a75981abac83a4241e90c0fa - BaseType.h - - - - set_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2bc036248cdaf1affac464170f32ad30 - BaseType.h - - - - set_length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4fe343c1eeb6fb1d61ab030433651d90 - Set the number of elements for this variable. - BaseType.h - - - - set_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a86504564f45a3e6748c6f1cc0ff4e9fa - Sets the name of the class instance. - BaseType.h - - - - set_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - BaseType.h - - - - set_read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4533905a450d2a7af32e7d5acd557676 - Sets the value of the read_p property. - BaseType.h - - - - set_send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aba7b27635c95b74536de18393133628e - BaseType.h - - - - set_synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a595cb4059cff24f801a1b6da79bd2f9e - BaseType.h - - - - set_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af74f8d1ef57c9fcca46f620f75d175a3 - Sets the type of the class instance. - BaseType.h - - - - synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae64e677da27249473cdba0b60cdbb90a - BaseType.h - - - - toString - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a701eb3361f5b5628329ece019cd34519 - BaseType.h - - - - transfer_attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - add8e836c622042a339152a6c31e5bdfb - BaseType.h - - - - transform_to_dap2 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - affec8a11e9cc035d4b1e8fb9a87b2072 - DAP4 to DAP2 transform. - BaseType.h - - - - transform_to_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adb03e2e1e40c3c888577c4666831a949 - DAP2 to DAP4 transform. - BaseType.h - - - - type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - Returns the type of the class instance. - BaseType.h - - - - type_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a18a42c8ec35cb5b15cd651a4152f8a2c - Returns the type of the class instance as a string. - BaseType.h - - - - val2buf - cpp - instm - libdap::Int32 - - classlibdap_1_1Int32.html - a8beb52ecacfe72077489b5687db7b9a4 - Loads class data. - Int32.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4dc4fac1bb6083f6db645f37bfd59b85 - Returns a pointer to a member of a constructor class. - BaseType.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adecfc442b5927c79933c7f71cfe03fd2 - BaseType.h - - - - width - cpp - instm - libdap::Int32 - - classlibdap_1_1Int32.html - a38a592e39c59f44933d490373f6fbe7c - How many bytes does this variable use Return the number of bytes of storage this variable uses... - Int32.h - - - - attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a97452f06d2188eb838399a709246b5e9 - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a722d33783aa0272d339b0301a4f77e59 - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1956e6ea90a745516f5372c859173433 - Read data into this variable. - BaseType.h - - - - m_duplicate - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a0c55b826c8c5dfe7a454dc670e859a41 - Perform a deep copy. - BaseType.h - - - - libdap::Int64 - c - cl - libdap::Int64 - - classlibdap_1_1Int64.html - Holds a64-bit signed integer. - Int64.h - - - - add_var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adca3c2621c4a509537c18362005d7f7f - Add a variable. - BaseType.h - - - - check_semantics - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aec503abec2fd3090e7738c0a575491f8 - Compare an object&#39;s current state with the semantics of its type. - BaseType.h - - - - clear_local_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aaddb97a4efbe035f41deaf03c6e8683f - BaseType.h - - - - compute_checksum - cpp - instm - libdap::Int64 - - classlibdap_1_1Int64.html - ab18cb68a6ac3fafc03fa223408fd1108 - include the data for this variable in the checksum DAP4 includes a checksum with every data response... - Int64.h - - - - d4_ops - cpp - instm - libdap::Int64 - - classlibdap_1_1Int64.html - ac066aff6a587475d50ddd60b3279eb17 - Int64.h - - - - dataset - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a47521ce321a17e6ce217870cb6a1a7aa - Returns the name of the dataset used to create this instance. - BaseType.h - - - - deserialize - cpp - instm - libdap::Int64 - - classlibdap_1_1Int64.html - a8c1a1dddd04b2e892f9efca2058e833d - Int64.h - - - - dump - cpp - instm - libdap::Int64 - - classlibdap_1_1Int64.html - a63ad042799beb2ccf9a902df4e36d1f6 - dumps information about this object - Int64.h - - - - element_count - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5c2235737737b482bfa7536b8aeab810 - Count the members of constructor types. - BaseType.h - - - - FQN - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - BaseType.h - - - - get_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1fcd9537c67e3bf88964b2656ff5bac1 - BaseType.h - - - - get_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a3459cdaa239c33ce111ef360d8dc3017 - BaseType.h - - - - Int64 - cpp - instm - libdap::Int64 - - classlibdap_1_1Int64.html - a3fb9408eeebf8d532d58f276573aa32e - Int64.h - - - - Int64 - cpp - instm - libdap::Int64 - - classlibdap_1_1Int64.html - a33ab39f101e981b5d097f8f558f3857f - Int64.h - - - - is_constructor_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8b8490e0047c6da52945699a132008ea - Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable... - BaseType.h - - - - is_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - Is this variable part of the current selection? - BaseType.h - - - - is_simple_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aae57e5b270b3a015d40c8db10b9b5549 - Returns true if the instance is a numeric, string or URL type variable. - BaseType.h - - - - is_vector_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a7107c76dbcab71015141142383b6d022 - Returns true if the instance is a vector (i.e., array) type variable. - BaseType.h - - - - length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aadcda7a659157bc6a832d8a5fb775b3f - How many elements are in this variable. - BaseType.h - - - - name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a24c5d67823b3cff7f4245a993072a142 - Returns the name of the class instance. - BaseType.h - - - - ops - cpp - instm - libdap::Int64 - - classlibdap_1_1Int64.html - a80a9bdafa15ee063ad3d387cffe36cf1 - Evaluate relational operators. - Int64.h - - - - print_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afcddbe441380b95c894510c02980b163 - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2d799fad93255d7f2b803562ae7a5784 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afd744b0ddeb04e7b173c9e83423ec572 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_val - cpp - instm - libdap::Int64 - - classlibdap_1_1Int64.html - a569745a0983529a9e752dc2f221fc45c - Prints the value of the variable. - Int64.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a825820edee179550cfde3dfd4d274f2a - BaseType.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8bd2c7682edd48c64b210bdf247bdef7 - BaseType.h - - - - print_xml_writer - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a11554ff931528b243e9af8173d205b44 - BaseType.h - - - - ptr_duplicate - cpp - instm - libdap::Int64 - - classlibdap_1_1Int64.html - a5b550206f8c98647d01660f9f2405408 - Int64.h - - - - read - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1da003c53f2e663223f603ab3fbd7c8e - Read data into a local buffer. - BaseType.h - - - - read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a38ff819a432217c55db2e9071928d20c - Has this variable been read? - BaseType.h - - - - send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a980c0013817836aa77ef74aeec7fb192 - Should this variable be sent? - BaseType.h - - - - serialize - cpp - instm - libdap::Int64 - - classlibdap_1_1Int64.html - a540f4af6a2b78079a9b6d4c9edaa10b7 - Serialize an Int8. - Int64.h - - - - set_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a572a1d76a75981abac83a4241e90c0fa - BaseType.h - - - - set_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2bc036248cdaf1affac464170f32ad30 - BaseType.h - - - - set_length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4fe343c1eeb6fb1d61ab030433651d90 - Set the number of elements for this variable. - BaseType.h - - - - set_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a86504564f45a3e6748c6f1cc0ff4e9fa - Sets the name of the class instance. - BaseType.h - - - - set_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - BaseType.h - - - - set_read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4533905a450d2a7af32e7d5acd557676 - Sets the value of the read_p property. - BaseType.h - - - - set_send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aba7b27635c95b74536de18393133628e - BaseType.h - - - - set_synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a595cb4059cff24f801a1b6da79bd2f9e - BaseType.h - - - - set_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af74f8d1ef57c9fcca46f620f75d175a3 - Sets the type of the class instance. - BaseType.h - - - - synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae64e677da27249473cdba0b60cdbb90a - BaseType.h - - - - toString - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a701eb3361f5b5628329ece019cd34519 - BaseType.h - - - - transfer_attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - add8e836c622042a339152a6c31e5bdfb - BaseType.h - - - - transform_to_dap2 - cpp - instm - libdap::Int64 - - classlibdap_1_1Int64.html - ac95e288099ac33fa8a6b0197ef315f08 - DAP4 to DAP2 transform. - Int64.h - - - - transform_to_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adb03e2e1e40c3c888577c4666831a949 - DAP2 to DAP4 transform. - BaseType.h - - - - type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - Returns the type of the class instance. - BaseType.h - - - - type_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a18a42c8ec35cb5b15cd651a4152f8a2c - Returns the type of the class instance as a string. - BaseType.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4dc4fac1bb6083f6db645f37bfd59b85 - Returns a pointer to a member of a constructor class. - BaseType.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adecfc442b5927c79933c7f71cfe03fd2 - BaseType.h - - - - width - cpp - instm - libdap::Int64 - - classlibdap_1_1Int64.html - a2f157a10955f9b51973863e4683462d6 - How many bytes does this variable use Return the number of bytes of storage this variable uses... - Int64.h - - - - attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a97452f06d2188eb838399a709246b5e9 - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a722d33783aa0272d339b0301a4f77e59 - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1956e6ea90a745516f5372c859173433 - Read data into this variable. - BaseType.h - - - - serialize - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adc24a735977e28acb0e6f78667c1dd21 - Move data to the net, then remove them from the object. - BaseType.h - - - - deserialize - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1f27d99250e857efd86ac9db788bbf1b - Receive data from the net. - BaseType.h - - - - m_duplicate - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a0c55b826c8c5dfe7a454dc670e859a41 - Perform a deep copy. - BaseType.h - - - - libdap::Int8 - c - cl - libdap::Int8 - - classlibdap_1_1Int8.html - Holds an 8-bit signed integer value. - Int8.h - - - - add_var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adca3c2621c4a509537c18362005d7f7f - Add a variable. - BaseType.h - - - - check_semantics - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aec503abec2fd3090e7738c0a575491f8 - Compare an object&#39;s current state with the semantics of its type. - BaseType.h - - - - clear_local_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aaddb97a4efbe035f41deaf03c6e8683f - BaseType.h - - - - compute_checksum - cpp - instm - libdap::Int8 - - classlibdap_1_1Int8.html - a3cca62e5feff92761fdaa8f02295c881 - include the data for this variable in the checksum DAP4 includes a checksum with every data response... - Int8.h - - - - d4_ops - cpp - instm - libdap::Int8 - - classlibdap_1_1Int8.html - aba2aa5b603379c089a2dba07442dfcb9 - Int8.h - - - - dataset - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a47521ce321a17e6ce217870cb6a1a7aa - Returns the name of the dataset used to create this instance. - BaseType.h - - - - deserialize - cpp - instm - libdap::Int8 - - classlibdap_1_1Int8.html - a7afc5e4a5c43f76e37a8dcbd7c39799b - Int8.h - - - - dump - cpp - instm - libdap::Int8 - - classlibdap_1_1Int8.html - a0ccf9a858616fc6e67f6764dade84a9b - dumps information about this object - Int8.h - - - - element_count - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5c2235737737b482bfa7536b8aeab810 - Count the members of constructor types. - BaseType.h - - - - FQN - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - BaseType.h - - - - get_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1fcd9537c67e3bf88964b2656ff5bac1 - BaseType.h - - - - get_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a3459cdaa239c33ce111ef360d8dc3017 - BaseType.h - - - - Int8 - cpp - instm - libdap::Int8 - - classlibdap_1_1Int8.html - a97bcbc8d5851b032caab70db6a8514db - Int8.h - - - - Int8 - cpp - instm - libdap::Int8 - - classlibdap_1_1Int8.html - a916571c6be394d1f30c195094353d4d7 - Int8.h - - - - is_constructor_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8b8490e0047c6da52945699a132008ea - Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable... - BaseType.h - - - - is_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - Is this variable part of the current selection? - BaseType.h - - - - is_simple_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aae57e5b270b3a015d40c8db10b9b5549 - Returns true if the instance is a numeric, string or URL type variable. - BaseType.h - - - - is_vector_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a7107c76dbcab71015141142383b6d022 - Returns true if the instance is a vector (i.e., array) type variable. - BaseType.h - - - - length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aadcda7a659157bc6a832d8a5fb775b3f - How many elements are in this variable. - BaseType.h - - - - name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a24c5d67823b3cff7f4245a993072a142 - Returns the name of the class instance. - BaseType.h - - - - ops - cpp - instm - libdap::Int8 - - classlibdap_1_1Int8.html - a2d63b4ba6571ce6d2c673fe7f9adb59a - Evaluate relational operators. - Int8.h - - - - print_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afcddbe441380b95c894510c02980b163 - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2d799fad93255d7f2b803562ae7a5784 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afd744b0ddeb04e7b173c9e83423ec572 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_val - cpp - instm - libdap::Int8 - - classlibdap_1_1Int8.html - a6232678aa95847bee75c063c1175f706 - Prints the value of the variable. - Int8.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a825820edee179550cfde3dfd4d274f2a - BaseType.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8bd2c7682edd48c64b210bdf247bdef7 - BaseType.h - - - - print_xml_writer - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a11554ff931528b243e9af8173d205b44 - BaseType.h - - - - ptr_duplicate - cpp - instm - libdap::Int8 - - classlibdap_1_1Int8.html - a8c468c88483f4d926bb79c26d6e27c65 - Int8.h - - - - read - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1da003c53f2e663223f603ab3fbd7c8e - Read data into a local buffer. - BaseType.h - - - - read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a38ff819a432217c55db2e9071928d20c - Has this variable been read? - BaseType.h - - - - send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a980c0013817836aa77ef74aeec7fb192 - Should this variable be sent? - BaseType.h - - - - serialize - cpp - instm - libdap::Int8 - - classlibdap_1_1Int8.html - a9825b8d30a147936f4e69e3db56ae1a6 - Serialize an Int8. - Int8.h - - - - set_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a572a1d76a75981abac83a4241e90c0fa - BaseType.h - - - - set_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2bc036248cdaf1affac464170f32ad30 - BaseType.h - - - - set_length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4fe343c1eeb6fb1d61ab030433651d90 - Set the number of elements for this variable. - BaseType.h - - - - set_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a86504564f45a3e6748c6f1cc0ff4e9fa - Sets the name of the class instance. - BaseType.h - - - - set_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - BaseType.h - - - - set_read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4533905a450d2a7af32e7d5acd557676 - Sets the value of the read_p property. - BaseType.h - - - - set_send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aba7b27635c95b74536de18393133628e - BaseType.h - - - - set_synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a595cb4059cff24f801a1b6da79bd2f9e - BaseType.h - - - - set_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af74f8d1ef57c9fcca46f620f75d175a3 - Sets the type of the class instance. - BaseType.h - - - - synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae64e677da27249473cdba0b60cdbb90a - BaseType.h - - - - toString - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a701eb3361f5b5628329ece019cd34519 - BaseType.h - - - - transfer_attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - add8e836c622042a339152a6c31e5bdfb - BaseType.h - - - - transform_to_dap2 - cpp - instm - libdap::Int8 - - classlibdap_1_1Int8.html - ad27c8597a1c0d8efdca4f0e844ea1ee0 - DAP4 to DAP2 transform. - Int8.h - - - - transform_to_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adb03e2e1e40c3c888577c4666831a949 - DAP2 to DAP4 transform. - BaseType.h - - - - type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - Returns the type of the class instance. - BaseType.h - - - - type_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a18a42c8ec35cb5b15cd651a4152f8a2c - Returns the type of the class instance as a string. - BaseType.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4dc4fac1bb6083f6db645f37bfd59b85 - Returns a pointer to a member of a constructor class. - BaseType.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adecfc442b5927c79933c7f71cfe03fd2 - BaseType.h - - - - width - cpp - instm - libdap::Int8 - - classlibdap_1_1Int8.html - a377dd97f28aa950ba6ff98ffe0d26808 - How many bytes does this variable use Return the number of bytes of storage this variable uses... - Int8.h - - - - attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a97452f06d2188eb838399a709246b5e9 - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a722d33783aa0272d339b0301a4f77e59 - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1956e6ea90a745516f5372c859173433 - Read data into this variable. - BaseType.h - - - - serialize - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adc24a735977e28acb0e6f78667c1dd21 - Move data to the net, then remove them from the object. - BaseType.h - - - - deserialize - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1f27d99250e857efd86ac9db788bbf1b - Receive data from the net. - BaseType.h - - - - m_duplicate - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a0c55b826c8c5dfe7a454dc670e859a41 - Perform a deep copy. - BaseType.h - - - - libdap::InternalErr - c - cl - libdap::InternalErr - - classlibdap_1_1InternalErr.html - A class for software fault reporting. - InternalErr.h - - - - get_error_code - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - aaca0caca09e939602cade604cbc9824f - Error.h - - - - get_error_message - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - ab24a61e4974aae62962a40f9975e674c - Error.h - - - - OK - cpp - instm - libdap::InternalErr - - classlibdap_1_1InternalErr.html - ae3487b9f8d63ae20250ba8148689a278 - Is the InternalErr object valid? - InternalErr.h - - - - OK - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - acf3ab60821773bd8b62284750b02cfc0 - Is the Error object valid? - Error.h - - - - parse - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - ac705b3c1cfab1f7530d66a974eb0e8b6 - Parse an Error object. - Error.h - - - - print - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a552d711be27e6695854bd2b977a5cf31 - Error.h - - - - print - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a4c58ef196c2b247bd37529bb7ad6a666 - Error.h - - - - set_error_code - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a47c0f4b6a38d8ca075d1056076d2845d - Error.h - - - - set_error_message - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a3ca90d33bf1c95529c9eefdfe8646e34 - Error.h - - - - what - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - accc5eeb469c8c18ec16dbf7fefe3cc41 - The pointer is valid only for the lifetime of the Error instance. jhrg 9/22/20. - Error.h - - - - libdap::Keywords - c - cl - libdap::Keywords - - classlibdap_1_1Keywords.html - Keywords2.h - - - - get_keyword_value - cpp - instm - libdap::Keywords - - classlibdap_1_1Keywords.html - a0738caba6444fbf51305f1c53b46c35e - Keywords2.h - - - - get_keywords - cpp - instm - libdap::Keywords - - classlibdap_1_1Keywords.html - a14a91e22db14749c3d84dec48304ca9e - Keywords2.h - - - - has_keyword - cpp - instm - libdap::Keywords - - classlibdap_1_1Keywords.html - a6cedb7cd4c9dafbea36ae9d2301ebebd - Keywords2.h - - - - is_known_keyword - cpp - instm - libdap::Keywords - - classlibdap_1_1Keywords.html - a8cd25d75f81739917a9898a2155896e7 - Keywords2.h - - - - parse_keywords - cpp - instm - libdap::Keywords - - classlibdap_1_1Keywords.html - acc56ce43a21cce844f2a2de3ecd54e8c - Keywords2.h - - - - libdap::Locker - c - cl - libdap::Locker - - classlibdap_1_1Locker.html - MarshallerThread.h - - - - Locker - cpp - instm - libdap::Locker - - classlibdap_1_1Locker.html - aeeefa18f8a9713d91b830589e5c2b6a9 - MarshallerThread.h - - - - ~Locker - cpp - instm - libdap::Locker - - classlibdap_1_1Locker.html - a6332fec7611d1507cb7323987ec86845 - MarshallerThread.h - - - - libdap::Marshaller - c - cl - libdap::Marshaller - - classlibdap_1_1Marshaller.html - abstract base class used to marshal/serialize dap data objects - Marshaller.h - - - - dump - cpp - instm - libdap::Marshaller - - classlibdap_1_1Marshaller.html - a0e88a4aed6f7fa1908c50695cbf9e2df - dump the contents of this object to the specified ostream - Marshaller.h - - - - put_vector_end - cpp - instm - libdap::Marshaller - - classlibdap_1_1Marshaller.html - a3409a138c4a67bc9dd24a3a2ad6f97db - Marshaller.h - - - - put_vector_part - cpp - instm - libdap::Marshaller - - classlibdap_1_1Marshaller.html - a8b303c96939749f6aca62d0e582909b0 - Marshaller.h - - - - put_vector_start - cpp - instm - libdap::Marshaller - - classlibdap_1_1Marshaller.html - ae0cd4b847386e89eace23e6b2fc08826 - Marshaller.h - - - - libdap::MarshallerThread - c - cl - libdap::MarshallerThread - - classlibdap_1_1MarshallerThread.html - MarshallerThread.h - - - - start_thread - cpp - instm - libdap::MarshallerThread - - classlibdap_1_1MarshallerThread.html - acc8bb280ae10063aca52d5b73000c247 - MarshallerThread.h - - - - start_thread - cpp - instm - libdap::MarshallerThread - - classlibdap_1_1MarshallerThread.html - a7c22686ec230b6725aa811fe53b53ade - MarshallerThread.h - - - - write_thread - cpp - clm - libdap::MarshallerThread - - classlibdap_1_1MarshallerThread.html - a441a9808a63322a15845d4522f1eb7a3 - MarshallerThread.h - - - - write_thread_part - cpp - clm - libdap::MarshallerThread - - classlibdap_1_1MarshallerThread.html - ac27f444d24f12691842029368c128ea6 - MarshallerThread.h - - - - libdap::NoSuchPrimaryResource - c - cl - libdap::NoSuchPrimaryResource - - classlibdap_1_1NoSuchPrimaryResource.html - AISExceptions.h - - - - get_error_code - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - aaca0caca09e939602cade604cbc9824f - Error.h - - - - get_error_message - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - ab24a61e4974aae62962a40f9975e674c - Error.h - - - - OK - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - acf3ab60821773bd8b62284750b02cfc0 - Is the Error object valid? - Error.h - - - - parse - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - ac705b3c1cfab1f7530d66a974eb0e8b6 - Parse an Error object. - Error.h - - - - print - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a552d711be27e6695854bd2b977a5cf31 - Error.h - - - - print - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a4c58ef196c2b247bd37529bb7ad6a666 - Error.h - - - - set_error_code - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a47c0f4b6a38d8ca075d1056076d2845d - Error.h - - - - set_error_message - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a3ca90d33bf1c95529c9eefdfe8646e34 - Error.h - - - - what - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - accc5eeb469c8c18ec16dbf7fefe3cc41 - The pointer is valid only for the lifetime of the Error instance. jhrg 9/22/20. - Error.h - - - - libdap::parser_arg - c - cl - libdap::parser_arg - - structlibdap_1_1parser__arg.html - Pass parameters by reference to a parser. - parser.h - - - - libdap::PipeResponse - c - cl - libdap::PipeResponse - - classlibdap_1_1PipeResponse.html - Encapsulate a response. This class provides special treatment for &#39;stream pipes.&#39; It arranges to clos... - PipeResponse.h - - - - PipeResponse - cpp - instm - libdap::PipeResponse - - classlibdap_1_1PipeResponse.html - a37f0a6670887caa96ea5b9381b2e5e10 - Initialize with a stream returned by popen(). - PipeResponse.h - - - - ~PipeResponse - cpp - instm - libdap::PipeResponse - - classlibdap_1_1PipeResponse.html - ae6837a191d34e2b686634e52bee73a4c - PipeResponse.h - - - - libdap::RCReader - c - cl - libdap::RCReader - - classlibdap_1_1RCReader.html - RCReader.h - - - - get_no_proxy_for_port - cpp - instm - libdap::RCReader - - classlibdap_1_1RCReader.html - a21db450d67811148259166705a2ddfae - RCReader.h - - - - get_proxy_for_proxy_host_url - cpp - instm - libdap::RCReader - - classlibdap_1_1RCReader.html - aac6dd12779e6a81fef84ee7bbb1738dd - RCReader.h - - - - get_proxy_for_regexp - cpp - instm - libdap::RCReader - - classlibdap_1_1RCReader.html - a72e1a556abbde9fb05a330c0072bcb0d - RCReader.h - - - - get_proxy_for_regexp_flags - cpp - instm - libdap::RCReader - - classlibdap_1_1RCReader.html - acf4d55aa8d41827d8b616a9fe5fb784c - RCReader.h - - - - get_proxy_server_host - cpp - instm - libdap::RCReader - - classlibdap_1_1RCReader.html - a0f5a320d221c226a9dffd58d844d47cb - Get the proxy host. - RCReader.h - - - - get_proxy_server_host_url - cpp - instm - libdap::RCReader - - classlibdap_1_1RCReader.html - a99bf90838d13c4f9b7b010129fc11347 - RCReader.h - - - - get_proxy_server_port - cpp - instm - libdap::RCReader - - classlibdap_1_1RCReader.html - a46ca3c57a3e33c5f873fe26ab150f39c - Get the proxy port. - RCReader.h - - - - get_proxy_server_protocol - cpp - instm - libdap::RCReader - - classlibdap_1_1RCReader.html - abf8b0c2e7e70bfa96ef1613b2bbeddf0 - Get the proxy server protocol. - RCReader.h - - - - get_proxy_server_userpw - cpp - instm - libdap::RCReader - - classlibdap_1_1RCReader.html - a658abf6e30be88545faff67b1f741698 - Get the proxy username and password. - RCReader.h - - - - is_proxy_for_used - cpp - instm - libdap::RCReader - - classlibdap_1_1RCReader.html - ad02ee19bd75bb0747cfee0d70ee1dcc1 - RCReader.h - - - - set_no_proxy_for_port - cpp - instm - libdap::RCReader - - classlibdap_1_1RCReader.html - a02d730936d88cb18b1d0e012eac28f46 - RCReader.h - - - - set_proxy_for_proxy_host_url - cpp - instm - libdap::RCReader - - classlibdap_1_1RCReader.html - a1bf789ccd96b83babb833e9b9ec6110a - RCReader.h - - - - set_proxy_for_regexp - cpp - instm - libdap::RCReader - - classlibdap_1_1RCReader.html - a360d2280601f9dfb17d7c954ca333b40 - RCReader.h - - - - set_proxy_for_regexp_flags - cpp - instm - libdap::RCReader - - classlibdap_1_1RCReader.html - ade479cf9efffe7aa52652aff13cc365e - RCReader.h - - - - set_proxy_server_host_url - cpp - instm - libdap::RCReader - - classlibdap_1_1RCReader.html - a80ac516bfcdd856a512e114f22d22046 - RCReader.h - - - - libdap::Regex - c - cl - libdap::Regex - - classlibdap_1_1Regex.html - GNURegex.h - - - - match - cpp - instm - libdap::Regex - - classlibdap_1_1Regex.html - aaf743b4f3528a40f435fa1e55ff51b5f - Does the pattern match. - GNURegex.h - - - - Regex - cpp - instm - libdap::Regex - - classlibdap_1_1Regex.html - add461a940025b957d42d0dbf06d7f7ac - GNURegex.h - - - - Regex - cpp - instm - libdap::Regex - - classlibdap_1_1Regex.html - acfe8656faf0ba34834337148fcd64d23 - GNURegex.h - - - - search - cpp - instm - libdap::Regex - - classlibdap_1_1Regex.html - ae1ce41e1da66aa2d9dcad055b619be21 - How much of the string does the pattern match. - GNURegex.h - - - - libdap::Resource - c - cl - libdap::Resource - - classlibdap_1_1Resource.html - Associate a rule with an ancillary resource. - Resource.h - - - - get_rule - cpp - instm - libdap::Resource - - classlibdap_1_1Resource.html - a1fc9cb3d7ab36cede2e621d0c11abc93 - Resource.h - - - - get_url - cpp - instm - libdap::Resource - - classlibdap_1_1Resource.html - a1be16a2532ccdaac0b996ff5402f1459 - Resource.h - - - - Resource - cpp - instm - libdap::Resource - - classlibdap_1_1Resource.html - a4900c98c095abda49d70e302940abbdc - Resource.h - - - - Resource - cpp - instm - libdap::Resource - - classlibdap_1_1Resource.html - a762d0f0c90046fd2ae9cf560d4034853 - Resource.h - - - - Resource - cpp - instm - libdap::Resource - - classlibdap_1_1Resource.html - ae00f0e40bbf9b6adad22f7317e760ac8 - Resource.h - - - - Resource - cpp - instm - libdap::Resource - - classlibdap_1_1Resource.html - a2761a9823e5b26e0160cc1f5377e7f42 - Resource.h - - - - set_rule - cpp - instm - libdap::Resource - - classlibdap_1_1Resource.html - a96b702c32c4dd26d303f48c47b1d6748 - Resource.h - - - - set_url - cpp - instm - libdap::Resource - - classlibdap_1_1Resource.html - a369191cef05aefab3c0da0d2c3beb0ed - Resource.h - - - - operator<< - cpp - ffunc - libdap::Resource - - classlibdap_1_1Resource.html - a1a74855fb08b3d9c092487e988d273b0 - Resource.h - - - - libdap::Response - c - cl - libdap::Response - - classlibdap_1_1Response.html - Response.h - - - - Response - cpp - instm - libdap::Response - - classlibdap_1_1Response.html - a00c3edee81b107d3cc9e52952ce4e3e5 - Response.h - - - - ~Response - cpp - instm - libdap::Response - - classlibdap_1_1Response.html - ad49cacc9050fc52103f285f79b1a71c1 - Response.h - - - - libdap::ResponseTooBigErr - c - cl - libdap::ResponseTooBigErr - - classlibdap_1_1ResponseTooBigErr.html - ResponseTooBigErr.h - - - - get_error_code - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - aaca0caca09e939602cade604cbc9824f - Error.h - - - - get_error_message - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - ab24a61e4974aae62962a40f9975e674c - Error.h - - - - OK - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - acf3ab60821773bd8b62284750b02cfc0 - Is the Error object valid? - Error.h - - - - parse - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - ac705b3c1cfab1f7530d66a974eb0e8b6 - Parse an Error object. - Error.h - - - - print - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a552d711be27e6695854bd2b977a5cf31 - Error.h - - - - print - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a4c58ef196c2b247bd37529bb7ad6a666 - Error.h - - - - set_error_code - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a47c0f4b6a38d8ca075d1056076d2845d - Error.h - - - - set_error_message - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a3ca90d33bf1c95529c9eefdfe8646e34 - Error.h - - - - what - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - accc5eeb469c8c18ec16dbf7fefe3cc41 - The pointer is valid only for the lifetime of the Error instance. jhrg 9/22/20. - Error.h - - - - libdap::rvalue - c - cl - libdap::rvalue - - classlibdap_1_1rvalue.html - RValue.h - - - - bvalue - cpp - instm - libdap::rvalue - - classlibdap_1_1rvalue.html - a5ec1d2d66b162aa9ad82b658e70ce7de - RValue.h - - - - libdap::Sequence - c - cl - libdap::Sequence - - classlibdap_1_1Sequence.html - Holds a sequence. - Sequence.h - - - - add_var - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a2585c69c45b9ebec9c63993248eb5b4b - Constructor.h - - - - add_var_nocopy - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - abdb52463a46e1b10040f245d4ed7642b - Constructor.h - - - - buf2val - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ac4dc7e8099322b5b403a7d0ae9079006 - Reads the class data. - Constructor.h - - - - check_semantics - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - afe010638fd2ca9aab00dd1c21a9e4825 - Compare an object&#39;s current state with the semantics of its type. - Constructor.h - - - - clear_local_data - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - ab881dcea1786d36ad3a4ef579ace5805 - Sequence.h - - - - compute_checksum - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a287ab9a4deb81a8ced6d8432be647925 - include the data for this variable in the checksum DAP4 includes a checksum with every data response... - Constructor.h - - - - d4_ops - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a512a356f31ed6c4c1a368da0b054408a - Evaluator a relop for DAP4. - BaseType.h - - - - dataset - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a47521ce321a17e6ce217870cb6a1a7aa - Returns the name of the dataset used to create this instance. - BaseType.h - - - - del_var - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - af38d3785c4a7cd0063cbb9fc5943333c - Constructor.h - - - - deserialize - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a6f4253236d69c3c0ef64343136b5039b - Constructor.h - - - - deserialize - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - adf58298f58caf27d467ad41b7ecbb6ec - Deserialize (read from the network) the entire Sequence. - Sequence.h - - - - dump - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - a50ff267e44d2df91722116e2acbfd1cb - dumps information about this object - Sequence.h - - - - element_count - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a1c2eecff00fa7e3af175c711d00fb86e - Count the members of constructor types. - Constructor.h - - - - FQN - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - afa6c06dab830b4e089641b44fea8293c - Constructor.h - - - - get_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1fcd9537c67e3bf88964b2656ff5bac1 - BaseType.h - - - - get_ending_row_number - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - ae1489f3bc8bb269e51831add438aa392 - Get the ending row number. - Sequence.h - - - - get_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a3459cdaa239c33ce111ef360d8dc3017 - BaseType.h - - - - get_row_stride - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - ae1461dd491795a2d6b0bd3112aca8550 - Get the row stride. - Sequence.h - - - - get_starting_row_number - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - ad15a2b640e4bee850577ca9500ad31c3 - Get the starting row number. - Sequence.h - - - - get_unsent_data - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - ac95128bf22d4556564e27cc3d6f51222 - Get the unsent data property. - Sequence.h - - - - get_var_index - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ac2b4b28ed9d6f435129aa599ab809799 - Constructor.h - - - - get_vars_iter - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a1e6d8224e04d75e3d2a21263957cd42f - Constructor.h - - - - intern_data - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a822a036364c56df5288a55670f51197e - Read data into this variable. - Constructor.h - - - - intern_data - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - aaa428c1a32fea386549399dd19b756ac - Sequence.h - - - - is_constructor_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8b8490e0047c6da52945699a132008ea - Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable... - BaseType.h - - - - is_dap2_only_type - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - ab8d629ae2ec9c85add8f181bc05f2269 - Sequence.h - - - - is_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - Is this variable part of the current selection? - BaseType.h - - - - is_linear - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - aae52bdb038d59fbce4f8f6128dfc4559 - Check to see whether this variable can be printed simply. - Sequence.h - - - - is_simple_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aae57e5b270b3a015d40c8db10b9b5549 - Returns true if the instance is a numeric, string or URL type variable. - BaseType.h - - - - is_vector_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a7107c76dbcab71015141142383b6d022 - Returns true if the instance is a vector (i.e., array) type variable. - BaseType.h - - - - length - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - ad8e2d23c39b11886e10d0a5d0ae37e5f - Sequence.h - - - - name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a24c5d67823b3cff7f4245a993072a142 - Returns the name of the class instance. - BaseType.h - - - - ops - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8a0000be2a244e3e07abda3020af8800 - Evaluate relational operators. - BaseType.h - - - - print_dap4 - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a0f130e129b06773a9f3c94e3b492bb5c - Constructor.h - - - - print_decl - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ab7fb094be8da2a9f80f6d3b85e452934 - Print an ASCII representation of the variable structure. - Constructor.h - - - - print_decl - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a6c2c4d7cbe1d6239c037272ec865f80b - Print an ASCII representation of the variable structure. - Constructor.h - - - - print_val - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - a675995a38339e5139b80a4faa1a46824 - Prints the value of the variable. - Sequence.h - - - - print_val - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - ade8d2f9a5c73eafeb180fb3782a0a199 - Prints the value of the variable. - Sequence.h - - - - print_xml - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a32de0413045173aa8803f540a6cea39b - Constructor.h - - - - print_xml - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a7bbe6beabd94f576140e132e7a1017ff - Constructor.h - - - - print_xml_writer - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ab775a5e7e63757ac961b43800a95635f - Constructor.h - - - - ptr_duplicate - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - aacf58704fe079b65130800589e59fa9e - Sequence.h - - - - read - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ad0af40e2565972fa44985d173370c264 - simple implementation of read that iterates through vars and calls read on them - Constructor.h - - - - read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a38ff819a432217c55db2e9071928d20c - Has this variable been read? - BaseType.h - - - - read_row - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - a62d79555aa03b0a862314ccfdad090f8 - Sequence.h - - - - reset_row_number - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - ad555ad129354768a042f4e94f36f299a - Rest the row number counter. - Sequence.h - - - - reset_row_number - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - a64ff6191d320ded37975e20e4a45a742 - A recursive version of reset_row_number() - Sequence.h - - - - row_value - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - af034547151c98b59dee6d2d6cb1a954b - Get a whole row from the sequence. - Sequence.h - - - - send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a980c0013817836aa77ef74aeec7fb192 - Should this variable be sent? - BaseType.h - - - - Sequence - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - a92b97c9d8c1431fd7e619186a557d875 - The Sequence constructor. - Sequence.h - - - - Sequence - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - ab5a772197dc7c62037cca19b27bacba6 - The Sequence server-side constructor. - Sequence.h - - - - Sequence - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - a26c7416d7314d45aee035d09ef3db49c - The Sequence copy constructor. - Sequence.h - - - - serialize - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ab868fe97d5075b702bd084c2e9540913 - Serialize a Constructor. - Constructor.h - - - - serialize - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - ad89a496720935e04e472a75ce7804065 - Sequence.h - - - - set_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a572a1d76a75981abac83a4241e90c0fa - BaseType.h - - - - set_in_selection - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ac30becb1ffe7d2cd4cbcd24fc216c9a3 - Set the in_selection property. - Constructor.h - - - - set_leaf_sequence - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - a630ae5ad80cc4ddbd1c07e7cae0eec6d - Mark the Sequence which holds the leaf elements. - Sequence.h - - - - set_length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4fe343c1eeb6fb1d61ab030433651d90 - Set the number of elements for this variable. - BaseType.h - - - - set_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a86504564f45a3e6748c6f1cc0ff4e9fa - Sets the name of the class instance. - BaseType.h - - - - set_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - BaseType.h - - - - set_read_p - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - af52e60d8589eed1a18a14e9c6a57db65 - Sets the value of the read_p property. - Constructor.h - - - - set_row_number_constraint - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - af182686c5766d73e5d896eecaadb96bc - Sequence.h - - - - set_send_p - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - aafbcf9bef6719fe60ac707e02956e09d - Constructor.h - - - - set_synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a595cb4059cff24f801a1b6da79bd2f9e - BaseType.h - - - - set_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af74f8d1ef57c9fcca46f620f75d175a3 - Sets the type of the class instance. - BaseType.h - - - - set_unsent_data - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - ad7820138d2f1c9c8ff7dfa632dff60c2 - Set the unsent data property. - Sequence.h - - - - set_value - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - aa581124c5883b3c020a843ddc5566192 - Sequence.h - - - - synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae64e677da27249473cdba0b60cdbb90a - BaseType.h - - - - toString - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - a24016ba1d3b9b755699959abf0219ff1 - Sequence.h - - - - transfer_attributes - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a799d2bd8ef9505b1d493d8cd73b72746 - Constructor.h - - - - transform_to_dap2 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - affec8a11e9cc035d4b1e8fb9a87b2072 - DAP4 to DAP2 transform. - BaseType.h - - - - transform_to_dap4 - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - a11072c45623476f3fd0745cdd519b376 - Sequence.h - - - - type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - Returns the type of the class instance. - BaseType.h - - - - type_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a18a42c8ec35cb5b15cd651a4152f8a2c - Returns the type of the class instance as a string. - BaseType.h - - - - val2buf - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ac742b1bf93889e541128b1d123821ee6 - Loads class data. - Constructor.h - - - - value - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - a1efebfab9247785a056d085b1f3aab41 - Sequence.h - - - - value_ref - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - a954e428e0d3532246c0411e2b3bd30e8 - Sequence.h - - - - var - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a36a7412da7b5257d7666add726fea1a6 - btp_stack no longer needed; use back pointers (BaseType::get_parent()) - Constructor.h - - - - var - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a68f1779dc328f890062722d90fad084a - Constructor.h - - - - var_begin - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - adeafe3d6c82d07b456a598a7b446c2c6 - Constructor.h - - - - var_end - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a936b38c7c35ffb4fe17c5b8e85bdaaa2 - Constructor.h - - - - var_rbegin - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - aa025cf546ca35250454653c1ec684d91 - Constructor.h - - - - var_rend - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - aede7cf5889e101db1ea8f22c3a84a5d3 - Constructor.h - - - - var_value - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - ab17e4f1aedda0b734442001b5c81f269 - Get the BaseType pointer to the named variable of a given row. - Sequence.h - - - - var_value - cpp - instm - libdap::Sequence - - classlibdap_1_1Sequence.html - a75cd422251a9c49294e25f2971164638 - Get the BaseType pointer to the $i^{th}$ variable of row. - Sequence.h - - - - width - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a0b1e3ae7195f95c42ca98f42826a1ff5 - Constructor.h - - - - attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a97452f06d2188eb838399a709246b5e9 - BaseType.h - - - - m_duplicate - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a0c55b826c8c5dfe7a454dc670e859a41 - Perform a deep copy. - BaseType.h - - - - libdap::ServerFunction - c - cl - libdap::ServerFunction - - classlibdap_1_1ServerFunction.html - - - - canOperateOn - cpp - instm - libdap::ServerFunction - - classlibdap_1_1ServerFunction.html - a37deabffd71441809f9e7839bed90414 - ServerFunction.h - - - - canOperateOn - cpp - instm - libdap::ServerFunction - - classlibdap_1_1ServerFunction.html - a8a3921a3d3a0ef39e1ee6bdd6011ccaf - ServerFunction.h - - - - setFunction - cpp - instm - libdap::ServerFunction - - classlibdap_1_1ServerFunction.html - a3235a206a2933b96360c00d5b021a1e5 - ServerFunction.h - - - - libdap::ServerFunctionsList - c - cl - libdap::ServerFunctionsList - - classlibdap_1_1ServerFunctionsList.html - - - - add_function - cpp - instm - libdap::ServerFunctionsList - - classlibdap_1_1ServerFunctionsList.html - a6541bd8eebd85b0faada8ce3d2f9d08a - Adds the passed ServerFunction pointer to the list of ServerFunctions. - ServerFunctionsList.h - - - - begin - cpp - instm - libdap::ServerFunctionsList - - classlibdap_1_1ServerFunctionsList.html - a6a76bd67fbdda8c038f0c2000f24eb6c - Returns an iterator pointing to the first key pair in the ServerFunctionList. - ServerFunctionsList.h - - - - end - cpp - instm - libdap::ServerFunctionsList - - classlibdap_1_1ServerFunctionsList.html - a95627422406ad0ab08fee27d8c274d56 - Returns an iterator pointing to the last key pair in the ServerFunctionList. - ServerFunctionsList.h - - - - find_function - cpp - instm - libdap::ServerFunctionsList - - classlibdap_1_1ServerFunctionsList.html - a12a23d0582bf7b53b65c5d95ed4ce601 - Find a boolean function with a given name in the function list. - ServerFunctionsList.h - - - - find_function - cpp - instm - libdap::ServerFunctionsList - - classlibdap_1_1ServerFunctionsList.html - a65101c8eb7d0dead6cc781287a52f2aa - Find a BaseType function with a given name in the function list. - ServerFunctionsList.h - - - - find_function - cpp - instm - libdap::ServerFunctionsList - - classlibdap_1_1ServerFunctionsList.html - a63e5f6a54a21a0da686306f996414aa2 - Find a projection function with a given name in the function list. - ServerFunctionsList.h - - - - find_function - cpp - instm - libdap::ServerFunctionsList - - classlibdap_1_1ServerFunctionsList.html - a895bc1627d93588bd1f8f9eac5eb7b28 - ServerFunctionsList.h - - - - getFunction - cpp - instm - libdap::ServerFunctionsList - - classlibdap_1_1ServerFunctionsList.html - a9b5a854642a7707c70e84dc88c67d2f8 - Returns the ServerFunction pointed to by the passed iterator. - ServerFunctionsList.h - - - - libdap::SignalHandler - c - cl - libdap::SignalHandler - - classlibdap_1_1SignalHandler.html - SignalHandler.h - - - - register_handler - cpp - instm - libdap::SignalHandler - - classlibdap_1_1SignalHandler.html - a1188177d392bdc1db6cf4450132c6d9f - SignalHandler.h - - - - remove_handler - cpp - instm - libdap::SignalHandler - - classlibdap_1_1SignalHandler.html - ac9a9ddb318ad6b372604a4c8d58481de - SignalHandler.h - - - - instance - cpp - clm - libdap::SignalHandler - - classlibdap_1_1SignalHandler.html - a930f996d318cadd5f0875da0784cb32a - SignalHandler.h - - - - libdap::SignalHandlerRegisteredErr - c - cl - libdap::SignalHandlerRegisteredErr - - classlibdap_1_1SignalHandlerRegisteredErr.html - SignalHandlerRegisteredErr.h - - - - get_error_code - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - aaca0caca09e939602cade604cbc9824f - Error.h - - - - get_error_message - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - ab24a61e4974aae62962a40f9975e674c - Error.h - - - - OK - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - acf3ab60821773bd8b62284750b02cfc0 - Is the Error object valid? - Error.h - - - - parse - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - ac705b3c1cfab1f7530d66a974eb0e8b6 - Parse an Error object. - Error.h - - - - print - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a552d711be27e6695854bd2b977a5cf31 - Error.h - - - - print - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a4c58ef196c2b247bd37529bb7ad6a666 - Error.h - - - - set_error_code - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a47c0f4b6a38d8ca075d1056076d2845d - Error.h - - - - set_error_message - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - a3ca90d33bf1c95529c9eefdfe8646e34 - Error.h - - - - what - cpp - instm - libdap::Error - - classlibdap_1_1Error.html - accc5eeb469c8c18ec16dbf7fefe3cc41 - The pointer is valid only for the lifetime of the Error instance. jhrg 9/22/20. - Error.h - - - - libdap::StdinResponse - c - cl - libdap::StdinResponse - - classlibdap_1_1StdinResponse.html - Encapsulate a response read from stdin. - StdinResponse.h - - - - StdinResponse - cpp - instm - libdap::StdinResponse - - classlibdap_1_1StdinResponse.html - a493426389b258aca4595f6090ee5a8bb - Initialize with standard input. - StdinResponse.h - - - - StdinResponse - cpp - instm - libdap::StdinResponse - - classlibdap_1_1StdinResponse.html - abba5fdeb0152e8b6c3affa48a2f19577 - Build a instance using a C++ istream. - StdinResponse.h - - - - ~StdinResponse - cpp - instm - libdap::StdinResponse - - classlibdap_1_1StdinResponse.html - af21584956ced23448dcb88da165258e7 - StdinResponse.h - - - - libdap::Str - c - cl - libdap::Str - - classlibdap_1_1Str.html - Holds character string data. - Str.h - - - - add_var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adca3c2621c4a509537c18362005d7f7f - Add a variable. - BaseType.h - - - - buf2val - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - aa63cf0376fe71ceb030b48e7fdbad863 - Str.h - - - - check_semantics - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aec503abec2fd3090e7738c0a575491f8 - Compare an object&#39;s current state with the semantics of its type. - BaseType.h - - - - clear_local_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aaddb97a4efbe035f41deaf03c6e8683f - BaseType.h - - - - compute_checksum - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - ae98348772288b417561f39b445f48c9e - include the data for this variable in the checksum DAP4 includes a checksum with every data response... - Str.h - - - - d4_ops - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - a051efecca32b2679bd0b1700453db617 - Str.h - - - - dataset - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a47521ce321a17e6ce217870cb6a1a7aa - Returns the name of the dataset used to create this instance. - BaseType.h - - - - deserialize - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - a2bafe2f1851b3a4cac6089b0e2282010 - Receive data from the net. - Str.h - - - - deserialize - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - afdeab29d40e99baa3d0def2f8f6d8b2e - Str.h - - - - dump - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - a9bae029c10a3824cd95d7e3fb2c11911 - dumps information about this object - Str.h - - - - element_count - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5c2235737737b482bfa7536b8aeab810 - Count the members of constructor types. - BaseType.h - - - - FQN - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - BaseType.h - - - - get_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1fcd9537c67e3bf88964b2656ff5bac1 - BaseType.h - - - - get_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a3459cdaa239c33ce111ef360d8dc3017 - BaseType.h - - - - is_constructor_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8b8490e0047c6da52945699a132008ea - Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable... - BaseType.h - - - - is_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - Is this variable part of the current selection? - BaseType.h - - - - is_simple_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aae57e5b270b3a015d40c8db10b9b5549 - Returns true if the instance is a numeric, string or URL type variable. - BaseType.h - - - - is_vector_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a7107c76dbcab71015141142383b6d022 - Returns true if the instance is a vector (i.e., array) type variable. - BaseType.h - - - - length - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - a6159e681dd78ac9d7660df1a734fd9d4 - How many elements are in this variable. - Str.h - - - - name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a24c5d67823b3cff7f4245a993072a142 - Returns the name of the class instance. - BaseType.h - - - - ops - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - a5b74994fb52ceb3248c558015c4520a5 - Evaluate relational operators. - Str.h - - - - print_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afcddbe441380b95c894510c02980b163 - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2d799fad93255d7f2b803562ae7a5784 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afd744b0ddeb04e7b173c9e83423ec572 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_val - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - a3fd0df896926273b491fa8b3dc040b20 - Prints the value of the variable. - Str.h - - - - print_val - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - a7984e46de9b21ef554b156dec40cc559 - Prints the value of the variable. - Str.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a825820edee179550cfde3dfd4d274f2a - BaseType.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8bd2c7682edd48c64b210bdf247bdef7 - BaseType.h - - - - print_xml_writer - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a11554ff931528b243e9af8173d205b44 - BaseType.h - - - - ptr_duplicate - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - a4e92b00a6a3a8056c80b2f4467646f42 - Str.h - - - - read - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1da003c53f2e663223f603ab3fbd7c8e - Read data into a local buffer. - BaseType.h - - - - read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a38ff819a432217c55db2e9071928d20c - Has this variable been read? - BaseType.h - - - - send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a980c0013817836aa77ef74aeec7fb192 - Should this variable be sent? - BaseType.h - - - - serialize - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - a1f71320548c6cf29b85d66de5998144d - Move data to the net, then remove them from the object. - Str.h - - - - serialize - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - af341f5722961ea40812d1fde478d1f79 - Serialize an Int8. - Str.h - - - - set_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a572a1d76a75981abac83a4241e90c0fa - BaseType.h - - - - set_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2bc036248cdaf1affac464170f32ad30 - BaseType.h - - - - set_length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4fe343c1eeb6fb1d61ab030433651d90 - Set the number of elements for this variable. - BaseType.h - - - - set_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a86504564f45a3e6748c6f1cc0ff4e9fa - Sets the name of the class instance. - BaseType.h - - - - set_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - BaseType.h - - - - set_read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4533905a450d2a7af32e7d5acd557676 - Sets the value of the read_p property. - BaseType.h - - - - set_send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aba7b27635c95b74536de18393133628e - BaseType.h - - - - set_synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a595cb4059cff24f801a1b6da79bd2f9e - BaseType.h - - - - set_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af74f8d1ef57c9fcca46f620f75d175a3 - Sets the type of the class instance. - BaseType.h - - - - set_value - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - ac4083a612e46a9ef2d1cddc2d40a955f - Str.h - - - - Str - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - a23a93ec403dc5cbb5264cdf47ea01c44 - Str.h - - - - Str - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - a37e6b66c284c38052eb0bdebec18bba6 - Str.h - - - - synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae64e677da27249473cdba0b60cdbb90a - BaseType.h - - - - toString - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a701eb3361f5b5628329ece019cd34519 - BaseType.h - - - - transfer_attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - add8e836c622042a339152a6c31e5bdfb - BaseType.h - - - - transform_to_dap2 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - affec8a11e9cc035d4b1e8fb9a87b2072 - DAP4 to DAP2 transform. - BaseType.h - - - - transform_to_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adb03e2e1e40c3c888577c4666831a949 - DAP2 to DAP4 transform. - BaseType.h - - - - type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - Returns the type of the class instance. - BaseType.h - - - - type_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a18a42c8ec35cb5b15cd651a4152f8a2c - Returns the type of the class instance as a string. - BaseType.h - - - - val2buf - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - add396308f45a14355b60c411ed33bf7a - Str.h - - - - value - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - a6a184f229c17879291dba8f7477db677 - Str.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4dc4fac1bb6083f6db645f37bfd59b85 - Returns a pointer to a member of a constructor class. - BaseType.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adecfc442b5927c79933c7f71cfe03fd2 - BaseType.h - - - - width - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - a636ebae6c75fb6dc5d929dc6db6f9558 - How many bytes does this variable use Return the number of bytes of storage this variable uses... - Str.h - - - - attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a97452f06d2188eb838399a709246b5e9 - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a722d33783aa0272d339b0301a4f77e59 - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1956e6ea90a745516f5372c859173433 - Read data into this variable. - BaseType.h - - - - m_duplicate - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a0c55b826c8c5dfe7a454dc670e859a41 - Perform a deep copy. - BaseType.h - - - - libdap::Structure - c - cl - libdap::Structure - - classlibdap_1_1Structure.html - Holds a structure (aggregate) type. - Structure.h - - - - add_var - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a2585c69c45b9ebec9c63993248eb5b4b - Constructor.h - - - - add_var_nocopy - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - abdb52463a46e1b10040f245d4ed7642b - Constructor.h - - - - buf2val - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ac4dc7e8099322b5b403a7d0ae9079006 - Reads the class data. - Constructor.h - - - - check_semantics - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - afe010638fd2ca9aab00dd1c21a9e4825 - Compare an object&#39;s current state with the semantics of its type. - Constructor.h - - - - clear_local_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aaddb97a4efbe035f41deaf03c6e8683f - BaseType.h - - - - compute_checksum - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a287ab9a4deb81a8ced6d8432be647925 - include the data for this variable in the checksum DAP4 includes a checksum with every data response... - Constructor.h - - - - d4_ops - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a512a356f31ed6c4c1a368da0b054408a - Evaluator a relop for DAP4. - BaseType.h - - - - dataset - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a47521ce321a17e6ce217870cb6a1a7aa - Returns the name of the dataset used to create this instance. - BaseType.h - - - - del_var - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - af38d3785c4a7cd0063cbb9fc5943333c - Constructor.h - - - - deserialize - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a63763d2bae05463b100e823fb461a784 - Receive data from the net. - Constructor.h - - - - deserialize - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a6f4253236d69c3c0ef64343136b5039b - Constructor.h - - - - dump - cpp - instm - libdap::Structure - - classlibdap_1_1Structure.html - a5c51539ddf185011301d04e1c927538a - dumps information about this object - Structure.h - - - - element_count - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a1c2eecff00fa7e3af175c711d00fb86e - Count the members of constructor types. - Constructor.h - - - - FQN - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - afa6c06dab830b4e089641b44fea8293c - Constructor.h - - - - get_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1fcd9537c67e3bf88964b2656ff5bac1 - BaseType.h - - - - get_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a3459cdaa239c33ce111ef360d8dc3017 - BaseType.h - - - - get_var_index - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ac2b4b28ed9d6f435129aa599ab809799 - Constructor.h - - - - get_vars_iter - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a1e6d8224e04d75e3d2a21263957cd42f - Constructor.h - - - - intern_data - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a065056826ef9c6fb2d08463af9e15a34 - Constructor.h - - - - intern_data - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a822a036364c56df5288a55670f51197e - Read data into this variable. - Constructor.h - - - - is_constructor_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8b8490e0047c6da52945699a132008ea - Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable... - BaseType.h - - - - is_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - Is this variable part of the current selection? - BaseType.h - - - - is_linear - cpp - instm - libdap::Structure - - classlibdap_1_1Structure.html - ac4687a4edb60d00fd781c82de40d53a4 - Check to see whether this variable can be printed simply. - Structure.h - - - - is_simple_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aae57e5b270b3a015d40c8db10b9b5549 - Returns true if the instance is a numeric, string or URL type variable. - BaseType.h - - - - is_vector_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a7107c76dbcab71015141142383b6d022 - Returns true if the instance is a vector (i.e., array) type variable. - BaseType.h - - - - length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aadcda7a659157bc6a832d8a5fb775b3f - How many elements are in this variable. - BaseType.h - - - - name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a24c5d67823b3cff7f4245a993072a142 - Returns the name of the class instance. - BaseType.h - - - - ops - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8a0000be2a244e3e07abda3020af8800 - Evaluate relational operators. - BaseType.h - - - - print_dap4 - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a0f130e129b06773a9f3c94e3b492bb5c - Constructor.h - - - - print_decl - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ab7fb094be8da2a9f80f6d3b85e452934 - Print an ASCII representation of the variable structure. - Constructor.h - - - - print_decl - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a6c2c4d7cbe1d6239c037272ec865f80b - Print an ASCII representation of the variable structure. - Constructor.h - - - - print_val - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - aa7f9cce8ca18461af332aab61123bf23 - Prints the value of the variable. - Constructor.h - - - - print_val - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - af50641301757ed26eb75fb2d29eae7ee - Prints the value of the variable. - Constructor.h - - - - print_xml - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a32de0413045173aa8803f540a6cea39b - Constructor.h - - - - print_xml - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a7bbe6beabd94f576140e132e7a1017ff - Constructor.h - - - - print_xml_writer - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ab775a5e7e63757ac961b43800a95635f - Constructor.h - - - - ptr_duplicate - cpp - instm - libdap::Structure - - classlibdap_1_1Structure.html - ae20b384171ecded1940c3cb9780eda7e - Structure.h - - - - read - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ad0af40e2565972fa44985d173370c264 - simple implementation of read that iterates through vars and calls read on them - Constructor.h - - - - read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a38ff819a432217c55db2e9071928d20c - Has this variable been read? - BaseType.h - - - - send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a980c0013817836aa77ef74aeec7fb192 - Should this variable be sent? - BaseType.h - - - - serialize - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a64268840654a0b37a15ccc601dbcfd33 - Move data to the net, then remove them from the object. - Constructor.h - - - - serialize - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ab868fe97d5075b702bd084c2e9540913 - Serialize a Constructor. - Constructor.h - - - - set_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a572a1d76a75981abac83a4241e90c0fa - BaseType.h - - - - set_in_selection - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ac30becb1ffe7d2cd4cbcd24fc216c9a3 - Set the in_selection property. - Constructor.h - - - - set_leaf_sequence - cpp - instm - libdap::Structure - - classlibdap_1_1Structure.html - a69851299078fd4bfc39d722c8cdc3cb9 - Traverse Structure, set Sequence leaf nodes. - Structure.h - - - - set_length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4fe343c1eeb6fb1d61ab030433651d90 - Set the number of elements for this variable. - BaseType.h - - - - set_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a86504564f45a3e6748c6f1cc0ff4e9fa - Sets the name of the class instance. - BaseType.h - - - - set_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - BaseType.h - - - - set_read_p - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - af52e60d8589eed1a18a14e9c6a57db65 - Sets the value of the read_p property. - Constructor.h - - - - set_send_p - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - aafbcf9bef6719fe60ac707e02956e09d - Constructor.h - - - - set_synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a595cb4059cff24f801a1b6da79bd2f9e - BaseType.h - - - - set_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af74f8d1ef57c9fcca46f620f75d175a3 - Sets the type of the class instance. - BaseType.h - - - - Structure - cpp - instm - libdap::Structure - - classlibdap_1_1Structure.html - a4187f25219b1fc7ec93e761795047e0a - Structure.h - - - - Structure - cpp - instm - libdap::Structure - - classlibdap_1_1Structure.html - aa48289fa5979febe73ae74a90f2d246b - Structure.h - - - - Structure - cpp - instm - libdap::Structure - - classlibdap_1_1Structure.html - a469f0fe441ac54689db27d7527d28748 - Structure.h - - - - synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae64e677da27249473cdba0b60cdbb90a - BaseType.h - - - - toString - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a701eb3361f5b5628329ece019cd34519 - BaseType.h - - - - transfer_attributes - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a799d2bd8ef9505b1d493d8cd73b72746 - Constructor.h - - - - transform_to_dap2 - cpp - instm - libdap::Structure - - classlibdap_1_1Structure.html - a9e00a214b9076b4849e2b9bc2605af21 - DAP4 to DAP2 transform. - Structure.h - - - - transform_to_dap4 - cpp - instm - libdap::Structure - - classlibdap_1_1Structure.html - af687033917e49b86356f23ead6353e6f - Structure.h - - - - type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - Returns the type of the class instance. - BaseType.h - - - - type_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a18a42c8ec35cb5b15cd651a4152f8a2c - Returns the type of the class instance as a string. - BaseType.h - - - - val2buf - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - ac742b1bf93889e541128b1d123821ee6 - Loads class data. - Constructor.h - - - - var - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a36a7412da7b5257d7666add726fea1a6 - btp_stack no longer needed; use back pointers (BaseType::get_parent()) - Constructor.h - - - - var - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a68f1779dc328f890062722d90fad084a - Constructor.h - - - - var_begin - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - adeafe3d6c82d07b456a598a7b446c2c6 - Constructor.h - - - - var_end - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a936b38c7c35ffb4fe17c5b8e85bdaaa2 - Constructor.h - - - - var_rbegin - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - aa025cf546ca35250454653c1ec684d91 - Constructor.h - - - - var_rend - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - aede7cf5889e101db1ea8f22c3a84a5d3 - Constructor.h - - - - width - cpp - instm - libdap::Constructor - - classlibdap_1_1Constructor.html - a0b1e3ae7195f95c42ca98f42826a1ff5 - Constructor.h - - - - attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a97452f06d2188eb838399a709246b5e9 - BaseType.h - - - - m_duplicate - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a0c55b826c8c5dfe7a454dc670e859a41 - Perform a deep copy. - BaseType.h - - - - libdap::UInt16 - c - cl - libdap::UInt16 - - classlibdap_1_1UInt16.html - Holds an unsigned 16-bit integer. - UInt16.h - - - - add_var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adca3c2621c4a509537c18362005d7f7f - Add a variable. - BaseType.h - - - - buf2val - cpp - instm - libdap::UInt16 - - classlibdap_1_1UInt16.html - a80b1b42ac738b62de9a8d4d0b1c2d50c - Reads the class data. - UInt16.h - - - - check_semantics - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aec503abec2fd3090e7738c0a575491f8 - Compare an object&#39;s current state with the semantics of its type. - BaseType.h - - - - clear_local_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aaddb97a4efbe035f41deaf03c6e8683f - BaseType.h - - - - compute_checksum - cpp - instm - libdap::UInt16 - - classlibdap_1_1UInt16.html - a019f53455cc1e502103dc1e4f2b1ba22 - include the data for this variable in the checksum DAP4 includes a checksum with every data response... - UInt16.h - - - - d4_ops - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a512a356f31ed6c4c1a368da0b054408a - Evaluator a relop for DAP4. - BaseType.h - - - - dataset - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a47521ce321a17e6ce217870cb6a1a7aa - Returns the name of the dataset used to create this instance. - BaseType.h - - - - deserialize - cpp - instm - libdap::UInt16 - - classlibdap_1_1UInt16.html - aa2291137d78a57a433db3b6ab2f31d1b - Receive data from the net. - UInt16.h - - - - deserialize - cpp - instm - libdap::UInt16 - - classlibdap_1_1UInt16.html - ac647da7d972e876ebd5e9855a33deb13 - UInt16.h - - - - dump - cpp - instm - libdap::UInt16 - - classlibdap_1_1UInt16.html - ad9f239f1e7b1ec47d67777fd1592ede8 - dumps information about this object - UInt16.h - - - - element_count - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5c2235737737b482bfa7536b8aeab810 - Count the members of constructor types. - BaseType.h - - - - FQN - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - BaseType.h - - - - get_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1fcd9537c67e3bf88964b2656ff5bac1 - BaseType.h - - - - get_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a3459cdaa239c33ce111ef360d8dc3017 - BaseType.h - - - - is_constructor_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8b8490e0047c6da52945699a132008ea - Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable... - BaseType.h - - - - is_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - Is this variable part of the current selection? - BaseType.h - - - - is_simple_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aae57e5b270b3a015d40c8db10b9b5549 - Returns true if the instance is a numeric, string or URL type variable. - BaseType.h - - - - is_vector_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a7107c76dbcab71015141142383b6d022 - Returns true if the instance is a vector (i.e., array) type variable. - BaseType.h - - - - length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aadcda7a659157bc6a832d8a5fb775b3f - How many elements are in this variable. - BaseType.h - - - - name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a24c5d67823b3cff7f4245a993072a142 - Returns the name of the class instance. - BaseType.h - - - - ops - cpp - instm - libdap::UInt16 - - classlibdap_1_1UInt16.html - a0f82046f304407cb218bfbe88e89518b - Evaluate relational operators. - UInt16.h - - - - print_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afcddbe441380b95c894510c02980b163 - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2d799fad93255d7f2b803562ae7a5784 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afd744b0ddeb04e7b173c9e83423ec572 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_val - cpp - instm - libdap::UInt16 - - classlibdap_1_1UInt16.html - a482e6f61f36b497517830b68023ac803 - Prints the value of the variable. - UInt16.h - - - - print_val - cpp - instm - libdap::UInt16 - - classlibdap_1_1UInt16.html - ac814682caeef62518ae7c7cddceeb45a - Prints the value of the variable. - UInt16.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a825820edee179550cfde3dfd4d274f2a - BaseType.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8bd2c7682edd48c64b210bdf247bdef7 - BaseType.h - - - - print_xml_writer - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a11554ff931528b243e9af8173d205b44 - BaseType.h - - - - ptr_duplicate - cpp - instm - libdap::UInt16 - - classlibdap_1_1UInt16.html - a9522d2413078b922c4e499545f623021 - UInt16.h - - - - read - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1da003c53f2e663223f603ab3fbd7c8e - Read data into a local buffer. - BaseType.h - - - - read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a38ff819a432217c55db2e9071928d20c - Has this variable been read? - BaseType.h - - - - send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a980c0013817836aa77ef74aeec7fb192 - Should this variable be sent? - BaseType.h - - - - serialize - cpp - instm - libdap::UInt16 - - classlibdap_1_1UInt16.html - a1db616a4ec9989c3cee3d18c30bf4f27 - Move data to the net, then remove them from the object. - UInt16.h - - - - serialize - cpp - instm - libdap::UInt16 - - classlibdap_1_1UInt16.html - aa7772b37ff53b02e70c146da59c9c4c7 - Serialize an Int8. - UInt16.h - - - - set_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a572a1d76a75981abac83a4241e90c0fa - BaseType.h - - - - set_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2bc036248cdaf1affac464170f32ad30 - BaseType.h - - - - set_length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4fe343c1eeb6fb1d61ab030433651d90 - Set the number of elements for this variable. - BaseType.h - - - - set_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a86504564f45a3e6748c6f1cc0ff4e9fa - Sets the name of the class instance. - BaseType.h - - - - set_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - BaseType.h - - - - set_read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4533905a450d2a7af32e7d5acd557676 - Sets the value of the read_p property. - BaseType.h - - - - set_send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aba7b27635c95b74536de18393133628e - BaseType.h - - - - set_synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a595cb4059cff24f801a1b6da79bd2f9e - BaseType.h - - - - set_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af74f8d1ef57c9fcca46f620f75d175a3 - Sets the type of the class instance. - BaseType.h - - - - synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae64e677da27249473cdba0b60cdbb90a - BaseType.h - - - - toString - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a701eb3361f5b5628329ece019cd34519 - BaseType.h - - - - transfer_attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - add8e836c622042a339152a6c31e5bdfb - BaseType.h - - - - transform_to_dap2 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - affec8a11e9cc035d4b1e8fb9a87b2072 - DAP4 to DAP2 transform. - BaseType.h - - - - transform_to_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adb03e2e1e40c3c888577c4666831a949 - DAP2 to DAP4 transform. - BaseType.h - - - - type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - Returns the type of the class instance. - BaseType.h - - - - type_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a18a42c8ec35cb5b15cd651a4152f8a2c - Returns the type of the class instance as a string. - BaseType.h - - - - UInt16 - cpp - instm - libdap::UInt16 - - classlibdap_1_1UInt16.html - ab4b8895483d15ab84eb4fda029089bc8 - UInt16.h - - - - UInt16 - cpp - instm - libdap::UInt16 - - classlibdap_1_1UInt16.html - a4481b161be1fad4e9c2ea3c1293d540b - UInt16.h - - - - val2buf - cpp - instm - libdap::UInt16 - - classlibdap_1_1UInt16.html - a0212ba69258238b711d8aef3174f3fb7 - Loads class data. - UInt16.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4dc4fac1bb6083f6db645f37bfd59b85 - Returns a pointer to a member of a constructor class. - BaseType.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adecfc442b5927c79933c7f71cfe03fd2 - BaseType.h - - - - width - cpp - instm - libdap::UInt16 - - classlibdap_1_1UInt16.html - a8545ca3b3a55da3eabc9b4d43e008e3e - How many bytes does this variable use Return the number of bytes of storage this variable uses... - UInt16.h - - - - attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a97452f06d2188eb838399a709246b5e9 - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a722d33783aa0272d339b0301a4f77e59 - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1956e6ea90a745516f5372c859173433 - Read data into this variable. - BaseType.h - - - - m_duplicate - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a0c55b826c8c5dfe7a454dc670e859a41 - Perform a deep copy. - BaseType.h - - - - libdap::UInt32 - c - cl - libdap::UInt32 - - classlibdap_1_1UInt32.html - Holds a 32-bit unsigned integer. - UInt32.h - - - - add_var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adca3c2621c4a509537c18362005d7f7f - Add a variable. - BaseType.h - - - - buf2val - cpp - instm - libdap::UInt32 - - classlibdap_1_1UInt32.html - a132425225a24d8a0d3b2242660533494 - Reads the class data. - UInt32.h - - - - check_semantics - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aec503abec2fd3090e7738c0a575491f8 - Compare an object&#39;s current state with the semantics of its type. - BaseType.h - - - - clear_local_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aaddb97a4efbe035f41deaf03c6e8683f - BaseType.h - - - - compute_checksum - cpp - instm - libdap::UInt32 - - classlibdap_1_1UInt32.html - a2dbfaff74220c15ec27b42310781a286 - include the data for this variable in the checksum DAP4 includes a checksum with every data response... - UInt32.h - - - - d4_ops - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a512a356f31ed6c4c1a368da0b054408a - Evaluator a relop for DAP4. - BaseType.h - - - - dataset - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a47521ce321a17e6ce217870cb6a1a7aa - Returns the name of the dataset used to create this instance. - BaseType.h - - - - deserialize - cpp - instm - libdap::UInt32 - - classlibdap_1_1UInt32.html - a1bf98390bea0fffe8a9b9f0d560f3b72 - Receive data from the net. - UInt32.h - - - - deserialize - cpp - instm - libdap::UInt32 - - classlibdap_1_1UInt32.html - a87953ef0a0ef20ecbbc9ec646a14d8b9 - UInt32.h - - - - dump - cpp - instm - libdap::UInt32 - - classlibdap_1_1UInt32.html - a2506c7fb8f214f635cabc0fabc6b8e62 - dumps information about this object - UInt32.h - - - - element_count - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5c2235737737b482bfa7536b8aeab810 - Count the members of constructor types. - BaseType.h - - - - FQN - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - BaseType.h - - - - get_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1fcd9537c67e3bf88964b2656ff5bac1 - BaseType.h - - - - get_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a3459cdaa239c33ce111ef360d8dc3017 - BaseType.h - - - - is_constructor_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8b8490e0047c6da52945699a132008ea - Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable... - BaseType.h - - - - is_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - Is this variable part of the current selection? - BaseType.h - - - - is_simple_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aae57e5b270b3a015d40c8db10b9b5549 - Returns true if the instance is a numeric, string or URL type variable. - BaseType.h - - - - is_vector_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a7107c76dbcab71015141142383b6d022 - Returns true if the instance is a vector (i.e., array) type variable. - BaseType.h - - - - length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aadcda7a659157bc6a832d8a5fb775b3f - How many elements are in this variable. - BaseType.h - - - - name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a24c5d67823b3cff7f4245a993072a142 - Returns the name of the class instance. - BaseType.h - - - - ops - cpp - instm - libdap::UInt32 - - classlibdap_1_1UInt32.html - a33a7ffcc50faa13ed94a48e7766ffd1e - Evaluate relational operators. - UInt32.h - - - - print_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afcddbe441380b95c894510c02980b163 - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2d799fad93255d7f2b803562ae7a5784 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afd744b0ddeb04e7b173c9e83423ec572 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_val - cpp - instm - libdap::UInt32 - - classlibdap_1_1UInt32.html - ae627cfc24d4d9dfaf34b538385f1712c - Prints the value of the variable. - UInt32.h - - - - print_val - cpp - instm - libdap::UInt32 - - classlibdap_1_1UInt32.html - a2f15a6d4c69db84e0dad12c42630b7e3 - Prints the value of the variable. - UInt32.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a825820edee179550cfde3dfd4d274f2a - BaseType.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8bd2c7682edd48c64b210bdf247bdef7 - BaseType.h - - - - print_xml_writer - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a11554ff931528b243e9af8173d205b44 - BaseType.h - - - - ptr_duplicate - cpp - instm - libdap::UInt32 - - classlibdap_1_1UInt32.html - ae3ea27e286caaf645c5d61cdf4d455f4 - UInt32.h - - - - read - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1da003c53f2e663223f603ab3fbd7c8e - Read data into a local buffer. - BaseType.h - - - - read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a38ff819a432217c55db2e9071928d20c - Has this variable been read? - BaseType.h - - - - send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a980c0013817836aa77ef74aeec7fb192 - Should this variable be sent? - BaseType.h - - - - serialize - cpp - instm - libdap::UInt32 - - classlibdap_1_1UInt32.html - af76d9ef68ae7861401bdf611e4bacd16 - Move data to the net, then remove them from the object. - UInt32.h - - - - serialize - cpp - instm - libdap::UInt32 - - classlibdap_1_1UInt32.html - ac05e4247715d52c8bc6459a32a810471 - Serialize an Int8. - UInt32.h - - - - set_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a572a1d76a75981abac83a4241e90c0fa - BaseType.h - - - - set_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2bc036248cdaf1affac464170f32ad30 - BaseType.h - - - - set_length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4fe343c1eeb6fb1d61ab030433651d90 - Set the number of elements for this variable. - BaseType.h - - - - set_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a86504564f45a3e6748c6f1cc0ff4e9fa - Sets the name of the class instance. - BaseType.h - - - - set_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - BaseType.h - - - - set_read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4533905a450d2a7af32e7d5acd557676 - Sets the value of the read_p property. - BaseType.h - - - - set_send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aba7b27635c95b74536de18393133628e - BaseType.h - - - - set_synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a595cb4059cff24f801a1b6da79bd2f9e - BaseType.h - - - - set_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af74f8d1ef57c9fcca46f620f75d175a3 - Sets the type of the class instance. - BaseType.h - - - - synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae64e677da27249473cdba0b60cdbb90a - BaseType.h - - - - toString - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a701eb3361f5b5628329ece019cd34519 - BaseType.h - - - - transfer_attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - add8e836c622042a339152a6c31e5bdfb - BaseType.h - - - - transform_to_dap2 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - affec8a11e9cc035d4b1e8fb9a87b2072 - DAP4 to DAP2 transform. - BaseType.h - - - - transform_to_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adb03e2e1e40c3c888577c4666831a949 - DAP2 to DAP4 transform. - BaseType.h - - - - type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - Returns the type of the class instance. - BaseType.h - - - - type_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a18a42c8ec35cb5b15cd651a4152f8a2c - Returns the type of the class instance as a string. - BaseType.h - - - - UInt32 - cpp - instm - libdap::UInt32 - - classlibdap_1_1UInt32.html - a01d713f1eae7c2b0c9e8287ca1670bcf - UInt32.h - - - - UInt32 - cpp - instm - libdap::UInt32 - - classlibdap_1_1UInt32.html - a2a57e3fcd5013cd0ea6ec1161d5f1ff8 - UInt32.h - - - - val2buf - cpp - instm - libdap::UInt32 - - classlibdap_1_1UInt32.html - a4670043bd9007f36807c7df7fd49cb69 - Loads class data. - UInt32.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4dc4fac1bb6083f6db645f37bfd59b85 - Returns a pointer to a member of a constructor class. - BaseType.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adecfc442b5927c79933c7f71cfe03fd2 - BaseType.h - - - - width - cpp - instm - libdap::UInt32 - - classlibdap_1_1UInt32.html - a38405864c06780759d24d85f95621c62 - How many bytes does this variable use Return the number of bytes of storage this variable uses... - UInt32.h - - - - attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a97452f06d2188eb838399a709246b5e9 - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a722d33783aa0272d339b0301a4f77e59 - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1956e6ea90a745516f5372c859173433 - Read data into this variable. - BaseType.h - - - - m_duplicate - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a0c55b826c8c5dfe7a454dc670e859a41 - Perform a deep copy. - BaseType.h - - - - libdap::UInt64 - c - cl - libdap::UInt64 - - classlibdap_1_1UInt64.html - Holds a 64-bit unsigned integer. - UInt64.h - - - - add_var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adca3c2621c4a509537c18362005d7f7f - Add a variable. - BaseType.h - - - - check_semantics - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aec503abec2fd3090e7738c0a575491f8 - Compare an object&#39;s current state with the semantics of its type. - BaseType.h - - - - clear_local_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aaddb97a4efbe035f41deaf03c6e8683f - BaseType.h - - - - compute_checksum - cpp - instm - libdap::UInt64 - - classlibdap_1_1UInt64.html - a23e6785e872f60ab600dbd7ccbf76391 - include the data for this variable in the checksum DAP4 includes a checksum with every data response... - UInt64.h - - - - d4_ops - cpp - instm - libdap::UInt64 - - classlibdap_1_1UInt64.html - a1c177d21c0eeeb26083a4cf6a01f7873 - Evaluator a relop for DAP4. - UInt64.h - - - - dataset - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a47521ce321a17e6ce217870cb6a1a7aa - Returns the name of the dataset used to create this instance. - BaseType.h - - - - deserialize - cpp - instm - libdap::UInt64 - - classlibdap_1_1UInt64.html - ad1287870ab52d0aa6c4f60015bcb6e9f - UInt64.h - - - - dump - cpp - instm - libdap::UInt64 - - classlibdap_1_1UInt64.html - afc3afdbf38c4097caba0a1db85e3a9a6 - dumps information about this object - UInt64.h - - - - element_count - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5c2235737737b482bfa7536b8aeab810 - Count the members of constructor types. - BaseType.h - - - - FQN - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - BaseType.h - - - - get_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1fcd9537c67e3bf88964b2656ff5bac1 - BaseType.h - - - - get_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a3459cdaa239c33ce111ef360d8dc3017 - BaseType.h - - - - is_constructor_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8b8490e0047c6da52945699a132008ea - Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable... - BaseType.h - - - - is_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - Is this variable part of the current selection? - BaseType.h - - - - is_simple_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aae57e5b270b3a015d40c8db10b9b5549 - Returns true if the instance is a numeric, string or URL type variable. - BaseType.h - - - - is_vector_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a7107c76dbcab71015141142383b6d022 - Returns true if the instance is a vector (i.e., array) type variable. - BaseType.h - - - - length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aadcda7a659157bc6a832d8a5fb775b3f - How many elements are in this variable. - BaseType.h - - - - name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a24c5d67823b3cff7f4245a993072a142 - Returns the name of the class instance. - BaseType.h - - - - ops - cpp - instm - libdap::UInt64 - - classlibdap_1_1UInt64.html - a4ceb6fa4a9fc731410962dc9e1c787a4 - Evaluate relational operators. - UInt64.h - - - - print_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afcddbe441380b95c894510c02980b163 - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2d799fad93255d7f2b803562ae7a5784 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afd744b0ddeb04e7b173c9e83423ec572 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_val - cpp - instm - libdap::UInt64 - - classlibdap_1_1UInt64.html - ae4eed9eaa057932bd1e817cea8477d79 - Prints the value of the variable. - UInt64.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a825820edee179550cfde3dfd4d274f2a - BaseType.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8bd2c7682edd48c64b210bdf247bdef7 - BaseType.h - - - - print_xml_writer - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a11554ff931528b243e9af8173d205b44 - BaseType.h - - - - ptr_duplicate - cpp - instm - libdap::UInt64 - - classlibdap_1_1UInt64.html - ab87b5a08c9627f4813af802d2eb7e8da - UInt64.h - - - - read - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1da003c53f2e663223f603ab3fbd7c8e - Read data into a local buffer. - BaseType.h - - - - read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a38ff819a432217c55db2e9071928d20c - Has this variable been read? - BaseType.h - - - - send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a980c0013817836aa77ef74aeec7fb192 - Should this variable be sent? - BaseType.h - - - - serialize - cpp - instm - libdap::UInt64 - - classlibdap_1_1UInt64.html - a8f9ff4dfa4f7e93d838c35097b2e3930 - Serialize an Int8. - UInt64.h - - - - set_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a572a1d76a75981abac83a4241e90c0fa - BaseType.h - - - - set_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2bc036248cdaf1affac464170f32ad30 - BaseType.h - - - - set_length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4fe343c1eeb6fb1d61ab030433651d90 - Set the number of elements for this variable. - BaseType.h - - - - set_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a86504564f45a3e6748c6f1cc0ff4e9fa - Sets the name of the class instance. - BaseType.h - - - - set_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - BaseType.h - - - - set_read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4533905a450d2a7af32e7d5acd557676 - Sets the value of the read_p property. - BaseType.h - - - - set_send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aba7b27635c95b74536de18393133628e - BaseType.h - - - - set_synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a595cb4059cff24f801a1b6da79bd2f9e - BaseType.h - - - - set_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af74f8d1ef57c9fcca46f620f75d175a3 - Sets the type of the class instance. - BaseType.h - - - - synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae64e677da27249473cdba0b60cdbb90a - BaseType.h - - - - toString - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a701eb3361f5b5628329ece019cd34519 - BaseType.h - - - - transfer_attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - add8e836c622042a339152a6c31e5bdfb - BaseType.h - - - - transform_to_dap2 - cpp - instm - libdap::UInt64 - - classlibdap_1_1UInt64.html - a128cc879ec5b5c5541d0f3b4289d879e - DAP4 to DAP2 transform. - UInt64.h - - - - transform_to_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adb03e2e1e40c3c888577c4666831a949 - DAP2 to DAP4 transform. - BaseType.h - - - - type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - Returns the type of the class instance. - BaseType.h - - - - type_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a18a42c8ec35cb5b15cd651a4152f8a2c - Returns the type of the class instance as a string. - BaseType.h - - - - UInt64 - cpp - instm - libdap::UInt64 - - classlibdap_1_1UInt64.html - ab516d59cb6050179081971ffd3d70a6d - UInt64.h - - - - UInt64 - cpp - instm - libdap::UInt64 - - classlibdap_1_1UInt64.html - a329aa12343f9df0b1b50fca996c85ac1 - UInt64.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4dc4fac1bb6083f6db645f37bfd59b85 - Returns a pointer to a member of a constructor class. - BaseType.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adecfc442b5927c79933c7f71cfe03fd2 - BaseType.h - - - - width - cpp - instm - libdap::UInt64 - - classlibdap_1_1UInt64.html - a924125a6d5bfb10ae1ad42c40ab4dfff - How many bytes does this variable use Return the number of bytes of storage this variable uses... - UInt64.h - - - - attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a97452f06d2188eb838399a709246b5e9 - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a722d33783aa0272d339b0301a4f77e59 - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1956e6ea90a745516f5372c859173433 - Read data into this variable. - BaseType.h - - - - serialize - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adc24a735977e28acb0e6f78667c1dd21 - Move data to the net, then remove them from the object. - BaseType.h - - - - deserialize - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1f27d99250e857efd86ac9db788bbf1b - Receive data from the net. - BaseType.h - - - - m_duplicate - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a0c55b826c8c5dfe7a454dc670e859a41 - Perform a deep copy. - BaseType.h - - - - libdap::UnMarshaller - c - cl - libdap::UnMarshaller - - classlibdap_1_1UnMarshaller.html - abstract base class used to unmarshall/deserialize dap data objects - UnMarshaller.h - - - - dump - cpp - instm - libdap::UnMarshaller - - classlibdap_1_1UnMarshaller.html - a2aba5bbe9a2990b03668c78817312782 - dump the contents of this object to the specified ostream - UnMarshaller.h - - - - libdap::Url - c - cl - libdap::Url - - classlibdap_1_1Url.html - Holds an Internet address (URL). - Url.h - - - - add_var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adca3c2621c4a509537c18362005d7f7f - Add a variable. - BaseType.h - - - - buf2val - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - aa63cf0376fe71ceb030b48e7fdbad863 - Str.h - - - - check_semantics - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aec503abec2fd3090e7738c0a575491f8 - Compare an object&#39;s current state with the semantics of its type. - BaseType.h - - - - clear_local_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aaddb97a4efbe035f41deaf03c6e8683f - BaseType.h - - - - compute_checksum - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - ae98348772288b417561f39b445f48c9e - include the data for this variable in the checksum DAP4 includes a checksum with every data response... - Str.h - - - - d4_ops - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - a051efecca32b2679bd0b1700453db617 - Str.h - - - - dataset - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a47521ce321a17e6ce217870cb6a1a7aa - Returns the name of the dataset used to create this instance. - BaseType.h - - - - deserialize - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - a2bafe2f1851b3a4cac6089b0e2282010 - Receive data from the net. - Str.h - - - - deserialize - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - afdeab29d40e99baa3d0def2f8f6d8b2e - Str.h - - - - dump - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - a9bae029c10a3824cd95d7e3fb2c11911 - dumps information about this object - Str.h - - - - element_count - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5c2235737737b482bfa7536b8aeab810 - Count the members of constructor types. - BaseType.h - - - - FQN - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - BaseType.h - - - - get_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1fcd9537c67e3bf88964b2656ff5bac1 - BaseType.h - - - - get_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a3459cdaa239c33ce111ef360d8dc3017 - BaseType.h - - - - is_constructor_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8b8490e0047c6da52945699a132008ea - Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable... - BaseType.h - - - - is_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - Is this variable part of the current selection? - BaseType.h - - - - is_simple_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aae57e5b270b3a015d40c8db10b9b5549 - Returns true if the instance is a numeric, string or URL type variable. - BaseType.h - - - - is_vector_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a7107c76dbcab71015141142383b6d022 - Returns true if the instance is a vector (i.e., array) type variable. - BaseType.h - - - - length - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - a6159e681dd78ac9d7660df1a734fd9d4 - How many elements are in this variable. - Str.h - - - - name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a24c5d67823b3cff7f4245a993072a142 - Returns the name of the class instance. - BaseType.h - - - - ops - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - a5b74994fb52ceb3248c558015c4520a5 - Evaluate relational operators. - Str.h - - - - print_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afcddbe441380b95c894510c02980b163 - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2d799fad93255d7f2b803562ae7a5784 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afd744b0ddeb04e7b173c9e83423ec572 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_val - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - a3fd0df896926273b491fa8b3dc040b20 - Prints the value of the variable. - Str.h - - - - print_val - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - a7984e46de9b21ef554b156dec40cc559 - Prints the value of the variable. - Str.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a825820edee179550cfde3dfd4d274f2a - BaseType.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8bd2c7682edd48c64b210bdf247bdef7 - BaseType.h - - - - print_xml_writer - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a11554ff931528b243e9af8173d205b44 - BaseType.h - - - - ptr_duplicate - cpp - instm - libdap::Url - - classlibdap_1_1Url.html - a1064f1f9a75dba713a8e676a278f291c - Url.h - - - - read - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1da003c53f2e663223f603ab3fbd7c8e - Read data into a local buffer. - BaseType.h - - - - read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a38ff819a432217c55db2e9071928d20c - Has this variable been read? - BaseType.h - - - - send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a980c0013817836aa77ef74aeec7fb192 - Should this variable be sent? - BaseType.h - - - - serialize - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - a1f71320548c6cf29b85d66de5998144d - Move data to the net, then remove them from the object. - Str.h - - - - serialize - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - af341f5722961ea40812d1fde478d1f79 - Serialize an Int8. - Str.h - - - - set_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a572a1d76a75981abac83a4241e90c0fa - BaseType.h - - - - set_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2bc036248cdaf1affac464170f32ad30 - BaseType.h - - - - set_length - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4fe343c1eeb6fb1d61ab030433651d90 - Set the number of elements for this variable. - BaseType.h - - - - set_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a86504564f45a3e6748c6f1cc0ff4e9fa - Sets the name of the class instance. - BaseType.h - - - - set_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - BaseType.h - - - - set_read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4533905a450d2a7af32e7d5acd557676 - Sets the value of the read_p property. - BaseType.h - - - - set_send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aba7b27635c95b74536de18393133628e - BaseType.h - - - - set_synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a595cb4059cff24f801a1b6da79bd2f9e - BaseType.h - - - - set_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af74f8d1ef57c9fcca46f620f75d175a3 - Sets the type of the class instance. - BaseType.h - - - - set_value - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - ac4083a612e46a9ef2d1cddc2d40a955f - Str.h - - - - synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae64e677da27249473cdba0b60cdbb90a - BaseType.h - - - - toString - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a701eb3361f5b5628329ece019cd34519 - BaseType.h - - - - transfer_attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - add8e836c622042a339152a6c31e5bdfb - BaseType.h - - - - transform_to_dap2 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - affec8a11e9cc035d4b1e8fb9a87b2072 - DAP4 to DAP2 transform. - BaseType.h - - - - transform_to_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adb03e2e1e40c3c888577c4666831a949 - DAP2 to DAP4 transform. - BaseType.h - - - - type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - Returns the type of the class instance. - BaseType.h - - - - type_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a18a42c8ec35cb5b15cd651a4152f8a2c - Returns the type of the class instance as a string. - BaseType.h - - - - Url - cpp - instm - libdap::Url - - classlibdap_1_1Url.html - a9fb1b73af8ce02df5081945250f64eb8 - Url.h - - - - Url - cpp - instm - libdap::Url - - classlibdap_1_1Url.html - a210226151d8473808acbeba12122f1c2 - Url.h - - - - val2buf - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - add396308f45a14355b60c411ed33bf7a - Str.h - - - - value - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - a6a184f229c17879291dba8f7477db677 - Str.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a4dc4fac1bb6083f6db645f37bfd59b85 - Returns a pointer to a member of a constructor class. - BaseType.h - - - - var - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adecfc442b5927c79933c7f71cfe03fd2 - BaseType.h - - - - width - cpp - instm - libdap::Str - - classlibdap_1_1Str.html - a636ebae6c75fb6dc5d929dc6db6f9558 - How many bytes does this variable use Return the number of bytes of storage this variable uses... - Str.h - - - - attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a97452f06d2188eb838399a709246b5e9 - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a722d33783aa0272d339b0301a4f77e59 - BaseType.h - - - - intern_data - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1956e6ea90a745516f5372c859173433 - Read data into this variable. - BaseType.h - - - - m_duplicate - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a0c55b826c8c5dfe7a454dc670e859a41 - Perform a deep copy. - BaseType.h - - - - libdap::Vector - c - cl - libdap::Vector - - classlibdap_1_1Vector.html - Holds a one-dimensional collection of DAP2 data types. - Vector.h - - - - add_var - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a033417b3c3056fa77f1e32f62a0a2f3b - Add the BaseType pointer to this constructor type instance. - Vector.h - - - - buf2val - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - af20a56a72c3108b31418ebf01f779253 - Copies data from the Vector buffer. - Vector.h - - - - check_semantics - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - afd220155b44708d85d0bb5aa2f756549 - Compare an object&#39;s current state with the semantics of its type. - Vector.h - - - - clear_local_data - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - ac12023f8bf9ecc97998c3bb021ba2772 - Vector.h - - - - compute_checksum - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a9c61fcb646f1813e350549b6ddf48204 - include the data for this variable in the checksum DAP4 includes a checksum with every data response... - Vector.h - - - - d4_ops - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a512a356f31ed6c4c1a368da0b054408a - Evaluator a relop for DAP4. - BaseType.h - - - - dataset - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a47521ce321a17e6ce217870cb6a1a7aa - Returns the name of the dataset used to create this instance. - BaseType.h - - - - deserialize - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - aba86cc0f3915d85e37f4b9e00ebfde7e - Receive data from the net. - Vector.h - - - - deserialize - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - ad78d293754a1d78b90c86f8e33c22bec - Vector.h - - - - dump - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a9dc0a17c575e0f1ffc0571731bb8de78 - dumps information about this object - Vector.h - - - - element_count - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - ab78981c9e05e7d1dc24f913dbd2021d7 - Count the members of constructor types. - Vector.h - - - - FQN - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a977cb954cc8f0d914d6f66ea0f48a9e3 - BaseType.h - - - - get_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1fcd9537c67e3bf88964b2656ff5bac1 - BaseType.h - - - - get_buf - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a285ee3b0cc0adf6a54ea388ea71a69fc - Vector.h - - - - get_compound_buf - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - ad6d99474ab74d8b9752e4e77b3350121 - Vector.h - - - - get_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a3459cdaa239c33ce111ef360d8dc3017 - BaseType.h - - - - get_str - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - ab53f2eb57de3f0f99961f6ab6f470638 - Vector.h - - - - get_value_capacity - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a16b89988deda0413d1eb2cdc615a38df - Vector.h - - - - intern_data - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a6b5ee8fec4de3700e2564a64ef4f6d76 - read data into a variable for later use - Vector.h - - - - intern_data - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - abe772a228c62c7960bf2eb92be77732f - Read data into this variable. - Vector.h - - - - is_constructor_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8b8490e0047c6da52945699a132008ea - Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable... - BaseType.h - - - - is_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae302ab2ec26e9fc5b575bf5d3d09aa5c - Is this variable part of the current selection? - BaseType.h - - - - is_simple_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - aae57e5b270b3a015d40c8db10b9b5549 - Returns true if the instance is a numeric, string or URL type variable. - BaseType.h - - - - is_vector_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a7107c76dbcab71015141142383b6d022 - Returns true if the instance is a vector (i.e., array) type variable. - BaseType.h - - - - length - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a2476a541aad16bedc64d99805fcc9c0c - Vector.h - - - - name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a24c5d67823b3cff7f4245a993072a142 - Returns the name of the class instance. - BaseType.h - - - - ops - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8a0000be2a244e3e07abda3020af8800 - Evaluate relational operators. - BaseType.h - - - - print_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afcddbe441380b95c894510c02980b163 - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2d799fad93255d7f2b803562ae7a5784 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_decl - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afd744b0ddeb04e7b173c9e83423ec572 - Print an ASCII representation of the variable structure. - BaseType.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a825820edee179550cfde3dfd4d274f2a - BaseType.h - - - - print_xml - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a8bd2c7682edd48c64b210bdf247bdef7 - BaseType.h - - - - print_xml_writer - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a11554ff931528b243e9af8173d205b44 - BaseType.h - - - - ptr_duplicate - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a08158ed75b297c395e2f665958be0ffe - Vector.h - - - - read - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a1da003c53f2e663223f603ab3fbd7c8e - Read data into a local buffer. - BaseType.h - - - - read_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a38ff819a432217c55db2e9071928d20c - Has this variable been read? - BaseType.h - - - - reserve_value_capacity - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - aaaa7c0f36266ef3df9f4fb90de220867 - Vector.h - - - - reserve_value_capacity - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - adade15ffa55c59f6205e1c3c9ea78a35 - Vector.h - - - - send_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a980c0013817836aa77ef74aeec7fb192 - Should this variable be sent? - BaseType.h - - - - serialize - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a993d46232faadb5914cc0519d013e9b2 - Serialize a Vector. - Vector.h - - - - serialize - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - af478e3d5cbb3235081fe8daa6d6629a9 - The DAP4 serialization method. Serialize a variable&#39;s values for DAP4. This does not write the DMR pe... - Vector.h - - - - set_attr_table - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a572a1d76a75981abac83a4241e90c0fa - BaseType.h - - - - set_in_selection - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a2bc036248cdaf1affac464170f32ad30 - BaseType.h - - - - set_length - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a05a61e24fd295934dfc3c37c9f55ca57 - Vector.h - - - - set_name - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - aacfca48c7db65e3a2c3c94734dee8c36 - Sets the name of the class instance. - Vector.h - - - - set_parent - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a5b6a39f6ce6594fa74f3fc899ac9a966 - BaseType.h - - - - set_read_p - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a58712de8871e28a48fdc95e72a09df71 - Indicates that the data is ready to send. - Vector.h - - - - set_send_p - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a64815467570490a4a6cddc89f09a2413 - Indicates that the data is ready to send. - Vector.h - - - - set_synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a595cb4059cff24f801a1b6da79bd2f9e - BaseType.h - - - - set_type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af74f8d1ef57c9fcca46f620f75d175a3 - Sets the type of the class instance. - BaseType.h - - - - set_value_slice_from_row_major_vector - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a559d8ca948ca40f179e4e3da0bfdfdc4 - Vector.h - - - - set_vec - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a8bf6e565dcb2eab1f3f7037518a9acb3 - Sets element i to value val. - Vector.h - - - - set_vec_nocopy - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a175f1a51686798061c2147f2eccde33a - Sets element i to value val. Set the ith element to val. Extend the vector if needed. - Vector.h - - - - synthesized_p - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - ae64e677da27249473cdba0b60cdbb90a - BaseType.h - - - - toString - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a701eb3361f5b5628329ece019cd34519 - BaseType.h - - - - transfer_attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - add8e836c622042a339152a6c31e5bdfb - BaseType.h - - - - transform_to_dap2 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - affec8a11e9cc035d4b1e8fb9a87b2072 - DAP4 to DAP2 transform. - BaseType.h - - - - transform_to_dap4 - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - adb03e2e1e40c3c888577c4666831a949 - DAP2 to DAP4 transform. - BaseType.h - - - - type - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - af8e803b20a7a7dc5f2ef351d7fac4a56 - Returns the type of the class instance. - BaseType.h - - - - type_name - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a18a42c8ec35cb5b15cd651a4152f8a2c - Returns the type of the class instance as a string. - BaseType.h - - - - val2buf - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a96ecf84f2798065878755d9a9014ee69 - Reads data into the Vector buffer. - Vector.h - - - - var - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - aa5ccb30d1f27ae587f35216b859feec7 - Vector.h - - - - var - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - ac07a950727d2ac58934ba4cc03206c8d - Vector.h - - - - var - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - adf286762e63295675850c41cedf33370 - Vector.h - - - - vec_resize - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - ad180a87244b0b6f32b47711a4ae0330e - Vector.h - - - - Vector - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - af6dc3e80b6398ecaa098b5c46df5376c - The Vector constructor. - Vector.h - - - - Vector - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a90baf84028f16afe1344943400fb79a7 - The Vector constructor. - Vector.h - - - - Vector - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - ae3a9cea6f164319908ed5b9cd35af668 - Vector.h - - - - width - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a8fe5d7b06814653b6cf5408b2a8671db - Returns the width of the data, in bytes. - Vector.h - - - - attributes - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a97452f06d2188eb838399a709246b5e9 - BaseType.h - - - - print_val - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - afb5e13838a599ec0efe2adbb2ae18f47 - Prints the value of the variable. - BaseType.h - - - - print_val - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a94edd5b610afb1432144158740710488 - Prints the value of the variable. - BaseType.h - - - - m_create_cardinal_data_buffer_for_type - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - af175806a557f627a0ee70c5f05ed7c5c - Vector.h - - - - m_delete_cardinal_data_buffer - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - ad2e46d6d52fcb609658baf5ac1f9892e - Vector.h - - - - m_duplicate - cpp - instm - libdap::BaseType - - classlibdap_1_1BaseType.html - a0c55b826c8c5dfe7a454dc670e859a41 - Perform a deep copy. - BaseType.h - - - - m_is_cardinal_type - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - ac00c2a2ebd65c86022b82dfb1a32485c - Vector.h - - - - m_set_cardinal_values_internal - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a1fb2c5dc539e55203fc61845089c67e8 - Vector.h - - - - set_value - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - abd6e429e907214c593b6fb37f97511ee - set the value of a string or url array - Vector.h - - - - set_value - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a068afd2353ad32f904361253e1b6e807 - set the value of a string or url array - Vector.h - - - - value - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - a0725f0e3304f9ad00bf90a19b5650368 - Get a copy of the data held by this variable. - Vector.h - - - - value - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - af9fd1c331a511989ac2bf4a0ad5b27da - Get a copy of the data held by this variable using the passed subsetIndex vector to identify which va... - Vector.h - - - - value - cpp - instm - libdap::Vector - - classlibdap_1_1Vector.html - aca5000630369cb4217827c2f136afec0 - Vector.h - - - - libdap::XDRFileMarshaller - c - cl - libdap::XDRFileMarshaller - - classlibdap_1_1XDRFileMarshaller.html - marshaller that knows how to marshall/serialize dap data objects to a file using XDR ... - XDRFileMarshaller.h - - - - dump - cpp - instm - libdap::XDRFileMarshaller - - classlibdap_1_1XDRFileMarshaller.html - ac18c437e979e0689411fe0327660fe21 - dump the contents of this object to the specified ostream - XDRFileMarshaller.h - - - - put_vector_end - cpp - instm - libdap::Marshaller - - classlibdap_1_1Marshaller.html - a3409a138c4a67bc9dd24a3a2ad6f97db - Marshaller.h - - - - put_vector_part - cpp - instm - libdap::Marshaller - - classlibdap_1_1Marshaller.html - a8b303c96939749f6aca62d0e582909b0 - Marshaller.h - - - - put_vector_start - cpp - instm - libdap::Marshaller - - classlibdap_1_1Marshaller.html - ae0cd4b847386e89eace23e6b2fc08826 - Marshaller.h - - - - libdap::XDRFileUnMarshaller - c - cl - libdap::XDRFileUnMarshaller - - classlibdap_1_1XDRFileUnMarshaller.html - unmarshaller that knows how to unmarshall/deserialize dap objects using XDR from a file ... - XDRFileUnMarshaller.h - - - - dump - cpp - instm - libdap::XDRFileUnMarshaller - - classlibdap_1_1XDRFileUnMarshaller.html - ae77f16074759c9d855f6155a93380635 - dump the contents of this object to the specified ostream - XDRFileUnMarshaller.h - - - - libdap::XDRStreamMarshaller - c - cl - libdap::XDRStreamMarshaller - - classlibdap_1_1XDRStreamMarshaller.html - Marshaller that knows how serialize dap data objects to a C++ iostream using XDR. ... - XDRStreamMarshaller.h - - - - dump - cpp - instm - libdap::XDRStreamMarshaller - - classlibdap_1_1XDRStreamMarshaller.html - a3601923f45d9182c92eb684e64d20d47 - dump the contents of this object to the specified ostream - XDRStreamMarshaller.h - - - - put_vector_end - cpp - instm - libdap::XDRStreamMarshaller - - classlibdap_1_1XDRStreamMarshaller.html - a4ffeb114ca4cf161366d82e6abc68acf - XDRStreamMarshaller.h - - - - put_vector_part - cpp - instm - libdap::XDRStreamMarshaller - - classlibdap_1_1XDRStreamMarshaller.html - af1ce1f82a6e78f649e124bded447026b - XDRStreamMarshaller.h - - - - put_vector_start - cpp - instm - libdap::XDRStreamMarshaller - - classlibdap_1_1XDRStreamMarshaller.html - ac29944748706b36e48cb7428752cf467 - XDRStreamMarshaller.h - - - - XDRStreamMarshaller - cpp - instm - libdap::XDRStreamMarshaller - - classlibdap_1_1XDRStreamMarshaller.html - a172f3cad856e8d1528fb97e0d34b5163 - XDRStreamMarshaller.h - - - - libdap::XDRStreamUnMarshaller - c - cl - libdap::XDRStreamUnMarshaller - - classlibdap_1_1XDRStreamUnMarshaller.html - unmarshaller that knows how to unmarshall/deserialize dap objects using XDR from a file ... - XDRStreamUnMarshaller.h - - - - dump - cpp - instm - libdap::XDRStreamUnMarshaller - - classlibdap_1_1XDRStreamUnMarshaller.html - a9ae38967a1c736b5ad7d851e2bc746fa - dump the contents of this object to the specified ostream - XDRStreamUnMarshaller.h - - - - libdap::XDRUtils - c - cl - libdap::XDRUtils - - classlibdap_1_1XDRUtils.html - - - - xdr_coder - cpp - clm - libdap::XDRUtils - - classlibdap_1_1XDRUtils.html - aaf9f4be9a9e22a10416bfbad841751a3 - Returns a function used to encode elements of an array. - XDRUtils.h - - - - libdap::XMLWriter - c - cl - libdap::XMLWriter - - classlibdap_1_1XMLWriter.html - - diff --git a/html/Type_8h_source.html b/html/Type_8h_source.html deleted file mode 100644 index d4fa73426..000000000 --- a/html/Type_8h_source.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -libdap: Type.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Type.h
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2013 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 #ifndef TYPE_H_
26 #define TYPE_H_
27 
28 namespace libdap {
29 
48 enum Part {
49  nil, // nil is for types that don't have parts...
50  array,
51  maps
52 };
53 
94 enum Type {
95  dods_null_c,
96  dods_byte_c,
97  dods_int16_c,
98  dods_uint16_c,
99  dods_int32_c, // Added `dods_' to fix clash with IRIX 5.3.
100  dods_uint32_c,
101  dods_float32_c,
102  dods_float64_c,
103  dods_str_c,
104  dods_url_c,
105 
106  dods_structure_c,
107  dods_array_c,
108  dods_sequence_c,
109 
110  // Not used for DAP4
111  dods_grid_c,
112 
113  // Added for DAP4
114  dods_char_c, // a synonym for UInt8 (and Byte)
115  dods_int8_c,
116  dods_uint8_c,
117 
118  dods_int64_c,
119  dods_uint64_c,
120  dods_enum_c,
121  dods_opaque_c,
122  dods_group_c
123 };
124 
125 } // namespace libdap
126 
127 #endif /* TYPE_H_ */
Part
Names the parts of multi-section constructor data types.
Definition: Type.h:48
-
Type
Identifies the data type.
Definition: Type.h:94
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
-
- - - - diff --git a/html/UInt16_8cc_source.html b/html/UInt16_8cc_source.html deleted file mode 100644 index af15a8c87..000000000 --- a/html/UInt16_8cc_source.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - -libdap: UInt16.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
UInt16.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Implementation for Int32.
33 //
34 // jhrg 9/7/94
35 
36 
37 #include "config.h"
38 
39 #include <sstream>
40 
41 #include "Byte.h" // synonymous with UInt8 and Char
42 #include "Int8.h"
43 #include "Int16.h"
44 #include "UInt16.h"
45 #include "Int32.h"
46 #include "UInt32.h"
47 #include "Int64.h"
48 #include "UInt64.h"
49 #include "Float32.h"
50 #include "Float64.h"
51 #include "Str.h"
52 #include "Url.h"
53 
54 #include "DDS.h"
55 #include "Marshaller.h"
56 #include "UnMarshaller.h"
57 
58 #include "DMR.h"
59 #include "D4StreamMarshaller.h"
60 #include "D4StreamUnMarshaller.h"
61 
62 #include "util.h"
63 #include "parser.h"
64 #include "Operators.h"
65 #include "dods-limits.h"
66 #include "debug.h"
67 #include "InternalErr.h"
68 #include "DapIndent.h"
69 
70 using std::cerr;
71 using std::endl;
72 
73 namespace libdap {
74 
79 UInt16::UInt16(const string &n) : BaseType(n, dods_uint16_c), d_buf(0)
80 {}
81 
89 UInt16::UInt16(const string &n, const string &d) : BaseType(n, d, dods_uint16_c), d_buf(0)
90 {}
91 
92 UInt16::UInt16(const UInt16 &copy_from) : BaseType(copy_from)
93 {
94  d_buf = copy_from.d_buf;
95 }
96 
97 BaseType *
99 {
100  return new UInt16(*this);
101 }
102 
103 UInt16 &
104 UInt16::operator=(const UInt16 &rhs)
105 {
106  if (this == &rhs)
107  return *this;
108 
109  dynamic_cast<BaseType &>(*this) = rhs;
110 
111  d_buf = rhs.d_buf;
112 
113  return *this;
114 }
115 
116 unsigned int
117 UInt16::width(bool) const
118 {
119  return sizeof(dods_uint16);
120 }
121 
122 bool
123 UInt16::serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval)
124 {
125 #if USE_LOCAL_TIMEOUT_SCHEME
126  dds.timeout_on();
127 #endif
128  if (!read_p())
129  read(); // read() throws Error and InternalErr
130 
131  if (ce_eval && !eval.eval_selection(dds, dataset()))
132  return true;
133 #if USE_LOCAL_TIMEOUT_SCHEME
134  dds.timeout_off();
135 #endif
136  m.put_uint16( d_buf ) ;
137 
138  return true;
139 }
140 
141 bool
143 {
144  um.get_uint16( d_buf ) ;
145 
146  return false;
147 }
148 
149 void
151 {
152  checksum.AddData(reinterpret_cast<uint8_t*>(&d_buf), sizeof(d_buf));
153 }
154 
163 void
164 UInt16::serialize(D4StreamMarshaller &m, DMR &, /*ConstraintEvaluator &,*/ bool)
165 {
166  if (!read_p())
167  read(); // read() throws Error
168 
169  m.put_uint16( d_buf ) ;
170 }
171 
172 void
174 {
175  um.get_uint16( d_buf ) ;
176 }
177 
178 unsigned int
179 UInt16::val2buf(void *val, bool)
180 {
181  // Jose Garcia
182  // This method is public therefore and I believe it has being designed
183  // to be use by read which must be implemented on the surrogated library,
184  // thus if the pointer val is NULL, is an Internal Error.
185  if (!val)
186  throw InternalErr(__FILE__, __LINE__,
187  "The incoming pointer does not contain any data.");
188 
189  d_buf = *(dods_uint16 *)val;
190 
191  return width();
192 }
193 
194 unsigned int
195 UInt16::buf2val(void **val)
196 {
197  // Jose Garcia
198  // The same comment justifying throwing an Error in val2buf applies here.
199  if (!val)
200  throw InternalErr(__FILE__, __LINE__, "NULL pointer.");
201 
202  if (!*val)
203  *val = new dods_uint16;
204 
205  *(dods_uint16 *)*val = d_buf;
206 
207  return width();
208 }
209 
210 dods_uint16
211 UInt16::value() const
212 {
213  return d_buf;
214 }
215 
216 bool
217 UInt16::set_value(dods_uint16 i)
218 {
219  d_buf = i;
220  set_read_p(true);
221 
222  return true;
223 }
224 
225 void
226 UInt16::print_val(FILE *out, string space, bool print_decl_p)
227 {
228  ostringstream oss;
229  print_val(oss, space, print_decl_p);
230  fwrite(oss.str().data(), sizeof(char), oss.str().length(), out);
231 }
232 
233 void
234 UInt16::print_val(ostream &out, string space, bool print_decl_p)
235 {
236  if (print_decl_p) {
237  print_decl(out, space, false);
238  out << " = " << (unsigned int)d_buf << ";\n" ;
239  }
240  else
241  out << (unsigned int)d_buf ;
242 }
243 
244 bool
246 {
247  // Extract the Byte arg's value.
248  if (!read_p() && !read()) {
249  // Jose Garcia
250  // Since the read method is virtual and implemented outside
251  // libdap++ if we cannot read the data that is the problem
252  // of the user or of whoever wrote the surrogate library
253  // implemeting read therefore it is an internal error.
254  throw InternalErr(__FILE__, __LINE__, "This value was not read!");
255  }
256 
257  // Extract the second arg's value.
258  if (!b || !(b->read_p() || b->read())) {
259  // Jose Garcia
260  // Since the read method is virtual and implemented outside
261  // libdap++ if we cannot read the data that is the problem
262  // of the user or of whoever wrote the surrogate library
263  // implemeting read therefore it is an internal error.
264  throw InternalErr(__FILE__, __LINE__, "This value was not read!");
265  }
266 
267  switch (b->type()) {
268  case dods_int8_c:
269  return Cmp<dods_uint16, dods_int8>(op, d_buf, static_cast<Int8*>(b)->value());
270  case dods_byte_c:
271  return Cmp<dods_uint16, dods_byte>(op, d_buf, static_cast<Byte*>(b)->value());
272  case dods_int16_c:
273  return Cmp<dods_uint16, dods_int16>(op, d_buf, static_cast<Int16*>(b)->value());
274  case dods_uint16_c:
275  return Cmp<dods_uint16, dods_uint16>(op, d_buf, static_cast<UInt16*>(b)->value());
276  case dods_int32_c:
277  return Cmp<dods_uint16, dods_int32>(op, d_buf, static_cast<Int32*>(b)->value());
278  case dods_uint32_c:
279  return Cmp<dods_uint16, dods_uint32>(op, d_buf, static_cast<UInt32*>(b)->value());
280  case dods_int64_c:
281  return Cmp<dods_uint16, dods_int64>(op, d_buf, static_cast<Int64*>(b)->value());
282  case dods_uint64_c:
283  return Cmp<dods_uint16, dods_uint64>(op, d_buf, static_cast<UInt64*>(b)->value());
284  case dods_float32_c:
285  return Cmp<dods_uint16, dods_float32>(op, d_buf, static_cast<Float32*>(b)->value());
286  case dods_float64_c:
287  return Cmp<dods_uint16, dods_float64>(op, d_buf, static_cast<Float64*>(b)->value());
288  default:
289  return false;
290  }
291 }
292 
301 void
302 UInt16::dump(ostream &strm) const
303 {
304  strm << DapIndent::LMarg << "UInt16::dump - ("
305  << (void *)this << ")" << endl ;
306  DapIndent::Indent() ;
307  BaseType::dump(strm) ;
308  strm << DapIndent::LMarg << "value: " << d_buf << endl ;
309  DapIndent::UnIndent() ;
310 }
311 
312 } // namespace libdap
313 
virtual bool read()
Read data into a local buffer.
Definition: BaseType.cc:899
-
Holds an 8-bit signed integer value.
Definition: Int8.h:42
-
Holds a64-bit signed integer.
Definition: Int64.h:49
-
virtual bool read_p()
Has this variable been read?
Definition: BaseType.cc:480
-
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
virtual void print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
Print an ASCII representation of the variable structure.
Definition: BaseType.cc:1003
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: BaseType.cc:291
-
Read data from the stream made by D4StreamMarshaller.
-
virtual void compute_checksum(Crc32 &checksum)
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
Definition: UInt16.cc:150
-
Holds an unsigned 16-bit integer.
Definition: UInt16.h:57
-
Definition: crc.h:76
-
BaseType(const string &n, const Type &t, bool is_dap4=false)
The BaseType constructor.
Definition: BaseType.cc:126
-
UInt16(const string &n)
Definition: UInt16.cc:79
-
virtual unsigned int width(bool constrained=false) const
How many bytes does this variable use Return the number of bytes of storage this variable uses...
Definition: UInt16.cc:117
-
Holds a 32-bit floating point value.
Definition: Float32.h:61
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
-
Holds a 16-bit signed integer value.
Definition: Int16.h:59
- -
virtual Type type() const
Returns the type of the class instance.
Definition: BaseType.cc:365
-
virtual void set_read_p(bool state)
Sets the value of the read_p property.
Definition: BaseType.cc:516
-
virtual bool ops(BaseType *b, int op)
Evaluate relational operators.
Definition: UInt16.cc:245
-
Holds a 64-bit unsigned integer.
Definition: UInt64.h:49
-
void AddData(const uint8_t *pData, const uint32_t length)
Definition: crc.h:98
-
virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)
Receive data from the net.
Definition: UInt16.cc:142
-
Evaluate a constraint expression.
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
-
Holds a 64-bit (double precision) floating point value.
Definition: Float64.h:60
-
Holds a single byte.
Definition: Byte.h:60
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: UInt16.cc:302
-
bool eval_selection(DDS &dds, const std::string &dataset)
Evaluate a boolean-valued constraint expression. This is main method for the evaluator and is called ...
-
virtual unsigned int buf2val(void **val)
Reads the class data.
Definition: UInt16.cc:195
-
virtual void print_val(FILE *out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: UInt16.cc:226
-
virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
Move data to the net, then remove them from the object.
Definition: UInt16.cc:123
-
Holds a 32-bit unsigned integer.
Definition: UInt32.h:59
-
virtual unsigned int val2buf(void *val, bool reuse=false)
Loads class data.
Definition: UInt16.cc:179
-
Holds a 32-bit signed integer.
Definition: Int32.h:65
-
virtual string dataset() const
Returns the name of the dataset used to create this instance.
Definition: BaseType.cc:358
-
virtual BaseType * ptr_duplicate()
Definition: UInt16.cc:98
-
-
- - - - diff --git a/html/UInt16_8h_source.html b/html/UInt16_8h_source.html deleted file mode 100644 index 01f6109c2..000000000 --- a/html/UInt16_8h_source.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - -libdap: UInt16.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
UInt16.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1996,1997,1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Interface for Int16 type.
33 //
34 // jhrg 9/7/94
35 
36 #ifndef _uint16_h
37 #define _uint16_h 1
38 
39 
40 #ifndef _dods_datatypes_h
41 #include "dods-datatypes.h"
42 #endif
43 
44 #ifndef _basetype_h
45 #include "BaseType.h"
46 #endif
47 
48 #ifndef constraint_evaluator_h
49 #include "ConstraintEvaluator.h"
50 #endif
51 
52 namespace libdap
53 {
54 
57 class UInt16: public BaseType
58 {
59 protected:
60  dods_uint16 d_buf;
61 
62 public:
63  UInt16(const string &n);
64  UInt16(const string &n, const string &d);
65  virtual ~UInt16()
66  {}
67 
68  UInt16(const UInt16 &copy_from);
69 
70  UInt16 &operator=(const UInt16 &rhs);
71 
72  virtual BaseType *ptr_duplicate();
73 
74  virtual unsigned int width(bool constrained = false) const;
75 
76  // DAP2
77  virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval = true);
78  virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse = false);
79 
80  // DAP4
81  virtual void compute_checksum(Crc32 &checksum);
82  virtual void serialize(D4StreamMarshaller &m, DMR &dmr, /*ConstraintEvaluator &eval,*/ bool filter = false);
83  virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr);
84 
85  virtual unsigned int val2buf(void *val, bool reuse = false);
86  virtual unsigned int buf2val(void **val);
87 
88  virtual dods_uint16 value() const;
89  virtual bool set_value(dods_uint16 val);
90 
91  virtual void print_val(FILE *out, string space = "",
92  bool print_decl_p = true);
93  virtual void print_val(ostream &out, string space = "",
94  bool print_decl_p = true);
95 
96  virtual bool ops(BaseType *b, int op);
97 
98  virtual void dump(ostream &strm) const ;
99 };
100 
101 } // namespace libdap
102 
103 #endif // _uint16_h
104 
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
Read data from the stream made by D4StreamMarshaller.
-
virtual void compute_checksum(Crc32 &checksum)
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
Definition: UInt16.cc:150
-
Holds an unsigned 16-bit integer.
Definition: UInt16.h:57
-
Definition: crc.h:76
-
UInt16(const string &n)
Definition: UInt16.cc:79
-
virtual unsigned int width(bool constrained=false) const
How many bytes does this variable use Return the number of bytes of storage this variable uses...
Definition: UInt16.cc:117
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
- -
virtual bool ops(BaseType *b, int op)
Evaluate relational operators.
Definition: UInt16.cc:245
-
virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)
Receive data from the net.
Definition: UInt16.cc:142
-
Evaluate a constraint expression.
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: UInt16.cc:302
-
virtual unsigned int buf2val(void **val)
Reads the class data.
Definition: UInt16.cc:195
-
virtual void print_val(FILE *out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: UInt16.cc:226
-
virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
Move data to the net, then remove them from the object.
Definition: UInt16.cc:123
-
virtual unsigned int val2buf(void *val, bool reuse=false)
Loads class data.
Definition: UInt16.cc:179
-
virtual BaseType * ptr_duplicate()
Definition: UInt16.cc:98
-
-
- - - - diff --git a/html/UInt32_8cc_source.html b/html/UInt32_8cc_source.html deleted file mode 100644 index baee46e0f..000000000 --- a/html/UInt32_8cc_source.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - -libdap: UInt32.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
UInt32.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Implementation for Int32.
33 //
34 // jhrg 9/7/94
35 
36 
37 #include "config.h"
38 
39 #include <sstream>
40 
41 #include "Byte.h" // synonymous with UInt8 and Char
42 #include "Int8.h"
43 #include "Int16.h"
44 #include "UInt16.h"
45 #include "Int32.h"
46 #include "UInt32.h"
47 #include "Int64.h"
48 #include "UInt64.h"
49 #include "Float32.h"
50 #include "Float64.h"
51 #include "Str.h"
52 #include "Url.h"
53 
54 #include "DDS.h"
55 #include "Marshaller.h"
56 #include "UnMarshaller.h"
57 
58 #include "DMR.h"
59 #include "D4StreamMarshaller.h"
60 #include "D4StreamUnMarshaller.h"
61 
62 #include "util.h"
63 #include "parser.h"
64 #include "Operators.h"
65 #include "dods-limits.h"
66 #include "debug.h"
67 #include "InternalErr.h"
68 #include "DapIndent.h"
69 
70 using std::cerr;
71 using std::endl;
72 
73 namespace libdap {
74 
80 UInt32::UInt32(const string &n) : BaseType(n, dods_uint32_c), d_buf(0)
81 {}
82 
90 UInt32::UInt32(const string &n, const string &d) : BaseType(n, d, dods_uint32_c), d_buf(0)
91 {}
92 
93 UInt32::UInt32(const UInt32 &copy_from) : BaseType(copy_from)
94 {
95  d_buf = copy_from.d_buf;
96 }
97 
98 BaseType *
100 {
101  return new UInt32(*this);
102 }
103 
104 UInt32 &
105 UInt32::operator=(const UInt32 &rhs)
106 {
107  if (this == &rhs)
108  return *this;
109 
110  dynamic_cast<BaseType &>(*this) = rhs;
111 
112  d_buf = rhs.d_buf;
113 
114  return *this;
115 }
116 
117 unsigned int
118 UInt32::width(bool) const
119 {
120  return sizeof(dods_uint32);
121 }
122 
123 bool
124 UInt32::serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval)
125 {
126 #if USE_LOCAL_TIMEOUT_SCHEME
127  dds.timeout_on();
128 #endif
129  if (!read_p())
130  read(); // read() throws Error and InternalErr
131 
132  if (ce_eval && !eval.eval_selection(dds, dataset()))
133  return true;
134 #if USE_LOCAL_TIMEOUT_SCHEME
135  dds.timeout_off();
136 #endif
137  m.put_uint32( d_buf ) ;
138 
139  return true;
140 }
141 
142 bool
144 {
145  um.get_uint32( d_buf ) ;
146 
147  return false;
148 }
149 
150 void
152 {
153  checksum.AddData(reinterpret_cast<uint8_t*>(&d_buf), sizeof(d_buf));
154 }
155 
164 void
165 UInt32::serialize(D4StreamMarshaller &m, DMR &, /*ConstraintEvaluator &,*/ bool)
166 {
167  if (!read_p())
168  read(); // read() throws Error
169 
170  m.put_uint32( d_buf ) ;
171 }
172 
173 void
175 {
176  um.get_uint32( d_buf ) ;
177 }
178 
179 unsigned int
180 UInt32::val2buf(void *val, bool)
181 {
182 
183  // Jose Garcia
184  // This method is public therefore and I believe it has being designed
185  // to be use by read which must be implemented on the surrogated library,
186  // thus if the pointer val is NULL, is an Internal Error.
187  if (!val)
188  throw InternalErr(__FILE__, __LINE__,
189  "The incoming pointer does not contain any data.");
190 
191  d_buf = *(dods_uint32 *)val;
192 
193  return width();
194 }
195 
196 unsigned int
197 UInt32::buf2val(void **val)
198 {
199  // Jose Garcia
200  // The same comment justifying throwing an Error in val2buf applies here.
201  if (!val)
202  throw InternalErr(__FILE__, __LINE__, "NULL pointer.");
203 
204  if (!*val)
205  *val = new dods_uint32;
206 
207  *(dods_uint32 *)*val = d_buf;
208 
209  return width();
210 }
211 
212 dods_uint32
213 UInt32::value() const
214 {
215  return d_buf;
216 }
217 
218 bool
219 UInt32::set_value(dods_uint32 i)
220 {
221  d_buf = i;
222  set_read_p(true);
223 
224  return true;
225 }
226 
227 void
228 UInt32::print_val(FILE *out, string space, bool print_decl_p)
229 {
230  ostringstream oss;
231  print_val(oss, space, print_decl_p);
232  fwrite(oss.str().data(), sizeof(char), oss.str().length(), out);
233 }
234 
235 void
236 UInt32::print_val(ostream &out, string space, bool print_decl_p)
237 {
238  if (print_decl_p) {
239  print_decl(out, space, false);
240  out << " = " << (unsigned int)d_buf << ";\n" ;
241  }
242  else
243  out << (unsigned int)d_buf ;
244 }
245 
246 bool
248 {
249  // Extract the Byte arg's value.
250  if (!read_p() && !read()) {
251  // Jose Garcia
252  // Since the read method is virtual and implemented outside
253  // libdap++ if we cannot read the data that is the problem
254  // of the user or of whoever wrote the surrogate library
255  // implemeting read therefore it is an internal error.
256  throw InternalErr(__FILE__, __LINE__, "This value was not read!");
257  }
258 
259  // Extract the second arg's value.
260  if (!b || !(b->read_p() || b->read())) {
261  // Jose Garcia
262  // Since the read method is virtual and implemented outside
263  // libdap++ if we cannot read the data that is the problem
264  // of the user or of whoever wrote the surrogate library
265  // implemeting read therefore it is an internal error.
266  throw InternalErr(__FILE__, __LINE__, "This value was not read!");
267  }
268 
269  switch (b->type()) {
270  case dods_int8_c:
271  return Cmp<dods_uint32, dods_int8>(op, d_buf, static_cast<Int8*>(b)->value());
272  case dods_byte_c:
273  return Cmp<dods_uint32, dods_byte>(op, d_buf, static_cast<Byte*>(b)->value());
274  case dods_int16_c:
275  return Cmp<dods_uint32, dods_int16>(op, d_buf, static_cast<Int16*>(b)->value());
276  case dods_uint16_c:
277  return Cmp<dods_uint32, dods_uint16>(op, d_buf, static_cast<UInt16*>(b)->value());
278  case dods_int32_c:
279  return Cmp<dods_uint32, dods_int32>(op, d_buf, static_cast<Int32*>(b)->value());
280  case dods_uint32_c:
281  return Cmp<dods_uint32, dods_uint32>(op, d_buf, static_cast<UInt32*>(b)->value());
282  case dods_int64_c:
283  return Cmp<dods_uint32, dods_int64>(op, d_buf, static_cast<Int64*>(b)->value());
284  case dods_uint64_c:
285  return Cmp<dods_uint32, dods_uint64>(op, d_buf, static_cast<UInt64*>(b)->value());
286  case dods_float32_c:
287  return Cmp<dods_uint32, dods_float32>(op, d_buf, static_cast<Float32*>(b)->value());
288  case dods_float64_c:
289  return Cmp<dods_uint32, dods_float64>(op, d_buf, static_cast<Float64*>(b)->value());
290  default:
291  return false;
292  }
293 }
294 
303 void
304 UInt32::dump(ostream &strm) const
305 {
306  strm << DapIndent::LMarg << "UInt32::dump - ("
307  << (void *)this << ")" << endl ;
308  DapIndent::Indent() ;
309  BaseType::dump(strm) ;
310  strm << DapIndent::LMarg << "value: " << d_buf << endl ;
311  DapIndent::UnIndent() ;
312 }
313 
314 } // namespace libdap
315 
virtual bool read()
Read data into a local buffer.
Definition: BaseType.cc:899
-
Holds an 8-bit signed integer value.
Definition: Int8.h:42
-
Holds a64-bit signed integer.
Definition: Int64.h:49
-
virtual bool read_p()
Has this variable been read?
Definition: BaseType.cc:480
-
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
virtual void print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
Print an ASCII representation of the variable structure.
Definition: BaseType.cc:1003
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: UInt32.cc:304
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: BaseType.cc:291
-
virtual unsigned int buf2val(void **val)
Reads the class data.
Definition: UInt32.cc:197
-
UInt32(const string &n)
Definition: UInt32.cc:80
-
Read data from the stream made by D4StreamMarshaller.
-
Holds an unsigned 16-bit integer.
Definition: UInt16.h:57
-
Definition: crc.h:76
-
BaseType(const string &n, const Type &t, bool is_dap4=false)
The BaseType constructor.
Definition: BaseType.cc:126
-
virtual BaseType * ptr_duplicate()
Definition: UInt32.cc:99
-
Holds a 32-bit floating point value.
Definition: Float32.h:61
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual void compute_checksum(Crc32 &checksum)
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
Definition: UInt32.cc:151
-
A class for software fault reporting.
Definition: InternalErr.h:64
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
-
Holds a 16-bit signed integer value.
Definition: Int16.h:59
- -
virtual Type type() const
Returns the type of the class instance.
Definition: BaseType.cc:365
-
virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
Move data to the net, then remove them from the object.
Definition: UInt32.cc:124
-
virtual void set_read_p(bool state)
Sets the value of the read_p property.
Definition: BaseType.cc:516
-
virtual unsigned int width(bool constrained=false) const
How many bytes does this variable use Return the number of bytes of storage this variable uses...
Definition: UInt32.cc:118
-
virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)
Receive data from the net.
Definition: UInt32.cc:143
-
virtual void print_val(FILE *out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: UInt32.cc:228
-
Holds a 64-bit unsigned integer.
Definition: UInt64.h:49
-
void AddData(const uint8_t *pData, const uint32_t length)
Definition: crc.h:98
-
Evaluate a constraint expression.
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
-
Holds a 64-bit (double precision) floating point value.
Definition: Float64.h:60
-
Holds a single byte.
Definition: Byte.h:60
-
bool eval_selection(DDS &dds, const std::string &dataset)
Evaluate a boolean-valued constraint expression. This is main method for the evaluator and is called ...
-
virtual unsigned int val2buf(void *val, bool reuse=false)
Loads class data.
Definition: UInt32.cc:180
-
Holds a 32-bit unsigned integer.
Definition: UInt32.h:59
-
virtual bool ops(BaseType *b, int op)
Evaluate relational operators.
Definition: UInt32.cc:247
-
Holds a 32-bit signed integer.
Definition: Int32.h:65
-
virtual string dataset() const
Returns the name of the dataset used to create this instance.
Definition: BaseType.cc:358
-
-
- - - - diff --git a/html/UInt32_8h_source.html b/html/UInt32_8h_source.html deleted file mode 100644 index 0dcb7a456..000000000 --- a/html/UInt32_8h_source.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - -libdap: UInt32.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
UInt32.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Interface for the UInt32 (unsigned int 32) type.
33 //
34 // jhrg 9/7/94
35 
36 #ifndef _uint32_h
37 #define _uint32_h 1
38 
39 
40 #ifndef _dods_datatypes_h
41 #include "dods-datatypes.h"
42 #endif
43 
44 #ifndef _basetype_h
45 #include "BaseType.h"
46 #endif
47 
48 #ifndef constraint_evaluator_h
49 #include "ConstraintEvaluator.h"
50 #endif
51 
52 namespace libdap
53 {
54 
59 class UInt32: public BaseType
60 {
61 protected:
62  dods_uint32 d_buf;
63 
64 public:
65  UInt32(const string &n);
66  UInt32(const string &n, const string &d);
67  virtual ~UInt32()
68  {}
69 
70  UInt32(const UInt32 &copy_from);
71 
72  UInt32 &operator=(const UInt32 &rhs);
73 
74  virtual BaseType *ptr_duplicate() ;
75 
76  virtual unsigned int width(bool constrained = false) const;
77 
78  // DAP2
79  virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval = true);
80  virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse = false);
81 
82  // DAP4
83  virtual void compute_checksum(Crc32 &checksum);
84  virtual void serialize(D4StreamMarshaller &m, DMR &dmr, /*ConstraintEvaluator &eval,*/ bool filter = false);
85  virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr);
86 
87  virtual unsigned int val2buf(void *val, bool reuse = false);
88  virtual unsigned int buf2val(void **val);
89 
90  virtual dods_uint32 value() const;
91  virtual bool set_value(dods_uint32 val);
92 
93  virtual void print_val(FILE *out, string space = "",
94  bool print_decl_p = true);
95  virtual void print_val(ostream &out, string space = "",
96  bool print_decl_p = true);
97 
98  virtual bool ops(BaseType *b, int op);
99 
100  virtual void dump(ostream &strm) const ;
101 };
102 
103 } // namespace libdap
104 
105 #endif // _uint32_h
106 
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: UInt32.cc:304
-
virtual unsigned int buf2val(void **val)
Reads the class data.
Definition: UInt32.cc:197
-
UInt32(const string &n)
Definition: UInt32.cc:80
-
Read data from the stream made by D4StreamMarshaller.
-
Definition: crc.h:76
-
virtual BaseType * ptr_duplicate()
Definition: UInt32.cc:99
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual void compute_checksum(Crc32 &checksum)
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
Definition: UInt32.cc:151
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
- -
virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
Move data to the net, then remove them from the object.
Definition: UInt32.cc:124
-
virtual unsigned int width(bool constrained=false) const
How many bytes does this variable use Return the number of bytes of storage this variable uses...
Definition: UInt32.cc:118
-
virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)
Receive data from the net.
Definition: UInt32.cc:143
-
virtual void print_val(FILE *out, string space="", bool print_decl_p=true)
Prints the value of the variable.
Definition: UInt32.cc:228
-
Evaluate a constraint expression.
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
-
virtual unsigned int val2buf(void *val, bool reuse=false)
Loads class data.
Definition: UInt32.cc:180
-
Holds a 32-bit unsigned integer.
Definition: UInt32.h:59
-
virtual bool ops(BaseType *b, int op)
Evaluate relational operators.
Definition: UInt32.cc:247
-
-
- - - - diff --git a/html/UInt64_8cc_source.html b/html/UInt64_8cc_source.html deleted file mode 100644 index 499b87dc3..000000000 --- a/html/UInt64_8cc_source.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - -libdap: UInt64.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
UInt64.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2012 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #include "config.h"
27 
28 #include <sstream>
29 
30 #include "Byte.h" // synonymous with UInt8 and Char
31 #include "Int8.h"
32 #include "Int16.h"
33 #include "UInt16.h"
34 #include "Int32.h"
35 #include "UInt32.h"
36 #include "Int64.h"
37 #include "UInt64.h"
38 #include "Float32.h"
39 #include "Float64.h"
40 #include "Str.h"
41 #include "Url.h"
42 
43 #include "DMR.h"
44 #include "D4StreamMarshaller.h"
45 #include "D4StreamUnMarshaller.h"
46 
47 #include "util.h"
48 #include "parser.h"
49 #include "Operators.h"
50 #include "dods-limits.h"
51 #include "debug.h"
52 #include "InternalErr.h"
53 #include "DapIndent.h"
54 
55 using std::cerr;
56 using std::endl;
57 
58 namespace libdap {
59 
68 UInt64::UInt64(const string &n) : BaseType(n, dods_uint64_c, true /*is_dap4*/), d_buf(0)
69 {}
70 
81 UInt64::UInt64(const string &n, const string &d) : BaseType(n, d, dods_uint64_c, true /*is_dap4*/), d_buf(0)
82 {}
83 
84 UInt64::UInt64(const UInt64 &copy_from) : BaseType(copy_from)
85 {
86  d_buf = copy_from.d_buf;
87 }
88 
89 BaseType *
91 {
92  return new UInt64(*this);
93 }
94 
95 UInt64 &
96 UInt64::operator=(const UInt64 &rhs)
97 {
98  if (this == &rhs)
99  return *this;
100 
101  dynamic_cast<BaseType &>(*this) = rhs;
102 
103  d_buf = rhs.d_buf;
104 
105  return *this;
106 }
107 
108 unsigned int
109 UInt64::width(bool) const
110 {
111  return sizeof(dods_uint64);
112 }
113 
114 void
116 {
117  checksum.AddData(reinterpret_cast<uint8_t*>(&d_buf), sizeof(d_buf));
118 }
119 
128 void
129 UInt64::serialize(D4StreamMarshaller &m, DMR &, /*ConstraintEvaluator &,*/ bool)
130 {
131  if (!read_p())
132  read(); // read() throws Error
133 
134  m.put_uint64( d_buf ) ;
135 }
136 
137 void
139 {
140  um.get_uint64( d_buf ) ;
141 }
142 
143 dods_uint64
144 UInt64::value() const
145 {
146  return d_buf;
147 }
148 
149 bool
150 UInt64::set_value(dods_uint64 i)
151 {
152  d_buf = i;
153  set_read_p(true);
154 
155  return true;
156 }
157 
158 unsigned int
159 UInt64::buf2val(void **val)
160 
161 {
162  if (!val)
163  throw InternalErr(__FILE__, __LINE__, "NULL pointer.");
164 
165  if (!*val)
166  *val = new dods_uint64;
167 
168  *(dods_uint64 *)*val = d_buf;
169 
170  return width();
171 }
172 
173 void
174 UInt64::print_val(ostream &out, string space, bool print_decl_p)
175 {
176  if (print_decl_p) {
177  print_decl(out, space, false);
178  out << " = " << d_buf << ";\n" ;
179  }
180  else
181  out << d_buf ;
182 }
183 
184 bool
186 {
187  // Extract the Byte arg's value.
188  if (!read_p() && !read())
189  throw InternalErr(__FILE__, __LINE__, "This value was not read!");
190 
191  // Extract the second arg's value.
192  if (!b || !(b->read_p() || b->read()))
193  throw InternalErr(__FILE__, __LINE__, "This value was not read!");
194 
195  switch (b->type()) {
196  case dods_int8_c:
197  return Cmp<dods_uint64, dods_int8>(op, d_buf, static_cast<Int8*>(b)->value());
198  case dods_byte_c:
199  return Cmp<dods_uint64, dods_byte>(op, d_buf, static_cast<Byte*>(b)->value());
200  case dods_int16_c:
201  return Cmp<dods_uint64, dods_int16>(op, d_buf, static_cast<Int16*>(b)->value());
202  case dods_uint16_c:
203  return Cmp<dods_uint64, dods_uint16>(op, d_buf, static_cast<UInt16*>(b)->value());
204  case dods_int32_c:
205  return Cmp<dods_uint64, dods_int32>(op, d_buf, static_cast<Int32*>(b)->value());
206  case dods_uint32_c:
207  return Cmp<dods_uint64, dods_uint32>(op, d_buf, static_cast<UInt32*>(b)->value());
208  case dods_int64_c:
209  return Cmp<dods_uint64, dods_int64>(op, d_buf, static_cast<Int64*>(b)->value());
210  case dods_uint64_c:
211  return Cmp<dods_uint64, dods_uint64>(op, d_buf, static_cast<UInt64*>(b)->value());
212  case dods_float32_c:
213  return Cmp<dods_uint64, dods_float32>(op, d_buf, static_cast<Float32*>(b)->value());
214  case dods_float64_c:
215  return Cmp<dods_uint64, dods_float64>(op, d_buf, static_cast<Float64*>(b)->value());
216  default:
217  return false;
218  }
219 }
220 
221 bool
223 {
224  switch (b->type()) {
225  case dods_int8_c:
226  return Cmp<dods_uint64, dods_int8>(op, d_buf, static_cast<Int8*>(b)->value());
227  case dods_byte_c:
228  return Cmp<dods_uint64, dods_byte>(op, d_buf, static_cast<Byte*>(b)->value());
229  case dods_int16_c:
230  return Cmp<dods_uint64, dods_int16>(op, d_buf, static_cast<Int16*>(b)->value());
231  case dods_uint16_c:
232  return Cmp<dods_uint64, dods_uint16>(op, d_buf, static_cast<UInt16*>(b)->value());
233  case dods_int32_c:
234  return Cmp<dods_uint64, dods_int32>(op, d_buf, static_cast<Int32*>(b)->value());
235  case dods_uint32_c:
236  return Cmp<dods_uint64, dods_uint32>(op, d_buf, static_cast<UInt32*>(b)->value());
237  case dods_int64_c:
238  return Cmp<dods_uint64, dods_int64>(op, d_buf, static_cast<Int64*>(b)->value());
239  case dods_uint64_c:
240  return Cmp<dods_uint64, dods_uint64>(op, d_buf, static_cast<UInt64*>(b)->value());
241  case dods_float32_c:
242  return Cmp<dods_uint64, dods_float32>(op, d_buf, static_cast<Float32*>(b)->value());
243  case dods_float64_c:
244  return Cmp<dods_uint64, dods_float64>(op, d_buf, static_cast<Float64*>(b)->value());
245  default:
246  return false;
247  }
248 }
249 
250 
251 
267 std::vector<BaseType *> *
269 {
270 #if 0
271  BaseType *dest = this->ptr_duplicate();
272  // convert the d4 attributes to a dap2 attribute table.
273  AttrTable *attrs = this->attributes()->get_AttrTable();
274  attrs->set_name(name());
275  dest->set_attr_table(*attrs);
276  dest->set_is_dap4(false);
277  // attrs->print(cerr,"",true);
278  return dest;
279 #endif
280 
281  return NULL;
282 }
283 
292 void
293 UInt64::dump(ostream &strm) const
294 {
295  strm << DapIndent::LMarg << "UInt32::dump - ("
296  << (void *)this << ")" << endl ;
297  DapIndent::Indent() ;
298  BaseType::dump(strm) ;
299  strm << DapIndent::LMarg << "value: " << d_buf << endl ;
300  DapIndent::UnIndent() ;
301 }
302 
303 } // namespace libdap
304 
virtual bool read()
Read data into a local buffer.
Definition: BaseType.cc:899
-
Holds an 8-bit signed integer value.
Definition: Int8.h:42
-
Holds a64-bit signed integer.
Definition: Int64.h:49
-
virtual bool read_p()
Has this variable been read?
Definition: BaseType.cc:480
-
virtual string name() const
Returns the name of the class instance.
Definition: BaseType.cc:320
-
virtual void print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
Print an ASCII representation of the variable structure.
Definition: BaseType.cc:1003
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: BaseType.cc:291
-
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
virtual bool ops(BaseType *b, int op)
Evaluate relational operators.
Definition: UInt64.cc:185
-
Read data from the stream made by D4StreamMarshaller.
-
Holds an unsigned 16-bit integer.
Definition: UInt16.h:57
-
virtual BaseType * ptr_duplicate()
Definition: UInt64.cc:90
-
Definition: crc.h:76
-
BaseType(const string &n, const Type &t, bool is_dap4=false)
The BaseType constructor.
Definition: BaseType.cc:126
-
virtual bool d4_ops(BaseType *b, int op)
Evaluator a relop for DAP4.
Definition: UInt64.cc:222
-
Holds a 32-bit floating point value.
Definition: Float32.h:61
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
UInt64(const string &n)
Definition: UInt64.cc:68
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
-
Holds a 16-bit signed integer value.
Definition: Int16.h:59
-
virtual Type type() const
Returns the type of the class instance.
Definition: BaseType.cc:365
-
virtual void serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)
Serialize an Int8.
Definition: UInt64.cc:129
-
virtual void set_read_p(bool state)
Sets the value of the read_p property.
Definition: BaseType.cc:516
-
virtual D4Attributes * attributes()
Definition: BaseType.cc:599
-
virtual void compute_checksum(Crc32 &checksum)
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
Definition: UInt64.cc:115
-
virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr)
Definition: UInt64.cc:138
-
Holds a 64-bit unsigned integer.
Definition: UInt64.h:49
-
void AddData(const uint8_t *pData, const uint32_t length)
Definition: crc.h:98
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: UInt64.cc:293
-
virtual unsigned int width(bool constrained=false) const
How many bytes does this variable use Return the number of bytes of storage this variable uses...
Definition: UInt64.cc:109
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
virtual std::vector< BaseType * > * transform_to_dap2(AttrTable *parent_attr_table)
DAP4 to DAP2 transform.
Definition: UInt64.cc:268
-
Holds a 64-bit (double precision) floating point value.
Definition: Float64.h:60
-
virtual void set_attr_table(const AttrTable &at)
Definition: BaseType.cc:590
-
Holds a single byte.
Definition: Byte.h:60
-
virtual void set_name(const string &n)
Set the name of this attribute table.
Definition: AttrTable.cc:245
-
Holds a 32-bit unsigned integer.
Definition: UInt32.h:59
-
Holds a 32-bit signed integer.
Definition: Int32.h:65
-
-
- - - - diff --git a/html/UInt64_8h_source.html b/html/UInt64_8h_source.html deleted file mode 100644 index 8bdf12519..000000000 --- a/html/UInt64_8h_source.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - -libdap: UInt64.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
UInt64.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2012 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 #ifndef _uint64_h
27 #define _uint64_h 1
28 
29 
30 #ifndef _dods_datatypes_h
31 #include "dods-datatypes.h"
32 #endif
33 
34 #ifndef _basetype_h
35 #include "BaseType.h"
36 #endif
37 
38 #ifndef constraint_evaluator_h
39 #include "ConstraintEvaluator.h"
40 #endif
41 
42 namespace libdap
43 {
44 
49 class UInt64: public BaseType
50 {
51  virtual unsigned int val2buf(void *val, bool) {
52  set_value(*reinterpret_cast<dods_uint64*>(val));
53  return sizeof(dods_uint64);
54  }
55  //virtual unsigned int buf2val(void **) { throw InternalErr(__FILE__, __LINE__, "Not implemented for UInt64"); }
56  unsigned int buf2val(void **);
57  virtual void print_val(FILE *, string, bool) { throw InternalErr(__FILE__, __LINE__, "Not implemented for UInt64"); }
58 
59 protected:
60  dods_uint64 d_buf;
61 
62 public:
63  UInt64(const string &n);
64  UInt64(const string &n, const string &d);
65  virtual ~UInt64()
66  {}
67 
68  UInt64(const UInt64 &copy_from);
69 
70  UInt64 &operator=(const UInt64 &rhs);
71 
72  virtual BaseType *ptr_duplicate() ;
73 
74  virtual unsigned int width(bool constrained = false) const;
75 
76  // DAP4
77  virtual void compute_checksum(Crc32 &checksum);
78  virtual void serialize(D4StreamMarshaller &m, DMR &dmr, /*ConstraintEvaluator &eval,*/ bool filter = false);
79  virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr);
80 
81  virtual dods_uint64 value() const;
82  virtual bool set_value(dods_uint64 val);
83 
84  virtual void print_val(ostream &out, string space = "", bool print_decl_p = true);
85 
86  virtual bool ops(BaseType *b, int op);
87  virtual bool d4_ops(BaseType *b, int op);
88  virtual std::vector<BaseType *> *transform_to_dap2(AttrTable *parent_attr_table);
89 
90  virtual void dump(ostream &strm) const ;
91 };
92 
93 } // namespace libdap
94 
95 #endif // _uint64_h
96 
Contains the attributes for a dataset.
Definition: AttrTable.h:142
-
virtual bool ops(BaseType *b, int op)
Evaluate relational operators.
Definition: UInt64.cc:185
-
Read data from the stream made by D4StreamMarshaller.
-
virtual BaseType * ptr_duplicate()
Definition: UInt64.cc:90
-
Definition: crc.h:76
-
virtual bool d4_ops(BaseType *b, int op)
Evaluator a relop for DAP4.
Definition: UInt64.cc:222
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
UInt64(const string &n)
Definition: UInt64.cc:68
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
-
virtual void serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)
Serialize an Int8.
Definition: UInt64.cc:129
-
virtual void compute_checksum(Crc32 &checksum)
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
Definition: UInt64.cc:115
-
virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr)
Definition: UInt64.cc:138
-
Holds a 64-bit unsigned integer.
Definition: UInt64.h:49
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: UInt64.cc:293
-
virtual unsigned int width(bool constrained=false) const
How many bytes does this variable use Return the number of bytes of storage this variable uses...
Definition: UInt64.cc:109
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
virtual std::vector< BaseType * > * transform_to_dap2(AttrTable *parent_attr_table)
DAP4 to DAP2 transform.
Definition: UInt64.cc:268
-
-
- - - - diff --git a/html/UnMarshaller_8h_source.html b/html/UnMarshaller_8h_source.html deleted file mode 100644 index b02d53e30..000000000 --- a/html/UnMarshaller_8h_source.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - -libdap: UnMarshaller.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
UnMarshaller.h
-
-
-
1 // UnMarshaller.h
2 
3 // -*- mode: c++; c-basic-offset:4 -*-
4 
5 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
6 // Access Protocol.
7 
8 // Copyright (c) 2002,2003 OPeNDAP, Inc.
9 // Author: Patrick West <pwest@ucar.edu>
10 //
11 // This library is free software; you can redistribute it and/or
12 // modify it under the terms of the GNU Lesser General Public
13 // License as published by the Free Software Foundation; either
14 // version 2.1 of the License, or (at your option) any later version.
15 //
16 // This library is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 // Lesser General Public License for more details.
20 //
21 // You should have received a copy of the GNU Lesser General Public
22 // License along with this library; if not, write to the Free Software
23 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 //
25 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
26 
27 // (c) COPYRIGHT URI/MIT 1994-1999
28 // Please read the full copyright statement in the file COPYRIGHT_URI.
29 //
30 // Authors:
31 // pwest Patrick West <pwest@ucar.edu>
32 
33 #ifndef A_UnMarshaller_h
34 #define A_UnMarshaller_h 1
35 
36 #include <string>
37 #include <vector>
38 
39 using std::string ;
40 using std::vector ;
41 
42 #include "DapObj.h"
43 
44 #include "dods-datatypes.h"
45 
46 namespace libdap
47 {
48 
49 class Vector ;
50 
54 class UnMarshaller : public DapObj
55 {
56 public:
57  virtual void get_byte( dods_byte &val ) = 0 ;
58 
59  virtual void get_int16( dods_int16 &val ) = 0 ;
60  virtual void get_int32( dods_int32 &val ) = 0 ;
61 
62  virtual void get_float32( dods_float32 &val ) = 0 ;
63  virtual void get_float64( dods_float64 &val ) = 0 ;
64 
65  virtual void get_uint16( dods_uint16 &val ) = 0 ;
66  virtual void get_uint32( dods_uint32 &val ) = 0 ;
67 
68  virtual void get_str( string &val ) = 0 ;
69  virtual void get_url( string &val ) = 0 ;
70 
71  virtual void get_opaque( char *val, unsigned int len ) = 0 ;
72  virtual void get_int( int &val ) = 0 ;
73 
74  virtual void get_vector( char **val, unsigned int &num,
75  Vector &vec ) = 0 ;
76  virtual void get_vector( char **val, unsigned int &num,
77  int width, Vector &vec ) = 0 ;
78 
79  virtual void dump(std::ostream &strm) const = 0 ;
80 } ;
81 
82 } // namespace libdap
83 
84 #endif // A_UnMarshaller_h
85 
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
Holds a one-dimensional collection of DAP2 data types.
Definition: Vector.h:80
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual void dump(std::ostream &strm) const =0
dump the contents of this object to the specified ostream
-
libdap base object for common functionality of libdap objects
Definition: DapObj.h:50
-
-
- - - - diff --git a/html/Url_8cc_source.html b/html/Url_8cc_source.html deleted file mode 100644 index 10ca42d76..000000000 --- a/html/Url_8cc_source.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -libdap: Url.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Url.cc
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1994-1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // Implementation for Url.
33 //
34 // jhrg 9/7/94
35 
36 #include "config.h"
37 
38 #include "Url.h"
39 
40 namespace libdap {
41 
50 Url::Url(const string &n) : Str(n)
51 {
52  set_type(dods_url_c); // override the type set by Str
53 }
54 
63 Url::Url(const string &n, const string &d) : Str(n, d)
64 {
65  set_type(dods_url_c); // override the type set by Str
66 }
67 
68 BaseType *
70 {
71  return new Url(*this);
72 }
73 
74 } // namespace libdap
Url(const std::string &n)
Definition: Url.cc:50
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
Holds character string data.
Definition: Str.h:62
-
virtual void set_type(const Type &t)
Sets the type of the class instance.
Definition: BaseType.cc:372
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
virtual BaseType * ptr_duplicate()
Definition: Url.cc:69
-
-
- - - - diff --git a/html/Url_8h_source.html b/html/Url_8h_source.html deleted file mode 100644 index 4a8d64494..000000000 --- a/html/Url_8h_source.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -libdap: Url.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Url.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1995-1999
27 // Please read the full copyright statement in the file COPYRIGHT.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher (jgallagher@gso.uri.edu)
31 
32 // Interface for Url type.
33 //
34 // jhrg 9/7/94
35 
36 #ifndef _url_h
37 #define _url_h 1
38 
39 
40 #include <string>
41 
42 #if 0
43 #ifndef _dods_limits_h
44 #include "dods-limits.h"
45 #endif
46 
47 #ifndef _basetype_h
48 #include "BaseType.h"
49 #endif
50 #endif
51 
52 
53 // #ifndef _str_h
54 #include "Str.h"
55 //#endif
56 
57 namespace libdap
58 {
59 
60 class BaseType;
61 
62 const unsigned int max_url_len = 255;
63 
68 class Url: public Str
69 {
70 
71 #if 0
72 private:
73 string _buf;
74 
75 // This enables methods of Str to access _buf in this class.
76 friend class Str;
77 #endif
78 
79 public:
80  Url(const std::string &n);
81  Url(const std::string &n, const std::string &d);
82  Url(const std::string &n, Type t);
83  Url(const std::string &n, const std::string &d, Type t);
84  virtual ~Url()
85  {}
86 
87  virtual BaseType *ptr_duplicate();
88 };
89 
90 } // namespace libdap
91 
92 #endif // _url_h
93 
Holds an Internet address (URL).
Definition: Url.h:68
-
Url(const std::string &n)
Definition: Url.cc:50
-
Type
Identifies the data type.
Definition: Type.h:94
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
Holds character string data.
Definition: Str.h:62
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
virtual BaseType * ptr_duplicate()
Definition: Url.cc:69
-
-
- - - - diff --git a/html/Vector_8cc_source.html b/html/Vector_8cc_source.html deleted file mode 100644 index 2c95a3585..000000000 --- a/html/Vector_8cc_source.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - -libdap: Vector.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Vector.cc
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2002,2003 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 
25 // (c) COPYRIGHT URI/MIT 1995-1999
26 // Please read the full copyright statement in the file COPYRIGHT_URI.
27 //
28 // Authors:
29 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
30 
31 // Implementation for class Vector. This class is the basis for all the
32 // vector-type classes in libdap's <Array, List>.
33 //
34 // 11/21/95 jhrg
35 
36 #include "config.h"
37 
38 #include <cstring>
39 #include <cassert>
40 
41 //#define DODS_DEBUG 1
42 
43 #include <sstream>
44 #include <vector>
45 #include <algorithm>
46 #include <typeinfo>
47 
48 #include <stdint.h>
49 
50 #include "crc.h"
51 
52 #include "Vector.h"
53 #include "Marshaller.h"
54 #include "UnMarshaller.h"
55 
56 #include "D4StreamMarshaller.h"
57 #include "D4StreamUnMarshaller.h"
58 
59 #include "D4Enum.h"
60 
61 #include "Type.h"
62 #include "dods-datatypes.h"
63 #include "escaping.h"
64 #include "util.h"
65 #include "debug.h"
66 #include "InternalErr.h"
67 #include "DapIndent.h"
68 
69 #undef CLEAR_LOCAL_DATA
70 
71 using std::cerr;
72 using std::endl;
73 
74 namespace libdap {
75 
76 void Vector::m_duplicate(const Vector & v)
77 {
78  d_length = v.d_length;
79 
80  // _var holds the type of the elements. That is, it holds a BaseType
81  // which acts as a template for the type of each element.
82  if (v.d_proto) {
83  d_proto = v.d_proto->ptr_duplicate(); // use ptr_duplicate()
84  d_proto->set_parent(this); // ptr_duplicate does not set d_parent.
85  }
86  else {
87  d_proto = 0;
88  }
89 
90  // d_compound_buf and d_buf (further down) hold the values of the Vector. The field
91  // d_compound_buf is used when the Vector holds non-numeric data (including strings
92  // although it used to be that was not the case jhrg 2/10/05) while d_buf
93  // holds numeric values.
94  if (v.d_compound_buf.empty()) {
95  d_compound_buf = v.d_compound_buf;
96  }
97  else {
98  // Failure to set the size will make the [] operator barf on the LHS
99  // of the assignment inside the loop.
100  d_compound_buf.resize(d_length);
101  for (int i = 0; i < d_length; ++i) {
102  // There's no need to call set_parent() for each element; we
103  // maintain the back pointer using the d_proto member. These
104  // instances are used to hold _values_ only while the d_proto
105  // field holds the type information for the elements.
106  d_compound_buf[i] = v.d_compound_buf[i]->ptr_duplicate();
107  }
108  }
109 
110  // copy the strings. This copies the values.
111  d_str = v.d_str;
112 
113  // copy numeric values if there are any.
114  d_buf = 0; // init to null
115  if (v.d_buf) // only copy if data present
116  val2buf(v.d_buf); // store v's value in this's _BUF.
117 
118  d_capacity = v.d_capacity;
119 }
120 
126 {
127  // Not cardinal if no d_proto at all!
128  if (!d_proto) {
129  return false;
130  }
131 
132  switch (d_proto->type()) {
133  case dods_byte_c:
134  case dods_char_c:
135  case dods_int16_c:
136  case dods_uint16_c:
137  case dods_int32_c:
138  case dods_uint32_c:
139  case dods_float32_c:
140  case dods_float64_c:
141  // New cardinal types for DAP4
142  case dods_int8_c:
143  case dods_uint8_c:
144  case dods_int64_c:
145  case dods_uint64_c:
146 
147  case dods_enum_c:
148  return true;
149 
150  // These must be handled differently.
151  case dods_str_c:
152  case dods_url_c:
153  case dods_opaque_c:
154 
155  case dods_array_c:
156 
157  case dods_structure_c:
158  case dods_sequence_c:
159  case dods_grid_c:
160  return false;
161 
162  default:
163  assert("Vector::var: Unrecognized type");
164  return false;
165  }
166 }
167 
180 unsigned int Vector::m_create_cardinal_data_buffer_for_type(unsigned int numEltsOfType)
181 {
182  // Make sure we HAVE a _var, or we cannot continue.
183  if (!d_proto) {
184  throw InternalErr(__FILE__, __LINE__, "create_cardinal_data_buffer_for_type: Logic error: _var is null!");
185  }
186 
187  // Make sure we only do this for the correct data types.
188  if (!m_is_cardinal_type()) {
189  throw InternalErr(__FILE__, __LINE__, "create_cardinal_data_buffer_for_type: incorrectly used on Vector whose type was not a cardinal (simple data types).");
190  }
191 
193 
194  // Handle this special case where this is an array that holds no values
195  if (numEltsOfType == 0)
196  return 0;
197 
198  // Actually new up the array with enough bytes to hold numEltsOfType of the actual type.
199  unsigned int bytesPerElt = d_proto->width();
200  unsigned int bytesNeeded = bytesPerElt * numEltsOfType;
201  d_buf = new char[bytesNeeded];
202 
203  d_capacity = numEltsOfType;
204  return bytesNeeded;
205 }
206 
209 {
210  delete[] d_buf;
211  d_buf = 0;
212  d_capacity = 0;
213 }
214 
218 template<class CardType>
219 void Vector::m_set_cardinal_values_internal(const CardType* fromArray, int numElts)
220 {
221  if (numElts < 0) {
222  throw InternalErr(__FILE__, __LINE__, "Logic error: Vector::set_cardinal_values_internal() called with negative numElts!");
223  }
224  if (!fromArray) {
225  throw InternalErr(__FILE__, __LINE__, "Logic error: Vector::set_cardinal_values_internal() called with null fromArray!");
226  }
227  set_length(numElts);
229  memcpy(d_buf, fromArray, numElts * sizeof(CardType));
230  set_read_p(true);
231 }
232 
248 Vector::Vector(const string & n, BaseType * v, const Type & t, bool is_dap4 /* default:false */) :
249  BaseType(n, t, is_dap4), d_length(-1), d_proto(0), d_buf(0), d_compound_buf(0), d_capacity(0)
250 {
251  if (v)
252  add_var(v);
253 
254  DBG2(cerr << "Entering Vector ctor for object: " << this << endl);
255  if (d_proto)
256  d_proto->set_parent(this);
257 }
258 
277 Vector::Vector(const string & n, const string &d, BaseType * v, const Type & t, bool is_dap4 /* default:false */) :
278  BaseType(n, d, t, is_dap4), d_length(-1), d_proto(0), d_buf(0), d_compound_buf(0), d_capacity(0)
279 {
280  if (v)
281  add_var(v);
282 
283  DBG2(cerr << "Entering Vector ctor for object: " << this << endl);
284  if (d_proto)
285  d_proto->set_parent(this);
286 }
287 
289 Vector::Vector(const Vector & rhs) :
290  BaseType(rhs)
291 {
292  DBG2(cerr << "Entering Vector const ctor for object: " << this <<
293  endl); DBG2(cerr << "RHS: " << &rhs << endl);
294 
295  m_duplicate(rhs);
296 }
297 
298 Vector::~Vector()
299 {
300  DBG2(cerr << "Entering ~Vector (" << this << ")" << endl);
301 
302  delete d_proto;
303  d_proto = 0;
304 
305  // Clears all buffers
307 
308  DBG2(cerr << "Exiting ~Vector" << endl);
309 }
310 
311 Vector & Vector::operator=(const Vector & rhs)
312 {
313  if (this == &rhs)
314  return *this;
315 
316  dynamic_cast<BaseType &> (*this) = rhs;
317 
318  m_duplicate(rhs);
319 
320  return *this;
321 }
322 
323 void Vector::set_name(const std::string& name)
324 {
325  BaseType::set_name(name);
326  // We need to set the prototype name as well since
327  // this is what gets output in the dds! Otherwise, there's a mismatch.
328  if (d_proto) {
329  d_proto->set_name(name);
330  }
331 }
332 
333 int Vector::element_count(bool leaves)
334 {
335  if (!leaves)
336  return 1;
337  else
338  return d_proto->element_count(leaves);
339  // var() only works for simple types!
340  // jhrg 8/19/13 return var(0)->element_count(leaves);
341 }
342 
343 // These mfuncs set the _send_p and _read_p fields of BaseType. They differ
344 // from BaseType's version in that they set both the Vector object's copy of
345 // _send_p (_read_p) but also _VAR's copy. This does not matter much when _VAR
346 // is a scalar, but does matter when it is an aggregate.
347 
354 void Vector::set_send_p(bool state)
355 {
356  if (d_proto) {
357  d_proto->set_send_p(state);
358 
359  // because some code may depend on the BaseType*s held in d_compound_buf
360  // behaving as if they are 'ordinary' DAP variables, make sure their send_p
361  // flag is set if they exist. Because space in the vector is allocated
362  // before values (BaseType*s) are added, check for nulls and limit the
363  // iteration to only those elements actually in the object including any
364  // constraints that may have been applied - these are values not declarations.
365  // jhrg 5/13/16
366  switch (d_proto->type()) {
367  case dods_structure_c:
368  case dods_sequence_c:
369  case dods_grid_c:
370  if (d_compound_buf.size() > 0) {
371  for (unsigned long long i = 0; i < (unsigned) d_length; ++i) {
372  if (d_compound_buf[i]) d_compound_buf[i]->set_send_p(state);
373  }
374  }
375  break;
376 
377  default:
378  break;
379  }
380  }
381 
382  BaseType::set_send_p(state);
383 }
384 
391 void Vector::set_read_p(bool state)
392 {
393  if (d_proto) {
394  d_proto->set_read_p(state);
395 
396  // See comment above.
397  switch (d_proto->type()) {
398  case dods_structure_c:
399  case dods_sequence_c:
400  case dods_grid_c:
401  if (d_compound_buf.size() > 0) {
402  for (unsigned long long i = 0; i < (unsigned)d_length; ++i) {
403  if (d_compound_buf[i]) d_compound_buf[i]->set_read_p(state);
404  }
405  }
406  break;
407 
408  default:
409  break;
410  }
411  }
412 
413  BaseType::set_read_p(state);
414 }
415 
433 BaseType *Vector::var(const string &n, bool exact, btp_stack *s)
434 {
435  string name = www2id(n);
436  DBG2(cerr << "Vector::var: Looking for " << name << endl);
437 
438  if (name == "" || d_proto->name() == name) {
439  if (s)
440  s->push(this);
441  return d_proto;
442  }
443 
444  // If this is a Vector of constructor types, look for 'name' recursively.
445  // Make sure to check for the case where name is the default (the empty
446  // string). 9/1/98 jhrg
447  if (d_proto->is_constructor_type()) {
448  BaseType *result = d_proto->var(name, exact, s);
449  if (result && s)
450  s->push(this);
451  return result;
452  }
453 
454  return NULL;
455 }
456 
467 BaseType *Vector::var(const string & n, btp_stack & s)
468 {
469  string name = www2id(n);
470 
471  if (d_proto->is_constructor_type())
472  return d_proto->var(name, s);
473  else {
474  s.push((BaseType *) this);
475  return d_proto;
476  }
477 }
478 
490 BaseType *Vector::var(unsigned int i)
491 {
492 
493  switch (d_proto->type()) {
494  case dods_byte_c:
495  case dods_char_c:
496  case dods_int8_c:
497  case dods_uint8_c:
498  case dods_int16_c:
499  case dods_uint16_c:
500  case dods_int32_c:
501  case dods_uint32_c:
502  case dods_int64_c:
503  case dods_uint64_c:
504 
505  case dods_enum_c:
506 
507  case dods_float32_c:
508  case dods_float64_c:
509  // Transfer the ith value to the BaseType *d_proto
510  d_proto->val2buf(d_buf + (i * d_proto->width()));
511  return d_proto;
512 
513  case dods_str_c:
514  case dods_url_c:
515  d_proto->val2buf(&d_str[i]);
516  return d_proto;
517 
518  case dods_opaque_c:
519  case dods_array_c:
520  case dods_structure_c:
521  case dods_sequence_c:
522  case dods_grid_c:
523  return d_compound_buf[i];
524 
525  default:
526  throw Error ("Vector::var: Unrecognized type");
527  }
528 }
529 
536 unsigned int Vector::width(bool constrained) const
537 {
538  // Jose Garcia
539  assert(d_proto);
540 
541  return length() * d_proto->width(constrained);
542 }
543 
548 int Vector::length() const
549 {
550  return d_length;
551 }
552 
556 {
557  d_length = l;
558 }
559 
569 {
570  // I added this check, which alters the behavior of the method. jhrg 8/14/13
571  if (m_is_cardinal_type())
572  throw InternalErr(__FILE__, __LINE__, "Vector::vec_resize() is applicable to compound types only");
573 
574  // Use resize() since other parts of the code use operator[]. Note that size() should
575  // be used when resize() is used. Using capacity() creates problems as noted in the
576  // comment in set_vec_nocopy(). jhrg 5/19/17
577  d_compound_buf.resize(l, 0); // Fill with NULLs
578  d_capacity = d_compound_buf.size(); // size in terms of number of elements.
579 }
580 
598 {
599  DBG(cerr << "Vector::intern_data: " << name() << endl);
600  if (!read_p())
601  read(); // read() throws Error and InternalErr
602 
603  // length() is not capacity; it must be set explicitly in read().
604  int num = length();
605 
606  switch (d_proto->type()) {
607  case dods_byte_c:
608  case dods_int16_c:
609  case dods_uint16_c:
610  case dods_int32_c:
611  case dods_uint32_c:
612  case dods_float32_c:
613  case dods_float64_c:
614  // For these cases, read() puts the data into d_buf,
615  // which is what we need.
616  break;
617 
618  case dods_str_c:
619  case dods_url_c:
620  // For these cases, read() will put the data into d_str[],
621  // which is also what we need.
622  break;
623 
624  case dods_array_c:
625  // This is an error since there can never be an Array of Array.
626  throw InternalErr(__FILE__, __LINE__, "Array of Array not supported.");
627 
628  case dods_structure_c:
629  case dods_sequence_c:
630  case dods_grid_c:
631  DBG(cerr << "Vector::intern_data: found ctor" << endl);
632  // For these cases, we need to call read() for each of the 'num'
633  // elements in the 'd_compound_buf[]' array of BaseType object pointers.
634  //
635  // I changed the test here from '... = 0' to '... < num' to accommodate
636  // the case where the array is zero-length.
637  if (d_compound_buf.capacity() < (unsigned)num)
638  throw InternalErr(__FILE__, __LINE__, "The capacity of this Vector is less than the number of elements.");
639 
640  for (int i = 0; i < num; ++i)
641  d_compound_buf[i]->intern_data(eval, dds);
642 
643  break;
644 
645  default:
646  throw InternalErr(__FILE__, __LINE__, "Unknown datatype.");
647  }
648 }
649 
661 bool Vector::serialize(ConstraintEvaluator & eval, DDS & dds, Marshaller &m, bool ce_eval)
662 {
663  // Added to streamline zero-length arrays. Not needed for correct function,
664  // but explicitly handling this case here makes the code easier to follow.
665  // In libdap::Vector::val2buf() there is a test that will catch the zero-length
666  // case as well. We still need to call serialize since it will write size
667  // information that the client depends on. jhrg 2/17/16
668  if (length() == 0)
669  set_read_p(true);
670  else if (!read_p())
671  read(); // read() throws Error and InternalErr
672 
673  if (ce_eval && !eval.eval_selection(dds, dataset()))
674  return true;
675 
676  // length() is not capacity; it must be set explicitly in read().
677  int num = length();
678 
679  bool status = false;
680 
681  switch (d_proto->type()) {
682  case dods_byte_c:
683  m.put_vector(d_buf, num, *this);
684  status = true;
685  break;
686 
687  case dods_int16_c:
688  case dods_uint16_c:
689  case dods_int32_c:
690  case dods_uint32_c:
691  case dods_float32_c:
692  case dods_float64_c:
693  m.put_vector(d_buf, num, d_proto->width(), *this);
694  status = true;
695 
696  break;
697 
698  case dods_str_c:
699  case dods_url_c:
700  if (d_str.capacity() == 0)
701  throw InternalErr(__FILE__, __LINE__, "The capacity of the string vector is 0");
702 
703  m.put_int(num);
704 
705  for (int i = 0; i < num; ++i)
706  m.put_str(d_str[i]);
707 
708  status = true;
709  break;
710 
711  case dods_array_c:
712  case dods_structure_c:
713  case dods_sequence_c:
714  case dods_grid_c:
715  //Jose Garcia
716  // Not setting the capacity of d_compound_buf is an internal error.
717  if (d_compound_buf.capacity() == 0)
718  throw InternalErr(__FILE__, __LINE__, "The capacity of *this* vector is 0.");
719 
720  m.put_int(num);
721  status = true;
722  for (int i = 0; i < num && status; ++i)
723  status = status && d_compound_buf[i]->serialize(eval, dds, m, false);
724 
725  break;
726 
727  default:
728  throw InternalErr(__FILE__, __LINE__, "Unknown datatype.");
729  }
730 
731 #ifdef CLEAR_LOCAL_DATA
733 #endif
734 
735  return status;
736 }
737 
738 // Read an object from the network and internalize it. For a Vector this is
739 // handled differently for a `cardinal' type. Vectors of Cardinals are
740 // stored using the `C' representations because these objects often are used
741 // to build huge arrays (e.g., an array of 1024 by 1024 bytes). However,
742 // arrays of non-cardinal types are stored as Vectors of the C++ objects or
743 // DAP2 objects (Str and Url are vectors of the string class, Structure, ...,
744 // Grid are vectors of the libdap Structure, ... classes).
745 //
746 // The boolean parameter REUSE determines whether internal storage is reused
747 // or not. If true, the _buf member is assumed to be large enough to hold the
748 // incoming cardinal data and is *not* reallocated. If false, new storage is
749 // allocated. If the internal buffer has not yet been allocated, then this
750 // parameter has no effect (i.e., storage is allocated). This parameter
751 // effects storage for cardinal data only.
752 //
753 // Returns: True is successful, false otherwise.
754 
755 bool Vector::deserialize(UnMarshaller &um, DDS * dds, bool reuse)
756 {
757  unsigned int num;
758  unsigned i = 0;
759 
760  switch (d_proto->type()) {
761  case dods_byte_c:
762  case dods_int16_c:
763  case dods_uint16_c:
764  case dods_int32_c:
765  case dods_uint32_c:
766  case dods_float32_c:
767  case dods_float64_c:
768  um.get_int((int &) num);
769 
770  DBG(cerr << "Vector::deserialize: num = " << num << endl);
771  DBG(cerr << "Vector::deserialize: length = " << length() << endl);
772 
773  if (length() == -1)
774  set_length(num);
775 
776  if (num != (unsigned int) length())
777  throw InternalErr(__FILE__, __LINE__, "The server sent declarations and data with mismatched sizes for the variable '" + name() + "'.");
778 
779  if (!d_buf || !reuse) {
780  // Make d_buf be large enough for length() elements of _var->type()
781  // m_create...() deletes the old buffer.
783  DBG(cerr << "Vector::deserialize: allocating "
784  << width() << " bytes for an array of "
785  << length() << " " << d_proto->type_name() << endl);
786  }
787 
788  // Added to accommodate zero-length arrays.
789  // Note that the rest of the cases will just send the size without data
790  // but that these calls trigger error testing in the UnMarshaller code.
791  // jhrg 1/28/16
792  if (num == 0)
793  return true;
794 
795  if (d_proto->type() == dods_byte_c)
796  um.get_vector((char **) &d_buf, num, *this);
797  else
798  um.get_vector((char **) &d_buf, num, d_proto->width(), *this);
799 
800  DBG(cerr << "Vector::deserialize: read " << num << " elements\n");
801 
802  break;
803 
804  case dods_str_c:
805  case dods_url_c:
806  um.get_int((int &) num);
807 
808  if (length() == -1)
809  set_length(num);
810 
811  if (num != (unsigned int) length())
812  throw InternalErr(__FILE__, __LINE__, "The client sent declarations and data with mismatched sizes.");
813 
814  d_str.resize((num > 0) ? num : 0); // Fill with NULLs
815  d_capacity = num; // capacity is number of strings we can fit.
816 
817  for (i = 0; i < num; ++i) {
818  string str;
819  um.get_str(str);
820  d_str[i] = str;
821 
822  }
823 
824  break;
825 
826  case dods_array_c:
827  // Added jhrg 5/18/17
828  // This replaces a comment that was simply 'TO DO'
829  throw InternalErr(__FILE__, __LINE__, "Array of array!");
830 
831  case dods_structure_c:
832  case dods_sequence_c:
833  case dods_grid_c:
834  um.get_int((int &) num);
835 
836  if (length() == -1)
837  set_length(num);
838 
839  if (num != (unsigned int) length())
840  throw InternalErr(__FILE__, __LINE__, "The client sent declarations and data with mismatched sizes.");
841 
842  vec_resize(num);
843 
844  for (i = 0; i < num; ++i) {
845  d_compound_buf[i] = d_proto->ptr_duplicate();
846  d_compound_buf[i]->deserialize(um, dds);
847  }
848 
849  break;
850 
851  default:
852  throw InternalErr(__FILE__, __LINE__, "Unknown type!");
853  }
854 
855  return false;
856 }
857 
859 {
860  switch (d_proto->type()) {
861  case dods_byte_c:
862  case dods_char_c:
863  case dods_int8_c:
864  case dods_uint8_c:
865 
866  case dods_int16_c:
867  case dods_uint16_c:
868 
869  case dods_int32_c:
870  case dods_uint32_c:
871  case dods_float32_c:
872 
873  case dods_int64_c:
874  case dods_uint64_c:
875  case dods_float64_c:
876 
877  case dods_enum_c:
878  checksum.AddData(reinterpret_cast<uint8_t*>(d_buf), length() * d_proto->width());
879  break;
880 
881  case dods_str_c:
882  case dods_url_c:
883  for (int64_t i = 0, e = length(); i < e; ++i)
884  checksum.AddData(reinterpret_cast<const uint8_t*>(d_str[i].data()), d_str[i].length());
885  break;
886 
887  case dods_opaque_c:
888  case dods_structure_c:
889  case dods_sequence_c:
890  d_proto->compute_checksum(checksum);
891  break;
892 
893  case dods_array_c: // No array of array
894  case dods_grid_c: // No grids in DAP4
895  default:
896  throw InternalErr(__FILE__, __LINE__, "Unknown or unsupported datatype (" + d_proto->type_name() + ").");
897  }
898 }
899 
900 void Vector::intern_data(/*Crc32 &checksum, DMR &dmr, ConstraintEvaluator &eval*/)
901 {
902  if (!read_p())
903  read(); // read() throws Error and InternalErr
904 
905  switch (d_proto->type()) {
906  case dods_byte_c:
907  case dods_char_c:
908  case dods_int8_c:
909  case dods_uint8_c:
910  case dods_int16_c:
911  case dods_uint16_c:
912  case dods_int32_c:
913  case dods_uint32_c:
914  case dods_int64_c:
915  case dods_uint64_c:
916 
917  case dods_enum_c:
918 
919  case dods_float32_c:
920  case dods_float64_c:
921 
922  case dods_str_c:
923  case dods_url_c:
924 #if 0
925  compute_checksum(checksum);
926 #endif
927  break;
928 
929  case dods_opaque_c:
930  case dods_structure_c:
931  case dods_sequence_c:
932  // Modified the assert here from '... != 0' to '... >= length())
933  // to accommodate the case of a zero-length array. jhrg 1/28/16
934  assert(d_compound_buf.capacity() >= (unsigned)length());
935 
936  for (int i = 0, e = length(); i < e; ++i)
937  d_compound_buf[i]->intern_data(/*checksum, dmr, eval*/);
938  break;
939 
940  case dods_array_c: // No Array of Array in DAP4 either...
941  case dods_grid_c:
942  default:
943  throw InternalErr(__FILE__, __LINE__, "Unknown or unsupported datatype (" + d_proto->type_name() + ").");
944  }
945 }
946 
947 void
948 Vector::serialize(D4StreamMarshaller &m, DMR &dmr, bool filter /*= false*/)
949 {
950  if (!read_p())
951  read(); // read() throws Error and InternalErr
952 #if 0
953  if (filter && !eval.eval_selection(dmr, dataset()))
954  return true;
955 #endif
956  int64_t num = length(); // The constrained length in elements
957 
958  DBG(cerr << __func__ << ", num: " << num << endl);
959 
960  // Added in case we're trying to serialize a zero-length array. jhrg 1/27/16
961  if (num == 0)
962  return;
963 
964  switch (d_proto->type()) {
965  case dods_byte_c:
966  case dods_char_c:
967  case dods_int8_c:
968  case dods_uint8_c:
969  m.put_vector(d_buf, num);
970  break;
971 
972  case dods_int16_c:
973  case dods_uint16_c:
974  case dods_int32_c:
975  case dods_uint32_c:
976  case dods_int64_c:
977  case dods_uint64_c:
978  m.put_vector(d_buf, num, d_proto->width());
979  break;
980 
981  case dods_enum_c:
982  if (d_proto->width() == 1)
983  m.put_vector(d_buf, num);
984  else
985  m.put_vector(d_buf, num, d_proto->width());
986  break;
987 
988  case dods_float32_c:
989  m.put_vector_float32(d_buf, num);
990  break;
991 
992  case dods_float64_c:
993  m.put_vector_float64(d_buf, num);
994  break;
995 
996  case dods_str_c:
997  case dods_url_c:
998  assert((int64_t)d_str.capacity() >= num);
999 
1000  for (int64_t i = 0; i < num; ++i)
1001  m.put_str(d_str[i]);
1002 
1003  break;
1004 
1005  case dods_array_c:
1006  throw InternalErr(__FILE__, __LINE__, "Array of Array not allowed.");
1007 
1008  case dods_opaque_c:
1009  case dods_structure_c:
1010  case dods_sequence_c:
1011  assert(d_compound_buf.capacity() >= 0);
1012 
1013  for (int64_t i = 0; i < num; ++i) {
1014  DBG(cerr << __func__ << "d_compound_buf[" << i << "] " << d_compound_buf[i] << endl);
1015  d_compound_buf[i]->serialize(m, dmr, filter);
1016  }
1017 
1018  break;
1019 
1020  case dods_grid_c:
1021  throw InternalErr(__FILE__, __LINE__, "Grid is not part of DAP4.");
1022 
1023  default:
1024  throw InternalErr(__FILE__, __LINE__, "Unknown datatype.");
1025  }
1026 
1027 #ifdef CLEAR_LOCAL_DATA
1028  clear_local_data();
1029 #endif
1030 }
1031 
1032 void
1034 {
1035  if (m_is_cardinal_type()) {
1036  if (d_buf)
1038  if (!d_buf)
1040  }
1041 
1042  DBG(cerr << __FUNCTION__ << name() << ", length(): " << length() << endl);
1043 
1044  // Added in case we're trying to deserialize a zero-length array. jhrg 1/27/16
1045  if (length() == 0)
1046  return;
1047 
1048  switch (d_proto->type()) {
1049  case dods_byte_c:
1050  case dods_char_c:
1051  case dods_int8_c:
1052  case dods_uint8_c:
1053  um.get_vector((char *)d_buf, length());
1054  break;
1055 
1056  case dods_int16_c:
1057  case dods_uint16_c:
1058  case dods_int32_c:
1059  case dods_uint32_c:
1060  case dods_int64_c:
1061  case dods_uint64_c:
1062  um.get_vector((char *)d_buf, length(), d_proto->width());
1063  break;
1064 
1065  case dods_enum_c:
1066  if (d_proto->width() == 1)
1067  um.get_vector((char *)d_buf, length());
1068  else
1069  um.get_vector((char *)d_buf, length(), d_proto->width());
1070  break;
1071 
1072  case dods_float32_c:
1073  um.get_vector_float32((char *)d_buf, length());
1074  break;
1075 
1076  case dods_float64_c:
1077  um.get_vector_float64((char *)d_buf, length());
1078  break;
1079 
1080  case dods_str_c:
1081  case dods_url_c: {
1082  int64_t len = length();
1083  d_str.resize((len > 0) ? len : 0); // Fill with NULLs
1084  d_capacity = len; // capacity is number of strings we can fit.
1085 
1086  for (int64_t i = 0; i < len; ++i) {
1087  um.get_str(d_str[i]);
1088  }
1089 
1090  break;
1091  }
1092 
1093  case dods_array_c:
1094  throw InternalErr(__FILE__, __LINE__, "Array of Array not allowed.");
1095 
1096  case dods_opaque_c:
1097  case dods_structure_c:
1098  case dods_sequence_c: {
1099  vec_resize(length());
1100 
1101  for (int64_t i = 0, end = length(); i < end; ++i) {
1102  d_compound_buf[i] = d_proto->ptr_duplicate();
1103  d_compound_buf[i]->deserialize(um, dmr);
1104  }
1105 
1106  break;
1107  }
1108 
1109  case dods_grid_c:
1110  throw InternalErr(__FILE__, __LINE__, "Grid is not part of DAP4.");
1111 
1112  default:
1113  throw InternalErr(__FILE__, __LINE__, "Unknown type.");
1114  }
1115 }
1116 
1144 unsigned int Vector::val2buf(void *val, bool reuse)
1145 {
1146  // Jose Garcia
1147 
1148  // Added for zero-length arrays - support in the handlers. jhrg 1/29/16
1149  if (!val && length() == 0)
1150  return 0;
1151 
1152  // I *think* this method has been mainly designed to be use by read which
1153  // is implemented in the surrogate library. Passing NULL as a pointer to
1154  // this method will be an error of the creator of the surrogate library.
1155  // Even though I recognize the fact that some methods inside libdap++ can
1156  // call val2buf, I think by now no coding bugs such as misusing val2buf
1157  // will be in libdap++, so it will be an internal error from the
1158  // surrogate library.
1159  if (!val)
1160  throw InternalErr(__FILE__, __LINE__, "The incoming pointer does not contain any data.");
1161 
1162  switch (d_proto->type()) {
1163  case dods_byte_c:
1164  case dods_char_c:
1165  case dods_int8_c:
1166  case dods_uint8_c:
1167  case dods_int16_c:
1168  case dods_uint16_c:
1169  case dods_int32_c:
1170  case dods_uint32_c:
1171  case dods_int64_c:
1172  case dods_uint64_c:
1173 
1174  case dods_enum_c:
1175 
1176  case dods_float32_c:
1177  case dods_float64_c:
1178 #if 0
1179  if (d_buf && !reuse)
1181 #endif
1182  // First time or no reuse (free'd above)
1183  if (!d_buf || !reuse)
1185 
1186  // width(true) returns the size in bytes given the constraint
1187  memcpy(d_buf, val, width(true));
1188  break;
1189 
1190  case dods_str_c:
1191  case dods_url_c:
1192  // Assume val points to an array of C++ string objects. Copy
1193  // them into the vector<string> field of this object.
1194  // Note: d_length is the number of elements in the Vector
1195  d_str.resize(d_length);
1196  d_capacity = d_length;
1197  for (int i = 0; i < d_length; ++i)
1198  d_str[i] = *(static_cast<string *> (val) + i);
1199 
1200  break;
1201 
1202  default:
1203  throw InternalErr(__FILE__, __LINE__, "Vector::val2buf: bad type");
1204 
1205  }
1206 
1207  return width(true);
1208 }
1209 
1248 unsigned int Vector::buf2val(void **val)
1249 {
1250  // Jose Garcia
1251  // The same comment in Vector::val2buf applies here!
1252  if (!val)
1253  throw InternalErr(__FILE__, __LINE__, "NULL pointer.");
1254 
1255  unsigned int wid = static_cast<unsigned int> (width(true /* constrained */));
1256 
1257  // This is the width computed using length(). The
1258  // length() property is changed when a projection
1259  // constraint is applied. Thus this is the number of
1260  // bytes in the buffer given the current constraint.
1261 
1262  switch (d_proto->type()) {
1263  case dods_byte_c:
1264  case dods_char_c:
1265  case dods_int8_c:
1266  case dods_uint8_c:
1267  case dods_int16_c:
1268  case dods_uint16_c:
1269  case dods_int32_c:
1270  case dods_uint32_c:
1271  case dods_int64_c:
1272  case dods_uint64_c:
1273 
1274  case dods_enum_c:
1275 
1276  case dods_float32_c:
1277  case dods_float64_c:
1278  if (!d_buf)
1279  throw InternalErr(__FILE__, __LINE__, "Vector::buf2val: Logic error: called when cardinal type data buffer was empty!");
1280  if (!*val)
1281  *val = new char[wid];
1282 
1283  memcpy(*val, d_buf, wid);
1284  return wid;
1285 
1286  case dods_str_c:
1287  case dods_url_c: {
1288  if (d_str.empty())
1289  throw InternalErr(__FILE__, __LINE__, "Vector::buf2val: Logic error: called when string data buffer was empty!");
1290  if (!*val)
1291  *val = new string[d_length];
1292 
1293  for (int i = 0; i < d_length; ++i)
1294  *(static_cast<string *> (*val) + i) = d_str[i];
1295 
1296  return width();
1297  }
1298 
1299  default:
1300  throw InternalErr(__FILE__, __LINE__, "Vector::buf2val: bad type");
1301  }
1302 
1303  //return wid;
1304 }
1305 
1326 void Vector::set_vec(unsigned int i, BaseType * val)
1327 {
1329 }
1330 
1342 void Vector::set_vec_nocopy(unsigned int i, BaseType * val)
1343 {
1344  // Jose Garcia
1345  // This is a public method which allows users to set the elements
1346  // of *this* vector. Passing an invalid index, a NULL pointer or
1347  // mismatching the vector type are internal errors.
1348  if (i >= static_cast<unsigned int> (d_length))
1349  throw InternalErr(__FILE__, __LINE__, "Invalid data: index too large.");
1350  if (!val)
1351  throw InternalErr(__FILE__, __LINE__, "Invalid data: null pointer to BaseType object.");
1352  if (val->type() != d_proto->type())
1353  throw InternalErr(__FILE__, __LINE__, "invalid data: type of incoming object does not match *this* vector type.");
1354 
1355  // This code originally used capacity() instead of size(), but that was an error.
1356  // Use capacity() when using reserve() and size() when using resize(). Mixing
1357  // capacity() with resize() leaves holes in the data, where (pointer) values are
1358  // filled with nulls during successive calls to resize(). The resize() heuristic
1359  // remembers previous calls on a given vector<> and allocates larger than requested
1360  // blocks of memory on successive calls, which has the strange affect of erasing
1361  // values already in the vector in the parts just added.
1362  // jhrg 5/18/17
1363  if (i >= d_compound_buf.size()) {
1364  vec_resize(d_compound_buf.size() + 100);
1365  }
1366 
1367  d_compound_buf[i] = val;
1368 }
1369 
1380 {
1381  if (d_buf) {
1382  delete[] d_buf;
1383  d_buf = 0;
1384  }
1385 
1386  for (unsigned int i = 0; i < d_compound_buf.size(); ++i) {
1387  delete d_compound_buf[i];
1388  d_compound_buf[i] = 0;
1389  }
1390 
1391  // Force memory to be reclaimed.
1392  d_compound_buf.resize(0);
1393  d_str.resize(0);
1394 
1395  d_capacity = 0;
1396  set_read_p(false);
1397 }
1398 
1406 unsigned int Vector::get_value_capacity() const
1407 {
1408  return d_capacity;
1409 }
1410 
1420 void Vector::reserve_value_capacity(unsigned int numElements)
1421 {
1422  if (!d_proto) {
1423  throw InternalErr(__FILE__, __LINE__, "reserve_value_capacity: Logic error: _var is null!");
1424  }
1425  switch (d_proto->type()) {
1426  case dods_byte_c:
1427  case dods_char_c:
1428  case dods_int8_c:
1429  case dods_uint8_c:
1430  case dods_int16_c:
1431  case dods_uint16_c:
1432  case dods_int32_c:
1433  case dods_uint32_c:
1434  case dods_int64_c:
1435  case dods_uint64_c:
1436 
1437  case dods_enum_c:
1438 
1439  case dods_float32_c:
1440  case dods_float64_c:
1441  // Make _buf be the right size and set _capacity
1443  break;
1444 
1445  case dods_str_c:
1446  case dods_url_c:
1447  // Make sure the d_str has enough room for all the strings.
1448  // Technically not needed, but it will speed things up for large arrays.
1449  d_str.reserve(numElements);
1450  d_capacity = numElements;
1451  break;
1452 
1453  case dods_array_c:
1454  throw InternalErr(__FILE__, __LINE__, "reserve_value_capacity: Arrays not supported!");
1455 
1456  case dods_opaque_c:
1457  case dods_structure_c:
1458  case dods_sequence_c:
1459  case dods_grid_c:
1460  // not clear anyone will go this path, but best to be complete.
1461  d_compound_buf.reserve(numElements);
1462  d_capacity = numElements;
1463  break;
1464 
1465  default:
1466  throw InternalErr(__FILE__, __LINE__, "reserve_value_capacity: Unknown type!");
1467  } // switch
1468 
1469 }
1470 
1477 {
1478  // Use the current length of the vector as the reserve amount.
1480 }
1481 
1510 unsigned int
1511 Vector::set_value_slice_from_row_major_vector(const Vector& rowMajorDataC, unsigned int startElement)
1512 {
1513  static const string funcName = "set_value_slice_from_row_major_vector:";
1514 
1515  // semantically const from the caller's viewpoint, but some calls are not syntactic const.
1516  Vector& rowMajorData = const_cast<Vector&>(rowMajorDataC);
1517 
1518  bool typesMatch = rowMajorData.var() && d_proto && (rowMajorData.var()->type() == d_proto->type());
1519  if (!typesMatch) {
1520  throw InternalErr(__FILE__, __LINE__, funcName + "Logic error: types do not match so cannot be copied!");
1521  }
1522 
1523  // Make sure the data exists
1524  if (!rowMajorData.read_p()) {
1525  throw InternalErr(__FILE__, __LINE__,
1526  funcName + "Logic error: the Vector to copy data from has !read_p() and should have been read in!");
1527  }
1528 
1529  // Check this otherwise the static_cast<unsigned int> below will do the wrong thing.
1530  if (rowMajorData.length() < 0) {
1531  throw InternalErr(__FILE__, __LINE__,
1532  funcName
1533  + "Logic error: the Vector to copy data from has length() < 0 and was probably not initialized!");
1534  }
1535 
1536  // The read-in capacity had better be at least the length (the amount we will copy) or we'll memcpy into bad memory
1537  // I imagine we could copy just the capacity rather than throw, but I really think this implies a problem to be addressed.
1538  if (rowMajorData.get_value_capacity() < static_cast<unsigned int>(rowMajorData.length())) {
1539  throw InternalErr(__FILE__, __LINE__,
1540  funcName
1541  + "Logic error: the Vector to copy from has a data capacity less than its length, can't copy!");
1542  }
1543 
1544  // Make sure there's enough room in this Vector to store all the elements requested. Again,
1545  // better to throw than just copy what we can since it implies a logic error that needs to be solved.
1546  if (d_capacity < (startElement + rowMajorData.length())) {
1547  throw InternalErr(__FILE__, __LINE__,
1548  funcName + "Logic error: the capacity of this Vector cannot hold all the data in the from Vector!");
1549  }
1550 
1551  // OK, at this point we're pretty sure we can copy the data, but we have to do it differently depending on type.
1552  switch (d_proto->type()) {
1553  case dods_int8_c:
1554  case dods_uint8_c:
1555  case dods_byte_c:
1556  case dods_char_c:
1557  case dods_int16_c:
1558  case dods_uint16_c:
1559  case dods_int32_c:
1560  case dods_uint32_c:
1561  case dods_int64_c:
1562  case dods_uint64_c:
1563 
1564  case dods_enum_c:
1565 
1566  case dods_float32_c:
1567  case dods_float64_c: {
1568  if (!d_buf) {
1569  throw InternalErr(__FILE__, __LINE__, funcName + "Logic error: this->_buf was unexpectedly null!");
1570  }
1571  if (!rowMajorData.d_buf) {
1572  throw InternalErr(__FILE__, __LINE__, funcName + "Logic error: rowMajorData._buf was unexpectedly null!");
1573  }
1574  // memcpy the data into this, taking care to do ptr arithmetic on bytes and not sizeof(element)
1575  int varWidth = d_proto->width();
1576  char* pFromBuf = rowMajorData.d_buf;
1577  int numBytesToCopy = rowMajorData.width(true);
1578  char* pIntoBuf = d_buf + (startElement * varWidth);
1579  memcpy(pIntoBuf, pFromBuf, numBytesToCopy);
1580  break;
1581  }
1582 
1583  case dods_str_c:
1584  case dods_url_c:
1585  // Strings need to be copied directly
1586  for (unsigned int i = 0; i < static_cast<unsigned int>(rowMajorData.length()); ++i) {
1587  d_str[startElement + i] = rowMajorData.d_str[i];
1588  }
1589  break;
1590 
1591  case dods_array_c:
1592  case dods_opaque_c:
1593  case dods_structure_c:
1594  case dods_sequence_c:
1595  case dods_grid_c:
1596  // Not sure that this function will be used for these type of nested objects, so I will throw here.
1597  throw InternalErr(__FILE__, __LINE__,
1598  funcName + "Unimplemented method for Vectors of type: array, opaque, structure, sequence or grid.");
1599 
1600  default:
1601  throw InternalErr(__FILE__, __LINE__, funcName + ": Unknown type!");
1602  } // switch (_var->type())
1603 
1604  // This is how many elements we copied.
1605  return (unsigned int) rowMajorData.length();
1606 }
1607 
1616 template <typename T>
1617 static bool types_match(Type t, T *cpp_var)
1618 {
1619  switch (t) {
1620  case dods_byte_c:
1621  case dods_char_c:
1622  case dods_uint8_c:
1623  return typeid(cpp_var) == typeid(dods_byte*);
1624 
1625  case dods_int8_c:
1626  return typeid(cpp_var) == typeid(dods_int8*);
1627  case dods_int16_c:
1628  return typeid(cpp_var) == typeid(dods_int16*);
1629  case dods_uint16_c:
1630  return typeid(cpp_var) == typeid(dods_uint16*);
1631  case dods_int32_c:
1632  return typeid(cpp_var) == typeid(dods_int32*);
1633  case dods_uint32_c:
1634  return typeid(cpp_var) == typeid(dods_uint32*);
1635  case dods_int64_c:
1636  return typeid(cpp_var) == typeid(dods_int64*);
1637  case dods_uint64_c:
1638  return typeid(cpp_var) == typeid(dods_uint64*);
1639 
1640  case dods_float32_c:
1641  return typeid(cpp_var) == typeid(dods_float32*);
1642  case dods_float64_c:
1643  return typeid(cpp_var) == typeid(dods_float64*);
1644 
1645  case dods_null_c:
1646  case dods_enum_c:
1647  case dods_str_c:
1648  case dods_url_c:
1649  case dods_opaque_c:
1650  case dods_array_c:
1651  case dods_structure_c:
1652  case dods_sequence_c:
1653  case dods_group_c:
1654  default:
1655  return false;
1656  }
1657 }
1658 
1660 
1662 template <typename T>
1663 bool Vector::set_value_worker(T *v, int sz)
1664 {
1665  if (!v || !types_match(d_proto->type() == dods_enum_c ? static_cast<D4Enum*>(d_proto)->element_type() : d_proto->type(), v))
1666  return false;
1667 
1669  return true;
1670 }
1671 
1672 bool Vector::set_value(dods_byte *val, int sz)
1673 {
1674  return set_value_worker(val, sz);
1675 }
1676 bool Vector::set_value(dods_int8 *val, int sz)
1677 {
1678  return set_value_worker(val, sz);
1679 }
1680 bool Vector::set_value(dods_int16 *val, int sz)
1681 {
1682  return set_value_worker(val, sz);
1683 }
1684 bool Vector::set_value(dods_uint16 *val, int sz)
1685 {
1686  return set_value_worker(val, sz);
1687 }
1688 bool Vector::set_value(dods_int32 *val, int sz)
1689 {
1690  return set_value_worker(val, sz);
1691 }
1692 bool Vector::set_value(dods_uint32 *val, int sz)
1693 {
1694  return set_value_worker(val, sz);
1695 }
1696 bool Vector::set_value(dods_int64 *val, int sz)
1697 {
1698  return set_value_worker(val, sz);
1699 }
1700 bool Vector::set_value(dods_uint64 *val, int sz)
1701 {
1702  return set_value_worker(val, sz);
1703 }
1704 bool Vector::set_value(dods_float32 *val, int sz)
1705 {
1706  return set_value_worker(val, sz);
1707 }
1708 bool Vector::set_value(dods_float64 *val, int sz)
1709 {
1710  return set_value_worker(val, sz);
1711 }
1712 
1720 bool Vector::set_value(string *val, int sz)
1721 {
1722  if ((var()->type() == dods_str_c || var()->type() == dods_url_c) && val) {
1723  d_str.resize(sz);
1724  d_capacity = sz;
1725  for (int t = 0; t < sz; t++) {
1726  d_str[t] = (*val)[t];
1727  }
1728  set_length(sz);
1729  set_read_p(true);
1730  return true;
1731  }
1732  else {
1733  return false;
1734  }
1735 }
1736 
1737 template<typename T>
1738 bool Vector::set_value_worker(vector<T> &v, int sz)
1739 {
1740  return set_value(&v[0], sz);
1741 }
1742 
1743 bool Vector::set_value(vector<dods_byte> &val, int sz)
1744 {
1745  return set_value_worker(val, sz);
1746 }
1747 bool Vector::set_value(vector<dods_int8> &val, int sz)
1748 {
1749  return set_value_worker(val, sz);
1750 }
1751 bool Vector::set_value(vector<dods_int16> &val, int sz)
1752 {
1753  return set_value_worker(val, sz);
1754 }
1755 bool Vector::set_value(vector<dods_uint16> &val, int sz)
1756 {
1757  return set_value_worker(val, sz);
1758 }
1759 bool Vector::set_value(vector<dods_int32> &val, int sz)
1760 {
1761  return set_value_worker(val, sz);
1762 }
1763 bool Vector::set_value(vector<dods_uint32> &val, int sz)
1764 {
1765  return set_value_worker(val, sz);
1766 }
1767 bool Vector::set_value(vector<dods_int64> &val, int sz)
1768 {
1769  return set_value_worker(val, sz);
1770 }
1771 bool Vector::set_value(vector<dods_uint64> &val, int sz)
1772 {
1773  return set_value_worker(val, sz);
1774 }
1775 bool Vector::set_value(vector<dods_float32> &val, int sz)
1776 {
1777  return set_value_worker(val, sz);
1778 }
1779 bool Vector::set_value(vector<dods_float64> &val, int sz)
1780 {
1781  return set_value_worker(val, sz);
1782 }
1783 
1784 
1786 bool Vector::set_value(vector<string> &val, int sz)
1787 {
1788  if (var()->type() == dods_str_c || var()->type() == dods_url_c) {
1789  d_str.resize(sz);
1790  d_capacity = sz;
1791  for (int t = 0; t < sz; t++) {
1792  d_str[t] = val[t];
1793  }
1794  set_length(sz);
1795  set_read_p(true);
1796  return true;
1797  }
1798  else {
1799  return false;
1800  }
1801 }
1803 
1805 
1822 template <typename T>
1823 void Vector::value_worker(vector<unsigned int> *indices, T *b) const
1824 {
1825  // unsigned long currentIndex;
1826 #if 0
1827  // Iterator version. Not tested, jhrg 8/14/13
1828  for (vector<unsigned int>::iterator i = indices->begin(), e = indices->end(); i != e; ++i) {
1829  unsigned long currentIndex = *i;
1830  if(currentIndex > (unsigned int)length()){
1831  stringstream s;
1832  s << "Vector::value() - Subset index[" << i - subsetIndex->begin() << "] = " << currentIndex << " references a value that is " <<
1833  "outside the bounds of the internal storage [ length()= " << length() << " ] name: '" << name() << "'. ";
1834  throw Error(s.str());
1835  }
1836  b[i - indices->begin()] = reinterpret_cast<T*>(d_buf )[currentIndex];
1837  }
1838 #endif
1839  for (unsigned long i = 0, e = indices->size(); i < e; ++i) {
1840  unsigned long currentIndex = (*indices)[i];
1841  if (currentIndex > (unsigned int)length()) {
1842  stringstream s;
1843  s << "Vector::value() - Subset index[" << i << "] = " << currentIndex << " references a value that is " <<
1844  "outside the bounds of the internal storage [ length()= " << length() << " ] name: '" << name() << "'. ";
1845  throw Error(s.str());
1846  }
1847  b[i] = reinterpret_cast<T*>(d_buf )[currentIndex]; // I like this version - and it works!
1848  }
1849 }
1850 void Vector::value(vector<unsigned int> *indices, dods_byte *b) const { value_worker(indices, b); }
1851 void Vector::value(vector<unsigned int> *indices, dods_int8 *b) const { value_worker(indices, b); }
1852 void Vector::value(vector<unsigned int> *indices, dods_int16 *b) const { value_worker(indices, b); }
1853 void Vector::value(vector<unsigned int> *indices, dods_uint16 *b) const { value_worker(indices, b); }
1854 void Vector::value(vector<unsigned int> *indices, dods_int32 *b) const { value_worker(indices, b); }
1855 void Vector::value(vector<unsigned int> *indices, dods_uint32 *b) const { value_worker(indices, b); }
1856 void Vector::value(vector<unsigned int> *indices, dods_int64 *b) const { value_worker(indices, b); }
1857 void Vector::value(vector<unsigned int> *indices, dods_uint64 *b) const { value_worker(indices, b); }
1858 void Vector::value(vector<unsigned int> *indices, dods_float32 *b) const { value_worker(indices, b); }
1859 void Vector::value(vector<unsigned int> *indices, dods_float64 *b) const { value_worker(indices, b); }
1860 
1861 #if 0
1862 template void Vector::value(vector<unsigned int> *indices, dods_byte *b) const;
1863 template void Vector::value(vector<unsigned int> *indices, dods_int8 *b) const;
1864 template void Vector::value(vector<unsigned int> *indices, dods_int16 *b) const;
1865 template void Vector::value(vector<unsigned int> *indices, dods_uint16 *b) const;
1866 template void Vector::value(vector<unsigned int> *indices, dods_int32 *b) const;
1867 template void Vector::value(vector<unsigned int> *indices, dods_uint32 *b) const;
1868 template void Vector::value(vector<unsigned int> *indices, dods_int64 *b) const;
1869 template void Vector::value(vector<unsigned int> *indices, dods_uint64 *b) const;
1870 template void Vector::value(vector<unsigned int> *indices, dods_float32 *b) const;
1871 template void Vector::value(vector<unsigned int> *indices, dods_float64 *b) const;
1872 #endif
1873 
1875 void Vector::value(vector<unsigned int> *subsetIndex, vector<string> &b) const
1876 {
1877  unsigned long currentIndex;
1878 
1879  if (d_proto->type() == dods_str_c || d_proto->type() == dods_url_c){
1880  for(unsigned long i=0; i<subsetIndex->size() ;++i){
1881  currentIndex = (*subsetIndex)[i] ;
1882  if(currentIndex > (unsigned int)length()){
1883  stringstream s;
1884  s << "Vector::value() - Subset index[" << i << "] = " << currentIndex << " references a value that is " <<
1885  "outside the bounds of the internal storage [ length()= " << length() << " ] name: '" << name() << "'. ";
1886  throw Error(s.str());
1887  }
1888  b[i] = d_str[currentIndex];
1889  }
1890  }
1891 }
1892 
1893 template <typename T>
1894 void Vector::value_worker(T *v) const
1895 {
1896  // Only copy if v is not null and the proto's type matches.
1897  // For Enums, use the element type since type == dods_enum_c.
1898  if (v && types_match(d_proto->type() == dods_enum_c ? static_cast<D4Enum*>(d_proto)->element_type() : d_proto->type(), v))
1899  memcpy(v, d_buf, length() * sizeof(T));
1900 }
1901 void Vector::value(dods_byte *b) const { value_worker(b); }
1902 void Vector::value(dods_int8 *b) const { value_worker(b); }
1903 void Vector::value(dods_int16 *b) const { value_worker(b); }
1904 void Vector::value(dods_uint16 *b) const { value_worker(b); }
1905 void Vector::value(dods_int32 *b) const { value_worker(b); }
1906 void Vector::value(dods_uint32 *b) const { value_worker(b); }
1907 void Vector::value(dods_int64 *b) const { value_worker(b); }
1908 void Vector::value(dods_uint64 *b) const { value_worker(b); }
1909 void Vector::value(dods_float32 *b) const { value_worker(b); }
1910 void Vector::value(dods_float64 *b) const { value_worker(b); }
1911 
1912 #if 0
1913 template void Vector::value(dods_byte *v) const;
1914 template void Vector::value(dods_int8 *v) const;
1915 template void Vector::value(dods_int16 *v) const;
1916 template void Vector::value(dods_uint16 *v) const;
1917 template void Vector::value(dods_int32 *v) const;
1918 template void Vector::value(dods_uint32 *v) const;
1919 template void Vector::value(dods_int64 *v) const;
1920 template void Vector::value(dods_uint64 *v) const;
1921 template void Vector::value(dods_float32 *v) const;
1922 template void Vector::value(dods_float64 *v) const;
1923 #endif
1924 
1925 
1927 void Vector::value(vector<string> &b) const
1928 {
1929  if (d_proto->type() == dods_str_c || d_proto->type() == dods_url_c)
1930  b = d_str;
1931 }
1932 
1936 {
1937  void *buffer = new char[width(true)];
1938 
1939  memcpy(buffer, d_buf, width(true));
1940 
1941  return buffer;
1942 }
1944 
1961 {
1962 #if 0
1963  // Why doesn't this work? tried all 3 variants. jhrg 8/14/13
1964  Vector::add_var_nocopy(v->ptr_duplicate(), p);
1965  add_var_nocopy(v->ptr_duplicate(), p);
1966  add_var_nocopy(v->ptr_duplicate());
1967 #else
1968  // Delete the current template variable
1969  if (d_proto) {
1970  delete d_proto;
1971  d_proto = 0;
1972  }
1973 
1974  // if 'v' is null, just set _var to null and exit.
1975  if (!v) {
1976  d_proto = 0;
1977  }
1978  else {
1979  // Jose Garcia
1980  // By getting a copy of this object to be assigned to _var
1981  // we let the owner of 'v' to deallocate it as necessary.
1982  d_proto = v->ptr_duplicate();
1983 
1984  // If 'v' has a name, use it as the name of the array. If v doesn't have
1985  // a name, then make sure to copy the array's name to it
1986  // so that software which uses the template's name will still work.
1987  if (!v->name().empty())
1988  set_name(v->name());
1989  else
1990  d_proto->set_name(name());
1991 
1992  d_proto->set_parent(this); // Vector --> child
1993 
1994  DBG(cerr << "Vector::add_var: Added variable " << v << " ("
1995  << v->name() << " " << v->type_name() << ")" << endl);
1996  }
1997 #endif
1998 }
1999 
2000 void Vector::add_var_nocopy(BaseType * v, Part)
2001 {
2002  // Delete the current template variable
2003  if (d_proto) {
2004  delete d_proto;
2005  d_proto = 0;
2006  }
2007 
2008  // if 'v' is null, just set _var to null and exit.
2009  if (!v) {
2010  d_proto = 0;
2011  }
2012  else {
2013  d_proto = v;
2014 
2015  // If 'v' has a name, use it as the name of the array. If it *is*
2016  // empty, then make sure to copy the array's name to the template
2017  // so that software which uses the template's name will still work.
2018  if (!v->name().empty())
2019  set_name(v->name());
2020  else
2021  d_proto->set_name(name());
2022 
2023  d_proto->set_parent(this); // Vector is the parent; proto is the child
2024 
2025  DBG(cerr << "Vector::add_var_no_copy: Added variable " << v << " ("
2026  << v->name() << " " << v->type_name() << ")" << endl);
2027  }
2028 }
2029 
2030 bool Vector::check_semantics(string & msg, bool)
2031 {
2032  return BaseType::check_semantics(msg);
2033 }
2034 
2043 void Vector::dump(ostream &strm) const
2044 {
2045  strm << DapIndent::LMarg << "Vector::dump - (" << (void *) this << ")" << endl;
2046  DapIndent::Indent();
2047  BaseType::dump(strm);
2048  strm << DapIndent::LMarg << "# elements in vector: " << d_length << endl;
2049  if (d_proto) {
2050  strm << DapIndent::LMarg << "base type:" << endl;
2051  DapIndent::Indent();
2052  d_proto->dump(strm);
2053  DapIndent::UnIndent();
2054  }
2055  else {
2056  strm << DapIndent::LMarg << "base type: not set" << endl;
2057  }
2058  strm << DapIndent::LMarg << "vector contents:" << endl;
2059  DapIndent::Indent();
2060  for (unsigned i = 0; i < d_compound_buf.size(); ++i) {
2061  if (d_compound_buf[i])
2062  d_compound_buf[i]->dump(strm);
2063  else
2064  strm << DapIndent::LMarg << "vec[" << i << "] is null" << endl;
2065  }
2066  DapIndent::UnIndent();
2067  strm << DapIndent::LMarg << "strings:" << endl;
2068  DapIndent::Indent();
2069  for (unsigned i = 0; i < d_str.size(); i++) {
2070  strm << DapIndent::LMarg << d_str[i] << endl;
2071  }
2072  DapIndent::UnIndent();
2073  if (d_buf) {
2074  switch (d_proto != 0 ? d_proto->type() : 0) {
2075  case dods_byte_c:
2076  case dods_char_c:
2077  strm << DapIndent::LMarg << "_buf: ";
2078  strm.write(d_buf, d_length);
2079  strm << endl;
2080  break;
2081 
2082  case 0:
2083  default:
2084  strm << DapIndent::LMarg << "_buf: " << (void *) d_buf << endl;
2085  break;
2086  }
2087  }
2088  else {
2089  strm << DapIndent::LMarg << "_buf: EMPTY" << endl;
2090  }
2091 
2092  DapIndent::UnIndent();
2093 }
2094 
2095 } // namespace libdap
2096 
virtual bool read()
Read data into a local buffer.
Definition: BaseType.cc:899
-
virtual bool read_p()
Has this variable been read?
Definition: BaseType.cc:480
-
virtual string name() const
Returns the name of the class instance.
Definition: BaseType.cc:320
-
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
void set_vec(unsigned int i, BaseType *val)
Sets element i to value val.
Definition: Vector.cc:1326
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: BaseType.cc:291
-
Part
Names the parts of multi-section constructor data types.
Definition: Type.h:48
-
virtual void set_name(const string &n)
Sets the name of the class instance.
Definition: BaseType.cc:344
-
Holds a one-dimensional collection of DAP2 data types.
Definition: Vector.h:80
-
virtual unsigned int width(bool constrained=false) const
Returns the width of the data, in bytes.
Definition: Vector.cc:536
-
virtual void intern_data()
Read data into this variable.
Definition: Vector.cc:900
-
virtual void clear_local_data()
Definition: Vector.cc:1379
-
Read data from the stream made by D4StreamMarshaller.
-
virtual void compute_checksum(Crc32 &checksum)
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
Definition: Vector.cc:858
-
virtual void set_read_p(bool state)
Indicates that the data is ready to send.
Definition: Vector.cc:391
-
Definition: crc.h:76
-
virtual void add_var(BaseType *v, Part p=nil)
Add the BaseType pointer to this constructor type instance.
Definition: Vector.cc:1960
-
virtual int element_count(bool leaves)
Count the members of constructor types.
Definition: Vector.cc:333
-
virtual void * value()
Definition: Vector.cc:1935
-
void m_set_cardinal_values_internal(const CardType *fromArray, int numElts)
Definition: Vector.cc:219
-
virtual unsigned int set_value_slice_from_row_major_vector(const Vector &rowMajorData, unsigned int startElement)
Definition: Vector.cc:1511
-
virtual void put_vector_float32(char *val, int64_t num_elem)
Write a fixed size vector.
-
Type
Identifies the data type.
Definition: Type.h:94
-
virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
Serialize a Vector.
Definition: Vector.cc:661
-
virtual void set_parent(BaseType *parent)
Definition: BaseType.cc:733
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
virtual BaseType * var(const string &name="", bool exact_match=true, btp_stack *s=0)
Definition: Vector.cc:433
-
virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)
Receive data from the net.
Definition: Vector.cc:755
-
virtual BaseType * var(const string &name="", bool exact_match=true, btp_stack *s=0)
Returns a pointer to a member of a constructor class.
Definition: BaseType.cc:758
-
virtual void compute_checksum(Crc32 &checksum)=0
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
-
Holds a DAP4 enumeration.
Definition: D4Enum.h:61
-
virtual int element_count(bool leaves=false)
Count the members of constructor types.
Definition: BaseType.cc:443
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
-
virtual void set_send_p(bool state)
Definition: BaseType.cc:568
-
virtual bool is_constructor_type() const
Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable...
Definition: BaseType.cc:412
- -
void set_vec_nocopy(unsigned int i, BaseType *val)
Sets element i to value val. Set the ith element to val. Extend the vector if needed.
Definition: Vector.cc:1342
-
bool m_is_cardinal_type() const
Definition: Vector.cc:125
-
virtual Type type() const
Returns the type of the class instance.
Definition: BaseType.cc:365
-
virtual void reserve_value_capacity()
Definition: Vector.cc:1476
-
virtual void set_read_p(bool state)
Sets the value of the read_p property.
Definition: BaseType.cc:516
-
Vector(const string &n, BaseType *v, const Type &t, bool is_dap4=false)
The Vector constructor.
Definition: Vector.cc:248
-
virtual unsigned int val2buf(void *val, bool reuse=false)
Reads data into the Vector buffer.
Definition: Vector.cc:1144
-
virtual bool check_semantics(string &msg, bool all=false)
Compare an object&#39;s current state with the semantics of its type.
Definition: Vector.cc:2030
-
void m_delete_cardinal_data_buffer()
Definition: Vector.cc:208
-
void AddData(const uint8_t *pData, const uint32_t length)
Definition: crc.h:98
-
virtual unsigned int val2buf(void *val, bool reuse=false)=0
Loads class data.
-
virtual BaseType * ptr_duplicate()=0
-
string www2id(const string &in, const string &escape, const string &except)
Definition: escaping.cc:220
-
virtual unsigned int get_value_capacity() const
Definition: Vector.cc:1406
-
Evaluate a constraint expression.
-
virtual void set_send_p(bool state)
Indicates that the data is ready to send.
Definition: Vector.cc:354
-
unsigned int m_create_cardinal_data_buffer_for_type(unsigned int numEltsOfType)
Definition: Vector.cc:180
-
virtual void put_vector(char *val, int64_t num_bytes)
Write a fixed size vector.
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
-
virtual string type_name() const
Returns the type of the class instance as a string.
Definition: BaseType.cc:379
-
virtual void set_name(const std::string &name)
Sets the name of the class instance.
Definition: Vector.cc:323
-
virtual int length() const
Definition: Vector.cc:548
-
virtual unsigned int buf2val(void **val)
Copies data from the Vector buffer.
Definition: Vector.cc:1248
-
bool eval_selection(DDS &dds, const std::string &dataset)
Evaluate a boolean-valued constraint expression. This is main method for the evaluator and is called ...
-
virtual void set_length(int l)
Definition: Vector.cc:555
-
A class for error processing.
Definition: Error.h:92
-
virtual void put_vector_float64(char *val, int64_t num_elem)
Write a fixed size vector of float64s.
-
void vec_resize(int l)
Definition: Vector.cc:568
-
virtual unsigned int width(bool constrained=false) const
How many bytes does this variable use Return the number of bytes of storage this variable uses...
Definition: BaseType.cc:1299
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Vector.cc:2043
-
virtual string dataset() const
Returns the name of the dataset used to create this instance.
Definition: BaseType.cc:358
-
virtual bool check_semantics(string &msg, bool all=false)
Compare an object&#39;s current state with the semantics of its type.
Definition: BaseType.cc:1209
-
-
- - - - diff --git a/html/Vector_8h_source.html b/html/Vector_8h_source.html deleted file mode 100644 index 38a59b902..000000000 --- a/html/Vector_8h_source.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - -libdap: Vector.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Vector.h
-
-
-
1 
2 // -*- mode: c++; c-basic-offset:4 -*-
3 
4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
5 // Access Protocol.
6 
7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
8 // Author: James Gallagher <jgallagher@opendap.org>
9 //
10 // This library is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU Lesser General Public
12 // License as published by the Free Software Foundation; either
13 // version 2.1 of the License, or (at your option) any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public
21 // License along with this library; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 //
24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
25 
26 // (c) COPYRIGHT URI/MIT 1995-1999
27 // Please read the full copyright statement in the file COPYRIGHT_URI.
28 //
29 // Authors:
30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
31 
32 // This is the interface definition file for the abstract class
33 // Vector. Vector is the parent class for List and Array.
34 
35 #ifndef _vector_h
36 #define _vector_h 1
37 
38 #ifndef _basetype_h
39 #include "BaseType.h"
40 #endif
41 
42 #ifndef _dds_h
43 #include "DDS.h"
44 #endif
45 
46 #ifndef constraint_evaluator_h
47 #include "ConstraintEvaluator.h"
48 #endif
49 
50 class Crc32;
51 
52 namespace libdap
53 {
54 
80 class Vector: public BaseType
81 {
82 private:
83  int d_length; // number of elements in the vector
84  BaseType *d_proto; // element prototype for the Vector
85 
86  // _buf was a pointer to void; delete[] complained. 6/4/2001 jhrg
87  char *d_buf; // storage for cardinal data
88  vector<string> d_str; // special storage for strings. jhrg 2/11/05
89  vector<BaseType *> d_compound_buf; // storage for data in compound types (e.g., Structure)
90 
91  // the number of elements we have allocated memory to store.
92  // This should be either the sizeof(buf)/width(bool constrained = false) for cardinal data
93  // or the capacity of d_str for strings or capacity of _vec.
94  unsigned int d_capacity;
95 
96  friend class MarshallerTest;
97 
98  /*
99  * Made these template methods private because they can't be
100  * overridden anyways (because c++...) - ndp 08/14/2015
101  *
102  */
103 
104  template <typename T> void value_worker(T *v) const;
105  template <typename T> void value_worker(vector<unsigned int> *indices, T *b) const;
106 
107  template <typename T> bool set_value_worker(T *v, int sz);
108  template <typename T> bool set_value_worker(vector<T> &v, int sz);
109 
110 protected:
111  // This function copies the private members of Vector.
112  void m_duplicate(const Vector &v);
113 
114  bool m_is_cardinal_type() const;
115  unsigned int m_create_cardinal_data_buffer_for_type(unsigned int numEltsOfType);
117 
118  template <class CardType> void m_set_cardinal_values_internal(const CardType* fromArray, int numElts);
119 
120 public:
121  Vector(const string &n, BaseType *v, const Type &t, bool is_dap4 = false);
122  Vector(const string &n, const string &d, BaseType *v, const Type &t, bool is_dap4 = false);
123  Vector(const Vector &rhs);
124 
125  virtual ~Vector();
126 
127  Vector &operator=(const Vector &rhs);
128  virtual BaseType *ptr_duplicate() = 0;
129 
138  char *get_buf() {
139  return d_buf;
140  }
141 
148  vector<string> &get_str() {
149  return d_str;
150  }
151 
159  vector<BaseType*> &get_compound_buf() {
160  return d_compound_buf;
161  }
162 
163 #if 0
164  virtual bool is_dap2_only_type();
165 #endif
166 
167  virtual BaseType *prototype() const { return d_proto; }
168 
169  virtual void set_name(const std::string& name);
170 
171  virtual int element_count(bool leaves);
172 
173  virtual void set_send_p(bool state);
174 
175  virtual void set_read_p(bool state);
176 
177  virtual unsigned int width(bool constrained = false) const;
178 
179  virtual int length() const;
180 
181  virtual void set_length(int l);
182 
183  // DAP2
184  virtual void intern_data(ConstraintEvaluator &eval, DDS &dds);
185  virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval = true);
186 #if 0
187  virtual bool serialize_no_release(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval = true);
188 #endif
189  virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse = false);
190 
191  // DAP4
192  virtual void compute_checksum(Crc32 &checksum);
193  virtual void intern_data(/*Crc32 &checksum*/);
194  virtual void serialize(D4StreamMarshaller &m, DMR &dmr, bool filter = false);
195 #if 0
196  virtual void serialize_no_release(D4StreamMarshaller &m, DMR &dmr, bool filter = false);
197 #endif
198  virtual void deserialize(D4StreamUnMarshaller &um, DMR &dmr);
199 
200  virtual unsigned int val2buf(void *val, bool reuse = false);
201  virtual unsigned int buf2val(void **val);
202 
203  void set_vec(unsigned int i, BaseType *val);
204  void set_vec_nocopy(unsigned int i, BaseType * val);
205 
206  void vec_resize(int l);
207 
208  virtual void clear_local_data();
209 
210  virtual unsigned int get_value_capacity() const;
211  virtual void reserve_value_capacity(unsigned int numElements);
212  virtual void reserve_value_capacity();
213 
214  virtual unsigned int set_value_slice_from_row_major_vector(const Vector& rowMajorData, unsigned int startElement);
215 
216 
217  virtual bool set_value(dods_byte *val, int sz);
218  virtual bool set_value(dods_int8 *val, int sz);
219  virtual bool set_value(dods_int16 *val, int sz);
220  virtual bool set_value(dods_uint16 *val, int sz);
221  virtual bool set_value(dods_int32 *val, int sz);
222  virtual bool set_value(dods_uint32 *val, int sz);
223  virtual bool set_value(dods_int64 *val, int sz);
224  virtual bool set_value(dods_uint64 *val, int sz);
225  virtual bool set_value(dods_float32 *val, int sz);
226  virtual bool set_value(dods_float64 *val, int sz);
227  virtual bool set_value(string *val, int sz);
228 
229 
230  virtual bool set_value(vector<dods_byte> &val, int sz);
231  virtual bool set_value(vector<dods_int8> &val, int sz);
232  virtual bool set_value(vector<dods_int16> &val, int sz);
233  virtual bool set_value(vector<dods_uint16> &val, int sz);
234  virtual bool set_value(vector<dods_int32> &val, int sz);
235  virtual bool set_value(vector<dods_uint32> &val, int sz);
236  virtual bool set_value(vector<dods_int64> &val, int sz);
237  virtual bool set_value(vector<dods_uint64> &val, int sz);
238  virtual bool set_value(vector<dods_float32> &val, int sz);
239  virtual bool set_value(vector<dods_float64> &val, int sz);
240  virtual bool set_value(vector<string> &val, int sz);
241 
242  virtual void value(dods_byte *b) const;
243  virtual void value(dods_int8 *b) const;
244  virtual void value(dods_int16 *b) const;
245  virtual void value(dods_uint16 *b) const;
246  virtual void value(dods_int32 *b) const;
247  virtual void value(dods_uint32 *b) const;
248  virtual void value(dods_int64 *b) const;
249  virtual void value(dods_uint64 *b) const;
250  virtual void value(dods_float32 *b) const;
251  virtual void value(dods_float64 *b) const;
252  virtual void value(vector<string> &b) const;
253 
254  virtual void value(vector<unsigned int> *indices, dods_byte *b) const;
255  virtual void value(vector<unsigned int> *indices, dods_int8 *b) const;
256  virtual void value(vector<unsigned int> *indices, dods_int16 *b) const;
257  virtual void value(vector<unsigned int> *indices, dods_uint16 *b) const;
258  virtual void value(vector<unsigned int> *indices, dods_int32 *b) const;
259  virtual void value(vector<unsigned int> *indices, dods_uint32 *b) const;
260  virtual void value(vector<unsigned int> *indices, dods_int64 *b) const;
261  virtual void value(vector<unsigned int> *indices, dods_uint64 *b) const;
262  virtual void value(vector<unsigned int> *indices, dods_float32 *b) const;
263  virtual void value(vector<unsigned int> *indices, dods_float64 *b) const;
264  virtual void value(vector<unsigned int> *index, vector<string> &b) const;
265 
266  virtual void *value();
267 
268  virtual BaseType *var(const string &name = "", bool exact_match = true, btp_stack *s = 0);
269  virtual BaseType *var(const string &name, btp_stack &s);
270  virtual BaseType *var(unsigned int i);
271 
272  virtual void add_var(BaseType *v, Part p = nil);
273  virtual void add_var_nocopy(BaseType *v, Part p = nil);
274 
275  virtual bool check_semantics(string &msg, bool all = false);
276 
277  virtual void dump(ostream &strm) const ;
278 };
279 
280 } // namespace libdap
281 
282 #endif /* _vector_h */
virtual string name() const
Returns the name of the class instance.
Definition: BaseType.cc:320
-
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
void set_vec(unsigned int i, BaseType *val)
Sets element i to value val.
Definition: Vector.cc:1326
-
Part
Names the parts of multi-section constructor data types.
Definition: Type.h:48
-
Holds a one-dimensional collection of DAP2 data types.
Definition: Vector.h:80
-
virtual unsigned int width(bool constrained=false) const
Returns the width of the data, in bytes.
Definition: Vector.cc:536
-
virtual void intern_data()
Read data into this variable.
Definition: Vector.cc:900
-
virtual void clear_local_data()
Definition: Vector.cc:1379
-
Read data from the stream made by D4StreamMarshaller.
-
virtual void compute_checksum(Crc32 &checksum)
include the data for this variable in the checksum DAP4 includes a checksum with every data response...
Definition: Vector.cc:858
-
virtual void set_read_p(bool state)
Indicates that the data is ready to send.
Definition: Vector.cc:391
-
Definition: crc.h:76
-
virtual void add_var(BaseType *v, Part p=nil)
Add the BaseType pointer to this constructor type instance.
Definition: Vector.cc:1960
-
virtual int element_count(bool leaves)
Count the members of constructor types.
Definition: Vector.cc:333
-
virtual void * value()
Definition: Vector.cc:1935
-
void m_set_cardinal_values_internal(const CardType *fromArray, int numElts)
Definition: Vector.cc:219
-
virtual unsigned int set_value_slice_from_row_major_vector(const Vector &rowMajorData, unsigned int startElement)
Definition: Vector.cc:1511
-
Type
Identifies the data type.
Definition: Type.h:94
-
virtual bool serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
Serialize a Vector.
Definition: Vector.cc:661
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual BaseType * var(const string &name="", bool exact_match=true, btp_stack *s=0)
Definition: Vector.cc:433
-
virtual bool deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)
Receive data from the net.
Definition: Vector.cc:755
-
vector< string > & get_str()
Definition: Vector.h:148
-
vector< BaseType * > & get_compound_buf()
Definition: Vector.h:159
- -
Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4&#39;s receiv...
- -
void set_vec_nocopy(unsigned int i, BaseType *val)
Sets element i to value val. Set the ith element to val. Extend the vector if needed.
Definition: Vector.cc:1342
-
bool m_is_cardinal_type() const
Definition: Vector.cc:125
-
virtual void reserve_value_capacity()
Definition: Vector.cc:1476
-
Vector(const string &n, BaseType *v, const Type &t, bool is_dap4=false)
The Vector constructor.
Definition: Vector.cc:248
-
virtual unsigned int val2buf(void *val, bool reuse=false)
Reads data into the Vector buffer.
Definition: Vector.cc:1144
-
char * get_buf()
Definition: Vector.h:138
-
virtual bool check_semantics(string &msg, bool all=false)
Compare an object&#39;s current state with the semantics of its type.
Definition: Vector.cc:2030
-
void m_delete_cardinal_data_buffer()
Definition: Vector.cc:208
-
virtual unsigned int get_value_capacity() const
Definition: Vector.cc:1406
-
Evaluate a constraint expression.
-
virtual BaseType * ptr_duplicate()=0
-
virtual void set_send_p(bool state)
Indicates that the data is ready to send.
Definition: Vector.cc:354
-
unsigned int m_create_cardinal_data_buffer_for_type(unsigned int numEltsOfType)
Definition: Vector.cc:180
-
The basic data type for the DODS DAP types.
Definition: BaseType.h:117
-
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
-
virtual void set_name(const std::string &name)
Sets the name of the class instance.
Definition: Vector.cc:323
-
virtual int length() const
Definition: Vector.cc:548
-
virtual unsigned int buf2val(void **val)
Copies data from the Vector buffer.
Definition: Vector.cc:1248
-
virtual void set_length(int l)
Definition: Vector.cc:555
-
void vec_resize(int l)
Definition: Vector.cc:568
-
virtual void dump(ostream &strm) const
dumps information about this object
Definition: Vector.cc:2043
-
-
- - - - diff --git a/html/XDRFileMarshaller_8cc_source.html b/html/XDRFileMarshaller_8cc_source.html deleted file mode 100644 index da07b9e72..000000000 --- a/html/XDRFileMarshaller_8cc_source.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -libdap: XDRFileMarshaller.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
XDRFileMarshaller.cc
-
-
-
1 // XDRFileMarshaller.cc
2 
3 // -*- mode: c++; c-basic-offset:4 -*-
4 
5 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
6 // Access Protocol.
7 
8 // Copyright (c) 2002,2003 OPeNDAP, Inc.
9 // Author: Patrick West <pwest@ucar.edu>
10 //
11 // This library is free software; you can redistribute it and/or
12 // modify it under the terms of the GNU Lesser General Public
13 // License as published by the Free Software Foundation; either
14 // version 2.1 of the License, or (at your option) any later version.
15 //
16 // This library is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 // Lesser General Public License for more details.
20 //
21 // You should have received a copy of the GNU Lesser General Public
22 // License along with this library; if not, write to the Free Software
23 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 //
25 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
26 
27 // (c) COPYRIGHT URI/MIT 1994-1999
28 // Please read the full copyright statement in the file COPYRIGHT_URI.
29 //
30 // Authors:
31 // pwest Patrick West <pwest@ucar.edu>
32 
33 #include "config.h"
34 
35 #include "XDRFileMarshaller.h"
36 
37 #include "Byte.h"
38 #include "Int16.h"
39 #include "UInt16.h"
40 #include "Int32.h"
41 #include "UInt32.h"
42 #include "Float32.h"
43 #include "Float64.h"
44 #include "Str.h"
45 #include "Url.h"
46 #include "Array.h"
47 #include "Structure.h"
48 #include "Sequence.h"
49 #include "Grid.h"
50 
51 #include "util.h"
52 #include "InternalErr.h"
53 #include "DapIndent.h"
54 
55 namespace libdap {
56 
57 XDRFileMarshaller::XDRFileMarshaller(FILE *out) :
58  _sink(0)//, d_out(out)
59 {
60  _sink = new_xdrstdio(out, XDR_ENCODE);
61 }
62 
63 XDRFileMarshaller::XDRFileMarshaller() :
64  Marshaller(), _sink(0)//, d_out(0)
65 {
66  throw InternalErr( __FILE__, __LINE__, "Default constructor not implemented.");
67 }
68 
69 XDRFileMarshaller::XDRFileMarshaller(const XDRFileMarshaller &m) :
70  Marshaller(m), _sink(0)//, d_out(0)
71 {
72  throw InternalErr( __FILE__, __LINE__, "Copy constructor not implemented.");
73 }
74 
75 XDRFileMarshaller &
76 XDRFileMarshaller::operator=(const XDRFileMarshaller &)
77 {
78  throw InternalErr( __FILE__, __LINE__, "Copy operator not implemented.");
79 }
80 
81 XDRFileMarshaller::~XDRFileMarshaller()
82 {
83  delete_xdrstdio(_sink);
84 }
85 
86 void XDRFileMarshaller::put_byte(dods_byte val)
87 {
88  if (!xdr_char(_sink, (char *) &val))
89  throw Error(
90  "Network I/O Error. Could not send byte data.\nThis may be due to a bug in DODS, on the server or a\nproblem with the network connection.");
91 }
92 
93 void XDRFileMarshaller::put_int16(dods_int16 val)
94 {
95  if (!XDR_INT16(_sink, &val))
96  throw Error(
97  "Network I/O Error. Could not send int 16 data.\nThis may be due to a bug in libdap, on the server or a\nproblem with the network connection.");
98 }
99 
100 void XDRFileMarshaller::put_int32(dods_int32 val)
101 {
102  if (!XDR_INT32(_sink, &val))
103  throw Error(
104  "Network I/O Error. Could not read int 32 data.\nThis may be due to a bug in libdap, on the server or a\nproblem with the network connection.");
105 }
106 
107 void XDRFileMarshaller::put_float32(dods_float32 val)
108 {
109  if (!xdr_float(_sink, &val))
110  throw Error(
111  "Network I/O Error. Could not send float 32 data.\nThis may be due to a bug in libdap, on the server or a\nproblem with the network connection.");
112 }
113 
114 void XDRFileMarshaller::put_float64(dods_float64 val)
115 {
116  if (!xdr_double(_sink, &val))
117  throw Error(
118  "Network I/O Error. Could not send float 64 data.\nThis may be due to a bug in libdap, on the server or a\nproblem with the network connection.");
119 }
120 
121 void XDRFileMarshaller::put_uint16(dods_uint16 val)
122 {
123  if (!XDR_UINT16(_sink, &val))
124  throw Error("Network I/O Error. Could not send uint 16 data.");
125 }
126 
127 void XDRFileMarshaller::put_uint32(dods_uint32 val)
128 {
129  if (!XDR_UINT32(_sink, &val))
130  throw Error("Network I/O Error. Could not send uint 32 data.");
131 }
132 
133 void XDRFileMarshaller::put_str(const string &val)
134 {
135  const char *out_tmp = val.c_str();
136 
137  if (!xdr_string(_sink, (char **) &out_tmp, max_str_len))
138  throw Error("Network I/O Error. Could not send string data.");
139 }
140 
141 void XDRFileMarshaller::put_url(const string &val)
142 {
143  put_str(val);
144 }
145 
146 void XDRFileMarshaller::put_opaque(char *val, unsigned int len)
147 {
148  if (!xdr_opaque(_sink, val, len))
149  throw Error("Network I/O Error. Could not send opaque data.");
150 }
151 
152 void XDRFileMarshaller::put_int(int val)
153 {
154  if (!xdr_int(_sink, &val))
155  throw Error("Network I/O Error(1).");
156 }
157 
158 void XDRFileMarshaller::put_vector(char *val, int num, Vector &)
159 {
160  if (!val) throw InternalErr(__FILE__, __LINE__, "Buffer pointer is not set.");
161 
162  put_int(num);
163 
164  if (!xdr_bytes(_sink, (char **) &val, (unsigned int *) &num, DODS_MAX_ARRAY)) {
165  throw Error("Network I/O Error(2).");
166  }
167 }
168 
169 void XDRFileMarshaller::put_vector(char *val, int num, int width, Vector &vec)
170 {
171  if (!val) throw InternalErr(__FILE__, __LINE__, "Buffer pointer is not set.");
172 
173  put_int(num);
174 
175  BaseType *var = vec.var();
176  if (!xdr_array(_sink, (char **) &val, (unsigned int *) &num, DODS_MAX_ARRAY, width,
177  XDRUtils::xdr_coder(var->type()))) {
178  throw Error("Network I/O Error(2).");
179  }
180 }
181 
182 void XDRFileMarshaller::dump(ostream &strm) const
183 {
184  strm << DapIndent::LMarg << "XDRFileMarshaller::dump - (" << (void *) this << ")" << endl;
185 }
186 
187 } // namespace libdap
188 
virtual unsigned int width(bool constrained=false) const
Returns the width of the data, in bytes.
Definition: Vector.cc:536
-
BaseType(const string &n, const Type &t, bool is_dap4=false)
The BaseType constructor.
Definition: BaseType.cc:126
-
virtual void dump(ostream &strm) const
dump the contents of this object to the specified ostream
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual BaseType * var(const string &name="", bool exact_match=true, btp_stack *s=0)
Definition: Vector.cc:433
-
virtual BaseType * var(const string &name="", bool exact_match=true, btp_stack *s=0)
Returns a pointer to a member of a constructor class.
Definition: BaseType.cc:758
-
Vector(const string &n, BaseType *v, const Type &t, bool is_dap4=false)
The Vector constructor.
Definition: Vector.cc:248
-
static xdrproc_t xdr_coder(const Type &t)
Returns a function used to encode elements of an array.
Definition: XDRUtils.cc:145
-
-
- - - - diff --git a/html/XDRFileMarshaller_8h_source.html b/html/XDRFileMarshaller_8h_source.html deleted file mode 100644 index 249051325..000000000 --- a/html/XDRFileMarshaller_8h_source.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - -libdap: XDRFileMarshaller.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
XDRFileMarshaller.h
-
-
-
1 // XDRFileMarshaller.h
2 
3 // -*- mode: c++; c-basic-offset:4 -*-
4 
5 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
6 // Access Protocol.
7 
8 // Copyright (c) 2002,2003 OPeNDAP, Inc.
9 // Author: Patrick West <pwest@ucar.edu>
10 //
11 // This library is free software; you can redistribute it and/or
12 // modify it under the terms of the GNU Lesser General Public
13 // License as published by the Free Software Foundation; either
14 // version 2.1 of the License, or (at your option) any later version.
15 //
16 // This library is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 // Lesser General Public License for more details.
20 //
21 // You should have received a copy of the GNU Lesser General Public
22 // License along with this library; if not, write to the Free Software
23 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 //
25 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
26 
27 // (c) COPYRIGHT URI/MIT 1994-1999
28 // Please read the full copyright statement in the file COPYRIGHT_URI.
29 //
30 // Authors:
31 // pwest Patrick West <pwest@ucar.edu>
32 
33 #ifndef I_XDRFileMarshaller_h
34 #define I_XDRFileMarshaller_h 1
35 
36 #include "Marshaller.h"
37 #include "XDRUtils.h"
38 #if 0
39 #include "Array.h"
40 #include "Vector.h"
41 #endif
42 
43 namespace libdap {
44 
49 private:
50  XDR * _sink;
51 
54  XDRFileMarshaller & operator=(const XDRFileMarshaller &);
55 public:
56  XDRFileMarshaller(FILE *out);
57  virtual ~XDRFileMarshaller();
58 
59  virtual void put_byte(dods_byte val);
60 
61  virtual void put_int16(dods_int16 val);
62  virtual void put_int32(dods_int32 val);
63 
64  virtual void put_float32(dods_float32 val);
65  virtual void put_float64(dods_float64 val);
66 
67  virtual void put_uint16(dods_uint16 val);
68  virtual void put_uint32(dods_uint32 val);
69 
70  virtual void put_str(const string &val);
71  virtual void put_url(const string &val);
72 
73  virtual void put_opaque(char *val, unsigned int len);
74  virtual void put_int(int val);
75 
76  virtual void put_vector(char *val, int num, Vector &vec);
77  virtual void put_vector(char *val, int num, int width, Vector &vec);
78 
79  virtual void dump(ostream &strm) const;
80 };
81 
82 } // namespace libdap
83 
84 #endif // I_XDRFileMarshaller_h
85 
Holds a one-dimensional collection of DAP2 data types.
Definition: Vector.h:80
-
virtual void dump(ostream &strm) const
dump the contents of this object to the specified ostream
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
marshaller that knows how to marshall/serialize dap data objects to a file using XDR ...
-
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
-
-
- - - - diff --git a/html/XDRFileUnMarshaller_8cc_source.html b/html/XDRFileUnMarshaller_8cc_source.html deleted file mode 100644 index a70ba2d1c..000000000 --- a/html/XDRFileUnMarshaller_8cc_source.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -libdap: XDRFileUnMarshaller.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
XDRFileUnMarshaller.cc
-
-
-
1 // XDRFileUnMarshaller.cc
2 
3 // -*- mode: c++; c-basic-offset:4 -*-
4 
5 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
6 // Access Protocol.
7 
8 // Copyright (c) 2002,2003 OPeNDAP, Inc.
9 // Author: Patrick West <pwest@ucar.edu>
10 //
11 // This library is free software; you can redistribute it and/or
12 // modify it under the terms of the GNU Lesser General Public
13 // License as published by the Free Software Foundation; either
14 // version 2.1 of the License, or (at your option) any later version.
15 //
16 // This library is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 // Lesser General Public License for more details.
20 //
21 // You should have received a copy of the GNU Lesser General Public
22 // License along with this library; if not, write to the Free Software
23 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 //
25 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
26 
27 // (c) COPYRIGHT URI/MIT 1994-1999
28 // Please read the full copyright statement in the file COPYRIGHT_URI.
29 //
30 // Authors:
31 // pwest Patrick West <pwest@ucar.edu>
32 
33 #include "config.h"
34 
35 #include "XDRFileUnMarshaller.h"
36 
37 #include "Byte.h"
38 #include "Int16.h"
39 #include "UInt16.h"
40 #include "Int32.h"
41 #include "UInt32.h"
42 #include "Float32.h"
43 #include "Float64.h"
44 #include "Str.h"
45 #include "Url.h"
46 #include "Array.h"
47 #include "Structure.h"
48 #include "Sequence.h"
49 #include "Grid.h"
50 
51 #include "util.h"
52 #include "InternalErr.h"
53 #include "DapIndent.h"
54 
55 namespace libdap {
56 
57 XDRFileUnMarshaller::XDRFileUnMarshaller( FILE *out )
58  : _source( 0 )
59 {
60  _source = new_xdrstdio( out, XDR_DECODE ) ;
61 }
62 
63 XDRFileUnMarshaller::XDRFileUnMarshaller()
64  : UnMarshaller(), _source( 0 )
65 {
66  throw InternalErr( __FILE__, __LINE__, "Default constructor not implemented." ) ;
67 }
68 
69 XDRFileUnMarshaller::XDRFileUnMarshaller( const XDRFileUnMarshaller &um )
70  : UnMarshaller( um ), _source( 0 )
71 {
72  throw InternalErr( __FILE__, __LINE__, "Copy constructor not implemented." ) ;
73 }
74 
75 XDRFileUnMarshaller &
76 XDRFileUnMarshaller::operator=( const XDRFileUnMarshaller & )
77 {
78  throw InternalErr( __FILE__, __LINE__, "Copy operator not implemented." ) ;
79 }
80 
81 XDRFileUnMarshaller::~XDRFileUnMarshaller( )
82 {
83  // Some static code analysis tools complain that delete_xdrstdio
84  // does not close the FILE* it holds, but that's not true with
85  // modern XDR libraries. Don't try to close that FILE*. jhrg 8/27/13
86 
87  delete_xdrstdio( _source ) ;
88 }
89 
90 void
91 XDRFileUnMarshaller::get_byte( dods_byte &val )
92 {
93  if( !xdr_char( _source, (char *)&val ) )
94  throw Error("Network I/O Error. Could not read byte data.");
95 }
96 
97 void
98 XDRFileUnMarshaller::get_int16( dods_int16 &val )
99 {
100  if( !XDR_INT16( _source, &val ) )
101  throw Error("Network I/O Error. Could not read int 16 data.");
102 }
103 
104 void
105 XDRFileUnMarshaller::get_int32( dods_int32 &val )
106 {
107  if( !XDR_INT32( _source, &val ) )
108  throw Error("Network I/O Error. Could not read int 32 data.");
109 }
110 
111 void
112 XDRFileUnMarshaller::get_float32( dods_float32 &val )
113 {
114  if( !xdr_float( _source, &val ) )
115  throw Error("Network I/O Error. Could not read float 32 data.");
116 }
117 
118 void
119 XDRFileUnMarshaller::get_float64( dods_float64 &val )
120 {
121  if( !xdr_double( _source, &val ) )
122  throw Error("Network I/O Error.Could not read float 64 data.");
123 }
124 
125 void
126 XDRFileUnMarshaller::get_uint16( dods_uint16 &val )
127 {
128  if( !XDR_UINT16( _source, &val ) )
129  throw Error("Network I/O Error. Could not read uint 16 data.");
130 }
131 
132 void
133 XDRFileUnMarshaller::get_uint32( dods_uint32 &val )
134 {
135  if( !XDR_UINT32( _source, &val ) )
136  throw Error("Network I/O Error. Could not read uint 32 data.");
137 }
138 
139 void
140 XDRFileUnMarshaller::get_str( string &val )
141 {
142  char *in_tmp = NULL ;
143 
144  if( !xdr_string( _source, &in_tmp, max_str_len ) )
145  throw Error("Network I/O Error. Could not read string data.");
146 
147  val = in_tmp ;
148 
149  free( in_tmp ) ;
150 }
151 
152 void
153 XDRFileUnMarshaller::get_url( string &val )
154 {
155  get_str( val ) ;
156 }
157 
158 void
159 XDRFileUnMarshaller::get_opaque( char *val, unsigned int len )
160 {
161  xdr_opaque( _source, val, len ) ;
162 }
163 
164 void
165 XDRFileUnMarshaller::get_int( int &val )
166 {
167  if( !xdr_int( _source, &val ) )
168  throw Error("Network I/O Error(1). This may be due to a bug in libdap or a\nproblem with the network connection.");
169 }
170 
171 void
172 XDRFileUnMarshaller::get_vector( char **val, unsigned int &num, Vector & )
173 {
174  if( !xdr_bytes( _source, val, &num, DODS_MAX_ARRAY) )
175  throw Error("Network I/O error (1).");
176 }
177 
178 void
179 XDRFileUnMarshaller::get_vector( char **val, unsigned int &num, int width, Vector &vec )
180 {
181  BaseType *var = vec.var() ;
182 
183  if( !xdr_array( _source, val, &num, DODS_MAX_ARRAY, width,
184  XDRUtils::xdr_coder( var->type() ) ) )
185  {
186  throw Error("Network I/O error (2).");
187  }
188 }
189 
190 void
191 XDRFileUnMarshaller::dump(ostream &strm) const
192 {
193  strm << DapIndent::LMarg << "XDRFileUnMarshaller::dump - ("
194  << (void *)this << ")" << endl ;
195 }
196 
197 } // namespace libdap
198 
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual void dump(ostream &strm) const
dump the contents of this object to the specified ostream
-
static xdrproc_t xdr_coder(const Type &t)
Returns a function used to encode elements of an array.
Definition: XDRUtils.cc:145
-
-
- - - - diff --git a/html/XDRFileUnMarshaller_8h_source.html b/html/XDRFileUnMarshaller_8h_source.html deleted file mode 100644 index 3bf69b2b1..000000000 --- a/html/XDRFileUnMarshaller_8h_source.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - -libdap: XDRFileUnMarshaller.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
XDRFileUnMarshaller.h
-
-
-
1 // XDRFileUnMarshaller.h
2 
3 // -*- mode: c++; c-basic-offset:4 -*-
4 
5 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
6 // Access Protocol.
7 
8 // Copyright (c) 2002,2003 OPeNDAP, Inc.
9 // Author: Patrick West <pwest@ucar.edu>
10 //
11 // This library is free software; you can redistribute it and/or
12 // modify it under the terms of the GNU Lesser General Public
13 // License as published by the Free Software Foundation; either
14 // version 2.1 of the License, or (at your option) any later version.
15 //
16 // This library is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 // Lesser General Public License for more details.
20 //
21 // You should have received a copy of the GNU Lesser General Public
22 // License along with this library; if not, write to the Free Software
23 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 //
25 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
26 
27 // (c) COPYRIGHT URI/MIT 1994-1999
28 // Please read the full copyright statement in the file COPYRIGHT_URI.
29 //
30 // Authors:
31 // pwest Patrick West <pwest@ucar.edu>
32 
33 #ifndef I_XDRFileUnMarshaller_h
34 #define I_XDRFileUnMarshaller_h 1
35 
36 #include "UnMarshaller.h"
37 #include "XDRUtils.h"
38 
39 namespace libdap
40 {
41 
46 {
47 private:
48  XDR * _source ;
49 
52  XDRFileUnMarshaller & operator=( const XDRFileUnMarshaller & ) ;
53 public:
54  XDRFileUnMarshaller( FILE *out ) ;
55  virtual ~XDRFileUnMarshaller() ;
56 
57  virtual void get_byte( dods_byte &val ) ;
58 
59  virtual void get_int16( dods_int16 &val ) ;
60  virtual void get_int32( dods_int32 &val ) ;
61 
62  virtual void get_float32( dods_float32 &val ) ;
63  virtual void get_float64( dods_float64 &val ) ;
64 
65  virtual void get_uint16( dods_uint16 &val ) ;
66  virtual void get_uint32( dods_uint32 &val ) ;
67 
68  virtual void get_str( string &val ) ;
69  virtual void get_url( string &val ) ;
70 
71  virtual void get_opaque( char *val, unsigned int len ) ;
72  virtual void get_int( int &val ) ;
73 
74  virtual void get_vector( char **val, unsigned int &num,
75  Vector &vec ) ;
76  virtual void get_vector( char **val, unsigned int &num,
77  int width, Vector &vec ) ;
78 
79  virtual void dump(ostream &strm) const ;
80 } ;
81 
82 } // namespace libdap
83 
84 #endif // I_XDRFileUnMarshaller_h
85 
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
Holds a one-dimensional collection of DAP2 data types.
Definition: Vector.h:80
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
unmarshaller that knows how to unmarshall/deserialize dap objects using XDR from a file ...
-
virtual void dump(ostream &strm) const
dump the contents of this object to the specified ostream
-
-
- - - - diff --git a/html/XDRStreamMarshaller_8cc_source.html b/html/XDRStreamMarshaller_8cc_source.html deleted file mode 100644 index 5f429647d..000000000 --- a/html/XDRStreamMarshaller_8cc_source.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - -libdap: XDRStreamMarshaller.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
XDRStreamMarshaller.cc
-
-
-
1 // XDRStreamMarshaller.cc
2 
3 // -*- mode: c++; c-basic-offset:4 -*-
4 
5 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
6 // Access Protocol.
7 
8 // Copyright (c) 2002,2003,2016 OPeNDAP, Inc.
9 // Author: Patrick West <pwest@ucar.edu>
10 // James Gallagher <jgallagher@opendap.org>
11 //
12 // This library is free software; you can redistribute it and/or
13 // modify it under the terms of the GNU Lesser General Public
14 // License as published by the Free Software Foundation; either
15 // version 2.1 of the License, or (at your option) any later version.
16 //
17 // This library is distributed in the hope that it will be useful,
18 // but WITHOUT ANY WARRANTY; without even the implied warranty of
19 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 // Lesser General Public License for more details.
21 //
22 // You should have received a copy of the GNU Lesser General Public
23 // License along with this library; if not, write to the Free Software
24 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
25 //
26 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
27 
28 // (c) COPYRIGHT URI/MIT 1994-1999
29 // Please read the full copyright statement in the file COPYRIGHT_URI.
30 //
31 // Authors:
32 // pwest Patrick West <pwest@ucar.edu>
33 
34 
35 #include "config.h"
36 
37 #ifdef HAVE_PTHREAD_H
38 #include <pthread.h>
39 #endif
40 
41 #include <cassert>
42 
43 #include <iostream>
44 #include <sstream>
45 #include <iomanip>
46 
47 // #define DODS_DEBUG
48 
49 #include "XDRStreamMarshaller.h"
50 #ifdef USE_POSIX_THREADS
51 #include "MarshallerThread.h"
52 #endif
53 #include "Vector.h"
54 #include "XDRUtils.h"
55 #include "util.h"
56 
57 #include "debug.h"
58 #include "DapIndent.h"
59 
60 using namespace std;
61 
62 // Build this code so it does not use pthreads to write some kinds of
63 // data (see the put_vector() and put_vector_part() methods) in a child thread.
64 // #undef USE_POSIX_THREADS
65 
66 namespace libdap {
67 
68 char *XDRStreamMarshaller::d_buf = 0;
69 static const int XDR_DAP_BUFF_SIZE=256;
70 
71 
80 XDRStreamMarshaller::XDRStreamMarshaller(ostream &out) :
81  d_out(out), d_partial_put_byte_count(0), tm(0)
82 {
83  if (!d_buf) d_buf = (char *) malloc(XDR_DAP_BUFF_SIZE);
84  if (!d_buf) throw Error(internal_error, "Failed to allocate memory for data serialization.");
85 
86  xdrmem_create(&d_sink, d_buf, XDR_DAP_BUFF_SIZE, XDR_ENCODE);
87 
88 #ifdef USE_POSIX_THREADS
89  tm = new MarshallerThread;
90 #endif
91 }
92 
93 XDRStreamMarshaller::~XDRStreamMarshaller()
94 {
95  // Added this because when USE_POS... is not defined, 'tm' has no
96  // type, which the compiler complains about.
97 #ifdef USE_POSIX_THREADS
98  delete tm;
99 #endif
100  xdr_destroy(&d_sink);
101 }
102 
103 void XDRStreamMarshaller::put_byte(dods_byte val)
104 {
105  if (!xdr_setpos(&d_sink, 0))
106  throw Error("Network I/O Error. Could not send byte data - unable to set stream position.");
107 
108  if (!xdr_char(&d_sink, (char *) &val))
109  throw Error(
110  "Network I/O Error. Could not send byte data.");
111 
112  unsigned int bytes_written = xdr_getpos(&d_sink);
113  if (!bytes_written)
114  throw Error(
115  "Network I/O Error. Could not send byte data - unable to get stream position.");
116 
117 #ifdef USE_POSIX_THREADS
118  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
119 #endif
120 
121  d_out.write(d_buf, bytes_written);
122 }
123 
124 void XDRStreamMarshaller::put_int16(dods_int16 val)
125 {
126  if (!xdr_setpos(&d_sink, 0))
127  throw Error(
128  "Network I/O Error. Could not send int 16 data - unable to set stream position.");
129 
130  if (!XDR_INT16(&d_sink, &val))
131  throw Error(
132  "Network I/O Error. Could not send int 16 data.");
133 
134  unsigned int bytes_written = xdr_getpos(&d_sink);
135  if (!bytes_written)
136  throw Error(
137  "Network I/O Error. Could not send int 16 data - unable to get stream position.");
138 
139 #ifdef USE_POSIX_THREADS
140  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
141 #endif
142 
143  d_out.write(d_buf, bytes_written);
144 }
145 
146 void XDRStreamMarshaller::put_int32(dods_int32 val)
147 {
148  if (!xdr_setpos(&d_sink, 0))
149  throw Error(
150  "Network I/O Error. Could not send int 32 data - unable to set stream position.");
151 
152  if (!XDR_INT32(&d_sink, &val))
153  throw Error(
154  "Network I/O Error. Culd not read int 32 data.");
155 
156  unsigned int bytes_written = xdr_getpos(&d_sink);
157  if (!bytes_written)
158  throw Error(
159  "Network I/O Error. Could not send int 32 data - unable to get stream position.");
160 
161 #ifdef USE_POSIX_THREADS
162  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
163 #endif
164 
165  d_out.write(d_buf, bytes_written);
166 }
167 
168 void XDRStreamMarshaller::put_float32(dods_float32 val)
169 {
170  if (!xdr_setpos(&d_sink, 0))
171  throw Error(
172  "Network I/O Error. Could not send float 32 data - unable to set stream position.");
173 
174  if (!xdr_float(&d_sink, &val))
175  throw Error(
176  "Network I/O Error. Could not send float 32 data.");
177 
178  unsigned int bytes_written = xdr_getpos(&d_sink);
179  if (!bytes_written)
180  throw Error(
181  "Network I/O Error. Could not send float 32 data - unable to get stream position.");
182 
183 #ifdef USE_POSIX_THREADS
184  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
185 #endif
186 
187  d_out.write(d_buf, bytes_written);
188 }
189 
190 void XDRStreamMarshaller::put_float64(dods_float64 val)
191 {
192  if (!xdr_setpos(&d_sink, 0))
193  throw Error(
194  "Network I/O Error. Could not send float 64 data - unable to set stream position.");
195 
196  if (!xdr_double(&d_sink, &val))
197  throw Error(
198  "Network I/O Error. Could not send float 64 data.");
199 
200  unsigned int bytes_written = xdr_getpos(&d_sink);
201  if (!bytes_written)
202  throw Error(
203  "Network I/O Error. Could not send float 64 data - unable to get stream position.");
204 
205 #ifdef USE_POSIX_THREADS
206  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
207 #endif
208 
209  d_out.write(d_buf, bytes_written);
210 }
211 
212 void XDRStreamMarshaller::put_uint16(dods_uint16 val)
213 {
214  if (!xdr_setpos(&d_sink, 0))
215  throw Error(
216  "Network I/O Error. Could not send uint 16 data - unable to set stream position.");
217 
218  if (!XDR_UINT16(&d_sink, &val))
219  throw Error(
220  "Network I/O Error. Could not send uint 16 data.");
221 
222  unsigned int bytes_written = xdr_getpos(&d_sink);
223  if (!bytes_written)
224  throw Error(
225  "Network I/O Error. Could not send uint 16 data - unable to get stream position.");
226 
227 #ifdef USE_POSIX_THREADS
228  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
229 #endif
230 
231  d_out.write(d_buf, bytes_written);
232 }
233 
234 void XDRStreamMarshaller::put_uint32(dods_uint32 val)
235 {
236  if (!xdr_setpos(&d_sink, 0))
237  throw Error(
238  "Network I/O Error. Could not send uint 32 data - unable to set stream position.");
239 
240  if (!XDR_UINT32(&d_sink, &val))
241  throw Error(
242  "Network I/O Error. Could not send uint 32 data.");
243 
244  unsigned int bytes_written = xdr_getpos(&d_sink);
245  if (!bytes_written)
246  throw Error(
247  "Network I/O Error. Could not send uint 32 data - unable to get stream position.");
248 
249 #ifdef USE_POSIX_THREADS
250  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
251 #endif
252 
253  d_out.write(d_buf, bytes_written);
254 }
255 
256 void XDRStreamMarshaller::put_str(const string &val)
257 {
258  int size = val.length() + 8;
259 
260  XDR str_sink;
261  vector<char> str_buf(size);
262 
263  try {
264  xdrmem_create(&str_sink, &str_buf[0], size, XDR_ENCODE);
265 
266  if (!xdr_setpos(&str_sink, 0))
267  throw Error(
268  "Network I/O Error. Could not send string data - unable to set stream position.");
269 
270  const char *out_tmp = val.c_str();
271  if (!xdr_string(&str_sink, (char **) &out_tmp, size))
272  throw Error(
273  "Network I/O Error. Could not send string data.");
274 
275  unsigned int bytes_written = xdr_getpos(&str_sink);
276  if (!bytes_written)
277  throw Error(
278  "Network I/O Error. Could not send string data - unable to get stream position.");
279 
280 #ifdef USE_POSIX_THREADS
281  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
282 #endif
283 
284  d_out.write(&str_buf[0], bytes_written);
285 
286  xdr_destroy(&str_sink);
287  }
288  catch (...) {
289  xdr_destroy(&str_sink);
290  throw;
291  }
292 }
293 
294 void XDRStreamMarshaller::put_url(const string &val)
295 {
296  put_str(val);
297 }
298 
299 void XDRStreamMarshaller::put_opaque(char *val, unsigned int len)
300 {
301  if (len > XDR_DAP_BUFF_SIZE)
302  throw Error("Network I/O Error. Could not send opaque data - length of opaque data larger than allowed");
303 
304  if (!xdr_setpos(&d_sink, 0))
305  throw Error(
306  "Network I/O Error. Could not send opaque data - unable to set stream position.");
307 
308  if (!xdr_opaque(&d_sink, val, len))
309  throw Error(
310  "Network I/O Error. Could not send opaque data.");
311 
312  unsigned int bytes_written = xdr_getpos(&d_sink);
313  if (!bytes_written)
314  throw Error(
315  "Network I/O Error. Could not send opaque data - unable to get stream position.");
316 
317 #ifdef USE_POSIX_THREADS
318  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
319 #endif
320 
321  d_out.write(d_buf, bytes_written);
322 }
323 
324 void XDRStreamMarshaller::put_int(int val)
325 {
326  if (!xdr_setpos(&d_sink, 0))
327  throw Error(
328  "Network I/O Error. Could not send int data - unable to set stream position.");
329 
330  if (!xdr_int(&d_sink, &val))
331  throw Error(
332  "Network I/O Error(1). Could not send int data.");
333 
334  unsigned int bytes_written = xdr_getpos(&d_sink);
335  if (!bytes_written)
336  throw Error(
337  "Network I/O Error. Could not send int data - unable to get stream position.");
338 
339 #ifdef USE_POSIX_THREADS
340  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
341 #endif
342 
343  d_out.write(d_buf, bytes_written);
344 }
345 
346 void XDRStreamMarshaller::put_vector(char *val, int num, int width, Vector &vec)
347 {
348  put_vector(val, num, width, vec.var()->type());
349 }
350 
351 
360 {
361  put_int(num);
362  put_int(num);
363 
364  d_partial_put_byte_count = 0;
365 }
366 
374 {
375 #ifdef USE_POSIX_THREADS
376  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
377 #endif
378 
379  // Compute the trailing (padding) bytes
380 
381  // Note that the XDR standard pads values to 4 byte boundaries.
382  //unsigned int pad = (d_partial_put_byte_count % 4) == 0 ? 0: 4 - (d_partial_put_byte_count % 4);
383  unsigned int mod_4 = d_partial_put_byte_count & 0x03;
384  unsigned int pad = (mod_4 == 0) ? 0: 4 - mod_4;
385 
386  if (pad) {
387  vector<char> padding(4, 0); // 4 zeros
388 
389  d_out.write(&padding[0], pad);
390  if (d_out.fail()) throw Error("Network I/O Error. Could not send vector data padding");
391  }
392 }
393 
394 // Start of parallel I/O support. jhrg 8/19/15
395 void XDRStreamMarshaller::put_vector(char *val, int num, Vector &)
396 {
397  if (!val) throw InternalErr(__FILE__, __LINE__, "Could not send byte vector data. Buffer pointer is not set.");
398 
399  // write the number of members of the array being written and then set the position to 0
400  put_int(num);
401 
402  // this is the word boundary for writing xdr bytes in a vector.
403  const unsigned int add_to = 8;
404  // switch to memory on the heap since the thread will need to access it
405  // after this code returns.
406  char *byte_buf = new char[num + add_to];
407  XDR byte_sink;
408  try {
409  xdrmem_create(&byte_sink, byte_buf, num + add_to, XDR_ENCODE);
410  if (!xdr_setpos(&byte_sink, 0))
411  throw Error("Network I/O Error. Could not send byte vector data - unable to set stream position.");
412 
413  if (!xdr_bytes(&byte_sink, (char **) &val, (unsigned int *) &num, num + add_to))
414  throw Error("Network I/O Error(2). Could not send byte vector data - unable to encode data.");
415 
416  unsigned int bytes_written = xdr_getpos(&byte_sink);
417  if (!bytes_written)
418  throw Error("Network I/O Error. Could not send byte vector data - unable to get stream position.");
419 
420 #ifdef USE_POSIX_THREADS
421  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
422  tm->increment_child_thread_count();
423  tm->start_thread(MarshallerThread::write_thread, d_out, byte_buf, bytes_written);
424  xdr_destroy(&byte_sink);
425 #else
426  d_out.write(byte_buf, bytes_written);
427  xdr_destroy(&byte_sink);
428  delete [] byte_buf;
429 #endif
430 
431  }
432  catch (...) {
433  DBG(cerr << "Caught an exception in put_vector_thread" << endl);
434  xdr_destroy(&byte_sink);
435  delete [] byte_buf;
436  throw;
437  }
438 }
439 
440 // private
451 void XDRStreamMarshaller::put_vector(char *val, unsigned int num, int width, Type type)
452 {
453  assert(val || num == 0);
454 
455  // write the number of array members being written, then set the position back to 0
456  put_int(num);
457 
458  if (num == 0)
459  return;
460 
461  int use_width = width;
462  if (use_width < 4) use_width = 4;
463 
464  // the size is the number of elements num times the width of each
465  // element, then add 4 bytes for the number of elements
466  int size = (num * use_width) + 4;
467 
468  // allocate enough memory for the elements
469  //vector<char> vec_buf(size);
470  char *vec_buf = new char[size];
471  XDR vec_sink;
472  try {
473  xdrmem_create(&vec_sink, vec_buf, size, XDR_ENCODE);
474 
475  // set the position of the sink to 0, we're starting at the beginning
476  if (!xdr_setpos(&vec_sink, 0))
477  throw Error("Network I/O Error. Could not send vector data - unable to set stream position.");
478 
479  // write the array to the buffer
480  if (!xdr_array(&vec_sink, (char **) &val, (unsigned int *) &num, size, width, XDRUtils::xdr_coder(type)))
481  throw Error("Network I/O Error(2). Could not send vector data - unable to encode.");
482 
483  // how much was written to the buffer
484  unsigned int bytes_written = xdr_getpos(&vec_sink);
485  if (!bytes_written)
486  throw Error("Network I/O Error. Could not send vector data - unable to get stream position.");
487 
488 #ifdef USE_POSIX_THREADS
489  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
490  tm->increment_child_thread_count();
491  tm->start_thread(MarshallerThread::write_thread, d_out, vec_buf, bytes_written);
492  xdr_destroy(&vec_sink);
493 #else
494  d_out.write(vec_buf, bytes_written);
495  xdr_destroy(&vec_sink);
496  delete [] vec_buf;
497 #endif
498  }
499  catch (...) {
500  xdr_destroy(&vec_sink);
501  delete [] vec_buf;
502  throw;
503  }
504 }
505 
517 void XDRStreamMarshaller::put_vector_part(char *val, unsigned int num, int width, Type type)
518 {
519  if (width == 1) {
520  // Add space for the 4 bytes of length info and 4 bytes for padding, even though
521  // we will not send either of those.
522  const unsigned int add_to = 8;
523  unsigned int bufsiz = num + add_to;
524  //vector<char> byte_buf(bufsiz);
525  char *byte_buf = new char[bufsiz];
526  XDR byte_sink;
527  try {
528  xdrmem_create(&byte_sink, byte_buf, bufsiz, XDR_ENCODE);
529  if (!xdr_setpos(&byte_sink, 0))
530  throw Error("Network I/O Error. Could not send byte vector data - unable to set stream position.");
531 
532  if (!xdr_bytes(&byte_sink, (char **) &val, (unsigned int *) &num, bufsiz))
533  throw Error("Network I/O Error(2). Could not send byte vector data - unable to encode data.");
534 
535 #ifdef USE_POSIX_THREADS
536  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
537  tm->increment_child_thread_count();
538 
539  // Increment the element count so we can figure out about the padding in put_vector_last()
540  d_partial_put_byte_count += num;
541 
542  tm->start_thread(MarshallerThread::write_thread_part, d_out, byte_buf, num);
543  xdr_destroy(&byte_sink);
544 #else
545  // Only send the num bytes that follow the 4 bytes of length info - we skip the
546  // length info because it's already been sent and we don't send any trailing padding
547  // bytes in this method (see put_vector_last() for that).
548  d_out.write(byte_buf + 4, num);
549 
550  if (d_out.fail())
551  throw Error ("Network I/O Error. Could not send initial part of byte vector data");
552 
553  // Now increment the element count so we can figure out about the padding in put_vector_last()
554  d_partial_put_byte_count += num;
555 
556  xdr_destroy(&byte_sink);
557  delete [] byte_buf;
558 #endif
559  }
560  catch (...) {
561  xdr_destroy(&byte_sink);
562  delete [] byte_buf;
563  throw;
564  }
565  }
566  else {
567  int use_width = (width < 4) ? 4 : width;
568 
569  // the size is the number of elements num times the width of each
570  // element, then add 4 bytes for the (int) number of elements
571  int size = (num * use_width) + 4;
572 
573  // allocate enough memory for the elements
574  //vector<char> vec_buf(size);
575  char *vec_buf = new char[size];
576  XDR vec_sink;
577  try {
578  xdrmem_create(&vec_sink, vec_buf, size, XDR_ENCODE);
579 
580  // set the position of the sink to 0, we're starting at the beginning
581  if (!xdr_setpos(&vec_sink, 0))
582  throw Error("Network I/O Error. Could not send vector data - unable to set stream position.");
583 
584  // write the array to the buffer
585  if (!xdr_array(&vec_sink, (char **) &val, (unsigned int *) &num, size, width, XDRUtils::xdr_coder(type)))
586  throw Error("Network I/O Error(2). Could not send vector data -unable to encode data.");
587 
588 #ifdef USE_POSIX_THREADS
589  Locker lock(tm->get_mutex(), tm->get_cond(), tm->get_child_thread_count());
590  tm->increment_child_thread_count();
591 
592  // Increment the element count so we can figure out about the padding in put_vector_last()
593  d_partial_put_byte_count += (size - 4);
594  tm->start_thread(MarshallerThread::write_thread_part, d_out, vec_buf, size - 4);
595  xdr_destroy(&vec_sink);
596 #else
597  // write that much out to the output stream, skipping the length data that
598  // XDR writes since we have already written the length info using put_vector_start()
599  d_out.write(vec_buf + 4, size - 4);
600 
601  if (d_out.fail())
602  throw Error ("Network I/O Error. Could not send part of vector data");
603 
604  // Now increment the element count so we can figure out about the padding in put_vector_last()
605  d_partial_put_byte_count += (size - 4);
606 
607  xdr_destroy(&vec_sink);
608  delete [] vec_buf;
609 #endif
610  }
611  catch (...) {
612  xdr_destroy(&vec_sink);
613  delete [] vec_buf;
614  throw;
615  }
616  }
617 }
618 
619 void XDRStreamMarshaller::dump(ostream &strm) const
620 {
621  strm << DapIndent::LMarg << "XDRStreamMarshaller::dump - (" << (void *) this << ")" << endl;
622 }
623 
624 } // namespace libdap
625 
static void * write_thread(void *arg)
-
Holds a one-dimensional collection of DAP2 data types.
Definition: Vector.h:80
-
virtual void put_vector_part(char *val, unsigned int num, int width, Type type)
-
void start_thread(void *(*thread)(void *arg), std::ostream &out, char *byte_buf, unsigned int bytes_written)
-
STL namespace.
-
virtual void put_vector_start(int num)
-
Type
Identifies the data type.
Definition: Type.h:94
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
virtual void dump(ostream &strm) const
dump the contents of this object to the specified ostream
-
virtual BaseType * var(const string &name="", bool exact_match=true, btp_stack *s=0)
Definition: Vector.cc:433
-
virtual Type type() const
Returns the type of the class instance.
Definition: BaseType.cc:365
- - - -
static void * write_thread_part(void *arg)
-
static xdrproc_t xdr_coder(const Type &t)
Returns a function used to encode elements of an array.
Definition: XDRUtils.cc:145
-
A class for error processing.
Definition: Error.h:92
-
-
- - - - diff --git a/html/XDRStreamMarshaller_8h_source.html b/html/XDRStreamMarshaller_8h_source.html deleted file mode 100644 index 5e7e98c08..000000000 --- a/html/XDRStreamMarshaller_8h_source.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -libdap: XDRStreamMarshaller.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
XDRStreamMarshaller.h
-
-
-
1 // XDRStreamMarshaller.h
2 
3 // -*- mode: c++; c-basic-offset:4 -*-
4 
5 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
6 // Access Protocol.
7 
8 // Copyright (c) 2002,2003 OPeNDAP, Inc.
9 // Author: Patrick West <pwest@ucar.edu>
10 //
11 // This library is free software; you can redistribute it and/or
12 // modify it under the terms of the GNU Lesser General Public
13 // License as published by the Free Software Foundation; either
14 // version 2.1 of the License, or (at your option) any later version.
15 //
16 // This library is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 // Lesser General Public License for more details.
20 //
21 // You should have received a copy of the GNU Lesser General Public
22 // License along with this library; if not, write to the Free Software
23 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 //
25 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
26 
27 // (c) COPYRIGHT URI/MIT 1994-1999
28 // Please read the full copyright statement in the file COPYRIGHT_URI.
29 //
30 // Authors:
31 // pwest Patrick West <pwest@ucar.edu>
32 
33 // Hacked massively to add all kinds of things, including pthred support.
34 // jhrg 8/21/15
35 
36 #ifndef I_XDRStreamMarshaller_h
37 #define I_XDRStreamMarshaller_h 1
38 
39 #include <iostream>
40 
41 #include "Marshaller.h"
42 #include "XDRUtils.h"
43 
44 
45 namespace libdap {
46 
47 class BaseType;
48 class MarshallerThread;
49 
55 private:
56  static char * d_buf;
57  XDR d_sink;
58  ostream & d_out;
59 
60  int d_partial_put_byte_count;
61 
62  MarshallerThread *tm;
63 
66  XDRStreamMarshaller &operator=(const XDRStreamMarshaller &);
67 
68  void put_vector(char *val, unsigned int num, int width, Type type);
69 
70  friend class MarshallerTest;
71 
72 public:
73  XDRStreamMarshaller(ostream &out); //, bool checksum = false, bool write_data = true) ;
74  virtual ~XDRStreamMarshaller();
75 
76  virtual void put_byte(dods_byte val);
77 
78  virtual void put_int16(dods_int16 val);
79  virtual void put_int32(dods_int32 val);
80 
81  virtual void put_float32(dods_float32 val);
82  virtual void put_float64(dods_float64 val);
83 
84  virtual void put_uint16(dods_uint16 val);
85  virtual void put_uint32(dods_uint32 val);
86 
87  virtual void put_str(const string &val);
88  virtual void put_url(const string &val);
89 
90  virtual void put_opaque(char *val, unsigned int len);
91  virtual void put_int(int val);
92 
93  virtual void put_vector(char *val, int num, Vector &vec);
94  virtual void put_vector(char *val, int num, int width, Vector &vec);
95 
96  virtual void put_vector_start(int num);
97  virtual void put_vector_part(char *val, unsigned int num, int width, Type type);
98  virtual void put_vector_end();
99 
100  virtual void dump(ostream &strm) const;
101 };
102 
103 } // namespace libdap
104 
105 #endif // I_XDRStreamMarshaller_h
106 
Holds a one-dimensional collection of DAP2 data types.
Definition: Vector.h:80
-
virtual void put_vector_part(char *val, unsigned int num, int width, Type type)
-
virtual void put_vector_start(int num)
-
Type
Identifies the data type.
Definition: Type.h:94
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual void dump(ostream &strm) const
dump the contents of this object to the specified ostream
- - -
abstract base class used to marshal/serialize dap data objects
Definition: Marshaller.h:50
-
Marshaller that knows how serialize dap data objects to a C++ iostream using XDR. ...
-
-
- - - - diff --git a/html/XDRStreamUnMarshaller_8cc_source.html b/html/XDRStreamUnMarshaller_8cc_source.html deleted file mode 100644 index 1fff5da59..000000000 --- a/html/XDRStreamUnMarshaller_8cc_source.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -libdap: XDRStreamUnMarshaller.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
XDRStreamUnMarshaller.cc
-
-
-
1 // XDRStreamUnMarshaller.cc
2 
3 // -*- mode: c++; c-basic-offset:4 -*-
4 
5 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
6 // Access Protocol.
7 
8 // Copyright (c) 2002,2003 OPeNDAP, Inc.
9 // Author: Patrick West <pwest@ucar.edu>
10 //
11 // This library is free software; you can redistribute it and/or
12 // modify it under the terms of the GNU Lesser General Public
13 // License as published by the Free Software Foundation; either
14 // version 2.1 of the License, or (at your option) any later version.
15 //
16 // This library is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 // Lesser General Public License for more details.
20 //
21 // You should have received a copy of the GNU Lesser General Public
22 // License along with this library; if not, write to the Free Software
23 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 //
25 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
26 
27 // (c) COPYRIGHT URI/MIT 1994-1999
28 // Please read the full copyright statement in the file COPYRIGHT_URI.
29 //
30 // Authors:
31 // pwest Patrick West <pwest@ucar.edu>
32 #include "config.h"
33 #include "XDRStreamUnMarshaller.h"
34 
35 #include <cstring> // for memcpy
36 #include <string>
37 #include <sstream>
38 
39 //#define DODS_DEBUG2 1
40 //#define DODS_DEBUG 1
41 
42 #include "Str.h"
43 #include "Array.h"
44 #include "util.h"
45 #include "InternalErr.h"
46 #include "debug.h"
47 #include "DapIndent.h"
48 
49 namespace libdap {
50 
51 char *XDRStreamUnMarshaller::d_buf = 0;
52 
53 XDRStreamUnMarshaller::XDRStreamUnMarshaller(istream &in) : /*&d_source( 0 ),*/
54  d_in(in)
55 {
56  if (!d_buf)
57  d_buf = (char *) malloc(XDR_DAP_BUFF_SIZE);
58  if (!d_buf)
59  throw Error(internal_error, "Failed to allocate memory for data serialization.");
60 
61  //&d_source = new XDR;
62  xdrmem_create(&d_source, d_buf, XDR_DAP_BUFF_SIZE, XDR_DECODE);
63 }
64 
65 XDRStreamUnMarshaller::XDRStreamUnMarshaller() :
66  UnMarshaller(), /*&d_source( 0 ),*/d_in(cin)
67 {
68  throw InternalErr(__FILE__, __LINE__, "Default constructor not implemented.");
69 }
70 
71 XDRStreamUnMarshaller::XDRStreamUnMarshaller(const XDRStreamUnMarshaller &um) :
72  UnMarshaller(um), /*&d_source( 0 ),*/d_in(cin)
73 {
74  throw InternalErr(__FILE__, __LINE__, "Copy constructor not implemented.");
75 }
76 
77 XDRStreamUnMarshaller &
78 XDRStreamUnMarshaller::operator=(const XDRStreamUnMarshaller &)
79 {
80  throw InternalErr(__FILE__, __LINE__, "Copy operator not implemented.");
81 }
82 
83 XDRStreamUnMarshaller::~XDRStreamUnMarshaller()
84 {
85  xdr_destroy( &d_source );
86  //&d_source = 0;
87 }
88 
89 void XDRStreamUnMarshaller::get_byte(dods_byte &val)
90 {
91  if (xdr_setpos( &d_source, 0 ) < 0)
92  throw Error("Failed to reposition input stream");
93  if (!(d_in.read(d_buf, 4))) {
94  if (d_in.eof())
95  throw Error("Premature EOF in input stream");
96  else {
97  ostringstream ss("Error reading from input stream: ");
98  ss << d_in.rdstate();
99  throw Error(ss.str());
100  }
101  }
102 
103  DBG2( std::cerr << "_in.gcount(): " << d_in.gcount() << std::endl );
104  DBG2( std::cerr << "_in.tellg(): " << d_in.tellg() << std::endl );
105  DBG2( std::cerr << "_buf[0]: " << hex << d_buf[0] << "; _buf[1]: " << d_buf[1]
106  << "; _buf[2]: " << d_buf[2] << "; _buf[3]: " << d_buf[3]
107  << dec << std::endl );
108 
109  if (!xdr_char(&d_source, (char *) &val))
110  throw Error("Network I/O Error. Could not read byte data.");
111 
112  DBG2(std::cerr << "get_byte: " << val << std::endl );
113 }
114 
115 void XDRStreamUnMarshaller::get_int16(dods_int16 &val)
116 {
117  xdr_setpos( &d_source, 0);
118  d_in.read(d_buf, 4);
119 
120  if (!XDR_INT16(&d_source, &val))
121  throw Error("Network I/O Error. Could not read int 16 data.");
122 }
123 
124 void XDRStreamUnMarshaller::get_int32(dods_int32 &val)
125 {
126  xdr_setpos( &d_source, 0);
127  d_in.read(d_buf, 4);
128 
129  if (!XDR_INT32(&d_source, &val))
130  throw Error("Network I/O Error. Could not read int 32 data.");
131 }
132 
133 void XDRStreamUnMarshaller::get_float32(dods_float32 &val)
134 {
135  xdr_setpos( &d_source, 0);
136  d_in.read(d_buf, 4);
137 
138  if (!xdr_float(&d_source, &val))
139  throw Error("Network I/O Error. Could not read float 32 data.");
140 }
141 
142 void XDRStreamUnMarshaller::get_float64(dods_float64 &val)
143 {
144  xdr_setpos( &d_source, 0);
145  d_in.read(d_buf, 8);
146 
147  if (!xdr_double(&d_source, &val))
148  throw Error("Network I/O Error. Could not read float 64 data.");
149 }
150 
151 void XDRStreamUnMarshaller::get_uint16(dods_uint16 &val)
152 {
153  xdr_setpos( &d_source, 0);
154  d_in.read(d_buf, 4);
155 
156  if (!XDR_UINT16(&d_source, &val))
157  throw Error("Network I/O Error. Could not read uint 16 data.");
158 }
159 
160 void XDRStreamUnMarshaller::get_uint32(dods_uint32 &val)
161 {
162  xdr_setpos( &d_source, 0);
163  d_in.read(d_buf, 4);
164 
165  if (!XDR_UINT32(&d_source, &val))
166  throw Error("Network I/O Error. Could not read uint 32 data.");
167 }
168 
169 void XDRStreamUnMarshaller::get_str(string &val)
170 {
171  int i;
172  get_int(i);
173  DBG(std::cerr << "i: " << i << std::endl);
174 
175  // Must round up string size to next 4
176  i = ((i + 3) / 4) * 4;
177  DBG(std::cerr << "i: " << i << std::endl);
178 
179  char *in_tmp = 0;
180  //char *buf = 0;
181  //XDR *source = 0;
182  // Must address the case where the string is larger than the buffer
183  if (i + 4 > XDR_DAP_BUFF_SIZE) {
184 #if 0
185  char *buf = (char *) malloc(i + 4);
186  if (!buf)
187  throw InternalErr(__FILE__, __LINE__, "Error allocating memory");
188 #endif
189  vector<char> buf(i+4);
190 
191  XDR source;// = new XDR;
192  xdrmem_create(&source, &buf[0], i + 4, XDR_DECODE);
193  memcpy(&buf[0], d_buf, 4);
194 
195  d_in.read(&buf[0] + 4, i);
196 
197  xdr_setpos( &source, 0);
198  if (!xdr_string( &source, &in_tmp, max_str_len)) {
199  xdr_destroy( &source );
200  throw Error("Network I/O Error. Could not read string data.");
201  }
202 
203  xdr_destroy( &source );
204  }
205  else {
206  d_in.read(d_buf + 4, i);
207 
208  xdr_setpos( &d_source, 0);
209  if (!xdr_string(&d_source, &in_tmp, max_str_len))
210  throw Error("Network I/O Error. Could not read string data.");
211  }
212 
213  val = in_tmp;
214 
215  free(in_tmp);
216 }
217 
218 void XDRStreamUnMarshaller::get_url(string &val)
219 {
220  get_str(val);
221 }
222 
223 void XDRStreamUnMarshaller::get_opaque(char *val, unsigned int len)
224 {
225  xdr_setpos( &d_source, 0);
226 
227  // Round len up to the next multiple of 4. There is also the RNDUP()
228  // macro in xdr.h, at least on OS/X.
229  len += len & 3;
230  if (static_cast<int>(len) > XDR_DAP_BUFF_SIZE)
231  throw Error("Network I/O Error. Length of opaque data larger than allowed");
232 
233  d_in.read(d_buf, len);
234 
235  xdr_opaque(&d_source, val, len);
236 }
237 
238 void XDRStreamUnMarshaller::get_int(int &val)
239 {
240  xdr_setpos( &d_source, 0);
241  d_in.read(d_buf, 4);
242 
243  if (!xdr_int(&d_source, &val))
244  throw Error("Network I/O Error(1).");
245 
246  DBG(std::cerr << "get_int: " << val << std::endl);
247 }
248 
249 void XDRStreamUnMarshaller::get_vector(char **val, unsigned int &num, Vector &)
250 {
251  int i;
252  get_int(i); // This leaves the XDR encoded value in d_buf; used later
253  DBG(std::cerr << "i: " << i << std::endl);
254 
255  // Must round up string size to next 4
256  i += i & 3;
257  DBG(std::cerr << "i: " << i << std::endl);
258 
259  //char *buf = 0;
260  //XDR *source = 0;
261  // Must address the case where the string is larger than the buffer
262  if (i + 4 > XDR_DAP_BUFF_SIZE) {
263  vector<char> buf(i+4);
264  XDR source;
265  xdrmem_create(&source, &buf[0], i + 4, XDR_DECODE);
266  memcpy(&buf[0], d_buf, 4);
267 
268  d_in.read(&buf[0] + 4, i);
269  DBG2(cerr << "bytes read: " << d_in.gcount() << endl);
270 
271  xdr_setpos(&source, 0);
272  if (!xdr_bytes(&d_source, val, &num, DODS_MAX_ARRAY)) {
273  xdr_destroy(&source);
274  throw Error("Network I/O Error. Could not read byte array data.");
275  }
276 
277  xdr_destroy( &source );
278  }
279  else {
280  d_in.read(d_buf + 4, i);
281  DBG2(cerr << "bytes read: " << d_in.gcount() << endl);
282 
283  xdr_setpos(&d_source, 0);
284  if (!xdr_bytes(&d_source, val, &num, DODS_MAX_ARRAY))
285  throw Error("Network I/O Error. Could not read byte array data.");
286  }
287 }
288 
289 void XDRStreamUnMarshaller::get_vector(char **val, unsigned int &num, int width, Vector &vec)
290 {
291  get_vector(val, num, width, vec.var()->type());
292 }
293 
294 void XDRStreamUnMarshaller::get_vector(char **val, unsigned int &num, int width, Type type)
295 {
296  int i;
297  get_int(i); // This leaves the XDR encoded value in d_buf; used later
298  DBG(std::cerr << "i: " << i << std::endl);
299 
300  width += width & 3;
301  DBG(std::cerr << "width: " << width << std::endl);
302 
303  int size = i * width; // + 4; // '+ 4' to hold the int already read
304 
305  // Must address the case where the string is larger than the buffer
306  if (size > XDR_DAP_BUFF_SIZE) {
307  vector<char> buf(size+4);
308  XDR source;
309  xdrmem_create(&source, &buf[0], size + 4, XDR_DECODE);
310  DBG(cerr << "size: " << size << endl);
311  memcpy(&buf[0], d_buf, 4);
312 
313  d_in.read(&buf[0] + 4, size); // +4 for the int already read
314  DBG(cerr << "bytes read: " << d_in.gcount() << endl);
315 
316  xdr_setpos(&source, 0);
317  if (!xdr_array(&source, val, &num, DODS_MAX_ARRAY, width, XDRUtils::xdr_coder(type))) {
318  xdr_destroy( &source );
319  throw Error("Network I/O Error. Could not read array data.");
320  }
321 
322  xdr_destroy( &source );
323  }
324  else {
325  d_in.read(d_buf + 4, size);
326  DBG(cerr << "bytes read (2): " << d_in.gcount() << endl);
327 
328  xdr_setpos( &d_source, 0);
329  if (!xdr_array(&d_source, val, &num, DODS_MAX_ARRAY, width, XDRUtils::xdr_coder(type)))
330  throw Error("Network I/O Error. Could not read array data.");
331  }
332 }
333 
334 void XDRStreamUnMarshaller::dump(ostream &strm) const
335 {
336  strm << DapIndent::LMarg << "XDRStreamUnMarshaller::dump - (" << (void *) this << ")" << endl;
337 }
338 
339 } // namespace libdap
340 
Type
Identifies the data type.
Definition: Type.h:94
-
virtual void dump(ostream &strm) const
dump the contents of this object to the specified ostream
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
static xdrproc_t xdr_coder(const Type &t)
Returns a function used to encode elements of an array.
Definition: XDRUtils.cc:145
-
-
- - - - diff --git a/html/XDRStreamUnMarshaller_8h_source.html b/html/XDRStreamUnMarshaller_8h_source.html deleted file mode 100644 index d3dbe10e8..000000000 --- a/html/XDRStreamUnMarshaller_8h_source.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -libdap: XDRStreamUnMarshaller.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
XDRStreamUnMarshaller.h
-
-
-
1 // XDRStreamUnMarshaller.h
2 
3 // -*- mode: c++; c-basic-offset:4 -*-
4 
5 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
6 // Access Protocol.
7 
8 // Copyright (c) 2002,2003 OPeNDAP, Inc.
9 // Author: Patrick West <pwest@ucar.edu>
10 //
11 // This library is free software; you can redistribute it and/or
12 // modify it under the terms of the GNU Lesser General Public
13 // License as published by the Free Software Foundation; either
14 // version 2.1 of the License, or (at your option) any later version.
15 //
16 // This library is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 // Lesser General Public License for more details.
20 //
21 // You should have received a copy of the GNU Lesser General Public
22 // License along with this library; if not, write to the Free Software
23 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 //
25 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
26 
27 // (c) COPYRIGHT URI/MIT 1994-1999
28 // Please read the full copyright statement in the file COPYRIGHT_URI.
29 //
30 // Authors:
31 // pwest Patrick West <pwest@ucar.edu>
32 
33 #ifndef I_XDRStreamUnMarshaller_h
34 #define I_XDRStreamUnMarshaller_h 1
35 
36 #include <iostream>
37 
38 using std::istream ;
39 using std::cin ;
40 
41 #include "UnMarshaller.h"
42 #include "XDRUtils.h"
43 
44 namespace libdap
45 {
46 
47 const int XDR_DAP_BUFF_SIZE = 4096; // This will be compared to a signed int
48 
53 {
54 private:
55  XDR d_source ;
56  istream & d_in;
57  static char * d_buf;
58 
61  XDRStreamUnMarshaller & operator=( const XDRStreamUnMarshaller & ) ;
62 
63 public:
64  XDRStreamUnMarshaller( istream &in ) ;
65  virtual ~XDRStreamUnMarshaller() ;
66 
67  virtual void get_byte( dods_byte &val ) ;
68 
69  virtual void get_int16( dods_int16 &val ) ;
70  virtual void get_int32( dods_int32 &val ) ;
71 
72  virtual void get_float32( dods_float32 &val ) ;
73  virtual void get_float64( dods_float64 &val ) ;
74 
75  virtual void get_uint16( dods_uint16 &val ) ;
76  virtual void get_uint32( dods_uint32 &val ) ;
77 
78  virtual void get_str( string &val ) ;
79  virtual void get_url( string &val ) ;
80 
81  virtual void get_opaque( char *val, unsigned int len ) ;
82  virtual void get_int( int &val ) ;
83 
84  virtual void get_vector( char **val, unsigned int &num, Vector &vec ) ;
85  virtual void get_vector( char **val, unsigned int &num, int width, Vector &vec ) ;
86 
87  virtual void get_vector(char **val, unsigned int &num, int width, Type type);
88 
89  virtual void dump(ostream &strm) const ;
90 } ;
91 
92 } // namespace libdap
93 
94 #endif // I_XDRStreamUnMarshaller_h
95 
abstract base class used to unmarshall/deserialize dap data objects
Definition: UnMarshaller.h:54
-
Holds a one-dimensional collection of DAP2 data types.
Definition: Vector.h:80
-
Type
Identifies the data type.
Definition: Type.h:94
-
virtual void dump(ostream &strm) const
dump the contents of this object to the specified ostream
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
unmarshaller that knows how to unmarshall/deserialize dap objects using XDR from a file ...
-
-
- - - - diff --git a/html/XDRUtils_8cc_source.html b/html/XDRUtils_8cc_source.html deleted file mode 100644 index 031590def..000000000 --- a/html/XDRUtils_8cc_source.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -libdap: XDRUtils.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
XDRUtils.cc
-
-
-
1 // XDRUtils.cc
2 
3 // -*- mode: c++; c-basic-offset:4 -*-
4 
5 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
6 // Access Protocol.
7 
8 // Copyright (c) 2002,2003 OPeNDAP, Inc.
9 // Author: Patrick West <pwest@ucar.edu>
10 //
11 // This library is free software; you can redistribute it and/or
12 // modify it under the terms of the GNU Lesser General Public
13 // License as published by the Free Software Foundation; either
14 // version 2.1 of the License, or (at your option) any later version.
15 //
16 // This library is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 // Lesser General Public License for more details.
20 //
21 // You should have received a copy of the GNU Lesser General Public
22 // License along with this library; if not, write to the Free Software
23 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 //
25 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
26 
27 // (c) COPYRIGHT URI/MIT 1994-1999
28 // Please read the full copyright statement in the file COPYRIGHT_URI.
29 //
30 // Authors:
31 // pwest Patrick West <pwest@ucar.edu>
32 
33 #include "config.h"
34 
35 #include "XDRUtils.h"
36 #include "debug.h"
37 #include "Str.h"
38 
39 using namespace libdap ;
40 
41 // This function is used to allocate memory for, and initialize, a new XDR
42 // pointer. It sets the stream associated with the (XDR *) to STREAM.
43 //
44 // NB: STREAM is not one of the C++/libg++ iostream classes; it is a (FILE
45 // *).
46 
47 // These func's moved to xdrutil_ppc.* under the PPC as explained there
48 #ifndef __POWERPC__
49 XDR *
50 new_xdrstdio(FILE *stream, enum xdr_op xop)
51 {
52  XDR *xdr = new XDR;
53 
54  xdrstdio_create(xdr, stream, xop);
55 
56  return xdr;
57 }
58 
59 XDR *
60 set_xdrstdio(XDR *xdr, FILE *stream, enum xdr_op xop)
61 {
62  xdrstdio_create(xdr, stream, xop);
63 
64  return xdr;
65 }
66 
67 // Delete an XDR pointer allocated using the above function. Do not close the
68 // associated FILE pointer.
69 
70 void
71 delete_xdrstdio(XDR *xdr)
72 {
73  xdr_destroy(xdr);
74 
75  delete xdr; xdr = 0;
76 }
77 #endif
78 
79 // This function is used to en/decode Str and Url type variables. It is
80 // defined as extern C since it is passed via function pointers to routines
81 // in the xdr library where it is executed. This function is defined so
82 // that Str and Url have an en/decoder which takes exactly two arguments: an
83 // XDR * and a string reference.
84 //
85 // NB: this function is *not* used for arrays (i.e., it is not the function
86 // referenced by BaseType's _xdr_coder field when the object is a Str or Url.
87 // Also note that \e max_str_len is an obese number but that really does not
88 // matter; xdr_string() would never actually allocate that much memory unless
89 // a string that size was sent from the server.
90 // Returns: XDR's bool_t; TRUE if no errors are detected, FALSE
91 // otherwise. The formal parameter BUF is modified as a side effect.
92 
93 extern "C" bool_t
94 xdr_str(XDR *xdrs, string &buf)
95 {
96  DBG(cerr << "In xdr_str, xdrs: " << xdrs << endl);
97 
98  switch (xdrs->x_op) {
99  case XDR_ENCODE: { // BUF is a pointer to a (string *)
100  const char *out_tmp = buf.c_str();
101 
102  return xdr_string(xdrs, (char **)&out_tmp, max_str_len);
103  }
104 
105  case XDR_DECODE: {
106  char *in_tmp = NULL;
107 
108  bool_t stat = xdr_string(xdrs, &in_tmp, max_str_len);
109  if (!stat)
110  return stat;
111 
112  buf = in_tmp;
113 
114  free(in_tmp);
115 
116  return stat;
117  }
118 
119  default:
120  return 0;
121  }
122 }
123 
124 namespace libdap {
125 
144 xdrproc_t
146 {
147  switch (t) {
148  case dods_int16_c:
149  return (xdrproc_t) XDR_INT16;
150  case dods_uint16_c:
151  return (xdrproc_t) XDR_UINT16;
152  case dods_int32_c:
153  return (xdrproc_t) XDR_INT32;
154  case dods_uint32_c:
155  return (xdrproc_t) XDR_UINT32;
156  case dods_float32_c:
157  return (xdrproc_t) XDR_FLOAT32;
158  case dods_float64_c:
159  return (xdrproc_t) XDR_FLOAT64;
160  case dods_byte_c:
161  case dods_str_c:
162  case dods_url_c:
163  case dods_array_c:
164  case dods_structure_c:
165  case dods_sequence_c:
166  case dods_grid_c:
167  default:
168  break;
169  }
170 
171  return NULL;
172 }
173 
174 } // namespace libdap
175 
Type
Identifies the data type.
Definition: Type.h:94
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
static xdrproc_t xdr_coder(const Type &t)
Returns a function used to encode elements of an array.
Definition: XDRUtils.cc:145
-
-
- - - - diff --git a/html/XDRUtils_8h_source.html b/html/XDRUtils_8h_source.html deleted file mode 100644 index 52aa3edd2..000000000 --- a/html/XDRUtils_8h_source.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -libdap: XDRUtils.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
XDRUtils.h
-
-
-
1 // XDRUtils.h
2 
3 // -*- mode: c++; c-basic-offset:4 -*-
4 
5 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
6 // Access Protocol.
7 
8 // Copyright (c) 2002,2003 OPeNDAP, Inc.
9 // Author: Patrick West <pwest@ucar.edu>
10 //
11 // This library is free software; you can redistribute it and/or
12 // modify it under the terms of the GNU Lesser General Public
13 // License as published by the Free Software Foundation; either
14 // version 2.1 of the License, or (at your option) any later version.
15 //
16 // This library is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 // Lesser General Public License for more details.
20 //
21 // You should have received a copy of the GNU Lesser General Public
22 // License along with this library; if not, write to the Free Software
23 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 //
25 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
26 
27 // (c) COPYRIGHT URI/MIT 1994-1999
28 // Please read the full copyright statement in the file COPYRIGHT_URI.
29 //
30 // Authors:
31 // pwest Patrick West <pwest@ucar.edu>
32 
33 #ifndef S_XDRUtils_h
34 #define S_XDRUtils_h 1
35 
36 #include <cstdio>
37 #include "xdr-datatypes.h"
38 #include "BaseType.h"
39 
40 #define xdr_proc_t int *
41 
42 // These func's moved to xdrutil_ppc.* under the PPC as explained there
43 #ifdef __POWERPC__
44 extern "C" XDR *new_xdrstdio(FILE *stream, enum xdr_op xop);
45 extern "C" XDR *set_xdrstdio(XDR *xdr, FILE *stream, enum xdr_op xop);
46 extern "C" void delete_xdrstdio(XDR *xdr);
47 #else
48 XDR *new_xdrstdio(FILE *stream, enum xdr_op xop);
49 XDR *set_xdrstdio(XDR *xdr, FILE *stream, enum xdr_op xop);
50 void delete_xdrstdio(XDR *xdr);
51 #endif
52 
53 extern "C" bool_t xdr_str(XDR *xdrs, string &buf);
54 
55 namespace libdap
56 {
57 
58 class XDRUtils
59 {
60 private: XDRUtils() {}
61 public:
62  // xdr_coder is used as an argument to xdr procedures that encode groups
63  // of things (e.g., xdr_array()). Each leaf class's constructor must set
64  // this.
65  static xdrproc_t xdr_coder( const Type &t ) ;
66 } ;
67 
68 } // namespace libdap
69 
70 #endif // S_XDRUtils_h
71 
Type
Identifies the data type.
Definition: Type.h:94
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- -
static xdrproc_t xdr_coder(const Type &t)
Returns a function used to encode elements of an array.
Definition: XDRUtils.cc:145
-
-
- - - - diff --git a/html/XMLWriter_8cc_source.html b/html/XMLWriter_8cc_source.html deleted file mode 100644 index 3da794dc6..000000000 --- a/html/XMLWriter_8cc_source.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - -libdap: XMLWriter.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
XMLWriter.cc
-
-
-
1 
2 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
3 // Access Protocol.
4 
5 // Copyright (c) 2010 OPeNDAP, Inc.
6 // Author: James Gallagher <jgallagher@opendap.org>
7 //
8 // This library is free software; you can redistribute it and/or
9 // modify it under the terms of the GNU Lesser General Public
10 // License as published by the Free Software Foundation; either
11 // version 2.1 of the License, or (at your option) any later version.
12 //
13 // This library is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 // Lesser General Public License for more details.
17 //
18 // You should have received a copy of the GNU Lesser General Public
19 // License along with this library; if not, write to the Free Software
20 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 //
22 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
23 
24 /*
25  * XMLWriter.cpp
26  *
27  * Created on: Jul 28, 2010
28  * Author: jimg
29  */
30 
31 #include "config.h"
32 
33 #include <libxml/encoding.h>
34 #include <libxml/xmlwriter.h>
35 
36 #include "XMLWriter.h"
37 #include "InternalErr.h"
38 
39 // TODO - Bite the bullet and make the encoding UTF-8 as required by dap4. This will break a lot of tests but the baselines could be amended using a bash script and sed.
40 const char *ENCODING = "ISO-8859-1";
41 const int XML_BUF_SIZE = 2000000;
42 
43 using namespace libdap;
44 
45 XMLWriter::XMLWriter(const string &pad) {
46  // LEAK The LIBXML_TEST_VERSION macro leaks 40 bytes according to valgrind
47  // on centos7. jhrg 6/19/19
48  // LIBXML_TEST_VERSION;
49 
50  /* Create a new XML buffer, to which the XML document will be
51  * written */
52  try {
53  if (!(d_doc_buf = xmlBufferCreateSize(XML_BUF_SIZE)))
54  throw InternalErr(__FILE__, __LINE__, "Error allocating the xml buffer");
55 
56  xmlBufferSetAllocationScheme(d_doc_buf, XML_BUFFER_ALLOC_DOUBLEIT);
57 
58  /* Create a new XmlWriter for memory, with no compression.
59  * Remark: there is no compression for this kind of xmlTextWriter */
60  if (!(d_writer = xmlNewTextWriterMemory(d_doc_buf, 0)))
61  throw InternalErr(__FILE__, __LINE__, "Error allocating memory for xml writer");
62 
63  if (xmlTextWriterSetIndent(d_writer, pad.length()) < 0)
64  throw InternalErr(__FILE__, __LINE__, "Error starting indentation for response document ");
65 
66  if (xmlTextWriterSetIndentString(d_writer, (const xmlChar*)pad.c_str()) < 0)
67  throw InternalErr(__FILE__, __LINE__, "Error setting indentation for response document ");
68 
69  d_started = true;
70  d_ended = false;
71 
72  /* Start the document with the xml default for the version,
73  * encoding ISO 8859-1 and the default for the standalone
74  * declaration. MY_ENCODING defined at top of this file*/
75  if (xmlTextWriterStartDocument(d_writer, NULL, ENCODING, NULL) < 0)
76  throw InternalErr(__FILE__, __LINE__, "Error starting xml response document");
77  }
78  catch (InternalErr &e) {
79  m_cleanup();
80  throw;
81  }
82 
83 }
84 
85 XMLWriter::~XMLWriter() {
86  m_cleanup();
87 }
88 
89 void XMLWriter::m_cleanup() {
90  // make sure the buffer and writer are all cleaned up
91  if (d_writer) {
92  xmlFreeTextWriter(d_writer); // This frees both d_writer and d_doc_buf
93  d_writer = 0;
94  // d_doc_buf = 0;
95  }
96 
97  // We could be here because of an exception and d_writer might be zero
98  if (d_doc_buf) {
99  xmlBufferFree(d_doc_buf);
100  d_doc_buf = 0;
101  }
102 
103  d_started = false;
104  d_ended = false;
105 }
106 
107 const char *XMLWriter::get_doc() {
108  if (d_writer && d_started) {
109  if (xmlTextWriterEndDocument(d_writer) < 0)
110  throw InternalErr(__FILE__, __LINE__, "Error ending the document");
111 
112  d_ended = true;
113 
114  // must call this before getting the buffer content. Odd, but appears to be true.
115  // jhrg
116  xmlFreeTextWriter(d_writer);
117  d_writer = 0;
118  }
119 
120  if (!d_doc_buf->content)
121  throw InternalErr(__FILE__, __LINE__, "Error retrieving response document as string");
122 
123  return (const char *)d_doc_buf->content;
124 }
125 
126 unsigned int XMLWriter::get_doc_size() {
127  if (d_writer && d_started) {
128  if (xmlTextWriterEndDocument(d_writer) < 0)
129  throw InternalErr(__FILE__, __LINE__, "Error ending the document");
130 
131  d_ended = true;
132 
133  // must call this before getting the buffer content. Odd, but appears to be true.
134  // jhrg
135  xmlFreeTextWriter(d_writer);
136  d_writer = 0;
137  }
138 
139  if (!d_doc_buf->content)
140  throw InternalErr(__FILE__, __LINE__, "Error retrieving response document as string");
141 
142  // how much of the buffer is in use?
143  return d_doc_buf->use;
144 }
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
A class for software fault reporting.
Definition: InternalErr.h:64
-
-
- - - - diff --git a/html/XMLWriter_8h_source.html b/html/XMLWriter_8h_source.html deleted file mode 100644 index 2f1b85e94..000000000 --- a/html/XMLWriter_8h_source.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - -libdap: XMLWriter.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
XMLWriter.h
-
-
-
1 
2 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
3 // Access Protocol.
4 
5 // Copyright (c) 2010 OPeNDAP, Inc.
6 // Author: James Gallagher <jgallagher@opendap.org>
7 //
8 // This library is free software; you can redistribute it and/or
9 // modify it under the terms of the GNU Lesser General Public
10 // License as published by the Free Software Foundation; either
11 // version 2.1 of the License, or (at your option) any later version.
12 //
13 // This library is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 // Lesser General Public License for more details.
17 //
18 // You should have received a copy of the GNU Lesser General Public
19 // License along with this library; if not, write to the Free Software
20 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 //
22 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
23 /*
24  * XMLWriter.h
25  *
26  * Created on: Jul 28, 2010
27  * Author: jimg
28  */
29 
30 #ifndef XMLWRITER_H_
31 #define XMLWRITER_H_
32 
33 #include <libxml/xmlwriter.h>
34 
35 #include <string>
36 
37 namespace libdap {
38 
39 class XMLWriter {
40 private:
41  // Various xml writer stuff
42  xmlTextWriterPtr d_writer;
43  xmlBufferPtr d_doc_buf;
44  bool d_started;
45  bool d_ended;
46 
47  std::string d_doc;
48 
49  void m_cleanup() ;
50 
51 public:
52  XMLWriter(const std::string &pad = " ");
53  virtual ~XMLWriter();
54 
55  xmlTextWriterPtr get_writer() const { return d_writer; }
56  const char *get_doc();
57  unsigned int get_doc_size();
58 };
59 
60 } // namespace libdap
61 
62 #endif /* XMLWRITER_H_ */
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- -
-
- - - - diff --git a/html/annotated.html b/html/annotated.html deleted file mode 100644 index f8b828eb5..000000000 --- a/html/annotated.html +++ /dev/null @@ -1,215 +0,0 @@ - - - - - - - -libdap: Class List - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Class List
-
-
-
Here are the classes, structs, unions and interfaces with brief descriptions:
-
[detail level 123]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 Nfunctions
 NlibdapTop level DAP object to house generic methods
 Cbinary_function
 CCrc32
 Cd4_ceFlexLexer
 Cd4_functionFlexLexer
 CGetOpt
-
-
-
- - - - diff --git a/html/annotated_dup.js b/html/annotated_dup.js deleted file mode 100644 index e463b89ef..000000000 --- a/html/annotated_dup.js +++ /dev/null @@ -1,17 +0,0 @@ -var annotated_dup = -[ - [ "functions", null, [ - [ "GeoConstraint", "classfunctions_1_1GeoConstraint.html", "classfunctions_1_1GeoConstraint" ], - [ "GeoGridFunction", "classfunctions_1_1GeoGridFunction.html", "classfunctions_1_1GeoGridFunction" ], - [ "GridFunction", "classfunctions_1_1GridFunction.html", "classfunctions_1_1GridFunction" ], - [ "GridGeoConstraint", "classfunctions_1_1GridGeoConstraint.html", "classfunctions_1_1GridGeoConstraint" ], - [ "gse_arg", "structfunctions_1_1gse__arg.html", "structfunctions_1_1gse__arg" ], - [ "GSEClause", "classfunctions_1_1GSEClause.html", "classfunctions_1_1GSEClause" ] - ] ], - [ "libdap", "namespacelibdap.html", "namespacelibdap" ], - [ "binary_function", "classbinary__function.html", null ], - [ "Crc32", "classCrc32.html", "classCrc32" ], - [ "d4_ceFlexLexer", "classd4__ceFlexLexer.html", null ], - [ "d4_functionFlexLexer", "classd4__functionFlexLexer.html", null ], - [ "GetOpt", "classGetOpt.html", "classGetOpt" ] -]; \ No newline at end of file diff --git a/html/arg-nonnull_8h_source.html b/html/arg-nonnull_8h_source.html deleted file mode 100644 index f54a2e529..000000000 --- a/html/arg-nonnull_8h_source.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -libdap: arg-nonnull.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
arg-nonnull.h
-
-
-
1 /* A C macro for declaring that specific arguments must not be NULL.
2  Copyright (C) 2009-2011 Free Software Foundation, Inc.
3 
4  This program is free software: you can redistribute it and/or modify it
5  under the terms of the GNU General Public License as published
6  by the Free Software Foundation; either version 3 of the License, or
7  (at your option) any later version.
8 
9  This program is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  Lesser General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with this program. If not, see <http://www.gnu.org/licenses/>. */
16 
17 /* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
18  that the values passed as arguments n, ..., m must be non-NULL pointers.
19  n = 1 stands for the first argument, n = 2 for the second argument etc. */
20 #ifndef _GL_ARG_NONNULL
21 # if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
22 # define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
23 # else
24 # define _GL_ARG_NONNULL(params)
25 # endif
26 #endif
-
- - - - diff --git a/html/bc_s.png b/html/bc_s.png deleted file mode 100644 index 224b29aa9847d5a4b3902efd602b7ddf7d33e6c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT diff --git a/html/bdwn.png b/html/bdwn.png deleted file mode 100644 index 940a0b950443a0bb1b216ac03c45b8a16c955452..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T - - - - - - -libdap: c++defs.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
c++defs.h
-
-
-
1 /* C++ compatible function declaration macros.
2  Copyright (C) 2010-2011 Free Software Foundation, Inc.
3 
4  This program is free software: you can redistribute it and/or modify it
5  under the terms of the GNU General Public License as published
6  by the Free Software Foundation; either version 3 of the License, or
7  (at your option) any later version.
8 
9  This program is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  Lesser General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with this program. If not, see <http://www.gnu.org/licenses/>. */
16 
17 #ifndef _GL_CXXDEFS_H
18 #define _GL_CXXDEFS_H
19 
20 /* The three most frequent use cases of these macros are:
21 
22  * For providing a substitute for a function that is missing on some
23  platforms, but is declared and works fine on the platforms on which
24  it exists:
25 
26  #if @GNULIB_FOO@
27  # if !@HAVE_FOO@
28  _GL_FUNCDECL_SYS (foo, ...);
29  # endif
30  _GL_CXXALIAS_SYS (foo, ...);
31  _GL_CXXALIASWARN (foo);
32  #elif defined GNULIB_POSIXCHECK
33  ...
34  #endif
35 
36  * For providing a replacement for a function that exists on all platforms,
37  but is broken/insufficient and needs to be replaced on some platforms:
38 
39  #if @GNULIB_FOO@
40  # if @REPLACE_FOO@
41  # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
42  # undef foo
43  # define foo rpl_foo
44  # endif
45  _GL_FUNCDECL_RPL (foo, ...);
46  _GL_CXXALIAS_RPL (foo, ...);
47  # else
48  _GL_CXXALIAS_SYS (foo, ...);
49  # endif
50  _GL_CXXALIASWARN (foo);
51  #elif defined GNULIB_POSIXCHECK
52  ...
53  #endif
54 
55  * For providing a replacement for a function that exists on some platforms
56  but is broken/insufficient and needs to be replaced on some of them and
57  is additionally either missing or undeclared on some other platforms:
58 
59  #if @GNULIB_FOO@
60  # if @REPLACE_FOO@
61  # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
62  # undef foo
63  # define foo rpl_foo
64  # endif
65  _GL_FUNCDECL_RPL (foo, ...);
66  _GL_CXXALIAS_RPL (foo, ...);
67  # else
68  # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@
69  _GL_FUNCDECL_SYS (foo, ...);
70  # endif
71  _GL_CXXALIAS_SYS (foo, ...);
72  # endif
73  _GL_CXXALIASWARN (foo);
74  #elif defined GNULIB_POSIXCHECK
75  ...
76  #endif
77 */
78 
79 /* _GL_EXTERN_C declaration;
80  performs the declaration with C linkage. */
81 #if defined __cplusplus
82 # define _GL_EXTERN_C extern "C"
83 #else
84 # define _GL_EXTERN_C extern
85 #endif
86 
87 /* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
88  declares a replacement function, named rpl_func, with the given prototype,
89  consisting of return type, parameters, and attributes.
90  Example:
91  _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
92  _GL_ARG_NONNULL ((1)));
93  */
94 #define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
95  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
96 #define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
97  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
98 
99 /* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
100  declares the system function, named func, with the given prototype,
101  consisting of return type, parameters, and attributes.
102  Example:
103  _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
104  _GL_ARG_NONNULL ((1)));
105  */
106 #define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
107  _GL_EXTERN_C rettype func parameters_and_attributes
108 
109 /* _GL_CXXALIAS_RPL (func, rettype, parameters);
110  declares a C++ alias called GNULIB_NAMESPACE::func
111  that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
112  Example:
113  _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
114  */
115 #define _GL_CXXALIAS_RPL(func,rettype,parameters) \
116  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
117 #if defined __cplusplus && defined GNULIB_NAMESPACE
118 # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
119  namespace GNULIB_NAMESPACE \
120  { \
121  rettype (*const func) parameters = ::rpl_func; \
122  } \
123  _GL_EXTERN_C int _gl_cxxalias_dummy
124 #else
125 # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
126  _GL_EXTERN_C int _gl_cxxalias_dummy
127 #endif
128 
129 /* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
130  is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
131  except that the C function rpl_func may have a slightly different
132  declaration. A cast is used to silence the "invalid conversion" error
133  that would otherwise occur. */
134 #if defined __cplusplus && defined GNULIB_NAMESPACE
135 # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
136  namespace GNULIB_NAMESPACE \
137  { \
138  rettype (*const func) parameters = \
139  reinterpret_cast<rettype(*)parameters>(::rpl_func); \
140  } \
141  _GL_EXTERN_C int _gl_cxxalias_dummy
142 #else
143 # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
144  _GL_EXTERN_C int _gl_cxxalias_dummy
145 #endif
146 
147 /* _GL_CXXALIAS_SYS (func, rettype, parameters);
148  declares a C++ alias called GNULIB_NAMESPACE::func
149  that redirects to the system provided function func, if GNULIB_NAMESPACE
150  is defined.
151  Example:
152  _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
153  */
154 #if defined __cplusplus && defined GNULIB_NAMESPACE
155  /* If we were to write
156  rettype (*const func) parameters = ::func;
157  like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
158  better (remove an indirection through a 'static' pointer variable),
159  but then the _GL_CXXALIASWARN macro below would cause a warning not only
160  for uses of ::func but also for uses of GNULIB_NAMESPACE::func. */
161 # define _GL_CXXALIAS_SYS(func,rettype,parameters) \
162  namespace GNULIB_NAMESPACE \
163  { \
164  static rettype (*func) parameters = ::func; \
165  } \
166  _GL_EXTERN_C int _gl_cxxalias_dummy
167 #else
168 # define _GL_CXXALIAS_SYS(func,rettype,parameters) \
169  _GL_EXTERN_C int _gl_cxxalias_dummy
170 #endif
171 
172 /* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
173  is like _GL_CXXALIAS_SYS (func, rettype, parameters);
174  except that the C function func may have a slightly different declaration.
175  A cast is used to silence the "invalid conversion" error that would
176  otherwise occur. */
177 #if defined __cplusplus && defined GNULIB_NAMESPACE
178 # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
179  namespace GNULIB_NAMESPACE \
180  { \
181  static rettype (*func) parameters = \
182  reinterpret_cast<rettype(*)parameters>(::func); \
183  } \
184  _GL_EXTERN_C int _gl_cxxalias_dummy
185 #else
186 # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
187  _GL_EXTERN_C int _gl_cxxalias_dummy
188 #endif
189 
190 /* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
191  is like _GL_CXXALIAS_SYS (func, rettype, parameters);
192  except that the C function is picked among a set of overloaded functions,
193  namely the one with rettype2 and parameters2. Two consecutive casts
194  are used to silence the "cannot find a match" and "invalid conversion"
195  errors that would otherwise occur. */
196 #if defined __cplusplus && defined GNULIB_NAMESPACE
197  /* The outer cast must be a reinterpret_cast.
198  The inner cast: When the function is defined as a set of overloaded
199  functions, it works as a static_cast<>, choosing the designated variant.
200  When the function is defined as a single variant, it works as a
201  reinterpret_cast<>. The parenthesized cast syntax works both ways. */
202 # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
203  namespace GNULIB_NAMESPACE \
204  { \
205  static rettype (*func) parameters = \
206  reinterpret_cast<rettype(*)parameters>( \
207  (rettype2(*)parameters2)(::func)); \
208  } \
209  _GL_EXTERN_C int _gl_cxxalias_dummy
210 #else
211 # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
212  _GL_EXTERN_C int _gl_cxxalias_dummy
213 #endif
214 
215 /* _GL_CXXALIASWARN (func);
216  causes a warning to be emitted when ::func is used but not when
217  GNULIB_NAMESPACE::func is used. func must be defined without overloaded
218  variants. */
219 #if defined __cplusplus && defined GNULIB_NAMESPACE
220 # define _GL_CXXALIASWARN(func) \
221  _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
222 # define _GL_CXXALIASWARN_1(func,namespace) \
223  _GL_CXXALIASWARN_2 (func, namespace)
224 /* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
225  we enable the warning only when not optimizing. */
226 # if !__OPTIMIZE__
227 # define _GL_CXXALIASWARN_2(func,namespace) \
228  _GL_WARN_ON_USE (func, \
229  "The symbol ::" #func " refers to the system function. " \
230  "Use " #namespace "::" #func " instead.")
231 # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
232 # define _GL_CXXALIASWARN_2(func,namespace) \
233  extern __typeof__ (func) func
234 # else
235 # define _GL_CXXALIASWARN_2(func,namespace) \
236  _GL_EXTERN_C int _gl_cxxalias_dummy
237 # endif
238 #else
239 # define _GL_CXXALIASWARN(func) \
240  _GL_EXTERN_C int _gl_cxxalias_dummy
241 #endif
242 
243 /* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
244  causes a warning to be emitted when the given overloaded variant of ::func
245  is used but not when GNULIB_NAMESPACE::func is used. */
246 #if defined __cplusplus && defined GNULIB_NAMESPACE
247 # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
248  _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
249  GNULIB_NAMESPACE)
250 # define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
251  _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
252 /* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
253  we enable the warning only when not optimizing. */
254 # if !__OPTIMIZE__
255 # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
256  _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
257  "The symbol ::" #func " refers to the system function. " \
258  "Use " #namespace "::" #func " instead.")
259 # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
260 # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
261  extern __typeof__ (func) func
262 # else
263 # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
264  _GL_EXTERN_C int _gl_cxxalias_dummy
265 # endif
266 #else
267 # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
268  _GL_EXTERN_C int _gl_cxxalias_dummy
269 #endif
270 
271 #endif /* _GL_CXXDEFS_H */
-
- - - - diff --git a/html/ce__parser_8h_source.html b/html/ce__parser_8h_source.html deleted file mode 100644 index e4aed1d3b..000000000 --- a/html/ce__parser_8h_source.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -libdap: ce_parser.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
ce_parser.h
-
-
-
1 
2 #ifndef CE_PARSER_H_
3 #define CE_PARSER_H_
4 
5 namespace libdap
6 {
7 
9 {
10  ConstraintEvaluator *eval;
11  DDS *dds;
12 
13  ce_parser_arg() : eval(0), dds(0)
14  {}
15  ce_parser_arg(ConstraintEvaluator *e, DDS *d) : eval(e), dds(d)
16  {}
17  virtual ~ce_parser_arg()
18  {}
19 
20  ConstraintEvaluator *get_eval()
21  {
22  return eval;
23  }
24  void set_eval(ConstraintEvaluator *obj)
25  {
26  eval = obj;
27  }
28 
29  DDS *get_dds()
30  {
31  return dds;
32  }
33  void set_dds(DDS *obj)
34  {
35  dds = obj;
36  }
37 };
38 
39 } // namespace libdap
40 
41 #endif // CE_PARSER_H_
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- - -
Evaluate a constraint expression.
-
-
- - - - diff --git a/html/cgi__util_8h_source.html b/html/cgi__util_8h_source.html deleted file mode 100644 index 3a01b1024..000000000 --- a/html/cgi__util_8h_source.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -libdap: cgi_util.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
cgi_util.h
-
-
-
1 /*
2  * cgi_util.h
3  *
4  * Compatibility header file. Use <mime_util.h> instead.
5  *
6  * Created on: Aug 27, 2009
7  * Author: jimg
8  */
9 
10 #ifndef CGI_UTIL_H_
11 #define CGI_UTIL_H_
12 
13 #include <mime_util.h>
14 
15 #endif /* CGI_UTIL_H_ */
-
- - - - diff --git a/html/chunked__istream_8cc_source.html b/html/chunked__istream_8cc_source.html deleted file mode 100644 index 588ef5716..000000000 --- a/html/chunked__istream_8cc_source.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - -libdap: chunked_istream.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
chunked_istream.cc
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2009 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 //
25 // Portions of this code were taken verbatim from Josuttis,
26 // "The C++ Standard Library," p.672
27 
28 #include "config.h"
29 
30 #include <stdint.h>
31 #include <arpa/inet.h>
32 
33 #include <cstring>
34 #include <vector>
35 
36 #include "chunked_stream.h"
37 #include "chunked_istream.h"
38 
39 #include "Error.h"
40 
41 //#define DODS_DEBUG
42 //#define DODS_DEBUG2
43 #ifdef DODS_DEBUG
44 #include <iostream>
45 #endif
46 
47 #include "util.h"
48 #include "debug.h"
49 
50 namespace libdap {
51 
52 /*
53  This code does not use a 'put back' buffer, but here's a picture of the
54  d_buffer pointer, eback(), gptr() and egptr() that can be used to see how
55  the I/O Stream library's streambuf class works. For the case with no
56  putback, just imagine it as zero and eliminate the leftmost extension. This
57  might also come in useful if the code was extended to support put back. I
58  removed that feature because I don't see it being used with our chunked
59  transmission protocol and it requires an extra call to memcopy() when data
60  are added to the internal buffer.
61 
62  d_buffer d_buffer + putBack
63  | |
64  v v
65  |---------|--------------------------------------------|....
66  | | | .
67  |---------|--------------------------------------------|....
68  ^ ^ ^
69  | | |
70  eback() gptr() egptr()
71 
72  */
73 
83 std::streambuf::int_type
85 {
86  DBG(cerr << "underflow..." << endl);
87  DBG2(cerr << "eback(): " << (void*)eback() << ", gptr(): " << (void*)(gptr()-eback()) << ", egptr(): " << (void*)(egptr()-eback()) << endl);
88 
89  // return the next character; uflow() increments the puffer pointer.
90  if (gptr() < egptr())
91  return traits_type::to_int_type(*gptr());
92 
93  // gptr() == egptr() so read more data from the underlying input source.
94 
95  // To read data from the chunked stream, first read the header
96  uint32_t header;
97  d_is.read((char *) &header, 4);
98 
99  // When the endian nature of the server is encoded in the chunk header, the header is
100  // sent using network byte order
101  header = ntohl(header);
102 
103  // There are two 'EOF' cases: One where the END chunk is zero bytes and one where
104  // it holds data. In the latter case, bytes those will be read and moved into the
105  // buffer. Once those data are consumed, we'll be back here again and this read()
106  // will return EOF. See below for the other case...
107  if (d_is.eof()) return traits_type::eof();
108 
109  // (header & CHUNK_LITTLE_ENDIAN) --> is the sender little endian
110  if (!d_set_twiddle) {
111  d_twiddle_bytes = (is_host_big_endian() == (header & CHUNK_LITTLE_ENDIAN));
112  d_set_twiddle = true;
113  }
114 
115  uint32_t chunk_size = header & CHUNK_SIZE_MASK;
116 
117  DBG(cerr << "underflow: chunk size from header: " << chunk_size << endl);
118  DBG(cerr << "underflow: chunk type from header: " << hex << (header & CHUNK_TYPE_MASK) << endl);
119  DBG(cerr << "underflow: chunk byte order from header: " << hex << (header & CHUNK_BIG_ENDIAN) << endl);
120 
121  // Handle the case where the buffer is not big enough to hold the incoming chunk
122  if (chunk_size > d_buf_size) {
123  d_buf_size = chunk_size;
124  m_buffer_alloc();
125  }
126 
127  // If the END chunk has zero bytes, return EOF. See above for more information
128  if (chunk_size == 0 && (header & CHUNK_TYPE_MASK) == CHUNK_END) return traits_type::eof();
129 
130  // Read the chunk's data
131  d_is.read(d_buffer, chunk_size);
132  DBG2(cerr << "underflow: size read: " << d_is.gcount() << ", eof: " << d_is.eof() << ", bad: " << d_is.bad() << endl);
133  if (d_is.bad()) return traits_type::eof();
134 
135  DBG2(cerr << "eback(): " << (void*)eback() << ", gptr(): " << (void*)(gptr()-eback()) << ", egptr(): " << (void*)(egptr()-eback()) << endl);
136  setg(d_buffer, // beginning of put back area
137  d_buffer, // read position (gptr() == eback())
138  d_buffer + chunk_size); // end of buffer (egptr()) chunk_size == d_is.gcount() unless there's an error
139 
140  DBG2(cerr << "eback(): " << (void*)eback() << ", gptr(): " << (void*)(gptr()-eback()) << ", egptr(): " << (void*)(egptr()-eback()) << endl);
141 
142  switch (header & CHUNK_TYPE_MASK) {
143  case CHUNK_END:
144  DBG2(cerr << "Found end chunk" << endl);
145  return traits_type::to_int_type(*gptr());
146  case CHUNK_DATA:
147  return traits_type::to_int_type(*gptr());
148 
149  case CHUNK_ERR:
150  // this is pretty much the end of the show... Assume the buffer/chunk holds
151  // the error message text.
152  d_error = true;
153  d_error_message = string(d_buffer, chunk_size);
154  return traits_type::eof();
155  default:
156  d_error = true;
157  d_error_message = "Failed to read known chunk header type.";
158  return traits_type::eof();
159  }
160 }
161 
178 std::streamsize
179 chunked_inbuf::xsgetn(char* s, std::streamsize num)
180 {
181  DBG(cerr << "xsgetn... num: " << num << endl);
182 
183  // if num is <= the chars currently in the buffer
184  if (num <= (egptr() - gptr())) {
185  memcpy(s, gptr(), num);
186  gbump(num);
187 
188  return traits_type::not_eof(num);
189  }
190 
191  // else they asked for more
192  uint32_t bytes_left_to_read = num;
193 
194  // are there any bytes in the buffer? if so grab them first
195  if (gptr() < egptr()) {
196  int bytes_to_transfer = egptr() - gptr();
197  memcpy(s, gptr(), bytes_to_transfer);
198  gbump(bytes_to_transfer);
199  s += bytes_to_transfer;
200  bytes_left_to_read -= bytes_to_transfer;
201  }
202 
203  // We need to get more bytes from the underlying stream; at this
204  // point the internal buffer is empty.
205 
206  // read the remaining bytes to transfer, a chunk at a time,
207  // and put any leftover stuff in the buffer.
208 
209  // note that when the code is here, gptr() == egptr(), so the
210  // next call to read() will fall through the previous tests and
211  // read at least one chunk here.
212  bool done = false;
213  while (!done) {
214  // Get a chunk header
215  uint32_t header;
216  d_is.read((char *) &header, 4);
217 
218  header = ntohl(header);
219 
220  // There are two EOF cases: One where the END chunk is zero bytes and one where
221  // it holds data. In the latter case, those will be read and moved into the
222  // buffer. Once those data are consumed, we'll be back here again and this read()
223  // will return EOF. See below for the other case...
224  if (d_is.eof()) return traits_type::eof();
225 
226  // (header & CHUNK_LITTLE_ENDIAN) --> is the sender little endian
227  if (!d_set_twiddle) {
228  d_twiddle_bytes = (is_host_big_endian() == (header & CHUNK_LITTLE_ENDIAN));
229  d_set_twiddle = true;
230  }
231 
232  uint32_t chunk_size = header & CHUNK_SIZE_MASK;
233  DBG(cerr << "xsgetn: chunk size from header: " << chunk_size << endl);
234  DBG(cerr << "xsgetn: chunk type from header: " << hex << (header & CHUNK_TYPE_MASK) << endl);
235  DBG(cerr << "xsgetn: chunk byte order from header: " << hex << (header & CHUNK_BIG_ENDIAN) << endl);
236 
237  // handle error chunks here
238  if ((header & CHUNK_TYPE_MASK) == CHUNK_ERR) {
239  d_error = true;
240  // Note that d_buffer is not used to avoid calling resize if it is too
241  // small to hold the error message. At this point, there's not much reason
242  // to optimize transport efficiency, however.
243  std::vector<char> message(chunk_size);
244  d_is.read(&message[0], chunk_size);
245  d_error_message = string(&message[0], chunk_size);
246  // leave the buffer and gptr(), ..., in a consistent state (empty)
247  setg(d_buffer, d_buffer, d_buffer);
248  }
249  // And zero-length END chunks here.
250  else if (chunk_size == 0 && (header & CHUNK_TYPE_MASK) == CHUNK_END) {
251  return traits_type::not_eof(num-bytes_left_to_read);
252  }
253  // The next case is complicated because we read some data from the current
254  // chunk into 's' an some into the internal buffer.
255  else if (chunk_size > bytes_left_to_read) {
256  d_is.read(s, bytes_left_to_read);
257  if (d_is.bad()) return traits_type::eof();
258 
259  // Now slurp up the remain part of the chunk and store it in the buffer
260  uint32_t bytes_leftover = chunk_size - bytes_left_to_read;
261  // expand the internal buffer if needed
262  if (bytes_leftover > d_buf_size) {
263  d_buf_size = chunk_size;
264  m_buffer_alloc();
265  }
266  // read the remain stuff in to d_buffer
267  d_is.read(d_buffer, bytes_leftover);
268  if (d_is.bad()) return traits_type::eof();
269 
270  setg(d_buffer, // beginning of put back area
271  d_buffer, // read position (gptr() == eback())
272  d_buffer + bytes_leftover /*d_is.gcount()*/); // end of buffer (egptr())
273 
274  bytes_left_to_read = 0 /* -= d_is.gcount()*/;
275  }
276  else {
277  // expand the internal buffer if needed
278  if (chunk_size > d_buf_size) {
279  d_buf_size = chunk_size;
280  m_buffer_alloc();
281  }
282  // If we get a chunk that's zero bytes, Don't call read()
283  // to save the kernel context switch overhead.
284  if (chunk_size > 0) {
285  d_is.read(s, chunk_size);
286  if (d_is.bad()) return traits_type::eof();
287  bytes_left_to_read -= chunk_size /*d_is.gcount()*/;
288  s += chunk_size;
289  }
290  }
291 
292  switch (header & CHUNK_TYPE_MASK) {
293  case CHUNK_END:
294  DBG(cerr << "Found end chunk" << endl);
295  // in this case bytes_left_to_read can be > 0 because we ran out of data
296  // before reading all the requested bytes. The next read() call will return
297  // eof; this call returns the number of bytes read and transferred to 's'.
298  done = true;
299  break;
300 
301  case CHUNK_DATA:
302  done = bytes_left_to_read == 0;
303  break;
304 
305  case CHUNK_ERR:
306  // this is pretty much the end of the show... The error message has
307  // already been read above
308  return traits_type::eof();
309 
310  default:
311  d_error = true;
312  d_error_message = "Failed to read known chunk header type.";
313  return traits_type::eof();
314  }
315  }
316 
317  return traits_type::not_eof(num-bytes_left_to_read);
318 }
319 
332 std::streambuf::int_type
334 {
335  // To read data from the chunked stream, first read the header
336  uint32_t header;
337  d_is.read((char *) &header, 4);
338 
339  header = ntohl(header);
340 
341  // There are two 'EOF' cases: One where the END chunk is zero bytes and one where
342  // it holds data. In the latter case, bytes those will be read and moved into the
343  // buffer. Once those data are consumed, we'll be back here again and this read()
344  // will return EOF. See below for the other case...
345  if (d_is.eof()) return traits_type::eof();
346 
347  // (header & CHUNK_LITTLE_ENDIAN) --> is the sender little endian
348  if (!d_set_twiddle) {
349  d_twiddle_bytes = (is_host_big_endian() == (header & CHUNK_LITTLE_ENDIAN));
350  d_set_twiddle = true;
351  }
352 
353  uint32_t chunk_size = header & CHUNK_SIZE_MASK;
354 
355  DBG(cerr << "read_next_chunk: chunk size from header: " << chunk_size << endl);
356  DBG(cerr << "read_next_chunk: chunk type from header: " << hex << (header & CHUNK_TYPE_MASK) << endl);
357  DBG(cerr << "read_next_chunk: chunk byte order from header: " << hex << (header & CHUNK_BIG_ENDIAN) << endl);
358 
359  // Handle the case where the buffer is not big enough to hold the incoming chunk
360  if (chunk_size > d_buf_size) {
361  d_buf_size = chunk_size;
362  m_buffer_alloc();
363  }
364 
365  // If the END chunk has zero bytes, return EOF. See above for more information
366  if (chunk_size == 0 && (header & CHUNK_TYPE_MASK) == CHUNK_END) return traits_type::eof();
367 
368  // Read the chunk's data
369  d_is.read(d_buffer, chunk_size);
370  DBG2(cerr << "read_next_chunk: size read: " << d_is.gcount() << ", eof: " << d_is.eof() << ", bad: " << d_is.bad() << endl);
371  if (d_is.bad()) return traits_type::eof();
372 
373  DBG2(cerr << "eback(): " << (void*)eback() << ", gptr(): " << (void*)(gptr()-eback()) << ", egptr(): " << (void*)(egptr()-eback()) << endl);
374  setg(d_buffer, // beginning of put back area
375  d_buffer, // read position (gptr() == eback())
376  d_buffer + chunk_size); // end of buffer (egptr()) chunk_size == d_is.gcount() unless there's an error
377 
378  DBG2(cerr << "eback(): " << (void*)eback() << ", gptr(): " << (void*)(gptr()-eback()) << ", egptr(): " << (void*)(egptr()-eback()) << endl);
379 
380  switch (header & CHUNK_TYPE_MASK) {
381  case CHUNK_END:
382  DBG(cerr << "Found end chunk" << endl);
383  return traits_type::not_eof(chunk_size);
384 
385  case CHUNK_DATA:
386  return traits_type::not_eof(chunk_size);
387 
388  case CHUNK_ERR:
389  // this is pretty much the end of the show... Assume the buffer/chunk holds
390  // the error message text.
391  d_error = true;
392  d_error_message = string(d_buffer, chunk_size);
393  return traits_type::eof();
394 
395  default:
396  d_error = true;
397  d_error_message = "Failed to read known chunk header type.";
398  return traits_type::eof();
399  }
400 }
401 
402 }
int_type read_next_chunk()
Read a chunk Normally the chunked nature of a chunked_istream/chunked_inbuf is hidden from the caller...
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual int_type underflow()
Insert new characters into the buffer This specialization of underflow is called when the gptr() is a...
-
virtual std::streamsize xsgetn(char *s, std::streamsize num)
Read a block of data This specialization of xsgetn() reads num bytes and puts them in s first reading...
-
bool is_host_big_endian()
Does this host use big-endian byte order?
Definition: util.cc:94
-
-
- - - - diff --git a/html/chunked__istream_8h_source.html b/html/chunked__istream_8h_source.html deleted file mode 100644 index b0d56fe63..000000000 --- a/html/chunked__istream_8h_source.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -libdap: chunked_istream.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
chunked_istream.h
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2013 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 //
25 // Portions of this code were taken verbatim from Josuttis,
26 // "The C++ Standard Library," p.672
27 
28 #ifndef _chunked_istream_h
29 #define _chunked_istream_h
30 
31 #include "chunked_stream.h"
32 
33 #include <stdint.h>
34 
35 #include <streambuf>
36 #include <istream>
37 #include <stdexcept>
38 #include <string>
39 
40 namespace libdap {
41 
42 class chunked_inbuf: public std::streambuf {
43 private:
44  std::istream &d_is;
45 
46  uint32_t d_buf_size; // Size of the data buffer
47  char *d_buffer; // data buffer
48 
49  // In the original implementation of this class, the byte order of the data stream
50  // was passed in via constructors. When BYTE_ORDER_PREFIX is defined that is the
51  // case. However, when it is not defined, the byte order is read from the chunk
52  // header's high order byte (in bit position 2 - see chunked_stream.h). jhrg 11/24/13
53 
54  bool d_twiddle_bytes; // receiver-makes-right encoding (byte order)...
55  bool d_set_twiddle;
56 
57  // If an error chunk is read, save the message here
58  std::string d_error_message;
59  bool d_error;
60 
67  void m_buffer_alloc() {
68  delete[] d_buffer;
69  d_buffer = new char[d_buf_size];
70  setg(d_buffer, // beginning of put back area
71  d_buffer, // read position
72  d_buffer); // end position
73  }
74 
75 public:
98  chunked_inbuf(std::istream &is, int size)
99  : d_is(is), d_buf_size(size), d_buffer(0), d_twiddle_bytes(false), d_set_twiddle(false), d_error(false) {
100  if (d_buf_size & CHUNK_TYPE_MASK)
101  throw std::out_of_range("A chunked_outbuf (or chunked_ostream) was built using a buffer larger than 0x00ffffff");
102 
103  m_buffer_alloc();
104  }
105 
106  virtual ~chunked_inbuf() {
107  delete[] d_buffer;
108  }
109 
110  int_type read_next_chunk();
111 
112  int bytes_in_buffer() const { return (egptr() - gptr()); }
113 
114  // d_twiddle_bytes is false initially and is set to the correct value
115  // once the first chunk is read.
116  bool twiddle_bytes() const { return d_twiddle_bytes; }
117 
118  bool error() const { return d_error; }
119  std::string error_message() const { return d_error_message; }
120 
121 protected:
122  virtual int_type underflow();
123 
124  virtual std::streamsize xsgetn(char* s, std::streamsize num);
125 };
126 
127 class chunked_istream: public std::istream {
128 protected:
129  chunked_inbuf d_cbuf;
130 public:
131  chunked_istream(std::istream &is, int size) : std::istream(&d_cbuf), d_cbuf(is, size) { }
132 
133  int read_next_chunk() { return d_cbuf.read_next_chunk(); }
134 
139  int bytes_in_buffer() const { return d_cbuf.bytes_in_buffer(); }
140 
151  bool twiddle_bytes() const { return d_cbuf.twiddle_bytes(); }
152  bool error() const { return d_cbuf.error(); }
153  std::string error_message() const { return d_cbuf.error_message(); }
154 };
155 
156 }
157 
158 #endif // _chunked_istream_h
int_type read_next_chunk()
Read a chunk Normally the chunked nature of a chunked_istream/chunked_inbuf is hidden from the caller...
- -
top level DAP object to house generic methods
Definition: AISConnect.cc:30
- -
virtual int_type underflow()
Insert new characters into the buffer This specialization of underflow is called when the gptr() is a...
-
virtual std::streamsize xsgetn(char *s, std::streamsize num)
Read a block of data This specialization of xsgetn() reads num bytes and puts them in s first reading...
-
chunked_inbuf(std::istream &is, int size)
Build a chunked input buffer.
- - -
-
- - - - diff --git a/html/chunked__ostream_8cc_source.html b/html/chunked__ostream_8cc_source.html deleted file mode 100644 index 88ed14303..000000000 --- a/html/chunked__ostream_8cc_source.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -libdap: chunked_ostream.cc Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
chunked_ostream.cc
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2009 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 //
25 // Portions of this code were taken verbatim from Josuttis,
26 // "The C++ Standard Library," p.672
27 
28 #include "config.h"
29 
30 #include <arpa/inet.h>
31 
32 #include <stdint.h>
33 
34 #include <string>
35 #include <streambuf>
36 
37 #include <cstring>
38 
39 //#define DODS_DEBUG
40 
41 #include "chunked_stream.h"
42 #include "chunked_ostream.h"
43 #include "debug.h"
44 
45 namespace libdap {
46 
47 // flush the characters in the buffer
53 std::streambuf::int_type
55 {
56  DBG(cerr << "In chunked_outbuf::data_chunk" << endl);
57 
58  int32_t num = pptr() - pbase(); // num needs to be signed for the call to pbump
59 
60  // Since this is called by sync() (e.g., flush()), return 0 and do nothing
61  // when there's no data to send.
62  if (num == 0)
63  return 0;
64 
65  // here, write out the chunk headers: CHUNKTYPE and CHUNKSIZE
66  // as a 32-bit unsigned int. Here I assume that num is never
67  // more than 2^24 because that was tested in the constructor
68 
69  // Trick: This method always writes CHUNK_DATA type chunks so
70  // the chunk type is always 0x00, and given that num never has
71  // anything bigger than 24-bits, the high order byte is always
72  // 0x00. Of course bit-wise OR with 0x00 isn't going to do
73  // much anyway... Here's the general idea all the same:
74  //
75  // unsigned int chunk_header = (unsigned int)num | CHUNK_type;
76  uint32_t header = num;
77 
78  // Add encoding of host's byte order. jhrg 11/24/13
79  if (!d_big_endian) header |= CHUNK_LITTLE_ENDIAN;
80 
81  // network byte order for the header
82  header = htonl(header);
83 
84  d_os.write((const char *)&header, sizeof(int32_t));
85 
86  // Should bad() throw an error?
87  // Are these functions fast or would the bits be faster?
88  d_os.write(d_buffer, num);
89  if (d_os.eof() || d_os.bad())
90  return traits_type::eof();
91 
92  pbump(-num);
93  return num;
94 }
95 
107 std::streambuf::int_type
109 {
110  DBG(cerr << "In chunked_outbuf::end_chunk" << endl);
111 
112  int32_t num = pptr() - pbase(); // num needs to be signed for the call to pbump
113 
114  // write out the chunk headers: CHUNKTYPE and CHUNKSIZE
115  // as a 32-bit unsigned int. Here I assume that num is never
116  // more than 2^24 because that was tested in the constructor
117 
118  uint32_t header = (uint32_t)num | CHUNK_END;
119 
120 
121  // Add encoding of host's byte order. jhrg 11/24/13
122  if (!d_big_endian) header |= CHUNK_LITTLE_ENDIAN;
123 
124  // network byte order for the header
125  header = htonl(header);
126 
127  // Write out the CHUNK_END header with the byte count.
128  // This should be called infrequently, so it's probably not worth
129  // optimizing away chunk_header
130  d_os.write((const char *)&header, sizeof(uint32_t));
131 
132  // Should bad() throw an error?
133  // Are these functions fast or would the bits be faster?
134  d_os.write(d_buffer, num);
135  if (d_os.eof() || d_os.bad())
136  return traits_type::eof();
137 
138  pbump(-num);
139  return num;
140 }
141 
149 std::streambuf::int_type
150 chunked_outbuf::err_chunk(const std::string &m)
151 {
152  DBG(cerr << "In chunked_outbuf::err_chunk" << endl);
153  std::string msg = m;
154 
155  // Figure out how many chars are in the buffer - these will be
156  // ignored.
157  int32_t num = pptr() - pbase(); // num needs to be signed for the call to pbump
158 
159  // write out the chunk headers: CHUNKTYPE and CHUNKSIZE
160  // as a 32-bit unsigned int. Here I assume that num is never
161  // more than 2^24 because that was tested in the constructor
162  if (msg.length() > 0x00FFFFFF)
163  msg = "Error message too long";
164 
165  uint32_t header = (uint32_t)msg.length() | CHUNK_ERR;
166 
167  // Add encoding of host's byte order. jhrg 11/24/13
168  if (!d_big_endian) header |= CHUNK_LITTLE_ENDIAN;
169 
170  // network byte order for the header
171  header = htonl(header);
172 
173 
174  // Write out the CHUNK_END header with the byte count.
175  // This should be called infrequently, so it's probably not worth
176  // optimizing away chunk_header
177  d_os.write((const char *)&header, sizeof(uint32_t));
178 
179  // Should bad() throw an error?
180  // Are these functions fast or would the bits be faster?
181  d_os.write(msg.data(), msg.length());
182  if (d_os.eof() || d_os.bad())
183  return traits_type::eof();
184 
185  // Reset the buffer pointer, effectively ignoring what's in there now
186  pbump(-num);
187 
188  // return the number of characters ignored
189  return num;
190 }
191 
204 std::streambuf::int_type
206 {
207  DBG(cerr << "In chunked_outbuf::overflow" << endl);
208 
209  // Note that the buffer and eptr() were set so that when pptr() is
210  // at the end of the buffer, there is actually one more character
211  // available in the buffer.
212  if (!traits_type::eq_int_type(c, traits_type::eof())) {
213  *pptr() = traits_type::not_eof(c);
214  pbump(1);
215  }
216  // flush the buffer
217  if (data_chunk() == traits_type::eof()) {
218  //Error
219  return traits_type::eof();
220  }
221 
222  return traits_type::not_eof(c);
223 }
224 
225 /*
226 
227  d_buffer
228  |
229  v
230  |--------------------------------------------|....
231  | | .
232  |--------------------------------------------|....
233  ^ ^ ^
234  | | |
235  pbase() pptr() epptr()
236 
237  */
238 
246 std::streamsize
247 chunked_outbuf::xsputn(const char *s, std::streamsize num)
248 {
249  DBG(cerr << "In chunked_outbuf::xsputn: num: " << num << endl);
250 
251  // if the current block of data will fit in the buffer, put it there.
252  // else, there is at least a complete chunk between what's in the buffer
253  // and what's in 's'; send a chunk header, the stuff in the buffer and
254  // bytes from 's' to make a complete chunk. Then iterate over 's' sending
255  // more chunks until there's less than a complete chunk left in 's'. Put
256  // the bytes remaining 's' in the buffer. Return the number of bytes sent
257  // or 0 if an error is encountered.
258 
259  int32_t bytes_in_buffer = pptr() - pbase(); // num needs to be signed for the call to pbump
260 
261  // Will num bytes fit in the buffer? The location of epptr() is one back from
262  // the actual end of the buffer, so the next char written will trigger a write
263  // of the buffer as a new data chunk.
264  if (bytes_in_buffer + num < d_buf_size) {
265  DBG2(cerr << ":xsputn: buffering num: " << num << endl);
266  memcpy(pptr(), s, num);
267  pbump(num);
268  return traits_type::not_eof(num);
269  }
270 
271  // If here, write a chunk header and a chunk's worth of data by combining the
272  // data in the buffer and some data from 's'.
273  uint32_t header = d_buf_size;
274 
275  // Add encoding of host's byte order. jhrg 11/24/13
276  if (!d_big_endian) header |= CHUNK_LITTLE_ENDIAN;
277 
278  // network byte order for the header
279  header = htonl(header);
280 
281  d_os.write((const char *)&header, sizeof(int32_t)); // Data chunk's CHUNK_TYPE is 0x00000000
282 
283  // Reset the pptr() and epptr() now in case of an error exit. See the 'if'
284  // at the end of this for the only code from here down that will modify the
285  // pptr() value.
286  setp(d_buffer, d_buffer + (d_buf_size - 1));
287 
288  d_os.write(d_buffer, bytes_in_buffer);
289  if (d_os.eof() || d_os.bad())
290  return traits_type::not_eof(0);
291 
292  int bytes_to_fill_out_buffer = d_buf_size - bytes_in_buffer;
293  d_os.write(s, bytes_to_fill_out_buffer);
294  if (d_os.eof() || d_os.bad())
295  return traits_type::not_eof(0);
296  s += bytes_to_fill_out_buffer;
297  uint32_t bytes_still_to_send = num - bytes_to_fill_out_buffer;
298 
299  // Now send all the remaining data in s until the amount remaining doesn't
300  // fill a complete chunk and buffer those data.
301  while (bytes_still_to_send >= d_buf_size) {
302  // This is header for a chunk of d_buf_size bytes; the size was set above
303  d_os.write((const char *) &header, sizeof(int32_t));
304  d_os.write(s, d_buf_size);
305  if (d_os.eof() || d_os.bad()) return traits_type::not_eof(0);
306  s += d_buf_size;
307  bytes_still_to_send -= d_buf_size;
308  }
309 
310  if (bytes_still_to_send > 0) {
311  // if the code is here, one or more chunks have been sent, the
312  // buffer is empty and there are < d_buf_size bytes to send. Buffer
313  // them.
314  memcpy(d_buffer, s, bytes_still_to_send);
315  pbump(bytes_still_to_send);
316  }
317 
318  // Unless an error was detected while writing to the stream, the code must
319  // have sent num bytes.
320  return traits_type::not_eof(num);
321 }
322 
328 std::streambuf::int_type
330 {
331  DBG(cerr << "In chunked_outbuf::sync" << endl);
332 
333  if (data_chunk() == traits_type::eof()) {
334  // Error
335  return traits_type::not_eof(-1);
336  }
337  return traits_type::not_eof(0);
338 }
339 
340 } // namespace libdap
virtual int_type overflow(int c)
Virtual method called when the internal buffer would overflow. When the internal buffer fills...
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual std::streamsize xsputn(const char *s, std::streamsize num)
Write bytes to the chunked stream Write the bytes in s to the chunked stream.
-
int_type end_chunk()
Send an end chunk.
-
int_type err_chunk(const std::string &msg)
Send an error chunk While building up the next chunk, send an error chunk, ignoring the data currentl...
-
virtual int_type sync()
Synchronize the stream with its data sink.
-
int_type data_chunk()
Write out the contents of the buffer as a chunk.
-
-
- - - - diff --git a/html/chunked__ostream_8h_source.html b/html/chunked__ostream_8h_source.html deleted file mode 100644 index 549d9ab31..000000000 --- a/html/chunked__ostream_8h_source.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - -libdap: chunked_ostream.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
chunked_ostream.h
-
-
-
1 // -*- mode: c++; c-basic-offset:4 -*-
2 
3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
4 // Access Protocol.
5 
6 // Copyright (c) 2013 OPeNDAP, Inc.
7 // Author: James Gallagher <jgallagher@opendap.org>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 //
23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
24 //
25 // Portions of this code were taken verbatim from Josuttis,
26 // "The C++ Standard Library," p.672
27 
28 #ifndef _chunkedostream_h
29 #define _chunkedostream_h
30 
31 #include "chunked_stream.h"
32 
33 #include <streambuf>
34 #include <ostream>
35 #include <stdexcept> // std::out_of_range
36 
37 #include "util.h"
38 
39 namespace libdap {
40 
41 class chunked_ostream;
42 
53 class chunked_outbuf: public std::streambuf {
54  friend class chunked_ostream;
55 protected:
56  std::ostream &d_os; // Write stuff here
57  unsigned int d_buf_size; // Size of the data buffer
58  char *d_buffer; // Data buffer
59  bool d_big_endian;
60 
61 public:
62  chunked_outbuf(std::ostream &os, unsigned int buf_size) : d_os(os), d_buf_size(buf_size), d_buffer(0) {
63  if (d_buf_size & CHUNK_TYPE_MASK)
64  throw std::out_of_range("A chunked_outbuf (or chunked_ostream) was built using a buffer larger than 0x00ffffff");
65 
66  d_big_endian = is_host_big_endian();
67  d_buffer = new char[buf_size];
68  // Trick: making the pointers think the buffer is one char smaller than it
69  // really is ensures that overflow() will be called when there's space for
70  // one more character.
71  setp(d_buffer, d_buffer + (buf_size - 1));
72  }
73 
74  virtual ~chunked_outbuf() {
75  // call end_chunk() and not sync()
76  end_chunk();
77 
78  delete[] d_buffer;
79  }
80 
81 protected:
82  // data_chunk and end_chunk might not be needed because they
83  // are called via flush() and ~chunked_outbuf(), resp. jhrg 9/13/13
84  int_type data_chunk(); // sync() and overflow() call this
85  int_type end_chunk();
86 
87  int_type err_chunk(const std::string &msg);
88 
89  virtual std::streamsize xsputn(const char *s, std::streamsize num);
90  // Manipulate the buffer pointers using pbump() after filling the buffer
91  // and then call data_chunk(). Leave remainder in buffer. Or copy logic
92  // for data_chunk() into loop in this code.
93 
94  virtual int_type overflow(int c);
95  virtual int_type sync();
96 };
97 
120 class chunked_ostream: public std::ostream {
121 protected:
122  chunked_outbuf d_cbuf;
123 public:
129  chunked_ostream(std::ostream &os, unsigned int buf_size) : std::ostream(&d_cbuf), d_cbuf(os, buf_size) { }
130 
139  int_type write_end_chunk() { return d_cbuf.end_chunk(); }
140 
149  int_type write_data_chunk() { return d_cbuf.data_chunk(); }
150 
159  int_type write_err_chunk(const std::string &msg) { return d_cbuf.err_chunk(msg); }
160 };
161 
162 }
163 
164 #endif // _chunkedostream_h
int_type write_end_chunk()
Send an end chunk. Normally, an end chunk is sent by closing the chunked_ostream, but this method can...
-
STL namespace.
-
virtual int_type overflow(int c)
Virtual method called when the internal buffer would overflow. When the internal buffer fills...
-
top level DAP object to house generic methods
Definition: AISConnect.cc:30
-
virtual std::streamsize xsputn(const char *s, std::streamsize num)
Write bytes to the chunked stream Write the bytes in s to the chunked stream.
-
int_type end_chunk()
Send an end chunk.
-
int_type err_chunk(const std::string &msg)
Send an error chunk While building up the next chunk, send an error chunk, ignoring the data currentl...
-
virtual int_type sync()
Synchronize the stream with its data sink.
-
chunked_ostream(std::ostream &os, unsigned int buf_size)
-
int_type data_chunk()
Write out the contents of the buffer as a chunk.
-
output buffer for a chunked stream This performs buffered output encoding the data in the stream usin...
-
int_type write_data_chunk()
Send the current contents of the buffer as a data chunk. Normally, the chunked_ostream object waits u...
-
A C++ stream class for chunked data. This class uses the chunked_outbuf class to provide for chunked ...
-
int_type write_err_chunk(const std::string &msg)
Send an error message down the stream. When called, this method dumps all the data currently in the b...
-
bool is_host_big_endian()
Does this host use big-endian byte order?
Definition: util.cc:94
-
-
- - - - diff --git a/html/chunked__stream_8h_source.html b/html/chunked__stream_8h_source.html deleted file mode 100644 index e9247d261..000000000 --- a/html/chunked__stream_8h_source.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -libdap: chunked_stream.h Source File - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
chunked_stream.h
-
-
-
1 /*
2  * chunked_stream.h
3  *
4  * Created on: Sep 15, 2013
5  * Author: jimg
6  */
7 
8 #ifndef CHUNK_STREAM_H_
9 #define CHUNK_STREAM_H_
10 
11 // These are the three chunk types
12 #define CHUNK_DATA 0x00000000
13 #define CHUNK_END 0x01000000
14 #define CHUNK_ERR 0x02000000
15 
16 // This is the bit in the chunk that indicates the byte-order of the data,
17 // not the byte order of the chunk. The chunk is always in network byte order.
18 #define CHUNK_LITTLE_ENDIAN 0x04000000
19 
20 // Chunk type mask masks off the low bytes and the little endian bit.
21 // The three chunk types (DATA, END and ERR) are mutually exclusive.
22 #define CHUNK_TYPE_MASK 0x03000000
23 #define CHUNK_SIZE_MASK 0x00FFFFFF
24 
25 #define CHUNK_SIZE 4096
26 
27 #define BYTE_ORDER_PREFIX 0
28 #define HEADER_IN_NETWORK_BYTE_ORDER 1
29 
30 #endif /* CHUNK_STREAM_H_ */
-
- - - - diff --git a/html/classCrc32-members.html b/html/classCrc32-members.html deleted file mode 100644 index 1f1447fd8..000000000 --- a/html/classCrc32-members.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Crc32 Member List
-
-
- -

This is the complete list of members for Crc32, including all inherited members.

- - - - - - - -
AddData(const uint8_t *pData, const uint32_t length)Crc32inline
checksum typedef (defined in Crc32)Crc32
Crc32()Crc32inline
GetCrc32() constCrc32inline
Reset()Crc32inline
~Crc32() (defined in Crc32)Crc32inline
-
- - - - diff --git a/html/classCrc32.html b/html/classCrc32.html deleted file mode 100644 index 35f90b6e0..000000000 --- a/html/classCrc32.html +++ /dev/null @@ -1,232 +0,0 @@ - - - - - - - -libdap: Crc32 Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
- -
-
Crc32 Class Reference
-
-
- - - - -

-Public Types

-typedef uint32_t checksum
 
- - - - - - - - - -

-Public Member Functions

void AddData (const uint8_t *pData, const uint32_t length)
 
 Crc32 ()
 
checksum GetCrc32 () const
 
void Reset ()
 
-

Detailed Description

-
-

Definition at line 76 of file crc.h.

-

Constructor & Destructor Documentation

- -

◆ Crc32()

- -
-
- - - - - -
- - - - - - - -
Crc32::Crc32 ()
-
-inline
-
-

Initialize the Crc32 instance to 0.

- -

Definition at line 84 of file crc.h.

- -
-
-

Member Function Documentation

- -

◆ AddData()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void Crc32::AddData (const uint8_t * pData,
const uint32_t length 
)
-
-inline
-
-

Add new data, incrementally computing the CRC 32 checksum. If length is zero, calling this has no effect on the checksum.

- -

Definition at line 98 of file crc.h.

- -
-
- -

◆ GetCrc32()

- -
-
- - - - - -
- - - - - - - -
checksum Crc32::GetCrc32 () const
-
-inline
-
-

Get the current value of the CRC 32 checksum.

Returns
An unsigned 32-bit checksum value.
- -

Definition at line 110 of file crc.h.

- -
-
- -

◆ Reset()

- -
-
- - - - - -
- - - - - - - -
void Crc32::Reset ()
-
-inline
-
-

Re-initialize/re-set the Crc32 instance to zero.

Note
The constructor uses this method to initialize a new instance.
- -

Definition at line 92 of file crc.h.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - diff --git a/html/classCrc32.js b/html/classCrc32.js deleted file mode 100644 index 0bab43571..000000000 --- a/html/classCrc32.js +++ /dev/null @@ -1,9 +0,0 @@ -var classCrc32 = -[ - [ "checksum", "classCrc32.html#a8756f4605109e402248bd603bd56fc19", null ], - [ "Crc32", "classCrc32.html#ae9fe98ed803007de13e63c03e80fe322", null ], - [ "~Crc32", "classCrc32.html#a007ddcc8fdae521f8635cd93bde4d9e7", null ], - [ "AddData", "classCrc32.html#a79e430ee82b3cec76543f345f2361784", null ], - [ "GetCrc32", "classCrc32.html#a386ca030f3214b8d3a9560e09478ca66", null ], - [ "Reset", "classCrc32.html#a3722922b4cd2902eff207e78d03e66c2", null ] -]; \ No newline at end of file diff --git a/html/classGetOpt-members.html b/html/classGetOpt-members.html deleted file mode 100644 index d246e9a90..000000000 --- a/html/classGetOpt-members.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
GetOpt Member List
-
-
- -

This is the complete list of members for GetOpt, including all inherited members.

- - - - - - - - - -
GetOpt(int argc, char **argv, const char *optstring) (defined in GetOpt)GetOpt
nargc (defined in GetOpt)GetOpt
nargv (defined in GetOpt)GetOpt
noptstring (defined in GetOpt)GetOpt
operator()(void) (defined in GetOpt)GetOpt
optarg (defined in GetOpt)GetOpt
opterr (defined in GetOpt)GetOpt
optind (defined in GetOpt)GetOpt
-
- - - - diff --git a/html/classGetOpt.html b/html/classGetOpt.html deleted file mode 100644 index dc9b61048..000000000 --- a/html/classGetOpt.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - -libdap: GetOpt Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
- -
-
GetOpt Class Reference
-
-
- - - - - - -

-Public Member Functions

GetOpt (int argc, char **argv, const char *optstring)
 
-int operator() (void)
 
- - - - - - - - - - - - - -

-Public Attributes

-int nargc
 
-char ** nargv
 
-const char * noptstring
 
-char * optarg
 
-int opterr
 
-int optind
 
-

Detailed Description

-
-

Definition at line 38 of file GetOpt.h.

-

The documentation for this class was generated from the following files: -
-
- - - - diff --git a/html/classGetOpt.js b/html/classGetOpt.js deleted file mode 100644 index 9a4267cdb..000000000 --- a/html/classGetOpt.js +++ /dev/null @@ -1,11 +0,0 @@ -var classGetOpt = -[ - [ "GetOpt", "classGetOpt.html#a3913c6f8599a646f4c6d38b1a8ba6d02", null ], - [ "operator()", "classGetOpt.html#a82a1d7889a8d09e26642cd37910bff69", null ], - [ "nargc", "classGetOpt.html#a19f6ceaa6e052ea635631251bce834d1", null ], - [ "nargv", "classGetOpt.html#ae38ae4602c7c714f5786a4c861fa5307", null ], - [ "noptstring", "classGetOpt.html#a771a4ce3aaf4024fdf38da2e8eb29cbe", null ], - [ "optarg", "classGetOpt.html#a91ea52012d129019668f18031778e220", null ], - [ "opterr", "classGetOpt.html#a1d1996d4af2d28ad67544bcb2c54f420", null ], - [ "optind", "classGetOpt.html#ac7c98d20c4259638e8588c28e70724c2", null ] -]; \ No newline at end of file diff --git a/html/classbinary__function.html b/html/classbinary__function.html deleted file mode 100644 index bfaaef2b7..000000000 --- a/html/classbinary__function.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -libdap: binary_function Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
binary_function Class Reference
-
-
-
-Inheritance diagram for binary_function:
-
-
Inheritance graph
- - -
-
The documentation for this class was generated from the following file: -
-
- - - - diff --git a/html/classbinary__function__inherit__graph.map b/html/classbinary__function__inherit__graph.map deleted file mode 100644 index 711387c5e..000000000 --- a/html/classbinary__function__inherit__graph.map +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/html/classbinary__function__inherit__graph.md5 b/html/classbinary__function__inherit__graph.md5 deleted file mode 100644 index 47b1ca39a..000000000 --- a/html/classbinary__function__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -612c296b6a74223ce7cc649e044acb5a \ No newline at end of file diff --git a/html/classbinary__function__inherit__graph.png b/html/classbinary__function__inherit__graph.png deleted file mode 100644 index 9011a265105ee67cd1dac3e8ec33c229c33dd0b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8846 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 - - - - - - -libdap: d4_ceFlexLexer Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
d4_ceFlexLexer Class Reference
-
-
-
-Inheritance diagram for d4_ceFlexLexer:
-
-
Inheritance graph
- - - -
-
The documentation for this class was generated from the following file: -
-
- - - - diff --git a/html/classd4__ceFlexLexer__inherit__graph.map b/html/classd4__ceFlexLexer__inherit__graph.map deleted file mode 100644 index 56ba5a812..000000000 --- a/html/classd4__ceFlexLexer__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/classd4__ceFlexLexer__inherit__graph.md5 b/html/classd4__ceFlexLexer__inherit__graph.md5 deleted file mode 100644 index a659c26d4..000000000 --- a/html/classd4__ceFlexLexer__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -79e9d42d4cba971d6d35671178117c3e \ No newline at end of file diff --git a/html/classd4__ceFlexLexer__inherit__graph.png b/html/classd4__ceFlexLexer__inherit__graph.png deleted file mode 100644 index 0af19e1836883dae649c2e119a5bd342607673c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7570 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 - - - - - - -libdap: d4_functionFlexLexer Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
d4_functionFlexLexer Class Reference
-
-
-
-Inheritance diagram for d4_functionFlexLexer:
-
-
Inheritance graph
- - - -
-
The documentation for this class was generated from the following file: -
-
- - - - diff --git a/html/classd4__functionFlexLexer__inherit__graph.map b/html/classd4__functionFlexLexer__inherit__graph.map deleted file mode 100644 index f4716210d..000000000 --- a/html/classd4__functionFlexLexer__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/classd4__functionFlexLexer__inherit__graph.md5 b/html/classd4__functionFlexLexer__inherit__graph.md5 deleted file mode 100644 index 1cc2468f1..000000000 --- a/html/classd4__functionFlexLexer__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -407e20d15726715d7b4f1c7eb8ae69d5 \ No newline at end of file diff --git a/html/classd4__functionFlexLexer__inherit__graph.png b/html/classd4__functionFlexLexer__inherit__graph.png deleted file mode 100644 index a95bd95e95766d5fe5627f36ec7eb12048702255..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8238 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 - - - - - - -libdap: Class Index - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
Class Index
-
-
-
a | b | c | d | e | f | g | h | i | k | l | m | n | p | r | s | u | v | x
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  a  
-
d4_functionFlexLexer   DDS (libdap)   HTTPCacheInterruptHandler (libdap)   Response (libdap)   
D4AsyncUtil (libdap)   DDXParseFailed (libdap)   HTTPCacheResponse (libdap)   ResponseTooBigErr (libdap)   
AISConnect (libdap)   D4Attribute (libdap)   DDXParser (libdap)   HTTPCacheTable (libdap)   rvalue (libdap)   
AISDatabaseParser (libdap)   D4Attributes (libdap)   Array::dimension (libdap)   HTTPConnect (libdap)   
  s  
-
AISDatabaseReadFailed (libdap)   D4BaseTypeFactory (libdap)   DMR (libdap)   HTTPResponse (libdap)   
AISDatabaseWriteFailed (libdap)   D4CEScanner (libdap)   DODSFilter (libdap)   
  i  
-
Sequence (libdap)   
AISMerge (libdap)   D4Connect (libdap)   
  e  
-
ServerFunction (libdap)   
AISResources (libdap)   D4ConstraintEvaluator (libdap)   Int16 (libdap)   ServerFunctionsList (libdap)   
AlarmHandler (libdap)   D4Dimension (libdap)   AttrTable::entry (libdap)   Int32 (libdap)   SignalHandler (libdap)   
Ancillary (libdap)   D4Dimensions (libdap)   Error (libdap)   Int64 (libdap)   SignalHandlerRegisteredErr (libdap)   
Array (libdap)   D4Enum (libdap)   EventHandler (libdap)   Int8 (libdap)   StdinResponse (libdap)   
AttrTable (libdap)   D4EnumDef (libdap)   
  f  
-
InternalErr (libdap)   Str (libdap)   
  b  
-
D4EnumDefs (libdap)   
  k  
-
Structure (libdap)   
D4FilterClause (libdap)   fdinbuf (libdap)   
  u  
-
BaseType (libdap)   D4FilterClauseList (libdap)   fdistream (libdap)   Keywords (libdap)   
BaseTypeFactory (libdap)   D4FunctionEvaluator (libdap)   fdostream (libdap)   
  l  
-
UInt16 (libdap)   
binary_function   D4FunctionScanner (libdap)   fdoutbuf (libdap)   UInt32 (libdap)   
Byte (libdap)   D4Group (libdap)   Float32 (libdap)   Locker (libdap)   UInt64 (libdap)   
  c  
-
D4Map (libdap)   Float64 (libdap)   
  m  
-
UnMarshaller (libdap)   
D4Maps (libdap)   fpinbuf (libdap)   Url (libdap)   
cache_entry (libdap)   D4Opaque (libdap)   fpistream (libdap)   Marshaller (libdap)   
  v  
-
HTTPCacheTable::CacheEntry (libdap)   D4ParseError (libdap)   
  g  
-
MarshallerThread (libdap)   
ce_parser_arg (libdap)   D4ParserSax2 (libdap)   
  n  
-
Vector (libdap)   
ChildLocker (libdap)   D4RValue (libdap)   GeoConstraint (functions)   
  x  
-
chunked_inbuf (libdap)   D4RValueList (libdap)   GeoGridFunction (functions)   NoSuchPrimaryResource (libdap)   
chunked_istream (libdap)   D4Sequence (libdap)   GetOpt   
  p  
-
XDRFileMarshaller (libdap)   
chunked_ostream (libdap)   D4StreamMarshaller (libdap)   Grid (libdap)   XDRFileUnMarshaller (libdap)   
chunked_outbuf (libdap)   D4StreamUnMarshaller (libdap)   GridFunction (functions)   parser_arg (libdap)   XDRStreamMarshaller (libdap)   
Clause (libdap)   DAPCache3 (libdap)   GridGeoConstraint (functions)   PipeResponse (libdap)   XDRStreamUnMarshaller (libdap)   
Connect (libdap)   DapIndent (libdap)   gse_arg (functions)   
  r  
-
XDRUtils (libdap)   
ConstraintEvaluator (libdap)   DapObj (libdap)   GSEClause (functions)   XMLWriter (libdap)   
Constructor (libdap)   DapXmlNamspaces (libdap)   
  h  
-
RCReader (libdap)   
Crc32   DAS (libdap)   Regex (libdap)   
  d  
-
DataDDS (libdap)   HTTPCache (libdap)   Resource (libdap)   
d4_ceFlexLexer   
-
a | b | c | d | e | f | g | h | i | k | l | m | n | p | r | s | u | v | x
-
-
- - - - diff --git a/html/classfunctions_1_1GSEClause-members.html b/html/classfunctions_1_1GSEClause-members.html deleted file mode 100644 index be6bdccc2..000000000 --- a/html/classfunctions_1_1GSEClause-members.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
functions::GSEClause Member List
-
-
- -

This is the complete list of members for functions::GSEClause, including all inherited members.

- - - - - - - - - - - - - - -
get_map() constfunctions::GSEClause
get_map_max_value() constfunctions::GSEClause
get_map_min_value() constfunctions::GSEClause
get_map_name() constfunctions::GSEClause
get_start() constfunctions::GSEClause
get_stop() constfunctions::GSEClause
GSEClause(libdap::Grid *grid, const string &map, const double value, const relop op) (defined in functions::GSEClause)functions::GSEClause
GSEClause(libdap::Grid *grid, const string &map, const double value1, const relop op1, const double value2, const relop op2) (defined in functions::GSEClause)functions::GSEClause
OK() constfunctions::GSEClause
set_map(libdap::Array *map)functions::GSEClause
set_start(int start)functions::GSEClause
set_stop(int stop)functions::GSEClause
~GSEClause() (defined in functions::GSEClause)functions::GSEClausevirtual
-
- - - - diff --git a/html/classfunctions_1_1GSEClause.html b/html/classfunctions_1_1GSEClause.html deleted file mode 100644 index 4774cc1da..000000000 --- a/html/classfunctions_1_1GSEClause.html +++ /dev/null @@ -1,358 +0,0 @@ - - - - - - - -libdap: functions::GSEClause Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
- -
-
functions::GSEClause Class Reference
-
-
- -

#include <GSEClause.h>

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

bool OK () const
 
Constructors
GSEClause (libdap::Grid *grid, const string &map, const double value, const relop op)
 
GSEClause (libdap::Grid *grid, const string &map, const double value1, const relop op1, const double value2, const relop op2)
 
Accessors
libdap::Arrayget_map () const
 Get a pointer to the map variable constrained by this clause. More...
 
string get_map_name () const
 Get the name of the map variable constrained by this clause. More...
 
int get_start () const
 Get the starting index of the clause's map variable as constrained by this clause. More...
 
int get_stop () const
 Get the stopping index of the clause's map variable as constrained by this clause. More...
 
string get_map_min_value () const
 Get the minimum map vector value. More...
 
string get_map_max_value () const
 Get the maximum map vector value. More...
 
Mutators
void set_map (libdap::Array *map)
 Set the pointer to the map vector contrained by this clause. More...
 
void set_start (int start)
 Set the starting index. More...
 
void set_stop (int stop)
 Set the stopping index. More...
 
-

Detailed Description

-

Holds the results of parsing one of the Grid Selection Expression clauses. The Grid selection function takes a set of clauses as arguments and must create one instance of this class for each of those clauses. The GridSelectionExpr class holds N instances of this class.

-
Author
James Gallagher
-
See also
GridSelectionExpr
- -

Definition at line 73 of file GSEClause.h.

-

Member Function Documentation

- -

◆ get_map()

- -
-
- - - - - - - -
Array * functions::GSEClause::get_map () const
-
- -

Get a pointer to the map variable constrained by this clause.

-
Returns
The Array object.
- -

Definition at line 251 of file GSEClause.cc.

- -
-
- -

◆ get_map_max_value()

- -
-
- - - - - - - -
string functions::GSEClause::get_map_max_value () const
-
- -

Get the maximum map vector value.

-

Useful in messages back to users.

Returns
The maximum map vetor value.
- -

Definition at line 324 of file GSEClause.cc.

- -
-
- -

◆ get_map_min_value()

- -
-
- - - - - - - -
string functions::GSEClause::get_map_min_value () const
-
- -

Get the minimum map vector value.

-

Useful in messages back to users.

Returns
The minimum map vetor value.
- -

Definition at line 314 of file GSEClause.cc.

- -
-
- -

◆ get_map_name()

- -
-
- - - - - - - -
string functions::GSEClause::get_map_name () const
-
- -

Get the name of the map variable constrained by this clause.

-
Returns
The Array object's name.
- -

Definition at line 269 of file GSEClause.cc.

- -
-
- -

◆ get_start()

- -
-
- - - - - - - -
int functions::GSEClause::get_start () const
-
- -

Get the starting index of the clause's map variable as constrained by this clause.

-
Returns
The start index.
- -

Definition at line 278 of file GSEClause.cc.

- -
-
- -

◆ get_stop()

- -
-
- - - - - - - -
int functions::GSEClause::get_stop () const
-
- -

Get the stopping index of the clause's map variable as constrained by this clause.

-
Returns
The stop index.
- -

Definition at line 295 of file GSEClause.cc.

- -
-
- -

◆ OK()

- -
-
- - - - - - - -
bool functions::GSEClause::OK () const
-
-

Class invariant.

Returns
True if the object is valid, otherwise False.
- -

Definition at line 238 of file GSEClause.cc.

- -
-
- -

◆ set_map()

- -
-
- - - - - - - - -
void functions::GSEClause::set_map (libdap::Arraymap)
-
- -

Set the pointer to the map vector contrained by this clause.

-

Note that this method also sets the name of the map vector.

Returns
void
- -

Definition at line 261 of file GSEClause.cc.

- -
-
- -

◆ set_start()

- -
-
- - - - - - - - -
void functions::GSEClause::set_start (int start)
-
- -

Set the starting index.

-
Returns
void
- -

Definition at line 286 of file GSEClause.cc.

- -
-
- -

◆ set_stop()

- -
-
- - - - - - - - -
void functions::GSEClause::set_stop (int stop)
-
- -

Set the stopping index.

-
Returns
void
- -

Definition at line 304 of file GSEClause.cc.

- -
-
-
The documentation for this class was generated from the following files: -
-
- - - - diff --git a/html/classfunctions_1_1GSEClause.js b/html/classfunctions_1_1GSEClause.js deleted file mode 100644 index 9611d03f7..000000000 --- a/html/classfunctions_1_1GSEClause.js +++ /dev/null @@ -1,16 +0,0 @@ -var classfunctions_1_1GSEClause = -[ - [ "GSEClause", "classfunctions_1_1GSEClause.html#a66711f0a29af7d07f605969e40dc68dd", null ], - [ "GSEClause", "classfunctions_1_1GSEClause.html#a27a281e7af0833dcccbaf73b91d2036e", null ], - [ "~GSEClause", "classfunctions_1_1GSEClause.html#a48204b08b5556b5052dd4c63542b7389", null ], - [ "get_map", "classfunctions_1_1GSEClause.html#a421d3e10992fca87eff85d5baa5a7e74", null ], - [ "get_map_max_value", "classfunctions_1_1GSEClause.html#abc9a7d7b0ee725eaa7ff0a028d47f607", null ], - [ "get_map_min_value", "classfunctions_1_1GSEClause.html#adb2676c9f7409cd092414b5ee6835a8a", null ], - [ "get_map_name", "classfunctions_1_1GSEClause.html#a1973c47ef5ecc920d7a79ac627cfc335", null ], - [ "get_start", "classfunctions_1_1GSEClause.html#ad3c0a7c9c9989cdae01e5c106ae18aa8", null ], - [ "get_stop", "classfunctions_1_1GSEClause.html#a6d2a1d6a8356c627e5280d1fc9bf867c", null ], - [ "OK", "classfunctions_1_1GSEClause.html#a7fd18899b9cbab6f866fe21a8330e163", null ], - [ "set_map", "classfunctions_1_1GSEClause.html#ae7e84764029f1fb554aa10ceb09aa386", null ], - [ "set_start", "classfunctions_1_1GSEClause.html#ab1ea8b17260adabda8b44e23aad574d3", null ], - [ "set_stop", "classfunctions_1_1GSEClause.html#a5f0309f54e1735acd8d0406f7f54d107", null ] -]; \ No newline at end of file diff --git a/html/classfunctions_1_1GeoConstraint-members.html b/html/classfunctions_1_1GeoConstraint-members.html deleted file mode 100644 index 284c1665f..000000000 --- a/html/classfunctions_1_1GeoConstraint-members.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
functions::GeoConstraint Member List
-
-
- -

This is the complete list of members for functions::GeoConstraint, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
apply_constraint_to_data()=0functions::GeoConstraintpure virtual
build_lat_lon_maps()=0functions::GeoConstraintprotectedpure virtual
categorize_latitude() constfunctions::GeoConstraintprotectedvirtual
categorize_notation(const double left, const double right) constfunctions::GeoConstraintprotected
find_latitude_indeces(double top, double bottom, LatitudeSense sense, int &latitude_index_top, int &latitude_index_bottom) constfunctions::GeoConstraintprotected
find_longitude_indeces(double left, double right, int &longitude_index_left, int &longitude_index_right) constfunctions::GeoConstraintprotected
flip_latitude_within_array(libdap::Array &a, int lat_length, int lon_length) (defined in functions::GeoConstraint)functions::GeoConstraintprotectedvirtual
GeoConstraint()functions::GeoConstraint
get_array_data() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_array_data_size() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_coards_lat_units() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_coards_lon_units() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_lat() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_lat_dim() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_lat_length() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_lat_names() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_latitude_index_bottom() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_latitude_index_top() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_latitude_sense() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_lon() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_lon_dim() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_lon_length() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_lon_names() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_longitude_index_left() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_longitude_index_right() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_longitude_notation() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
GridGeoConstraintTest (defined in functions::GeoConstraint)functions::GeoConstraintfriend
inverted enum value (defined in functions::GeoConstraint)functions::GeoConstraint
is_bounding_box_set() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
is_bounding_box_valid(const double left, const double top, const double right, const double bottom) const (defined in functions::GeoConstraint)functions::GeoConstraintprotectedvirtual
is_longitude_rightmost() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
lat_lon_dimensions_ok()=0functions::GeoConstraintprotectedpure virtual
LatitudeSense enum namefunctions::GeoConstraint
neg_pos enum value (defined in functions::GeoConstraint)functions::GeoConstraint
normal enum value (defined in functions::GeoConstraint)functions::GeoConstraint
Notation enum namefunctions::GeoConstraint
pos enum value (defined in functions::GeoConstraint)functions::GeoConstraint
reorder_data_longitude_axis(libdap::Array &a, libdap::Array::Dim_iter lon_dim)functions::GeoConstraintprotectedvirtual
reorder_longitude_map(int longitude_index_left)functions::GeoConstraintprotectedvirtual
set_bounding_box(double top, double left, double bottom, double right)functions::GeoConstraint
set_lat(double *lat) (defined in functions::GeoConstraint)functions::GeoConstraintinline
set_lat_dim(libdap::Array::Dim_iter lat) (defined in functions::GeoConstraint)functions::GeoConstraintinline
set_lat_length(int len) (defined in functions::GeoConstraint)functions::GeoConstraintinline
set_latitude_index_bottom(int bottom) (defined in functions::GeoConstraint)functions::GeoConstraintinline
set_latitude_index_top(int top) (defined in functions::GeoConstraint)functions::GeoConstraintinline
set_latitude_sense(LatitudeSense l) (defined in functions::GeoConstraint)functions::GeoConstraintinline
set_lon(double *lon) (defined in functions::GeoConstraint)functions::GeoConstraintinline
set_lon_dim(libdap::Array::Dim_iter lon) (defined in functions::GeoConstraint)functions::GeoConstraintinline
set_lon_length(int len) (defined in functions::GeoConstraint)functions::GeoConstraintinline
set_longitude_index_left(int left) (defined in functions::GeoConstraint)functions::GeoConstraintinline
set_longitude_index_right(int right) (defined in functions::GeoConstraint)functions::GeoConstraintinline
set_longitude_notation(Notation n) (defined in functions::GeoConstraint)functions::GeoConstraintinline
set_longitude_rightmost(bool state) (defined in functions::GeoConstraint)functions::GeoConstraintinline
transform_constraint_to_pos_notation(double &left, double &right) const (defined in functions::GeoConstraint)functions::GeoConstraintprotected
transform_longitude_to_neg_pos_notation()functions::GeoConstraintprotectedvirtual
transform_longitude_to_pos_notation()functions::GeoConstraintprotectedvirtual
transpose_vector(double *src, const int length)functions::GeoConstraintprotectedvirtual
unknown_notation enum value (defined in functions::GeoConstraint)functions::GeoConstraint
unknown_sense enum value (defined in functions::GeoConstraint)functions::GeoConstraint
~GeoConstraint() (defined in functions::GeoConstraint)functions::GeoConstraintinlinevirtual
-
- - - - diff --git a/html/classfunctions_1_1GeoConstraint.html b/html/classfunctions_1_1GeoConstraint.html deleted file mode 100644 index 7eddafb7b..000000000 --- a/html/classfunctions_1_1GeoConstraint.html +++ /dev/null @@ -1,880 +0,0 @@ - - - - - - - -libdap: functions::GeoConstraint Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
- -
-
functions::GeoConstraint Class Referenceabstract
-
-
- -

#include <GeoConstraint.h>

-
-Inheritance diagram for functions::GeoConstraint:
-
-
Inheritance graph
- - - -
- - - - - - -

-Public Types

enum  LatitudeSense { unknown_sense, -normal, -inverted - }
 
enum  Notation { unknown_notation, -pos, -neg_pos - }
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

virtual void apply_constraint_to_data ()=0
 Once the bounding box is set use this method to apply the constraint. More...
 
void set_bounding_box (double top, double left, double bottom, double right)
 
Constructors
 GeoConstraint ()
 Initialize GeoConstraint. More...
 
Accessors/Mutators
-char * get_array_data () const
 
-int get_array_data_size () const
 
-double * get_lat () const
 
-double * get_lon () const
 
-void set_lat (double *lat)
 
-void set_lon (double *lon)
 
-int get_lat_length () const
 
-int get_lon_length () const
 
-void set_lat_length (int len)
 
-void set_lon_length (int len)
 
-libdap::Array::Dim_iter get_lon_dim () const
 
-libdap::Array::Dim_iter get_lat_dim () const
 
-void set_lon_dim (libdap::Array::Dim_iter lon)
 
-void set_lat_dim (libdap::Array::Dim_iter lat)
 
-int get_latitude_index_top () const
 
-int get_latitude_index_bottom () const
 
-void set_latitude_index_top (int top)
 
-void set_latitude_index_bottom (int bottom)
 
-int get_longitude_index_left () const
 
-int get_longitude_index_right () const
 
-void set_longitude_index_left (int left)
 
-void set_longitude_index_right (int right)
 
-bool is_bounding_box_set () const
 
-bool is_longitude_rightmost () const
 
-void set_longitude_rightmost (bool state)
 
-Notation get_longitude_notation () const
 
-LatitudeSense get_latitude_sense () const
 
-void set_longitude_notation (Notation n)
 
-void set_latitude_sense (LatitudeSense l)
 
-set< string > get_coards_lat_units () const
 
-set< string > get_coards_lon_units () const
 
-set< string > get_lat_names () const
 
-set< string > get_lon_names () const
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Protected Member Functions

virtual bool build_lat_lon_maps ()=0
 
virtual LatitudeSense categorize_latitude () const
 
Notation categorize_notation (const double left, const double right) const
 
void find_latitude_indeces (double top, double bottom, LatitudeSense sense, int &latitude_index_top, int &latitude_index_bottom) const
 
void find_longitude_indeces (double left, double right, int &longitude_index_left, int &longitude_index_right) const
 
-virtual void flip_latitude_within_array (libdap::Array &a, int lat_length, int lon_length)
 
-virtual bool is_bounding_box_valid (const double left, const double top, const double right, const double bottom) const
 
virtual bool lat_lon_dimensions_ok ()=0
 
virtual void reorder_data_longitude_axis (libdap::Array &a, libdap::Array::Dim_iter lon_dim)
 
virtual void reorder_longitude_map (int longitude_index_left)
 
-void transform_constraint_to_pos_notation (double &left, double &right) const
 
virtual void transform_longitude_to_neg_pos_notation ()
 
virtual void transform_longitude_to_pos_notation ()
 
virtual void transpose_vector (double *src, const int length)
 
- - - -

-Friends

-class GridGeoConstraintTest
 
-

Detailed Description

-

Encapsulate the logic needed to handle geographical constraints when they are applied to DAP Grid (and some Array) variables.

-

This class will apply a longitude/latitude bounding box to a Grid that is a 'geo-referenced' Grid. That is, it follows the COARDS/CF conventions. This may be relaxed...

-

If the longitude range of the constraint crosses the boundary of the data array so that the constraint creates two separate rectangles, this class will arrange to return the result as a single Grid. It will do this by rearranging the data before control is passed onto the constraint evaluator and serialization logic. Here's a diagram of how it works:

-

Suppose a constraint for the longitude BB starts at the left edge of L and goes to the right edge of R:

-
-   0.0       180.0       360.0 (longitude, in degrees)
-    +----------------------+
-    |xxxxxyyyyyyyyyyyyzzzzz|
-    -----+            +-----
-    |    |            |    |
-    | R  |            | L  |
-    |    |            |    |
-    -----+            +-----
-    |                      |
-    +----------------------+
-

For example, suppose the client provides a bounding box that starts at 200 degrees and ends at 80. This class will first copy the Left part to new storage and then copy the right part, thus 'stitching together' the two halves of the constraint. The result looks like:

-
- 80.0  360.0/0.0  180.0  ~200.0 (longitude, in degrees)
-    +----------------------+
-    |zzzzzxxxxxxyyyyyyyyyyy|
-    -----++-----           |
-    |    ||    |           |
-    | L  || R  |           |
-    |    ||    |           |
-    -----++-----           |
-    |                      |
-    +----------------------+
-

The changes are made in the Grid variable itself, so once this is done the Grid should not be re-read by the CE or serialization code.

-
Author
James Gallagher
- -

Definition at line 97 of file GeoConstraint.h.

-

Member Enumeration Documentation

- -

◆ LatitudeSense

- -
-
-

Most of the time, latitude starts at the top of an array with positive values and ends up at the bottom with negative ones. But sometimes... the world is upside down.

- -

Definition at line 112 of file GeoConstraint.h.

- -
-
- -

◆ Notation

- -
-
-

The longitude extents of the constraint bounding box can be expressed two ways: using a 0/359 notation and using a -180/179 notation. I call the 0/359 notation 'pos' and the -180/179 notation 'neg_pos'.

- -

Definition at line 103 of file GeoConstraint.h.

- -
-
-

Constructor & Destructor Documentation

- -

◆ GeoConstraint()

- -
-
- - - - - - - -
functions::GeoConstraint::GeoConstraint ()
-
- -

Initialize GeoConstraint.

- -

Definition at line 550 of file GeoConstraint.cc.

- -
-
-

Member Function Documentation

- -

◆ apply_constraint_to_data()

- -
-
- - - - - -
- - - - - - - -
virtual void functions::GeoConstraint::apply_constraint_to_data ()
-
-pure virtual
-
- -

Once the bounding box is set use this method to apply the constraint.

- -

Implemented in functions::GridGeoConstraint.

- -
-
- -

◆ build_lat_lon_maps()

- -
-
- - - - - -
- - - - - - - -
virtual bool functions::GeoConstraint::build_lat_lon_maps ()
-
-protectedpure virtual
-
-

A protected method that searches for latitude and longitude map vectors and sets six key internal fields. This method returns false if either map cannot be found.

-

The d_lon, d_lon_length and d_lon_dim (and matching lat) fields must be set by this method.

-
Returns
True if the maps are found, otherwise False
- -
-
- -

◆ categorize_latitude()

- -
-
- - - - - -
- - - - - - - -
GeoConstraint::LatitudeSense functions::GeoConstraint::categorize_latitude () const
-
-protectedvirtual
-
-

Take a look at the latitude vector values and record whether the world is normal or upside down.

Returns
normal or inverted.
- -

Definition at line 332 of file GeoConstraint.cc.

- -
-
- -

◆ categorize_notation()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
GeoConstraint::Notation functions::GeoConstraint::categorize_notation (const double left,
const double right 
) const
-
-protected
-
-

A private method that determines if the longitude part of the bounding box uses 0/359 or -180/179 notation. This class only supports latitude constraints which use 90/-90 notation, so there's no need to figure out what sort of notation they use.

-
Note
This function assumes that if one of the two values is negative, then the notation is or the -180/179 form, otherwise not. If the user asks for 30 degrees to 50 degrees (or 50 to 30, for that matter), there's no real way to tell which notation they are using.
-
Parameters
- - - -
leftThe left side of the bounding box, in degrees
rightThe right side of the bounding box
-
-
-
Returns
The notation (pos or neg_pos)
- -

Definition at line 106 of file GeoConstraint.cc.

- -
-
- -

◆ find_latitude_indeces()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void functions::GeoConstraint::find_latitude_indeces (double top,
double bottom,
LatitudeSense sense,
int & latitude_index_top,
int & latitude_index_bottom 
) const
-
-protected
-
-

Scan from the top to the bottom, and the bottom to the top, looking for the top and bottom bounding box edges, respectively.

-
Parameters
- - - - - - -
topThe top edge of the bounding box
bottomThe bottom edge
senseDoes the array/grid store data with larger latitudes at the starting indices or are the latitude 'upside down?'
latitude_index_topValue-result parameter that holds the index in the grid's latitude map of the top bounding box edge. Uses a closed interval for the test.
latitude_index_bottomValue-result parameter for the bottom edge index.
-
-
- -

Definition at line 281 of file GeoConstraint.cc.

- -
-
- -

◆ find_longitude_indeces()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void functions::GeoConstraint::find_longitude_indeces (double left,
double right,
int & longitude_index_left,
int & longitude_index_right 
) const
-
-protected
-
-

Scan from the left to the right, and the right to the left, looking for the left and right bounding box edges, respectively.

-
Parameters
- - - - - -
leftThe left edge of the bounding box
rightThe right edge
longitude_index_leftValue-result parameter that holds the index in the grid's longitude map of the left bounding box edge. Uses a closed interval for the test.
longitude_index_rightValue-result parameter for the right edge index.
-
-
- -

Definition at line 203 of file GeoConstraint.cc.

- -
-
- -

◆ lat_lon_dimensions_ok()

- -
-
- - - - - -
- - - - - - - -
virtual bool functions::GeoConstraint::lat_lon_dimensions_ok ()
-
-protectedpure virtual
-
-

Are the latitude and longitude dimensions ordered so that this class can properly constrain the data? This method throws Error if lat and lon are not to two 'fastest-varying' (or 'rightmost) dimensions. It sets the internal property longitude_rightmost if that's true.

-
Note
Called by the constructor once build_lat_lon_maps() has returned.
-
Returns
True if the lat/lon maps are the two rightmost maps, false otherwise
- -
-
- -

◆ reorder_data_longitude_axis()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void functions::GeoConstraint::reorder_data_longitude_axis (libdap::Arraya,
libdap::Array::Dim_iter lon_dim 
)
-
-protectedvirtual
-
-

Reorder the data values relative to the longitude axis so that the reordered longitude map (see GeoConstraint::reorder_longitude_map()) and the data values match.

-
Note
This should be called with the Array that contains the d_lon_dim Array::Dim_iter.
-
-This method must set the d_array_data and d_array_data_size fields. If those are set, apply_constraint_to_data() will use those values.
-
-First set all the other constraints, including the latitude and then make this call. Other constraints, besides latitude, will be simple range constraints. Latitude might require that values be flipped, but that can be done after the longitude reordering takes place.
-
Todo:
Fix this code so that it works with latitude as the rightmost map
- -

Definition at line 474 of file GeoConstraint.cc.

- -
-
- -

◆ reorder_longitude_map()

- -
-
- - - - - -
- - - - - - - - -
void functions::GeoConstraint::reorder_longitude_map (int longitude_index_left)
-
-protectedvirtual
-
-

Reorder the elements in the longitude map so that the longitude constraint no longer crosses the edge of the map's storage. The d_lon field is modified.

-
Note
The d_lon vector always has double values regardless of the type of d_longitude.
-
Parameters
- - -
longitude_index_leftThe left edge of the bounding box.
-
-
- -

Definition at line 435 of file GeoConstraint.cc.

- -
-
- -

◆ set_bounding_box()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void functions::GeoConstraint::set_bounding_box (double top,
double left,
double bottom,
double right 
)
-
-

Set the bounding box for this constraint. After calling this method the object has values for the indexes for the latitude and longitude extent as well as the sense of the latitude (south pole at the top or bottom of the Array or Grid). These are used by the apply_constraint_to_data() method to actually constrain the data.

-
Parameters
- - - - - -
leftThe left side of the bounding box.
rightThe right side
topThe top
bottomThe bottom
-
-
- -

Definition at line 594 of file GeoConstraint.cc.

- -
-
- -

◆ transform_longitude_to_neg_pos_notation()

- -
-
- - - - - -
- - - - - - - -
void functions::GeoConstraint::transform_longitude_to_neg_pos_notation ()
-
-protectedvirtual
-
-

Given that the Grid has a longitude map that uses the 'pos' notation, transform it to the 'neg_pos' notation. This method modifies the d_lon array.

-
Note
: About the two notations: 0 180 360 |------------------------—|----------------------—| 0 180,-180 0
- -

Definition at line 164 of file GeoConstraint.cc.

- -
-
- -

◆ transform_longitude_to_pos_notation()

- -
-
- - - - - -
- - - - - - - -
void functions::GeoConstraint::transform_longitude_to_pos_notation ()
-
-protectedvirtual
-
-

Given that the Grid has a longitude map that uses the 'neg_pos' notation, transform it to the 'pos' notation. This method modifies the d_lon array.

-
Note
: About the two notations: 0 180 360 |------------------------—|----------------------—| 0 180,-180 0
- -

Definition at line 145 of file GeoConstraint.cc.

- -
-
- -

◆ transpose_vector()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void functions::GeoConstraint::transpose_vector (double * src,
const int length 
)
-
-protectedvirtual
-
-

Given a vector of doubles, transpose the elements. Use this to flip the latitude vector for a Grid that stores the southern latitudes at the top instead of the bottom.

-
Parameters
- - - -
srcA pointer to the vector
lengthThe number of elements in the vector
-
-
- -

Definition at line 365 of file GeoConstraint.cc.

- -
-
-
The documentation for this class was generated from the following files: -
-
- - - - diff --git a/html/classfunctions_1_1GeoConstraint.js b/html/classfunctions_1_1GeoConstraint.js deleted file mode 100644 index 032bc5a90..000000000 --- a/html/classfunctions_1_1GeoConstraint.js +++ /dev/null @@ -1,65 +0,0 @@ -var classfunctions_1_1GeoConstraint = -[ - [ "LatitudeSense", "classfunctions_1_1GeoConstraint.html#a466ff99a9e60267b70085b49cfd21652", [ - [ "unknown_sense", "classfunctions_1_1GeoConstraint.html#a466ff99a9e60267b70085b49cfd21652a45d9f461f049c0f5fe19e6b0155aeeee", null ], - [ "normal", "classfunctions_1_1GeoConstraint.html#a466ff99a9e60267b70085b49cfd21652acdd61229b63eba6058874646c5ab4009", null ], - [ "inverted", "classfunctions_1_1GeoConstraint.html#a466ff99a9e60267b70085b49cfd21652a2c137f894b5c1d1f6efaff52fe488707", null ] - ] ], - [ "Notation", "classfunctions_1_1GeoConstraint.html#aea01a18443b479e4a8eec04311bceaed", [ - [ "unknown_notation", "classfunctions_1_1GeoConstraint.html#aea01a18443b479e4a8eec04311bceaeda2821b0f971dd6c0ef43fd329eb6c99e6", null ], - [ "pos", "classfunctions_1_1GeoConstraint.html#aea01a18443b479e4a8eec04311bceaeda078d4cc94cfa3c17c098aac4c63f6c14", null ], - [ "neg_pos", "classfunctions_1_1GeoConstraint.html#aea01a18443b479e4a8eec04311bceaedac83298766d14a0dde110207c7cab474d", null ] - ] ], - [ "GeoConstraint", "classfunctions_1_1GeoConstraint.html#a0aeedfbc40843f3edc332fabc2395de6", null ], - [ "~GeoConstraint", "classfunctions_1_1GeoConstraint.html#aa38d1bc160891e5ffda6e6314eef9b59", null ], - [ "apply_constraint_to_data", "classfunctions_1_1GeoConstraint.html#a7b61dd0dd08d721764cced64c2b02672", null ], - [ "build_lat_lon_maps", "classfunctions_1_1GeoConstraint.html#a225f1a1ef91e1df9f6a9da4879858725", null ], - [ "categorize_latitude", "classfunctions_1_1GeoConstraint.html#af89805663f0534a8addedaea2f3073cd", null ], - [ "categorize_notation", "classfunctions_1_1GeoConstraint.html#a8e57a12e7c30c0a6834759b203470833", null ], - [ "find_latitude_indeces", "classfunctions_1_1GeoConstraint.html#a74db78b6220b59f1f4fb3564d7974754", null ], - [ "find_longitude_indeces", "classfunctions_1_1GeoConstraint.html#aba588b366dbb024457c89ce33a7ebb38", null ], - [ "flip_latitude_within_array", "classfunctions_1_1GeoConstraint.html#ab543dda3c43cd853346dc253d020e608", null ], - [ "get_array_data", "classfunctions_1_1GeoConstraint.html#abc1a079d788614cf3c2c62a3aaa901d7", null ], - [ "get_array_data_size", "classfunctions_1_1GeoConstraint.html#a27f2690b99c4dafea44f230614aa6227", null ], - [ "get_coards_lat_units", "classfunctions_1_1GeoConstraint.html#ad9e4dc8c0dfe47d6ea4bbcd0117e1e28", null ], - [ "get_coards_lon_units", "classfunctions_1_1GeoConstraint.html#aa9ed7bbf6915796e68725700e50039fe", null ], - [ "get_lat", "classfunctions_1_1GeoConstraint.html#a4e28cbf83a9428c3bb1571ceb383c0f8", null ], - [ "get_lat_dim", "classfunctions_1_1GeoConstraint.html#a27cc77ebf8e70f05171c9d7a37548e8c", null ], - [ "get_lat_length", "classfunctions_1_1GeoConstraint.html#a904fa6294ad859b71a7a2c76066023c8", null ], - [ "get_lat_names", "classfunctions_1_1GeoConstraint.html#ad515fdb9c4092978c53027a2b10e653d", null ], - [ "get_latitude_index_bottom", "classfunctions_1_1GeoConstraint.html#a13aaec2f1497f296224bc7e22ceda963", null ], - [ "get_latitude_index_top", "classfunctions_1_1GeoConstraint.html#a652bc2a104d7226427da48100b7db7e9", null ], - [ "get_latitude_sense", "classfunctions_1_1GeoConstraint.html#a6796dcecd0e2714c516ab923ca66ad8f", null ], - [ "get_lon", "classfunctions_1_1GeoConstraint.html#a4e0a7ee2d26ebe3c5c4fc999e4dc6003", null ], - [ "get_lon_dim", "classfunctions_1_1GeoConstraint.html#a174898231382f70a1aa7be5350c9c2d8", null ], - [ "get_lon_length", "classfunctions_1_1GeoConstraint.html#acd32245d55854ed510a5a6e1512263e9", null ], - [ "get_lon_names", "classfunctions_1_1GeoConstraint.html#a394092f0d92b61cacaf6307f357b3ed6", null ], - [ "get_longitude_index_left", "classfunctions_1_1GeoConstraint.html#a7562a0094e636d80dc84011b063aa70b", null ], - [ "get_longitude_index_right", "classfunctions_1_1GeoConstraint.html#ac518336815fc93820f9e957cc5a82f0a", null ], - [ "get_longitude_notation", "classfunctions_1_1GeoConstraint.html#a65f7243a143572fb7d1f1f6b8ebb10ae", null ], - [ "is_bounding_box_set", "classfunctions_1_1GeoConstraint.html#a9b86ba8c6771ca3433356e67e7cfb174", null ], - [ "is_bounding_box_valid", "classfunctions_1_1GeoConstraint.html#af153ea490c37f4b43401ad6294084e72", null ], - [ "is_longitude_rightmost", "classfunctions_1_1GeoConstraint.html#a54053531db798ad6b754d69f591d7619", null ], - [ "lat_lon_dimensions_ok", "classfunctions_1_1GeoConstraint.html#adba123828c5e852139d00e1ca6e92a5b", null ], - [ "reorder_data_longitude_axis", "classfunctions_1_1GeoConstraint.html#a4dcd6ab2bcfe9f1a31cc22d036525e01", null ], - [ "reorder_longitude_map", "classfunctions_1_1GeoConstraint.html#a44066d960eb11d1395ea6762e511ad4b", null ], - [ "set_bounding_box", "classfunctions_1_1GeoConstraint.html#afdcce3490cf3e4e7c9427d002c9aa1d1", null ], - [ "set_lat", "classfunctions_1_1GeoConstraint.html#a59e0aa4128c08054dfa97693cdff13b9", null ], - [ "set_lat_dim", "classfunctions_1_1GeoConstraint.html#a74fe4b4a3f51383b246147fd37ea71ef", null ], - [ "set_lat_length", "classfunctions_1_1GeoConstraint.html#a9890b176d0dbc05caee6409263c666e7", null ], - [ "set_latitude_index_bottom", "classfunctions_1_1GeoConstraint.html#ae850811aea6ced9e31ba8e088718208a", null ], - [ "set_latitude_index_top", "classfunctions_1_1GeoConstraint.html#aa23fa93e66571fa98c73367f03856405", null ], - [ "set_latitude_sense", "classfunctions_1_1GeoConstraint.html#af5f39f633bbd1dbb8bdf030beb15ead1", null ], - [ "set_lon", "classfunctions_1_1GeoConstraint.html#a4e2a3fa25e5bc7ee42b8b4a37574fe16", null ], - [ "set_lon_dim", "classfunctions_1_1GeoConstraint.html#a52c4e2ad8b9f340e79918cecb1f94586", null ], - [ "set_lon_length", "classfunctions_1_1GeoConstraint.html#aca70fc726212902bda33e4c15367d28d", null ], - [ "set_longitude_index_left", "classfunctions_1_1GeoConstraint.html#afa5523b16235c5ec56955883ef642e2d", null ], - [ "set_longitude_index_right", "classfunctions_1_1GeoConstraint.html#a63c287d4aef76ffa5bc37b80314536e3", null ], - [ "set_longitude_notation", "classfunctions_1_1GeoConstraint.html#a811d53147f4563afe3615296afb97c8a", null ], - [ "set_longitude_rightmost", "classfunctions_1_1GeoConstraint.html#a531557d47ea67b781486c828198433f7", null ], - [ "transform_constraint_to_pos_notation", "classfunctions_1_1GeoConstraint.html#a1cb2d5b6277ffc5e02810ffcdaecefc4", null ], - [ "transform_longitude_to_neg_pos_notation", "classfunctions_1_1GeoConstraint.html#a465ae9bfaf84501740e0c90a13f88d17", null ], - [ "transform_longitude_to_pos_notation", "classfunctions_1_1GeoConstraint.html#a42facca9c9db0f8d41e41dbae81edc7d", null ], - [ "transpose_vector", "classfunctions_1_1GeoConstraint.html#aebcb9ed78095f98c047622cd66448466", null ], - [ "GridGeoConstraintTest", "classfunctions_1_1GeoConstraint.html#a0f73deef1213b085f34d2d6be78eaff1", null ] -]; \ No newline at end of file diff --git a/html/classfunctions_1_1GeoConstraint__inherit__graph.map b/html/classfunctions_1_1GeoConstraint__inherit__graph.map deleted file mode 100644 index 44126357e..000000000 --- a/html/classfunctions_1_1GeoConstraint__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/classfunctions_1_1GeoConstraint__inherit__graph.md5 b/html/classfunctions_1_1GeoConstraint__inherit__graph.md5 deleted file mode 100644 index 7505ba7bf..000000000 --- a/html/classfunctions_1_1GeoConstraint__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -f129e3fae25db862b496d36c83d83245 \ No newline at end of file diff --git a/html/classfunctions_1_1GeoConstraint__inherit__graph.png b/html/classfunctions_1_1GeoConstraint__inherit__graph.png deleted file mode 100644 index 66a48aabff8bf30d1b4b052da6fb10809d427aaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66929 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 diff --git a/html/classfunctions_1_1GeoGridFunction-members.html b/html/classfunctions_1_1GeoGridFunction-members.html deleted file mode 100644 index 467584498..000000000 --- a/html/classfunctions_1_1GeoGridFunction-members.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
functions::GeoGridFunction Member List
-
-
- -

This is the complete list of members for functions::GeoGridFunction, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
canOperateOn(libdap::DDS &dds)functions::GeoGridFunctionvirtual
libdap::ServerFunction::canOperateOn(DMR &)libdap::ServerFunctioninlinevirtual
GeoGridFunction() (defined in functions::GeoGridFunction)functions::GeoGridFunctioninline
get_bool_func() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
get_btp_func() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
get_d4_function() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
get_proj_func() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
getDescriptionString() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
getDocUrl() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
getName() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
getRole() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
getTypeString() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
getUsageString() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
getVersion() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
ServerFunction() (defined in libdap::ServerFunction)libdap::ServerFunction
ServerFunction(std::string name, std::string version, std::string description, std::string usage, std::string doc_url, std::string role, bool_func f) (defined in libdap::ServerFunction)libdap::ServerFunction
ServerFunction(std::string name, std::string version, std::string description, std::string usage, std::string doc_url, std::string role, btp_func f) (defined in libdap::ServerFunction)libdap::ServerFunction
ServerFunction(std::string name, std::string version, std::string description, std::string usage, std::string doc_url, std::string role, proj_func f) (defined in libdap::ServerFunction)libdap::ServerFunction
ServerFunction(std::string name, std::string version, std::string description, std::string usage, std::string doc_url, std::string role, D4Function f) (defined in libdap::ServerFunction)libdap::ServerFunction
setDescriptionString(const std::string &desc) (defined in libdap::ServerFunction)libdap::ServerFunctioninline
setDocUrl(const std::string &url) (defined in libdap::ServerFunction)libdap::ServerFunctioninline
setFunction(bool_func bf)libdap::ServerFunctioninline
setFunction(btp_func btp) (defined in libdap::ServerFunction)libdap::ServerFunctioninline
setFunction(proj_func pf) (defined in libdap::ServerFunction)libdap::ServerFunctioninline
setFunction(D4Function pf) (defined in libdap::ServerFunction)libdap::ServerFunctioninline
setName(const std::string &n) (defined in libdap::ServerFunction)libdap::ServerFunctioninline
setRole(const std::string &r) (defined in libdap::ServerFunction)libdap::ServerFunctioninline
setUsageString(const std::string &u) (defined in libdap::ServerFunction)libdap::ServerFunctioninline
setVersion(const std::string &ver) (defined in libdap::ServerFunction)libdap::ServerFunctioninline
~GeoGridFunction() (defined in functions::GeoGridFunction)functions::GeoGridFunctioninlinevirtual
~ServerFunction() (defined in libdap::ServerFunction)libdap::ServerFunctioninlinevirtual
-
- - - - diff --git a/html/classfunctions_1_1GeoGridFunction.html b/html/classfunctions_1_1GeoGridFunction.html deleted file mode 100644 index 822967396..000000000 --- a/html/classfunctions_1_1GeoGridFunction.html +++ /dev/null @@ -1,276 +0,0 @@ - - - - - - - -libdap: functions::GeoGridFunction Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
- -
-
functions::GeoGridFunction Class Reference
-
-
-
-Inheritance diagram for functions::GeoGridFunction:
-
-
Inheritance graph
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

bool canOperateOn (libdap::DDS &dds)
 
virtual bool canOperateOn (DMR &)
 
-bool_func get_bool_func ()
 
-btp_func get_btp_func ()
 
-D4Function get_d4_function ()
 
-proj_func get_proj_func ()
 
-std::string getDescriptionString ()
 
-std::string getDocUrl ()
 
-std::string getName ()
 
-std::string getRole ()
 
-std::string getTypeString ()
 
-std::string getUsageString ()
 
-std::string getVersion ()
 
-void setDescriptionString (const std::string &desc)
 
-void setDocUrl (const std::string &url)
 
void setFunction (bool_func bf)
 
-void setFunction (btp_func btp)
 
-void setFunction (proj_func pf)
 
-void setFunction (D4Function pf)
 
-void setName (const std::string &n)
 
-void setRole (const std::string &r)
 
-void setUsageString (const std::string &u)
 
-void setVersion (const std::string &ver)
 
-

Detailed Description

-
-

Definition at line 38 of file GeoGridFunction.h.

-

Member Function Documentation

- -

◆ canOperateOn() [1/2]

- -
-
- - - - - -
- - - - - - - - -
bool functions::GeoGridFunction::canOperateOn (libdap::DDSdds)
-
-virtual
-
-

The passed DDS parameter dds is evaluated to see if it contains Grid objects whose semantics allow them to be operated on by function_geogrid()

-
Parameters
- - -
ddsThe DDS to be evaluated.
-
-
- -

Reimplemented from libdap::ServerFunction.

- -

Definition at line 210 of file GeoGridFunction.cc.

- -
-
- -

◆ canOperateOn() [2/2]

- -
-
- - - - - -
- - - - - - - - -
virtual bool libdap::ServerFunction::canOperateOn (DMR)
-
-inlinevirtualinherited
-
-
See also
canOperateOn(DDS &)
-
Parameters
- - -
TheDataset's DMR.
-
-
-
Returns
True if the function can work with the dataset, false otherwise.
- -

Definition at line 110 of file ServerFunction.h.

- -
-
- -

◆ setFunction()

- -
-
- - - - - -
- - - - - - - - -
void libdap::ServerFunction::setFunction (bool_func bf)
-
-inlineinherited
-
-

Set the C function pointer for this function object.

Note
This does not alter any of the other function pointers, so the same name can be used for all four different kinds of functions without conflict.
-
Parameters
- - -
bf
-
-
- -

Definition at line 120 of file ServerFunction.h.

- -
-
-
The documentation for this class was generated from the following files: -
-
- - - - diff --git a/html/classfunctions_1_1GeoGridFunction.js b/html/classfunctions_1_1GeoGridFunction.js deleted file mode 100644 index 03fc85f7e..000000000 --- a/html/classfunctions_1_1GeoGridFunction.js +++ /dev/null @@ -1,28 +0,0 @@ -var classfunctions_1_1GeoGridFunction = -[ - [ "GeoGridFunction", "classfunctions_1_1GeoGridFunction.html#af6acff84eff9dd3499c33ac79d885847", null ], - [ "~GeoGridFunction", "classfunctions_1_1GeoGridFunction.html#a61e435f6306cbb5aae91dc65d026836f", null ], - [ "canOperateOn", "classfunctions_1_1GeoGridFunction.html#a59fde66559f6222db4c55479a42ec782", null ], - [ "canOperateOn", "classfunctions_1_1GeoGridFunction.html#a8a3921a3d3a0ef39e1ee6bdd6011ccaf", null ], - [ "get_bool_func", "classfunctions_1_1GeoGridFunction.html#a5bdae20325085b8ddd916aeee11ba430", null ], - [ "get_btp_func", "classfunctions_1_1GeoGridFunction.html#a70f7e4e77dfc01329905fec7bdd0cb11", null ], - [ "get_d4_function", "classfunctions_1_1GeoGridFunction.html#a9241fa333c68968452774496f2be5a1d", null ], - [ "get_proj_func", "classfunctions_1_1GeoGridFunction.html#a7fac40c961c981efc88f4af915fca9cc", null ], - [ "getDescriptionString", "classfunctions_1_1GeoGridFunction.html#ace2f37824655a26ea2829f8dc45c86e0", null ], - [ "getDocUrl", "classfunctions_1_1GeoGridFunction.html#a83e00f6c062a1b1c74596d7855b6b5d5", null ], - [ "getName", "classfunctions_1_1GeoGridFunction.html#ace9a7b770f7393a2dbaf82105f292935", null ], - [ "getRole", "classfunctions_1_1GeoGridFunction.html#ac1e65b16ed6d92d7d84bbdb712b1fc3e", null ], - [ "getTypeString", "classfunctions_1_1GeoGridFunction.html#a1af2b7f618f59a597218a3669bd3b391", null ], - [ "getUsageString", "classfunctions_1_1GeoGridFunction.html#aeed53f72098111d0d45d3600bd1a9ae9", null ], - [ "getVersion", "classfunctions_1_1GeoGridFunction.html#ad8456f2fadd48af3d95bcc047feef647", null ], - [ "setDescriptionString", "classfunctions_1_1GeoGridFunction.html#abe5e41829ca9f51b598589ee2ac42bae", null ], - [ "setDocUrl", "classfunctions_1_1GeoGridFunction.html#a6fda8e417484c1bd614995d5b2fb5e4e", null ], - [ "setFunction", "classfunctions_1_1GeoGridFunction.html#a3235a206a2933b96360c00d5b021a1e5", null ], - [ "setFunction", "classfunctions_1_1GeoGridFunction.html#a86998e0c972070c7199cf8e25778234c", null ], - [ "setFunction", "classfunctions_1_1GeoGridFunction.html#a133c0bb3a95dcd7f1930a302afe376e8", null ], - [ "setFunction", "classfunctions_1_1GeoGridFunction.html#a3d2fd4489c8513bbd5642d7f0961ada7", null ], - [ "setName", "classfunctions_1_1GeoGridFunction.html#a497a6ca1cb5a83ae13b2a97b31694cc0", null ], - [ "setRole", "classfunctions_1_1GeoGridFunction.html#a18f6129a02f468a0fafdb8bf57792ebc", null ], - [ "setUsageString", "classfunctions_1_1GeoGridFunction.html#a157a6d045575300466eb0271ed887123", null ], - [ "setVersion", "classfunctions_1_1GeoGridFunction.html#a2da5e645eb715667335f839b4fa3fd42", null ] -]; \ No newline at end of file diff --git a/html/classfunctions_1_1GeoGridFunction__inherit__graph.map b/html/classfunctions_1_1GeoGridFunction__inherit__graph.map deleted file mode 100644 index 7be288d96..000000000 --- a/html/classfunctions_1_1GeoGridFunction__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/classfunctions_1_1GeoGridFunction__inherit__graph.md5 b/html/classfunctions_1_1GeoGridFunction__inherit__graph.md5 deleted file mode 100644 index bcb6b4da0..000000000 --- a/html/classfunctions_1_1GeoGridFunction__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -97c7a70a12f89a8d04153301a9e8c41d \ No newline at end of file diff --git a/html/classfunctions_1_1GeoGridFunction__inherit__graph.png b/html/classfunctions_1_1GeoGridFunction__inherit__graph.png deleted file mode 100644 index 2e2e62045dc667bce01187ba5d3d3eb3bb7b7a62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24634 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 - - - - - - -libdap: Member List - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
functions::GridFunction Member List
-
-
- -

This is the complete list of members for functions::GridFunction, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
canOperateOn(libdap::DDS &dds)functions::GridFunctionvirtual
libdap::ServerFunction::canOperateOn(DMR &)libdap::ServerFunctioninlinevirtual
get_bool_func() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
get_btp_func() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
get_d4_function() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
get_proj_func() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
getDescriptionString() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
getDocUrl() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
getName() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
getRole() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
getTypeString() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
getUsageString() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
getVersion() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
GridFunction() (defined in functions::GridFunction)functions::GridFunctioninline
ServerFunction() (defined in libdap::ServerFunction)libdap::ServerFunction
ServerFunction(std::string name, std::string version, std::string description, std::string usage, std::string doc_url, std::string role, bool_func f) (defined in libdap::ServerFunction)libdap::ServerFunction
ServerFunction(std::string name, std::string version, std::string description, std::string usage, std::string doc_url, std::string role, btp_func f) (defined in libdap::ServerFunction)libdap::ServerFunction
ServerFunction(std::string name, std::string version, std::string description, std::string usage, std::string doc_url, std::string role, proj_func f) (defined in libdap::ServerFunction)libdap::ServerFunction
ServerFunction(std::string name, std::string version, std::string description, std::string usage, std::string doc_url, std::string role, D4Function f) (defined in libdap::ServerFunction)libdap::ServerFunction
setDescriptionString(const std::string &desc) (defined in libdap::ServerFunction)libdap::ServerFunctioninline
setDocUrl(const std::string &url) (defined in libdap::ServerFunction)libdap::ServerFunctioninline
setFunction(bool_func bf)libdap::ServerFunctioninline
setFunction(btp_func btp) (defined in libdap::ServerFunction)libdap::ServerFunctioninline
setFunction(proj_func pf) (defined in libdap::ServerFunction)libdap::ServerFunctioninline
setFunction(D4Function pf) (defined in libdap::ServerFunction)libdap::ServerFunctioninline
setName(const std::string &n) (defined in libdap::ServerFunction)libdap::ServerFunctioninline
setRole(const std::string &r) (defined in libdap::ServerFunction)libdap::ServerFunctioninline
setUsageString(const std::string &u) (defined in libdap::ServerFunction)libdap::ServerFunctioninline
setVersion(const std::string &ver) (defined in libdap::ServerFunction)libdap::ServerFunctioninline
~GridFunction() (defined in functions::GridFunction)functions::GridFunctioninlinevirtual
~ServerFunction() (defined in libdap::ServerFunction)libdap::ServerFunctioninlinevirtual
-
- - - - diff --git a/html/classfunctions_1_1GridFunction.html b/html/classfunctions_1_1GridFunction.html deleted file mode 100644 index 435b8482c..000000000 --- a/html/classfunctions_1_1GridFunction.html +++ /dev/null @@ -1,276 +0,0 @@ - - - - - - - -libdap: functions::GridFunction Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
- -
-
functions::GridFunction Class Reference
-
-
-
-Inheritance diagram for functions::GridFunction:
-
-
Inheritance graph
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

bool canOperateOn (libdap::DDS &dds)
 
virtual bool canOperateOn (DMR &)
 
-bool_func get_bool_func ()
 
-btp_func get_btp_func ()
 
-D4Function get_d4_function ()
 
-proj_func get_proj_func ()
 
-std::string getDescriptionString ()
 
-std::string getDocUrl ()
 
-std::string getName ()
 
-std::string getRole ()
 
-std::string getTypeString ()
 
-std::string getUsageString ()
 
-std::string getVersion ()
 
-void setDescriptionString (const std::string &desc)
 
-void setDocUrl (const std::string &url)
 
void setFunction (bool_func bf)
 
-void setFunction (btp_func btp)
 
-void setFunction (proj_func pf)
 
-void setFunction (D4Function pf)
 
-void setName (const std::string &n)
 
-void setRole (const std::string &r)
 
-void setUsageString (const std::string &u)
 
-void setVersion (const std::string &ver)
 
-

Detailed Description

-
-

Definition at line 37 of file GridFunction.h.

-

Member Function Documentation

- -

◆ canOperateOn() [1/2]

- -
-
- - - - - -
- - - - - - - - -
bool functions::GridFunction::canOperateOn (libdap::DDSdds)
-
-virtual
-
-

The passed DDS parameter dds is evaluated to see if it contains Grid objects.

-
Parameters
- - -
ddsThe DDS to be evaluated.
-
-
- -

Reimplemented from libdap::ServerFunction.

- -

Definition at line 165 of file GridFunction.cc.

- -
-
- -

◆ canOperateOn() [2/2]

- -
-
- - - - - -
- - - - - - - - -
virtual bool libdap::ServerFunction::canOperateOn (DMR)
-
-inlinevirtualinherited
-
-
See also
canOperateOn(DDS &)
-
Parameters
- - -
TheDataset's DMR.
-
-
-
Returns
True if the function can work with the dataset, false otherwise.
- -

Definition at line 110 of file ServerFunction.h.

- -
-
- -

◆ setFunction()

- -
-
- - - - - -
- - - - - - - - -
void libdap::ServerFunction::setFunction (bool_func bf)
-
-inlineinherited
-
-

Set the C function pointer for this function object.

Note
This does not alter any of the other function pointers, so the same name can be used for all four different kinds of functions without conflict.
-
Parameters
- - -
bf
-
-
- -

Definition at line 120 of file ServerFunction.h.

- -
-
-
The documentation for this class was generated from the following files: -
-
- - - - diff --git a/html/classfunctions_1_1GridFunction.js b/html/classfunctions_1_1GridFunction.js deleted file mode 100644 index 9dd82ebc3..000000000 --- a/html/classfunctions_1_1GridFunction.js +++ /dev/null @@ -1,28 +0,0 @@ -var classfunctions_1_1GridFunction = -[ - [ "GridFunction", "classfunctions_1_1GridFunction.html#a27f5fa0f85657d19dcda49e841a49fb4", null ], - [ "~GridFunction", "classfunctions_1_1GridFunction.html#a0ab2d62f7d0f5d20d4a8ff554ab50e79", null ], - [ "canOperateOn", "classfunctions_1_1GridFunction.html#abe8f0692c35c711151d5d81a8e5a308d", null ], - [ "canOperateOn", "classfunctions_1_1GridFunction.html#a8a3921a3d3a0ef39e1ee6bdd6011ccaf", null ], - [ "get_bool_func", "classfunctions_1_1GridFunction.html#a5bdae20325085b8ddd916aeee11ba430", null ], - [ "get_btp_func", "classfunctions_1_1GridFunction.html#a70f7e4e77dfc01329905fec7bdd0cb11", null ], - [ "get_d4_function", "classfunctions_1_1GridFunction.html#a9241fa333c68968452774496f2be5a1d", null ], - [ "get_proj_func", "classfunctions_1_1GridFunction.html#a7fac40c961c981efc88f4af915fca9cc", null ], - [ "getDescriptionString", "classfunctions_1_1GridFunction.html#ace2f37824655a26ea2829f8dc45c86e0", null ], - [ "getDocUrl", "classfunctions_1_1GridFunction.html#a83e00f6c062a1b1c74596d7855b6b5d5", null ], - [ "getName", "classfunctions_1_1GridFunction.html#ace9a7b770f7393a2dbaf82105f292935", null ], - [ "getRole", "classfunctions_1_1GridFunction.html#ac1e65b16ed6d92d7d84bbdb712b1fc3e", null ], - [ "getTypeString", "classfunctions_1_1GridFunction.html#a1af2b7f618f59a597218a3669bd3b391", null ], - [ "getUsageString", "classfunctions_1_1GridFunction.html#aeed53f72098111d0d45d3600bd1a9ae9", null ], - [ "getVersion", "classfunctions_1_1GridFunction.html#ad8456f2fadd48af3d95bcc047feef647", null ], - [ "setDescriptionString", "classfunctions_1_1GridFunction.html#abe5e41829ca9f51b598589ee2ac42bae", null ], - [ "setDocUrl", "classfunctions_1_1GridFunction.html#a6fda8e417484c1bd614995d5b2fb5e4e", null ], - [ "setFunction", "classfunctions_1_1GridFunction.html#a3235a206a2933b96360c00d5b021a1e5", null ], - [ "setFunction", "classfunctions_1_1GridFunction.html#a86998e0c972070c7199cf8e25778234c", null ], - [ "setFunction", "classfunctions_1_1GridFunction.html#a133c0bb3a95dcd7f1930a302afe376e8", null ], - [ "setFunction", "classfunctions_1_1GridFunction.html#a3d2fd4489c8513bbd5642d7f0961ada7", null ], - [ "setName", "classfunctions_1_1GridFunction.html#a497a6ca1cb5a83ae13b2a97b31694cc0", null ], - [ "setRole", "classfunctions_1_1GridFunction.html#a18f6129a02f468a0fafdb8bf57792ebc", null ], - [ "setUsageString", "classfunctions_1_1GridFunction.html#a157a6d045575300466eb0271ed887123", null ], - [ "setVersion", "classfunctions_1_1GridFunction.html#a2da5e645eb715667335f839b4fa3fd42", null ] -]; \ No newline at end of file diff --git a/html/classfunctions_1_1GridFunction__inherit__graph.map b/html/classfunctions_1_1GridFunction__inherit__graph.map deleted file mode 100644 index 3f826e9ea..000000000 --- a/html/classfunctions_1_1GridFunction__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/classfunctions_1_1GridFunction__inherit__graph.md5 b/html/classfunctions_1_1GridFunction__inherit__graph.md5 deleted file mode 100644 index 9c189ab6b..000000000 --- a/html/classfunctions_1_1GridFunction__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -a3f880ac249ffd452c9ec70d4eaba43e \ No newline at end of file diff --git a/html/classfunctions_1_1GridFunction__inherit__graph.png b/html/classfunctions_1_1GridFunction__inherit__graph.png deleted file mode 100644 index c41eee857c4c2ceaa7e83541fe0459aecec6be97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23156 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 - - - - - - -libdap: Member List - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
functions::GridGeoConstraint Member List
-
-
- -

This is the complete list of members for functions::GridGeoConstraint, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
apply_constraint_to_data()functions::GridGeoConstraintvirtual
categorize_latitude() constfunctions::GeoConstraintprotectedvirtual
categorize_notation(const double left, const double right) constfunctions::GeoConstraintprotected
find_latitude_indeces(double top, double bottom, LatitudeSense sense, int &latitude_index_top, int &latitude_index_bottom) constfunctions::GeoConstraintprotected
find_longitude_indeces(double left, double right, int &longitude_index_left, int &longitude_index_right) constfunctions::GeoConstraintprotected
flip_latitude_within_array(libdap::Array &a, int lat_length, int lon_length) (defined in functions::GeoConstraint)functions::GeoConstraintprotectedvirtual
GeoConstraint()functions::GeoConstraint
get_array_data() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_array_data_size() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_coards_lat_units() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_coards_lon_units() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_constrained_grid() const (defined in functions::GridGeoConstraint)functions::GridGeoConstraintinlinevirtual
get_lat() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_lat_dim() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_lat_length() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_lat_names() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_latitude_index_bottom() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_latitude_index_top() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_latitude_sense() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_lon() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_lon_dim() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_lon_length() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_lon_names() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_longitude_index_left() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_longitude_index_right() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
get_longitude_notation() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
GridGeoConstraint(libdap::Grid *grid)functions::GridGeoConstraint
GridGeoConstraint(libdap::Grid *grid, libdap::Array *lat, libdap::Array *lon) (defined in functions::GridGeoConstraint)functions::GridGeoConstraint
GridGeoConstraintTest (defined in functions::GridGeoConstraint)functions::GridGeoConstraintfriend
inverted enum value (defined in functions::GeoConstraint)functions::GeoConstraint
is_bounding_box_set() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
is_bounding_box_valid(const double left, const double top, const double right, const double bottom) const (defined in functions::GeoConstraint)functions::GeoConstraintprotectedvirtual
is_longitude_rightmost() const (defined in functions::GeoConstraint)functions::GeoConstraintinline
LatitudeSense enum namefunctions::GeoConstraint
neg_pos enum value (defined in functions::GeoConstraint)functions::GeoConstraint
normal enum value (defined in functions::GeoConstraint)functions::GeoConstraint
Notation enum namefunctions::GeoConstraint
pos enum value (defined in functions::GeoConstraint)functions::GeoConstraint
reorder_data_longitude_axis(libdap::Array &a, libdap::Array::Dim_iter lon_dim)functions::GeoConstraintprotectedvirtual
reorder_longitude_map(int longitude_index_left)functions::GeoConstraintprotectedvirtual
set_bounding_box(double top, double left, double bottom, double right)functions::GeoConstraint
set_lat(double *lat) (defined in functions::GeoConstraint)functions::GeoConstraintinline
set_lat_dim(libdap::Array::Dim_iter lat) (defined in functions::GeoConstraint)functions::GeoConstraintinline
set_lat_length(int len) (defined in functions::GeoConstraint)functions::GeoConstraintinline
set_latitude_index_bottom(int bottom) (defined in functions::GeoConstraint)functions::GeoConstraintinline
set_latitude_index_top(int top) (defined in functions::GeoConstraint)functions::GeoConstraintinline
set_latitude_sense(LatitudeSense l) (defined in functions::GeoConstraint)functions::GeoConstraintinline
set_lon(double *lon) (defined in functions::GeoConstraint)functions::GeoConstraintinline
set_lon_dim(libdap::Array::Dim_iter lon) (defined in functions::GeoConstraint)functions::GeoConstraintinline
set_lon_length(int len) (defined in functions::GeoConstraint)functions::GeoConstraintinline
set_longitude_index_left(int left) (defined in functions::GeoConstraint)functions::GeoConstraintinline
set_longitude_index_right(int right) (defined in functions::GeoConstraint)functions::GeoConstraintinline
set_longitude_notation(Notation n) (defined in functions::GeoConstraint)functions::GeoConstraintinline
set_longitude_rightmost(bool state) (defined in functions::GeoConstraint)functions::GeoConstraintinline
transform_constraint_to_pos_notation(double &left, double &right) const (defined in functions::GeoConstraint)functions::GeoConstraintprotected
transform_longitude_to_neg_pos_notation()functions::GeoConstraintprotectedvirtual
transform_longitude_to_pos_notation()functions::GeoConstraintprotectedvirtual
transpose_vector(double *src, const int length)functions::GeoConstraintprotectedvirtual
unknown_notation enum value (defined in functions::GeoConstraint)functions::GeoConstraint
unknown_sense enum value (defined in functions::GeoConstraint)functions::GeoConstraint
~GeoConstraint() (defined in functions::GeoConstraint)functions::GeoConstraintinlinevirtual
~GridGeoConstraint() (defined in functions::GridGeoConstraint)functions::GridGeoConstraintinlinevirtual
-
- - - - diff --git a/html/classfunctions_1_1GridGeoConstraint.html b/html/classfunctions_1_1GridGeoConstraint.html deleted file mode 100644 index 762498910..000000000 --- a/html/classfunctions_1_1GridGeoConstraint.html +++ /dev/null @@ -1,830 +0,0 @@ - - - - - - - -libdap: functions::GridGeoConstraint Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
- -
-
functions::GridGeoConstraint Class Reference
-
-
- -

#include <GridGeoConstraint.h>

-
-Inheritance diagram for functions::GridGeoConstraint:
-
-
Inheritance graph
- - - -
- - - - - - -

-Public Types

enum  LatitudeSense { unknown_sense, -normal, -inverted - }
 
enum  Notation { unknown_notation, -pos, -neg_pos - }
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

virtual void apply_constraint_to_data ()
 
-virtual libdap::Gridget_constrained_grid () const
 
void set_bounding_box (double top, double left, double bottom, double right)
 
Constructors
 GridGeoConstraint (libdap::Grid *grid)
 Initialize GeoConstraint with a Grid. More...
 
GridGeoConstraint (libdap::Grid *grid, libdap::Array *lat, libdap::Array *lon)
 
Accessors/Mutators
-char * get_array_data () const
 
-int get_array_data_size () const
 
-double * get_lat () const
 
-double * get_lon () const
 
-void set_lat (double *lat)
 
-void set_lon (double *lon)
 
-int get_lat_length () const
 
-int get_lon_length () const
 
-void set_lat_length (int len)
 
-void set_lon_length (int len)
 
-libdap::Array::Dim_iter get_lon_dim () const
 
-libdap::Array::Dim_iter get_lat_dim () const
 
-void set_lon_dim (libdap::Array::Dim_iter lon)
 
-void set_lat_dim (libdap::Array::Dim_iter lat)
 
-int get_latitude_index_top () const
 
-int get_latitude_index_bottom () const
 
-void set_latitude_index_top (int top)
 
-void set_latitude_index_bottom (int bottom)
 
-int get_longitude_index_left () const
 
-int get_longitude_index_right () const
 
-void set_longitude_index_left (int left)
 
-void set_longitude_index_right (int right)
 
-bool is_bounding_box_set () const
 
-bool is_longitude_rightmost () const
 
-void set_longitude_rightmost (bool state)
 
-Notation get_longitude_notation () const
 
-LatitudeSense get_latitude_sense () const
 
-void set_longitude_notation (Notation n)
 
-void set_latitude_sense (LatitudeSense l)
 
-set< string > get_coards_lat_units () const
 
-set< string > get_coards_lon_units () const
 
-set< string > get_lat_names () const
 
-set< string > get_lon_names () const
 
- - - - - - - - - - - - - - - - - - - - - - - - - -

-Protected Member Functions

virtual LatitudeSense categorize_latitude () const
 
Notation categorize_notation (const double left, const double right) const
 
void find_latitude_indeces (double top, double bottom, LatitudeSense sense, int &latitude_index_top, int &latitude_index_bottom) const
 
void find_longitude_indeces (double left, double right, int &longitude_index_left, int &longitude_index_right) const
 
-virtual void flip_latitude_within_array (libdap::Array &a, int lat_length, int lon_length)
 
-virtual bool is_bounding_box_valid (const double left, const double top, const double right, const double bottom) const
 
virtual void reorder_data_longitude_axis (libdap::Array &a, libdap::Array::Dim_iter lon_dim)
 
virtual void reorder_longitude_map (int longitude_index_left)
 
-void transform_constraint_to_pos_notation (double &left, double &right) const
 
virtual void transform_longitude_to_neg_pos_notation ()
 
virtual void transform_longitude_to_pos_notation ()
 
virtual void transpose_vector (double *src, const int length)
 
- - - -

-Friends

-class GridGeoConstraintTest
 
-

Detailed Description

-

Geographical constraint applied to a grid.

Author
James Gallagher
- -

Definition at line 48 of file GridGeoConstraint.h.

-

Member Enumeration Documentation

- -

◆ LatitudeSense

- -
-
- - - - - -
- - - - -
enum functions::GeoConstraint::LatitudeSense
-
-inherited
-
-

Most of the time, latitude starts at the top of an array with positive values and ends up at the bottom with negative ones. But sometimes... the world is upside down.

- -

Definition at line 112 of file GeoConstraint.h.

- -
-
- -

◆ Notation

- -
-
- - - - - -
- - - - -
enum functions::GeoConstraint::Notation
-
-inherited
-
-

The longitude extents of the constraint bounding box can be expressed two ways: using a 0/359 notation and using a -180/179 notation. I call the 0/359 notation 'pos' and the -180/179 notation 'neg_pos'.

- -

Definition at line 103 of file GeoConstraint.h.

- -
-
-

Constructor & Destructor Documentation

- -

◆ GridGeoConstraint()

- -
-
- - - - - - - - -
functions::GridGeoConstraint::GridGeoConstraint (libdap::Gridgrid)
-
- -

Initialize GeoConstraint with a Grid.

-
Parameters
- - -
gridSet the GeoConstraint to use this Grid variable. It is the caller's responsibility to ensure that the value grid is a valid Grid variable.
-
-
- -

Definition at line 59 of file GridGeoConstraint.cc.

- -
-
-

Member Function Documentation

- -

◆ apply_constraint_to_data()

- -
-
- - - - - -
- - - - - - - -
void functions::GridGeoConstraint::apply_constraint_to_data ()
-
-virtual
-
-

Once the bounding box is set use this method to apply the constraint. This modifies the data values in the Grid so that the software in Vector::serialize() will work correctly. Vector::serialize() assumes that the BaseType::read() method is called after the projection is applied to the data. That is, the projection is applied, then data are read. but geogrid() first reads all the data values and then computes the projection. To make Vector::serialize() work, this method uses the projection information recorded in the Grid by set_bounding_box() to arrange data so that the information to be sent is all that is held by the Grid. Call this after applying any 'Grid selection expressions' of the sort that can be passed to the grid() function.

-
Note
Why do this here? The grid() function uses the standard logic in Vector and elsewhere to read data that's to be sent. The problem is that the data values need to be reordered using information only this object has. If this were implemented as a 'selection function' (i.e., if the code was run by ConstraintExpression::eval() then we might be able to better optimize how data are read, but in this case we have read all the data and may have already reorganized it). Set up the internal buffers so they hold the correct values and mark the Grid's array and lat/lon maps as read.
- -

Implements functions::GeoConstraint.

- -

Definition at line 275 of file GridGeoConstraint.cc.

- -
-
- -

◆ categorize_latitude()

- -
-
- - - - - -
- - - - - - - -
GeoConstraint::LatitudeSense functions::GeoConstraint::categorize_latitude () const
-
-protectedvirtualinherited
-
-

Take a look at the latitude vector values and record whether the world is normal or upside down.

Returns
normal or inverted.
- -

Definition at line 332 of file GeoConstraint.cc.

- -
-
- -

◆ categorize_notation()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
GeoConstraint::Notation functions::GeoConstraint::categorize_notation (const double left,
const double right 
) const
-
-protectedinherited
-
-

A private method that determines if the longitude part of the bounding box uses 0/359 or -180/179 notation. This class only supports latitude constraints which use 90/-90 notation, so there's no need to figure out what sort of notation they use.

-
Note
This function assumes that if one of the two values is negative, then the notation is or the -180/179 form, otherwise not. If the user asks for 30 degrees to 50 degrees (or 50 to 30, for that matter), there's no real way to tell which notation they are using.
-
Parameters
- - - -
leftThe left side of the bounding box, in degrees
rightThe right side of the bounding box
-
-
-
Returns
The notation (pos or neg_pos)
- -

Definition at line 106 of file GeoConstraint.cc.

- -
-
- -

◆ find_latitude_indeces()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void functions::GeoConstraint::find_latitude_indeces (double top,
double bottom,
LatitudeSense sense,
int & latitude_index_top,
int & latitude_index_bottom 
) const
-
-protectedinherited
-
-

Scan from the top to the bottom, and the bottom to the top, looking for the top and bottom bounding box edges, respectively.

-
Parameters
- - - - - - -
topThe top edge of the bounding box
bottomThe bottom edge
senseDoes the array/grid store data with larger latitudes at the starting indices or are the latitude 'upside down?'
latitude_index_topValue-result parameter that holds the index in the grid's latitude map of the top bounding box edge. Uses a closed interval for the test.
latitude_index_bottomValue-result parameter for the bottom edge index.
-
-
- -

Definition at line 281 of file GeoConstraint.cc.

- -
-
- -

◆ find_longitude_indeces()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void functions::GeoConstraint::find_longitude_indeces (double left,
double right,
int & longitude_index_left,
int & longitude_index_right 
) const
-
-protectedinherited
-
-

Scan from the left to the right, and the right to the left, looking for the left and right bounding box edges, respectively.

-
Parameters
- - - - - -
leftThe left edge of the bounding box
rightThe right edge
longitude_index_leftValue-result parameter that holds the index in the grid's longitude map of the left bounding box edge. Uses a closed interval for the test.
longitude_index_rightValue-result parameter for the right edge index.
-
-
- -

Definition at line 203 of file GeoConstraint.cc.

- -
-
- -

◆ reorder_data_longitude_axis()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void functions::GeoConstraint::reorder_data_longitude_axis (libdap::Arraya,
libdap::Array::Dim_iter lon_dim 
)
-
-protectedvirtualinherited
-
-

Reorder the data values relative to the longitude axis so that the reordered longitude map (see GeoConstraint::reorder_longitude_map()) and the data values match.

-
Note
This should be called with the Array that contains the d_lon_dim Array::Dim_iter.
-
-This method must set the d_array_data and d_array_data_size fields. If those are set, apply_constraint_to_data() will use those values.
-
-First set all the other constraints, including the latitude and then make this call. Other constraints, besides latitude, will be simple range constraints. Latitude might require that values be flipped, but that can be done after the longitude reordering takes place.
-
Todo:
Fix this code so that it works with latitude as the rightmost map
- -

Definition at line 474 of file GeoConstraint.cc.

- -
-
- -

◆ reorder_longitude_map()

- -
-
- - - - - -
- - - - - - - - -
void functions::GeoConstraint::reorder_longitude_map (int longitude_index_left)
-
-protectedvirtualinherited
-
-

Reorder the elements in the longitude map so that the longitude constraint no longer crosses the edge of the map's storage. The d_lon field is modified.

-
Note
The d_lon vector always has double values regardless of the type of d_longitude.
-
Parameters
- - -
longitude_index_leftThe left edge of the bounding box.
-
-
- -

Definition at line 435 of file GeoConstraint.cc.

- -
-
- -

◆ set_bounding_box()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void functions::GeoConstraint::set_bounding_box (double top,
double left,
double bottom,
double right 
)
-
-inherited
-
-

Set the bounding box for this constraint. After calling this method the object has values for the indexes for the latitude and longitude extent as well as the sense of the latitude (south pole at the top or bottom of the Array or Grid). These are used by the apply_constraint_to_data() method to actually constrain the data.

-
Parameters
- - - - - -
leftThe left side of the bounding box.
rightThe right side
topThe top
bottomThe bottom
-
-
- -

Definition at line 594 of file GeoConstraint.cc.

- -
-
- -

◆ transform_longitude_to_neg_pos_notation()

- -
-
- - - - - -
- - - - - - - -
void functions::GeoConstraint::transform_longitude_to_neg_pos_notation ()
-
-protectedvirtualinherited
-
-

Given that the Grid has a longitude map that uses the 'pos' notation, transform it to the 'neg_pos' notation. This method modifies the d_lon array.

-
Note
: About the two notations: 0 180 360 |------------------------—|----------------------—| 0 180,-180 0
- -

Definition at line 164 of file GeoConstraint.cc.

- -
-
- -

◆ transform_longitude_to_pos_notation()

- -
-
- - - - - -
- - - - - - - -
void functions::GeoConstraint::transform_longitude_to_pos_notation ()
-
-protectedvirtualinherited
-
-

Given that the Grid has a longitude map that uses the 'neg_pos' notation, transform it to the 'pos' notation. This method modifies the d_lon array.

-
Note
: About the two notations: 0 180 360 |------------------------—|----------------------—| 0 180,-180 0
- -

Definition at line 145 of file GeoConstraint.cc.

- -
-
- -

◆ transpose_vector()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void functions::GeoConstraint::transpose_vector (double * src,
const int length 
)
-
-protectedvirtualinherited
-
-

Given a vector of doubles, transpose the elements. Use this to flip the latitude vector for a Grid that stores the southern latitudes at the top instead of the bottom.

-
Parameters
- - - -
srcA pointer to the vector
lengthThe number of elements in the vector
-
-
- -

Definition at line 365 of file GeoConstraint.cc.

- -
-
-
The documentation for this class was generated from the following files: -
-
- - - - diff --git a/html/classfunctions_1_1GridGeoConstraint.js b/html/classfunctions_1_1GridGeoConstraint.js deleted file mode 100644 index 21b1d3c1c..000000000 --- a/html/classfunctions_1_1GridGeoConstraint.js +++ /dev/null @@ -1,65 +0,0 @@ -var classfunctions_1_1GridGeoConstraint = -[ - [ "LatitudeSense", "classfunctions_1_1GridGeoConstraint.html#a466ff99a9e60267b70085b49cfd21652", [ - [ "unknown_sense", "classfunctions_1_1GridGeoConstraint.html#a466ff99a9e60267b70085b49cfd21652a45d9f461f049c0f5fe19e6b0155aeeee", null ], - [ "normal", "classfunctions_1_1GridGeoConstraint.html#a466ff99a9e60267b70085b49cfd21652acdd61229b63eba6058874646c5ab4009", null ], - [ "inverted", "classfunctions_1_1GridGeoConstraint.html#a466ff99a9e60267b70085b49cfd21652a2c137f894b5c1d1f6efaff52fe488707", null ] - ] ], - [ "Notation", "classfunctions_1_1GridGeoConstraint.html#aea01a18443b479e4a8eec04311bceaed", [ - [ "unknown_notation", "classfunctions_1_1GridGeoConstraint.html#aea01a18443b479e4a8eec04311bceaeda2821b0f971dd6c0ef43fd329eb6c99e6", null ], - [ "pos", "classfunctions_1_1GridGeoConstraint.html#aea01a18443b479e4a8eec04311bceaeda078d4cc94cfa3c17c098aac4c63f6c14", null ], - [ "neg_pos", "classfunctions_1_1GridGeoConstraint.html#aea01a18443b479e4a8eec04311bceaedac83298766d14a0dde110207c7cab474d", null ] - ] ], - [ "GridGeoConstraint", "classfunctions_1_1GridGeoConstraint.html#aea3d88980a9c0500c1c51e877b3347b5", null ], - [ "GridGeoConstraint", "classfunctions_1_1GridGeoConstraint.html#a62851b089c8723b1acc3f2409f544507", null ], - [ "~GridGeoConstraint", "classfunctions_1_1GridGeoConstraint.html#af6cd8b34b56a06bbec100f6defa4dddb", null ], - [ "apply_constraint_to_data", "classfunctions_1_1GridGeoConstraint.html#aef185fdc0541881d39d19d6e1fd364d7", null ], - [ "categorize_latitude", "classfunctions_1_1GridGeoConstraint.html#af89805663f0534a8addedaea2f3073cd", null ], - [ "categorize_notation", "classfunctions_1_1GridGeoConstraint.html#a8e57a12e7c30c0a6834759b203470833", null ], - [ "find_latitude_indeces", "classfunctions_1_1GridGeoConstraint.html#a74db78b6220b59f1f4fb3564d7974754", null ], - [ "find_longitude_indeces", "classfunctions_1_1GridGeoConstraint.html#aba588b366dbb024457c89ce33a7ebb38", null ], - [ "flip_latitude_within_array", "classfunctions_1_1GridGeoConstraint.html#ab543dda3c43cd853346dc253d020e608", null ], - [ "get_array_data", "classfunctions_1_1GridGeoConstraint.html#abc1a079d788614cf3c2c62a3aaa901d7", null ], - [ "get_array_data_size", "classfunctions_1_1GridGeoConstraint.html#a27f2690b99c4dafea44f230614aa6227", null ], - [ "get_coards_lat_units", "classfunctions_1_1GridGeoConstraint.html#ad9e4dc8c0dfe47d6ea4bbcd0117e1e28", null ], - [ "get_coards_lon_units", "classfunctions_1_1GridGeoConstraint.html#aa9ed7bbf6915796e68725700e50039fe", null ], - [ "get_constrained_grid", "classfunctions_1_1GridGeoConstraint.html#a6bd786c150f086831853fdbc9564a9b2", null ], - [ "get_lat", "classfunctions_1_1GridGeoConstraint.html#a4e28cbf83a9428c3bb1571ceb383c0f8", null ], - [ "get_lat_dim", "classfunctions_1_1GridGeoConstraint.html#a27cc77ebf8e70f05171c9d7a37548e8c", null ], - [ "get_lat_length", "classfunctions_1_1GridGeoConstraint.html#a904fa6294ad859b71a7a2c76066023c8", null ], - [ "get_lat_names", "classfunctions_1_1GridGeoConstraint.html#ad515fdb9c4092978c53027a2b10e653d", null ], - [ "get_latitude_index_bottom", "classfunctions_1_1GridGeoConstraint.html#a13aaec2f1497f296224bc7e22ceda963", null ], - [ "get_latitude_index_top", "classfunctions_1_1GridGeoConstraint.html#a652bc2a104d7226427da48100b7db7e9", null ], - [ "get_latitude_sense", "classfunctions_1_1GridGeoConstraint.html#a6796dcecd0e2714c516ab923ca66ad8f", null ], - [ "get_lon", "classfunctions_1_1GridGeoConstraint.html#a4e0a7ee2d26ebe3c5c4fc999e4dc6003", null ], - [ "get_lon_dim", "classfunctions_1_1GridGeoConstraint.html#a174898231382f70a1aa7be5350c9c2d8", null ], - [ "get_lon_length", "classfunctions_1_1GridGeoConstraint.html#acd32245d55854ed510a5a6e1512263e9", null ], - [ "get_lon_names", "classfunctions_1_1GridGeoConstraint.html#a394092f0d92b61cacaf6307f357b3ed6", null ], - [ "get_longitude_index_left", "classfunctions_1_1GridGeoConstraint.html#a7562a0094e636d80dc84011b063aa70b", null ], - [ "get_longitude_index_right", "classfunctions_1_1GridGeoConstraint.html#ac518336815fc93820f9e957cc5a82f0a", null ], - [ "get_longitude_notation", "classfunctions_1_1GridGeoConstraint.html#a65f7243a143572fb7d1f1f6b8ebb10ae", null ], - [ "is_bounding_box_set", "classfunctions_1_1GridGeoConstraint.html#a9b86ba8c6771ca3433356e67e7cfb174", null ], - [ "is_bounding_box_valid", "classfunctions_1_1GridGeoConstraint.html#af153ea490c37f4b43401ad6294084e72", null ], - [ "is_longitude_rightmost", "classfunctions_1_1GridGeoConstraint.html#a54053531db798ad6b754d69f591d7619", null ], - [ "reorder_data_longitude_axis", "classfunctions_1_1GridGeoConstraint.html#a4dcd6ab2bcfe9f1a31cc22d036525e01", null ], - [ "reorder_longitude_map", "classfunctions_1_1GridGeoConstraint.html#a44066d960eb11d1395ea6762e511ad4b", null ], - [ "set_bounding_box", "classfunctions_1_1GridGeoConstraint.html#afdcce3490cf3e4e7c9427d002c9aa1d1", null ], - [ "set_lat", "classfunctions_1_1GridGeoConstraint.html#a59e0aa4128c08054dfa97693cdff13b9", null ], - [ "set_lat_dim", "classfunctions_1_1GridGeoConstraint.html#a74fe4b4a3f51383b246147fd37ea71ef", null ], - [ "set_lat_length", "classfunctions_1_1GridGeoConstraint.html#a9890b176d0dbc05caee6409263c666e7", null ], - [ "set_latitude_index_bottom", "classfunctions_1_1GridGeoConstraint.html#ae850811aea6ced9e31ba8e088718208a", null ], - [ "set_latitude_index_top", "classfunctions_1_1GridGeoConstraint.html#aa23fa93e66571fa98c73367f03856405", null ], - [ "set_latitude_sense", "classfunctions_1_1GridGeoConstraint.html#af5f39f633bbd1dbb8bdf030beb15ead1", null ], - [ "set_lon", "classfunctions_1_1GridGeoConstraint.html#a4e2a3fa25e5bc7ee42b8b4a37574fe16", null ], - [ "set_lon_dim", "classfunctions_1_1GridGeoConstraint.html#a52c4e2ad8b9f340e79918cecb1f94586", null ], - [ "set_lon_length", "classfunctions_1_1GridGeoConstraint.html#aca70fc726212902bda33e4c15367d28d", null ], - [ "set_longitude_index_left", "classfunctions_1_1GridGeoConstraint.html#afa5523b16235c5ec56955883ef642e2d", null ], - [ "set_longitude_index_right", "classfunctions_1_1GridGeoConstraint.html#a63c287d4aef76ffa5bc37b80314536e3", null ], - [ "set_longitude_notation", "classfunctions_1_1GridGeoConstraint.html#a811d53147f4563afe3615296afb97c8a", null ], - [ "set_longitude_rightmost", "classfunctions_1_1GridGeoConstraint.html#a531557d47ea67b781486c828198433f7", null ], - [ "transform_constraint_to_pos_notation", "classfunctions_1_1GridGeoConstraint.html#a1cb2d5b6277ffc5e02810ffcdaecefc4", null ], - [ "transform_longitude_to_neg_pos_notation", "classfunctions_1_1GridGeoConstraint.html#a465ae9bfaf84501740e0c90a13f88d17", null ], - [ "transform_longitude_to_pos_notation", "classfunctions_1_1GridGeoConstraint.html#a42facca9c9db0f8d41e41dbae81edc7d", null ], - [ "transpose_vector", "classfunctions_1_1GridGeoConstraint.html#aebcb9ed78095f98c047622cd66448466", null ], - [ "GridGeoConstraintTest", "classfunctions_1_1GridGeoConstraint.html#a0f73deef1213b085f34d2d6be78eaff1", null ] -]; \ No newline at end of file diff --git a/html/classfunctions_1_1GridGeoConstraint__inherit__graph.map b/html/classfunctions_1_1GridGeoConstraint__inherit__graph.map deleted file mode 100644 index a9d0bdaeb..000000000 --- a/html/classfunctions_1_1GridGeoConstraint__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/classfunctions_1_1GridGeoConstraint__inherit__graph.md5 b/html/classfunctions_1_1GridGeoConstraint__inherit__graph.md5 deleted file mode 100644 index 21587f0ff..000000000 --- a/html/classfunctions_1_1GridGeoConstraint__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -f1e8ee005d54d484d0ffeff8347dddea \ No newline at end of file diff --git a/html/classfunctions_1_1GridGeoConstraint__inherit__graph.png b/html/classfunctions_1_1GridGeoConstraint__inherit__graph.png deleted file mode 100644 index 2e86675a54e0ed4166fda71d08ef04d9b237cbf5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74947 zcmd3OXH*k?_bnJmC?P>(yR2&jnDJGcisQ}a6jM0S|lrBGQZ5s+57B$_V8LuQ;m*>jfRYjjPAkxJ5NZD zQ)FZSTPh&w*&X3cB^y%DOGv0t@8i=dBkNc#d z*_sb}9XhxfG;1s&)adX55j!>|yYVC@vn&o22U^()bROglXm37xE6`wX#Si!5@yhat z`s%qo=+n^G5uN|LvE)yH;1b*KpE{4WRlacDN9q@Tep2&025|DXo50klk1J!=1P_M1DvWZei=C;y{IHL{qgG$%!gVrHY4kJJD;dROyN!kCSmj0 z!uz{F&7?gxMEZdqvPW$I0$F+|6HkC(sj+E9?AJR=<+sPT<7dCsNJPYOK?AzxQ+EwJ z>8?PoRVfCXJ8e4�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

A`D*S^&Y=O{DEzD09V;b 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 diff --git a/html/classlibdap_1_1AISConnect-members.html b/html/classlibdap_1_1AISConnect-members.html deleted file mode 100644 index af7dcefa0..000000000 --- a/html/classlibdap_1_1AISConnect-members.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
libdap::AISConnect Member List
-
-
- -

This is the complete list of members for libdap::AISConnect, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AISConnect() (defined in libdap::AISConnect)libdap::AISConnectinlineprotected
AISConnect(const AISConnect &ac) (defined in libdap::AISConnect)libdap::AISConnectinlineprotected
AISConnect(const string &name)libdap::AISConnect
AISConnect(const string &name, const string &ais_db)libdap::AISConnect
CE()libdap::Connectvirtual
Connect() (defined in libdap::Connect)libdap::Connectprotected
Connect(const Connect &) (defined in libdap::Connect)libdap::Connectprotected
Connect(const string &name, string uname="", string password="")libdap::Connect
get_protocol()libdap::Connectinline
get_version()libdap::Connectinline
is_cache_enabled() (defined in libdap::Connect)libdap::Connect
is_local() (defined in libdap::Connect)libdap::Connect
operator=(const Connect &) (defined in libdap::Connect)libdap::Connectprotected
read_data(DataDDS &data, Response *rs)libdap::Connectvirtual
read_data(DDS &data, Response *rs) (defined in libdap::Connect)libdap::Connectvirtual
read_data_no_mime(DataDDS &data, Response *rs)libdap::Connectvirtual
read_data_no_mime(DDS &data, Response *rs) (defined in libdap::Connect)libdap::Connectvirtual
request_das(DAS &das)libdap::AISConnectvirtual
request_das_url(DAS &das)libdap::Connectvirtual
request_data(DataDDS &data, string expr="")libdap::Connectvirtual
request_data_ddx(DataDDS &data, string expr="") (defined in libdap::Connect)libdap::Connectvirtual
request_data_ddx_url(DataDDS &data) (defined in libdap::Connect)libdap::Connectvirtual
request_data_url(DataDDS &data)libdap::Connectvirtual
request_dds(DDS &dds, string expr="")libdap::Connectvirtual
request_dds_url(DDS &dds)libdap::Connectvirtual
request_ddx(DDS &dds, string expr="")libdap::Connectvirtual
request_ddx_url(DDS &dds)libdap::Connectvirtual
request_protocol()libdap::Connectvirtual
request_version()libdap::Connectvirtual
set_accept_deflate(bool deflate)libdap::Connect
set_cache_enabled(bool enabled)libdap::Connect
set_credentials(string u, string p)libdap::Connect
set_xdap_accept(int major, int minor) (defined in libdap::Connect)libdap::Connect
set_xdap_protocol(int major, int minor)libdap::Connect
URL(bool CE=true)libdap::Connectvirtual
~AISConnect()libdap::AISConnectvirtual
~Connect() (defined in libdap::Connect)libdap::Connectvirtual
-
- - - - diff --git a/html/classlibdap_1_1AISConnect.html b/html/classlibdap_1_1AISConnect.html deleted file mode 100644 index bf9a2db5f..000000000 --- a/html/classlibdap_1_1AISConnect.html +++ /dev/null @@ -1,1092 +0,0 @@ - - - - - - - -libdap: libdap::AISConnect Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
- -
-
libdap::AISConnect Class Reference
-
-
- -

#include <AISConnect.h>

-
-Inheritance diagram for libdap::AISConnect:
-
-
Inheritance graph
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 AISConnect (const string &name) throw (AISDatabaseReadFailed)
 
 AISConnect (const string &name, const string &ais_db) throw (AISDatabaseReadFailed)
 
virtual string CE ()
 Get the Connect's constraint expression. More...
 
string get_protocol ()
 
string get_version ()
 
-bool is_cache_enabled ()
 
-bool is_local ()
 
virtual void read_data (DataDDS &data, Response *rs)
 Read data which is preceded by MIME headers. This method works for both data dds and data ddx responses. More...
 
-virtual void read_data (DDS &data, Response *rs)
 
virtual void read_data_no_mime (DataDDS &data, Response *rs)
 Read data from a file which does not have response MIME headers. This method is a companion to read_data(). While read_data() assumes that the response has MIME headers, this method does not. If you call this with a Response that does contain headers, it will throw an Error (and the message is likely to be inscrutable). More...
 
-virtual void read_data_no_mime (DDS &data, Response *rs)
 
virtual void request_das (DAS &das)
 
virtual void request_das_url (DAS &das)
 Get the DAS from a server. More...
 
virtual void request_data (DataDDS &data, string expr="")
 Get the DAS from a server. More...
 
-virtual void request_data_ddx (DataDDS &data, string expr="")
 
-virtual void request_data_ddx_url (DataDDS &data)
 
virtual void request_data_url (DataDDS &data)
 Get the DAS from a server. More...
 
virtual void request_dds (DDS &dds, string expr="")
 Get the DDS from a server. More...
 
virtual void request_dds_url (DDS &dds)
 Get the DDS from a server. More...
 
virtual void request_ddx (DDS &dds, string expr="")
 Get the DDX from a server. More...
 
virtual void request_ddx_url (DDS &dds)
 The 'url' version of request_ddx. More...
 
virtual string request_protocol ()
 
virtual string request_version ()
 
void set_accept_deflate (bool deflate)
 
void set_cache_enabled (bool enabled)
 
void set_credentials (string u, string p)
 Set the credentials for responding to challenges while dereferencing URLs. More...
 
-void set_xdap_accept (int major, int minor)
 
void set_xdap_protocol (int major, int minor)
 
virtual string URL (bool CE=true)
 Get the object's URL. More...
 
virtual ~AISConnect ()
 
- - - - - - -

-Protected Member Functions

Suppress the C++ defaults for these.
AISConnect ()
 
AISConnect (const AISConnect &ac)
 
-

Detailed Description

-

Provide seamless client-side AIS services.

- -

Definition at line 45 of file AISConnect.h.

-

Constructor & Destructor Documentation

- -

◆ AISConnect() [1/2]

- -
-
- - - - - - - - - - - - - - -
libdap::AISConnect::AISConnect (const string & name)
throw (AISDatabaseReadFailed
)
-
-

Build an AISConnect. This calls Connect's constructor with name and accepts its default values for the other parameters. The AIS database to use is read from the configuration file ~/.dodsrc.

-
Parameters
- - -
nameCreate a virtual, AIS-enhanced, connection for this OPeNDAP data source.
-
-
-
Exceptions
- - -
AISDatabaseReadFailedThrown if the AIS database listed in the ~/.dodsrc file could not be opened.
-
-
- -

Definition at line 40 of file AISConnect.cc.

- -
-
- -

◆ AISConnect() [2/2]

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
libdap::AISConnect::AISConnect (const string & name,
const string & ais 
)
throw (AISDatabaseReadFailed
)
-
-

Build an AISConnect. This calls Connect's constructor with name and accepts its default values for the other parameters. The AIS is initialized to use the database named by ais.

-
Parameters
- - - -
nameCreate a virtual, AIS-enhanced, connection for this OPeNDAP data source.
aisRead the AIS information from this XML file.
-
-
-
Exceptions
- - -
AISDatabaseReadFailedThrown if the AIS database listed in the ~/.dodsrc file could not be opened.
-
-
- -

Definition at line 57 of file AISConnect.cc.

- -
-
- -

◆ ~AISConnect()

- -
-
- - - - - -
- - - - - - - -
libdap::AISConnect::~AISConnect ()
-
-virtual
-
-

Destroy an AISConnect.

- -

Definition at line 65 of file AISConnect.cc.

- -
-
-

Member Function Documentation

- -

◆ CE()

- -
-
- - - - - -
- - - - - - - -
string libdap::Connect::CE ()
-
-virtualinherited
-
- -

Get the Connect's constraint expression.

-

Return the constraint expression (CE) part of the Connect URL. Note that this CE is supplied as part of the URL passed to the Connect's constructor. It is not the CE passed to the request_data() function.

-
Returns
A string containing the constraint expression (if any) submitted to the Connect object's constructor.
- -

Definition at line 1146 of file Connect.cc.

- -
-
- -

◆ get_protocol()

- -
-
- - - - - -
- - - - - - - -
string libdap::Connect::get_protocol ()
-
-inlineinherited
-
-

Return the DAP protocol version of the most recent response. Before a response is made, this contains the string "2.0."

- -

Definition at line 193 of file Connect.h.

- -
-
- -

◆ get_version()

- -
-
- - - - - -
- - - - - - - -
string libdap::Connect::get_version ()
-
-inlineinherited
-
-

Return the protocol/implementation version of the most recent response. This is a poorly designed method, but it returns information that is useful when used correctly. Before a response is made, this contains the string "unknown." This should ultimately hold the protocol version; it currently holds the implementation version.

@see get_protocol()
-
Deprecated:
- -

Definition at line 185 of file Connect.h.

- -
-
- -

◆ read_data()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::Connect::read_data (DataDDSdata,
Responsers 
)
-
-virtualinherited
-
- -

Read data which is preceded by MIME headers. This method works for both data dds and data ddx responses.

-
Note
If you need the DataDDS to hold specializations of the type classes, be sure to include the factory class which will instantiate those specializations in the DataDDS. Either pass a pointer to the factory to DataDDS constructor or use the DDS::set_factory() method after the object is built.
-
See also
read_data_no_mime()
-
Parameters
- - - -
dataResult.
rsRead from this Response object.
-
-
- -

Definition at line 989 of file Connect.cc.

- -
-
- -

◆ read_data_no_mime()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::Connect::read_data_no_mime (DataDDSdata,
Responsers 
)
-
-virtualinherited
-
- -

Read data from a file which does not have response MIME headers. This method is a companion to read_data(). While read_data() assumes that the response has MIME headers, this method does not. If you call this with a Response that does contain headers, it will throw an Error (and the message is likely to be inscrutable).

-
Note
This method will use the 'type' information in the Response object to choose between processing the response as a data dds or data ddx. If there is no type information, it will attempt to figure it out.
-
Parameters
- - - -
dataResult.
rsRead from this Response object.
-
-
- -

Definition at line 1062 of file Connect.cc.

- -
-
- -

◆ request_das()

- -
-
- - - - - -
- - - - - - - - -
void libdap::AISConnect::request_das (DASdas)
-
-virtual
-
-

Request an AIS-enhanced DAS object. Read the DAS object for this virtual connection's data source. Then check the AIS database and merge in any ancillary resources listed for it.

-
Parameters
- - -
dasDeposit information to this object.
-
-
-
Exceptions
- - - -
ErrorThrown if the DAS request fails due to user error.
InternalErrThrown if either the DAS request or the AIS merge request fails.
-
-
- -

Reimplemented from libdap::Connect.

- -

Definition at line 79 of file AISConnect.cc.

- -
-
- -

◆ request_das_url()

- -
-
- - - - - -
- - - - - - - - -
void libdap::Connect::request_das_url (DASdas)
-
-virtualinherited
-
- -

Get the DAS from a server.

-

Reads the DAS corresponding to the dataset in the Connect object's URL. Although DAP does not support using CEs with DAS requests, if present in the Connect object's instance, they will be escaped and passed as the query string of the request.

-

Different from request_das method in that this method uses the URL as given without attaching .das or projections or selections.

-
Parameters
- - -
dasResult.
-
-
- -

Definition at line 496 of file Connect.cc.

- -
-
- -

◆ request_data()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::Connect::request_data (DataDDSdata,
string expr = "" 
)
-
-virtualinherited
-
- -

Get the DAS from a server.

-

Reads the DataDDS object corresponding to the dataset in the Connect object's URL. If present in the Connect object's instance, a CE will be escaped, combined with expr and passed as the query string of the request. The result is a DataDDS which contains the data values bound to variables.

-
Note
If you need the DataDDS to hold specializations of the type classes, be sure to include the factory class which will instantiate those specializations in the DataDDS. Either pass a pointer to the factory to DataDDS constructor or use the DDS::set_factory() method after the object is built.
-
Parameters
- - - -
dataResult.
exprSend this constraint expression to the server.
-
-
- -

Definition at line 845 of file Connect.cc.

- -
-
- -

◆ request_data_url()

- -
-
- - - - - -
- - - - - - - - -
void libdap::Connect::request_data_url (DataDDSdata)
-
-virtualinherited
-
- -

Get the DAS from a server.

-

Reads the DataDDS object corresponding to the dataset in the Connect object's URL. If present in the Connect object's instance, a CE will be escaped, combined with expr and passed as the query string of the request. The result is a DataDDS which contains the data values bound to variables.

-

Different from request_data in that this method uses the syntax of the new OPeNDAP server commands using dispatch

-
Note
If you need the DataDDS to hold specializations of the type classes, be sure to include the factory class which will instantiate those specializations in the DataDDS. Either pass a pointer to the factory to DataDDS constructor or use the DDS::set_factory() method after the object is built.
-
Parameters
- - -
dataResult.
-
-
- -

Definition at line 896 of file Connect.cc.

- -
-
- -

◆ request_dds()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::Connect::request_dds (DDSdds,
string expr = "" 
)
-
-virtualinherited
-
- -

Get the DDS from a server.

-

Reads the DDS corresponding to the dataset in the Connect object's URL. If present in the Connect object's instance, a CE will be escaped, combined with expr and passed as the query string of the request.

-
Note
If you need the DDS to hold specializations of the type classes, be sure to include the factory class which will instantiate those specializations in the DDS. Either pass a pointer to the factory to DDS constructor or use the DDS::set_factory() method after the object is built.
-
Parameters
- - - -
ddsResult.
exprSend this constraint expression to the server.
-
-
- -

Definition at line 562 of file Connect.cc.

- -
-
- -

◆ request_dds_url()

- -
-
- - - - - -
- - - - - - - - -
void libdap::Connect::request_dds_url (DDSdds)
-
-virtualinherited
-
- -

Get the DDS from a server.

-

Reads the DDS corresponding to the dataset in the Connect object's URL. If present in the Connect object's instance, a CE will be escaped, combined with expr and passed as the query string of the request.

-

Different from request_dds method above in that this method assumes URL is complete and does not add anything to the command, such as .dds or projections or selections.

-
Note
If you need the DDS to hold specializations of the type classes, be sure to include the factory class which will instantiate those specializations in the DDS. Either pass a pointer to the factory to DDS constructor or use the DDS::set_factory() method after the object is built.
-
Parameters
- - -
ddsResult.
-
-
- -

Definition at line 642 of file Connect.cc.

- -
-
- -

◆ request_ddx()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::Connect::request_ddx (DDSdds,
string expr = "" 
)
-
-virtualinherited
-
- -

Get the DDX from a server.

-

Reads the DDX corresponding to the dataset in the Connect object's URL. If present in the Connect object's instance, a CE will be escaped, combined with expr and passed as the query string of the request.

-
Note
A DDX is represented as XML on the wire but in memory libdap uses a DDS object with variables that hold their own attributes (the DDS itself holds the global attributes).
-
Parameters
- - - -
ddsResult.
exprSend this constraint expression to the server.
-
-
- -

Definition at line 705 of file Connect.cc.

- -
-
- -

◆ request_ddx_url()

- -
-
- - - - - -
- - - - - - - - -
void libdap::Connect::request_ddx_url (DDSdds)
-
-virtualinherited
-
- -

The 'url' version of request_ddx.

-
See also
Connect::request_ddx.
- -

Definition at line 773 of file Connect.cc.

- -
-
- -

◆ request_protocol()

- -
-
- - - - - -
- - - - - - - -
string libdap::Connect::request_protocol ()
-
-virtualinherited
-
-

Get protocol version information from the server. This is a new method which will ease the transition to DAP 4. Note that this method returns the version of the DAP protocol implemented by the server. The request_version() method returns the server's version number, not the DAP protocol version.

-
Note
This method actually asks the server for the protocol version - use get_protocol() to get the protocol information from the most recent response (e.g., from the last DDX response returned by the server).
-
Returns
The DAP protocol version string.
- -

Definition at line 398 of file Connect.cc.

- -
-
- -

◆ request_version()

- -
-
- - - - - -
- - - - - - - -
string libdap::Connect::request_version ()
-
-virtualinherited
-
-

Get version information from the server. This is a new method which will ease the transition to DAP 4.

-
Note
Use request_protocol() to get the DAP protocol version.
-
Returns
The DAP version string.
-
See also
request_protocol()
- -

Definition at line 362 of file Connect.cc.

- -
-
- -

◆ set_accept_deflate()

- -
-
- - - - - -
- - - - - - - - -
void libdap::Connect::set_accept_deflate (bool deflate)
-
-inherited
-
-

Set the accept deflate property.

Parameters
- - -
deflateTrue if the client can accept compressed responses, False otherwise.
-
-
- -

Definition at line 1168 of file Connect.cc.

- -
-
- -

◆ set_cache_enabled()

- -
-
- - - - - -
- - - - - - - - -
void libdap::Connect::set_cache_enabled (bool cache)
-
-inherited
-
-

Disable any further use of the client-side cache. In a future version of this software, this should be handled so that the www library is not initialized with the cache running by default.

- -

Definition at line 1188 of file Connect.cc.

- -
-
- -

◆ set_credentials()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::Connect::set_credentials (string u,
string p 
)
-
-inherited
-
- -

Set the credentials for responding to challenges while dereferencing URLs.

-
Parameters
- - - -
uThe username.
pThe password.
-
-
-
See also
extract_auth_info()
- -

Definition at line 1159 of file Connect.cc.

- -
-
- -

◆ set_xdap_protocol()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::Connect::set_xdap_protocol (int major,
int minor 
)
-
-inherited
-
-

Set the XDAP-Accept property/header. This is used to send to a server the (highest) DAP protocol version number that this client understands.

-
Parameters
- - - -
majorThe client dap protocol major version
minorThe client dap protocol minor version
-
-
- -

Definition at line 1179 of file Connect.cc.

- -
-
- -

◆ URL()

- -
-
- - - - - -
- - - - - - - - -
string libdap::Connect::URL (bool ce = true)
-
-virtualinherited
-
- -

Get the object's URL.

-

Return the Connect object's URL in a string. The URL was set by the class constructor, and may not be reset. If you want to open another URL, you must create another Connect object. There is a Connections class created to handle the management of multiple Connect objects.

-
See also
Connections
-
Returns
A string containing the URL of the data to which the Connect object refers. If the object refers to local data, the function returns the null string.
-
Parameters
- - -
ceIf TRUE, the returned URL will include any constraint expression enclosed with the Connect object's URL (including the ?). If FALSE, any constraint expression will be removed from the URL. The default is TRUE.
-
-
- -

Definition at line 1127 of file Connect.cc.

- -
-
-
The documentation for this class was generated from the following files: -
-
- - - - diff --git a/html/classlibdap_1_1AISConnect.js b/html/classlibdap_1_1AISConnect.js deleted file mode 100644 index 03214118c..000000000 --- a/html/classlibdap_1_1AISConnect.js +++ /dev/null @@ -1,35 +0,0 @@ -var classlibdap_1_1AISConnect = -[ - [ "AISConnect", "classlibdap_1_1AISConnect.html#a2f599cdf78085aa7a4e57162fc376aeb", null ], - [ "AISConnect", "classlibdap_1_1AISConnect.html#adf545ed05ef60bf6fa61c54257b7b0a6", null ], - [ "AISConnect", "classlibdap_1_1AISConnect.html#a30a96b7d5fde2d619185879a8dbcb264", null ], - [ "AISConnect", "classlibdap_1_1AISConnect.html#ad4142b6a66d33862c69e7f0846658d18", null ], - [ "~AISConnect", "classlibdap_1_1AISConnect.html#a9e9aad50a31427df596f04b39fb15be3", null ], - [ "CE", "classlibdap_1_1AISConnect.html#a0e55cc99530cab779ae83984c2a22f51", null ], - [ "get_protocol", "classlibdap_1_1AISConnect.html#a4223a898b3da719509d173dd990c45f1", null ], - [ "get_version", "classlibdap_1_1AISConnect.html#a30fe6746add5a210d59b5dc9d678355f", null ], - [ "is_cache_enabled", "classlibdap_1_1AISConnect.html#a00fa7d5e2e658e8c882e07f48562ea62", null ], - [ "is_local", "classlibdap_1_1AISConnect.html#a3901ce9383c3df11d1a1c28d4a09bb54", null ], - [ "read_data", "classlibdap_1_1AISConnect.html#ae50d98d353023b9786c9bd5b0833a7de", null ], - [ "read_data", "classlibdap_1_1AISConnect.html#a8c9abb99d35684b48fa659f398d7cff8", null ], - [ "read_data_no_mime", "classlibdap_1_1AISConnect.html#a486b095a58614dfc2be0321035784306", null ], - [ "read_data_no_mime", "classlibdap_1_1AISConnect.html#aed1c2c967013975076c03a783f3fd421", null ], - [ "request_das", "classlibdap_1_1AISConnect.html#acddb989623fc4e3aed42710a50f45178", null ], - [ "request_das_url", "classlibdap_1_1AISConnect.html#abcf814710de1e252e74a4e1b72d3c6b3", null ], - [ "request_data", "classlibdap_1_1AISConnect.html#a814e98ac5e99927ccc79bb0feb32d241", null ], - [ "request_data_ddx", "classlibdap_1_1AISConnect.html#ab3bc39b8320ae5a79af7bf168f930b07", null ], - [ "request_data_ddx_url", "classlibdap_1_1AISConnect.html#aac752fcacdab76339318c1c333ea0953", null ], - [ "request_data_url", "classlibdap_1_1AISConnect.html#ac8582099411b8d74b03e761129df5b5c", null ], - [ "request_dds", "classlibdap_1_1AISConnect.html#aad5ef370110577e9ca2a0161928f9efa", null ], - [ "request_dds_url", "classlibdap_1_1AISConnect.html#a08795a9e160db409423fcd9058ba975d", null ], - [ "request_ddx", "classlibdap_1_1AISConnect.html#a4395cc18cf5ec1a5167795a5a5491958", null ], - [ "request_ddx_url", "classlibdap_1_1AISConnect.html#a9a3e1fe01455b60a90a1974a7e871bb4", null ], - [ "request_protocol", "classlibdap_1_1AISConnect.html#aaa1ab562899da9a4630de01f943d1aa9", null ], - [ "request_version", "classlibdap_1_1AISConnect.html#ac7a5896a09882004b75e581999940526", null ], - [ "set_accept_deflate", "classlibdap_1_1AISConnect.html#a186f76bfea3b61dc3587bcff5760ed8b", null ], - [ "set_cache_enabled", "classlibdap_1_1AISConnect.html#a25c97c4ad0239a9dd10812c880c40efe", null ], - [ "set_credentials", "classlibdap_1_1AISConnect.html#a847af75e149f123a51a560119dfc06aa", null ], - [ "set_xdap_accept", "classlibdap_1_1AISConnect.html#ab9c4a1243218c98d46fbaace37a821fc", null ], - [ "set_xdap_protocol", "classlibdap_1_1AISConnect.html#a4af759a2313d9ecbc1db1c811f549379", null ], - [ "URL", "classlibdap_1_1AISConnect.html#a523bf24520185e3d71f36ac0203b98e6", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1AISConnect__inherit__graph.map b/html/classlibdap_1_1AISConnect__inherit__graph.map deleted file mode 100644 index 076007043..000000000 --- a/html/classlibdap_1_1AISConnect__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/classlibdap_1_1AISConnect__inherit__graph.md5 b/html/classlibdap_1_1AISConnect__inherit__graph.md5 deleted file mode 100644 index c309b4113..000000000 --- a/html/classlibdap_1_1AISConnect__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -9ea82858e55e89e1936109a63bb43919 \ No newline at end of file diff --git a/html/classlibdap_1_1AISConnect__inherit__graph.png b/html/classlibdap_1_1AISConnect__inherit__graph.png deleted file mode 100644 index a5610daa86da14de46340c5f9eb95f758f7dcc8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29452 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 diff --git a/html/classlibdap_1_1AISDatabaseParser-members.html b/html/classlibdap_1_1AISDatabaseParser-members.html deleted file mode 100644 index 710d60a79..000000000 --- a/html/classlibdap_1_1AISDatabaseParser-members.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
libdap::AISDatabaseParser Member List
-
-
- -

This is the complete list of members for libdap::AISDatabaseParser, including all inherited members.

- - - - - - - - - - -
aisEndDocument(AISParserState *state)libdap::AISDatabaseParserstatic
aisEndElement(AISParserState *state, const char *name)libdap::AISDatabaseParserstatic
aisError(AISParserState *state, const char *msg,...)libdap::AISDatabaseParserstatic
aisFatalError(AISParserState *state, const char *msg,...)libdap::AISDatabaseParserstatic
aisGetEntity(AISParserState *state, const xmlChar *name)libdap::AISDatabaseParserstatic
aisStartDocument(AISParserState *state)libdap::AISDatabaseParserstatic
aisStartElement(AISParserState *state, const char *name, const char **attrs)libdap::AISDatabaseParserstatic
aisWarning(AISParserState *state, const char *msg,...)libdap::AISDatabaseParserstatic
intern(const string &database, AISResources *ais)libdap::AISDatabaseParser
-
- - - - diff --git a/html/classlibdap_1_1AISDatabaseParser.html b/html/classlibdap_1_1AISDatabaseParser.html deleted file mode 100644 index 4eec67bc6..000000000 --- a/html/classlibdap_1_1AISDatabaseParser.html +++ /dev/null @@ -1,532 +0,0 @@ - - - - - - - -libdap: libdap::AISDatabaseParser Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
- -
-
libdap::AISDatabaseParser Class Reference
-
-
- -

#include <AISDatabaseParser.h>

- - - - -

-Public Member Functions

void intern (const string &database, AISResources *ais)
 
- - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

SAX Parser Callbacks

These methods are declared static in the class header. This gives them C linkage which allows them to be used as callbacks by the SAX parser engine.

-
static void aisStartDocument (AISParserState *state)
 
static void aisEndDocument (AISParserState *state)
 
static void aisStartElement (AISParserState *state, const char *name, const char **attrs)
 
static void aisEndElement (AISParserState *state, const char *name)
 
static xmlEntityPtr aisGetEntity (AISParserState *state, const xmlChar *name)
 
static void aisWarning (AISParserState *state, const char *msg,...)
 
static void aisError (AISParserState *state, const char *msg,...)
 
static void aisFatalError (AISParserState *state, const char *msg,...)
 
-

Detailed Description

-

Parse the XML database/configuration file which lists a collection of AIS resources.

-

Static methods are used as callbacks for the SAX parser. They do not throw exceptions because exceptions from within callbacks are not reliable or portable. To signal errors, the methods record information in the AISParserState object. Once any of the error handlers (aisWarning, aisError or aisFatalError) is called, construction of an AISResources object ends even though the SAX parser still calls the various callback functions. The parse method throws an AISDatabaseReadFailed exception if an error was found.

-

Note that this class uses the C++-supplied default definitions for the default and copy constructors as well as the destructor and assignment operator.

-

This class should be extended so that the line number is added to error messages.

-
See also
AISResource
- -

Definition at line 69 of file AISDatabaseParser.h.

-

Member Function Documentation

- -

◆ aisEndDocument()

- -
-
- - - - - -
- - - - - - - - -
void libdap::AISDatabaseParser::aisEndDocument (AISParserState * state)
-
-static
-
-

Clean up after finishing a parse.

Parameters
- - -
stateThe SAX parser state.
-
-
- -

Definition at line 82 of file AISDatabaseParser.cc.

- -
-
- -

◆ aisEndElement()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::AISDatabaseParser::aisEndElement (AISParserState * state,
const char * name 
)
-
-static
-
-

Process an end element tag. This is where values are added to the AISResources object that's held by state.

Parameters
- - - -
stateThe SAX parser state.
nameThe name of the element; used only for code instrumentation.
-
-
- -

Definition at line 211 of file AISDatabaseParser.cc.

- -
-
- -

◆ aisError()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::AISDatabaseParser::aisError (AISParserState * state,
const char * msg,
 ... 
)
-
-static
-
-

Process an XML error. This is treated as a fatal error since there's no easy way for libdap++ to signal a warning to users.

Parameters
- - - -
stateThe SAX parser state.
msgA printf-style format string.
-
-
- -

Definition at line 298 of file AISDatabaseParser.cc.

- -
-
- -

◆ aisFatalError()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::AISDatabaseParser::aisFatalError (AISParserState * state,
const char * msg,
 ... 
)
-
-static
-
-

Process an XML fatal error.

Parameters
- - - -
stateThe SAX parser state.
msgA printf-style format string.
-
-
- -

Definition at line 323 of file AISDatabaseParser.cc.

- -
-
- -

◆ aisGetEntity()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
xmlEntityPtr libdap::AISDatabaseParser::aisGetEntity (AISParserState * state,
const xmlChar * name 
)
-
-static
-
-

Handle the standard XML entities.

Parameters
- - - -
stateThe SAX parser state.
nameThe XML entity.
-
-
- -

Definition at line 262 of file AISDatabaseParser.cc.

- -
-
- -

◆ aisStartDocument()

- -
-
- - - - - -
- - - - - - - - -
void libdap::AISDatabaseParser::aisStartDocument (AISParserState * state)
-
-static
-
-

Initialize the SAX parser state object. This object is passed to each callback as a void pointer.

Parameters
- - -
stateThe SAX parser state.
-
-
- -

Definition at line 69 of file AISDatabaseParser.cc.

- -
-
- -

◆ aisStartElement()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::AISDatabaseParser::aisStartElement (AISParserState * state,
const char * name,
const char ** attrs 
)
-
-static
-
-

Process a start element tag. Because the AIS DTD uses attributes and because libxml2 does not validate those, we do attribute validation here. Values pulled from the attributes are recorded in state for later use in aisEndElement.

Parameters
- - - - -
stateThe SAX parser state.
nameThe name of the element.
attrsThe element's attributes; 0, 2, 4, ... are the attribute names, 1, 3, 5, ... are the values.
-
-
- -

Definition at line 103 of file AISDatabaseParser.cc.

- -
-
- -

◆ aisWarning()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::AISDatabaseParser::aisWarning (AISParserState * state,
const char * msg,
 ... 
)
-
-static
-
-

Process an XML warning. This is treated as a fatal error since there's no easy way for libdap++ to signal a warning to users.

Parameters
- - - -
stateThe SAX parser state.
msgA printf-style format string.
-
-
- -

Definition at line 272 of file AISDatabaseParser.cc.

- -
-
- -

◆ intern()

- -
-
- - - - - - - - - - - - - - - - - - -
void libdap::AISDatabaseParser::intern (const string & database,
AISResourcesais 
)
-
-

Parse an AIS database encoded in XML. The information in the XML document is loaded into an instance of AISResources.

Parameters
- - - -
databaseRead from this XML file.
aisLoad information into this instance of AISResources.
-
-
-
Exceptions
- - -
AISDatabaseReadFailedThrown if the XML document could not be read or parsed.
-
-
- -

Definition at line 395 of file AISDatabaseParser.cc.

- -
-
-
The documentation for this class was generated from the following files: -
-
- - - - diff --git a/html/classlibdap_1_1AISDatabaseParser.js b/html/classlibdap_1_1AISDatabaseParser.js deleted file mode 100644 index f571d6c7e..000000000 --- a/html/classlibdap_1_1AISDatabaseParser.js +++ /dev/null @@ -1,4 +0,0 @@ -var classlibdap_1_1AISDatabaseParser = -[ - [ "intern", "classlibdap_1_1AISDatabaseParser.html#abbe7487f5e9b25db0919cdf80c8ec2ce", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1AISDatabaseReadFailed-members.html b/html/classlibdap_1_1AISDatabaseReadFailed-members.html deleted file mode 100644 index 2e59cd5fd..000000000 --- a/html/classlibdap_1_1AISDatabaseReadFailed-members.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
libdap::AISDatabaseReadFailed Member List
-
-
- -

This is the complete list of members for libdap::AISDatabaseReadFailed, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - - -
_error_code (defined in libdap::Error)libdap::Errorprotected
_error_message (defined in libdap::Error)libdap::Errorprotected
AISDatabaseReadFailed() (defined in libdap::AISDatabaseReadFailed)libdap::AISDatabaseReadFailedinline
AISDatabaseReadFailed(const string &msg) (defined in libdap::AISDatabaseReadFailed)libdap::AISDatabaseReadFailedinline
d_file (defined in libdap::Error)libdap::Errorprotected
d_line (defined in libdap::Error)libdap::Errorprotected
Error(ErrorCode ec, std::string msg, std::string file="", int line=0)libdap::Error
Error(std::string msg, std::string file="", int line=0)libdap::Error
Error()libdap::Error
Error(const Error &copy_from) (defined in libdap::Error)libdap::Error
get_error_code() constlibdap::Error
get_error_message() constlibdap::Error
get_file() const (defined in libdap::Error)libdap::Errorinline
get_line() const (defined in libdap::Error)libdap::Errorinline
OK() constlibdap::Error
operator=(const Error &rhs) (defined in libdap::Error)libdap::Error
parse(FILE *fp)libdap::Error
print(FILE *out) constlibdap::Error
print(std::ostream &out) constlibdap::Error
set_error_code(ErrorCode ec=undefined_error)libdap::Error
set_error_message(std::string msg="")libdap::Error
set_file(std::string f) (defined in libdap::Error)libdap::Errorinline
set_line(int l) (defined in libdap::Error)libdap::Errorinline
what() constlibdap::Errorinlinevirtual
~Error() (defined in libdap::Error)libdap::Errorvirtual
-
- - - - diff --git a/html/classlibdap_1_1AISDatabaseReadFailed.html b/html/classlibdap_1_1AISDatabaseReadFailed.html deleted file mode 100644 index f65f76b5d..000000000 --- a/html/classlibdap_1_1AISDatabaseReadFailed.html +++ /dev/null @@ -1,453 +0,0 @@ - - - - - - - -libdap: libdap::AISDatabaseReadFailed Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
- -
-
libdap::AISDatabaseReadFailed Class Reference
-
-
- -

#include <AISExceptions.h>

-
-Inheritance diagram for libdap::AISDatabaseReadFailed:
-
-
Inheritance graph
- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

AISDatabaseReadFailed (const string &msg)
 
ErrorCode get_error_code () const
 
std::string get_error_message () const
 
-std::string get_file () const
 
-int get_line () const
 
bool OK () const
 Is the Error object valid? More...
 
bool parse (FILE *fp)
 Parse an Error object. More...
 
void print (FILE *out) const
 
void print (std::ostream &out) const
 
void set_error_code (ErrorCode ec=undefined_error)
 
void set_error_message (std::string msg="")
 
-void set_file (std::string f)
 
-void set_line (int l)
 
virtual const char * what () const throw ()
 The pointer is valid only for the lifetime of the Error instance. jhrg 9/22/20. More...
 
- - - - - - - - - -

-Protected Attributes

-ErrorCode _error_code
 
-std::string _error_message
 
-std::string d_file
 
-int d_line
 
-

Detailed Description

-

Thrown when the AIS database/document cannot be read.

- -

Definition at line 46 of file AISExceptions.h.

-

Member Function Documentation

- -

◆ get_error_code()

- -
-
- - - - - -
- - - - - - - -
ErrorCode libdap::Error::get_error_code () const
-
-inherited
-
-

Get the ErrorCode for this instance.

- -

Definition at line 249 of file Error.cc.

- -
-
- -

◆ get_error_message()

- -
-
- - - - - -
- - - - - - - -
string libdap::Error::get_error_message () const
-
-inherited
-
-

Return the current error message.

- -

Definition at line 278 of file Error.cc.

- -
-
- -

◆ OK()

- -
-
- - - - - -
- - - - - - - -
bool libdap::Error::OK () const
-
-inherited
-
- -

Is the Error object valid?

-

Use this function to determine whether an Error object is valid. To be a valid, an Error object must either be: 1) empty or contain a message and a code.

-
Returns
TRUE if the object is valid, FALSE otherwise.
- -

Definition at line 135 of file Error.cc.

- -
-
- -

◆ parse()

- -
-
- - - - - -
- - - - - - - - -
bool libdap::Error::parse (FILE * fp)
-
-inherited
-
- -

Parse an Error object.

-

Given an input stream (FILE *) fp, parse an Error object from stream. Values for fields of the Error object are parsed and this is set accordingly. This is how a client program receives an error object from a server.

-
Parameters
- - -
fpA valid file pointer to an input stream.
-
-
-
Returns
TRUE if no error was detected, FALSE otherwise.
- -

Definition at line 158 of file Error.cc.

- -
-
- -

◆ print() [1/2]

- -
-
- - - - - -
- - - - - - - - -
void libdap::Error::print (FILE * out) const
-
-inherited
-
-

Creates a printable representation of the Error object. It is suitable for framing, and also for printing and sending over a network.

-

The printed representation produced by this function can be parsed by the parse() member function. Thus parse and print form a symmetrical pair that can be used to send and receive an Error object over the network in a MIME document.

-
Parameters
- - -
outA pointer to the output stream on which the Error object is to be rendered.
-
-
- -

Definition at line 200 of file Error.cc.

- -
-
- -

◆ print() [2/2]

- -
-
- - - - - -
- - - - - - - - -
void libdap::Error::print (std::ostream & out) const
-
-inherited
-
-

Creates a printable representation of the Error object. It is suitable for framing, and also for printing and sending over a network.

-

The printed representation produced by this function can be parsed by the parse() member function. Thus parse and print form a symmetrical pair that can be used to send and receive an Error object over the network in a MIME document.

-
Parameters
- - -
strmA reference to the output stream on which the Error object is to be rendered.
-
-
- -

Definition at line 229 of file Error.cc.

- -
-
- -

◆ set_error_code()

- -
-
- - - - - -
- - - - - - - - -
void libdap::Error::set_error_code (ErrorCode ec = undefined_error)
-
-inherited
-
-

Set the ErrorCode. If the current error message has not been set, use ec to set the error message. The resulting error message string is the same as the ErrorCode name. If ec is not within the range of values for an OPeNDAP ErrorCode, the error message is left unchanged.

-
Parameters
- - -
ecThe new ErrorCode value.
-
-
- -

Definition at line 262 of file Error.cc.

- -
-
- -

◆ set_error_message()

- -
-
- - - - - -
- - - - - - - - -
void libdap::Error::set_error_message (std::string msg = "")
-
-inherited
-
-

Set the error message.

- -

Definition at line 287 of file Error.cc.

- -
-
- -

◆ what()

- -
-
- - - - - -
- - - - - - - - - - - - - -
virtual const char* libdap::Error::what () const
throw (
)
-
-inlinevirtualinherited
-
- -

The pointer is valid only for the lifetime of the Error instance. jhrg 9/22/20.

- -

Definition at line 127 of file Error.h.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - diff --git a/html/classlibdap_1_1AISDatabaseReadFailed.js b/html/classlibdap_1_1AISDatabaseReadFailed.js deleted file mode 100644 index 2dfe2f9fd..000000000 --- a/html/classlibdap_1_1AISDatabaseReadFailed.js +++ /dev/null @@ -1,22 +0,0 @@ -var classlibdap_1_1AISDatabaseReadFailed = -[ - [ "AISDatabaseReadFailed", "classlibdap_1_1AISDatabaseReadFailed.html#a018b1d806c70ca9769dbbe5ec7aaef37", null ], - [ "AISDatabaseReadFailed", "classlibdap_1_1AISDatabaseReadFailed.html#aa93c6d6a3502ff5446697d07cabf73ec", null ], - [ "get_error_code", "classlibdap_1_1AISDatabaseReadFailed.html#aaca0caca09e939602cade604cbc9824f", null ], - [ "get_error_message", "classlibdap_1_1AISDatabaseReadFailed.html#ab24a61e4974aae62962a40f9975e674c", null ], - [ "get_file", "classlibdap_1_1AISDatabaseReadFailed.html#a5165d667334a9fd6f337735c2b57e28c", null ], - [ "get_line", "classlibdap_1_1AISDatabaseReadFailed.html#a44b91121bdbc7d9d389db3440e2299cf", null ], - [ "OK", "classlibdap_1_1AISDatabaseReadFailed.html#acf3ab60821773bd8b62284750b02cfc0", null ], - [ "parse", "classlibdap_1_1AISDatabaseReadFailed.html#ac705b3c1cfab1f7530d66a974eb0e8b6", null ], - [ "print", "classlibdap_1_1AISDatabaseReadFailed.html#a552d711be27e6695854bd2b977a5cf31", null ], - [ "print", "classlibdap_1_1AISDatabaseReadFailed.html#a4c58ef196c2b247bd37529bb7ad6a666", null ], - [ "set_error_code", "classlibdap_1_1AISDatabaseReadFailed.html#a47c0f4b6a38d8ca075d1056076d2845d", null ], - [ "set_error_message", "classlibdap_1_1AISDatabaseReadFailed.html#a3ca90d33bf1c95529c9eefdfe8646e34", null ], - [ "set_file", "classlibdap_1_1AISDatabaseReadFailed.html#a94a26bbdd9f4ede88c74de97e9e9e98d", null ], - [ "set_line", "classlibdap_1_1AISDatabaseReadFailed.html#a63a9c54019daa8b406c4287faba5e60a", null ], - [ "what", "classlibdap_1_1AISDatabaseReadFailed.html#accc5eeb469c8c18ec16dbf7fefe3cc41", null ], - [ "_error_code", "classlibdap_1_1AISDatabaseReadFailed.html#a30226017ae9dfbe2e27be502b4fbdef4", null ], - [ "_error_message", "classlibdap_1_1AISDatabaseReadFailed.html#a87f74c6be2134736ca1e400c90a3d571", null ], - [ "d_file", "classlibdap_1_1AISDatabaseReadFailed.html#ac947a4c3d229d7ec505ad921a77702ea", null ], - [ "d_line", "classlibdap_1_1AISDatabaseReadFailed.html#af7d939b4b8154518f870d5424ff55f62", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1AISDatabaseReadFailed__inherit__graph.map b/html/classlibdap_1_1AISDatabaseReadFailed__inherit__graph.map deleted file mode 100644 index 17e75c124..000000000 --- a/html/classlibdap_1_1AISDatabaseReadFailed__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1AISDatabaseReadFailed__inherit__graph.md5 b/html/classlibdap_1_1AISDatabaseReadFailed__inherit__graph.md5 deleted file mode 100644 index 0e31f560d..000000000 --- a/html/classlibdap_1_1AISDatabaseReadFailed__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -349e33848a59dcd1c57fa40e0bb41512 \ No newline at end of file diff --git a/html/classlibdap_1_1AISDatabaseReadFailed__inherit__graph.png b/html/classlibdap_1_1AISDatabaseReadFailed__inherit__graph.png deleted file mode 100644 index b546720a660d2047140e5293187acee9506c17eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23796 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 - - - - - - -libdap: Member List - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
libdap::AISDatabaseWriteFailed Member List
-
-
- -

This is the complete list of members for libdap::AISDatabaseWriteFailed, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - - -
_error_code (defined in libdap::Error)libdap::Errorprotected
_error_message (defined in libdap::Error)libdap::Errorprotected
AISDatabaseWriteFailed() (defined in libdap::AISDatabaseWriteFailed)libdap::AISDatabaseWriteFailedinline
AISDatabaseWriteFailed(const string &msg) (defined in libdap::AISDatabaseWriteFailed)libdap::AISDatabaseWriteFailedinline
d_file (defined in libdap::Error)libdap::Errorprotected
d_line (defined in libdap::Error)libdap::Errorprotected
Error(ErrorCode ec, std::string msg, std::string file="", int line=0)libdap::Error
Error(std::string msg, std::string file="", int line=0)libdap::Error
Error()libdap::Error
Error(const Error &copy_from) (defined in libdap::Error)libdap::Error
get_error_code() constlibdap::Error
get_error_message() constlibdap::Error
get_file() const (defined in libdap::Error)libdap::Errorinline
get_line() const (defined in libdap::Error)libdap::Errorinline
OK() constlibdap::Error
operator=(const Error &rhs) (defined in libdap::Error)libdap::Error
parse(FILE *fp)libdap::Error
print(FILE *out) constlibdap::Error
print(std::ostream &out) constlibdap::Error
set_error_code(ErrorCode ec=undefined_error)libdap::Error
set_error_message(std::string msg="")libdap::Error
set_file(std::string f) (defined in libdap::Error)libdap::Errorinline
set_line(int l) (defined in libdap::Error)libdap::Errorinline
what() constlibdap::Errorinlinevirtual
~Error() (defined in libdap::Error)libdap::Errorvirtual
-
- - - - diff --git a/html/classlibdap_1_1AISDatabaseWriteFailed.html b/html/classlibdap_1_1AISDatabaseWriteFailed.html deleted file mode 100644 index 88bd0cb11..000000000 --- a/html/classlibdap_1_1AISDatabaseWriteFailed.html +++ /dev/null @@ -1,453 +0,0 @@ - - - - - - - -libdap: libdap::AISDatabaseWriteFailed Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
- -
-
libdap::AISDatabaseWriteFailed Class Reference
-
-
- -

#include <AISExceptions.h>

-
-Inheritance diagram for libdap::AISDatabaseWriteFailed:
-
-
Inheritance graph
- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

AISDatabaseWriteFailed (const string &msg)
 
ErrorCode get_error_code () const
 
std::string get_error_message () const
 
-std::string get_file () const
 
-int get_line () const
 
bool OK () const
 Is the Error object valid? More...
 
bool parse (FILE *fp)
 Parse an Error object. More...
 
void print (FILE *out) const
 
void print (std::ostream &out) const
 
void set_error_code (ErrorCode ec=undefined_error)
 
void set_error_message (std::string msg="")
 
-void set_file (std::string f)
 
-void set_line (int l)
 
virtual const char * what () const throw ()
 The pointer is valid only for the lifetime of the Error instance. jhrg 9/22/20. More...
 
- - - - - - - - - -

-Protected Attributes

-ErrorCode _error_code
 
-std::string _error_message
 
-std::string d_file
 
-int d_line
 
-

Detailed Description

-

Thrown when the AIS database/document cannot be written.

- -

Definition at line 57 of file AISExceptions.h.

-

Member Function Documentation

- -

◆ get_error_code()

- -
-
- - - - - -
- - - - - - - -
ErrorCode libdap::Error::get_error_code () const
-
-inherited
-
-

Get the ErrorCode for this instance.

- -

Definition at line 249 of file Error.cc.

- -
-
- -

◆ get_error_message()

- -
-
- - - - - -
- - - - - - - -
string libdap::Error::get_error_message () const
-
-inherited
-
-

Return the current error message.

- -

Definition at line 278 of file Error.cc.

- -
-
- -

◆ OK()

- -
-
- - - - - -
- - - - - - - -
bool libdap::Error::OK () const
-
-inherited
-
- -

Is the Error object valid?

-

Use this function to determine whether an Error object is valid. To be a valid, an Error object must either be: 1) empty or contain a message and a code.

-
Returns
TRUE if the object is valid, FALSE otherwise.
- -

Definition at line 135 of file Error.cc.

- -
-
- -

◆ parse()

- -
-
- - - - - -
- - - - - - - - -
bool libdap::Error::parse (FILE * fp)
-
-inherited
-
- -

Parse an Error object.

-

Given an input stream (FILE *) fp, parse an Error object from stream. Values for fields of the Error object are parsed and this is set accordingly. This is how a client program receives an error object from a server.

-
Parameters
- - -
fpA valid file pointer to an input stream.
-
-
-
Returns
TRUE if no error was detected, FALSE otherwise.
- -

Definition at line 158 of file Error.cc.

- -
-
- -

◆ print() [1/2]

- -
-
- - - - - -
- - - - - - - - -
void libdap::Error::print (FILE * out) const
-
-inherited
-
-

Creates a printable representation of the Error object. It is suitable for framing, and also for printing and sending over a network.

-

The printed representation produced by this function can be parsed by the parse() member function. Thus parse and print form a symmetrical pair that can be used to send and receive an Error object over the network in a MIME document.

-
Parameters
- - -
outA pointer to the output stream on which the Error object is to be rendered.
-
-
- -

Definition at line 200 of file Error.cc.

- -
-
- -

◆ print() [2/2]

- -
-
- - - - - -
- - - - - - - - -
void libdap::Error::print (std::ostream & out) const
-
-inherited
-
-

Creates a printable representation of the Error object. It is suitable for framing, and also for printing and sending over a network.

-

The printed representation produced by this function can be parsed by the parse() member function. Thus parse and print form a symmetrical pair that can be used to send and receive an Error object over the network in a MIME document.

-
Parameters
- - -
strmA reference to the output stream on which the Error object is to be rendered.
-
-
- -

Definition at line 229 of file Error.cc.

- -
-
- -

◆ set_error_code()

- -
-
- - - - - -
- - - - - - - - -
void libdap::Error::set_error_code (ErrorCode ec = undefined_error)
-
-inherited
-
-

Set the ErrorCode. If the current error message has not been set, use ec to set the error message. The resulting error message string is the same as the ErrorCode name. If ec is not within the range of values for an OPeNDAP ErrorCode, the error message is left unchanged.

-
Parameters
- - -
ecThe new ErrorCode value.
-
-
- -

Definition at line 262 of file Error.cc.

- -
-
- -

◆ set_error_message()

- -
-
- - - - - -
- - - - - - - - -
void libdap::Error::set_error_message (std::string msg = "")
-
-inherited
-
-

Set the error message.

- -

Definition at line 287 of file Error.cc.

- -
-
- -

◆ what()

- -
-
- - - - - -
- - - - - - - - - - - - - -
virtual const char* libdap::Error::what () const
throw (
)
-
-inlinevirtualinherited
-
- -

The pointer is valid only for the lifetime of the Error instance. jhrg 9/22/20.

- -

Definition at line 127 of file Error.h.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - diff --git a/html/classlibdap_1_1AISDatabaseWriteFailed.js b/html/classlibdap_1_1AISDatabaseWriteFailed.js deleted file mode 100644 index 6dfdfad36..000000000 --- a/html/classlibdap_1_1AISDatabaseWriteFailed.js +++ /dev/null @@ -1,22 +0,0 @@ -var classlibdap_1_1AISDatabaseWriteFailed = -[ - [ "AISDatabaseWriteFailed", "classlibdap_1_1AISDatabaseWriteFailed.html#ad0f488cda94eea30b1894623af095600", null ], - [ "AISDatabaseWriteFailed", "classlibdap_1_1AISDatabaseWriteFailed.html#af910c43b5551cb05a4a0b6eb68993bec", null ], - [ "get_error_code", "classlibdap_1_1AISDatabaseWriteFailed.html#aaca0caca09e939602cade604cbc9824f", null ], - [ "get_error_message", "classlibdap_1_1AISDatabaseWriteFailed.html#ab24a61e4974aae62962a40f9975e674c", null ], - [ "get_file", "classlibdap_1_1AISDatabaseWriteFailed.html#a5165d667334a9fd6f337735c2b57e28c", null ], - [ "get_line", "classlibdap_1_1AISDatabaseWriteFailed.html#a44b91121bdbc7d9d389db3440e2299cf", null ], - [ "OK", "classlibdap_1_1AISDatabaseWriteFailed.html#acf3ab60821773bd8b62284750b02cfc0", null ], - [ "parse", "classlibdap_1_1AISDatabaseWriteFailed.html#ac705b3c1cfab1f7530d66a974eb0e8b6", null ], - [ "print", "classlibdap_1_1AISDatabaseWriteFailed.html#a552d711be27e6695854bd2b977a5cf31", null ], - [ "print", "classlibdap_1_1AISDatabaseWriteFailed.html#a4c58ef196c2b247bd37529bb7ad6a666", null ], - [ "set_error_code", "classlibdap_1_1AISDatabaseWriteFailed.html#a47c0f4b6a38d8ca075d1056076d2845d", null ], - [ "set_error_message", "classlibdap_1_1AISDatabaseWriteFailed.html#a3ca90d33bf1c95529c9eefdfe8646e34", null ], - [ "set_file", "classlibdap_1_1AISDatabaseWriteFailed.html#a94a26bbdd9f4ede88c74de97e9e9e98d", null ], - [ "set_line", "classlibdap_1_1AISDatabaseWriteFailed.html#a63a9c54019daa8b406c4287faba5e60a", null ], - [ "what", "classlibdap_1_1AISDatabaseWriteFailed.html#accc5eeb469c8c18ec16dbf7fefe3cc41", null ], - [ "_error_code", "classlibdap_1_1AISDatabaseWriteFailed.html#a30226017ae9dfbe2e27be502b4fbdef4", null ], - [ "_error_message", "classlibdap_1_1AISDatabaseWriteFailed.html#a87f74c6be2134736ca1e400c90a3d571", null ], - [ "d_file", "classlibdap_1_1AISDatabaseWriteFailed.html#ac947a4c3d229d7ec505ad921a77702ea", null ], - [ "d_line", "classlibdap_1_1AISDatabaseWriteFailed.html#af7d939b4b8154518f870d5424ff55f62", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1AISDatabaseWriteFailed__inherit__graph.map b/html/classlibdap_1_1AISDatabaseWriteFailed__inherit__graph.map deleted file mode 100644 index 4ee02c48d..000000000 --- a/html/classlibdap_1_1AISDatabaseWriteFailed__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1AISDatabaseWriteFailed__inherit__graph.md5 b/html/classlibdap_1_1AISDatabaseWriteFailed__inherit__graph.md5 deleted file mode 100644 index 57387b905..000000000 --- a/html/classlibdap_1_1AISDatabaseWriteFailed__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -cafc2332fdf56c72abb6e25df35ce666 \ No newline at end of file diff --git a/html/classlibdap_1_1AISDatabaseWriteFailed__inherit__graph.png b/html/classlibdap_1_1AISDatabaseWriteFailed__inherit__graph.png deleted file mode 100644 index 68a0cc202d47abd58d3036ba7c80c870f8bfed34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23708 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 A=8FH(1RU_aeh-B4>RY(5-h*K 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 diff --git a/html/classlibdap_1_1AISMerge-members.html b/html/classlibdap_1_1AISMerge-members.html deleted file mode 100644 index 34562ec52..000000000 --- a/html/classlibdap_1_1AISMerge-members.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
libdap::AISMerge Member List
-
-
- -

This is the complete list of members for libdap::AISMerge, including all inherited members.

- - - - - - -
AISMerge(const string &database)libdap::AISMergeinline
AISMergeTest (defined in libdap::AISMerge)libdap::AISMergefriend
get_ais_resource(const string &res)libdap::AISMergevirtual
merge(const string &primary, DAS &das)libdap::AISMergevirtual
~AISMerge()libdap::AISMergeinlinevirtual
-
- - - - diff --git a/html/classlibdap_1_1AISMerge.html b/html/classlibdap_1_1AISMerge.html deleted file mode 100644 index d3d662030..000000000 --- a/html/classlibdap_1_1AISMerge.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - - -libdap: libdap::AISMerge Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
- -
-
libdap::AISMerge Class Reference
-
-
- -

Merge AIS resources. - More...

- -

#include <AISMerge.h>

- - - - - - - - - - -

-Public Member Functions

 AISMerge (const string &database) throw (AISDatabaseReadFailed)
 
virtual Responseget_ais_resource (const string &res)
 
virtual void merge (const string &primary, DAS &das)
 
virtual ~AISMerge ()
 
- - - -

-Friends

-class AISMergeTest
 
-

Detailed Description

-

Merge AIS resources.

-

Manage a single AIS database. Open an AIS database and handle merging DAP objects with the ancillary resources it references. This class uses AISResources to actually open the AIS database and locate AIS resources for a particular primary data source. This class dereferences AIS resources returned by AISResources and merges that with an existing DAP object (currently only the DAS object is supported. 02/25/03 jhrg).

- -

Definition at line 64 of file AISMerge.h.

-

Constructor & Destructor Documentation

- -

◆ AISMerge()

- -
-
- - - - - -
- - - - - - - - - - - - - - -
libdap::AISMerge::AISMerge (const string & database)
throw (AISDatabaseReadFailed
)
-
-inline
-
-

Initialize an instance so that it reads from database.

Parameters
- - -
databaseName of a database of AIS resources.
-
-
-
Exceptions
- - -
AISDatabaseReadFailedThrown if the named database cannot be opened.
-
-
- -

Definition at line 76 of file AISMerge.h.

- -
-
- -

◆ ~AISMerge()

- -
-
- - - - - -
- - - - - - - -
virtual libdap::AISMerge::~AISMerge ()
-
-inlinevirtual
-
-

Destroy an instance. This is explicitly declared virtual to support subclassing.

- -

Definition at line 82 of file AISMerge.h.

- -
-
-

Member Function Documentation

- -

◆ get_ais_resource()

- -
-
- - - - - -
- - - - - - - - -
Response * libdap::AISMerge::get_ais_resource (const string & res)
-
-virtual
-
-

Access an AIS resource. The resource may be a local file or a URL. Assume all resource URIs have no leading spaces. This method is public so that a client of libdap++ can specialize its behavior. This implementation dereferences a URL or opens a file and returns a FILE pointer which can be used to read the contents. In the case of a URL, 'the contents' means the body of the HTTP response. For a file, it means the entire file.

-
Parameters
- - -
resThe AIS resource.
-
-
-
Returns
Either an open FILE * which points to the resource or null if the resource could not be opened. This method does not throw an exception for resources that cannot be opened because that can happen for a number of reasons which are hardly 'exceptional.'
- -

Definition at line 51 of file AISMerge.cc.

- -
-
- -

◆ merge()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::AISMerge::merge (const string & primary,
DASdas 
)
-
-virtual
-
-

Access the AIS ancillary resources matched to primary and merge those with the DAS object das.

-

This method uses AISResources::has_resource(...) to determine if primary has an entry in the AIS database. It uses AISResources::get_resource(...) to get a ResourceVector of AIS resources for primary. It then uses its own get_ais_resources(...) to access the actual resources via a FILE pointer. Clients may use this information to specialize AISMerge::merge(...).

-
Parameters
- - - -
primaryThe URL of the primary resource.
dasThe target of the merge operation. This must already contain the DAS for primary.
-
-
- -

Definition at line 82 of file AISMerge.cc.

- -
-
-
The documentation for this class was generated from the following files: -
-
- - - - diff --git a/html/classlibdap_1_1AISMerge.js b/html/classlibdap_1_1AISMerge.js deleted file mode 100644 index 1ca2f5e96..000000000 --- a/html/classlibdap_1_1AISMerge.js +++ /dev/null @@ -1,8 +0,0 @@ -var classlibdap_1_1AISMerge = -[ - [ "AISMerge", "classlibdap_1_1AISMerge.html#ac8bbb72add970ed61f8e5a98ae269571", null ], - [ "~AISMerge", "classlibdap_1_1AISMerge.html#a51595e4888180773cf9bfcd26f6c80d8", null ], - [ "get_ais_resource", "classlibdap_1_1AISMerge.html#a998f5e989f6707d1a4c40a1f6b22b8a7", null ], - [ "merge", "classlibdap_1_1AISMerge.html#a39cdca8a9bcf3834f826ebbb45694961", null ], - [ "AISMergeTest", "classlibdap_1_1AISMerge.html#a0e5283869b3f630b238fc3f666fe1603", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1AISResources-members.html b/html/classlibdap_1_1AISResources-members.html deleted file mode 100644 index f82be6674..000000000 --- a/html/classlibdap_1_1AISResources-members.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
libdap::AISResources Member List
-
-
- -

This is the complete list of members for libdap::AISResources, including all inherited members.

- - - - - - - - - - - - - - -
add_regexp_resource(const string &regexp, const Resource &ancillary)libdap::AISResourcesvirtual
add_regexp_resource(const string &regexp, const ResourceVector &rv)libdap::AISResourcesvirtual
add_url_resource(const string &url, const Resource &ancillary)libdap::AISResourcesvirtual
add_url_resource(const string &url, const ResourceVector &rv)libdap::AISResourcesvirtual
AISResources()libdap::AISResourcesinline
AISResources(const string &database)libdap::AISResources
AISResourcesTest (defined in libdap::AISResources)libdap::AISResourcesfriend
get_resource(const string &primary)libdap::AISResourcesvirtual
has_resource(const string &primary) constlibdap::AISResourcesvirtual
operator<<(ostream &os, const AISResources &ais_res)libdap::AISResourcesfriend
read_database(const string &database)libdap::AISResourcesvirtual
write_database(const string &filename)libdap::AISResourcesvirtual
~AISResources() (defined in libdap::AISResources)libdap::AISResourcesinlinevirtual
-
- - - - diff --git a/html/classlibdap_1_1AISResources.html b/html/classlibdap_1_1AISResources.html deleted file mode 100644 index 8a5489799..000000000 --- a/html/classlibdap_1_1AISResources.html +++ /dev/null @@ -1,577 +0,0 @@ - - - - - - - -libdap: libdap::AISResources Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
- -
-
libdap::AISResources Class Reference
-
-
- -

Manage AIS resources. - More...

- -

#include <AISResources.h>

- - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 AISResources ()
 
 AISResources (const string &database) throw (AISDatabaseReadFailed)
 
virtual ResourceVector get_resource (const string &primary)
 
virtual bool has_resource (const string &primary) const
 
virtual void read_database (const string &database)
 
virtual void write_database (const string &filename)
 
Methods used by the AISDatabaseParser class
virtual void add_url_resource (const string &url, const Resource &ancillary)
 
virtual void add_url_resource (const string &url, const ResourceVector &rv)
 
virtual void add_regexp_resource (const string &regexp, const Resource &ancillary)
 
virtual void add_regexp_resource (const string &regexp, const ResourceVector &rv)
 
- - - - - -

-Friends

-class AISResourcesTest
 
ostream & operator<< (ostream &os, const AISResources &ais_res)
 
-

Detailed Description

-

Manage AIS resources.

-

Maintain a database of AIS resources. Groups of AIS resources are accessed using a primary resource. The AISResources object is the in-memory database of mappings between 'primary' and 'ancillary' resources.

-

Note that read_database() takes filenames because the underlying XML parser library uses filenames. The write_database() method takes a filename to be symmetrical.

-
Note
The word 'primary,' as in 'primary resource,' means a Data Source URL. This is a URL to a DAP-compliant server that will return DAS, DDS, et c., responses using the DAP. The word 'Ancillary' or 'AIS,' as in 'Ancillary/AIS Resources,' means DAS, DDS, or Data information in a file that the software can access. In practice, these might come from servers, too, but the terms are used to try to keep things sane. A 'primary resource' is the data set and the 'ancillary resource' is the stuff you're trying to jam into it.
- -

Definition at line 70 of file AISResources.h.

-

Constructor & Destructor Documentation

- -

◆ AISResources() [1/2]

- -
-
- - - - - -
- - - - - - - -
libdap::AISResources::AISResources ()
-
-inline
-
-

Build an empty instance.

- -

Definition at line 121 of file AISResources.h.

- -
-
- -

◆ AISResources() [2/2]

- -
-
- - - - - - - - - - - - - - -
libdap::AISResources::AISResources (const string & database)
throw (AISDatabaseReadFailed
)
-
-

Use an existing AIS database to build an instance.

Parameters
- - -
databasePathname of the database/document.
-
-
- -

Definition at line 105 of file AISResources.cc.

- -
-
-

Member Function Documentation

- -

◆ add_regexp_resource() [1/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::AISResources::add_regexp_resource (const string & re,
const Resourceancillary 
)
-
-virtual
-
-

Add the given ancillary resource to the in-memory collection of mappings between regular expressions and ancillary data sources.

Parameters
- - - -
reThe target of the new mapping. This is a regular expression.
ancillaryMatch this ancillary resource to the target (primary).
-
-
- -

Definition at line 146 of file AISResources.cc.

- -
-
- -

◆ add_regexp_resource() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::AISResources::add_regexp_resource (const string & re,
const ResourceVector & rv 
)
-
-virtual
-
-

Add a vector of AIS resources for the given primary data source regular expression. If there is already an entry for the primary, append the new ancillary resources to those.

-
Parameters
- - - -
reThe target of the new mapping.
rvAncillary resources matched to this primary resource.
-
-
- -

Definition at line 158 of file AISResources.cc.

- -
-
- -

◆ add_url_resource() [1/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::AISResources::add_url_resource (const string & url,
const Resourceancillary 
)
-
-virtual
-
-

Add the given ancillary resource to the in-memory collection of mappings between primary and ancillary data sources.

Parameters
- - - -
urlThe target of the new mapping.
ancillaryMatch this ancillary resource to the target (primary).
-
-
- -

Definition at line 117 of file AISResources.cc.

- -
-
- -

◆ add_url_resource() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::AISResources::add_url_resource (const string & url,
const ResourceVector & rv 
)
-
-virtual
-
-

Add a vector of AIS resources for the given primary data source URL. If there is already an entry for the primary, append the new ancillary resources to those.

Parameters
- - - -
urlThe target of the new mapping.
rvAncillary resources matched to this primary resource.
-
-
- -

Definition at line 128 of file AISResources.cc.

- -
-
- -

◆ get_resource()

- -
-
- - - - - -
- - - - - - - - -
ResourceVector libdap::AISResources::get_resource (const string & primary)
-
-virtual
-
-

Return a vector of AIS Resource objects which are bound to the given primary resource. If a given primary resource has both an explicit entry for itself and matches a regular expression, the AIS resources for both will be combined in one ResourceVector and returned.

-

Aside from reading the database, this is the main workhorse for this class. Once a database has been read, a client uses has_resource() to see if a Data URL has anything in the database and then calls this method to get a vector of those things.

-
Todo:
Make this return an empty ResourceVector is no matching resources are found. Clients would not need to call has_resource() which would save some time.
-
Parameters
- - -
primaryThe URL of the primary resource
-
-
-
Returns
a vector of Resource objects.
-
Exceptions
- - -
NoSuchPrimaryResourcethrown if primary is not present in the current mapping.
-
-
- -

Definition at line 213 of file AISResources.cc.

- -
-
- -

◆ has_resource()

- -
-
- - - - - -
- - - - - - - - -
bool libdap::AISResources::has_resource (const string & primary) const
-
-virtual
-
-

Return True if the given primary resource is listed in the current set of AIS resource mappings. That is, return true if there are some AIS resources registered for the given primary resource.

Parameters
- - -
primaryThe URL of the primary resource. That is, a Data Source URL.
-
-
-
Returns
True if there are AIS resources for primary.
- -

Definition at line 181 of file AISResources.cc.

- -
-
- -

◆ read_database()

- -
-
- - - - - -
- - - - - - - - -
void libdap::AISResources::read_database (const string & database)
-
-virtual
-
-

Read the AIS database (an XML file) and internalize it. This method is almost always used to build an in-memory database that has_resource() and get_resource() use.

-
Parameters
- - -
databaseA file/pathname to the AIS database.
-
-
-
Exceptions
- - -
AISDatabaseReadFailedthrown if the database could not be read.
-
-
- -

Definition at line 242 of file AISResources.cc.

- -
-
- -

◆ write_database()

- -
-
- - - - - -
- - - - - - - - -
void libdap::AISResources::write_database (const string & filename)
-
-virtual
-
-

Write the current in-memory mapping of primary and ancillary resources to the named file so that the read_database() method can read them and recreate the in-memory mapping.

-
Parameters
- - -
filenameA local file; write the database to this file. Create if necessary.
-
-
-
Exceptions
- - -
AISDatabaseWriteFailedthrown if the database could not be written.
-
-
- -

Definition at line 258 of file AISResources.cc.

- -
-
-

Friends And Related Function Documentation

- -

◆ operator<<

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
ostream& operator<< (ostream & os,
const AISResourcesais_res 
)
-
-friend
-
-

Output the XML for a collection of AIS resources. This function is a friend of the AISResource class.

See also
AISResources
- -

Definition at line 62 of file AISResources.cc.

- -
-
-
The documentation for this class was generated from the following files: -
-
- - - - diff --git a/html/classlibdap_1_1AISResources.js b/html/classlibdap_1_1AISResources.js deleted file mode 100644 index 6bc403082..000000000 --- a/html/classlibdap_1_1AISResources.js +++ /dev/null @@ -1,16 +0,0 @@ -var classlibdap_1_1AISResources = -[ - [ "AISResources", "classlibdap_1_1AISResources.html#a1bc02aaf8ce2ade3aae43cdb9ae52da7", null ], - [ "AISResources", "classlibdap_1_1AISResources.html#ad78ad28fe4984fc735cbe2acca8d298c", null ], - [ "~AISResources", "classlibdap_1_1AISResources.html#a29cdff1d231e0c769a10af0df07b2d56", null ], - [ "add_regexp_resource", "classlibdap_1_1AISResources.html#abb38b5dda71db72797538218ae16305d", null ], - [ "add_regexp_resource", "classlibdap_1_1AISResources.html#a596d28e5be60838234b3efe64532e25f", null ], - [ "add_url_resource", "classlibdap_1_1AISResources.html#adc3494e028bbacd2fc2e1c34f929fad4", null ], - [ "add_url_resource", "classlibdap_1_1AISResources.html#a84c7411fe8b00a2f96a578695cca676a", null ], - [ "get_resource", "classlibdap_1_1AISResources.html#a35cb470d61a9e94a013520f45514f600", null ], - [ "has_resource", "classlibdap_1_1AISResources.html#a5db1857c00f33c7962ba02f7ffff08ef", null ], - [ "read_database", "classlibdap_1_1AISResources.html#aa8bef9e8affa5cdffbf40a6a73935fd3", null ], - [ "write_database", "classlibdap_1_1AISResources.html#a2867d445f918e4902ec6fe45c695ebb1", null ], - [ "AISResourcesTest", "classlibdap_1_1AISResources.html#a4b45a9fddd36e299e96b57ce42fc48b6", null ], - [ "operator<<", "classlibdap_1_1AISResources.html#a56056b9b3a7729494d6790e56394abbb", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1AlarmHandler-members.html b/html/classlibdap_1_1AlarmHandler-members.html deleted file mode 100644 index 9ef12d665..000000000 --- a/html/classlibdap_1_1AlarmHandler-members.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
libdap::AlarmHandler Member List
-
-
- -

This is the complete list of members for libdap::AlarmHandler, including all inherited members.

- - - - - - - -
AlarmHandler() (defined in libdap::AlarmHandler)libdap::AlarmHandlerinline
AlarmHandler(FILE *s) (defined in libdap::AlarmHandler)libdap::AlarmHandlerinlineexplicit
AlarmHandler(ostream &)libdap::AlarmHandlerinlineexplicit
handle_signal(int signum)libdap::AlarmHandlerinlinevirtual
~AlarmHandler() (defined in libdap::AlarmHandler)libdap::AlarmHandlerinlinevirtual
~EventHandler()libdap::EventHandlerinlinevirtual
-
- - - - diff --git a/html/classlibdap_1_1AlarmHandler.html b/html/classlibdap_1_1AlarmHandler.html deleted file mode 100644 index 83bc79df3..000000000 --- a/html/classlibdap_1_1AlarmHandler.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - - -libdap: libdap::AlarmHandler Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
- -
-
libdap::AlarmHandler Class Reference
-
-
- -

#include <AlarmHandler.h>

-
-Inheritance diagram for libdap::AlarmHandler:
-
-
Inheritance graph
- - - -
- - - - - - - - -

-Public Member Functions

AlarmHandler (FILE *s)
 
 AlarmHandler (ostream &)
 
virtual void handle_signal (int signum)
 
-

Detailed Description

-

Handle the time out alarm. When an OPeNDAP server runs until the time out alarm is triggered, this class provides the concrete implementation of EventHandler::handle_signal().

-
See also
EventHandler
-
-SignalHandler
-
Author
James Gallagher jgall.nosp@m.aghe.nosp@m.r@ope.nosp@m.ndap.nosp@m..org
- -

Definition at line 45 of file AlarmHandler.h.

-

Constructor & Destructor Documentation

- -

◆ AlarmHandler()

- -
-
- - - - - -
- - - - - - - - -
libdap::AlarmHandler::AlarmHandler (ostream & )
-
-inlineexplicit
-
-

Store information to be used by the handler.

Parameters
- - -
outWrite to this stream.
-
-
-
Deprecated:
The stream param is ignored. Use the default constructor instead.
- -

Definition at line 62 of file AlarmHandler.h.

- -
-
-

Member Function Documentation

- -

◆ handle_signal()

- -
-
- - - - - -
- - - - - - - - -
virtual void libdap::AlarmHandler::handle_signal (int signum)
-
-inlinevirtual
-
-

Handle an alarm signal. When one of our servers gets an alarm, that means it has hit its time out. We need to dump two CRLF pairs down the stream and then send an Error object explaining that a timeout has been reached.

-

Because this is a signal handler, it should call only reentrant system services, functions, et cetera. This handler never returns to the code that was running when the alarm signal was raised.

-
Parameters
- - -
signumWe know it is SIGALRM; here as a check
-
-
-
Returns
Never returns; calls exit after sending the Error object.
- -

Implements libdap::EventHandler.

- -

Definition at line 82 of file AlarmHandler.h.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - diff --git a/html/classlibdap_1_1AlarmHandler.js b/html/classlibdap_1_1AlarmHandler.js deleted file mode 100644 index aaa625c92..000000000 --- a/html/classlibdap_1_1AlarmHandler.js +++ /dev/null @@ -1,8 +0,0 @@ -var classlibdap_1_1AlarmHandler = -[ - [ "AlarmHandler", "classlibdap_1_1AlarmHandler.html#af135024cae3ee1340f10a35ec80f639e", null ], - [ "AlarmHandler", "classlibdap_1_1AlarmHandler.html#a35ed5f5a237b749d58e9f5a14eb096fa", null ], - [ "AlarmHandler", "classlibdap_1_1AlarmHandler.html#a27edcc310cb14706adb1dd42eb50e136", null ], - [ "~AlarmHandler", "classlibdap_1_1AlarmHandler.html#afc0167a0ce74afa5a014bba867660815", null ], - [ "handle_signal", "classlibdap_1_1AlarmHandler.html#abe52f8939c85b0285c2a8cb48b970a9b", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1AlarmHandler__inherit__graph.map b/html/classlibdap_1_1AlarmHandler__inherit__graph.map deleted file mode 100644 index 1dda8a7f0..000000000 --- a/html/classlibdap_1_1AlarmHandler__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/classlibdap_1_1AlarmHandler__inherit__graph.md5 b/html/classlibdap_1_1AlarmHandler__inherit__graph.md5 deleted file mode 100644 index 5b868ec2f..000000000 --- a/html/classlibdap_1_1AlarmHandler__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -72b96042af38190cedbea2a9ca0b5981 \ No newline at end of file diff --git a/html/classlibdap_1_1AlarmHandler__inherit__graph.png b/html/classlibdap_1_1AlarmHandler__inherit__graph.png deleted file mode 100644 index ec9e499baf140651f53d9fa6403f3caaa7a9bc07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11912 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 Oqr6knP^^(R5C31VArMdi diff --git a/html/classlibdap_1_1Ancillary-members.html b/html/classlibdap_1_1Ancillary-members.html deleted file mode 100644 index 80e60ee2a..000000000 --- a/html/classlibdap_1_1Ancillary-members.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
libdap::Ancillary Member List
-
-
- -

This is the complete list of members for libdap::Ancillary, including all inherited members.

- - - - - -
find_ancillary_file(const string &pathname, const string &ext, const string &dir, const string &file)libdap::Ancillarystatic
find_group_ancillary_file(const string &pathname, const string &ext)libdap::Ancillarystatic
read_ancillary_das(DAS &das, const string &pathname, const string &dir="", const string &file="") (defined in libdap::Ancillary)libdap::Ancillarystatic
read_ancillary_dds(DDS &dds, const string &pathname, const string &dir="", const string &file="") (defined in libdap::Ancillary)libdap::Ancillarystatic
-
- - - - diff --git a/html/classlibdap_1_1Ancillary.html b/html/classlibdap_1_1Ancillary.html deleted file mode 100644 index 2b1cef843..000000000 --- a/html/classlibdap_1_1Ancillary.html +++ /dev/null @@ -1,230 +0,0 @@ - - - - - - - -libdap: libdap::Ancillary Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
- -
-
libdap::Ancillary Class Reference
-
-
- - - - - - - - - - - -

-Static Public Member Functions

static string find_ancillary_file (const string &pathname, const string &ext, const string &dir, const string &file)
 Find a file with ancillary data. More...
 
static string find_group_ancillary_file (const string &pathname, const string &ext)
 
-static void read_ancillary_das (DAS &das, const string &pathname, const string &dir="", const string &file="")
 
-static void read_ancillary_dds (DDS &dds, const string &pathname, const string &dir="", const string &file="")
 
-

Detailed Description

-
-

Definition at line 46 of file Ancillary.h.

-

Member Function Documentation

- -

◆ find_ancillary_file()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
string libdap::Ancillary::find_ancillary_file (const string & pathname,
const string & ext,
const string & dir,
const string & file 
)
-
-static
-
- -

Find a file with ancillary data.

-

This function accepts a dataset path name, and searches for a matching ancillary data file name with a very specific set of search rules, given here:

-
-directory           filename          extension
-same                same            `.'given
-given               same            `.'given
-same                given           `.'given
-given               given           `.'given
-

Where same'' refers to the input dataset pathname, andgiven'' refers to the function arguments.

-

For example, If you call this function with a dataset name of /a/data, an extension of das, a directory of b, and a filename of ralph, the function will look (in order) for the following files:

-
-/a/data.das
-/b/data.das
-/a/ralph.das
-/b/ralph.das
-

The function will return a string containing the name of the first file in the list that exists, if any.

-
Note
This code now checks for pathname.ext 3/17/99 jhrg
-
Parameters
- - - - - -
pathnameThe input pathname of a dataset.
extThe input extension the desired file is to have.
dirThe input directory in which the desired file may be found.
fileThe input filename the desired file may have.
-
-
-
Returns
A string containing the pathname of the file found by searching with the given components. If no file was found, the null string is returned.
- -

Definition at line 69 of file Ancillary.cc.

- -
-
- -

◆ find_group_ancillary_file()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
string libdap::Ancillary::find_group_ancillary_file (const string & name,
const string & ext 
)
-
-static
-
-

Assume that name refers to a file that is one of a group of files which share a common `base' name and differ only by some prefix or suffix digits (e.g. 00base, 01base, ... or base00, ... have the base name base). This function looks for a file base.ext.

-
Parameters
- - - -
nameThe name (full or relative) to one member of a group of files.
extThe extension of the group's ancillary file. Note that ext should include a period (.) if that needs to separate the base name from the extension.
-
-
-
Returns
The pathname to the group's ancillary file if found, otherwise the empty string ("").
- -

Definition at line 138 of file Ancillary.cc.

- -
-
-
The documentation for this class was generated from the following files: -
-
- - - - diff --git a/html/classlibdap_1_1Array-members.html b/html/classlibdap_1_1Array-members.html deleted file mode 100644 index aa7a7ee65..000000000 --- a/html/classlibdap_1_1Array-members.html +++ /dev/null @@ -1,261 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
libdap::Array Member List
-
-
- -

This is the complete list of members for libdap::Array, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_duplicate(const Array &a) (defined in libdap::Array)libdap::Arrayprotected
add_constraint(Dim_iter i, int start, int stride, int stop)libdap::Arrayvirtual
add_constraint(Dim_iter i, D4Dimension *dim) (defined in libdap::Array)libdap::Arrayvirtual
add_var(BaseType *v, Part p=nil)libdap::Arrayvirtual
add_var_nocopy(BaseType *v, Part p=nil) (defined in libdap::Array)libdap::Arrayvirtual
append_dim(int size, const string &name="")libdap::Array
append_dim(D4Dimension *dim) (defined in libdap::Array)libdap::Array
Array(const string &n, BaseType *v, bool is_dap4=false)libdap::Array
Array(const string &n, const string &d, BaseType *v, bool is_dap4=false)libdap::Array
Array(const Array &rhs)libdap::Array
ArrayTest (defined in libdap::Array)libdap::Arrayfriend
attributes()libdap::BaseTypevirtual
BaseType(const string &n, const Type &t, bool is_dap4=false)libdap::BaseType
BaseType(const string &n, const string &d, const Type &t, bool is_dap4=false)libdap::BaseType
BaseType(const BaseType &copy_from)libdap::BaseType
btp_stack typedef (defined in libdap::BaseType)libdap::BaseType
buf2val(void **val)libdap::Vectorvirtual
check_semantics(string &msg, bool all=false)libdap::Arrayvirtual
clear_all_dims()libdap::Array
clear_constraint()libdap::Arrayvirtual
clear_local_data()libdap::Vectorvirtual
compute_checksum(Crc32 &checksum)libdap::Vectorvirtual
d4_ops(BaseType *b, int op)libdap::BaseTypevirtual
D4Group (defined in libdap::Array)libdap::Arrayfriend
d_in_selection (defined in libdap::BaseType)libdap::BaseTypeprotected
d_is_synthesized (defined in libdap::BaseType)libdap::BaseTypeprotected
d_maps (defined in libdap::Array)libdap::Array
dataset() constlibdap::BaseTypevirtual
deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)libdap::Vectorvirtual
deserialize(D4StreamUnMarshaller &um, DMR &dmr)libdap::Vectorvirtual
dim_begin()libdap::Array
Dim_citer typedeflibdap::Array
dim_end()libdap::Array
Dim_iter typedeflibdap::Array
dimension_D4dim(Dim_iter i) (defined in libdap::Array)libdap::Arrayvirtual
dimension_name(Dim_iter i)libdap::Arrayvirtual
dimension_size(Dim_iter i, bool constrained=false)libdap::Arrayvirtual
dimension_start(Dim_iter i, bool constrained=false)libdap::Arrayvirtual
dimension_stop(Dim_iter i, bool constrained=false)libdap::Arrayvirtual
dimension_stride(Dim_iter i, bool constrained=false)libdap::Arrayvirtual
dimensions(bool constrained=false)libdap::Arrayvirtual
dump(ostream &strm) constlibdap::Arrayvirtual
element_count(bool leaves)libdap::Vectorvirtual
FQN() constlibdap::BaseTypevirtual
get_attr_table()libdap::BaseTypevirtual
get_buf()libdap::Vectorinline
get_compound_buf()libdap::Vectorinline
get_parent() constlibdap::BaseTypevirtual
get_str()libdap::Vectorinline
get_value_capacity() constlibdap::Vectorvirtual
intern_data(ConstraintEvaluator &eval, DDS &dds)libdap::Vectorvirtual
intern_data()libdap::Vectorvirtual
is_constructor_type() constlibdap::BaseTypevirtual
is_dap4() const (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
is_in_selection()libdap::BaseTypevirtual
is_simple_type() constlibdap::BaseTypevirtual
is_vector_type() constlibdap::BaseTypevirtual
length() constlibdap::Vectorvirtual
m_create_cardinal_data_buffer_for_type(unsigned int numEltsOfType)libdap::Vectorprotected
m_delete_cardinal_data_buffer()libdap::Vectorprotected
m_duplicate(const Vector &v) (defined in libdap::Vector)libdap::Vectorprotected
libdap::BaseType::m_duplicate(const BaseType &bt)libdap::BaseTypeprotected
m_is_cardinal_type() constlibdap::Vectorprotected
m_set_cardinal_values_internal(const CardType *fromArray, int numElts)libdap::Vectorprotected
maps() (defined in libdap::Array)libdap::Arrayvirtual
name() constlibdap::BaseTypevirtual
operator=(const Array &rhs) (defined in libdap::Array)libdap::Array
operator=(const Vector &rhs) (defined in libdap::Vector)libdap::Vector
operator=(const BaseType &rhs) (defined in libdap::BaseType)libdap::BaseType
ops(BaseType *b, int op)libdap::BaseTypevirtual
prepend_dim(int size, const string &name="")libdap::Array
prepend_dim(D4Dimension *dim) (defined in libdap::Array)libdap::Array
print_array(FILE *out, unsigned int index, unsigned int dims, unsigned int shape[])libdap::Arrayprotected
print_array(ostream &out, unsigned int index, unsigned int dims, unsigned int shape[])libdap::Arrayprotected
print_as_map_xml(ostream &out, string space=" ", bool constrained=false)libdap::Arrayvirtual
print_as_map_xml(FILE *out, string space=" ", bool constrained=false)libdap::Arrayvirtual
print_as_map_xml_writer(XMLWriter &xml, bool constrained) (defined in libdap::Array)libdap::Arrayvirtual
print_dap4(XMLWriter &xml, bool constrained=false)libdap::Arrayvirtual
print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::Arrayvirtual
print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::Arrayvirtual
print_val(ostream &out, string space="", bool print_decl_p=true)libdap::Arrayvirtual
print_val(FILE *out, string space="", bool print_decl_p=true)libdap::Arrayvirtual
print_xml(ostream &out, string space=" ", bool constrained=false)libdap::Arrayvirtual
print_xml(FILE *out, string space=" ", bool constrained=false)libdap::Arrayvirtual
print_xml_core(FILE *out, string space, bool constrained, string tag)libdap::Arrayvirtual
print_xml_core(ostream &out, string space, bool constrained, string tag)libdap::Arrayvirtual
print_xml_writer(XMLWriter &xml, bool constrained=false)libdap::Arrayvirtual
print_xml_writer_core(XMLWriter &out, bool constrained, string tag) (defined in libdap::Array)libdap::Arrayvirtual
prototype() const (defined in libdap::Vector)libdap::Vectorinlinevirtual
ptr_duplicate()libdap::Arrayvirtual
read()libdap::BaseTypevirtual
read_p()libdap::BaseTypevirtual
rename_dim(const string &oldName="", const string &newName="")libdap::Array
reserve_value_capacity(unsigned int numElements)libdap::Vectorvirtual
reserve_value_capacity()libdap::Vectorvirtual
reset_constraint()libdap::Arrayvirtual
send_p()libdap::BaseTypevirtual
serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)libdap::Vectorvirtual
serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)libdap::Vectorvirtual
set_attr_table(const AttrTable &at)libdap::BaseTypevirtual
set_attributes(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
set_attributes_nocopy(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
set_in_selection(bool state)libdap::BaseTypevirtual
set_is_dap4(const bool v) (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
set_length(int l)libdap::Vectorvirtual
set_name(const std::string &name)libdap::Vectorvirtual
set_parent(BaseType *parent)libdap::BaseTypevirtual
set_read_p(bool state)libdap::Vectorvirtual
set_send_p(bool state)libdap::Vectorvirtual
set_synthesized_p(bool state)libdap::BaseTypevirtual
set_type(const Type &t)libdap::BaseTypevirtual
set_value(dods_byte *val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
set_value(dods_int8 *val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
set_value(dods_int16 *val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
set_value(dods_uint16 *val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
set_value(dods_int32 *val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
set_value(dods_uint32 *val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
set_value(dods_int64 *val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
set_value(dods_uint64 *val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
set_value(dods_float32 *val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
set_value(dods_float64 *val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
set_value(string *val, int sz)libdap::Vectorvirtual
set_value(vector< dods_byte > &val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
set_value(vector< dods_int8 > &val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
set_value(vector< dods_int16 > &val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
set_value(vector< dods_uint16 > &val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
set_value(vector< dods_int32 > &val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
set_value(vector< dods_uint32 > &val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
set_value(vector< dods_int64 > &val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
set_value(vector< dods_uint64 > &val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
set_value(vector< dods_float32 > &val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
set_value(vector< dods_float64 > &val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
set_value(vector< string > &val, int sz)libdap::Vectorvirtual
set_value_slice_from_row_major_vector(const Vector &rowMajorData, unsigned int startElement)libdap::Vectorvirtual
set_vec(unsigned int i, BaseType *val)libdap::Vector
set_vec_nocopy(unsigned int i, BaseType *val)libdap::Vector
synthesized_p()libdap::BaseTypevirtual
toString()libdap::BaseTypevirtual
transfer_attributes(AttrTable *at)libdap::BaseTypevirtual
transform_to_dap2(AttrTable *parent_attr_table)libdap::Arrayvirtual
transform_to_dap4(D4Group *root, Constructor *container)libdap::Arrayvirtual
type() constlibdap::BaseTypevirtual
type_name() constlibdap::BaseTypevirtual
update_length(int size=0)libdap::Arrayvirtual
val2buf(void *val, bool reuse=false)libdap::Vectorvirtual
value(dods_byte *b) const (defined in libdap::Vector)libdap::Vectorvirtual
value(dods_int8 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
value(dods_int16 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
value(dods_uint16 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
value(dods_int32 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
value(dods_uint32 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
value(dods_int64 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
value(dods_uint64 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
value(dods_float32 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
value(dods_float64 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
value(vector< string > &b) constlibdap::Vectorvirtual
value(vector< unsigned int > *indices, dods_byte *b) const (defined in libdap::Vector)libdap::Vectorvirtual
value(vector< unsigned int > *indices, dods_int8 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
value(vector< unsigned int > *indices, dods_int16 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
value(vector< unsigned int > *indices, dods_uint16 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
value(vector< unsigned int > *indices, dods_int32 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
value(vector< unsigned int > *indices, dods_uint32 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
value(vector< unsigned int > *indices, dods_int64 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
value(vector< unsigned int > *indices, dods_uint64 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
value(vector< unsigned int > *indices, dods_float32 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
value(vector< unsigned int > *indices, dods_float64 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
value(vector< unsigned int > *index, vector< string > &b) constlibdap::Vectorvirtual
value()libdap::Vectorvirtual
var(const string &name="", bool exact_match=true, btp_stack *s=0)libdap::Vectorvirtual
var(const string &name, btp_stack &s)libdap::Vectorvirtual
var(unsigned int i)libdap::Vectorvirtual
vec_resize(int l)libdap::Vector
Vector(const string &n, BaseType *v, const Type &t, bool is_dap4=false)libdap::Vector
Vector(const string &n, const string &d, BaseType *v, const Type &t, bool is_dap4=false)libdap::Vector
Vector(const Vector &rhs)libdap::Vector
width(bool constrained=false) constlibdap::Vectorvirtual
~Array()libdap::Arrayvirtual
~BaseType() (defined in libdap::BaseType)libdap::BaseTypevirtual
~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
~Vector() (defined in libdap::Vector)libdap::Vectorvirtual
-
- - - - diff --git a/html/classlibdap_1_1Array.html b/html/classlibdap_1_1Array.html deleted file mode 100644 index 8aaf313ed..000000000 --- a/html/classlibdap_1_1Array.html +++ /dev/null @@ -1,4920 +0,0 @@ - - - - - - - -libdap: libdap::Array Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
- -
- -

A multidimensional array of identical data types. - More...

- -

#include <Array.h>

-
-Inheritance diagram for libdap::Array:
-
-
Inheritance graph
- - - - - -
- - - - -

-Classes

struct  dimension
 
- - - - - - - -

-Public Types

-typedef stack< BaseType * > btp_stack
 
typedef std::vector< dimension >::const_iterator Dim_citer
 
typedef std::vector< dimension >::iterator Dim_iter
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

virtual void add_constraint (Dim_iter i, int start, int stride, int stop)
 Adds a constraint to an Array dimension. More...
 
-virtual void add_constraint (Dim_iter i, D4Dimension *dim)
 
void add_var (BaseType *v, Part p=nil)
 Add the BaseType pointer to this constructor type instance. More...
 
-void add_var_nocopy (BaseType *v, Part p=nil)
 
void append_dim (int size, const string &name="")
 Add a dimension of a given size. More...
 
-void append_dim (D4Dimension *dim)
 
 Array (const string &n, BaseType *v, bool is_dap4=false)
 Array constructor. More...
 
 Array (const string &n, const string &d, BaseType *v, bool is_dap4=false)
 Array constructor. More...
 
 Array (const Array &rhs)
 The Array copy constructor. More...
 
virtual unsigned int buf2val (void **val)
 Copies data from the Vector buffer. More...
 
virtual bool check_semantics (string &msg, bool all=false)
 Check semantic features of the Array. More...
 
void clear_all_dims ()
 
virtual void clear_constraint ()
 Clears the projection; add each projected dimension explicitly using add_constraint. More...
 
virtual void clear_local_data ()
 
virtual void compute_checksum (Crc32 &checksum)
 include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum. More...
 
virtual bool d4_ops (BaseType *b, int op)
 Evaluator a relop for DAP4. More...
 
virtual string dataset () const
 Returns the name of the dataset used to create this instance. More...
 
virtual bool deserialize (UnMarshaller &um, DDS *dds, bool reuse=false)
 Receive data from the net. More...
 
virtual void deserialize (D4StreamUnMarshaller &um, DMR &dmr)
 
Dim_iter dim_begin ()
 
Dim_iter dim_end ()
 
-virtual D4Dimensiondimension_D4dim (Dim_iter i)
 
virtual string dimension_name (Dim_iter i)
 Returns the name of the specified dimension. More...
 
virtual int dimension_size (Dim_iter i, bool constrained=false)
 Returns the size of the dimension. More...
 
virtual int dimension_start (Dim_iter i, bool constrained=false)
 Return the start index of a dimension. More...
 
virtual int dimension_stop (Dim_iter i, bool constrained=false)
 Return the stop index of the constraint. More...
 
virtual int dimension_stride (Dim_iter i, bool constrained=false)
 Returns the stride value of the constraint. More...
 
virtual unsigned int dimensions (bool constrained=false)
 Return the total number of dimensions in the array. More...
 
virtual void dump (ostream &strm) const
 dumps information about this object More...
 
virtual int element_count (bool leaves)
 Count the members of constructor types. More...
 
virtual std::string FQN () const
 
virtual AttrTableget_attr_table ()
 
char * get_buf ()
 
vector< BaseType * > & get_compound_buf ()
 
virtual BaseTypeget_parent () const
 
vector< string > & get_str ()
 
virtual unsigned int get_value_capacity () const
 
virtual void intern_data (ConstraintEvaluator &eval, DDS &dds)
 read data into a variable for later use More...
 
virtual void intern_data ()
 Read data into this variable. More...
 
virtual bool is_constructor_type () const
 Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable. More...
 
-virtual bool is_dap4 () const
 
virtual bool is_in_selection ()
 Is this variable part of the current selection? More...
 
virtual bool is_simple_type () const
 Returns true if the instance is a numeric, string or URL type variable. More...
 
virtual bool is_vector_type () const
 Returns true if the instance is a vector (i.e., array) type variable. More...
 
virtual int length () const
 
-virtual D4Mapsmaps ()
 
virtual string name () const
 Returns the name of the class instance. More...
 
-Arrayoperator= (const Array &rhs)
 
virtual bool ops (BaseType *b, int op)
 Evaluate relational operators. More...
 
void prepend_dim (int size, const string &name="")
 
-void prepend_dim (D4Dimension *dim)
 
virtual void print_as_map_xml (ostream &out, string space=" ", bool constrained=false)
 
virtual void print_as_map_xml (FILE *out, string space=" ", bool constrained=false)
 
-virtual void print_as_map_xml_writer (XMLWriter &xml, bool constrained)
 
virtual void print_dap4 (XMLWriter &xml, bool constrained=false)
 Print the DAP4 representation of an array. More...
 
virtual void print_decl (ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
 Prints a DDS entry for the Array. More...
 
virtual void print_decl (FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
 Prints a DDS entry for the Array. More...
 
virtual void print_val (ostream &out, string space="", bool print_decl_p=true)
 Prints the value of the variable. More...
 
virtual void print_val (FILE *out, string space="", bool print_decl_p=true)
 Prints the value of the variable. More...
 
virtual void print_xml (ostream &out, string space=" ", bool constrained=false)
 
virtual void print_xml (FILE *out, string space=" ", bool constrained=false)
 
virtual void print_xml_core (FILE *out, string space, bool constrained, string tag)
 
virtual void print_xml_core (ostream &out, string space, bool constrained, string tag)
 
virtual void print_xml_writer (XMLWriter &xml, bool constrained=false)
 
-virtual void print_xml_writer_core (XMLWriter &out, bool constrained, string tag)
 
-virtual BaseTypeprototype () const
 
virtual BaseTypeptr_duplicate ()
 
virtual bool read ()
 Read data into a local buffer. More...
 
virtual bool read_p ()
 Has this variable been read? More...
 
void rename_dim (const string &oldName="", const string &newName="")
 Renames dimension. More...
 
virtual void reserve_value_capacity (unsigned int numElements)
 
virtual void reserve_value_capacity ()
 
virtual void reset_constraint ()
 Reset constraint to select entire array. More...
 
virtual bool send_p ()
 Should this variable be sent? More...
 
virtual bool serialize (ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
 Serialize a Vector. More...
 
virtual void serialize (D4StreamMarshaller &m, DMR &dmr, bool filter=false)
 The DAP4 serialization method. Serialize a variable's values for DAP4. This does not write the DMR persistent representation but does write that part of the binary data blob that holds a variable's data. Once a variable's data are serialized, that memory is reclaimed (by calling BaseType::clear_local_data()) More...
 
virtual void set_attr_table (const AttrTable &at)
 
virtual void set_in_selection (bool state)
 
-virtual void set_is_dap4 (const bool v)
 
virtual void set_length (int l)
 
virtual void set_name (const std::string &name)
 Sets the name of the class instance. More...
 
virtual void set_parent (BaseType *parent)
 
virtual void set_read_p (bool state)
 Indicates that the data is ready to send. More...
 
virtual void set_send_p (bool state)
 Indicates that the data is ready to send. More...
 
virtual void set_synthesized_p (bool state)
 
virtual void set_type (const Type &t)
 Sets the type of the class instance. More...
 
virtual unsigned int set_value_slice_from_row_major_vector (const Vector &rowMajorData, unsigned int startElement)
 
void set_vec (unsigned int i, BaseType *val)
 Sets element i to value val. More...
 
void set_vec_nocopy (unsigned int i, BaseType *val)
 Sets element i to value val. Set the ith element to val. Extend the vector if needed. More...
 
virtual bool synthesized_p ()
 
virtual string toString ()
 
virtual void transfer_attributes (AttrTable *at)
 
virtual std::vector< BaseType * > * transform_to_dap2 (AttrTable *parent_attr_table)
 Transforms this instance of a D4Array into the corresponding DAP2 object. More...
 
virtual void transform_to_dap4 (D4Group *root, Constructor *container)
 DAP2 to DAP4 transform. More...
 
virtual Type type () const
 Returns the type of the class instance. More...
 
virtual string type_name () const
 Returns the type of the class instance as a string. More...
 
virtual void update_length (int size=0)
 
virtual unsigned int val2buf (void *val, bool reuse=false)
 Reads data into the Vector buffer. More...
 
virtual BaseTypevar (const string &name="", bool exact_match=true, btp_stack *s=0)
 
virtual BaseTypevar (const string &name, btp_stack &s)
 
virtual BaseTypevar (unsigned int i)
 
void vec_resize (int l)
 
virtual unsigned int width (bool constrained=false) const
 Returns the width of the data, in bytes. More...
 
virtual ~Array ()
 The Array destructor. More...
 
-virtual bool set_value (dods_byte *val, int sz)
 
-virtual bool set_value (dods_int8 *val, int sz)
 
-virtual bool set_value (dods_int16 *val, int sz)
 
-virtual bool set_value (dods_uint16 *val, int sz)
 
-virtual bool set_value (dods_int32 *val, int sz)
 
-virtual bool set_value (dods_uint32 *val, int sz)
 
-virtual bool set_value (dods_int64 *val, int sz)
 
-virtual bool set_value (dods_uint64 *val, int sz)
 
-virtual bool set_value (dods_float32 *val, int sz)
 
-virtual bool set_value (dods_float64 *val, int sz)
 
virtual bool set_value (string *val, int sz)
 set the value of a string or url array More...
 
-virtual bool set_value (vector< dods_byte > &val, int sz)
 
-virtual bool set_value (vector< dods_int8 > &val, int sz)
 
-virtual bool set_value (vector< dods_int16 > &val, int sz)
 
-virtual bool set_value (vector< dods_uint16 > &val, int sz)
 
-virtual bool set_value (vector< dods_int32 > &val, int sz)
 
-virtual bool set_value (vector< dods_uint32 > &val, int sz)
 
-virtual bool set_value (vector< dods_int64 > &val, int sz)
 
-virtual bool set_value (vector< dods_uint64 > &val, int sz)
 
-virtual bool set_value (vector< dods_float32 > &val, int sz)
 
-virtual bool set_value (vector< dods_float64 > &val, int sz)
 
virtual bool set_value (vector< string > &val, int sz)
 set the value of a string or url array More...
 
-virtual void value (dods_byte *b) const
 
-virtual void value (dods_int8 *b) const
 
-virtual void value (dods_int16 *b) const
 
-virtual void value (dods_uint16 *b) const
 
-virtual void value (dods_int32 *b) const
 
-virtual void value (dods_uint32 *b) const
 
-virtual void value (dods_int64 *b) const
 
-virtual void value (dods_uint64 *b) const
 
-virtual void value (dods_float32 *b) const
 
-virtual void value (dods_float64 *b) const
 
virtual void value (vector< string > &b) const
 Get a copy of the data held by this variable. More...
 
-virtual void value (vector< unsigned int > *indices, dods_byte *b) const
 
-virtual void value (vector< unsigned int > *indices, dods_int8 *b) const
 
-virtual void value (vector< unsigned int > *indices, dods_int16 *b) const
 
-virtual void value (vector< unsigned int > *indices, dods_uint16 *b) const
 
-virtual void value (vector< unsigned int > *indices, dods_int32 *b) const
 
-virtual void value (vector< unsigned int > *indices, dods_uint32 *b) const
 
-virtual void value (vector< unsigned int > *indices, dods_int64 *b) const
 
-virtual void value (vector< unsigned int > *indices, dods_uint64 *b) const
 
-virtual void value (vector< unsigned int > *indices, dods_float32 *b) const
 
-virtual void value (vector< unsigned int > *indices, dods_float64 *b) const
 
virtual void value (vector< unsigned int > *index, vector< string > &b) const
 Get a copy of the data held by this variable using the passed subsetIndex vector to identify which values to return. More...
 
virtual void * value ()
 
virtual D4Attributesattributes ()
 
-virtual void set_attributes (D4Attributes *)
 
-virtual void set_attributes_nocopy (D4Attributes *)
 
- - - -

-Public Attributes

-D4Mapsd_maps
 
- - - - - - - - - - - - - - - - - - - - - - - -

-Protected Member Functions

-void _duplicate (const Array &a)
 
unsigned int m_create_cardinal_data_buffer_for_type (unsigned int numEltsOfType)
 
void m_delete_cardinal_data_buffer ()
 
-void m_duplicate (const Vector &v)
 
void m_duplicate (const BaseType &bt)
 Perform a deep copy. More...
 
bool m_is_cardinal_type () const
 
template<class CardType >
void m_set_cardinal_values_internal (const CardType *fromArray, int numElts)
 
unsigned int print_array (FILE *out, unsigned int index, unsigned int dims, unsigned int shape[])
 Print the value given the current constraint. More...
 
unsigned int print_array (ostream &out, unsigned int index, unsigned int dims, unsigned int shape[])
 Print the value given the current constraint. More...
 
- - - - - -

-Protected Attributes

-bool d_in_selection
 
-bool d_is_synthesized
 
- - - - - -

-Friends

-class ArrayTest
 
-class D4Group
 
-

Detailed Description

-

A multidimensional array of identical data types.

-

This class is used to hold arrays of data. The elements of the array can be simple or compound data types. There is no limit on the number of dimensions an array can have, or on the size of each dimension.

-

If desired, the user can give each dimension of an array a name. You can, for example, have a 360x180 array of temperatures, covering the whole globe with one-degree squares. In this case, you could name the first dimension Longitude and the second dimension Latitude. This can help prevent a great deal of confusion.

-

The Array is used as part of the Grid class, where the dimension names are crucial to its structure. The dimension names correspond to Map vectors, holding the actual values for that column of the array.

-

In DAP4, the Array may be a Coverage or a simple Array. In the former case the Array will have both named dimensions and maps, where the maps (instances of D4Map) are what make the Array a Coverage. Coverages are a generalization of DAP2 Grids.

-

Each array dimension carries with it its own projection information. The projection information takes the form of three integers: the start, stop, and stride values. This is clearest with an example. Consider a one-dimensional array 10 elements long. If the start value of the dimension constraint is 3, then the constrained array appears to be seven elements long. If the stop value is changed to 7, then the array appears to be five elements long. If the stride is changed to two, the array will appear to be 3 elements long. Array constraints are written as: [start:stride:stop].

-
A = [1 2 3 4 5 6 7 8 9 10]
-
-A[3::] = [4 5 6 7 8 9 10]
-
-A[3::7] = [4 5 6 7 8]
-
-A[3:2:7] = [4 6 8]
-
-A[0:3:9] = [1 4 7 10]
-
Note
Arrays use zero-based indexing.
-
-This class is used for both DAP2 and DAP4.
-
See also
Grid
-
-Vector
-
-dimension
- -

Definition at line 112 of file Array.h.

-

Member Typedef Documentation

- -

◆ Dim_citer

- -
-
- - - - -
typedef std::vector<dimension>::const_iterator libdap::Array::Dim_citer
-
-

A constant iterator used to access the various dimensions of an Array.

-
See also
dim_begin()
-
-dim_end()
- -

Definition at line 198 of file Array.h.

- -
-
- -

◆ Dim_iter

- -
-
- - - - -
typedef std::vector<dimension>::iterator libdap::Array::Dim_iter
-
-

An iterator used to access the various dimensions of an Array. Most of the methods that access various properties of a dimension use an instance of Dim_iter.

-
See also
dim_begin()
-
-dim_end()
- -

Definition at line 206 of file Array.h.

- -
-
-

Constructor & Destructor Documentation

- -

◆ Array() [1/3]

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
libdap::Array::Array (const string & n,
BaseTypev,
bool is_dap4 = false 
)
-
- -

Array constructor.

-

Build an array with a name and an element type. The name may be omitted, which will create a nameless variable. The template (element type) pointer may also be omitted, but if it is omitted when the Array is created, it must be added (with add_var()) before read() or deserialize() is called.

-
Todo:
Force the Array::add_var() method to be used to add v. This version of add_var() calls Vector::add_var().
-
Parameters
- - - -
nA string containing the name of the variable to be created.
vA pointer to a variable of the type to be included in the Array. May be null and set later using add_var() or add_var_nocopy()
-
-
- -

Definition at line 136 of file Array.cc.

- -
-
- -

◆ Array() [2/3]

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
libdap::Array::Array (const string & n,
const string & d,
BaseTypev,
bool is_dap4 = false 
)
-
- -

Array constructor.

-

Build an array on the server-side with a name, a dataset name from which this Array is being created, and an element type.

-
Todo:
Force the Array::add_var() method to be used to add v. This version of add_var() calls Vector::add_var().
-
Parameters
- - - - -
nA string containing the name of the variable to be created.
dA string containing the name of the dataset from which this variable is being created.
vA pointer to a variable of the type to be included in the Array.
-
-
- -

Definition at line 155 of file Array.cc.

- -
-
- -

◆ Array() [3/3]

- -
-
- - - - - - - - -
libdap::Array::Array (const Arrayrhs)
-
- -

The Array copy constructor.

- -

Definition at line 162 of file Array.cc.

- -
-
- -

◆ ~Array()

- -
-
- - - - - -
- - - - - - - -
libdap::Array::~Array ()
-
-virtual
-
- -

The Array destructor.

- -

Definition at line 169 of file Array.cc.

- -
-
-

Member Function Documentation

- -

◆ add_constraint()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::Array::add_constraint (Dim_iter i,
int start,
int stride,
int stop 
)
-
-virtual
-
- -

Adds a constraint to an Array dimension.

-

Once a dimension has been created (see append_dim()), it can be constrained. This will make the array appear to the rest of the world to be smaller than it is. This functions sets the projection for a dimension, and marks that dimension as part of the current projection.

-
Note
A stride value <= 0 or > the array size is an error and causes add_constraint to throw an Error. Similarly, start or stop values > size also cause an Error exception to be thrown.
-
Parameters
- - - - - -
iAn iterator pointing to the dimension in the list of dimensions.
startThe start index of the constraint.
strideThe stride value of the constraint.
stopThe stop index of the constraint. A value of -1 indicates 'to the end' of the array.
-
-
-
Exceptions
- - -
ErrorThrown if the any of values of start, stop or stride cannot be applied to this array.
-
-
- -

Definition at line 647 of file Array.cc.

- -
-
- -

◆ add_var()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::Array::add_var (BaseTypev,
Part p = nil 
)
-
-virtual
-
- -

Add the BaseType pointer to this constructor type instance.

-

Propagate the name of the BaseType instance to this instance. This ensures that variables at any given level of the DDS table have unique names (i.e., that Arrays do not have their default name ""). If v's name is null, then assume that the array is named and don't overwrite it with v's null name.

-
Note
It is possible for the BaseType pointer to be null when this method is called, a behavior that differs considerably from that of the other 'add_var()' methods.
-
-This version checks to see if v is an array. If so, it calls Vector::add_var() using the template variable of v and then appends the dimensions of v to this array. This somewhat obscure behavior simplifies 'translating' Sequences to arrays when the actual variable being translated is not a regular Sequence but an array of Sequences. This is of very debatable usefulness, but it's here all the same.
-
Parameters
- - - -
vThe template variable for the array
pThe Part parameter defaults to nil and is ignored by this method.
-
-
- -

Reimplemented from libdap::Vector.

- -

Definition at line 470 of file Array.cc.

- -
-
- -

◆ append_dim()

- -
-
- - - - - - - - - - - - - - - - - - -
void libdap::Array::append_dim (int size,
const string & name = "" 
)
-
- -

Add a dimension of a given size.

-

Given a size and a name, this function adds a dimension to the array. For example, if the Array is already 10 elements long, calling append_dim with a size of 5 will transform the array into a 10x5 matrix. Calling it again with a size of 2 will create a 10x5x2 array, and so on. This sets Vector's length member as a side effect.

-
Parameters
- - - -
sizeThe size of the desired new row.
nameThe name of the new dimension. This defaults to an empty string.
-
-
- -

Definition at line 522 of file Array.cc.

- -
-
- -

◆ attributes()

- -
-
- - - - - -
- - - - - - - -
D4Attributes * libdap::BaseType::attributes ()
-
-virtualinherited
-
-

DAP4 Attribute methods

- -

Definition at line 599 of file BaseType.cc.

- -
-
- -

◆ buf2val()

- -
-
- - - - - -
- - - - - - - - -
unsigned int libdap::Vector::buf2val (void ** val)
-
-virtualinherited
-
- -

Copies data from the Vector buffer.

-

Copy data from a numeric or string arry to a buffer. This method will allocate memory if the handle val references NULL, otherwise it assumes the handle references enough storage for the data to be copied.

-

Never call this method for constructor types Structure, Sequence or Grid.

-

When reading data out of a variable that has been constrained, this method assumes the N values/bytes of constrained data start at the beginning of the object's internal buffer. For example, do not load an entire Vector's data using val2buf(), constrain and then use this method to get the data. Unless your constraint starts with the [0]th element, the result will not be the correct values.

-

In the case of a Vector of Str objects, this method will return a pointer to an array of C++ std::string objects.

-
Note
It's best to define the pointer to reference the data as 'char *data' or some other non-void type and then call this method using '..->buf2val((void**)&data)'. You must free the storage once you're done using 'delete[] data'.
-
-It's also important to initialize the handle to NULL. That is your code should declare the handle like this: 'char *data = 0' if it expects buf2val() to allocate memory. With most compilers, the pointer may be null the first time the code is run, but often not on subsequent calls.
-
Returns
The number of bytes used to store the array.
-
Parameters
- - -
valA pointer to a pointer to the memory into which the class data will be copied. If the value pointed to is NULL, memory will be allocated to hold the data, and the pointer value modified accordingly. The calling program is responsible for deallocating the memory indicated by this pointer.
-
-
-
Exceptions
- - -
InternalErrThrown if val is null.
-
-
-
See also
Vector::set_vec
- -

Implements libdap::BaseType.

- -

Definition at line 1248 of file Vector.cc.

- -
-
- -

◆ check_semantics()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool libdap::Array::check_semantics (string & msg,
bool all = false 
)
-
-virtual
-
- -

Check semantic features of the Array.

-

This function checks semantic features of the Array. Currently, the only check specific to the Array is that there must be dimensions. The rest is inherited from BaseType::check_semantics().

-
Returns
A boolean value. FALSE means there was a problem.
- -

Reimplemented from libdap::Vector.

- -

Definition at line 1308 of file Array.cc.

- -
-
- -

◆ clear_all_dims()

- -
-
- - - - - - - -
void libdap::Array::clear_all_dims ()
-
-

Remove all the dimensions currently set for the Array. This also removes all constraint information.

- -

Definition at line 564 of file Array.cc.

- -
-
- -

◆ clear_constraint()

- -
-
- - - - - -
- - - - - - - -
void libdap::Array::clear_constraint ()
-
-virtual
-
- -

Clears the projection; add each projected dimension explicitly using add_constraint.

-

Tell the Array object to clear the constraint information about dimensions. Do this once before calling add_constraint() for each new constraint expression. Only the dimensions explicitly selected using add_constraint() will be sent.

-
Deprecated:
This should never be used.
- -

Definition at line 616 of file Array.cc.

- -
-
- -

◆ clear_local_data()

- -
-
- - - - - -
- - - - - - - -
void libdap::Vector::clear_local_data ()
-
-virtualinherited
-
-

Remove any read or set data in the private data of this Vector, setting read_p() to false. Essentially clears the _buf, d_str, and d_compound_buf of any data. Useful for tightening up memory when the data is no longer needed, but the object cannot yet be destroyed.

-

On exit: get_value_capacity() == 0 && !read_p()

- -

Reimplemented from libdap::BaseType.

- -

Definition at line 1379 of file Vector.cc.

- -
-
- -

◆ compute_checksum()

- -
-
- - - - - -
- - - - - - - - -
void libdap::Vector::compute_checksum (Crc32checksum)
-
-virtualinherited
-
- -

include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum.

-
Parameters
- - -
checksumA Crc32 instance that holds the current checksum.
-
-
- -

Implements libdap::BaseType.

- -

Definition at line 858 of file Vector.cc.

- -
-
- -

◆ d4_ops()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool libdap::BaseType::d4_ops (BaseTypeb,
int op 
)
-
-virtualinherited
-
- -

Evaluator a relop for DAP4.

-

This method is used by the filter expression evaluation code in DAP4. Each of the 'data type' classes that support relops must overload this method. In an expression of the form arg1 op arg2, this object is arg1, the parameter 'b' is arg2 and op is the relational operator.

-
Note
I used the same relop codes for DAP4 as in the DAP2 parser/scanner which makes for some coupling between them, but cuts way down on the duplication of the evaluator logic, which is somewhat involved.
-
Parameters
- - - -
bThe second argument in the relational expression
opThe infix relational operator
-
-
-
Returns
True if the expression is true, False otherwise.
- -

Reimplemented in libdap::Str, libdap::Int32, libdap::Float32, libdap::Byte, libdap::Float64, libdap::Int16, libdap::Int64, libdap::UInt64, and libdap::Int8.

- -

Definition at line 1282 of file BaseType.cc.

- -
-
- -

◆ dataset()

- -
-
- - - - - -
- - - - - - - -
string libdap::BaseType::dataset () const
-
-virtualinherited
-
- -

Returns the name of the dataset used to create this instance.

-

A dataset from which the data is to be read. The meaning of this string will vary among different types of data sources. It may be the name of a data file or an identifier used to read data from a relational database.

- -

Definition at line 358 of file BaseType.cc.

- -
-
- -

◆ deserialize() [1/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool libdap::Vector::deserialize (UnMarshallerum,
DDSdds,
bool reuse = false 
)
-
-virtualinherited
-
- -

Receive data from the net.

-

Receives data from the network connection identified by the source parameter. The data is put into the class data buffer according to the input dds.

-

This function is only used on the client side of the DODS client/server connection.

-
Parameters
- - - - -
umAn UnMarshaller that knows how to deserialize data types
ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure. This would have been received from the server in an earlier transmission.
reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect.
-
-
-
Returns
Always returns TRUE.
-
Exceptions
- - -
Errorwhen a problem reading from the UnMarshaller is found.
-
-
-
See also
DDS
- -

Reimplemented from libdap::BaseType.

- -

Definition at line 755 of file Vector.cc.

- -
-
- -

◆ deserialize() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::Vector::deserialize (D4StreamUnMarshallerum,
DMRdmr 
)
-
-virtualinherited
-
-

The DAP4 deserialization method.

Parameters
- - - -
um
dmr
-
-
-
Exceptions
- - -
Erroror InternalErr
-
-
- -

Reimplemented from libdap::BaseType.

- -

Definition at line 1033 of file Vector.cc.

- -
-
- -

◆ dim_begin()

- -
-
- - - - - - - -
Array::Dim_iter libdap::Array::dim_begin ()
-
-

Returns an iterator to the first dimension of the Array.

- -

Definition at line 690 of file Array.cc.

- -
-
- -

◆ dim_end()

- -
-
- - - - - - - -
Array::Dim_iter libdap::Array::dim_end ()
-
-

Returns an iterator past the last dimension of the Array.

- -

Definition at line 696 of file Array.cc.

- -
-
- -

◆ dimension_name()

- -
-
- - - - - -
- - - - - - - - -
string libdap::Array::dimension_name (Dim_iter i)
-
-virtual
-
- -

Returns the name of the specified dimension.

-

This function returns the name of the dimension indicated with p. Since this method is public, it is possible to call it before the Array object has been properly initialized. This will cause an exception. So don't do that.

-
Parameters
- - -
iThe dimension.
-
-
-
Returns
A pointer to a string containing the dimension name.
- -

Definition at line 827 of file Array.cc.

- -
-
- -

◆ dimension_size()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
int libdap::Array::dimension_size (Dim_iter i,
bool constrained = false 
)
-
-virtual
-
- -

Returns the size of the dimension.

-

Return the size of the array dimension referred to by i. If the dimension is constrained the constrained size is returned if constrained is true.

-
Parameters
- - - -
iThe dimension.
constrainedIf this parameter is TRUE, the method returns the constrained size of the array so long as a constraint has been applied to this dimension. If TRUE and no constraint has been applied, this method returns zero. If it is FALSE, the method ignores any constraint that has been applied to this dimension and returns the full size of the dimension. The default value is FALSE.
-
-
-
Returns
An integer containing the size of the specified dimension.
- -

Definition at line 733 of file Array.cc.

- -
-
- -

◆ dimension_start()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
int libdap::Array::dimension_start (Dim_iter i,
bool constrained = false 
)
-
-virtual
-
- -

Return the start index of a dimension.

-

Use this function to return the start index of an array dimension. If the array is constrained (indicated with the constrained argument), the start index of the constrained array is returned (or zero if the dimension in question is not selected at all). See also dimension_stop() and dimension_stride().

-
Parameters
- - - -
iThe dimension.
constrainedIf this parameter is TRUE, the function returns the start index only if the dimension is constrained (subject to a start, stop, or stride constraint). If the dimension is not constrained, the function returns zero. If it is FALSE, the function returns the start index whether or not the dimension is constrained.
-
-
-
Returns
The desired start index.
- -

Definition at line 765 of file Array.cc.

- -
-
- -

◆ dimension_stop()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
int libdap::Array::dimension_stop (Dim_iter i,
bool constrained = false 
)
-
-virtual
-
- -

Return the stop index of the constraint.

-

Use this function to return the stop index of an array dimension. If the array is constrained (indicated with the constrained argument), the stop index of the constrained array is returned (or zero if the dimension in question is not selected at all). See also dimension_start() and dimension_stride().

-
Parameters
- - - -
iThe dimension.
constrainedIf this parameter is TRUE, the function returns the stop index only if the dimension is constrained (subject to a start, stop, or stride constraint). If the dimension is not constrained, the function returns zero. If it is FALSE, the function returns the stop index whether or not the dimension is constrained.
-
-
-
Returns
The desired stop index.
- -

Definition at line 788 of file Array.cc.

- -
-
- -

◆ dimension_stride()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
int libdap::Array::dimension_stride (Dim_iter i,
bool constrained = false 
)
-
-virtual
-
- -

Returns the stride value of the constraint.

-

Use this function to return the stride value of an array dimension. If the array is constrained (indicated with the constrained argument), the stride value of the constrained array is returned (or zero if the dimension in question is not selected at all). See also dimension_stop() and dimension_start().

-
Parameters
- - - -
iThe dimension.
constrainedIf this parameter is TRUE, the function returns the stride value only if the dimension is constrained (subject to a start, stop, or stride constraint). If the dimension is not constrained, the function returns zero. If it is FALSE, the function returns the stride value whether or not the dimension is constrained.
-
-
-
Returns
The stride value requested, or zero, if constrained is TRUE and the dimension is not selected.
- -

Definition at line 812 of file Array.cc.

- -
-
- -

◆ dimensions()

- -
-
- - - - - -
- - - - - - - - -
unsigned int libdap::Array::dimensions (bool constrained = false)
-
-virtual
-
- -

Return the total number of dimensions in the array.

-

Return the total number of dimensions contained in the array. When constrained is TRUE, return the number of dimensions given the most recently evaluated constraint expression.

-
Parameters
- - -
constrainedA boolean flag to indicate whether the array is constrained or not. Ignored.
-
-
- -

Definition at line 711 of file Array.cc.

- -
-
- -

◆ dump()

- -
-
- - - - - -
- - - - - - - - -
void libdap::Array::dump (ostream & strm) const
-
-virtual
-
- -

dumps information about this object

-

Displays the pointer value of this instance and information about this instance.

-
Parameters
- - -
strmC++ i/o stream to dump the information to
-
-
-
Returns
void
- -

Reimplemented from libdap::Vector.

- -

Definition at line 1325 of file Array.cc.

- -
-
- -

◆ element_count()

- -
-
- - - - - -
- - - - - - - - -
int libdap::Vector::element_count (bool leaves)
-
-virtualinherited
-
- -

Count the members of constructor types.

-

Return a count of the total number of variables in this variable. This is used to count the number of variables held by a constructor variable - for simple type and vector variables it always returns 1.

-

For compound data types, there are two ways to count members. You can count the members, or you can count the simple members and add that to the count of the compound members. For example, if a Structure contains an Int32 and another Structure that itself contains two Int32 members, the element count of the top-level structure could be two (one Int32 and one Structure) or three (one Int32 by itself and two Int32's in the subsidiary Structure). Use the leaves parameter to control which kind of counting you desire.

-
Returns
Returns 1 for simple types. For compound members, the count depends on the leaves argument.
-
Parameters
- - -
leavesThis parameter is only relevant if the object contains other compound data types. If FALSE, the function counts only the data variables mentioned in the object's declaration. If TRUE, it counts the simple members, and adds that to the sum of the counts for the compound members. This parameter has no effect for simple type variables.
-
-
- -

Reimplemented from libdap::BaseType.

- -

Definition at line 333 of file Vector.cc.

- -
-
- -

◆ FQN()

- -
-
- - - - - -
- - - - - - - -
string libdap::BaseType::FQN () const
-
-virtualinherited
-
-

Return the FQN for this variable. This will include the D4 Group component of the name.

-
Returns
The FQN in a string
- -

Reimplemented in libdap::D4Group, and libdap::Constructor.

- -

Definition at line 332 of file BaseType.cc.

- -
-
- -

◆ get_attr_table()

- -
-
- - - - - -
- - - - - - - -
AttrTable & libdap::BaseType::get_attr_table ()
-
-virtualinherited
-
-

Get this variable's AttrTable. It's generally a bad idea to return a reference to a contained object, but in this case it seems that building an interface inside BaseType is overkill.

-

Use the AttrTable methods to manipulate the table.

- -

Definition at line 582 of file BaseType.cc.

- -
-
- -

◆ get_buf()

- -
-
- - - - - -
- - - - - - - -
char* libdap::Vector::get_buf ()
-
-inlineinherited
-
-

Provide access to internal data by reference. Callers cannot delete this but can pass them to other methods.

-
Note
Added so that the NCML handler can code some optimizations in its specialized versions of Array. jhrg 8/14/15
-
Returns
A pointer to the data buffer for Vectors/Arrays of the cardinal types.
- -

Definition at line 138 of file Vector.h.

- -
-
- -

◆ get_compound_buf()

- -
-
- - - - - -
- - - - - - - -
vector<BaseType*>& libdap::Vector::get_compound_buf ()
-
-inlineinherited
-
-

Provide access to internal data by reference. Callers cannot delete this but can pass them to other methods.

-
Returns
A reference to a vector of BaseType pointers. Treat with care; never delete these!
- -

Definition at line 159 of file Vector.h.

- -
-
- -

◆ get_parent()

- -
-
- - - - - -
- - - - - - - -
BaseType * libdap::BaseType::get_parent () const
-
-virtualinherited
-
-

Return a pointer to the Constructor or Vector which holds (contains) this variable. If this variable is at the top level, this method returns null.

-
Returns
A BaseType pointer to the variable's parent.
- -

Definition at line 751 of file BaseType.cc.

- -
-
- -

◆ get_str()

- -
-
- - - - - -
- - - - - - - -
vector<string>& libdap::Vector::get_str ()
-
-inlineinherited
-
-

Provide access to internal string data by reference. Callers cannot delete this but can pass them to other methods.

-
Returns
A reference to a vector of strings
- -

Definition at line 148 of file Vector.h.

- -
-
- -

◆ get_value_capacity()

- -
-
- - - - - -
- - - - - - - -
unsigned int libdap::Vector::get_value_capacity () const
-
-virtualinherited
-
-

Return the capacity of the Vector in terms of number of elements of its data type that it can currently hold (i.e. not bytes). For example, this could be the size of the _buf array in bytes / sizeof(T) for the cardinal types T, or the capacity of the d_str vector if T is string or url type.

- -

Definition at line 1406 of file Vector.cc.

- -
-
- -

◆ intern_data() [1/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::Vector::intern_data (ConstraintEvaluatoreval,
DDSdds 
)
-
-virtualinherited
-
- -

read data into a variable for later use

-

Most uses of a variable are to either serialize its data to a stream of some sort or to read values from some stream and intern those in the variable for later use. These operations are perform by serialize() and deserialize() which follow. This function performs essentially both of these operations without actually using a stream device. The data are read using the read() method(s) and loaded into the variables directly.

-

This method is intended to be used by objects which transform DAP objects like the DataDDS into an ASCII CSV representation.

-
Note
A DAP2-only method
-
Parameters
- - - -
evalA reference to a constraint evaluator
ddsThe complete DDS to which this variable belongs
-
-
- -

Reimplemented from libdap::BaseType.

- -

Definition at line 597 of file Vector.cc.

- -
-
- -

◆ intern_data() [2/2]

- -
-
- - - - - -
- - - - - - - -
void libdap::Vector::intern_data ()
-
-virtualinherited
-
- -

Read data into this variable.

-
Parameters
- - - -
evalEvaluator for a constraint expression
dmrDMR for the whole dataset
-
-
- -

Reimplemented from libdap::BaseType.

- -

Definition at line 900 of file Vector.cc.

- -
-
- -

◆ is_constructor_type()

- -
-
- - - - - -
- - - - - - - -
bool libdap::BaseType::is_constructor_type () const
-
-virtualinherited
-
- -

Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable.

-
Returns
True if the instance is a Structure, Sequence or Grid, False otherwise.
- -

Definition at line 412 of file BaseType.cc.

- -
-
- -

◆ is_in_selection()

- -
-
- - - - - -
- - - - - - - -
bool libdap::BaseType::is_in_selection ()
-
-virtualinherited
-
- -

Is this variable part of the current selection?

-

Does this variable appear in either the selection part or as a function argument in the current constrain expression. If this property is set (true) then implementations of the read() method should read this variable.

-
Note
This method does not check, nor does it know about the semantics of, string arguments passed to functions. Those functions might include variable names in strings; they are responsible for reading those variables. See the grid (func_grid_select()) for an example.
-
See also
BaseType::read()
- -

Definition at line 703 of file BaseType.cc.

- -
-
- -

◆ is_simple_type()

- -
-
- - - - - -
- - - - - - - -
bool libdap::BaseType::is_simple_type () const
-
-virtualinherited
-
- -

Returns true if the instance is a numeric, string or URL type variable.

-
Returns
True if the instance is a scalar numeric, String or URL variable, False otherwise. Arrays (even of simple types) return False.
-
See also
is_vector_type()
- -

Definition at line 393 of file BaseType.cc.

- -
-
- -

◆ is_vector_type()

- -
-
- - - - - -
- - - - - - - -
bool libdap::BaseType::is_vector_type () const
-
-virtualinherited
-
- -

Returns true if the instance is a vector (i.e., array) type variable.

-
Returns
True if the instance is an Array, False otherwise.
- -

Definition at line 402 of file BaseType.cc.

- -
-
- -

◆ length()

- -
-
- - - - - -
- - - - - - - -
int libdap::Vector::length () const
-
-virtualinherited
-
-

Returns the number of elements in the vector. Note that some child classes of Vector use the length of -1 as a flag value.

-
See also
Vector::append_dim
- -

Reimplemented from libdap::BaseType.

- -

Definition at line 548 of file Vector.cc.

- -
-
- -

◆ m_create_cardinal_data_buffer_for_type()

- -
-
- - - - - -
- - - - - - - - -
unsigned int libdap::Vector::m_create_cardinal_data_buffer_for_type (unsigned int numEltsOfType)
-
-protectedinherited
-
-

Create _buf so that it can store numElts of the (assumed) cardinal type. This create storage for width() * numElts bytes. If _buf already exists, this DELETES IT and creates a new one. So don't use this if you want to keep the original _buf data around. This also sets the valueCapacity().

Parameters
- - -
numEltsOfTypethe number of elements of the cardinal type in var() that we want storage for.
-
-
-
Returns
the size of the buffer created.
-
Exceptions
- - -
ifthe Vector's type is not cardinal type.
-
-
- -

Definition at line 180 of file Vector.cc.

- -
-
- -

◆ m_delete_cardinal_data_buffer()

- -
-
- - - - - -
- - - - - - - -
void libdap::Vector::m_delete_cardinal_data_buffer ()
-
-protectedinherited
-
-

Delete d_buf and zero it and d_capacity out

- -

Definition at line 208 of file Vector.cc.

- -
-
- -

◆ m_duplicate()

- -
-
- - - - - -
- - - - - - - - -
void libdap::BaseType::m_duplicate (const BaseTypebt)
-
-protectedinherited
-
- -

Perform a deep copy.

-

Perform a deep copy. Copies the values of bt into *this. Pointers are dereferenced and their values are copied into a newly allocated instance.

-
Parameters
- - -
btThe source object.
-
-
- -

Definition at line 86 of file BaseType.cc.

- -
-
- -

◆ m_is_cardinal_type()

- -
-
- - - - - -
- - - - - - - -
bool libdap::Vector::m_is_cardinal_type () const
-
-protectedinherited
-
-
Returns
whether the type of this Vector is a cardinal type (i.e., stored in d_buf)
- -

Definition at line 125 of file Vector.cc.

- -
-
- -

◆ m_set_cardinal_values_internal()

- -
-
-
-template<class CardType >
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::Vector::m_set_cardinal_values_internal (const CardType * fromArray,
int numElts 
)
-
-protectedinherited
-
-

Helper to reduce cut and paste in the virtual's.

- -

Definition at line 219 of file Vector.cc.

- -
-
- -

◆ name()

- -
-
- - - - - -
- - - - - - - -
string libdap::BaseType::name () const
-
-virtualinherited
-
- -

Returns the name of the class instance.

- -

Definition at line 320 of file BaseType.cc.

- -
-
- -

◆ ops()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool libdap::BaseType::ops (BaseTypeb,
int op 
)
-
-virtualinherited
-
- -

Evaluate relational operators.

-

This method contains the relational operators used by the constraint expression evaluator in the DDS class. Each class that wants to be able to evaluate relational expressions must overload this function. The implementation in BaseType throws an InternalErr exception. The DAP library classes Byte, ..., Url provide specializations of this method. It is not meaningful for classes such as Array because relational expressions using Array are not supported.

-

The op argument refers to a table generated by bison from the constraint expression parser. Use statements like the following to correctly interpret its value:

-
switch (op) {
-    case EQUAL: return i1 == i2;
-    case NOT_EQUAL: return i1 != i2;
-    case GREATER: return i1 > i2;
-    case GREATER_EQL: return i1 >= i2;
-    case LESS: return i1 < i2;
-    case LESS_EQL: return i1 <= i2;
-    case REGEXP: throw Error("Regular expressions are not supported for integer values");
-    default: throw Error("Unknown operator");
-}
-

This function is used by the constraint expression evaluator.

-
Parameters
- - - -
bCompare the value of this instance with b.
opAn integer index indicating which relational operator is implied. Choose one from the following: EQUAL, NOT_EQUAL, GREATER, GREATER_EQL, LESS, LESS_EQL, and REGEXP.
-
-
-
Returns
The boolean value of the comparison.
-
See also
BaseType::d4_ops(BaseType *, int)
- -

Reimplemented in libdap::D4Enum, libdap::Str, libdap::Int32, libdap::Float32, libdap::Byte, libdap::Float64, libdap::UInt32, libdap::D4Opaque, libdap::Int16, libdap::UInt16, libdap::Int64, libdap::UInt64, and libdap::Int8.

- -

Definition at line 1256 of file BaseType.cc.

- -
-
- -

◆ prepend_dim()

- -
-
- - - - - - - - - - - - - - - - - - -
void libdap::Array::prepend_dim (int size,
const string & name = "" 
)
-
-

Creates a new OUTER dimension (slowest varying in rowmajor) for the array by prepending rather than appending it.

Parameters
- - - -
sizecardinality of the new dimension
nameoptional name for the new dimension
-
-
- -

Definition at line 543 of file Array.cc.

- -
-
- -

◆ print_array() [1/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
unsigned int libdap::Array::print_array (FILE * out,
unsigned int index,
unsigned int dims,
unsigned int shape[] 
)
-
-protected
-
- -

Print the value given the current constraint.

-

Prints the values in ASCII of the entire (constrained) array. This method Attempts to make an aesthetically pleasing display. However, it is primarily intended for debugging purposes.

-
Parameters
- - - - - -
outWrite the output to this FILE *.
index
dims
shape
-
-
- -

Definition at line 1198 of file Array.cc.

- -
-
- -

◆ print_array() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
unsigned int libdap::Array::print_array (ostream & out,
unsigned int index,
unsigned int dims,
unsigned int shape[] 
)
-
-protected
-
- -

Print the value given the current constraint.

-

Prints the values in ASCII of the entire (constrained) array. This method Attempts to make an anesthetically pleasing display. However, it is primarily intended for debugging purposes.

-
Parameters
- - - - - -
outWrite the output to this ostream
index
dims
shape
-
-
- -

Definition at line 1218 of file Array.cc.

- -
-
- -

◆ print_as_map_xml() [1/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::Array::print_as_map_xml (ostream & out,
string space = "    ",
bool constrained = false 
)
-
-virtual
-
-
Deprecated:
- -

Definition at line 1097 of file Array.cc.

- -
-
- -

◆ print_as_map_xml() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::Array::print_as_map_xml (FILE * out,
string space = "    ",
bool constrained = false 
)
-
-virtual
-
-
Deprecated:
- -

Definition at line 1087 of file Array.cc.

- -
-
- -

◆ print_dap4()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::Array::print_dap4 (XMLWriterxml,
bool constrained = false 
)
-
-virtual
-
- -

Print the DAP4 representation of an array.

-
Parameters
- - - -
xml
constrained
-
-
- -

Reimplemented from libdap::BaseType.

- -

Definition at line 958 of file Array.cc.

- -
-
- -

◆ print_decl() [1/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::Array::print_decl (ostream & out,
string space = "    ",
bool print_semi = true,
bool constraint_info = false,
bool constrained = false 
)
-
-virtual
-
- -

Prints a DDS entry for the Array.

-

Prints a declaration for the Array. This is what appears in a DDS. If the Array is constrained, the declaration will reflect the size of the Array once the constraint is applied.

-
Parameters
- - - - - - -
outWrite the output to this ostream.
spaceA string containing spaces to precede the declaration.
print_semiA boolean indicating whether to print a semi-colon after the declaration. (TRUE means ``print a semi-colon.'')
constraint_infoA boolean value. See BaseType::print_decl().
constrainedThis argument should be TRUE if the Array is constrained, and FALSE otherwise.
-
-
- -

Reimplemented from libdap::BaseType.

- -

Definition at line 1039 of file Array.cc.

- -
-
- -

◆ print_decl() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::Array::print_decl (FILE * out,
string space = "    ",
bool print_semi = true,
bool constraint_info = false,
bool constrained = false 
)
-
-virtual
-
- -

Prints a DDS entry for the Array.

-

Prints a declaration for the Array. This is what appears in a DDS. If the Array is constrained, the declaration will reflect the size of the Array once the constraint is applied.

-
Parameters
- - - - - - -
outWrite the output to this FILE *.
spaceA string containing spaces to precede the declaration.
print_semiA boolean indicating whether to print a semi-colon after the declaration. (TRUE means ``print a semi-colon.'')
constraint_infoA boolean value. See BaseType::print_decl().
constrainedThis argument should be TRUE if the Array is constrained, and FALSE otherwise.
-
-
- -

Reimplemented from libdap::BaseType.

- -

Definition at line 1015 of file Array.cc.

- -
-
- -

◆ print_val() [1/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::Array::print_val (ostream & out,
string space = "",
bool print_decl_p = true 
)
-
-virtual
-
- -

Prints the value of the variable.

-

Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

-
Parameters
- - - - -
outThe output ostream on which to print the value.
spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
-
-
- -

Implements libdap::BaseType.

- -

Definition at line 1271 of file Array.cc.

- -
-
- -

◆ print_val() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::Array::print_val (FILE * out,
string space = "",
bool print_decl_p = true 
)
-
-virtual
-
- -

Prints the value of the variable.

-

Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

-
Parameters
- - - - -
outThe output stream on which to print the value.
spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
-
-
- -

Reimplemented from libdap::BaseType.

- -

Definition at line 1264 of file Array.cc.

- -
-
- -

◆ print_xml() [1/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::Array::print_xml (ostream & out,
string space = "    ",
bool constrained = false 
)
-
-virtual
-
-
Deprecated:
- -

Reimplemented from libdap::BaseType.

- -

Definition at line 1077 of file Array.cc.

- -
-
- -

◆ print_xml() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::Array::print_xml (FILE * out,
string space = "    ",
bool constrained = false 
)
-
-virtual
-
-
Deprecated:
- -

Reimplemented from libdap::BaseType.

- -

Definition at line 1067 of file Array.cc.

- -
-
- -

◆ print_xml_core() [1/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::Array::print_xml_core (FILE * out,
string space,
bool constrained,
string tag 
)
-
-virtual
-
-
Deprecated:
- -

Definition at line 1107 of file Array.cc.

- -
-
- -

◆ print_xml_core() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::Array::print_xml_core (ostream & out,
string space,
bool constrained,
string tag 
)
-
-virtual
-
-
Deprecated:
- -

Definition at line 1117 of file Array.cc.

- -
-
- -

◆ print_xml_writer()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::Array::print_xml_writer (XMLWriterxml,
bool constrained = false 
)
-
-virtual
-
-

Write the XML representation of this variable. This method is used to build the DDX XML response.

Parameters
- - - - -
outDestination output stream
spaceUse this to indent child declarations. Default is "".
constrainedIf true, only print this if it's part part of the current projection. Default is False.
-
-
- -

Reimplemented from libdap::BaseType.

- -

Definition at line 1124 of file Array.cc.

- -
-
- -

◆ ptr_duplicate()

- -
-
- - - - - -
- - - - - - - -
BaseType * libdap::Array::ptr_duplicate ()
-
-virtual
-
-

Clone this instance. Allocate a new instance and copy *this into it. This method must perform a deep copy.

@note This method should \e not copy data values, but must copy all
-other fields in the object.
-
Returns
A newly allocated copy of this.
- -

Implements libdap::Vector.

- -

Definition at line 175 of file Array.cc.

- -
-
- -

◆ read()

- -
-
- - - - - -
- - - - - - - -
bool libdap::BaseType::read ()
-
-virtualinherited
-
- -

Read data into a local buffer.

-

This method should be implemented for each of the data type classes (Byte, ..., Grid) when using the DAP class library to build a server. This method is only for DAP servers. The library provides a default definition here which throws an InternalErr exception unless the read_p property has been set. In that case it returns false, indicating that all the data have been read. The latter case can happen when building a constant value that needs to be passed to a function. The variable/constant is loaded with a value when it is created.

-

When implementing a new DAP server, the Byte, ..., Grid data type classes are usually specialized. In each of those specializations read() should be defined to read values from the data source and store them in the object's local buffer. The read() method is called by other methods in this library. When writing read(), follow these rules:

-
    -
  • -read() should throw Error if it encounters an error. The message should be verbose enough to be understood by someone running a client on a different machine.
  • -
  • -The value(s) should be read if and only if either send_p() or is_in_selection() return true. If neither of these return true, the value(s) should not be read. This is important when writing read() for a Constructor type such as Grid where a client may ask for only the map vectors (and thus reading the much larger Array part is not needed).
  • -
  • -For each specialization of read(), the method should first test the value of the read_p property (using the read_p() method) and read values only if the value of read_p() is false. Once the read() method reads data and stores it in the instance, it must set the value of the read_p property to true using set_read_p(). If your read() methods fail to do this data may not serialize correctly.
  • -
  • -The Array::read() and Grid::read() methods should take into account any restrictions on Array sizes.
  • -
  • -If you are writing Sequence::read(), be sure to check the documentation for Sequence::read_row() and Sequence::serialize() so you understand how Sequence::read() is being called.
  • -
  • -

    For Sequence::read(), your specialization must correctly manage the unsent_data property and row count in addition to the read_p property (handle the read_p property as describe above). For a Sequence to serialize correctly, once all data from the Sequence has been read, unsent_data property must be set to false (use Sequence::set_unsent_data()). Also, at that time the row number counter must be reset (use Sequence::reset_row_counter()). Typically the correct time to set unsent_data to false and reset the row counter is the time when Sequence::read() return false indicating that all the data for the Sequence have been read. Failure to handle these tasks will break serialization of nested Sequences. Note that when Sequence::read() returns with a result of true (indicating there is more data to send, the value of the unsent_data property should be true.

    -

    Also, if you server must handle nested sequences, be sure to read about subclassing set_read_p().

    -
  • -
-
Todo:
Modify the D4 serialize code so that it supports the true/false behavior of read() for arrays.
-
Todo:
Modify all of the stock handlers so they conform to this!
-
Returns
False means more data remains to be read, True indicates that no more data need to be read. For Sequence and D4Sequence, this method will generally read one instance of the Sequence; for other types it will generally read the entire variable modulo any limitations due to a constraint. However, the library should be written so that read can return less than all of the data for a variable - serialize() would then call the function until it returns True.
-
See also
BaseType
- -

Reimplemented in libdap::Constructor.

- -

Definition at line 899 of file BaseType.cc.

- -
-
- -

◆ read_p()

- -
-
- - - - - -
- - - - - - - -
bool libdap::BaseType::read_p ()
-
-virtualinherited
-
- -

Has this variable been read?

-

Returns true if the value(s) for this variable have been read from the data source, otherwise returns false. This method is used to determine when values need to be read using the read() method. When read_p() returns true, this library assumes that buf2val() (and other methods such as get_vec()) can be used to access the value(s) of a variable.

-
Returns
True if the variable's value(s) have been read, false otherwise.
- -

Definition at line 480 of file BaseType.cc.

- -
-
- -

◆ rename_dim()

- -
-
- - - - - - - - - - - - - - - - - - -
void libdap::Array::rename_dim (const string & oldName = "",
const string & newName = "" 
)
-
- -

Renames dimension.

-

Renames dimension to a new name

- -

Definition at line 574 of file Array.cc.

- -
-
- -

◆ reserve_value_capacity() [1/2]

- -
-
- - - - - -
- - - - - - - - -
void libdap::Vector::reserve_value_capacity (unsigned int numElements)
-
-virtualinherited
-
-

Allocate enough memory for the Vector to contain numElements data elements of the Vector's type. Must be used before set_value_slice_from_row_major_vector to ensure memory exists.

Parameters
- - -
numElementsthe number of elements of the Vector's type to preallocate storage for.
-
-
-
Exceptions
- - -
ifthe memory cannot be allocated
-
-
- -

Definition at line 1420 of file Vector.cc.

- -
-
- -

◆ reserve_value_capacity() [2/2]

- -
-
- - - - - -
- - - - - - - -
void libdap::Vector::reserve_value_capacity ()
-
-virtualinherited
-
-

Make sure there's storage allocated for the current length() of the Vector. Same as reserveValueCapacity(length())

- -

Definition at line 1476 of file Vector.cc.

- -
-
- -

◆ reset_constraint()

- -
-
- - - - - -
- - - - - - - -
void libdap::Array::reset_constraint ()
-
-virtual
-
- -

Reset constraint to select entire array.

-

Resets the dimension constraint information so that the entire array is selected.

- -

Definition at line 593 of file Array.cc.

- -
-
- -

◆ send_p()

- -
-
- - - - - -
- - - - - - - -
bool libdap::BaseType::send_p ()
-
-virtualinherited
-
- -

Should this variable be sent?

-

Returns the state of the send_p property. If true, this variable should be sent to the client, if false, it should not. If no constraint expression (CE) has been evaluated, this property is true for all variables in a data source (i.e., for all the variables listed in a DDS). If a CE has been evaluated, this property is true only for those variables listed in the projection part of the CE.

-
Returns
True if the variable should be sent to the client, false otherwise.
- -

Definition at line 554 of file BaseType.cc.

- -
-
- -

◆ serialize() [1/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool libdap::Vector::serialize (ConstraintEvaluatoreval,
DDSdds,
Marshallerm,
bool ce_eval = true 
)
-
-virtualinherited
-
- -

Serialize a Vector.

-

This uses the Marshaler class to encode each element of a cardinal array. For Arrays of Str and Url types, send the element count over as a prefix to the data so that deserialize will know how many elements to read.

-

NB: Arrays of cardinal types must already be in BUF (in the local machine's representation) before this call is made.

- -

Reimplemented from libdap::BaseType.

- -

Definition at line 661 of file Vector.cc.

- -
-
- -

◆ serialize() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::Vector::serialize (D4StreamMarshallerm,
DMRdmr,
bool filter = false 
)
-
-virtualinherited
-
- -

The DAP4 serialization method. Serialize a variable's values for DAP4. This does not write the DMR persistent representation but does write that part of the binary data blob that holds a variable's data. Once a variable's data are serialized, that memory is reclaimed (by calling BaseType::clear_local_data())

-
Parameters
- - - - - -
m
dmr
eval
filterTrue if there is one variable that should be 'filtered'
-
-
-
Exceptions
- - -
Erroror InternalErr
-
-
- -

Reimplemented from libdap::BaseType.

- -

Definition at line 948 of file Vector.cc.

- -
-
- -

◆ set_attr_table()

- -
-
- - - - - -
- - - - - - - - -
void libdap::BaseType::set_attr_table (const AttrTableat)
-
-virtualinherited
-
-

Set this variable's attribute table.

Parameters
- - -
atSource of the attributes.
-
-
- -

Definition at line 590 of file BaseType.cc.

- -
-
- -

◆ set_in_selection()

- -
-
- - - - - -
- - - - - - - - -
void libdap::BaseType::set_in_selection (bool state)
-
-virtualinherited
-
-

Set the in_selection property to state. This property indicates that the variable is used as a parameter to a constraint expression function or that it appears as an argument in a selection sub-expression. If set (true), implementations of the BaseType::read() method should read this variable.

-
Parameters
- - -
stateSet the in_selection property to this state.
-
-
-
See also
BaseType::read()
-
-BaseType::is_in_selection() for more information.
- -

Reimplemented in libdap::Constructor.

- -

Definition at line 718 of file BaseType.cc.

- -
-
- -

◆ set_length()

- -
-
- - - - - -
- - - - - - - - -
void libdap::Vector::set_length (int l)
-
-virtualinherited
-
-

Sets the length of the vector. This function does not allocate any new space.

- -

Reimplemented from libdap::BaseType.

- -

Definition at line 555 of file Vector.cc.

- -
-
- -

◆ set_name()

- -
-
- - - - - -
- - - - - - - - -
void libdap::Vector::set_name (const std::string & n)
-
-virtualinherited
-
- -

Sets the name of the class instance.

- -

Reimplemented from libdap::BaseType.

- -

Definition at line 323 of file Vector.cc.

- -
-
- -

◆ set_parent()

- -
-
- - - - - -
- - - - - - - - -
void libdap::BaseType::set_parent (BaseTypeparent)
-
-virtualinherited
-
-

Set the parent property for this variable.

-
Note
Added ability to set parent to null. 10/19/12 jhrg
-
Parameters
- - -
parentPointer to the Constructor of Vector parent variable or null if the variable has no parent (if it is at the top-level of a DAP2/3 DDS).
-
-
-
Exceptions
- - -
InternalErrthrown if called with anything other than a Constructor, Vector or Null.
-
-
- -

Definition at line 733 of file BaseType.cc.

- -
-
- -

◆ set_read_p()

- -
-
- - - - - -
- - - - - - - - -
void libdap::Vector::set_read_p (bool state)
-
-virtualinherited
-
- -

Indicates that the data is ready to send.

-

This function sets the read_p flag for both the Vector itself and its element template. This does not matter much when the Vector contains simple data types, but does become significant when the Vector contains compound types.

- -

Reimplemented from libdap::BaseType.

- -

Definition at line 391 of file Vector.cc.

- -
-
- -

◆ set_send_p()

- -
-
- - - - - -
- - - - - - - - -
void libdap::Vector::set_send_p (bool state)
-
-virtualinherited
-
- -

Indicates that the data is ready to send.

-

This function sets the send_p flag for both the Vector itself and its element template. This does not matter much when the Vector contains simple data types, but does become significant when the Vector contains compound types.

- -

Reimplemented from libdap::BaseType.

- -

Definition at line 354 of file Vector.cc.

- -
-
- -

◆ set_synthesized_p()

- -
-
- - - - - -
- - - - - - - - -
void libdap::BaseType::set_synthesized_p (bool state)
-
-virtualinherited
-
-

Set the synthesized flag. Before setting this flag be sure to set the read_p() state. Once this flag is set you cannot alter the state of the read_p flag!

-
See also
synthesized_p()
- -

Definition at line 463 of file BaseType.cc.

- -
-
- -

◆ set_type()

- -
-
- - - - - -
- - - - - - - - -
void libdap::BaseType::set_type (const Typet)
-
-virtualinherited
-
- -

Sets the type of the class instance.

- -

Definition at line 372 of file BaseType.cc.

- -
-
- -

◆ set_value() [1/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool libdap::Vector::set_value (string * val,
int sz 
)
-
-virtualinherited
-
- -

set the value of a string or url array

-
Parameters
- - - -
valA pointer to an array of string objects
szThe number of elements in the string array
-
-
-
Returns
false if the type of the array is neither Str nor Url or val is null, otherwise returns true.
- -

Definition at line 1720 of file Vector.cc.

- -
-
- -

◆ set_value() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool libdap::Vector::set_value (vector< string > & val,
int sz 
)
-
-virtualinherited
-
- -

set the value of a string or url array

- -

Definition at line 1786 of file Vector.cc.

- -
-
- -

◆ set_value_slice_from_row_major_vector()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
unsigned int libdap::Vector::set_value_slice_from_row_major_vector (const VectorrowMajorDataC,
unsigned int startElement 
)
-
-virtualinherited
-
-

Copy rowMajorData.length() elements currently in a rowMajorData buffer into this value buffer starting at element index startElement and continuing up to startElement+rowMajorData.length()-1

-

This is used for aggregating together smaller rowMajor vectors into a larger one.

-

Note: unlike the other set_value calls, this does NOT set read_p() since it is assumed to be used as a partial read and the caller is expected to set_read_p() when the data is complete.

-

ASSUMES: rowMajorData.read_p() so that the data is valid! ASSUMES: this Vector has enough value_capacity() to contain all the elements such that: startElement + rowMajorData.length() <= this->value_capacity(). ASSUMES: the data type of this->var() and rowMajorData.var() MUST be non-NULL and be the same!

-
Parameters
- - - -
rowMajorDataCthe vector from which to copy data, assumed already read in or set.
startElementthe element index (NOT byte, but rather data type element) to place the first data value.
-
-
-
Returns
the number of elements added, such that: startElement + the return value is the next "free" element.
- -

Definition at line 1511 of file Vector.cc.

- -
-
- -

◆ set_vec()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::Vector::set_vec (unsigned int i,
BaseTypeval 
)
-
-inherited
-
- -

Sets element i to value val.

-

Sets an element of the vector to a given value. If the type of the input and the type of the Vector do not match, an error condition is returned.

-

Use this function only with Vectors containing compound types. See buf2val() or the set_value() methods to access members of Vector containing simple types.

-
Note
This method copies val; the caller is responsible for deleting instance passed as the actual parameter.
-
Returns
void
-
Exceptions
- - -
InternalErrThrown if i is out of range, val is null or there was a type mismatch between the BaseType referenced by val and the ith element of this Vector.
-
-
-
Parameters
- - - -
iThe index of the element to be changed.
valA pointer to the value to be inserted into the array.
-
-
-
See also
Vector::buf2val
- -

Definition at line 1326 of file Vector.cc.

- -
-
- -

◆ set_vec_nocopy()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::Vector::set_vec_nocopy (unsigned int i,
BaseTypeval 
)
-
-inherited
-
- -

Sets element i to value val. Set the ith element to val. Extend the vector if needed.

-
Note
It is best to call vec_resize() first and allocate enough elements before calling this method.
-
-This method does not copy val; this class will free the instance when the variable is deleted or when clear_local_data() is called.
-
See also
Vector::set_vec()
- -

Definition at line 1342 of file Vector.cc.

- -
-
- -

◆ synthesized_p()

- -
-
- - - - - -
- - - - - - - -
bool libdap::BaseType::synthesized_p ()
-
-virtualinherited
-
-

Returns true if the variable is a synthesized variable. A synthesized variable is one that is added to the dataset by the server (usually with a `projection function'.

- -

Definition at line 452 of file BaseType.cc.

- -
-
- -

◆ toString()

- -
-
- - - - - -
- - - - - - - -
string libdap::BaseType::toString ()
-
-virtualinherited
-
-

Write out the object's internal fields in a string. To be used for debugging when regular inspection w/ddd or gdb isn't enough.

-
Returns
A string which shows the object's internal stuff.
- -

Reimplemented in libdap::Sequence.

- -

Definition at line 184 of file BaseType.cc.

- -
-
- -

◆ transfer_attributes()

- -
-
- - - - - -
- - - - - - - - -
void libdap::BaseType::transfer_attributes (AttrTableat_container)
-
-virtualinherited
-
-

Transfer attributes from a DAS object into this variable. Because of the rough history of the DAS object and the way that various server code built the DAS, this is necessarily a heuristic process. The intent is that this method will be overridden by handlers that need to look for certain patterns in the DAS (e.g., hdf4's odd variable_dim_n; where n = 0, 1, 2, ...) attribute containers.

-

There should be a one-to-one mapping between variables and attribute containers. However, in some cases one variable has attributes spread across several top level containers and in some cases one container is used by several variables

-
Note
This method is technically unnecessary because a server (or client) can easily add attributes directly using the DDS::get_attr_table or BaseType::get_attr_table methods and then poke values in using any of the methods AttrTable provides. This method exists to ease the transition to DDS objects which contain attribute information for the existing servers (Since they all make DAS objects separately from the DDS). They could be modified to use the same AttrTable methods but operate on the AttrTable instances in a DDS/BaseType instead of those in a DAS.
-
Parameters
- - -
at_containerTransfer attributes from this container.
-
-
-
Returns
void
- -

Reimplemented in libdap::Grid, and libdap::Constructor.

- -

Definition at line 644 of file BaseType.cc.

- -
-
- -

◆ transform_to_dap2()

- -
-
- - - - - -
- - - - - - - - -
std::vector< BaseType * > * libdap::Array::transform_to_dap2 (AttrTableparent_attr_table)
-
-virtual
-
- -

Transforms this instance of a D4Array into the corresponding DAP2 object.

-

This transformation may return an Array or a Grid object. The DAP2 Grid construct is semantically contained in the DAP4 concept of arrays with Map arrays. If all of the Maps are one dimensional then the D4Array can be represented as a Grid object.

-
Parameters
- - -
TheAttrTable pointer parent_attr_table is used by Groups, which disappear from the DAP2 representation. Their children are returned in the the BAseType vector their attributes are added to parent_attr_table.
-
-
-
Returns
A pointer to a vector of BaseType pointers (right?). In this D4Array case returned vector may contain a DAP2 Array or a Grid. Or, if the Array' prototype is a type that cannot be represented in DAP2 the return will be NULL.
- -

Reimplemented from libdap::BaseType.

- -

Definition at line 302 of file Array.cc.

- -
-
- -

◆ transform_to_dap4()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::Array::transform_to_dap4 (D4Grouproot,
Constructorcontainer 
)
-
-virtual
-
- -

DAP2 to DAP4 transform.

-

For the current BaseType, return a DAP4 'copy' of the variable.

-
Note
For most DAP2 types, in this implementation of DAP4 the corresponding DAP4 type is the same. The different types are Sequences (which are D4Sequences in the DAP4 implementation), Grids (which are coverages) and Arrays (which use shared dimensions).
-
Parameters
- - - -
rootThe root group that should hold this new variable. Add Group-level stuff here (e.g., D4Dimensions).
containerAdd the new variable to this container.
-
-
-
Returns
A pointer to the transformed variable
- -

Reimplemented from libdap::BaseType.

- -

Definition at line 192 of file Array.cc.

- -
-
- -

◆ type()

- -
-
- - - - - -
- - - - - - - -
Type libdap::BaseType::type () const
-
-virtualinherited
-
- -

Returns the type of the class instance.

- -

Definition at line 365 of file BaseType.cc.

- -
-
- -

◆ type_name()

- -
-
- - - - - -
- - - - - - - -
string libdap::BaseType::type_name () const
-
-virtualinherited
-
- -

Returns the type of the class instance as a string.

- -

Definition at line 379 of file BaseType.cc.

- -
-
- -

◆ update_length()

- -
-
- - - - - -
- - - - - - - - -
void libdap::Array::update_length (int size = 0)
-
-virtual
-
-
Deprecated:
Calling this method should never be necessary. It is used internally called whenever the size of the Array is changed, e.g., by a constraint.
-

Changes the length property of the array.

- -

Definition at line 103 of file Array.cc.

- -
-
- -

◆ val2buf()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
unsigned int libdap::Vector::val2buf (void * val,
bool reuse = false 
)
-
-virtualinherited
-
- -

Reads data into the Vector buffer.

-

Copies data into the class instance buffer. This function assumes that the input val points to memory which contains, in row major order, enough elements of the correct type to fill the array. For an array of a cardinal type the memory is simply copied in whole into the Vector buffer.

-

If the variable has already been constrained, this method will load only number of values/bytes specified by that constraint and will load them into the 'front' of the object's internal buffer. This is where serialize() expects to find the data.

-

For a Vector of Str (OPeNDAP Strings), this assumes val points to an array of C++ strings.

-

This method should not be used for Structure, Sequence or Grid.

-
Exceptions
- - -
InternalErrThrown if called for Structure, Sequence or Grid.
-
-
-
Returns
The number of bytes used by the array.
-
Parameters
- - - -
valA pointer to the input data.
reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect.
-
-
- -

Implements libdap::BaseType.

- -

Definition at line 1144 of file Vector.cc.

- -
-
- -

◆ value() [1/3]

- -
-
- - - - - -
- - - - - - - - -
void libdap::Vector::value (vector< string > & b) const
-
-virtualinherited
-
- -

Get a copy of the data held by this variable.

- -

Definition at line 1927 of file Vector.cc.

- -
-
- -

◆ value() [2/3]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::Vector::value (vector< unsigned int > * index,
vector< string > & b 
) const
-
-virtualinherited
-
- -

Get a copy of the data held by this variable using the passed subsetIndex vector to identify which values to return.

- -

Definition at line 1875 of file Vector.cc.

- -
-
- -

◆ value() [3/3]

- -
-
- - - - - -
- - - - - - - -
void * libdap::Vector::value ()
-
-virtualinherited
-
-

Allocate memory and copy data into the new buffer. Return the new buffer's pointer. The caller must delete the storage.

- -

Definition at line 1935 of file Vector.cc.

- -
-
- -

◆ var() [1/3]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
BaseType * libdap::Vector::var (const string & n = "",
bool exact = true,
btp_stack * s = 0 
)
-
-virtualinherited
-
-

Returns a copy of the template array element. If the Vector contains simple data types, the template will contain the value of the last vector element accessed with the Vector::var(int i) function, if any. If no such access has been made, or if the Vector contains compound data types, the value held by the template instance is undefined.

-

Note that the parameter exact_match is not used by this mfunc.

-
Parameters
- - - - -
nThe name of the variable to find.
exactUnused.
sPointer to a BaseType Pointer Stack. Use this stack to record the path to the variable. By default this pointer is null, in which case it is not used.
-
-
-
Returns
A pointer to the BaseType if found, otherwise null.
-
See also
Vector::var
- -

Reimplemented from libdap::BaseType.

- -

Definition at line 433 of file Vector.cc.

- -
-
- -

◆ var() [2/3]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
BaseType * libdap::Vector::var (const string & n,
btp_stack & s 
)
-
-virtualinherited
-
-

This version of var(...) searches for name and returns a pointer to the BaseType object if found. It uses the same search algorithm as above when exact_match is false. In addition to returning a pointer to the variable, it pushes onto s a BaseType pointer to each constructor type that ultimately contains name.

-
Parameters
- - - -
nFind the variable whose name is name.
sRecord the path to name.
-
-
-
Returns
A pointer to the named variable.
- -

Reimplemented from libdap::BaseType.

- -

Definition at line 467 of file Vector.cc.

- -
-
- -

◆ var() [3/3]

- -
-
- - - - - -
- - - - - - - - -
BaseType * libdap::Vector::var (unsigned int i)
-
-virtualinherited
-
-

Returns a pointer to the specified Vector element. The return pointer will reference the element itself, so multiple calls to this method should save each value before making the next call.

-
Parameters
- - -
iThe index of the desired Vector element. Zero indicates the first element of the Vector.
-
-
-
Returns
A pointer to a BaseType class instance containing the value of the indicated element. The BaseType pointer is locally maintained and should not be deleted or referenced. Extract the value right after the method returns.
-
See also
BaseType::var
- -

Definition at line 490 of file Vector.cc.

- -
-
- -

◆ vec_resize()

- -
-
- - - - - -
- - - - - - - - -
void libdap::Vector::vec_resize (int l)
-
-inherited
-
-

Resizes a Vector. If the input length is greater than the current length of the Vector, new memory is allocated (the Vector moved if necessary), and the new entries are appended to the end of the array and padded with Null values. If the input length is shorter, the tail values are discarded.

-
Note
This method is applicable to the compound types only.
- -

Definition at line 568 of file Vector.cc.

- -
-
- -

◆ width()

- -
-
- - - - - -
- - - - - - - - -
unsigned int libdap::Vector::width (bool constrained = false) const
-
-virtualinherited
-
- -

Returns the width of the data, in bytes.

-

Returns the number of bytes needed to hold the entire array. This is equal to length() (the number of elements in in the array) times the width of each element.

- -

Reimplemented from libdap::BaseType.

- -

Definition at line 536 of file Vector.cc.

- -
-
-
The documentation for this class was generated from the following files: -
-
- - - - diff --git a/html/classlibdap_1_1Array.js b/html/classlibdap_1_1Array.js deleted file mode 100644 index dba9d6960..000000000 --- a/html/classlibdap_1_1Array.js +++ /dev/null @@ -1,173 +0,0 @@ -var classlibdap_1_1Array = -[ - [ "dimension", "structlibdap_1_1Array_1_1dimension.html", "structlibdap_1_1Array_1_1dimension" ], - [ "btp_stack", "classlibdap_1_1Array.html#ae9c6e71855b90a0e552713011c9ab81f", null ], - [ "Dim_citer", "classlibdap_1_1Array.html#aa36e3487697c25295d1b74a346b82720", null ], - [ "Dim_iter", "classlibdap_1_1Array.html#a7a557c05085a83d1501dbfa249d3cc52", null ], - [ "Array", "classlibdap_1_1Array.html#ae9a0d029981757fdb6b67c6c020c37e0", null ], - [ "Array", "classlibdap_1_1Array.html#a3c9bb7698219bdcdc4dba1fa38543975", null ], - [ "Array", "classlibdap_1_1Array.html#a893a3fa9df80aae3ec926037fd2debea", null ], - [ "~Array", "classlibdap_1_1Array.html#ad30dc4754b0040a453d00cf5e0b4ddb7", null ], - [ "_duplicate", "classlibdap_1_1Array.html#afc1bc92f368ea3a8b136dd751d79752e", null ], - [ "add_constraint", "classlibdap_1_1Array.html#a538f7c336e26b873f50e033d553bba26", null ], - [ "add_constraint", "classlibdap_1_1Array.html#a3ebaff571eb68683238b1afe3063f25d", null ], - [ "add_var", "classlibdap_1_1Array.html#ac9a68fa480403f9b80285073c653570c", null ], - [ "add_var_nocopy", "classlibdap_1_1Array.html#a41559fa8a060e048f286d7d521fa1a03", null ], - [ "append_dim", "classlibdap_1_1Array.html#a76e2d807204976c179ca07e7a3f6f142", null ], - [ "append_dim", "classlibdap_1_1Array.html#a7fde3d514197a700572e497299b38274", null ], - [ "attributes", "classlibdap_1_1Array.html#a97452f06d2188eb838399a709246b5e9", null ], - [ "buf2val", "classlibdap_1_1Array.html#af20a56a72c3108b31418ebf01f779253", null ], - [ "check_semantics", "classlibdap_1_1Array.html#aa2dcec843f64da6142a7a3208651a5e4", null ], - [ "clear_all_dims", "classlibdap_1_1Array.html#a9640d5aa2c37123f06220b9c3d77ce82", null ], - [ "clear_constraint", "classlibdap_1_1Array.html#a151f9eaea5f7b22980b1ef86c75723ce", null ], - [ "clear_local_data", "classlibdap_1_1Array.html#ac12023f8bf9ecc97998c3bb021ba2772", null ], - [ "compute_checksum", "classlibdap_1_1Array.html#a9c61fcb646f1813e350549b6ddf48204", null ], - [ "d4_ops", "classlibdap_1_1Array.html#a512a356f31ed6c4c1a368da0b054408a", null ], - [ "dataset", "classlibdap_1_1Array.html#a47521ce321a17e6ce217870cb6a1a7aa", null ], - [ "deserialize", "classlibdap_1_1Array.html#aba86cc0f3915d85e37f4b9e00ebfde7e", null ], - [ "deserialize", "classlibdap_1_1Array.html#ad78d293754a1d78b90c86f8e33c22bec", null ], - [ "dim_begin", "classlibdap_1_1Array.html#ae6e6943cd895fa8dc1c58621ffad42a0", null ], - [ "dim_end", "classlibdap_1_1Array.html#a1e6b13c4a5d3e825df7ebae3a9dc300d", null ], - [ "dimension_D4dim", "classlibdap_1_1Array.html#a8084269cb03dde18d94377e3c6faf702", null ], - [ "dimension_name", "classlibdap_1_1Array.html#a594eec9c83ef39c93f735e6cc3216c8b", null ], - [ "dimension_size", "classlibdap_1_1Array.html#a8f29497af9c33c0d66939d5f9a16d92a", null ], - [ "dimension_start", "classlibdap_1_1Array.html#a12084880777d27d782b0e1f2f4d5ae01", null ], - [ "dimension_stop", "classlibdap_1_1Array.html#a446f239be3ef678a4476058c8041552a", null ], - [ "dimension_stride", "classlibdap_1_1Array.html#afc530e71ace953992a5b314a6f885d31", null ], - [ "dimensions", "classlibdap_1_1Array.html#afa75d1ff3c75b8359d03b3f382bfd179", null ], - [ "dump", "classlibdap_1_1Array.html#a19bf36db03a5a700c80ec33e76bfc9a6", null ], - [ "element_count", "classlibdap_1_1Array.html#ab78981c9e05e7d1dc24f913dbd2021d7", null ], - [ "FQN", "classlibdap_1_1Array.html#a977cb954cc8f0d914d6f66ea0f48a9e3", null ], - [ "get_attr_table", "classlibdap_1_1Array.html#a1fcd9537c67e3bf88964b2656ff5bac1", null ], - [ "get_buf", "classlibdap_1_1Array.html#a285ee3b0cc0adf6a54ea388ea71a69fc", null ], - [ "get_compound_buf", "classlibdap_1_1Array.html#ad6d99474ab74d8b9752e4e77b3350121", null ], - [ "get_parent", "classlibdap_1_1Array.html#a3459cdaa239c33ce111ef360d8dc3017", null ], - [ "get_str", "classlibdap_1_1Array.html#ab53f2eb57de3f0f99961f6ab6f470638", null ], - [ "get_value_capacity", "classlibdap_1_1Array.html#a16b89988deda0413d1eb2cdc615a38df", null ], - [ "intern_data", "classlibdap_1_1Array.html#a6b5ee8fec4de3700e2564a64ef4f6d76", null ], - [ "intern_data", "classlibdap_1_1Array.html#abe772a228c62c7960bf2eb92be77732f", null ], - [ "is_constructor_type", "classlibdap_1_1Array.html#a8b8490e0047c6da52945699a132008ea", null ], - [ "is_dap4", "classlibdap_1_1Array.html#a7f6835cb5e5589ab5dad3fb4813d3bea", null ], - [ "is_in_selection", "classlibdap_1_1Array.html#ae302ab2ec26e9fc5b575bf5d3d09aa5c", null ], - [ "is_simple_type", "classlibdap_1_1Array.html#aae57e5b270b3a015d40c8db10b9b5549", null ], - [ "is_vector_type", "classlibdap_1_1Array.html#a7107c76dbcab71015141142383b6d022", null ], - [ "length", "classlibdap_1_1Array.html#a2476a541aad16bedc64d99805fcc9c0c", null ], - [ "m_create_cardinal_data_buffer_for_type", "classlibdap_1_1Array.html#af175806a557f627a0ee70c5f05ed7c5c", null ], - [ "m_delete_cardinal_data_buffer", "classlibdap_1_1Array.html#ad2e46d6d52fcb609658baf5ac1f9892e", null ], - [ "m_duplicate", "classlibdap_1_1Array.html#acffc202435cee93a54af98cd471beb98", null ], - [ "m_duplicate", "classlibdap_1_1Array.html#a0c55b826c8c5dfe7a454dc670e859a41", null ], - [ "m_is_cardinal_type", "classlibdap_1_1Array.html#ac00c2a2ebd65c86022b82dfb1a32485c", null ], - [ "m_set_cardinal_values_internal", "classlibdap_1_1Array.html#a1fb2c5dc539e55203fc61845089c67e8", null ], - [ "maps", "classlibdap_1_1Array.html#a7c1d6ce5c4143a9dac90240278c547d1", null ], - [ "name", "classlibdap_1_1Array.html#a24c5d67823b3cff7f4245a993072a142", null ], - [ "operator=", "classlibdap_1_1Array.html#afc4c6d411b46e29214c9b19fb7fb28c1", null ], - [ "ops", "classlibdap_1_1Array.html#a8a0000be2a244e3e07abda3020af8800", null ], - [ "prepend_dim", "classlibdap_1_1Array.html#adcb475b8a855515df7d9ddd254c3f08a", null ], - [ "prepend_dim", "classlibdap_1_1Array.html#ac2cef6fe1d7fe76626f33130380d9752", null ], - [ "print_array", "classlibdap_1_1Array.html#a435534a45cea53181d30dc09d46734a7", null ], - [ "print_array", "classlibdap_1_1Array.html#a88a4492771892695010496d2dfb6071e", null ], - [ "print_as_map_xml", "classlibdap_1_1Array.html#abafb35e8c77673793f2d3897ca1eec4b", null ], - [ "print_as_map_xml", "classlibdap_1_1Array.html#a5a3d7064fae4cfc94d4fc9026fce0667", null ], - [ "print_as_map_xml_writer", "classlibdap_1_1Array.html#a0077e85bac2620d8746dc50cfd7104ae", null ], - [ "print_dap4", "classlibdap_1_1Array.html#a976af6f6189ee1f404cd7995df51eabc", null ], - [ "print_decl", "classlibdap_1_1Array.html#a62456490e14832bd55b9b79d6e37397a", null ], - [ "print_decl", "classlibdap_1_1Array.html#ada4cee027a63ce185940fd8c019741d7", null ], - [ "print_val", "classlibdap_1_1Array.html#af7bdf05ad5a57a517aa6b122b03f06df", null ], - [ "print_val", "classlibdap_1_1Array.html#aedea9b76dc355fde465f8163d80fafbb", null ], - [ "print_xml", "classlibdap_1_1Array.html#a3ce1bd161426e6950dc97511f33b2845", null ], - [ "print_xml", "classlibdap_1_1Array.html#a630bb8bac280ba540af9035df5968c2b", null ], - [ "print_xml_core", "classlibdap_1_1Array.html#ad38718861c5dd21a677746a2211059f1", null ], - [ "print_xml_core", "classlibdap_1_1Array.html#a29755e9dcff905940b9ee6138ee556be", null ], - [ "print_xml_writer", "classlibdap_1_1Array.html#af27b27e6edec29098e938bd7bb26d8f6", null ], - [ "print_xml_writer_core", "classlibdap_1_1Array.html#a9c0901b2cee44ee6c2ea851822f8f6b1", null ], - [ "prototype", "classlibdap_1_1Array.html#a31fb64d322e4db4892ceffa54a3e427b", null ], - [ "ptr_duplicate", "classlibdap_1_1Array.html#a31dc321bd9314239474f30d290e0599a", null ], - [ "read", "classlibdap_1_1Array.html#a1da003c53f2e663223f603ab3fbd7c8e", null ], - [ "read_p", "classlibdap_1_1Array.html#a38ff819a432217c55db2e9071928d20c", null ], - [ "rename_dim", "classlibdap_1_1Array.html#a843af00a8cdb4e4c87eae166d57db5d4", null ], - [ "reserve_value_capacity", "classlibdap_1_1Array.html#aaaa7c0f36266ef3df9f4fb90de220867", null ], - [ "reserve_value_capacity", "classlibdap_1_1Array.html#adade15ffa55c59f6205e1c3c9ea78a35", null ], - [ "reset_constraint", "classlibdap_1_1Array.html#ac375d728d50c8b27422c766c84e12300", null ], - [ "send_p", "classlibdap_1_1Array.html#a980c0013817836aa77ef74aeec7fb192", null ], - [ "serialize", "classlibdap_1_1Array.html#a993d46232faadb5914cc0519d013e9b2", null ], - [ "serialize", "classlibdap_1_1Array.html#af478e3d5cbb3235081fe8daa6d6629a9", null ], - [ "set_attr_table", "classlibdap_1_1Array.html#a572a1d76a75981abac83a4241e90c0fa", null ], - [ "set_attributes", "classlibdap_1_1Array.html#ad4dda4cf43dca838d3de183b8e01cd09", null ], - [ "set_attributes_nocopy", "classlibdap_1_1Array.html#afd0e5f87d19020f560d5c1ff8dd4d6a3", null ], - [ "set_in_selection", "classlibdap_1_1Array.html#a2bc036248cdaf1affac464170f32ad30", null ], - [ "set_is_dap4", "classlibdap_1_1Array.html#abca9ddaa9a1ada8447cbe7193e8e288a", null ], - [ "set_length", "classlibdap_1_1Array.html#a05a61e24fd295934dfc3c37c9f55ca57", null ], - [ "set_name", "classlibdap_1_1Array.html#aacfca48c7db65e3a2c3c94734dee8c36", null ], - [ "set_parent", "classlibdap_1_1Array.html#a5b6a39f6ce6594fa74f3fc899ac9a966", null ], - [ "set_read_p", "classlibdap_1_1Array.html#a58712de8871e28a48fdc95e72a09df71", null ], - [ "set_send_p", "classlibdap_1_1Array.html#a64815467570490a4a6cddc89f09a2413", null ], - [ "set_synthesized_p", "classlibdap_1_1Array.html#a595cb4059cff24f801a1b6da79bd2f9e", null ], - [ "set_type", "classlibdap_1_1Array.html#af74f8d1ef57c9fcca46f620f75d175a3", null ], - [ "set_value", "classlibdap_1_1Array.html#ac6ffab2a00584c2963c0d521ad4028b5", null ], - [ "set_value", "classlibdap_1_1Array.html#af0c29cba5f93a8571754f2324a6fc170", null ], - [ "set_value", "classlibdap_1_1Array.html#a040fe60aa43a3beecd078c3c7bb4f42f", null ], - [ "set_value", "classlibdap_1_1Array.html#ab6d2f9bc8fdbb433ddb3d2ceb995ac7d", null ], - [ "set_value", "classlibdap_1_1Array.html#a8c122828120daf1ff5e850e8f7b9ce89", null ], - [ "set_value", "classlibdap_1_1Array.html#a565daf922503ff615dac4c6cdb14c1ea", null ], - [ "set_value", "classlibdap_1_1Array.html#af264f7a752cc501bfbccee813733bde3", null ], - [ "set_value", "classlibdap_1_1Array.html#acfe7846fc2aeb383b9b6263f09c92f63", null ], - [ "set_value", "classlibdap_1_1Array.html#a0ba340343eda47f274185ee7a3e6761e", null ], - [ "set_value", "classlibdap_1_1Array.html#a5d20f40b94b9d901f8124d7d54ed423f", null ], - [ "set_value", "classlibdap_1_1Array.html#abd6e429e907214c593b6fb37f97511ee", null ], - [ "set_value", "classlibdap_1_1Array.html#ac4ba1b5ff3e1283a3ead8e5ef2b3be99", null ], - [ "set_value", "classlibdap_1_1Array.html#a20e3ce67dddefd2e941833f84d8fb129", null ], - [ "set_value", "classlibdap_1_1Array.html#a2c1c39cad25264854e751b67478c36ac", null ], - [ "set_value", "classlibdap_1_1Array.html#ae18e02e571fec26f5ee7e6fe03b9ccf6", null ], - [ "set_value", "classlibdap_1_1Array.html#a6479561bdefac3ab843d09fe2a8467c0", null ], - [ "set_value", "classlibdap_1_1Array.html#aa73493691f34dc6a871a5557b147ba4d", null ], - [ "set_value", "classlibdap_1_1Array.html#abaa596cea00692617d5af9cb89eab60c", null ], - [ "set_value", "classlibdap_1_1Array.html#a1f18c590ea763d25de3595a7b96cfad2", null ], - [ "set_value", "classlibdap_1_1Array.html#a8d818139d7bd98c4d6e16494e4414ea9", null ], - [ "set_value", "classlibdap_1_1Array.html#a9f4bfe3aba7506d5e8d3d5182a518359", null ], - [ "set_value", "classlibdap_1_1Array.html#a068afd2353ad32f904361253e1b6e807", null ], - [ "set_value_slice_from_row_major_vector", "classlibdap_1_1Array.html#a559d8ca948ca40f179e4e3da0bfdfdc4", null ], - [ "set_vec", "classlibdap_1_1Array.html#a8bf6e565dcb2eab1f3f7037518a9acb3", null ], - [ "set_vec_nocopy", "classlibdap_1_1Array.html#a175f1a51686798061c2147f2eccde33a", null ], - [ "synthesized_p", "classlibdap_1_1Array.html#ae64e677da27249473cdba0b60cdbb90a", null ], - [ "toString", "classlibdap_1_1Array.html#a701eb3361f5b5628329ece019cd34519", null ], - [ "transfer_attributes", "classlibdap_1_1Array.html#add8e836c622042a339152a6c31e5bdfb", null ], - [ "transform_to_dap2", "classlibdap_1_1Array.html#a1cc230189460ef65076e8091cf3b6e36", null ], - [ "transform_to_dap4", "classlibdap_1_1Array.html#a2dea8a711559cb0e0b9c36bf41df6473", null ], - [ "type", "classlibdap_1_1Array.html#af8e803b20a7a7dc5f2ef351d7fac4a56", null ], - [ "type_name", "classlibdap_1_1Array.html#a18a42c8ec35cb5b15cd651a4152f8a2c", null ], - [ "update_length", "classlibdap_1_1Array.html#a4c4fe08ce144a3fa2d6b15b7ae15ccc0", null ], - [ "val2buf", "classlibdap_1_1Array.html#a96ecf84f2798065878755d9a9014ee69", null ], - [ "value", "classlibdap_1_1Array.html#a624bc74ea64985cdf4f9980809ff3892", null ], - [ "value", "classlibdap_1_1Array.html#a66fca662d9754b45b0a386bf08b869d2", null ], - [ "value", "classlibdap_1_1Array.html#a1a24b162aa214f95b0f82a466573cb3e", null ], - [ "value", "classlibdap_1_1Array.html#a3ad2e9a815fd5b6809da0d7f09de410b", null ], - [ "value", "classlibdap_1_1Array.html#ac447641e95e7e000c83aa351f23c3a48", null ], - [ "value", "classlibdap_1_1Array.html#ab23253ee97cc725ba4d87063464ebfaf", null ], - [ "value", "classlibdap_1_1Array.html#a335127b963207a457c362fc6a1a73523", null ], - [ "value", "classlibdap_1_1Array.html#a7f834fcdcaf597e35d732ddb5c7cc5a4", null ], - [ "value", "classlibdap_1_1Array.html#ab72e65b9578f8743d3c180be7de413c4", null ], - [ "value", "classlibdap_1_1Array.html#a0e76df3852b26e453ed75e24623f968a", null ], - [ "value", "classlibdap_1_1Array.html#a0725f0e3304f9ad00bf90a19b5650368", null ], - [ "value", "classlibdap_1_1Array.html#a279e96b1bac813a30e361d6db1d14932", null ], - [ "value", "classlibdap_1_1Array.html#a675d1fea0d560bca688809dd4792f414", null ], - [ "value", "classlibdap_1_1Array.html#a5c5f7e24624d3fdf37c60396c8cb5b8b", null ], - [ "value", "classlibdap_1_1Array.html#af27644af35f69c4c7920bbc481d87f9f", null ], - [ "value", "classlibdap_1_1Array.html#abc69c8a1b1eb45f7a91186f247c10f10", null ], - [ "value", "classlibdap_1_1Array.html#aa599da1cff6457453c2b6cb2ea1b3b7c", null ], - [ "value", "classlibdap_1_1Array.html#ae15909a6fd5e1b2bedf3cb09de41801c", null ], - [ "value", "classlibdap_1_1Array.html#a707c5198cef8c3753565301ada3db0e7", null ], - [ "value", "classlibdap_1_1Array.html#a145e75e2d47b6c918162e2c556ab2faa", null ], - [ "value", "classlibdap_1_1Array.html#a8470e7dc052e327237457ffb50f4660b", null ], - [ "value", "classlibdap_1_1Array.html#af9fd1c331a511989ac2bf4a0ad5b27da", null ], - [ "value", "classlibdap_1_1Array.html#aca5000630369cb4217827c2f136afec0", null ], - [ "var", "classlibdap_1_1Array.html#aa5ccb30d1f27ae587f35216b859feec7", null ], - [ "var", "classlibdap_1_1Array.html#ac07a950727d2ac58934ba4cc03206c8d", null ], - [ "var", "classlibdap_1_1Array.html#adf286762e63295675850c41cedf33370", null ], - [ "vec_resize", "classlibdap_1_1Array.html#ad180a87244b0b6f32b47711a4ae0330e", null ], - [ "width", "classlibdap_1_1Array.html#a8fe5d7b06814653b6cf5408b2a8671db", null ], - [ "ArrayTest", "classlibdap_1_1Array.html#a76052f084a0023044a84ff5b75a24036", null ], - [ "D4Group", "classlibdap_1_1Array.html#a68515702cd7a6b5b46aa3e00f4e5261b", null ], - [ "d_in_selection", "classlibdap_1_1Array.html#a949a89714965d7afdcd1e3edc8b7f0d4", null ], - [ "d_is_synthesized", "classlibdap_1_1Array.html#a629e97e8eb7d285b54c9af8c1ec9a29a", null ], - [ "d_maps", "classlibdap_1_1Array.html#a83f21fdd6e522e5ea14aae8682862029", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1Array__inherit__graph.map b/html/classlibdap_1_1Array__inherit__graph.map deleted file mode 100644 index 43c6d58e6..000000000 --- a/html/classlibdap_1_1Array__inherit__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/html/classlibdap_1_1Array__inherit__graph.md5 b/html/classlibdap_1_1Array__inherit__graph.md5 deleted file mode 100644 index f46199b3f..000000000 --- a/html/classlibdap_1_1Array__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -4238ea675918b6895f6e33f133d9f215 \ No newline at end of file diff --git a/html/classlibdap_1_1Array__inherit__graph.png b/html/classlibdap_1_1Array__inherit__graph.png deleted file mode 100644 index 9d4a34c2a0305585961a0f444666d6a4edeb1ca5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106269 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

Z#z8tZ*Vw3*Iy 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 - - - - - - -libdap: Member List - - - - - - - - - - - -

-
- -
-
-
- -
-
-
-
libdap::AttrTable Member List
-
-
- -

This is the complete list of members for libdap::AttrTable, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
add_container_alias(const string &name, AttrTable *src)libdap::AttrTablevirtual
add_value_alias(AttrTable *at, const string &name, const string &source)libdap::AttrTablevirtual
append_attr(const string &name, const string &type, const string &value)libdap::AttrTablevirtual
append_attr(const string &name, const string &type, vector< string > *values)libdap::AttrTablevirtual
append_container(const string &name)libdap::AttrTablevirtual
append_container(AttrTable *at, const string &name)libdap::AttrTablevirtual
attr_alias(const string &alias, AttrTable *at, const string &name)libdap::AttrTablevirtual
attr_alias(const string &alias, const string &name)libdap::AttrTablevirtual
attr_begin()libdap::AttrTablevirtual
Attr_citer typedef (defined in libdap::AttrTable)libdap::AttrTable
attr_end()libdap::AttrTablevirtual
Attr_iter typedef (defined in libdap::AttrTable)libdap::AttrTable
AttrTable() (defined in libdap::AttrTable)libdap::AttrTable
AttrTable(const AttrTable &rhs) (defined in libdap::AttrTable)libdap::AttrTable
AttrTableTest (defined in libdap::AttrTable)libdap::AttrTablefriend
clone(const AttrTable &at)libdap::AttrTableprotected
del_attr(const string &name, int i=-1)libdap::AttrTablevirtual
del_attr_table(Attr_iter iter)libdap::AttrTablevirtual
dump(ostream &strm) constlibdap::AttrTablevirtual
erase()libdap::AttrTablevirtual
find(const string &target, AttrTable **at, Attr_iter *iter)libdap::AttrTablevirtual
find_container(const string &target)libdap::AttrTablevirtual
get_attr(const string &name, unsigned int i=0) (defined in libdap::AttrTable)libdap::AttrTablevirtual
get_attr(Attr_iter iter, unsigned int i=0)libdap::AttrTablevirtual
get_attr_iter(int i)libdap::AttrTablevirtual
get_attr_num(const string &name)libdap::AttrTablevirtual
get_attr_num(Attr_iter iter)libdap::AttrTablevirtual
get_attr_table(const string &name)libdap::AttrTablevirtual
get_attr_table(Attr_iter iter)libdap::AttrTablevirtual
get_attr_type(const string &name)libdap::AttrTablevirtual
get_attr_type(Attr_iter iter)libdap::AttrTablevirtual
get_attr_vector(const string &name)libdap::AttrTablevirtual
get_attr_vector(Attr_iter iter)libdap::AttrTablevirtual
get_name() constlibdap::AttrTablevirtual
get_name(Attr_iter iter)libdap::AttrTablevirtual
get_parent() constlibdap::AttrTableinlinevirtual
get_size() constlibdap::AttrTablevirtual
get_type(const string &name)libdap::AttrTablevirtual
get_type(Attr_iter iter)libdap::AttrTablevirtual
is_container(Attr_iter iter)libdap::AttrTablevirtual
is_global_attribute() const (defined in libdap::AttrTable)libdap::AttrTableinlinevirtual
is_global_attribute(Attr_iter iter) (defined in libdap::AttrTable)libdap::AttrTablevirtual
operator=(const AttrTable &rhs) (defined in libdap::AttrTable)libdap::AttrTable
print(FILE *out, string pad=" ", bool dereference=false)libdap::AttrTablevirtual
print(ostream &out, string pad=" ", bool dereference=false)libdap::AttrTablevirtual
print_dap4(XMLWriter &xml)libdap::AttrTable
print_xml(FILE *out, string pad=" ", bool constrained=false)libdap::AttrTablevirtual
print_xml(ostream &out, string pad=" ", bool constrained=false)libdap::AttrTablevirtual
print_xml_writer(XMLWriter &xml)libdap::AttrTable
recurrsive_find(const string &target, Attr_iter *location)libdap::AttrTablevirtual
set_is_global_attribute(bool ga) (defined in libdap::AttrTable)libdap::AttrTableinlinevirtual
set_is_global_attribute(Attr_iter iter, bool ga) (defined in libdap::AttrTable)libdap::AttrTablevirtual
set_name(const string &n)libdap::AttrTablevirtual
simple_find(const string &target)libdap::AttrTable
simple_find_container(const string &target) (defined in libdap::AttrTable)libdap::AttrTable
simple_print(FILE *out, string pad, Attr_iter i, bool dereference)libdap::AttrTableprotected
simple_print(ostream &out, string pad, Attr_iter i, bool dereference)libdap::AttrTableprotected
~AttrTable() (defined in libdap::AttrTable)libdap::AttrTablevirtual
~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
-
- - - - diff --git a/html/classlibdap_1_1AttrTable.html b/html/classlibdap_1_1AttrTable.html deleted file mode 100644 index 3151d8fcd..000000000 --- a/html/classlibdap_1_1AttrTable.html +++ /dev/null @@ -1,2099 +0,0 @@ - - - - - - - -libdap: libdap::AttrTable Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
- -
-
libdap::AttrTable Class Reference
-
-
- -

Contains the attributes for a dataset. - More...

- -

#include <AttrTable.h>

-
-Inheritance diagram for libdap::AttrTable:
-
-
Inheritance graph
- - - -
- - - - -

-Classes

struct  entry
 
- - - - - -

-Public Types

-typedef std::vector< entry * >::const_iterator Attr_citer
 
-typedef std::vector< entry * >::iterator Attr_iter
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

virtual void add_container_alias (const string &name, AttrTable *src)
 Add an alias to a container held by this attribute table. More...
 
virtual void add_value_alias (AttrTable *at, const string &name, const string &source)
 Add an alias for an attribute. More...
 
virtual unsigned int append_attr (const string &name, const string &type, const string &value)
 Add an attribute to the table. More...
 
virtual unsigned int append_attr (const string &name, const string &type, vector< string > *values)
 Add an attribute to the table. More...
 
virtual AttrTableappend_container (const string &name)
 Add a container to the attribute table. More...
 
virtual AttrTableappend_container (AttrTable *at, const string &name)
 Add a container to the attribute table. More...
 
virtual bool attr_alias (const string &alias, AttrTable *at, const string &name)
 Adds an alias to the set of attributes. More...
 
virtual bool attr_alias (const string &alias, const string &name)
 
virtual void dump (ostream &strm) const
 dumps information about this object More...
 
virtual void erase ()
 Erase the attribute table. More...
 
virtual void find (const string &target, AttrTable **at, Attr_iter *iter)
 
virtual AttrTablefind_container (const string &target)
 Find an attribute with a given name. More...
 
virtual string get_name () const
 Get the name of this attribute table. More...
 
virtual AttrTableget_parent () const
 
virtual unsigned int get_size () const
 Get the number of entries in this attribute table. More...
 
-virtual bool is_global_attribute () const
 
virtual void print (FILE *out, string pad=" ", bool dereference=false)
 Prints the attribute table. More...
 
virtual void print (ostream &out, string pad=" ", bool dereference=false)
 Prints the attribute table. More...
 
void print_dap4 (XMLWriter &xml)
 
virtual void print_xml (FILE *out, string pad=" ", bool constrained=false)
 
virtual void print_xml (ostream &out, string pad=" ", bool constrained=false)
 
void print_xml_writer (XMLWriter &xml)
 
virtual AttrTablerecurrsive_find (const string &target, Attr_iter *location)
 
-virtual void set_is_global_attribute (bool ga)
 
virtual void set_name (const string &n)
 Set the name of this attribute table. More...
 
Attr_iter simple_find (const string &target)
 
-AttrTablesimple_find_container (const string &target)
 
Accessors using an attribute name

Each of the following accessors get information using the name of an attribute. They perform a simple search for the name in this attribute table only; sub-tables are not searched and the dot notation is not recognized.

-
virtual AttrTableget_attr_table (const string &name)
 Get an attribute container. More...
 
virtual string get_type (const string &name)
 Get the type name of an attribute within this attribute table. More...
 
virtual AttrType get_attr_type (const string &name)
 Get the type of an attribute. More...
 
virtual unsigned int get_attr_num (const string &name)
 Get the number of attributes in this container. More...
 
virtual vector< string > * get_attr_vector (const string &name)
 Get a vector-valued attribute. More...
 
virtual void del_attr (const string &name, int i=-1)
 Deletes an attribute. More...
 
get information using an iterator
-virtual string get_attr (const string &name, unsigned int i=0)
 
virtual Attr_iter attr_begin ()
 
virtual Attr_iter attr_end ()
 
virtual Attr_iter get_attr_iter (int i)
 
virtual string get_name (Attr_iter iter)
 
virtual bool is_container (Attr_iter iter)
 
virtual AttrTableget_attr_table (Attr_iter iter)
 
virtual Attr_iter del_attr_table (Attr_iter iter)
 
virtual string get_type (Attr_iter iter)
 
virtual AttrType get_attr_type (Attr_iter iter)
 
virtual unsigned int get_attr_num (Attr_iter iter)
 
virtual string get_attr (Attr_iter iter, unsigned int i=0)
 
virtual std::vector< string > * get_attr_vector (Attr_iter iter)
 
-virtual bool is_global_attribute (Attr_iter iter)
 
-virtual void set_is_global_attribute (Attr_iter iter, bool ga)
 
- - - - - - - -

-Protected Member Functions

void clone (const AttrTable &at)
 
void simple_print (FILE *out, string pad, Attr_iter i, bool dereference)
 
void simple_print (ostream &out, string pad, Attr_iter i, bool dereference)
 
- - - -

-Friends

-class AttrTableTest
 
- - - - - - - - - -

-Instance management functions

AttrTable ()
 
AttrTable (const AttrTable &rhs)
 
-virtual ~AttrTable ()
 
-AttrTableoperator= (const AttrTable &rhs)
 
-

Detailed Description

-

Contains the attributes for a dataset.

-

An AttrTable (``Attribute Table'') stores a set of names and, for each name, either a type and a value, or another attribute table. The attribute value can be a vector containing many values of the same type. The attributes can have any of the types listed in the AttrType list. However, all attribute types are stored as string data, except for the container type, which is stored as a pointer to another attribute table.

-

Each element in the attribute table can itself be an attribute table. The table can also contain ``alias'' attributes whose value is given by the value of another attribute to which it is linked.

-

The attribute tables have a standard printed representation. There is a member function print() for writing this form. Use the DAS::parse() function to read the printed form.

-

An attribute table might look something like this:

-
string long_name "Weekly Means of Sea Surface Temperature";
-actual_range {
-    Float64 min -1.8;
-    Float64 max 35.09;
-}
-string units "degC";
-conversion_data {
-    Float64 add_offset 0.;
-    Float64 scale_factor 0.0099999998;
-}
-Int32 missing_value 32767;
-

Here, long_name, units, and missing_value are simple attributes, and actual_range and conversion_data are container attributes containing other attribute tables.

-
Note
This class is used only for DAP2.
-
See also
DAS
-
-AttrType
- -

Definition at line 142 of file AttrTable.h.

-

Member Function Documentation

- -

◆ add_container_alias()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::AttrTable::add_container_alias (const string & name,
AttrTablesrc 
)
-
-virtual
-
- -

Add an alias to a container held by this attribute table.

-
Parameters
- - - -
nameThe name of the alias. May not use dot notation.
srcThe existing attribute container to alias.
-
-
-
Exceptions
- - -
Errorif an attribute, container or alias called name already exists in this attribute table.
-
-
- -

Definition at line 908 of file AttrTable.cc.

- -
-
- -

◆ add_value_alias()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::AttrTable::add_value_alias (AttrTabledas,
const string & name,
const string & source 
)
-
-virtual
-
- -

Add an alias for an attribute.

-

Assume source names an attribute value in some container. Add an alias name for that value in this object.

-
Parameters
- - - - -
das
nameThe name of the alias. May not use dot notation.
sourceThe name of the attribute to alias. May use dot notation.
-
-
-
Exceptions
- - -
Errorif the attribute table already contains an attribute, container or alias called name or if an attribute called source does not exist.
-
-
- -

Definition at line 942 of file AttrTable.cc.

- -
-
- -

◆ append_attr() [1/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
unsigned int libdap::AttrTable::append_attr (const string & name,
const string & type,
const string & value 
)
-
-virtual
-
- -

Add an attribute to the table.

-

If the given name already refers to an attribute, and the attribute has a value, the given value is appended to the attribute vector. Calling this function repeatedly is the way to append to an attribute vector.

-

The function throws an Error if the attribute is a container, or if the type of the input value does not match the existing attribute's type. Use append_container() to add container attributes.

-

This method performs a simple search for name in this attribute table only; sub-tables are not searched and the dot notation is not recognized.

-
Returns
Returns the length of the added attribute value.
-
Parameters
- - - - -
nameThe name of the attribute to add or modify.
typeThe type of the attribute to add or modify.
valueThe value to add to the attribute table.
-
-
- -

Definition at line 307 of file AttrTable.cc.

- -
-
- -

◆ append_attr() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
unsigned int libdap::AttrTable::append_attr (const string & name,
const string & type,
vector< string > * values 
)
-
-virtual
-
- -

Add an attribute to the table.

-

This version of append_attr() takes a vector<string> of values. If the given name already refers to an attribute, and the attribute has values, append the new values to the existing ones.

-

The function throws an Error if the attribute is a container, or if the type of the input value does not match the existing attribute's type. Use append_container() to add container attributes.

-

This method performs a simple search for name in this attribute table only; sub-tables are not searched and the dot notation is not recognized.

-
Returns
Returns the length of the added attribute value.
-
Parameters
- - - - -
nameThe name of the attribute to add or modify.
typeThe type of the attribute to add or modify.
valuesA vector of values. Note: The vector is COPIED, not stored.
-
-
- -

Definition at line 362 of file AttrTable.cc.

- -
-
- -

◆ append_container() [1/2]

- -
-
- - - - - -
- - - - - - - - -
AttrTable * libdap::AttrTable::append_container (const string & name)
-
-virtual
-
- -

Add a container to the attribute table.

-

Create and append an attribute container to this AttrTable. If this attribute table already contains an attribute container called name an exception is thrown. Return a pointer to the new container.

-
Parameters
- - -
nameThe name of the container to create.
-
-
-
Returns
A pointer to the new AttrTable object.
- -

Definition at line 410 of file AttrTable.cc.

- -
-
- -

◆ append_container() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
AttrTable * libdap::AttrTable::append_container (AttrTableat,
const string & name 
)
-
-virtual
-
- -

Add a container to the attribute table.

-

Append a new attribute container to this attribute table. The new container is at and its name is set to name. If this attribute table already contains an attribute container called name an exception is thrown.

-
Note
The value of name will override the name of at set using the set_name() method.
-
Parameters
- - - -
atA pointer to the new attribute table to append.
nameThe name of the new attribute table.
-
-
-
Returns
A pointer to the new AttrTable object.
- -

Definition at line 440 of file AttrTable.cc.

- -
-
- -

◆ attr_alias() [1/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool libdap::AttrTable::attr_alias (const string & alias,
AttrTableat,
const string & name 
)
-
-virtual
-
- -

Adds an alias to the set of attributes.

-

Once an alias is inserted into an attribute table, reading the attributes for alias will return those stored for name.

-

Two forms for this function exist: one searches for name in the AttrTable referenced by at while the other uses this. You can use DAS::get_attr_table() to get the attribute table for an arbitrary name.

-
See also
get_attr_table
-
Deprecated:
The current alias design is flawed. It is impossible to map this onto the XML implementation where the DAS and DDS information are combined in one object.
-
Parameters
- - - - -
aliasThe alias to insert into the attribute table.
nameThe name of the already-existing attribute to which the alias will refer.
atAn attribute table in which to insert the alias.
-
-
- -

Definition at line 1015 of file AttrTable.cc.

- -
-
- -

◆ attr_alias() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool libdap::AttrTable::attr_alias (const string & alias,
const string & name 
)
-
-virtual
-
-
Deprecated:
The current alias design is flawed. It is impossible to map this onto the XML implementation where the DAS and DDS information are combined in one object.
-
Parameters
- - - -
aliasThe alias to insert into the attribute table.
nameThe name of the already-existing attribute to which the alias will refer.
-
-
- -

Definition at line 1028 of file AttrTable.cc.

- -
-
- -

◆ attr_begin()

- -
-
- - - - - -
- - - - - - - -
AttrTable::Attr_iter libdap::AttrTable::attr_begin ()
-
-virtual
-
-

Get an iterator to the first entry in this attribute table.

Returns
Attr_iter; references the end of the array if empty list.
- -

Definition at line 711 of file AttrTable.cc.

- -
-
- -

◆ attr_end()

- -
-
- - - - - -
- - - - - - - -
AttrTable::Attr_iter libdap::AttrTable::attr_end ()
-
-virtual
-
-

Get an iterator to the end attribute table. Does not point to the last attribute in the table

Returns
Attr_iter
- -

Definition at line 719 of file AttrTable.cc.

- -
-
- -

◆ clone()

- -
-
- - - - - -
- - - - - - - - -
void libdap::AttrTable::clone (const AttrTableat)
-
-protected
-
-

Clone the given attribute table in this. Protected.

- -

Definition at line 160 of file AttrTable.cc.

- -
-
- -

◆ del_attr()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::AttrTable::del_attr (const string & name,
int i = -1 
)
-
-virtual
-
- -

Deletes an attribute.

-

Delete the attribute named name. If i is given, and the attribute has a vector value, delete the i$^th$ element of the vector.

-

You can use this function to delete container attributes, although the i parameter has no meaning for that operation.

-
Parameters
- - - -
nameThe name of the attribute to delete. This can be an attribute of any type, including containers. However, this method looks only in this attribute table and does not recognize the dot notation.
iIf the named attribute is a vector, and i is non-negative, the i-th entry in the vector is deleted, and the array is repacked. If i equals -1 (the default), the entire attribute is deleted.
-
-
- -

Definition at line 675 of file AttrTable.cc.

- -
-
- -

◆ del_attr_table()

- -
-
- - - - - -
- - - - - - - - -
AttrTable::Attr_iter libdap::AttrTable::del_attr_table (Attr_iter iter)
-
-virtual
-
-

Delete the iterator. Since AttrTable stores pointers to AttrTable objects, the caller should be sure to delete the AttrTable itself. The caller will gain control of the AttrTable* located at get_attr_table(iter) prior to this call.

-
Note
The original semantics of this methods were odd. The caller was responsible for deleting the AttrTable, but if they did that before calling this, then memory corruption would happen (because this code accesses a field of the table). If the caller did not delete the table, memory leaked. The only correct way to call the method was to grab the pointer, call this and then delete the pointer. I added a call to delete the contained AttrTable pointer, which changes the behavior of this, but probably in a way that will fix leaks in existing code. This change can be reverted by setting NEW_DEL_ATTR_TABLE_BEHAVIOR to false. jhrg 4/26/13
-
-calling this method invalidates the iterator iter.
-
Parameters
- - -
iterpoints to the entry to be deleted.
-
-
-
Returns
The Attr_iter for the element following iter
- -

Definition at line 781 of file AttrTable.cc.

- -
-
- -

◆ dump()

- -
-
- - - - - -
- - - - - - - - -
void libdap::AttrTable::dump (ostream & strm) const
-
-virtual
-
- -

dumps information about this object

-

Displays the pointer value of this instance and all attributes stored

-
Parameters
- - -
strmC++ i/o stream to dump the information to
-
-
-
Returns
void
- -

Implements libdap::DapObj.

- -

Definition at line 1510 of file AttrTable.cc.

- -
-
- -

◆ erase()

- -
-
- - - - - -
- - - - - - - -
void libdap::AttrTable::erase ()
-
-virtual
-
- -

Erase the attribute table.

-

Erase the entire attribute table. This returns an AttrTable to the empty state that's the same as the object generated by the null constructor.

- -

Definition at line 1036 of file AttrTable.cc.

- -
-
- -

◆ find()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::AttrTable::find (const string & target,
AttrTable ** at,
Attr_iter * iter 
)
-
-virtual
-
-

Look for an attribute or an attribute container. If used to search for an attribute container, this method returns the container's parent using the value-result parameter at and a reference to the container using the iterator value-result parameter iter. If used to search for an attribute, the attribute's container is returned using at; the attribute itself can be accessed using the iterator iter.

-
Parameters
- - - - -
targetThe name (using dot notation) of the attribute or container to find.
atA value-result used to return the attribute container in which target was found. Null if target was not found.
iterThe iterator which will reference the attribute found. Can be used to access target from within at. References dim_end() within at if the attribute or container does not exist.
-
-
- -

Definition at line 481 of file AttrTable.cc.

- -
-
- -

◆ find_container()

- -
-
- - - - - -
- - - - - - - - -
AttrTable * libdap::AttrTable::find_container (const string & target)
-
-virtual
-
- -

Find an attribute with a given name.

-

Look in this attribute table for an attribute container named target. The search starts at this attribute table; target should use the dot notation to name containers held within children of this attribute table.

-

To search the entire DAS object, make sure to invoke this method from that object.

-
Parameters
- - -
targetThe attribute container to find.
-
-
-
Returns
A pointer to the attribute table or null if the container cannot be found.
- -

Definition at line 566 of file AttrTable.cc.

- -
-
- -

◆ get_attr()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
string libdap::AttrTable::get_attr (Attr_iter iter,
unsigned int i = 0 
)
-
-virtual
-
-

Returns the value of an attribute. If the attribute has a vector value, you can indicate which is the desired value with the index argument, i. If the argument is omitted, the first value is returned. If the attribute has only a single value, the index argument is ignored. If i is greater than the number of elements in the attribute, an error is produced.

-

All values in an attribute table are stored as string data. They may be converted to a more appropriate internal format by the calling program.

-
Parameters
- - - -
iterReference to an attribute
iThe attribute value index, zero-based. Default value: 0
-
-
-
Returns
If the indicated attribute is a container, this function returns the string ``None''. If using a name to refer to the attribute and the named attribute does not exist, return the empty string.
- -

Definition at line 851 of file AttrTable.cc.

- -
-
- -

◆ get_attr_iter()

- -
-
- - - - - -
- - - - - - - - -
AttrTable::Attr_iter libdap::AttrTable::get_attr_iter (int i)
-
-virtual
-
-

Given an index i, return the Attr_iter to the corresponding element. This method provides a way to use all the methods that take an Attr_iter using a simple integer index. Use the get_attr_num() or get_size() methods to determine how many items the AttrTable contains.

-
Parameters
- - -
iThe index
-
-
-
Returns
The corresponding Attr_iter
-
See also
get_attr_num, get_size
- -

Definition at line 732 of file AttrTable.cc.

- -
-
- -

◆ get_attr_num() [1/2]

- -
-
- - - - - -
- - - - - - - - -
unsigned int libdap::AttrTable::get_attr_num (const string & name)
-
-virtual
-
- -

Get the number of attributes in this container.

-

If the indicated attribute is a container attribute, this function returns the number of attributes in its attribute table. If the indicated attribute is not a container, the method returns the number of values for the attribute (1 for a scalar attribute, N for a vector attribute value).

- -

Definition at line 634 of file AttrTable.cc.

- -
-
- -

◆ get_attr_num() [2/2]

- -
-
- - - - - -
- - - - - - - - -
unsigned int libdap::AttrTable::get_attr_num (Attr_iter iter)
-
-virtual
-
-

If the attribute referenced by iter is a container attribute, this method returns the number of attributes in its attribute table. If the indicated attribute is not a container, the method returns the number of values for the attribute (1 for a scalar attribute, N for a vector attribute value).

Parameters
- - -
iterReference to an attribute
-
-
-
Returns
The number of elements in the attribute.
- -

Definition at line 829 of file AttrTable.cc.

- -
-
- -

◆ get_attr_table() [1/2]

- -
-
- - - - - -
- - - - - - - - -
AttrTable * libdap::AttrTable::get_attr_table (const string & name)
-
-virtual
-
- -

Get an attribute container.

- -

Definition at line 607 of file AttrTable.cc.

- -
-
- -

◆ get_attr_table() [2/2]

- -
-
- - - - - -
- - - - - - - - -
AttrTable * libdap::AttrTable::get_attr_table (Attr_iter iter)
-
-virtual
-
-

Get the attribute container referenced by iter. If no such container exists, then return a reference to the end of the table.

Parameters
- - -
iterReference to a table contained by this object.
-
-
-
Returns
The child attribute table.
- -

Definition at line 757 of file AttrTable.cc.

- -
-
- -

◆ get_attr_type() [1/2]

- -
-
- - - - - -
- - - - - - - - -
AttrType libdap::AttrTable::get_attr_type (const string & name)
-
-virtual
-
- -

Get the type of an attribute.

-
Returns
The AttrType value describing the attribute.
- -

Definition at line 621 of file AttrTable.cc.

- -
-
- -

◆ get_attr_type() [2/2]

- -
-
- - - - - -
- - - - - - - - -
AttrType libdap::AttrTable::get_attr_type (Attr_iter iter)
-
-virtual
-
-

Get the type of the attribute referenced by iter.

Parameters
- - -
iter
-
-
-
Returns
The datatype of this attribute in an instance of AttrType.
- -

Definition at line 817 of file AttrTable.cc.

- -
-
- -

◆ get_attr_vector() [1/2]

- -
-
- - - - - -
- - - - - - - - -
vector< string > * libdap::AttrTable::get_attr_vector (const string & name)
-
-virtual
-
- -

Get a vector-valued attribute.

-

Get a pointer to the vector of values associated with the attribute referenced by Pix p or named name.

-

Note that all values in an attribute table are stored as string data. They may be converted to a more appropriate internal format by the calling program.

-
Returns
If the indicated attribute is a container, this function returns the null pointer. Otherwise returns a pointer to the the attribute vector value.
- -

Definition at line 653 of file AttrTable.cc.

- -
-
- -

◆ get_attr_vector() [2/2]

- -
-
- - - - - -
- - - - - - - - -
vector< string > * libdap::AttrTable::get_attr_vector (Attr_iter iter)
-
-virtual
-
-

Returns a pointer to the vector of values associated with the attribute referenced by iterator iter.

-

Note that all values in an attribute table are stored as string data. They may be converted to a more appropriate internal format by the calling program.

-
Parameters
- - -
iterReference to the Attribute.
-
-
-
Returns
If the indicated attribute is a container, this function returns the null pointer. Otherwise returns a pointer to the the attribute vector value.
- -

Definition at line 876 of file AttrTable.cc.

- -
-
- -

◆ get_name() [1/2]

- -
-
- - - - - -
- - - - - - - -
string libdap::AttrTable::get_name () const
-
-virtual
-
- -

Get the name of this attribute table.

-
Returns
A string containing the name.
- -

Definition at line 238 of file AttrTable.cc.

- -
-
- -

◆ get_name() [2/2]

- -
-
- - - - - -
- - - - - - - - -
string libdap::AttrTable::get_name (Attr_iter iter)
-
-virtual
-
-

Returns the name of the attribute referenced by iter.

- -

Definition at line 738 of file AttrTable.cc.

- -
-
- -

◆ get_parent()

- -
-
- - - - - -
- - - - - - - -
virtual AttrTable* libdap::AttrTable::get_parent () const
-
-inlinevirtual
-
-

Return a pointer to the AttrTable which holds this table (aka, its parent. If this AttrTable has no parent, this returns null.

Returns
A pointer to the parent AttrTable.
- -

Definition at line 274 of file AttrTable.h.

- -
-
- -

◆ get_size()

- -
-
- - - - - -
- - - - - - - -
unsigned int libdap::AttrTable::get_size () const
-
-virtual
-
- -

Get the number of entries in this attribute table.

-

Attributes that are containers count as one attribute, as do attributes with both scalar and vector values.

Returns
The number of entries.
- -

Definition at line 231 of file AttrTable.cc.

- -
-
- -

◆ get_type() [1/2]

- -
-
- - - - - -
- - - - - - - - -
string libdap::AttrTable::get_type (const string & name)
-
-virtual
-
- -

Get the type name of an attribute within this attribute table.

- -

Definition at line 613 of file AttrTable.cc.

- -
-
- -

◆ get_type() [2/2]

- -
-
- - - - - -
- - - - - - - - -
string libdap::AttrTable::get_type (Attr_iter iter)
-
-virtual
-
-

Get the type name of an attribute referenced by iter.

Parameters
- - -
iterReference to the Attribute.
-
-
-
Returns
A string with the name of this attribute datatype.
- -

Definition at line 808 of file AttrTable.cc.

- -
-
- -

◆ is_container()

- -
-
- - - - - -
- - - - - - - - -
bool libdap::AttrTable::is_container (Attr_iter i)
-
-virtual
-
-

Returns true if the attribute referenced by i is a container.

- -

Definition at line 746 of file AttrTable.cc.

- -
-
- -

◆ print() [1/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::AttrTable::print (FILE * out,
string pad = "    ",
bool dereference = false 
)
-
-virtual
-
- -

Prints the attribute table.

-

Prints an ASCII representation of the attribute table to the indicated FILE pointer. The pad argument is prefixed to each line of the output to provide control of indentation.

-
Parameters
- - - - -
outPrint to the given output FILE.
padIndent elements of a table using this string of spaces. By default this is a string of four spaces
dereferenceIf true, follow aliases. Default is false.
-
-
- -

Definition at line 1243 of file AttrTable.cc.

- -
-
- -

◆ print() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::AttrTable::print (ostream & out,
string pad = "    ",
bool dereference = false 
)
-
-virtual
-
- -

Prints the attribute table.

-

Prints an ASCII representation of the attribute table to the indicated output stream. The pad argument is prefixed to each line of the output to provide control of indentation.

-
Parameters
- - - - -
outPrint to the given output stream.
padIndent elements of a table using this string of spaces. By default this is a string of four spaces
dereferenceIf true, follow aliases. Default is false.
-
-
- -

Definition at line 1285 of file AttrTable.cc.

- -
-
- -

◆ print_dap4()

- -
-
- - - - - - - - -
void libdap::AttrTable::print_dap4 (XMLWriterxml)
-
-

Write the DAP4 XML representation for this attribute table. This method is used to build the DAP4 DMR response object.

-
Parameters
- - -
xmlAn XMLWriter that will do the serialization
-
-
- -

Definition at line 1498 of file AttrTable.cc.

- -
-
- -

◆ print_xml() [1/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::AttrTable::print_xml (FILE * out,
string pad = "    ",
bool constrained = false 
)
-
-virtual
-
-

Print the attribute table in XML.

Parameters
- - - - -
outDestination
padIndent lines of text/xml this much. Default is four spaces.
constrainedNot used
-
-
-
Deprecated:
- -

Definition at line 1313 of file AttrTable.cc.

- -
-
- -

◆ print_xml() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::AttrTable::print_xml (ostream & out,
string pad = "    ",
bool constrained = false 
)
-
-virtual
-
-
Deprecated:
- -

Definition at line 1378 of file AttrTable.cc.

- -
-
- -

◆ print_xml_writer()

- -
-
- - - - - - - - -
void libdap::AttrTable::print_xml_writer (XMLWriterxml)
-
-

Print the attribute table in XML.

Parameters
- - - - -
outDestination stream
padIndent lines of text/xml this much. Default is four spaces.
constrainedNot used
-
-
- -

Definition at line 1425 of file AttrTable.cc.

- -
-
- -

◆ recurrsive_find()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
AttrTable * libdap::AttrTable::recurrsive_find (const string & target,
Attr_iter * location 
)
-
-virtual
-
-

This method scans for attributes using recursion to look inside containers even when the name of the attribute is not fully qualified. It starts looking in itself and descends into its children depth first. It will find attributes and attribute containers.

-
Parameters
- - - -
targetLook for the attribute with this name.
locationA value-result parameter. This returns an iterator to the attribute within the returned AttrTable object
-
-
-
Returns
Returns a pointer to the AttrTable which holds target, or null if target is not found. In the latter case, the value of location is attr_end() for this AttrTable.
- -

Definition at line 513 of file AttrTable.cc.

- -
-
- -

◆ set_name()

- -
-
- - - - - -
- - - - - - - - -
void libdap::AttrTable::set_name (const string & n)
-
-virtual
-
- -

Set the name of this attribute table.

-
Parameters
- - -
nThe new name of the attribute table.
-
-
- -

Definition at line 245 of file AttrTable.cc.

- -
-
- -

◆ simple_find()

- -
-
- - - - - - - - -
AttrTable::Attr_iter libdap::AttrTable::simple_find (const string & target)
-
-

Look in this AttrTable for the attribute called name. If found return an Attr_iter which references it, otherwise return the end iterator for this AttrTable.

-
Parameters
- - -
targetThe name of the attribute.
-
-
-
Returns
An Attr_iter which references target.
- -

Definition at line 541 of file AttrTable.cc.

- -
-
- -

◆ simple_print() [1/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::AttrTable::simple_print (FILE * out,
string pad,
Attr_iter i,
bool dereference 
)
-
-protected
-
-

A simple printer that does nothing fancy with aliases. Protected.

- -

Definition at line 1103 of file AttrTable.cc.

- -
-
- -

◆ simple_print() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::AttrTable::simple_print (ostream & out,
string pad,
Attr_iter i,
bool dereference 
)
-
-protected
-
-

A simple printer that does nothing fancy with aliases. Protected.

- -

Definition at line 1173 of file AttrTable.cc.

- -
-
-
The documentation for this class was generated from the following files: -
-
- - - - diff --git a/html/classlibdap_1_1AttrTable.js b/html/classlibdap_1_1AttrTable.js deleted file mode 100644 index c7899e5db..000000000 --- a/html/classlibdap_1_1AttrTable.js +++ /dev/null @@ -1,62 +0,0 @@ -var classlibdap_1_1AttrTable = -[ - [ "entry", "structlibdap_1_1AttrTable_1_1entry.html", "structlibdap_1_1AttrTable_1_1entry" ], - [ "Attr_citer", "classlibdap_1_1AttrTable.html#a18087581e0377a852a029d4aa9d64a1e", null ], - [ "Attr_iter", "classlibdap_1_1AttrTable.html#a3647edf8906b672bad7a8c5ffc81d62a", null ], - [ "AttrTable", "classlibdap_1_1AttrTable.html#a09533d67357ad866f5e499f9eff2253e", null ], - [ "AttrTable", "classlibdap_1_1AttrTable.html#a709c15ac098ebf761aafff16945eea4a", null ], - [ "~AttrTable", "classlibdap_1_1AttrTable.html#ac1a2ad7a01b70b53a0995f63649e23b7", null ], - [ "add_container_alias", "classlibdap_1_1AttrTable.html#acd28a0951ff0764a6d740fbc30d3052f", null ], - [ "add_value_alias", "classlibdap_1_1AttrTable.html#a77971a429d7c23360fd41a4df177489c", null ], - [ "append_attr", "classlibdap_1_1AttrTable.html#a7a526505d174c7a2f33e6b57761f8bc4", null ], - [ "append_attr", "classlibdap_1_1AttrTable.html#a5b55410e211497f89ebcfad559920cbf", null ], - [ "append_container", "classlibdap_1_1AttrTable.html#a03f3a1197f9529d4c0328830c765cfe1", null ], - [ "append_container", "classlibdap_1_1AttrTable.html#aa731fefe3e52fb193f7f2b5a39e04a4d", null ], - [ "attr_alias", "classlibdap_1_1AttrTable.html#a2b9a67d2cc96dee860e6fb2d713a8252", null ], - [ "attr_alias", "classlibdap_1_1AttrTable.html#aaf0369980f799252f9f133390c8b4d79", null ], - [ "attr_begin", "classlibdap_1_1AttrTable.html#a8881bb7044577dae3098f4a1d8bf4f2f", null ], - [ "attr_end", "classlibdap_1_1AttrTable.html#a543955729bad6b7a9d1d6b336596b1ba", null ], - [ "clone", "classlibdap_1_1AttrTable.html#a4fa4213ffc8bd5ab96ff6ba148fd9eb1", null ], - [ "del_attr", "classlibdap_1_1AttrTable.html#a9c8feb09ec38a783817bcd2fbd3421c8", null ], - [ "del_attr_table", "classlibdap_1_1AttrTable.html#abcdd3b10325085a3dd345343df159e48", null ], - [ "dump", "classlibdap_1_1AttrTable.html#adf622bbd401676f089b194812bac7290", null ], - [ "erase", "classlibdap_1_1AttrTable.html#aad6a9557cc76cfb925e55077e0470859", null ], - [ "find", "classlibdap_1_1AttrTable.html#a33653c34e856e2e5fc0578240eb7a959", null ], - [ "find_container", "classlibdap_1_1AttrTable.html#ae403d070910c829f74a59fbf4648588f", null ], - [ "get_attr", "classlibdap_1_1AttrTable.html#a615b618bb2333da0d7114eec2101defe", null ], - [ "get_attr", "classlibdap_1_1AttrTable.html#a060eb65435ff7deb0905c640f17b35dc", null ], - [ "get_attr_iter", "classlibdap_1_1AttrTable.html#a8b9dd1020a256e884747e8ecf57c10a3", null ], - [ "get_attr_num", "classlibdap_1_1AttrTable.html#a1c86cb6c91dfdc37b9787828dd09483c", null ], - [ "get_attr_num", "classlibdap_1_1AttrTable.html#acd12f3bd820be114b3cc3dd97aad7d89", null ], - [ "get_attr_table", "classlibdap_1_1AttrTable.html#a4010172de5c41cd88f2422d5e1975522", null ], - [ "get_attr_table", "classlibdap_1_1AttrTable.html#afd8cf7a6bf36504f48eda8a6ff11a56c", null ], - [ "get_attr_type", "classlibdap_1_1AttrTable.html#aefcd82370930ba94a288f135d9417a93", null ], - [ "get_attr_type", "classlibdap_1_1AttrTable.html#a0893b78039439185dd39c69beaf0324e", null ], - [ "get_attr_vector", "classlibdap_1_1AttrTable.html#a7352d886789e9e38d530fc44c6cbef30", null ], - [ "get_attr_vector", "classlibdap_1_1AttrTable.html#a19f9153c5bad64f5bc783d493ffa0733", null ], - [ "get_name", "classlibdap_1_1AttrTable.html#aaaec827895fd8897594969159f1203e6", null ], - [ "get_name", "classlibdap_1_1AttrTable.html#ad7ce1789497599e99014696aa5afe736", null ], - [ "get_parent", "classlibdap_1_1AttrTable.html#ac5889e66ffa861ce098628de19840d89", null ], - [ "get_size", "classlibdap_1_1AttrTable.html#acdacb74f3a5f5c8ce7eb022562a8f971", null ], - [ "get_type", "classlibdap_1_1AttrTable.html#a689563c3beb8e6f571387c5105821f27", null ], - [ "get_type", "classlibdap_1_1AttrTable.html#abfdfb5b51ff84a41596ebf0f28ca77df", null ], - [ "is_container", "classlibdap_1_1AttrTable.html#a2ca5cf1e2aa163259b00affe49547a0d", null ], - [ "is_global_attribute", "classlibdap_1_1AttrTable.html#a68ab27e367c98769d9c3d98fc9c23ed4", null ], - [ "is_global_attribute", "classlibdap_1_1AttrTable.html#a6923d18999608d59c02883b12cb18788", null ], - [ "operator=", "classlibdap_1_1AttrTable.html#a5110c171d6fa7911f4022145f2ad9027", null ], - [ "print", "classlibdap_1_1AttrTable.html#acc2d83b4f1c8e704a6f83ff966a999c8", null ], - [ "print", "classlibdap_1_1AttrTable.html#a785014928633842a93352cc05038ea38", null ], - [ "print_dap4", "classlibdap_1_1AttrTable.html#a93a445b9e6fb665076834e99dd7e4a0e", null ], - [ "print_xml", "classlibdap_1_1AttrTable.html#a5e27ea09f83831eded1b3d86de7f4534", null ], - [ "print_xml", "classlibdap_1_1AttrTable.html#a21ee9e5f68e06fb698ef93553dcdc592", null ], - [ "print_xml_writer", "classlibdap_1_1AttrTable.html#ab85de16a14335a3c1b757ae271d13644", null ], - [ "recurrsive_find", "classlibdap_1_1AttrTable.html#aefdc93c9514013ebd644488cd8365924", null ], - [ "set_is_global_attribute", "classlibdap_1_1AttrTable.html#aadba23c830a02aa19c24c2a6f442dfd2", null ], - [ "set_is_global_attribute", "classlibdap_1_1AttrTable.html#abf6da8bcff87a1976c9227f801b36d47", null ], - [ "set_name", "classlibdap_1_1AttrTable.html#a3d09ff6bf5a12789308b20440dcaf302", null ], - [ "simple_find", "classlibdap_1_1AttrTable.html#ae7824f413ad036d91df0ef62cac14351", null ], - [ "simple_find_container", "classlibdap_1_1AttrTable.html#a6602967438b96bf1ba08e2b8195b9238", null ], - [ "simple_print", "classlibdap_1_1AttrTable.html#a1abee354d7f609ed55b849b0431bc48f", null ], - [ "simple_print", "classlibdap_1_1AttrTable.html#ae167683da221e8d64aaf2fab58dbf22f", null ], - [ "AttrTableTest", "classlibdap_1_1AttrTable.html#aaf41c5b6e5f9c13e92735511139b18b3", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1AttrTable__inherit__graph.map b/html/classlibdap_1_1AttrTable__inherit__graph.map deleted file mode 100644 index 83f79b9ba..000000000 --- a/html/classlibdap_1_1AttrTable__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/classlibdap_1_1AttrTable__inherit__graph.md5 b/html/classlibdap_1_1AttrTable__inherit__graph.md5 deleted file mode 100644 index 432934405..000000000 --- a/html/classlibdap_1_1AttrTable__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -0e31d28994b83c82d78a8777fcba4bb7 \ No newline at end of file diff --git a/html/classlibdap_1_1AttrTable__inherit__graph.png b/html/classlibdap_1_1AttrTable__inherit__graph.png deleted file mode 100644 index 76d5ef024862a9e007708cadff4e04fb867ec554..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56663 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 - - - - - - -libdap: Member List - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
libdap::BaseType Member List
-
-
- -

This is the complete list of members for libdap::BaseType, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
add_var(BaseType *bt, Part part=nil)libdap::BaseTypevirtual
add_var_nocopy(BaseType *bt, Part part=nil) (defined in libdap::BaseType)libdap::BaseTypevirtual
attributes()libdap::BaseTypevirtual
BaseType(const string &n, const Type &t, bool is_dap4=false)libdap::BaseType
BaseType(const string &n, const string &d, const Type &t, bool is_dap4=false)libdap::BaseType
BaseType(const BaseType &copy_from)libdap::BaseType
btp_stack typedef (defined in libdap::BaseType)libdap::BaseType
buf2val(void **val)=0libdap::BaseTypepure virtual
check_semantics(string &msg, bool all=false)libdap::BaseTypevirtual
clear_local_data()libdap::BaseTypeinlinevirtual
compute_checksum(Crc32 &checksum)=0libdap::BaseTypepure virtual
d4_ops(BaseType *b, int op)libdap::BaseTypevirtual
d_in_selection (defined in libdap::BaseType)libdap::BaseTypeprotected
d_is_synthesized (defined in libdap::BaseType)libdap::BaseTypeprotected
dataset() constlibdap::BaseTypevirtual
deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)libdap::BaseTypevirtual
deserialize(D4StreamUnMarshaller &um, DMR &dmr)libdap::BaseTypevirtual
dump(ostream &strm) constlibdap::BaseTypevirtual
element_count(bool leaves=false)libdap::BaseTypevirtual
FQN() constlibdap::BaseTypevirtual
get_attr_table()libdap::BaseTypevirtual
get_parent() constlibdap::BaseTypevirtual
intern_data(ConstraintEvaluator &eval, DDS &dds)libdap::BaseTypevirtual
intern_data()libdap::BaseTypevirtual
is_constructor_type() constlibdap::BaseTypevirtual
is_dap4() const (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
is_in_selection()libdap::BaseTypevirtual
is_simple_type() constlibdap::BaseTypevirtual
is_vector_type() constlibdap::BaseTypevirtual
length() constlibdap::BaseTypeinlinevirtual
m_duplicate(const BaseType &bt)libdap::BaseTypeprotected
name() constlibdap::BaseTypevirtual
operator=(const BaseType &rhs) (defined in libdap::BaseType)libdap::BaseType
ops(BaseType *b, int op)libdap::BaseTypevirtual
print_dap4(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
print_val(FILE *out, string space="", bool print_decl_p=true)libdap::BaseTypevirtual
print_val(ostream &out, string space="", bool print_decl_p=true)=0libdap::BaseTypepure virtual
print_xml(FILE *out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
print_xml(ostream &out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
print_xml_writer(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
ptr_duplicate()=0libdap::BaseTypepure virtual
read()libdap::BaseTypevirtual
read_p()libdap::BaseTypevirtual
send_p()libdap::BaseTypevirtual
serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)libdap::BaseTypevirtual
serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)libdap::BaseTypevirtual
set_attr_table(const AttrTable &at)libdap::BaseTypevirtual
set_attributes(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
set_attributes_nocopy(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
set_in_selection(bool state)libdap::BaseTypevirtual
set_is_dap4(const bool v) (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
set_length(int)libdap::BaseTypeinlinevirtual
set_name(const string &n)libdap::BaseTypevirtual
set_parent(BaseType *parent)libdap::BaseTypevirtual
set_read_p(bool state)libdap::BaseTypevirtual
set_send_p(bool state)libdap::BaseTypevirtual
set_synthesized_p(bool state)libdap::BaseTypevirtual
set_type(const Type &t)libdap::BaseTypevirtual
synthesized_p()libdap::BaseTypevirtual
toString()libdap::BaseTypevirtual
transfer_attributes(AttrTable *at)libdap::BaseTypevirtual
transform_to_dap2(AttrTable *parent_attr_table)libdap::BaseTypevirtual
transform_to_dap4(D4Group *root, Constructor *container)libdap::BaseTypevirtual
type() constlibdap::BaseTypevirtual
type_name() constlibdap::BaseTypevirtual
val2buf(void *val, bool reuse=false)=0libdap::BaseTypepure virtual
var(const string &name="", bool exact_match=true, btp_stack *s=0)libdap::BaseTypevirtual
var(const string &name, btp_stack &s)libdap::BaseTypevirtual
width(bool constrained=false) constlibdap::BaseTypevirtual
~BaseType() (defined in libdap::BaseType)libdap::BaseTypevirtual
~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
-
- - - - diff --git a/html/classlibdap_1_1BaseType.html b/html/classlibdap_1_1BaseType.html deleted file mode 100644 index 80a123c1e..000000000 --- a/html/classlibdap_1_1BaseType.html +++ /dev/null @@ -1,3007 +0,0 @@ - - - - - - - -libdap: libdap::BaseType Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
- -
- -

The basic data type for the DODS DAP types. - More...

- -

#include <BaseType.h>

-
-Inheritance diagram for libdap::BaseType:
-
-
Inheritance graph
- - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -

-Public Types

-typedef stack< BaseType * > btp_stack
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

virtual void add_var (BaseType *bt, Part part=nil)
 Add a variable. More...
 
-virtual void add_var_nocopy (BaseType *bt, Part part=nil)
 
 BaseType (const string &n, const Type &t, bool is_dap4=false)
 The BaseType constructor. More...
 
 BaseType (const string &n, const string &d, const Type &t, bool is_dap4=false)
 The BaseType constructor. More...
 
 BaseType (const BaseType &copy_from)
 The BaseType copy constructor. More...
 
virtual bool check_semantics (string &msg, bool all=false)
 Compare an object's current state with the semantics of its type. More...
 
virtual void clear_local_data ()
 
virtual bool d4_ops (BaseType *b, int op)
 Evaluator a relop for DAP4. More...
 
virtual string dataset () const
 Returns the name of the dataset used to create this instance. More...
 
virtual void dump (ostream &strm) const
 dumps information about this object More...
 
virtual int element_count (bool leaves=false)
 Count the members of constructor types. More...
 
virtual std::string FQN () const
 
virtual AttrTableget_attr_table ()
 
virtual BaseTypeget_parent () const
 
virtual bool is_constructor_type () const
 Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable. More...
 
-virtual bool is_dap4 () const
 
virtual bool is_in_selection ()
 Is this variable part of the current selection? More...
 
virtual bool is_simple_type () const
 Returns true if the instance is a numeric, string or URL type variable. More...
 
virtual bool is_vector_type () const
 Returns true if the instance is a vector (i.e., array) type variable. More...
 
virtual int length () const
 How many elements are in this variable. More...
 
virtual string name () const
 Returns the name of the class instance. More...
 
-BaseTypeoperator= (const BaseType &rhs)
 
virtual bool ops (BaseType *b, int op)
 Evaluate relational operators. More...
 
virtual void print_dap4 (XMLWriter &xml, bool constrained=false)
 
virtual void print_decl (FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
 Print an ASCII representation of the variable structure. More...
 
virtual void print_decl (ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
 Print an ASCII representation of the variable structure. More...
 
virtual void print_xml (FILE *out, string space=" ", bool constrained=false)
 
virtual void print_xml (ostream &out, string space=" ", bool constrained=false)
 
virtual void print_xml_writer (XMLWriter &xml, bool constrained=false)
 
virtual BaseTypeptr_duplicate ()=0
 
virtual bool read ()
 Read data into a local buffer. More...
 
virtual bool read_p ()
 Has this variable been read? More...
 
virtual bool send_p ()
 Should this variable be sent? More...
 
virtual void set_attr_table (const AttrTable &at)
 
virtual void set_in_selection (bool state)
 
-virtual void set_is_dap4 (const bool v)
 
virtual void set_length (int)
 Set the number of elements for this variable. More...
 
virtual void set_name (const string &n)
 Sets the name of the class instance. More...
 
virtual void set_parent (BaseType *parent)
 
virtual void set_read_p (bool state)
 Sets the value of the read_p property. More...
 
virtual void set_send_p (bool state)
 
virtual void set_synthesized_p (bool state)
 
virtual void set_type (const Type &t)
 Sets the type of the class instance. More...
 
virtual bool synthesized_p ()
 
virtual string toString ()
 
virtual void transfer_attributes (AttrTable *at)
 
virtual std::vector< BaseType * > * transform_to_dap2 (AttrTable *parent_attr_table)
 DAP4 to DAP2 transform. More...
 
virtual void transform_to_dap4 (D4Group *root, Constructor *container)
 DAP2 to DAP4 transform. More...
 
virtual Type type () const
 Returns the type of the class instance. More...
 
virtual string type_name () const
 Returns the type of the class instance as a string. More...
 
virtual BaseTypevar (const string &name="", bool exact_match=true, btp_stack *s=0)
 Returns a pointer to a member of a constructor class. More...
 
virtual BaseTypevar (const string &name, btp_stack &s)
 
virtual unsigned int width (bool constrained=false) const
 How many bytes does this variable use Return the number of bytes of storage this variable uses. For scalar types, this is pretty simple (an int32 uses 4 bytes, etc.). For arrays and Constructors, it is a bit more complex. Note that a scalar String variable uses sizeof(String*) bytes, not the length of the string value. The width() of a String array returns the number of elements in the array times sizeof(String*). More...
 
virtual D4Attributesattributes ()
 
-virtual void set_attributes (D4Attributes *)
 
-virtual void set_attributes_nocopy (D4Attributes *)
 
Abstract Methods
virtual unsigned int buf2val (void **val)=0
 Reads the class data. More...
 
virtual unsigned int val2buf (void *val, bool reuse=false)=0
 Loads class data. More...
 
virtual void intern_data (ConstraintEvaluator &eval, DDS &dds)
 
virtual bool serialize (ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
 Move data to the net, then remove them from the object. More...
 
virtual void compute_checksum (Crc32 &checksum)=0
 include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum. More...
 
virtual void intern_data ()
 Read data into this variable. More...
 
virtual void serialize (D4StreamMarshaller &m, DMR &dmr, bool filter=false)
 The DAP4 serialization method. Serialize a variable's values for DAP4. This does not write the DMR persistent representation but does write that part of the binary data blob that holds a variable's data. Once a variable's data are serialized, that memory is reclaimed (by calling BaseType::clear_local_data()) More...
 
virtual bool deserialize (UnMarshaller &um, DDS *dds, bool reuse=false)
 Receive data from the net. More...
 
virtual void deserialize (D4StreamUnMarshaller &um, DMR &dmr)
 
virtual void print_val (FILE *out, string space="", bool print_decl_p=true)
 Prints the value of the variable. More...
 
virtual void print_val (ostream &out, string space="", bool print_decl_p=true)=0
 Prints the value of the variable. More...
 
- - - - -

-Protected Member Functions

void m_duplicate (const BaseType &bt)
 Perform a deep copy. More...
 
- - - - - -

-Protected Attributes

-bool d_in_selection
 
-bool d_is_synthesized
 
-

Detailed Description

-

The basic data type for the DODS DAP types.

-

This defines the basic data type features for the DODS data access protocol (DAP) data types. All the DAP type classes (Float64, Array, etc.) subclass it. This class is an abstract one; no variables will ever be stored as BaseType instances, only as instances of its child classes.

-

These classes and their methods give a user the capacity to set up sophisticated data types. They do not provide sophisticated ways to access and use this data. On the server side, in many cases, the class instances will have no data in them at all until the serialize function is called to send data to the client. On the client side, most DAP application programs will unpack the data promptly into whatever local data structure the programmer deems the most useful.

-

In order to use these classes on the server side of a DAP client/server connection, you must write a read method for each of the data types you expect to encounter in the application. This function, whose purpose is to read data from a local source into the class instance data buffer, is called in serialize, when the data is about to be sent to the client. The read function may be called earlier, in the case of data subset requests (constraint expressions) whose evaluation requires it. (For example, the constraint expression ``a,b&b>c'' requires that c be read even though it will not be sent.)

-

For some data types, the read function must be aware of the constraints to be returned. These cautions are outlined where they occur.

-
Note
This class is ued by both DAP2 and DAP4.
- -

Definition at line 117 of file BaseType.h.

-

Constructor & Destructor Documentation

- -

◆ BaseType() [1/3]

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
libdap::BaseType::BaseType (const string & n,
const Typet,
bool is_dap4 = false 
)
-
- -

The BaseType constructor.

-

The BaseType constructor needs a name and a type. The BaseType class exists to provide data to type classes that inherit from it. The constructors of those classes call the BaseType constructor; it is never called directly.

-
Parameters
- - - - -
nA string containing the name of the new variable.
tThe type of the variable.
is_dap4True if this is a DAP4 variable. Default is False
-
-
-
See also
Type
- -

Definition at line 126 of file BaseType.cc.

- -
-
- -

◆ BaseType() [2/3]

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
libdap::BaseType::BaseType (const string & n,
const string & d,
const Typet,
bool is_dap4 = false 
)
-
- -

The BaseType constructor.

-

The BaseType constructor needs a name, a dataset, and a type. The BaseType class exists to provide data to type classes that inherit from it. The constructors of those classes call the BaseType constructor; it is never called directly.

-
Parameters
- - - - - -
nA string containing the name of the new variable.
dA string containing the dataset name.
tThe type of the variable. Default is False
is_dap4True if this is a DAP4 variable.
-
-
-
See also
Type
- -

Definition at line 144 of file BaseType.cc.

- -
-
- -

◆ BaseType() [3/3]

- -
-
- - - - - - - - -
libdap::BaseType::BaseType (const BaseTypecopy_from)
-
- -

The BaseType copy constructor.

- -

Definition at line 151 of file BaseType.cc.

- -
-
-

Member Function Documentation

- -

◆ add_var()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::BaseType::add_var (BaseTypebt,
Part part = nil 
)
-
-virtual
-
- -

Add a variable.

-

Adds a variable to an instance of a constructor class, such as Array, Structure et cetera. This function is only used by those classes. For constructors with more than one variable, the variables appear in the same order in which they were added (i.e., the order in which add_var() was called). Since this method is only for use by Vectors and Constructors, the BaseType implementation throws InternalErr.

-
Note
For the implementation of this method in Structure, Sequence, et c., first copy bt and then insert the copy. If bt is itself a constructor type you must either use the var() method to get a pointer to the actual instance added to *this or you must first add all of bt's children to it before adding it to *this. The implementations should use m_duplicate() to perform a deep copy of bt.
-
Todo:
We should get rid of the Part parameter and adopt the convention that the first variable is the Array and all subsequent ones are Maps (when dealing with a Grid, the only time Part matters). This would enable several methods to migrate from Structure, Sequence and Grid to Constructor.
-
Parameters
- - - -
btThe variable to be added to this instance. The caller of this method must free memory it allocates for v. This method will make a deep copy of the object pointed to by v.
partThe part of the constructor data to be modified. Only meaningful for Grid variables.
-
-
-
See also
Part
- -

Reimplemented in libdap::Vector, libdap::Array, libdap::Grid, and libdap::Constructor.

- -

Definition at line 815 of file BaseType.cc.

- -
-
- -

◆ attributes()

- -
-
- - - - - -
- - - - - - - -
D4Attributes * libdap::BaseType::attributes ()
-
-virtual
-
-

DAP4 Attribute methods

- -

Definition at line 599 of file BaseType.cc.

- -
-
- -

◆ buf2val()

- -
-
- - - - - -
- - - - - - - - -
virtual unsigned int libdap::BaseType::buf2val (void ** val)
-
-pure virtual
-
- -

Reads the class data.

-

Reads the class data into the memory referenced by val. The caller should either allocate enough storage to val to hold the class data or set *val to null. If *val is NULL, memory will be allocated by this function with new(). If the memory is allocated this way, the caller is responsible for deallocating that memory. Array and values for simple types are stored as C would store an array.

-
Deprecated:
Use value() in the leaf classes.
-
Parameters
- - -
valA pointer to a pointer to the memory into which the class data will be copied. If the value pointed to is NULL, memory will be allocated to hold the data, and the pointer value modified accordingly. The calling program is responsible for deallocating the memory references by this pointer.
-
-
-
Returns
The size (in bytes) of the information copied to val.
- -

Implemented in libdap::Vector, libdap::D4Enum, libdap::Constructor, libdap::Str, libdap::Int32, libdap::Byte, libdap::Float32, libdap::Float64, libdap::UInt32, libdap::Int16, libdap::UInt16, and libdap::D4Opaque.

- -
-
- -

◆ check_semantics()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool libdap::BaseType::check_semantics (string & msg,
bool all = false 
)
-
-virtual
-
- -

Compare an object's current state with the semantics of its type.

-

This function checks the class instance for internal consistency. This is important to check for complex constructor classes. For BaseType, an object is semantically correct if it has both a non-null name and type.

-

For example, an Int32 instance would return FALSE if it had no name or no type defined. A Grid instance might return FALSE for more complex reasons, such as having Map arrays of the wrong size or shape.

-

This function is used by the DDS class, and will rarely, if ever, be explicitly called by a DODS application program. A variable must pass this test before it is sent, but there may be many other stages in a retrieve operation where it would fail.

-
Returns
Returns FALSE when the current state violates some aspect of the type semantics, TRUE otherwise.
-
Parameters
- - - -
msgA returned string, containing a message indicating the source of any problem.
allFor complex constructor types (Grid, Sequence, Structure), this flag indicates whether to check the semantics of the member variables, too.
-
-
-
See also
DDS::check_semantics
- -

Reimplemented in libdap::Array, libdap::Vector, libdap::Grid, and libdap::Constructor.

- -

Definition at line 1209 of file BaseType.cc.

- -
-
- -

◆ clear_local_data()

- -
-
- - - - - -
- - - - - - - -
virtual void libdap::BaseType::clear_local_data ()
-
-inlinevirtual
-
-

Remove any read or set data in the private data of the variable, setting read_p() to false. Used to clear any dynamically allocated storage that holds (potentially large) data. For the simple types, this no-op version is all that's needed. Vector and some other classes define a special version and have serialize() implementations that call it to free data as soon as possible after sending it.

-
Note
Added 7/5/15 jhrg
-
-Any specialization of this should make sure to reset the read_p property.
- -

Reimplemented in libdap::Sequence, libdap::Vector, libdap::D4Sequence, and libdap::D4Opaque.

- -

Definition at line 179 of file BaseType.h.

- -
-
- -

◆ compute_checksum()

- -
-
- - - - - -
- - - - - - - - -
virtual void libdap::BaseType::compute_checksum (Crc32checksum)
-
-pure virtual
-
- -

include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum.

-
Parameters
- - -
checksumA Crc32 instance that holds the current checksum.
-
-
- -

Implemented in libdap::Vector, libdap::D4Enum, libdap::Constructor, libdap::Str, libdap::Int32, libdap::Byte, libdap::Float32, libdap::Float64, libdap::UInt32, libdap::Int16, libdap::UInt16, libdap::D4Opaque, libdap::Int64, libdap::UInt64, and libdap::Int8.

- -
-
- -

◆ d4_ops()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool libdap::BaseType::d4_ops (BaseTypeb,
int op 
)
-
-virtual
-
- -

Evaluator a relop for DAP4.

-

This method is used by the filter expression evaluation code in DAP4. Each of the 'data type' classes that support relops must overload this method. In an expression of the form arg1 op arg2, this object is arg1, the parameter 'b' is arg2 and op is the relational operator.

-
Note
I used the same relop codes for DAP4 as in the DAP2 parser/scanner which makes for some coupling between them, but cuts way down on the duplication of the evaluator logic, which is somewhat involved.
-
Parameters
- - - -
bThe second argument in the relational expression
opThe infix relational operator
-
-
-
Returns
True if the expression is true, False otherwise.
- -

Reimplemented in libdap::Str, libdap::Int32, libdap::Float32, libdap::Byte, libdap::Float64, libdap::Int16, libdap::Int64, libdap::UInt64, and libdap::Int8.

- -

Definition at line 1282 of file BaseType.cc.

- -
-
- -

◆ dataset()

- -
-
- - - - - -
- - - - - - - -
string libdap::BaseType::dataset () const
-
-virtual
-
- -

Returns the name of the dataset used to create this instance.

-

A dataset from which the data is to be read. The meaning of this string will vary among different types of data sources. It may be the name of a data file or an identifier used to read data from a relational database.

- -

Definition at line 358 of file BaseType.cc.

- -
-
- -

◆ deserialize() [1/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
bool libdap::BaseType::deserialize (UnMarshallerum,
DDSdds,
bool reuse = false 
)
-
-virtual
-
- -

Receive data from the net.

-

Receives data from the network connection identified by the source parameter. The data is put into the class data buffer according to the input dds.

-

This function is only used on the client side of the DODS client/server connection.

-
Parameters
- - - - -
umAn UnMarshaller that knows how to deserialize data types
ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure. This would have been received from the server in an earlier transmission.
reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect.
-
-
-
Returns
Always returns TRUE.
-
Exceptions
- - -
Errorwhen a problem reading from the UnMarshaller is found.
-
-
-
See also
DDS
- -

Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, libdap::Constructor, libdap::Str, libdap::Int32, libdap::Byte, libdap::Float32, libdap::Float64, libdap::UInt32, libdap::Int16, libdap::UInt16, and libdap::D4Opaque.

- -

Definition at line 943 of file BaseType.cc.

- -
-
- -

◆ deserialize() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::BaseType::deserialize (D4StreamUnMarshallerum,
DMRdmr 
)
-
-virtual
-
-

The DAP4 deserialization method.

Parameters
- - - -
um
dmr
-
-
-
Exceptions
- - -
Erroror InternalErr
-
-
- -

Reimplemented in libdap::D4Sequence, libdap::Vector, libdap::D4Enum, libdap::D4Group, libdap::Constructor, libdap::Str, libdap::Int32, libdap::Byte, libdap::Float32, libdap::Float64, libdap::UInt32, libdap::Int16, libdap::UInt16, libdap::D4Opaque, libdap::Int64, libdap::UInt64, and libdap::Int8.

- -

Definition at line 955 of file BaseType.cc.

- -
-
- -

◆ dump()

- -
-
- - - - - -
- - - - - - - - -
void libdap::BaseType::dump (ostream & strm) const
-
-virtual
-
- -

dumps information about this object

-

Displays the pointer value of this instance and then displays information about this base type.

-
Parameters
- - -
strmC++ i/o stream to dump the information to
-
-
-
Returns
void
- -

Implements libdap::DapObj.

- -

Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Array, libdap::Vector, libdap::Grid, libdap::D4Enum, libdap::Constructor, libdap::Str, libdap::Int32, libdap::Structure, libdap::D4Opaque, libdap::Float32, libdap::Byte, libdap::Float64, libdap::Int16, libdap::UInt32, libdap::UInt16, libdap::Int64, libdap::UInt64, and libdap::Int8.

- -

Definition at line 291 of file BaseType.cc.

- -
-
- -

◆ element_count()

- -
-
- - - - - -
- - - - - - - - -
int libdap::BaseType::element_count (bool leaves = false)
-
-virtual
-
- -

Count the members of constructor types.

-

Return a count of the total number of variables in this variable. This is used to count the number of variables held by a constructor variable - for simple type and vector variables it always returns 1.

-

For compound data types, there are two ways to count members. You can count the members, or you can count the simple members and add that to the count of the compound members. For example, if a Structure contains an Int32 and another Structure that itself contains two Int32 members, the element count of the top-level structure could be two (one Int32 and one Structure) or three (one Int32 by itself and two Int32's in the subsidiary Structure). Use the leaves parameter to control which kind of counting you desire.

-
Returns
Returns 1 for simple types. For compound members, the count depends on the leaves argument.
-
Parameters
- - -
leavesThis parameter is only relevant if the object contains other compound data types. If FALSE, the function counts only the data variables mentioned in the object's declaration. If TRUE, it counts the simple members, and adds that to the sum of the counts for the compound members. This parameter has no effect for simple type variables.
-
-
- -

Reimplemented in libdap::Vector, and libdap::Constructor.

- -

Definition at line 443 of file BaseType.cc.

- -
-
- -

◆ FQN()

- -
-
- - - - - -
- - - - - - - -
string libdap::BaseType::FQN () const
-
-virtual
-
-

Return the FQN for this variable. This will include the D4 Group component of the name.

-
Returns
The FQN in a string
- -

Reimplemented in libdap::D4Group, and libdap::Constructor.

- -

Definition at line 332 of file BaseType.cc.

- -
-
- -

◆ get_attr_table()

- -
-
- - - - - -
- - - - - - - -
AttrTable & libdap::BaseType::get_attr_table ()
-
-virtual
-
-

Get this variable's AttrTable. It's generally a bad idea to return a reference to a contained object, but in this case it seems that building an interface inside BaseType is overkill.

-

Use the AttrTable methods to manipulate the table.

- -

Definition at line 582 of file BaseType.cc.

- -
-
- -

◆ get_parent()

- -
-
- - - - - -
- - - - - - - -
BaseType * libdap::BaseType::get_parent () const
-
-virtual
-
-

Return a pointer to the Constructor or Vector which holds (contains) this variable. If this variable is at the top level, this method returns null.

-
Returns
A BaseType pointer to the variable's parent.
- -

Definition at line 751 of file BaseType.cc.

- -
-
- -

◆ intern_data() [1/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::BaseType::intern_data (ConstraintEvaluatoreval,
DDSdds 
)
-
-virtual
-
-

Similar to using serialize() and deserialize() together in one object. Data are read as for serialize and those values are stored in the objects as deserialize() does but does not write and then read data to/from a stream.

-

This method is defined by the various data type classes. It calls the read() abstract method. Unlike serialize(), this method does not clear the memory use to hold the data values, so the caller should make sure to delete the DDS or the variable as soon as possible.

-
Parameters
- - - -
evalUse this as the constraint expression evaluator.
ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
-
-
- -

Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, and libdap::Constructor.

- -

Definition at line 908 of file BaseType.cc.

- -
-
- -

◆ intern_data() [2/2]

- -
-
- - - - - -
- - - - - - - -
void libdap::BaseType::intern_data ()
-
-virtual
-
- -

Read data into this variable.

-
Parameters
- - - -
evalEvaluator for a constraint expression
dmrDMR for the whole dataset
-
-
- -

Reimplemented in libdap::D4Sequence, libdap::Vector, libdap::D4Group, and libdap::Constructor.

- -

Definition at line 927 of file BaseType.cc.

- -
-
- -

◆ is_constructor_type()

- -
-
- - - - - -
- - - - - - - -
bool libdap::BaseType::is_constructor_type () const
-
-virtual
-
- -

Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable.

-
Returns
True if the instance is a Structure, Sequence or Grid, False otherwise.
- -

Definition at line 412 of file BaseType.cc.

- -
-
- -

◆ is_in_selection()

- -
-
- - - - - -
- - - - - - - -
bool libdap::BaseType::is_in_selection ()
-
-virtual
-
- -

Is this variable part of the current selection?

-

Does this variable appear in either the selection part or as a function argument in the current constrain expression. If this property is set (true) then implementations of the read() method should read this variable.

-
Note
This method does not check, nor does it know about the semantics of, string arguments passed to functions. Those functions might include variable names in strings; they are responsible for reading those variables. See the grid (func_grid_select()) for an example.
-
See also
BaseType::read()
- -

Definition at line 703 of file BaseType.cc.

- -
-
- -

◆ is_simple_type()

- -
-
- - - - - -
- - - - - - - -
bool libdap::BaseType::is_simple_type () const
-
-virtual
-
- -

Returns true if the instance is a numeric, string or URL type variable.

-
Returns
True if the instance is a scalar numeric, String or URL variable, False otherwise. Arrays (even of simple types) return False.
-
See also
is_vector_type()
- -

Definition at line 393 of file BaseType.cc.

- -
-
- -

◆ is_vector_type()

- -
-
- - - - - -
- - - - - - - -
bool libdap::BaseType::is_vector_type () const
-
-virtual
-
- -

Returns true if the instance is a vector (i.e., array) type variable.

-
Returns
True if the instance is an Array, False otherwise.
- -

Definition at line 402 of file BaseType.cc.

- -
-
- -

◆ length()

- -
-
- - - - - -
- - - - - - - -
virtual int libdap::BaseType::length () const
-
-inlinevirtual
-
- -

How many elements are in this variable.

-
Todo:
change the return type to int64_t
-
Returns
The number of elements; 1 for scalars
- -

Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, libdap::Str, and libdap::D4Opaque.

- -

Definition at line 207 of file BaseType.h.

- -
-
- -

◆ m_duplicate()

- -
-
- - - - - -
- - - - - - - - -
void libdap::BaseType::m_duplicate (const BaseTypebt)
-
-protected
-
- -

Perform a deep copy.

-

Perform a deep copy. Copies the values of bt into *this. Pointers are dereferenced and their values are copied into a newly allocated instance.

-
Parameters
- - -
btThe source object.
-
-
- -

Definition at line 86 of file BaseType.cc.

- -
-
- -

◆ name()

- -
-
- - - - - -
- - - - - - - -
string libdap::BaseType::name () const
-
-virtual
-
- -

Returns the name of the class instance.

- -

Definition at line 320 of file BaseType.cc.

- -
-
- -

◆ ops()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool libdap::BaseType::ops (BaseTypeb,
int op 
)
-
-virtual
-
- -

Evaluate relational operators.

-

This method contains the relational operators used by the constraint expression evaluator in the DDS class. Each class that wants to be able to evaluate relational expressions must overload this function. The implementation in BaseType throws an InternalErr exception. The DAP library classes Byte, ..., Url provide specializations of this method. It is not meaningful for classes such as Array because relational expressions using Array are not supported.

-

The op argument refers to a table generated by bison from the constraint expression parser. Use statements like the following to correctly interpret its value:

-
switch (op) {
-    case EQUAL: return i1 == i2;
-    case NOT_EQUAL: return i1 != i2;
-    case GREATER: return i1 > i2;
-    case GREATER_EQL: return i1 >= i2;
-    case LESS: return i1 < i2;
-    case LESS_EQL: return i1 <= i2;
-    case REGEXP: throw Error("Regular expressions are not supported for integer values");
-    default: throw Error("Unknown operator");
-}
-

This function is used by the constraint expression evaluator.

-
Parameters
- - - -
bCompare the value of this instance with b.
opAn integer index indicating which relational operator is implied. Choose one from the following: EQUAL, NOT_EQUAL, GREATER, GREATER_EQL, LESS, LESS_EQL, and REGEXP.
-
-
-
Returns
The boolean value of the comparison.
-
See also
BaseType::d4_ops(BaseType *, int)
- -

Reimplemented in libdap::D4Enum, libdap::Str, libdap::Int32, libdap::Float32, libdap::Byte, libdap::Float64, libdap::UInt32, libdap::D4Opaque, libdap::Int16, libdap::UInt16, libdap::Int64, libdap::UInt64, and libdap::Int8.

- -

Definition at line 1256 of file BaseType.cc.

- -
-
- -

◆ print_dap4()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::BaseType::print_dap4 (XMLWriterxml,
bool constrained = false 
)
-
-virtual
-
-

Write the DAP4 XML representation for this variable. This method is used to build the DAP4 DMR response object.

-
Parameters
- - - -
xmlAn XMLWriter that will do the serialization
constrainedTrue if the response should show the variables subject to the current constraint expression.
-
-
- -

Reimplemented in libdap::Array, libdap::D4Group, and libdap::Constructor.

- -

Definition at line 1164 of file BaseType.cc.

- -
-
- -

◆ print_decl() [1/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::BaseType::print_decl (FILE * out,
string space = "    ",
bool print_semi = true,
bool constraint_info = false,
bool constrained = false 
)
-
-virtual
-
- -

Print an ASCII representation of the variable structure.

-

Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

-

A simple array declaration might look like this:

Float64 lat[lat = 180];
-

While a more complex declaration (for a Grid, in this case), would look like this:

Grid {
-ARRAY:
-Int32 sst[time = 404][lat = 180][lon = 360];
-MAPS:
-Float64 time[time = 404];
-Float64 lat[lat = 180];
-Float64 lon[lon = 360];
-} sst;
-
Parameters
- - - - - - -
outThe output stream on which to print the declaration.
spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
-
-
-
See also
DDS
-
-DDS::CE
- -

Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

- -

Definition at line 1003 of file BaseType.cc.

- -
-
- -

◆ print_decl() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::BaseType::print_decl (ostream & out,
string space = "    ",
bool print_semi = true,
bool constraint_info = false,
bool constrained = false 
)
-
-virtual
-
- -

Print an ASCII representation of the variable structure.

-

Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

-

A simple array declaration might look like this:

Float64 lat[lat = 180];
-

While a more complex declaration (for a Grid, in this case), would look like this:

Grid {
-ARRAY:
-Int32 sst[time = 404][lat = 180][lon = 360];
-MAPS:
-Float64 time[time = 404];
-Float64 lat[lat = 180];
-Float64 lon[lon = 360];
-} sst;
-
Parameters
- - - - - - -
outThe output stream on which to print the declaration.
spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
-
-
-
See also
DDS
-
-DDS::CE
- -

Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

- -

Definition at line 1054 of file BaseType.cc.

- -
-
- -

◆ print_val() [1/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::BaseType::print_val (FILE * out,
string space = "",
bool print_decl_p = true 
)
-
-virtual
-
- -

Prints the value of the variable.

-

Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

-
Parameters
- - - - -
outThe output stream on which to print the value.
spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
-
-
- -

Reimplemented in libdap::Sequence, libdap::Array, libdap::Grid, libdap::Constructor, libdap::Str, libdap::Int32, libdap::Byte, libdap::Float32, libdap::Float64, libdap::UInt32, libdap::Int16, libdap::UInt16, and libdap::D4Opaque.

- -

Definition at line 1090 of file BaseType.cc.

- -
-
- -

◆ print_val() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
virtual void libdap::BaseType::print_val (ostream & out,
string space = "",
bool print_decl_p = true 
)
-
-pure virtual
-
- -

Prints the value of the variable.

-

Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

-
Parameters
- - - - -
outThe output ostream on which to print the value.
spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
-
-
- -

Implemented in libdap::D4Sequence, libdap::Sequence, libdap::Array, libdap::D4Enum, libdap::Grid, libdap::Constructor, libdap::Str, libdap::Int32, libdap::Float32, libdap::Byte, libdap::Float64, libdap::UInt32, libdap::Int16, libdap::D4Opaque, libdap::UInt16, libdap::Int64, libdap::UInt64, and libdap::Int8.

- -
-
- -

◆ print_xml() [1/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::BaseType::print_xml (FILE * out,
string space = "    ",
bool constrained = false 
)
-
-virtual
-
-

Write the XML representation of this variable. This method is used to build the DDX XML response.

Parameters
- - - - -
outDestination.
spaceUse this to indent child declarations. Default is "".
constrainedIf true, only print this if it's part part of the current projection. Default is False.
-
-
-
Deprecated:
- -

Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

- -

Definition at line 1105 of file BaseType.cc.

- -
-
- -

◆ print_xml() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::BaseType::print_xml (ostream & out,
string space = "    ",
bool constrained = false 
)
-
-virtual
-
-

Write the XML representation of this variable. This method is used to build the DDX XML response.

Parameters
- - - - -
outDestination output stream
spaceUse this to indent child declarations. Default is "".
constrainedIf true, only print this if it's part part of the current projection. Default is False.
-
-
-
Deprecated:
- -

Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

- -

Definition at line 1120 of file BaseType.cc.

- -
-
- -

◆ print_xml_writer()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::BaseType::print_xml_writer (XMLWriterxml,
bool constrained = false 
)
-
-virtual
-
-

Write the XML representation of this variable. This method is used to build the DDX XML response.

Parameters
- - - - -
outDestination output stream
spaceUse this to indent child declarations. Default is "".
constrainedIf true, only print this if it's part part of the current projection. Default is False.
-
-
- -

Reimplemented in libdap::Array, libdap::D4Enum, libdap::Grid, and libdap::Constructor.

- -

Definition at line 1134 of file BaseType.cc.

- -
-
- -

◆ ptr_duplicate()

- -
-
- - - - - -
- - - - - - - -
virtual BaseType* libdap::BaseType::ptr_duplicate ()
-
-pure virtual
-
-

Clone this instance. Allocate a new instance and copy *this into it. This method must perform a deep copy.

@note This method should \e not copy data values, but must copy all
-other fields in the object.
-
Returns
A newly allocated copy of this.
- -

Implemented in libdap::Sequence, libdap::Array, libdap::D4Sequence, libdap::Grid, libdap::Vector, libdap::D4Enum, libdap::Structure, libdap::Url, libdap::Int32, libdap::D4Group, libdap::Byte, libdap::Str, libdap::Float32, libdap::Float64, libdap::Int16, libdap::UInt32, libdap::Int64, libdap::UInt16, libdap::UInt64, libdap::Int8, and libdap::D4Opaque.

- -
-
- -

◆ read()

- -
-
- - - - - -
- - - - - - - -
bool libdap::BaseType::read ()
-
-virtual
-
- -

Read data into a local buffer.

-

This method should be implemented for each of the data type classes (Byte, ..., Grid) when using the DAP class library to build a server. This method is only for DAP servers. The library provides a default definition here which throws an InternalErr exception unless the read_p property has been set. In that case it returns false, indicating that all the data have been read. The latter case can happen when building a constant value that needs to be passed to a function. The variable/constant is loaded with a value when it is created.

-

When implementing a new DAP server, the Byte, ..., Grid data type classes are usually specialized. In each of those specializations read() should be defined to read values from the data source and store them in the object's local buffer. The read() method is called by other methods in this library. When writing read(), follow these rules:

-
    -
  • -read() should throw Error if it encounters an error. The message should be verbose enough to be understood by someone running a client on a different machine.
  • -
  • -The value(s) should be read if and only if either send_p() or is_in_selection() return true. If neither of these return true, the value(s) should not be read. This is important when writing read() for a Constructor type such as Grid where a client may ask for only the map vectors (and thus reading the much larger Array part is not needed).
  • -
  • -For each specialization of read(), the method should first test the value of the read_p property (using the read_p() method) and read values only if the value of read_p() is false. Once the read() method reads data and stores it in the instance, it must set the value of the read_p property to true using set_read_p(). If your read() methods fail to do this data may not serialize correctly.
  • -
  • -The Array::read() and Grid::read() methods should take into account any restrictions on Array sizes.
  • -
  • -If you are writing Sequence::read(), be sure to check the documentation for Sequence::read_row() and Sequence::serialize() so you understand how Sequence::read() is being called.
  • -
  • -

    For Sequence::read(), your specialization must correctly manage the unsent_data property and row count in addition to the read_p property (handle the read_p property as describe above). For a Sequence to serialize correctly, once all data from the Sequence has been read, unsent_data property must be set to false (use Sequence::set_unsent_data()). Also, at that time the row number counter must be reset (use Sequence::reset_row_counter()). Typically the correct time to set unsent_data to false and reset the row counter is the time when Sequence::read() return false indicating that all the data for the Sequence have been read. Failure to handle these tasks will break serialization of nested Sequences. Note that when Sequence::read() returns with a result of true (indicating there is more data to send, the value of the unsent_data property should be true.

    -

    Also, if you server must handle nested sequences, be sure to read about subclassing set_read_p().

    -
  • -
-
Todo:
Modify the D4 serialize code so that it supports the true/false behavior of read() for arrays.
-
Todo:
Modify all of the stock handlers so they conform to this!
-
Returns
False means more data remains to be read, True indicates that no more data need to be read. For Sequence and D4Sequence, this method will generally read one instance of the Sequence; for other types it will generally read the entire variable modulo any limitations due to a constraint. However, the library should be written so that read can return less than all of the data for a variable - serialize() would then call the function until it returns True.
-
See also
BaseType
- -

Reimplemented in libdap::Constructor.

- -

Definition at line 899 of file BaseType.cc.

- -
-
- -

◆ read_p()

- -
-
- - - - - -
- - - - - - - -
bool libdap::BaseType::read_p ()
-
-virtual
-
- -

Has this variable been read?

-

Returns true if the value(s) for this variable have been read from the data source, otherwise returns false. This method is used to determine when values need to be read using the read() method. When read_p() returns true, this library assumes that buf2val() (and other methods such as get_vec()) can be used to access the value(s) of a variable.

-
Returns
True if the variable's value(s) have been read, false otherwise.
- -

Definition at line 480 of file BaseType.cc.

- -
-
- -

◆ send_p()

- -
-
- - - - - -
- - - - - - - -
bool libdap::BaseType::send_p ()
-
-virtual
-
- -

Should this variable be sent?

-

Returns the state of the send_p property. If true, this variable should be sent to the client, if false, it should not. If no constraint expression (CE) has been evaluated, this property is true for all variables in a data source (i.e., for all the variables listed in a DDS). If a CE has been evaluated, this property is true only for those variables listed in the projection part of the CE.

-
Returns
True if the variable should be sent to the client, false otherwise.
- -

Definition at line 554 of file BaseType.cc.

- -
-
- -

◆ serialize() [1/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool libdap::BaseType::serialize (ConstraintEvaluatoreval,
DDSdds,
Marshallerm,
bool ce_eval = true 
)
-
-virtual
-
- -

Move data to the net, then remove them from the object.

-

Sends the data from the indicated (local) dataset through the connection identified by the Marshaller parameter. If the data is not already incorporated into the DDS object, read the data from the dataset. Once the data are sent (written to the Marshaller), they are deleted from the object and the object state is reset so that they will be read again if the read() method is called.

-

This function is only used on the server side of the client/server connection, and is generally only called from the ResponseBuilder functions. It has no BaseType implementation; each datatype child class supplies its own implementation.

@param eval Use this as the constraint expression evaluator.
-
Parameters
- - - - -
ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
mA marshaller used to serialize data types
ce_evalA boolean value indicating whether to evaluate the DODS constraint expression that may accompany this dataset. The constraint expression is stored in the dds.
-
-
-
Returns
This method always returns true. Older versions used the return value to signal success or failure.
-
Note
We changed the default behavior of this method so that it calls BaseType::clear_local_data() once the values are sent. This, combined with the behavior that read() is called by this method just before data are sent, means that data for any given variable remain in memory for the shortest time possible. Furthermore, since variables are serialized one at a time, no more than one variable's data will be in memory at any given time when using the default behavior. Some code - code that uses intern_data() or server functions - might alter this default behavior. Only Array (i.e. Vector), Sequence, D4Sequence and D4Opaque types actually hold data in dynamically allocated memory, so sonly those types have the new/changed behavior. This change was made on 7/5/15.
-
Exceptions
- - - -
InternalErr.
Error.
-
-
-
See also
DDS
- -

Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, libdap::Constructor, libdap::Str, libdap::Int32, libdap::Byte, libdap::Float32, libdap::Float64, libdap::UInt32, libdap::Int16, libdap::UInt16, and libdap::D4Opaque.

- -

Definition at line 937 of file BaseType.cc.

- -
-
- -

◆ serialize() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void libdap::BaseType::serialize (D4StreamMarshallerm,
DMRdmr,
bool filter = false 
)
-
-virtual
-
- -

The DAP4 serialization method. Serialize a variable's values for DAP4. This does not write the DMR persistent representation but does write that part of the binary data blob that holds a variable's data. Once a variable's data are serialized, that memory is reclaimed (by calling BaseType::clear_local_data())

-
Parameters
- - - - - -
m
dmr
eval
filterTrue if there is one variable that should be 'filtered'
-
-
-
Exceptions
- - -
Erroror InternalErr
-
-
- -

Reimplemented in libdap::D4Sequence, libdap::Vector, libdap::D4Enum, libdap::D4Group, libdap::Constructor, libdap::Str, libdap::Int32, libdap::Byte, libdap::Float32, libdap::Float64, libdap::UInt32, libdap::Int16, libdap::UInt16, libdap::D4Opaque, libdap::Int64, libdap::UInt64, and libdap::Int8.

- -

Definition at line 949 of file BaseType.cc.

- -
-
- -

◆ set_attr_table()

- -
-
- - - - - -
- - - - - - - - -
void libdap::BaseType::set_attr_table (const AttrTableat)
-
-virtual
-
-

Set this variable's attribute table.

Parameters
- - -
atSource of the attributes.
-
-
- -

Definition at line 590 of file BaseType.cc.

- -
-
- -

◆ set_in_selection()

- -
-
- - - - - -
- - - - - - - - -
void libdap::BaseType::set_in_selection (bool state)
-
-virtual
-
-

Set the in_selection property to state. This property indicates that the variable is used as a parameter to a constraint expression function or that it appears as an argument in a selection sub-expression. If set (true), implementations of the BaseType::read() method should read this variable.

-
Parameters
- - -
stateSet the in_selection property to this state.
-
-
-
See also
BaseType::read()
-
-BaseType::is_in_selection() for more information.
- -

Reimplemented in libdap::Constructor.

- -

Definition at line 718 of file BaseType.cc.

- -
-
- -

◆ set_length()

- -
-
- - - - - -
- - - - - - - - -
virtual void libdap::BaseType::set_length (int )
-
-inlinevirtual
-
- -

Set the number of elements for this variable.

-
Todo:
change param type to int64_t
-
Parameters
- - -
lThe number of elements
-
-
- -

Reimplemented in libdap::D4Sequence, and libdap::Vector.

- -

Definition at line 214 of file BaseType.h.

- -
-
- -

◆ set_name()

- -
-
- - - - - -
- - - - - - - - -
void libdap::BaseType::set_name (const string & n)
-
-virtual
-
- -

Sets the name of the class instance.

- -

Reimplemented in libdap::Vector.

- -

Definition at line 344 of file BaseType.cc.

- -
-
- -

◆ set_parent()

- -
-
- - - - - -
- - - - - - - - -
void libdap::BaseType::set_parent (BaseTypeparent)
-
-virtual
-
-

Set the parent property for this variable.

-
Note
Added ability to set parent to null. 10/19/12 jhrg
-
Parameters
- - -
parentPointer to the Constructor of Vector parent variable or null if the variable has no parent (if it is at the top-level of a DAP2/3 DDS).
-
-
-
Exceptions
- - -
InternalErrthrown if called with anything other than a Constructor, Vector or Null.
-
-
- -

Definition at line 733 of file BaseType.cc.

- -
-
- -

◆ set_read_p()

- -
-
- - - - - -
- - - - - - - - -
void libdap::BaseType::set_read_p (bool state)
-
-virtual
-
- -

Sets the value of the read_p property.

-

Sets the value of the read_p property. This indicates that the value(s) of this variable has/have been read. An implementation of the read() method should use this to set the read_p property to true.

-
Note
If the is_synthesized property is true, this method will not alter the is_read property. If you need that behavior, specialize the method in your subclasses if the various types.
-
-For most of the types the default implementation of this method is fine. However, if you're building a server which must handle data represented using nested sequences, then you may need to provide a specialization of Sequence::set_read_p(). By default Sequence::set_read_p() recursively sets the read_p property for all child variables to state. For servers where one Sequence reads an outer set of values and another reads an inner set, this is cumbersome. In such a case, it is easier to specialize Sequence::set_read_p() so that it does not recursively set the read_p property for the inner Sequence. Be sure to see the documentation for the read() method!
-
Todo:
Look at making synthesized variables easier to implement and at making them more integrated into the overall CE evaluation process. Maybe the code that computes the synthesized var's value should be in the that variable's read() method? This might provide a way to get rid of the awkward 'projection functions' by replacing them with real children of BaseType. It would also provide a way to clean up the way the synthesized_p prop intrudes on the read_p prop.
-
See also
BaseType::read()
-
Parameters
- - -
stateSet the read_p property to this state.
-
-
- -

Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

- -

Definition at line 516 of file BaseType.cc.

- -
-
- -

◆ set_send_p()

- -
-
- - - - - -
- - - - - - - - -
void libdap::BaseType::set_send_p (bool state)
-
-virtual
-
-

Sets the value of the send_p flag. This function is meant to be called from within the constraint evaluator of other code which determines that this variable should be returned to the client. Data are ready to be sent when both the d_is_send and d_is_read flags are set to TRUE.

-
Parameters
- - -
stateThe logical state to set the send_p flag.
-
-
- -

Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

- -

Definition at line 568 of file BaseType.cc.

- -
-
- -

◆ set_synthesized_p()

- -
-
- - - - - -
- - - - - - - - -
void libdap::BaseType::set_synthesized_p (bool state)
-
-virtual
-
-

Set the synthesized flag. Before setting this flag be sure to set the read_p() state. Once this flag is set you cannot alter the state of the read_p flag!

-
See also
synthesized_p()
- -

Definition at line 463 of file BaseType.cc.

- -
-
- -

◆ set_type()

- -
-
- - - - - -
- - - - - - - - -
void libdap::BaseType::set_type (const Typet)
-
-virtual
-
- -

Sets the type of the class instance.

- -

Definition at line 372 of file BaseType.cc.

- -
-
- -

◆ synthesized_p()

- -
-
- - - - - -
- - - - - - - -
bool libdap::BaseType::synthesized_p ()
-
-virtual
-
-

Returns true if the variable is a synthesized variable. A synthesized variable is one that is added to the dataset by the server (usually with a `projection function'.

- -

Definition at line 452 of file BaseType.cc.

- -
-
- -

◆ toString()

- -
-
- - - - - -
- - - - - - - -
string libdap::BaseType::toString ()
-
-virtual
-
-

Write out the object's internal fields in a string. To be used for debugging when regular inspection w/ddd or gdb isn't enough.

-
Returns
A string which shows the object's internal stuff.
- -

Reimplemented in libdap::Sequence.

- -

Definition at line 184 of file BaseType.cc.

- -
-
- -

◆ transfer_attributes()

- -
-
- - - - - -
- - - - - - - - -
void libdap::BaseType::transfer_attributes (AttrTableat_container)
-
-virtual
-
-

Transfer attributes from a DAS object into this variable. Because of the rough history of the DAS object and the way that various server code built the DAS, this is necessarily a heuristic process. The intent is that this method will be overridden by handlers that need to look for certain patterns in the DAS (e.g., hdf4's odd variable_dim_n; where n = 0, 1, 2, ...) attribute containers.

-

There should be a one-to-one mapping between variables and attribute containers. However, in some cases one variable has attributes spread across several top level containers and in some cases one container is used by several variables

-
Note
This method is technically unnecessary because a server (or client) can easily add attributes directly using the DDS::get_attr_table or BaseType::get_attr_table methods and then poke values in using any of the methods AttrTable provides. This method exists to ease the transition to DDS objects which contain attribute information for the existing servers (Since they all make DAS objects separately from the DDS). They could be modified to use the same AttrTable methods but operate on the AttrTable instances in a DDS/BaseType instead of those in a DAS.
-
Parameters
- - -
at_containerTransfer attributes from this container.
-
-
-
Returns
void
- -

Reimplemented in libdap::Grid, and libdap::Constructor.

- -

Definition at line 644 of file BaseType.cc.

- -
-
- -

◆ transform_to_dap2()

- -
-
- - - - - -
- - - - - - - - -
std::vector< BaseType * > * libdap::BaseType::transform_to_dap2 (AttrTableparent_attr_table)
-
-virtual
-
- -

DAP4 to DAP2 transform.

-

For the current BaseType, return a DAP2 'copy' of the variable.

-
Note
For most DAP4 types, in this implementation of DAP2 the corresponding DAP4 type is the same. These types have a different representations in DAP2 and DAP4: Sequences (which are D4Sequences in the DAP4 implementation),
    -
  • Grids (which are semantically subsumed by coverages in DAP4)
  • -
  • Arrays (which use shared dimensions in DAP4)
  • -
-
-

Additionally DAP4 adds the following types:

    -
  • UInt8, Int8, and Char which map to Byte in DAP2.
  • -
  • Int64, Unit64 which have no natural representation in DAP2.
  • -
  • Opaque Possible Byte stuff[] plus metadata?
  • -
  • Enum's can be represented as Int32.
  • -
  • Groups, with the exception of the root group "disappear" into the names of their member variables. Specifically the Group name is add as a prefix followed by a "/" separator to the names of all of the Group's member groups variables.
  • -
-
Parameters
- - -
TheAttrTable pointer parent_attr_table is used by Groups, which disappear from the DAP2 representation. Their children are returned in the the BAseType vector their attributes are added to parent_attr_table;
-
-
-
Returns
A pointer to a vector of BaseType pointers (right?). In most cases this vector will contain a single pointer but DAP4 types 'disappear' such as Group will return all of their member variables in the vector. DAP4 types with no representation in DAP2 (ex: UInt64) the will return a NULL pointer and so this must be tested!
- -

Reimplemented in libdap::Array, libdap::D4Enum, libdap::D4Group, libdap::D4Opaque, libdap::Byte, libdap::Structure, libdap::Int64, libdap::UInt64, and libdap::Int8.

- -

Definition at line 259 of file BaseType.cc.

- -
-
- -

◆ transform_to_dap4()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void libdap::BaseType::transform_to_dap4 (D4Grouproot,
Constructorcontainer 
)
-
-virtual
-
- -

DAP2 to DAP4 transform.

-

For the current BaseType, return a DAP4 'copy' of the variable.

-
Note
For most DAP2 types, in this implementation of DAP4 the corresponding DAP4 type is the same. The different types are Sequences (which are D4Sequences in the DAP4 implementation), Grids (which are coverages) and Arrays (which use shared dimensions).
-
Parameters
- - - -
rootThe root group that should hold this new variable. Add Group-level stuff here (e.g., D4Dimensions).
containerAdd the new variable to this container.
-
-
-
Returns
A pointer to the transformed variable
- -

Reimplemented in libdap::Sequence, libdap::Array, libdap::Grid, libdap::Structure, and libdap::Constructor.

- -

Definition at line 216 of file BaseType.cc.

- -
-
- -

◆ type()

- -
-
- - - - - -
- - - - - - - -
Type libdap::BaseType::type () const
-
-virtual
-
- -

Returns the type of the class instance.

- -

Definition at line 365 of file BaseType.cc.

- -
-
- -

◆ type_name()

- -
-
- - - - - -
- - - - - - - -
string libdap::BaseType::type_name () const
-
-virtual
-
- -

Returns the type of the class instance as a string.

- -

Definition at line 379 of file BaseType.cc.

- -
-
- -

◆ val2buf()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
virtual unsigned int libdap::BaseType::val2buf (void * val,
bool reuse = false 
)
-
-pure virtual
-
- -

Loads class data.

-

Store the value pointed to by val in the object's internal buffer. This function does not perform any checks, so users must be sure that the thing pointed to can actually be stored in the object's buffer.

-

Only simple objects (Int, Float, Byte, and so on) and arrays of these simple objects may be stored using this function. To put data into more complex constructor types, use the functions provided by that class.

-
Deprecated:
Use set_value() in the leaf classes.
-
Parameters
- - - -
valA pointer to the data to be inserted into the class data buffer.
reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect. This is currently used only in the Vector class.
-
-
-
Returns
The size (in bytes) of the information copied from val.
-
See also
Grid
-
-Vector::val2buf
- -

Implemented in libdap::Vector, libdap::D4Enum, libdap::Constructor, libdap::Str, libdap::Int32, libdap::Byte, libdap::Float32, libdap::Float64, libdap::UInt32, libdap::Int16, libdap::UInt16, and libdap::D4Opaque.

- -
-
- -

◆ var() [1/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
BaseType * libdap::BaseType::var (const string & name = "",
bool exact_match = true,
btp_stack * s = 0 
)
-
-virtual
-
- -

Returns a pointer to a member of a constructor class.

-

Returns a pointer to the contained variable in a composite class. The composite classes are those made up of aggregated simple data types. Array, Grid, and Structure are composite types, while Int and Float are simple types. This function is only used by composite classes. The BaseType implementation always returns null.

-

Several of the subclasses provide alternate access methods that make sense for that particular data type. For example, the Array class defines a *var(int i) method that returns the ith entry in the Array data, and the Structure provides a *var(Vars_iter) function using a pseudo-index to access the different members of the structure.

-
Parameters
- - - - -
nameThe name of the class member. Defaults to ""
exact_matchTrue if only interested in variables whose full names match n exactly. If false, returns the first variable whose name matches name. For example, if name is x and point.x is a variable, then var("x", false) would return a BaseType pointer to point.x. If exact_match was true then name would need to be "point.x" for var to return that pointer. This feature simplifies constraint expressions for datasets which have complex, nested, constructor variables. Defaults to true.
sRecord the path to name. Defaults to null, in which case it is not used.
-
-
-
Returns
A pointer to the member named in the n argument. If no name is given, the function returns the first (only) variable. For example, an Array has only one variable, while a Structure can have many.
- -

Reimplemented in libdap::Vector, and libdap::Constructor.

- -

Definition at line 758 of file BaseType.cc.

- -
-
- -

◆ var() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
BaseType * libdap::BaseType::var (const string & name,
btp_stack & s 
)
-
-virtual
-
-

This version of var(...) searches for name and returns a pointer to the BaseType object if found. It uses the same search algorithm as BaseType::var(const string &, bool, btp_stack *) when exact_match is false. In addition to returning a pointer to the variable, it pushes onto s a BaseType pointer to each constructor type that ultimately contains name.

-
Note
The BaseType implementation always returns null. There are no default values for the parameters. If var() is called w/o any params, the three parameter version will be used.
-
Deprecated:
This method is deprecated because it tries first to use exact_match and, if that fails, then tries leaf_match. It's better to use the alternate form of var(...) and specify exactly what you'd like to do.
-
Returns
A pointer to the named variable.
- -

Reimplemented in libdap::Vector, and libdap::Constructor.

- -

Definition at line 780 of file BaseType.cc.

- -
-
- -

◆ width()

- -
-
- - - - - -
- - - - - - - - -
unsigned int libdap::BaseType::width (bool constrained = false) const
-
-virtual
-
- -

How many bytes does this variable use Return the number of bytes of storage this variable uses. For scalar types, this is pretty simple (an int32 uses 4 bytes, etc.). For arrays and Constructors, it is a bit more complex. Note that a scalar String variable uses sizeof(String*) bytes, not the length of the string value. The width() of a String array returns the number of elements in the array times sizeof(String*).

-
Parameters
- - -
constrainedShould the current constraint be taken into account?
-
-
-
Returns
Bytes of storage
- -

Reimplemented in libdap::Vector, libdap::D4Enum, libdap::Int32, libdap::Str, libdap::Float32, libdap::Constructor, libdap::Byte, libdap::Float64, libdap::UInt32, libdap::Int16, libdap::Int64, libdap::UInt16, libdap::UInt64, libdap::Int8, and libdap::D4Opaque.

- -

Definition at line 1299 of file BaseType.cc.

- -
-
-
The documentation for this class was generated from the following files: -
-
- - - - diff --git a/html/classlibdap_1_1BaseType.js b/html/classlibdap_1_1BaseType.js deleted file mode 100644 index a3b8484ba..000000000 --- a/html/classlibdap_1_1BaseType.js +++ /dev/null @@ -1,75 +0,0 @@ -var classlibdap_1_1BaseType = -[ - [ "btp_stack", "classlibdap_1_1BaseType.html#ae9c6e71855b90a0e552713011c9ab81f", null ], - [ "BaseType", "classlibdap_1_1BaseType.html#af4a9a00892a89fea323acbc391aeef32", null ], - [ "BaseType", "classlibdap_1_1BaseType.html#a3100d033d3d321486f0f2939fcb2b14a", null ], - [ "BaseType", "classlibdap_1_1BaseType.html#ae11f0e6e4286438aad85bf01dba8ddfd", null ], - [ "~BaseType", "classlibdap_1_1BaseType.html#a78afe1ba971edce362b0f0360ad7a86f", null ], - [ "add_var", "classlibdap_1_1BaseType.html#adca3c2621c4a509537c18362005d7f7f", null ], - [ "add_var_nocopy", "classlibdap_1_1BaseType.html#aa1192360cea4dc516c822cd3e13dc723", null ], - [ "attributes", "classlibdap_1_1BaseType.html#a97452f06d2188eb838399a709246b5e9", null ], - [ "buf2val", "classlibdap_1_1BaseType.html#accb15b7411e1988ef0a085ebdc88ce5d", null ], - [ "check_semantics", "classlibdap_1_1BaseType.html#aec503abec2fd3090e7738c0a575491f8", null ], - [ "clear_local_data", "classlibdap_1_1BaseType.html#aaddb97a4efbe035f41deaf03c6e8683f", null ], - [ "compute_checksum", "classlibdap_1_1BaseType.html#adacd263e05baa44861eec811037dee05", null ], - [ "d4_ops", "classlibdap_1_1BaseType.html#a512a356f31ed6c4c1a368da0b054408a", null ], - [ "dataset", "classlibdap_1_1BaseType.html#a47521ce321a17e6ce217870cb6a1a7aa", null ], - [ "deserialize", "classlibdap_1_1BaseType.html#a1f27d99250e857efd86ac9db788bbf1b", null ], - [ "deserialize", "classlibdap_1_1BaseType.html#a10101e702d03e2a30ebecc341ebc7a08", null ], - [ "dump", "classlibdap_1_1BaseType.html#adea4e1a5116f488343825c9657e92ffe", null ], - [ "element_count", "classlibdap_1_1BaseType.html#a5c2235737737b482bfa7536b8aeab810", null ], - [ "FQN", "classlibdap_1_1BaseType.html#a977cb954cc8f0d914d6f66ea0f48a9e3", null ], - [ "get_attr_table", "classlibdap_1_1BaseType.html#a1fcd9537c67e3bf88964b2656ff5bac1", null ], - [ "get_parent", "classlibdap_1_1BaseType.html#a3459cdaa239c33ce111ef360d8dc3017", null ], - [ "intern_data", "classlibdap_1_1BaseType.html#a722d33783aa0272d339b0301a4f77e59", null ], - [ "intern_data", "classlibdap_1_1BaseType.html#a1956e6ea90a745516f5372c859173433", null ], - [ "is_constructor_type", "classlibdap_1_1BaseType.html#a8b8490e0047c6da52945699a132008ea", null ], - [ "is_dap4", "classlibdap_1_1BaseType.html#a7f6835cb5e5589ab5dad3fb4813d3bea", null ], - [ "is_in_selection", "classlibdap_1_1BaseType.html#ae302ab2ec26e9fc5b575bf5d3d09aa5c", null ], - [ "is_simple_type", "classlibdap_1_1BaseType.html#aae57e5b270b3a015d40c8db10b9b5549", null ], - [ "is_vector_type", "classlibdap_1_1BaseType.html#a7107c76dbcab71015141142383b6d022", null ], - [ "length", "classlibdap_1_1BaseType.html#aadcda7a659157bc6a832d8a5fb775b3f", null ], - [ "m_duplicate", "classlibdap_1_1BaseType.html#a0c55b826c8c5dfe7a454dc670e859a41", null ], - [ "name", "classlibdap_1_1BaseType.html#a24c5d67823b3cff7f4245a993072a142", null ], - [ "operator=", "classlibdap_1_1BaseType.html#a03e4440b91a651f16d17c3baf6812ebd", null ], - [ "ops", "classlibdap_1_1BaseType.html#a8a0000be2a244e3e07abda3020af8800", null ], - [ "print_dap4", "classlibdap_1_1BaseType.html#afcddbe441380b95c894510c02980b163", null ], - [ "print_decl", "classlibdap_1_1BaseType.html#a2d799fad93255d7f2b803562ae7a5784", null ], - [ "print_decl", "classlibdap_1_1BaseType.html#afd744b0ddeb04e7b173c9e83423ec572", null ], - [ "print_val", "classlibdap_1_1BaseType.html#afb5e13838a599ec0efe2adbb2ae18f47", null ], - [ "print_val", "classlibdap_1_1BaseType.html#a94edd5b610afb1432144158740710488", null ], - [ "print_xml", "classlibdap_1_1BaseType.html#a825820edee179550cfde3dfd4d274f2a", null ], - [ "print_xml", "classlibdap_1_1BaseType.html#a8bd2c7682edd48c64b210bdf247bdef7", null ], - [ "print_xml_writer", "classlibdap_1_1BaseType.html#a11554ff931528b243e9af8173d205b44", null ], - [ "ptr_duplicate", "classlibdap_1_1BaseType.html#a0b130311c9901fb8a7ab11ea19090ef0", null ], - [ "read", "classlibdap_1_1BaseType.html#a1da003c53f2e663223f603ab3fbd7c8e", null ], - [ "read_p", "classlibdap_1_1BaseType.html#a38ff819a432217c55db2e9071928d20c", null ], - [ "send_p", "classlibdap_1_1BaseType.html#a980c0013817836aa77ef74aeec7fb192", null ], - [ "serialize", "classlibdap_1_1BaseType.html#adc24a735977e28acb0e6f78667c1dd21", null ], - [ "serialize", "classlibdap_1_1BaseType.html#a30331db8b6a7cdc843652376fa683b71", null ], - [ "set_attr_table", "classlibdap_1_1BaseType.html#a572a1d76a75981abac83a4241e90c0fa", null ], - [ "set_attributes", "classlibdap_1_1BaseType.html#ad4dda4cf43dca838d3de183b8e01cd09", null ], - [ "set_attributes_nocopy", "classlibdap_1_1BaseType.html#afd0e5f87d19020f560d5c1ff8dd4d6a3", null ], - [ "set_in_selection", "classlibdap_1_1BaseType.html#a2bc036248cdaf1affac464170f32ad30", null ], - [ "set_is_dap4", "classlibdap_1_1BaseType.html#abca9ddaa9a1ada8447cbe7193e8e288a", null ], - [ "set_length", "classlibdap_1_1BaseType.html#a4fe343c1eeb6fb1d61ab030433651d90", null ], - [ "set_name", "classlibdap_1_1BaseType.html#a86504564f45a3e6748c6f1cc0ff4e9fa", null ], - [ "set_parent", "classlibdap_1_1BaseType.html#a5b6a39f6ce6594fa74f3fc899ac9a966", null ], - [ "set_read_p", "classlibdap_1_1BaseType.html#a4533905a450d2a7af32e7d5acd557676", null ], - [ "set_send_p", "classlibdap_1_1BaseType.html#aba7b27635c95b74536de18393133628e", null ], - [ "set_synthesized_p", "classlibdap_1_1BaseType.html#a595cb4059cff24f801a1b6da79bd2f9e", null ], - [ "set_type", "classlibdap_1_1BaseType.html#af74f8d1ef57c9fcca46f620f75d175a3", null ], - [ "synthesized_p", "classlibdap_1_1BaseType.html#ae64e677da27249473cdba0b60cdbb90a", null ], - [ "toString", "classlibdap_1_1BaseType.html#a701eb3361f5b5628329ece019cd34519", null ], - [ "transfer_attributes", "classlibdap_1_1BaseType.html#add8e836c622042a339152a6c31e5bdfb", null ], - [ "transform_to_dap2", "classlibdap_1_1BaseType.html#affec8a11e9cc035d4b1e8fb9a87b2072", null ], - [ "transform_to_dap4", "classlibdap_1_1BaseType.html#adb03e2e1e40c3c888577c4666831a949", null ], - [ "type", "classlibdap_1_1BaseType.html#af8e803b20a7a7dc5f2ef351d7fac4a56", null ], - [ "type_name", "classlibdap_1_1BaseType.html#a18a42c8ec35cb5b15cd651a4152f8a2c", null ], - [ "val2buf", "classlibdap_1_1BaseType.html#ac360679317a411d7812ca235a1528281", null ], - [ "var", "classlibdap_1_1BaseType.html#a4dc4fac1bb6083f6db645f37bfd59b85", null ], - [ "var", "classlibdap_1_1BaseType.html#adecfc442b5927c79933c7f71cfe03fd2", null ], - [ "width", "classlibdap_1_1BaseType.html#a433dcd53f227a431c6479234d1b52220", null ], - [ "d_in_selection", "classlibdap_1_1BaseType.html#a949a89714965d7afdcd1e3edc8b7f0d4", null ], - [ "d_is_synthesized", "classlibdap_1_1BaseType.html#a629e97e8eb7d285b54c9af8c1ec9a29a", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1BaseTypeFactory-members.html b/html/classlibdap_1_1BaseTypeFactory-members.html deleted file mode 100644 index 2ad8b582f..000000000 --- a/html/classlibdap_1_1BaseTypeFactory-members.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
-
-
libdap::BaseTypeFactory Member List
-
-
- -

This is the complete list of members for libdap::BaseTypeFactory, including all inherited members.

- - - - - - - - - - - - - - - - - - -
BaseTypeFactory() (defined in libdap::BaseTypeFactory)libdap::BaseTypeFactoryinline
NewArray(const string &n="", BaseType *v=0) const (defined in libdap::BaseTypeFactory)libdap::BaseTypeFactoryvirtual
NewByte(const string &n="") const (defined in libdap::BaseTypeFactory)libdap::BaseTypeFactoryvirtual
NewFloat32(const string &n="") const (defined in libdap::BaseTypeFactory)libdap::BaseTypeFactoryvirtual
NewFloat64(const string &n="") const (defined in libdap::BaseTypeFactory)libdap::BaseTypeFactoryvirtual
NewGrid(const string &n="") const (defined in libdap::BaseTypeFactory)libdap::BaseTypeFactoryvirtual
NewInt16(const string &n="") const (defined in libdap::BaseTypeFactory)libdap::BaseTypeFactoryvirtual
NewInt32(const string &n="") const (defined in libdap::BaseTypeFactory)libdap::BaseTypeFactoryvirtual
NewSequence(const string &n="") const (defined in libdap::BaseTypeFactory)libdap::BaseTypeFactoryvirtual
NewStr(const string &n="") const (defined in libdap::BaseTypeFactory)libdap::BaseTypeFactoryvirtual
NewStructure(const string &n="") const (defined in libdap::BaseTypeFactory)libdap::BaseTypeFactoryvirtual
NewUInt16(const string &n="") const (defined in libdap::BaseTypeFactory)libdap::BaseTypeFactoryvirtual
NewUInt32(const string &n="") const (defined in libdap::BaseTypeFactory)libdap::BaseTypeFactoryvirtual
NewUrl(const string &n="") const (defined in libdap::BaseTypeFactory)libdap::BaseTypeFactoryvirtual
NewVariable(Type t, const string &name="") constlibdap::BaseTypeFactoryvirtual
ptr_duplicate() constlibdap::BaseTypeFactoryinlinevirtual
~BaseTypeFactory() (defined in libdap::BaseTypeFactory)libdap::BaseTypeFactoryinlinevirtual
-
- - - - diff --git a/html/classlibdap_1_1BaseTypeFactory.html b/html/classlibdap_1_1BaseTypeFactory.html deleted file mode 100644 index 8fc79e5a2..000000000 --- a/html/classlibdap_1_1BaseTypeFactory.html +++ /dev/null @@ -1,231 +0,0 @@ - - - - - - - -libdap: libdap::BaseTypeFactory Class Reference - - - - - - - - - - - -
-
- - - - - - -
-
libdap -  Updated for version 3.20.6 -
-
libdap4 is an implementation of OPeNDAP's DAP protocol.
-
-
- - - - - - -
-
- -
-
-
- -
-
- -
-
libdap::BaseTypeFactory Class Reference
-
-
- -

#include <BaseTypeFactory.h>

-
-Inheritance diagram for libdap::BaseTypeFactory:
-
-
Inheritance graph
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

-virtual ArrayNewArray (const string &n="", BaseType *v=0) const
 
-virtual ByteNewByte (const string &n="") const
 
-virtual Float32NewFloat32 (const string &n="") const
 
-virtual Float64NewFloat64 (const string &n="") const
 
-virtual GridNewGrid (const string &n="") const
 
-virtual Int16NewInt16 (const string &n="") const
 
-virtual Int32NewInt32 (const string &n="") const
 
-virtual SequenceNewSequence (const string &n="") const
 
-virtual StrNewStr (const string &n="") const
 
-virtual StructureNewStructure (const string &n="") const
 
-virtual UInt16NewUInt16 (const string &n="") const
 
-virtual UInt32NewUInt32 (const string &n="") const
 
-virtual UrlNewUrl (const string &n="") const
 
virtual BaseTypeNewVariable (Type t, const string &name="") const
 
virtual BaseTypeFactoryptr_duplicate () const
 
-

Detailed Description

-

A factory to create instances of the leaf nodes of BaseType (Byte, ... Grid). Clients of libdap++ which require special behavior for the types should subclass this factory and provide an implementation which creates instances of those specializations. Make sure to pass a reference to the new factory to DDS's constructor since by default it uses this factory.

-

To define and use your own factory, first make sure that you are not using the compile time constant 'DEFAULT_BASETYPE_FACTORY.' Then pass a pointer to an instance of your factory to the DDS/DataDDS constructors. When the parser is used to build a DDS from a DAP response, the factory will be used to instantiate the different variable-type classes.

-
Note
The easiest way to subclass this is to follow the pattern of using a separate class declaration and implementation. It's possible to use one file to hold both, but that is complicated somewhat because DDS.h, which includes this class, also includes many of the type classes (Array.h, ..., Grid.h) and the order of their inclusion can create compilation problems where the Vector and/or Constructor base classes are not defined. It's easiest to split the declaration and implementation and include forward declarations of the type classes in the declaration (.h) file and then include the type class' headers in the implementation (.cc) file.
-
Author
James Gallagher
-
See also
DDS
- -

Definition at line 80 of file BaseTypeFactory.h.

-

Member Function Documentation

- -

◆ NewVariable()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
BaseType * libdap::BaseTypeFactory::NewVariable (Type t,
const string & name = "" 
) const
-
-virtual
-
-

Build a new variable and return it using a BaseType pointer. The type of the variable is given using Type enumeration.

-
Note
Added for DAP4
-
Parameters
- - -
tThe type of the variable to create name The (optional) name of the variable.
-
-
- -

Reimplemented in libdap::D4BaseTypeFactory.

- -

Definition at line 50 of file BaseTypeFactory.cc.

- -
-
- -

◆ ptr_duplicate()

- -
-
- - - - - -
- - - - - - - -
virtual BaseTypeFactory* libdap::BaseTypeFactory::ptr_duplicate () const
-
-inlinevirtual
-
-

Clone this object and return a pointer to the clone.

-
Note
added for DAP4
- -

Reimplemented in libdap::D4BaseTypeFactory.

- -

Definition at line 104 of file BaseTypeFactory.h.

- -
-
-
The documentation for this class was generated from the following files: -
-
- - - - diff --git a/html/classlibdap_1_1BaseTypeFactory.js b/html/classlibdap_1_1BaseTypeFactory.js deleted file mode 100644 index 0e62f823a..000000000 --- a/html/classlibdap_1_1BaseTypeFactory.js +++ /dev/null @@ -1,20 +0,0 @@ -var classlibdap_1_1BaseTypeFactory = -[ - [ "BaseTypeFactory", "classlibdap_1_1BaseTypeFactory.html#a7a4c5fb2ec417df8bb9ec438903aad4e", null ], - [ "~BaseTypeFactory", "classlibdap_1_1BaseTypeFactory.html#ad1af66eee2dba9ae73db9258eb4fbe44", null ], - [ "NewArray", "classlibdap_1_1BaseTypeFactory.html#ac8cedc7e30aa1334e0ba079cc5979894", null ], - [ "NewByte", "classlibdap_1_1BaseTypeFactory.html#ae9736db69abe3fc4ff6252d7978d2c11", null ], - [ "NewFloat32", "classlibdap_1_1BaseTypeFactory.html#a3183fd2a34582b51252e29e04502c412", null ], - [ "NewFloat64", "classlibdap_1_1BaseTypeFactory.html#a6f667863b98000402463fcb938f9c31d", null ], - [ "NewGrid", "classlibdap_1_1BaseTypeFactory.html#a44b70b9301d146261db6ac3c5f74e511", null ], - [ "NewInt16", "classlibdap_1_1BaseTypeFactory.html#a397d8be1ba5e2c4e67a0aeb13aee4553", null ], - [ "NewInt32", "classlibdap_1_1BaseTypeFactory.html#a4b7fc0e2fbf981d04fe11bed8873c35e", null ], - [ "NewSequence", "classlibdap_1_1BaseTypeFactory.html#ab41dd430aeff02683be5a396da770ba7", null ], - [ "NewStr", "classlibdap_1_1BaseTypeFactory.html#a3a1cb0cf7f033b0b803cdcbdc0a7ca08", null ], - [ "NewStructure", "classlibdap_1_1BaseTypeFactory.html#af5f873b6d6f241256f89f3c81c04e85c", null ], - [ "NewUInt16", "classlibdap_1_1BaseTypeFactory.html#af9420f0e89b4e196c87d7c911ff7dfd4", null ], - [ "NewUInt32", "classlibdap_1_1BaseTypeFactory.html#a3fab7ae914077f60819ab7d54f96ee62", null ], - [ "NewUrl", "classlibdap_1_1BaseTypeFactory.html#a9630a8c57d8ff2f22dcbab23ee3459c4", null ], - [ "NewVariable", "classlibdap_1_1BaseTypeFactory.html#a1ac2aff8a85bbfba4c012e01f087149c", null ], - [ "ptr_duplicate", "classlibdap_1_1BaseTypeFactory.html#a7715687224ed81f7e94b3af463ca5b8b", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1BaseTypeFactory__inherit__graph.map b/html/classlibdap_1_1BaseTypeFactory__inherit__graph.map deleted file mode 100644 index 3605c3500..000000000 --- a/html/classlibdap_1_1BaseTypeFactory__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/classlibdap_1_1BaseTypeFactory__inherit__graph.md5 b/html/classlibdap_1_1BaseTypeFactory__inherit__graph.md5 deleted file mode 100644 index c491ae45e..000000000 --- a/html/classlibdap_1_1BaseTypeFactory__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -d6b732e805600c59c163abb7f47e00c1 \ No newline at end of file diff --git a/html/classlibdap_1_1BaseTypeFactory__inherit__graph.png b/html/classlibdap_1_1BaseTypeFactory__inherit__graph.png deleted file mode 100644 index 293e75afea14039ae2ab2515e393e65501142422..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30194 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 - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/html/classlibdap_1_1BaseType__inherit__graph.md5 b/html/classlibdap_1_1BaseType__inherit__graph.md5 deleted file mode 100644 index 84518c9ad..000000000 --- a/html/classlibdap_1_1BaseType__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -2759bfa08b2449ca6fab0de12daae6a3 \ No newline at end of file diff --git a/html/classlibdap_1_1BaseType__inherit__graph.png b/html/classlibdap_1_1BaseType__inherit__graph.png deleted file mode 100644 index 402a47e9a166745625f697b2897bacfb3df7cfb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 593479 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

  • 6vqmxZ$qwQnWb+jRQ`CUV@@nq7uUjqR7Hv(`Juj)-OoGzHrwqb4{ z7m90)apLhsquUeYVJlBfOH)KR!;L@AbxxoO4;+L{Uuyaw(qOw06S*0kZ9mf3t0 z&-HKsh|?Am>#dJ^ST5EKy{aD>P%q~}thtrMTmo27z>JrU#gA49QG1nyF0v3>NmP}? zyUgphVlP-QM-p_{r!yz|6?Y@4nB-`Z(m95)cQYY+z;H^|E}W$NHIw#*j)WaG&uMko zO!ZmKU@O}|a=P(-lOP?kXacJ>-d%p1ppmT8(b2(YlYuZV64t|ENxQ8XjU5#v=$OMa zT02dR#JZ!W-=%kDQXR@94lANP%I?F+NU~~{u3oKmR?z*b+JQ!(2qh216-k@^rje|g zK;DwvE{g_J{s;&;tE9uB^s2r`g8SL?P^y(*XwOYxOL_DfBy@x8u(ov#F)qR>U?jMA zq-oYi$QT^U1oPJYx*zYZM_dB&Bw z`+?*YLR8mv?CH$zHw@hGAVVQN9`@skim$}FGciIo!^zS5bQav*+ZC^f|2qr7yNPF{ zCh{}FK>I;&1{vDOVnU5GuHw7uX?55+&NTvVOz$r|%aYj3Y!^8hJM5hf8xS}ZNwROb zipQV~e8T-cg|c)j_+tX79CVIZMRi(dZsC@M6brtNckHRw@Nmp(b!us8(H=esQr8dv zDcX2TdIN#6$i|IG;;5>)u(WB7J0{H4qRW#ac?OKD}Hb%y9>VQT5WrTQ*Le~@KGTQ&-@r4!sPo^!r zfPy2lXxF(>Xt?Wrgc^7BVt>kQK(k*RWf-n;y#bf3PyG7GjO4KOxI4^VPMr@iW9G)D zuV4AG*eAxs!NFmffD&VoktBBHl#iJjr^5^5k94ZPElN>eAzV1wHL66}og@#kF_NZy z(BdR(8AJXj0E zGQfq_kdrTm1{+jf%1`Y)$}~aYM&N8QT-pYB_9glyt*M9LJGkbW?4>m78?aSLPQbzN z{P|i=14Bbabe{>w+uFBGhn062lI0G_uuA*%@ZrN%3;m>=j^ii+gsr7p7?b3)9_G-0 zqf5pII}Ic6cRos{{I~s|%Z{fgZ|KZk%o{5lmvS1DTmdmtNFXeJWFy__v_{P5kF3Ox zub!tvQ%VXVVe$y*y*yaImhiOU478>Ks^;C_j^RJ7bNH+TWm9Az*92+z6}4qaGPPi7!a%6R z!LG>F%mAo|bLj0AO>&;_rAw^u$L`Vsl4ZW11uO7QPjmV_LOPN*?S~UeTU}kfriIw; ziAJ%LSd4#2mF1Gu<|Wbj7@sT^odM(G7d2_A3Rk{|O8c(scuq5t;r)fPCMwgnAc^5} zwRjgsoH^Q>N_ng=_!(b88F6q`nf8=U>6=2$`r-yC(CWTepNoqF?x+)8pF3od1tysdK=8vR(<_K90LIM1MFRa_qV$4Iddj79o>r6#x?;Hi<^|+O`Y`2;h>~t z0+jy%uVvd0P9f;-S4b#o8v{ z0B7mDPb26r4A;CWffzq=NZnkpx=_fB)e9Bg1M5H5?X62>sh(i^5Q7nE?}^*iu*xI7 z0hztks{GM}S+Rx;#t;6jLdLB*RPAzhH)3Yp#@%PxLFe}CBX(jAJG#eBScKHNiHlE3 zq&gp|XG*N%;^Lmm8sD6uI;un%t0Vk%%6)hbTAuh8S>zdL{xbno?0g{}1E^na;O=Ya zUI6vq={mKFGwF1s>QS(^hL5Vgk-*SD@x1MUt>q3edOiyQ(iRU-J!%-O?5VR6VOKtq z=z-t!D_hsFW%(Z3w#NC~ieLXCXc?}yG>lSGHGeIzIf>9WX14kU*l zs#w2uMSc{HdL?8HB>#8M>`M3PZJ_TpaJDp=r3C2}wzw!){I$<*OR47uKjFk{w9QsgyAW*U!yjjQv0$e zk4bL&jYK+BY(5#IzU!rcwl_@?Z}byM*%i+}@{bmeG!wCR+RTgnS8RhaCwePvNmtYE z!Wr1PWf~hxwh$T|I!fXjC+URnTkZ>xmR)A{>;6hEblJRQzl$<4vnl?ZbT(V{*vMKT zqMs*YFyy$E2tN_E+wVh#v)$(;>*4-syrc4)?<|r%zJH8(93Mexb|!Kt?>yxbKXn|@ zLDPn>e}jF_ll+nAYTA(g@un9-*MW7dE=fqmGQdb$cz*#Ss7@_1ILRZIi47PmRxw8$0PFoYW0wqzM)8 z>P+=}80E)Kg}?NTZyPrh^=Wz~4nBvSEaI}rzgX&Sb*l&wS6E^eQ{LLJm>EZnCxhNME;D9sZy^%0IT$u>6wwIg) zZU=wkNfHBuoo_2)toUQ4=-U#qlIkbWvk{^?V&EZ3sm)|l1k|5_yMfQ$1^BdEOLwl= zWf`O)>_%#N;PdecLrhJZB_+=w_m5<*#zCB$HiV=ZeFPp7BALJ@VrI3f-__|#d%+FA zszKpv!N}_msF*|zfD2Sawh*)t3dE5NV&M)tz`zvJxq$TwoNR8)div_?gH-o=#AQru zz`RJ}7)h$MDjq0;@0V3z?a{!($tvV9ksOQ&HS_LfN@ybV2yVoR!W>FL)eJTXp!adn zr{$$F7!YSL+h+}9XIPt&Ykl@n)r=tm3gr<{i0kVV0h`+=;3F1W-`9Di5S!&0AUS-< zLW-BCfP!-%MdMT7l?5vl@a&TCPJ-~onw@@e;`Qay!QHNnNUK$14Jlz#yodd2K~2eO z+jZmgumAALSvgF3x75}sbn-k%s?TDywZBYtmwAOe2BU0k+0-E*r}P8iJSk8MrzA~8 zU`N?%Nz3ftwQhgnOyBT)yNtTVm?wIm>jlzOs=CMmVl*PJAX_$msP(%DJ~YD?9b6c6 zMsXPDS2gU%l(Kp2)&lA0zHh~E)4AW?aF*#W*hr|Vqr?dzZ3Wcunh%ZJiXPen1p&#k zA+26#@TsW#(^x%AlssI5?#L-Fb+b|C>?WaA=8m$mvY=M)!ko$)tfFi*Ed`r;9Ih>) z{&f~_W&E4gI-jc6@JQM*F8L>~RiZj8NxKt+y&vA%BCNVB3Gm7qoPsbRTwxRgg4y$+ z$j^3ba*f{R<`xpIb=K5alo(uj>_rO}T$R#LxYXmr06JaEDUNguM4fhz3I2oTsF+?q zJXltXsfKH@E_|5kX}CiDjnk8jeCcbUN*O!Gio(ebcZ80JFcjU3hbeoZg+#&O@tCp~ zpW(S`NdUyo;1mK5^C<6D8t^)SuiV45$F=#f?0PHN0fq0a@-D&Xer*m`T^% zf_+fJ^i=x#j#Vk~JfnDf!*G9pY>2fS2aF{z;M;gp03i_OfoQvrp#7#h*9@pLkdhK0 zk``t*T4U+_mtl1q(P%+d?}wSLnE2vIy0y`tx&lvu!D;%5HeyLj_+3W`lDfx?DW4$8 z7fm?E{|at!Gei3$zRaX>!AxP*F(yPrcA4sac`sCgO4aj$a^n#uS%X|`)PUv)}n z^e3&^J`n;H^1=de%q335sEkod0Y&f`(4SV%*(>Cj%sNp&$jpUid} zw=h^PbM-H(e*~M04tg3hBX4H$@bG+9KY5iI*+AlF@SAv(<4r@$s64v|`pTft#O_cv zZf0aX;MBzWD-C4r3^KbLY6LcK&b^!|M7+{|;MmWElr|r{-#_&OcW*}pl>P4*l{XS8ImX!9&51m3v=e2W>gAd%8|{H1pEgWfHo0C@Iy zu6L_mAoi&m!2VgbZltU+G3a6RC#<>!M?LD~PW$S-Mq4AdZixTuOZk8PStF%Z6Rm5( z)`Akd3_;{lqDtnpLaHzl%cpn?EL3lfQWl?i_m_GiQ^WUeaNQ%bI``>GLNAh{Od2a} zs&aSU^+uBloZ7OS_e9TI*|nO~$^T7i91v@q0rb{kLi|+wUZ-`_{xs*f7 zXpx6+yVcTX=O3ubhpnuwbAfM?gx$wi*IId*Q7#jk#l|pb`r~&I8B&MN=6Z9Zd%P>_ z(g2&tN=eI5+u#Ya&TMycEd4fOYpH#2(j<$?e`;H*2`}o$!tsKUZTU%%exudy=$09%szga?OwF4WUc!-!vyK*^7fJ5l=)I=jHlc+ zFgk1j6mVsGR9lgS+QT**pC0ioTb{qOUC{Z*uf#;>R63}PW9F$Ifz7i<5I^ zlO1?(nAldia5J%kLGSE~kSDSSgDiZ#z5YPS1ffZ=MZE+!IUm~#(GH>i z0 zk0P2y`He0tEold7rj$G$X!vM{S8a-YuMSxek(`?P z;KU@*x^4IkxsgfDCCc3SXs>JS&8XKv{Bl{Ww1PI0?hAPD_CQ;CF^YI;);tln2?xiC zZ~0^=f-kmR6cO|7(6e&`Xt0jrIpeqmyKwcMa4r%h1B&uVdf%G`=a09ppQ3t0H*Z3S z_R@<6>QwdAQ|dIqAer3mYY~4Y4 z@Yygv8FG5+3M(9TUxH|Y$<5NROfR}P6cOH)NcAp$% z`Uy!+)MO8#4k(F?0~kr;NCQ-sr@Ha99%on<%*cpGKUC2-3UcPhvV+cyZ+WXuM(fDv zJ)b!R?_2dv?cUw=^Ndf`YE&r%BYtq_-F%o!72h~>E& zq4%K?EXXu`~GEoLdPO z6Xv`iq(A7{dw{!F#3@v0X0Z#g@6GgNKa}Y7wxi zaahxI(RtA`HH4-br>BynC%;#NXNQ(i4o+b16oCDp6q31M;=(c=u$!PyM z6>DS+17G@jh30GNMMZ7(Fdc(dcMS)_L+U0WDV^p1c zvO0Nv{Wf({-RF6A6>KC567gJmA`rQ$td!>E&5qAVPwz6d(Se=?mGrQfDSh8}EW}d4 z^r$S}2V8?BEi28_Soi+KAe1`YHOV>$qV5Q5CBIYca3i-M*%f1G_{q`1M?z%|`}be0 zk4K%o<`pKMO!t3OZWX-SIuB-hv*IML%o}^6_Da~apCAP^qWQ;CV#wY%^WKr)ZE##ug~$30h+s5GpCw|zvjd!q1Nz$@m+SseyuNi*!vZr!mQs`L zhWL%dd#mg_!Wt7lS+gc}dtd&r`vQE%V5r9*4`ttnRQFdSy(3lN++Ot}!#LnMupxcK zX%Hs^8QwWA;9YyII+wYVRJ70C-9qv*h9C35O1<=)be|dsc|y~?_yxkQrHG!~s*}^= zH?0h8<^9A$1Y-Falvt1@y%mwYRKW&vM;E}=`0R@Mx?i`g_;5X4*mwljiW%KT=zW9g zn`6h1`{OeF2!#9K0>Y5sJL<82U*RyphUuS#n@4yts^6Qjd}wnnVMW-t5$D;4KN?0)#fo3dUGR=F?ui9bhr^8H>Odti-Pz-2wAk&_4{8H z?n};MXGiPPeGX<(8B@EQb~}~zGw=@wPMT=ujExC%8XeIV=Dgjh0oo;kD51iSPaDn9 zt%s|k)Gb~Zgb%;kOQWeUb~8%KZ}YZ3mb-o2rpD}A>L)?+d3HP;L_fzD7IXdw)RvvT zFT@4SoQ(^#4&>p2Ce29@`l4}4>r$P@?r|r7uZ)DxDRcY>DF4^<9-U2DcnyxG?1{+FSUNl9Eo?`X|rZeAXb|Ag~RVU z#b;V@`m%I<9%%wjiZGdip!9()q{oJA9f{>`P<0SX%_wjQU6wgnQvxdb!Hm>}FEtX1 zE`QI5GDjl%1y*HW<|xz+`f{QBp7wjKJgWPr2~3S;Vo9k4^vD)k_6}=1=BJ4XGOFVj zq=_wNFd+?B`w-LN+!dSu45s(+$^^BvL@gYd#JUH)6X(88n57kt@@(I}{c~HJfAnxt zc(>HR@tCg0O5OMB3swVs>1ab$iZ`!^uxpd5IyKDd zsmUt>nW<);f$WH1+JSr-%9h zu_;0a|Mu-$l1Xe7vm1%~FY<4Qho8zuIy)bFx0o`f3{>w`{V*gK!u9(pCN*`?Q>s1u z#qG4IV-|i5noRv}Ol& z#>B(ZP=pRl*>$a^s&k=#%xi9LuCt7h#=cKX6~_E`dJzqb{&X7>F2qm8oQ7C~Y*Jrv zX+`dRWLzR;LSA_X_d9o~qA;$Y?Kdi0;{8yZws^aca(;TKbQX0r zcfJjcyN|?jk{wqB?7=t@c+Vv48*Zlh@n9rwK>M(m^DdqMlz0>OFo#-^kHYsI z`CN)Ld&uex@Zr|%qE<1KZENaz$U4uYI0v9^@9WH@Hv~U=&7cw#F>a$;rnCC+2{HC@5qfS#=s~@G_mg^ zPbm^pT*cQ`qSI8j!iPy-buwsj#L@yXfcIJrb*Ud!Ru=ay2hQL>r-)QyW;b|3i1~i3 zMsWMhkGh%ssACx)gs4h@+&1ojy{@T7xfe39P7SQS@+nKRt5>cZ#kW3K(?i<)m)$6T z55^&IqJ^~NC2FLEl@E~x7orvo(qywA8snol0Hu~>jtlE2YiTsF%oJ%Ee#o~Dh$V(P zPVI3qRR(wd8f}aje}4=y@Y(y6iFYjQWSD}V`ENYbO1P5$M{6tOK%%0eC9MFmd7&La z3gTHp8DBBqgOz=??pQEr9qpToMJO~YetzPtaRA|;{ zYY?HIB9Qni2Fbu5#s%5}PiUvC;R+zC=C0a=;{Jg8BsH<5`lyA->h^vVg_h6G`ZpN0 zzekj{nSVWH!UFG!J+sB;k%W!C&<}=xO$zJ&sxcz#GmTSzP~ZvyCHY%H*Y0|3;d(5} zhh|_&KbDD6_UcvS%Dsw506R1@=KC9vHS{C|mnFcEh%4T7fHx)Ljm|x7e8T8%)2%CwrD#4|TOs4DEBj*sW!FHi`0H%##e0gB6PC zqr&4xVEYk-Dywxh$kW@n1O*T+=o7ucGw2N#q>;cEl78_W+b(-vVg2h)?VN71W%-j0 zUClh@Kh&22Z4V?YwquF3C|2(kFYB~NI_sugyJ~7{R+(XBF8GZA#$$kE+0^ln;NI0; ze^Qn78Jr-rU8W=utNum6j&_YUW>|Nn=xvdTy(n-URH_6|{$Y~qa~ zB-wk9C?Qg0kEraKz4so;%-(zN?S7uu=kq;&-}^o;{qE!N$8}s+9T#us`FcH{j|rmp z%M=ul7a#f`r^vhIYrM-M@c3Z1gHOogG{M=CW zFw{0mOY1u#Eqat;axsIP>_%U9wq8Rs9AVqN%94FV0?#dLs?L&~S0*C><90{G%$fg7 zqC#$T#D)uz-?9+caRg4iJFZ82nwz>KXG$C88iLOtt~U=m17XRZy0ksj@AUz~W*?B6_V3 z;5@ks8xX>WBR&9!nQ+52`VAz)4ztaTunW0XNGJfbf4{vB*$NLqIfL{(AP+Yp?+maw zONv1^RtnQV^lpLP?3wSLK1wXr0|tG5p=sdY7(oI6-37)X80Rm13=};ntaMJl5fdG) z6*sCN4a+<32dIeYdDJO}csl!M1W_h| zAcfah4XCo~!02;{W%T`*?27d*-2ivWM_8c4Atc)A zI#9{5e7d4QSb*64dyzPa%fi@a8gJaK@QIl1Rz?Gd&wN;e#s4#vte6`T3U7TxqB6=M z74H+q*t7@-hyIY_;tIrvj2h0x2c0`<`H&b;?#2 zVGczbmn@wXIt>WI@0+*5R?H6#!+)Y6i3ln>T9eams}_kPs<0;u}UfNo0ViOz+aje{EFO7YT=s3_$f- zvEPHhCSAm~MomJZ7n4Vw1lAfO_<>YlS9l>`%gBa zwjeU3BRB(cnryslut64%inKoHLih$AiuijrWypJ_2Wgiv690_J?s_MxtB zJiprijW_@QGn2r@#|X)+GYKK}d7l3aC2O<|0C&oQF?BlHZiI6aYQNj6AgRKP#T9%y zqq%_XumOO;#MxTKQh>hQ}91xthO#$>d;thj-P!_Od2Z2*1@}&9%NPH>8JjQz&tZHBI7Hl!j z%$mWBk{K&F{qbGNB)sj+=ZVf-_Wx)jXW1My%R{5Ue29QeA_CvWkwV}h^ZRS?7{Hp0 zRIvCYCLSwry~yZkO$C|A>M~X&R6u@&@I54dpmhxJaAeWrT5GpC#DcsKgqkiUMyTn* zifguKNQK)O)=Whub#-4cz;RHWN15nL43>665XB#EK=S8dkpfGB5k23Tq)H&qB zP_rQGL+Iwr0?W0rd+XcVjE_vY_RhNd_zKQ>Sk9gt_n-Mfo7Mz)1R#fW{_`{aedjzbk@)!fUb?8Dv-_h+eyP%`G%9owUw|BR@1jn4Cu~ z*6)9%Vttthz#v&M!)fO1c!sBFyPvdT&TeWYD%`~6x+MZpsIZaP+3&$=*9^T!hDIZ$ zMgL#3E7FYxjqKY0i{gcG;PxWGQV;%9KJ^&!Fgifd)iBmWI8eJ-6=)UQa65=R+*&_dvGW3sDeXHMX})KP@y)UE5jlC|!njOAPcb*M zX;B~D9>UA$ufUQ9^H3nJDx6I6kgLE!QQS+k=d@bJ1Z76SAS-A>+#vu~BTLfHfVWxP zm@B{o!1it$WE@$=aPm@R1BuB(_9`U4LTG>LGi+kx=4D&Mh;keOC19dLlp{#)?OY6X zTOQo+K-d`?MVMX8SOwnjFN+pvjpD@j+j#ZwpE(&~nyMoaayM|0CKsizLIMKCl@#!t z-B3RnFwP8rH4eEO|G-SZ8ojJDFU$4aL(1JDDUT~GL(QU>hs5NBir=!KwsaS3xh5?W*Jb?lx6DFlc}TQdc3VR$bR;4B!dWsapQ8X zpLGyaMl=1-Si)bZO8d`PVq+`~R?g%*+QBjaz^2uJoVs^my0_h!7Xj+4z^?BKL9(bc z322GTJ>QJ{5*D4t{?K!trYfG^$3#ObMKlz4>o@5VZ)&f$6U}k3XSr|KOMS zMj%mPka9*O{AO7NC^AGw@Vcb%%(s~t4dI#Hn?Id#B0vRnjJqmUM`Pn{>{w`%haxtJ z3UW7ca&XWhujQdzd6~nQB@C%8Mex10=7JVc>1rvQ4FNPi@nZ#}g3X{rdr+CCU|GcV zs1Q^R16~b?>j=20%NGlbxwn8ABM-~$cs0EdKjUa`A2vHVIr$x;VS4+Z3Dy^!L3wRw z)>Df$fqcC+=j^uvB-@Pgsj6&nRdCaSP@)rW@Js&r47b(kl@-&J5b&rW1K#7FHHfD~ z+z*f3kCAX0fS!&re%UKHEkOBBvdBpr?`W9(9{g%p!BH!_`zbj1x<)pt!xpH#KTy#S zo;aEBR6c^r`#t6YXt&6#vfLC0Bqqb;Y`j=T3Kmqx$>x+ZKX#m<%V-xhp&Ax(X26>~ zg{Vf6yjjS2eiT-MSVCP6wjwv!2k*nVhd|gccO!9RV9`gEvIf2*&@H46q7pWEmbjkp zApUExLH(l#2Ar@&n4DWJH414|1#9PP9S#6FXIgEe&mK5Hm(%ihT@EuPdRKg)q<^fCxYK(^2LueN27 zOZE*`hKcEE{egTZ_E#CIOwi)_<%!6CZRs^w@P0s#Di9wx*W`ZQcEiH~xkH#+=h%RI zL*5fx58N{u6#`_^JNMS~>{CYOvpeIX3@1y-z$$@GuK1)9lNn@u>UoW`IK?gErW3J`3Hi zR&!_CPz(1Fu|fGw*1ycAEtp)D)a2xL!@J;MXo2|%>5AogfYebu(AFNYi7grN`tSVG z#+B}v@zsX?%-`NDe4r~re@j(meuECM_a}fd=9+R->;W(RsyC24iTFDqMYF%H(-5A# zrGwX$a4>&@az-_HkxWXcM~v4>v$mnQ7E!n#vs2FP7O)&$Me^X6>l&z=-R-JRwK z2ul9l2!yP=mHYqb*u+N=9UGw)G?O3!6cCId3++}Hs0EbYUbw0|Ln~Z#ET)PzcKUo01-`U1A(wiAfdx}-$iScqIh{WBOo)do(qZ=&SJsLH$G<$UW zImvAgyBNbTek+5S)}xsytIavV)$ChHaSS4ELquvwSHm3lr%#`zAeM~V1nw|a7CeyhBAYu%$eINu9IFg@ds3fBkATSsB6hgowem(`hs*7`_2w94Sdaq^ycoiWk4-=62&$ ztrjn`cd6D*dKl{)7&L!kl%1l5P+2&M8j&L24w1vOq{b3md2B1vY~#YEoR(&+iGdEJ zeHWNMsYgh+H=;Wf0&EHi|3t!r5NrY|UQ)0qYX1rF7HP?su&^sg&`d@x*_)l>& zm$Hmke(~M8M2GgbFFrfmq|{xAy=Gv!0ZPBTQpi;W888WgcUb(B`N0=(ZQ+i{v&wVV zW(a;2LK?wzJ*8PNyqD*FAEh)r5#A0?+CynI;^W~VFKVf_*>^`$!fv!O0Ft43z@KtjEVQO#0JYy=sJN+b+dxPKb}^(xd?|6eCy!z+Va|w^Eyey7C z1-Fc^pI_TckVM`?GA*IOK5P>9a^(o`-pzgI4H#WzjEs_r;~{!(vK|ekRj=ZM$mO$d zwd5)_n32AujDA;lA$g7RMi*_Xo(w@Y0AtQo||l%`963*kp?Eo0hT*RDJvBi=a3`Df=U{x zwgJglFuYi|ew7X=FXq4MY4&L<)6Pt)M7`Nj()z`Txb>BZXd#hqsI!M&tKoO1jwteA zC;6aiU=x|i062bfN8K0T&O)&3ODFSsa8OLU$H0zF}lEI|$% z(4hPKlmO?Bm~5}r(ulg2wnp(Q!7|2#2qM7?(#%#cWI6N|B$sXAZVGIqwi}{{%mB`L zShpmHJGM1cut=j*We?ykdVHb#pQjvoVL_eT0vMYS<^~HF?Og+Z@JB?v0_i6Qc_j7# z99S~o2*Y^y$e7M!Z||MPWpZ+Y%DbHB1UAsL&E~QC&&mIhsyH7IDZy~|56E{HbB@Qt zpfE@6>`w~*wg-hc9m}gnYK115edA(Wkr$X|7{BOq;9krNg|Gy@RnE8k$>8vFgLHh? zM$Uz!I3*S`Btpr8G*c-tCq}JqaN%UQ&_YjPca!Ae!mW&eiG_d+_6Zg;4rb<$u&_qI zBp*#J04vv@0<&1+Pe46~#P+R2P`aG9+p&!mo3I6t`;j@YjfC{+&9supGa>yI>KvE7 z=92B}Y?tf%IGEQ^1ZewWu^k>CQ35sBD=yDB=Qyf5+wLsQ`I>|={pBNY!};~~=;*0& zd+^zpk~?O*EV?N~(mZ@GH|*M&?#C3ReIx=0hyYIZ z1*Cj~I7jIb4c*q{H?VJ>pPilE-FDQE)91$^pt-etk+TS&l7&ZClC}i3<8}UGb;Sc2 znOi=-6x-xOr}peu{&KIjtD#>Gj?HB4aQOU}le*GDoKB>Cyxe4Pg9@kq^WD3#&Ps{t z0d4OHo!H-m?}iW!oM7H36mw<`3QFKjdc!aIM|Nk)Va1>SbFAzfQd{>=U3Z)ikO6NA zXbNL+23ZAC}!HGVM^4^zuqR5`!eUm*N=&MPUu;Udq-1si6{lLgBp~E zXlIpC83Z%YK@9wKb|Vf&E^XZFo;xbs`d4v}<}iKz$~GqaWXCSYGP0{l_%{gn^9e8+ z_LfdwWWQtCtw|KiTYr3PSS!3Rml=8c3;W|Os!XQy5M94P8Y=C%hNM$-)Z9&xGdDz~% z`aM+p6XY{SXW#SkD*R?OD-gEZa*3GJl4#{HsGpFNobo1(SJqKeR@RqOnTJ;uP;KWT zCQizUOhm+kKV2fW*?RZu=-g1tZd`0xzpO|1z#B*V8_tb`PU905*cqozva*ZIP3>~E zRyBW{;WTmO<+U}{0w(`<2t$;(Sc&cABKc)|hGxkL5uX}Hbo4%aI_vwvI5=7y^5c6s z`m7P-{cq_|rP|(l)cLmzc^9U|a5TL#U+N_ zMzi(mN1EScMNHVMK6p@*C?iYA(;($f#vZD#m}`QjP$a_3M&uOlMzv@)g}>{F(eac< zaw!3Ct@NJ#O41rtycKDjA94KR-8nv6o|pux%)S!AyH>XJ?VNv^y}Ie(weO3o8ED>R(bI%ex?M8~le~TC}2plJIYb$X($i{QjGI8(@_+}6VkS)9%?D2;^=nYqDuXBIb$N{ya|`L7|J_w zW%%B`9AFnl4$0U{>mZA*Z|AV6wRN>wSGRs=XWzMqc|PvDg~jBAtZZ3=jI5vA8)FCa z=%O#ATgs}vxp?X2#%?S{h}#tSaKPrv2WAiv8048LgT985rM-UW1*}N*osM9kLt>Z0 zEJ@#wn%7+1sKg+=!kM!(2$0s(a_6EK5Kjh)$5XwUW+8x)zW2@1%zMQM=C0e-%a9eV z#9nb^2>|vJM9x*{!36qafy~kkU-0c}Ayt#%oHSq$G%a11a#+smn*!JUM>y*nf{g+B z-i&1gKnsj#=-5lIajSKqKkxx07Q|RSx3M8n8Q=NYA;Jo{QHBvXz?gtGW42>NIQ`PS z3BMe(QITtFh$K&zcc-Jm*J{V5a&JTjDS<46Z_U19=jeUPS;Acr7PIo zGx7L>UcT6{=NK!pW>EGC(0@BH!U`=FMKKa#G1NrS*oyw7s~9@@gVa$NXpTGW(NCsm ztuia3X^rG%&ns~ZAB6bWwr6bA7368n6#J? zc)YAEAMkkQM7to)Y^s0naxwM1qL0i^x(h03MeoDIe-iF-ShQZ}-VRGl6`J2Z81Yi) zrs&(LP8KTpR*R8niQo5g#=dNa1Wx>ZP5l~L`9iQ|C@?MRd4mQQ>S}_CZ>7FO)%}K3 zK0hh$XV7KdP|`VdCU$eHJ4B z#T>fc;jMtS&#ZR3XI;s_<2Fz~U2=6h!2RE?Hn$=FCmDfC`OzuBI!yq7zn;m6Ulsc$ zG_=|F)ptVWK}KI+Qko44a>RM7-AG#(3svMZ(v+=fsi~>wn!f>({3Gxu8#Cbr^bYms z%H4Z}Syk8C@?ChJmu1#bjdpDkg`8e&5k>!#h_U@dt=QTqe&j{?iMmNa;plRxw!l#7 zw^~Y%V^ZQPU7Zt~t}p#9H@7{+ULGH z-S+x%l_hX83 zky1D)Sd!ci;XwHeYtB{9A_B1vFsfAIB*5o94xCpAw4{6ve0OLA*3@qRMa;m{+5YKi zRlHW+?}e50d()Mb=Wx)mlF+W5A?z*Cz(&jHooIE zcK0G~fu+lN*W7dWicriaa!btzSIMgE=?STC!?d*dY3LfxXT0%!7u{5C%=xc6K%< zsk4tOG4xSld18Z>F9{rLj_FsX=!pvGi0tUDaL8`&ReA{V+4(U}5c|l}S8nNxJBJ4x zTxHgNV|Ddc`wz`8_|q$CTU*IRqgr1VsB-f}9V@ABb6{u8@AYMuh7A(5N=Jw9(yiW0 z!~dF`@^id@$-m0^O;wX!6;{pd3YV4KT<7--mWHF$D*W&h*mKU$KyZ!`VIvu(;iKrFEj8v>bCN*7l!({8{#>sD<#R z@{yDFVWX;grZv5HjeF1dlXQ!DaP>`s}!ci^EaB>+CqS=<3A ze@?NDQv}a-Tc9R?EJzVu4ZmXW6r29GT2;}94|n9aB2vbvI*Vj%<{v~l2x*sYO3t)4 z?T+D}=VxxgX zU#|+I_*UDn40c~YfXby=Y0V-mdrgf3T6;dZmW8J@J zS>G-=D!KSHRVZDg#i)biAODX}Q;|CgY%h(L(@B*pwX|OLXMODkvK%aQ@~$SN z2B}ti>z?gQtgNY}13)-RQg>iOm{D^|q+fAvs^1=Tk2Mb(ym$d)0_dlHq_McN$lH|+ zBjxZd;3RsjXv5WKF-L{8*(35{i%X}2qbD~YgDK}x*zIvAq1;v9uf-OsX$cNCOnv+; zgOzX5+4?xuF83P$na2~zXV+SIRz67299V0LF3l?^G_zf7P&izUIn?KvX(zTXmZ>H% zHRarOe%IxrX;kGE8KP*X72H1&VfMvRTa&w=qoeIH6CUg|uwZ}F(Pw66_F=iXF8oaT0U(Y0b`+o0YV$OQc;hGCb{eQN$9O#&uPtffwEqy~x zx5QTY(F8}bD<{Xm?eZ0oF!gke4}RWZxp%|1JsVHd_;!_U-&H|nn46dP|H)&0GBJ7l zw!@=danlr{DHhk#Kcx;ILT!hmJOP(x}2qfsN|?Xhkr z$1gz?PS_pN7owZ3cQ-)8Kv7_3L*Om0p^u!X>oNBM^wyFS(U_mq~7K~<{@!mpE z5Iu7s-6wdUJ}Uxb$~7T1Z734@@{Y#wL5$N%k={m^YcLWzI)%Wbz-u=8G@q`$6KzBa zV}@$nHX}!$J)Zmy_vy5iG7VA>2TUZ2?hcRKI%(h5+`5Wgnsd)E>Z*#hh?;^6NEuU& zciuGn`3V!HInnEKh+Cgv@ovOU#+)RWIGx~V3EI-CFVx1yuVSF)*r?2^4#z16ZS%#I z%klKnW1ZMf6FE62c@17XN_91?BBao7GmZ)lPU2|OI#HiKw=Ik=?dGz}fM@Hb?sE`= zZS*0BHK@LFS_o4i--LDNzEl9ZC~1TsQM9Jf!3dhMPkVIkuU~OnCWAkyQ#Qo^^6b$D zox_?IWpLJx_}dwUj(O=)4BkzaW*_gpqVJP?6Z9gI8aJ-IW6svMu%N-5WVyhN*8b;H z3bAfo$gley?@HJ=Y+pU_DKnmJXWDYkqvy^WP|DkpL=7e3;OLczKN`duu#ik_@xa($ zXk2h`iXuIa@`ml&R4>vl$c`g9bjz;mfoR$=RwqK{hMa)@Z{tw z9&RqbRx)0U%2=8O)Fw-v11+c+QWRTM3sI;{i0+yAdTPxc1o2LRIZNbwOKR2uQp;&^ zLoKLeC-p11O6o0+V9xmjQAsU%ecHyTVhnO*H@Z&zrN@I0f-%DRt$qNS)8Uh4QwpHF zY@B1>JmhK{Bl-^F+EiJ4A+I4&-lylgj(Pc36+nRJz;U40z&=zd@WTI!`%qc|QXqFpD7p}p8zgHIwv!n-xcr9;z}^#(75 ziVo&nVW6y=cxwJ!soBk12@kU~%dLQC>}kJ`E79@?diw3pib^DbX3}ofv$K`iI@Sc7 z<#-zvwAOku&PRJ>>Tmc;OH}L$s*3PB+Q=DP-|oII@1v}`N<(=ucy$gH^`?KwV{S<1 z{-&0F;A-um5qV6YR$+{(`|~qtMvtE|bZert?F;uEIM1A^kU@JCM=aPFVl}>ADSTej zqpESQ5_i|w2$#S|N{Gh8d930OjaTJu(gvR|zV%Aucl^6$Y)alJb#*1C(5;tVSm@SP z{M1K0;owv6qD5aX$)ZI!@j6AUk{N&hL!-(4h*jG`GOwKU$~}Up$k1rv!;y1^jg6cY z;?Xz9@UzReIdEQTN_=!>TqwJCiHly)Y2Y!@ol|1=KlC0viGtq0lp#~ge@*@V4C$NV z7pXW;v6@+GMMB~x=0H#=0|ncF8<6YvHm=$v$PFMKy|}oz)oAc)5_1G+0lYU8z{*A#2>a6!n*f!p|4mb(3#xoFk6>y4=ORY&aAFO=pwZc~;;4IT=@L$h~@4=0Ko zF7EC~{Q2`l?3aHcIw28eyLPwEn5`yZ9<}`)P8NKaX;uHpJ+4%ZgWFK_?(@$0`=EvS z!Xg;x=l7Xj;;pj73W{C1v$#0^6yo=}(GQ?LMiz_({#{4m5e0b7$19un09E0r()NB@ zn7JM9z<#Us_<=?C>YdkNVZM_uYb$z_Nrb-Vc6aqou4h!={Ylu-ul9gfAv?=JMfM87{0`a5$)=oHO}G}6kPYo*XQFz z*RP;{r?D_Yek_hP@_7AOD&_M>G)69NPl$Fj!})l0t?QxU_%vMq`0;k~Qw0ShR-cNN`;$bw$!3M5JviE;6F*QAst=`?BQf_UG4wBTJiD_xd$vYA=w_ypBrsa}~Kq>C=$j zp}>J<;`+fgTebIFT3R^%M*(JhFAWZ6q?CQgVK(|VSoJHT!eSWFLB@WG^b1sxW5+KQ z-O;V}x$8LX>uHHxU%H7{?IM!Yy_YpX{LtG?3%#kq1XD^Jrr~DliN+V*9_B*>OME*9 zJ`JC{A73?|O+83qASO--jX$2A!w#5fpH=UR?4&t<8p!+l%E==|Mcs#_CLKv}&L>Cv zmY~;=fju>~(7Nr`0mLz}f;0Dbh1+SDNafLyvjYS+eMs1c_^RumvJ_nI;|moO(vYVK zOD)#%n+mKE7NyZ2od}P(OociXWn|oUtNh7*Nncg2{qu_NwpNBjbg4E+jFM)>g*Zwf zcF6(t#j)@vF?2P{KkkMWdh#EgChwDP%V=jk%i_3UaDk_^If*_6~2*t&962_Np8edJhhr7laer}AyjiLjLZ7X9)55)7UCUyu1OoOMXf-bBM|?&$KK&3$;5258Kg ziHPK`Hg(3JV_7*5QE#62T*gI7TN8RyFP|aYolSlpy+S{H%*h2Fc0rTD0piP-OB3u? zX|Cdvk4y-U^3xcfETk;*-FNLQOfVwEkyp7w@U?J?z5+|1|JP^nRugXzGp^>IWTDFq z=KQu}IjQj$q=AExL#BpSKMj^Y_oWp*sXJmK9g`O!z4-Q;0e!w?YzHP*kAsk~%c~Vm z0f7Y14W!XXKUC`mNWp~bi6oI8#z5hnFk(&GpA%2{5GY=Tx_=2Q?8gnI1IhjlkfVZh ziX!=v%#_pd&R698#cVt`#1;z+6^Oro|56-6SoL$8TXI-$jeyF}4)tzn=}*IO4-qLh zO-CZOu0^73xcZRi%b`+18$BuF4f_~soVK3Mp@AzD6gixX`pxD2{qH}NYP%55^^J|3L1~I7Uw;;PX-+`GY!}7%ZniNw z=r2TdA|`OPJl=)G=mut*K6La{1xM8usUI4Y6bml++2G9E&dujbJSYG`!Jx@twEux% z&QC*EP3q$A?uGWK*y*4kJ>ANzcfL{>E0ZER^v&|R4+*^diQWmCU;CovLlohM*K!!r znPd6Uw0eCu={Rk0d0=U~_eo0gG{7!tbxkMuXv?AItJHx`&rIY$E=J_$UcJ&0NLe4K zRx{U(mhnqbU7Z=oH&)T{b^EEYdp*Od1YrJ%-&^Kw{i=QFC}s7IWDn zHcX=spiCNV~NPM9do{eau9ucd*v$5vw{+o zt>vqQt>HYo9YeP%^W40#m6);3ea8^ohWo>B$Ay-RJv-g=U(k6b<2C9Bng|9F`Bh`} zy|0Xzq90z`d}{pBt!X)bTx4Z13P!AR3o)JNI=55e70b<{x`n0D%{o~32 zQU0CvTmlkVxY?AmPTq+g-BVOlHe@l#KzKO>Od6%UyAsK=2eJcnN8EfL3tXdrLD=53e_rQGR{q3sDcW>leiEPZZ{C65YP6|;L zN^uZk|3z6Chk2e*drTvHVo}vR(}b`}1N(B`o0k_oEfSZ?m}{GP*~Vpm*WK{X*zaORB6NHB9`!N%qh9dq$EyZl`-6VhBupY zDh0_ETx#&mMJPDQX0vV(U?$|?TF`qP5(TyVSXz3@!Xvtf#@=K`%dhzD%cyrFx$Y55 z{H!g zidRK`Oa0kUF_hR|hk)+T)Qn;o1F#@F9)W=`vKWbON5YelbQHjENJ&Exf#eMp;(WX| z|l6pLIg@Orq8Vz61jYz}J3&coV0IIZ$Hpef}z4KTEJNLWqxwZ;#w723wp&^24wfXZdd;x#gqmnjkoxe7@fnYmVwy+S#z@w!>CnPtgvBu8W0%fF@C8XCgC;<(LTC*}P{1V=@|dZq@!k<1lCL27XI-Nu%6&%7D|qx?up z^|s!xxa^$JM(HO8#JZ`s?Z$h+2D*tKf zu&~E&{`*WU#}B>{UbESS__Y(}ckDiDgff(MSjb2aQZ+V6(eIzP(g+;98ZgtF_DjA` zYG^m(w_*wJL1l>yZz&&1R(L%BLQRu%?um%liwtoq-gvvR(f5Mp4}XY$ba!JbNTB?1 zn%p0K5->Y6ljrSGr1R3Wb_QeJ(f-_`;%*~xpxDcROqDAhMZ}RMsD)RiW>!TD-@pC1 zvEb5j<`DD+Vb#8PY+9Z*_rkwNFPL2q647~29PmaOTN0-sdIy_es%m_|r+!?`IC=9{ zltOd?o&PYN#aQp!+Ih`Xt61<}M~&Cw*4BOSWoFCkzEq47B6x0KW&V!6tI6B_C$#Jw z2^X6$)n})8)6*32lnn3O$SiPGw6&cGO32js@MCZ8mEn57Bjs+V7CrsSdUA4?9qnQ@ zk;Hk(#(453b+hsJ@2E_ZLqB!}1v@XQ)W>5(5P75z@v1ZO)D6J9=}8W2WI=ojF2I7y z>32*Jk+lO{;YDDTqrU@c7M|*5P~TsQWGyEtPE~RclZOzjmW{>p12GRqJ&HZ70c8JO zWHnp)^`W5kuZFx^N$SU-@#KnM1qbI{cG90}qyZ`gNl6a?GdCRSWz9DMdyw{s_s;-y%%X89j z?bpxQsJN)8sa~R+5*{gXlV}YViDeB+mok>=DO$XfE|}&l@Uh2=UElj)Qc?h)os;23 zt3r_xYvZkbFRzDfbOXz{>oLR{49iN26R2}L1m|6^9C4?oes;Gf45;g6FGMq|K1kZ! zs~50YdW>Kgsk6phOilAX^c>BK-HIwA+bB@<%_<)ka8Y#5Q))%cp0AD-@g?nFN}b& zY#~DBQmmThd=kmR7uQ@_u-*{2}8`YN%2)3?~CZXdhAex?S47_=B{rtEr`hD%p*Y#Gp zXjX0=(>b)e`$PK-j4UXgNW(168G};%>avmO?}) zXTb~o$8Br7TG_HQXKlc8p8)b;!u9Vt>kq)_#6luZudblrC|Iar=Xv)vlTWF@S1DK= z)6?k}x=zn0Gu*ME@@^^oNrgU5{;}GE%X%?G%k7U+Q9(|EH-0LM{-5_mJ^?h;3!8t0 z$L9vI#YQ-Hl@QP}%P1 zf&v3!E1{vWGWE;0Ai?A#cVwA}}LPU9{1*AIEwMMS4J5tST30=065o=oG-m zArPL0f?OUBB;dw94%GnOOV$PT4BZXTm^Fgxh!Jwlw$vvs8Y12OV7v-8F#op z6w$>mJ#|cY#QSF`V6vE>U(;{w1p#Mq-lb_)E%x1JfB$*GkA{3Tm`A4Tkrr1!gorQp zPDYTE?yv27ccB?~5xXf`*P0D-e4MaLzaqZL`OYG9vF{PxodO#SbeEXI*ArJ zCO*27ae~QVuRuUq({v7xL)rG{6pheY$#geUuf4r&3r5EB$V#lv1#C1UBSg7uHpsIq z|LiT~Kla{aZ+E&x$*@v$eDGRby(Qb#LNBg4Feas6W4OT#L=}is8z}O7G_HHkuR?t@ zu@%Cl!Ugr@kPr4Yh*Wmi>XiQeABijjWINsN>pVizsBw8{AHeYZ0pkFXdDSi>tJBdG zlV~#6j9!mQ=q6~BWFb@ZJO2vUSl18{&`h0w{TW+-oRwT_eo-Yg;jS1mS z{dAYBb=l0Fhb&yD@;>~W|#IIkfvAwy5W9pyfz;jTwZ*!uq&CT*k$kr-Y3}tFl zBPe!%reI=skuWUtgR@6DNzkbKG0|!DAw40%?6!*tzNhuWqg#GZrTlg~IZKGh^!pgo4oMNMZetfC`B&a+k3>= zMP#(c+SNEA zJzCgeXf2iZ11-a1V>uwV_I6*r@H48iGI=?~M}zU?K|@4)gO^I@mXft845 zSPCNwN4&Nq?iRS$-qP}a5+z(+id5JLmE~BDykc$|;B)1>?tC<}j-Ss5a!cY7N-Sn4 zS{-)vp>OYxtDvuvAaq;#@bm)^LqC^2@z;kc+fd3c2+)eGtDJs{%zVh?d4Sj4{T;N}Ycjs+ekgxywc_^1^MzKb>h|YQ z_Q$u#KgCQj8k=kbt2s7#$av$N_HVSP9R?RlhK;(QAQMr1A7S8yIlP~7u?jlvESnpb zlk6Uk%5&hF4pzuKj*jp>>ijB&+Z;$UL?{d+sNXG(+@t|hJRk zeiiyj5MLbxrzx!XxE5#HuG`iQB2Plck3Bh_G)g}pFF{qUM*FP{g{6{G3YL?O&}(HY)NtJ44VYo$v>Q&d zIM;Oki08&N;R_<$bmFETb}cz_P24x{H)ht9V6o4Tp<1Lp(@g zc(B!p!mw*+0t6zNl=mW~dGTM@YnavFNN5v@b=qVM-IBq5U75uHbNs=-BPU~9fSep{ z-PI2~^BRy(z)4bP7jacYfo+@|Cy~9@!tjDT))bLya!Hixh#eTg~tg2tLI(X*PJg(zM2%y#q4OCh@;yboIMC7 z)X0nY6_+LN#v5(=?7Q5|@W)kuF3bxuA3<708ju=?x<9jSpE*|0dBqrLPp4=V+D4LkLzNx# zbrTVNM%ME0-8*+r@zhN4r)TY$t-3oZ&*FM zj5?PthLn{MXf2*zs^m_h1yP!1X(Smo_Mo5LazwaosYtu`<^he&!<%zB1jB19Z!1xB zJmfxY)Mew;RI9c1sf^Kq|C0p}YaJ@Z|cW2BQUg%fU zKxG*Zf3m1N^MyO-v@Z9)YJVSVxlEf-a*{`KQiL=x)n^DNnohmNdk@z%f+xN>X@GLE z=O-^R8WHVBJD@)^tE&$%n_jmcGfi#JFZZJtc(eA)C;)6K4cvKIH0?a!bc%;}2FJ&@ zPeX%))h%bF)de%;ZDVPv<~H}wzvekF#OvDe>Q?~qLSi-emN+2&(ZIF;0p%Tkwx5+q$26Sf%8s} zeP&hBP!U0e;KlVAO}~766HT&v@{yJd$5FC24A+=yeS@tV4pCS$!s<9 zUJ*z(|0bx;rNjA6CjyGMT+Gfwvjme89{vF1E?i%Is$_*AAmu%>yUnL9f-1$cP^vfY@M%OO6`u!=$9#*^e5u3Qk3S(vS{Ih(# z-2?H0!8|@TllqL+0s%cn!~60vudwcu+B45vql!0KiG=?|30pK-HQgqW`gQ_j)7~?nv2(K1P)8L}ruubUAMNpdY z&xjhnt8Bt+e$tTS2WvLNA=@QPud%+yv`LqcWjVGV6U&18cBpKLKq+E}( z(yN!k=j$BY6Re!~Y|`?{lUm5-&@?;Nd|ZByM%)Tp+{#$bJj+QB;dy4MaO8acO~e=1 zdkI*9UUq71xiiEY<{89=6TXtW0n}K_Kjo=?KuIT}nHg_k zQwF;JwtQ~m6;|Os_3qmJXKZPOg`Dd&ffs|q$QR>{rz)wnHNvMo#EA6o^JVy1^7gXQ zI^bX|b7-*}7IpNEEiNt9UgNef72OGImYl+NOOcx@+@=42D0|DOD%-GYS80@3bT@*6 zQc5>0K&4w`(cRr0!lJ>TOF$_B1?lbvC8fK&8}_xH_x;8mdptgSjL)AA|2Xb@-Pd)_ zbIxPZyS2m>Lt*QD;t{1~887eRI^25#9f`CGjoiJxy~`!_z*u_?JfjKqUS~a^INAi{ zU>rNC+!8N=37rcx%XSY8#AjyGB8a(&(js@2nM%P6sQkJOg!>a zKvC-fP7Dmw9o5+8J;)^Bj(XNF}UDpIw z39Q9!UW&XySS{72RXPV=Cg3Oi_TwjR)@s9>BhHe&n(67Fw5HBI<6SZ9V!a>s%Gy$FQbU~SM?M9{`Y!ctk)!}{5u4m?< z=Vm`}w{QchCtiN1-m0Uc``pY6TbeBEp!{37IaL;=!OqQ*tv}l7zi+SPuW5N)4H+^9 zhex+g3bMI_yN9^>`AZ0b-RU4C7imwa;GH`$_O{3<9u$aev)8dR7gsdf!oddZKW_S| zi?n*(-bRszVxRzxy1bw?babJb3-zYUdMjDzfPQQ+hVyO4u_{IaN?iw>XOlc1pQ}mI z(k32ibco&B_?9y|J4U~{G26_6 zZR8kyN&Kash1P85^76HzJuK$vPKw{x?i&#zw}x_Q@U{%&d|VrKiM&_Rc=-+Ag%=&y zIJRZS?`vjz9zRH9Q1iLA(l{UH3M4TFn`}!`GKhC~`T~WAg5$5VO>9#VgP8b5l2LE^ ze`;t=5O`!NgjHpTs>TSK0c!Rl438Px^jYvj^{2HS9GvUnjRSP~Dn(5+g|pcTxN!bf zeuD|WLS1xliE^1IPMJen6rs34N}YO#u~L-HHsJt2!P}DfRY^vFxWblDKV1=Yn~*NT zefABjidZj44w~-Cy?fRSV$gNES_K$1hTWo*uKOukTEp`lUbiR-y^k`y55oX)SQbPQ zRuJa#XNcN1tLY|SIR7R{1l8$4$0F5ln`U`DZVxbyJyE=~=fZCQxAkLgx@Ql(-pSE1 zCo@wFR7j(wXf|l_DrMrVgV7j5lq7o4Mu5QLFtCgt{SV3pVKpWsA|f+82Hh`9mcAeu z8vdZiu4*AfOp_@Jbc9S#!<0#mFHcS!41l%uynQ9ZU^YV>CgOc@cz5DPIj2w5zj(Iq zfMLqJ;PcR-+KP@x)<$^loKkoWI4jQ6@S-A+*Y>AINEl`xp{-)z_{@O`5KSyhx9wRoIF1&`aGf`F_wB%m1 z$gjNS`K@~X(cTNTr%yZ3KL4)$KCq=6VqS!c`GaSBlKc6yU+I7QOn{f;S_u&pRtmIM z{Ew4E49OP>iF-JSTo=l>C6mn}97|q*J@eJOZ_KC?VtJ}*<$nTfhp2d?GjivB=zq4Xn>vwVF2PP)ZE<$^W9Kw3Jw zS$4W=OwybUk}T-9xc44fr~Ayh?^l%dmcutuA*-OEpz&EBw?8~WW({IqU;lm)x6eXc z_mow>{kNrn2qSOU(cz%@Au#RMntZB`9!yIaN2OopfLFa%c6o>*208z;N8iXMBxHV5 zVKa=Qz8*O7{AJVL_N2Phn>PeGL(h15OBfEtA!9@fe3)zVSayElb=aI5j6)IgnO@u~ zB%3+&vV7?$Ab*WX?)xgHx~q zmQvJha?X9(%S(*G;!Onxvqro9|E^qAbBBU|rV9j$Uan^c%0HHd1A{;e1-iWpnI_$7 zAnLCE0B0sGcpW z2C$Stm`D#xL1*4?&VqFq>JbZ{9S~G6Es*L1RaPp(4-Jjt2^-T=JQ%lok&Y}98;}5%d=!kPfpHbzi;iyb--VQ7JWKh9Xi=E zdPy%7EgITYN5WIGVVXBft=P>6kFE!Yt>eCG?(P^38hY(4LN3&v;u`TrnwTi#;&>gk zhblc)Jac{-isNxm86|xqI8uYZ7P3V4AYHI>8Dq=~dCcos&x_&+xOrugUIXSYqt}1? z-76txw?c;2{|-v-6ZrG-0~`Rv?7~x`Dro&Uc-T=U=W=cwCmXAUN_NL9BS_y>2UNQA zGCz70uZDuriufwr3*=|zarI{HJaAR*)G)V;a;NlgIc_5=st0m;MhsrA_+8ETRyqCe zU3_>id(i$a^~WpPmZ{(#J&BLpGdr#gada4bE%{2clHPGy!#lg9#D8r?(+W0&|;o zIzYr;fF~@a)2sgd24I&Er0*3_1yu5<|LhPDs^S1_1w?Ykw}^-mt(t`I>T3c50lup1 zcw^WEK*R9=VNjjGUcQ7QDhv?dK1A`U?b`oIB8~LJr1n@66+u&oEL%0>uQUX*Kxldd z+3@_3pf6So6$v6y7;(5p9!GOK6J@7?i<2H}e07^%(M?$AjSSw+rBN1plYFxG)2H^jdLq>$W9`!D%pGH8KjHeNnuS z+B?$DON@&r^vzql^}N=#dVT7%vaYTk@kzrk#opb-o4B32tMTpXN99-=CvG*A* zH{pAQ#Ig=nZ|IMHIBkKW#7_E%m_0=_iwDELN30W{|R0?@+Epwlc* z_l9$0@C;*UM0HIEQlB7T&cJ6xYH)#IbHPM-=e*1CGUgmQsX&?%@3%Af^Xpc=wdIFky zir=&eVN!nZzjIS7I&N%Q{fGygB!|rQdJRM+iQNzp#ZXdL{(*WteEb^w@#4m9ep53c z3yhrH!P&4rIlmVmo<(rk-2PUN@n%7PhS+*)DNPt9A63(eh{O*0h<%?TtY1uA{Wi)- zU{RDi+TV{M`}Wq-TNgc#qF$pIHi47!!gJn^4*U|DCUH7CzM%2#w1366mardNpM%D) z=LB;D_5HS#~Nl43Rg<0Vhqg{b65Fa+~-_|ysi5)-ne z5-Z4}B%1tIZgZB5SOda$wjnQHCXQ@(#o>dj4-4fUnmC_IF4ZAh8`8HhfpAF<+ak?_ zszFV=VIZXauJZ`3g}WC+Z+eyQRC466Pc-%A)fvyeOwH&&LRpr2Y{n;r#K~#oRrrB} z^zK2VL9@-H{0|%`7DvyY=N5jygJFIEM1@-!KIhQXe9Zhe-r!@fy0X0%?*xDk zK7?Przx?MpK#230qzSk@P&4u*#z6F^Ahvb&Dv+$Tr?A6FJqewJqeGk)18rKivl;(~ zhDLGagnQ|{-|5UbDdSHnlNSgvq0$OX1F>0!``VsVhBVfFmdc-5uSKDS7>z0CJ)z!F zLa9YMRunwnYFE}vzN?wHT4OV3QZyg;ve|##3#gmxp56@eHo}^TShISlVqN1jHg7jK zYU@^yeVvjY!p;)=r&mzMYgJes$5^<*vndR8K+|$P8^t zl}&`(dbS*XQX5vBfD5Dwt-Az4C&*IX3l=fo24;{>KQAO6N+}#)Ae?kbNR=} z&I`YBFY}kYerJ-Uz(8*o#r^XB-i5m^XjxDEanVUJK~~R&vf|*E%4?_a(*2xl_+!Rz z%+#m>v;O3F*aA9{5tl%sMG()65ll|ArJ*`$R3xCzR`;dfRPjZxrQ&_mOr+*{8Hv*_ zxb`+vD(R#`wTep6`veG8SHP6szRWV)6c=^v)^LPDk8dzg>-@)Zw zqi-9bRSDY7J(PR5_>|0ai+fCFRH*~w+%}eWf2tfh3_fy>r~oNDTic_aa_XE-opDS2VS z9Hg?mu1;Ii)P;((NHO$j=@TBtY0{~&nSO0KD4|o(r6Odsas>jihL@SPmvnK~?c$6Ci^O>l$}G8C|1%t+NB&k?P9Tu zmB&`FimwA}eD#FU<+9J8o7qB>2+TW=M=+sMQ5Fvq&h_&B3Hk&Bt{3-_s`182x3xg8`g~cir&hbE5Tr%WPfx6 zF1E%+k1MtB<`ygUquG5(HMeTIuJ*6eB8@QmOrGsFbBl{FY|UGzg&KvteR?It7z1W8+s~q^v-s?l<|4@MqA#k#{T7bW+H)07i*J# z{NE%#1orh5PpMf}ZKTQ-_?}+a=4aDGmx+UW6dn(?LWYYZ`P-IG$18TO1i;?o^-hY( z4h3i161H&qb+LVIu={jq9zCOMn!=397Cj48<=|W(p*JVxJCD8C4cq!;N5^f$hw-g? zqzhKMw>6YD$+YSLlO)kb>;Z6#jbEQ#ctLsHWrJ1sG%k>acv-S?+HQ%)HeI1Ys$;es zdcoHeT3TfZUGh9-T3(|9wbIPEiOjM*5oYVQ^-uR|I~)gL=rblR?=*Z-)TxW-Z_3{DXT=2zA_=RC>T#ZGqq1;tDST-L$kt)t~NDjQMNcgxcsn4dl zs1r74x)JX6pfdJTh%>Hl#gC(ou;!J%X#A0hfJzn~8m&trQjGqfaZ?ld3BTl!R@(ut z`$Br>DPBlC$)CuXovwWs?QE5qk2t<@^EkY*Qj)n_)g>Y{E?FG+9XLcf_?w||9~rnE zZ;|hp^8d#kt7+oVJ(7jTRmGN`i%W^G~#m_XFccAwRu$9IG2ZyL&{# z=h*GO5=FVb^OqSVC|M4Lf~ijzbXmFti>@_iL%BiX3f?^r+tl^jt2dY`B=GO-h~8O0 za9;?t)Cmw_lcDMVUUBiVQLJXf!CQ8(zH;GmbMmUBdzldvv8N{?rmn*r{IvrKxk0gV z#n5?*cI1amMc$CZbEI+q;`U}Xl!F)E@eJOX=H7>`TK0f*{8{3bX`8%A1~#+V+$u;| z?Dcm~T-uH7dCoUw`SF-5aT$Uv7ebVei=zV_OmWwzm5svPL_#N<0N)-5ngXgp5pv8# zSWRr<)j5D`e*xY`P`W`>4Zy^pW#&9_C)$lmR8$WE^F$N^ZTJD!K&Ms9(I`Yo{Gt_C z^eLErsN3sr(5II`=x$Mz?Wvs2-qFQ(kCqyU`~f9g1pPH9OG!Tz1x>w#xxj&n!USIh5K zpnC)<><#Yc?@&<{oZ-rcPbCG#1>sj$PR=69Wqy7wo*9pWaZQF8RvW3uaobkNXJ-VY zseWg2Xij~v!#(o0#%-MlRlAE`sF@8Q#Vi_VweOBX4 zm5#M(X-eZ%%DG$#W|5H(7}MTj1yp~n<^@F!j}oXnI>vi?uKyC$71Ln`r-e?5L43^L zKQP{jVucz9QI3v>0%92BWD<)C5Jr~(vAzeK@2iyULd{KtVG!PAxyz8)*k46c73~qo ztdiV#{*PYD7#J`3cm^;-Z33{7`((JDFl2%27Xc#7QYRbi4<~& z?P+CFA+Zz=EA;7m%5$u=hdTWFV*93g#4j|}ZYQThuX^wP{8*}7nDxZ?ws+49FM&<` zrvKpR;T6lXXAR$Zjx;}6gofhkM4sD9^Xqk#R}*CuUGIf4OPr-`)I7kYImC;uNAGm4 zoXVX=gbEv!R09vetd<9a{d{1Qt7D1KGk}41KUFZ-Df=-l1EW+dqPKJes77ky;sKrj zhNK2s?;c?Ai5Atj{RXXUqo5a)8$hK;0dUS`#${YR(QH@fd4P&I|LLVxk>p&n@J(#D zarJ?m#AYuW1zBpsn)SOYnij>KyM6CH)PTJxEv*llsr;^UQ^3-*XjoZ$E?$?*v5~Np zPF%UI7+@AXBXZw%2TNW4UfON)e7%pbG*k8c@eIDiY=R&0=AF?{&5#46^@$9~Ds)qr@5irgg^52b1*9k`!aZ zS)Tj^Nlm1Efv=3$#!QZ~Jb5V{^_0SGH`;I*EtXLXb-(RLqJzP75dJF&X#*6>LCMDJ|WX)5wJ@n;> zNuXB~evs-WA!d`z|9sEWdB`0juyGdhwq-`oC)6`>X^)2I&U$k{m7t`Zp#7qu>JKVi z_37ESZ%^n+MUB2sgfxVk{dx%>*yFR;A5x)wQNx6?A|)ji!f_=R=s3;13F?Vi7#Ww{ zJfwvSwzsWEL6gkfPT{%`|DT1&8-7kqp$>SFMjt~}r#pKe^iXiO7-iyruB$UPHqMJ< zkSS0Uy%~AQ&dseJMfSYIUNqsDj728%TPEe6+D$0Um~R-VfMn{F&E0KS?I2-_5CJ|x z*#YJF(9Y=-qN$OLCrC6CXyd1@RiAQ>`fd_sJ72)#M{|iIZaq9NN03ESurhkT_VZjK zVbKm#W%r1|*yx=e?L2UP@Z#Jrd#l*Ea!Mt##(y6so%;Jrx^XbUg)io~<1^Hq2Esl% zo=WS|sZKL}!601x*a0-Qg#7I8Wv-D5mDWl3YkK?d5lxB<$g#oA+calI~4 zW)0Dg9xIerSGU{H&f*=oQ^+N<@{O~I!o3fFToVL$hS*OVa@z2u1o;VQpKa#lDMu|p zyn?27Scu~E!kybLF45)YGNT*cF*rOxUCvaFYBr_#jn*QJ7Z;Jpg>=GV`y)d_|As78 zysUuJq9lxbU}^93bY*s5LV7p$s42xMAIZaTdJTQ{ZVp7<1l2H__6NMDo$c-Ur#lCE&~rdz9|81#HC^3w zKoeDAuiFo-*<>;2!s`*-11qY{0CZ|45K&e|Ocvyz+VQoltSaDssIoVlXW=DS6LdOa zzCQ!Lol!_x0@25arh2_bUzR6Ny1VwaN*Zk`^-c%Df-=hcQvwM;5AX@u3(^R=?{}*L zhK?^cuyl@AKffg8R0|i=66aTNep_^a?JO)q*_py)uD@I3X4ld@%m8K1=saLc$I)Cb z+&+D^{#dOt2xHx>uZwuiS_rq?ixaoQNu1P&oOJ!Jy}@V6X_F^l@>$v_`MBCJOn6>* zhG5!jVKPE0CG%djM2c8Y6YPqKwyC_b>QAtOwXMgW=60A>%o1BO7tSb-5e|tH6}?k= zx8aYRoLuG{!=z?(OsGsuxGP_H%|~a((VCZ61ZT$gHZLA;Ql`Be_0-`lIXXI$9q1x; z>qC#|diocrmcJt2_j5JdB(49*yWh`X1a#(SU>7Xk)&q$xEPf0nNstXyEqAm?_M!;3 zwx@CP!}`4D36JpmT2*yfz|XW=z1rT6YNNwe^bAFap3*KQWvhzRDN%70&Rb&A>?br>P?W*WUq8#Q&;GWT< zrH*g@+t59-b;0wVg9wVU==3c&-i!~5%%1i)jt6F`-9>9Q!xIF+ z5As3tBZ-4Li8N?peoRpw9v-f;HC~bnd|51O6^50aYv796z#!UaFYnu6<*+r@>SaBX ztfb-qS3y~OZPFNM)+%!%F2_bl_c&Cr;!=a@r#u=l@z^azz=DRWgbKd|L+AUDQ>COql#10l+>2euH zDqI2z;17i}A0*C$WaKRSJRcH+C+!@`_5I->OI2c_%b$kZAz4Y^x7A$K46A=%n5q#W z^zd-TrT>yd_+H(M&W(cvI=@?m1VTo+MMcZ0f+cRL&0b-Mk9gUC)dd1ze4UN95M{UD zLqd|fjz#YTs1nxa)bDm{t`Y7qtB2w{Quyqf%*f9j@^4X20;}&#Yklgh1s@q-+x9-G zl}a`9yt`T2NmHmNS=`3tyx@Mx4sqC(m}w1|KCbCrt_&P_pX*py%#Cr`8XoR=m6yklJUqjQ@CQuuHOE1uo`eD#eRA?XJDS~<{XCRZ zIy&HIo0qArhkv>`ZK)CfqPMaDxi&KOX~9XwFJs zD=M;kb?wD3P!-|XADgVTh%<0q#7H#hFZv!UE>Vo3f+5ltleO$E8WMijPa z`n*HAf@di0QFK&pMpFtSsKM%&jPNC%>|&mbnDq`zDi1QKu5jF(Zdlj^Z)S08>;QXW ze0Fihdwvx6q_wxy>6-jV5cpfyy@7h7EEafI*&b9Udtg+eY{J>g+Pcec>x0;_vm^a? z8RpO*kWAsAEua+H!gu8NGL70J_)cF{$Ggn@!07EQuCJIHe)TFu;o#VOz|#i+w=9oL ze{-<3o@h_k{LXKALn3p4hOLjWgDL2`%@JL_7|!~d_lXu8(Z{JBR~Jwe`sw|9N5{se ze3Urwc^k{)_1_`SFF^faF6eX`1>LR1ZO`hmj$SiZPL!H#EIv7UD)bTPf+iR>+CR+= zFnWF;tbH`<(MABmCPBRF{WZJ`CL!g4Cw>hKL~20qR}4FBdC0CdRXHw*e4|RLcJkVE zwGAxh9NhTQc8O|TR~YGUJF~N8U}|d1lwoV_?m~jgEvaxHWCr?>_MJIVk5}qz%~MNL zm3H1ZhvyA)ad8YqYzfH4D{u9FnxTpPsw0^at$6b@<~i5b?W5DubI03XJQtW32^Ix) zQ?5HbyOAb*iM=_Zfo7F7!MAs!PCEpBv5Il45^-n3B!77*=o$S;90v!zwb{)BZnVF=cYK0~>If=kYN`LwBj@R8 z>0iM4YN}zyR+3h*|wNw57nxKLCr?+2HqB=d0JxHp{q%4(0bPv{*Xz-bEsamHzk zwv2~y18#X|?&dO$0bRBf6`Uiq0sH$^r;E@AC$m%Jml|r-bJ+^%w!dg!SPZ70!@7HJ zZw@PO-{I34D)64V*2~9T)6zdWXY`saF4yg#ljMLvtqTu21()&~{kp1t{ycBV%lo`XL{f-JI%>#?GSa(G zO%tD#wBN|`dNwz!yDwE=CWOGabVB;4Lv5PRk85LxAJn+bo48f#rsyca1IU%u87zr0 zCS${7o9M>cUrDsf!|gtP_~0d6{5w4_NH-B}ZI!rIiFxby=>_<CY@C^$Do0X_4ZHytgMm3)B*ejzN*T1K~Gb8PsHG94>(Ck6dk65oeCxiA&{ft zbm5@aBj3`G^&Mdwv>U5yxw@h5b^%SB#G#Un4_x;A-L0sg{PvaH&l-=1VwW$sy>%?| z)SUzSdAKCTBWR>`gpgz|S(RmK=Wj*(2ifO8Ag(*=A0riI2=F+M$G}N4-%$eXzA@F$ zyz5;QN&Wbu{jp}F?`N7;EkF2F(X&=gQtswslByA6HL1@j+*Yn!A)2-&|h{tyaa){kR5zZEG=cS6?d&X z-gs`;Hd(%9C+(HTo=&04N#6EiUn_WJVqqb{FYP_oJ*pbgf)D;O7*BUELV|AFNpKs# zXEwPojM1@;)3iRi37lyV#vSLQ&bd^nqe$rK;^P|(Fv`hJlUw{1V;1wXWJo*PX6pW0 zMdtzULJdtI4heCJ%^RG>re6?pSlo|J@A{h>hTKiN&U;ZU922o{e64D z^&eJ^{bxu;+PHS^%kZ-2P~w^SeK&bSLj_F?8wurbA&kU!pKDc&=f3{Phcznb#&ay6 z&sH`5(1>h@oJ-k-!pK#@Es2%R{*ZN{1UgcIb3GUE(o)shdi}J3&{@04AwkmE9HT4F z)-7l1p2q}^&J(ECs#(g5-x{A>1Vl+b*PIQV?WTsYTDiIo)aQMWna}eU9Eis{>}@!=%@77QFI3Hno*b1;C#R>| zpC21p8tR~|0lTI$Xwg!i^Epdf&|q6U0F|;7-T!d;C=nBt6~?eso-iQSwAN3VmgNI0 zX&yNJHOs9hR9042@_lbEpWr!YI?p2fz|WFXuYh5nbzd1kMAY^3JkNG*Fvc5iFRex! zgkL0>VbB}1hm@aGIV?ryA4Bl!z;wi44A?ZUVdK4M4%Urp>0Ujyi;hJ2-=}ixaK#@9 zd^PtAu;QQH_@Eee(-iPzZmE6_&vw;^({HCOED)Wp*yoFQP@+Yy+Z%zEHi3pkvgUcw z$E$vZMoW^1M^0W#R8Jxsg5eh&usKoQl#_|1Bvqa<2SQ!dx_U1H9Qx-OUQEt)WDY;3 zc529693K|%jUNEtN7kK>yBV9*m5YV__qj??_s++Lx)1BMf27GpMkgR3@@u27mOT2H z%DxWXcZb#NK{?rKI*r_E4}q@sK$5O5P;HHwi}7t|&&P*F;xFHC$afnVFTX6D+KHXx zUDS`(mAfRU(Pd;iamU<%Boxwcln!qC-bnbqcMVMaYirL*l)uK@gTBMRsL=l~u&$*u zp)h6dXTiLQ$F_eM0!<$V6EBXPNp>5*b?WEVsqk!5YfS6=;>7f;bfxSwPH5pXl%gG4 z{Ep=ie^@Qnwmifk+}z^%Si1-12M^V|TWnX&@+#Dpe2(1bmCS7_;QYUUOVpb!y*>X5 z^(NZatKms^BFZ=m%d;a8aBgx@7Y@AiuhAfIifw;$SM}<{uXgIr(IbUiHmLsqM1Dc& zl0Mx4+5XO2iW&ad{>#m7Ob^<9^PCxx3pMVeJwlKO}%Hi=k3Ls ziH-n0zv3=mYs&=e?h#cQjN!mm0v&6Iq)dwfGvUZDjjqPC_6ZYHF{<=IQy$)~jJ@ol zaB+pvNKnjy$j$Q8boP^YZ5NU{pQ{aDblly*=jB(#81OG?!#FOBP^zN#D?%ivVU=28 z1AgcT_)SsOZ6Iks`x z3WpRJHVanDG1AO$VFdh+X_-f>mN07i7mCs;S;p(wdn`y!f2(a!R{-P(7MUK5zev+y z_u1ry`KE}0&XuKsn7u9+yav`5aMQ+GojZ zCZoA2*gS!eCAe;lJxQWMF9^Dw=zOAZP$hkf7VrWkyeIrJfVG~7VtfELoggzP^0me< z2LsLT!laYd9v{_4@Lb{Mvx$VqbKu?pEPvuiCw;ESC z*`6p{{7`ikiNeD0Skwq*#ro%jw6wl+@c4nXC&nNH#?uoz*DEz=cf-fBwDgAVW*CVy z%|}RsQtbnEUZ{w{)%;_M)StJ`V5EdxZde=J<9Z3M8kbYZY)tZi}Y4d&uqJ z$GRRyl2vPdcEa#wwm8(@AcwKX<#ie=re$RpS-1qD-HL8c90_bD{VnyiNeyI@E#0(I z=--{D`jGWuvvdzoMQW3#fG1T&N1agZOBaj>;kMXv_;tp`ZA)2$W83M`=6Z`_XqaxL z3xhF&DlR&SfTou&{(rb73`6u^rN&D6o54HfnR>tW^>BLG+3UVc04}0|8~yUIFdldIpi%PZS;whR6B%rGsa*uP@uPi=@mN3gM4%C&=d*#+27vXHt%LtC)YdJYJ;O}Fp zP3iqatE3ZnIP?@M-QnU~J+106*zIJgAtv@Kab#rt7iakAr}sCu9p{^hr+%MqMx5)Re=k;df~~$<1dtlSC}6n zS99JPXh{=H2CS&R(S3)LRLDmzK2zuw|F8JaCM)8RS@oAq|Mii%MEhgS;QUr0!AOMe z)8Z`aD0fLie5jf!i#<2J;E9cPv)AwCpFBaHujsTFLCFF$@3M2vWc5r9pISI_H9QpS zfNyM=R_N7zFFXiXb59yqDhfodSYrSFeGq^nGjIZt_JFE*vch#A#8vKbg!)hae8FHe zG&q`!DebF)(uVn*lXFd)5{uW-rE)C?HE}So_q0-dyL2aP_RMT?9tUrp5H?)7NS#7M zYEGV>EbyeBTvh`hDEs>4$^l>H1k^^U8O13?0S~#9iHS)*=z}^Mp~@`^+rI+aWHmq^ zRDJjE-6qfkG=Pyy6O=ONQfXC>g8Jf<3A2oRP)0QZzst`}FMy#4T`~r25`Ro!GA_sQ zft<~|*Bwdhr+Za9EPc25gf|!8p-Qv*DElK}^Tf;z@4jV}+X36pQIQuZF3zNj<{Y#3 z*gtKB>lWe|2B>RnC8k~_;K687#uer#b;DeYP!hg<>#k)<8UOR=Jhr7p$eGLe)zx=3 zW9kTZdopu$j?kd$hUOg}W`?4V$>z)&6<9*IYDng0q5NspGrvy3J{gTE8##bx)gqCW zZCqoaa*V|l4F&rzGfxJin0U3K2F3ILs0Dld2}33{y+9b|g=EVHZw4JLePMFi|0!!`WcA%~N)Ry+u-)KF$n zxV$HgjEMW^qeEAULnn$&vcSi}7#C9-^npY1msg?1pcO1MFSVHh1Axq`{%kmlglLzt zqnIk^mANDiK6r4LQELZ66LwwMysP3+SbIDFfo-KH`Sz_DPYSx3sY0Njd3h)~(MP+9 zQYl0Ss1G_H4-7;)8Ions2VFWu5Qq}_ zD1ZN>=n9*u0#GJbfJwlV2SPvvTg9!J~*?khLW=BA0R$oMl=2`Vuk0l6lwzWiI+xc$2Y1>4co6vzSNg@2eQG%kLl9`9JnB zY7P1N5ePbz>=T`hvoAAqo|nuLrQy9sUDe5A^vB4Tfq)1UbGb?X6p&Dtk`Smjw++I1jCg9+d1EwIrc{DMx2(( zDdjVI#zsoc<*eNV1D~+3TDK{mxbH8DpxM#=Dp2>%-rk;`UB5oyUEc5`XLm zj&lyJTpp%4`kgx{bd=0(b+th4O*Ssj_Ga?WePju9y-9-5oAGD=dTUl{v z)iTI~j=GmM6IXX}kERL)SYeYF#sK>06Y!N^V8H_{M7tQ%h+8>H?w9_=eX3w-A~d! z;(uwyV!}+o^&wpBO`P^O*GE(BKdr?YZ{9fjbbsG05DdmFdejMFxW+Bpqcy%@r- zxi=deG^>NZ*RO*Z3VPMORrsP)(+Lm6_!@A3VuSv*B$exH2^HGK?&7E+cvpSZ9|+e> zh|mm*@@tMmx`87|tW^Yi&3fr5I48ob80_SZ`cUi}EtQp9OPs1uZ3Djd+!p&Zf2|m6O)3wql*p`F~td|J0Ka67H)!tE$Q<%Y+3FEnZR)5U5tX$$c8} zl48-l+^7>rk`R&7Dgf83bmzxuQ$06GfqsgQ{|deiUv<3?q!`#Hn4(wk z8TU#WE(_>P*;yZx1b6`glNu07;^u&vbcU~CJLBC$67mZcc6LW=L&K~ER}uI9`473X zAmVSi{_ArAXzXIHbXeHN7zxR&dtvsEX5n>&Jzc12aEl`VYae$GEgY&lAF5lvDW-0& zrP_Ot9rWjJ-u(J=qu(!PgcE2})+8U-Kx&(@oMT`eWny- z3$7$?FOrU<%@sa|_bphK@H_b31pfqKLCz!|nB%LiichRdX(wrUhR^>G3m~AeD=yREo>ErdF_xVMa0aaTR_G9&a0(HZA1^@nR6kyye-=?TzZZW2cf9 z5^4M_8n4o0P8VgP@GW;Qz6QNu6ROBFL$re`9@I!WYTPL`?L~(t2^dPIeO+7IuC=z3 zv$k%0ZFs6g^nQzQ{!3?>zHd+YBfyyg*Dm==By3rR?L#>Jr@hLK_w%mwQcbd|=bl7R zuhRVh;%6b9e3SzyRpqlmR=${RpL{qDTZ$hj9Q5e??^f1i7bH+M01L+w93~-&+HF%` z=s+K2ekPK1*&z5^JP1LX9a=UC$OTktVJ_G9-fb~!a zpKhOkwQVB6l5|WZkJ%Rs*dhgh34q6vh=}ORSc#sZ_{9^oI=_{FWQLj1`-|P3ze7Am zH=cTTSyEjNS`}{yq*0molr)0IG14Cr^0Am{<~8%Po>-L|NAKRDE`1xLljVT)f7{=e zB`F(zbAe^$sA#&1A~@uw_w_xVk!#jcE=AhS2-W&Mfoa>h^oRi>Qcme-r)QPd%+G8V z+1K8S4!(TOHQ5(9bo4tq>fJdhl9QXvPgE)MTSz>`?&K#`e=C!RvkCT`<2+R}@z`2g zOKzWU=y2As%3n4y;Lim=?Rr79r(Yx$VW26H=85}s*54-kqvIn+rq$(nkLm|575FYS zrG9tcpQSrlah}QjyT2w=1R;Kjj0yDq)d4+Egu;d}n->liT^nG@;=}iXXz|#Hu zzA1G9oWTtGI1u`9u!tIop5^LfJk4#9 z+)HAdiZ^>VT1@OVzuP#e9M}NIHeZ$Rwolfa?1#uiSEaMExppj&B|Zr8>)^g~nPIhf z71rkB4QL=C?m)XDqd=g(%H0nPjkMZkz*nZe24FXcbT4HVEl2X=ek8}m1u%at9vU8&b<1$rU0cij z_u^Ia|6RO}>*Tgkkdawbea$G1V-*o^V(?ETqo5FF7ZqL0aJQ4cSqLpxlz1%6$7*%> zAmcIgnJIqc7~O@7IWAWFjx+Dtd3<8X<_6h6jzWr(CB+{inLZyLj6tz7GRfV^VrQ=6PAw@O`(|7 zp*RrQfg0o=PyJlC{}}KE={d9$F;{jw=4VdZRu%@K;}(1*G)L-1LHDEyyXW&?`_ycU z|FciUa^tWXdn);BCQIs}q!J)eZ>`YZ=lt!^ONHra$Q{m8g(9d>%_`Q2Ue0DB0J!fy9p1Ps^CI4dDQy`{ayvNCS zK7a1whPZw&BE1_S^vv?WMB?O^A8u$HlL~0p&Z&Ms)^^40n@uplvB;_fyGnRi7 zY%hRk)v3x?2CBOM>}q7U;9uW-3kMpM-pJ=v1CO{4J3Qd5W=r+vgSHE84E3NN!4f>d`8Z4 zAYsCbwc4S=p&Dzj<%_ZMqO0?FhduJ&2?@cz;rV2uE&h|cLY6WSmuAdPLS#XAqoIF? zts)Dnkrw$bK+M=tU%!jX4!>@kl$7T6OQ>OT{4lx%O;ucNvDD3%CE&R_!hQYj{ngo( zQh+6YAs$|3+`FmL&!WRf_zt+(Mr?lMytd!k!n}WFiZfT5n3}TSxzq4FLUmk5)i*(# zo7%+0ge7R{u>>XDuPM7&!LDg~1$89g^~;w^m9w6O$pS6~_;lXj9)_QLDEa_l`F%+I zR0)BlkMrF)AX<@vuDuU|ud-J!zaLVKER~WHm+YNCLJ_i^bo*m1Y1_HNO|(}}#WVG5 z{N`GMU}$Kuw~^GRVOd@C9x&!i`?HG)T`%?}@$&)*GUm5N+;qFQMUqfwkzw16n*2=_ zV>xy4Cfk@n86iCnCe*V-jYZvPmueCbHa4~qB|j@Vh_2y}L}C+DCV1X?9kRd|0Z6y> z;Bhf@-NLJ)eGgC4IQq0FXnpy>+rU8NkmCix;4Sv+BwDU4inSdabxgSNZk95WEkZKruc7JN=w_8kLeA~ z2`aTyJ6$k3XQ*g-cI+3S;`u!s*sykk19^BS@8!k29Cubt2PHSYpN+J4Zqy>%n_*V1 zdQibPev0G$vfHP@^3?acCju6f%Oz;J9L>>lRiVohxbu@iTyL)MUEF2wZa>et!z8R8 z=`|#qtBvG!DC91gU}UGG^b$t2PxC)_!iU;4P=TS*we+58UL9haNx!&UQTp&VBu=|X z1JtSKpy5#F9UdKxh7-A~yG#6EtTS8h>nIeh3*r4pAZfd}{`14=HEc*~{RWse3qG-G z79=Jn9x8BFfHuNGOHf)4u(kvC3M6K(nD_7BCt3y3hCh(02>lxbz+@m!RHXtq?Jk!E zNW3$^E^wsXUO^X38v`6w)-h67>vj-HoU*B0?~SW3g-Q7Cv(NPy%1gdD>G=9KXS=)J zQrYC>HmQV2C1P^!Q`*@)9L0LHCy%!I&N4BG3IWu#;-|G~MW#frSYQHGA)clKpix)!Za=-&*6Du;kr>@w?Y!sXw;*O@j zjPAp~xuu=TfOPaNxrbr+--1J)Hb4!OXrFWs{biMT4|9a}KADCHGjlF$$fr(ppL#P} zTL)%FyN=`MBI_mow0qnbFEkdjZ-0~b#VazY(-%Jpbf31T;svhbSpV?fUuYx!UrJ2D zeTM1mUvVZ~^O~B}`?jS#WGU{oFKHl<9Gk<8VrttLAdH{nl2hb0*S~yCnJ9ZyV)5ZM z3I7=v(xa@ktkBpZW?H7u7WFGKDpK9xdsY=QA{*b0c|~+@xl*6q$CH%LNJmbWDv`k0 zXt|leW$U2vgsPfR$fxls{KsB$fSrJsY;T0Y*+?$M{C{eB&%+L^R5uEp)(Gq z0hFc?aHhFI-qeUi_$A67_@qT!O;r@(kDru^Q%>!HqWaR5Di}J3d+LYI&t-o)A)geR zZtmME}@kd@sWx{LvBq-E45nk%76(xV*z42kVT$JXFD%53G~r(s4VtlGZcJ z3Ocyjf?1^W=Nb<9`RHCTO{2esLSbejbd!;jX@7V?=kd-&74K~jPiIS$*xj9bbcq_d zpY!+JrDk3}1ttby39jl|u$O=pgW0mt;wQkjoBg% zm9ko+W0ZSlyhHJLn8vTo5n@sRa_usrOsf`e$~0@>+To__`HA*5u}<;Ueb)LLH-f_+ zv46RZ<{zQV$F~3b@Bim-?0HaL2gi1D8rMBUa+HMnK7$Tme@}g&j7sQ#d6-FiRB6)Q zVn$%+Bly*2YXKXV%CS6%fFXEE0Lsdx`6CfI+x6a26j#`hyO_U4Hv9flJm>B8X!_|e zE^$as<^IPN);^LJ@f!-b+XH1bGy&_bq*dK)^oa(x1*wJ*G}1DGyL~olsJruX zN1({0yXd3M#NXRW)^6dq0zB0&$ihlGy)&?PXG1_xDetPjkmJKD6Emyi^bcTUKA7iT zsps69Nj<|QBqV*W`1uZ^I}dz}N;=K~dv}kIn=xZ!G>@x8Zf1+#lmJ<*0o=YbEe}Nw zf01p>a{1VAZlT#P-^6!zUKF(v>paM8LtsXrW~7fMCdgN_)^;>W>cTZl(;QqFYn$zz z+{+IG?NKj}C?lqj7p#FJ?T#^&Uqkd#Nii`ERtCJ_DuHJ7lI~LdLN*Y)U*BsE(!~AK z!fwxuVDlLPk{RaI3&ZRw47XzkMbG zU^onHp<7T)`~YW-GbKUS%`Rxr`uo!#Trdbq%)CYL!}s(Pk{xsy0&3jH;O0kSr%+T> z0xO>?lacBjFb34+f^8a>`}-g9;-@sEo8M;l z#nG1hDb*^`ZE-IGm6gSy(xNDXUmX4!PHCm0ORBoqVH;^S9cp}Z-E8&0^n)hu%UEdh z8SC|QQTwr}z)xZ|RnmdoX@7xU510GuG@;K}-g7lurSv7Mm zwHztu@{NZ-jS+^Jlbrbv=NNp&=A_dGFTf*F5hd{3Vvv5XwV0KfQV0i^$DK?7VGu|6 zyF2|v9Q2-`{sUp8X~q7L51RanLw0c}8_D1M)Ug-%nC`rZt6={1V^Wn83XG92*oE~A z^mIH5i#fnRPap}|cEkC$k=*L1cr>PF;Ghe_j1zA`C19%h6pw0)VdimPWP%b+=BHz1* z@_N&=iYFs3uHpGMpMC|Cm<{`l7x7$IHl)adPcTcAwr`>WG|nUXdsRxz6cu%cu6rx#NwFSMw&nDRIgYhJqW&dGvP%*De{SFVdSO( z!Or`;25euRYAqyG|h#P6TF zp?9X-vy8B{O1qdY_n#s;9LIV6ePygg3@t z-z7W_i|fn>x_2Du@Dojqu-vQN;f@5Gm{zwkP#X0MR8jmR=(w=$`Mqv)8u{`sUJZyB zzF_@aYB%n0SloEeDSB>;#qsch^bhfMMJw*1$AHs9%{>s-e^D=sbitgqfe{O}tmgM9 z>RaDOxN;8d?Qzqt?YSgFzsaF4s4v@b~>_gj) zXG?)+CYTUa^$2gGjSs9VnO=84BQ!EPLJ%}c?c@^d`Ga|ge0idKY8&9j9R=GyyIEMA z1PQ2Mmk$*WajZ+sKiT+MA|IyOp}&?ZWUQQX6FDUic9WNnz6F6msvzwJho>UVtaAA2 z{Mjl9Zbhdl9hdaTPoSTpKPntZIaPpHLJ@#=f(X|P$mUc?@q0|~y3XQh|(A=U2B6tF3c z8jJ`1D2n`&``b@hShkEY?uUiq=be&gq0b*vX-Y~-O&un6S~-WX2sg8u+I1HZgfeyu zBdd=1NUJ{6YQ59P2P~H+1S{wC&0UUxOqdb1(kAkvs3w>+8pz`z68@)%|i4a zGYJOXztPzV&ga>`j=;?AUlbQv8CdO~7r*U{$J9-}tqbiXr%;~~`c2l~{1k@X^-1l? zsYz6Q=HLWfoGl&`^d#WuXzxF>N4-vVWHvEg6v!AS4{8`OT}s%ic3z?Y)Ax~o*Epi; zURFM2WK;l)jlGYRblapf%=`Iiv!3Jqie?MCiJog8wL!^rNBh*rTB-!iqN?Z+MuhkZoenF&Ua7IZWk!;gk?~m*$8PF9kuH!^06*vd z^>88-q64ghO$Frd-u4PUDy`UURXYHW@<&kOBH>My@k|JUKEh(KFb<$M51fL~mTVCb zkzv}G8Cox(TAApQa#mX+qP4qjSGie9N@zkeBuz}@z6NcDjX1q45u2Qx&K~>8ZD*)w zgYY@C+u>HT8UD)8ibCvH^+&BhZ6owu4Utuz16y++;q>r&Z3)mrbwDBiwEZ><7t~xV zs?Lcg-tq9<&J3gv8zKxQu#m^78-0*q@z9D~HSpybk$AQ7 z3|5haC~D~VqOG@)vDxa4Cw^c6VA75<+Qhrf<~O6$)1yO(ND<3?O#Wzgq?|;*Qpro0 zLIu2WN8w>~gI)Qks2ulxSe>9UGf3oDP5c+Nmo{f>B_vj6E%}mgg}_fr*UO?Z8SlNV z_Nz2qr#CRea*72phPyF)H}(_sFfy}_=ONc=#FE8j#bTk3%k9zR`u7TN1VYXB^h2jx ziyN^&GJYe#iZ?SeE2*fcV8eaO%&frvF|c>+C6u;43X99k15o9&!EAtzIF)qtFI&YVjBO?_pw$AsHZdoNAmvVyX*^79P*z%Uch_a4O$EV$m3Q62gve#2`gI> z9gvr-bbtI8EWJ=?h@(a;k6nj#!etN4y~%rwdD!U4LR4A8d`w+qsbrgoiz-Pl_0KPv zV~ZjTr;8D0c3?eKS?4L<*UhV=@84hCRSqua!T??Y-%E(lcdrhuY|jvTO*yWQm7m^n z6_=Fp%arLH5ZX{?klU<0hIO17rM3A?UjqTUNcoWM2CMV1|0xjBy~a@P?S_!y&IZw~ z#U59O&qfUZcpDYFooymgS`-3)zZf_wMXVMYRc~%?iU8~P+K%{Wsyy@EyLay;V@TK& zO&$W!1QegI?NZI!_W(~N%#?X075VLY@5U5OdS7toY-aC-*@e>aQ{7`{g+a{&>rf# zqEuWgGI05q8@+(-lKXvqF5xC_C^8w*453%7boiyrfb z{)cqcAavLER4DG1xxuq=diXU3$$A1zx7_H;FK@BHbyubukq7I}YJJ-{nrw&Vyv(hH zl*<)ax5ENy^tdO|jJk;X`@uS(T@m{JlMDu|&SqSW>SB~2W#Up<-lV`W;)l|qab2NStVfdcfjyA1CDP{URuI#`KJ&lgH$%w*V7V2 z-9R3#3dkgl;)_S@NMhD2Yji#+2Gy1mY1|ITv3Jk5-uk$RdQZ@R8JyhmmXtNAdHTQ^ z2Lr>-zM4VCyUuFPG|$c+9#1L@6XwlWM~rKR9v%k96~dw4i=Lh!ukU{ha)CN;C?~lF zlZ>7V`+(oEQH8WGaO+mpx{d?l`%{rcnR@A;>?hV#xp6i&TImp8I8utwz_WrhqqCC& zCk~`(-8O(%i5hhc2H?emrR())pEUsxE_i>60~qj}87la6_!Yyl(jJ?Zi+bz08OWS?&B>8xcarG$qkgK~F(SVD68a3R zx-1KOr1_1^&LbN$*X!Txg)#YGH+8=zu$!=Dj;ey5so1~Yq2g4)u1v}$pZx21se%Mq z!j39h-(-WE^fpxIn0(H*{0@h-l3eIFCLss1Ht0~?3n`|yBMrrl4)}&9z~$WlMwPOj z^+U&fjc5?fy|(6!ifO>ON`S^s%y%|2{AJ9uUGf*L)O z4<8q|F;K*av_9*JEFv~ml(${VEvqZmL9on)v+QJK(DXvXbTdB6e%BA$2OZKyJ=_-| z43%h_1?Fm8&`yvTknX%>M4H+~Qm)6+P$0)zjbcBMEPCTPwdnRjy?GeDv$J#JGr1^s z#^h^y`hjV+%Mo8lXylbEP?c=T6(3R2T(y#@Wz7O}0K|pwT_p=uOVnO6?O-Z^6m#V4 zCI*@LDnXzLR#SLUR8;huj7*5#DqOvq_U)(X-*ibt%sEbQm|W^mBucCMiHw;KRTaNa zFlXO}p~qbYB%fO}dF_64h)UXe$bjhH5H#2m)T|?U++XQpYF560lrPxhMTn`h{JPW9 zF4Putc|aKBOchX$Ayfbn$&qJFKnw)>`Jn?RQf*qh|G|3Dp?!k9@bhUMi#VgC;=l4p z>+-M;b>;CHZgTt*6x;j;!bk-}O==|LJ8eXe3$jalZMrW^tKD>@q>f|Ew|I?7MJF+i z9R)ti)38Q`MG-GB2(~Foz{M@C2iWSg1UGU84hufv*tzLvnd~gKynruZf{zUQ`{YPv zH6nnWOUL*n^WT&0Gqfm_fVn+NxmaZh^zrBzeIXyYVw>iKv5~j<<6=;b8rrpAqoz4arr91U%)T0YeZ*Xitb>`QW`*F_jT@|j-1}|zN~S$?>TcI z`hwz%Uug5S0^N~;Ejr`_y={r4Spa6;E!#F*$$6uR@uVb#^|~Jrt38ESdS{InxpcDW z)0cr&6h%Z}p_*2p?)H7z63ZN*7;5I~+JZb@!;SAfK4w2N3@2#@=upq@2A~Vz&=0k| zsxat6W~u*_40Ht_p9#A1ebSOicl!%}Bqqh>k6e)hKexBHdhfmeo{W ze+pMUrR!1pmCvneg^I}y*X;Ctojpe7$X9lm{QUePU@yb>x5sG6BoX_>Lnys>>$*W{)zSR2MK~IO zQ8L%6VKiBfnLvi zv>E0#km;EVs!7m4#r}a0DylvY#;?CbhWz7LJ?Cuo1FiXp#Ev@)%=#@OuydYw!tW{~ zz`Tz|4<1u1hk?KIX>!;KT+4r9IlDgA!^0mUYDP!Iv%*s*CWZvr;Qx8v4r6+`tND@b z2lZOO!`5;wr0DdM<1PB-SB~uA6Aa1A?(Y3EeF%((M)>G;mgNdks5RJRwB0|Y1I2lH zcfTS1I;KEq8j979V=*mp^nR~WBD(h8lfQ;Z{er-ThaPh(=awLkd$%}hhy!M~CYt{Z zg`nWs0YKDF`Aq3Vh330~J}#0G%oC9yCbc3QG${XphK3#>x|uU{zO><)Cgyd<&#}Tt zc{-27hgBz1#KR%A#q|&mUCfn4y8zyrP$Z>8KeGbE^6mZ&A5uMIRPB!OC z$RsK4wgall4GA*)LvBmiBk zy_WWkO%rLi&SYpY&WMbPB2CH6yu+XUs<5Jagf@DDW*h3=WVg2LGYWf)Z7fg=PEDr2 ztU_3rTbY}IL5Ge;E1}apws(MMinqxOjx}5RXXDuRS zKp>nFEul-9PsK$%FdyeGii5 zgAG^J6Ha~;!W7c{)TB0o7_PCY{NgeOdtqK)qw3|Y8o|z+H%1bdnG4odWXQ=jJ?u7; z3-T9NXkTN$-p-a^L`lje*5y@83=4(!>2;jZ5T?I9^sl!yklXA?8vFR?`%K^d*CA6U zz|nVdvja+vjgdjOS!2Pr3njSeI!VvFh^g(~9*2m?^PA|1duorN5(oilJ>2gE1#{n@ z^S!#{Jb}FOr!;DaC^&nvIzV0!EOig$EUNVCWhyKzENu}grwoVNAj(|@PbctE4#EBr z2=Y_`Y3t*{$N9Pa2J^Ui$;_xGJP3%!OI!s#5wf?J9`0qK`40!SQej2}qkJVDc~Mde z`pj|6efUv0w`U|{Hf3vPf`=!Zo_3t?t|Q0g*NV|Fj%$iAV>iTh+QXNKT$VZU=LatO z#KmuU(ILxwTCRf1?uM>58!!1topXp-y{J?n@XpBU=H_+B=UH=<@$Pk9F>`Lz71Dm$ zt<6*tTgikD%IyuBj^BcK4l5%`m2Bt7j^yv-VYd zy9y27`M*KoyAuf3Bp6<&5b^;6?GZvDpijbv`9NDB7+&GD_vfA1_Ubnh5)x}7rm{6O z!TSmfNwCeMOr0*ac$7TXHh6(F)dI0sTi~6Vw`FF=i8nJbdG#taKFklMI6_EMvsvR_ zkoYCHBd$cb>&T9ymESgw=%2vW?k!a(C3QsW<0Xnq8}hMQ;Xy%&)l=_xIQ&SLdSRAs zYHFRFBuX|HCjKny^nL(P+#>T+FnNt(lxjWd#5ucoxHY=N3F*{A;*=KX`~j2atBIPW zX)&37eKH=|*U5~&&`R+L@|Ep7s#SYCmLvbFg)RFA!cyIqOEK4L^qu5JlBqKuLBXk8 zAijeyCL_EMKpe4QziCNST-Eg^%KhBX({gW@B;!L491azeJfB|uIcf71a-{KjkZK8$ zfcVE{696;p!#7AU$Po8Wm=>H5fSywzJg$UX=&%pL!rRNG{VM<2dkYnc@g}XYwR>cw zii)3~eDX@>wwD?Jc6PB{IA z*>yYZhhk#fd_Amh@AQz<(QWb2yz)k@yD7 z@3K%SSEWR)6q(buWKz?lFI1FEqE1m*Sa=J^3?wb_c;8=3XS-Qjmvypd1HYU?*j1c@ zfRbc1krL1*as2QBwJ-06y>2a%@!2L2{3c7(lbofFMg4~fq$eUUg=rCixb;%m)uuVz z46nOlmaNGud?kEOeCB)HhghXxFvPo|&DKCGweOuQE~3u!trIyZRZc{c@y9}_qUpdG+*C3&>fH#fV-EfGDZ@^v<0Q8+A6vZ^QLrqRSJ ziJk2!%G9KCejr#S_6^`qZN*|pY z*FPp%A!-mMsVl9|m-equ%<2E=8xOU}SsPGRGg8SZY$9(2JjrwoSyK`<7&_?5I9`4C z9Bg$621vb7(b|D=vJ(O`&l+XJV6Gw*F_H6%DA<{%QinFzKYv~(W#Oyua(SnI!Tlg7 zR(1iI;}Hv$_G=OsfooGqO!uO>h5RSxmCOMoA1Rr{_?&3{8RcO_T`D`<&`cxyN+9QY zrNBDKoJ z-F8{%0!Vu3>^P5>+S)3KKrNy5?YvSg%x+UwbG+$)lVr5n3pePC)Dia&&~W+rQ8M%k zBW@R%bQnQA@Hy#s2(#8STzn(K;YUK|%?<9#ru*!2LfsocCB&KCLUZ60Q?D&HrTOK( zxAcb(Sf1YZdCy)OfB*St{W(~xiLoU+ywzEzpX{x$COQ#bme5eLmdeVs`BRR>6O-pm zO`nX9!?4Oy=dG`Zm!qG^3pe#ql-eF~9(|4zdN5C|be^7sbxO4o{{mWpx?WN7aN(kB z{$F~wd=)U;CH00tvIK6*6Ous9QnVYqrz4)<`D-a`7SGxZL8loDjsB&ao@4qnd5oC7 zbS3A(TEP|QdRS!do?hF~UiSLAojqvi2Ts@E_};Qx;&)=}du7aaeAu-1I^6{5u@P7e zu=4AGBd`&1sy?q*Hw=%^F*La6`WBqLncLMjhn`VdluCU${2ut?bUtYBd&4(0p{8qn zySoeFmsJ0dTUM;9DByl>K3Qj@=hTCv?z$DE)Td2NOG}TD2oDcWXuZL?;HXS(w7jw< z`dr(+GxMz2*FqX$=SMskQUCh(MT*K2?|%BbLiZ^#^kw4 zEX>p99u*ORF{Qh5y$Xw4zZ;$obCD7H^*B@~e#5WOo?-{N$ zwy9ZFatq?2{jFVyDyC zIvj&L@;5W=clKO@b91sb^Y>-@ADsXR6gBF6Lkk&x19a-Ts127u;ZbkzMbB4L&9Ryy z3pX97mzP`yB3!zwnjuvY5yWEHnvk2R9S~jZmU|Bm4^!jh;|?9Jruh{1^`V!3Y7p}4 z6oAC~2uo`p{!1ZWweAnu`CgbiX`p)>^c89b&g?lH${^d-p&XY+-Mig|{8w(yTlZL3 zi*F`6)FQ%|CE671y;!!m_DDpa3X$PY>&=!MWVCe8jc{>u)u*N zTiug8%7%QN7h+<_M=Q=v-L?1Dc@FqT4_EgO58n#%{!O?r)v!>#+zZpcj2c}&176UM|z6LlA$O+YgzhP!&fi_Cp#p{6RYbUk9!c zLl(J#!L*ueo-w1eT7_j!y9U%PdnejM;T=a%Fyu(0dIn+~zo_0de7_}%=W_@re=`OC z?diGy82^%KlT}kSETUoNlkS#1tWC|_+F6MJ`~~ID|JE~b)-Mq7)HL;U@DYrYYa7Y5 z-wl`!4L+5Yq|fe2qE!FQH?YfrZ~Ir8;q!kH4Yr582t{}O8OeuGsIw{*EnO>NcY566 z{Bkn_3d%n*?_29-2^!u>{P*0*uR|R7to51%t9GFqEJ>_;xI}cM#pERFd*m4*cdp05 zfD_nPrdaNmhH4A@rDIDmwIaquVPA{WdGDt2E%ctMsIftjqS%hFH2&_zyrdu9hS^us zl*9yfJDCNBN|&T}X~a5Zt3~yAD@4Vcozx)S*l?hftsEnsl*du31;mKICMOq$g~@tS zgEauVNij$wepn-YDqJo+n`8HR^aP%59!fz>u!#A&0}K8n$lftQSTwl-wNi@Y@df;FBAn>p zndq$nc8jfoJY>4E{u=zGD|GY|8*lI3p~5qPYkumMSbwD}%Zdz@q@IoU(9~1+C#dzC zD0mK^cKw|->U(>Lh%Ir%E^m42lgo#GC08j78x->Sf$W~rGD#gXPu?o$5 zDd1VKy7r`gt$3%p_A{Hl&MG1atyX|^Szr;yFmc#cA=rE|D!V@c;a8X9ACY(`HUTM7 zzOvG*Gq& zKZM}KcI2HlQxf?mQg7s?zRa<)Q$F)h#RbFoon(e(0E5BFgWi@ZAq$)dP4NkeF76uwB zv7yfa*(}o0?H#AocbRmRlCK|hLdzrT?*%3v(#?~WsSCF>ISB7#cVKInU7u5q|S9Rig2Md(@mk( zZNK4Yo4@7k4||2nSYm$nZY>Zk7Ccu^b7-4Rt{;1o|HUibiMbou_MKySQuZ&9bUMc9 zD8qLbZZ!&moO^nP;oFadwI%Ta4w%v&8s2+5>|eg%9TA`**@*xI;5A%h#@U-d!kpI+ zSce6ZwmF&3ebnSgYCsBdYnZYtl3@kZ6Z6(vjtCdCIr5mG>;$<|O<0Fc%PA4kKX>aZ z#{rR`^}JMDaxz;)%Ycjz=wW=`x>=cSirwp)aA`qZKS`h`U&4$u9jEG*RYtV4Pa2Q4bvyk)Z&PmF zI*PB(?_2xpYTspre3|jDkq_V(u?4EalQ)^_*%x>0ckrXN26{vOkB%Fkn@v_0aKZeNa}9$!%zT;rab9 z%DIc3g+>j@MM*aGdle`&YlaOqDN8)z{F)@Gry!x<4Jrq3UTZ9@eFChT%^yw^6IAE8 zzh~~$J)7*aMTe8-4_7BObHi!o=-WDK9-f*p>BG6Y5!>yu z?e6<~&szJ9cNfFFNBF4gHq9qLpQ>F*j+L+vNHd#cn4++Gc3wybi7P7Qy%JZ_BlKU6 zKn#^CgnE$;s|5oS2m|GR9_=Vxe5`5y>TRqb;(Mq(-MnuQucj`aJUD_NvNxGrlKAcn zW`-6I2icZV($g1ihS&`6uTQF6=R@If-O{`PywT&b^W zObi7Rle{NbZz<@3w2m)cy+lp!?Z*kJAK6j}k02p443O1Gw6wI9hCPTM)&)RF`3x_2 z*noPuE@Q+@#C{gzOwOqJ@5JL*0s;YJ%f!_fwsuNkU)eqM_0uRc5mdWN z4_;P_f69e43Jw-*bo_AUDJy$lAl0c+%27gpc=t#!G@)npR+__#V-{&*6*Z*r(sI2g z#9Rh>Y%f1RSC{<6yi4Kg{L?Wd+HuVeLu>BIix&ZBCu<5d0w-c(ID^ik7)N<;xtw2V-(>1IxV`JgyNrCsW$4wX8L@88xS`)hFl)% zn4me767_WVnrRT`j=tey9y#XdhnOT+sz2JS_&j=gg9iCWD~V~xj7(v9M|D(?k@2Iz zCG~)o=>qO=2zrDW8d2Nx;`ci+_dTp)y*=d0rXpPOcyCqdwUdPKFP!_l#8Xu#uZA1S# zdicY(ypQ7axd*U0-)r?f4L=7G5D|%iXrgd5KsEi^$vKm*8IHJlF;Q9~;Wi}hX7_WM zMAT&h5^Lh)mARJHNJ?h1Z|~C;a;VwYx~ou9^0BmN)<-0*TpO(3- zX%sbd@s_utCVERpgGnQQY@VK<`{XpYh?;S8a}P^PCEK2CmRy&Ii$M6FSV|4BYPK|Y ze$1K~gT10&WY3Fw`SL?b;nbg%lx9}0X)6~K*Qwv;t@-f0r6rZC50;Ih^74jQ&Etky zH89x?Z-49mj%jmM!f)SvvVBJc=V(|P!PuP0w3ZL!*ZJd3EBtRxNS4_tmupJbq*(Yr zxoM@p`uZpmn~vus68awt;^U+ zQ?Hw2Ro7nqsfYQ=rJHL#F$4B1>@DqV)3R%u#Rgu#+Y8Bh-KK9zEpWPR8CR^s!;&d8 zp*vG;rOE}5(G(-GgBOQHRuAeE)E`}A?wM=yMad1xW6mq-ph@{|3-8=Bm=;ePkPPw^ zvforu?)DfOen6rO4(Rpb=@M3FAmR*o)+T{bTNnlz$opo;>Z6&PB96QGywxy7xSN*uqg2(dAx=N0%Vd|UOWvZPa zW{I=8x!p2_&)epQ<-<2$a>|C!?LyHLrEwtz4~b;l8S4A-5n`I|BV_P$(l3m&IfBFq z%xZFR;u@Z{A!EgCP8Woq(pH&2h^T(NpRa>5#ps`}EO{9??bU4Ot4`$mf4q z{WxWPY&P1YIa=F{1GOYH>uSVE7R5_7NFzUPO6R7D=c zFH++@l#xwK)?g*i=W=1ZVLMv#gK+B{7?5#?9$ad3SG}T|v(t0+W*%?TDp6aM@b$%h`>EoQ;y^{-S{&;;#y znC-mQNuy^7~FxhOB02SIyiX)?LZHe(0gml_Hhg#J_>qc;mmwX@fS@&!ZzTUUlQN7>mLA^G`oGZsI$tpv>H?@~wq+&`>} zKj2TmRxe{Tg|t0|3P?-GJyzay&)7mC@-xQxPoG(;$dP7y6Zl{H*dUm?NPYSE(cK-p zR>rNU9p-n2wD2j-`0fUKPAhsN+8f(zua-r0#17^~GaUMZg9A0SpB}ZJQBFR{h(lb3 zVR6Wzz`=HJP`%;wj_$CZ93NL$cXtma5}V6b{9G2f^)e`QItq44qHLLYM%3Gn^V*?& z`6!xB&zyF*6;`kYDS;3haq_mNrccsZyU*kQyqf=WpZSFg`@(MEP?B=v{NrcON7R~P zd5!H}2?25RPG*^2FC(-o%Xw72p z0`~Wbd}QS_k`0t!7#aU?)58dJS;diAQGS>BW&bQ}ij+Mc@@10502F1zn~9bjU9G+RJQBoO>4R)FRJqVQW(PT&_=B#(_7~dds-Q4hTdBEf+aJaudnH#Fm3;9u zzO-wHS63_dfcUM)fU8eM+l~FrjOTD|FOfNvQ(2g-mm*wge{$j$(YDrlLfW}ecx$2A z-2@AGX|KJh7}rQ~vztx%pHuhWmtP@1jE15v%W14~$3I?RFyRRaou6XEWTunh?jjt0 zKpDmGe371>8vkyC%fq8i&q`Pup!Nt;mQ&~G?J`57A7sXzIYl*#bJuuD_Y6WMoI6Wy zUCH-XKm7WbA%b?4KSaiQ{f36-k^i_nNaIaVGX<2cyt-&|qIHG_w~8gT@98lnoCC7> z!YS!|!0{s;O1V;(wO#h~u;x&iiZd*X7}w^OS?5`vHw>mXzLPN)LfGNKY~y>SM*d0x z0Z~0ke$E$Pi`CPk_>>uTe-v0~rR7oATB9dAtH``5HJaab18)3*N7726-fgE1f}xAj*Uj zR(fipOh@ZdSC@)Tp(`FXp5q-B^M(wBRmTUqDZ#s&ApVRrA}2m->QfsH;3h}?$Q)?L zDwgCU?8`ec^WkDLg)J7Ze~M==EUI}#L~I(FqLbXVRdBOEVerY{fOG5$*<9b>OzC!? zrFL&nQor({=pL(dZ7uKi-JSgLHmlM2R<>4;u9KGhQ3P>(#70FmS1H29x`=xAma%<@ zKYe)F|A!A;;Mmnx{=a+_%fiCoBlG8_#Q(XGKg zzL>3DiAd`C<-@~AUNiwHYTdtI%nE5JlT5U6nz$hewtu{|;Fl}Bptj$t52vTj5T&=R z^EYAzX83LMDFpeNL-Y7faoQ|8+8Fc}sM6r3Pa)bI86=m@(?#?e@LFXG@x)In1dpD4 z$(t{D|7vYvq2#_Vy=rqn!sp4r&%LFU@Y<#Kmd@}NK4VF}6Z#@NKEBUv5RWb7QxuH3 z`_=q>_my3Yh!m571VoQDLfyCXowXmZ7pNYK)j6^Op=BuD3=TkoD}w*=NIJHrSK3yX!Ps<9aV`8ZKj@Fe`uBAT0WYSD*Z z^uT4K>x?!Jy{70=Z-CxkS19-m+r5U-?e$R-89F}xW@eIE_cGRws%`q(dLD_><$m1< zYWWo%BrF7EA{|~qK^rnSm2=UDgJ4fhzsr3U5@VB<$V#DexvztjPghHEehXDELO$7l(Nr_fc~IHtB-yyNvEkyU?<;0fTG1j!VV|qiz`)Os zc+(+cLWz!zt;mwh8e=^elvvYP_Mwj~H_P*~|iSDml#(E!k zip=-l7p!IGwvI?wizX2<#U~-^qQRmcl|KV>lqPzT7G9_}w1AXTExbWa=L4!{WY~JB zdI41K&}*v;`uPls>m3{%dVq$t8+^(zZk*4x$<0SAD|WrtH}K<_beQp!DjqgRimsE1 zt>4v#x(GL}XG>Y!+{C$%VrwBUe$l%=N*3gchb+3IK6&v%y0$$+4Cb7qO}t7d7A`7M z+OrXih|%~W)GygFQNm5kJ`kg@&^;7tpYsTeLFd6ts-tuD!Ar)Fn-0(+i0<*T0DB6>54BQv z$;a#5@X?03fgt#jIo_3~*AaUd8 zv=b{k{{9Jo85Cy_+Lep3h$35q9bE$9Rv8^v-Ls5N6&!=h3tlC}#TAfLOVCvCBKQ-Y z^2qB>Xz90+@2hlJyOOGBon>^dz1J?)M0t$i%^IME?>n2{8J{U9XC|w{u)+J;_+sPZ zPHv3*{&X$9h@L>AEyEwN_7UcNyB1yl&x*TnP4>1i!@(}MDX(6|z5QcMJNI4)f@1WF zY&RvEN5x;r+E#NmzIJf)@rA2fR3TdSh;#gzXYK4sZFhHA7Vlx{vM-rILrF==eklkMzT`;7)q2~Umqm2&hSPOc zK{S;G=At`IYkX~o8{1H84SRxeJRo2p7pdSi0P1pU|JsPfh(w!g^AIs(_pKO;v8WxKz9$p9ut=-)qi zhK+pD*N5(QRf)UT#+uNJg&@A$iWM;OnBnXl91wHNzxJ(u%eJenMi)Qw5*f35O(L{c zT8!!A7k#w3u4}?oJL>(q2(#FaH(QAXX87M0Ilj=IUSW8keD{du93Ubl{$nrce6tl& z+l|0H$SnQEj_YtlU5P|K$2%+$G+YzNiAC2=|8kxu6Cyzi`t2QackQ%32|h(Hus4fs zMzOgbdB1>xK`zgo-1YuhonU(7+LDLo&0Jn_`NjA;v!x}+V8ypI1T$W*$yx5xbcL|v z(W1`tH2VxLUf

    mWP=LFoUTL)Z2@m1KLv7fEZ-2P*GEd0ToB6;N!JuUVeU9-4YW) zjLNsHqr27mdM<-Niiy!tCG9qEof_+f+t%{ZPqc~H@stPduH(AM9ZTZ`a*k^hxP_u` z%qc!$?moSlc%VGiG9I;Q_Id-gxJZ8B>wud4M??n`b>)%a(+u=wfB{2NH3(nH{JjV3 zw(^92)$O!C$6#hQ>0&l4rb~wh&4pP)xxB%CZZY4q-uDQNuTFSn%`n?7LrgS3WqY^# zSXHv@#`;|V|4V%u+~+vXGdK-D<+Sc#xY%BOLAZ;xqC2Eo!wl6o=+cf5xlF!i?+so* z!E@~GA1rX%r<5e$3>O*xU(E3NQ2dYri_ec_%TH|oZ#410kBf>Fl&~;{wVT_FO_wDB zpN8~$tajLi3j)a>ULGDRJ}>~eSxUR=>nHnow_@bj&75)lSba79DFjssWj{*&wK!i| zY%e$W4Y9lwewq!VvpNkg*%x2?SiWOv{?CWKzwNvbZ>o`@F%z}sd;|OAnG@wLlb9@3 zDl6}ny4qt5=mTHtmKoB8^SjZ?JNg?Oss)3t&j{zcEM6xRD}dWG z^f0vHz@w1xDh-JE!oW2U_Uo6_3GhUPf_T-@HlL>u)H6`6 zXb6sw;YNSL6%L#m@3TcKnZ+nrv1Ib}5j-1#si|{bI(jqmjjD>Mkc51F@9tQ(%ca=f`01@39Jt3uXK@yy*VRKhfA!l%Qw1B=@0Wxs$@>uV>a`BC$ z)1Bki8|KCTV>$6<#MBpVVB92_8~m5G z1t(ZY*v#;9ZreD2xLf`6o02_QsuLwsQ;ru3TG)<=1Ik(+*_0YFMv}i@A)nM^Z!Kp< z3c4`8F6uOnMxhCW`7%|uvn1}e8!f-X@f+TZEK`j>p*X*&DE7|kjr6CgFod_yZ{!&D z8ZA0?oQu5Pe4SviilP0x{s~cx34nKI^2>Lb>irYcMKMP+vYDl5_2HUH(C?_jwNGl`(9aa zob6XWTT1I2zEj)7{e1@gDV_4Bi(WvqtSm2+kw_?(jqe1imEeFdq@E6NMc|P#RK_JG z(VAZzAJf^@=qHT@LZVlpH*fdm0wwYBvF(hd$0*C}`)0TRVJ`02&HbNMp!g;>CFK<` z*;A2fH@jA5*$z;AY{PKxnQKy2lm|r=f`Rr-!GooY8X z^mYTH+WT!VnG?x0hs2$wb~;at-1qN>(&OmtHgs>%Ax0)M>PdrFbqgbkT`1x3s6A~a$j)(jD4kIsF`H~|3)MqjqH6gNDG4|-U1|%fNd>C8E>m#~5+fon=n9r_iglFLx-XSl(%!HAK+;Bu@X4ZQk3&$_xiFd*gIyxY^g@ADy>tlWK! z_ZKOz;~yJ8Iyl{nT`Ln7<(H6i*BgF*xt3t~MD`~$h3JPrH0lxY@R*Fx%lqZPkx_$a zB@kxw_;A%NH9wG<`^aDX{*{2R*PVKhydyWw@HpGLs8}8HNR6u`~C2DG@*{tn6 zX^36swW}NdrdH0OCzXp06Y#@$KS-(wal!j^`E^ zb@!Lr^e!9u_1hsT!9;%oROEe~wyuSEfUs?$O^?81M&!Bb4#Ua;6mJf=pC|+bbT1X< zbN0sz6e3uRe*RkdEC*7+qctiGgR=HoZ#D^U?tv&hv_!o;9K>iu0Q+hGNfLHEz4gnj5q!FLm`UXp$H&K~>$ST%H5mm`IpIzx z%$6q*EKtR-q@?5@_?t?=X1XF9pWnTvP_wr9elCR6n=TlQlqtg<5i47t+wC+D0SO6< zkkdMTBnj=*rw8U8R=kH>khi}*Ki0+_w)}U$tqvccK^@*$H$Dui7#Z&9XfZLtKEV-X zTaoWzAhW}-&u<^1N&nWE3U8f)Uh&dD=Y!DZ$jD(RP@|nRdy!m8GUWJGc=prmpA9ma z>RZzbySqi5$5B~vVh51W5nh0~LOnH!6GuL{R7Z1ooYA`ISF@pX1vrQG?0?ncy+J<<=_)=~K>R)0O3I5ECD zJu;XD|2{)qU}P0#MoIMWZe#D~Ol`HmAdMOnUz764d5Egi?(EOlR5KW`?<-y3p?ML_ z0z~~!Y+VKJRQZ+wqL!499g*et_eIGCDziN&D#wYxvUz*MSTFKM=>&l3077D>yXL5KCG1#ZG@=J;i)rboK)YWsnA=I?M~3S^5(aYac)`4>%j3V3k$4Y;}pzl zvh7ox=QDtST29awb~@Pt7UE=J>-2!5=a~5hmhK|P3@;=DN2=z}BPw(`eUGt#11&=5 z93{ni7uvT|2d_!+)|@ONUm=}`8Yx@4djV(=PQZ3OPeoH8)JMtrqE9l4fVw<3Hum{( zTpd>s#98vbD<$jT2x~o(RFvOpY-|h%@L#{bHD(wdBX*3gLR>gDgOtz7(s?Qz8qz6x ztMh?oY(fIH2ecmO1lb-9D2^dSdePCx%LP;rpD=)BI^lrwXnox;y}4>6g-sGS1%xnY z$tJ%MzLb|=wMS&;;?htgka4HWd~5Ng-hLxoqsln!895@ey8%@<>x@0(KW?tCu?dCm zs6uHCJV3&2c+A=G0z!Q`HU%4|*|ZTy%BDC;-)OWeaRA}f#+KPb;EcI0w=;u?N1ftz zod*`(_Yz7kuMnFz_~&Qm?iQplAmP{Vik>9U&Bi;C3)XPU(`ap+rzbkQC{XlHIe5-uGMg zocH*rvUIs-&)(1T%RMqr^nsA)mK#5NJuDzft5It!Eco29p>!)6d@$*$&4BYYb%h>^ z&;aYYqxq^zo0sQRMZ%@8=XGbw;Sl+({P9Xg$?+Z`PFF!vo>Fn8SnWOTKO5y^hNLKQ zqKEj{I+pbgwR$D96+8BJCnS8M*6^^1Oya2?84%2pQMI{ z88s2e*H&|JhJPGeoyTD3(^Gj>M)hwy-w>(?G-S+QKT1T-J;1P-3@OXgMe4vmX6FqN zQS5I(z)r1YS)jiEVrF6Sp?D-2@}tIICy!+JsCi)%Rhv{oe$7SzHM*+8d7(2aaV<;u zJcgZ;vQ@gUcN-mEhdoHr6AS7_Xl_F;V$2q#&a^a7bx1;x1&;C{A%siuBk{Sjp{!b6Ng?*KDnpoD<9oPwjK_AdislncbmqrtRd3B(DoPjzp6#Ch!SF%w z=9eg{goky@Kf@=s)c9e=GqeEp3jL_`p)DZq4R(dAn;T(xczB*d0)6Y;oWaMBAHyDW z2f}s3;vEyk+G-Evv6I$=-)wj4;hL_o$Nc~*ljlY-aU&DtU2q+}yu5lhY8(~}!HRJT zn;^^@1eNMjFNDH>GTng?A{z;Q?FMAEzLA9D zB-J_ariYPMo=Y7nPhxUjCgoKO**~Yz5S+&2Bq2$Qj8~(`+c$~rllAW@EBN_T#Hh7S z!eNv@L8Hd~I}-y^BBVld^YbRJ zhWu5yGg?~osNfT$gE)35E#gShVZO)WKbq=R=3%aDit8?zPhK+zJ5klkck1MB@tJ5! zwFXCWoD{YaAa+Y-l`Y^e(CeCwOn!^X3s{r`{{8n z{pH9-pFqh{zUC&iucfdlIINHzG^J`-R=>*NMIo)m$klyW^<~F`eDu)Y@zUj=+J=3_ zoRiW?_l96Uvwxc;nvwQp{E?bA7k9!I>hdbEshvWwu4k4MzJwMR+bHEud=@saKVAt4 zFuA+DT!qety{wcelu_`WD-ffaVw3PW!XPv|Rpivy%wsrrC-GyR&sQJ8A?| zk=ZJi)2zRwttNk2@$|JVrT=I`X?9)_X{>Pw(E26r<0J2}bvkXg=!H*iDgG?lL09+W zXSqy5dipa$Hhsn}VL`Mn-Q4`!_ME;q9$+2u)2N^?KTj?IV?l@fa~TklO!ivY&;=s( zC2vmH9;9wld13kOe(#JJ$h{Rt>rwJ#F2s2LQDyl&FJzZiZOvT|j5kJ08yni*=mu)k zZo0$6!|i~lHZy4eGeMs}(n<{*KJrm`OblUH>~gk(1i;#XbKCRiD39#e*Kn1oVUyV5 zKot&=F*(rZL7ZeG>e-%%*x4cy`c5je$g3L6a<30{?u3K8|LE(_ zhU%HBZv_?R92>?b@@!FjyuM)+AXmkBp?}*u_lk!sEj0mSZf^E^P{=#k9;hnD-?!v4%!jMMsGzpX%FaL`*h zdGhwmJZ7XOM{ac2M2NVw%zTN>%bJq4HO?<88K`v$45fVUCF<#HbNa^#p-^N8t4f!$ z%`i$#YRL^C6ucT8eu`dOX=J&J-(BknU zn8r<5^h|INh?|#Fv$MzE?9YDXKxHQHXlQ($tKOi#O2tXtN)6~fYzaz6#@4;7(>?{r zle65LAYwDPu>m?!OK}ND?`<;F(Ngi&)9sh6v#!iefQuBOrN!)TYWr+1q&)vqL0}$4 zHgbYS#P1frpA40mNFM?EIdV972>-PL)oGjD{^~02a}U+PGk5 zmWO|5*2&39Moca{p5IY7hC-Z8L{v1gl-({AX_c0gU6;+Up3&6Q)a+m#%n;@0PPh@w zLl>#S?%#Ip>NjWe?Bcs_z#h(W#s~H+GlzBBCk$SU`sG=zOuCyo3Y=a;@8-ow;iE0K zOCbs8$QyK!K6)u{vFjzNUYq_2K@FH{;TjOiV&# z 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

    7^;x_wto9$=n>SOtKpVlt^ z6cpRoI0n_d3TdBrS-kW6_}p832Q<0F9W>4<@=8j?m>eB_kLJ{E@1PbkrVK_vqFA$J z>uYLgXy|`ptXvC;fPMHt{2{S7P9m88Z+=mcCw3!y&*7$}T{PM!?}bKz1VUQ%XUub)Nx5Am z^|2He#uF7fV=069lDaiXrjbXuq$j=-rovORgh7mzudO(YzJenli^)wH)WN#^M;`hS zMm3w{+0P7oyx({s{CSBi>fYdzM5NsTkB2gQLpI)!6Zv@kD& zZjFD}2`pg-kGFbe&iZqkQ5H-?r!sPEn+56TrCITv+B4icFE{sawU5<`Qk#CD)L7+K z@K167`uUt(7JXLMTi=XCwggCh40w3(Y00Ly^j=eR+q)I0L%=d5kKN{5Mj$!}Kq?Zg z9dvGUT4on_Z~EPG=vX~~pT@?=vjR=n^B8uh7QQ2z^#=W=YskE~q5BJYK1 z+eQ)~l(o!vnkX^6qt%7K^5T<~u`u}VgRCV^UoAz>{GESQ+utc$xf9ZW0}At9RjkQF z?-I?zc*z8Jc4)Zn#akB>Q7LBV%yw1);$!!B5v#TkwPOD6h9@?7y|7R$Cr_`tEwNWs z`H_fk`WcPCUiynnoX&I7 zet<5x<6`Yz&oQ@(V)uHcl=C_vsP`ejre3rFu%G`blXf5$G-TCyqsi8{c>pr9Ti?bI zA-C$m)Vf5%`GQfA*=LOaOpj)GTy(9dgF6>>czZ^TAt8xrYg$b}W_t=<%Ayl3SRPAI z{k@E5(pLZ6EWq6BC*Y*A6tT9d#G%#c8DssiF^^uc;gAo0Lw^IyME=#~LpMLV-+%OD zVq&2c(aXfh7VY#_eGQAi#hOghi7AIPO)81yHt<-nfZpj>yq}*GBR$jvP#d zr0E_EwZxJ$Uguj27~phV&pDO+kwbpfW?6SDz*^a!Jb5AwW*5{S177n1BoI$T1RmfY zMT#Cr%h8@*TC!us8}0UsofrP*w^&?`*PnYDS-1gYcNdp4_4*zszk}`=Ipg}?-(Q<3 z&5n|EVCP!}R8)pIggm|R*0a-%&ZJ|P-OgqBRa zF8ygDe1o>~?Bs^s-iBSIGp>{4Q#3G{!{4#ygN(@JGzkuM=eL(^8N5xbSu*~9v>%kkI z(!4M^DmpDSH3upjgPQ94z<1I%G{LKXyEPHfeyfLfV5s@-!m7aP%Nn~8oBnFNEzJATs;ovURYfCfEyC37p>@6p!3FogA`g;#zGU|q#f+F zqpMWWnd<5ig}w*mqo0C7-ue52qM9eVZtO8iw7;UXI^sFB7-Yl9>F2z!J>T^|J`M(9 zMmL{5G$NHWqntlD#Q*}xr^n~cUlXI|IYAuM60+P31pxdV0#h z&aNOI?OdQ9H0GM-zFmE1;T`)`To7@QB7I$tKbT$E!73A$fA=8BuzCkRhl#7VO1D~b zpP8z#h<*Ez+I>#&qOY?PQJ`_qZ%4=GAq9EFfS^l%NV%A@1m-Kz3`{xhgBk3#Kw9NH zj5Q$J@a|k--M=CaopiaMxDn|ZfmPcb=%O{ zQ~6WKq+9U&s(i>;rk{tYHEhDfTIOvQc4)HiXd=N=+ zklzBt=!W~pDO>-8kuX^4gJA+b+b*!#~SPF82+ ztGZ~cpExcm;@wlJjDDOs zdc+0DJigK074qfiDy>)nr3`i2%;#=0d7}5`%|7viNf{k^6d{QI4sV)Js<4?o%RphM zF%|L4!@wONN#~3JftY(hs(kHr^|f+tYPY`E?EJF)F}KOeE^xyNj0}VM2H-;ts|B*x z+h8V@BDGJP)um1MI{WeJCYfg3F}1sA^vul#L?;thXvBv0eb9KIl8v%4t}JW$JBZc?I$U+^%xa+#+DZu z8JV--Om|`NF=uS3h2x)lvqQW-%E@LUxjBv>`{ybHVD&+%)V5=#wGPUw&?ky|53*&M z@kxIOkY(+Y4ctm&b`Be>o_0`Wh5|s*j`1GXHuT_L$82?<1>Q z-a<}GlSR*j%)d9oH`7PY^RpuezkU1G_+owJ^YBjbu{S-=yn6�#(ZDewx-#d7xv) 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≻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�=i~&~WtKtR6z6ogN8O00QgT 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

    ifC3{IlYPWb9C6{-T8iZgV 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 - - - - - - -libdap: Member List - - - - - - - - - - - -

    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::Byte Member List
    -
    -
    - -

    This is the complete list of members for libdap::Byte, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    add_var(BaseType *bt, Part part=nil)libdap::BaseTypevirtual
    add_var_nocopy(BaseType *bt, Part part=nil) (defined in libdap::BaseType)libdap::BaseTypevirtual
    attributes()libdap::BaseTypevirtual
    BaseType(const string &n, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const string &n, const string &d, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const BaseType &copy_from)libdap::BaseType
    btp_stack typedef (defined in libdap::BaseType)libdap::BaseType
    buf2val(void **val)libdap::Bytevirtual
    Byte(const string &n)libdap::Byte
    Byte(const string &n, const string &d)libdap::Byte
    Byte(const Byte &copy_from) (defined in libdap::Byte)libdap::Byte
    check_semantics(string &msg, bool all=false)libdap::BaseTypevirtual
    clear_local_data()libdap::BaseTypeinlinevirtual
    compute_checksum(Crc32 &checksum)libdap::Bytevirtual
    d4_ops(BaseType *b, int op)libdap::Bytevirtual
    d_buf (defined in libdap::Byte)libdap::Byteprotected
    d_in_selection (defined in libdap::BaseType)libdap::BaseTypeprotected
    d_is_synthesized (defined in libdap::BaseType)libdap::BaseTypeprotected
    dataset() constlibdap::BaseTypevirtual
    deserialize(UnMarshaller &um, DDS *, bool)libdap::Bytevirtual
    deserialize(D4StreamUnMarshaller &um, DMR &dmr)libdap::Bytevirtual
    dump(ostream &strm) constlibdap::Bytevirtual
    element_count(bool leaves=false)libdap::BaseTypevirtual
    FQN() constlibdap::BaseTypevirtual
    get_attr_table()libdap::BaseTypevirtual
    get_parent() constlibdap::BaseTypevirtual
    intern_data(ConstraintEvaluator &eval, DDS &dds)libdap::BaseTypevirtual
    intern_data()libdap::BaseTypevirtual
    is_constructor_type() constlibdap::BaseTypevirtual
    is_dap4() const (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    is_in_selection()libdap::BaseTypevirtual
    is_simple_type() constlibdap::BaseTypevirtual
    is_vector_type() constlibdap::BaseTypevirtual
    length() constlibdap::BaseTypeinlinevirtual
    m_duplicate(const BaseType &bt)libdap::BaseTypeprotected
    name() constlibdap::BaseTypevirtual
    operator=(const Byte &rhs) (defined in libdap::Byte)libdap::Byte
    operator=(const BaseType &rhs) (defined in libdap::BaseType)libdap::BaseType
    ops(BaseType *b, int op)libdap::Bytevirtual
    print_dap4(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
    print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_val(FILE *out, string space="", bool print_decl_p=true)libdap::Bytevirtual
    print_val(ostream &out, string space="", bool print_decl_p=true)libdap::Bytevirtual
    print_xml(FILE *out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml(ostream &out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml_writer(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
    ptr_duplicate()libdap::Bytevirtual
    read()libdap::BaseTypevirtual
    read_p()libdap::BaseTypevirtual
    send_p()libdap::BaseTypevirtual
    serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval)libdap::Bytevirtual
    serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)libdap::Bytevirtual
    set_attr_table(const AttrTable &at)libdap::BaseTypevirtual
    set_attributes(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_attributes_nocopy(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_in_selection(bool state)libdap::BaseTypevirtual
    set_is_dap4(const bool v) (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    set_length(int)libdap::BaseTypeinlinevirtual
    set_name(const string &n)libdap::BaseTypevirtual
    set_parent(BaseType *parent)libdap::BaseTypevirtual
    set_read_p(bool state)libdap::BaseTypevirtual
    set_send_p(bool state)libdap::BaseTypevirtual
    set_synthesized_p(bool state)libdap::BaseTypevirtual
    set_type(const Type &t)libdap::BaseTypevirtual
    set_value(const dods_byte value)libdap::Bytevirtual
    synthesized_p()libdap::BaseTypevirtual
    toString()libdap::BaseTypevirtual
    transfer_attributes(AttrTable *at)libdap::BaseTypevirtual
    transform_to_dap2(AttrTable *parent_attr_table)libdap::Bytevirtual
    transform_to_dap4(D4Group *root, Constructor *container)libdap::BaseTypevirtual
    type() constlibdap::BaseTypevirtual
    type_name() constlibdap::BaseTypevirtual
    val2buf(void *val, bool reuse=false)libdap::Bytevirtual
    value() constlibdap::Bytevirtual
    var(const string &name="", bool exact_match=true, btp_stack *s=0)libdap::BaseTypevirtual
    var(const string &name, btp_stack &s)libdap::BaseTypevirtual
    width(bool constrained=false) constlibdap::Bytevirtual
    ~BaseType() (defined in libdap::BaseType)libdap::BaseTypevirtual
    ~Byte() (defined in libdap::Byte)libdap::Byteinlinevirtual
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1Byte.html b/html/classlibdap_1_1Byte.html deleted file mode 100644 index 8e6e30b7b..000000000 --- a/html/classlibdap_1_1Byte.html +++ /dev/null @@ -1,2929 +0,0 @@ - - - - - - - -libdap: libdap::Byte Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    - -

    Holds a single byte. - More...

    - -

    #include <Byte.h>

    -
    -Inheritance diagram for libdap::Byte:
    -
    -
    Inheritance graph
    - - - - -
    - - - - -

    -Public Types

    -typedef stack< BaseType * > btp_stack
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual void add_var (BaseType *bt, Part part=nil)
     Add a variable. More...
     
    -virtual void add_var_nocopy (BaseType *bt, Part part=nil)
     
    virtual unsigned int buf2val (void **val)
     Reads the class data. More...
     
     Byte (const string &n)
     The Byte constructor. More...
     
     Byte (const string &n, const string &d)
     The Byte server-side constructor. More...
     
    Byte (const Byte &copy_from)
     
    virtual bool check_semantics (string &msg, bool all=false)
     Compare an object's current state with the semantics of its type. More...
     
    virtual void clear_local_data ()
     
    virtual void compute_checksum (Crc32 &checksum)
     include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum. More...
     
    virtual bool d4_ops (BaseType *b, int op)
     
    virtual string dataset () const
     Returns the name of the dataset used to create this instance. More...
     
    virtual bool deserialize (UnMarshaller &um, DDS *, bool)
     Deserialize the char on stdin and put the result in _BUF. More...
     
    virtual void deserialize (D4StreamUnMarshaller &um, DMR &dmr)
     
    virtual void dump (ostream &strm) const
     dumps information about this object More...
     
    virtual int element_count (bool leaves=false)
     Count the members of constructor types. More...
     
    virtual std::string FQN () const
     
    virtual AttrTableget_attr_table ()
     
    virtual BaseTypeget_parent () const
     
    virtual bool is_constructor_type () const
     Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable. More...
     
    -virtual bool is_dap4 () const
     
    virtual bool is_in_selection ()
     Is this variable part of the current selection? More...
     
    virtual bool is_simple_type () const
     Returns true if the instance is a numeric, string or URL type variable. More...
     
    virtual bool is_vector_type () const
     Returns true if the instance is a vector (i.e., array) type variable. More...
     
    virtual int length () const
     How many elements are in this variable. More...
     
    virtual string name () const
     Returns the name of the class instance. More...
     
    -Byteoperator= (const Byte &rhs)
     
    virtual bool ops (BaseType *b, int op)
     Evaluate relational operators. More...
     
    virtual void print_dap4 (XMLWriter &xml, bool constrained=false)
     
    virtual void print_decl (FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_decl (ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_val (FILE *out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_val (ostream &out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_xml (FILE *out, string space=" ", bool constrained=false)
     
    virtual void print_xml (ostream &out, string space=" ", bool constrained=false)
     
    virtual void print_xml_writer (XMLWriter &xml, bool constrained=false)
     
    virtual BaseTypeptr_duplicate ()
     
    virtual bool read ()
     Read data into a local buffer. More...
     
    virtual bool read_p ()
     Has this variable been read? More...
     
    virtual bool send_p ()
     Should this variable be sent? More...
     
    virtual bool serialize (ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval)
     
    virtual void serialize (D4StreamMarshaller &m, DMR &dmr, bool filter=false)
     Serialize a Byte. More...
     
    virtual void set_attr_table (const AttrTable &at)
     
    virtual void set_in_selection (bool state)
     
    -virtual void set_is_dap4 (const bool v)
     
    virtual void set_length (int)
     Set the number of elements for this variable. More...
     
    virtual void set_name (const string &n)
     Sets the name of the class instance. More...
     
    virtual void set_parent (BaseType *parent)
     
    virtual void set_read_p (bool state)
     Sets the value of the read_p property. More...
     
    virtual void set_send_p (bool state)
     
    virtual void set_synthesized_p (bool state)
     
    virtual void set_type (const Type &t)
     Sets the type of the class instance. More...
     
    virtual bool set_value (const dods_byte value)
     
    virtual bool synthesized_p ()
     
    virtual string toString ()
     
    virtual void transfer_attributes (AttrTable *at)
     
    virtual std::vector< BaseType * > * transform_to_dap2 (AttrTable *parent_attr_table)
     DAP4 to DAP2 transform. More...
     
    virtual void transform_to_dap4 (D4Group *root, Constructor *container)
     DAP2 to DAP4 transform. More...
     
    virtual Type type () const
     Returns the type of the class instance. More...
     
    virtual string type_name () const
     Returns the type of the class instance as a string. More...
     
    virtual unsigned int val2buf (void *val, bool reuse=false)
     
    virtual dods_byte value () const
     
    virtual BaseTypevar (const string &name="", bool exact_match=true, btp_stack *s=0)
     Returns a pointer to a member of a constructor class. More...
     
    virtual BaseTypevar (const string &name, btp_stack &s)
     
    virtual unsigned int width (bool constrained=false) const
     How many bytes does this variable use Return the number of bytes of storage this variable uses. For scalar types, this is pretty simple (an int32 uses 4 bytes, etc.). For arrays and Constructors, it is a bit more complex. Note that a scalar String variable uses sizeof(String*) bytes, not the length of the string value. The width() of a String array returns the number of elements in the array times sizeof(String*). More...
     
    virtual D4Attributesattributes ()
     
    -virtual void set_attributes (D4Attributes *)
     
    -virtual void set_attributes_nocopy (D4Attributes *)
     
    Abstract Methods
    virtual void intern_data (ConstraintEvaluator &eval, DDS &dds)
     
    virtual void intern_data ()
     Read data into this variable. More...
     
    - - - - -

    -Protected Member Functions

    void m_duplicate (const BaseType &bt)
     Perform a deep copy. More...
     
    - - - - - - - -

    -Protected Attributes

    -dods_byte d_buf
     
    -bool d_in_selection
     
    -bool d_is_synthesized
     
    -

    Detailed Description

    -

    Holds a single byte.

    -

    This class is used to hold eight bits of information. No sign information is implied in its value.

    -
    See also
    BaseType
    - -

    Definition at line 60 of file Byte.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ Byte() [1/2]

    - -
    -
    - - - - - - - - -
    libdap::Byte::Byte (const string & n)
    -
    - -

    The Byte constructor.

    -

    The Byte constructor requires only the name of the variable to be created. The name may be omitted, which will create a nameless variable. This may be adequate for some applications.

    -
    Parameters
    - - -
    nA string containing the name of the variable to be created.
    -
    -
    - -

    Definition at line 86 of file Byte.cc.

    - -
    -
    - -

    ◆ Byte() [2/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    libdap::Byte::Byte (const string & n,
    const string & d 
    )
    -
    - -

    The Byte server-side constructor.

    -

    This Byte constructor requires the name of the variable to be created and the name of the dataset from which this variable is being created. This constructor is used in server-side processing, loading structure in from a dataset.

    -
    Parameters
    - - - -
    nA string containing the name of the variable to be created.
    dA string containing the name of the dataset from which the variable is being created.
    -
    -
    - -

    Definition at line 99 of file Byte.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ add_var()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::add_var (BaseTypebt,
    Part part = nil 
    )
    -
    -virtualinherited
    -
    - -

    Add a variable.

    -

    Adds a variable to an instance of a constructor class, such as Array, Structure et cetera. This function is only used by those classes. For constructors with more than one variable, the variables appear in the same order in which they were added (i.e., the order in which add_var() was called). Since this method is only for use by Vectors and Constructors, the BaseType implementation throws InternalErr.

    -
    Note
    For the implementation of this method in Structure, Sequence, et c., first copy bt and then insert the copy. If bt is itself a constructor type you must either use the var() method to get a pointer to the actual instance added to *this or you must first add all of bt's children to it before adding it to *this. The implementations should use m_duplicate() to perform a deep copy of bt.
    -
    Todo:
    We should get rid of the Part parameter and adopt the convention that the first variable is the Array and all subsequent ones are Maps (when dealing with a Grid, the only time Part matters). This would enable several methods to migrate from Structure, Sequence and Grid to Constructor.
    -
    Parameters
    - - - -
    btThe variable to be added to this instance. The caller of this method must free memory it allocates for v. This method will make a deep copy of the object pointed to by v.
    partThe part of the constructor data to be modified. Only meaningful for Grid variables.
    -
    -
    -
    See also
    Part
    - -

    Reimplemented in libdap::Vector, libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 815 of file BaseType.cc.

    - -
    -
    - -

    ◆ attributes()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4Attributes * libdap::BaseType::attributes ()
    -
    -virtualinherited
    -
    -

    DAP4 Attribute methods

    - -

    Definition at line 599 of file BaseType.cc.

    - -
    -
    - -

    ◆ buf2val()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::Byte::buf2val (void ** val)
    -
    -virtual
    -
    - -

    Reads the class data.

    -

    Reads the class data into the memory referenced by val. The caller should either allocate enough storage to val to hold the class data or set *val to null. If *val is NULL, memory will be allocated by this function with new(). If the memory is allocated this way, the caller is responsible for deallocating that memory. Array and values for simple types are stored as C would store an array.

    -
    Deprecated:
    Use value() in the leaf classes.
    -
    Parameters
    - - -
    valA pointer to a pointer to the memory into which the class data will be copied. If the value pointed to is NULL, memory will be allocated to hold the data, and the pointer value modified accordingly. The calling program is responsible for deallocating the memory references by this pointer.
    -
    -
    -
    Returns
    The size (in bytes) of the information copied to val.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 215 of file Byte.cc.

    - -
    -
    - -

    ◆ check_semantics()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::check_semantics (string & msg,
    bool all = false 
    )
    -
    -virtualinherited
    -
    - -

    Compare an object's current state with the semantics of its type.

    -

    This function checks the class instance for internal consistency. This is important to check for complex constructor classes. For BaseType, an object is semantically correct if it has both a non-null name and type.

    -

    For example, an Int32 instance would return FALSE if it had no name or no type defined. A Grid instance might return FALSE for more complex reasons, such as having Map arrays of the wrong size or shape.

    -

    This function is used by the DDS class, and will rarely, if ever, be explicitly called by a DODS application program. A variable must pass this test before it is sent, but there may be many other stages in a retrieve operation where it would fail.

    -
    Returns
    Returns FALSE when the current state violates some aspect of the type semantics, TRUE otherwise.
    -
    Parameters
    - - - -
    msgA returned string, containing a message indicating the source of any problem.
    allFor complex constructor types (Grid, Sequence, Structure), this flag indicates whether to check the semantics of the member variables, too.
    -
    -
    -
    See also
    DDS::check_semantics
    - -

    Reimplemented in libdap::Array, libdap::Vector, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1209 of file BaseType.cc.

    - -
    -
    - -

    ◆ clear_local_data()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual void libdap::BaseType::clear_local_data ()
    -
    -inlinevirtualinherited
    -
    -

    Remove any read or set data in the private data of the variable, setting read_p() to false. Used to clear any dynamically allocated storage that holds (potentially large) data. For the simple types, this no-op version is all that's needed. Vector and some other classes define a special version and have serialize() implementations that call it to free data as soon as possible after sending it.

    -
    Note
    Added 7/5/15 jhrg
    -
    -Any specialization of this should make sure to reset the read_p property.
    - -

    Reimplemented in libdap::Sequence, libdap::Vector, libdap::D4Sequence, and libdap::D4Opaque.

    - -

    Definition at line 179 of file BaseType.h.

    - -
    -
    - -

    ◆ compute_checksum()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Byte::compute_checksum (Crc32checksum)
    -
    -virtual
    -
    - -

    include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum.

    -
    Parameters
    - - -
    checksumA Crc32 instance that holds the current checksum.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 168 of file Byte.cc.

    - -
    -
    - -

    ◆ d4_ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::Byte::d4_ops (BaseTypeb,
    int op 
    )
    -
    -virtual
    -
    -
    See also
    BaseType::d4_ops(BaseType *, int)
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 296 of file Byte.cc.

    - -
    -
    - -

    ◆ dataset()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::dataset () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the dataset used to create this instance.

    -

    A dataset from which the data is to be read. The meaning of this string will vary among different types of data sources. It may be the name of a data file or an identifier used to read data from a relational database.

    - -

    Definition at line 358 of file BaseType.cc.

    - -
    -
    - -

    ◆ deserialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::Byte::deserialize (UnMarshallerum,
    DDS,
    bool  
    )
    -
    -virtual
    -
    - -

    Deserialize the char on stdin and put the result in _BUF.

    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 160 of file Byte.cc.

    - -
    -
    - -

    ◆ deserialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Byte::deserialize (D4StreamUnMarshallerum,
    DMRdmr 
    )
    -
    -virtual
    -
    -

    The DAP4 deserialization method.

    Parameters
    - - - -
    um
    dmr
    -
    -
    -
    Exceptions
    - - -
    Erroror InternalErr
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 191 of file Byte.cc.

    - -
    -
    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Byte::dump (ostream & strm) const
    -
    -virtual
    -
    - -

    dumps information about this object

    -

    Displays the pointer value of this instance and information about this instance.

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the information to
    -
    -
    -
    Returns
    void
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 381 of file Byte.cc.

    - -
    -
    - -

    ◆ element_count()

    - -
    -
    - - - - - -
    - - - - - - - - -
    int libdap::BaseType::element_count (bool leaves = false)
    -
    -virtualinherited
    -
    - -

    Count the members of constructor types.

    -

    Return a count of the total number of variables in this variable. This is used to count the number of variables held by a constructor variable - for simple type and vector variables it always returns 1.

    -

    For compound data types, there are two ways to count members. You can count the members, or you can count the simple members and add that to the count of the compound members. For example, if a Structure contains an Int32 and another Structure that itself contains two Int32 members, the element count of the top-level structure could be two (one Int32 and one Structure) or three (one Int32 by itself and two Int32's in the subsidiary Structure). Use the leaves parameter to control which kind of counting you desire.

    -
    Returns
    Returns 1 for simple types. For compound members, the count depends on the leaves argument.
    -
    Parameters
    - - -
    leavesThis parameter is only relevant if the object contains other compound data types. If FALSE, the function counts only the data variables mentioned in the object's declaration. If TRUE, it counts the simple members, and adds that to the sum of the counts for the compound members. This parameter has no effect for simple type variables.
    -
    -
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 443 of file BaseType.cc.

    - -
    -
    - -

    ◆ FQN()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::FQN () const
    -
    -virtualinherited
    -
    -

    Return the FQN for this variable. This will include the D4 Group component of the name.

    -
    Returns
    The FQN in a string
    - -

    Reimplemented in libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 332 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - -
    AttrTable & libdap::BaseType::get_attr_table ()
    -
    -virtualinherited
    -
    -

    Get this variable's AttrTable. It's generally a bad idea to return a reference to a contained object, but in this case it seems that building an interface inside BaseType is overkill.

    -

    Use the AttrTable methods to manipulate the table.

    - -

    Definition at line 582 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_parent()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::BaseType::get_parent () const
    -
    -virtualinherited
    -
    -

    Return a pointer to the Constructor or Vector which holds (contains) this variable. If this variable is at the top level, this method returns null.

    -
    Returns
    A BaseType pointer to the variable's parent.
    - -

    Definition at line 751 of file BaseType.cc.

    - -
    -
    - -

    ◆ intern_data() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::intern_data (ConstraintEvaluatoreval,
    DDSdds 
    )
    -
    -virtualinherited
    -
    -

    Similar to using serialize() and deserialize() together in one object. Data are read as for serialize and those values are stored in the objects as deserialize() does but does not write and then read data to/from a stream.

    -

    This method is defined by the various data type classes. It calls the read() abstract method. Unlike serialize(), this method does not clear the memory use to hold the data values, so the caller should make sure to delete the DDS or the variable as soon as possible.

    -
    Parameters
    - - - -
    evalUse this as the constraint expression evaluator.
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    -
    -
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 908 of file BaseType.cc.

    - -
    -
    - -

    ◆ intern_data() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::BaseType::intern_data ()
    -
    -virtualinherited
    -
    - -

    Read data into this variable.

    -
    Parameters
    - - - -
    evalEvaluator for a constraint expression
    dmrDMR for the whole dataset
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 927 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_constructor_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_constructor_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable.

    -
    Returns
    True if the instance is a Structure, Sequence or Grid, False otherwise.
    - -

    Definition at line 412 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_in_selection ()
    -
    -virtualinherited
    -
    - -

    Is this variable part of the current selection?

    -

    Does this variable appear in either the selection part or as a function argument in the current constrain expression. If this property is set (true) then implementations of the read() method should read this variable.

    -
    Note
    This method does not check, nor does it know about the semantics of, string arguments passed to functions. Those functions might include variable names in strings; they are responsible for reading those variables. See the grid (func_grid_select()) for an example.
    -
    See also
    BaseType::read()
    - -

    Definition at line 703 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_simple_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_simple_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a numeric, string or URL type variable.

    -
    Returns
    True if the instance is a scalar numeric, String or URL variable, False otherwise. Arrays (even of simple types) return False.
    -
    See also
    is_vector_type()
    - -

    Definition at line 393 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_vector_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_vector_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a vector (i.e., array) type variable.

    -
    Returns
    True if the instance is an Array, False otherwise.
    - -

    Definition at line 402 of file BaseType.cc.

    - -
    -
    - -

    ◆ length()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual int libdap::BaseType::length () const
    -
    -inlinevirtualinherited
    -
    - -

    How many elements are in this variable.

    -
    Todo:
    change the return type to int64_t
    -
    Returns
    The number of elements; 1 for scalars
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, libdap::Str, and libdap::D4Opaque.

    - -

    Definition at line 207 of file BaseType.h.

    - -
    -
    - -

    ◆ m_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::m_duplicate (const BaseTypebt)
    -
    -protectedinherited
    -
    - -

    Perform a deep copy.

    -

    Perform a deep copy. Copies the values of bt into *this. Pointers are dereferenced and their values are copied into a newly allocated instance.

    -
    Parameters
    - - -
    btThe source object.
    -
    -
    - -

    Definition at line 86 of file BaseType.cc.

    - -
    -
    - -

    ◆ name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::name () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the class instance.

    - -

    Definition at line 320 of file BaseType.cc.

    - -
    -
    - -

    ◆ ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::Byte::ops (BaseTypeb,
    int op 
    )
    -
    -virtual
    -
    - -

    Evaluate relational operators.

    -

    This method contains the relational operators used by the constraint expression evaluator in the DDS class. Each class that wants to be able to evaluate relational expressions must overload this function. The implementation in BaseType throws an InternalErr exception. The DAP library classes Byte, ..., Url provide specializations of this method. It is not meaningful for classes such as Array because relational expressions using Array are not supported.

    -

    The op argument refers to a table generated by bison from the constraint expression parser. Use statements like the following to correctly interpret its value:

    -
    switch (op) {
    -    case EQUAL: return i1 == i2;
    -    case NOT_EQUAL: return i1 != i2;
    -    case GREATER: return i1 > i2;
    -    case GREATER_EQL: return i1 >= i2;
    -    case LESS: return i1 < i2;
    -    case LESS_EQL: return i1 <= i2;
    -    case REGEXP: throw Error("Regular expressions are not supported for integer values");
    -    default: throw Error("Unknown operator");
    -}
    -

    This function is used by the constraint expression evaluator.

    -
    Parameters
    - - - -
    bCompare the value of this instance with b.
    opAn integer index indicating which relational operator is implied. Choose one from the following: EQUAL, NOT_EQUAL, GREATER, GREATER_EQL, LESS, LESS_EQL, and REGEXP.
    -
    -
    -
    Returns
    The boolean value of the comparison.
    -
    See also
    BaseType::d4_ops(BaseType *, int)
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 266 of file Byte.cc.

    - -
    -
    - -

    ◆ print_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_dap4 (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the DAP4 XML representation for this variable. This method is used to build the DAP4 DMR response object.

    -
    Parameters
    - - - -
    xmlAn XMLWriter that will do the serialization
    constrainedTrue if the response should show the variables subject to the current constraint expression.
    -
    -
    - -

    Reimplemented in libdap::Array, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 1164 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (FILE * out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1003 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (ostream & out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1054 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_val() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Byte::print_val (FILE * out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtual
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output stream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 249 of file Byte.cc.

    - -
    -
    - -

    ◆ print_val() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Byte::print_val (ostream & out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtual
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output ostream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 256 of file Byte.cc.

    - -
    -
    - -

    ◆ print_xml() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (FILE * out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination.
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1105 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (ostream & out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1120 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml_writer()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml_writer (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    - -

    Reimplemented in libdap::Array, libdap::D4Enum, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1134 of file BaseType.cc.

    - -
    -
    - -

    ◆ ptr_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::Byte::ptr_duplicate ()
    -
    -virtual
    -
    -

    Clone this instance. Allocate a new instance and copy *this into it. This method must perform a deep copy.

    @note This method should \e not copy data values, but must copy all
    -other fields in the object.
    -
    Returns
    A newly allocated copy of this.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 107 of file Byte.cc.

    - -
    -
    - -

    ◆ read()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read ()
    -
    -virtualinherited
    -
    - -

    Read data into a local buffer.

    -

    This method should be implemented for each of the data type classes (Byte, ..., Grid) when using the DAP class library to build a server. This method is only for DAP servers. The library provides a default definition here which throws an InternalErr exception unless the read_p property has been set. In that case it returns false, indicating that all the data have been read. The latter case can happen when building a constant value that needs to be passed to a function. The variable/constant is loaded with a value when it is created.

    -

    When implementing a new DAP server, the Byte, ..., Grid data type classes are usually specialized. In each of those specializations read() should be defined to read values from the data source and store them in the object's local buffer. The read() method is called by other methods in this library. When writing read(), follow these rules:

    -
      -
    • -read() should throw Error if it encounters an error. The message should be verbose enough to be understood by someone running a client on a different machine.
    • -
    • -The value(s) should be read if and only if either send_p() or is_in_selection() return true. If neither of these return true, the value(s) should not be read. This is important when writing read() for a Constructor type such as Grid where a client may ask for only the map vectors (and thus reading the much larger Array part is not needed).
    • -
    • -For each specialization of read(), the method should first test the value of the read_p property (using the read_p() method) and read values only if the value of read_p() is false. Once the read() method reads data and stores it in the instance, it must set the value of the read_p property to true using set_read_p(). If your read() methods fail to do this data may not serialize correctly.
    • -
    • -The Array::read() and Grid::read() methods should take into account any restrictions on Array sizes.
    • -
    • -If you are writing Sequence::read(), be sure to check the documentation for Sequence::read_row() and Sequence::serialize() so you understand how Sequence::read() is being called.
    • -
    • -

      For Sequence::read(), your specialization must correctly manage the unsent_data property and row count in addition to the read_p property (handle the read_p property as describe above). For a Sequence to serialize correctly, once all data from the Sequence has been read, unsent_data property must be set to false (use Sequence::set_unsent_data()). Also, at that time the row number counter must be reset (use Sequence::reset_row_counter()). Typically the correct time to set unsent_data to false and reset the row counter is the time when Sequence::read() return false indicating that all the data for the Sequence have been read. Failure to handle these tasks will break serialization of nested Sequences. Note that when Sequence::read() returns with a result of true (indicating there is more data to send, the value of the unsent_data property should be true.

      -

      Also, if you server must handle nested sequences, be sure to read about subclassing set_read_p().

      -
    • -
    -
    Todo:
    Modify the D4 serialize code so that it supports the true/false behavior of read() for arrays.
    -
    Todo:
    Modify all of the stock handlers so they conform to this!
    -
    Returns
    False means more data remains to be read, True indicates that no more data need to be read. For Sequence and D4Sequence, this method will generally read one instance of the Sequence; for other types it will generally read the entire variable modulo any limitations due to a constraint. However, the library should be written so that read can return less than all of the data for a variable - serialize() would then call the function until it returns True.
    -
    See also
    BaseType
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 899 of file BaseType.cc.

    - -
    -
    - -

    ◆ read_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read_p ()
    -
    -virtualinherited
    -
    - -

    Has this variable been read?

    -

    Returns true if the value(s) for this variable have been read from the data source, otherwise returns false. This method is used to determine when values need to be read using the read() method. When read_p() returns true, this library assumes that buf2val() (and other methods such as get_vec()) can be used to access the value(s) of a variable.

    -
    Returns
    True if the variable's value(s) have been read, false otherwise.
    - -

    Definition at line 480 of file BaseType.cc.

    - -
    -
    - -

    ◆ send_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::send_p ()
    -
    -virtualinherited
    -
    - -

    Should this variable be sent?

    -

    Returns the state of the send_p property. If true, this variable should be sent to the client, if false, it should not. If no constraint expression (CE) has been evaluated, this property is true for all variables in a data source (i.e., for all the variables listed in a DDS). If a CE has been evaluated, this property is true only for those variables listed in the projection part of the CE.

    -
    Returns
    True if the variable should be sent to the client, false otherwise.
    - -

    Definition at line 554 of file BaseType.cc.

    - -
    -
    - -

    ◆ serialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::Byte::serialize (ConstraintEvaluatoreval,
    DDSdds,
    Marshallerm,
    bool ce_eval 
    )
    -
    -virtual
    -
    -

    Serialize the contents of member _BUF (the object's internal buffer, used to hold data) and write the result to stdout. If FLUSH is true, write the contents of the output buffer to the kernel. FLUSH is false by default. If CE_EVAL is true, evaluate the current constraint expression; only send data if the CE evaluates to true.

    -
    Returns
    False if a failure to read, send or flush is detected, true otherwise.
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 139 of file Byte.cc.

    - -
    -
    - -

    ◆ serialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Byte::serialize (D4StreamMarshallerm,
    DMRdmr,
    bool filter = false 
    )
    -
    -virtual
    -
    - -

    Serialize a Byte.

    -
    Parameters
    - - - - - -
    m
    dmrUnused
    evalUnused
    filterUnused
    -
    -
    -
    Exceptions
    - - -
    Erroris thrown if the value needs to be read and that operation fails.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 182 of file Byte.cc.

    - -
    -
    - -

    ◆ set_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_attr_table (const AttrTableat)
    -
    -virtualinherited
    -
    -

    Set this variable's attribute table.

    Parameters
    - - -
    atSource of the attributes.
    -
    -
    - -

    Definition at line 590 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_in_selection (bool state)
    -
    -virtualinherited
    -
    -

    Set the in_selection property to state. This property indicates that the variable is used as a parameter to a constraint expression function or that it appears as an argument in a selection sub-expression. If set (true), implementations of the BaseType::read() method should read this variable.

    -
    Parameters
    - - -
    stateSet the in_selection property to this state.
    -
    -
    -
    See also
    BaseType::read()
    -
    -BaseType::is_in_selection() for more information.
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 718 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_length()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::BaseType::set_length (int )
    -
    -inlinevirtualinherited
    -
    - -

    Set the number of elements for this variable.

    -
    Todo:
    change param type to int64_t
    -
    Parameters
    - - -
    lThe number of elements
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, and libdap::Vector.

    - -

    Definition at line 214 of file BaseType.h.

    - -
    -
    - -

    ◆ set_name()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_name (const string & n)
    -
    -virtualinherited
    -
    - -

    Sets the name of the class instance.

    - -

    Reimplemented in libdap::Vector.

    - -

    Definition at line 344 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_parent()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_parent (BaseTypeparent)
    -
    -virtualinherited
    -
    -

    Set the parent property for this variable.

    -
    Note
    Added ability to set parent to null. 10/19/12 jhrg
    -
    Parameters
    - - -
    parentPointer to the Constructor of Vector parent variable or null if the variable has no parent (if it is at the top-level of a DAP2/3 DDS).
    -
    -
    -
    Exceptions
    - - -
    InternalErrthrown if called with anything other than a Constructor, Vector or Null.
    -
    -
    - -

    Definition at line 733 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_read_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_read_p (bool state)
    -
    -virtualinherited
    -
    - -

    Sets the value of the read_p property.

    -

    Sets the value of the read_p property. This indicates that the value(s) of this variable has/have been read. An implementation of the read() method should use this to set the read_p property to true.

    -
    Note
    If the is_synthesized property is true, this method will not alter the is_read property. If you need that behavior, specialize the method in your subclasses if the various types.
    -
    -For most of the types the default implementation of this method is fine. However, if you're building a server which must handle data represented using nested sequences, then you may need to provide a specialization of Sequence::set_read_p(). By default Sequence::set_read_p() recursively sets the read_p property for all child variables to state. For servers where one Sequence reads an outer set of values and another reads an inner set, this is cumbersome. In such a case, it is easier to specialize Sequence::set_read_p() so that it does not recursively set the read_p property for the inner Sequence. Be sure to see the documentation for the read() method!
    -
    Todo:
    Look at making synthesized variables easier to implement and at making them more integrated into the overall CE evaluation process. Maybe the code that computes the synthesized var's value should be in the that variable's read() method? This might provide a way to get rid of the awkward 'projection functions' by replacing them with real children of BaseType. It would also provide a way to clean up the way the synthesized_p prop intrudes on the read_p prop.
    -
    See also
    BaseType::read()
    -
    Parameters
    - - -
    stateSet the read_p property to this state.
    -
    -
    - -

    Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 516 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_send_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_send_p (bool state)
    -
    -virtualinherited
    -
    -

    Sets the value of the send_p flag. This function is meant to be called from within the constraint evaluator of other code which determines that this variable should be returned to the client. Data are ready to be sent when both the d_is_send and d_is_read flags are set to TRUE.

    -
    Parameters
    - - -
    stateThe logical state to set the send_p flag.
    -
    -
    - -

    Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 568 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_synthesized_p (bool state)
    -
    -virtualinherited
    -
    -

    Set the synthesized flag. Before setting this flag be sure to set the read_p() state. Once this flag is set you cannot alter the state of the read_p flag!

    -
    See also
    synthesized_p()
    - -

    Definition at line 463 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_type()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_type (const Typet)
    -
    -virtualinherited
    -
    - -

    Sets the type of the class instance.

    - -

    Definition at line 372 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_value()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool libdap::Byte::set_value (const dods_byte value)
    -
    -virtual
    -
    -

    Set the value of this instance.

    Parameters
    - - -
    valueThe value
    -
    -
    -
    Returns
    Always returns true; the return type of bool is for compatibility with the Passive* subclasses written by HAO.
    - -

    Definition at line 234 of file Byte.cc.

    - -
    -
    - -

    ◆ synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::synthesized_p ()
    -
    -virtualinherited
    -
    -

    Returns true if the variable is a synthesized variable. A synthesized variable is one that is added to the dataset by the server (usually with a `projection function'.

    - -

    Definition at line 452 of file BaseType.cc.

    - -
    -
    - -

    ◆ toString()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::toString ()
    -
    -virtualinherited
    -
    -

    Write out the object's internal fields in a string. To be used for debugging when regular inspection w/ddd or gdb isn't enough.

    -
    Returns
    A string which shows the object's internal stuff.
    - -

    Reimplemented in libdap::Sequence.

    - -

    Definition at line 184 of file BaseType.cc.

    - -
    -
    - -

    ◆ transfer_attributes()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::transfer_attributes (AttrTableat_container)
    -
    -virtualinherited
    -
    -

    Transfer attributes from a DAS object into this variable. Because of the rough history of the DAS object and the way that various server code built the DAS, this is necessarily a heuristic process. The intent is that this method will be overridden by handlers that need to look for certain patterns in the DAS (e.g., hdf4's odd variable_dim_n; where n = 0, 1, 2, ...) attribute containers.

    -

    There should be a one-to-one mapping between variables and attribute containers. However, in some cases one variable has attributes spread across several top level containers and in some cases one container is used by several variables

    -
    Note
    This method is technically unnecessary because a server (or client) can easily add attributes directly using the DDS::get_attr_table or BaseType::get_attr_table methods and then poke values in using any of the methods AttrTable provides. This method exists to ease the transition to DDS objects which contain attribute information for the existing servers (Since they all make DAS objects separately from the DDS). They could be modified to use the same AttrTable methods but operate on the AttrTable instances in a DDS/BaseType instead of those in a DAS.
    -
    Parameters
    - - -
    at_containerTransfer attributes from this container.
    -
    -
    -
    Returns
    void
    - -

    Reimplemented in libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 644 of file BaseType.cc.

    - -
    -
    - -

    ◆ transform_to_dap2()

    - -
    -
    - - - - - -
    - - - - - - - - -
    std::vector< BaseType * > * libdap::Byte::transform_to_dap2 (AttrTableparent_attr_table)
    -
    -virtual
    -
    - -

    DAP4 to DAP2 transform.

    -

    Return a DAP2 'copy' of the variable.

    -

    NOTE: This little bit of magic ensures that the DAP4 shenanigans in which UInt8, Char , and Byte are synonymous is reduced to the DAP2 simplicity of Byte.

    -
    Parameters
    - - - -
    rootThe root group that should hold this new variable. Add Group-level stuff here (e.g., D4Dimensions).
    containerAdd the new variable to this container.
    -
    -
    -
    Returns
    A pointer to the transformed variable
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 346 of file Byte.cc.

    - -
    -
    - -

    ◆ transform_to_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::transform_to_dap4 (D4Grouproot,
    Constructorcontainer 
    )
    -
    -virtualinherited
    -
    - -

    DAP2 to DAP4 transform.

    -

    For the current BaseType, return a DAP4 'copy' of the variable.

    -
    Note
    For most DAP2 types, in this implementation of DAP4 the corresponding DAP4 type is the same. The different types are Sequences (which are D4Sequences in the DAP4 implementation), Grids (which are coverages) and Arrays (which use shared dimensions).
    -
    Parameters
    - - - -
    rootThe root group that should hold this new variable. Add Group-level stuff here (e.g., D4Dimensions).
    containerAdd the new variable to this container.
    -
    -
    -
    Returns
    A pointer to the transformed variable
    - -

    Reimplemented in libdap::Sequence, libdap::Array, libdap::Grid, libdap::Structure, and libdap::Constructor.

    - -

    Definition at line 216 of file BaseType.cc.

    - -
    -
    - -

    ◆ type()

    - -
    -
    - - - - - -
    - - - - - - - -
    Type libdap::BaseType::type () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance.

    - -

    Definition at line 365 of file BaseType.cc.

    - -
    -
    - -

    ◆ type_name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::type_name () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance as a string.

    - -

    Definition at line 379 of file BaseType.cc.

    - -
    -
    - -

    ◆ val2buf()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    unsigned int libdap::Byte::val2buf (void * val,
    bool reuse = false 
    )
    -
    -virtual
    -
    -

    Store the value referenced by val in the object's internal buffer. reuse has no effect because this class does not dynamically allocate storage for the internal buffer.

    -
    Returns
    The size (in bytes) of the value's representation.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 201 of file Byte.cc.

    - -
    -
    - -

    ◆ value()

    - -
    -
    - - - - - -
    - - - - - - - -
    dods_byte libdap::Byte::value () const
    -
    -virtual
    -
    -

    Get the value of this instance.

    Returns
    The value.
    - -

    Definition at line 244 of file Byte.cc.

    - -
    -
    - -

    ◆ var() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::BaseType::var (const string & name = "",
    bool exact_match = true,
    btp_stack * s = 0 
    )
    -
    -virtualinherited
    -
    - -

    Returns a pointer to a member of a constructor class.

    -

    Returns a pointer to the contained variable in a composite class. The composite classes are those made up of aggregated simple data types. Array, Grid, and Structure are composite types, while Int and Float are simple types. This function is only used by composite classes. The BaseType implementation always returns null.

    -

    Several of the subclasses provide alternate access methods that make sense for that particular data type. For example, the Array class defines a *var(int i) method that returns the ith entry in the Array data, and the Structure provides a *var(Vars_iter) function using a pseudo-index to access the different members of the structure.

    -
    Parameters
    - - - - -
    nameThe name of the class member. Defaults to ""
    exact_matchTrue if only interested in variables whose full names match n exactly. If false, returns the first variable whose name matches name. For example, if name is x and point.x is a variable, then var("x", false) would return a BaseType pointer to point.x. If exact_match was true then name would need to be "point.x" for var to return that pointer. This feature simplifies constraint expressions for datasets which have complex, nested, constructor variables. Defaults to true.
    sRecord the path to name. Defaults to null, in which case it is not used.
    -
    -
    -
    Returns
    A pointer to the member named in the n argument. If no name is given, the function returns the first (only) variable. For example, an Array has only one variable, while a Structure can have many.
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 758 of file BaseType.cc.

    - -
    -
    - -

    ◆ var() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::BaseType::var (const string & name,
    btp_stack & s 
    )
    -
    -virtualinherited
    -
    -

    This version of var(...) searches for name and returns a pointer to the BaseType object if found. It uses the same search algorithm as BaseType::var(const string &, bool, btp_stack *) when exact_match is false. In addition to returning a pointer to the variable, it pushes onto s a BaseType pointer to each constructor type that ultimately contains name.

    -
    Note
    The BaseType implementation always returns null. There are no default values for the parameters. If var() is called w/o any params, the three parameter version will be used.
    -
    Deprecated:
    This method is deprecated because it tries first to use exact_match and, if that fails, then tries leaf_match. It's better to use the alternate form of var(...) and specify exactly what you'd like to do.
    -
    Returns
    A pointer to the named variable.
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 780 of file BaseType.cc.

    - -
    -
    - -

    ◆ width()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::Byte::width (bool constrained = false) const
    -
    -virtual
    -
    - -

    How many bytes does this variable use Return the number of bytes of storage this variable uses. For scalar types, this is pretty simple (an int32 uses 4 bytes, etc.). For arrays and Constructors, it is a bit more complex. Note that a scalar String variable uses sizeof(String*) bytes, not the length of the string value. The width() of a String array returns the number of elements in the array times sizeof(String*).

    -
    Parameters
    - - -
    constrainedShould the current constraint be taken into account?
    -
    -
    -
    Returns
    Bytes of storage
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 124 of file Byte.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1Byte.js b/html/classlibdap_1_1Byte.js deleted file mode 100644 index b0dc938ad..000000000 --- a/html/classlibdap_1_1Byte.js +++ /dev/null @@ -1,78 +0,0 @@ -var classlibdap_1_1Byte = -[ - [ "btp_stack", "classlibdap_1_1Byte.html#ae9c6e71855b90a0e552713011c9ab81f", null ], - [ "Byte", "classlibdap_1_1Byte.html#a6b22d844cd6418102466954f8e1e3106", null ], - [ "Byte", "classlibdap_1_1Byte.html#aa0470214af169a5e1c080baa8257fbba", null ], - [ "~Byte", "classlibdap_1_1Byte.html#a85d098199c9f39f50e205a9da566c561", null ], - [ "Byte", "classlibdap_1_1Byte.html#a5931c171a88042d65f65117fc237e5ac", null ], - [ "add_var", "classlibdap_1_1Byte.html#adca3c2621c4a509537c18362005d7f7f", null ], - [ "add_var_nocopy", "classlibdap_1_1Byte.html#aa1192360cea4dc516c822cd3e13dc723", null ], - [ "attributes", "classlibdap_1_1Byte.html#a97452f06d2188eb838399a709246b5e9", null ], - [ "buf2val", "classlibdap_1_1Byte.html#a2de44757203d23419d59c8731ca0b96c", null ], - [ "check_semantics", "classlibdap_1_1Byte.html#aec503abec2fd3090e7738c0a575491f8", null ], - [ "clear_local_data", "classlibdap_1_1Byte.html#aaddb97a4efbe035f41deaf03c6e8683f", null ], - [ "compute_checksum", "classlibdap_1_1Byte.html#a9aceffe3fc1b898adf50ce44151c2444", null ], - [ "d4_ops", "classlibdap_1_1Byte.html#a44a8efbbd1e0423b4959bc76baf92dfd", null ], - [ "dataset", "classlibdap_1_1Byte.html#a47521ce321a17e6ce217870cb6a1a7aa", null ], - [ "deserialize", "classlibdap_1_1Byte.html#a11a4fa1e2e5c6477c38af9fa5c3118b4", null ], - [ "deserialize", "classlibdap_1_1Byte.html#a9ffbfab78e18db036bfcf03fd0afc05c", null ], - [ "dump", "classlibdap_1_1Byte.html#a3cf81110f37a9b2d31a491de936b6d51", null ], - [ "element_count", "classlibdap_1_1Byte.html#a5c2235737737b482bfa7536b8aeab810", null ], - [ "FQN", "classlibdap_1_1Byte.html#a977cb954cc8f0d914d6f66ea0f48a9e3", null ], - [ "get_attr_table", "classlibdap_1_1Byte.html#a1fcd9537c67e3bf88964b2656ff5bac1", null ], - [ "get_parent", "classlibdap_1_1Byte.html#a3459cdaa239c33ce111ef360d8dc3017", null ], - [ "intern_data", "classlibdap_1_1Byte.html#a722d33783aa0272d339b0301a4f77e59", null ], - [ "intern_data", "classlibdap_1_1Byte.html#a1956e6ea90a745516f5372c859173433", null ], - [ "is_constructor_type", "classlibdap_1_1Byte.html#a8b8490e0047c6da52945699a132008ea", null ], - [ "is_dap4", "classlibdap_1_1Byte.html#a7f6835cb5e5589ab5dad3fb4813d3bea", null ], - [ "is_in_selection", "classlibdap_1_1Byte.html#ae302ab2ec26e9fc5b575bf5d3d09aa5c", null ], - [ "is_simple_type", "classlibdap_1_1Byte.html#aae57e5b270b3a015d40c8db10b9b5549", null ], - [ "is_vector_type", "classlibdap_1_1Byte.html#a7107c76dbcab71015141142383b6d022", null ], - [ "length", "classlibdap_1_1Byte.html#aadcda7a659157bc6a832d8a5fb775b3f", null ], - [ "m_duplicate", "classlibdap_1_1Byte.html#a0c55b826c8c5dfe7a454dc670e859a41", null ], - [ "name", "classlibdap_1_1Byte.html#a24c5d67823b3cff7f4245a993072a142", null ], - [ "operator=", "classlibdap_1_1Byte.html#a38a34e521485f8c9c436b9cf1d44c3b9", null ], - [ "ops", "classlibdap_1_1Byte.html#ad97b380875f85f6e7c3d02488f209afa", null ], - [ "print_dap4", "classlibdap_1_1Byte.html#afcddbe441380b95c894510c02980b163", null ], - [ "print_decl", "classlibdap_1_1Byte.html#a2d799fad93255d7f2b803562ae7a5784", null ], - [ "print_decl", "classlibdap_1_1Byte.html#afd744b0ddeb04e7b173c9e83423ec572", null ], - [ "print_val", "classlibdap_1_1Byte.html#a54af53582af918c4a94ad98ba9845630", null ], - [ "print_val", "classlibdap_1_1Byte.html#adc3565bb42fd7454205e61a8f16119e4", null ], - [ "print_xml", "classlibdap_1_1Byte.html#a825820edee179550cfde3dfd4d274f2a", null ], - [ "print_xml", "classlibdap_1_1Byte.html#a8bd2c7682edd48c64b210bdf247bdef7", null ], - [ "print_xml_writer", "classlibdap_1_1Byte.html#a11554ff931528b243e9af8173d205b44", null ], - [ "ptr_duplicate", "classlibdap_1_1Byte.html#a599c7dec30fe35df45c9a66cbb7030be", null ], - [ "read", "classlibdap_1_1Byte.html#a1da003c53f2e663223f603ab3fbd7c8e", null ], - [ "read_p", "classlibdap_1_1Byte.html#a38ff819a432217c55db2e9071928d20c", null ], - [ "send_p", "classlibdap_1_1Byte.html#a980c0013817836aa77ef74aeec7fb192", null ], - [ "serialize", "classlibdap_1_1Byte.html#aa70aeb6aaddd570ed5bc32215b53c88e", null ], - [ "serialize", "classlibdap_1_1Byte.html#a2799f2bb1a9f1992ec57c7f31761abe1", null ], - [ "set_attr_table", "classlibdap_1_1Byte.html#a572a1d76a75981abac83a4241e90c0fa", null ], - [ "set_attributes", "classlibdap_1_1Byte.html#ad4dda4cf43dca838d3de183b8e01cd09", null ], - [ "set_attributes_nocopy", "classlibdap_1_1Byte.html#afd0e5f87d19020f560d5c1ff8dd4d6a3", null ], - [ "set_in_selection", "classlibdap_1_1Byte.html#a2bc036248cdaf1affac464170f32ad30", null ], - [ "set_is_dap4", "classlibdap_1_1Byte.html#abca9ddaa9a1ada8447cbe7193e8e288a", null ], - [ "set_length", "classlibdap_1_1Byte.html#a4fe343c1eeb6fb1d61ab030433651d90", null ], - [ "set_name", "classlibdap_1_1Byte.html#a86504564f45a3e6748c6f1cc0ff4e9fa", null ], - [ "set_parent", "classlibdap_1_1Byte.html#a5b6a39f6ce6594fa74f3fc899ac9a966", null ], - [ "set_read_p", "classlibdap_1_1Byte.html#a4533905a450d2a7af32e7d5acd557676", null ], - [ "set_send_p", "classlibdap_1_1Byte.html#aba7b27635c95b74536de18393133628e", null ], - [ "set_synthesized_p", "classlibdap_1_1Byte.html#a595cb4059cff24f801a1b6da79bd2f9e", null ], - [ "set_type", "classlibdap_1_1Byte.html#af74f8d1ef57c9fcca46f620f75d175a3", null ], - [ "set_value", "classlibdap_1_1Byte.html#ad79ed596e502d99c450a8a1e23b381b7", null ], - [ "synthesized_p", "classlibdap_1_1Byte.html#ae64e677da27249473cdba0b60cdbb90a", null ], - [ "toString", "classlibdap_1_1Byte.html#a701eb3361f5b5628329ece019cd34519", null ], - [ "transfer_attributes", "classlibdap_1_1Byte.html#add8e836c622042a339152a6c31e5bdfb", null ], - [ "transform_to_dap2", "classlibdap_1_1Byte.html#a21e180be842b140b3d0772dc94ab4583", null ], - [ "transform_to_dap4", "classlibdap_1_1Byte.html#adb03e2e1e40c3c888577c4666831a949", null ], - [ "type", "classlibdap_1_1Byte.html#af8e803b20a7a7dc5f2ef351d7fac4a56", null ], - [ "type_name", "classlibdap_1_1Byte.html#a18a42c8ec35cb5b15cd651a4152f8a2c", null ], - [ "val2buf", "classlibdap_1_1Byte.html#a8b8afd3348f7d22e6ff02c0c605c7bfd", null ], - [ "value", "classlibdap_1_1Byte.html#a96312bb8da28d27316a0077143e42360", null ], - [ "var", "classlibdap_1_1Byte.html#a4dc4fac1bb6083f6db645f37bfd59b85", null ], - [ "var", "classlibdap_1_1Byte.html#adecfc442b5927c79933c7f71cfe03fd2", null ], - [ "width", "classlibdap_1_1Byte.html#a4d4eb99a6d1022ca4e1808776438399d", null ], - [ "d_buf", "classlibdap_1_1Byte.html#a47a666acf4bc1d3a2f4beb7f2199cb90", null ], - [ "d_in_selection", "classlibdap_1_1Byte.html#a949a89714965d7afdcd1e3edc8b7f0d4", null ], - [ "d_is_synthesized", "classlibdap_1_1Byte.html#a629e97e8eb7d285b54c9af8c1ec9a29a", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1Byte__inherit__graph.map b/html/classlibdap_1_1Byte__inherit__graph.map deleted file mode 100644 index ef768da46..000000000 --- a/html/classlibdap_1_1Byte__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1Byte__inherit__graph.md5 b/html/classlibdap_1_1Byte__inherit__graph.md5 deleted file mode 100644 index f1b0ffc78..000000000 --- a/html/classlibdap_1_1Byte__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -149b84a0c524de59fa261760c86e59a0 \ No newline at end of file diff --git a/html/classlibdap_1_1Byte__inherit__graph.png b/html/classlibdap_1_1Byte__inherit__graph.png deleted file mode 100644 index f5a5f7904975ecb4a7e6aec3bdef817b2014ee8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62345 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�FF%siM zceLe@sIQ>Cd@A^RG{&mE{kV7)bY#A{F6e+Ky>6Pc^fZVrW+J>A0Ts_TfE(!PBNH;;2Os-!B^tg0WMwa60-^jaM+0?o9 z3w4RU;}M?Gf3xDjsU_Z1=@itd}yo4+vC2RYJkd|$?VtdX|Im!2~97AZYW z$Qr4`+7Sacu!n)mR(>wEF+vzu92ADRN3E$=LO*pn?i`6%S8o-LJcd-zo+uNIZU)~x86|U{ABy!J zczMP;M}TYnDh$#Q(0TCXfM9q+S|d|rW?xmB;fyMPlZS!?EAyJD-xi2V{T0`&&oygg z5%6*l-U9>e^~Q6QjMmv4jR*$|ZJR+dQNZK67Al`Je!Bd;8q7}6WndnA=Z}VNtPedh zP`FdeHQSGM5LJq}c=cg=F74gpH}nMuqp@l?fjctX_6QvZ8H&}^B4`?8E9S1!v6hC# zMA1R=5NFHds|G9fFa>aZE1-!Bkf&aat!EQXswP;b5rVttFP|O|2%{|xd}xXumzyTw zz-dYo-^x78vKaFu!!e4CI~zqZtxV}I`|iVMw>oLHk=v+aK}io}@aWUlHSje<(fZmY zlD<5NX0P*`dl6>k<@H5&pC+prwyD%#^)J2Px5dtc4T7@pEpjAtA-$E7nLoK<<8Oj_wjLiJ39XM zn`CXS`9WcFZlCB4L!TauFB5SNYz3IF_&{&4<3h ze!j%#w88fz-#GQ5AVHuvn?ce`9;CkE@NTePwcX5lox;S7Jnl!Th1!Wk^*|A#Fy#6B ze)d-@Vf>P)GLVv`TNb>-&ZSdd!Y!L0_HqY~?b+ys(`}2D-shWFpBj%#G%w&~ADOB>`WL^kef(DmNr~>v9u?)53m^mEb8lW=X-VY zmzm(nzDu!G`t@_`57)899&r`oB+ir-SUS8+Pq5&qyYKKhQtairD*}VIa z!pOy(Yh4{0!sr+62NKx>rf|DQE+mnA0Fb8gmL{|lw69&vMznTkk04^2kH-J|T@zB| z4(A-##~y^-_MBTK-45Tg_pvt^c<<)j3&rODSB+R<7;v*$M&sh?bbo#JXxpY;ndQ6n z_q=B)?d-3eNb%-B_OodxG|JYDm?Pg_c3bw^zE9a36%F_r@Xiy

    mR;E(dwA4LMFU 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%0A!;VI7uH* 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 diff --git a/html/classlibdap_1_1ChildLocker-members.html b/html/classlibdap_1_1ChildLocker-members.html deleted file mode 100644 index 0ce1d37a6..000000000 --- a/html/classlibdap_1_1ChildLocker-members.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -

    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::ChildLocker Member List
    -
    -
    - -

    This is the complete list of members for libdap::ChildLocker, including all inherited members.

    - - - -
    ChildLocker(pthread_mutex_t &lock, pthread_cond_t &cond, int &count)libdap::ChildLocker
    ~ChildLocker() (defined in libdap::ChildLocker)libdap::ChildLockervirtual
    -
    - - - - diff --git a/html/classlibdap_1_1ChildLocker.html b/html/classlibdap_1_1ChildLocker.html deleted file mode 100644 index e1decf038..000000000 --- a/html/classlibdap_1_1ChildLocker.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - -libdap: libdap::ChildLocker Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::ChildLocker Class Reference
    -
    -
    - -

    #include <MarshallerThread.h>

    - - - - -

    -Public Member Functions

     ChildLocker (pthread_mutex_t &lock, pthread_cond_t &cond, int &count)
     
    -

    Detailed Description

    -

    Synchronization for the child thread in the multi-threaded version of the DAP2 and DAP4 (when it gets implemented) 'Marshaller' class used to send data. The class declared below (MarshallerThread) manages the child thread.

    -

    The ctor of this class simply locks the mutex; the dtor clears the child thread count, signals that count has changed and unlocks the mutex.

    - -

    Definition at line 74 of file MarshallerThread.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ ChildLocker()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    ChildLocker::ChildLocker (pthread_mutex_t & lock,
    pthread_cond_t & cond,
    int & count 
    )
    -
    -

    Lock the mutex, but do not wait on the condition variable. This is used by the child thread; it helps ensure that the mutex is unlocked and the predicate is reset no matter how the child thread is exited.

    -

    Note we how a reference to the shared 'count' predicate that tells how many (0 or 1) child threads exist so that when this version of the Locker object is destroyed, we can zero that. This enables us to use RAII in the child thread and ensure the invariant if there is an error and the code exits with a summary return.

    - -

    Definition at line 133 of file MarshallerThread.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1ChildLocker.js b/html/classlibdap_1_1ChildLocker.js deleted file mode 100644 index d485c775f..000000000 --- a/html/classlibdap_1_1ChildLocker.js +++ /dev/null @@ -1,5 +0,0 @@ -var classlibdap_1_1ChildLocker = -[ - [ "ChildLocker", "classlibdap_1_1ChildLocker.html#a310d79ab9441523c68541035bf2d511a", null ], - [ "~ChildLocker", "classlibdap_1_1ChildLocker.html#a5d439cc3f58d99598dfe895c70e21ff5", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1Connect-members.html b/html/classlibdap_1_1Connect-members.html deleted file mode 100644 index eb457ea98..000000000 --- a/html/classlibdap_1_1Connect-members.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::Connect Member List
    -
    -
    - -

    This is the complete list of members for libdap::Connect, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    CE()libdap::Connectvirtual
    Connect() (defined in libdap::Connect)libdap::Connectprotected
    Connect(const Connect &) (defined in libdap::Connect)libdap::Connectprotected
    Connect(const string &name, string uname="", string password="")libdap::Connect
    get_protocol()libdap::Connectinline
    get_version()libdap::Connectinline
    is_cache_enabled() (defined in libdap::Connect)libdap::Connect
    is_local() (defined in libdap::Connect)libdap::Connect
    operator=(const Connect &) (defined in libdap::Connect)libdap::Connectprotected
    read_data(DataDDS &data, Response *rs)libdap::Connectvirtual
    read_data(DDS &data, Response *rs) (defined in libdap::Connect)libdap::Connectvirtual
    read_data_no_mime(DataDDS &data, Response *rs)libdap::Connectvirtual
    read_data_no_mime(DDS &data, Response *rs) (defined in libdap::Connect)libdap::Connectvirtual
    request_das(DAS &das)libdap::Connectvirtual
    request_das_url(DAS &das)libdap::Connectvirtual
    request_data(DataDDS &data, string expr="")libdap::Connectvirtual
    request_data_ddx(DataDDS &data, string expr="") (defined in libdap::Connect)libdap::Connectvirtual
    request_data_ddx_url(DataDDS &data) (defined in libdap::Connect)libdap::Connectvirtual
    request_data_url(DataDDS &data)libdap::Connectvirtual
    request_dds(DDS &dds, string expr="")libdap::Connectvirtual
    request_dds_url(DDS &dds)libdap::Connectvirtual
    request_ddx(DDS &dds, string expr="")libdap::Connectvirtual
    request_ddx_url(DDS &dds)libdap::Connectvirtual
    request_protocol()libdap::Connectvirtual
    request_version()libdap::Connectvirtual
    set_accept_deflate(bool deflate)libdap::Connect
    set_cache_enabled(bool enabled)libdap::Connect
    set_credentials(string u, string p)libdap::Connect
    set_xdap_accept(int major, int minor) (defined in libdap::Connect)libdap::Connect
    set_xdap_protocol(int major, int minor)libdap::Connect
    URL(bool CE=true)libdap::Connectvirtual
    ~Connect() (defined in libdap::Connect)libdap::Connectvirtual
    -
    - - - - diff --git a/html/classlibdap_1_1Connect.html b/html/classlibdap_1_1Connect.html deleted file mode 100644 index 3ca4e78f0..000000000 --- a/html/classlibdap_1_1Connect.html +++ /dev/null @@ -1,1001 +0,0 @@ - - - - - - - -libdap: libdap::Connect Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::Connect Class Reference
    -
    -
    - -

    Holds information about the link from a DAP2 client to a dataset. - More...

    - -

    #include <Connect.h>

    -
    -Inheritance diagram for libdap::Connect:
    -
    -
    Inheritance graph
    - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual string CE ()
     Get the Connect's constraint expression. More...
     
     Connect (const string &name, string uname="", string password="")
     Create an instance of Connect. More...
     
    string get_protocol ()
     
    string get_version ()
     
    -bool is_cache_enabled ()
     
    -bool is_local ()
     
    virtual void read_data (DataDDS &data, Response *rs)
     Read data which is preceded by MIME headers. This method works for both data dds and data ddx responses. More...
     
    -virtual void read_data (DDS &data, Response *rs)
     
    virtual void read_data_no_mime (DataDDS &data, Response *rs)
     Read data from a file which does not have response MIME headers. This method is a companion to read_data(). While read_data() assumes that the response has MIME headers, this method does not. If you call this with a Response that does contain headers, it will throw an Error (and the message is likely to be inscrutable). More...
     
    -virtual void read_data_no_mime (DDS &data, Response *rs)
     
    virtual void request_das (DAS &das)
     Get the DAS from a server. More...
     
    virtual void request_das_url (DAS &das)
     Get the DAS from a server. More...
     
    virtual void request_data (DataDDS &data, string expr="")
     Get the DAS from a server. More...
     
    -virtual void request_data_ddx (DataDDS &data, string expr="")
     
    -virtual void request_data_ddx_url (DataDDS &data)
     
    virtual void request_data_url (DataDDS &data)
     Get the DAS from a server. More...
     
    virtual void request_dds (DDS &dds, string expr="")
     Get the DDS from a server. More...
     
    virtual void request_dds_url (DDS &dds)
     Get the DDS from a server. More...
     
    virtual void request_ddx (DDS &dds, string expr="")
     Get the DDX from a server. More...
     
    virtual void request_ddx_url (DDS &dds)
     The 'url' version of request_ddx. More...
     
    virtual string request_protocol ()
     
    virtual string request_version ()
     
    void set_accept_deflate (bool deflate)
     
    void set_cache_enabled (bool enabled)
     
    void set_credentials (string u, string p)
     Set the credentials for responding to challenges while dereferencing URLs. More...
     
    -void set_xdap_accept (int major, int minor)
     
    void set_xdap_protocol (int major, int minor)
     
    virtual string URL (bool CE=true)
     Get the object's URL. More...
     
    - - - - - - - - -

    -Protected Member Functions

    Suppress the C++ defaults for these.
    Connect ()
     
    Connect (const Connect &)
     
    -Connectoperator= (const Connect &)
     
    -

    Detailed Description

    -

    Holds information about the link from a DAP2 client to a dataset.

    -

    Connect objects are used as containers for information pertaining to the connection a user program makes to a dataset. The dataset may be either local (for example, a file on the user's own computer) or a remote dataset. In the latter case a DAP2 URL will be used to reference the dataset, instead of a filename.

    -

    Connect contains methods which can be used to read the DAP2 DAS and DDS objects from the remote dataset as well as reading data. The class understands in a rudimentary way how DAP2 constraint expressions are formed and how to manage them.

    -

    Connect also provides additional services such as automatic decompression of compressed data and and error processing.

    -
    Note
    Update: I removed the DEFAULT_BASETYPE_FACTORY switch because it caused more confusion than it avoided. See Trac #130.
    -
    -The compile-time symbol DEFAULT_BASETYPE_FACTORY controls whether the old (3.4 and earlier) DDS and DataDDS constructors are supported. These constructors now use a default factory class (BaseTypeFactory, implemented by this library) to instantiate Byte, ..., Grid variables. To use the default ctor in your code you must also define this symbol. If you do choose to define this and fail to provide a specialization of BaseTypeFactory when your software needs one, you code may not link or may fail at run time. In addition to the older ctors for DDS and DataDDS, defining the symbol also makes some of the older methods in Connect available (because those methods require the older DDS and DataDDS ctors.
    -
    See also
    DDS
    -
    -DAS
    -
    -Error
    -
    Author
    jhrg
    - -

    Definition at line 129 of file Connect.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ Connect()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    libdap::Connect::Connect (const string & n,
    string uname = "",
    string password = "" 
    )
    -
    - -

    Create an instance of Connect.

    -

    The Connect constructor requires a name, which is the URL to which the connection is to be made.

    -
    Parameters
    - - - - -
    nThe URL for the virtual connection.
    unameUse this username for authentication. Null by default.
    passwordPassword to use for authentication. Null by default.
    -
    -
    - -

    Definition at line 298 of file Connect.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ CE()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::Connect::CE ()
    -
    -virtual
    -
    - -

    Get the Connect's constraint expression.

    -

    Return the constraint expression (CE) part of the Connect URL. Note that this CE is supplied as part of the URL passed to the Connect's constructor. It is not the CE passed to the request_data() function.

    -
    Returns
    A string containing the constraint expression (if any) submitted to the Connect object's constructor.
    - -

    Definition at line 1146 of file Connect.cc.

    - -
    -
    - -

    ◆ get_protocol()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::Connect::get_protocol ()
    -
    -inline
    -
    -

    Return the DAP protocol version of the most recent response. Before a response is made, this contains the string "2.0."

    - -

    Definition at line 193 of file Connect.h.

    - -
    -
    - -

    ◆ get_version()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::Connect::get_version ()
    -
    -inline
    -
    -

    Return the protocol/implementation version of the most recent response. This is a poorly designed method, but it returns information that is useful when used correctly. Before a response is made, this contains the string "unknown." This should ultimately hold the protocol version; it currently holds the implementation version.

    @see get_protocol()
    -
    Deprecated:
    - -

    Definition at line 185 of file Connect.h.

    - -
    -
    - -

    ◆ read_data()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Connect::read_data (DataDDSdata,
    Responsers 
    )
    -
    -virtual
    -
    - -

    Read data which is preceded by MIME headers. This method works for both data dds and data ddx responses.

    -
    Note
    If you need the DataDDS to hold specializations of the type classes, be sure to include the factory class which will instantiate those specializations in the DataDDS. Either pass a pointer to the factory to DataDDS constructor or use the DDS::set_factory() method after the object is built.
    -
    See also
    read_data_no_mime()
    -
    Parameters
    - - - -
    dataResult.
    rsRead from this Response object.
    -
    -
    - -

    Definition at line 989 of file Connect.cc.

    - -
    -
    - -

    ◆ read_data_no_mime()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Connect::read_data_no_mime (DataDDSdata,
    Responsers 
    )
    -
    -virtual
    -
    - -

    Read data from a file which does not have response MIME headers. This method is a companion to read_data(). While read_data() assumes that the response has MIME headers, this method does not. If you call this with a Response that does contain headers, it will throw an Error (and the message is likely to be inscrutable).

    -
    Note
    This method will use the 'type' information in the Response object to choose between processing the response as a data dds or data ddx. If there is no type information, it will attempt to figure it out.
    -
    Parameters
    - - - -
    dataResult.
    rsRead from this Response object.
    -
    -
    - -

    Definition at line 1062 of file Connect.cc.

    - -
    -
    - -

    ◆ request_das()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Connect::request_das (DASdas)
    -
    -virtual
    -
    - -

    Get the DAS from a server.

    -

    Reads the DAS corresponding to the dataset in the Connect object's URL. Although DAP does not support using CEs with DAS requests, if present in the Connect object's instance, they will be escaped and passed as the query string of the request.

    -
    Parameters
    - - -
    dasResult.
    -
    -
    - -

    Reimplemented in libdap::AISConnect.

    - -

    Definition at line 430 of file Connect.cc.

    - -
    -
    - -

    ◆ request_das_url()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Connect::request_das_url (DASdas)
    -
    -virtual
    -
    - -

    Get the DAS from a server.

    -

    Reads the DAS corresponding to the dataset in the Connect object's URL. Although DAP does not support using CEs with DAS requests, if present in the Connect object's instance, they will be escaped and passed as the query string of the request.

    -

    Different from request_das method in that this method uses the URL as given without attaching .das or projections or selections.

    -
    Parameters
    - - -
    dasResult.
    -
    -
    - -

    Definition at line 496 of file Connect.cc.

    - -
    -
    - -

    ◆ request_data()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Connect::request_data (DataDDSdata,
    string expr = "" 
    )
    -
    -virtual
    -
    - -

    Get the DAS from a server.

    -

    Reads the DataDDS object corresponding to the dataset in the Connect object's URL. If present in the Connect object's instance, a CE will be escaped, combined with expr and passed as the query string of the request. The result is a DataDDS which contains the data values bound to variables.

    -
    Note
    If you need the DataDDS to hold specializations of the type classes, be sure to include the factory class which will instantiate those specializations in the DataDDS. Either pass a pointer to the factory to DataDDS constructor or use the DDS::set_factory() method after the object is built.
    -
    Parameters
    - - - -
    dataResult.
    exprSend this constraint expression to the server.
    -
    -
    - -

    Definition at line 845 of file Connect.cc.

    - -
    -
    - -

    ◆ request_data_url()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Connect::request_data_url (DataDDSdata)
    -
    -virtual
    -
    - -

    Get the DAS from a server.

    -

    Reads the DataDDS object corresponding to the dataset in the Connect object's URL. If present in the Connect object's instance, a CE will be escaped, combined with expr and passed as the query string of the request. The result is a DataDDS which contains the data values bound to variables.

    -

    Different from request_data in that this method uses the syntax of the new OPeNDAP server commands using dispatch

    -
    Note
    If you need the DataDDS to hold specializations of the type classes, be sure to include the factory class which will instantiate those specializations in the DataDDS. Either pass a pointer to the factory to DataDDS constructor or use the DDS::set_factory() method after the object is built.
    -
    Parameters
    - - -
    dataResult.
    -
    -
    - -

    Definition at line 896 of file Connect.cc.

    - -
    -
    - -

    ◆ request_dds()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Connect::request_dds (DDSdds,
    string expr = "" 
    )
    -
    -virtual
    -
    - -

    Get the DDS from a server.

    -

    Reads the DDS corresponding to the dataset in the Connect object's URL. If present in the Connect object's instance, a CE will be escaped, combined with expr and passed as the query string of the request.

    -
    Note
    If you need the DDS to hold specializations of the type classes, be sure to include the factory class which will instantiate those specializations in the DDS. Either pass a pointer to the factory to DDS constructor or use the DDS::set_factory() method after the object is built.
    -
    Parameters
    - - - -
    ddsResult.
    exprSend this constraint expression to the server.
    -
    -
    - -

    Definition at line 562 of file Connect.cc.

    - -
    -
    - -

    ◆ request_dds_url()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Connect::request_dds_url (DDSdds)
    -
    -virtual
    -
    - -

    Get the DDS from a server.

    -

    Reads the DDS corresponding to the dataset in the Connect object's URL. If present in the Connect object's instance, a CE will be escaped, combined with expr and passed as the query string of the request.

    -

    Different from request_dds method above in that this method assumes URL is complete and does not add anything to the command, such as .dds or projections or selections.

    -
    Note
    If you need the DDS to hold specializations of the type classes, be sure to include the factory class which will instantiate those specializations in the DDS. Either pass a pointer to the factory to DDS constructor or use the DDS::set_factory() method after the object is built.
    -
    Parameters
    - - -
    ddsResult.
    -
    -
    - -

    Definition at line 642 of file Connect.cc.

    - -
    -
    - -

    ◆ request_ddx()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Connect::request_ddx (DDSdds,
    string expr = "" 
    )
    -
    -virtual
    -
    - -

    Get the DDX from a server.

    -

    Reads the DDX corresponding to the dataset in the Connect object's URL. If present in the Connect object's instance, a CE will be escaped, combined with expr and passed as the query string of the request.

    -
    Note
    A DDX is represented as XML on the wire but in memory libdap uses a DDS object with variables that hold their own attributes (the DDS itself holds the global attributes).
    -
    Parameters
    - - - -
    ddsResult.
    exprSend this constraint expression to the server.
    -
    -
    - -

    Definition at line 705 of file Connect.cc.

    - -
    -
    - -

    ◆ request_ddx_url()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Connect::request_ddx_url (DDSdds)
    -
    -virtual
    -
    - -

    The 'url' version of request_ddx.

    -
    See also
    Connect::request_ddx.
    - -

    Definition at line 773 of file Connect.cc.

    - -
    -
    - -

    ◆ request_protocol()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::Connect::request_protocol ()
    -
    -virtual
    -
    -

    Get protocol version information from the server. This is a new method which will ease the transition to DAP 4. Note that this method returns the version of the DAP protocol implemented by the server. The request_version() method returns the server's version number, not the DAP protocol version.

    -
    Note
    This method actually asks the server for the protocol version - use get_protocol() to get the protocol information from the most recent response (e.g., from the last DDX response returned by the server).
    -
    Returns
    The DAP protocol version string.
    - -

    Definition at line 398 of file Connect.cc.

    - -
    -
    - -

    ◆ request_version()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::Connect::request_version ()
    -
    -virtual
    -
    -

    Get version information from the server. This is a new method which will ease the transition to DAP 4.

    -
    Note
    Use request_protocol() to get the DAP protocol version.
    -
    Returns
    The DAP version string.
    -
    See also
    request_protocol()
    - -

    Definition at line 362 of file Connect.cc.

    - -
    -
    - -

    ◆ set_accept_deflate()

    - -
    -
    - - - - - - - - -
    void libdap::Connect::set_accept_deflate (bool deflate)
    -
    -

    Set the accept deflate property.

    Parameters
    - - -
    deflateTrue if the client can accept compressed responses, False otherwise.
    -
    -
    - -

    Definition at line 1168 of file Connect.cc.

    - -
    -
    - -

    ◆ set_cache_enabled()

    - -
    -
    - - - - - - - - -
    void libdap::Connect::set_cache_enabled (bool cache)
    -
    -

    Disable any further use of the client-side cache. In a future version of this software, this should be handled so that the www library is not initialized with the cache running by default.

    - -

    Definition at line 1188 of file Connect.cc.

    - -
    -
    - -

    ◆ set_credentials()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Connect::set_credentials (string u,
    string p 
    )
    -
    - -

    Set the credentials for responding to challenges while dereferencing URLs.

    -
    Parameters
    - - - -
    uThe username.
    pThe password.
    -
    -
    -
    See also
    extract_auth_info()
    - -

    Definition at line 1159 of file Connect.cc.

    - -
    -
    - -

    ◆ set_xdap_protocol()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Connect::set_xdap_protocol (int major,
    int minor 
    )
    -
    -

    Set the XDAP-Accept property/header. This is used to send to a server the (highest) DAP protocol version number that this client understands.

    -
    Parameters
    - - - -
    majorThe client dap protocol major version
    minorThe client dap protocol minor version
    -
    -
    - -

    Definition at line 1179 of file Connect.cc.

    - -
    -
    - -

    ◆ URL()

    - -
    -
    - - - - - -
    - - - - - - - - -
    string libdap::Connect::URL (bool ce = true)
    -
    -virtual
    -
    - -

    Get the object's URL.

    -

    Return the Connect object's URL in a string. The URL was set by the class constructor, and may not be reset. If you want to open another URL, you must create another Connect object. There is a Connections class created to handle the management of multiple Connect objects.

    -
    See also
    Connections
    -
    Returns
    A string containing the URL of the data to which the Connect object refers. If the object refers to local data, the function returns the null string.
    -
    Parameters
    - - -
    ceIf TRUE, the returned URL will include any constraint expression enclosed with the Connect object's URL (including the ?). If FALSE, any constraint expression will be removed from the URL. The default is TRUE.
    -
    -
    - -

    Definition at line 1127 of file Connect.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1Connect.js b/html/classlibdap_1_1Connect.js deleted file mode 100644 index 3541e14bd..000000000 --- a/html/classlibdap_1_1Connect.js +++ /dev/null @@ -1,35 +0,0 @@ -var classlibdap_1_1Connect = -[ - [ "Connect", "classlibdap_1_1Connect.html#a519d36213fc5f0fefc0c11a6b131beb8", null ], - [ "Connect", "classlibdap_1_1Connect.html#a5d78784ceacab07c922c2999c335807a", null ], - [ "Connect", "classlibdap_1_1Connect.html#a03b8c9f6773a25c3c837b9890099d5e8", null ], - [ "~Connect", "classlibdap_1_1Connect.html#acacffa987a2d9a36f355dd471970fdcf", null ], - [ "CE", "classlibdap_1_1Connect.html#a0e55cc99530cab779ae83984c2a22f51", null ], - [ "get_protocol", "classlibdap_1_1Connect.html#a4223a898b3da719509d173dd990c45f1", null ], - [ "get_version", "classlibdap_1_1Connect.html#a30fe6746add5a210d59b5dc9d678355f", null ], - [ "is_cache_enabled", "classlibdap_1_1Connect.html#a00fa7d5e2e658e8c882e07f48562ea62", null ], - [ "is_local", "classlibdap_1_1Connect.html#a3901ce9383c3df11d1a1c28d4a09bb54", null ], - [ "operator=", "classlibdap_1_1Connect.html#a2b8e5380df6d65484a329fa5332ab324", null ], - [ "read_data", "classlibdap_1_1Connect.html#ae50d98d353023b9786c9bd5b0833a7de", null ], - [ "read_data", "classlibdap_1_1Connect.html#a8c9abb99d35684b48fa659f398d7cff8", null ], - [ "read_data_no_mime", "classlibdap_1_1Connect.html#a486b095a58614dfc2be0321035784306", null ], - [ "read_data_no_mime", "classlibdap_1_1Connect.html#aed1c2c967013975076c03a783f3fd421", null ], - [ "request_das", "classlibdap_1_1Connect.html#a816ef3bb8e729712ffeb6523f2cc4f0e", null ], - [ "request_das_url", "classlibdap_1_1Connect.html#abcf814710de1e252e74a4e1b72d3c6b3", null ], - [ "request_data", "classlibdap_1_1Connect.html#a814e98ac5e99927ccc79bb0feb32d241", null ], - [ "request_data_ddx", "classlibdap_1_1Connect.html#ab3bc39b8320ae5a79af7bf168f930b07", null ], - [ "request_data_ddx_url", "classlibdap_1_1Connect.html#aac752fcacdab76339318c1c333ea0953", null ], - [ "request_data_url", "classlibdap_1_1Connect.html#ac8582099411b8d74b03e761129df5b5c", null ], - [ "request_dds", "classlibdap_1_1Connect.html#aad5ef370110577e9ca2a0161928f9efa", null ], - [ "request_dds_url", "classlibdap_1_1Connect.html#a08795a9e160db409423fcd9058ba975d", null ], - [ "request_ddx", "classlibdap_1_1Connect.html#a4395cc18cf5ec1a5167795a5a5491958", null ], - [ "request_ddx_url", "classlibdap_1_1Connect.html#a9a3e1fe01455b60a90a1974a7e871bb4", null ], - [ "request_protocol", "classlibdap_1_1Connect.html#aaa1ab562899da9a4630de01f943d1aa9", null ], - [ "request_version", "classlibdap_1_1Connect.html#ac7a5896a09882004b75e581999940526", null ], - [ "set_accept_deflate", "classlibdap_1_1Connect.html#a186f76bfea3b61dc3587bcff5760ed8b", null ], - [ "set_cache_enabled", "classlibdap_1_1Connect.html#a25c97c4ad0239a9dd10812c880c40efe", null ], - [ "set_credentials", "classlibdap_1_1Connect.html#a847af75e149f123a51a560119dfc06aa", null ], - [ "set_xdap_accept", "classlibdap_1_1Connect.html#ab9c4a1243218c98d46fbaace37a821fc", null ], - [ "set_xdap_protocol", "classlibdap_1_1Connect.html#a4af759a2313d9ecbc1db1c811f549379", null ], - [ "URL", "classlibdap_1_1Connect.html#a523bf24520185e3d71f36ac0203b98e6", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1Connect__inherit__graph.map b/html/classlibdap_1_1Connect__inherit__graph.map deleted file mode 100644 index 5eab22ea0..000000000 --- a/html/classlibdap_1_1Connect__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/classlibdap_1_1Connect__inherit__graph.md5 b/html/classlibdap_1_1Connect__inherit__graph.md5 deleted file mode 100644 index 45c0e0edd..000000000 --- a/html/classlibdap_1_1Connect__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -ab92baa743cbb29f9fdd800d644edd3e \ No newline at end of file diff --git a/html/classlibdap_1_1Connect__inherit__graph.png b/html/classlibdap_1_1Connect__inherit__graph.png deleted file mode 100644 index 0726225941cdfb271c706d729722b85e75e51c4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28838 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 - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::ConstraintEvaluator Member List
    -
    -
    - -

    This is the complete list of members for libdap::ConstraintEvaluator, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    append_clause(int op, rvalue *arg1, rvalue_list *arg2)libdap::ConstraintEvaluator
    append_clause(bool_func func, rvalue_list *args)libdap::ConstraintEvaluator
    append_clause(btp_func func, rvalue_list *args)libdap::ConstraintEvaluator
    append_constant(BaseType *btp)libdap::ConstraintEvaluator
    boolean_expression()libdap::ConstraintEvaluator
    clause_begin()libdap::ConstraintEvaluator
    Clause_citer typedef (defined in libdap::ConstraintEvaluator)libdap::ConstraintEvaluator
    clause_end()libdap::ConstraintEvaluator
    Clause_iter typedef (defined in libdap::ConstraintEvaluator)libdap::ConstraintEvaluator
    clause_value(Clause_iter &i, DDS &dds)libdap::ConstraintEvaluator
    Constants_citer typedef (defined in libdap::ConstraintEvaluator)libdap::ConstraintEvaluator
    Constants_iter typedef (defined in libdap::ConstraintEvaluator)libdap::ConstraintEvaluator
    ConstraintEvaluator() (defined in libdap::ConstraintEvaluator)libdap::ConstraintEvaluator
    eval_function(DDS &dds, const std::string &dataset)libdap::ConstraintEvaluator
    eval_function_clauses(DDS &dds)libdap::ConstraintEvaluator
    eval_function_clauses(DataDDS &dds)libdap::ConstraintEvaluator
    eval_selection(DDS &dds, const std::string &dataset)libdap::ConstraintEvaluator
    find_function(const std::string &name, bool_func *f) constlibdap::ConstraintEvaluator
    find_function(const std::string &name, btp_func *f) constlibdap::ConstraintEvaluator
    find_function(const std::string &name, proj_func *f) constlibdap::ConstraintEvaluator
    func_name_is (defined in libdap::ConstraintEvaluator)libdap::ConstraintEvaluatorfriend
    function_clauses()libdap::ConstraintEvaluator
    functional_expression()libdap::ConstraintEvaluator
    parse_constraint(const std::string &constraint, DDS &dds)libdap::ConstraintEvaluator
    ~ConstraintEvaluator() (defined in libdap::ConstraintEvaluator)libdap::ConstraintEvaluatorvirtual
    -
    - - - - diff --git a/html/classlibdap_1_1ConstraintEvaluator.html b/html/classlibdap_1_1ConstraintEvaluator.html deleted file mode 100644 index a5bea2a7d..000000000 --- a/html/classlibdap_1_1ConstraintEvaluator.html +++ /dev/null @@ -1,725 +0,0 @@ - - - - - - - -libdap: libdap::ConstraintEvaluator Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::ConstraintEvaluator Class Reference
    -
    -
    - -

    Evaluate a constraint expression. - More...

    - -

    #include <ConstraintEvaluator.h>

    - - - - - - - - - - -

    -Public Types

    -typedef std::vector< Clause * >::const_iterator Clause_citer
     
    -typedef std::vector< Clause * >::iterator Clause_iter
     
    -typedef std::vector< BaseType * >::const_iterator Constants_citer
     
    -typedef std::vector< BaseType * >::iterator Constants_iter
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    void append_clause (int op, rvalue *arg1, rvalue_list *arg2)
     Add a clause to a constraint expression. More...
     
    void append_clause (bool_func func, rvalue_list *args)
     Add a clause to a constraint expression. More...
     
    void append_clause (btp_func func, rvalue_list *args)
     Add a clause to a constraint expression. More...
     
    void append_constant (BaseType *btp)
     
    bool boolean_expression ()
     Does the current constraint expression return a boolean value? More...
     
    Clause_iter clause_begin ()
     
    Clause_iter clause_end ()
     
    bool clause_value (Clause_iter &i, DDS &dds)
     
    BaseTypeeval_function (DDS &dds, const std::string &dataset)
     Evaluate a function-valued constraint expression. More...
     
    DDSeval_function_clauses (DDS &dds)
     Evaluate a function-valued constraint expression that contains several function calls. More...
     
    DataDDSeval_function_clauses (DataDDS &dds)
     Evaluate a function-valued constraint expression that contains several function calls. Takes and returns a DataDDS. More...
     
    bool eval_selection (DDS &dds, const std::string &dataset)
     Evaluate a boolean-valued constraint expression. This is main method for the evaluator and is called by the BaseType::serialize() methods. More...
     
    bool find_function (const std::string &name, bool_func *f) const
     Find a Boolean function with a given name in the function list. More...
     
    bool find_function (const std::string &name, btp_func *f) const
     Find a BaseType function with a given name in the function list. More...
     
    bool find_function (const std::string &name, proj_func *f) const
     Find a projection function with a given name in the function list. More...
     
    bool function_clauses ()
     Does the current constraint expression contain function clauses. More...
     
    bool functional_expression ()
     Does the current constraint expression return a BaseType pointer? This method does not evaluate the clause, it provides information to the evaluator regarding how to evaluate the clause. More...
     
    void parse_constraint (const std::string &constraint, DDS &dds)
     Parse the constraint expression given the current DDS. More...
     
    - - - -

    -Friends

    -class func_name_is
     
    -

    Detailed Description

    -

    Evaluate a constraint expression.

    - -

    Definition at line 42 of file ConstraintEvaluator.h.

    -

    Member Function Documentation

    - -

    ◆ append_clause() [1/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::ConstraintEvaluator::append_clause (int op,
    rvaluearg1,
    rvalue_list * arg2 
    )
    -
    - -

    Add a clause to a constraint expression.

    -

    This function adds an operator clause to the constraint expression.

    -
    Parameters
    - - - - -
    opAn integer indicating the operator in use. These values are generated by bison.
    arg1A pointer to the argument on the left side of the operator.
    arg2A pointer to a list of the arguments on the right side of the operator.
    -
    -
    - -

    Definition at line 113 of file ConstraintEvaluator.cc.

    - -
    -
    - -

    ◆ append_clause() [2/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void libdap::ConstraintEvaluator::append_clause (bool_func func,
    rvalue_list * args 
    )
    -
    - -

    Add a clause to a constraint expression.

    -

    This function adds a boolean function clause to the constraint expression.

    -
    Parameters
    - - - -
    funcA pointer to a boolean function from the list of supported functions.
    argsA list of arguments to that function.
    -
    -
    - -

    Definition at line 129 of file ConstraintEvaluator.cc.

    - -
    -
    - -

    ◆ append_clause() [3/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void libdap::ConstraintEvaluator::append_clause (btp_func func,
    rvalue_list * args 
    )
    -
    - -

    Add a clause to a constraint expression.

    -

    This function adds a real-valued (BaseType) function clause to the constraint expression.

    -
    Parameters
    - - - -
    funcA pointer to a BaseType function from the list of supported functions.
    argsA list of arguments to that function.
    -
    -
    - -

    Definition at line 145 of file ConstraintEvaluator.cc.

    - -
    -
    - -

    ◆ append_constant()

    - -
    -
    - - - - - - - - -
    void libdap::ConstraintEvaluator::append_constant (BaseTypebtp)
    -
    -

    The Constraint Evaluator maintains a list of BaseType pointers for all the constants that the constraint expression parser generates. These objects are deleted by the Constraint Evaluator destructor. Note that there are no list accessors; these constants are never accessed from the list. The list is simply a convenient way to make sure the constants are disposed of properly.

    - -

    Definition at line 159 of file ConstraintEvaluator.cc.

    - -
    -
    - -

    ◆ boolean_expression()

    - -
    -
    - - - - - - - -
    bool libdap::ConstraintEvaluator::boolean_expression ()
    -
    - -

    Does the current constraint expression return a boolean value?

    - -

    Definition at line 309 of file ConstraintEvaluator.cc.

    - -
    -
    - -

    ◆ clause_begin()

    - -
    -
    - - - - - - - -
    ConstraintEvaluator::Clause_iter libdap::ConstraintEvaluator::clause_begin ()
    -
    -

    Returns the first clause in a parsed constraint expression.

    - -

    Definition at line 79 of file ConstraintEvaluator.cc.

    - -
    -
    - -

    ◆ clause_end()

    - -
    -
    - - - - - - - -
    ConstraintEvaluator::Clause_iter libdap::ConstraintEvaluator::clause_end ()
    -
    -

    Returns a reference to the end of the list of clauses in a parsed constraint expression. It does not reference the last clause

    - -

    Definition at line 86 of file ConstraintEvaluator.cc.

    - -
    -
    - -

    ◆ clause_value()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::ConstraintEvaluator::clause_value (Clause_iter & iter,
    DDSdds 
    )
    -
    -

    Returns the value of the indicated clause of a constraint expression.

    - -

    Definition at line 93 of file ConstraintEvaluator.cc.

    - -
    -
    - -

    ◆ eval_function()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::ConstraintEvaluator::eval_function (DDSdds,
    const std::string & dataset 
    )
    -
    - -

    Evaluate a function-valued constraint expression.

    -
    Deprecated:
    - -

    Definition at line 204 of file ConstraintEvaluator.cc.

    - -
    -
    - -

    ◆ eval_function_clauses() [1/2]

    - -
    -
    - - - - - - - - -
    DDS * libdap::ConstraintEvaluator::eval_function_clauses (DDSdds)
    -
    - -

    Evaluate a function-valued constraint expression that contains several function calls.

    -

    This method can be called for any function-valued constraint expression. Unlike eval_function(), it will package the return value in a new DDS object. The server should free this object once it has been serialized and sent.

    -
    Note
    While there is another type of function that can appear in a CE (a 'projection function') those are evaluated by the ce parser - they are used to insert new variables into the DDS as a side effect of CE evaluation. That kind of function can never appear here; these are all functions that return BaseType pointers.
    -
    -Added for libdap 3.11
    - -

    Definition at line 256 of file ConstraintEvaluator.cc.

    - -
    -
    - -

    ◆ eval_function_clauses() [2/2]

    - -
    -
    - - - - - - - - -
    DataDDS * libdap::ConstraintEvaluator::eval_function_clauses (DataDDSdds)
    -
    - -

    Evaluate a function-valued constraint expression that contains several function calls. Takes and returns a DataDDS.

    -
    See also
    ConstraintEvaluator::eval_function_clauses(DataDDS &dds)
    -
    Note
    Added for libdap 3.11
    - -

    Definition at line 285 of file ConstraintEvaluator.cc.

    - -
    -
    - -

    ◆ eval_selection()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::ConstraintEvaluator::eval_selection (DDSdds,
    const std::string & dataset 
    )
    -
    - -

    Evaluate a boolean-valued constraint expression. This is main method for the evaluator and is called by the BaseType::serialize() methods.

    -
    Parameters
    - - - -
    ddsUse these variables when evaluating the expressions.
    datasetThis string is passed to the read() methods.
    -
    -
    -
    Returns
    True if the expression is true, false otherwise.
    - -

    Definition at line 329 of file ConstraintEvaluator.cc.

    - -
    -
    - -

    ◆ find_function() [1/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::ConstraintEvaluator::find_function (const std::string & name,
    bool_func * f 
    ) const
    -
    - -

    Find a Boolean function with a given name in the function list.

    - -

    Definition at line 165 of file ConstraintEvaluator.cc.

    - -
    -
    - -

    ◆ find_function() [2/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::ConstraintEvaluator::find_function (const std::string & name,
    btp_func * f 
    ) const
    -
    - -

    Find a BaseType function with a given name in the function list.

    - -

    Definition at line 171 of file ConstraintEvaluator.cc.

    - -
    -
    - -

    ◆ find_function() [3/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::ConstraintEvaluator::find_function (const std::string & name,
    proj_func * f 
    ) const
    -
    - -

    Find a projection function with a given name in the function list.

    - -

    Definition at line 177 of file ConstraintEvaluator.cc.

    - -
    -
    - -

    ◆ function_clauses()

    - -
    -
    - - - - - - - -
    bool libdap::ConstraintEvaluator::function_clauses ()
    -
    - -

    Does the current constraint expression contain function clauses.

    -

    This method does not evaluate the clauses, it provides information to the evaluator regarding how to evaluate the clause.

    -
    Note
    Added for libdap 3.11
    -
    Returns
    True if the current constraint contains function clauses, otherwise returns False
    - -

    Definition at line 226 of file ConstraintEvaluator.cc.

    - -
    -
    - -

    ◆ functional_expression()

    - -
    -
    - - - - - - - -
    bool libdap::ConstraintEvaluator::functional_expression ()
    -
    - -

    Does the current constraint expression return a BaseType pointer? This method does not evaluate the clause, it provides information to the evaluator regarding how to evaluate the clause.

    -
    Returns
    True if the clause is a function that returns a BaseType* and false otherwise
    -
    Deprecated:
    - -

    Definition at line 191 of file ConstraintEvaluator.cc.

    - -
    -
    - -

    ◆ parse_constraint()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void libdap::ConstraintEvaluator::parse_constraint (const std::string & constraint,
    DDSdds 
    )
    -
    - -

    Parse the constraint expression given the current DDS.

    -

    Evaluate the constraint expression; return the value of the expression. As a side effect, mark the DDS so that BaseType's mfuncs can be used to correctly read the variable's value and send it to the client.

    -
    Parameters
    - - - -
    constraintA string containing the constraint expression.
    ddsThe DDS that provides the environment within which the constraint is evaluated.
    -
    -
    -
    Exceptions
    - - -
    ThrowsError if the constraint does not parse.
    -
    -
    - -

    Definition at line 363 of file ConstraintEvaluator.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1ConstraintEvaluator.js b/html/classlibdap_1_1ConstraintEvaluator.js deleted file mode 100644 index a3538e487..000000000 --- a/html/classlibdap_1_1ConstraintEvaluator.js +++ /dev/null @@ -1,28 +0,0 @@ -var classlibdap_1_1ConstraintEvaluator = -[ - [ "Clause_citer", "classlibdap_1_1ConstraintEvaluator.html#abffbe592e2282493954bdfe3ceac7445", null ], - [ "Clause_iter", "classlibdap_1_1ConstraintEvaluator.html#a369a03eac7969bb6955cfc90ababb8aa", null ], - [ "Constants_citer", "classlibdap_1_1ConstraintEvaluator.html#a9702bcb82a4a27c93665490d651cf816", null ], - [ "Constants_iter", "classlibdap_1_1ConstraintEvaluator.html#a1c38b776ba27bc78a1e484a45bbe8747", null ], - [ "ConstraintEvaluator", "classlibdap_1_1ConstraintEvaluator.html#a61250e6c1cec9b2411a529c7fb4efd94", null ], - [ "~ConstraintEvaluator", "classlibdap_1_1ConstraintEvaluator.html#ae46662e1cbe013a6f6ad65d2e0c24186", null ], - [ "append_clause", "classlibdap_1_1ConstraintEvaluator.html#a796b573bb1ec8bbce8c22c4caf58af2e", null ], - [ "append_clause", "classlibdap_1_1ConstraintEvaluator.html#a2439b21977caf80d57c5faa0342dfcb4", null ], - [ "append_clause", "classlibdap_1_1ConstraintEvaluator.html#af4769219d99fe7ec3f4f4d7b1cd560dc", null ], - [ "append_constant", "classlibdap_1_1ConstraintEvaluator.html#abf7511f38a4c5f8fc0cde0eca91ef338", null ], - [ "boolean_expression", "classlibdap_1_1ConstraintEvaluator.html#a155da913af4458d96fa60ecd0ecbe377", null ], - [ "clause_begin", "classlibdap_1_1ConstraintEvaluator.html#a81135cc86f8bef397b59577dfa224f62", null ], - [ "clause_end", "classlibdap_1_1ConstraintEvaluator.html#ad193b3ca4cef59d2b46c04ab08f4675f", null ], - [ "clause_value", "classlibdap_1_1ConstraintEvaluator.html#a5c53cfac881da05b7ed6eb6404b0c4f9", null ], - [ "eval_function", "classlibdap_1_1ConstraintEvaluator.html#a989c6db94b0a4079ea4ee333f4b699bf", null ], - [ "eval_function_clauses", "classlibdap_1_1ConstraintEvaluator.html#ab0dba1657e9aadd85b3ce713c6a4036a", null ], - [ "eval_function_clauses", "classlibdap_1_1ConstraintEvaluator.html#a0e36171a34caa85d21e18adbd83a831b", null ], - [ "eval_selection", "classlibdap_1_1ConstraintEvaluator.html#a25acac693348360167a2c352df746acb", null ], - [ "find_function", "classlibdap_1_1ConstraintEvaluator.html#a27ed41e76c8147cde9456dd516053ca7", null ], - [ "find_function", "classlibdap_1_1ConstraintEvaluator.html#a0845a2c4494e9ce1ecbb636da434b01f", null ], - [ "find_function", "classlibdap_1_1ConstraintEvaluator.html#adf406811a741bd0461b192d493b96710", null ], - [ "function_clauses", "classlibdap_1_1ConstraintEvaluator.html#a9985c6a30247ced32a4b6e764deebf45", null ], - [ "functional_expression", "classlibdap_1_1ConstraintEvaluator.html#add46ce1d9ef36fa26a2913d8d7c51096", null ], - [ "parse_constraint", "classlibdap_1_1ConstraintEvaluator.html#a6290d897c82ddba106741ee8720f7ea0", null ], - [ "func_name_is", "classlibdap_1_1ConstraintEvaluator.html#abdcdfafb252f26c4af32af89b0f699dc", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1Constructor-members.html b/html/classlibdap_1_1Constructor-members.html deleted file mode 100644 index 37da93260..000000000 --- a/html/classlibdap_1_1Constructor-members.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::Constructor Member List
    -
    -
    - -

    This is the complete list of members for libdap::Constructor, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    add_var(BaseType *bt, Part part=nil)libdap::Constructorvirtual
    add_var_nocopy(BaseType *bt, Part part=nil)libdap::Constructorvirtual
    attributes()libdap::BaseTypevirtual
    BaseType(const string &n, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const string &n, const string &d, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const BaseType &copy_from)libdap::BaseType
    btp_stack typedef (defined in libdap::BaseType)libdap::BaseType
    buf2val(void **)libdap::Constructorinlinevirtual
    check_semantics(string &msg, bool all=false)libdap::Constructorvirtual
    clear_local_data()libdap::BaseTypeinlinevirtual
    compute_checksum(Crc32 &checksum)libdap::Constructorvirtual
    Constructor(const string &name, const Type &type, bool is_dap4=false) (defined in libdap::Constructor)libdap::Constructorprotected
    Constructor(const string &name, const string &d, const Type &type, bool is_dap4=false)libdap::Constructorprotected
    Constructor(const Constructor &copy_from) (defined in libdap::Constructor)libdap::Constructorprotected
    d4_ops(BaseType *b, int op)libdap::BaseTypevirtual
    d_in_selection (defined in libdap::BaseType)libdap::BaseTypeprotected
    d_is_synthesized (defined in libdap::BaseType)libdap::BaseTypeprotected
    d_vars (defined in libdap::Constructor)libdap::Constructorprotected
    dataset() constlibdap::BaseTypevirtual
    del_var(const string &name)libdap::Constructorvirtual
    del_var(Vars_iter i) (defined in libdap::Constructor)libdap::Constructorvirtual
    deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)libdap::Constructorvirtual
    deserialize(D4StreamUnMarshaller &um, DMR &dmr)libdap::Constructorvirtual
    dump(ostream &strm) constlibdap::Constructorvirtual
    element_count(bool leaves=false)libdap::Constructorvirtual
    FQN() constlibdap::Constructorvirtual
    get_attr_table()libdap::BaseTypevirtual
    get_parent() constlibdap::BaseTypevirtual
    get_var_index(int i)libdap::Constructor
    get_vars_iter(int i)libdap::Constructor
    intern_data(ConstraintEvaluator &eval, DDS &dds)libdap::Constructorvirtual
    intern_data()libdap::Constructorvirtual
    is_constructor_type() constlibdap::BaseTypevirtual
    is_dap4() const (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    is_in_selection()libdap::BaseTypevirtual
    is_linear()libdap::Constructorvirtual
    is_simple_type() constlibdap::BaseTypevirtual
    is_vector_type() constlibdap::BaseTypevirtual
    length() constlibdap::BaseTypeinlinevirtual
    m_duplicate(const Constructor &s) (defined in libdap::Constructor)libdap::Constructorprotected
    libdap::BaseType::m_duplicate(const BaseType &bt)libdap::BaseTypeprotected
    m_exact_match(const string &name, btp_stack *s=0) (defined in libdap::Constructor)libdap::Constructorprotected
    m_leaf_match(const string &name, btp_stack *s=0) (defined in libdap::Constructor)libdap::Constructorprotected
    make_dropped_vars_attr_table(vector< BaseType *> *dropped_vars) (defined in libdap::Constructor)libdap::Constructorstatic
    name() constlibdap::BaseTypevirtual
    operator=(const Constructor &rhs) (defined in libdap::Constructor)libdap::Constructor
    operator=(const BaseType &rhs) (defined in libdap::BaseType)libdap::BaseType
    ops(BaseType *b, int op)libdap::BaseTypevirtual
    print_dap4(XMLWriter &xml, bool constrained=false)libdap::Constructorvirtual
    print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::Constructorvirtual
    print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::Constructorvirtual
    print_val(FILE *out, string space="", bool print_decl_p=true)libdap::Constructorvirtual
    print_val(ostream &out, string space="", bool print_decl_p=true)libdap::Constructorvirtual
    print_xml(ostream &out, string space=" ", bool constrained=false)libdap::Constructorvirtual
    print_xml(FILE *out, string space=" ", bool constrained=false)libdap::Constructorvirtual
    print_xml_writer(XMLWriter &xml, bool constrained=false)libdap::Constructorvirtual
    ptr_duplicate()=0libdap::BaseTypepure virtual
    read()libdap::Constructorvirtual
    read_p()libdap::BaseTypevirtual
    send_p()libdap::BaseTypevirtual
    serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)libdap::Constructorvirtual
    serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)libdap::Constructorvirtual
    set_attr_table(const AttrTable &at)libdap::BaseTypevirtual
    set_attributes(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_attributes_nocopy(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_in_selection(bool state)libdap::Constructorvirtual
    set_is_dap4(const bool v) (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    set_length(int)libdap::BaseTypeinlinevirtual
    set_name(const string &n)libdap::BaseTypevirtual
    set_parent(BaseType *parent)libdap::BaseTypevirtual
    set_read_p(bool state)libdap::Constructorvirtual
    set_send_p(bool state)libdap::Constructorvirtual
    set_synthesized_p(bool state)libdap::BaseTypevirtual
    set_type(const Type &t)libdap::BaseTypevirtual
    synthesized_p()libdap::BaseTypevirtual
    toString()libdap::BaseTypevirtual
    transfer_attributes(AttrTable *at)libdap::Constructorvirtual
    transform_to_dap2(AttrTable *parent_attr_table)libdap::BaseTypevirtual
    transform_to_dap4(D4Group *root, Constructor *dest)libdap::Constructorvirtual
    type() constlibdap::BaseTypevirtual
    type_name() constlibdap::BaseTypevirtual
    val2buf(void *, bool)libdap::Constructorinlinevirtual
    var(const string &name, bool exact_match=true, btp_stack *s=0)libdap::Constructorvirtual
    var(const string &n, btp_stack &s)libdap::Constructorvirtual
    var_begin()libdap::Constructor
    var_end()libdap::Constructor
    var_rbegin()libdap::Constructor
    var_rend()libdap::Constructor
    Vars_citer typedef (defined in libdap::Constructor)libdap::Constructor
    Vars_iter typedef (defined in libdap::Constructor)libdap::Constructor
    Vars_riter typedef (defined in libdap::Constructor)libdap::Constructor
    width(bool constrained=false) constlibdap::Constructorvirtual
    ~BaseType() (defined in libdap::BaseType)libdap::BaseTypevirtual
    ~Constructor() (defined in libdap::Constructor)libdap::Constructorvirtual
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1Constructor.html b/html/classlibdap_1_1Constructor.html deleted file mode 100644 index 4da31cd88..000000000 --- a/html/classlibdap_1_1Constructor.html +++ /dev/null @@ -1,3208 +0,0 @@ - - - - - - - -libdap: libdap::Constructor Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    - -

    #include <Constructor.h>

    -
    -Inheritance diagram for libdap::Constructor:
    -
    -
    Inheritance graph
    - - - - - - - - - -
    - - - - - - - - - - -

    -Public Types

    -typedef stack< BaseType * > btp_stack
     
    -typedef std::vector< BaseType * >::const_iterator Vars_citer
     
    -typedef std::vector< BaseType * >::iterator Vars_iter
     
    -typedef std::vector< BaseType * >::reverse_iterator Vars_riter
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual void add_var (BaseType *bt, Part part=nil)
     
    virtual void add_var_nocopy (BaseType *bt, Part part=nil)
     
    virtual unsigned int buf2val (void **)
     Reads the class data. More...
     
    virtual bool check_semantics (string &msg, bool all=false)
     Compare an object's current state with the semantics of its type. More...
     
    virtual void clear_local_data ()
     
    virtual void compute_checksum (Crc32 &checksum)
     include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum. More...
     
    virtual bool d4_ops (BaseType *b, int op)
     Evaluator a relop for DAP4. More...
     
    virtual string dataset () const
     Returns the name of the dataset used to create this instance. More...
     
    virtual void del_var (const string &name)
     
    -virtual void del_var (Vars_iter i)
     
    virtual bool deserialize (UnMarshaller &um, DDS *dds, bool reuse=false)
     Receive data from the net. More...
     
    virtual void deserialize (D4StreamUnMarshaller &um, DMR &dmr)
     
    virtual void dump (ostream &strm) const
     dumps information about this object More...
     
    virtual int element_count (bool leaves=false)
     Count the members of constructor types. More...
     
    virtual std::string FQN () const
     
    virtual AttrTableget_attr_table ()
     
    virtual BaseTypeget_parent () const
     
    BaseTypeget_var_index (int i)
     
    Vars_iter get_vars_iter (int i)
     
    virtual void intern_data (ConstraintEvaluator &eval, DDS &dds)
     
    virtual void intern_data ()
     Read data into this variable. More...
     
    virtual bool is_constructor_type () const
     Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable. More...
     
    -virtual bool is_dap4 () const
     
    virtual bool is_in_selection ()
     Is this variable part of the current selection? More...
     
    virtual bool is_linear ()
     Check to see whether this variable can be printed simply. More...
     
    virtual bool is_simple_type () const
     Returns true if the instance is a numeric, string or URL type variable. More...
     
    virtual bool is_vector_type () const
     Returns true if the instance is a vector (i.e., array) type variable. More...
     
    virtual int length () const
     How many elements are in this variable. More...
     
    virtual string name () const
     Returns the name of the class instance. More...
     
    -Constructoroperator= (const Constructor &rhs)
     
    virtual bool ops (BaseType *b, int op)
     Evaluate relational operators. More...
     
    void print_dap4 (XMLWriter &xml, bool constrained=false)
     
    virtual void print_decl (ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_decl (FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_val (FILE *out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_val (ostream &out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_xml (ostream &out, string space=" ", bool constrained=false)
     
    virtual void print_xml (FILE *out, string space=" ", bool constrained=false)
     
    virtual void print_xml_writer (XMLWriter &xml, bool constrained=false)
     
    virtual BaseTypeptr_duplicate ()=0
     
    virtual bool read ()
     simple implementation of read that iterates through vars and calls read on them More...
     
    virtual bool read_p ()
     Has this variable been read? More...
     
    virtual bool send_p ()
     Should this variable be sent? More...
     
    virtual bool serialize (ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
     Move data to the net, then remove them from the object. More...
     
    virtual void serialize (D4StreamMarshaller &m, DMR &dmr, bool filter=false)
     Serialize a Constructor. More...
     
    virtual void set_attr_table (const AttrTable &at)
     
    virtual void set_in_selection (bool state)
     Set the in_selection property. More...
     
    -virtual void set_is_dap4 (const bool v)
     
    virtual void set_length (int)
     Set the number of elements for this variable. More...
     
    virtual void set_name (const string &n)
     Sets the name of the class instance. More...
     
    virtual void set_parent (BaseType *parent)
     
    virtual void set_read_p (bool state)
     Sets the value of the read_p property. More...
     
    virtual void set_send_p (bool state)
     
    virtual void set_synthesized_p (bool state)
     
    virtual void set_type (const Type &t)
     Sets the type of the class instance. More...
     
    virtual bool synthesized_p ()
     
    virtual string toString ()
     
    virtual void transfer_attributes (AttrTable *at)
     
    virtual std::vector< BaseType * > * transform_to_dap2 (AttrTable *parent_attr_table)
     DAP4 to DAP2 transform. More...
     
    virtual void transform_to_dap4 (D4Group *root, Constructor *dest)
     DAP2 to DAP4 transform. More...
     
    virtual Type type () const
     Returns the type of the class instance. More...
     
    virtual string type_name () const
     Returns the type of the class instance as a string. More...
     
    virtual unsigned int val2buf (void *, bool)
     Loads class data. More...
     
    virtual BaseTypevar (const string &name, bool exact_match=true, btp_stack *s=0)
     btp_stack no longer needed; use back pointers (BaseType::get_parent()) More...
     
    virtual BaseTypevar (const string &n, btp_stack &s)
     
    Vars_iter var_begin ()
     
    Vars_iter var_end ()
     
    Vars_riter var_rbegin ()
     
    Vars_riter var_rend ()
     
    virtual unsigned int width (bool constrained=false) const
     
    virtual D4Attributesattributes ()
     
    -virtual void set_attributes (D4Attributes *)
     
    -virtual void set_attributes_nocopy (D4Attributes *)
     
    - - - -

    -Static Public Member Functions

    -static AttrTablemake_dropped_vars_attr_table (vector< BaseType *> *dropped_vars)
     
    - - - - - - - - - - - - - - - - -

    -Protected Member Functions

    Constructor (const string &name, const Type &type, bool is_dap4=false)
     
     Constructor (const string &name, const string &d, const Type &type, bool is_dap4=false)
     
    Constructor (const Constructor &copy_from)
     
    -void m_duplicate (const Constructor &s)
     
    void m_duplicate (const BaseType &bt)
     Perform a deep copy. More...
     
    -BaseTypem_exact_match (const string &name, btp_stack *s=0)
     
    -BaseTypem_leaf_match (const string &name, btp_stack *s=0)
     
    - - - - - - - -

    -Protected Attributes

    -bool d_in_selection
     
    -bool d_is_synthesized
     
    -std::vector< BaseType * > d_vars
     
    -

    Detailed Description

    -

    Common methods for all constructor types.

    - -

    Definition at line 43 of file Constructor.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ Constructor()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    libdap::Constructor::Constructor (const string & name,
    const string & dataset,
    const Typetype,
    bool is_dap4 = false 
    )
    -
    -protected
    -
    -

    Server-side constructor that takes the name of the variable to be created, the dataset name from which this variable is being created, and the type of data being stored in the Constructor. This is a protected constructor, available only to derived classes of Constructor

    -
    Parameters
    - - - - -
    namestring containing the name of the variable to be created
    datasetstring containing the name of the dataset from which this variable is being created
    typetype of data being stored
    -
    -
    - -

    Definition at line 106 of file Constructor.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ add_var()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::add_var (BaseTypebt,
    Part part = nil 
    )
    -
    -virtual
    -
    -

    Adds an element to a Constructor.

    -
    Parameters
    - - - -
    btA pointer to the variable to add to this Constructor.
    partNot used by this class, defaults to nil
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 407 of file Constructor.cc.

    - -
    -
    - -

    ◆ add_var_nocopy()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::add_var_nocopy (BaseTypebt,
    Part part = nil 
    )
    -
    -virtual
    -
    -

    Adds an element to a Constructor.

    -
    Parameters
    - - - -
    btA pointer to thee variable to add to this Constructor.
    partNot used by this class, defaults to nil
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 432 of file Constructor.cc.

    - -
    -
    - -

    ◆ attributes()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4Attributes * libdap::BaseType::attributes ()
    -
    -virtualinherited
    -
    -

    DAP4 Attribute methods

    - -

    Definition at line 599 of file BaseType.cc.

    - -
    -
    - -

    ◆ buf2val()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual unsigned int libdap::Constructor::buf2val (void ** val)
    -
    -inlinevirtual
    -
    - -

    Reads the class data.

    -

    Reads the class data into the memory referenced by val. The caller should either allocate enough storage to val to hold the class data or set *val to null. If *val is NULL, memory will be allocated by this function with new(). If the memory is allocated this way, the caller is responsible for deallocating that memory. Array and values for simple types are stored as C would store an array.

    -
    Deprecated:
    Use value() in the leaf classes.
    -
    Parameters
    - - -
    valA pointer to a pointer to the memory into which the class data will be copied. If the value pointed to is NULL, memory will be allocated to hold the data, and the pointer value modified accordingly. The calling program is responsible for deallocating the memory references by this pointer.
    -
    -
    -
    Returns
    The size (in bytes) of the information copied to val.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 118 of file Constructor.h.

    - -
    -
    - -

    ◆ check_semantics()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::Constructor::check_semantics (string & msg,
    bool all = false 
    )
    -
    -virtual
    -
    - -

    Compare an object's current state with the semantics of its type.

    -

    This function checks the class instance for internal consistency. This is important to check for complex constructor classes. For BaseType, an object is semantically correct if it has both a non-null name and type.

    -

    For example, an Int32 instance would return FALSE if it had no name or no type defined. A Grid instance might return FALSE for more complex reasons, such as having Map arrays of the wrong size or shape.

    -

    This function is used by the DDS class, and will rarely, if ever, be explicitly called by a DODS application program. A variable must pass this test before it is sent, but there may be many other stages in a retrieve operation where it would fail.

    -
    Returns
    Returns FALSE when the current state violates some aspect of the type semantics, TRUE otherwise.
    -
    Parameters
    - - - -
    msgA returned string, containing a message indicating the source of any problem.
    allFor complex constructor types (Grid, Sequence, Structure), this flag indicates whether to check the semantics of the member variables, too.
    -
    -
    -
    See also
    DDS::check_semantics
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 792 of file Constructor.cc.

    - -
    -
    - -

    ◆ clear_local_data()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual void libdap::BaseType::clear_local_data ()
    -
    -inlinevirtualinherited
    -
    -

    Remove any read or set data in the private data of the variable, setting read_p() to false. Used to clear any dynamically allocated storage that holds (potentially large) data. For the simple types, this no-op version is all that's needed. Vector and some other classes define a special version and have serialize() implementations that call it to free data as soon as possible after sending it.

    -
    Note
    Added 7/5/15 jhrg
    -
    -Any specialization of this should make sure to reset the read_p property.
    - -

    Reimplemented in libdap::Sequence, libdap::Vector, libdap::D4Sequence, and libdap::D4Opaque.

    - -

    Definition at line 179 of file BaseType.h.

    - -
    -
    - -

    ◆ compute_checksum()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::compute_checksum (Crc32checksum)
    -
    -virtual
    -
    - -

    include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum.

    -
    Parameters
    - - -
    checksumA Crc32 instance that holds the current checksum.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 550 of file Constructor.cc.

    - -
    -
    - -

    ◆ d4_ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::d4_ops (BaseTypeb,
    int op 
    )
    -
    -virtualinherited
    -
    - -

    Evaluator a relop for DAP4.

    -

    This method is used by the filter expression evaluation code in DAP4. Each of the 'data type' classes that support relops must overload this method. In an expression of the form arg1 op arg2, this object is arg1, the parameter 'b' is arg2 and op is the relational operator.

    -
    Note
    I used the same relop codes for DAP4 as in the DAP2 parser/scanner which makes for some coupling between them, but cuts way down on the duplication of the evaluator logic, which is somewhat involved.
    -
    Parameters
    - - - -
    bThe second argument in the relational expression
    opThe infix relational operator
    -
    -
    -
    Returns
    True if the expression is true, False otherwise.
    - -

    Reimplemented in libdap::Str, libdap::Int32, libdap::Float32, libdap::Byte, libdap::Float64, libdap::Int16, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 1282 of file BaseType.cc.

    - -
    -
    - -

    ◆ dataset()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::dataset () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the dataset used to create this instance.

    -

    A dataset from which the data is to be read. The meaning of this string will vary among different types of data sources. It may be the name of a data file or an identifier used to read data from a relational database.

    - -

    Definition at line 358 of file BaseType.cc.

    - -
    -
    - -

    ◆ del_var()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::del_var (const string & n)
    -
    -virtual
    -
    -

    Remove an element from a Constructor.

    -
    Parameters
    - - -
    nname of the variable to remove
    -
    -
    - -

    Definition at line 448 of file Constructor.cc.

    - -
    -
    - -

    ◆ deserialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::Constructor::deserialize (UnMarshallerum,
    DDSdds,
    bool reuse = false 
    )
    -
    -virtual
    -
    - -

    Receive data from the net.

    -

    Receives data from the network connection identified by the source parameter. The data is put into the class data buffer according to the input dds.

    -

    This function is only used on the client side of the DODS client/server connection.

    -
    Parameters
    - - - - -
    umAn UnMarshaller that knows how to deserialize data types
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure. This would have been received from the server in an earlier transmission.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect.
    -
    -
    -
    Returns
    Always returns TRUE.
    -
    Exceptions
    - - -
    Errorwhen a problem reading from the UnMarshaller is found.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Sequence, and libdap::D4Sequence.

    - -

    Definition at line 540 of file Constructor.cc.

    - -
    -
    - -

    ◆ deserialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::deserialize (D4StreamUnMarshallerum,
    DMRdmr 
    )
    -
    -virtual
    -
    -

    The DAP4 deserialization method.

    Parameters
    - - - -
    um
    dmr
    -
    -
    -
    Exceptions
    - - -
    Erroror InternalErr
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Sequence, and libdap::D4Group.

    - -

    Definition at line 609 of file Constructor.cc.

    - -
    -
    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::dump (ostream & strm) const
    -
    -virtual
    -
    - -

    dumps information about this object

    -

    Displays the pointer value of this instance and information about this instance.

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the information to
    -
    -
    -
    Returns
    void
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Grid, and libdap::Structure.

    - -

    Definition at line 913 of file Constructor.cc.

    - -
    -
    - -

    ◆ element_count()

    - -
    -
    - - - - - -
    - - - - - - - - -
    int libdap::Constructor::element_count (bool leaves = false)
    -
    -virtual
    -
    - -

    Count the members of constructor types.

    -

    Return a count of the total number of variables in this variable. This is used to count the number of variables held by a constructor variable - for simple type and vector variables it always returns 1.

    -

    For compound data types, there are two ways to count members. You can count the members, or you can count the simple members and add that to the count of the compound members. For example, if a Structure contains an Int32 and another Structure that itself contains two Int32 members, the element count of the top-level structure could be two (one Int32 and one Structure) or three (one Int32 by itself and two Int32's in the subsidiary Structure). Use the leaves parameter to control which kind of counting you desire.

    -
    Returns
    Returns 1 for simple types. For compound members, the count depends on the leaves argument.
    -
    Parameters
    - - -
    leavesThis parameter is only relevant if the object contains other compound data types. If FALSE, the function counts only the data variables mentioned in the object's declaration. If TRUE, it counts the simple members, and adds that to the sum of the counts for the compound members. This parameter has no effect for simple type variables.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 194 of file Constructor.cc.

    - -
    -
    - -

    ◆ FQN()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::Constructor::FQN () const
    -
    -virtual
    -
    -

    Return the FQN for this variable. This will include the D4 Group component of the name.

    -
    Returns
    The FQN in a string
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Group.

    - -

    Definition at line 181 of file Constructor.cc.

    - -
    -
    - -

    ◆ get_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - -
    AttrTable & libdap::BaseType::get_attr_table ()
    -
    -virtualinherited
    -
    -

    Get this variable's AttrTable. It's generally a bad idea to return a reference to a contained object, but in this case it seems that building an interface inside BaseType is overkill.

    -

    Use the AttrTable methods to manipulate the table.

    - -

    Definition at line 582 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_parent()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::BaseType::get_parent () const
    -
    -virtualinherited
    -
    -

    Return a pointer to the Constructor or Vector which holds (contains) this variable. If this variable is at the top level, this method returns null.

    -
    Returns
    A BaseType pointer to the variable's parent.
    - -

    Definition at line 751 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_var_index()

    - -
    -
    - - - - - - - - -
    BaseType * libdap::Constructor::get_var_index (int i)
    -
    -

    Return the BaseType pointer for the ith variable.

    Parameters
    - - -
    iThis index
    -
    -
    -
    Returns
    The corresponding BaseType*.
    - -

    Definition at line 397 of file Constructor.cc.

    - -
    -
    - -

    ◆ get_vars_iter()

    - -
    -
    - - - - - - - - -
    Constructor::Vars_iter libdap::Constructor::get_vars_iter (int i)
    -
    -

    Return the iterator for the ith variable.

    Parameters
    - - -
    ithe index
    -
    -
    -
    Returns
    The corresponding Vars_iter
    - -

    Definition at line 388 of file Constructor.cc.

    - -
    -
    - -

    ◆ intern_data() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::intern_data (ConstraintEvaluatoreval,
    DDSdds 
    )
    -
    -virtual
    -
    -

    Similar to using serialize() and deserialize() together in one object. Data are read as for serialize and those values are stored in the objects as deserialize() does but does not write and then read data to/from a stream.

    -

    This method is defined by the various data type classes. It calls the read() abstract method. Unlike serialize(), this method does not clear the memory use to hold the data values, so the caller should make sure to delete the DDS or the variable as soon as possible.

    -
    Parameters
    - - - -
    evalUse this as the constraint expression evaluator.
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Sequence, and libdap::D4Sequence.

    - -

    Definition at line 490 of file Constructor.cc.

    - -
    -
    - -

    ◆ intern_data() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::Constructor::intern_data ()
    -
    -virtual
    -
    - -

    Read data into this variable.

    -
    Parameters
    - - - -
    evalEvaluator for a constraint expression
    dmrDMR for the whole dataset
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Sequence, and libdap::D4Group.

    - -

    Definition at line 556 of file Constructor.cc.

    - -
    -
    - -

    ◆ is_constructor_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_constructor_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable.

    -
    Returns
    True if the instance is a Structure, Sequence or Grid, False otherwise.
    - -

    Definition at line 412 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_in_selection ()
    -
    -virtualinherited
    -
    - -

    Is this variable part of the current selection?

    -

    Does this variable appear in either the selection part or as a function argument in the current constrain expression. If this property is set (true) then implementations of the read() method should read this variable.

    -
    Note
    This method does not check, nor does it know about the semantics of, string arguments passed to functions. Those functions might include variable names in strings; they are responsible for reading those variables. See the grid (func_grid_select()) for an example.
    -
    See also
    BaseType::read()
    - -

    Definition at line 703 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_linear()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::Constructor::is_linear ()
    -
    -virtual
    -
    - -

    Check to see whether this variable can be printed simply.

    -

    True if the instance can be flattened and printed as a single table of values. For Arrays and Grids this is always false. For Structures and Sequences the conditions are more complex. The implementation provided by this class always returns false. Other classes should override this implementation.

    -
    Todo:
    Change the name to is_flattenable or something like that. 05/16/03 jhrg
    -
    Returns
    True if the instance can be printed as a single table of values, false otherwise.
    - -

    Reimplemented in libdap::Sequence, and libdap::Structure.

    - -

    Definition at line 823 of file Constructor.cc.

    - -
    -
    - -

    ◆ is_simple_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_simple_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a numeric, string or URL type variable.

    -
    Returns
    True if the instance is a scalar numeric, String or URL variable, False otherwise. Arrays (even of simple types) return False.
    -
    See also
    is_vector_type()
    - -

    Definition at line 393 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_vector_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_vector_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a vector (i.e., array) type variable.

    -
    Returns
    True if the instance is an Array, False otherwise.
    - -

    Definition at line 402 of file BaseType.cc.

    - -
    -
    - -

    ◆ length()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual int libdap::BaseType::length () const
    -
    -inlinevirtualinherited
    -
    - -

    How many elements are in this variable.

    -
    Todo:
    change the return type to int64_t
    -
    Returns
    The number of elements; 1 for scalars
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, libdap::Str, and libdap::D4Opaque.

    - -

    Definition at line 207 of file BaseType.h.

    - -
    -
    - -

    ◆ m_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::m_duplicate (const BaseTypebt)
    -
    -protectedinherited
    -
    - -

    Perform a deep copy.

    -

    Perform a deep copy. Copies the values of bt into *this. Pointers are dereferenced and their values are copied into a newly allocated instance.

    -
    Parameters
    - - -
    btThe source object.
    -
    -
    - -

    Definition at line 86 of file BaseType.cc.

    - -
    -
    - -

    ◆ name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::name () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the class instance.

    - -

    Definition at line 320 of file BaseType.cc.

    - -
    -
    - -

    ◆ ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::ops (BaseTypeb,
    int op 
    )
    -
    -virtualinherited
    -
    - -

    Evaluate relational operators.

    -

    This method contains the relational operators used by the constraint expression evaluator in the DDS class. Each class that wants to be able to evaluate relational expressions must overload this function. The implementation in BaseType throws an InternalErr exception. The DAP library classes Byte, ..., Url provide specializations of this method. It is not meaningful for classes such as Array because relational expressions using Array are not supported.

    -

    The op argument refers to a table generated by bison from the constraint expression parser. Use statements like the following to correctly interpret its value:

    -
    switch (op) {
    -    case EQUAL: return i1 == i2;
    -    case NOT_EQUAL: return i1 != i2;
    -    case GREATER: return i1 > i2;
    -    case GREATER_EQL: return i1 >= i2;
    -    case LESS: return i1 < i2;
    -    case LESS_EQL: return i1 <= i2;
    -    case REGEXP: throw Error("Regular expressions are not supported for integer values");
    -    default: throw Error("Unknown operator");
    -}
    -

    This function is used by the constraint expression evaluator.

    -
    Parameters
    - - - -
    bCompare the value of this instance with b.
    opAn integer index indicating which relational operator is implied. Choose one from the following: EQUAL, NOT_EQUAL, GREATER, GREATER_EQL, LESS, LESS_EQL, and REGEXP.
    -
    -
    -
    Returns
    The boolean value of the comparison.
    -
    See also
    BaseType::d4_ops(BaseType *, int)
    - -

    Reimplemented in libdap::D4Enum, libdap::Str, libdap::Int32, libdap::Float32, libdap::Byte, libdap::Float64, libdap::UInt32, libdap::D4Opaque, libdap::Int16, libdap::UInt16, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 1256 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_dap4 (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtual
    -
    -

    Write the DAP4 XML representation for this variable. This method is used to build the DAP4 DMR response object.

    -
    Parameters
    - - - -
    xmlAn XMLWriter that will do the serialization
    constrainedTrue if the response should show the variables subject to the current constraint expression.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Group.

    - -

    Definition at line 768 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_decl() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_decl (ostream & out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtual
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 626 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_decl() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_decl (FILE * out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtual
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 617 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_val() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_val (FILE * out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtual
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output stream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Sequence, and libdap::Grid.

    - -

    Definition at line 650 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_val() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_val (ostream & out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtual
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output ostream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Reimplemented in libdap::D4Sequence, libdap::Sequence, and libdap::Grid.

    - -

    Definition at line 658 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_xml() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_xml (ostream & out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtual
    -
    -
    Deprecated:
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 695 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_xml() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_xml (FILE * out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtual
    -
    -
    Deprecated:
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 684 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_xml_writer()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_xml_writer (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtual
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 718 of file Constructor.cc.

    - -
    -
    - -

    ◆ ptr_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual BaseType* libdap::BaseType::ptr_duplicate ()
    -
    -pure virtualinherited
    -
    -

    Clone this instance. Allocate a new instance and copy *this into it. This method must perform a deep copy.

    @note This method should \e not copy data values, but must copy all
    -other fields in the object.
    -
    Returns
    A newly allocated copy of this.
    - -

    Implemented in libdap::Sequence, libdap::Array, libdap::D4Sequence, libdap::Grid, libdap::Vector, libdap::D4Enum, libdap::Structure, libdap::Url, libdap::Int32, libdap::D4Group, libdap::Byte, libdap::Str, libdap::Float32, libdap::Float64, libdap::Int16, libdap::UInt32, libdap::Int64, libdap::UInt16, libdap::UInt64, libdap::Int8, and libdap::D4Opaque.

    - -
    -
    - -

    ◆ read()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::Constructor::read ()
    -
    -virtual
    -
    - -

    simple implementation of read that iterates through vars and calls read on them

    -
    Returns
    returns false to signify all has been read
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 476 of file Constructor.cc.

    - -
    -
    - -

    ◆ read_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read_p ()
    -
    -virtualinherited
    -
    - -

    Has this variable been read?

    -

    Returns true if the value(s) for this variable have been read from the data source, otherwise returns false. This method is used to determine when values need to be read using the read() method. When read_p() returns true, this library assumes that buf2val() (and other methods such as get_vec()) can be used to access the value(s) of a variable.

    -
    Returns
    True if the variable's value(s) have been read, false otherwise.
    - -

    Definition at line 480 of file BaseType.cc.

    - -
    -
    - -

    ◆ send_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::send_p ()
    -
    -virtualinherited
    -
    - -

    Should this variable be sent?

    -

    Returns the state of the send_p property. If true, this variable should be sent to the client, if false, it should not. If no constraint expression (CE) has been evaluated, this property is true for all variables in a data source (i.e., for all the variables listed in a DDS). If a CE has been evaluated, this property is true only for those variables listed in the projection part of the CE.

    -
    Returns
    True if the variable should be sent to the client, false otherwise.
    - -

    Definition at line 554 of file BaseType.cc.

    - -
    -
    - -

    ◆ serialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::Constructor::serialize (ConstraintEvaluatoreval,
    DDSdds,
    Marshallerm,
    bool ce_eval = true 
    )
    -
    -virtual
    -
    - -

    Move data to the net, then remove them from the object.

    -

    Sends the data from the indicated (local) dataset through the connection identified by the Marshaller parameter. If the data is not already incorporated into the DDS object, read the data from the dataset. Once the data are sent (written to the Marshaller), they are deleted from the object and the object state is reset so that they will be read again if the read() method is called.

    -

    This function is only used on the server side of the client/server connection, and is generally only called from the ResponseBuilder functions. It has no BaseType implementation; each datatype child class supplies its own implementation.

    @param eval Use this as the constraint expression evaluator.
    -
    Parameters
    - - - - -
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    mA marshaller used to serialize data types
    ce_evalA boolean value indicating whether to evaluate the DODS constraint expression that may accompany this dataset. The constraint expression is stored in the dds.
    -
    -
    -
    Returns
    This method always returns true. Older versions used the return value to signal success or failure.
    -
    Note
    We changed the default behavior of this method so that it calls BaseType::clear_local_data() once the values are sent. This, combined with the behavior that read() is called by this method just before data are sent, means that data for any given variable remain in memory for the shortest time possible. Furthermore, since variables are serialized one at a time, no more than one variable's data will be in memory at any given time when using the default behavior. Some code - code that uses intern_data() or server functions - might alter this default behavior. Only Array (i.e. Vector), Sequence, D4Sequence and D4Opaque types actually hold data in dynamically allocated memory, so sonly those types have the new/changed behavior. This change was made on 7/5/15.
    -
    Exceptions
    - - - -
    InternalErr.
    Error.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Sequence, and libdap::D4Sequence.

    - -

    Definition at line 504 of file Constructor.cc.

    - -
    -
    - -

    ◆ serialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::serialize (D4StreamMarshallerm,
    DMRdmr,
    bool filter = false 
    )
    -
    -virtual
    -
    - -

    Serialize a Constructor.

    -
    Todo:
    See notebook for 8/21/14
    -
    Parameters
    - - - - - -
    m
    dmrUnused
    evalUnused
    filterUnused
    -
    -
    -
    Exceptions
    - - -
    Erroris thrown if the value needs to be read and that operation fails.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Sequence, and libdap::D4Group.

    - -

    Definition at line 578 of file Constructor.cc.

    - -
    -
    - -

    ◆ set_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_attr_table (const AttrTableat)
    -
    -virtualinherited
    -
    -

    Set this variable's attribute table.

    Parameters
    - - -
    atSource of the attributes.
    -
    -
    - -

    Definition at line 590 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::set_in_selection (bool state)
    -
    -virtual
    -
    - -

    Set the in_selection property.

    -

    Set the in_selection property for this variable and all of its children.

    -
    Parameters
    - - -
    stateSet the property value to state.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 834 of file Constructor.cc.

    - -
    -
    - -

    ◆ set_length()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::BaseType::set_length (int )
    -
    -inlinevirtualinherited
    -
    - -

    Set the number of elements for this variable.

    -
    Todo:
    change param type to int64_t
    -
    Parameters
    - - -
    lThe number of elements
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, and libdap::Vector.

    - -

    Definition at line 214 of file BaseType.h.

    - -
    -
    - -

    ◆ set_name()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_name (const string & n)
    -
    -virtualinherited
    -
    - -

    Sets the name of the class instance.

    - -

    Reimplemented in libdap::Vector.

    - -

    Definition at line 344 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_parent()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_parent (BaseTypeparent)
    -
    -virtualinherited
    -
    -

    Set the parent property for this variable.

    -
    Note
    Added ability to set parent to null. 10/19/12 jhrg
    -
    Parameters
    - - -
    parentPointer to the Constructor of Vector parent variable or null if the variable has no parent (if it is at the top-level of a DAP2/3 DDS).
    -
    -
    -
    Exceptions
    - - -
    InternalErrthrown if called with anything other than a Constructor, Vector or Null.
    -
    -
    - -

    Definition at line 733 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_read_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::set_read_p (bool state)
    -
    -virtual
    -
    - -

    Sets the value of the read_p property.

    -

    Sets the value of the read_p property. This indicates that the value(s) of this variable has/have been read. An implementation of the read() method should use this to set the read_p property to true.

    -
    Note
    If the is_synthesized property is true, this method will not alter the is_read property. If you need that behavior, specialize the method in your subclasses if the various types.
    -
    -For most of the types the default implementation of this method is fine. However, if you're building a server which must handle data represented using nested sequences, then you may need to provide a specialization of Sequence::set_read_p(). By default Sequence::set_read_p() recursively sets the read_p property for all child variables to state. For servers where one Sequence reads an outer set of values and another reads an inner set, this is cumbersome. In such a case, it is easier to specialize Sequence::set_read_p() so that it does not recursively set the read_p property for the inner Sequence. Be sure to see the documentation for the read() method!
    -
    Todo:
    Look at making synthesized variables easier to implement and at making them more integrated into the overall CE evaluation process. Maybe the code that computes the synthesized var's value should be in the that variable's read() method? This might provide a way to get rid of the awkward 'projection functions' by replacing them with real children of BaseType. It would also provide a way to clean up the way the synthesized_p prop intrudes on the read_p prop.
    -
    See also
    BaseType::read()
    -
    Parameters
    - - -
    stateSet the read_p property to this state.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Group.

    - -

    Definition at line 218 of file Constructor.cc.

    - -
    -
    - -

    ◆ set_send_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::set_send_p (bool state)
    -
    -virtual
    -
    -

    Sets the value of the send_p flag. This function is meant to be called from within the constraint evaluator of other code which determines that this variable should be returned to the client. Data are ready to be sent when both the d_is_send and d_is_read flags are set to TRUE.

    -
    Parameters
    - - -
    stateThe logical state to set the send_p flag.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Group.

    - -

    Definition at line 208 of file Constructor.cc.

    - -
    -
    - -

    ◆ set_synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_synthesized_p (bool state)
    -
    -virtualinherited
    -
    -

    Set the synthesized flag. Before setting this flag be sure to set the read_p() state. Once this flag is set you cannot alter the state of the read_p flag!

    -
    See also
    synthesized_p()
    - -

    Definition at line 463 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_type()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_type (const Typet)
    -
    -virtualinherited
    -
    - -

    Sets the type of the class instance.

    - -

    Definition at line 372 of file BaseType.cc.

    - -
    -
    - -

    ◆ synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::synthesized_p ()
    -
    -virtualinherited
    -
    -

    Returns true if the variable is a synthesized variable. A synthesized variable is one that is added to the dataset by the server (usually with a `projection function'.

    - -

    Definition at line 452 of file BaseType.cc.

    - -
    -
    - -

    ◆ toString()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::toString ()
    -
    -virtualinherited
    -
    -

    Write out the object's internal fields in a string. To be used for debugging when regular inspection w/ddd or gdb isn't enough.

    -
    Returns
    A string which shows the object's internal stuff.
    - -

    Reimplemented in libdap::Sequence.

    - -

    Definition at line 184 of file BaseType.cc.

    - -
    -
    - -

    ◆ transfer_attributes()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::transfer_attributes (AttrTableat_container)
    -
    -virtual
    -
    -

    Transfer attributes from a DAS object into this variable. Because of the rough history of the DAS object and the way that various server code built the DAS, this is necessarily a heuristic process. The intent is that this method will be overridden by handlers that need to look for certain patterns in the DAS (e.g., hdf4's odd variable_dim_n; where n = 0, 1, 2, ...) attribute containers.

    -

    There should be a one-to-one mapping between variables and attribute containers. However, in some cases one variable has attributes spread across several top level containers and in some cases one container is used by several variables

    -
    Note
    This method is technically unnecessary because a server (or client) can easily add attributes directly using the DDS::get_attr_table or BaseType::get_attr_table methods and then poke values in using any of the methods AttrTable provides. This method exists to ease the transition to DDS objects which contain attribute information for the existing servers (Since they all make DAS objects separately from the DDS). They could be modified to use the same AttrTable methods but operate on the AttrTable instances in a DDS/BaseType instead of those in a DAS.
    -
    Parameters
    - - -
    at_containerTransfer attributes from this container.
    -
    -
    -
    Returns
    void
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 844 of file Constructor.cc.

    - -
    -
    - -

    ◆ transform_to_dap2()

    - -
    -
    - - - - - -
    - - - - - - - - -
    std::vector< BaseType * > * libdap::BaseType::transform_to_dap2 (AttrTableparent_attr_table)
    -
    -virtualinherited
    -
    - -

    DAP4 to DAP2 transform.

    -

    For the current BaseType, return a DAP2 'copy' of the variable.

    -
    Note
    For most DAP4 types, in this implementation of DAP2 the corresponding DAP4 type is the same. These types have a different representations in DAP2 and DAP4: Sequences (which are D4Sequences in the DAP4 implementation),
      -
    • Grids (which are semantically subsumed by coverages in DAP4)
    • -
    • Arrays (which use shared dimensions in DAP4)
    • -
    -
    -

    Additionally DAP4 adds the following types:

      -
    • UInt8, Int8, and Char which map to Byte in DAP2.
    • -
    • Int64, Unit64 which have no natural representation in DAP2.
    • -
    • Opaque Possible Byte stuff[] plus metadata?
    • -
    • Enum's can be represented as Int32.
    • -
    • Groups, with the exception of the root group "disappear" into the names of their member variables. Specifically the Group name is add as a prefix followed by a "/" separator to the names of all of the Group's member groups variables.
    • -
    -
    Parameters
    - - -
    TheAttrTable pointer parent_attr_table is used by Groups, which disappear from the DAP2 representation. Their children are returned in the the BAseType vector their attributes are added to parent_attr_table;
    -
    -
    -
    Returns
    A pointer to a vector of BaseType pointers (right?). In most cases this vector will contain a single pointer but DAP4 types 'disappear' such as Group will return all of their member variables in the vector. DAP4 types with no representation in DAP2 (ex: UInt64) the will return a NULL pointer and so this must be tested!
    - -

    Reimplemented in libdap::Array, libdap::D4Enum, libdap::D4Group, libdap::D4Opaque, libdap::Byte, libdap::Structure, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 259 of file BaseType.cc.

    - -
    -
    - -

    ◆ transform_to_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::transform_to_dap4 (D4Grouproot,
    Constructorcontainer 
    )
    -
    -virtual
    -
    - -

    DAP2 to DAP4 transform.

    -

    For the current BaseType, return a DAP4 'copy' of the variable.

    -
    Note
    For most DAP2 types, in this implementation of DAP4 the corresponding DAP4 type is the same. The different types are Sequences (which are D4Sequences in the DAP4 implementation), Grids (which are coverages) and Arrays (which use shared dimensions).
    -
    Parameters
    - - - -
    rootThe root group that should hold this new variable. Add Group-level stuff here (e.g., D4Dimensions).
    containerAdd the new variable to this container.
    -
    -
    -
    Returns
    A pointer to the transformed variable
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Sequence, libdap::Grid, and libdap::Structure.

    - -

    Definition at line 141 of file Constructor.cc.

    - -
    -
    - -

    ◆ type()

    - -
    -
    - - - - - -
    - - - - - - - -
    Type libdap::BaseType::type () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance.

    - -

    Definition at line 365 of file BaseType.cc.

    - -
    -
    - -

    ◆ type_name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::type_name () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance as a string.

    - -

    Definition at line 379 of file BaseType.cc.

    - -
    -
    - -

    ◆ val2buf()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    virtual unsigned int libdap::Constructor::val2buf (void * val,
    bool reuse 
    )
    -
    -inlinevirtual
    -
    - -

    Loads class data.

    -

    Store the value pointed to by val in the object's internal buffer. This function does not perform any checks, so users must be sure that the thing pointed to can actually be stored in the object's buffer.

    -

    Only simple objects (Int, Float, Byte, and so on) and arrays of these simple objects may be stored using this function. To put data into more complex constructor types, use the functions provided by that class.

    -
    Deprecated:
    Use set_value() in the leaf classes.
    -
    Parameters
    - - - -
    valA pointer to the data to be inserted into the class data buffer.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect. This is currently used only in the Vector class.
    -
    -
    -
    Returns
    The size (in bytes) of the information copied from val.
    -
    See also
    Grid
    -
    -Vector::val2buf
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 115 of file Constructor.h.

    - -
    -
    - -

    ◆ var() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::Constructor::var (const string & name,
    bool exact_match = true,
    btp_stack * s = 0 
    )
    -
    -virtual
    -
    - -

    btp_stack no longer needed; use back pointers (BaseType::get_parent())

    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 267 of file Constructor.cc.

    - -
    -
    - -

    ◆ var() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::Constructor::var (const string & n,
    btp_stack & s 
    )
    -
    -virtual
    -
    -
    Deprecated:
    -
    Deprecated:
    See comment in BaseType
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 279 of file Constructor.cc.

    - -
    -
    - -

    ◆ var_begin()

    - -
    -
    - - - - - - - -
    Constructor::Vars_iter libdap::Constructor::var_begin ()
    -
    -

    Returns an iterator referencing the first structure element.

    - -

    Definition at line 356 of file Constructor.cc.

    - -
    -
    - -

    ◆ var_end()

    - -
    -
    - - - - - - - -
    Constructor::Vars_iter libdap::Constructor::var_end ()
    -
    -

    Returns an iterator referencing the end of the list of structure elements. Does not reference the last structure element.

    - -

    Definition at line 364 of file Constructor.cc.

    - -
    -
    - -

    ◆ var_rbegin()

    - -
    -
    - - - - - - - -
    Constructor::Vars_riter libdap::Constructor::var_rbegin ()
    -
    -

    Return a reverse iterator that references the last element.

    - -

    Definition at line 371 of file Constructor.cc.

    - -
    -
    - -

    ◆ var_rend()

    - -
    -
    - - - - - - - -
    Constructor::Vars_riter libdap::Constructor::var_rend ()
    -
    -

    Return a reverse iterator that references a point 'before' the first element.

    - -

    Definition at line 379 of file Constructor.cc.

    - -
    -
    - -

    ◆ width()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::Constructor::width (bool constrained = false) const
    -
    -virtual
    -
    -

    This version of width simply returns the same thing as width() for simple types and Arrays. For Structure it returns the total size if constrained is false, or the size of the elements in the current projection if true.

    -
    Parameters
    - - -
    constrainedIf true, return the size after applying a constraint.
    -
    -
    -
    Returns
    The number of bytes used by the variable.
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 249 of file Constructor.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1Constructor.js b/html/classlibdap_1_1Constructor.js deleted file mode 100644 index a9279340f..000000000 --- a/html/classlibdap_1_1Constructor.js +++ /dev/null @@ -1,91 +0,0 @@ -var classlibdap_1_1Constructor = -[ - [ "btp_stack", "classlibdap_1_1Constructor.html#ae9c6e71855b90a0e552713011c9ab81f", null ], - [ "Vars_citer", "classlibdap_1_1Constructor.html#a5a585c58a099833c4ca26561963e0f83", null ], - [ "Vars_iter", "classlibdap_1_1Constructor.html#a2b73df890f61ebb628359c8fd12839b0", null ], - [ "Vars_riter", "classlibdap_1_1Constructor.html#a6122400e3f40d457751fb0372a650d03", null ], - [ "Constructor", "classlibdap_1_1Constructor.html#af32a49aae27b67258c2b0ec494e964c7", null ], - [ "Constructor", "classlibdap_1_1Constructor.html#aada6a0aa97adc6adff2398f8c7d0ff35", null ], - [ "Constructor", "classlibdap_1_1Constructor.html#a483aa6ff5e9ea1f6b9e8d3ca617ebb54", null ], - [ "~Constructor", "classlibdap_1_1Constructor.html#aa948f77ae2fc511e348717e065562f32", null ], - [ "add_var", "classlibdap_1_1Constructor.html#a2585c69c45b9ebec9c63993248eb5b4b", null ], - [ "add_var_nocopy", "classlibdap_1_1Constructor.html#abdb52463a46e1b10040f245d4ed7642b", null ], - [ "attributes", "classlibdap_1_1Constructor.html#a97452f06d2188eb838399a709246b5e9", null ], - [ "buf2val", "classlibdap_1_1Constructor.html#ac4dc7e8099322b5b403a7d0ae9079006", null ], - [ "check_semantics", "classlibdap_1_1Constructor.html#afe010638fd2ca9aab00dd1c21a9e4825", null ], - [ "clear_local_data", "classlibdap_1_1Constructor.html#aaddb97a4efbe035f41deaf03c6e8683f", null ], - [ "compute_checksum", "classlibdap_1_1Constructor.html#a287ab9a4deb81a8ced6d8432be647925", null ], - [ "d4_ops", "classlibdap_1_1Constructor.html#a512a356f31ed6c4c1a368da0b054408a", null ], - [ "dataset", "classlibdap_1_1Constructor.html#a47521ce321a17e6ce217870cb6a1a7aa", null ], - [ "del_var", "classlibdap_1_1Constructor.html#af38d3785c4a7cd0063cbb9fc5943333c", null ], - [ "del_var", "classlibdap_1_1Constructor.html#a69291878fc48217902fb0dcf1e2e1aff", null ], - [ "deserialize", "classlibdap_1_1Constructor.html#a63763d2bae05463b100e823fb461a784", null ], - [ "deserialize", "classlibdap_1_1Constructor.html#a6f4253236d69c3c0ef64343136b5039b", null ], - [ "dump", "classlibdap_1_1Constructor.html#a8efdfb84ef6b287142442252c00b4444", null ], - [ "element_count", "classlibdap_1_1Constructor.html#a1c2eecff00fa7e3af175c711d00fb86e", null ], - [ "FQN", "classlibdap_1_1Constructor.html#afa6c06dab830b4e089641b44fea8293c", null ], - [ "get_attr_table", "classlibdap_1_1Constructor.html#a1fcd9537c67e3bf88964b2656ff5bac1", null ], - [ "get_parent", "classlibdap_1_1Constructor.html#a3459cdaa239c33ce111ef360d8dc3017", null ], - [ "get_var_index", "classlibdap_1_1Constructor.html#ac2b4b28ed9d6f435129aa599ab809799", null ], - [ "get_vars_iter", "classlibdap_1_1Constructor.html#a1e6d8224e04d75e3d2a21263957cd42f", null ], - [ "intern_data", "classlibdap_1_1Constructor.html#a065056826ef9c6fb2d08463af9e15a34", null ], - [ "intern_data", "classlibdap_1_1Constructor.html#a822a036364c56df5288a55670f51197e", null ], - [ "is_constructor_type", "classlibdap_1_1Constructor.html#a8b8490e0047c6da52945699a132008ea", null ], - [ "is_dap4", "classlibdap_1_1Constructor.html#a7f6835cb5e5589ab5dad3fb4813d3bea", null ], - [ "is_in_selection", "classlibdap_1_1Constructor.html#ae302ab2ec26e9fc5b575bf5d3d09aa5c", null ], - [ "is_linear", "classlibdap_1_1Constructor.html#af26f89e9c0732a9c32bd5e15d716a7d7", null ], - [ "is_simple_type", "classlibdap_1_1Constructor.html#aae57e5b270b3a015d40c8db10b9b5549", null ], - [ "is_vector_type", "classlibdap_1_1Constructor.html#a7107c76dbcab71015141142383b6d022", null ], - [ "length", "classlibdap_1_1Constructor.html#aadcda7a659157bc6a832d8a5fb775b3f", null ], - [ "m_duplicate", "classlibdap_1_1Constructor.html#a88b282d06686fc88a74c91e289ef31d7", null ], - [ "m_duplicate", "classlibdap_1_1Constructor.html#a0c55b826c8c5dfe7a454dc670e859a41", null ], - [ "m_exact_match", "classlibdap_1_1Constructor.html#aa5cd6124619d35e81bcfd426f1e569d3", null ], - [ "m_leaf_match", "classlibdap_1_1Constructor.html#a8fe3863a609488f4d5125abea96b82ed", null ], - [ "name", "classlibdap_1_1Constructor.html#a24c5d67823b3cff7f4245a993072a142", null ], - [ "operator=", "classlibdap_1_1Constructor.html#ae01fd846f387bcb51643407574fce6d8", null ], - [ "ops", "classlibdap_1_1Constructor.html#a8a0000be2a244e3e07abda3020af8800", null ], - [ "print_dap4", "classlibdap_1_1Constructor.html#a0f130e129b06773a9f3c94e3b492bb5c", null ], - [ "print_decl", "classlibdap_1_1Constructor.html#ab7fb094be8da2a9f80f6d3b85e452934", null ], - [ "print_decl", "classlibdap_1_1Constructor.html#a6c2c4d7cbe1d6239c037272ec865f80b", null ], - [ "print_val", "classlibdap_1_1Constructor.html#aa7f9cce8ca18461af332aab61123bf23", null ], - [ "print_val", "classlibdap_1_1Constructor.html#af50641301757ed26eb75fb2d29eae7ee", null ], - [ "print_xml", "classlibdap_1_1Constructor.html#a32de0413045173aa8803f540a6cea39b", null ], - [ "print_xml", "classlibdap_1_1Constructor.html#a7bbe6beabd94f576140e132e7a1017ff", null ], - [ "print_xml_writer", "classlibdap_1_1Constructor.html#ab775a5e7e63757ac961b43800a95635f", null ], - [ "ptr_duplicate", "classlibdap_1_1Constructor.html#a0b130311c9901fb8a7ab11ea19090ef0", null ], - [ "read", "classlibdap_1_1Constructor.html#ad0af40e2565972fa44985d173370c264", null ], - [ "read_p", "classlibdap_1_1Constructor.html#a38ff819a432217c55db2e9071928d20c", null ], - [ "send_p", "classlibdap_1_1Constructor.html#a980c0013817836aa77ef74aeec7fb192", null ], - [ "serialize", "classlibdap_1_1Constructor.html#a64268840654a0b37a15ccc601dbcfd33", null ], - [ "serialize", "classlibdap_1_1Constructor.html#ab868fe97d5075b702bd084c2e9540913", null ], - [ "set_attr_table", "classlibdap_1_1Constructor.html#a572a1d76a75981abac83a4241e90c0fa", null ], - [ "set_attributes", "classlibdap_1_1Constructor.html#ad4dda4cf43dca838d3de183b8e01cd09", null ], - [ "set_attributes_nocopy", "classlibdap_1_1Constructor.html#afd0e5f87d19020f560d5c1ff8dd4d6a3", null ], - [ "set_in_selection", "classlibdap_1_1Constructor.html#ac30becb1ffe7d2cd4cbcd24fc216c9a3", null ], - [ "set_is_dap4", "classlibdap_1_1Constructor.html#abca9ddaa9a1ada8447cbe7193e8e288a", null ], - [ "set_length", "classlibdap_1_1Constructor.html#a4fe343c1eeb6fb1d61ab030433651d90", null ], - [ "set_name", "classlibdap_1_1Constructor.html#a86504564f45a3e6748c6f1cc0ff4e9fa", null ], - [ "set_parent", "classlibdap_1_1Constructor.html#a5b6a39f6ce6594fa74f3fc899ac9a966", null ], - [ "set_read_p", "classlibdap_1_1Constructor.html#af52e60d8589eed1a18a14e9c6a57db65", null ], - [ "set_send_p", "classlibdap_1_1Constructor.html#aafbcf9bef6719fe60ac707e02956e09d", null ], - [ "set_synthesized_p", "classlibdap_1_1Constructor.html#a595cb4059cff24f801a1b6da79bd2f9e", null ], - [ "set_type", "classlibdap_1_1Constructor.html#af74f8d1ef57c9fcca46f620f75d175a3", null ], - [ "synthesized_p", "classlibdap_1_1Constructor.html#ae64e677da27249473cdba0b60cdbb90a", null ], - [ "toString", "classlibdap_1_1Constructor.html#a701eb3361f5b5628329ece019cd34519", null ], - [ "transfer_attributes", "classlibdap_1_1Constructor.html#a799d2bd8ef9505b1d493d8cd73b72746", null ], - [ "transform_to_dap2", "classlibdap_1_1Constructor.html#affec8a11e9cc035d4b1e8fb9a87b2072", null ], - [ "transform_to_dap4", "classlibdap_1_1Constructor.html#a3affad818961b2e7e984415cdd3c6e9e", null ], - [ "type", "classlibdap_1_1Constructor.html#af8e803b20a7a7dc5f2ef351d7fac4a56", null ], - [ "type_name", "classlibdap_1_1Constructor.html#a18a42c8ec35cb5b15cd651a4152f8a2c", null ], - [ "val2buf", "classlibdap_1_1Constructor.html#ac742b1bf93889e541128b1d123821ee6", null ], - [ "var", "classlibdap_1_1Constructor.html#a36a7412da7b5257d7666add726fea1a6", null ], - [ "var", "classlibdap_1_1Constructor.html#a68f1779dc328f890062722d90fad084a", null ], - [ "var_begin", "classlibdap_1_1Constructor.html#adeafe3d6c82d07b456a598a7b446c2c6", null ], - [ "var_end", "classlibdap_1_1Constructor.html#a936b38c7c35ffb4fe17c5b8e85bdaaa2", null ], - [ "var_rbegin", "classlibdap_1_1Constructor.html#aa025cf546ca35250454653c1ec684d91", null ], - [ "var_rend", "classlibdap_1_1Constructor.html#aede7cf5889e101db1ea8f22c3a84a5d3", null ], - [ "width", "classlibdap_1_1Constructor.html#a0b1e3ae7195f95c42ca98f42826a1ff5", null ], - [ "d_in_selection", "classlibdap_1_1Constructor.html#a949a89714965d7afdcd1e3edc8b7f0d4", null ], - [ "d_is_synthesized", "classlibdap_1_1Constructor.html#a629e97e8eb7d285b54c9af8c1ec9a29a", null ], - [ "d_vars", "classlibdap_1_1Constructor.html#a75b2aa694dc76294d6aa5f7456e49aa2", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1Constructor__inherit__graph.map b/html/classlibdap_1_1Constructor__inherit__graph.map deleted file mode 100644 index d90b1da77..000000000 --- a/html/classlibdap_1_1Constructor__inherit__graph.map +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/html/classlibdap_1_1Constructor__inherit__graph.md5 b/html/classlibdap_1_1Constructor__inherit__graph.md5 deleted file mode 100644 index 4e7d05dd5..000000000 --- a/html/classlibdap_1_1Constructor__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -1c7a75d04b2c74e17b9b58bd50f46cdb \ No newline at end of file diff --git a/html/classlibdap_1_1Constructor__inherit__graph.png b/html/classlibdap_1_1Constructor__inherit__graph.png deleted file mode 100644 index ff6cdff2100b0c96b754fbe95d9fac4d08e6c833..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 213953 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%0DyYAn(UH0GETx(&V8dZGk&sQk}7-7bc z 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

    95&38YjuygNceT08AE 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

    YGE>XXRdiHvyiR^+yN}%`q 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

    >c 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 L?PlI}xbJ@fBIVo= diff --git a/html/classlibdap_1_1D4AsyncUtil-members.html b/html/classlibdap_1_1D4AsyncUtil-members.html deleted file mode 100644 index ee7e25e22..000000000 --- a/html/classlibdap_1_1D4AsyncUtil-members.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -

    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::D4AsyncUtil Member List
    -
    -
    - -

    This is the complete list of members for libdap::D4AsyncUtil, including all inherited members.

    - - - - - - - - - - - - - - - -
    D4AsyncUtil() (defined in libdap::D4AsyncUtil)libdap::D4AsyncUtil
    getRejectReasonCodeString(RejectReasonCode code) (defined in libdap::D4AsyncUtil)libdap::D4AsyncUtil
    STYLESHEET_REFERENCE_KEY (defined in libdap::D4AsyncUtil)libdap::D4AsyncUtilstatic
    writeD2AsyncAccepted(XMLWriter &xml, long expectedDelay, long responseLifetime, string asyncResourceUrl) (defined in libdap::D4AsyncUtil)libdap::D4AsyncUtil
    writeD2AsyncPending(XMLWriter &xml) (defined in libdap::D4AsyncUtil)libdap::D4AsyncUtil
    writeD2AsyncRequired(XMLWriter &xml, long expectedDelay, long responseLifetime)libdap::D4AsyncUtil
    writeD2AsyncResponseGone(XMLWriter &xml) (defined in libdap::D4AsyncUtil)libdap::D4AsyncUtil
    writeD2AsyncResponseRejected(XMLWriter &xml, RejectReasonCode code, string description) (defined in libdap::D4AsyncUtil)libdap::D4AsyncUtil
    writeD4AsyncAccepted(XMLWriter &xml, long expectedDelay, long responseLifetime, string asyncResourceUrl, string *stylesheet_ref=0)libdap::D4AsyncUtil
    writeD4AsyncPending(XMLWriter &xml, string *stylesheet_ref=0)libdap::D4AsyncUtil
    writeD4AsyncRequired(XMLWriter &xml, long expectedDelay, long responseLifetime, string *stylesheet_ref=0)libdap::D4AsyncUtil
    writeD4AsyncResponseGone(XMLWriter &xml, string *stylesheet_ref=0)libdap::D4AsyncUtil
    writeD4AsyncResponseRejected(XMLWriter &xml, RejectReasonCode code, string description, string *stylesheet_ref=0)libdap::D4AsyncUtil
    ~D4AsyncUtil() (defined in libdap::D4AsyncUtil)libdap::D4AsyncUtilvirtual
    -
    - - - - diff --git a/html/classlibdap_1_1D4AsyncUtil.html b/html/classlibdap_1_1D4AsyncUtil.html deleted file mode 100644 index a6ac55f12..000000000 --- a/html/classlibdap_1_1D4AsyncUtil.html +++ /dev/null @@ -1,415 +0,0 @@ - - - - - - - -libdap: libdap::D4AsyncUtil Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::D4AsyncUtil Class Reference
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    -string getRejectReasonCodeString (RejectReasonCode code)
     
    -void writeD2AsyncAccepted (XMLWriter &xml, long expectedDelay, long responseLifetime, string asyncResourceUrl)
     
    -void writeD2AsyncPending (XMLWriter &xml)
     
    void writeD2AsyncRequired (XMLWriter &xml, long expectedDelay, long responseLifetime)
     Write the DAP2 AsyncRequired response . Write the DAP2 AsyncRequired in XML form. More...
     
    -void writeD2AsyncResponseGone (XMLWriter &xml)
     
    -void writeD2AsyncResponseRejected (XMLWriter &xml, RejectReasonCode code, string description)
     
    void writeD4AsyncAccepted (XMLWriter &xml, long expectedDelay, long responseLifetime, string asyncResourceUrl, string *stylesheet_ref=0)
     Write the DAP4 AsyncAccepted response. Write the AsyncAccepted in XML form. More...
     
    void writeD4AsyncPending (XMLWriter &xml, string *stylesheet_ref=0)
     Write the DAP4 AsyncPending response. Write the DAP4 AsyncPending in XML form. More...
     
    void writeD4AsyncRequired (XMLWriter &xml, long expectedDelay, long responseLifetime, string *stylesheet_ref=0)
     Write the DAP4 AsyncRequired response. Print the AsyncRequired in XML form. More...
     
    void writeD4AsyncResponseGone (XMLWriter &xml, string *stylesheet_ref=0)
     Write the DAP4 AsyncResponseGone response. Write the DAP4 AsyncRequired in XML form. More...
     
    void writeD4AsyncResponseRejected (XMLWriter &xml, RejectReasonCode code, string description, string *stylesheet_ref=0)
     Write the DAP4 ResponseRejected response. Write the DAP4 AsyncRequired in XML form. More...
     
    - - - -

    -Static Public Attributes

    -static const string STYLESHEET_REFERENCE_KEY = "DAP.Async.StyleSheet.Ref"
     
    -

    Detailed Description

    -
    -

    Definition at line 19 of file D4AsyncUtil.h.

    -

    Member Function Documentation

    - -

    ◆ writeD2AsyncRequired()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::D4AsyncUtil::writeD2AsyncRequired (XMLWriterxml,
    long expectedDelay,
    long responseLifetime 
    )
    -
    - -

    Write the DAP2 AsyncRequired response . Write the DAP2 AsyncRequired in XML form.

    -
    Parameters
    - - -
    xmlPrint to this XMLWriter instance
    -
    -
    - -

    Definition at line 335 of file D4AsyncUtil.cc.

    - -
    -
    - -

    ◆ writeD4AsyncAccepted()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::D4AsyncUtil::writeD4AsyncAccepted (XMLWriterxml,
    long expectedDelay,
    long responseLifetime,
    string asyncResourceUrl,
    string * stylesheet_ref = 0 
    )
    -
    - -

    Write the DAP4 AsyncAccepted response. Write the AsyncAccepted in XML form.

    -

    Print the AsyncRequired response to the. Print the AsyncRequired in XML form.

    -
    Parameters
    - - -
    xmlPrint to this XMLWriter instance
    -
    -
    - -

    Definition at line 105 of file D4AsyncUtil.cc.

    - -
    -
    - -

    ◆ writeD4AsyncPending()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void libdap::D4AsyncUtil::writeD4AsyncPending (XMLWriterxml,
    string * stylesheet_ref = 0 
    )
    -
    - -

    Write the DAP4 AsyncPending response. Write the DAP4 AsyncPending in XML form.

    -

    Print the AsyncRequired response to the. Print the AsyncRequired in XML form.

    -
    Parameters
    - - -
    xmlPrint to this XMLWriter instance
    -
    -
    - -

    Definition at line 178 of file D4AsyncUtil.cc.

    - -
    -
    - -

    ◆ writeD4AsyncRequired()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::D4AsyncUtil::writeD4AsyncRequired (XMLWriterxml,
    long expectedDelay,
    long responseLifetime,
    string * stylesheet_ref = 0 
    )
    -
    - -

    Write the DAP4 AsyncRequired response. Print the AsyncRequired in XML form.

    -

    Print the AsyncRequired response to the. Print the AsyncRequired in XML form.

    -
    Parameters
    - - -
    xmlPrint to this XMLWriter instance
    -
    -
    - -

    Definition at line 34 of file D4AsyncUtil.cc.

    - -
    -
    - -

    ◆ writeD4AsyncResponseGone()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void libdap::D4AsyncUtil::writeD4AsyncResponseGone (XMLWriterxml,
    string * stylesheet_ref = 0 
    )
    -
    - -

    Write the DAP4 AsyncResponseGone response. Write the DAP4 AsyncRequired in XML form.

    -

    Print the AsyncRequired response to the. Print the AsyncRequired in XML form.

    -
    Parameters
    - - -
    xmlPrint to this XMLWriter instance
    -
    -
    - -

    Definition at line 217 of file D4AsyncUtil.cc.

    - -
    -
    - -

    ◆ writeD4AsyncResponseRejected()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::D4AsyncUtil::writeD4AsyncResponseRejected (XMLWriterxml,
    RejectReasonCode code,
    string description,
    string * stylesheet_ref = 0 
    )
    -
    - -

    Write the DAP4 ResponseRejected response. Write the DAP4 AsyncRequired in XML form.

    -

    Print the AsyncRequired response to the. Print the AsyncRequired in XML form.

    -
    Parameters
    - - -
    xmlPrint to this XMLWriter instance
    -
    -
    - -

    Definition at line 256 of file D4AsyncUtil.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1D4AsyncUtil.js b/html/classlibdap_1_1D4AsyncUtil.js deleted file mode 100644 index 1bd52f0c9..000000000 --- a/html/classlibdap_1_1D4AsyncUtil.js +++ /dev/null @@ -1,16 +0,0 @@ -var classlibdap_1_1D4AsyncUtil = -[ - [ "D4AsyncUtil", "classlibdap_1_1D4AsyncUtil.html#a42e849d5d33c743a9ebacb3a7fdc17d7", null ], - [ "~D4AsyncUtil", "classlibdap_1_1D4AsyncUtil.html#a875f557391b13daf8c470d5e9f82438d", null ], - [ "getRejectReasonCodeString", "classlibdap_1_1D4AsyncUtil.html#a08431d896452d73549badf87f3612029", null ], - [ "writeD2AsyncAccepted", "classlibdap_1_1D4AsyncUtil.html#a7e37e3382a2058fc8ee79bd13a0ebf58", null ], - [ "writeD2AsyncPending", "classlibdap_1_1D4AsyncUtil.html#a18ffab8b91a82b8a6e31e14db03a1afc", null ], - [ "writeD2AsyncRequired", "classlibdap_1_1D4AsyncUtil.html#acb8335ad353653ec35148f8c38895a54", null ], - [ "writeD2AsyncResponseGone", "classlibdap_1_1D4AsyncUtil.html#aac8992b90c27561f21400e61b94ae3e2", null ], - [ "writeD2AsyncResponseRejected", "classlibdap_1_1D4AsyncUtil.html#a7267613ccd32a033248ee7147d234543", null ], - [ "writeD4AsyncAccepted", "classlibdap_1_1D4AsyncUtil.html#ad7ce372878ff0d5a6ebda401c7e630f6", null ], - [ "writeD4AsyncPending", "classlibdap_1_1D4AsyncUtil.html#a8d8e9c8eb128fc4d8e799f2e7faa3205", null ], - [ "writeD4AsyncRequired", "classlibdap_1_1D4AsyncUtil.html#a9f98ddda0707692370fe2af20f894b45", null ], - [ "writeD4AsyncResponseGone", "classlibdap_1_1D4AsyncUtil.html#ae46e9b6a9eddbd13edbd5a503a8e71dc", null ], - [ "writeD4AsyncResponseRejected", "classlibdap_1_1D4AsyncUtil.html#a398106b8e1d5c52bf23fc7f556bd7d26", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1D4Attribute-members.html b/html/classlibdap_1_1D4Attribute-members.html deleted file mode 100644 index c01c60b11..000000000 --- a/html/classlibdap_1_1D4Attribute-members.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::D4Attribute Member List
    -
    -
    - -

    This is the complete list of members for libdap::D4Attribute, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - -
    add_value(const string &value) (defined in libdap::D4Attribute)libdap::D4Attributeinline
    add_value_vector(const vector< string > &values) (defined in libdap::D4Attribute)libdap::D4Attributeinline
    attributes() (defined in libdap::D4Attribute)libdap::D4Attribute
    D4Attribute() (defined in libdap::D4Attribute)libdap::D4Attributeinline
    D4Attribute(const string &name, D4AttributeType type) (defined in libdap::D4Attribute)libdap::D4Attributeinline
    D4Attribute(const D4Attribute &src) (defined in libdap::D4Attribute)libdap::D4Attribute
    D4AttributeCIter typedef (defined in libdap::D4Attribute)libdap::D4Attribute
    D4AttributeIter typedef (defined in libdap::D4Attribute)libdap::D4Attribute
    dump(ostream &strm) constlibdap::D4Attributevirtual
    name() const (defined in libdap::D4Attribute)libdap::D4Attributeinline
    num_values() const (defined in libdap::D4Attribute)libdap::D4Attributeinline
    operator=(const D4Attribute &rhs) (defined in libdap::D4Attribute)libdap::D4Attribute
    print_dap4(XMLWriter &xml) const (defined in libdap::D4Attribute)libdap::D4Attribute
    set_name(const string &name) (defined in libdap::D4Attribute)libdap::D4Attributeinline
    set_type(D4AttributeType type) (defined in libdap::D4Attribute)libdap::D4Attributeinline
    type() const (defined in libdap::D4Attribute)libdap::D4Attributeinline
    value(unsigned int i) const (defined in libdap::D4Attribute)libdap::D4Attributeinline
    value_begin() (defined in libdap::D4Attribute)libdap::D4Attributeinline
    value_end() (defined in libdap::D4Attribute)libdap::D4Attributeinline
    ~D4Attribute() (defined in libdap::D4Attribute)libdap::D4Attribute
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1D4Attribute.html b/html/classlibdap_1_1D4Attribute.html deleted file mode 100644 index 740a59e2a..000000000 --- a/html/classlibdap_1_1D4Attribute.html +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - -libdap: libdap::D4Attribute Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::D4Attribute Class Reference
    -
    -
    -
    -Inheritance diagram for libdap::D4Attribute:
    -
    -
    Inheritance graph
    - - - -
    - - - - - - -

    -Public Types

    -typedef vector< string >::const_iterator D4AttributeCIter
     
    -typedef vector< string >::iterator D4AttributeIter
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    -void add_value (const string &value)
     
    -void add_value_vector (const vector< string > &values)
     
    -D4Attributesattributes ()
     
    D4Attribute (const string &name, D4AttributeType type)
     
    D4Attribute (const D4Attribute &src)
     
    virtual void dump (ostream &strm) const
     dumps information about this object More...
     
    -string name () const
     
    -unsigned int num_values () const
     
    -D4Attributeoperator= (const D4Attribute &rhs)
     
    -void print_dap4 (XMLWriter &xml) const
     
    -void set_name (const string &name)
     
    -void set_type (D4AttributeType type)
     
    -D4AttributeType type () const
     
    -string value (unsigned int i) const
     
    -D4AttributeIter value_begin ()
     
    -D4AttributeIter value_end ()
     
    -

    Detailed Description

    -
    -

    Definition at line 44 of file D4Attributes.h.

    -

    Member Function Documentation

    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::D4Attribute::dump (ostream & strm) const
    -
    -virtual
    -
    - -

    dumps information about this object

    -

    Displays the pointer value of this instance and then displays information about this base type.

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the information to
    -
    -
    -
    Returns
    void
    - -

    Implements libdap::DapObj.

    - -

    Definition at line 533 of file D4Attributes.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1D4Attribute.js b/html/classlibdap_1_1D4Attribute.js deleted file mode 100644 index 1d854a1ed..000000000 --- a/html/classlibdap_1_1D4Attribute.js +++ /dev/null @@ -1,23 +0,0 @@ -var classlibdap_1_1D4Attribute = -[ - [ "D4AttributeCIter", "classlibdap_1_1D4Attribute.html#a5eeffbe9532d7c3918462f361a1bcf1a", null ], - [ "D4AttributeIter", "classlibdap_1_1D4Attribute.html#ac0191a7e5855c94f91afc7e458832cd5", null ], - [ "D4Attribute", "classlibdap_1_1D4Attribute.html#a954a0392699c1d1a25e9700dcd74e1f4", null ], - [ "D4Attribute", "classlibdap_1_1D4Attribute.html#ad51263d682ce8abbd1a4dc88014b33e4", null ], - [ "D4Attribute", "classlibdap_1_1D4Attribute.html#a592ae893dc8ef53a68de2fa0018fdf52", null ], - [ "~D4Attribute", "classlibdap_1_1D4Attribute.html#a29211c37884cb2e1140a4fbe05eee60d", null ], - [ "add_value", "classlibdap_1_1D4Attribute.html#a9d67f3a325f7ac4e5689aa0b562d9612", null ], - [ "add_value_vector", "classlibdap_1_1D4Attribute.html#a2fda46b086b4ffa46071aaf38f0b0094", null ], - [ "attributes", "classlibdap_1_1D4Attribute.html#a09015c3356a01f3566547b22e4b0f9e9", null ], - [ "dump", "classlibdap_1_1D4Attribute.html#ad0609a07cdfb90a2c1be50b27c60460f", null ], - [ "name", "classlibdap_1_1D4Attribute.html#ada6816db3caf22746632220d4f7a61e0", null ], - [ "num_values", "classlibdap_1_1D4Attribute.html#a912de0ce558c77a6e173c089eaf19288", null ], - [ "operator=", "classlibdap_1_1D4Attribute.html#a844194d3cde586289a7cf3a2d3e02846", null ], - [ "print_dap4", "classlibdap_1_1D4Attribute.html#a30ed7b9a4d987b8b9ad9cfb56b8c3b02", null ], - [ "set_name", "classlibdap_1_1D4Attribute.html#ac4b573346b69dc7396644dbe70b9e666", null ], - [ "set_type", "classlibdap_1_1D4Attribute.html#ac0216f7595e92780256c6e116e75d97f", null ], - [ "type", "classlibdap_1_1D4Attribute.html#ad75700c05d6e7854d1a7a95378c651c8", null ], - [ "value", "classlibdap_1_1D4Attribute.html#ab7defbb147b33cfa239a330253338299", null ], - [ "value_begin", "classlibdap_1_1D4Attribute.html#a5cc3b6984b3e1df94368a8b8a0e78d90", null ], - [ "value_end", "classlibdap_1_1D4Attribute.html#af25240a807be1700e208655d295e7c93", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1D4Attribute__inherit__graph.map b/html/classlibdap_1_1D4Attribute__inherit__graph.map deleted file mode 100644 index e841912b7..000000000 --- a/html/classlibdap_1_1D4Attribute__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/classlibdap_1_1D4Attribute__inherit__graph.md5 b/html/classlibdap_1_1D4Attribute__inherit__graph.md5 deleted file mode 100644 index 224cb3a6d..000000000 --- a/html/classlibdap_1_1D4Attribute__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -e7303814a82a7a106e33857a4a35e3ef \ No newline at end of file diff --git a/html/classlibdap_1_1D4Attribute__inherit__graph.png b/html/classlibdap_1_1D4Attribute__inherit__graph.png deleted file mode 100644 index effa97bc83835a3f63386808422bff0c4bd82b49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15690 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 - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::D4Attributes Member List
    -
    -
    - -

    This is the complete list of members for libdap::D4Attributes, including all inherited members.

    - - - - - - - - - - - - - - - - - - - -
    add_attribute(D4Attribute *attr) (defined in libdap::D4Attributes)libdap::D4Attributesinline
    add_attribute_nocopy(D4Attribute *attr) (defined in libdap::D4Attributes)libdap::D4Attributesinline
    attribute_begin()libdap::D4Attributesinline
    attribute_end()libdap::D4Attributesinline
    D4Attributes() (defined in libdap::D4Attributes)libdap::D4Attributesinline
    D4Attributes(const D4Attributes &rhs) (defined in libdap::D4Attributes)libdap::D4Attributesinline
    D4AttributesCIter typedef (defined in libdap::D4Attributes)libdap::D4Attributes
    D4AttributesIter typedef (defined in libdap::D4Attributes)libdap::D4Attributes
    dump(ostream &strm) constlibdap::D4Attributesvirtual
    empty() const (defined in libdap::D4Attributes)libdap::D4Attributesinline
    find(const string &name) (defined in libdap::D4Attributes)libdap::D4Attributes
    get(const string &fqn)libdap::D4Attributes
    operator=(const D4Attributes &rhs) (defined in libdap::D4Attributes)libdap::D4Attributesinline
    print_dap4(XMLWriter &xml) const (defined in libdap::D4Attributes)libdap::D4Attributes
    transform_attrs_to_dap2(AttrTable *d2_attr_table)libdap::D4Attributes
    transform_to_dap4(AttrTable &at)libdap::D4Attributes
    ~D4Attributes() (defined in libdap::D4Attributes)libdap::D4Attributesinlinevirtual
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1D4Attributes.html b/html/classlibdap_1_1D4Attributes.html deleted file mode 100644 index 8655339aa..000000000 --- a/html/classlibdap_1_1D4Attributes.html +++ /dev/null @@ -1,329 +0,0 @@ - - - - - - - -libdap: libdap::D4Attributes Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::D4Attributes Class Reference
    -
    -
    -
    -Inheritance diagram for libdap::D4Attributes:
    -
    -
    Inheritance graph
    - - - -
    - - - - - - -

    -Public Types

    -typedef vector< D4Attribute * >::const_iterator D4AttributesCIter
     
    -typedef vector< D4Attribute * >::iterator D4AttributesIter
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    -void add_attribute (D4Attribute *attr)
     
    -void add_attribute_nocopy (D4Attribute *attr)
     
    D4AttributesIter attribute_begin ()
     Get an iterator to the start of the enumerations. More...
     
    D4AttributesIter attribute_end ()
     Get an iterator to the end of the enumerations. More...
     
    D4Attributes (const D4Attributes &rhs)
     
    virtual void dump (ostream &strm) const
     dumps information about this object More...
     
    -bool empty () const
     
    -D4Attributefind (const string &name)
     
    D4Attributeget (const string &fqn)
     
    -D4Attributesoperator= (const D4Attributes &rhs)
     
    -void print_dap4 (XMLWriter &xml) const
     
    void transform_attrs_to_dap2 (AttrTable *d2_attr_table)
     Copy the attributes from this D4Attributes object to a DAP2 AttrTable. More...
     
    void transform_to_dap4 (AttrTable &at)
     copy attributes from DAP2 to DAP4 More...
     
    -

    Detailed Description

    -
    -

    Definition at line 94 of file D4Attributes.h.

    -

    Member Function Documentation

    - -

    ◆ attribute_begin()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4AttributesIter libdap::D4Attributes::attribute_begin ()
    -
    -inline
    -
    - -

    Get an iterator to the start of the enumerations.

    - -

    Definition at line 151 of file D4Attributes.h.

    - -
    -
    - -

    ◆ attribute_end()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4AttributesIter libdap::D4Attributes::attribute_end ()
    -
    -inline
    -
    - -

    Get an iterator to the end of the enumerations.

    - -

    Definition at line 154 of file D4Attributes.h.

    - -
    -
    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::D4Attributes::dump (ostream & strm) const
    -
    -virtual
    -
    - -

    dumps information about this object

    -

    Displays the pointer value of this instance and then displays information about this base type.

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the information to
    -
    -
    -
    Returns
    void
    - -

    Implements libdap::DapObj.

    - -

    Definition at line 568 of file D4Attributes.cc.

    - -
    -
    - -

    ◆ get()

    - -
    -
    - - - - - - - - -
    D4Attribute * libdap::D4Attributes::get (const string & fqn)
    -
    -

    Return a pointer to the D4Attribute object that has the given FQN.

    Note
    A FQN for an attribute is a series of names separated by dots.
    - -

    Definition at line 442 of file D4Attributes.cc.

    - -
    -
    - -

    ◆ transform_attrs_to_dap2()

    - -
    -
    - - - - - - - - -
    void libdap::D4Attributes::transform_attrs_to_dap2 (AttrTabled2_attr_table)
    -
    - -

    Copy the attributes from this D4Attributes object to a DAP2 AttrTable.

    -
    Parameters
    - - -
    d2_attr_tableLoad
      -
    • d2_attr_table with the D4Attributes found in this object.
    • -
    -
    -
    -
    - -

    Definition at line 321 of file D4Attributes.cc.

    - -
    -
    - -

    ◆ transform_to_dap4()

    - -
    -
    - - - - - - - - -
    void libdap::D4Attributes::transform_to_dap4 (AttrTableat)
    -
    - -

    copy attributes from DAP2 to DAP4

    -

    Given a DAP2 AttrTable, copy all of its attributes into this DAP4 D4Attributes object as D4Attribute object instances.

    -
    Parameters
    - - -
    atRead the DAP2 attributes from here.
    -
    -
    - -

    Definition at line 196 of file D4Attributes.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1D4Attributes.js b/html/classlibdap_1_1D4Attributes.js deleted file mode 100644 index 2e1e3507c..000000000 --- a/html/classlibdap_1_1D4Attributes.js +++ /dev/null @@ -1,20 +0,0 @@ -var classlibdap_1_1D4Attributes = -[ - [ "D4AttributesCIter", "classlibdap_1_1D4Attributes.html#aff87d5bb2159b4b5879a55ef0380558e", null ], - [ "D4AttributesIter", "classlibdap_1_1D4Attributes.html#af01f6e1bb2a4eb066fefeede5ba24755", null ], - [ "D4Attributes", "classlibdap_1_1D4Attributes.html#a6cdf853f3d58a3dc67254f94c6632620", null ], - [ "D4Attributes", "classlibdap_1_1D4Attributes.html#a1d2d72ae03b5e4310845aad01b249998", null ], - [ "~D4Attributes", "classlibdap_1_1D4Attributes.html#ad731a1e9037d697a5ff81d0497eb2383", null ], - [ "add_attribute", "classlibdap_1_1D4Attributes.html#a373b0dc02b9653c9083d1ae45fb2b1c1", null ], - [ "add_attribute_nocopy", "classlibdap_1_1D4Attributes.html#a30562d531cc32782a6789484cd97b3cc", null ], - [ "attribute_begin", "classlibdap_1_1D4Attributes.html#a759970f338df1b66060f0607c35d4f52", null ], - [ "attribute_end", "classlibdap_1_1D4Attributes.html#a8584405e7329078e51364cdbb27a3092", null ], - [ "dump", "classlibdap_1_1D4Attributes.html#adefff20cb6cdcf82469529c7b309a910", null ], - [ "empty", "classlibdap_1_1D4Attributes.html#a90815497f4ab6b29238a8ef3d05a58e7", null ], - [ "find", "classlibdap_1_1D4Attributes.html#a053c7c806e4a21151957abfa751131c9", null ], - [ "get", "classlibdap_1_1D4Attributes.html#a2a7201c33ab93bfbd7b876ba8e93444f", null ], - [ "operator=", "classlibdap_1_1D4Attributes.html#a6440e0f4c9a1b0b2788e5e06b625224b", null ], - [ "print_dap4", "classlibdap_1_1D4Attributes.html#a8a68331e0e50bc4d708b35b95d4addc0", null ], - [ "transform_attrs_to_dap2", "classlibdap_1_1D4Attributes.html#abcc9c129081018d9c4c411052382caaa", null ], - [ "transform_to_dap4", "classlibdap_1_1D4Attributes.html#a1dfd8c42a188d627be7d11857fe723b6", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1D4Attributes__inherit__graph.map b/html/classlibdap_1_1D4Attributes__inherit__graph.map deleted file mode 100644 index f2fdc70bd..000000000 --- a/html/classlibdap_1_1D4Attributes__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/classlibdap_1_1D4Attributes__inherit__graph.md5 b/html/classlibdap_1_1D4Attributes__inherit__graph.md5 deleted file mode 100644 index 86d318608..000000000 --- a/html/classlibdap_1_1D4Attributes__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -0245752d3e733c766ca1fa34ad2bea37 \ No newline at end of file diff --git a/html/classlibdap_1_1D4Attributes__inherit__graph.png b/html/classlibdap_1_1D4Attributes__inherit__graph.png deleted file mode 100644 index a5ab6f52f03c78e8033496aa4974c29b0cda14d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21599 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 CEcTfI diff --git a/html/classlibdap_1_1D4BaseTypeFactory-members.html b/html/classlibdap_1_1D4BaseTypeFactory-members.html deleted file mode 100644 index 37f08722c..000000000 --- a/html/classlibdap_1_1D4BaseTypeFactory-members.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::D4BaseTypeFactory Member List
    -
    -
    - -

    This is the complete list of members for libdap::D4BaseTypeFactory, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    BaseTypeFactory() (defined in libdap::BaseTypeFactory)libdap::BaseTypeFactoryinline
    D4BaseTypeFactory() (defined in libdap::D4BaseTypeFactory)libdap::D4BaseTypeFactoryinline
    NewArray(const string &n="", BaseType *v=0) const (defined in libdap::D4BaseTypeFactory)libdap::D4BaseTypeFactoryvirtual
    NewByte(const string &n="") const (defined in libdap::D4BaseTypeFactory)libdap::D4BaseTypeFactoryvirtual
    NewChar(const string &n="") const (defined in libdap::D4BaseTypeFactory)libdap::D4BaseTypeFactoryvirtual
    NewD4Sequence(const string &n="") const (defined in libdap::D4BaseTypeFactory)libdap::D4BaseTypeFactoryvirtual
    NewEnum(const string &n="", Type type=dods_null_c) constlibdap::D4BaseTypeFactoryvirtual
    NewFloat32(const string &n="") const (defined in libdap::D4BaseTypeFactory)libdap::D4BaseTypeFactoryvirtual
    NewFloat64(const string &n="") const (defined in libdap::D4BaseTypeFactory)libdap::D4BaseTypeFactoryvirtual
    NewGrid(const string &n="") const (defined in libdap::BaseTypeFactory)libdap::BaseTypeFactoryvirtual
    NewGroup(const string &n="") const (defined in libdap::D4BaseTypeFactory)libdap::D4BaseTypeFactoryvirtual
    NewInt16(const string &n="") const (defined in libdap::D4BaseTypeFactory)libdap::D4BaseTypeFactoryvirtual
    NewInt32(const string &n="") const (defined in libdap::D4BaseTypeFactory)libdap::D4BaseTypeFactoryvirtual
    NewInt64(const string &n="") const (defined in libdap::D4BaseTypeFactory)libdap::D4BaseTypeFactoryvirtual
    NewInt8(const string &n="") const (defined in libdap::D4BaseTypeFactory)libdap::D4BaseTypeFactoryvirtual
    NewOpaque(const string &n="") const (defined in libdap::D4BaseTypeFactory)libdap::D4BaseTypeFactoryvirtual
    NewSequence(const string &n="") const (defined in libdap::BaseTypeFactory)libdap::BaseTypeFactoryvirtual
    NewStr(const string &n="") const (defined in libdap::D4BaseTypeFactory)libdap::D4BaseTypeFactoryvirtual
    NewStructure(const string &n="") const (defined in libdap::D4BaseTypeFactory)libdap::D4BaseTypeFactoryvirtual
    NewUInt16(const string &n="") const (defined in libdap::D4BaseTypeFactory)libdap::D4BaseTypeFactoryvirtual
    NewUInt32(const string &n="") const (defined in libdap::D4BaseTypeFactory)libdap::D4BaseTypeFactoryvirtual
    NewUInt64(const string &n="") const (defined in libdap::D4BaseTypeFactory)libdap::D4BaseTypeFactoryvirtual
    NewUInt8(const string &n="") const (defined in libdap::D4BaseTypeFactory)libdap::D4BaseTypeFactoryvirtual
    NewUrl(const string &n="") const (defined in libdap::D4BaseTypeFactory)libdap::D4BaseTypeFactoryvirtual
    NewURL(const string &n="") constlibdap::D4BaseTypeFactoryvirtual
    NewVariable(Type t, const string &name) constlibdap::D4BaseTypeFactoryvirtual
    ptr_duplicate() constlibdap::D4BaseTypeFactoryinlinevirtual
    ~BaseTypeFactory() (defined in libdap::BaseTypeFactory)libdap::BaseTypeFactoryinlinevirtual
    ~D4BaseTypeFactory() (defined in libdap::D4BaseTypeFactory)libdap::D4BaseTypeFactoryinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1D4BaseTypeFactory.html b/html/classlibdap_1_1D4BaseTypeFactory.html deleted file mode 100644 index 1fc0e97ee..000000000 --- a/html/classlibdap_1_1D4BaseTypeFactory.html +++ /dev/null @@ -1,330 +0,0 @@ - - - - - - - -libdap: libdap::D4BaseTypeFactory Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::D4BaseTypeFactory Class Reference
    -
    -
    - -

    #include <D4BaseTypeFactory.h>

    -
    -Inheritance diagram for libdap::D4BaseTypeFactory:
    -
    -
    Inheritance graph
    - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    -virtual ArrayNewArray (const string &n="", BaseType *v=0) const
     
    -virtual ByteNewByte (const string &n="") const
     
    -virtual ByteNewChar (const string &n="") const
     
    -virtual D4SequenceNewD4Sequence (const string &n="") const
     
    virtual D4EnumNewEnum (const string &n="", Type type=dods_null_c) const
     
    -virtual Float32NewFloat32 (const string &n="") const
     
    -virtual Float64NewFloat64 (const string &n="") const
     
    -virtual GridNewGrid (const string &n="") const
     
    -virtual D4GroupNewGroup (const string &n="") const
     
    -virtual Int16NewInt16 (const string &n="") const
     
    -virtual Int32NewInt32 (const string &n="") const
     
    -virtual Int64NewInt64 (const string &n="") const
     
    -virtual Int8NewInt8 (const string &n="") const
     
    -virtual D4OpaqueNewOpaque (const string &n="") const
     
    -virtual SequenceNewSequence (const string &n="") const
     
    -virtual StrNewStr (const string &n="") const
     
    -virtual StructureNewStructure (const string &n="") const
     
    -virtual UInt16NewUInt16 (const string &n="") const
     
    -virtual UInt32NewUInt32 (const string &n="") const
     
    -virtual UInt64NewUInt64 (const string &n="") const
     
    -virtual ByteNewUInt8 (const string &n="") const
     
    -virtual UrlNewUrl (const string &n="") const
     
    virtual UrlNewURL (const string &n="") const
     
    virtual BaseTypeNewVariable (Type t, const string &name) const
     
    virtual BaseTypeFactoryptr_duplicate () const
     
    -

    Detailed Description

    -

    Return instances of objects that are to be stored in a DDS for a DAP4 dataset.

    - -

    Definition at line 72 of file D4BaseTypeFactory.h.

    -

    Member Function Documentation

    - -

    ◆ NewEnum()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    D4Enum * libdap::D4BaseTypeFactory::NewEnum (const string & name = "",
    Type type = dods_null_c 
    ) const
    -
    -virtual
    -
    -

    Enums need a name and the name of an enumeration that was defined by the dataset. If the later is not known, it must be set before the enum is used.

    Parameters
    - - - -
    name
    enum_name
    -
    -
    -
    Returns
    - -

    Definition at line 234 of file D4BaseTypeFactory.cc.

    - -
    -
    - -

    ◆ NewURL()

    - -
    -
    - - - - - -
    - - - - - - - - -
    Url * libdap::D4BaseTypeFactory::NewURL (const string & n = "") const
    -
    -virtual
    -
    -

    Note that this method is called NewURL - URL in caps.

    - -

    Definition at line 265 of file D4BaseTypeFactory.cc.

    - -
    -
    - -

    ◆ NewVariable()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::D4BaseTypeFactory::NewVariable (Type t,
    const string & name 
    ) const
    -
    -virtual
    -
    -

    Build a new variable and return it using a BaseType pointer. The type of the variable is given using Type enumeration.

    -
    Note
    Added for DAP4
    -
    Parameters
    - - -
    tThe type of the variable to create name The (optional) name of the variable.
    -
    -
    - -

    Reimplemented from libdap::BaseTypeFactory.

    - -

    Definition at line 65 of file D4BaseTypeFactory.cc.

    - -
    -
    - -

    ◆ ptr_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual BaseTypeFactory* libdap::D4BaseTypeFactory::ptr_duplicate () const
    -
    -inlinevirtual
    -
    -

    Clone this object and return a pointer to the clone.

    -
    Note
    added for DAP4
    - -

    Reimplemented from libdap::BaseTypeFactory.

    - -

    Definition at line 82 of file D4BaseTypeFactory.h.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1D4BaseTypeFactory.js b/html/classlibdap_1_1D4BaseTypeFactory.js deleted file mode 100644 index 6fc22bc9a..000000000 --- a/html/classlibdap_1_1D4BaseTypeFactory.js +++ /dev/null @@ -1,30 +0,0 @@ -var classlibdap_1_1D4BaseTypeFactory = -[ - [ "D4BaseTypeFactory", "classlibdap_1_1D4BaseTypeFactory.html#a7a884b7d89c1fc2088ece1dabd87a7e7", null ], - [ "~D4BaseTypeFactory", "classlibdap_1_1D4BaseTypeFactory.html#aa06257e3923ab6a973e27ee834e78795", null ], - [ "NewArray", "classlibdap_1_1D4BaseTypeFactory.html#ada1408f514d46f12ef5341caadb5eae2", null ], - [ "NewByte", "classlibdap_1_1D4BaseTypeFactory.html#a26c1bed3e5dd4bba5422520b61a12d96", null ], - [ "NewChar", "classlibdap_1_1D4BaseTypeFactory.html#af34c6e3ca9ae23fd84cdc2ddbd272a61", null ], - [ "NewD4Sequence", "classlibdap_1_1D4BaseTypeFactory.html#a4eb32f5b4a100182e1c52fc385bc85ef", null ], - [ "NewEnum", "classlibdap_1_1D4BaseTypeFactory.html#aa8100d8119cc1ffcc4875b144cfa347f", null ], - [ "NewFloat32", "classlibdap_1_1D4BaseTypeFactory.html#a3914155606394c5daded56ccca4c54ce", null ], - [ "NewFloat64", "classlibdap_1_1D4BaseTypeFactory.html#ae511294671d2386c6652bfa48a843a7d", null ], - [ "NewGrid", "classlibdap_1_1D4BaseTypeFactory.html#a44b70b9301d146261db6ac3c5f74e511", null ], - [ "NewGroup", "classlibdap_1_1D4BaseTypeFactory.html#ac50c5665a27807b3e5c9d95bfb0cf35c", null ], - [ "NewInt16", "classlibdap_1_1D4BaseTypeFactory.html#a0e4dc091e48a77a95c4e43b55c39997f", null ], - [ "NewInt32", "classlibdap_1_1D4BaseTypeFactory.html#add23eaf62d681ee9039e9dc5860a567e", null ], - [ "NewInt64", "classlibdap_1_1D4BaseTypeFactory.html#ac2ee621cca64234bb751753f7d67d334", null ], - [ "NewInt8", "classlibdap_1_1D4BaseTypeFactory.html#aea64d154912d5f3642c0416eaced3f6a", null ], - [ "NewOpaque", "classlibdap_1_1D4BaseTypeFactory.html#a53614e26fc98ea6cda25e288cb8a8115", null ], - [ "NewSequence", "classlibdap_1_1D4BaseTypeFactory.html#ab41dd430aeff02683be5a396da770ba7", null ], - [ "NewStr", "classlibdap_1_1D4BaseTypeFactory.html#a42edd7ef61ad81675e916dc0dd0c6726", null ], - [ "NewStructure", "classlibdap_1_1D4BaseTypeFactory.html#a80dcf6ff77a380a232e2747db73208a5", null ], - [ "NewUInt16", "classlibdap_1_1D4BaseTypeFactory.html#ab8c867b00d67c7265a91be34a34238a2", null ], - [ "NewUInt32", "classlibdap_1_1D4BaseTypeFactory.html#a11225902c4ab0b94a85ab46ffb0ede30", null ], - [ "NewUInt64", "classlibdap_1_1D4BaseTypeFactory.html#a26218490e2d9812a6da1cb5eac5c4528", null ], - [ "NewUInt8", "classlibdap_1_1D4BaseTypeFactory.html#aa3cc29a25b3e049ba5b4a65d1d06f8d3", null ], - [ "NewUrl", "classlibdap_1_1D4BaseTypeFactory.html#af63678cd058a2332483354aa7d9b5479", null ], - [ "NewURL", "classlibdap_1_1D4BaseTypeFactory.html#aff5d085d548134aa931dbf3527249b0a", null ], - [ "NewVariable", "classlibdap_1_1D4BaseTypeFactory.html#ad1ba5f8a8aa850d5eb66b1b398013180", null ], - [ "ptr_duplicate", "classlibdap_1_1D4BaseTypeFactory.html#a134cf00bb72aacbd3ce737c35f575168", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1D4BaseTypeFactory__inherit__graph.map b/html/classlibdap_1_1D4BaseTypeFactory__inherit__graph.map deleted file mode 100644 index 9f76b1710..000000000 --- a/html/classlibdap_1_1D4BaseTypeFactory__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/classlibdap_1_1D4BaseTypeFactory__inherit__graph.md5 b/html/classlibdap_1_1D4BaseTypeFactory__inherit__graph.md5 deleted file mode 100644 index 6effa1a3c..000000000 --- a/html/classlibdap_1_1D4BaseTypeFactory__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -8715bc84ee803830b1bc218917d2d0ff \ No newline at end of file diff --git a/html/classlibdap_1_1D4BaseTypeFactory__inherit__graph.png b/html/classlibdap_1_1D4BaseTypeFactory__inherit__graph.png deleted file mode 100644 index 929d0e6ec94c108df18119f8558efa76161ca317..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30297 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 - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::D4CEScanner Member List
    -
    -
    - -

    This is the complete list of members for libdap::D4CEScanner, including all inherited members.

    - - - -
    D4CEScanner(std::istream &in) (defined in libdap::D4CEScanner)libdap::D4CEScannerinline
    yylex(libdap::D4CEParser::semantic_type *lval, libdap::location *l) (defined in libdap::D4CEScanner)libdap::D4CEScannerinline
    -
    - - - - diff --git a/html/classlibdap_1_1D4CEScanner.html b/html/classlibdap_1_1D4CEScanner.html deleted file mode 100644 index 70d070cb5..000000000 --- a/html/classlibdap_1_1D4CEScanner.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - -libdap: libdap::D4CEScanner Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::D4CEScanner Class Reference
    -
    -
    -
    -Inheritance diagram for libdap::D4CEScanner:
    -
    -
    Inheritance graph
    - - - -
    - - - - - - -

    -Public Member Functions

    D4CEScanner (std::istream &in)
     
    -int yylex (libdap::D4CEParser::semantic_type *lval, libdap::location *l)
     
    -

    Detailed Description

    -
    -

    Definition at line 52 of file D4CEScanner.h.

    -

    The documentation for this class was generated from the following file: -
    -
    - - - - diff --git a/html/classlibdap_1_1D4CEScanner.js b/html/classlibdap_1_1D4CEScanner.js deleted file mode 100644 index 77e2f21c9..000000000 --- a/html/classlibdap_1_1D4CEScanner.js +++ /dev/null @@ -1,5 +0,0 @@ -var classlibdap_1_1D4CEScanner = -[ - [ "D4CEScanner", "classlibdap_1_1D4CEScanner.html#adcb9491e49f4e1969320b2efcbdff4ce", null ], - [ "yylex", "classlibdap_1_1D4CEScanner.html#ac811dd880a0c52c387f2890d4e7f9ced", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1D4CEScanner__inherit__graph.map b/html/classlibdap_1_1D4CEScanner__inherit__graph.map deleted file mode 100644 index 4c7ff1f70..000000000 --- a/html/classlibdap_1_1D4CEScanner__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/classlibdap_1_1D4CEScanner__inherit__graph.md5 b/html/classlibdap_1_1D4CEScanner__inherit__graph.md5 deleted file mode 100644 index 3a7ea3b50..000000000 --- a/html/classlibdap_1_1D4CEScanner__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -b52e7fb733d1eebc5f988fba8bd057b4 \ No newline at end of file diff --git a/html/classlibdap_1_1D4CEScanner__inherit__graph.png b/html/classlibdap_1_1D4CEScanner__inherit__graph.png deleted file mode 100644 index 74350a44b79a1ef04118216e7943a9d374d7164d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7707 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 - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::D4Connect Member List
    -
    -
    - -

    This is the complete list of members for libdap::D4Connect, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - -
    CE() const (defined in libdap::D4Connect)libdap::D4Connectinlinevirtual
    D4Connect() (defined in libdap::D4Connect)libdap::D4Connectprotected
    D4Connect(const D4Connect &) (defined in libdap::D4Connect)libdap::D4Connectprotected
    D4Connect(const std::string &url, std::string uname="", std::string password="")libdap::D4Connect
    get_protocol()libdap::D4Connectinline
    get_version()libdap::D4Connectinline
    is_cache_enabled() (defined in libdap::D4Connect)libdap::D4Connect
    is_local() const (defined in libdap::D4Connect)libdap::D4Connectinline
    operator=(const D4Connect &) (defined in libdap::D4Connect)libdap::D4Connectprotected
    read_data(DMR &data, Response &rs) (defined in libdap::D4Connect)libdap::D4Connectvirtual
    read_data_no_mime(DMR &data, Response &rs) (defined in libdap::D4Connect)libdap::D4Connectvirtual
    read_dmr(DMR &dmr, Response &rs) (defined in libdap::D4Connect)libdap::D4Connectvirtual
    read_dmr_no_mime(DMR &dmr, Response &rs) (defined in libdap::D4Connect)libdap::D4Connectvirtual
    request_dap4_data(DMR &dmr, const std::string expr="") (defined in libdap::D4Connect)libdap::D4Connectvirtual
    request_dmr(DMR &dmr, const std::string expr="") (defined in libdap::D4Connect)libdap::D4Connectvirtual
    set_accept_deflate(bool deflate)libdap::D4Connect
    set_cache_enabled(bool enabled)libdap::D4Connect
    set_credentials(std::string u, std::string p)libdap::D4Connect
    set_xdap_accept(int major, int minor) (defined in libdap::D4Connect)libdap::D4Connect
    set_xdap_protocol(int major, int minor)libdap::D4Connect
    URL() const (defined in libdap::D4Connect)libdap::D4Connectinlinevirtual
    ~D4Connect() (defined in libdap::D4Connect)libdap::D4Connectvirtual
    -
    - - - - diff --git a/html/classlibdap_1_1D4Connect.html b/html/classlibdap_1_1D4Connect.html deleted file mode 100644 index feeafd170..000000000 --- a/html/classlibdap_1_1D4Connect.html +++ /dev/null @@ -1,384 +0,0 @@ - - - - - - - -libdap: libdap::D4Connect Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::D4Connect Class Reference
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Suppress the C++ defaults for these.

    D4Connect ()
     
    D4Connect (const D4Connect &)
     
    -D4Connectoperator= (const D4Connect &)
     
     D4Connect (const std::string &url, std::string uname="", std::string password="")
     Create an instance of Connect. More...
     
    -virtual ~D4Connect ()
     
    -bool is_local () const
     
    -virtual std::string URL () const
     
    -virtual std::string CE () const
     
    void set_credentials (std::string u, std::string p)
     Set the credentials for responding to challenges while dereferencing URLs. More...
     
    void set_accept_deflate (bool deflate)
     
    void set_xdap_protocol (int major, int minor)
     
    void set_cache_enabled (bool enabled)
     
    -bool is_cache_enabled ()
     
    -void set_xdap_accept (int major, int minor)
     
    std::string get_version ()
     
    std::string get_protocol ()
     
    -virtual void request_dmr (DMR &dmr, const std::string expr="")
     
    -virtual void request_dap4_data (DMR &dmr, const std::string expr="")
     
    -virtual void read_dmr (DMR &dmr, Response &rs)
     
    -virtual void read_dmr_no_mime (DMR &dmr, Response &rs)
     
    -virtual void read_data (DMR &data, Response &rs)
     
    -virtual void read_data_no_mime (DMR &data, Response &rs)
     
    -

    Detailed Description

    -
    -

    Definition at line 40 of file D4Connect.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ D4Connect()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    libdap::D4Connect::D4Connect (const std::string & url,
    std::string uname = "",
    std::string password = "" 
    )
    -
    - -

    Create an instance of Connect.

    -

    The D4Connect constructor requires a URL or local file.

    -
    Parameters
    - - - - -
    nThe URL for the virtual connection.
    unameUse this username for authentication. Null by default.
    passwordPassword to use for authentication. Null by default.
    -
    -
    - -

    Definition at line 242 of file D4Connect.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ get_protocol()

    - -
    -
    - - - - - -
    - - - - - - - -
    std::string libdap::D4Connect::get_protocol ()
    -
    -inline
    -
    -

    Return the DAP protocol version of the most recent response. Before a response is made, this contains the std::string "2.0."

    - -

    Definition at line 99 of file D4Connect.h.

    - -
    -
    - -

    ◆ get_version()

    - -
    -
    - - - - - -
    - - - - - - - -
    std::string libdap::D4Connect::get_version ()
    -
    -inline
    -
    -

    Return the protocol/implementation version of the most recent response. This is a poorly designed method, but it returns information that is useful when used correctly. Before a response is made, this contains the std::string "unknown." This should ultimately hold the protocol version; it currently holds the implementation version.

    @see get_protocol()
    -
    Deprecated:
    - -

    Definition at line 94 of file D4Connect.h.

    - -
    -
    - -

    ◆ set_accept_deflate()

    - -
    -
    - - - - - - - - -
    void libdap::D4Connect::set_accept_deflate (bool deflate)
    -
    -

    Set the accept deflate property.

    Parameters
    - - -
    deflateTrue if the client can accept compressed responses, False otherwise.
    -
    -
    - -

    Definition at line 483 of file D4Connect.cc.

    - -
    -
    - -

    ◆ set_cache_enabled()

    - -
    -
    - - - - - - - - -
    void libdap::D4Connect::set_cache_enabled (bool cache)
    -
    -

    Disable any further use of the client-side cache. In a future version of this software, this should be handled so that the www library is not initialized with the cache running by default.

    - -

    Definition at line 501 of file D4Connect.cc.

    - -
    -
    - -

    ◆ set_credentials()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void libdap::D4Connect::set_credentials (std::string u,
    std::string p 
    )
    -
    - -

    Set the credentials for responding to challenges while dereferencing URLs.

    -
    Parameters
    - - - -
    uThe username.
    pThe password.
    -
    -
    -
    See also
    extract_auth_info()
    - -

    Definition at line 475 of file D4Connect.cc.

    - -
    -
    - -

    ◆ set_xdap_protocol()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void libdap::D4Connect::set_xdap_protocol (int major,
    int minor 
    )
    -
    -

    Set the XDAP-Accept property/header. This is used to send to a server the (highest) DAP protocol version number that this client understands.

    -
    Parameters
    - - - -
    majorThe client dap protocol major version
    minorThe client dap protocol minor version
    -
    -
    - -

    Definition at line 493 of file D4Connect.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1D4Connect.js b/html/classlibdap_1_1D4Connect.js deleted file mode 100644 index 56942c012..000000000 --- a/html/classlibdap_1_1D4Connect.js +++ /dev/null @@ -1,25 +0,0 @@ -var classlibdap_1_1D4Connect = -[ - [ "D4Connect", "classlibdap_1_1D4Connect.html#ae47fadcaad41ff4eaa90fcbcd43de83e", null ], - [ "D4Connect", "classlibdap_1_1D4Connect.html#a052c65e1eb3c1b42b747cf96143e8e86", null ], - [ "D4Connect", "classlibdap_1_1D4Connect.html#a03973f6a80a96bdbe031dc03d869221d", null ], - [ "~D4Connect", "classlibdap_1_1D4Connect.html#a140e2390fd31fcc817bf574c3c73a116", null ], - [ "CE", "classlibdap_1_1D4Connect.html#abc87a0902e3e31e29cafeec1a05d30d2", null ], - [ "get_protocol", "classlibdap_1_1D4Connect.html#a1ab3646633cc0049c281dc1f855b76e2", null ], - [ "get_version", "classlibdap_1_1D4Connect.html#ad778bc535395b26df0b15870760086d9", null ], - [ "is_cache_enabled", "classlibdap_1_1D4Connect.html#acbf08dd9e8ee9cf0171e1f420108cce0", null ], - [ "is_local", "classlibdap_1_1D4Connect.html#a0dd879db1e9bf3d113df3a2ce25d66d9", null ], - [ "operator=", "classlibdap_1_1D4Connect.html#a9e4c0f9c971c7e8f6da7c8f4c0b84257", null ], - [ "read_data", "classlibdap_1_1D4Connect.html#a2bf5e3ca807062b1d33f982219aa09f2", null ], - [ "read_data_no_mime", "classlibdap_1_1D4Connect.html#a267e3f4184faabcbcf9c3093eacc714c", null ], - [ "read_dmr", "classlibdap_1_1D4Connect.html#a665c1cf50724276ecdb90a3325af24d0", null ], - [ "read_dmr_no_mime", "classlibdap_1_1D4Connect.html#a11c7025926c0fa2ff997058996afe7ef", null ], - [ "request_dap4_data", "classlibdap_1_1D4Connect.html#a282312af221a221719367b0038d8a0e2", null ], - [ "request_dmr", "classlibdap_1_1D4Connect.html#a3fb6d2a7764fc414c68358e890aa3c52", null ], - [ "set_accept_deflate", "classlibdap_1_1D4Connect.html#a380e999d58c53bd1d6911bafbb0654ee", null ], - [ "set_cache_enabled", "classlibdap_1_1D4Connect.html#a85c1176feebb30cd484c6ef20c22e01d", null ], - [ "set_credentials", "classlibdap_1_1D4Connect.html#ab124422662436dc0ede86cd1b3e4f467", null ], - [ "set_xdap_accept", "classlibdap_1_1D4Connect.html#a2f03566f53ec96f965ff043ce5825d33", null ], - [ "set_xdap_protocol", "classlibdap_1_1D4Connect.html#a86734a9dd1c1de2017548cc54afd01e3", null ], - [ "URL", "classlibdap_1_1D4Connect.html#aa41d2a07551e40a5e77739294937489f", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1D4ConstraintEvaluator-members.html b/html/classlibdap_1_1D4ConstraintEvaluator-members.html deleted file mode 100644 index e05ec3b14..000000000 --- a/html/classlibdap_1_1D4ConstraintEvaluator-members.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::D4ConstraintEvaluator Member List
    -
    -
    - -

    This is the complete list of members for libdap::D4ConstraintEvaluator, including all inherited members.

    - - - - - - - - - - - - - - - -
    D4CEParser (defined in libdap::D4ConstraintEvaluator)libdap::D4ConstraintEvaluatorfriend
    D4ConstraintEvaluator() (defined in libdap::D4ConstraintEvaluator)libdap::D4ConstraintEvaluatorinline
    D4ConstraintEvaluator(DMR *dmr) (defined in libdap::D4ConstraintEvaluator)libdap::D4ConstraintEvaluatorinline
    dmr() const (defined in libdap::D4ConstraintEvaluator)libdap::D4ConstraintEvaluatorinline
    error(const libdap::location &l, const std::string &m) (defined in libdap::D4ConstraintEvaluator)libdap::D4ConstraintEvaluator
    parse(const std::string &expr) (defined in libdap::D4ConstraintEvaluator)libdap::D4ConstraintEvaluator
    result() const (defined in libdap::D4ConstraintEvaluator)libdap::D4ConstraintEvaluatorinline
    set_dmr(DMR *dmr) (defined in libdap::D4ConstraintEvaluator)libdap::D4ConstraintEvaluatorinline
    set_result(bool r) (defined in libdap::D4ConstraintEvaluator)libdap::D4ConstraintEvaluatorinline
    set_trace_parsing(bool tp) (defined in libdap::D4ConstraintEvaluator)libdap::D4ConstraintEvaluatorinline
    set_trace_scanning(bool ts) (defined in libdap::D4ConstraintEvaluator)libdap::D4ConstraintEvaluatorinline
    trace_parsing() const (defined in libdap::D4ConstraintEvaluator)libdap::D4ConstraintEvaluatorinline
    trace_scanning() const (defined in libdap::D4ConstraintEvaluator)libdap::D4ConstraintEvaluatorinline
    ~D4ConstraintEvaluator() (defined in libdap::D4ConstraintEvaluator)libdap::D4ConstraintEvaluatorinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1D4ConstraintEvaluator.html b/html/classlibdap_1_1D4ConstraintEvaluator.html deleted file mode 100644 index 2e2321da3..000000000 --- a/html/classlibdap_1_1D4ConstraintEvaluator.html +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - - -libdap: libdap::D4ConstraintEvaluator Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::D4ConstraintEvaluator Class Reference
    -
    -
    - -

    #include <D4ConstraintEvaluator.h>

    - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    D4ConstraintEvaluator (DMR *dmr)
     
    -DMRdmr () const
     
    -void error (const libdap::location &l, const std::string &m)
     
    -bool parse (const std::string &expr)
     
    -bool result () const
     
    -void set_dmr (DMR *dmr)
     
    -void set_result (bool r)
     
    -void set_trace_parsing (bool tp)
     
    -void set_trace_scanning (bool ts)
     
    -bool trace_parsing () const
     
    -bool trace_scanning () const
     
    - - - -

    -Friends

    -class D4CEParser
     
    -

    Detailed Description

    -

    Driver for the DAP4 Constraint Expression parser.

    - -

    Definition at line 46 of file D4ConstraintEvaluator.h.

    -

    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1D4ConstraintEvaluator.js b/html/classlibdap_1_1D4ConstraintEvaluator.js deleted file mode 100644 index eb157fb0f..000000000 --- a/html/classlibdap_1_1D4ConstraintEvaluator.js +++ /dev/null @@ -1,17 +0,0 @@ -var classlibdap_1_1D4ConstraintEvaluator = -[ - [ "D4ConstraintEvaluator", "classlibdap_1_1D4ConstraintEvaluator.html#a54248b202845a3c195400a9c2d0cfc93", null ], - [ "D4ConstraintEvaluator", "classlibdap_1_1D4ConstraintEvaluator.html#a87d4cbb38469bc8a33824060e8ebc9aa", null ], - [ "~D4ConstraintEvaluator", "classlibdap_1_1D4ConstraintEvaluator.html#ac48e08c1d80e518c70683f83462bf0bd", null ], - [ "dmr", "classlibdap_1_1D4ConstraintEvaluator.html#a651c247fd019a07e2dc8cb733f9700f7", null ], - [ "error", "classlibdap_1_1D4ConstraintEvaluator.html#a84e156d695af645943e92b4e965fcf49", null ], - [ "parse", "classlibdap_1_1D4ConstraintEvaluator.html#a6ac0c5000a0db175549ce085b1faa363", null ], - [ "result", "classlibdap_1_1D4ConstraintEvaluator.html#a5f5ec63627126c5d45885ef51453fd0c", null ], - [ "set_dmr", "classlibdap_1_1D4ConstraintEvaluator.html#a440e0a889f83b32cf00b918b4d270fc7", null ], - [ "set_result", "classlibdap_1_1D4ConstraintEvaluator.html#a08920466aefa6c7c75beec1c7f3f029f", null ], - [ "set_trace_parsing", "classlibdap_1_1D4ConstraintEvaluator.html#a759213bd75a98bbf96525bf57cd7a4c2", null ], - [ "set_trace_scanning", "classlibdap_1_1D4ConstraintEvaluator.html#a3f3513e31ab66c76eba77c89529620b7", null ], - [ "trace_parsing", "classlibdap_1_1D4ConstraintEvaluator.html#a994e94fe7faa53dff81256511f200b65", null ], - [ "trace_scanning", "classlibdap_1_1D4ConstraintEvaluator.html#afe86d58ff6e74effd8d4cfa7b26720c0", null ], - [ "D4CEParser", "classlibdap_1_1D4ConstraintEvaluator.html#a1109c669dcd6d48c26b8f291bb610aab", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1D4Dimension-members.html b/html/classlibdap_1_1D4Dimension-members.html deleted file mode 100644 index 4b170d869..000000000 --- a/html/classlibdap_1_1D4Dimension-members.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::D4Dimension Member List
    -
    -
    - -

    This is the complete list of members for libdap::D4Dimension, including all inherited members.

    - - - - - - - - - - - - - - - - - - - -
    c_start() const (defined in libdap::D4Dimension)libdap::D4Dimensioninline
    c_stop() const (defined in libdap::D4Dimension)libdap::D4Dimensioninline
    c_stride() const (defined in libdap::D4Dimension)libdap::D4Dimensioninline
    constrained() const (defined in libdap::D4Dimension)libdap::D4Dimensioninline
    D4Dimension() (defined in libdap::D4Dimension)libdap::D4Dimensioninline
    D4Dimension(const string &name, unsigned long size, D4Dimensions *d=0) (defined in libdap::D4Dimension)libdap::D4Dimensioninline
    fully_qualified_name() constlibdap::D4Dimension
    name() const (defined in libdap::D4Dimension)libdap::D4Dimensioninline
    parent() const (defined in libdap::D4Dimension)libdap::D4Dimensioninline
    print_dap4(XMLWriter &xml) constlibdap::D4Dimension
    set_constraint(unsigned long long start, unsigned long long stride, unsigned long long stop)libdap::D4Dimensioninline
    set_name(const string &name) (defined in libdap::D4Dimension)libdap::D4Dimensioninline
    set_parent(D4Dimensions *d) (defined in libdap::D4Dimension)libdap::D4Dimensioninline
    set_size(unsigned long size) (defined in libdap::D4Dimension)libdap::D4Dimensioninline
    set_size(const string &size) (defined in libdap::D4Dimension)libdap::D4Dimension
    set_used_by_projected_var(bool state) (defined in libdap::D4Dimension)libdap::D4Dimensioninline
    size() const (defined in libdap::D4Dimension)libdap::D4Dimensioninline
    used_by_projected_var() const (defined in libdap::D4Dimension)libdap::D4Dimensioninline
    -
    - - - - diff --git a/html/classlibdap_1_1D4Dimension.html b/html/classlibdap_1_1D4Dimension.html deleted file mode 100644 index 12a9b2f86..000000000 --- a/html/classlibdap_1_1D4Dimension.html +++ /dev/null @@ -1,247 +0,0 @@ - - - - - - - -libdap: libdap::D4Dimension Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::D4Dimension Class Reference
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    -unsigned long long c_start () const
     
    -unsigned long long c_stop () const
     
    -unsigned long long c_stride () const
     
    -bool constrained () const
     
    D4Dimension (const string &name, unsigned long size, D4Dimensions *d=0)
     
    string fully_qualified_name () const
     Get the FQN for the dimension. More...
     
    -string name () const
     
    -D4Dimensionsparent () const
     
    void print_dap4 (XMLWriter &xml) const
     Print the Dimension declaration. Print the Dimension in a form suitable for use in a Group definition/declaration. More...
     
    void set_constraint (unsigned long long start, unsigned long long stride, unsigned long long stop)
     
    -void set_name (const string &name)
     
    -void set_parent (D4Dimensions *d)
     
    -void set_size (unsigned long size)
     
    -void set_size (const string &size)
     
    -void set_used_by_projected_var (bool state)
     
    -unsigned long size () const
     
    -bool used_by_projected_var () const
     
    -

    Detailed Description

    -
    -

    Definition at line 41 of file D4Dimensions.h.

    -

    Member Function Documentation

    - -

    ◆ fully_qualified_name()

    - -
    -
    - - - - - - - -
    string libdap::D4Dimension::fully_qualified_name () const
    -
    - -

    Get the FQN for the dimension.

    -
    Returns
    The D4Dimension as a fully qualified name.
    - -

    Definition at line 56 of file D4Dimensions.cc.

    - -
    -
    - -

    ◆ print_dap4()

    - -
    -
    - - - - - - - - -
    void libdap::D4Dimension::print_dap4 (XMLWriterxml) const
    -
    - -

    Print the Dimension declaration. Print the Dimension in a form suitable for use in a Group definition/declaration.

    -
    See also
    print_dap4(XMLWriter &xml, bool print_fqn)
    -
    Parameters
    - - -
    xmlPrint to this XMLWriter instance
    -
    -
    - -

    Definition at line 83 of file D4Dimensions.cc.

    - -
    -
    - -

    ◆ set_constraint()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::D4Dimension::set_constraint (unsigned long long start,
    unsigned long long stride,
    unsigned long long stop 
    )
    -
    -inline
    -
    -

    Set this Shared Diemension's constraint. While an Array Dimension object uses a stop value of -1 to indicate the end of the dimension, this method does not support that; the caller will have to sort out the correct end value for 'stop'.

    Parameters
    - - - - -
    startStarting index (zero-based)
    strideThe stride for the slice
    stopThe stopping index (never greater than size -1)
    -
    -
    - -

    Definition at line 86 of file D4Dimensions.h.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1D4Dimension.js b/html/classlibdap_1_1D4Dimension.js deleted file mode 100644 index ae783e83b..000000000 --- a/html/classlibdap_1_1D4Dimension.js +++ /dev/null @@ -1,21 +0,0 @@ -var classlibdap_1_1D4Dimension = -[ - [ "D4Dimension", "classlibdap_1_1D4Dimension.html#ae113af3a4b118830093c2119195fb2d9", null ], - [ "D4Dimension", "classlibdap_1_1D4Dimension.html#a79a828c9b293b59d99bfc4ff8d0ec02d", null ], - [ "c_start", "classlibdap_1_1D4Dimension.html#a4697a551c79005ca28acca7355312d3d", null ], - [ "c_stop", "classlibdap_1_1D4Dimension.html#a5fa7b682a07b39c3bf79c80e11759c0f", null ], - [ "c_stride", "classlibdap_1_1D4Dimension.html#aef606840a3b14b8ce927772abba5b4f8", null ], - [ "constrained", "classlibdap_1_1D4Dimension.html#a98a7f1d925e4ad37792d79dea818833b", null ], - [ "fully_qualified_name", "classlibdap_1_1D4Dimension.html#a91a7616fcd4ac5f59248de675dbae3f2", null ], - [ "name", "classlibdap_1_1D4Dimension.html#a678e20b851ac14430b45293878c9bc62", null ], - [ "parent", "classlibdap_1_1D4Dimension.html#a3d9cc2bf5c2f515628983d242d107932", null ], - [ "print_dap4", "classlibdap_1_1D4Dimension.html#a816571e2cbc792e1aa53cbb2829bb147", null ], - [ "set_constraint", "classlibdap_1_1D4Dimension.html#ab63edc1e631b4501178d2bc3018577e9", null ], - [ "set_name", "classlibdap_1_1D4Dimension.html#af92f63f9e700c16ab357b70fbb6c803a", null ], - [ "set_parent", "classlibdap_1_1D4Dimension.html#a498dd09d0436aef92f15aa5acd8c3258", null ], - [ "set_size", "classlibdap_1_1D4Dimension.html#af03f62fbaf7806487fdff80357c5c59c", null ], - [ "set_size", "classlibdap_1_1D4Dimension.html#a0fe75da4c00a79f11c77d4a8dd90ded1", null ], - [ "set_used_by_projected_var", "classlibdap_1_1D4Dimension.html#a84ba99dd5963cff36eaf0177864b622f", null ], - [ "size", "classlibdap_1_1D4Dimension.html#a3d1e987ab3c7ac6c467c8bbe5a759e79", null ], - [ "used_by_projected_var", "classlibdap_1_1D4Dimension.html#a63550abe59eec6b0352d9bf6e8ed2cf9", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1D4Dimensions-members.html b/html/classlibdap_1_1D4Dimensions-members.html deleted file mode 100644 index 5973e69cf..000000000 --- a/html/classlibdap_1_1D4Dimensions-members.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::D4Dimensions Member List
    -
    -
    - -

    This is the complete list of members for libdap::D4Dimensions, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - -
    add_dim(D4Dimension *dim)libdap::D4Dimensionsinline
    add_dim_nocopy(D4Dimension *dim)libdap::D4Dimensionsinline
    D4Dimensions() (defined in libdap::D4Dimensions)libdap::D4Dimensionsinline
    D4Dimensions(D4Group *g) (defined in libdap::D4Dimensions)libdap::D4Dimensionsinline
    D4Dimensions(const D4Dimensions &rhs) (defined in libdap::D4Dimensions)libdap::D4Dimensionsinline
    D4DimensionsCIter typedef (defined in libdap::D4Dimensions)libdap::D4Dimensions
    D4DimensionsIter typedeflibdap::D4Dimensions
    dim_begin()libdap::D4Dimensionsinline
    dim_end()libdap::D4Dimensionsinline
    empty() constlibdap::D4Dimensionsinline
    find_dim(const string &name) (defined in libdap::D4Dimensions)libdap::D4Dimensions
    insert_dim(D4Dimension *dim, D4DimensionsIter i)libdap::D4Dimensionsinline
    insert_dim_nocopy(D4Dimension *dim, D4DimensionsIter i)libdap::D4Dimensionsinline
    m_duplicate(const D4Dimensions &rhs) (defined in libdap::D4Dimensions)libdap::D4Dimensionsinlineprotected
    operator=(const D4Dimensions &rhs) (defined in libdap::D4Dimensions)libdap::D4Dimensionsinline
    parent() const (defined in libdap::D4Dimensions)libdap::D4Dimensionsinline
    print_dap4(XMLWriter &xml, bool constrained=false) const (defined in libdap::D4Dimensions)libdap::D4Dimensions
    set_parent(D4Group *g) (defined in libdap::D4Dimensions)libdap::D4Dimensionsinline
    ~D4Dimensions() (defined in libdap::D4Dimensions)libdap::D4Dimensionsinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1D4Dimensions.html b/html/classlibdap_1_1D4Dimensions.html deleted file mode 100644 index a98cf5a9b..000000000 --- a/html/classlibdap_1_1D4Dimensions.html +++ /dev/null @@ -1,418 +0,0 @@ - - - - - - - -libdap: libdap::D4Dimensions Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::D4Dimensions Class Reference
    -
    -
    - -

    #include <D4Dimensions.h>

    - - - - - - - -

    -Public Types

    -typedef vector< D4Dimension * >::const_iterator D4DimensionsCIter
     
    typedef vector< D4Dimension * >::iterator D4DimensionsIter
     Iterator used for D4Dimensions. More...
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    void add_dim (D4Dimension *dim)
     
    void add_dim_nocopy (D4Dimension *dim)
     
    D4Dimensions (D4Group *g)
     
    D4Dimensions (const D4Dimensions &rhs)
     
    D4DimensionsIter dim_begin ()
     Get an iterator to the start of the dimensions. More...
     
    D4DimensionsIter dim_end ()
     Get an iterator to the end of the dimensions. More...
     
    bool empty () const
     Does this D4Dimensions object actually have dimensions? More...
     
    -D4Dimensionfind_dim (const string &name)
     
    void insert_dim (D4Dimension *dim, D4DimensionsIter i)
     
    void insert_dim_nocopy (D4Dimension *dim, D4DimensionsIter i)
     
    -D4Dimensionsoperator= (const D4Dimensions &rhs)
     
    -D4Groupparent () const
     
    -void print_dap4 (XMLWriter &xml, bool constrained=false) const
     
    -void set_parent (D4Group *g)
     
    - - - -

    -Protected Member Functions

    -void m_duplicate (const D4Dimensions &rhs)
     
    -

    Detailed Description

    -

    This class holds information about dimensions. This can be used to store actual dimension information in an instance of BaseType and it can be used to store the definition of a dimension in an instance of Group.

    - -

    Definition at line 101 of file D4Dimensions.h.

    -

    Member Typedef Documentation

    - -

    ◆ D4DimensionsIter

    - -
    -
    - - - - -
    typedef vector<D4Dimension*>::iterator libdap::D4Dimensions::D4DimensionsIter
    -
    - -

    Iterator used for D4Dimensions.

    - -

    Definition at line 122 of file D4Dimensions.h.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ add_dim()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::D4Dimensions::add_dim (D4Dimensiondim)
    -
    -inline
    -
    -

    Append a new dimension. In DAP4 dimensions are either of a known size or are varying. For fixed-size dimensions, the value of varying should be false. For varying dimensions the value of 'size' will be ignored - any value can be used when called this method.

    -
    Parameters
    - - -
    dimPointer to the D4Dimension object to add; deep copy
    -
    -
    - -

    Definition at line 155 of file D4Dimensions.h.

    - -
    -
    - -

    ◆ add_dim_nocopy()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::D4Dimensions::add_dim_nocopy (D4Dimensiondim)
    -
    -inline
    -
    -

    Append a new dimension.

    Parameters
    - - -
    dimPointer to the D4Dimension object to add; copies the pointer
    -
    -
    - -

    Definition at line 160 of file D4Dimensions.h.

    - -
    -
    - -

    ◆ dim_begin()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4DimensionsIter libdap::D4Dimensions::dim_begin ()
    -
    -inline
    -
    - -

    Get an iterator to the start of the dimensions.

    - -

    Definition at line 163 of file D4Dimensions.h.

    - -
    -
    - -

    ◆ dim_end()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4DimensionsIter libdap::D4Dimensions::dim_end ()
    -
    -inline
    -
    - -

    Get an iterator to the end of the dimensions.

    - -

    Definition at line 166 of file D4Dimensions.h.

    - -
    -
    - -

    ◆ empty()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::D4Dimensions::empty () const
    -
    -inline
    -
    - -

    Does this D4Dimensions object actually have dimensions?

    - -

    Definition at line 142 of file D4Dimensions.h.

    - -
    -
    - -

    ◆ insert_dim()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::D4Dimensions::insert_dim (D4Dimensiondim,
    D4DimensionsIter i 
    )
    -
    -inline
    -
    -

    Insert a dimension. Insert a dimension before the position specified by the iterator.

    Note
    Calling this method invalidates all iterators that reference this D4Dimension object.
    -
    Parameters
    - - - -
    dimInserted before i; deep copy
    iiterator
    -
    -
    - -

    Definition at line 177 of file D4Dimensions.h.

    - -
    -
    - -

    ◆ insert_dim_nocopy()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::D4Dimensions::insert_dim_nocopy (D4Dimensiondim,
    D4DimensionsIter i 
    )
    -
    -inline
    -
    -

    Insert a dimension.

    Parameters
    - - - -
    dimInserted before i; pointer copy
    iiterator
    -
    -
    - -

    Definition at line 185 of file D4Dimensions.h.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1D4Dimensions.js b/html/classlibdap_1_1D4Dimensions.js deleted file mode 100644 index faceb1523..000000000 --- a/html/classlibdap_1_1D4Dimensions.js +++ /dev/null @@ -1,22 +0,0 @@ -var classlibdap_1_1D4Dimensions = -[ - [ "D4DimensionsCIter", "classlibdap_1_1D4Dimensions.html#a645a8863bb31fbde5ea2728dded8adf7", null ], - [ "D4DimensionsIter", "classlibdap_1_1D4Dimensions.html#a24b00181a66826733d2e779cbc4df817", null ], - [ "D4Dimensions", "classlibdap_1_1D4Dimensions.html#a86a75774de16238b5243d3e6ff934e71", null ], - [ "D4Dimensions", "classlibdap_1_1D4Dimensions.html#a16995dbaa4e3f73367f93837f349a094", null ], - [ "D4Dimensions", "classlibdap_1_1D4Dimensions.html#ad95a41d996830ea0a1ff06aa14dfe9fe", null ], - [ "~D4Dimensions", "classlibdap_1_1D4Dimensions.html#a12ad5e211fda2ab93a1d4a523340de5c", null ], - [ "add_dim", "classlibdap_1_1D4Dimensions.html#a6a5a16bc3375f9e23ca7aaca4646bec2", null ], - [ "add_dim_nocopy", "classlibdap_1_1D4Dimensions.html#a54589e5cdb731298d8ef7e28068d967e", null ], - [ "dim_begin", "classlibdap_1_1D4Dimensions.html#acdde711563706573cf03888bee31105e", null ], - [ "dim_end", "classlibdap_1_1D4Dimensions.html#aae49956b1831fadab0477846c9576819", null ], - [ "empty", "classlibdap_1_1D4Dimensions.html#ac8392d924d693bf312e215cabb384c76", null ], - [ "find_dim", "classlibdap_1_1D4Dimensions.html#a951d043d8e1cdbd5ae8bbbb2f2ca43f8", null ], - [ "insert_dim", "classlibdap_1_1D4Dimensions.html#adf5daf7a4ff69d794f4ee8f6141748a4", null ], - [ "insert_dim_nocopy", "classlibdap_1_1D4Dimensions.html#a848b4d805a85adcbda0810a88b209644", null ], - [ "m_duplicate", "classlibdap_1_1D4Dimensions.html#a7babecc5bdd76655d3d245aa7a22edbb", null ], - [ "operator=", "classlibdap_1_1D4Dimensions.html#ad544f97a8ec905bc6ce1879524764655", null ], - [ "parent", "classlibdap_1_1D4Dimensions.html#ac31f1f30e0c03dfc610f44d37b005790", null ], - [ "print_dap4", "classlibdap_1_1D4Dimensions.html#af4984ece63c5f6ca98fd1b8e84dc33dc", null ], - [ "set_parent", "classlibdap_1_1D4Dimensions.html#ae43d26e16b4ff90fe42ed2379e7e8b0c", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1D4Enum-members.html b/html/classlibdap_1_1D4Enum-members.html deleted file mode 100644 index 5038e8cfc..000000000 --- a/html/classlibdap_1_1D4Enum-members.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::D4Enum Member List
    -
    -
    - -

    This is the complete list of members for libdap::D4Enum, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    add_var(BaseType *bt, Part part=nil)libdap::BaseTypevirtual
    add_var_nocopy(BaseType *bt, Part part=nil) (defined in libdap::BaseType)libdap::BaseTypevirtual
    attributes()libdap::BaseTypevirtual
    BaseType(const string &n, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const string &n, const string &d, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const BaseType &copy_from)libdap::BaseType
    btp_stack typedef (defined in libdap::BaseType)libdap::BaseType
    buf2val(void **)libdap::D4Enumvirtual
    check_semantics(string &msg, bool all=false)libdap::BaseTypevirtual
    clear_local_data()libdap::BaseTypeinlinevirtual
    compute_checksum(Crc32 &checksum)libdap::D4Enumvirtual
    d4_ops(BaseType *b, int op)libdap::BaseTypevirtual
    D4Enum(const string &name, const string &enum_type) (defined in libdap::D4Enum)libdap::D4Enum
    D4Enum(const string &name, Type type) (defined in libdap::D4Enum)libdap::D4Enum
    D4Enum(const string &name, const string &dataset, Type type) (defined in libdap::D4Enum)libdap::D4Enum
    D4Enum(const D4Enum &src) (defined in libdap::D4Enum)libdap::D4Enuminline
    D4EnumTest (defined in libdap::D4Enum)libdap::D4Enumfriend
    d_buf (defined in libdap::D4Enum)libdap::D4Enumprotected
    d_in_selection (defined in libdap::BaseType)libdap::BaseTypeprotected
    d_is_synthesized (defined in libdap::BaseType)libdap::BaseTypeprotected
    dataset() constlibdap::BaseTypevirtual
    deserialize(D4StreamUnMarshaller &um, DMR &dmr)libdap::D4Enumvirtual
    libdap::BaseType::deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)libdap::BaseTypevirtual
    dump(ostream &strm) constlibdap::D4Enumvirtual
    element_count(bool leaves=false)libdap::BaseTypevirtual
    element_type() (defined in libdap::D4Enum)libdap::D4Enuminline
    enumeration() const (defined in libdap::D4Enum)libdap::D4Enuminlinevirtual
    FQN() constlibdap::BaseTypevirtual
    get_attr_table()libdap::BaseTypevirtual
    get_parent() constlibdap::BaseTypevirtual
    intern_data(ConstraintEvaluator &eval, DDS &dds)libdap::BaseTypevirtual
    intern_data()libdap::BaseTypevirtual
    is_constructor_type() constlibdap::BaseTypevirtual
    is_dap4() const (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    is_in_selection()libdap::BaseTypevirtual
    is_signed() const (defined in libdap::D4Enum)libdap::D4Enuminline
    is_simple_type() constlibdap::BaseTypevirtual
    is_vector_type() constlibdap::BaseTypevirtual
    length() constlibdap::BaseTypeinlinevirtual
    libdap::BaseType::m_duplicate(const BaseType &bt)libdap::BaseTypeprotected
    name() constlibdap::BaseTypevirtual
    operator=(const D4Enum &rhs) (defined in libdap::D4Enum)libdap::D4Enuminline
    operator=(const BaseType &rhs) (defined in libdap::BaseType)libdap::BaseType
    ops(BaseType *b, int op)libdap::D4Enumvirtual
    print_dap4(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
    print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_val(ostream &out, string space="", bool print_decl_p=true)libdap::D4Enumvirtual
    libdap::BaseType::print_val(FILE *out, string space="", bool print_decl_p=true)libdap::BaseTypevirtual
    print_xml(FILE *out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml(ostream &out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml_writer(XMLWriter &xml, bool constrained)libdap::D4Enumvirtual
    ptr_duplicate()libdap::D4Enuminlinevirtual
    read()libdap::BaseTypevirtual
    read_p()libdap::BaseTypevirtual
    send_p()libdap::BaseTypevirtual
    serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)libdap::D4Enumvirtual
    libdap::BaseType::serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)libdap::BaseTypevirtual
    set_attr_table(const AttrTable &at)libdap::BaseTypevirtual
    set_attributes(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_attributes_nocopy(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_element_type(Type type) (defined in libdap::D4Enum)libdap::D4Enuminline
    set_enumeration(D4EnumDef *enum_def) (defined in libdap::D4Enum)libdap::D4Enumvirtual
    set_in_selection(bool state)libdap::BaseTypevirtual
    set_is_dap4(const bool v) (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    set_is_signed(Type t) (defined in libdap::D4Enum)libdap::D4Enum
    set_length(int)libdap::BaseTypeinlinevirtual
    set_name(const string &n)libdap::BaseTypevirtual
    set_parent(BaseType *parent)libdap::BaseTypevirtual
    set_read_p(bool state)libdap::BaseTypevirtual
    set_send_p(bool state)libdap::BaseTypevirtual
    set_synthesized_p(bool state)libdap::BaseTypevirtual
    set_type(const Type &t)libdap::BaseTypevirtual
    set_value(T v, bool check_value=true)libdap::D4Enuminline
    synthesized_p()libdap::BaseTypevirtual
    toString()libdap::BaseTypevirtual
    transfer_attributes(AttrTable *at)libdap::BaseTypevirtual
    transform_to_dap2(AttrTable *parent_attr_table)libdap::D4Enumvirtual
    transform_to_dap4(D4Group *root, Constructor *container)libdap::BaseTypevirtual
    type() constlibdap::BaseTypevirtual
    type_name() constlibdap::BaseTypevirtual
    val2buf(void *, bool)libdap::D4Enumvirtual
    value(T *v) constlibdap::D4Enuminline
    var(const string &name="", bool exact_match=true, btp_stack *s=0)libdap::BaseTypevirtual
    var(const string &name, btp_stack &s)libdap::BaseTypevirtual
    width(bool=false) constlibdap::D4Enuminlinevirtual
    ~BaseType() (defined in libdap::BaseType)libdap::BaseTypevirtual
    ~D4Enum() (defined in libdap::D4Enum)libdap::D4Enuminlinevirtual
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1D4Enum.html b/html/classlibdap_1_1D4Enum.html deleted file mode 100644 index fa09a3087..000000000 --- a/html/classlibdap_1_1D4Enum.html +++ /dev/null @@ -1,2973 +0,0 @@ - - - - - - - -libdap: libdap::D4Enum Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    - -

    Holds a DAP4 enumeration. - More...

    - -

    #include <D4Enum.h>

    -
    -Inheritance diagram for libdap::D4Enum:
    -
    -
    Inheritance graph
    - - - - -
    - - - - -

    -Public Types

    -typedef stack< BaseType * > btp_stack
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual void add_var (BaseType *bt, Part part=nil)
     Add a variable. More...
     
    -virtual void add_var_nocopy (BaseType *bt, Part part=nil)
     
    unsigned int buf2val (void **)
     Reads the class data. More...
     
    virtual bool check_semantics (string &msg, bool all=false)
     Compare an object's current state with the semantics of its type. More...
     
    virtual void clear_local_data ()
     
    virtual void compute_checksum (Crc32 &checksum)
     include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum. More...
     
    virtual bool d4_ops (BaseType *b, int op)
     Evaluator a relop for DAP4. More...
     
    D4Enum (const string &name, const string &enum_type)
     
    D4Enum (const string &name, Type type)
     
    D4Enum (const string &name, const string &dataset, Type type)
     
    D4Enum (const D4Enum &src)
     
    virtual string dataset () const
     Returns the name of the dataset used to create this instance. More...
     
    virtual void deserialize (D4StreamUnMarshaller &um, DMR &dmr)
     
    virtual void dump (ostream &strm) const
     dumps information about this object More...
     
    virtual int element_count (bool leaves=false)
     Count the members of constructor types. More...
     
    -Type element_type ()
     
    -virtual D4EnumDefenumeration () const
     
    virtual std::string FQN () const
     
    virtual AttrTableget_attr_table ()
     
    virtual BaseTypeget_parent () const
     
    virtual bool is_constructor_type () const
     Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable. More...
     
    -virtual bool is_dap4 () const
     
    virtual bool is_in_selection ()
     Is this variable part of the current selection? More...
     
    -bool is_signed () const
     
    virtual bool is_simple_type () const
     Returns true if the instance is a numeric, string or URL type variable. More...
     
    virtual bool is_vector_type () const
     Returns true if the instance is a vector (i.e., array) type variable. More...
     
    virtual int length () const
     How many elements are in this variable. More...
     
    virtual string name () const
     Returns the name of the class instance. More...
     
    -D4Enumoperator= (const D4Enum &rhs)
     
    virtual bool ops (BaseType *b, int op)
     Evaluate relational operators. More...
     
    virtual void print_dap4 (XMLWriter &xml, bool constrained=false)
     
    virtual void print_decl (FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_decl (ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_val (ostream &out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_xml (FILE *out, string space=" ", bool constrained=false)
     
    virtual void print_xml (ostream &out, string space=" ", bool constrained=false)
     
    virtual void print_xml_writer (XMLWriter &xml, bool constrained)
     
    virtual BaseTypeptr_duplicate ()
     
    virtual bool read ()
     Read data into a local buffer. More...
     
    virtual bool read_p ()
     Has this variable been read? More...
     
    virtual bool send_p ()
     Should this variable be sent? More...
     
    virtual void serialize (D4StreamMarshaller &m, DMR &dmr, bool filter=false)
     Serialize a D4Enum Use the (integer) data type associated with an Enumeration definition to serialize the value of a D4Enum variable. This send just the bits that correspond to the declared type, not all 64-bits of storage used by a scalar D4Enum. More...
     
    virtual void set_attr_table (const AttrTable &at)
     
    -void set_element_type (Type type)
     
    -virtual void set_enumeration (D4EnumDef *enum_def)
     
    virtual void set_in_selection (bool state)
     
    -virtual void set_is_dap4 (const bool v)
     
    -void set_is_signed (Type t)
     
    virtual void set_length (int)
     Set the number of elements for this variable. More...
     
    virtual void set_name (const string &n)
     Sets the name of the class instance. More...
     
    virtual void set_parent (BaseType *parent)
     
    virtual void set_read_p (bool state)
     Sets the value of the read_p property. More...
     
    virtual void set_send_p (bool state)
     
    virtual void set_synthesized_p (bool state)
     
    virtual void set_type (const Type &t)
     Sets the type of the class instance. More...
     
    template<typename T >
    void set_value (T v, bool check_value=true)
     Set the value of the Enum Template member function to set the value of the Enum. The libdap library contains versions of this member function for dods_byte, ..., dods_uint64 types for the parameter v. More...
     
    virtual bool synthesized_p ()
     
    virtual string toString ()
     
    virtual void transfer_attributes (AttrTable *at)
     
    virtual std::vector< BaseType * > * transform_to_dap2 (AttrTable *parent_attr_table)
     Convert an Enum to a DAP2 int type. More...
     
    virtual void transform_to_dap4 (D4Group *root, Constructor *container)
     DAP2 to DAP4 transform. More...
     
    virtual Type type () const
     Returns the type of the class instance. More...
     
    virtual string type_name () const
     Returns the type of the class instance as a string. More...
     
    unsigned int val2buf (void *, bool)
     Loads class data. More...
     
    template<typename T >
    void value (T *v) const
     Get the value of an Enum Get the value of this instance. The caller is responsible for using a type T than can hold the value. More...
     
    virtual BaseTypevar (const string &name="", bool exact_match=true, btp_stack *s=0)
     Returns a pointer to a member of a constructor class. More...
     
    virtual BaseTypevar (const string &name, btp_stack &s)
     
    virtual unsigned int width (bool=false) const
     Return the number of bytes in an instance of an Enum. This returns the number of bytes an instance of Enum will use in memory or on the wire (i.e., in a serialization of the type). On the wire this type uses the minimum number of bytes for the given Enum type - an Enum with type Byte uses one byte, Int16 uses two, and so on. In memory, a single instance uses 64-bits but a vector of these will use the same number of bytes per value as the on-the-wire representation. More...
     
    virtual D4Attributesattributes ()
     
    -virtual void set_attributes (D4Attributes *)
     
    -virtual void set_attributes_nocopy (D4Attributes *)
     
    Abstract Methods
    virtual void intern_data (ConstraintEvaluator &eval, DDS &dds)
     
    virtual void intern_data ()
     Read data into this variable. More...
     
    virtual bool serialize (ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
     Move data to the net, then remove them from the object. More...
     
    virtual bool deserialize (UnMarshaller &um, DDS *dds, bool reuse=false)
     Receive data from the net. More...
     
    virtual void print_val (FILE *out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    - - - - -

    -Protected Member Functions

    void m_duplicate (const BaseType &bt)
     Perform a deep copy. More...
     
    - - - - - - - -

    -Protected Attributes

    -uint64_t d_buf
     
    -bool d_in_selection
     
    -bool d_is_synthesized
     
    - - - -

    -Friends

    -class D4EnumTest
     
    -

    Detailed Description

    -

    Holds a DAP4 enumeration.

    -
    Note
    When constructed a type for the Enum must be specified. If it is not an integer type, the Enum will use unsigned int 64. This is not the same as the enumeration type that is defined using the Enumeration XML element in the DMR - that information is stored in additional fields and used for checking values and printing the variable's declaration, but not for the internal storage of values.
    -
    Todo:
    Note the hack to remove the union...
    - -

    Definition at line 61 of file D4Enum.h.

    -

    Member Function Documentation

    - -

    ◆ add_var()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::add_var (BaseTypebt,
    Part part = nil 
    )
    -
    -virtualinherited
    -
    - -

    Add a variable.

    -

    Adds a variable to an instance of a constructor class, such as Array, Structure et cetera. This function is only used by those classes. For constructors with more than one variable, the variables appear in the same order in which they were added (i.e., the order in which add_var() was called). Since this method is only for use by Vectors and Constructors, the BaseType implementation throws InternalErr.

    -
    Note
    For the implementation of this method in Structure, Sequence, et c., first copy bt and then insert the copy. If bt is itself a constructor type you must either use the var() method to get a pointer to the actual instance added to *this or you must first add all of bt's children to it before adding it to *this. The implementations should use m_duplicate() to perform a deep copy of bt.
    -
    Todo:
    We should get rid of the Part parameter and adopt the convention that the first variable is the Array and all subsequent ones are Maps (when dealing with a Grid, the only time Part matters). This would enable several methods to migrate from Structure, Sequence and Grid to Constructor.
    -
    Parameters
    - - - -
    btThe variable to be added to this instance. The caller of this method must free memory it allocates for v. This method will make a deep copy of the object pointed to by v.
    partThe part of the constructor data to be modified. Only meaningful for Grid variables.
    -
    -
    -
    See also
    Part
    - -

    Reimplemented in libdap::Vector, libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 815 of file BaseType.cc.

    - -
    -
    - -

    ◆ attributes()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4Attributes * libdap::BaseType::attributes ()
    -
    -virtualinherited
    -
    -

    DAP4 Attribute methods

    - -

    Definition at line 599 of file BaseType.cc.

    - -
    -
    - -

    ◆ buf2val()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::D4Enum::buf2val (void ** val)
    -
    -virtual
    -
    - -

    Reads the class data.

    -

    Reads the class data into the memory referenced by val. The caller should either allocate enough storage to val to hold the class data or set *val to null. If *val is NULL, memory will be allocated by this function with new(). If the memory is allocated this way, the caller is responsible for deallocating that memory. Array and values for simple types are stored as C would store an array.

    -
    Deprecated:
    Use value() in the leaf classes.
    -
    Parameters
    - - -
    valA pointer to a pointer to the memory into which the class data will be copied. If the value pointed to is NULL, memory will be allocated to hold the data, and the pointer value modified accordingly. The calling program is responsible for deallocating the memory references by this pointer.
    -
    -
    -
    Returns
    The size (in bytes) of the information copied to val.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 534 of file D4Enum.cc.

    - -
    -
    - -

    ◆ check_semantics()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::check_semantics (string & msg,
    bool all = false 
    )
    -
    -virtualinherited
    -
    - -

    Compare an object's current state with the semantics of its type.

    -

    This function checks the class instance for internal consistency. This is important to check for complex constructor classes. For BaseType, an object is semantically correct if it has both a non-null name and type.

    -

    For example, an Int32 instance would return FALSE if it had no name or no type defined. A Grid instance might return FALSE for more complex reasons, such as having Map arrays of the wrong size or shape.

    -

    This function is used by the DDS class, and will rarely, if ever, be explicitly called by a DODS application program. A variable must pass this test before it is sent, but there may be many other stages in a retrieve operation where it would fail.

    -
    Returns
    Returns FALSE when the current state violates some aspect of the type semantics, TRUE otherwise.
    -
    Parameters
    - - - -
    msgA returned string, containing a message indicating the source of any problem.
    allFor complex constructor types (Grid, Sequence, Structure), this flag indicates whether to check the semantics of the member variables, too.
    -
    -
    -
    See also
    DDS::check_semantics
    - -

    Reimplemented in libdap::Array, libdap::Vector, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1209 of file BaseType.cc.

    - -
    -
    - -

    ◆ clear_local_data()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual void libdap::BaseType::clear_local_data ()
    -
    -inlinevirtualinherited
    -
    -

    Remove any read or set data in the private data of the variable, setting read_p() to false. Used to clear any dynamically allocated storage that holds (potentially large) data. For the simple types, this no-op version is all that's needed. Vector and some other classes define a special version and have serialize() implementations that call it to free data as soon as possible after sending it.

    -
    Note
    Added 7/5/15 jhrg
    -
    -Any specialization of this should make sure to reset the read_p property.
    - -

    Reimplemented in libdap::Sequence, libdap::Vector, libdap::D4Sequence, and libdap::D4Opaque.

    - -

    Definition at line 179 of file BaseType.h.

    - -
    -
    - -

    ◆ compute_checksum()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::D4Enum::compute_checksum (Crc32checksum)
    -
    -virtual
    -
    - -

    include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum.

    -
    Parameters
    - - -
    checksumA Crc32 instance that holds the current checksum.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 323 of file D4Enum.cc.

    - -
    -
    - -

    ◆ d4_ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::d4_ops (BaseTypeb,
    int op 
    )
    -
    -virtualinherited
    -
    - -

    Evaluator a relop for DAP4.

    -

    This method is used by the filter expression evaluation code in DAP4. Each of the 'data type' classes that support relops must overload this method. In an expression of the form arg1 op arg2, this object is arg1, the parameter 'b' is arg2 and op is the relational operator.

    -
    Note
    I used the same relop codes for DAP4 as in the DAP2 parser/scanner which makes for some coupling between them, but cuts way down on the duplication of the evaluator logic, which is somewhat involved.
    -
    Parameters
    - - - -
    bThe second argument in the relational expression
    opThe infix relational operator
    -
    -
    -
    Returns
    True if the expression is true, False otherwise.
    - -

    Reimplemented in libdap::Str, libdap::Int32, libdap::Float32, libdap::Byte, libdap::Float64, libdap::Int16, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 1282 of file BaseType.cc.

    - -
    -
    - -

    ◆ dataset()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::dataset () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the dataset used to create this instance.

    -

    A dataset from which the data is to be read. The meaning of this string will vary among different types of data sources. It may be the name of a data file or an identifier used to read data from a relational database.

    - -

    Definition at line 358 of file BaseType.cc.

    - -
    -
    - -

    ◆ deserialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::D4Enum::deserialize (D4StreamUnMarshallerum,
    DMRdmr 
    )
    -
    -virtual
    -
    -

    The DAP4 deserialization method.

    Parameters
    - - - -
    um
    dmr
    -
    -
    -
    Exceptions
    - - -
    Erroror InternalErr
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 437 of file D4Enum.cc.

    - -
    -
    - -

    ◆ deserialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::deserialize (UnMarshallerum,
    DDSdds,
    bool reuse = false 
    )
    -
    -virtualinherited
    -
    - -

    Receive data from the net.

    -

    Receives data from the network connection identified by the source parameter. The data is put into the class data buffer according to the input dds.

    -

    This function is only used on the client side of the DODS client/server connection.

    -
    Parameters
    - - - - -
    umAn UnMarshaller that knows how to deserialize data types
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure. This would have been received from the server in an earlier transmission.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect.
    -
    -
    -
    Returns
    Always returns TRUE.
    -
    Exceptions
    - - -
    Errorwhen a problem reading from the UnMarshaller is found.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, libdap::Constructor, libdap::Str, libdap::Int32, libdap::Byte, libdap::Float32, libdap::Float64, libdap::UInt32, libdap::Int16, libdap::UInt16, and libdap::D4Opaque.

    - -

    Definition at line 943 of file BaseType.cc.

    - -
    -
    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::D4Enum::dump (ostream & strm) const
    -
    -virtual
    -
    - -

    dumps information about this object

    -

    Displays the pointer value of this instance and information about this instance.

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the information to
    -
    -
    -
    Returns
    void
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 695 of file D4Enum.cc.

    - -
    -
    - -

    ◆ element_count()

    - -
    -
    - - - - - -
    - - - - - - - - -
    int libdap::BaseType::element_count (bool leaves = false)
    -
    -virtualinherited
    -
    - -

    Count the members of constructor types.

    -

    Return a count of the total number of variables in this variable. This is used to count the number of variables held by a constructor variable - for simple type and vector variables it always returns 1.

    -

    For compound data types, there are two ways to count members. You can count the members, or you can count the simple members and add that to the count of the compound members. For example, if a Structure contains an Int32 and another Structure that itself contains two Int32 members, the element count of the top-level structure could be two (one Int32 and one Structure) or three (one Int32 by itself and two Int32's in the subsidiary Structure). Use the leaves parameter to control which kind of counting you desire.

    -
    Returns
    Returns 1 for simple types. For compound members, the count depends on the leaves argument.
    -
    Parameters
    - - -
    leavesThis parameter is only relevant if the object contains other compound data types. If FALSE, the function counts only the data variables mentioned in the object's declaration. If TRUE, it counts the simple members, and adds that to the sum of the counts for the compound members. This parameter has no effect for simple type variables.
    -
    -
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 443 of file BaseType.cc.

    - -
    -
    - -

    ◆ FQN()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::FQN () const
    -
    -virtualinherited
    -
    -

    Return the FQN for this variable. This will include the D4 Group component of the name.

    -
    Returns
    The FQN in a string
    - -

    Reimplemented in libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 332 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - -
    AttrTable & libdap::BaseType::get_attr_table ()
    -
    -virtualinherited
    -
    -

    Get this variable's AttrTable. It's generally a bad idea to return a reference to a contained object, but in this case it seems that building an interface inside BaseType is overkill.

    -

    Use the AttrTable methods to manipulate the table.

    - -

    Definition at line 582 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_parent()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::BaseType::get_parent () const
    -
    -virtualinherited
    -
    -

    Return a pointer to the Constructor or Vector which holds (contains) this variable. If this variable is at the top level, this method returns null.

    -
    Returns
    A BaseType pointer to the variable's parent.
    - -

    Definition at line 751 of file BaseType.cc.

    - -
    -
    - -

    ◆ intern_data() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::intern_data (ConstraintEvaluatoreval,
    DDSdds 
    )
    -
    -virtualinherited
    -
    -

    Similar to using serialize() and deserialize() together in one object. Data are read as for serialize and those values are stored in the objects as deserialize() does but does not write and then read data to/from a stream.

    -

    This method is defined by the various data type classes. It calls the read() abstract method. Unlike serialize(), this method does not clear the memory use to hold the data values, so the caller should make sure to delete the DDS or the variable as soon as possible.

    -
    Parameters
    - - - -
    evalUse this as the constraint expression evaluator.
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    -
    -
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 908 of file BaseType.cc.

    - -
    -
    - -

    ◆ intern_data() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::BaseType::intern_data ()
    -
    -virtualinherited
    -
    - -

    Read data into this variable.

    -
    Parameters
    - - - -
    evalEvaluator for a constraint expression
    dmrDMR for the whole dataset
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 927 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_constructor_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_constructor_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable.

    -
    Returns
    True if the instance is a Structure, Sequence or Grid, False otherwise.
    - -

    Definition at line 412 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_in_selection ()
    -
    -virtualinherited
    -
    - -

    Is this variable part of the current selection?

    -

    Does this variable appear in either the selection part or as a function argument in the current constrain expression. If this property is set (true) then implementations of the read() method should read this variable.

    -
    Note
    This method does not check, nor does it know about the semantics of, string arguments passed to functions. Those functions might include variable names in strings; they are responsible for reading those variables. See the grid (func_grid_select()) for an example.
    -
    See also
    BaseType::read()
    - -

    Definition at line 703 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_simple_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_simple_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a numeric, string or URL type variable.

    -
    Returns
    True if the instance is a scalar numeric, String or URL variable, False otherwise. Arrays (even of simple types) return False.
    -
    See also
    is_vector_type()
    - -

    Definition at line 393 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_vector_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_vector_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a vector (i.e., array) type variable.

    -
    Returns
    True if the instance is an Array, False otherwise.
    - -

    Definition at line 402 of file BaseType.cc.

    - -
    -
    - -

    ◆ length()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual int libdap::BaseType::length () const
    -
    -inlinevirtualinherited
    -
    - -

    How many elements are in this variable.

    -
    Todo:
    change the return type to int64_t
    -
    Returns
    The number of elements; 1 for scalars
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, libdap::Str, and libdap::D4Opaque.

    - -

    Definition at line 207 of file BaseType.h.

    - -
    -
    - -

    ◆ m_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::m_duplicate (const BaseTypebt)
    -
    -protectedinherited
    -
    - -

    Perform a deep copy.

    -

    Perform a deep copy. Copies the values of bt into *this. Pointers are dereferenced and their values are copied into a newly allocated instance.

    -
    Parameters
    - - -
    btThe source object.
    -
    -
    - -

    Definition at line 86 of file BaseType.cc.

    - -
    -
    - -

    ◆ name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::name () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the class instance.

    - -

    Definition at line 320 of file BaseType.cc.

    - -
    -
    - -

    ◆ ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::D4Enum::ops (BaseTypeb,
    int op 
    )
    -
    -virtual
    -
    - -

    Evaluate relational operators.

    -

    This method contains the relational operators used by the constraint expression evaluator in the DDS class. Each class that wants to be able to evaluate relational expressions must overload this function. The implementation in BaseType throws an InternalErr exception. The DAP library classes Byte, ..., Url provide specializations of this method. It is not meaningful for classes such as Array because relational expressions using Array are not supported.

    -

    The op argument refers to a table generated by bison from the constraint expression parser. Use statements like the following to correctly interpret its value:

    -
    switch (op) {
    -    case EQUAL: return i1 == i2;
    -    case NOT_EQUAL: return i1 != i2;
    -    case GREATER: return i1 > i2;
    -    case GREATER_EQL: return i1 >= i2;
    -    case LESS: return i1 < i2;
    -    case LESS_EQL: return i1 <= i2;
    -    case REGEXP: throw Error("Regular expressions are not supported for integer values");
    -    default: throw Error("Unknown operator");
    -}
    -

    This function is used by the constraint expression evaluator.

    -
    Parameters
    - - - -
    bCompare the value of this instance with b.
    opAn integer index indicating which relational operator is implied. Choose one from the following: EQUAL, NOT_EQUAL, GREATER, GREATER_EQL, LESS, LESS_EQL, and REGEXP.
    -
    -
    -
    Returns
    The boolean value of the comparison.
    -
    See also
    BaseType::d4_ops(BaseType *, int)
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 647 of file D4Enum.cc.

    - -
    -
    - -

    ◆ print_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_dap4 (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the DAP4 XML representation for this variable. This method is used to build the DAP4 DMR response object.

    -
    Parameters
    - - - -
    xmlAn XMLWriter that will do the serialization
    constrainedTrue if the response should show the variables subject to the current constraint expression.
    -
    -
    - -

    Reimplemented in libdap::Array, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 1164 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (FILE * out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1003 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (ostream & out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1054 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_val() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::D4Enum::print_val (ostream & out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtual
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output ostream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 581 of file D4Enum.cc.

    - -
    -
    - -

    ◆ print_val() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_val (FILE * out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtualinherited
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output stream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Reimplemented in libdap::Sequence, libdap::Array, libdap::Grid, libdap::Constructor, libdap::Str, libdap::Int32, libdap::Byte, libdap::Float32, libdap::Float64, libdap::UInt32, libdap::Int16, libdap::UInt16, and libdap::D4Opaque.

    - -

    Definition at line 1090 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (FILE * out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination.
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1105 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (ostream & out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1120 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml_writer()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::D4Enum::print_xml_writer (XMLWriterxml,
    bool constrained 
    )
    -
    -virtual
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 612 of file D4Enum.cc.

    - -
    -
    - -

    ◆ ptr_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual BaseType* libdap::D4Enum::ptr_duplicate ()
    -
    -inlinevirtual
    -
    -

    Clone this instance. Allocate a new instance and copy *this into it. This method must perform a deep copy.

    @note This method should \e not copy data values, but must copy all
    -other fields in the object.
    -
    Returns
    A newly allocated copy of this.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 124 of file D4Enum.h.

    - -
    -
    - -

    ◆ read()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read ()
    -
    -virtualinherited
    -
    - -

    Read data into a local buffer.

    -

    This method should be implemented for each of the data type classes (Byte, ..., Grid) when using the DAP class library to build a server. This method is only for DAP servers. The library provides a default definition here which throws an InternalErr exception unless the read_p property has been set. In that case it returns false, indicating that all the data have been read. The latter case can happen when building a constant value that needs to be passed to a function. The variable/constant is loaded with a value when it is created.

    -

    When implementing a new DAP server, the Byte, ..., Grid data type classes are usually specialized. In each of those specializations read() should be defined to read values from the data source and store them in the object's local buffer. The read() method is called by other methods in this library. When writing read(), follow these rules:

    -
      -
    • -read() should throw Error if it encounters an error. The message should be verbose enough to be understood by someone running a client on a different machine.
    • -
    • -The value(s) should be read if and only if either send_p() or is_in_selection() return true. If neither of these return true, the value(s) should not be read. This is important when writing read() for a Constructor type such as Grid where a client may ask for only the map vectors (and thus reading the much larger Array part is not needed).
    • -
    • -For each specialization of read(), the method should first test the value of the read_p property (using the read_p() method) and read values only if the value of read_p() is false. Once the read() method reads data and stores it in the instance, it must set the value of the read_p property to true using set_read_p(). If your read() methods fail to do this data may not serialize correctly.
    • -
    • -The Array::read() and Grid::read() methods should take into account any restrictions on Array sizes.
    • -
    • -If you are writing Sequence::read(), be sure to check the documentation for Sequence::read_row() and Sequence::serialize() so you understand how Sequence::read() is being called.
    • -
    • -

      For Sequence::read(), your specialization must correctly manage the unsent_data property and row count in addition to the read_p property (handle the read_p property as describe above). For a Sequence to serialize correctly, once all data from the Sequence has been read, unsent_data property must be set to false (use Sequence::set_unsent_data()). Also, at that time the row number counter must be reset (use Sequence::reset_row_counter()). Typically the correct time to set unsent_data to false and reset the row counter is the time when Sequence::read() return false indicating that all the data for the Sequence have been read. Failure to handle these tasks will break serialization of nested Sequences. Note that when Sequence::read() returns with a result of true (indicating there is more data to send, the value of the unsent_data property should be true.

      -

      Also, if you server must handle nested sequences, be sure to read about subclassing set_read_p().

      -
    • -
    -
    Todo:
    Modify the D4 serialize code so that it supports the true/false behavior of read() for arrays.
    -
    Todo:
    Modify all of the stock handlers so they conform to this!
    -
    Returns
    False means more data remains to be read, True indicates that no more data need to be read. For Sequence and D4Sequence, this method will generally read one instance of the Sequence; for other types it will generally read the entire variable modulo any limitations due to a constraint. However, the library should be written so that read can return less than all of the data for a variable - serialize() would then call the function until it returns True.
    -
    See also
    BaseType
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 899 of file BaseType.cc.

    - -
    -
    - -

    ◆ read_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read_p ()
    -
    -virtualinherited
    -
    - -

    Has this variable been read?

    -

    Returns true if the value(s) for this variable have been read from the data source, otherwise returns false. This method is used to determine when values need to be read using the read() method. When read_p() returns true, this library assumes that buf2val() (and other methods such as get_vec()) can be used to access the value(s) of a variable.

    -
    Returns
    True if the variable's value(s) have been read, false otherwise.
    - -

    Definition at line 480 of file BaseType.cc.

    - -
    -
    - -

    ◆ send_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::send_p ()
    -
    -virtualinherited
    -
    - -

    Should this variable be sent?

    -

    Returns the state of the send_p property. If true, this variable should be sent to the client, if false, it should not. If no constraint expression (CE) has been evaluated, this property is true for all variables in a data source (i.e., for all the variables listed in a DDS). If a CE has been evaluated, this property is true only for those variables listed in the projection part of the CE.

    -
    Returns
    True if the variable should be sent to the client, false otherwise.
    - -

    Definition at line 554 of file BaseType.cc.

    - -
    -
    - -

    ◆ serialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::D4Enum::serialize (D4StreamMarshallerm,
    DMRdmr,
    bool filter = false 
    )
    -
    -virtual
    -
    - -

    Serialize a D4Enum Use the (integer) data type associated with an Enumeration definition to serialize the value of a D4Enum variable. This send just the bits that correspond to the declared type, not all 64-bits of storage used by a scalar D4Enum.

    -
    Parameters
    - - - - - -
    m
    dmrUnused
    evalUnused
    filterUnused
    -
    -
    -
    Exceptions
    - - -
    Erroris thrown if the value needs to be read and that operation fails.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 399 of file D4Enum.cc.

    - -
    -
    - -

    ◆ serialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::serialize (ConstraintEvaluatoreval,
    DDSdds,
    Marshallerm,
    bool ce_eval = true 
    )
    -
    -virtualinherited
    -
    - -

    Move data to the net, then remove them from the object.

    -

    Sends the data from the indicated (local) dataset through the connection identified by the Marshaller parameter. If the data is not already incorporated into the DDS object, read the data from the dataset. Once the data are sent (written to the Marshaller), they are deleted from the object and the object state is reset so that they will be read again if the read() method is called.

    -

    This function is only used on the server side of the client/server connection, and is generally only called from the ResponseBuilder functions. It has no BaseType implementation; each datatype child class supplies its own implementation.

    @param eval Use this as the constraint expression evaluator.
    -
    Parameters
    - - - - -
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    mA marshaller used to serialize data types
    ce_evalA boolean value indicating whether to evaluate the DODS constraint expression that may accompany this dataset. The constraint expression is stored in the dds.
    -
    -
    -
    Returns
    This method always returns true. Older versions used the return value to signal success or failure.
    -
    Note
    We changed the default behavior of this method so that it calls BaseType::clear_local_data() once the values are sent. This, combined with the behavior that read() is called by this method just before data are sent, means that data for any given variable remain in memory for the shortest time possible. Furthermore, since variables are serialized one at a time, no more than one variable's data will be in memory at any given time when using the default behavior. Some code - code that uses intern_data() or server functions - might alter this default behavior. Only Array (i.e. Vector), Sequence, D4Sequence and D4Opaque types actually hold data in dynamically allocated memory, so sonly those types have the new/changed behavior. This change was made on 7/5/15.
    -
    Exceptions
    - - - -
    InternalErr.
    Error.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, libdap::Constructor, libdap::Str, libdap::Int32, libdap::Byte, libdap::Float32, libdap::Float64, libdap::UInt32, libdap::Int16, libdap::UInt16, and libdap::D4Opaque.

    - -

    Definition at line 937 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_attr_table (const AttrTableat)
    -
    -virtualinherited
    -
    -

    Set this variable's attribute table.

    Parameters
    - - -
    atSource of the attributes.
    -
    -
    - -

    Definition at line 590 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_in_selection (bool state)
    -
    -virtualinherited
    -
    -

    Set the in_selection property to state. This property indicates that the variable is used as a parameter to a constraint expression function or that it appears as an argument in a selection sub-expression. If set (true), implementations of the BaseType::read() method should read this variable.

    -
    Parameters
    - - -
    stateSet the in_selection property to this state.
    -
    -
    -
    See also
    BaseType::read()
    -
    -BaseType::is_in_selection() for more information.
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 718 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_length()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::BaseType::set_length (int )
    -
    -inlinevirtualinherited
    -
    - -

    Set the number of elements for this variable.

    -
    Todo:
    change param type to int64_t
    -
    Parameters
    - - -
    lThe number of elements
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, and libdap::Vector.

    - -

    Definition at line 214 of file BaseType.h.

    - -
    -
    - -

    ◆ set_name()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_name (const string & n)
    -
    -virtualinherited
    -
    - -

    Sets the name of the class instance.

    - -

    Reimplemented in libdap::Vector.

    - -

    Definition at line 344 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_parent()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_parent (BaseTypeparent)
    -
    -virtualinherited
    -
    -

    Set the parent property for this variable.

    -
    Note
    Added ability to set parent to null. 10/19/12 jhrg
    -
    Parameters
    - - -
    parentPointer to the Constructor of Vector parent variable or null if the variable has no parent (if it is at the top-level of a DAP2/3 DDS).
    -
    -
    -
    Exceptions
    - - -
    InternalErrthrown if called with anything other than a Constructor, Vector or Null.
    -
    -
    - -

    Definition at line 733 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_read_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_read_p (bool state)
    -
    -virtualinherited
    -
    - -

    Sets the value of the read_p property.

    -

    Sets the value of the read_p property. This indicates that the value(s) of this variable has/have been read. An implementation of the read() method should use this to set the read_p property to true.

    -
    Note
    If the is_synthesized property is true, this method will not alter the is_read property. If you need that behavior, specialize the method in your subclasses if the various types.
    -
    -For most of the types the default implementation of this method is fine. However, if you're building a server which must handle data represented using nested sequences, then you may need to provide a specialization of Sequence::set_read_p(). By default Sequence::set_read_p() recursively sets the read_p property for all child variables to state. For servers where one Sequence reads an outer set of values and another reads an inner set, this is cumbersome. In such a case, it is easier to specialize Sequence::set_read_p() so that it does not recursively set the read_p property for the inner Sequence. Be sure to see the documentation for the read() method!
    -
    Todo:
    Look at making synthesized variables easier to implement and at making them more integrated into the overall CE evaluation process. Maybe the code that computes the synthesized var's value should be in the that variable's read() method? This might provide a way to get rid of the awkward 'projection functions' by replacing them with real children of BaseType. It would also provide a way to clean up the way the synthesized_p prop intrudes on the read_p prop.
    -
    See also
    BaseType::read()
    -
    Parameters
    - - -
    stateSet the read_p property to this state.
    -
    -
    - -

    Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 516 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_send_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_send_p (bool state)
    -
    -virtualinherited
    -
    -

    Sets the value of the send_p flag. This function is meant to be called from within the constraint evaluator of other code which determines that this variable should be returned to the client. Data are ready to be sent when both the d_is_send and d_is_read flags are set to TRUE.

    -
    Parameters
    - - -
    stateThe logical state to set the send_p flag.
    -
    -
    - -

    Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 568 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_synthesized_p (bool state)
    -
    -virtualinherited
    -
    -

    Set the synthesized flag. Before setting this flag be sure to set the read_p() state. Once this flag is set you cannot alter the state of the read_p flag!

    -
    See also
    synthesized_p()
    - -

    Definition at line 463 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_type()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_type (const Typet)
    -
    -virtualinherited
    -
    - -

    Sets the type of the class instance.

    - -

    Definition at line 372 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_value()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    template void libdap::D4Enum::set_value< dods_uint64 > (v,
    bool check_value = true 
    )
    -
    -inline
    -
    - -

    Set the value of the Enum Template member function to set the value of the Enum. The libdap library contains versions of this member function for dods_byte, ..., dods_uint64 types for the parameter v.

    -
    Parameters
    - - - -
    vSet the Enum to this value.
    check_valueIf true test the value 'v' against the type of the Enum. Defaults to true.
    -
    -
    - -

    Definition at line 154 of file D4Enum.h.

    - -
    -
    - -

    ◆ synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::synthesized_p ()
    -
    -virtualinherited
    -
    -

    Returns true if the variable is a synthesized variable. A synthesized variable is one that is added to the dataset by the server (usually with a `projection function'.

    - -

    Definition at line 452 of file BaseType.cc.

    - -
    -
    - -

    ◆ toString()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::toString ()
    -
    -virtualinherited
    -
    -

    Write out the object's internal fields in a string. To be used for debugging when regular inspection w/ddd or gdb isn't enough.

    -
    Returns
    A string which shows the object's internal stuff.
    - -

    Reimplemented in libdap::Sequence.

    - -

    Definition at line 184 of file BaseType.cc.

    - -
    -
    - -

    ◆ transfer_attributes()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::transfer_attributes (AttrTableat_container)
    -
    -virtualinherited
    -
    -

    Transfer attributes from a DAS object into this variable. Because of the rough history of the DAS object and the way that various server code built the DAS, this is necessarily a heuristic process. The intent is that this method will be overridden by handlers that need to look for certain patterns in the DAS (e.g., hdf4's odd variable_dim_n; where n = 0, 1, 2, ...) attribute containers.

    -

    There should be a one-to-one mapping between variables and attribute containers. However, in some cases one variable has attributes spread across several top level containers and in some cases one container is used by several variables

    -
    Note
    This method is technically unnecessary because a server (or client) can easily add attributes directly using the DDS::get_attr_table or BaseType::get_attr_table methods and then poke values in using any of the methods AttrTable provides. This method exists to ease the transition to DDS objects which contain attribute information for the existing servers (Since they all make DAS objects separately from the DDS). They could be modified to use the same AttrTable methods but operate on the AttrTable instances in a DDS/BaseType instead of those in a DAS.
    -
    Parameters
    - - -
    at_containerTransfer attributes from this container.
    -
    -
    -
    Returns
    void
    - -

    Reimplemented in libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 644 of file BaseType.cc.

    - -
    -
    - -

    ◆ transform_to_dap2()

    - -
    -
    - - - - - -
    - - - - - - - - -
    vector< BaseType * > * libdap::D4Enum::transform_to_dap2 (AttrTableparent_attr_table)
    -
    -virtual
    -
    - -

    Convert an Enum to a DAP2 int type.

    -

    Build a DAP2 integer type that matches the D4Enum's internal type and then add an attribute table to that new variable that holds the D4Enum's symbolic name and value mapping.

    -
    Parameters
    - - -
    attrAttrTable pointer, ignored by this method.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 92 of file D4Enum.cc.

    - -
    -
    - -

    ◆ transform_to_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::transform_to_dap4 (D4Grouproot,
    Constructorcontainer 
    )
    -
    -virtualinherited
    -
    - -

    DAP2 to DAP4 transform.

    -

    For the current BaseType, return a DAP4 'copy' of the variable.

    -
    Note
    For most DAP2 types, in this implementation of DAP4 the corresponding DAP4 type is the same. The different types are Sequences (which are D4Sequences in the DAP4 implementation), Grids (which are coverages) and Arrays (which use shared dimensions).
    -
    Parameters
    - - - -
    rootThe root group that should hold this new variable. Add Group-level stuff here (e.g., D4Dimensions).
    containerAdd the new variable to this container.
    -
    -
    -
    Returns
    A pointer to the transformed variable
    - -

    Reimplemented in libdap::Sequence, libdap::Array, libdap::Grid, libdap::Structure, and libdap::Constructor.

    - -

    Definition at line 216 of file BaseType.cc.

    - -
    -
    - -

    ◆ type()

    - -
    -
    - - - - - -
    - - - - - - - -
    Type libdap::BaseType::type () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance.

    - -

    Definition at line 365 of file BaseType.cc.

    - -
    -
    - -

    ◆ type_name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::type_name () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance as a string.

    - -

    Definition at line 379 of file BaseType.cc.

    - -
    -
    - -

    ◆ val2buf()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    unsigned int libdap::D4Enum::val2buf (void * val,
    bool reuse 
    )
    -
    -virtual
    -
    - -

    Loads class data.

    -

    Store the value pointed to by val in the object's internal buffer. This function does not perform any checks, so users must be sure that the thing pointed to can actually be stored in the object's buffer.

    -

    Only simple objects (Int, Float, Byte, and so on) and arrays of these simple objects may be stored using this function. To put data into more complex constructor types, use the functions provided by that class.

    -
    Deprecated:
    Use set_value() in the leaf classes.
    -
    Parameters
    - - - -
    valA pointer to the data to be inserted into the class data buffer.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect. This is currently used only in the Vector class.
    -
    -
    -
    Returns
    The size (in bytes) of the information copied from val.
    -
    See also
    Grid
    -
    -Vector::val2buf
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 495 of file D4Enum.cc.

    - -
    -
    - -

    ◆ value()

    - -
    -
    -
    -template<typename T >
    - - - - - -
    - - - - - - - - -
    template void libdap::D4Enum::value< dods_uint64 > (T * v) const
    -
    -inline
    -
    - -

    Get the value of an Enum Get the value of this instance. The caller is responsible for using a type T than can hold the value.

    -
    Parameters
    - - -
    vValue-result parameter; return the value of the Enum in this variable.
    -
    -
    - -

    Definition at line 140 of file D4Enum.h.

    - -
    -
    - -

    ◆ var() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::BaseType::var (const string & name = "",
    bool exact_match = true,
    btp_stack * s = 0 
    )
    -
    -virtualinherited
    -
    - -

    Returns a pointer to a member of a constructor class.

    -

    Returns a pointer to the contained variable in a composite class. The composite classes are those made up of aggregated simple data types. Array, Grid, and Structure are composite types, while Int and Float are simple types. This function is only used by composite classes. The BaseType implementation always returns null.

    -

    Several of the subclasses provide alternate access methods that make sense for that particular data type. For example, the Array class defines a *var(int i) method that returns the ith entry in the Array data, and the Structure provides a *var(Vars_iter) function using a pseudo-index to access the different members of the structure.

    -
    Parameters
    - - - - -
    nameThe name of the class member. Defaults to ""
    exact_matchTrue if only interested in variables whose full names match n exactly. If false, returns the first variable whose name matches name. For example, if name is x and point.x is a variable, then var("x", false) would return a BaseType pointer to point.x. If exact_match was true then name would need to be "point.x" for var to return that pointer. This feature simplifies constraint expressions for datasets which have complex, nested, constructor variables. Defaults to true.
    sRecord the path to name. Defaults to null, in which case it is not used.
    -
    -
    -
    Returns
    A pointer to the member named in the n argument. If no name is given, the function returns the first (only) variable. For example, an Array has only one variable, while a Structure can have many.
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 758 of file BaseType.cc.

    - -
    -
    - -

    ◆ var() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::BaseType::var (const string & name,
    btp_stack & s 
    )
    -
    -virtualinherited
    -
    -

    This version of var(...) searches for name and returns a pointer to the BaseType object if found. It uses the same search algorithm as BaseType::var(const string &, bool, btp_stack *) when exact_match is false. In addition to returning a pointer to the variable, it pushes onto s a BaseType pointer to each constructor type that ultimately contains name.

    -
    Note
    The BaseType implementation always returns null. There are no default values for the parameters. If var() is called w/o any params, the three parameter version will be used.
    -
    Deprecated:
    This method is deprecated because it tries first to use exact_match and, if that fails, then tries leaf_match. It's better to use the alternate form of var(...) and specify exactly what you'd like to do.
    -
    Returns
    A pointer to the named variable.
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 780 of file BaseType.cc.

    - -
    -
    - -

    ◆ width()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual unsigned int libdap::D4Enum::width (bool  = false) const
    -
    -inlinevirtual
    -
    - -

    Return the number of bytes in an instance of an Enum. This returns the number of bytes an instance of Enum will use in memory or on the wire (i.e., in a serialization of the type). On the wire this type uses the minimum number of bytes for the given Enum type - an Enum with type Byte uses one byte, Int16 uses two, and so on. In memory, a single instance uses 64-bits but a vector of these will use the same number of bytes per value as the on-the-wire representation.

    -
    Note
    The private method m_type_width() returns the byte width used for the on-the-wire representation of values.
    -
    Returns
    The number of bytes used by a value.
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 175 of file D4Enum.h.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1D4Enum.js b/html/classlibdap_1_1D4Enum.js deleted file mode 100644 index abe8bf5a0..000000000 --- a/html/classlibdap_1_1D4Enum.js +++ /dev/null @@ -1,86 +0,0 @@ -var classlibdap_1_1D4Enum = -[ - [ "btp_stack", "classlibdap_1_1D4Enum.html#ae9c6e71855b90a0e552713011c9ab81f", null ], - [ "D4Enum", "classlibdap_1_1D4Enum.html#af1579d21ee1db9d3f8107924d66e4b26", null ], - [ "D4Enum", "classlibdap_1_1D4Enum.html#a21c90ac91317ae1cbc051e4590fcb154", null ], - [ "D4Enum", "classlibdap_1_1D4Enum.html#adb1b1b72b44048612d6b4d6bd9ee9650", null ], - [ "D4Enum", "classlibdap_1_1D4Enum.html#ad6053f4506d3f1d116ae6ac86165a518", null ], - [ "~D4Enum", "classlibdap_1_1D4Enum.html#a3e63f98a9a3113052ba2e1f13c9172bb", null ], - [ "add_var", "classlibdap_1_1D4Enum.html#adca3c2621c4a509537c18362005d7f7f", null ], - [ "add_var_nocopy", "classlibdap_1_1D4Enum.html#aa1192360cea4dc516c822cd3e13dc723", null ], - [ "attributes", "classlibdap_1_1D4Enum.html#a97452f06d2188eb838399a709246b5e9", null ], - [ "buf2val", "classlibdap_1_1D4Enum.html#a5508dbda78827898d8728590bb1130b4", null ], - [ "check_semantics", "classlibdap_1_1D4Enum.html#aec503abec2fd3090e7738c0a575491f8", null ], - [ "clear_local_data", "classlibdap_1_1D4Enum.html#aaddb97a4efbe035f41deaf03c6e8683f", null ], - [ "compute_checksum", "classlibdap_1_1D4Enum.html#a5353acc53445e30f4c189e07ae1f3aa1", null ], - [ "d4_ops", "classlibdap_1_1D4Enum.html#a512a356f31ed6c4c1a368da0b054408a", null ], - [ "dataset", "classlibdap_1_1D4Enum.html#a47521ce321a17e6ce217870cb6a1a7aa", null ], - [ "deserialize", "classlibdap_1_1D4Enum.html#a4e9df94181f86c427666f10b2b7211bf", null ], - [ "deserialize", "classlibdap_1_1D4Enum.html#a1f27d99250e857efd86ac9db788bbf1b", null ], - [ "dump", "classlibdap_1_1D4Enum.html#a59b75c34bcb3210f235e226482529e81", null ], - [ "element_count", "classlibdap_1_1D4Enum.html#a5c2235737737b482bfa7536b8aeab810", null ], - [ "element_type", "classlibdap_1_1D4Enum.html#a07314bc68166a21ccf9bcdc0d3911a5e", null ], - [ "enumeration", "classlibdap_1_1D4Enum.html#a71018e270cea7bd50ed88964cfa85e4d", null ], - [ "FQN", "classlibdap_1_1D4Enum.html#a977cb954cc8f0d914d6f66ea0f48a9e3", null ], - [ "get_attr_table", "classlibdap_1_1D4Enum.html#a1fcd9537c67e3bf88964b2656ff5bac1", null ], - [ "get_parent", "classlibdap_1_1D4Enum.html#a3459cdaa239c33ce111ef360d8dc3017", null ], - [ "intern_data", "classlibdap_1_1D4Enum.html#a722d33783aa0272d339b0301a4f77e59", null ], - [ "intern_data", "classlibdap_1_1D4Enum.html#a1956e6ea90a745516f5372c859173433", null ], - [ "is_constructor_type", "classlibdap_1_1D4Enum.html#a8b8490e0047c6da52945699a132008ea", null ], - [ "is_dap4", "classlibdap_1_1D4Enum.html#a7f6835cb5e5589ab5dad3fb4813d3bea", null ], - [ "is_in_selection", "classlibdap_1_1D4Enum.html#ae302ab2ec26e9fc5b575bf5d3d09aa5c", null ], - [ "is_signed", "classlibdap_1_1D4Enum.html#ae91242794950049386186c9f76521c2b", null ], - [ "is_simple_type", "classlibdap_1_1D4Enum.html#aae57e5b270b3a015d40c8db10b9b5549", null ], - [ "is_vector_type", "classlibdap_1_1D4Enum.html#a7107c76dbcab71015141142383b6d022", null ], - [ "length", "classlibdap_1_1D4Enum.html#aadcda7a659157bc6a832d8a5fb775b3f", null ], - [ "m_duplicate", "classlibdap_1_1D4Enum.html#a0c55b826c8c5dfe7a454dc670e859a41", null ], - [ "name", "classlibdap_1_1D4Enum.html#a24c5d67823b3cff7f4245a993072a142", null ], - [ "operator=", "classlibdap_1_1D4Enum.html#acd6d55f3699cbb54421c624b56ce57ae", null ], - [ "ops", "classlibdap_1_1D4Enum.html#a300dfa8bd3ce44b3e2123397ac8c6415", null ], - [ "print_dap4", "classlibdap_1_1D4Enum.html#afcddbe441380b95c894510c02980b163", null ], - [ "print_decl", "classlibdap_1_1D4Enum.html#a2d799fad93255d7f2b803562ae7a5784", null ], - [ "print_decl", "classlibdap_1_1D4Enum.html#afd744b0ddeb04e7b173c9e83423ec572", null ], - [ "print_val", "classlibdap_1_1D4Enum.html#a87421c728d4728c38a6d62154306d420", null ], - [ "print_val", "classlibdap_1_1D4Enum.html#afb5e13838a599ec0efe2adbb2ae18f47", null ], - [ "print_xml", "classlibdap_1_1D4Enum.html#a825820edee179550cfde3dfd4d274f2a", null ], - [ "print_xml", "classlibdap_1_1D4Enum.html#a8bd2c7682edd48c64b210bdf247bdef7", null ], - [ "print_xml_writer", "classlibdap_1_1D4Enum.html#a87c488f6f90a079df648d45b6c0657ef", null ], - [ "ptr_duplicate", "classlibdap_1_1D4Enum.html#a8585358b06d90e8d689f572fb09ee326", null ], - [ "read", "classlibdap_1_1D4Enum.html#a1da003c53f2e663223f603ab3fbd7c8e", null ], - [ "read_p", "classlibdap_1_1D4Enum.html#a38ff819a432217c55db2e9071928d20c", null ], - [ "send_p", "classlibdap_1_1D4Enum.html#a980c0013817836aa77ef74aeec7fb192", null ], - [ "serialize", "classlibdap_1_1D4Enum.html#a524417cc7f1fd3776be4680c0af5c669", null ], - [ "serialize", "classlibdap_1_1D4Enum.html#adc24a735977e28acb0e6f78667c1dd21", null ], - [ "set_attr_table", "classlibdap_1_1D4Enum.html#a572a1d76a75981abac83a4241e90c0fa", null ], - [ "set_attributes", "classlibdap_1_1D4Enum.html#ad4dda4cf43dca838d3de183b8e01cd09", null ], - [ "set_attributes_nocopy", "classlibdap_1_1D4Enum.html#afd0e5f87d19020f560d5c1ff8dd4d6a3", null ], - [ "set_element_type", "classlibdap_1_1D4Enum.html#a4aa42beff78d5daf826cbfe6b6168f3c", null ], - [ "set_enumeration", "classlibdap_1_1D4Enum.html#ad2e7ed76ef9598c6b7b8e76482729e56", null ], - [ "set_in_selection", "classlibdap_1_1D4Enum.html#a2bc036248cdaf1affac464170f32ad30", null ], - [ "set_is_dap4", "classlibdap_1_1D4Enum.html#abca9ddaa9a1ada8447cbe7193e8e288a", null ], - [ "set_is_signed", "classlibdap_1_1D4Enum.html#a7dd244148c5ec73c9ad975c9e83866c4", null ], - [ "set_length", "classlibdap_1_1D4Enum.html#a4fe343c1eeb6fb1d61ab030433651d90", null ], - [ "set_name", "classlibdap_1_1D4Enum.html#a86504564f45a3e6748c6f1cc0ff4e9fa", null ], - [ "set_parent", "classlibdap_1_1D4Enum.html#a5b6a39f6ce6594fa74f3fc899ac9a966", null ], - [ "set_read_p", "classlibdap_1_1D4Enum.html#a4533905a450d2a7af32e7d5acd557676", null ], - [ "set_send_p", "classlibdap_1_1D4Enum.html#aba7b27635c95b74536de18393133628e", null ], - [ "set_synthesized_p", "classlibdap_1_1D4Enum.html#a595cb4059cff24f801a1b6da79bd2f9e", null ], - [ "set_type", "classlibdap_1_1D4Enum.html#af74f8d1ef57c9fcca46f620f75d175a3", null ], - [ "set_value", "classlibdap_1_1D4Enum.html#abc945a62587b02fe85c9146fd92a392b", null ], - [ "synthesized_p", "classlibdap_1_1D4Enum.html#ae64e677da27249473cdba0b60cdbb90a", null ], - [ "toString", "classlibdap_1_1D4Enum.html#a701eb3361f5b5628329ece019cd34519", null ], - [ "transfer_attributes", "classlibdap_1_1D4Enum.html#add8e836c622042a339152a6c31e5bdfb", null ], - [ "transform_to_dap2", "classlibdap_1_1D4Enum.html#a0c3a33d704e3970e53922b6e7d0a541d", null ], - [ "transform_to_dap4", "classlibdap_1_1D4Enum.html#adb03e2e1e40c3c888577c4666831a949", null ], - [ "type", "classlibdap_1_1D4Enum.html#af8e803b20a7a7dc5f2ef351d7fac4a56", null ], - [ "type_name", "classlibdap_1_1D4Enum.html#a18a42c8ec35cb5b15cd651a4152f8a2c", null ], - [ "val2buf", "classlibdap_1_1D4Enum.html#a9eff2897992fa47ddb3e459d19c54838", null ], - [ "value", "classlibdap_1_1D4Enum.html#ac8a61f83c03511688b764d18ba53c0a8", null ], - [ "var", "classlibdap_1_1D4Enum.html#a4dc4fac1bb6083f6db645f37bfd59b85", null ], - [ "var", "classlibdap_1_1D4Enum.html#adecfc442b5927c79933c7f71cfe03fd2", null ], - [ "width", "classlibdap_1_1D4Enum.html#a7c97d06faba4257c9d50af2a7edd54d1", null ], - [ "D4EnumTest", "classlibdap_1_1D4Enum.html#a484f375486fe27239d28b791c991678f", null ], - [ "d_buf", "classlibdap_1_1D4Enum.html#a5851d45097256d87118633522316ef44", null ], - [ "d_in_selection", "classlibdap_1_1D4Enum.html#a949a89714965d7afdcd1e3edc8b7f0d4", null ], - [ "d_is_synthesized", "classlibdap_1_1D4Enum.html#a629e97e8eb7d285b54c9af8c1ec9a29a", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1D4EnumDef-members.html b/html/classlibdap_1_1D4EnumDef-members.html deleted file mode 100644 index 249cab8df..000000000 --- a/html/classlibdap_1_1D4EnumDef-members.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::D4EnumDef Member List
    -
    -
    - -

    This is the complete list of members for libdap::D4EnumDef, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - -
    add_value(const string &label, long long value) (defined in libdap::D4EnumDef)libdap::D4EnumDefinline
    D4EnumDef() (defined in libdap::D4EnumDef)libdap::D4EnumDefinline
    D4EnumDef(const string &n, const Type &t, D4EnumDefs *e=0) (defined in libdap::D4EnumDef)libdap::D4EnumDefinline
    D4EnumDef(const D4EnumDef &rhs) (defined in libdap::D4EnumDef)libdap::D4EnumDefinline
    D4EnumValueIter typedef (defined in libdap::D4EnumDef)libdap::D4EnumDef
    empty() const (defined in libdap::D4EnumDef)libdap::D4EnumDefinline
    is_valid_enum_value(long long value)libdap::D4EnumDef
    label(D4EnumValueIter i) (defined in libdap::D4EnumDef)libdap::D4EnumDefinline
    name() const (defined in libdap::D4EnumDef)libdap::D4EnumDefinline
    operator=(const D4EnumDef &rhs) (defined in libdap::D4EnumDef)libdap::D4EnumDefinline
    parent() const (defined in libdap::D4EnumDef)libdap::D4EnumDefinline
    print_dap4(XMLWriter &xml) const (defined in libdap::D4EnumDef)libdap::D4EnumDef
    set_name(const string &n) (defined in libdap::D4EnumDef)libdap::D4EnumDefinline
    set_parent(D4EnumDefs *e) (defined in libdap::D4EnumDef)libdap::D4EnumDefinline
    set_type(Type t) (defined in libdap::D4EnumDef)libdap::D4EnumDefinline
    type() const (defined in libdap::D4EnumDef)libdap::D4EnumDefinline
    value(D4EnumValueIter i) (defined in libdap::D4EnumDef)libdap::D4EnumDefinline
    value_begin() (defined in libdap::D4EnumDef)libdap::D4EnumDefinline
    value_end() (defined in libdap::D4EnumDef)libdap::D4EnumDefinline
    ~D4EnumDef() (defined in libdap::D4EnumDef)libdap::D4EnumDefinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1D4EnumDef.html b/html/classlibdap_1_1D4EnumDef.html deleted file mode 100644 index 8d9dad874..000000000 --- a/html/classlibdap_1_1D4EnumDef.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - - -libdap: libdap::D4EnumDef Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::D4EnumDef Class Reference
    -
    -
    - - - - -

    -Public Types

    -typedef vector< tuple >::iterator D4EnumValueIter
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    -void add_value (const string &label, long long value)
     
    D4EnumDef (const string &n, const Type &t, D4EnumDefs *e=0)
     
    D4EnumDef (const D4EnumDef &rhs)
     
    -bool empty () const
     
    bool is_valid_enum_value (long long value)
     
    -string & label (D4EnumValueIter i)
     
    -string name () const
     
    -D4EnumDefoperator= (const D4EnumDef &rhs)
     
    -D4EnumDefsparent () const
     
    -void print_dap4 (XMLWriter &xml) const
     
    -void set_name (const string &n)
     
    -void set_parent (D4EnumDefs *e)
     
    -void set_type (Type t)
     
    -Type type () const
     
    -long long value (D4EnumValueIter i)
     
    -D4EnumValueIter value_begin ()
     
    -D4EnumValueIter value_end ()
     
    -

    Detailed Description

    -
    -

    Definition at line 42 of file D4EnumDefs.h.

    -

    Member Function Documentation

    - -

    ◆ is_valid_enum_value()

    - -
    -
    - - - - - - - - -
    bool libdap::D4EnumDef::is_valid_enum_value (long long value)
    -
    -

    Test if a particular value is legal for a given type. In a D4EnumDef, all values are actually stored in a long long, but the different enumerations can specify different types like Byte, Int32, ..., and this method is used to test that the values match those types.

    - -

    Definition at line 43 of file D4EnumDefs.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1D4EnumDef.js b/html/classlibdap_1_1D4EnumDef.js deleted file mode 100644 index e762b42e6..000000000 --- a/html/classlibdap_1_1D4EnumDef.js +++ /dev/null @@ -1,23 +0,0 @@ -var classlibdap_1_1D4EnumDef = -[ - [ "D4EnumValueIter", "classlibdap_1_1D4EnumDef.html#a51fbced480f0bf5c34399442605f52db", null ], - [ "D4EnumDef", "classlibdap_1_1D4EnumDef.html#a147060c99e6d2bd2a065bc27b4ca5cde", null ], - [ "D4EnumDef", "classlibdap_1_1D4EnumDef.html#a89f496c725ac7479b38986a5ae12ff8f", null ], - [ "D4EnumDef", "classlibdap_1_1D4EnumDef.html#a7cd877b0864aa853a14f0bb8c78b49c8", null ], - [ "~D4EnumDef", "classlibdap_1_1D4EnumDef.html#a09e6ad82439d5a736fc62f050492aa9e", null ], - [ "add_value", "classlibdap_1_1D4EnumDef.html#a7ebbcd814c5516cc5bd8f81d88b40c55", null ], - [ "empty", "classlibdap_1_1D4EnumDef.html#a617d24e9298285af187aa14a1a95553e", null ], - [ "is_valid_enum_value", "classlibdap_1_1D4EnumDef.html#af2c114ec827866cd344fc4dc620caa06", null ], - [ "label", "classlibdap_1_1D4EnumDef.html#a86e2dd0180d50a62e1b6c9458bc80bc9", null ], - [ "name", "classlibdap_1_1D4EnumDef.html#ae3fafc9b61586d13f0d5c3c569676422", null ], - [ "operator=", "classlibdap_1_1D4EnumDef.html#a74552a23eb2c131d0faafee6483ea91c", null ], - [ "parent", "classlibdap_1_1D4EnumDef.html#a1829485c70be6cd11b970ecf1f716b65", null ], - [ "print_dap4", "classlibdap_1_1D4EnumDef.html#aa64f66f4aa65f99a8e8a0509a4857206", null ], - [ "set_name", "classlibdap_1_1D4EnumDef.html#a55ac64d339aa55fbd1afb3576a4782ef", null ], - [ "set_parent", "classlibdap_1_1D4EnumDef.html#aaf9020df7ec3a318f8170904db21e496", null ], - [ "set_type", "classlibdap_1_1D4EnumDef.html#a5eb39aa9ffa5e7e9be32078a4862e69a", null ], - [ "type", "classlibdap_1_1D4EnumDef.html#a27b1f8ef6f896df6805686327f0f1274", null ], - [ "value", "classlibdap_1_1D4EnumDef.html#a613776c1f6ab77e97e174d40448a5cb3", null ], - [ "value_begin", "classlibdap_1_1D4EnumDef.html#a9ecf7791accad7c0d03ae0a242accb9d", null ], - [ "value_end", "classlibdap_1_1D4EnumDef.html#a097e0a7674866d28c9468a33f8cd865b", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1D4EnumDefs-members.html b/html/classlibdap_1_1D4EnumDefs-members.html deleted file mode 100644 index cc3979fd3..000000000 --- a/html/classlibdap_1_1D4EnumDefs-members.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::D4EnumDefs Member List
    -
    -
    - -

    This is the complete list of members for libdap::D4EnumDefs, including all inherited members.

    - - - - - - - - - - - - - - - - - -
    add_enum(D4EnumDef *enum_def)libdap::D4EnumDefsinline
    add_enum_nocopy(D4EnumDef *enum_def) (defined in libdap::D4EnumDefs)libdap::D4EnumDefsinline
    D4EnumDefCIter typedef (defined in libdap::D4EnumDefs)libdap::D4EnumDefs
    D4EnumDefIter typedef (defined in libdap::D4EnumDefs)libdap::D4EnumDefs
    D4EnumDefs() (defined in libdap::D4EnumDefs)libdap::D4EnumDefsinline
    D4EnumDefs(const D4EnumDefs &rhs) (defined in libdap::D4EnumDefs)libdap::D4EnumDefsinline
    empty() const (defined in libdap::D4EnumDefs)libdap::D4EnumDefsinline
    enum_begin()libdap::D4EnumDefsinline
    enum_end()libdap::D4EnumDefsinline
    find_enum_def(const string &name) (defined in libdap::D4EnumDefs)libdap::D4EnumDefs
    insert_enum(D4EnumDef *enum_def, D4EnumDefIter i)libdap::D4EnumDefsinline
    operator=(const D4EnumDefs &rhs) (defined in libdap::D4EnumDefs)libdap::D4EnumDefsinline
    parent() const (defined in libdap::D4EnumDefs)libdap::D4EnumDefsinline
    print_dap4(XMLWriter &xml, bool constrained=false) const (defined in libdap::D4EnumDefs)libdap::D4EnumDefs
    set_parent(D4Group *p) (defined in libdap::D4EnumDefs)libdap::D4EnumDefsinline
    ~D4EnumDefs() (defined in libdap::D4EnumDefs)libdap::D4EnumDefsinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1D4EnumDefs.html b/html/classlibdap_1_1D4EnumDefs.html deleted file mode 100644 index c32ea38d2..000000000 --- a/html/classlibdap_1_1D4EnumDefs.html +++ /dev/null @@ -1,283 +0,0 @@ - - - - - - - -libdap: libdap::D4EnumDefs Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::D4EnumDefs Class Reference
    -
    -
    - -

    #include <D4EnumDefs.h>

    - - - - - - -

    -Public Types

    -typedef vector< D4EnumDef * >::const_iterator D4EnumDefCIter
     
    -typedef vector< D4EnumDef * >::iterator D4EnumDefIter
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    void add_enum (D4EnumDef *enum_def)
     
    -void add_enum_nocopy (D4EnumDef *enum_def)
     
    D4EnumDefs (const D4EnumDefs &rhs)
     
    -bool empty () const
     
    D4EnumDefIter enum_begin ()
     Get an iterator to the start of the enumerations. More...
     
    D4EnumDefIter enum_end ()
     Get an iterator to the end of the enumerations. More...
     
    -D4EnumDeffind_enum_def (const string &name)
     
    void insert_enum (D4EnumDef *enum_def, D4EnumDefIter i)
     Insert a D4EnumDef. Insert a D4EnumDef before the position specified by the iterator. More...
     
    -D4EnumDefsoperator= (const D4EnumDefs &rhs)
     
    -D4Groupparent () const
     
    -void print_dap4 (XMLWriter &xml, bool constrained=false) const
     
    -void set_parent (D4Group *p)
     
    -

    Detailed Description

    -

    The Enumerations defined for a Group.

    - -

    Definition at line 108 of file D4EnumDefs.h.

    -

    Member Function Documentation

    - -

    ◆ add_enum()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::D4EnumDefs::add_enum (D4EnumDefenum_def)
    -
    -inline
    -
    -

    Append a new D4EnumDef.

    -
    Parameters
    - - -
    enum_defThe enumeration.
    -
    -
    - -

    Definition at line 155 of file D4EnumDefs.h.

    - -
    -
    - -

    ◆ enum_begin()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4EnumDefIter libdap::D4EnumDefs::enum_begin ()
    -
    -inline
    -
    - -

    Get an iterator to the start of the enumerations.

    - -

    Definition at line 164 of file D4EnumDefs.h.

    - -
    -
    - -

    ◆ enum_end()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4EnumDefIter libdap::D4EnumDefs::enum_end ()
    -
    -inline
    -
    - -

    Get an iterator to the end of the enumerations.

    - -

    Definition at line 167 of file D4EnumDefs.h.

    - -
    -
    - -

    ◆ insert_enum()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::D4EnumDefs::insert_enum (D4EnumDefenum_def,
    D4EnumDefIter i 
    )
    -
    -inline
    -
    - -

    Insert a D4EnumDef. Insert a D4EnumDef before the position specified by the iterator.

    -
    Note
    Calling this method invalidates all iterators that reference this D4EnumDef object.
    -
    Parameters
    - - - -
    enum_defMake a deep copy and insert the enumeration definition
    iiterator
    -
    -
    - -

    Definition at line 179 of file D4EnumDefs.h.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1D4EnumDefs.js b/html/classlibdap_1_1D4EnumDefs.js deleted file mode 100644 index b2ee3e7e2..000000000 --- a/html/classlibdap_1_1D4EnumDefs.js +++ /dev/null @@ -1,19 +0,0 @@ -var classlibdap_1_1D4EnumDefs = -[ - [ "D4EnumDefCIter", "classlibdap_1_1D4EnumDefs.html#ae171025a5e8c27d0fb5ddd43fed1e043", null ], - [ "D4EnumDefIter", "classlibdap_1_1D4EnumDefs.html#a26a989264f3a85b4af585ea1a4f53924", null ], - [ "D4EnumDefs", "classlibdap_1_1D4EnumDefs.html#afc16d7a23d7555f3834f2454b54bce6d", null ], - [ "D4EnumDefs", "classlibdap_1_1D4EnumDefs.html#ac1e6a3fe53cbf25f4d9f2ecb0f4c1fb8", null ], - [ "~D4EnumDefs", "classlibdap_1_1D4EnumDefs.html#a3cfbaafcd03f6b09bf5ef780cda4ae3e", null ], - [ "add_enum", "classlibdap_1_1D4EnumDefs.html#a79d4486eb22736c01552a591a48239f3", null ], - [ "add_enum_nocopy", "classlibdap_1_1D4EnumDefs.html#a865e8d255f58705d08c6b04e8e6159ce", null ], - [ "empty", "classlibdap_1_1D4EnumDefs.html#a3e27b472ef9397d38d4d5f605b20c5c9", null ], - [ "enum_begin", "classlibdap_1_1D4EnumDefs.html#adc6ee4d3059ddc1c78e38416df6aede4", null ], - [ "enum_end", "classlibdap_1_1D4EnumDefs.html#a791cd139eb848e2dc4ba13387abbea4a", null ], - [ "find_enum_def", "classlibdap_1_1D4EnumDefs.html#afef2369e71b0fd88a180f9e26fc32cbc", null ], - [ "insert_enum", "classlibdap_1_1D4EnumDefs.html#a4988b9d5ad3729b3ecc86ee914d04b96", null ], - [ "operator=", "classlibdap_1_1D4EnumDefs.html#a7ac9626f598d10c7b8aefd99660c3356", null ], - [ "parent", "classlibdap_1_1D4EnumDefs.html#a7f97c8e1602d98ba2fbeec6c6d23cd65", null ], - [ "print_dap4", "classlibdap_1_1D4EnumDefs.html#a49f23d7d067df71c12752a9eb35e3156", null ], - [ "set_parent", "classlibdap_1_1D4EnumDefs.html#a4eac1c62e71ed7be3aaf769967e0123a", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1D4Enum__inherit__graph.map b/html/classlibdap_1_1D4Enum__inherit__graph.map deleted file mode 100644 index 0155d1c74..000000000 --- a/html/classlibdap_1_1D4Enum__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1D4Enum__inherit__graph.md5 b/html/classlibdap_1_1D4Enum__inherit__graph.md5 deleted file mode 100644 index 29ede45c6..000000000 --- a/html/classlibdap_1_1D4Enum__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -762e84dd3bc64c15266a63fdb9c13bbb \ No newline at end of file diff --git a/html/classlibdap_1_1D4Enum__inherit__graph.png b/html/classlibdap_1_1D4Enum__inherit__graph.png deleted file mode 100644 index d1a7ef2f512912d1af7fe805c045d8d74ccf85eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62880 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�FF%siM zceLe@sIQ>Cd@A^RG{&mE{kV7)bY#A{F6e+Ky>6Pc^fZVrW+J>A0Ts_TfE(!PBNH;;2Os-!B^tg0WMwa60-^jaM+0?o9 z3w4RU;}M?Gf3xDjsU_Z1=@itd}yo4+vC2RYJkd|$?VtdX|Im!2~97AZYW z$Qr4`+7Sacu!n)mR(>wEF+vzu92ADRN3E$=LO*pn?i`6%S8o-LJcd-zo+uNIZU)~x86|U{ABy!J zczMP;M}TYnDh$#Q(0TCXfM9q+S|d|rW?xmB;fyMPlZS!?EAyJD-xi2V{T0`&&oygg z5%6*l-U9>e^~Q6QjMmv4jR*$|ZJR+dQNZK67Al`Je!Bd;8q7}6WndnA=Z}VNtPedh zP`FdeHQSGM5LJq}c=cg=F74gpH}nMuqp@l?fjctX_6QvZ8H&}^B4`?8E9S1!v6hC# zMA1R=5NFHds|G9fFa>aZE1-!Bkf&aat!EQXswP;b5rVttFP|O|2%{|xd}xXumzyTw zz-dYo-^x78vKaFu!!e4CI~zqZtxV}I`|iVMw>oLHk=v+aK}io}@aWUlHSje<(fZmY zlD<5NX0P*`dl6>k<@H5&pC+prwyD%#^)J2Px5dtc4T7@pEpjAtA-$E7nLoK<<8Oj_wjLiJ39XM zn`CXS`9WcFZlCB4L!TauFB5SNYz3IF_&{&4<3h ze!j%#w88fz-#GQ5AVHuvn?ce`9;CkE@NTePwcX5lox;S7Jnl!Th1!Wk^*|A#Fy#6B ze)d-@Vf>P)GLVv`TNb>-&ZSdd!Y!L0_HqY~?b+ys(`}2D-shWFpBj%#G%w&~ADOB>`WL^kef(DmNr~>v9u?)53m^mEb8lW=X-VY zmzm(nzDu!G`t@_`57)899&r`oB+ir-SUS8+Pq5&qyYKKhQtairD*}VIa z!pOy(Yh4{0!sr+62NKx>rf|DQE+mnA0Fb8gmL{|lw69&vMznTkk04^2kH-J|T@zB| z4(A-##~y^-_MBTK-45Tg_pvt^c<<)j3&rODSB+R<7;v*$M&sh?bbo#JXxpY;ndQ6n z_q=B)?d-3eNb%-B_OodxG|JYDm?Pg_c3bw^zE9a36%F_r@Xiy

    mR;E(dwA4LMFU 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%0A!;VI7uH* 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ீv~Wc!ToXn#Kr*sjf8EH#!sbD)}#c1 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 diff --git a/html/classlibdap_1_1D4FilterClause-members.html b/html/classlibdap_1_1D4FilterClause-members.html deleted file mode 100644 index 319a19259..000000000 --- a/html/classlibdap_1_1D4FilterClause-members.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -

    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::D4FilterClause Member List
    -
    -
    - -

    This is the complete list of members for libdap::D4FilterClause, including all inherited members.

    - - - - - - - - - - - - - - - - - - - -
    D4FilterClause(const ops op, D4RValue *arg1, D4RValue *arg2)libdap::D4FilterClauseinline
    D4FilterClause(const D4FilterClause &src) (defined in libdap::D4FilterClause)libdap::D4FilterClauseinline
    D4FilterClauseList (defined in libdap::D4FilterClause)libdap::D4FilterClausefriend
    equal enum value (defined in libdap::D4FilterClause)libdap::D4FilterClause
    greater enum value (defined in libdap::D4FilterClause)libdap::D4FilterClause
    greater_equal enum value (defined in libdap::D4FilterClause)libdap::D4FilterClause
    less enum value (defined in libdap::D4FilterClause)libdap::D4FilterClause
    less_equal enum value (defined in libdap::D4FilterClause)libdap::D4FilterClause
    map enum value (defined in libdap::D4FilterClause)libdap::D4FilterClause
    match enum value (defined in libdap::D4FilterClause)libdap::D4FilterClause
    ND enum value (defined in libdap::D4FilterClause)libdap::D4FilterClause
    not_equal enum value (defined in libdap::D4FilterClause)libdap::D4FilterClause
    null enum value (defined in libdap::D4FilterClause)libdap::D4FilterClause
    operator=(const D4FilterClause &rhs) (defined in libdap::D4FilterClause)libdap::D4FilterClauseinline
    ops enum name (defined in libdap::D4FilterClause)libdap::D4FilterClause
    value(DMR &dmr)libdap::D4FilterClause
    value()libdap::D4FilterClause
    ~D4FilterClause() (defined in libdap::D4FilterClause)libdap::D4FilterClauseinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1D4FilterClause.html b/html/classlibdap_1_1D4FilterClause.html deleted file mode 100644 index a38e3cb8c..000000000 --- a/html/classlibdap_1_1D4FilterClause.html +++ /dev/null @@ -1,254 +0,0 @@ - - - - - - - -libdap: libdap::D4FilterClause Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::D4FilterClause Class Reference
    -
    -
    - -

    DAP4 filter clauses. - More...

    - -

    #include <D4FilterClause.h>

    - - - - -

    -Public Types

    enum  ops {
    -  null = 0, -less = SCAN_LESS, -greater = SCAN_GREATER, -less_equal = SCAN_LESS_EQL, -
    -  greater_equal = SCAN_GREATER_EQL, -equal = SCAN_EQUAL, -not_equal = SCAN_NOT_EQUAL, -match = SCAN_REGEXP, -
    -  map, -ND -
    - }
     
    - - - - - - - - - - - - - -

    -Public Member Functions

     D4FilterClause (const ops op, D4RValue *arg1, D4RValue *arg2)
     
    D4FilterClause (const D4FilterClause &src)
     
    -D4FilterClauseoperator= (const D4FilterClause &rhs)
     
    bool value (DMR &dmr)
     Get the value of this relational expression. This version of value() works for function clauses, although that's not supported by the syntax at this time. More...
     
    bool value ()
     Get the value of this relational expression. This version of value() will not work for clauses where one of the rvalues is a function call. This is not currently supported by the DAP4 specification, so it's probably no great loss. More...
     
    - - - -

    -Friends

    -class D4FilterClauseList
     
    -

    Detailed Description

    -

    DAP4 filter clauses.

    -

    The DAP4 constraint expression provides a way to filter the values of Sequences (and possibly arrays and coverages, although those are still more ideas than anything at this point). This class holds the operator and operands of one DAP4 constraint's filter clause. The object is built during the parse phase of the constraint evaluation but is not evaluated until the data are sent or interned (read into the DAP4 variable object so that they can be used as input to some process other than directly being sent to a remote client).

    -

    For filter clauses that are to be applied to a Sequence, each D4RValue will either be a constant or a BaseType* that will reference one of the Sequences fields. The method 'value()' is effectively the evaluator for the clause and nominally reads values from the rvalue objects.

    -
    Note
    Potential optimization: Because Sequences might have an optimized representation as a STL vector of some built in types, there could be a value() method that takes a value and compares it to the clause's constant value using the supplied op.
    -
    -The 'ND' and 'map' ops are 'still just an idea' parts.
    - -

    Definition at line 114 of file D4FilterClause.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ D4FilterClause()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    libdap::D4FilterClause::D4FilterClause (const ops op,
    D4RValuearg1,
    D4RValuearg2 
    )
    -
    -inline
    -
    -

    Build a D4FilterClause. The clause will take ownership of the two pointer arguments and delete them.

    -
    Note
    When comparing an unsigned variable (UInt16) with a constant, at parse time (i.e., when the D4FilterClause is made) check that the constant is >= 0 and store it in an unsigned value at that time. This will avoid having to make the test repeatedly during filter evaluation.
    -
    -When parsing a constant, extract the value from the BaseType and store it in a local field, to avoid the overhead of extracting the value and looking up its type over an over.
    -
    Parameters
    - - - - -
    opThe operator
    arg1The left-hand operand
    arg2The right-hand operand
    -
    -
    - -

    Definition at line 169 of file D4FilterClause.h.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ value() [1/2]

    - -
    -
    - - - - - - - - -
    bool libdap::D4FilterClause::value (DMRdmr)
    -
    - -

    Get the value of this relational expression. This version of value() works for function clauses, although that's not supported by the syntax at this time.

    -
    Parameters
    - - -
    dmrThe DMR to use when evaluating a function
    -
    -
    -
    Returns
    True if the clause is true, false otherwise.
    - -

    Definition at line 146 of file D4FilterClause.cc.

    - -
    -
    - -

    ◆ value() [2/2]

    - -
    -
    - - - - - - - -
    bool libdap::D4FilterClause::value ()
    -
    - -

    Get the value of this relational expression. This version of value() will not work for clauses where one of the rvalues is a function call. This is not currently supported by the DAP4 specification, so it's probably no great loss.

    -
    Returns
    True if the clause is true, false otherwise.
    - -

    Definition at line 177 of file D4FilterClause.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1D4FilterClause.js b/html/classlibdap_1_1D4FilterClause.js deleted file mode 100644 index aac96bd00..000000000 --- a/html/classlibdap_1_1D4FilterClause.js +++ /dev/null @@ -1,22 +0,0 @@ -var classlibdap_1_1D4FilterClause = -[ - [ "ops", "classlibdap_1_1D4FilterClause.html#ad47cb9f3fbd100cee1a6bcf295c32de6", [ - [ "null", "classlibdap_1_1D4FilterClause.html#ad47cb9f3fbd100cee1a6bcf295c32de6a00283cc61117548dbc446eec57fb6fe1", null ], - [ "less", "classlibdap_1_1D4FilterClause.html#ad47cb9f3fbd100cee1a6bcf295c32de6ab431391984b3eae1e7f91fc35b4827be", null ], - [ "greater", "classlibdap_1_1D4FilterClause.html#ad47cb9f3fbd100cee1a6bcf295c32de6a98a1b971572b7eb493092b0033de734a", null ], - [ "less_equal", "classlibdap_1_1D4FilterClause.html#ad47cb9f3fbd100cee1a6bcf295c32de6ab343a5fa0fdddd515bc35d8dd22ac225", null ], - [ "greater_equal", "classlibdap_1_1D4FilterClause.html#ad47cb9f3fbd100cee1a6bcf295c32de6af08f571b34ee32e845dfd9f9d3f230e0", null ], - [ "equal", "classlibdap_1_1D4FilterClause.html#ad47cb9f3fbd100cee1a6bcf295c32de6a3a7c0a9bb9497875627be5d6a7df9fab", null ], - [ "not_equal", "classlibdap_1_1D4FilterClause.html#ad47cb9f3fbd100cee1a6bcf295c32de6ab5b8d9722252665ad08ba7aa19d8e847", null ], - [ "match", "classlibdap_1_1D4FilterClause.html#ad47cb9f3fbd100cee1a6bcf295c32de6a6ede6e1fc1cc400c56e1de03c6492960", null ], - [ "map", "classlibdap_1_1D4FilterClause.html#ad47cb9f3fbd100cee1a6bcf295c32de6aa90e63b2c487cc09650a70715941e074", null ], - [ "ND", "classlibdap_1_1D4FilterClause.html#ad47cb9f3fbd100cee1a6bcf295c32de6a7dd219b884fb166ff578d1f438424ce2", null ] - ] ], - [ "D4FilterClause", "classlibdap_1_1D4FilterClause.html#a74c6d2b4e479c186b924d96ddff9466f", null ], - [ "D4FilterClause", "classlibdap_1_1D4FilterClause.html#a4d2a4b5c4c20762ab123e887050bcd92", null ], - [ "~D4FilterClause", "classlibdap_1_1D4FilterClause.html#aee2c2422e5e5b3d2bee8ea357d178390", null ], - [ "operator=", "classlibdap_1_1D4FilterClause.html#a400f0ec3c17c0e51edfbf01af000e2f0", null ], - [ "value", "classlibdap_1_1D4FilterClause.html#ab49550e5f468040ee40bf54a72156b1a", null ], - [ "value", "classlibdap_1_1D4FilterClause.html#a4860fa85c00f973512f4bf86ae4126f4", null ], - [ "D4FilterClauseList", "classlibdap_1_1D4FilterClause.html#a08ab1e3d9dea607c02ec0b676a13718f", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1D4FilterClauseList-members.html b/html/classlibdap_1_1D4FilterClauseList-members.html deleted file mode 100644 index f9abf66af..000000000 --- a/html/classlibdap_1_1D4FilterClauseList-members.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::D4FilterClauseList Member List
    -
    -
    - -

    This is the complete list of members for libdap::D4FilterClauseList, including all inherited members.

    - - - - - - - - - - - - - - - -
    add_clause(D4FilterClause *c) (defined in libdap::D4FilterClauseList)libdap::D4FilterClauseListinline
    cbegin() const (defined in libdap::D4FilterClauseList)libdap::D4FilterClauseListinline
    cend() const (defined in libdap::D4FilterClauseList)libdap::D4FilterClauseListinline
    citer typedef (defined in libdap::D4FilterClauseList)libdap::D4FilterClauseList
    D4FilterClauseList() (defined in libdap::D4FilterClauseList)libdap::D4FilterClauseListinline
    D4FilterClauseList(const D4FilterClauseList &src) (defined in libdap::D4FilterClauseList)libdap::D4FilterClauseListinline
    D4FilterClauseList(D4FilterClause *c) (defined in libdap::D4FilterClauseList)libdap::D4FilterClauseListinline
    get_clause(unsigned int i) (defined in libdap::D4FilterClauseList)libdap::D4FilterClauseListinline
    iter typedef (defined in libdap::D4FilterClauseList)libdap::D4FilterClauseList
    operator=(const D4FilterClauseList &rhs) (defined in libdap::D4FilterClauseList)libdap::D4FilterClauseListinline
    size() const (defined in libdap::D4FilterClauseList)libdap::D4FilterClauseListinline
    value(DMR &dmr)libdap::D4FilterClauseList
    value()libdap::D4FilterClauseList
    ~D4FilterClauseList() (defined in libdap::D4FilterClauseList)libdap::D4FilterClauseListvirtual
    -
    - - - - diff --git a/html/classlibdap_1_1D4FilterClauseList.html b/html/classlibdap_1_1D4FilterClauseList.html deleted file mode 100644 index f3b1f9ba9..000000000 --- a/html/classlibdap_1_1D4FilterClauseList.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - - -libdap: libdap::D4FilterClauseList Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::D4FilterClauseList Class Reference
    -
    -
    - -

    List of DAP4 Filter Clauses. - More...

    - -

    #include <D4FilterClause.h>

    - - - - - - -

    -Public Types

    -typedef std::vector< D4FilterClause * >::const_iterator citer
     
    -typedef std::vector< D4FilterClause * >::iterator iter
     
    - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    -void add_clause (D4FilterClause *c)
     
    -citer cbegin () const
     
    -citer cend () const
     
    D4FilterClauseList (const D4FilterClauseList &src)
     
    D4FilterClauseList (D4FilterClause *c)
     
    -D4FilterClauseget_clause (unsigned int i)
     
    -D4FilterClauseListoperator= (const D4FilterClauseList &rhs)
     
    -unsigned int size () const
     
    bool value (DMR &dmr)
     Evaluate the list of clauses. More...
     
    bool value ()
     Evaluate the list of clauses. More...
     
    -

    Detailed Description

    -

    List of DAP4 Filter Clauses.

    - -

    Definition at line 44 of file D4FilterClause.h.

    -

    Member Function Documentation

    - -

    ◆ value() [1/2]

    - -
    -
    - - - - - - - - -
    bool libdap::D4FilterClauseList::value (DMRdmr)
    -
    - -

    Evaluate the list of clauses.

    -

    Evaluate the list of clauses and return false when/if one is found to be false. This evaluates the clauses in the order they are stored and stops evaluation a the first false clause.

    -
    Parameters
    - - -
    dmrUse this DMR when evaluating clauses - for clauses that contain functions, not currently in the DAP4 specification.
    -
    -
    -
    Returns
    True if each of the clauses' value is true, otherwise false
    - -

    Definition at line 74 of file D4FilterClause.cc.

    - -
    -
    - -

    ◆ value() [2/2]

    - -
    -
    - - - - - - - -
    bool libdap::D4FilterClauseList::value ()
    -
    - -

    Evaluate the list of clauses.

    -

    This version of value() does not need a DMR parameter (but will not work if the clauses contain a function call (which is not currently supported by the spec).

    -
    Returns
    True if each clauses' value is true, false otherwise
    -
    See also
    D4FilterClauseList::value(DMR &dmr)
    - -

    Definition at line 95 of file D4FilterClause.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1D4FilterClauseList.js b/html/classlibdap_1_1D4FilterClauseList.js deleted file mode 100644 index 789472423..000000000 --- a/html/classlibdap_1_1D4FilterClauseList.js +++ /dev/null @@ -1,17 +0,0 @@ -var classlibdap_1_1D4FilterClauseList = -[ - [ "citer", "classlibdap_1_1D4FilterClauseList.html#a42eb9eccf2dbf506eedec855e964cd9f", null ], - [ "iter", "classlibdap_1_1D4FilterClauseList.html#a3547abeda0ec94d32907cf1864d8cd17", null ], - [ "D4FilterClauseList", "classlibdap_1_1D4FilterClauseList.html#a68b5030e5ecf8fca6207eedd0f1be15a", null ], - [ "D4FilterClauseList", "classlibdap_1_1D4FilterClauseList.html#a8b5abd21a5464b9f5367ff3abd72a3f3", null ], - [ "D4FilterClauseList", "classlibdap_1_1D4FilterClauseList.html#aad8707258bb6c2beb06d73d0e066cad4", null ], - [ "~D4FilterClauseList", "classlibdap_1_1D4FilterClauseList.html#a819e2f20a7cfa418cd41d18db6de1258", null ], - [ "add_clause", "classlibdap_1_1D4FilterClauseList.html#a835e4bbd1c377c7de142bfb14cce0369", null ], - [ "cbegin", "classlibdap_1_1D4FilterClauseList.html#a43cdd52d8252278737aa5c80b8bebff2", null ], - [ "cend", "classlibdap_1_1D4FilterClauseList.html#a672b885017adec530cb6d00522c99c9d", null ], - [ "get_clause", "classlibdap_1_1D4FilterClauseList.html#a4fe082d4e38bcfdff15c33dc61209fc4", null ], - [ "operator=", "classlibdap_1_1D4FilterClauseList.html#aedc9a4f23f37701ee3a871d2316c9e7f", null ], - [ "size", "classlibdap_1_1D4FilterClauseList.html#a3ffb783cc382930c5c61148bea3affeb", null ], - [ "value", "classlibdap_1_1D4FilterClauseList.html#ae559b853739a7394299311f8e32e55c4", null ], - [ "value", "classlibdap_1_1D4FilterClauseList.html#a7bcb42d6670d47622f1666e709b20f47", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1D4FunctionEvaluator-members.html b/html/classlibdap_1_1D4FunctionEvaluator-members.html deleted file mode 100644 index dd1ea9c35..000000000 --- a/html/classlibdap_1_1D4FunctionEvaluator-members.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::D4FunctionEvaluator Member List
    -
    -
    - -

    This is the complete list of members for libdap::D4FunctionEvaluator, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - -
    D4FunctionEvaluator() (defined in libdap::D4FunctionEvaluator)libdap::D4FunctionEvaluatorinline
    D4FunctionEvaluator(DMR *dmr, ServerFunctionsList *sf_list) (defined in libdap::D4FunctionEvaluator)libdap::D4FunctionEvaluatorinline
    D4FunctionParser (defined in libdap::D4FunctionEvaluator)libdap::D4FunctionEvaluatorfriend
    dmr() const (defined in libdap::D4FunctionEvaluator)libdap::D4FunctionEvaluatorinline
    error(const libdap::location &l, const std::string &m) (defined in libdap::D4FunctionEvaluator)libdap::D4FunctionEvaluator
    eval(DMR *dmr)libdap::D4FunctionEvaluator
    get_arg_length_hint() const (defined in libdap::D4FunctionEvaluator)libdap::D4FunctionEvaluatorinline
    init_arg_list(t val) (defined in libdap::D4FunctionEvaluator)libdap::D4FunctionEvaluator
    init_arg_list(T val) (defined in libdap::D4FunctionEvaluator)libdap::D4FunctionEvaluator
    parse(const std::string &expr)libdap::D4FunctionEvaluator
    result() constlibdap::D4FunctionEvaluatorinline
    set_arg_length_hint(unsigned long long alh) (defined in libdap::D4FunctionEvaluator)libdap::D4FunctionEvaluatorinline
    set_dmr(DMR *dmr) (defined in libdap::D4FunctionEvaluator)libdap::D4FunctionEvaluatorinline
    set_result(D4RValueList *rv_list) (defined in libdap::D4FunctionEvaluator)libdap::D4FunctionEvaluatorinline
    set_sf_list(ServerFunctionsList *sf_list) (defined in libdap::D4FunctionEvaluator)libdap::D4FunctionEvaluatorinline
    set_trace_parsing(bool tp) (defined in libdap::D4FunctionEvaluator)libdap::D4FunctionEvaluatorinline
    set_trace_scanning(bool ts) (defined in libdap::D4FunctionEvaluator)libdap::D4FunctionEvaluatorinline
    sf_list() const (defined in libdap::D4FunctionEvaluator)libdap::D4FunctionEvaluatorinline
    trace_parsing() const (defined in libdap::D4FunctionEvaluator)libdap::D4FunctionEvaluatorinline
    trace_scanning() const (defined in libdap::D4FunctionEvaluator)libdap::D4FunctionEvaluatorinline
    ~D4FunctionEvaluator() (defined in libdap::D4FunctionEvaluator)libdap::D4FunctionEvaluatorinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1D4FunctionEvaluator.html b/html/classlibdap_1_1D4FunctionEvaluator.html deleted file mode 100644 index f120b759c..000000000 --- a/html/classlibdap_1_1D4FunctionEvaluator.html +++ /dev/null @@ -1,253 +0,0 @@ - - - - - - - -libdap: libdap::D4FunctionEvaluator Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::D4FunctionEvaluator Class Reference
    -
    -
    - -

    #include <D4FunctionEvaluator.h>

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    D4FunctionEvaluator (DMR *dmr, ServerFunctionsList *sf_list)
     
    -DMRdmr () const
     
    -void error (const libdap::location &l, const std::string &m)
     
    void eval (DMR *dmr)
     
    -unsigned long long get_arg_length_hint () const
     
    -template<typename t >
    std::vector< t > * init_arg_list (t val)
     
    -template<typename T >
    std::vector< T > * init_arg_list (T val)
     
    bool parse (const std::string &expr)
     
    D4RValueListresult () const
     
    -void set_arg_length_hint (unsigned long long alh)
     
    -void set_dmr (DMR *dmr)
     
    -void set_result (D4RValueList *rv_list)
     
    -void set_sf_list (ServerFunctionsList *sf_list)
     
    -void set_trace_parsing (bool tp)
     
    -void set_trace_scanning (bool ts)
     
    -ServerFunctionsListsf_list () const
     
    -bool trace_parsing () const
     
    -bool trace_scanning () const
     
    - - - -

    -Friends

    -class D4FunctionParser
     
    -

    Detailed Description

    -

    Driver for the DAP4 Functional expression parser.

    - -

    Definition at line 48 of file D4FunctionEvaluator.h.

    -

    Member Function Documentation

    - -

    ◆ eval()

    - -
    -
    - - - - - - - - -
    void libdap::D4FunctionEvaluator::eval (DMRfunction_result)
    -
    -

    Evaluate the recently parsed function expression and put the resulting rvalues (which return values packaged in libdap BaseType objects) into the top-level Group of the DMR passed as a param here.

    -
    Note
    The DMR passed to this method can (and usually will) be different from the DMR passed to the D4FunctionEvaluator constructor. That DMR is the 'source dataset' for values of variables used by the functions. It is not generally where the results of evaluating the functions wind up. Usually, you'll want those results in their own DMR; the functions effectively make a new dataset. However, you can pass the source dataset DMR into this method and in that case the new variables will be appended to its root Group.
    -
    -This code is really just a place to package results. The actual evaluation happens in the D4RValue object when values are accessed. The parse() method here builds the list of D4RValue objects and this code accesses the values which triggers the function evaluation. Thus, if you'd like to build a system that performs lazy evaluation, you can work with the result() method from this class instead of this one.
    -
    -Calling this method will delete the D4RValueList object built by the parse() method.
    -
    Parameters
    - - -
    dmrStore the results here
    -
    -
    -
    Exceptions
    - - -
    ThrowsError if the evaluation fails.
    -
    -
    - -

    Definition at line 109 of file D4FunctionEvaluator.cc.

    - -
    -
    - -

    ◆ parse()

    - -
    -
    - - - - - - - - -
    bool libdap::D4FunctionEvaluator::parse (const std::string & expr)
    -
    -

    Parse the DAP4 function expression.

    -

    Calling this method with a DAP4 function expression builds a D4RvalueList that can then be evaluated. The list of rvalues can be accessed or evaluated (using the result() or eval() methods). Note that the result is a list of rvalues because the input can be zero or more function expressions.

    -
    Parameters
    - - -
    exprThe function expression.
    -
    -
    -
    Returns
    True if the parse succeeded, false otherwise.
    - -

    Definition at line 66 of file D4FunctionEvaluator.cc.

    - -
    -
    - -

    ◆ result()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4RValueList* libdap::D4FunctionEvaluator::result () const
    -
    -inline
    -
    -

    Get the result of parsing the function(s)

    -
    Returns
    The result(s) packages in a D4RValueList
    - -

    Definition at line 127 of file D4FunctionEvaluator.h.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1D4FunctionEvaluator.js b/html/classlibdap_1_1D4FunctionEvaluator.js deleted file mode 100644 index 591606b14..000000000 --- a/html/classlibdap_1_1D4FunctionEvaluator.js +++ /dev/null @@ -1,24 +0,0 @@ -var classlibdap_1_1D4FunctionEvaluator = -[ - [ "D4FunctionEvaluator", "classlibdap_1_1D4FunctionEvaluator.html#abf20115172f99d9e754bbe3c8f25eaac", null ], - [ "D4FunctionEvaluator", "classlibdap_1_1D4FunctionEvaluator.html#aed292b6811cfe7745693ad8ec89f6b58", null ], - [ "~D4FunctionEvaluator", "classlibdap_1_1D4FunctionEvaluator.html#a5a0e688afb7d21dfce18d5d9cebc0fb6", null ], - [ "dmr", "classlibdap_1_1D4FunctionEvaluator.html#af365767d9e2f71985e78dfb4fdeef21c", null ], - [ "error", "classlibdap_1_1D4FunctionEvaluator.html#a8da245eff9adc831824a6e690b9387fb", null ], - [ "eval", "classlibdap_1_1D4FunctionEvaluator.html#a71d80e1a6835ebc27104460698a3ac75", null ], - [ "get_arg_length_hint", "classlibdap_1_1D4FunctionEvaluator.html#a90928b2d946b079334e151e86c76d3a3", null ], - [ "init_arg_list", "classlibdap_1_1D4FunctionEvaluator.html#a33433788bcecd7ac24fde5682b52f273", null ], - [ "init_arg_list", "classlibdap_1_1D4FunctionEvaluator.html#a69447d03120a444b821bb3c1f2dd4173", null ], - [ "parse", "classlibdap_1_1D4FunctionEvaluator.html#aa652eafd055aa4781a5804ee765b1767", null ], - [ "result", "classlibdap_1_1D4FunctionEvaluator.html#add490246e6e7726cf1f8f19536147b80", null ], - [ "set_arg_length_hint", "classlibdap_1_1D4FunctionEvaluator.html#ada3590f68661d1788f6ac8a8b485be19", null ], - [ "set_dmr", "classlibdap_1_1D4FunctionEvaluator.html#a77e9bf6a42c85ad5bea0f4861ee5c3a4", null ], - [ "set_result", "classlibdap_1_1D4FunctionEvaluator.html#a9c969cecaf6cf388b8c3a9c7a35845a3", null ], - [ "set_sf_list", "classlibdap_1_1D4FunctionEvaluator.html#ac52e6b2f49c67b664f3c98a633e04e84", null ], - [ "set_trace_parsing", "classlibdap_1_1D4FunctionEvaluator.html#ab0e58a9a89e2f3b273948bf45ab908af", null ], - [ "set_trace_scanning", "classlibdap_1_1D4FunctionEvaluator.html#a77cbfc035fd5e91c191d20b5ef76842c", null ], - [ "sf_list", "classlibdap_1_1D4FunctionEvaluator.html#a9407c0245fe941a60bf621853ebb38ff", null ], - [ "trace_parsing", "classlibdap_1_1D4FunctionEvaluator.html#a1ca7f272762e77b176a71cf4b412a3b3", null ], - [ "trace_scanning", "classlibdap_1_1D4FunctionEvaluator.html#a651b2119a6dec763554d74412d67f435", null ], - [ "D4FunctionParser", "classlibdap_1_1D4FunctionEvaluator.html#ae9c1c1ab3d1aadc109a90ef37db92eb7", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1D4FunctionScanner-members.html b/html/classlibdap_1_1D4FunctionScanner-members.html deleted file mode 100644 index ae0bada14..000000000 --- a/html/classlibdap_1_1D4FunctionScanner-members.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::D4FunctionScanner Member List
    -
    -
    - -

    This is the complete list of members for libdap::D4FunctionScanner, including all inherited members.

    - - - -
    D4FunctionScanner(std::istream &in) (defined in libdap::D4FunctionScanner)libdap::D4FunctionScannerinline
    yylex(libdap::D4FunctionParser::semantic_type *lval, libdap::location *l) (defined in libdap::D4FunctionScanner)libdap::D4FunctionScannerinline
    -
    - - - - diff --git a/html/classlibdap_1_1D4FunctionScanner.html b/html/classlibdap_1_1D4FunctionScanner.html deleted file mode 100644 index ffe2823bc..000000000 --- a/html/classlibdap_1_1D4FunctionScanner.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - -libdap: libdap::D4FunctionScanner Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::D4FunctionScanner Class Reference
    -
    -
    -
    -Inheritance diagram for libdap::D4FunctionScanner:
    -
    -
    Inheritance graph
    - - - -
    - - - - - - -

    -Public Member Functions

    D4FunctionScanner (std::istream &in)
     
    -int yylex (libdap::D4FunctionParser::semantic_type *lval, libdap::location *l)
     
    -

    Detailed Description

    -
    -

    Definition at line 52 of file D4FunctionScanner.h.

    -

    The documentation for this class was generated from the following file: -
    -
    - - - - diff --git a/html/classlibdap_1_1D4FunctionScanner.js b/html/classlibdap_1_1D4FunctionScanner.js deleted file mode 100644 index 81f7be7a5..000000000 --- a/html/classlibdap_1_1D4FunctionScanner.js +++ /dev/null @@ -1,5 +0,0 @@ -var classlibdap_1_1D4FunctionScanner = -[ - [ "D4FunctionScanner", "classlibdap_1_1D4FunctionScanner.html#a86c6c841b88d457d73c1efdd6ee813fb", null ], - [ "yylex", "classlibdap_1_1D4FunctionScanner.html#a2ce348ad7ce26c96a799c520a4824516", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1D4FunctionScanner__inherit__graph.map b/html/classlibdap_1_1D4FunctionScanner__inherit__graph.map deleted file mode 100644 index 31c66515d..000000000 --- a/html/classlibdap_1_1D4FunctionScanner__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/classlibdap_1_1D4FunctionScanner__inherit__graph.md5 b/html/classlibdap_1_1D4FunctionScanner__inherit__graph.md5 deleted file mode 100644 index fce36a6d2..000000000 --- a/html/classlibdap_1_1D4FunctionScanner__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -f55e9c31cd9c15f043a19ce6b61fdfa7 \ No newline at end of file diff --git a/html/classlibdap_1_1D4FunctionScanner__inherit__graph.png b/html/classlibdap_1_1D4FunctionScanner__inherit__graph.png deleted file mode 100644 index 3c0eb8e897ea19fb978fa303cd8d5d6ef3f18f26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8937 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 diff --git a/html/classlibdap_1_1D4Group-members.html b/html/classlibdap_1_1D4Group-members.html deleted file mode 100644 index c812cf72d..000000000 --- a/html/classlibdap_1_1D4Group-members.html +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::D4Group Member List
    -
    -
    - -

    This is the complete list of members for libdap::D4Group, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    add_group(const D4Group *g) (defined in libdap::D4Group)libdap::D4Groupinline
    add_group_nocopy(D4Group *g) (defined in libdap::D4Group)libdap::D4Groupinline
    add_var(BaseType *bt, Part part=nil)libdap::Constructorvirtual
    add_var_nocopy(BaseType *bt, Part part=nil)libdap::Constructorvirtual
    attributes()libdap::BaseTypevirtual
    BaseType(const string &n, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const string &n, const string &d, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const BaseType &copy_from)libdap::BaseType
    btp_stack typedef (defined in libdap::BaseType)libdap::BaseType
    buf2val(void **)libdap::Constructorinlinevirtual
    check_semantics(string &msg, bool all=false)libdap::Constructorvirtual
    clear_local_data()libdap::BaseTypeinlinevirtual
    compute_checksum(Crc32 &checksum)libdap::Constructorvirtual
    Constructor(const string &name, const Type &type, bool is_dap4=false) (defined in libdap::Constructor)libdap::Constructorprotected
    Constructor(const string &name, const string &d, const Type &type, bool is_dap4=false)libdap::Constructorprotected
    Constructor(const Constructor &copy_from) (defined in libdap::Constructor)libdap::Constructorprotected
    d4_ops(BaseType *b, int op)libdap::BaseTypevirtual
    D4Group(const string &name)libdap::D4Group
    D4Group(const string &name, const string &dataset)libdap::D4Group
    D4Group(const D4Group &rhs)libdap::D4Group
    d_in_selection (defined in libdap::BaseType)libdap::BaseTypeprotected
    d_is_synthesized (defined in libdap::BaseType)libdap::BaseTypeprotected
    d_vars (defined in libdap::Constructor)libdap::Constructorprotected
    dataset() constlibdap::BaseTypevirtual
    del_var(const string &name)libdap::Constructorvirtual
    del_var(Vars_iter i) (defined in libdap::Constructor)libdap::Constructorvirtual
    deserialize(D4StreamUnMarshaller &um, DMR &dmr)libdap::D4Groupvirtual
    libdap::Constructor::deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)libdap::Constructorvirtual
    dims()libdap::D4Groupinline
    dump(ostream &strm) constlibdap::Constructorvirtual
    element_count(bool leaves=false)libdap::Constructorvirtual
    enum_defs()libdap::D4Groupinline
    find_child_grp(const string &grp_name) (defined in libdap::D4Group)libdap::D4Group
    find_dim(const string &path)libdap::D4Group
    find_enum_def(const string &path) (defined in libdap::D4Group)libdap::D4Group
    find_first_var_that_uses_dimension(D4Dimension *dim) (defined in libdap::D4Group)libdap::D4Group
    find_first_var_that_uses_enumeration(D4EnumDef *enum_def) (defined in libdap::D4Group)libdap::D4Group
    find_map_source(const string &path) (defined in libdap::D4Group)libdap::D4Group
    find_var(const string &name)libdap::D4Group
    FQN() constlibdap::D4Groupvirtual
    get_attr_table()libdap::BaseTypevirtual
    get_parent() constlibdap::BaseTypevirtual
    get_var_index(int i)libdap::Constructor
    get_vars_iter(int i)libdap::Constructor
    groupsCIter typedef (defined in libdap::D4Group)libdap::D4Group
    groupsIter typedef (defined in libdap::D4Group)libdap::D4Group
    grp_begin()libdap::D4Groupinline
    grp_end()libdap::D4Groupinline
    insert_group_nocopy(D4Group *g, groupsIter i) (defined in libdap::D4Group)libdap::D4Groupinline
    intern_data()libdap::D4Groupvirtual
    libdap::Constructor::intern_data(ConstraintEvaluator &eval, DDS &dds)libdap::Constructorvirtual
    is_constructor_type() constlibdap::BaseTypevirtual
    is_dap4() const (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    is_in_selection()libdap::BaseTypevirtual
    is_linear()libdap::Constructorvirtual
    is_simple_type() constlibdap::BaseTypevirtual
    is_vector_type() constlibdap::BaseTypevirtual
    length() constlibdap::BaseTypeinlinevirtual
    m_duplicate(const D4Group &g) (defined in libdap::D4Group)libdap::D4Groupprotected
    m_duplicate(const Constructor &s) (defined in libdap::Constructor)libdap::Constructorprotected
    libdap::BaseType::m_duplicate(const BaseType &bt)libdap::BaseTypeprotected
    m_exact_match(const string &name, btp_stack *s=0) (defined in libdap::Constructor)libdap::Constructorprotected
    m_leaf_match(const string &name, btp_stack *s=0) (defined in libdap::Constructor)libdap::Constructorprotected
    make_dropped_vars_attr_table(vector< BaseType *> *dropped_vars) (defined in libdap::Constructor)libdap::Constructorstatic
    name() constlibdap::BaseTypevirtual
    operator=(const D4Group &rhs) (defined in libdap::D4Group)libdap::D4Group
    operator=(const Constructor &rhs) (defined in libdap::Constructor)libdap::Constructor
    operator=(const BaseType &rhs) (defined in libdap::BaseType)libdap::BaseType
    ops(BaseType *b, int op)libdap::BaseTypevirtual
    print_dap4(XMLWriter &xml, bool constrained=false)libdap::D4Groupvirtual
    print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::Constructorvirtual
    print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::Constructorvirtual
    print_val(FILE *out, string space="", bool print_decl_p=true)libdap::Constructorvirtual
    print_val(ostream &out, string space="", bool print_decl_p=true)libdap::Constructorvirtual
    print_xml(ostream &out, string space=" ", bool constrained=false)libdap::Constructorvirtual
    print_xml(FILE *out, string space=" ", bool constrained=false)libdap::Constructorvirtual
    print_xml_writer(XMLWriter &xml, bool constrained=false)libdap::Constructorvirtual
    ptr_duplicate()libdap::D4Groupvirtual
    read()libdap::Constructorvirtual
    read_p()libdap::BaseTypevirtual
    request_size(bool constrained)libdap::D4Group
    send_p()libdap::BaseTypevirtual
    serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)libdap::D4Groupvirtual
    libdap::Constructor::serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)libdap::Constructorvirtual
    set_attr_table(const AttrTable &at)libdap::BaseTypevirtual
    set_attributes(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_attributes_nocopy(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_in_selection(bool state)libdap::Constructorvirtual
    set_is_dap4(const bool v) (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    set_length(int)libdap::BaseTypeinlinevirtual
    set_name(const string &n)libdap::BaseTypevirtual
    set_parent(BaseType *parent)libdap::BaseTypevirtual
    set_read_p(bool state)libdap::D4Groupvirtual
    set_send_p(bool state)libdap::D4Groupvirtual
    set_synthesized_p(bool state)libdap::BaseTypevirtual
    set_type(const Type &t)libdap::BaseTypevirtual
    synthesized_p()libdap::BaseTypevirtual
    toString()libdap::BaseTypevirtual
    transfer_attributes(AttrTable *at)libdap::Constructorvirtual
    transform_to_dap2(AttrTable *parent_attr_table)libdap::D4Groupvirtual
    transform_to_dap4(D4Group *root, Constructor *dest)libdap::Constructorvirtual
    type() constlibdap::BaseTypevirtual
    type_name() constlibdap::BaseTypevirtual
    val2buf(void *, bool)libdap::Constructorinlinevirtual
    var(const string &name, bool exact_match=true, btp_stack *s=0)libdap::Constructorvirtual
    var(const string &n, btp_stack &s)libdap::Constructorvirtual
    var_begin()libdap::Constructor
    var_end()libdap::Constructor
    var_rbegin()libdap::Constructor
    var_rend()libdap::Constructor
    Vars_citer typedef (defined in libdap::Constructor)libdap::Constructor
    Vars_iter typedef (defined in libdap::Constructor)libdap::Constructor
    Vars_riter typedef (defined in libdap::Constructor)libdap::Constructor
    width(bool constrained=false) constlibdap::Constructorvirtual
    ~BaseType() (defined in libdap::BaseType)libdap::BaseTypevirtual
    ~Constructor() (defined in libdap::Constructor)libdap::Constructorvirtual
    ~D4Group() (defined in libdap::D4Group)libdap::D4Groupvirtual
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1D4Group.html b/html/classlibdap_1_1D4Group.html deleted file mode 100644 index c46db9dad..000000000 --- a/html/classlibdap_1_1D4Group.html +++ /dev/null @@ -1,3511 +0,0 @@ - - - - - - - -libdap: libdap::D4Group Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    - -

    #include <D4Group.h>

    -
    -Inheritance diagram for libdap::D4Group:
    -
    -
    Inheritance graph
    - - - - - -
    - - - - - - - - - - - - - - -

    -Public Types

    -typedef stack< BaseType * > btp_stack
     
    -typedef vector< D4Group * >::const_iterator groupsCIter
     
    -typedef vector< D4Group * >::iterator groupsIter
     
    -typedef std::vector< BaseType * >::const_iterator Vars_citer
     
    -typedef std::vector< BaseType * >::iterator Vars_iter
     
    -typedef std::vector< BaseType * >::reverse_iterator Vars_riter
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    -void add_group (const D4Group *g)
     
    -void add_group_nocopy (D4Group *g)
     
    virtual void add_var (BaseType *bt, Part part=nil)
     
    virtual void add_var_nocopy (BaseType *bt, Part part=nil)
     
    virtual unsigned int buf2val (void **)
     Reads the class data. More...
     
    virtual bool check_semantics (string &msg, bool all=false)
     Compare an object's current state with the semantics of its type. More...
     
    virtual void clear_local_data ()
     
    virtual void compute_checksum (Crc32 &checksum)
     include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum. More...
     
    virtual bool d4_ops (BaseType *b, int op)
     Evaluator a relop for DAP4. More...
     
     D4Group (const string &name)
     
     D4Group (const string &name, const string &dataset)
     
     D4Group (const D4Group &rhs)
     
    virtual string dataset () const
     Returns the name of the dataset used to create this instance. More...
     
    virtual void del_var (const string &name)
     
    -virtual void del_var (Vars_iter i)
     
    virtual bool deserialize (UnMarshaller &um, DDS *dds, bool reuse=false)
     Receive data from the net. More...
     
    virtual void deserialize (D4StreamUnMarshaller &um, DMR &dmr)
     
    D4Dimensionsdims ()
     Get the dimensions defined for this Group. More...
     
    virtual void dump (ostream &strm) const
     dumps information about this object More...
     
    virtual int element_count (bool leaves=false)
     Count the members of constructor types. More...
     
    D4EnumDefsenum_defs ()
     Get the enumerations defined for this Group. More...
     
    -D4Groupfind_child_grp (const string &grp_name)
     
    D4Dimensionfind_dim (const string &path)
     Find the dimension using a path. Using the DAP4 name syntax, lookup a dimension. The dimension must be defined before it is used. The path argument may be either an absolute path or a relative path. Note that the name syntax does not provide for paths to contain an 'up one level' symbol. More...
     
    -D4EnumDeffind_enum_def (const string &path)
     
    -BaseTypefind_first_var_that_uses_dimension (D4Dimension *dim)
     
    -BaseTypefind_first_var_that_uses_enumeration (D4EnumDef *enum_def)
     
    -Arrayfind_map_source (const string &path)
     
    BaseTypefind_var (const string &name)
     
    virtual std::string FQN () const
     
    virtual AttrTableget_attr_table ()
     
    virtual BaseTypeget_parent () const
     
    BaseTypeget_var_index (int i)
     
    Vars_iter get_vars_iter (int i)
     
    groupsIter grp_begin ()
     Get an iterator to the start of the values. More...
     
    groupsIter grp_end ()
     Get an iterator to the end of the values. More...
     
    -void insert_group_nocopy (D4Group *g, groupsIter i)
     
    virtual void intern_data (ConstraintEvaluator &eval, DDS &dds)
     
    virtual void intern_data ()
     Read data into this variable. More...
     
    virtual bool is_constructor_type () const
     Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable. More...
     
    -virtual bool is_dap4 () const
     
    virtual bool is_in_selection ()
     Is this variable part of the current selection? More...
     
    virtual bool is_linear ()
     Check to see whether this variable can be printed simply. More...
     
    virtual bool is_simple_type () const
     Returns true if the instance is a numeric, string or URL type variable. More...
     
    virtual bool is_vector_type () const
     Returns true if the instance is a vector (i.e., array) type variable. More...
     
    virtual int length () const
     How many elements are in this variable. More...
     
    virtual string name () const
     Returns the name of the class instance. More...
     
    -D4Groupoperator= (const D4Group &rhs)
     
    virtual bool ops (BaseType *b, int op)
     Evaluate relational operators. More...
     
    void print_dap4 (XMLWriter &xml, bool constrained=false)
     
    virtual void print_decl (ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_decl (FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_val (FILE *out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_val (ostream &out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_xml (ostream &out, string space=" ", bool constrained=false)
     
    virtual void print_xml (FILE *out, string space=" ", bool constrained=false)
     
    virtual void print_xml_writer (XMLWriter &xml, bool constrained=false)
     
    virtual BaseTypeptr_duplicate ()
     
    virtual bool read ()
     simple implementation of read that iterates through vars and calls read on them More...
     
    virtual bool read_p ()
     Has this variable been read? More...
     
    long request_size (bool constrained)
     
    virtual bool send_p ()
     Should this variable be sent? More...
     
    virtual bool serialize (ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
     Move data to the net, then remove them from the object. More...
     
    virtual void serialize (D4StreamMarshaller &m, DMR &dmr, bool filter=false)
     Serialize a Group. More...
     
    virtual void set_attr_table (const AttrTable &at)
     
    virtual void set_in_selection (bool state)
     Set the in_selection property. More...
     
    -virtual void set_is_dap4 (const bool v)
     
    virtual void set_length (int)
     Set the number of elements for this variable. More...
     
    virtual void set_name (const string &n)
     Sets the name of the class instance. More...
     
    virtual void set_parent (BaseType *parent)
     
    virtual void set_read_p (bool state)
     Sets the value of the read_p property. More...
     
    virtual void set_send_p (bool state)
     
    virtual void set_synthesized_p (bool state)
     
    virtual void set_type (const Type &t)
     Sets the type of the class instance. More...
     
    virtual bool synthesized_p ()
     
    virtual string toString ()
     
    virtual void transfer_attributes (AttrTable *at)
     
    virtual std::vector< BaseType * > * transform_to_dap2 (AttrTable *parent_attr_table)
     Transform the D4Group's variables to DAP2 variables. More...
     
    virtual void transform_to_dap4 (D4Group *root, Constructor *dest)
     DAP2 to DAP4 transform. More...
     
    virtual Type type () const
     Returns the type of the class instance. More...
     
    virtual string type_name () const
     Returns the type of the class instance as a string. More...
     
    virtual unsigned int val2buf (void *, bool)
     Loads class data. More...
     
    virtual BaseTypevar (const string &name, bool exact_match=true, btp_stack *s=0)
     btp_stack no longer needed; use back pointers (BaseType::get_parent()) More...
     
    virtual BaseTypevar (const string &n, btp_stack &s)
     
    Vars_iter var_begin ()
     
    Vars_iter var_end ()
     
    Vars_riter var_rbegin ()
     
    Vars_riter var_rend ()
     
    virtual unsigned int width (bool constrained=false) const
     
    virtual D4Attributesattributes ()
     
    -virtual void set_attributes (D4Attributes *)
     
    -virtual void set_attributes_nocopy (D4Attributes *)
     
    - - - -

    -Static Public Member Functions

    -static AttrTablemake_dropped_vars_attr_table (vector< BaseType *> *dropped_vars)
     
    - - - - - - - - - - - - -

    -Protected Member Functions

    -void m_duplicate (const Constructor &s)
     
    -void m_duplicate (const D4Group &g)
     
    void m_duplicate (const BaseType &bt)
     Perform a deep copy. More...
     
    -BaseTypem_exact_match (const string &name, btp_stack *s=0)
     
    -BaseTypem_leaf_match (const string &name, btp_stack *s=0)
     
    - - - - - - - -

    -Protected Attributes

    -bool d_in_selection
     
    -bool d_is_synthesized
     
    -std::vector< BaseType * > d_vars
     
    -

    Detailed Description

    -

    A DAP4 Group object. A Group is-a Constructor, so it inherits a set of BaseType objects and an attribute table, along with methods to search for variables by name where dots (.) in a fully qualified name serve as separators.

    - -

    Definition at line 43 of file D4Group.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ D4Group() [1/3]

    - -
    -
    - - - - - - - - -
    libdap::D4Group::D4Group (const string & name)
    -
    -

    The D4Group constructor requires only the name of the variable to be created. The name may be omitted, which will create a nameless variable. This may be adequate for some applications.

    -
    Note
    This type is available in DAP4 only. See http://docs.opendap.org/index.php/DAP4:_Specification_Volume_1#Groups
    -
    Parameters
    - - -
    nA string containing the name of the variable.
    -
    -
    - -

    Definition at line 119 of file D4Group.cc.

    - -
    -
    - -

    ◆ D4Group() [2/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    libdap::D4Group::D4Group (const string & name,
    const string & dataset 
    )
    -
    -

    The D4Group server-side constructor requires the name of the variable to be created and the dataset name from which this variable is being created. Used on server-side handlers.

    -
    Note
    This type is available in DAP4 only. See http://docs.opendap.org/index.php/DAP4:_Specification_Volume_1#Groups
    -
    Parameters
    - - - -
    nA string containing the name of the variable.
    dA string containing the name of the dataset.
    -
    -
    - -

    Definition at line 133 of file D4Group.cc.

    - -
    -
    - -

    ◆ D4Group() [3/3]

    - -
    -
    - - - - - - - - -
    libdap::D4Group::D4Group (const D4Grouprhs)
    -
    -

    The D4Group copy constructor.

    - -

    Definition at line 138 of file D4Group.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ add_var()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::add_var (BaseTypebt,
    Part part = nil 
    )
    -
    -virtualinherited
    -
    -

    Adds an element to a Constructor.

    -
    Parameters
    - - - -
    btA pointer to the variable to add to this Constructor.
    partNot used by this class, defaults to nil
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 407 of file Constructor.cc.

    - -
    -
    - -

    ◆ add_var_nocopy()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::add_var_nocopy (BaseTypebt,
    Part part = nil 
    )
    -
    -virtualinherited
    -
    -

    Adds an element to a Constructor.

    -
    Parameters
    - - - -
    btA pointer to thee variable to add to this Constructor.
    partNot used by this class, defaults to nil
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 432 of file Constructor.cc.

    - -
    -
    - -

    ◆ attributes()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4Attributes * libdap::BaseType::attributes ()
    -
    -virtualinherited
    -
    -

    DAP4 Attribute methods

    - -

    Definition at line 599 of file BaseType.cc.

    - -
    -
    - -

    ◆ buf2val()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual unsigned int libdap::Constructor::buf2val (void ** val)
    -
    -inlinevirtualinherited
    -
    - -

    Reads the class data.

    -

    Reads the class data into the memory referenced by val. The caller should either allocate enough storage to val to hold the class data or set *val to null. If *val is NULL, memory will be allocated by this function with new(). If the memory is allocated this way, the caller is responsible for deallocating that memory. Array and values for simple types are stored as C would store an array.

    -
    Deprecated:
    Use value() in the leaf classes.
    -
    Parameters
    - - -
    valA pointer to a pointer to the memory into which the class data will be copied. If the value pointed to is NULL, memory will be allocated to hold the data, and the pointer value modified accordingly. The calling program is responsible for deallocating the memory references by this pointer.
    -
    -
    -
    Returns
    The size (in bytes) of the information copied to val.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 118 of file Constructor.h.

    - -
    -
    - -

    ◆ check_semantics()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::Constructor::check_semantics (string & msg,
    bool all = false 
    )
    -
    -virtualinherited
    -
    - -

    Compare an object's current state with the semantics of its type.

    -

    This function checks the class instance for internal consistency. This is important to check for complex constructor classes. For BaseType, an object is semantically correct if it has both a non-null name and type.

    -

    For example, an Int32 instance would return FALSE if it had no name or no type defined. A Grid instance might return FALSE for more complex reasons, such as having Map arrays of the wrong size or shape.

    -

    This function is used by the DDS class, and will rarely, if ever, be explicitly called by a DODS application program. A variable must pass this test before it is sent, but there may be many other stages in a retrieve operation where it would fail.

    -
    Returns
    Returns FALSE when the current state violates some aspect of the type semantics, TRUE otherwise.
    -
    Parameters
    - - - -
    msgA returned string, containing a message indicating the source of any problem.
    allFor complex constructor types (Grid, Sequence, Structure), this flag indicates whether to check the semantics of the member variables, too.
    -
    -
    -
    See also
    DDS::check_semantics
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 792 of file Constructor.cc.

    - -
    -
    - -

    ◆ clear_local_data()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual void libdap::BaseType::clear_local_data ()
    -
    -inlinevirtualinherited
    -
    -

    Remove any read or set data in the private data of the variable, setting read_p() to false. Used to clear any dynamically allocated storage that holds (potentially large) data. For the simple types, this no-op version is all that's needed. Vector and some other classes define a special version and have serialize() implementations that call it to free data as soon as possible after sending it.

    -
    Note
    Added 7/5/15 jhrg
    -
    -Any specialization of this should make sure to reset the read_p property.
    - -

    Reimplemented in libdap::Sequence, libdap::Vector, libdap::D4Sequence, and libdap::D4Opaque.

    - -

    Definition at line 179 of file BaseType.h.

    - -
    -
    - -

    ◆ compute_checksum()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::compute_checksum (Crc32checksum)
    -
    -virtualinherited
    -
    - -

    include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum.

    -
    Parameters
    - - -
    checksumA Crc32 instance that holds the current checksum.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 550 of file Constructor.cc.

    - -
    -
    - -

    ◆ d4_ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::d4_ops (BaseTypeb,
    int op 
    )
    -
    -virtualinherited
    -
    - -

    Evaluator a relop for DAP4.

    -

    This method is used by the filter expression evaluation code in DAP4. Each of the 'data type' classes that support relops must overload this method. In an expression of the form arg1 op arg2, this object is arg1, the parameter 'b' is arg2 and op is the relational operator.

    -
    Note
    I used the same relop codes for DAP4 as in the DAP2 parser/scanner which makes for some coupling between them, but cuts way down on the duplication of the evaluator logic, which is somewhat involved.
    -
    Parameters
    - - - -
    bThe second argument in the relational expression
    opThe infix relational operator
    -
    -
    -
    Returns
    True if the expression is true, False otherwise.
    - -

    Reimplemented in libdap::Str, libdap::Int32, libdap::Float32, libdap::Byte, libdap::Float64, libdap::Int16, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 1282 of file BaseType.cc.

    - -
    -
    - -

    ◆ dataset()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::dataset () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the dataset used to create this instance.

    -

    A dataset from which the data is to be read. The meaning of this string will vary among different types of data sources. It may be the name of a data file or an identifier used to read data from a relational database.

    - -

    Definition at line 358 of file BaseType.cc.

    - -
    -
    - -

    ◆ del_var()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::del_var (const string & n)
    -
    -virtualinherited
    -
    -

    Remove an element from a Constructor.

    -
    Parameters
    - - -
    nname of the variable to remove
    -
    -
    - -

    Definition at line 448 of file Constructor.cc.

    - -
    -
    - -

    ◆ deserialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::Constructor::deserialize (UnMarshallerum,
    DDSdds,
    bool reuse = false 
    )
    -
    -virtualinherited
    -
    - -

    Receive data from the net.

    -

    Receives data from the network connection identified by the source parameter. The data is put into the class data buffer according to the input dds.

    -

    This function is only used on the client side of the DODS client/server connection.

    -
    Parameters
    - - - - -
    umAn UnMarshaller that knows how to deserialize data types
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure. This would have been received from the server in an earlier transmission.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect.
    -
    -
    -
    Returns
    Always returns TRUE.
    -
    Exceptions
    - - -
    Errorwhen a problem reading from the UnMarshaller is found.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Sequence, and libdap::D4Sequence.

    - -

    Definition at line 540 of file Constructor.cc.

    - -
    -
    - -

    ◆ deserialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::D4Group::deserialize (D4StreamUnMarshallerum,
    DMRdmr 
    )
    -
    -virtual
    -
    -

    The DAP4 deserialization method.

    Parameters
    - - - -
    um
    dmr
    -
    -
    -
    Exceptions
    - - -
    Erroror InternalErr
    -
    -
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 546 of file D4Group.cc.

    - -
    -
    - -

    ◆ dims()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4Dimensions* libdap::D4Group::dims ()
    -
    -inline
    -
    - -

    Get the dimensions defined for this Group.

    - -

    Definition at line 82 of file D4Group.h.

    - -
    -
    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::dump (ostream & strm) const
    -
    -virtualinherited
    -
    - -

    dumps information about this object

    -

    Displays the pointer value of this instance and information about this instance.

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the information to
    -
    -
    -
    Returns
    void
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Grid, and libdap::Structure.

    - -

    Definition at line 913 of file Constructor.cc.

    - -
    -
    - -

    ◆ element_count()

    - -
    -
    - - - - - -
    - - - - - - - - -
    int libdap::Constructor::element_count (bool leaves = false)
    -
    -virtualinherited
    -
    - -

    Count the members of constructor types.

    -

    Return a count of the total number of variables in this variable. This is used to count the number of variables held by a constructor variable - for simple type and vector variables it always returns 1.

    -

    For compound data types, there are two ways to count members. You can count the members, or you can count the simple members and add that to the count of the compound members. For example, if a Structure contains an Int32 and another Structure that itself contains two Int32 members, the element count of the top-level structure could be two (one Int32 and one Structure) or three (one Int32 by itself and two Int32's in the subsidiary Structure). Use the leaves parameter to control which kind of counting you desire.

    -
    Returns
    Returns 1 for simple types. For compound members, the count depends on the leaves argument.
    -
    Parameters
    - - -
    leavesThis parameter is only relevant if the object contains other compound data types. If FALSE, the function counts only the data variables mentioned in the object's declaration. If TRUE, it counts the simple members, and adds that to the sum of the counts for the compound members. This parameter has no effect for simple type variables.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 194 of file Constructor.cc.

    - -
    -
    - -

    ◆ enum_defs()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4EnumDefs* libdap::D4Group::enum_defs ()
    -
    -inline
    -
    - -

    Get the enumerations defined for this Group.

    - -

    Definition at line 97 of file D4Group.h.

    - -
    -
    - -

    ◆ find_dim()

    - -
    -
    - - - - - - - - -
    D4Dimension * libdap::D4Group::find_dim (const string & path)
    -
    - -

    Find the dimension using a path. Using the DAP4 name syntax, lookup a dimension. The dimension must be defined before it is used. The path argument may be either an absolute path or a relative path. Note that the name syntax does not provide for paths to contain an 'up one level' symbol.

    -
    Parameters
    - - -
    pathThe path to the dimension
    -
    -
    -
    Returns
    A pointer to the D4Dimension object.
    - -

    Definition at line 277 of file D4Group.cc.

    - -
    -
    - -

    ◆ find_var()

    - -
    -
    - - - - - - - - -
    BaseType * libdap::D4Group::find_var (const string & path)
    -
    -

    Find a variable using it's FUlly Qualified Name (FQN). The leading '/' is optional.

    -
    Parameters
    - - -
    pathThe FQN to the variable
    -
    -
    -
    Returns
    A BaseType* to the variable of null if it was not found
    -
    See also
    BaseType::FQN()
    - -

    Definition at line 376 of file D4Group.cc.

    - -
    -
    - -

    ◆ FQN()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::D4Group::FQN () const
    -
    -virtual
    -
    -

    Get the Fully Qualified Name for this Group, including the Group. This uses the name representation described in the DAP4 specification.

    -
    Returns
    The FQN in a string
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 185 of file D4Group.cc.

    - -
    -
    - -

    ◆ get_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - -
    AttrTable & libdap::BaseType::get_attr_table ()
    -
    -virtualinherited
    -
    -

    Get this variable's AttrTable. It's generally a bad idea to return a reference to a contained object, but in this case it seems that building an interface inside BaseType is overkill.

    -

    Use the AttrTable methods to manipulate the table.

    - -

    Definition at line 582 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_parent()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::BaseType::get_parent () const
    -
    -virtualinherited
    -
    -

    Return a pointer to the Constructor or Vector which holds (contains) this variable. If this variable is at the top level, this method returns null.

    -
    Returns
    A BaseType pointer to the variable's parent.
    - -

    Definition at line 751 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_var_index()

    - -
    -
    - - - - - -
    - - - - - - - - -
    BaseType * libdap::Constructor::get_var_index (int i)
    -
    -inherited
    -
    -

    Return the BaseType pointer for the ith variable.

    Parameters
    - - -
    iThis index
    -
    -
    -
    Returns
    The corresponding BaseType*.
    - -

    Definition at line 397 of file Constructor.cc.

    - -
    -
    - -

    ◆ get_vars_iter()

    - -
    -
    - - - - - -
    - - - - - - - - -
    Constructor::Vars_iter libdap::Constructor::get_vars_iter (int i)
    -
    -inherited
    -
    -

    Return the iterator for the ith variable.

    Parameters
    - - -
    ithe index
    -
    -
    -
    Returns
    The corresponding Vars_iter
    - -

    Definition at line 388 of file Constructor.cc.

    - -
    -
    - -

    ◆ grp_begin()

    - -
    -
    - - - - - -
    - - - - - - - -
    groupsIter libdap::D4Group::grp_begin ()
    -
    -inline
    -
    - -

    Get an iterator to the start of the values.

    - -

    Definition at line 111 of file D4Group.h.

    - -
    -
    - -

    ◆ grp_end()

    - -
    -
    - - - - - -
    - - - - - - - -
    groupsIter libdap::D4Group::grp_end ()
    -
    -inline
    -
    - -

    Get an iterator to the end of the values.

    - -

    Definition at line 114 of file D4Group.h.

    - -
    -
    - -

    ◆ intern_data() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::intern_data (ConstraintEvaluatoreval,
    DDSdds 
    )
    -
    -virtualinherited
    -
    -

    Similar to using serialize() and deserialize() together in one object. Data are read as for serialize and those values are stored in the objects as deserialize() does but does not write and then read data to/from a stream.

    -

    This method is defined by the various data type classes. It calls the read() abstract method. Unlike serialize(), this method does not clear the memory use to hold the data values, so the caller should make sure to delete the DDS or the variable as soon as possible.

    -
    Parameters
    - - - -
    evalUse this as the constraint expression evaluator.
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Sequence, and libdap::D4Sequence.

    - -

    Definition at line 490 of file Constructor.cc.

    - -
    -
    - -

    ◆ intern_data() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::D4Group::intern_data ()
    -
    -virtual
    -
    - -

    Read data into this variable.

    -
    Parameters
    - - - -
    evalEvaluator for a constraint expression
    dmrDMR for the whole dataset
    -
    -
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 455 of file D4Group.cc.

    - -
    -
    - -

    ◆ is_constructor_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_constructor_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable.

    -
    Returns
    True if the instance is a Structure, Sequence or Grid, False otherwise.
    - -

    Definition at line 412 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_in_selection ()
    -
    -virtualinherited
    -
    - -

    Is this variable part of the current selection?

    -

    Does this variable appear in either the selection part or as a function argument in the current constrain expression. If this property is set (true) then implementations of the read() method should read this variable.

    -
    Note
    This method does not check, nor does it know about the semantics of, string arguments passed to functions. Those functions might include variable names in strings; they are responsible for reading those variables. See the grid (func_grid_select()) for an example.
    -
    See also
    BaseType::read()
    - -

    Definition at line 703 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_linear()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::Constructor::is_linear ()
    -
    -virtualinherited
    -
    - -

    Check to see whether this variable can be printed simply.

    -

    True if the instance can be flattened and printed as a single table of values. For Arrays and Grids this is always false. For Structures and Sequences the conditions are more complex. The implementation provided by this class always returns false. Other classes should override this implementation.

    -
    Todo:
    Change the name to is_flattenable or something like that. 05/16/03 jhrg
    -
    Returns
    True if the instance can be printed as a single table of values, false otherwise.
    - -

    Reimplemented in libdap::Sequence, and libdap::Structure.

    - -

    Definition at line 823 of file Constructor.cc.

    - -
    -
    - -

    ◆ is_simple_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_simple_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a numeric, string or URL type variable.

    -
    Returns
    True if the instance is a scalar numeric, String or URL variable, False otherwise. Arrays (even of simple types) return False.
    -
    See also
    is_vector_type()
    - -

    Definition at line 393 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_vector_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_vector_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a vector (i.e., array) type variable.

    -
    Returns
    True if the instance is an Array, False otherwise.
    - -

    Definition at line 402 of file BaseType.cc.

    - -
    -
    - -

    ◆ length()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual int libdap::BaseType::length () const
    -
    -inlinevirtualinherited
    -
    - -

    How many elements are in this variable.

    -
    Todo:
    change the return type to int64_t
    -
    Returns
    The number of elements; 1 for scalars
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, libdap::Str, and libdap::D4Opaque.

    - -

    Definition at line 207 of file BaseType.h.

    - -
    -
    - -

    ◆ m_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::m_duplicate (const BaseTypebt)
    -
    -protectedinherited
    -
    - -

    Perform a deep copy.

    -

    Perform a deep copy. Copies the values of bt into *this. Pointers are dereferenced and their values are copied into a newly allocated instance.

    -
    Parameters
    - - -
    btThe source object.
    -
    -
    - -

    Definition at line 86 of file BaseType.cc.

    - -
    -
    - -

    ◆ name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::name () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the class instance.

    - -

    Definition at line 320 of file BaseType.cc.

    - -
    -
    - -

    ◆ ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::ops (BaseTypeb,
    int op 
    )
    -
    -virtualinherited
    -
    - -

    Evaluate relational operators.

    -

    This method contains the relational operators used by the constraint expression evaluator in the DDS class. Each class that wants to be able to evaluate relational expressions must overload this function. The implementation in BaseType throws an InternalErr exception. The DAP library classes Byte, ..., Url provide specializations of this method. It is not meaningful for classes such as Array because relational expressions using Array are not supported.

    -

    The op argument refers to a table generated by bison from the constraint expression parser. Use statements like the following to correctly interpret its value:

    -
    switch (op) {
    -    case EQUAL: return i1 == i2;
    -    case NOT_EQUAL: return i1 != i2;
    -    case GREATER: return i1 > i2;
    -    case GREATER_EQL: return i1 >= i2;
    -    case LESS: return i1 < i2;
    -    case LESS_EQL: return i1 <= i2;
    -    case REGEXP: throw Error("Regular expressions are not supported for integer values");
    -    default: throw Error("Unknown operator");
    -}
    -

    This function is used by the constraint expression evaluator.

    -
    Parameters
    - - - -
    bCompare the value of this instance with b.
    opAn integer index indicating which relational operator is implied. Choose one from the following: EQUAL, NOT_EQUAL, GREATER, GREATER_EQL, LESS, LESS_EQL, and REGEXP.
    -
    -
    -
    Returns
    The boolean value of the comparison.
    -
    See also
    BaseType::d4_ops(BaseType *, int)
    - -

    Reimplemented in libdap::D4Enum, libdap::Str, libdap::Int32, libdap::Float32, libdap::Byte, libdap::Float64, libdap::UInt32, libdap::D4Opaque, libdap::Int16, libdap::UInt16, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 1256 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::D4Group::print_dap4 (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtual
    -
    -

    Write the DAP4 XML representation for this variable. This method is used to build the DAP4 DMR response object.

    -
    Parameters
    - - - -
    xmlAn XMLWriter that will do the serialization
    constrainedTrue if the response should show the variables subject to the current constraint expression.
    -
    -
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 574 of file D4Group.cc.

    - -
    -
    - -

    ◆ print_decl() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_decl (ostream & out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 626 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_decl() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_decl (FILE * out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 617 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_val() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_val (FILE * out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtualinherited
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output stream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Sequence, and libdap::Grid.

    - -

    Definition at line 650 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_val() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_val (ostream & out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtualinherited
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output ostream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Reimplemented in libdap::D4Sequence, libdap::Sequence, and libdap::Grid.

    - -

    Definition at line 658 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_xml() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_xml (ostream & out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -
    Deprecated:
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 695 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_xml() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_xml (FILE * out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -
    Deprecated:
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 684 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_xml_writer()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_xml_writer (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 718 of file Constructor.cc.

    - -
    -
    - -

    ◆ ptr_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::D4Group::ptr_duplicate ()
    -
    -virtual
    -
    -

    Clone this instance. Allocate a new instance and copy *this into it. This method must perform a deep copy.

    @note This method should \e not copy data values, but must copy all
    -other fields in the object.
    -
    Returns
    A newly allocated copy of this.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 160 of file D4Group.cc.

    - -
    -
    - -

    ◆ read()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::Constructor::read ()
    -
    -virtualinherited
    -
    - -

    simple implementation of read that iterates through vars and calls read on them

    -
    Returns
    returns false to signify all has been read
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 476 of file Constructor.cc.

    - -
    -
    - -

    ◆ read_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read_p ()
    -
    -virtualinherited
    -
    - -

    Has this variable been read?

    -

    Returns true if the value(s) for this variable have been read from the data source, otherwise returns false. This method is used to determine when values need to be read using the read() method. When read_p() returns true, this library assumes that buf2val() (and other methods such as get_vec()) can be used to access the value(s) of a variable.

    -
    Returns
    True if the variable's value(s) have been read, false otherwise.
    - -

    Definition at line 480 of file BaseType.cc.

    - -
    -
    - -

    ◆ request_size()

    - -
    -
    - - - - - - - - -
    long libdap::D4Group::request_size (bool constrained)
    -
    -

    Compute the size of all of the variables in this group and it's children, in kilobytes

    -
    Parameters
    - - -
    constrainedShould the current constraint be taken into account?
    -
    -
    -
    Returns
    The size in kilobytes
    - -

    Definition at line 409 of file D4Group.cc.

    - -
    -
    - -

    ◆ send_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::send_p ()
    -
    -virtualinherited
    -
    - -

    Should this variable be sent?

    -

    Returns the state of the send_p property. If true, this variable should be sent to the client, if false, it should not. If no constraint expression (CE) has been evaluated, this property is true for all variables in a data source (i.e., for all the variables listed in a DDS). If a CE has been evaluated, this property is true only for those variables listed in the projection part of the CE.

    -
    Returns
    True if the variable should be sent to the client, false otherwise.
    - -

    Definition at line 554 of file BaseType.cc.

    - -
    -
    - -

    ◆ serialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::Constructor::serialize (ConstraintEvaluatoreval,
    DDSdds,
    Marshallerm,
    bool ce_eval = true 
    )
    -
    -virtualinherited
    -
    - -

    Move data to the net, then remove them from the object.

    -

    Sends the data from the indicated (local) dataset through the connection identified by the Marshaller parameter. If the data is not already incorporated into the DDS object, read the data from the dataset. Once the data are sent (written to the Marshaller), they are deleted from the object and the object state is reset so that they will be read again if the read() method is called.

    -

    This function is only used on the server side of the client/server connection, and is generally only called from the ResponseBuilder functions. It has no BaseType implementation; each datatype child class supplies its own implementation.

    @param eval Use this as the constraint expression evaluator.
    -
    Parameters
    - - - - -
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    mA marshaller used to serialize data types
    ce_evalA boolean value indicating whether to evaluate the DODS constraint expression that may accompany this dataset. The constraint expression is stored in the dds.
    -
    -
    -
    Returns
    This method always returns true. Older versions used the return value to signal success or failure.
    -
    Note
    We changed the default behavior of this method so that it calls BaseType::clear_local_data() once the values are sent. This, combined with the behavior that read() is called by this method just before data are sent, means that data for any given variable remain in memory for the shortest time possible. Furthermore, since variables are serialized one at a time, no more than one variable's data will be in memory at any given time when using the default behavior. Some code - code that uses intern_data() or server functions - might alter this default behavior. Only Array (i.e. Vector), Sequence, D4Sequence and D4Opaque types actually hold data in dynamically allocated memory, so sonly those types have the new/changed behavior. This change was made on 7/5/15.
    -
    Exceptions
    - - - -
    InternalErr.
    Error.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Sequence, and libdap::D4Sequence.

    - -

    Definition at line 504 of file Constructor.cc.

    - -
    -
    - -

    ◆ serialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::D4Group::serialize (D4StreamMarshallerm,
    DMRdmr,
    bool filter = false 
    )
    -
    -virtual
    -
    - -

    Serialize a Group.

    -
    Parameters
    - - - - - -
    mThe DAP4 Stream Marshaller. This object serializes the data values and writes checksums (using CRC32) for the top level variables in every Group for which one or more variables are sent. The DAP4 Marshaller object can be made so that only the checksums are written.
    dmrUnused
    evalUnused
    filterUnused
    -
    -
    -
    Exceptions
    - - -
    Erroris thrown if the value needs to be read and that operation fails.
    -
    -
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 507 of file D4Group.cc.

    - -
    -
    - -

    ◆ set_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_attr_table (const AttrTableat)
    -
    -virtualinherited
    -
    -

    Set this variable's attribute table.

    Parameters
    - - -
    atSource of the attributes.
    -
    -
    - -

    Definition at line 590 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::set_in_selection (bool state)
    -
    -virtualinherited
    -
    - -

    Set the in_selection property.

    -

    Set the in_selection property for this variable and all of its children.

    -
    Parameters
    - - -
    stateSet the property value to state.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 834 of file Constructor.cc.

    - -
    -
    - -

    ◆ set_length()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::BaseType::set_length (int )
    -
    -inlinevirtualinherited
    -
    - -

    Set the number of elements for this variable.

    -
    Todo:
    change param type to int64_t
    -
    Parameters
    - - -
    lThe number of elements
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, and libdap::Vector.

    - -

    Definition at line 214 of file BaseType.h.

    - -
    -
    - -

    ◆ set_name()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_name (const string & n)
    -
    -virtualinherited
    -
    - -

    Sets the name of the class instance.

    - -

    Reimplemented in libdap::Vector.

    - -

    Definition at line 344 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_parent()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_parent (BaseTypeparent)
    -
    -virtualinherited
    -
    -

    Set the parent property for this variable.

    -
    Note
    Added ability to set parent to null. 10/19/12 jhrg
    -
    Parameters
    - - -
    parentPointer to the Constructor of Vector parent variable or null if the variable has no parent (if it is at the top-level of a DAP2/3 DDS).
    -
    -
    -
    Exceptions
    - - -
    InternalErrthrown if called with anything other than a Constructor, Vector or Null.
    -
    -
    - -

    Definition at line 733 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_read_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::D4Group::set_read_p (bool state)
    -
    -virtual
    -
    - -

    Sets the value of the read_p property.

    -

    Sets the value of the read_p property. This indicates that the value(s) of this variable has/have been read. An implementation of the read() method should use this to set the read_p property to true.

    -
    Note
    If the is_synthesized property is true, this method will not alter the is_read property. If you need that behavior, specialize the method in your subclasses if the various types.
    -
    -For most of the types the default implementation of this method is fine. However, if you're building a server which must handle data represented using nested sequences, then you may need to provide a specialization of Sequence::set_read_p(). By default Sequence::set_read_p() recursively sets the read_p property for all child variables to state. For servers where one Sequence reads an outer set of values and another reads an inner set, this is cumbersome. In such a case, it is easier to specialize Sequence::set_read_p() so that it does not recursively set the read_p property for the inner Sequence. Be sure to see the documentation for the read() method!
    -
    Todo:
    Look at making synthesized variables easier to implement and at making them more integrated into the overall CE evaluation process. Maybe the code that computes the synthesized var's value should be in the that variable's read() method? This might provide a way to get rid of the awkward 'projection functions' by replacing them with real children of BaseType. It would also provide a way to clean up the way the synthesized_p prop intrudes on the read_p prop.
    -
    See also
    BaseType::read()
    -
    Parameters
    - - -
    stateSet the read_p property to this state.
    -
    -
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 435 of file D4Group.cc.

    - -
    -
    - -

    ◆ set_send_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::D4Group::set_send_p (bool state)
    -
    -virtual
    -
    -

    Sets the value of the send_p flag. This function is meant to be called from within the constraint evaluator of other code which determines that this variable should be returned to the client. Data are ready to be sent when both the d_is_send and d_is_read flags are set to TRUE.

    -
    Parameters
    - - -
    stateThe logical state to set the send_p flag.
    -
    -
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 445 of file D4Group.cc.

    - -
    -
    - -

    ◆ set_synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_synthesized_p (bool state)
    -
    -virtualinherited
    -
    -

    Set the synthesized flag. Before setting this flag be sure to set the read_p() state. Once this flag is set you cannot alter the state of the read_p flag!

    -
    See also
    synthesized_p()
    - -

    Definition at line 463 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_type()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_type (const Typet)
    -
    -virtualinherited
    -
    - -

    Sets the type of the class instance.

    - -

    Definition at line 372 of file BaseType.cc.

    - -
    -
    - -

    ◆ synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::synthesized_p ()
    -
    -virtualinherited
    -
    -

    Returns true if the variable is a synthesized variable. A synthesized variable is one that is added to the dataset by the server (usually with a `projection function'.

    - -

    Definition at line 452 of file BaseType.cc.

    - -
    -
    - -

    ◆ toString()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::toString ()
    -
    -virtualinherited
    -
    -

    Write out the object's internal fields in a string. To be used for debugging when regular inspection w/ddd or gdb isn't enough.

    -
    Returns
    A string which shows the object's internal stuff.
    - -

    Reimplemented in libdap::Sequence.

    - -

    Definition at line 184 of file BaseType.cc.

    - -
    -
    - -

    ◆ transfer_attributes()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::transfer_attributes (AttrTableat_container)
    -
    -virtualinherited
    -
    -

    Transfer attributes from a DAS object into this variable. Because of the rough history of the DAS object and the way that various server code built the DAS, this is necessarily a heuristic process. The intent is that this method will be overridden by handlers that need to look for certain patterns in the DAS (e.g., hdf4's odd variable_dim_n; where n = 0, 1, 2, ...) attribute containers.

    -

    There should be a one-to-one mapping between variables and attribute containers. However, in some cases one variable has attributes spread across several top level containers and in some cases one container is used by several variables

    -
    Note
    This method is technically unnecessary because a server (or client) can easily add attributes directly using the DDS::get_attr_table or BaseType::get_attr_table methods and then poke values in using any of the methods AttrTable provides. This method exists to ease the transition to DDS objects which contain attribute information for the existing servers (Since they all make DAS objects separately from the DDS). They could be modified to use the same AttrTable methods but operate on the AttrTable instances in a DDS/BaseType instead of those in a DAS.
    -
    Parameters
    - - -
    at_containerTransfer attributes from this container.
    -
    -
    -
    Returns
    void
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 844 of file Constructor.cc.

    - -
    -
    - -

    ◆ transform_to_dap2()

    - -
    -
    - - - - - -
    - - - - - - - - -
    vector< BaseType * > * libdap::D4Group::transform_to_dap2 (AttrTableparent_attr_table)
    -
    -virtual
    -
    - -

    Transform the D4Group's variables to DAP2 variables.

    -

    For all of the variables in a D4Group, build a vector of DAP2 variables that can be directly added to DDS object. Extract the DAP4 variables' attributes and transfer them the the AttrTable object passed as the first argument.

    -

    For all variables in the D4Group that are members of child groups (i.e, not the root group), the name of the group (or names of the groups) will be prepended to the name of the variable. Group names are separated using a '/' character.

    -

    The Group attributes are transfered to the parent_attr_table.

    -
    Todo:
    Fix the comment.
    -
    Parameters
    - - -
    parent_attr_tableThe AttrTable pointer parent_attr_table is used by Groups, which disappear from the DAP2 representation. Their children are returned in the the BaseType vector their attributes are added to parent_attr_table;
    -
    -
    -
    Returns
    A pointer to a vector of BaseType pointers (right?). In this D4Group case the vector will contain DAP2 versions of all of the member variables of the D4Group instance. (ex: UInt64) the will return a NULL pointer and so this must be tested!
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 663 of file D4Group.cc.

    - -
    -
    - -

    ◆ transform_to_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::transform_to_dap4 (D4Grouproot,
    Constructorcontainer 
    )
    -
    -virtualinherited
    -
    - -

    DAP2 to DAP4 transform.

    -

    For the current BaseType, return a DAP4 'copy' of the variable.

    -
    Note
    For most DAP2 types, in this implementation of DAP4 the corresponding DAP4 type is the same. The different types are Sequences (which are D4Sequences in the DAP4 implementation), Grids (which are coverages) and Arrays (which use shared dimensions).
    -
    Parameters
    - - - -
    rootThe root group that should hold this new variable. Add Group-level stuff here (e.g., D4Dimensions).
    containerAdd the new variable to this container.
    -
    -
    -
    Returns
    A pointer to the transformed variable
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Sequence, libdap::Grid, and libdap::Structure.

    - -

    Definition at line 141 of file Constructor.cc.

    - -
    -
    - -

    ◆ type()

    - -
    -
    - - - - - -
    - - - - - - - -
    Type libdap::BaseType::type () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance.

    - -

    Definition at line 365 of file BaseType.cc.

    - -
    -
    - -

    ◆ type_name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::type_name () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance as a string.

    - -

    Definition at line 379 of file BaseType.cc.

    - -
    -
    - -

    ◆ val2buf()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    virtual unsigned int libdap::Constructor::val2buf (void * val,
    bool reuse 
    )
    -
    -inlinevirtualinherited
    -
    - -

    Loads class data.

    -

    Store the value pointed to by val in the object's internal buffer. This function does not perform any checks, so users must be sure that the thing pointed to can actually be stored in the object's buffer.

    -

    Only simple objects (Int, Float, Byte, and so on) and arrays of these simple objects may be stored using this function. To put data into more complex constructor types, use the functions provided by that class.

    -
    Deprecated:
    Use set_value() in the leaf classes.
    -
    Parameters
    - - - -
    valA pointer to the data to be inserted into the class data buffer.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect. This is currently used only in the Vector class.
    -
    -
    -
    Returns
    The size (in bytes) of the information copied from val.
    -
    See also
    Grid
    -
    -Vector::val2buf
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 115 of file Constructor.h.

    - -
    -
    - -

    ◆ var() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::Constructor::var (const string & name,
    bool exact_match = true,
    btp_stack * s = 0 
    )
    -
    -virtualinherited
    -
    - -

    btp_stack no longer needed; use back pointers (BaseType::get_parent())

    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 267 of file Constructor.cc.

    - -
    -
    - -

    ◆ var() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::Constructor::var (const string & n,
    btp_stack & s 
    )
    -
    -virtualinherited
    -
    -
    Deprecated:
    -
    Deprecated:
    See comment in BaseType
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 279 of file Constructor.cc.

    - -
    -
    - -

    ◆ var_begin()

    - -
    -
    - - - - - -
    - - - - - - - -
    Constructor::Vars_iter libdap::Constructor::var_begin ()
    -
    -inherited
    -
    -

    Returns an iterator referencing the first structure element.

    - -

    Definition at line 356 of file Constructor.cc.

    - -
    -
    - -

    ◆ var_end()

    - -
    -
    - - - - - -
    - - - - - - - -
    Constructor::Vars_iter libdap::Constructor::var_end ()
    -
    -inherited
    -
    -

    Returns an iterator referencing the end of the list of structure elements. Does not reference the last structure element.

    - -

    Definition at line 364 of file Constructor.cc.

    - -
    -
    - -

    ◆ var_rbegin()

    - -
    -
    - - - - - -
    - - - - - - - -
    Constructor::Vars_riter libdap::Constructor::var_rbegin ()
    -
    -inherited
    -
    -

    Return a reverse iterator that references the last element.

    - -

    Definition at line 371 of file Constructor.cc.

    - -
    -
    - -

    ◆ var_rend()

    - -
    -
    - - - - - -
    - - - - - - - -
    Constructor::Vars_riter libdap::Constructor::var_rend ()
    -
    -inherited
    -
    -

    Return a reverse iterator that references a point 'before' the first element.

    - -

    Definition at line 379 of file Constructor.cc.

    - -
    -
    - -

    ◆ width()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::Constructor::width (bool constrained = false) const
    -
    -virtualinherited
    -
    -

    This version of width simply returns the same thing as width() for simple types and Arrays. For Structure it returns the total size if constrained is false, or the size of the elements in the current projection if true.

    -
    Parameters
    - - -
    constrainedIf true, return the size after applying a constraint.
    -
    -
    -
    Returns
    The number of bytes used by the variable.
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 249 of file Constructor.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1D4Group.js b/html/classlibdap_1_1D4Group.js deleted file mode 100644 index 54a377a9b..000000000 --- a/html/classlibdap_1_1D4Group.js +++ /dev/null @@ -1,109 +0,0 @@ -var classlibdap_1_1D4Group = -[ - [ "btp_stack", "classlibdap_1_1D4Group.html#ae9c6e71855b90a0e552713011c9ab81f", null ], - [ "groupsCIter", "classlibdap_1_1D4Group.html#aaf5f12600767bdba2eee5f7ca44720fc", null ], - [ "groupsIter", "classlibdap_1_1D4Group.html#afe30e587348bfba8e0707a8039109edd", null ], - [ "Vars_citer", "classlibdap_1_1D4Group.html#a5a585c58a099833c4ca26561963e0f83", null ], - [ "Vars_iter", "classlibdap_1_1D4Group.html#a2b73df890f61ebb628359c8fd12839b0", null ], - [ "Vars_riter", "classlibdap_1_1D4Group.html#a6122400e3f40d457751fb0372a650d03", null ], - [ "D4Group", "classlibdap_1_1D4Group.html#ae112f35481f750daceca3511700b865c", null ], - [ "D4Group", "classlibdap_1_1D4Group.html#a89252477edc2d38676e75c69fb8a84ac", null ], - [ "D4Group", "classlibdap_1_1D4Group.html#a7f9e2d2bc50eb55e3772cba4f0d7c273", null ], - [ "~D4Group", "classlibdap_1_1D4Group.html#a9e05db028da3fb511a62421a93d7cfe7", null ], - [ "add_group", "classlibdap_1_1D4Group.html#afdff2623d90c929d0194698159ac1175", null ], - [ "add_group_nocopy", "classlibdap_1_1D4Group.html#a39fd2772ce3aa2f1bb8e150d9840df79", null ], - [ "add_var", "classlibdap_1_1D4Group.html#a2585c69c45b9ebec9c63993248eb5b4b", null ], - [ "add_var_nocopy", "classlibdap_1_1D4Group.html#abdb52463a46e1b10040f245d4ed7642b", null ], - [ "attributes", "classlibdap_1_1D4Group.html#a97452f06d2188eb838399a709246b5e9", null ], - [ "buf2val", "classlibdap_1_1D4Group.html#ac4dc7e8099322b5b403a7d0ae9079006", null ], - [ "check_semantics", "classlibdap_1_1D4Group.html#afe010638fd2ca9aab00dd1c21a9e4825", null ], - [ "clear_local_data", "classlibdap_1_1D4Group.html#aaddb97a4efbe035f41deaf03c6e8683f", null ], - [ "compute_checksum", "classlibdap_1_1D4Group.html#a287ab9a4deb81a8ced6d8432be647925", null ], - [ "d4_ops", "classlibdap_1_1D4Group.html#a512a356f31ed6c4c1a368da0b054408a", null ], - [ "dataset", "classlibdap_1_1D4Group.html#a47521ce321a17e6ce217870cb6a1a7aa", null ], - [ "del_var", "classlibdap_1_1D4Group.html#af38d3785c4a7cd0063cbb9fc5943333c", null ], - [ "del_var", "classlibdap_1_1D4Group.html#a69291878fc48217902fb0dcf1e2e1aff", null ], - [ "deserialize", "classlibdap_1_1D4Group.html#a63763d2bae05463b100e823fb461a784", null ], - [ "deserialize", "classlibdap_1_1D4Group.html#a702bdf9b8fa0a218594220d0f8b9bab1", null ], - [ "dims", "classlibdap_1_1D4Group.html#a034d8c0e622ad5de382d4dfd21ad2ff9", null ], - [ "dump", "classlibdap_1_1D4Group.html#a8efdfb84ef6b287142442252c00b4444", null ], - [ "element_count", "classlibdap_1_1D4Group.html#a1c2eecff00fa7e3af175c711d00fb86e", null ], - [ "enum_defs", "classlibdap_1_1D4Group.html#a8b9ac5b00e42a4fd6e8b1e276fe33cd7", null ], - [ "find_child_grp", "classlibdap_1_1D4Group.html#a6b8fe8800f7ea9d6e9fcde7225940157", null ], - [ "find_dim", "classlibdap_1_1D4Group.html#a14e4b548e4e5b53c68c4a27fea9133d4", null ], - [ "find_enum_def", "classlibdap_1_1D4Group.html#a2c01368660b60b3c1b088ed3d6df99e7", null ], - [ "find_first_var_that_uses_dimension", "classlibdap_1_1D4Group.html#afb85c9a93fbe5b2815b5d9e5195487d0", null ], - [ "find_first_var_that_uses_enumeration", "classlibdap_1_1D4Group.html#a721e2c66ddcbc747ce13d21d14769451", null ], - [ "find_map_source", "classlibdap_1_1D4Group.html#a35c2341eb4c0a0dfeffaf7af75039a99", null ], - [ "find_var", "classlibdap_1_1D4Group.html#a40872115c2d90536dac4f98f998416c4", null ], - [ "FQN", "classlibdap_1_1D4Group.html#a49310c234dfeb5ac8e40e20881199794", null ], - [ "get_attr_table", "classlibdap_1_1D4Group.html#a1fcd9537c67e3bf88964b2656ff5bac1", null ], - [ "get_parent", "classlibdap_1_1D4Group.html#a3459cdaa239c33ce111ef360d8dc3017", null ], - [ "get_var_index", "classlibdap_1_1D4Group.html#ac2b4b28ed9d6f435129aa599ab809799", null ], - [ "get_vars_iter", "classlibdap_1_1D4Group.html#a1e6d8224e04d75e3d2a21263957cd42f", null ], - [ "grp_begin", "classlibdap_1_1D4Group.html#a4e1ccf4eac9bf132014f175ffa934d35", null ], - [ "grp_end", "classlibdap_1_1D4Group.html#a893a28e64abefede77aca1d5a38e55e9", null ], - [ "insert_group_nocopy", "classlibdap_1_1D4Group.html#a4ad9fc466d42f5fe4c130a75ba984c15", null ], - [ "intern_data", "classlibdap_1_1D4Group.html#a065056826ef9c6fb2d08463af9e15a34", null ], - [ "intern_data", "classlibdap_1_1D4Group.html#a368a83899f9abbbda1deaba7db8920bb", null ], - [ "is_constructor_type", "classlibdap_1_1D4Group.html#a8b8490e0047c6da52945699a132008ea", null ], - [ "is_dap4", "classlibdap_1_1D4Group.html#a7f6835cb5e5589ab5dad3fb4813d3bea", null ], - [ "is_in_selection", "classlibdap_1_1D4Group.html#ae302ab2ec26e9fc5b575bf5d3d09aa5c", null ], - [ "is_linear", "classlibdap_1_1D4Group.html#af26f89e9c0732a9c32bd5e15d716a7d7", null ], - [ "is_simple_type", "classlibdap_1_1D4Group.html#aae57e5b270b3a015d40c8db10b9b5549", null ], - [ "is_vector_type", "classlibdap_1_1D4Group.html#a7107c76dbcab71015141142383b6d022", null ], - [ "length", "classlibdap_1_1D4Group.html#aadcda7a659157bc6a832d8a5fb775b3f", null ], - [ "m_duplicate", "classlibdap_1_1D4Group.html#a88b282d06686fc88a74c91e289ef31d7", null ], - [ "m_duplicate", "classlibdap_1_1D4Group.html#aa29dfa477c763d7d2641eb505fca356e", null ], - [ "m_duplicate", "classlibdap_1_1D4Group.html#a0c55b826c8c5dfe7a454dc670e859a41", null ], - [ "m_exact_match", "classlibdap_1_1D4Group.html#aa5cd6124619d35e81bcfd426f1e569d3", null ], - [ "m_leaf_match", "classlibdap_1_1D4Group.html#a8fe3863a609488f4d5125abea96b82ed", null ], - [ "name", "classlibdap_1_1D4Group.html#a24c5d67823b3cff7f4245a993072a142", null ], - [ "operator=", "classlibdap_1_1D4Group.html#ab76e380cc608e96044216d15c6a06c3a", null ], - [ "ops", "classlibdap_1_1D4Group.html#a8a0000be2a244e3e07abda3020af8800", null ], - [ "print_dap4", "classlibdap_1_1D4Group.html#ae18a505436325aac9b7522fe293638e6", null ], - [ "print_decl", "classlibdap_1_1D4Group.html#ab7fb094be8da2a9f80f6d3b85e452934", null ], - [ "print_decl", "classlibdap_1_1D4Group.html#a6c2c4d7cbe1d6239c037272ec865f80b", null ], - [ "print_val", "classlibdap_1_1D4Group.html#aa7f9cce8ca18461af332aab61123bf23", null ], - [ "print_val", "classlibdap_1_1D4Group.html#af50641301757ed26eb75fb2d29eae7ee", null ], - [ "print_xml", "classlibdap_1_1D4Group.html#a32de0413045173aa8803f540a6cea39b", null ], - [ "print_xml", "classlibdap_1_1D4Group.html#a7bbe6beabd94f576140e132e7a1017ff", null ], - [ "print_xml_writer", "classlibdap_1_1D4Group.html#ab775a5e7e63757ac961b43800a95635f", null ], - [ "ptr_duplicate", "classlibdap_1_1D4Group.html#aa56c17b1f5cca717df57604b9c7614d0", null ], - [ "read", "classlibdap_1_1D4Group.html#ad0af40e2565972fa44985d173370c264", null ], - [ "read_p", "classlibdap_1_1D4Group.html#a38ff819a432217c55db2e9071928d20c", null ], - [ "request_size", "classlibdap_1_1D4Group.html#ace2c9ad32397a47d87fdad9111693420", null ], - [ "send_p", "classlibdap_1_1D4Group.html#a980c0013817836aa77ef74aeec7fb192", null ], - [ "serialize", "classlibdap_1_1D4Group.html#a64268840654a0b37a15ccc601dbcfd33", null ], - [ "serialize", "classlibdap_1_1D4Group.html#ae2f8b233c32b222df7106661860b68dd", null ], - [ "set_attr_table", "classlibdap_1_1D4Group.html#a572a1d76a75981abac83a4241e90c0fa", null ], - [ "set_attributes", "classlibdap_1_1D4Group.html#ad4dda4cf43dca838d3de183b8e01cd09", null ], - [ "set_attributes_nocopy", "classlibdap_1_1D4Group.html#afd0e5f87d19020f560d5c1ff8dd4d6a3", null ], - [ "set_in_selection", "classlibdap_1_1D4Group.html#ac30becb1ffe7d2cd4cbcd24fc216c9a3", null ], - [ "set_is_dap4", "classlibdap_1_1D4Group.html#abca9ddaa9a1ada8447cbe7193e8e288a", null ], - [ "set_length", "classlibdap_1_1D4Group.html#a4fe343c1eeb6fb1d61ab030433651d90", null ], - [ "set_name", "classlibdap_1_1D4Group.html#a86504564f45a3e6748c6f1cc0ff4e9fa", null ], - [ "set_parent", "classlibdap_1_1D4Group.html#a5b6a39f6ce6594fa74f3fc899ac9a966", null ], - [ "set_read_p", "classlibdap_1_1D4Group.html#a391e0b9fa30f8afbd9dea69d5f5fd897", null ], - [ "set_send_p", "classlibdap_1_1D4Group.html#a71f6bd0a32c30966ded9ccf8578f5cfb", null ], - [ "set_synthesized_p", "classlibdap_1_1D4Group.html#a595cb4059cff24f801a1b6da79bd2f9e", null ], - [ "set_type", "classlibdap_1_1D4Group.html#af74f8d1ef57c9fcca46f620f75d175a3", null ], - [ "synthesized_p", "classlibdap_1_1D4Group.html#ae64e677da27249473cdba0b60cdbb90a", null ], - [ "toString", "classlibdap_1_1D4Group.html#a701eb3361f5b5628329ece019cd34519", null ], - [ "transfer_attributes", "classlibdap_1_1D4Group.html#a799d2bd8ef9505b1d493d8cd73b72746", null ], - [ "transform_to_dap2", "classlibdap_1_1D4Group.html#ab8aa023211f1ed226b73def5e11da787", null ], - [ "transform_to_dap4", "classlibdap_1_1D4Group.html#a3affad818961b2e7e984415cdd3c6e9e", null ], - [ "type", "classlibdap_1_1D4Group.html#af8e803b20a7a7dc5f2ef351d7fac4a56", null ], - [ "type_name", "classlibdap_1_1D4Group.html#a18a42c8ec35cb5b15cd651a4152f8a2c", null ], - [ "val2buf", "classlibdap_1_1D4Group.html#ac742b1bf93889e541128b1d123821ee6", null ], - [ "var", "classlibdap_1_1D4Group.html#a36a7412da7b5257d7666add726fea1a6", null ], - [ "var", "classlibdap_1_1D4Group.html#a68f1779dc328f890062722d90fad084a", null ], - [ "var_begin", "classlibdap_1_1D4Group.html#adeafe3d6c82d07b456a598a7b446c2c6", null ], - [ "var_end", "classlibdap_1_1D4Group.html#a936b38c7c35ffb4fe17c5b8e85bdaaa2", null ], - [ "var_rbegin", "classlibdap_1_1D4Group.html#aa025cf546ca35250454653c1ec684d91", null ], - [ "var_rend", "classlibdap_1_1D4Group.html#aede7cf5889e101db1ea8f22c3a84a5d3", null ], - [ "width", "classlibdap_1_1D4Group.html#a0b1e3ae7195f95c42ca98f42826a1ff5", null ], - [ "d_in_selection", "classlibdap_1_1D4Group.html#a949a89714965d7afdcd1e3edc8b7f0d4", null ], - [ "d_is_synthesized", "classlibdap_1_1D4Group.html#a629e97e8eb7d285b54c9af8c1ec9a29a", null ], - [ "d_vars", "classlibdap_1_1D4Group.html#a75b2aa694dc76294d6aa5f7456e49aa2", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1D4Group__inherit__graph.map b/html/classlibdap_1_1D4Group__inherit__graph.map deleted file mode 100644 index caf359318..000000000 --- a/html/classlibdap_1_1D4Group__inherit__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/html/classlibdap_1_1D4Group__inherit__graph.md5 b/html/classlibdap_1_1D4Group__inherit__graph.md5 deleted file mode 100644 index ac12d9b57..000000000 --- a/html/classlibdap_1_1D4Group__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -836efe94ee24e9e7a6faa4d8dc0b9375 \ No newline at end of file diff --git a/html/classlibdap_1_1D4Group__inherit__graph.png b/html/classlibdap_1_1D4Group__inherit__graph.png deleted file mode 100644 index 78d5b05a81f0754ad01290d7670ac8fbe7e464ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89866 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 pgZ+(}TceOE-T!lA3kxV`3?)0Sj!JsF) - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::D4Map Member List
    -
    -
    - -

    This is the complete list of members for libdap::D4Map, including all inherited members.

    - - - - - - - - - - - -
    array() const (defined in libdap::D4Map)libdap::D4Mapinline
    D4Map() (defined in libdap::D4Map)libdap::D4Mapinline
    D4Map(const string &name, Array *array, Array *parent=0) (defined in libdap::D4Map)libdap::D4Mapinline
    name() const (defined in libdap::D4Map)libdap::D4Mapinline
    parent() constlibdap::D4Mapinline
    print_dap4(XMLWriter &xml) (defined in libdap::D4Map)libdap::D4Mapvirtual
    set_array(Array *array) (defined in libdap::D4Map)libdap::D4Mapinline
    set_name(const string &name) (defined in libdap::D4Map)libdap::D4Mapinline
    set_parent(Array *parent) (defined in libdap::D4Map)libdap::D4Mapinline
    ~D4Map() (defined in libdap::D4Map)libdap::D4Mapinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1D4Map.html b/html/classlibdap_1_1D4Map.html deleted file mode 100644 index c267e8bd3..000000000 --- a/html/classlibdap_1_1D4Map.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - -libdap: libdap::D4Map Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::D4Map Class Reference
    -
    -
    - -

    #include <D4Maps.h>

    - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    -const Arrayarray () const
     
    D4Map (const string &name, Array *array, Array *parent=0)
     
    -const string & name () const
     
    const Arrayparent () const
     The Array that holds this Map. More...
     
    -virtual void print_dap4 (XMLWriter &xml)
     
    -void set_array (Array *array)
     
    -void set_name (const string &name)
     
    -void set_parent (Array *parent)
     
    -

    Detailed Description

    -

    A 'Map' in DAP4 is an Array in the dataset that is used to provide the domain values for a Coverage (aka a Grid). These Maps are a more general case of the DAP2 'Map vectors' because a DAP4 Map can have N dimensions.

    -

    Because the Maps can be shared by any or all of the Arrays in a dataset, they also correspond to the NetCDF/CF notion of a Shared Dimension.

    -

    In this implementation of the D4Map, each Map has a name and two weak pointers, one to the Array that holds the domain values and one to the Array that uses the Map. Note that while Maps can be shared by Arrays, each Array has it's own collection of these D4Map objects. This makes processing constraints possible (because it is possible to write different constraints for two arrays that share Maps).

    - -

    Definition at line 54 of file D4Maps.h.

    -

    Member Function Documentation

    - -

    ◆ parent()

    - -
    -
    - - - - - -
    - - - - - - - -
    const Array* libdap::D4Map::parent () const
    -
    -inline
    -
    - -

    The Array that holds this Map.

    - -

    Definition at line 74 of file D4Maps.h.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1D4Map.js b/html/classlibdap_1_1D4Map.js deleted file mode 100644 index 8bcf0c260..000000000 --- a/html/classlibdap_1_1D4Map.js +++ /dev/null @@ -1,13 +0,0 @@ -var classlibdap_1_1D4Map = -[ - [ "D4Map", "classlibdap_1_1D4Map.html#ac0babe29e03e4a6608194ae9ba009d17", null ], - [ "D4Map", "classlibdap_1_1D4Map.html#af3f0a335ea35b80c3a06f214c205bef6", null ], - [ "~D4Map", "classlibdap_1_1D4Map.html#a14c14714fab094fc5b7d71480b92ddaa", null ], - [ "array", "classlibdap_1_1D4Map.html#a6028ddc0b19815fb572b237059971953", null ], - [ "name", "classlibdap_1_1D4Map.html#aad2e8058431f0edd6534dbbfeef40db5", null ], - [ "parent", "classlibdap_1_1D4Map.html#a98ec8c14264c5a37d7009db73bd96e89", null ], - [ "print_dap4", "classlibdap_1_1D4Map.html#a1342078f96f506497e4b2d0f5c1b79d0", null ], - [ "set_array", "classlibdap_1_1D4Map.html#a629312283609f922aaec37324ff65223", null ], - [ "set_name", "classlibdap_1_1D4Map.html#aa5f9092dc886c3939ba49ac2dcde9977", null ], - [ "set_parent", "classlibdap_1_1D4Map.html#aca0d3f7e28d71f3ba548372fe0c55c48", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1D4Maps-members.html b/html/classlibdap_1_1D4Maps-members.html deleted file mode 100644 index 781e8c7c1..000000000 --- a/html/classlibdap_1_1D4Maps-members.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::D4Maps Member List
    -
    -
    - -

    This is the complete list of members for libdap::D4Maps, including all inherited members.

    - - - - - - - - - - - - - - - - -
    add_map(D4Map *map)libdap::D4Mapsinline
    D4Maps() (defined in libdap::D4Maps)libdap::D4Mapsinline
    D4Maps(Array *parent) (defined in libdap::D4Maps)libdap::D4Mapsinline
    D4Maps(const D4Maps &maps) (defined in libdap::D4Maps)libdap::D4Mapsinline
    D4MapsCIter typedef (defined in libdap::D4Maps)libdap::D4Maps
    D4MapsIter typedef (defined in libdap::D4Maps)libdap::D4Maps
    empty() const (defined in libdap::D4Maps)libdap::D4Mapsinline
    get_map(int i) (defined in libdap::D4Maps)libdap::D4Mapsinline
    map_begin() (defined in libdap::D4Maps)libdap::D4Mapsinline
    map_end() (defined in libdap::D4Maps)libdap::D4Mapsinline
    operator=(const D4Maps &rhs) (defined in libdap::D4Maps)libdap::D4Maps
    print_dap4(XMLWriter &xml) (defined in libdap::D4Maps)libdap::D4Mapsinlinevirtual
    remove_map(D4Map *map) (defined in libdap::D4Maps)libdap::D4Mapsinline
    size() const (defined in libdap::D4Maps)libdap::D4Mapsinline
    ~D4Maps() (defined in libdap::D4Maps)libdap::D4Mapsinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1D4Maps.html b/html/classlibdap_1_1D4Maps.html deleted file mode 100644 index ec10a23bd..000000000 --- a/html/classlibdap_1_1D4Maps.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - - -libdap: libdap::D4Maps Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::D4Maps Class Reference
    -
    -
    - -

    #include <D4Maps.h>

    - - - - - - -

    -Public Types

    -typedef vector< D4Map * >::const_iterator D4MapsCIter
     
    -typedef vector< D4Map * >::iterator D4MapsIter
     
    - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    void add_map (D4Map *map)
     
    D4Maps (Array *parent)
     
    D4Maps (const D4Maps &maps)
     
    -bool empty () const
     
    -D4Mapget_map (int i)
     
    -D4MapsIter map_begin ()
     
    -D4MapsIter map_end ()
     
    -D4Mapsoperator= (const D4Maps &rhs)
     
    -virtual void print_dap4 (XMLWriter &xml)
     
    -void remove_map (D4Map *map)
     
    -int size () const
     
    -

    Detailed Description

    -

    The D4Maps object holds pointers to all of the Maps used by a given Array.

    - -

    Definition at line 84 of file D4Maps.h.

    -

    Member Function Documentation

    - -

    ◆ add_map()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::D4Maps::add_map (D4Mapmap)
    -
    -inline
    -
    -

    Add a map. This does not test for duplicate names or Array pointers; It assumes that the caller has done that!

    - -

    Definition at line 115 of file D4Maps.h.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1D4Maps.js b/html/classlibdap_1_1D4Maps.js deleted file mode 100644 index aba62167f..000000000 --- a/html/classlibdap_1_1D4Maps.js +++ /dev/null @@ -1,18 +0,0 @@ -var classlibdap_1_1D4Maps = -[ - [ "D4MapsCIter", "classlibdap_1_1D4Maps.html#a7fd61631848dff6f45a28d114ccf4ed8", null ], - [ "D4MapsIter", "classlibdap_1_1D4Maps.html#a5c5682f17bea4636ead7fdf90a97ab7e", null ], - [ "D4Maps", "classlibdap_1_1D4Maps.html#a8fb624d7ea66f522c0fb3cb53b1cf830", null ], - [ "D4Maps", "classlibdap_1_1D4Maps.html#a8cc8dd043c7bde83deec633ff5e3ceb8", null ], - [ "D4Maps", "classlibdap_1_1D4Maps.html#aa87c1846d37b80efdf374af03ccd2fb6", null ], - [ "~D4Maps", "classlibdap_1_1D4Maps.html#addff73445ba70df96be90b38f7eab253", null ], - [ "add_map", "classlibdap_1_1D4Maps.html#afc9c47e9fcf1372407567a047f6642b5", null ], - [ "empty", "classlibdap_1_1D4Maps.html#af30e9d78634641113e4d884fa36fdfa9", null ], - [ "get_map", "classlibdap_1_1D4Maps.html#a065e596ce27b0eba34b224995bfee8d1", null ], - [ "map_begin", "classlibdap_1_1D4Maps.html#a261348349e944f67affc937565caff85", null ], - [ "map_end", "classlibdap_1_1D4Maps.html#a9546f2742f69e98967f21d668279885f", null ], - [ "operator=", "classlibdap_1_1D4Maps.html#a950b5d569d40ab43ec16187a6d14cf0b", null ], - [ "print_dap4", "classlibdap_1_1D4Maps.html#af348afac518049c15c598a1628bfbb57", null ], - [ "remove_map", "classlibdap_1_1D4Maps.html#add260bf46c431fbe6b0ef2a3bb164a1b", null ], - [ "size", "classlibdap_1_1D4Maps.html#a099f8024498f2b0ed230fd849dfd858b", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1D4Opaque-members.html b/html/classlibdap_1_1D4Opaque-members.html deleted file mode 100644 index a03358041..000000000 --- a/html/classlibdap_1_1D4Opaque-members.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::D4Opaque Member List
    -
    -
    - -

    This is the complete list of members for libdap::D4Opaque, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    add_var(BaseType *bt, Part part=nil)libdap::BaseTypevirtual
    add_var_nocopy(BaseType *bt, Part part=nil) (defined in libdap::BaseType)libdap::BaseTypevirtual
    attributes()libdap::BaseTypevirtual
    BaseType(const string &n, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const string &n, const string &d, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const BaseType &copy_from)libdap::BaseType
    btp_stack typedef (defined in libdap::BaseType)libdap::BaseType
    buf2val(void **val)libdap::D4Opaquevirtual
    check_semantics(string &msg, bool all=false)libdap::BaseTypevirtual
    clear_local_data()libdap::D4Opaquevirtual
    compute_checksum(Crc32 &checksum)libdap::D4Opaquevirtual
    d4_ops(BaseType *b, int op)libdap::BaseTypevirtual
    D4Opaque(const std::string &n) (defined in libdap::D4Opaque)libdap::D4Opaqueinline
    D4Opaque(const std::string &n, const std::string &d) (defined in libdap::D4Opaque)libdap::D4Opaqueinline
    D4Opaque(const D4Opaque &copy_from) (defined in libdap::D4Opaque)libdap::D4Opaqueinline
    d_buf (defined in libdap::D4Opaque)libdap::D4Opaqueprotected
    d_in_selection (defined in libdap::BaseType)libdap::BaseTypeprotected
    d_is_synthesized (defined in libdap::BaseType)libdap::BaseTypeprotected
    dataset() constlibdap::BaseTypevirtual
    deserialize(UnMarshaller &, DDS *, bool=false)libdap::D4Opaqueinlinevirtual
    deserialize(D4StreamUnMarshaller &um, DMR &dmr)libdap::D4Opaquevirtual
    dods_opaque typedef (defined in libdap::D4Opaque)libdap::D4Opaque
    dump(std::ostream &strm) constlibdap::D4Opaquevirtual
    element_count(bool leaves=false)libdap::BaseTypevirtual
    FQN() constlibdap::BaseTypevirtual
    get_attr_table()libdap::BaseTypevirtual
    get_parent() constlibdap::BaseTypevirtual
    intern_data(ConstraintEvaluator &eval, DDS &dds)libdap::BaseTypevirtual
    intern_data()libdap::BaseTypevirtual
    is_constructor_type() constlibdap::BaseTypevirtual
    is_dap4() const (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    is_in_selection()libdap::BaseTypevirtual
    is_simple_type() constlibdap::BaseTypevirtual
    is_vector_type() constlibdap::BaseTypevirtual
    length() constlibdap::D4Opaqueinlinevirtual
    m_duplicate(const BaseType &bt)libdap::BaseTypeprotected
    name() constlibdap::BaseTypevirtual
    operator=(const D4Opaque &rhs) (defined in libdap::D4Opaque)libdap::D4Opaque
    operator=(const BaseType &rhs) (defined in libdap::BaseType)libdap::BaseType
    ops(BaseType *, int)libdap::D4Opaqueinlinevirtual
    print_dap4(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
    print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_val(FILE *, std::string="", bool=true)libdap::D4Opaqueinlinevirtual
    print_val(std::ostream &out, std::string space="", bool print_decl_p=true)libdap::D4Opaquevirtual
    print_xml(FILE *out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml(ostream &out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml_writer(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
    ptr_duplicate()libdap::D4Opaqueinlinevirtual
    read()libdap::BaseTypevirtual
    read_p()libdap::BaseTypevirtual
    send_p()libdap::BaseTypevirtual
    serialize(ConstraintEvaluator &, DDS &, Marshaller &, bool=true)libdap::D4Opaqueinlinevirtual
    serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)libdap::D4Opaquevirtual
    set_attr_table(const AttrTable &at)libdap::BaseTypevirtual
    set_attributes(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_attributes_nocopy(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_in_selection(bool state)libdap::BaseTypevirtual
    set_is_dap4(const bool v) (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    set_length(int)libdap::BaseTypeinlinevirtual
    set_name(const string &n)libdap::BaseTypevirtual
    set_parent(BaseType *parent)libdap::BaseTypevirtual
    set_read_p(bool state)libdap::BaseTypevirtual
    set_send_p(bool state)libdap::BaseTypevirtual
    set_synthesized_p(bool state)libdap::BaseTypevirtual
    set_type(const Type &t)libdap::BaseTypevirtual
    set_value(const dods_opaque &value)libdap::D4Opaquevirtual
    synthesized_p()libdap::BaseTypevirtual
    toString()libdap::BaseTypevirtual
    transfer_attributes(AttrTable *at)libdap::BaseTypevirtual
    transform_to_dap2(AttrTable *parent_attr_table)libdap::D4Opaquevirtual
    transform_to_dap4(D4Group *root, Constructor *container)libdap::BaseTypevirtual
    type() constlibdap::BaseTypevirtual
    type_name() constlibdap::BaseTypevirtual
    val2buf(void *val, bool reuse=false)libdap::D4Opaquevirtual
    value() constlibdap::D4Opaquevirtual
    var(const string &name="", bool exact_match=true, btp_stack *s=0)libdap::BaseTypevirtual
    var(const string &name, btp_stack &s)libdap::BaseTypevirtual
    width(bool=false) constlibdap::D4Opaqueinlinevirtual
    ~BaseType() (defined in libdap::BaseType)libdap::BaseTypevirtual
    ~D4Opaque() (defined in libdap::D4Opaque)libdap::D4Opaqueinlinevirtual
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1D4Opaque.html b/html/classlibdap_1_1D4Opaque.html deleted file mode 100644 index e8e5fb158..000000000 --- a/html/classlibdap_1_1D4Opaque.html +++ /dev/null @@ -1,2930 +0,0 @@ - - - - - - - -libdap: libdap::D4Opaque Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    -Inheritance diagram for libdap::D4Opaque:
    -
    -
    Inheritance graph
    - - - - -
    - - - - - - -

    -Public Types

    -typedef stack< BaseType * > btp_stack
     
    -typedef std::vector< uint8_t > dods_opaque
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual void add_var (BaseType *bt, Part part=nil)
     Add a variable. More...
     
    -virtual void add_var_nocopy (BaseType *bt, Part part=nil)
     
    virtual unsigned int buf2val (void **val)
     Reads the class data. More...
     
    virtual bool check_semantics (string &msg, bool all=false)
     Compare an object's current state with the semantics of its type. More...
     
    virtual void clear_local_data ()
     
    virtual void compute_checksum (Crc32 &checksum)
     include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum. More...
     
    virtual bool d4_ops (BaseType *b, int op)
     Evaluator a relop for DAP4. More...
     
    D4Opaque (const std::string &n)
     
    D4Opaque (const std::string &n, const std::string &d)
     
    D4Opaque (const D4Opaque &copy_from)
     
    virtual string dataset () const
     Returns the name of the dataset used to create this instance. More...
     
    virtual bool deserialize (UnMarshaller &, DDS *, bool=false)
     Receive data from the net. More...
     
    virtual void deserialize (D4StreamUnMarshaller &um, DMR &dmr)
     
    virtual void dump (std::ostream &strm) const
     dumps information about this object More...
     
    virtual int element_count (bool leaves=false)
     Count the members of constructor types. More...
     
    virtual std::string FQN () const
     
    virtual AttrTableget_attr_table ()
     
    virtual BaseTypeget_parent () const
     
    virtual bool is_constructor_type () const
     Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable. More...
     
    -virtual bool is_dap4 () const
     
    virtual bool is_in_selection ()
     Is this variable part of the current selection? More...
     
    virtual bool is_simple_type () const
     Returns true if the instance is a numeric, string or URL type variable. More...
     
    virtual bool is_vector_type () const
     Returns true if the instance is a vector (i.e., array) type variable. More...
     
    virtual int length () const
     How many elements are in this variable. More...
     
    virtual string name () const
     Returns the name of the class instance. More...
     
    -D4Opaqueoperator= (const D4Opaque &rhs)
     
    virtual bool ops (BaseType *, int)
     Evaluate relational operators. More...
     
    virtual void print_dap4 (XMLWriter &xml, bool constrained=false)
     
    virtual void print_decl (FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_decl (ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_val (FILE *, std::string="", bool=true)
     Prints the value of the variable. More...
     
    virtual void print_val (std::ostream &out, std::string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_xml (FILE *out, string space=" ", bool constrained=false)
     
    virtual void print_xml (ostream &out, string space=" ", bool constrained=false)
     
    virtual void print_xml_writer (XMLWriter &xml, bool constrained=false)
     
    virtual BaseTypeptr_duplicate ()
     
    virtual bool read ()
     Read data into a local buffer. More...
     
    virtual bool read_p ()
     Has this variable been read? More...
     
    virtual bool send_p ()
     Should this variable be sent? More...
     
    virtual bool serialize (ConstraintEvaluator &, DDS &, Marshaller &, bool=true)
     Move data to the net, then remove them from the object. More...
     
    virtual void serialize (D4StreamMarshaller &m, DMR &dmr, bool filter=false)
     The DAP4 serialization method. Serialize a variable's values for DAP4. This does not write the DMR persistent representation but does write that part of the binary data blob that holds a variable's data. Once a variable's data are serialized, that memory is reclaimed (by calling BaseType::clear_local_data()) More...
     
    virtual void set_attr_table (const AttrTable &at)
     
    virtual void set_in_selection (bool state)
     
    -virtual void set_is_dap4 (const bool v)
     
    virtual void set_length (int)
     Set the number of elements for this variable. More...
     
    virtual void set_name (const string &n)
     Sets the name of the class instance. More...
     
    virtual void set_parent (BaseType *parent)
     
    virtual void set_read_p (bool state)
     Sets the value of the read_p property. More...
     
    virtual void set_send_p (bool state)
     
    virtual void set_synthesized_p (bool state)
     
    virtual void set_type (const Type &t)
     Sets the type of the class instance. More...
     
    virtual bool set_value (const dods_opaque &value)
     
    virtual bool synthesized_p ()
     
    virtual string toString ()
     
    virtual void transfer_attributes (AttrTable *at)
     
    virtual std::vector< BaseType * > * transform_to_dap2 (AttrTable *parent_attr_table)
     DAP4 to DAP2 transform. More...
     
    virtual void transform_to_dap4 (D4Group *root, Constructor *container)
     DAP2 to DAP4 transform. More...
     
    virtual Type type () const
     Returns the type of the class instance. More...
     
    virtual string type_name () const
     Returns the type of the class instance as a string. More...
     
    virtual unsigned int val2buf (void *val, bool reuse=false)
     Loads class data. More...
     
    virtual dods_opaque value () const
     
    virtual BaseTypevar (const string &name="", bool exact_match=true, btp_stack *s=0)
     Returns a pointer to a member of a constructor class. More...
     
    virtual BaseTypevar (const string &name, btp_stack &s)
     
    virtual unsigned int width (bool=false) const
     How many bytes does this variable use Return the number of bytes of storage this variable uses. For scalar types, this is pretty simple (an int32 uses 4 bytes, etc.). For arrays and Constructors, it is a bit more complex. Note that a scalar String variable uses sizeof(String*) bytes, not the length of the string value. The width() of a String array returns the number of elements in the array times sizeof(String*). More...
     
    virtual D4Attributesattributes ()
     
    -virtual void set_attributes (D4Attributes *)
     
    -virtual void set_attributes_nocopy (D4Attributes *)
     
    Abstract Methods
    virtual void intern_data (ConstraintEvaluator &eval, DDS &dds)
     
    virtual void intern_data ()
     Read data into this variable. More...
     
    - - - - -

    -Protected Member Functions

    void m_duplicate (const BaseType &bt)
     Perform a deep copy. More...
     
    - - - - - - - -

    -Protected Attributes

    -dods_opaque d_buf
     
    -bool d_in_selection
     
    -bool d_is_synthesized
     
    -

    Detailed Description

    -
    -

    Definition at line 38 of file D4Opaque.h.

    -

    Member Function Documentation

    - -

    ◆ add_var()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::add_var (BaseTypebt,
    Part part = nil 
    )
    -
    -virtualinherited
    -
    - -

    Add a variable.

    -

    Adds a variable to an instance of a constructor class, such as Array, Structure et cetera. This function is only used by those classes. For constructors with more than one variable, the variables appear in the same order in which they were added (i.e., the order in which add_var() was called). Since this method is only for use by Vectors and Constructors, the BaseType implementation throws InternalErr.

    -
    Note
    For the implementation of this method in Structure, Sequence, et c., first copy bt and then insert the copy. If bt is itself a constructor type you must either use the var() method to get a pointer to the actual instance added to *this or you must first add all of bt's children to it before adding it to *this. The implementations should use m_duplicate() to perform a deep copy of bt.
    -
    Todo:
    We should get rid of the Part parameter and adopt the convention that the first variable is the Array and all subsequent ones are Maps (when dealing with a Grid, the only time Part matters). This would enable several methods to migrate from Structure, Sequence and Grid to Constructor.
    -
    Parameters
    - - - -
    btThe variable to be added to this instance. The caller of this method must free memory it allocates for v. This method will make a deep copy of the object pointed to by v.
    partThe part of the constructor data to be modified. Only meaningful for Grid variables.
    -
    -
    -
    See also
    Part
    - -

    Reimplemented in libdap::Vector, libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 815 of file BaseType.cc.

    - -
    -
    - -

    ◆ attributes()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4Attributes * libdap::BaseType::attributes ()
    -
    -virtualinherited
    -
    -

    DAP4 Attribute methods

    - -

    Definition at line 599 of file BaseType.cc.

    - -
    -
    - -

    ◆ buf2val()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::D4Opaque::buf2val (void ** val)
    -
    -virtual
    -
    - -

    Reads the class data.

    -

    Reads the class data into the memory referenced by val. The caller should either allocate enough storage to val to hold the class data or set *val to null. If *val is NULL, memory will be allocated by this function with new(). If the memory is allocated this way, the caller is responsible for deallocating that memory. Array and values for simple types are stored as C would store an array.

    -
    Deprecated:
    Use value() in the leaf classes.
    -
    Parameters
    - - -
    valA pointer to a pointer to the memory into which the class data will be copied. If the value pointed to is NULL, memory will be allocated to hold the data, and the pointer value modified accordingly. The calling program is responsible for deallocating the memory references by this pointer.
    -
    -
    -
    Returns
    The size (in bytes) of the information copied to val.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 102 of file D4Opaque.cc.

    - -
    -
    - -

    ◆ check_semantics()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::check_semantics (string & msg,
    bool all = false 
    )
    -
    -virtualinherited
    -
    - -

    Compare an object's current state with the semantics of its type.

    -

    This function checks the class instance for internal consistency. This is important to check for complex constructor classes. For BaseType, an object is semantically correct if it has both a non-null name and type.

    -

    For example, an Int32 instance would return FALSE if it had no name or no type defined. A Grid instance might return FALSE for more complex reasons, such as having Map arrays of the wrong size or shape.

    -

    This function is used by the DDS class, and will rarely, if ever, be explicitly called by a DODS application program. A variable must pass this test before it is sent, but there may be many other stages in a retrieve operation where it would fail.

    -
    Returns
    Returns FALSE when the current state violates some aspect of the type semantics, TRUE otherwise.
    -
    Parameters
    - - - -
    msgA returned string, containing a message indicating the source of any problem.
    allFor complex constructor types (Grid, Sequence, Structure), this flag indicates whether to check the semantics of the member variables, too.
    -
    -
    -
    See also
    DDS::check_semantics
    - -

    Reimplemented in libdap::Array, libdap::Vector, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1209 of file BaseType.cc.

    - -
    -
    - -

    ◆ clear_local_data()

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::D4Opaque::clear_local_data ()
    -
    -virtual
    -
    -

    Remove any read or set data in the private data of the variable, setting read_p() to false. Used to clear any dynamically allocated storage that holds (potentially large) data. For the simple types, this no-op version is all that's needed. Vector and some other classes define a special version and have serialize() implementations that call it to free data as soon as possible after sending it.

    -
    Note
    Added 7/5/15 jhrg
    -
    -Any specialization of this should make sure to reset the read_p property.
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 65 of file D4Opaque.cc.

    - -
    -
    - -

    ◆ compute_checksum()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::D4Opaque::compute_checksum (Crc32checksum)
    -
    -virtual
    -
    - -

    include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum.

    -
    Parameters
    - - -
    checksumA Crc32 instance that holds the current checksum.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 76 of file D4Opaque.cc.

    - -
    -
    - -

    ◆ d4_ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::d4_ops (BaseTypeb,
    int op 
    )
    -
    -virtualinherited
    -
    - -

    Evaluator a relop for DAP4.

    -

    This method is used by the filter expression evaluation code in DAP4. Each of the 'data type' classes that support relops must overload this method. In an expression of the form arg1 op arg2, this object is arg1, the parameter 'b' is arg2 and op is the relational operator.

    -
    Note
    I used the same relop codes for DAP4 as in the DAP2 parser/scanner which makes for some coupling between them, but cuts way down on the duplication of the evaluator logic, which is somewhat involved.
    -
    Parameters
    - - - -
    bThe second argument in the relational expression
    opThe infix relational operator
    -
    -
    -
    Returns
    True if the expression is true, False otherwise.
    - -

    Reimplemented in libdap::Str, libdap::Int32, libdap::Float32, libdap::Byte, libdap::Float64, libdap::Int16, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 1282 of file BaseType.cc.

    - -
    -
    - -

    ◆ dataset()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::dataset () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the dataset used to create this instance.

    -

    A dataset from which the data is to be read. The meaning of this string will vary among different types of data sources. It may be the name of a data file or an identifier used to read data from a relational database.

    - -

    Definition at line 358 of file BaseType.cc.

    - -
    -
    - -

    ◆ deserialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    virtual bool libdap::D4Opaque::deserialize (UnMarshallerum,
    DDSdds,
    bool reuse = false 
    )
    -
    -inlinevirtual
    -
    - -

    Receive data from the net.

    -

    Receives data from the network connection identified by the source parameter. The data is put into the class data buffer according to the input dds.

    -

    This function is only used on the client side of the DODS client/server connection.

    -
    Parameters
    - - - - -
    umAn UnMarshaller that knows how to deserialize data types
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure. This would have been received from the server in an earlier transmission.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect.
    -
    -
    -
    Returns
    Always returns TRUE.
    -
    Exceptions
    - - -
    Errorwhen a problem reading from the UnMarshaller is found.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 72 of file D4Opaque.h.

    - -
    -
    - -

    ◆ deserialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::D4Opaque::deserialize (D4StreamUnMarshallerum,
    DMRdmr 
    )
    -
    -virtual
    -
    -

    The DAP4 deserialization method.

    Parameters
    - - - -
    um
    dmr
    -
    -
    -
    Exceptions
    - - -
    Erroror InternalErr
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 96 of file D4Opaque.cc.

    - -
    -
    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::D4Opaque::dump (std::ostream & strm) const
    -
    -virtual
    -
    - -

    dumps information about this object

    -

    Displays the pointer value of this instance and then displays information about this base type.

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the information to
    -
    -
    -
    Returns
    void
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 171 of file D4Opaque.cc.

    - -
    -
    - -

    ◆ element_count()

    - -
    -
    - - - - - -
    - - - - - - - - -
    int libdap::BaseType::element_count (bool leaves = false)
    -
    -virtualinherited
    -
    - -

    Count the members of constructor types.

    -

    Return a count of the total number of variables in this variable. This is used to count the number of variables held by a constructor variable - for simple type and vector variables it always returns 1.

    -

    For compound data types, there are two ways to count members. You can count the members, or you can count the simple members and add that to the count of the compound members. For example, if a Structure contains an Int32 and another Structure that itself contains two Int32 members, the element count of the top-level structure could be two (one Int32 and one Structure) or three (one Int32 by itself and two Int32's in the subsidiary Structure). Use the leaves parameter to control which kind of counting you desire.

    -
    Returns
    Returns 1 for simple types. For compound members, the count depends on the leaves argument.
    -
    Parameters
    - - -
    leavesThis parameter is only relevant if the object contains other compound data types. If FALSE, the function counts only the data variables mentioned in the object's declaration. If TRUE, it counts the simple members, and adds that to the sum of the counts for the compound members. This parameter has no effect for simple type variables.
    -
    -
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 443 of file BaseType.cc.

    - -
    -
    - -

    ◆ FQN()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::FQN () const
    -
    -virtualinherited
    -
    -

    Return the FQN for this variable. This will include the D4 Group component of the name.

    -
    Returns
    The FQN in a string
    - -

    Reimplemented in libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 332 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - -
    AttrTable & libdap::BaseType::get_attr_table ()
    -
    -virtualinherited
    -
    -

    Get this variable's AttrTable. It's generally a bad idea to return a reference to a contained object, but in this case it seems that building an interface inside BaseType is overkill.

    -

    Use the AttrTable methods to manipulate the table.

    - -

    Definition at line 582 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_parent()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::BaseType::get_parent () const
    -
    -virtualinherited
    -
    -

    Return a pointer to the Constructor or Vector which holds (contains) this variable. If this variable is at the top level, this method returns null.

    -
    Returns
    A BaseType pointer to the variable's parent.
    - -

    Definition at line 751 of file BaseType.cc.

    - -
    -
    - -

    ◆ intern_data() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::intern_data (ConstraintEvaluatoreval,
    DDSdds 
    )
    -
    -virtualinherited
    -
    -

    Similar to using serialize() and deserialize() together in one object. Data are read as for serialize and those values are stored in the objects as deserialize() does but does not write and then read data to/from a stream.

    -

    This method is defined by the various data type classes. It calls the read() abstract method. Unlike serialize(), this method does not clear the memory use to hold the data values, so the caller should make sure to delete the DDS or the variable as soon as possible.

    -
    Parameters
    - - - -
    evalUse this as the constraint expression evaluator.
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    -
    -
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 908 of file BaseType.cc.

    - -
    -
    - -

    ◆ intern_data() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::BaseType::intern_data ()
    -
    -virtualinherited
    -
    - -

    Read data into this variable.

    -
    Parameters
    - - - -
    evalEvaluator for a constraint expression
    dmrDMR for the whole dataset
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 927 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_constructor_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_constructor_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable.

    -
    Returns
    True if the instance is a Structure, Sequence or Grid, False otherwise.
    - -

    Definition at line 412 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_in_selection ()
    -
    -virtualinherited
    -
    - -

    Is this variable part of the current selection?

    -

    Does this variable appear in either the selection part or as a function argument in the current constrain expression. If this property is set (true) then implementations of the read() method should read this variable.

    -
    Note
    This method does not check, nor does it know about the semantics of, string arguments passed to functions. Those functions might include variable names in strings; they are responsible for reading those variables. See the grid (func_grid_select()) for an example.
    -
    See also
    BaseType::read()
    - -

    Definition at line 703 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_simple_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_simple_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a numeric, string or URL type variable.

    -
    Returns
    True if the instance is a scalar numeric, String or URL variable, False otherwise. Arrays (even of simple types) return False.
    -
    See also
    is_vector_type()
    - -

    Definition at line 393 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_vector_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_vector_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a vector (i.e., array) type variable.

    -
    Returns
    True if the instance is an Array, False otherwise.
    - -

    Definition at line 402 of file BaseType.cc.

    - -
    -
    - -

    ◆ length()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual int libdap::D4Opaque::length () const
    -
    -inlinevirtual
    -
    - -

    How many elements are in this variable.

    -
    Todo:
    change the return type to int64_t
    -
    Returns
    The number of elements; 1 for scalars
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 66 of file D4Opaque.h.

    - -
    -
    - -

    ◆ m_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::m_duplicate (const BaseTypebt)
    -
    -protectedinherited
    -
    - -

    Perform a deep copy.

    -

    Perform a deep copy. Copies the values of bt into *this. Pointers are dereferenced and their values are copied into a newly allocated instance.

    -
    Parameters
    - - -
    btThe source object.
    -
    -
    - -

    Definition at line 86 of file BaseType.cc.

    - -
    -
    - -

    ◆ name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::name () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the class instance.

    - -

    Definition at line 320 of file BaseType.cc.

    - -
    -
    - -

    ◆ ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    virtual bool libdap::D4Opaque::ops (BaseTypeb,
    int op 
    )
    -
    -inlinevirtual
    -
    - -

    Evaluate relational operators.

    -

    This method contains the relational operators used by the constraint expression evaluator in the DDS class. Each class that wants to be able to evaluate relational expressions must overload this function. The implementation in BaseType throws an InternalErr exception. The DAP library classes Byte, ..., Url provide specializations of this method. It is not meaningful for classes such as Array because relational expressions using Array are not supported.

    -

    The op argument refers to a table generated by bison from the constraint expression parser. Use statements like the following to correctly interpret its value:

    -
    switch (op) {
    -    case EQUAL: return i1 == i2;
    -    case NOT_EQUAL: return i1 != i2;
    -    case GREATER: return i1 > i2;
    -    case GREATER_EQL: return i1 >= i2;
    -    case LESS: return i1 < i2;
    -    case LESS_EQL: return i1 <= i2;
    -    case REGEXP: throw Error("Regular expressions are not supported for integer values");
    -    default: throw Error("Unknown operator");
    -}
    -

    This function is used by the constraint expression evaluator.

    -
    Parameters
    - - - -
    bCompare the value of this instance with b.
    opAn integer index indicating which relational operator is implied. Choose one from the following: EQUAL, NOT_EQUAL, GREATER, GREATER_EQL, LESS, LESS_EQL, and REGEXP.
    -
    -
    -
    Returns
    The boolean value of the comparison.
    -
    See also
    BaseType::d4_ops(BaseType *, int)
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 97 of file D4Opaque.h.

    - -
    -
    - -

    ◆ print_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_dap4 (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the DAP4 XML representation for this variable. This method is used to build the DAP4 DMR response object.

    -
    Parameters
    - - - -
    xmlAn XMLWriter that will do the serialization
    constrainedTrue if the response should show the variables subject to the current constraint expression.
    -
    -
    - -

    Reimplemented in libdap::Array, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 1164 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (FILE * out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1003 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (ostream & out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1054 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_val() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    virtual void libdap::D4Opaque::print_val (FILE * out,
    std::string space = "",
    bool print_decl_p = true 
    )
    -
    -inlinevirtual
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output stream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 90 of file D4Opaque.h.

    - -
    -
    - -

    ◆ print_val() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::D4Opaque::print_val (std::ostream & out,
    std::string space = "",
    bool print_decl_p = true 
    )
    -
    -virtual
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output ostream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 156 of file D4Opaque.cc.

    - -
    -
    - -

    ◆ print_xml() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (FILE * out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination.
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1105 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (ostream & out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1120 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml_writer()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml_writer (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    - -

    Reimplemented in libdap::Array, libdap::D4Enum, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1134 of file BaseType.cc.

    - -
    -
    - -

    ◆ ptr_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual BaseType* libdap::D4Opaque::ptr_duplicate ()
    -
    -inlinevirtual
    -
    -

    Clone this instance. Allocate a new instance and copy *this into it. This method must perform a deep copy.

    @note This method should \e not copy data values, but must copy all
    -other fields in the object.
    -
    Returns
    A newly allocated copy of this.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 58 of file D4Opaque.h.

    - -
    -
    - -

    ◆ read()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read ()
    -
    -virtualinherited
    -
    - -

    Read data into a local buffer.

    -

    This method should be implemented for each of the data type classes (Byte, ..., Grid) when using the DAP class library to build a server. This method is only for DAP servers. The library provides a default definition here which throws an InternalErr exception unless the read_p property has been set. In that case it returns false, indicating that all the data have been read. The latter case can happen when building a constant value that needs to be passed to a function. The variable/constant is loaded with a value when it is created.

    -

    When implementing a new DAP server, the Byte, ..., Grid data type classes are usually specialized. In each of those specializations read() should be defined to read values from the data source and store them in the object's local buffer. The read() method is called by other methods in this library. When writing read(), follow these rules:

    -
      -
    • -read() should throw Error if it encounters an error. The message should be verbose enough to be understood by someone running a client on a different machine.
    • -
    • -The value(s) should be read if and only if either send_p() or is_in_selection() return true. If neither of these return true, the value(s) should not be read. This is important when writing read() for a Constructor type such as Grid where a client may ask for only the map vectors (and thus reading the much larger Array part is not needed).
    • -
    • -For each specialization of read(), the method should first test the value of the read_p property (using the read_p() method) and read values only if the value of read_p() is false. Once the read() method reads data and stores it in the instance, it must set the value of the read_p property to true using set_read_p(). If your read() methods fail to do this data may not serialize correctly.
    • -
    • -The Array::read() and Grid::read() methods should take into account any restrictions on Array sizes.
    • -
    • -If you are writing Sequence::read(), be sure to check the documentation for Sequence::read_row() and Sequence::serialize() so you understand how Sequence::read() is being called.
    • -
    • -

      For Sequence::read(), your specialization must correctly manage the unsent_data property and row count in addition to the read_p property (handle the read_p property as describe above). For a Sequence to serialize correctly, once all data from the Sequence has been read, unsent_data property must be set to false (use Sequence::set_unsent_data()). Also, at that time the row number counter must be reset (use Sequence::reset_row_counter()). Typically the correct time to set unsent_data to false and reset the row counter is the time when Sequence::read() return false indicating that all the data for the Sequence have been read. Failure to handle these tasks will break serialization of nested Sequences. Note that when Sequence::read() returns with a result of true (indicating there is more data to send, the value of the unsent_data property should be true.

      -

      Also, if you server must handle nested sequences, be sure to read about subclassing set_read_p().

      -
    • -
    -
    Todo:
    Modify the D4 serialize code so that it supports the true/false behavior of read() for arrays.
    -
    Todo:
    Modify all of the stock handlers so they conform to this!
    -
    Returns
    False means more data remains to be read, True indicates that no more data need to be read. For Sequence and D4Sequence, this method will generally read one instance of the Sequence; for other types it will generally read the entire variable modulo any limitations due to a constraint. However, the library should be written so that read can return less than all of the data for a variable - serialize() would then call the function until it returns True.
    -
    See also
    BaseType
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 899 of file BaseType.cc.

    - -
    -
    - -

    ◆ read_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read_p ()
    -
    -virtualinherited
    -
    - -

    Has this variable been read?

    -

    Returns true if the value(s) for this variable have been read from the data source, otherwise returns false. This method is used to determine when values need to be read using the read() method. When read_p() returns true, this library assumes that buf2val() (and other methods such as get_vec()) can be used to access the value(s) of a variable.

    -
    Returns
    True if the variable's value(s) have been read, false otherwise.
    - -

    Definition at line 480 of file BaseType.cc.

    - -
    -
    - -

    ◆ send_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::send_p ()
    -
    -virtualinherited
    -
    - -

    Should this variable be sent?

    -

    Returns the state of the send_p property. If true, this variable should be sent to the client, if false, it should not. If no constraint expression (CE) has been evaluated, this property is true for all variables in a data source (i.e., for all the variables listed in a DDS). If a CE has been evaluated, this property is true only for those variables listed in the projection part of the CE.

    -
    Returns
    True if the variable should be sent to the client, false otherwise.
    - -

    Definition at line 554 of file BaseType.cc.

    - -
    -
    - -

    ◆ serialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    virtual bool libdap::D4Opaque::serialize (ConstraintEvaluatoreval,
    DDSdds,
    Marshallerm,
    bool ce_eval = true 
    )
    -
    -inlinevirtual
    -
    - -

    Move data to the net, then remove them from the object.

    -

    Sends the data from the indicated (local) dataset through the connection identified by the Marshaller parameter. If the data is not already incorporated into the DDS object, read the data from the dataset. Once the data are sent (written to the Marshaller), they are deleted from the object and the object state is reset so that they will be read again if the read() method is called.

    -

    This function is only used on the server side of the client/server connection, and is generally only called from the ResponseBuilder functions. It has no BaseType implementation; each datatype child class supplies its own implementation.

    @param eval Use this as the constraint expression evaluator.
    -
    Parameters
    - - - - -
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    mA marshaller used to serialize data types
    ce_evalA boolean value indicating whether to evaluate the DODS constraint expression that may accompany this dataset. The constraint expression is stored in the dds.
    -
    -
    -
    Returns
    This method always returns true. Older versions used the return value to signal success or failure.
    -
    Note
    We changed the default behavior of this method so that it calls BaseType::clear_local_data() once the values are sent. This, combined with the behavior that read() is called by this method just before data are sent, means that data for any given variable remain in memory for the shortest time possible. Furthermore, since variables are serialized one at a time, no more than one variable's data will be in memory at any given time when using the default behavior. Some code - code that uses intern_data() or server functions - might alter this default behavior. Only Array (i.e. Vector), Sequence, D4Sequence and D4Opaque types actually hold data in dynamically allocated memory, so sonly those types have the new/changed behavior. This change was made on 7/5/15.
    -
    Exceptions
    - - - -
    InternalErr.
    Error.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 69 of file D4Opaque.h.

    - -
    -
    - -

    ◆ serialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::D4Opaque::serialize (D4StreamMarshallerm,
    DMRdmr,
    bool filter = false 
    )
    -
    -virtual
    -
    - -

    The DAP4 serialization method. Serialize a variable's values for DAP4. This does not write the DMR persistent representation but does write that part of the binary data blob that holds a variable's data. Once a variable's data are serialized, that memory is reclaimed (by calling BaseType::clear_local_data())

    -
    Parameters
    - - - - - -
    m
    dmr
    eval
    filterTrue if there is one variable that should be 'filtered'
    -
    -
    -
    Exceptions
    - - -
    Erroror InternalErr
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 82 of file D4Opaque.cc.

    - -
    -
    - -

    ◆ set_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_attr_table (const AttrTableat)
    -
    -virtualinherited
    -
    -

    Set this variable's attribute table.

    Parameters
    - - -
    atSource of the attributes.
    -
    -
    - -

    Definition at line 590 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_in_selection (bool state)
    -
    -virtualinherited
    -
    -

    Set the in_selection property to state. This property indicates that the variable is used as a parameter to a constraint expression function or that it appears as an argument in a selection sub-expression. If set (true), implementations of the BaseType::read() method should read this variable.

    -
    Parameters
    - - -
    stateSet the in_selection property to this state.
    -
    -
    -
    See also
    BaseType::read()
    -
    -BaseType::is_in_selection() for more information.
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 718 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_length()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::BaseType::set_length (int )
    -
    -inlinevirtualinherited
    -
    - -

    Set the number of elements for this variable.

    -
    Todo:
    change param type to int64_t
    -
    Parameters
    - - -
    lThe number of elements
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, and libdap::Vector.

    - -

    Definition at line 214 of file BaseType.h.

    - -
    -
    - -

    ◆ set_name()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_name (const string & n)
    -
    -virtualinherited
    -
    - -

    Sets the name of the class instance.

    - -

    Reimplemented in libdap::Vector.

    - -

    Definition at line 344 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_parent()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_parent (BaseTypeparent)
    -
    -virtualinherited
    -
    -

    Set the parent property for this variable.

    -
    Note
    Added ability to set parent to null. 10/19/12 jhrg
    -
    Parameters
    - - -
    parentPointer to the Constructor of Vector parent variable or null if the variable has no parent (if it is at the top-level of a DAP2/3 DDS).
    -
    -
    -
    Exceptions
    - - -
    InternalErrthrown if called with anything other than a Constructor, Vector or Null.
    -
    -
    - -

    Definition at line 733 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_read_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_read_p (bool state)
    -
    -virtualinherited
    -
    - -

    Sets the value of the read_p property.

    -

    Sets the value of the read_p property. This indicates that the value(s) of this variable has/have been read. An implementation of the read() method should use this to set the read_p property to true.

    -
    Note
    If the is_synthesized property is true, this method will not alter the is_read property. If you need that behavior, specialize the method in your subclasses if the various types.
    -
    -For most of the types the default implementation of this method is fine. However, if you're building a server which must handle data represented using nested sequences, then you may need to provide a specialization of Sequence::set_read_p(). By default Sequence::set_read_p() recursively sets the read_p property for all child variables to state. For servers where one Sequence reads an outer set of values and another reads an inner set, this is cumbersome. In such a case, it is easier to specialize Sequence::set_read_p() so that it does not recursively set the read_p property for the inner Sequence. Be sure to see the documentation for the read() method!
    -
    Todo:
    Look at making synthesized variables easier to implement and at making them more integrated into the overall CE evaluation process. Maybe the code that computes the synthesized var's value should be in the that variable's read() method? This might provide a way to get rid of the awkward 'projection functions' by replacing them with real children of BaseType. It would also provide a way to clean up the way the synthesized_p prop intrudes on the read_p prop.
    -
    See also
    BaseType::read()
    -
    Parameters
    - - -
    stateSet the read_p property to this state.
    -
    -
    - -

    Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 516 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_send_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_send_p (bool state)
    -
    -virtualinherited
    -
    -

    Sets the value of the send_p flag. This function is meant to be called from within the constraint evaluator of other code which determines that this variable should be returned to the client. Data are ready to be sent when both the d_is_send and d_is_read flags are set to TRUE.

    -
    Parameters
    - - -
    stateThe logical state to set the send_p flag.
    -
    -
    - -

    Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 568 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_synthesized_p (bool state)
    -
    -virtualinherited
    -
    -

    Set the synthesized flag. Before setting this flag be sure to set the read_p() state. Once this flag is set you cannot alter the state of the read_p flag!

    -
    See also
    synthesized_p()
    - -

    Definition at line 463 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_type()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_type (const Typet)
    -
    -virtualinherited
    -
    - -

    Sets the type of the class instance.

    - -

    Definition at line 372 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_value()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool libdap::D4Opaque::set_value (const dods_opaque & value)
    -
    -virtual
    -
    -

    Set the value of this instance.

    Parameters
    - - -
    valueThe value
    -
    -
    -
    Returns
    Always returns true; the return type of bool is for compatibility with the Passive* subclasses written by HAO.
    - -

    Definition at line 132 of file D4Opaque.cc.

    - -
    -
    - -

    ◆ synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::synthesized_p ()
    -
    -virtualinherited
    -
    -

    Returns true if the variable is a synthesized variable. A synthesized variable is one that is added to the dataset by the server (usually with a `projection function'.

    - -

    Definition at line 452 of file BaseType.cc.

    - -
    -
    - -

    ◆ toString()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::toString ()
    -
    -virtualinherited
    -
    -

    Write out the object's internal fields in a string. To be used for debugging when regular inspection w/ddd or gdb isn't enough.

    -
    Returns
    A string which shows the object's internal stuff.
    - -

    Reimplemented in libdap::Sequence.

    - -

    Definition at line 184 of file BaseType.cc.

    - -
    -
    - -

    ◆ transfer_attributes()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::transfer_attributes (AttrTableat_container)
    -
    -virtualinherited
    -
    -

    Transfer attributes from a DAS object into this variable. Because of the rough history of the DAS object and the way that various server code built the DAS, this is necessarily a heuristic process. The intent is that this method will be overridden by handlers that need to look for certain patterns in the DAS (e.g., hdf4's odd variable_dim_n; where n = 0, 1, 2, ...) attribute containers.

    -

    There should be a one-to-one mapping between variables and attribute containers. However, in some cases one variable has attributes spread across several top level containers and in some cases one container is used by several variables

    -
    Note
    This method is technically unnecessary because a server (or client) can easily add attributes directly using the DDS::get_attr_table or BaseType::get_attr_table methods and then poke values in using any of the methods AttrTable provides. This method exists to ease the transition to DDS objects which contain attribute information for the existing servers (Since they all make DAS objects separately from the DDS). They could be modified to use the same AttrTable methods but operate on the AttrTable instances in a DDS/BaseType instead of those in a DAS.
    -
    Parameters
    - - -
    at_containerTransfer attributes from this container.
    -
    -
    -
    Returns
    void
    - -

    Reimplemented in libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 644 of file BaseType.cc.

    - -
    -
    - -

    ◆ transform_to_dap2()

    - -
    -
    - - - - - -
    - - - - - - - - -
    std::vector< BaseType * > * libdap::D4Opaque::transform_to_dap2 (AttrTableparent_attr_table)
    -
    -virtual
    -
    - -

    DAP4 to DAP2 transform.

    -

    For the current BaseType, return a DAP2 'copy' of the variable.

    -
    Note
    For most DAP4 types, in this implementation of DAP2 the corresponding DAP4 type is the same. These types have a different representations in DAP2 and DAP4: Sequences (which are D4Sequences in the DAP4 implementation),
      -
    • Grids (which are semantically subsumed by coverages in DAP4)
    • -
    • Arrays (which use shared dimensions in DAP4)
    • -
    -
    -

    Additionally DAP4 adds the following types:

      -
    • UInt8, Int8, and Char which map to Byte in DAP2.
    • -
    • Int64, Unit64 which have no natural representation in DAP2.
    • -
    • Opaque Possible Byte stuff[] plus metadata?
    • -
    • Enum's can be represented as Int32.
    • -
    • Groups, with the exception of the root group "disappear" into the names of their member variables. Specifically the Group name is add as a prefix followed by a "/" separator to the names of all of the Group's member groups variables.
    • -
    -
    Parameters
    - - -
    TheAttrTable pointer parent_attr_table is used by Groups, which disappear from the DAP2 representation. Their children are returned in the the BAseType vector their attributes are added to parent_attr_table;
    -
    -
    -
    Returns
    A pointer to a vector of BaseType pointers (right?). In most cases this vector will contain a single pointer but DAP4 types 'disappear' such as Group will return all of their member variables in the vector. DAP4 types with no representation in DAP2 (ex: UInt64) the will return a NULL pointer and so this must be tested!
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 149 of file D4Opaque.cc.

    - -
    -
    - -

    ◆ transform_to_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::transform_to_dap4 (D4Grouproot,
    Constructorcontainer 
    )
    -
    -virtualinherited
    -
    - -

    DAP2 to DAP4 transform.

    -

    For the current BaseType, return a DAP4 'copy' of the variable.

    -
    Note
    For most DAP2 types, in this implementation of DAP4 the corresponding DAP4 type is the same. The different types are Sequences (which are D4Sequences in the DAP4 implementation), Grids (which are coverages) and Arrays (which use shared dimensions).
    -
    Parameters
    - - - -
    rootThe root group that should hold this new variable. Add Group-level stuff here (e.g., D4Dimensions).
    containerAdd the new variable to this container.
    -
    -
    -
    Returns
    A pointer to the transformed variable
    - -

    Reimplemented in libdap::Sequence, libdap::Array, libdap::Grid, libdap::Structure, and libdap::Constructor.

    - -

    Definition at line 216 of file BaseType.cc.

    - -
    -
    - -

    ◆ type()

    - -
    -
    - - - - - -
    - - - - - - - -
    Type libdap::BaseType::type () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance.

    - -

    Definition at line 365 of file BaseType.cc.

    - -
    -
    - -

    ◆ type_name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::type_name () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance as a string.

    - -

    Definition at line 379 of file BaseType.cc.

    - -
    -
    - -

    ◆ val2buf()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    unsigned int libdap::D4Opaque::val2buf (void * val,
    bool reuse = false 
    )
    -
    -virtual
    -
    - -

    Loads class data.

    -

    Store the value pointed to by val in the object's internal buffer. This function does not perform any checks, so users must be sure that the thing pointed to can actually be stored in the object's buffer.

    -

    Only simple objects (Int, Float, Byte, and so on) and arrays of these simple objects may be stored using this function. To put data into more complex constructor types, use the functions provided by that class.

    -
    Deprecated:
    Use set_value() in the leaf classes.
    -
    Parameters
    - - - -
    valA pointer to the data to be inserted into the class data buffer.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect. This is currently used only in the Vector class.
    -
    -
    -
    Returns
    The size (in bytes) of the information copied from val.
    -
    See also
    Grid
    -
    -Vector::val2buf
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 118 of file D4Opaque.cc.

    - -
    -
    - -

    ◆ value()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4Opaque::dods_opaque libdap::D4Opaque::value () const
    -
    -virtual
    -
    -

    Get the value of this instance.

    Returns
    The value.
    - -

    Definition at line 143 of file D4Opaque.cc.

    - -
    -
    - -

    ◆ var() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::BaseType::var (const string & name = "",
    bool exact_match = true,
    btp_stack * s = 0 
    )
    -
    -virtualinherited
    -
    - -

    Returns a pointer to a member of a constructor class.

    -

    Returns a pointer to the contained variable in a composite class. The composite classes are those made up of aggregated simple data types. Array, Grid, and Structure are composite types, while Int and Float are simple types. This function is only used by composite classes. The BaseType implementation always returns null.

    -

    Several of the subclasses provide alternate access methods that make sense for that particular data type. For example, the Array class defines a *var(int i) method that returns the ith entry in the Array data, and the Structure provides a *var(Vars_iter) function using a pseudo-index to access the different members of the structure.

    -
    Parameters
    - - - - -
    nameThe name of the class member. Defaults to ""
    exact_matchTrue if only interested in variables whose full names match n exactly. If false, returns the first variable whose name matches name. For example, if name is x and point.x is a variable, then var("x", false) would return a BaseType pointer to point.x. If exact_match was true then name would need to be "point.x" for var to return that pointer. This feature simplifies constraint expressions for datasets which have complex, nested, constructor variables. Defaults to true.
    sRecord the path to name. Defaults to null, in which case it is not used.
    -
    -
    -
    Returns
    A pointer to the member named in the n argument. If no name is given, the function returns the first (only) variable. For example, an Array has only one variable, while a Structure can have many.
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 758 of file BaseType.cc.

    - -
    -
    - -

    ◆ var() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::BaseType::var (const string & name,
    btp_stack & s 
    )
    -
    -virtualinherited
    -
    -

    This version of var(...) searches for name and returns a pointer to the BaseType object if found. It uses the same search algorithm as BaseType::var(const string &, bool, btp_stack *) when exact_match is false. In addition to returning a pointer to the variable, it pushes onto s a BaseType pointer to each constructor type that ultimately contains name.

    -
    Note
    The BaseType implementation always returns null. There are no default values for the parameters. If var() is called w/o any params, the three parameter version will be used.
    -
    Deprecated:
    This method is deprecated because it tries first to use exact_match and, if that fails, then tries leaf_match. It's better to use the alternate form of var(...) and specify exactly what you'd like to do.
    -
    Returns
    A pointer to the named variable.
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 780 of file BaseType.cc.

    - -
    -
    - -

    ◆ width()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual unsigned int libdap::D4Opaque::width (bool constrained = false) const
    -
    -inlinevirtual
    -
    - -

    How many bytes does this variable use Return the number of bytes of storage this variable uses. For scalar types, this is pretty simple (an int32 uses 4 bytes, etc.). For arrays and Constructors, it is a bit more complex. Note that a scalar String variable uses sizeof(String*) bytes, not the length of the string value. The width() of a String array returns the number of elements in the array times sizeof(String*).

    -
    Parameters
    - - -
    constrainedShould the current constraint be taken into account?
    -
    -
    -
    Returns
    Bytes of storage
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 62 of file D4Opaque.h.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1D4Opaque.js b/html/classlibdap_1_1D4Opaque.js deleted file mode 100644 index 8dffcb862..000000000 --- a/html/classlibdap_1_1D4Opaque.js +++ /dev/null @@ -1,79 +0,0 @@ -var classlibdap_1_1D4Opaque = -[ - [ "btp_stack", "classlibdap_1_1D4Opaque.html#ae9c6e71855b90a0e552713011c9ab81f", null ], - [ "dods_opaque", "classlibdap_1_1D4Opaque.html#a33dfb82b293a8c4c0bd9cd72ae7cbccd", null ], - [ "D4Opaque", "classlibdap_1_1D4Opaque.html#a8eddfbec1b6ef521571494641a3660de", null ], - [ "D4Opaque", "classlibdap_1_1D4Opaque.html#a190880ff7cfb16fdb8065903dc29851b", null ], - [ "~D4Opaque", "classlibdap_1_1D4Opaque.html#a4d15fd40998bb261bf88d43e3ef3eeaa", null ], - [ "D4Opaque", "classlibdap_1_1D4Opaque.html#aacbfb0eb2c1dea1409556650d743b3e7", null ], - [ "add_var", "classlibdap_1_1D4Opaque.html#adca3c2621c4a509537c18362005d7f7f", null ], - [ "add_var_nocopy", "classlibdap_1_1D4Opaque.html#aa1192360cea4dc516c822cd3e13dc723", null ], - [ "attributes", "classlibdap_1_1D4Opaque.html#a97452f06d2188eb838399a709246b5e9", null ], - [ "buf2val", "classlibdap_1_1D4Opaque.html#a144049483741bfd39e3ac17bc480f6e4", null ], - [ "check_semantics", "classlibdap_1_1D4Opaque.html#aec503abec2fd3090e7738c0a575491f8", null ], - [ "clear_local_data", "classlibdap_1_1D4Opaque.html#a1902dc3e133b35b1cab454b8136525b3", null ], - [ "compute_checksum", "classlibdap_1_1D4Opaque.html#a084b31aa9073775472a8ca16d30950a6", null ], - [ "d4_ops", "classlibdap_1_1D4Opaque.html#a512a356f31ed6c4c1a368da0b054408a", null ], - [ "dataset", "classlibdap_1_1D4Opaque.html#a47521ce321a17e6ce217870cb6a1a7aa", null ], - [ "deserialize", "classlibdap_1_1D4Opaque.html#a055e793d61a140ffbfcde18d0395f6f6", null ], - [ "deserialize", "classlibdap_1_1D4Opaque.html#a05a39516928c96e53b5c63ebf003de01", null ], - [ "dump", "classlibdap_1_1D4Opaque.html#aaa416d5ed6dc0d114abbbd32e7c17c05", null ], - [ "element_count", "classlibdap_1_1D4Opaque.html#a5c2235737737b482bfa7536b8aeab810", null ], - [ "FQN", "classlibdap_1_1D4Opaque.html#a977cb954cc8f0d914d6f66ea0f48a9e3", null ], - [ "get_attr_table", "classlibdap_1_1D4Opaque.html#a1fcd9537c67e3bf88964b2656ff5bac1", null ], - [ "get_parent", "classlibdap_1_1D4Opaque.html#a3459cdaa239c33ce111ef360d8dc3017", null ], - [ "intern_data", "classlibdap_1_1D4Opaque.html#a722d33783aa0272d339b0301a4f77e59", null ], - [ "intern_data", "classlibdap_1_1D4Opaque.html#a1956e6ea90a745516f5372c859173433", null ], - [ "is_constructor_type", "classlibdap_1_1D4Opaque.html#a8b8490e0047c6da52945699a132008ea", null ], - [ "is_dap4", "classlibdap_1_1D4Opaque.html#a7f6835cb5e5589ab5dad3fb4813d3bea", null ], - [ "is_in_selection", "classlibdap_1_1D4Opaque.html#ae302ab2ec26e9fc5b575bf5d3d09aa5c", null ], - [ "is_simple_type", "classlibdap_1_1D4Opaque.html#aae57e5b270b3a015d40c8db10b9b5549", null ], - [ "is_vector_type", "classlibdap_1_1D4Opaque.html#a7107c76dbcab71015141142383b6d022", null ], - [ "length", "classlibdap_1_1D4Opaque.html#a23a23d312b74ec2989372033aebaa72f", null ], - [ "m_duplicate", "classlibdap_1_1D4Opaque.html#a0c55b826c8c5dfe7a454dc670e859a41", null ], - [ "name", "classlibdap_1_1D4Opaque.html#a24c5d67823b3cff7f4245a993072a142", null ], - [ "operator=", "classlibdap_1_1D4Opaque.html#ad804a3a03e56e8b8165fc11061488215", null ], - [ "ops", "classlibdap_1_1D4Opaque.html#aedf47172b055ecbe59363808903b5f94", null ], - [ "print_dap4", "classlibdap_1_1D4Opaque.html#afcddbe441380b95c894510c02980b163", null ], - [ "print_decl", "classlibdap_1_1D4Opaque.html#a2d799fad93255d7f2b803562ae7a5784", null ], - [ "print_decl", "classlibdap_1_1D4Opaque.html#afd744b0ddeb04e7b173c9e83423ec572", null ], - [ "print_val", "classlibdap_1_1D4Opaque.html#ae4521e7e5c38c7002dea687ada0e46f9", null ], - [ "print_val", "classlibdap_1_1D4Opaque.html#ae27d35b688dd9a246c4ac0d9eed8d2cb", null ], - [ "print_xml", "classlibdap_1_1D4Opaque.html#a825820edee179550cfde3dfd4d274f2a", null ], - [ "print_xml", "classlibdap_1_1D4Opaque.html#a8bd2c7682edd48c64b210bdf247bdef7", null ], - [ "print_xml_writer", "classlibdap_1_1D4Opaque.html#a11554ff931528b243e9af8173d205b44", null ], - [ "ptr_duplicate", "classlibdap_1_1D4Opaque.html#ada8cd83c8995fa8099adc1e23b8aeb1f", null ], - [ "read", "classlibdap_1_1D4Opaque.html#a1da003c53f2e663223f603ab3fbd7c8e", null ], - [ "read_p", "classlibdap_1_1D4Opaque.html#a38ff819a432217c55db2e9071928d20c", null ], - [ "send_p", "classlibdap_1_1D4Opaque.html#a980c0013817836aa77ef74aeec7fb192", null ], - [ "serialize", "classlibdap_1_1D4Opaque.html#a5d6753586eefbca214e866fea703e743", null ], - [ "serialize", "classlibdap_1_1D4Opaque.html#a83417f08ec539cc7ec6a1c76fd9029a8", null ], - [ "set_attr_table", "classlibdap_1_1D4Opaque.html#a572a1d76a75981abac83a4241e90c0fa", null ], - [ "set_attributes", "classlibdap_1_1D4Opaque.html#ad4dda4cf43dca838d3de183b8e01cd09", null ], - [ "set_attributes_nocopy", "classlibdap_1_1D4Opaque.html#afd0e5f87d19020f560d5c1ff8dd4d6a3", null ], - [ "set_in_selection", "classlibdap_1_1D4Opaque.html#a2bc036248cdaf1affac464170f32ad30", null ], - [ "set_is_dap4", "classlibdap_1_1D4Opaque.html#abca9ddaa9a1ada8447cbe7193e8e288a", null ], - [ "set_length", "classlibdap_1_1D4Opaque.html#a4fe343c1eeb6fb1d61ab030433651d90", null ], - [ "set_name", "classlibdap_1_1D4Opaque.html#a86504564f45a3e6748c6f1cc0ff4e9fa", null ], - [ "set_parent", "classlibdap_1_1D4Opaque.html#a5b6a39f6ce6594fa74f3fc899ac9a966", null ], - [ "set_read_p", "classlibdap_1_1D4Opaque.html#a4533905a450d2a7af32e7d5acd557676", null ], - [ "set_send_p", "classlibdap_1_1D4Opaque.html#aba7b27635c95b74536de18393133628e", null ], - [ "set_synthesized_p", "classlibdap_1_1D4Opaque.html#a595cb4059cff24f801a1b6da79bd2f9e", null ], - [ "set_type", "classlibdap_1_1D4Opaque.html#af74f8d1ef57c9fcca46f620f75d175a3", null ], - [ "set_value", "classlibdap_1_1D4Opaque.html#ae2a2a38798436fcff40bdf0f2d7895b2", null ], - [ "synthesized_p", "classlibdap_1_1D4Opaque.html#ae64e677da27249473cdba0b60cdbb90a", null ], - [ "toString", "classlibdap_1_1D4Opaque.html#a701eb3361f5b5628329ece019cd34519", null ], - [ "transfer_attributes", "classlibdap_1_1D4Opaque.html#add8e836c622042a339152a6c31e5bdfb", null ], - [ "transform_to_dap2", "classlibdap_1_1D4Opaque.html#a055cc952c257d9069d4da12c47f1f148", null ], - [ "transform_to_dap4", "classlibdap_1_1D4Opaque.html#adb03e2e1e40c3c888577c4666831a949", null ], - [ "type", "classlibdap_1_1D4Opaque.html#af8e803b20a7a7dc5f2ef351d7fac4a56", null ], - [ "type_name", "classlibdap_1_1D4Opaque.html#a18a42c8ec35cb5b15cd651a4152f8a2c", null ], - [ "val2buf", "classlibdap_1_1D4Opaque.html#abaec2b7412c175c02116ace998b57bf2", null ], - [ "value", "classlibdap_1_1D4Opaque.html#ab5240d13c4373a6913d1e263567cd5b6", null ], - [ "var", "classlibdap_1_1D4Opaque.html#a4dc4fac1bb6083f6db645f37bfd59b85", null ], - [ "var", "classlibdap_1_1D4Opaque.html#adecfc442b5927c79933c7f71cfe03fd2", null ], - [ "width", "classlibdap_1_1D4Opaque.html#a209fc10e6550ae7a5e19ad12453a7e26", null ], - [ "d_buf", "classlibdap_1_1D4Opaque.html#ac29a174a6c256ea66f3b423053c6cdee", null ], - [ "d_in_selection", "classlibdap_1_1D4Opaque.html#a949a89714965d7afdcd1e3edc8b7f0d4", null ], - [ "d_is_synthesized", "classlibdap_1_1D4Opaque.html#a629e97e8eb7d285b54c9af8c1ec9a29a", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1D4Opaque__inherit__graph.map b/html/classlibdap_1_1D4Opaque__inherit__graph.map deleted file mode 100644 index 7508aa430..000000000 --- a/html/classlibdap_1_1D4Opaque__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1D4Opaque__inherit__graph.md5 b/html/classlibdap_1_1D4Opaque__inherit__graph.md5 deleted file mode 100644 index a0fcd0c81..000000000 --- a/html/classlibdap_1_1D4Opaque__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -4b5eecce60b650bdb04dbf38e0edf5fa \ No newline at end of file diff --git a/html/classlibdap_1_1D4Opaque__inherit__graph.png b/html/classlibdap_1_1D4Opaque__inherit__graph.png deleted file mode 100644 index 48834c16f75ee91c325cca2cc469a6d14a87b5fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63428 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�FF%siM zceLe@sIQ>Cd@A^RG{&mE{kV7)bY#A{F6e+Ky>6Pc^fZVrW+J>A0Ts_TfE(!PBNH;;2Os-!B^tg0WMwa60-^jaM+0?o9 z3w4RU;}M?Gf3xDjsU_Z1=@itd}yo4+vC2RYJkd|$?VtdX|Im!2~97AZYW z$Qr4`+7Sacu!n)mR(>wEF+vzu92ADRN3E$=LO*pn?i`6%S8o-LJcd-zo+uNIZU)~x86|U{ABy!J zczMP;M}TYnDh$#Q(0TCXfM9q+S|d|rW?xmB;fyMPlZS!?EAyJD-xi2V{T0`&&oygg z5%6*l-U9>e^~Q6QjMmv4jR*$|ZJR+dQNZK67Al`Je!Bd;8q7}6WndnA=Z}VNtPedh zP`FdeHQSGM5LJq}c=cg=F74gpH}nMuqp@l?fjctX_6QvZ8H&}^B4`?8E9S1!v6hC# zMA1R=5NFHds|G9fFa>aZE1-!Bkf&aat!EQXswP;b5rVttFP|O|2%{|xd}xXumzyTw zz-dYo-^x78vKaFu!!e4CI~zqZtxV}I`|iVMw>oLHk=v+aK}io}@aWUlHSje<(fZmY zlD<5NX0P*`dl6>k<@H5&pC+prwyD%#^)J2Px5dtc4T7@pEpjAtA-$E7nLoK<<8Oj_wjLiJ39XM zn`CXS`9WcFZlCB4L!TauFB5SNYz3IF_&{&4<3h ze!j%#w88fz-#GQ5AVHuvn?ce`9;CkE@NTePwcX5lox;S7Jnl!Th1!Wk^*|A#Fy#6B ze)d-@Vf>P)GLVv`TNb>-&ZSdd!Y!L0_HqY~?b+ys(`}2D-shWFpBj%#G%w&~ADOB>`WL^kef(DmNr~>v9u?)53m^mEb8lW=X-VY zmzm(nzDu!G`t@_`57)899&r`oB+ir-SUS8+Pq5&qyYKKhQtairD*}VIa z!pOy(Yh4{0!sr+62NKx>rf|DQE+mnA0Fb8gmL{|lw69&vMznTkk04^2kH-J|T@zB| z4(A-##~y^-_MBTK-45Tg_pvt^c<<)j3&rODSB+R<7;v*$M&sh?bbo#JXxpY;ndQ6n z_q=B)?d-3eNb%-B_OodxG|JYDm?Pg_c3bw^zE9a36%F_r@Xiy

    mR;E(dwA4LMFU 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%0A!;VI7uH* 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 diff --git a/html/classlibdap_1_1D4ParseError-members.html b/html/classlibdap_1_1D4ParseError-members.html deleted file mode 100644 index 587cfa39d..000000000 --- a/html/classlibdap_1_1D4ParseError-members.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -

    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::D4ParseError Member List
    -
    -
    - -

    This is the complete list of members for libdap::D4ParseError, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    _error_code (defined in libdap::Error)libdap::Errorprotected
    _error_message (defined in libdap::Error)libdap::Errorprotected
    D4ParseError() (defined in libdap::D4ParseError)libdap::D4ParseErrorinline
    D4ParseError(const string &msg) (defined in libdap::D4ParseError)libdap::D4ParseErrorinline
    d_file (defined in libdap::Error)libdap::Errorprotected
    d_line (defined in libdap::Error)libdap::Errorprotected
    Error(ErrorCode ec, std::string msg, std::string file="", int line=0)libdap::Error
    Error(std::string msg, std::string file="", int line=0)libdap::Error
    Error()libdap::Error
    Error(const Error &copy_from) (defined in libdap::Error)libdap::Error
    get_error_code() constlibdap::Error
    get_error_message() constlibdap::Error
    get_file() const (defined in libdap::Error)libdap::Errorinline
    get_line() const (defined in libdap::Error)libdap::Errorinline
    OK() constlibdap::Error
    operator=(const Error &rhs) (defined in libdap::Error)libdap::Error
    parse(FILE *fp)libdap::Error
    print(FILE *out) constlibdap::Error
    print(std::ostream &out) constlibdap::Error
    set_error_code(ErrorCode ec=undefined_error)libdap::Error
    set_error_message(std::string msg="")libdap::Error
    set_file(std::string f) (defined in libdap::Error)libdap::Errorinline
    set_line(int l) (defined in libdap::Error)libdap::Errorinline
    what() constlibdap::Errorinlinevirtual
    ~Error() (defined in libdap::Error)libdap::Errorvirtual
    -
    - - - - diff --git a/html/classlibdap_1_1D4ParseError.html b/html/classlibdap_1_1D4ParseError.html deleted file mode 100644 index 2582fc7f2..000000000 --- a/html/classlibdap_1_1D4ParseError.html +++ /dev/null @@ -1,453 +0,0 @@ - - - - - - - -libdap: libdap::D4ParseError Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::D4ParseError Class Reference
    -
    -
    - -

    #include <D4ParseError.h>

    -
    -Inheritance diagram for libdap::D4ParseError:
    -
    -
    Inheritance graph
    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    D4ParseError (const string &msg)
     
    ErrorCode get_error_code () const
     
    std::string get_error_message () const
     
    -std::string get_file () const
     
    -int get_line () const
     
    bool OK () const
     Is the Error object valid? More...
     
    bool parse (FILE *fp)
     Parse an Error object. More...
     
    void print (FILE *out) const
     
    void print (std::ostream &out) const
     
    void set_error_code (ErrorCode ec=undefined_error)
     
    void set_error_message (std::string msg="")
     
    -void set_file (std::string f)
     
    -void set_line (int l)
     
    virtual const char * what () const throw ()
     The pointer is valid only for the lifetime of the Error instance. jhrg 9/22/20. More...
     
    - - - - - - - - - -

    -Protected Attributes

    -ErrorCode _error_code
     
    -std::string _error_message
     
    -std::string d_file
     
    -int d_line
     
    -

    Detailed Description

    -

    Thrown when the DMR document cannot be parsed.

    - -

    Definition at line 35 of file D4ParseError.h.

    -

    Member Function Documentation

    - -

    ◆ get_error_code()

    - -
    -
    - - - - - -
    - - - - - - - -
    ErrorCode libdap::Error::get_error_code () const
    -
    -inherited
    -
    -

    Get the ErrorCode for this instance.

    - -

    Definition at line 249 of file Error.cc.

    - -
    -
    - -

    ◆ get_error_message()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::Error::get_error_message () const
    -
    -inherited
    -
    -

    Return the current error message.

    - -

    Definition at line 278 of file Error.cc.

    - -
    -
    - -

    ◆ OK()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::Error::OK () const
    -
    -inherited
    -
    - -

    Is the Error object valid?

    -

    Use this function to determine whether an Error object is valid. To be a valid, an Error object must either be: 1) empty or contain a message and a code.

    -
    Returns
    TRUE if the object is valid, FALSE otherwise.
    - -

    Definition at line 135 of file Error.cc.

    - -
    -
    - -

    ◆ parse()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool libdap::Error::parse (FILE * fp)
    -
    -inherited
    -
    - -

    Parse an Error object.

    -

    Given an input stream (FILE *) fp, parse an Error object from stream. Values for fields of the Error object are parsed and this is set accordingly. This is how a client program receives an error object from a server.

    -
    Parameters
    - - -
    fpA valid file pointer to an input stream.
    -
    -
    -
    Returns
    TRUE if no error was detected, FALSE otherwise.
    - -

    Definition at line 158 of file Error.cc.

    - -
    -
    - -

    ◆ print() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Error::print (FILE * out) const
    -
    -inherited
    -
    -

    Creates a printable representation of the Error object. It is suitable for framing, and also for printing and sending over a network.

    -

    The printed representation produced by this function can be parsed by the parse() member function. Thus parse and print form a symmetrical pair that can be used to send and receive an Error object over the network in a MIME document.

    -
    Parameters
    - - -
    outA pointer to the output stream on which the Error object is to be rendered.
    -
    -
    - -

    Definition at line 200 of file Error.cc.

    - -
    -
    - -

    ◆ print() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Error::print (std::ostream & out) const
    -
    -inherited
    -
    -

    Creates a printable representation of the Error object. It is suitable for framing, and also for printing and sending over a network.

    -

    The printed representation produced by this function can be parsed by the parse() member function. Thus parse and print form a symmetrical pair that can be used to send and receive an Error object over the network in a MIME document.

    -
    Parameters
    - - -
    strmA reference to the output stream on which the Error object is to be rendered.
    -
    -
    - -

    Definition at line 229 of file Error.cc.

    - -
    -
    - -

    ◆ set_error_code()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Error::set_error_code (ErrorCode ec = undefined_error)
    -
    -inherited
    -
    -

    Set the ErrorCode. If the current error message has not been set, use ec to set the error message. The resulting error message string is the same as the ErrorCode name. If ec is not within the range of values for an OPeNDAP ErrorCode, the error message is left unchanged.

    -
    Parameters
    - - -
    ecThe new ErrorCode value.
    -
    -
    - -

    Definition at line 262 of file Error.cc.

    - -
    -
    - -

    ◆ set_error_message()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Error::set_error_message (std::string msg = "")
    -
    -inherited
    -
    -

    Set the error message.

    - -

    Definition at line 287 of file Error.cc.

    - -
    -
    - -

    ◆ what()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - -
    virtual const char* libdap::Error::what () const
    throw (
    )
    -
    -inlinevirtualinherited
    -
    - -

    The pointer is valid only for the lifetime of the Error instance. jhrg 9/22/20.

    - -

    Definition at line 127 of file Error.h.

    - -
    -
    -
    The documentation for this class was generated from the following file: -
    -
    - - - - diff --git a/html/classlibdap_1_1D4ParseError.js b/html/classlibdap_1_1D4ParseError.js deleted file mode 100644 index d8cf7b7fe..000000000 --- a/html/classlibdap_1_1D4ParseError.js +++ /dev/null @@ -1,22 +0,0 @@ -var classlibdap_1_1D4ParseError = -[ - [ "D4ParseError", "classlibdap_1_1D4ParseError.html#ac5ec08fa35253f6f738ca8e247b21597", null ], - [ "D4ParseError", "classlibdap_1_1D4ParseError.html#a985a380206c94f33faa84026f75a0c52", null ], - [ "get_error_code", "classlibdap_1_1D4ParseError.html#aaca0caca09e939602cade604cbc9824f", null ], - [ "get_error_message", "classlibdap_1_1D4ParseError.html#ab24a61e4974aae62962a40f9975e674c", null ], - [ "get_file", "classlibdap_1_1D4ParseError.html#a5165d667334a9fd6f337735c2b57e28c", null ], - [ "get_line", "classlibdap_1_1D4ParseError.html#a44b91121bdbc7d9d389db3440e2299cf", null ], - [ "OK", "classlibdap_1_1D4ParseError.html#acf3ab60821773bd8b62284750b02cfc0", null ], - [ "parse", "classlibdap_1_1D4ParseError.html#ac705b3c1cfab1f7530d66a974eb0e8b6", null ], - [ "print", "classlibdap_1_1D4ParseError.html#a552d711be27e6695854bd2b977a5cf31", null ], - [ "print", "classlibdap_1_1D4ParseError.html#a4c58ef196c2b247bd37529bb7ad6a666", null ], - [ "set_error_code", "classlibdap_1_1D4ParseError.html#a47c0f4b6a38d8ca075d1056076d2845d", null ], - [ "set_error_message", "classlibdap_1_1D4ParseError.html#a3ca90d33bf1c95529c9eefdfe8646e34", null ], - [ "set_file", "classlibdap_1_1D4ParseError.html#a94a26bbdd9f4ede88c74de97e9e9e98d", null ], - [ "set_line", "classlibdap_1_1D4ParseError.html#a63a9c54019daa8b406c4287faba5e60a", null ], - [ "what", "classlibdap_1_1D4ParseError.html#accc5eeb469c8c18ec16dbf7fefe3cc41", null ], - [ "_error_code", "classlibdap_1_1D4ParseError.html#a30226017ae9dfbe2e27be502b4fbdef4", null ], - [ "_error_message", "classlibdap_1_1D4ParseError.html#a87f74c6be2134736ca1e400c90a3d571", null ], - [ "d_file", "classlibdap_1_1D4ParseError.html#ac947a4c3d229d7ec505ad921a77702ea", null ], - [ "d_line", "classlibdap_1_1D4ParseError.html#af7d939b4b8154518f870d5424ff55f62", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1D4ParseError__inherit__graph.map b/html/classlibdap_1_1D4ParseError__inherit__graph.map deleted file mode 100644 index 01c9beccf..000000000 --- a/html/classlibdap_1_1D4ParseError__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1D4ParseError__inherit__graph.md5 b/html/classlibdap_1_1D4ParseError__inherit__graph.md5 deleted file mode 100644 index f38e1cc20..000000000 --- a/html/classlibdap_1_1D4ParseError__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -8ef286b23d88f37a537ff094837927c5 \ No newline at end of file diff --git a/html/classlibdap_1_1D4ParseError__inherit__graph.png b/html/classlibdap_1_1D4ParseError__inherit__graph.png deleted file mode 100644 index 18220f161384f2852c4bbd97691c6c0398f5fb2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21060 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 v8 - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::D4ParserSax2 Member List
    -
    -
    - -

    This is the complete list of members for libdap::D4ParserSax2, including all inherited members.

    - - - - - - - - - - - - - - - - - - -
    D4ParserSax2() (defined in libdap::D4ParserSax2)libdap::D4ParserSax2inline
    D4ParserSax2Test (defined in libdap::D4ParserSax2)libdap::D4ParserSax2friend
    dmr_end_document(void *parser)libdap::D4ParserSax2static
    dmr_end_element(void *parser, const xmlChar *localname, const xmlChar *prefix, const xmlChar *URI) (defined in libdap::D4ParserSax2)libdap::D4ParserSax2static
    dmr_error(void *parser, const char *msg,...) (defined in libdap::D4ParserSax2)libdap::D4ParserSax2static
    dmr_fatal_error(void *parser, const char *msg,...)libdap::D4ParserSax2static
    dmr_get_cdata(void *parser, const xmlChar *value, int len)libdap::D4ParserSax2static
    dmr_get_characters(void *parser, const xmlChar *ch, int len)libdap::D4ParserSax2static
    dmr_get_entity(void *parser, const xmlChar *name)libdap::D4ParserSax2static
    dmr_ignoreable_whitespace(void *parser, const xmlChar *ch, int len)libdap::D4ParserSax2static
    dmr_start_document(void *parser)libdap::D4ParserSax2static
    dmr_start_element(void *parser, const xmlChar *localname, const xmlChar *prefix, const xmlChar *URI, int nb_namespaces, const xmlChar **namespaces, int nb_attributes, int nb_defaulted, const xmlChar **attributes)libdap::D4ParserSax2static
    get_strict() constlibdap::D4ParserSax2inline
    intern(istream &f, DMR *dest_dmr, bool debug=false) (defined in libdap::D4ParserSax2)libdap::D4ParserSax2
    intern(const string &document, DMR *dest_dmr, bool debug=false) (defined in libdap::D4ParserSax2)libdap::D4ParserSax2
    intern(const char *buffer, int size, DMR *dest_dmr, bool debug=false)libdap::D4ParserSax2
    set_strict(bool s)libdap::D4ParserSax2inline
    -
    - - - - diff --git a/html/classlibdap_1_1D4ParserSax2.html b/html/classlibdap_1_1D4ParserSax2.html deleted file mode 100644 index 000342f9d..000000000 --- a/html/classlibdap_1_1D4ParserSax2.html +++ /dev/null @@ -1,606 +0,0 @@ - - - - - - - -libdap: libdap::D4ParserSax2 Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::D4ParserSax2 Class Reference
    -
    -
    - -

    #include <D4ParserSax2.h>

    - - - - - - - - - - - - - - -

    -Public Member Functions

    bool get_strict () const
     Get the setting of the 'strict' mode. More...
     
    -void intern (istream &f, DMR *dest_dmr, bool debug=false)
     
    -void intern (const string &document, DMR *dest_dmr, bool debug=false)
     
    void intern (const char *buffer, int size, DMR *dest_dmr, bool debug=false)
     
    void set_strict (bool s)
     Set the 'strict' mode to true or false. More...
     
    - - - - - - - - - - - - - - - - - - - - - - - -

    -Static Public Member Functions

    SAX Parser Callbacks

    These methods are declared static in the class header. This gives them C linkage which allows them to be used as callbacks by the SAX parser engine.

    -
    static void dmr_start_document (void *parser)
     
    static void dmr_end_document (void *parser)
     
    static void dmr_start_element (void *parser, const xmlChar *localname, const xmlChar *prefix, const xmlChar *URI, int nb_namespaces, const xmlChar **namespaces, int nb_attributes, int nb_defaulted, const xmlChar **attributes)
     
    -static void dmr_end_element (void *parser, const xmlChar *localname, const xmlChar *prefix, const xmlChar *URI)
     
    static void dmr_get_characters (void *parser, const xmlChar *ch, int len)
     
    static void dmr_ignoreable_whitespace (void *parser, const xmlChar *ch, int len)
     
    static void dmr_get_cdata (void *parser, const xmlChar *value, int len)
     
    static xmlEntityPtr dmr_get_entity (void *parser, const xmlChar *name)
     
    static void dmr_fatal_error (void *parser, const char *msg,...)
     
    -static void dmr_error (void *parser, const char *msg,...)
     
    - - - -

    -Friends

    -class D4ParserSax2Test
     
    -

    Detailed Description

    -

    Parse the XML text which encodes the network/persistent representation of the DMR object. In the current implementation, the DMR is held by an instance of the class DDS which in turn holds variables which include attributes.

    -

    This parser for the DMR document uses the SAX interface of libxml2. Static methods are used as callbacks for the SAX parser. These static methods are public because making them private complicates compilation. They should not be called by anything other than the intern method. They do not throw exceptions because exceptions from within callbacks are not reliable or portable. To signal errors, the methods record information in the D4ParserSax2 object. Once the error handler is called, construction of an DMR object ends even though the SAX parser still calls the various callback functions. The parser treats warnings, errors and fatal_errors the same way; when any are found parsing stops. The intern method throws an Error of InternalErr exception if an error was found.

    -

    Note that this class uses the C++-supplied default definitions for the default and copy constructors as well as the destructor and assignment operator.

    -
    See also
    DMR
    - -

    Definition at line 77 of file D4ParserSax2.h.

    -

    Member Function Documentation

    - -

    ◆ dmr_end_document()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::D4ParserSax2::dmr_end_document (void * p)
    -
    -static
    -
    -

    Clean up after finishing a parse.

    Parameters
    - - -
    pThe SAX parser
    -
    -
    - -

    Definition at line 608 of file D4ParserSax2.cc.

    - -
    -
    - -

    ◆ dmr_fatal_error()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::D4ParserSax2::dmr_fatal_error (void * p,
    const char * msg,
     ... 
    )
    -
    -static
    -
    -

    Process an XML fatal error. Note that SAX provides for warnings, errors and fatal errors. This code treats them all as fatal errors since there's typically no way to tell a user about the error since there's often no user interface for this software.

    -
    Note
    This static function does not throw an exception or otherwise alter flow of control except for altering the parser state.
    -
    Parameters
    - - - -
    pThe SAX parser
    msgA printf-style format string.
    -
    -
    - -

    Definition at line 1196 of file D4ParserSax2.cc.

    - -
    -
    - -

    ◆ dmr_get_cdata()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::D4ParserSax2::dmr_get_cdata (void * p,
    const xmlChar * value,
    int len 
    )
    -
    -static
    -
    -

    Get characters in a cdata block. DAP does not use CData, but XML in an OtherXML attribute (the value of that DAP attribute) might use it. This callback also allows CData when the parser is in the 'parser_unknown' state since some future DAP element might use it.

    - -

    Definition at line 1158 of file D4ParserSax2.cc.

    - -
    -
    - -

    ◆ dmr_get_characters()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::D4ParserSax2::dmr_get_characters (void * p,
    const xmlChar * ch,
    int len 
    )
    -
    -static
    -
    -

    Process/accumulate character data. This may be called more than once for one logical clump of data. Only save character data when processing 'value' elements; throw away all other characters.

    - -

    Definition at line 1115 of file D4ParserSax2.cc.

    - -
    -
    - -

    ◆ dmr_get_entity()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    xmlEntityPtr libdap::D4ParserSax2::dmr_get_entity (void * parser,
    const xmlChar * name 
    )
    -
    -static
    -
    -

    Handle the standard XML entities.

    -
    Parameters
    - - - -
    parserThe SAX parser
    nameThe XML entity.
    -
    -
    - -

    Definition at line 1181 of file D4ParserSax2.cc.

    - -
    -
    - -

    ◆ dmr_ignoreable_whitespace()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::D4ParserSax2::dmr_ignoreable_whitespace (void * p,
    const xmlChar * ch,
    int len 
    )
    -
    -static
    -
    -

    Read whitespace that's not really important for content. This is used only for the OtherXML attribute type to preserve formating of the XML. Doing so makes the attribute value far easier to read.

    - -

    Definition at line 1139 of file D4ParserSax2.cc.

    - -
    -
    - -

    ◆ dmr_start_document()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::D4ParserSax2::dmr_start_document (void * p)
    -
    -static
    -
    -

    Initialize the SAX parser state object. This object is passed to each callback as a void pointer. The initial state is parser_start.

    -
    Parameters
    - - -
    pThe SAX parser
    -
    -
    - -

    Definition at line 590 of file D4ParserSax2.cc.

    - -
    -
    - -

    ◆ dmr_start_element()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::D4ParserSax2::dmr_start_element (void * p,
    const xmlChar * l,
    const xmlChar * prefix,
    const xmlChar * URI,
    int nb_namespaces,
    const xmlChar ** namespaces,
    int nb_attributes,
    int nb_defaulted,
    const xmlChar ** attributes 
    )
    -
    -static
    -
    -

    Callback run when libxml2 reads the start of an element

    -
    Parameters
    - - - - - - - - - - -
    pPointer to the parser object
    lLocalname of the element
    prefixNamespace prefix of the element
    URIthe Element namespace name if available
    nb_namespacesNumber of namespace definitions on that node
    namespacesPointer to the array of prefix/URI pairs namespace definitions
    nb_attributesThe number of attributes on that node
    nb_defaultedThe number of defaulted attributes. The defaulted ones are at the end of the array
    attributesPointer to the array of (localname/prefix/URI/value/end) attribute values.
    -
    -
    - -

    Definition at line 642 of file D4ParserSax2.cc.

    - -
    -
    - -

    ◆ intern()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::D4ParserSax2::intern (const char * buffer,
    int size,
    DMRdest_dmr,
    bool debug = false 
    )
    -
    -

    Parse a DMR document stored in a char *buffer.

    -
    Parameters
    - - - - -
    documentRead the DMR from this string.
    dest_dmrValue/result parameter; dumps the information to this DMR instance.
    debugIf true, ouput helpful debugging messages, False by default
    -
    -
    -
    Exceptions
    - - - -
    ErrorThrown if the XML document could not be read or parsed.
    InternalErrThrown if an internal error is found.
    -
    -
    - -

    Definition at line 1397 of file D4ParserSax2.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1D4ParserSax2.js b/html/classlibdap_1_1D4ParserSax2.js deleted file mode 100644 index a31d50928..000000000 --- a/html/classlibdap_1_1D4ParserSax2.js +++ /dev/null @@ -1,10 +0,0 @@ -var classlibdap_1_1D4ParserSax2 = -[ - [ "D4ParserSax2", "classlibdap_1_1D4ParserSax2.html#a10d8a1945835254cd96a49cb89eb07ba", null ], - [ "get_strict", "group__strict.html#ga030fddcb0529be0999faffd9c0fb7e16", null ], - [ "intern", "classlibdap_1_1D4ParserSax2.html#a836eb9e1878e02353979808b14118286", null ], - [ "intern", "classlibdap_1_1D4ParserSax2.html#a7ab5148623018195a2a913bce2312d54", null ], - [ "intern", "classlibdap_1_1D4ParserSax2.html#a0470239619369dc7f3110dd0119d1ca4", null ], - [ "set_strict", "group__strict.html#gad0fb36451a4348afb0a294f709c905f2", null ], - [ "D4ParserSax2Test", "classlibdap_1_1D4ParserSax2.html#a060b039c3ff9ed6f9d8db21bdc036cfb", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1D4RValue-members.html b/html/classlibdap_1_1D4RValue-members.html deleted file mode 100644 index bc3b29c27..000000000 --- a/html/classlibdap_1_1D4RValue-members.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::D4RValue Member List
    -
    -
    - -

    This is the complete list of members for libdap::D4RValue, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    basetype enum value (defined in libdap::D4RValue)libdap::D4RValue
    constant enum value (defined in libdap::D4RValue)libdap::D4RValue
    D4RValue() (defined in libdap::D4RValue)libdap::D4RValueinline
    D4RValue(const D4RValue &src) (defined in libdap::D4RValue)libdap::D4RValueinline
    D4RValue(BaseType *btp) (defined in libdap::D4RValue)libdap::D4RValueinline
    D4RValue(D4Function f, D4RValueList *args) (defined in libdap::D4RValue)libdap::D4RValueinline
    D4RValue(unsigned long long ui) (defined in libdap::D4RValue)libdap::D4RValue
    D4RValue(long long i) (defined in libdap::D4RValue)libdap::D4RValue
    D4RValue(double r) (defined in libdap::D4RValue)libdap::D4RValue
    D4RValue(std::string s) (defined in libdap::D4RValue)libdap::D4RValue
    D4RValue(std::vector< dods_byte > &byte_args) (defined in libdap::D4RValue)libdap::D4RValue
    D4RValue(std::vector< dods_int8 > &byte_int8) (defined in libdap::D4RValue)libdap::D4RValue
    D4RValue(std::vector< dods_uint16 > &byte_uint16) (defined in libdap::D4RValue)libdap::D4RValue
    D4RValue(std::vector< dods_int16 > &byte_int16) (defined in libdap::D4RValue)libdap::D4RValue
    D4RValue(std::vector< dods_uint32 > &byte_uint32) (defined in libdap::D4RValue)libdap::D4RValue
    D4RValue(std::vector< dods_int32 > &byte_int32) (defined in libdap::D4RValue)libdap::D4RValue
    D4RValue(std::vector< dods_uint64 > &byte_uint64) (defined in libdap::D4RValue)libdap::D4RValue
    D4RValue(std::vector< dods_int64 > &byte_int64) (defined in libdap::D4RValue)libdap::D4RValue
    D4RValue(std::vector< dods_float32 > &byte_float32) (defined in libdap::D4RValue)libdap::D4RValue
    D4RValue(std::vector< dods_float64 > &byte_float64) (defined in libdap::D4RValue)libdap::D4RValue
    D4RValueList (defined in libdap::D4RValue)libdap::D4RValuefriend
    function enum value (defined in libdap::D4RValue)libdap::D4RValue
    get_kind() constlibdap::D4RValueinline
    operator=(D4RValue &rhs) (defined in libdap::D4RValue)libdap::D4RValueinline
    unknown enum value (defined in libdap::D4RValue)libdap::D4RValue
    value(DMR &dmr)libdap::D4RValuevirtual
    value()libdap::D4RValuevirtual
    value_kind enum name (defined in libdap::D4RValue)libdap::D4RValue
    ~D4RValue() (defined in libdap::D4RValue)libdap::D4RValuevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1D4RValue.html b/html/classlibdap_1_1D4RValue.html deleted file mode 100644 index ddceb567c..000000000 --- a/html/classlibdap_1_1D4RValue.html +++ /dev/null @@ -1,278 +0,0 @@ - - - - - - - -libdap: libdap::D4RValue Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::D4RValue Class Reference
    -
    -
    - -

    #include <D4RValue.h>

    - - - - -

    -Public Types

    enum  value_kind { unknown, -basetype, -function, -constant - }
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    D4RValue (const D4RValue &src)
     
    D4RValue (BaseType *btp)
     
    D4RValue (D4Function f, D4RValueList *args)
     
    D4RValue (unsigned long long ui)
     
    D4RValue (long long i)
     
    D4RValue (double r)
     
    D4RValue (std::string s)
     
    D4RValue (std::vector< dods_byte > &byte_args)
     
    D4RValue (std::vector< dods_int8 > &byte_int8)
     
    D4RValue (std::vector< dods_uint16 > &byte_uint16)
     
    D4RValue (std::vector< dods_int16 > &byte_int16)
     
    D4RValue (std::vector< dods_uint32 > &byte_uint32)
     
    D4RValue (std::vector< dods_int32 > &byte_int32)
     
    D4RValue (std::vector< dods_uint64 > &byte_uint64)
     
    D4RValue (std::vector< dods_int64 > &byte_int64)
     
    D4RValue (std::vector< dods_float32 > &byte_float32)
     
    D4RValue (std::vector< dods_float64 > &byte_float64)
     
    value_kind get_kind () const
     What kind of thing holds the value Values in DAP4 constraints are either constants, dataset variables or function results. It might be nice to know the source of a given value in order to optimize the evaluation of certain kinds of expressions. More...
     
    -D4RValueoperator= (D4RValue &rhs)
     
    virtual BaseTypevalue (DMR &dmr)
     Get the value for a RValue object Return the BaseType * for a given RValue. For a dataset variable, read the variable's value and, for a function, evaluate that function. Since read() is called for a dataset variable each time this method is called, if the variable is part of a Sequence, the next value in the sequence will be returned. However, since this code also sets the read_p property after calling read(), if the variable does not have a new value, read() will not be called (using the read_p property, the read() method is called only when the variable has a new value to be read. More...
     
    virtual BaseTypevalue ()
     Get the value for a RValue object. More...
     
    - - - -

    -Friends

    -class D4RValueList
     
    -

    Detailed Description

    -

    Holds the RValues for the D4 function parser and for the filter expression evaluator.

    - -

    Definition at line 85 of file D4RValue.h.

    -

    Member Function Documentation

    - -

    ◆ get_kind()

    - -
    -
    - - - - - -
    - - - - - - - -
    value_kind libdap::D4RValue::get_kind () const
    -
    -inline
    -
    - -

    What kind of thing holds the value Values in DAP4 constraints are either constants, dataset variables or function results. It might be nice to know the source of a given value in order to optimize the evaluation of certain kinds of expressions.

    -
    Returns
    The 'value_kind' of this value.
    - -

    Definition at line 150 of file D4RValue.h.

    - -
    -
    - -

    ◆ value() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    BaseType * libdap::D4RValue::value (DMRdmr)
    -
    -virtual
    -
    - -

    Get the value for a RValue object Return the BaseType * for a given RValue. For a dataset variable, read the variable's value and, for a function, evaluate that function. Since read() is called for a dataset variable each time this method is called, if the variable is part of a Sequence, the next value in the sequence will be returned. However, since this code also sets the read_p property after calling read(), if the variable does not have a new value, read() will not be called (using the read_p property, the read() method is called only when the variable has a new value to be read.

    -
    Note
    Unlike the DAP2 functions, we have an easier-to-follow memory model for function values. The values (BaseType*) returned by this method will be packaged up in a RValueList and deleted when that list is deleted. Constant values and function result values will be deleted at that time; variables will not. Thus Server Functions should always allocate storage for their return values.
    -
    Todo:
    Could move the operation that wraps a constant in a BaseType to this method while providing other ways to access the value(s) (methods to determine if the rvalue is a constant and what DAP type it is, e.g.). This would provide an optimization for the filter evaluator which may access the values many times. We might also modify the server side functions so they could access constant values more efficiently.
    -
    Parameters
    - - -
    dmrThe DMR to pass to a function.
    -
    -
    -
    Returns
    A BaseType* that holds the value.
    - -

    Definition at line 270 of file D4RValue.cc.

    - -
    -
    - -

    ◆ value() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::D4RValue::value ()
    -
    -virtual
    -
    - -

    Get the value for a RValue object.

    -

    This version of value() will not work for function RValues, but has the advantage that it can be used more easily for the D4RValue objects built for, and stored in, D4Filter- Clause instances.

    -
    See also
    D4RValue::value(DMR&)
    -
    Returns
    The value wrapped in a BaseType*
    - -

    Definition at line 300 of file D4RValue.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1D4RValue.js b/html/classlibdap_1_1D4RValue.js deleted file mode 100644 index a2bc9bf23..000000000 --- a/html/classlibdap_1_1D4RValue.js +++ /dev/null @@ -1,33 +0,0 @@ -var classlibdap_1_1D4RValue = -[ - [ "value_kind", "classlibdap_1_1D4RValue.html#a0331ea420038af809ca2f4efab77d21e", [ - [ "unknown", "classlibdap_1_1D4RValue.html#a0331ea420038af809ca2f4efab77d21eae28908d33d1a3fd26b7cdd8a5da5b51f", null ], - [ "basetype", "classlibdap_1_1D4RValue.html#a0331ea420038af809ca2f4efab77d21eae12ce33f1f449cb686b99847ef889eaa", null ], - [ "function", "classlibdap_1_1D4RValue.html#a0331ea420038af809ca2f4efab77d21eaf91820a4206b80a1c7fe63350f662b98", null ], - [ "constant", "classlibdap_1_1D4RValue.html#a0331ea420038af809ca2f4efab77d21ead3817f8c948a4f374cb4decbbb3c858f", null ] - ] ], - [ "D4RValue", "classlibdap_1_1D4RValue.html#a56deb1fb134a013bfaabb49068daa940", null ], - [ "D4RValue", "classlibdap_1_1D4RValue.html#ae7518893db9efcff624e6d2e5263ddd8", null ], - [ "D4RValue", "classlibdap_1_1D4RValue.html#a8f9e0f6660c7f68439c0cfec3414cc84", null ], - [ "D4RValue", "classlibdap_1_1D4RValue.html#a8891adb3dde7ceac0c1dc71cdfe05bbd", null ], - [ "D4RValue", "classlibdap_1_1D4RValue.html#a5dd16a8ab9fff7b5f4549f00ab366f1f", null ], - [ "D4RValue", "classlibdap_1_1D4RValue.html#a5e4825631f385a3e9909d20495ad3b08", null ], - [ "D4RValue", "classlibdap_1_1D4RValue.html#a44151fe9c8332c587b87b033ea038d31", null ], - [ "D4RValue", "classlibdap_1_1D4RValue.html#a31593f70efd09830fc39e0d3272c8a70", null ], - [ "D4RValue", "classlibdap_1_1D4RValue.html#add542d284fd2b9b148a64b036fa35b6c", null ], - [ "D4RValue", "classlibdap_1_1D4RValue.html#a960d79f62502c13f6fa1d726f083036f", null ], - [ "D4RValue", "classlibdap_1_1D4RValue.html#aa091cf6d7595939f5a9934d3209ff3ed", null ], - [ "D4RValue", "classlibdap_1_1D4RValue.html#a23589615974d6304283d6755973ef9fd", null ], - [ "D4RValue", "classlibdap_1_1D4RValue.html#ad3ad3049615244d33c483d66e6ea91e2", null ], - [ "D4RValue", "classlibdap_1_1D4RValue.html#a3212e576d8d2334a5cfa4c87fdb8fe2f", null ], - [ "D4RValue", "classlibdap_1_1D4RValue.html#a969ca3efdc704809b31624fc0df7b062", null ], - [ "D4RValue", "classlibdap_1_1D4RValue.html#a45ef9377cf3fb0293de08a618bf32ef7", null ], - [ "D4RValue", "classlibdap_1_1D4RValue.html#ab581841d72de1a2ca25a57a6cb115435", null ], - [ "D4RValue", "classlibdap_1_1D4RValue.html#ab82ba0fc0f7d3dd4850397a1cd38a97e", null ], - [ "~D4RValue", "classlibdap_1_1D4RValue.html#a5de87b939219993f403b3e998f8127ef", null ], - [ "get_kind", "classlibdap_1_1D4RValue.html#a0ec4de806c9988928ba70ddf370e8b57", null ], - [ "operator=", "classlibdap_1_1D4RValue.html#a6d12e286a6094463c6279f20a211b008", null ], - [ "value", "classlibdap_1_1D4RValue.html#adf12fcbb253d9c336527ae12354ae56d", null ], - [ "value", "classlibdap_1_1D4RValue.html#a2f997dd3fef21a46b2655bb4e44f4821", null ], - [ "D4RValueList", "classlibdap_1_1D4RValue.html#a4e6436fedcbcab34a40e114625c0ae2f", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1D4RValueList-members.html b/html/classlibdap_1_1D4RValueList-members.html deleted file mode 100644 index 976fd328d..000000000 --- a/html/classlibdap_1_1D4RValueList-members.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::D4RValueList Member List
    -
    -
    - -

    This is the complete list of members for libdap::D4RValueList, including all inherited members.

    - - - - - - - - - - - - -
    add_rvalue(D4RValue *rv) (defined in libdap::D4RValueList)libdap::D4RValueListinline
    begin() (defined in libdap::D4RValueList)libdap::D4RValueListinline
    D4RValueList() (defined in libdap::D4RValueList)libdap::D4RValueListinline
    D4RValueList(const D4RValueList &src) (defined in libdap::D4RValueList)libdap::D4RValueListinline
    D4RValueList(D4RValue *rv) (defined in libdap::D4RValueList)libdap::D4RValueListinline
    end() (defined in libdap::D4RValueList)libdap::D4RValueListinline
    get_rvalue(unsigned int i) (defined in libdap::D4RValueList)libdap::D4RValueListinline
    iter typedef (defined in libdap::D4RValueList)libdap::D4RValueList
    operator=(const D4RValueList &rhs) (defined in libdap::D4RValueList)libdap::D4RValueListinline
    size() const (defined in libdap::D4RValueList)libdap::D4RValueListinline
    ~D4RValueList() (defined in libdap::D4RValueList)libdap::D4RValueListvirtual
    -
    - - - - diff --git a/html/classlibdap_1_1D4RValueList.html b/html/classlibdap_1_1D4RValueList.html deleted file mode 100644 index 8b5bbca0b..000000000 --- a/html/classlibdap_1_1D4RValueList.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - -libdap: libdap::D4RValueList Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::D4RValueList Class Reference
    -
    -
    - - - - -

    -Public Types

    -typedef std::vector< D4RValue * >::iterator iter
     
    - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    -void add_rvalue (D4RValue *rv)
     
    -iter begin ()
     
    D4RValueList (const D4RValueList &src)
     
    D4RValueList (D4RValue *rv)
     
    -iter end ()
     
    -D4RValueget_rvalue (unsigned int i)
     
    -D4RValueListoperator= (const D4RValueList &rhs)
     
    -unsigned int size () const
     
    -

    Detailed Description

    -
    -

    Definition at line 44 of file D4RValue.h.

    -

    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1D4RValueList.js b/html/classlibdap_1_1D4RValueList.js deleted file mode 100644 index 2bfebf112..000000000 --- a/html/classlibdap_1_1D4RValueList.js +++ /dev/null @@ -1,14 +0,0 @@ -var classlibdap_1_1D4RValueList = -[ - [ "iter", "classlibdap_1_1D4RValueList.html#ae12525ce91bc3b68fdb5b94901b3b88e", null ], - [ "D4RValueList", "classlibdap_1_1D4RValueList.html#af81d90d0db1b832c70a5966e214dde34", null ], - [ "D4RValueList", "classlibdap_1_1D4RValueList.html#ac6408d83a4a8b9d73bfa0a0f33a72054", null ], - [ "D4RValueList", "classlibdap_1_1D4RValueList.html#ac621690d970b07bae9fde8bedc5458ac", null ], - [ "~D4RValueList", "classlibdap_1_1D4RValueList.html#ada37f187d89c37e038315b7fb69e8cac", null ], - [ "add_rvalue", "classlibdap_1_1D4RValueList.html#a21ee262b409763d0d747a0f43762ba35", null ], - [ "begin", "classlibdap_1_1D4RValueList.html#aa98356b1be0e33459253be03711133aa", null ], - [ "end", "classlibdap_1_1D4RValueList.html#a5c38d5172f010b48661f2c4952aef962", null ], - [ "get_rvalue", "classlibdap_1_1D4RValueList.html#ac2a1a7c195c3bac7887dbc6f01bb05ff", null ], - [ "operator=", "classlibdap_1_1D4RValueList.html#a414e5402bd77e23868021e43be4ff081", null ], - [ "size", "classlibdap_1_1D4RValueList.html#ac4c82d95a7ad0b0cb753660bfbf9d0c7", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1D4Sequence-members.html b/html/classlibdap_1_1D4Sequence-members.html deleted file mode 100644 index 9b5956a33..000000000 --- a/html/classlibdap_1_1D4Sequence-members.html +++ /dev/null @@ -1,196 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::D4Sequence Member List
    -
    -
    - -

    This is the complete list of members for libdap::D4Sequence, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    add_var(BaseType *bt, Part part=nil)libdap::Constructorvirtual
    add_var_nocopy(BaseType *bt, Part part=nil)libdap::Constructorvirtual
    attributes()libdap::BaseTypevirtual
    BaseType(const string &n, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const string &n, const string &d, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const BaseType &copy_from)libdap::BaseType
    btp_stack typedef (defined in libdap::BaseType)libdap::BaseType
    buf2val(void **)libdap::Constructorinlinevirtual
    check_semantics(string &msg, bool all=false)libdap::Constructorvirtual
    clauses()libdap::D4Sequence
    clear_local_data()libdap::D4Sequencevirtual
    compute_checksum(Crc32 &checksum)libdap::Constructorvirtual
    Constructor(const string &name, const Type &type, bool is_dap4=false) (defined in libdap::Constructor)libdap::Constructorprotected
    Constructor(const string &name, const string &d, const Type &type, bool is_dap4=false)libdap::Constructorprotected
    Constructor(const Constructor &copy_from) (defined in libdap::Constructor)libdap::Constructorprotected
    d4_ops(BaseType *b, int op)libdap::BaseTypevirtual
    D4Sequence(const string &n)libdap::D4Sequence
    D4Sequence(const string &n, const string &d)libdap::D4Sequence
    D4Sequence(const D4Sequence &rhs)libdap::D4Sequence
    D4SequenceTest (defined in libdap::D4Sequence)libdap::D4Sequencefriend
    d_in_selection (defined in libdap::BaseType)libdap::BaseTypeprotected
    d_is_synthesized (defined in libdap::BaseType)libdap::BaseTypeprotected
    d_length (defined in libdap::D4Sequence)libdap::D4Sequenceprotected
    d_values (defined in libdap::D4Sequence)libdap::D4Sequenceprotected
    d_vars (defined in libdap::Constructor)libdap::Constructorprotected
    dataset() constlibdap::BaseTypevirtual
    del_var(const string &name)libdap::Constructorvirtual
    del_var(Vars_iter i) (defined in libdap::Constructor)libdap::Constructorvirtual
    deserialize(UnMarshaller &, DDS *, bool)libdap::D4Sequenceinlinevirtual
    deserialize(D4StreamUnMarshaller &um, DMR &dmr)libdap::D4Sequencevirtual
    dump(ostream &strm) constlibdap::D4Sequencevirtual
    element_count(bool leaves=false)libdap::Constructorvirtual
    FQN() constlibdap::Constructorvirtual
    get_attr_table()libdap::BaseTypevirtual
    get_parent() constlibdap::BaseTypevirtual
    get_var_index(int i)libdap::Constructor
    get_vars_iter(int i)libdap::Constructor
    intern_data(ConstraintEvaluator &, DDS &)libdap::D4Sequenceinlinevirtual
    intern_data()libdap::D4Sequencevirtual
    is_constructor_type() constlibdap::BaseTypevirtual
    is_dap4() const (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    is_in_selection()libdap::BaseTypevirtual
    is_linear()libdap::Constructorvirtual
    is_simple_type() constlibdap::BaseTypevirtual
    is_vector_type() constlibdap::BaseTypevirtual
    length() constlibdap::D4Sequenceinlinevirtual
    m_duplicate(const D4Sequence &s) (defined in libdap::D4Sequence)libdap::D4Sequenceprotected
    m_duplicate(const Constructor &s) (defined in libdap::Constructor)libdap::Constructorprotected
    libdap::BaseType::m_duplicate(const BaseType &bt)libdap::BaseTypeprotected
    m_exact_match(const string &name, btp_stack *s=0) (defined in libdap::Constructor)libdap::Constructorprotected
    m_leaf_match(const string &name, btp_stack *s=0) (defined in libdap::Constructor)libdap::Constructorprotected
    make_dropped_vars_attr_table(vector< BaseType *> *dropped_vars) (defined in libdap::Constructor)libdap::Constructorstatic
    name() constlibdap::BaseTypevirtual
    operator=(const D4Sequence &rhs) (defined in libdap::D4Sequence)libdap::D4Sequence
    operator=(const Constructor &rhs) (defined in libdap::Constructor)libdap::Constructor
    operator=(const BaseType &rhs) (defined in libdap::BaseType)libdap::BaseType
    ops(BaseType *b, int op)libdap::BaseTypevirtual
    print_dap4(XMLWriter &xml, bool constrained=false)libdap::Constructorvirtual
    print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::Constructorvirtual
    print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::Constructorvirtual
    print_one_row(ostream &out, int row, string space, bool print_row_num=false) (defined in libdap::D4Sequence)libdap::D4Sequencevirtual
    print_val(ostream &out, string space="", bool print_decl_p=true)libdap::D4Sequencevirtual
    libdap::Constructor::print_val(FILE *out, string space="", bool print_decl_p=true)libdap::Constructorvirtual
    print_val_by_rows(ostream &out, string space="", bool print_decl_p=true, bool print_row_numbers=true) (defined in libdap::D4Sequence)libdap::D4Sequencevirtual
    print_xml(ostream &out, string space=" ", bool constrained=false)libdap::Constructorvirtual
    print_xml(FILE *out, string space=" ", bool constrained=false)libdap::Constructorvirtual
    print_xml_writer(XMLWriter &xml, bool constrained=false)libdap::Constructorvirtual
    ptr_duplicate()libdap::D4Sequencevirtual
    read()libdap::Constructorvirtual
    read_next_instance(bool filter)libdap::D4Sequencevirtual
    read_p()libdap::BaseTypevirtual
    read_sequence_values(bool filter)libdap::D4Sequenceprotected
    row_value(size_t row)libdap::D4Sequencevirtual
    send_p()libdap::BaseTypevirtual
    serialize(ConstraintEvaluator &, DDS &, Marshaller &, bool)libdap::D4Sequenceinlinevirtual
    serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)libdap::D4Sequencevirtual
    set_attr_table(const AttrTable &at)libdap::BaseTypevirtual
    set_attributes(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_attributes_nocopy(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_in_selection(bool state)libdap::Constructorvirtual
    set_is_dap4(const bool v) (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    set_length(int count)libdap::D4Sequenceinlinevirtual
    set_name(const string &n)libdap::BaseTypevirtual
    set_parent(BaseType *parent)libdap::BaseTypevirtual
    set_read_p(bool state)libdap::Constructorvirtual
    set_send_p(bool state)libdap::Constructorvirtual
    set_synthesized_p(bool state)libdap::BaseTypevirtual
    set_type(const Type &t)libdap::BaseTypevirtual
    set_value(D4SeqValues &values)libdap::D4Sequenceinlinevirtual
    synthesized_p()libdap::BaseTypevirtual
    toString()libdap::BaseTypevirtual
    transfer_attributes(AttrTable *at)libdap::Constructorvirtual
    transform_to_dap2(AttrTable *parent_attr_table)libdap::BaseTypevirtual
    transform_to_dap4(D4Group *root, Constructor *dest)libdap::Constructorvirtual
    type() constlibdap::BaseTypevirtual
    type_name() constlibdap::BaseTypevirtual
    val2buf(void *, bool)libdap::Constructorinlinevirtual
    value() constlibdap::D4Sequenceinlinevirtual
    value_ref()libdap::D4Sequenceinlinevirtual
    var(const string &name, bool exact_match=true, btp_stack *s=0)libdap::Constructorvirtual
    var(const string &n, btp_stack &s)libdap::Constructorvirtual
    var_begin()libdap::Constructor
    var_end()libdap::Constructor
    var_rbegin()libdap::Constructor
    var_rend()libdap::Constructor
    var_value(size_t row, const string &name)libdap::D4Sequencevirtual
    var_value(size_t row, size_t i)libdap::D4Sequencevirtual
    Vars_citer typedef (defined in libdap::Constructor)libdap::Constructor
    Vars_iter typedef (defined in libdap::Constructor)libdap::Constructor
    Vars_riter typedef (defined in libdap::Constructor)libdap::Constructor
    width(bool constrained=false) constlibdap::Constructorvirtual
    ~BaseType() (defined in libdap::BaseType)libdap::BaseTypevirtual
    ~Constructor() (defined in libdap::Constructor)libdap::Constructorvirtual
    ~D4Sequence() (defined in libdap::D4Sequence)libdap::D4Sequencevirtual
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1D4Sequence.html b/html/classlibdap_1_1D4Sequence.html deleted file mode 100644 index 77866f4bd..000000000 --- a/html/classlibdap_1_1D4Sequence.html +++ /dev/null @@ -1,3688 +0,0 @@ - - - - - - - -libdap: libdap::D4Sequence Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    - -

    Holds a sequence. - More...

    - -

    #include <D4Sequence.h>

    -
    -Inheritance diagram for libdap::D4Sequence:
    -
    -
    Inheritance graph
    - - - - - -
    - - - - - - - - - - -

    -Public Types

    -typedef stack< BaseType * > btp_stack
     
    -typedef std::vector< BaseType * >::const_iterator Vars_citer
     
    -typedef std::vector< BaseType * >::iterator Vars_iter
     
    -typedef std::vector< BaseType * >::reverse_iterator Vars_riter
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual void add_var (BaseType *bt, Part part=nil)
     
    virtual void add_var_nocopy (BaseType *bt, Part part=nil)
     
    virtual unsigned int buf2val (void **)
     Reads the class data. More...
     
    virtual bool check_semantics (string &msg, bool all=false)
     Compare an object's current state with the semantics of its type. More...
     
    D4FilterClauseListclauses ()
     Access the filter clauses for this D4Sequence. More...
     
    virtual void clear_local_data ()
     
    virtual void compute_checksum (Crc32 &checksum)
     include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum. More...
     
    virtual bool d4_ops (BaseType *b, int op)
     Evaluator a relop for DAP4. More...
     
     D4Sequence (const string &n)
     The Sequence constructor. More...
     
     D4Sequence (const string &n, const string &d)
     The Sequence server-side constructor. More...
     
     D4Sequence (const D4Sequence &rhs)
     The Sequence copy constructor. More...
     
    virtual string dataset () const
     Returns the name of the dataset used to create this instance. More...
     
    virtual void del_var (const string &name)
     
    -virtual void del_var (Vars_iter i)
     
    virtual bool deserialize (UnMarshaller &, DDS *, bool)
     Receive data from the net. More...
     
    virtual void deserialize (D4StreamUnMarshaller &um, DMR &dmr)
     
    virtual void dump (ostream &strm) const
     dumps information about this object More...
     
    virtual int element_count (bool leaves=false)
     Count the members of constructor types. More...
     
    virtual std::string FQN () const
     
    virtual AttrTableget_attr_table ()
     
    virtual BaseTypeget_parent () const
     
    BaseTypeget_var_index (int i)
     
    Vars_iter get_vars_iter (int i)
     
    virtual void intern_data (ConstraintEvaluator &, DDS &)
     
    virtual void intern_data ()
     Read data into this variable. More...
     
    virtual bool is_constructor_type () const
     Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable. More...
     
    -virtual bool is_dap4 () const
     
    virtual bool is_in_selection ()
     Is this variable part of the current selection? More...
     
    virtual bool is_linear ()
     Check to see whether this variable can be printed simply. More...
     
    virtual bool is_simple_type () const
     Returns true if the instance is a numeric, string or URL type variable. More...
     
    virtual bool is_vector_type () const
     Returns true if the instance is a vector (i.e., array) type variable. More...
     
    virtual int length () const
     The number of elements in a Sequence object. More...
     
    virtual string name () const
     Returns the name of the class instance. More...
     
    -D4Sequenceoperator= (const D4Sequence &rhs)
     
    virtual bool ops (BaseType *b, int op)
     Evaluate relational operators. More...
     
    void print_dap4 (XMLWriter &xml, bool constrained=false)
     
    virtual void print_decl (ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_decl (FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    -virtual void print_one_row (ostream &out, int row, string space, bool print_row_num=false)
     
    virtual void print_val (FILE *out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_val (ostream &out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    -virtual void print_val_by_rows (ostream &out, string space="", bool print_decl_p=true, bool print_row_numbers=true)
     
    virtual void print_xml (ostream &out, string space=" ", bool constrained=false)
     
    virtual void print_xml (FILE *out, string space=" ", bool constrained=false)
     
    virtual void print_xml_writer (XMLWriter &xml, bool constrained=false)
     
    virtual BaseTypeptr_duplicate ()
     
    virtual bool read ()
     simple implementation of read that iterates through vars and calls read on them More...
     
    virtual bool read_next_instance (bool filter)
     Read the next instance of the sequence While the rest of the variables' read() methods are assumed to return the entire variable in one call (modulo enhancements of the library to support streaming large variables), this class assumes that the underlying data store is returning data from a table of unknown size. Thus, D4Sequence::read() is assumed to return one instance (or element or row) of the sequence per call and return true when the EOF (end of the sequence) is reached. More...
     
    virtual bool read_p ()
     Has this variable been read? More...
     
    virtual D4SeqRowrow_value (size_t row)
     Get a whole row from the sequence. More...
     
    virtual bool send_p ()
     Should this variable be sent? More...
     
    virtual bool serialize (ConstraintEvaluator &, DDS &, Marshaller &, bool)
     Move data to the net, then remove them from the object. More...
     
    virtual void serialize (D4StreamMarshaller &m, DMR &dmr, bool filter=false)
     Serialize the values of a D4Sequence This method assumes that the underlying data store cannot/does not return a count of items separately from the items themselves. For a data store that does, this method should probably be specialized to take advantage of that. Because the DAP4 spec requires that a sequence be prefixed by a count, this method reads the entire sequence into memory before sending it (and counts the number of elements in the the process). For a data store where the count is available a priori, this could be rewritten so that the count is sent and then each instance/element of the sequence sent in succession. More...
     
    virtual void set_attr_table (const AttrTable &at)
     
    virtual void set_in_selection (bool state)
     Set the in_selection property. More...
     
    -virtual void set_is_dap4 (const bool v)
     
    virtual void set_length (int count)
     
    virtual void set_name (const string &n)
     Sets the name of the class instance. More...
     
    virtual void set_parent (BaseType *parent)
     
    virtual void set_read_p (bool state)
     Sets the value of the read_p property. More...
     
    virtual void set_send_p (bool state)
     
    virtual void set_synthesized_p (bool state)
     
    virtual void set_type (const Type &t)
     Sets the type of the class instance. More...
     
    virtual void set_value (D4SeqValues &values)
     Set the internal value. The 'values' of a D4Sequence is a vector of vectors of BaseType* objects. Using this method does not perform a deep copy; the BaseType*s are copied so the caller should not free them. Note that this does set d_length but the read_p flag for the BaseTypes should all be set to keep the serializer from trying to read each of them. More...
     
    virtual bool synthesized_p ()
     
    virtual string toString ()
     
    virtual void transfer_attributes (AttrTable *at)
     
    virtual std::vector< BaseType * > * transform_to_dap2 (AttrTable *parent_attr_table)
     DAP4 to DAP2 transform. More...
     
    virtual void transform_to_dap4 (D4Group *root, Constructor *dest)
     DAP2 to DAP4 transform. More...
     
    virtual Type type () const
     Returns the type of the class instance. More...
     
    virtual string type_name () const
     Returns the type of the class instance as a string. More...
     
    virtual unsigned int val2buf (void *, bool)
     Loads class data. More...
     
    virtual D4SeqValues value () const
     Get the values for this D4Sequence This method returns a reference to the values held by the instance. You should make sure that the instance really holds values before calling it! Do not free the BaseType*s contained in the vector of vectors. More...
     
    virtual D4SeqValuesvalue_ref ()
     Get the sequence values by reference This method returns a reference to the D4Sequence's values, eliminating the copy of all the pointers. For large sequences, that could be a substantial number of values (even though they are 'just' pointers). More...
     
    virtual BaseTypevar (const string &name, bool exact_match=true, btp_stack *s=0)
     btp_stack no longer needed; use back pointers (BaseType::get_parent()) More...
     
    virtual BaseTypevar (const string &n, btp_stack &s)
     
    Vars_iter var_begin ()
     
    Vars_iter var_end ()
     
    Vars_riter var_rbegin ()
     
    Vars_riter var_rend ()
     
    virtual BaseTypevar_value (size_t row, const string &name)
     Get the BaseType pointer to the named variable of a given row. More...
     
    virtual BaseTypevar_value (size_t row, size_t i)
     Get the BaseType pointer to the $i^{th}$ variable of row. More...
     
    virtual unsigned int width (bool constrained=false) const
     
    virtual D4Attributesattributes ()
     
    -virtual void set_attributes (D4Attributes *)
     
    -virtual void set_attributes_nocopy (D4Attributes *)
     
    - - - -

    -Static Public Member Functions

    -static AttrTablemake_dropped_vars_attr_table (vector< BaseType *> *dropped_vars)
     
    - - - - - - - - - - - - - - - -

    -Protected Member Functions

    -void m_duplicate (const Constructor &s)
     
    void m_duplicate (const BaseType &bt)
     Perform a deep copy. More...
     
    -void m_duplicate (const D4Sequence &s)
     
    -BaseTypem_exact_match (const string &name, btp_stack *s=0)
     
    -BaseTypem_leaf_match (const string &name, btp_stack *s=0)
     
    void read_sequence_values (bool filter)
     Read a Sequence's value into memory. More...
     
    - - - - - - - - - - - -

    -Protected Attributes

    -bool d_in_selection
     
    -bool d_is_synthesized
     
    -int64_t d_length
     
    -D4SeqValues d_values
     
    -std::vector< BaseType * > d_vars
     
    - - - -

    -Friends

    -class D4SequenceTest
     
    -

    Detailed Description

    -

    Holds a sequence.

    -

    This is the interface for the class D4Sequence. A sequence contains a single set of variables, all at the same lexical level just like a Structure. Like a Structure, a D4Sequence may contain other compound types, including other D4Sequences. Unlike a Structure, a D4Sequence defines a pattern that is repeated N times for a sequence of N elements. It is useful to think of a D4Sequence as representing a table of values (like a relational database), with each row of the table corresponding to a D4Sequence instance.'' (This usage can be confusing, sinceinstance'' also refers to a particular item of class D4Sequence.) For example:

    -
    -D4Sequence {
    -  String name;
    -  Int32 age;
    -} person;
    -

    This represents a Sequence of ``person'' records, each instance of which contains a name and an age:

    -
    -Fred       34
    -Ralph      23
    -Andrea     29
    -...
    -

    A D4Sequence can be arbitrarily long, which is to say that its length is not part of its declaration. A D4Sequence can contain other D4Sequences:

    -
    -D4Sequence {
    -  String name;
    -  Int32 age;
    -  D4Sequence {
    -    String friend;
    -  } friend_list;
    -} person;
    -
    -Fred       34     Norman
    -                  Andrea
    -                  Ralph
    -                  Lisa
    -Ralph      23     Norman
    -                  Andrea
    -                  Lisa
    -                  Marth
    -                  Throckmorton
    -                  Helga
    -                  Millicent
    -Andrea     29     Ralph
    -                  Natasha
    -                  Norman
    -...        ..     ...
    -

    Internally, the D4Sequence is represented by a vector of vectors. The members of the outer vector are the members of the D4Sequence. This includes the nested D4Sequences, as in the above example.

    -

    Because the length of a D4Sequence is indeterminate, there are changes to the behavior of the functions to read this class of data. The read() function for D4Sequence must be written so that successive calls return values for successive rows of the D4Sequence.

    -

    Similar to a C structure, you refer to members of D4Sequence elements with a .'' notation. For example, if the D4Sequence has a member D4Sequence calledTom'' and Tom has a member Float32 called shoe_size'', you can refer to Tom's shoe size as Tom.shoe_size''.

    - -

    Definition at line 133 of file D4Sequence.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ D4Sequence() [1/3]

    - -
    -
    - - - - - - - - -
    libdap::D4Sequence::D4Sequence (const string & n)
    -
    - -

    The Sequence constructor.

    -

    The Sequence constructor requires only the name of the variable to be created. The name may be omitted, which will create a nameless variable. This may be adequate for some applications.

    -
    Parameters
    - - -
    nA string containing the name of the variable to be created.
    -
    -
    - -

    Definition at line 136 of file D4Sequence.cc.

    - -
    -
    - -

    ◆ D4Sequence() [2/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    libdap::D4Sequence::D4Sequence (const string & n,
    const string & d 
    )
    -
    - -

    The Sequence server-side constructor.

    -

    The Sequence server-side constructor requires the name of the variable to be created and the dataset name from which this variable is being created.

    -
    Parameters
    - - - -
    nA string containing the name of the variable to be created.
    dA string containing the name of the dataset from which this variable is being created.
    -
    -
    - -

    Definition at line 151 of file D4Sequence.cc.

    - -
    -
    - -

    ◆ D4Sequence() [3/3]

    - -
    -
    - - - - - - - - -
    libdap::D4Sequence::D4Sequence (const D4Sequencerhs)
    -
    - -

    The Sequence copy constructor.

    - -

    Definition at line 157 of file D4Sequence.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ add_var()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::add_var (BaseTypebt,
    Part part = nil 
    )
    -
    -virtualinherited
    -
    -

    Adds an element to a Constructor.

    -
    Parameters
    - - - -
    btA pointer to the variable to add to this Constructor.
    partNot used by this class, defaults to nil
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 407 of file Constructor.cc.

    - -
    -
    - -

    ◆ add_var_nocopy()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::add_var_nocopy (BaseTypebt,
    Part part = nil 
    )
    -
    -virtualinherited
    -
    -

    Adds an element to a Constructor.

    -
    Parameters
    - - - -
    btA pointer to thee variable to add to this Constructor.
    partNot used by this class, defaults to nil
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 432 of file Constructor.cc.

    - -
    -
    - -

    ◆ attributes()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4Attributes * libdap::BaseType::attributes ()
    -
    -virtualinherited
    -
    -

    DAP4 Attribute methods

    - -

    Definition at line 599 of file BaseType.cc.

    - -
    -
    - -

    ◆ buf2val()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual unsigned int libdap::Constructor::buf2val (void ** val)
    -
    -inlinevirtualinherited
    -
    - -

    Reads the class data.

    -

    Reads the class data into the memory referenced by val. The caller should either allocate enough storage to val to hold the class data or set *val to null. If *val is NULL, memory will be allocated by this function with new(). If the memory is allocated this way, the caller is responsible for deallocating that memory. Array and values for simple types are stored as C would store an array.

    -
    Deprecated:
    Use value() in the leaf classes.
    -
    Parameters
    - - -
    valA pointer to a pointer to the memory into which the class data will be copied. If the value pointed to is NULL, memory will be allocated to hold the data, and the pointer value modified accordingly. The calling program is responsible for deallocating the memory references by this pointer.
    -
    -
    -
    Returns
    The size (in bytes) of the information copied to val.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 118 of file Constructor.h.

    - -
    -
    - -

    ◆ check_semantics()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::Constructor::check_semantics (string & msg,
    bool all = false 
    )
    -
    -virtualinherited
    -
    - -

    Compare an object's current state with the semantics of its type.

    -

    This function checks the class instance for internal consistency. This is important to check for complex constructor classes. For BaseType, an object is semantically correct if it has both a non-null name and type.

    -

    For example, an Int32 instance would return FALSE if it had no name or no type defined. A Grid instance might return FALSE for more complex reasons, such as having Map arrays of the wrong size or shape.

    -

    This function is used by the DDS class, and will rarely, if ever, be explicitly called by a DODS application program. A variable must pass this test before it is sent, but there may be many other stages in a retrieve operation where it would fail.

    -
    Returns
    Returns FALSE when the current state violates some aspect of the type semantics, TRUE otherwise.
    -
    Parameters
    - - - -
    msgA returned string, containing a message indicating the source of any problem.
    allFor complex constructor types (Grid, Sequence, Structure), this flag indicates whether to check the semantics of the member variables, too.
    -
    -
    -
    See also
    DDS::check_semantics
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 792 of file Constructor.cc.

    - -
    -
    - -

    ◆ clauses()

    - -
    -
    - - - - - - - -
    D4FilterClauseList & libdap::D4Sequence::clauses ()
    -
    - -

    Access the filter clauses for this D4Sequence.

    -

    When a filter is supplied with a DAP4 constraint, the expression is parsed and one or more D4FilterClause objects are built and stored in a D4FilterClauseList bound to the D4Sequence to be filtered.

    -
    Returns
    A reference to this D4Sequence's filter clause list
    -
    See also
    D4FilterClauseList
    - -

    Definition at line 417 of file D4Sequence.cc.

    - -
    -
    - -

    ◆ clear_local_data()

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::D4Sequence::clear_local_data ()
    -
    -virtual
    -
    -

    Remove any read or set data in the private data of the variable, setting read_p() to false. Used to clear any dynamically allocated storage that holds (potentially large) data. For the simple types, this no-op version is all that's needed. Vector and some other classes define a special version and have serialize() implementations that call it to free data as soon as possible after sending it.

    -
    Note
    Added 7/5/15 jhrg
    -
    -Any specialization of this should make sure to reset the read_p property.
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 186 of file D4Sequence.cc.

    - -
    -
    - -

    ◆ compute_checksum()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::compute_checksum (Crc32checksum)
    -
    -virtualinherited
    -
    - -

    include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum.

    -
    Parameters
    - - -
    checksumA Crc32 instance that holds the current checksum.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 550 of file Constructor.cc.

    - -
    -
    - -

    ◆ d4_ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::d4_ops (BaseTypeb,
    int op 
    )
    -
    -virtualinherited
    -
    - -

    Evaluator a relop for DAP4.

    -

    This method is used by the filter expression evaluation code in DAP4. Each of the 'data type' classes that support relops must overload this method. In an expression of the form arg1 op arg2, this object is arg1, the parameter 'b' is arg2 and op is the relational operator.

    -
    Note
    I used the same relop codes for DAP4 as in the DAP2 parser/scanner which makes for some coupling between them, but cuts way down on the duplication of the evaluator logic, which is somewhat involved.
    -
    Parameters
    - - - -
    bThe second argument in the relational expression
    opThe infix relational operator
    -
    -
    -
    Returns
    True if the expression is true, False otherwise.
    - -

    Reimplemented in libdap::Str, libdap::Int32, libdap::Float32, libdap::Byte, libdap::Float64, libdap::Int16, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 1282 of file BaseType.cc.

    - -
    -
    - -

    ◆ dataset()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::dataset () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the dataset used to create this instance.

    -

    A dataset from which the data is to be read. The meaning of this string will vary among different types of data sources. It may be the name of a data file or an identifier used to read data from a relational database.

    - -

    Definition at line 358 of file BaseType.cc.

    - -
    -
    - -

    ◆ del_var()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::del_var (const string & n)
    -
    -virtualinherited
    -
    -

    Remove an element from a Constructor.

    -
    Parameters
    - - -
    nname of the variable to remove
    -
    -
    - -

    Definition at line 448 of file Constructor.cc.

    - -
    -
    - -

    ◆ deserialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    virtual bool libdap::D4Sequence::deserialize (UnMarshallerum,
    DDSdds,
    bool reuse 
    )
    -
    -inlinevirtual
    -
    - -

    Receive data from the net.

    -

    Receives data from the network connection identified by the source parameter. The data is put into the class data buffer according to the input dds.

    -

    This function is only used on the client side of the DODS client/server connection.

    -
    Parameters
    - - - - -
    umAn UnMarshaller that knows how to deserialize data types
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure. This would have been received from the server in an earlier transmission.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect.
    -
    -
    -
    Returns
    Always returns TRUE.
    -
    Exceptions
    - - -
    Errorwhen a problem reading from the UnMarshaller is found.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 209 of file D4Sequence.h.

    - -
    -
    - -

    ◆ deserialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::D4Sequence::deserialize (D4StreamUnMarshallerum,
    DMRdmr 
    )
    -
    -virtual
    -
    -

    The DAP4 deserialization method.

    Parameters
    - - - -
    um
    dmr
    -
    -
    -
    Exceptions
    - - -
    Erroror InternalErr
    -
    -
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 391 of file D4Sequence.cc.

    - -
    -
    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::D4Sequence::dump (ostream & strm) const
    -
    -virtual
    -
    - -

    dumps information about this object

    -

    Displays the pointer value of this instance and information about this instance.

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the information to
    -
    -
    -
    Returns
    void
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 571 of file D4Sequence.cc.

    - -
    -
    - -

    ◆ element_count()

    - -
    -
    - - - - - -
    - - - - - - - - -
    int libdap::Constructor::element_count (bool leaves = false)
    -
    -virtualinherited
    -
    - -

    Count the members of constructor types.

    -

    Return a count of the total number of variables in this variable. This is used to count the number of variables held by a constructor variable - for simple type and vector variables it always returns 1.

    -

    For compound data types, there are two ways to count members. You can count the members, or you can count the simple members and add that to the count of the compound members. For example, if a Structure contains an Int32 and another Structure that itself contains two Int32 members, the element count of the top-level structure could be two (one Int32 and one Structure) or three (one Int32 by itself and two Int32's in the subsidiary Structure). Use the leaves parameter to control which kind of counting you desire.

    -
    Returns
    Returns 1 for simple types. For compound members, the count depends on the leaves argument.
    -
    Parameters
    - - -
    leavesThis parameter is only relevant if the object contains other compound data types. If FALSE, the function counts only the data variables mentioned in the object's declaration. If TRUE, it counts the simple members, and adds that to the sum of the counts for the compound members. This parameter has no effect for simple type variables.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 194 of file Constructor.cc.

    - -
    -
    - -

    ◆ FQN()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::Constructor::FQN () const
    -
    -virtualinherited
    -
    -

    Return the FQN for this variable. This will include the D4 Group component of the name.

    -
    Returns
    The FQN in a string
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Group.

    - -

    Definition at line 181 of file Constructor.cc.

    - -
    -
    - -

    ◆ get_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - -
    AttrTable & libdap::BaseType::get_attr_table ()
    -
    -virtualinherited
    -
    -

    Get this variable's AttrTable. It's generally a bad idea to return a reference to a contained object, but in this case it seems that building an interface inside BaseType is overkill.

    -

    Use the AttrTable methods to manipulate the table.

    - -

    Definition at line 582 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_parent()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::BaseType::get_parent () const
    -
    -virtualinherited
    -
    -

    Return a pointer to the Constructor or Vector which holds (contains) this variable. If this variable is at the top level, this method returns null.

    -
    Returns
    A BaseType pointer to the variable's parent.
    - -

    Definition at line 751 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_var_index()

    - -
    -
    - - - - - -
    - - - - - - - - -
    BaseType * libdap::Constructor::get_var_index (int i)
    -
    -inherited
    -
    -

    Return the BaseType pointer for the ith variable.

    Parameters
    - - -
    iThis index
    -
    -
    -
    Returns
    The corresponding BaseType*.
    - -

    Definition at line 397 of file Constructor.cc.

    - -
    -
    - -

    ◆ get_vars_iter()

    - -
    -
    - - - - - -
    - - - - - - - - -
    Constructor::Vars_iter libdap::Constructor::get_vars_iter (int i)
    -
    -inherited
    -
    -

    Return the iterator for the ith variable.

    Parameters
    - - -
    ithe index
    -
    -
    -
    Returns
    The corresponding Vars_iter
    - -

    Definition at line 388 of file Constructor.cc.

    - -
    -
    - -

    ◆ intern_data() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    virtual void libdap::D4Sequence::intern_data (ConstraintEvaluatoreval,
    DDSdds 
    )
    -
    -inlinevirtual
    -
    -

    Similar to using serialize() and deserialize() together in one object. Data are read as for serialize and those values are stored in the objects as deserialize() does but does not write and then read data to/from a stream.

    -

    This method is defined by the various data type classes. It calls the read() abstract method. Unlike serialize(), this method does not clear the memory use to hold the data values, so the caller should make sure to delete the DDS or the variable as soon as possible.

    -
    Parameters
    - - - -
    evalUse this as the constraint expression evaluator.
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    -
    -
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 203 of file D4Sequence.h.

    - -
    -
    - -

    ◆ intern_data() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::D4Sequence::intern_data ()
    -
    -virtual
    -
    - -

    Read data into this variable.

    -
    Parameters
    - - - -
    evalEvaluator for a constraint expression
    dmrDMR for the whole dataset
    -
    -
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 260 of file D4Sequence.cc.

    - -
    -
    - -

    ◆ is_constructor_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_constructor_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable.

    -
    Returns
    True if the instance is a Structure, Sequence or Grid, False otherwise.
    - -

    Definition at line 412 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_in_selection ()
    -
    -virtualinherited
    -
    - -

    Is this variable part of the current selection?

    -

    Does this variable appear in either the selection part or as a function argument in the current constrain expression. If this property is set (true) then implementations of the read() method should read this variable.

    -
    Note
    This method does not check, nor does it know about the semantics of, string arguments passed to functions. Those functions might include variable names in strings; they are responsible for reading those variables. See the grid (func_grid_select()) for an example.
    -
    See also
    BaseType::read()
    - -

    Definition at line 703 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_linear()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::Constructor::is_linear ()
    -
    -virtualinherited
    -
    - -

    Check to see whether this variable can be printed simply.

    -

    True if the instance can be flattened and printed as a single table of values. For Arrays and Grids this is always false. For Structures and Sequences the conditions are more complex. The implementation provided by this class always returns false. Other classes should override this implementation.

    -
    Todo:
    Change the name to is_flattenable or something like that. 05/16/03 jhrg
    -
    Returns
    True if the instance can be printed as a single table of values, false otherwise.
    - -

    Reimplemented in libdap::Sequence, and libdap::Structure.

    - -

    Definition at line 823 of file Constructor.cc.

    - -
    -
    - -

    ◆ is_simple_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_simple_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a numeric, string or URL type variable.

    -
    Returns
    True if the instance is a scalar numeric, String or URL variable, False otherwise. Arrays (even of simple types) return False.
    -
    See also
    is_vector_type()
    - -

    Definition at line 393 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_vector_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_vector_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a vector (i.e., array) type variable.

    -
    Returns
    True if the instance is an Array, False otherwise.
    - -

    Definition at line 402 of file BaseType.cc.

    - -
    -
    - -

    ◆ length()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual int libdap::D4Sequence::length () const
    -
    -inlinevirtual
    -
    - -

    The number of elements in a Sequence object.

    -
    Note
    This is not the number of items in a row, but the number of rows in the complete sequence object.
    -
    Returns
    0 if the number of elements is unknown, else return the number of elements.
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 193 of file D4Sequence.h.

    - -
    -
    - -

    ◆ m_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::m_duplicate (const BaseTypebt)
    -
    -protectedinherited
    -
    - -

    Perform a deep copy.

    -

    Perform a deep copy. Copies the values of bt into *this. Pointers are dereferenced and their values are copied into a newly allocated instance.

    -
    Parameters
    - - -
    btThe source object.
    -
    -
    - -

    Definition at line 86 of file BaseType.cc.

    - -
    -
    - -

    ◆ name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::name () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the class instance.

    - -

    Definition at line 320 of file BaseType.cc.

    - -
    -
    - -

    ◆ ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::ops (BaseTypeb,
    int op 
    )
    -
    -virtualinherited
    -
    - -

    Evaluate relational operators.

    -

    This method contains the relational operators used by the constraint expression evaluator in the DDS class. Each class that wants to be able to evaluate relational expressions must overload this function. The implementation in BaseType throws an InternalErr exception. The DAP library classes Byte, ..., Url provide specializations of this method. It is not meaningful for classes such as Array because relational expressions using Array are not supported.

    -

    The op argument refers to a table generated by bison from the constraint expression parser. Use statements like the following to correctly interpret its value:

    -
    switch (op) {
    -    case EQUAL: return i1 == i2;
    -    case NOT_EQUAL: return i1 != i2;
    -    case GREATER: return i1 > i2;
    -    case GREATER_EQL: return i1 >= i2;
    -    case LESS: return i1 < i2;
    -    case LESS_EQL: return i1 <= i2;
    -    case REGEXP: throw Error("Regular expressions are not supported for integer values");
    -    default: throw Error("Unknown operator");
    -}
    -

    This function is used by the constraint expression evaluator.

    -
    Parameters
    - - - -
    bCompare the value of this instance with b.
    opAn integer index indicating which relational operator is implied. Choose one from the following: EQUAL, NOT_EQUAL, GREATER, GREATER_EQL, LESS, LESS_EQL, and REGEXP.
    -
    -
    -
    Returns
    The boolean value of the comparison.
    -
    See also
    BaseType::d4_ops(BaseType *, int)
    - -

    Reimplemented in libdap::D4Enum, libdap::Str, libdap::Int32, libdap::Float32, libdap::Byte, libdap::Float64, libdap::UInt32, libdap::D4Opaque, libdap::Int16, libdap::UInt16, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 1256 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_dap4 (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the DAP4 XML representation for this variable. This method is used to build the DAP4 DMR response object.

    -
    Parameters
    - - - -
    xmlAn XMLWriter that will do the serialization
    constrainedTrue if the response should show the variables subject to the current constraint expression.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Group.

    - -

    Definition at line 768 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_decl() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_decl (ostream & out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 626 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_decl() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_decl (FILE * out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 617 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_val() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_val (FILE * out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtualinherited
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output stream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Sequence, and libdap::Grid.

    - -

    Definition at line 650 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_val() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::D4Sequence::print_val (ostream & out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtual
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output ostream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 556 of file D4Sequence.cc.

    - -
    -
    - -

    ◆ print_xml() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_xml (ostream & out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -
    Deprecated:
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 695 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_xml() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_xml (FILE * out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -
    Deprecated:
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 684 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_xml_writer()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_xml_writer (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 718 of file Constructor.cc.

    - -
    -
    - -

    ◆ ptr_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::D4Sequence::ptr_duplicate ()
    -
    -virtual
    -
    -

    Clone this instance. Allocate a new instance and copy *this into it. This method must perform a deep copy.

    @note This method should \e not copy data values, but must copy all
    -other fields in the object.
    -
    Returns
    A newly allocated copy of this.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 163 of file D4Sequence.cc.

    - -
    -
    - -

    ◆ read()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::Constructor::read ()
    -
    -virtualinherited
    -
    - -

    simple implementation of read that iterates through vars and calls read on them

    -
    Returns
    returns false to signify all has been read
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 476 of file Constructor.cc.

    - -
    -
    - -

    ◆ read_next_instance()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool libdap::D4Sequence::read_next_instance (bool filter)
    -
    -virtual
    -
    - -

    Read the next instance of the sequence While the rest of the variables' read() methods are assumed to return the entire variable in one call (modulo enhancements of the library to support streaming large variables), this class assumes that the underlying data store is returning data from a table of unknown size. Thus, D4Sequence::read() is assumed to return one instance (or element or row) of the sequence per call and return true when the EOF (end of the sequence) is reached.

    -

    For each call to read, the values for each of the sequence's members are expected to have been loaded into the member's BaseType variables; this method will copy them out and store then in the D4Sequence's internal storage. This method always returns the next instance that satisfies the CE when 'filter' is true.

    -
    Note
    This method is called by D4Sequence::serialize() and it will evaluate the CE for each set of values read.
    -
    Parameters
    - - - - -
    dmr
    eval
    filter
    -
    -
    -
    Returns
    False when read() indicates that the EOF was found, true otherwise.
    - -

    Definition at line 231 of file D4Sequence.cc.

    - -
    -
    - -

    ◆ read_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read_p ()
    -
    -virtualinherited
    -
    - -

    Has this variable been read?

    -

    Returns true if the value(s) for this variable have been read from the data source, otherwise returns false. This method is used to determine when values need to be read using the read() method. When read_p() returns true, this library assumes that buf2val() (and other methods such as get_vec()) can be used to access the value(s) of a variable.

    -
    Returns
    True if the variable's value(s) have been read, false otherwise.
    - -

    Definition at line 480 of file BaseType.cc.

    - -
    -
    - -

    ◆ read_sequence_values()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::D4Sequence::read_sequence_values (bool filter)
    -
    -protected
    -
    - -

    Read a Sequence's value into memory.

    -

    This is a helper method for serialize() that enables the code to recursively read values for child sequences. This method assumes that the D4Sequence::read() method does not call itself recursively for child sequences, as is the case with DAP2 sequences. If you have a data store that requires the outer-most sequence to read values for its child sequences, you will need to specialize this method. See also the methods associated with the sequence values because unlike DAP2 sequences, in DAP4 the sequences hold all their values in memory before writing them out.

    -
    Note
    We may revisit the idea that values must be held in memory before being written. That is a consequence of using a length prefix instead of a series of sentinel values.
    -
    Parameters
    - - -
    filterTrue if the/a file expression bound to this sequence should be evaluated.
    -
    -
    -
    See also
    set_value()
    - -

    Definition at line 306 of file D4Sequence.cc.

    - -
    -
    - -

    ◆ row_value()

    - -
    -
    - - - - - -
    - - - - - - - - -
    D4SeqRow * libdap::D4Sequence::row_value (size_t row)
    -
    -virtual
    -
    - -

    Get a whole row from the sequence.

    -
    Parameters
    - - -
    rowGet row number row from the sequence.
    -
    -
    -
    Returns
    A BaseTypeRow object (vector<BaseType *>). Null if there's no such row number as row.
    - -

    Definition at line 449 of file D4Sequence.cc.

    - -
    -
    - -

    ◆ send_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::send_p ()
    -
    -virtualinherited
    -
    - -

    Should this variable be sent?

    -

    Returns the state of the send_p property. If true, this variable should be sent to the client, if false, it should not. If no constraint expression (CE) has been evaluated, this property is true for all variables in a data source (i.e., for all the variables listed in a DDS). If a CE has been evaluated, this property is true only for those variables listed in the projection part of the CE.

    -
    Returns
    True if the variable should be sent to the client, false otherwise.
    - -

    Definition at line 554 of file BaseType.cc.

    - -
    -
    - -

    ◆ serialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    virtual bool libdap::D4Sequence::serialize (ConstraintEvaluatoreval,
    DDSdds,
    Marshallerm,
    bool ce_eval 
    )
    -
    -inlinevirtual
    -
    - -

    Move data to the net, then remove them from the object.

    -

    Sends the data from the indicated (local) dataset through the connection identified by the Marshaller parameter. If the data is not already incorporated into the DDS object, read the data from the dataset. Once the data are sent (written to the Marshaller), they are deleted from the object and the object state is reset so that they will be read again if the read() method is called.

    -

    This function is only used on the server side of the client/server connection, and is generally only called from the ResponseBuilder functions. It has no BaseType implementation; each datatype child class supplies its own implementation.

    @param eval Use this as the constraint expression evaluator.
    -
    Parameters
    - - - - -
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    mA marshaller used to serialize data types
    ce_evalA boolean value indicating whether to evaluate the DODS constraint expression that may accompany this dataset. The constraint expression is stored in the dds.
    -
    -
    -
    Returns
    This method always returns true. Older versions used the return value to signal success or failure.
    -
    Note
    We changed the default behavior of this method so that it calls BaseType::clear_local_data() once the values are sent. This, combined with the behavior that read() is called by this method just before data are sent, means that data for any given variable remain in memory for the shortest time possible. Furthermore, since variables are serialized one at a time, no more than one variable's data will be in memory at any given time when using the default behavior. Some code - code that uses intern_data() or server functions - might alter this default behavior. Only Array (i.e. Vector), Sequence, D4Sequence and D4Opaque types actually hold data in dynamically allocated memory, so sonly those types have the new/changed behavior. This change was made on 7/5/15.
    -
    Exceptions
    - - - -
    InternalErr.
    Error.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 206 of file D4Sequence.h.

    - -
    -
    - -

    ◆ serialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::D4Sequence::serialize (D4StreamMarshallerm,
    DMRdmr,
    bool filter = false 
    )
    -
    -virtual
    -
    - -

    Serialize the values of a D4Sequence This method assumes that the underlying data store cannot/does not return a count of items separately from the items themselves. For a data store that does, this method should probably be specialized to take advantage of that. Because the DAP4 spec requires that a sequence be prefixed by a count, this method reads the entire sequence into memory before sending it (and counts the number of elements in the the process). For a data store where the count is available a priori, this could be rewritten so that the count is sent and then each instance/element of the sequence sent in succession.

    -

    If this method is specialized, once the data are loaded into the D4SeqValues instance, make sure to set d_length and make sure to set_read_p for each BaseType in D4SeqValues.

    -
    Parameters
    - - - - - -
    mStream data sink
    dmrDMR object for the evaluator
    evalCE Evaluator object
    filterTrue if the CE should be evaluated, false otherwise.
    -
    -
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 369 of file D4Sequence.cc.

    - -
    -
    - -

    ◆ set_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_attr_table (const AttrTableat)
    -
    -virtualinherited
    -
    -

    Set this variable's attribute table.

    Parameters
    - - -
    atSource of the attributes.
    -
    -
    - -

    Definition at line 590 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::set_in_selection (bool state)
    -
    -virtualinherited
    -
    - -

    Set the in_selection property.

    -

    Set the in_selection property for this variable and all of its children.

    -
    Parameters
    - - -
    stateSet the property value to state.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 834 of file Constructor.cc.

    - -
    -
    - -

    ◆ set_length()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::D4Sequence::set_length (int count)
    -
    -inlinevirtual
    -
    -

    Set the length of the sequence.

    Parameters
    - - -
    count
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 199 of file D4Sequence.h.

    - -
    -
    - -

    ◆ set_name()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_name (const string & n)
    -
    -virtualinherited
    -
    - -

    Sets the name of the class instance.

    - -

    Reimplemented in libdap::Vector.

    - -

    Definition at line 344 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_parent()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_parent (BaseTypeparent)
    -
    -virtualinherited
    -
    -

    Set the parent property for this variable.

    -
    Note
    Added ability to set parent to null. 10/19/12 jhrg
    -
    Parameters
    - - -
    parentPointer to the Constructor of Vector parent variable or null if the variable has no parent (if it is at the top-level of a DAP2/3 DDS).
    -
    -
    -
    Exceptions
    - - -
    InternalErrthrown if called with anything other than a Constructor, Vector or Null.
    -
    -
    - -

    Definition at line 733 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_read_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::set_read_p (bool state)
    -
    -virtualinherited
    -
    - -

    Sets the value of the read_p property.

    -

    Sets the value of the read_p property. This indicates that the value(s) of this variable has/have been read. An implementation of the read() method should use this to set the read_p property to true.

    -
    Note
    If the is_synthesized property is true, this method will not alter the is_read property. If you need that behavior, specialize the method in your subclasses if the various types.
    -
    -For most of the types the default implementation of this method is fine. However, if you're building a server which must handle data represented using nested sequences, then you may need to provide a specialization of Sequence::set_read_p(). By default Sequence::set_read_p() recursively sets the read_p property for all child variables to state. For servers where one Sequence reads an outer set of values and another reads an inner set, this is cumbersome. In such a case, it is easier to specialize Sequence::set_read_p() so that it does not recursively set the read_p property for the inner Sequence. Be sure to see the documentation for the read() method!
    -
    Todo:
    Look at making synthesized variables easier to implement and at making them more integrated into the overall CE evaluation process. Maybe the code that computes the synthesized var's value should be in the that variable's read() method? This might provide a way to get rid of the awkward 'projection functions' by replacing them with real children of BaseType. It would also provide a way to clean up the way the synthesized_p prop intrudes on the read_p prop.
    -
    See also
    BaseType::read()
    -
    Parameters
    - - -
    stateSet the read_p property to this state.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Group.

    - -

    Definition at line 218 of file Constructor.cc.

    - -
    -
    - -

    ◆ set_send_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::set_send_p (bool state)
    -
    -virtualinherited
    -
    -

    Sets the value of the send_p flag. This function is meant to be called from within the constraint evaluator of other code which determines that this variable should be returned to the client. Data are ready to be sent when both the d_is_send and d_is_read flags are set to TRUE.

    -
    Parameters
    - - -
    stateThe logical state to set the send_p flag.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Group.

    - -

    Definition at line 208 of file Constructor.cc.

    - -
    -
    - -

    ◆ set_synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_synthesized_p (bool state)
    -
    -virtualinherited
    -
    -

    Set the synthesized flag. Before setting this flag be sure to set the read_p() state. Once this flag is set you cannot alter the state of the read_p flag!

    -
    See also
    synthesized_p()
    - -

    Definition at line 463 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_type()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_type (const Typet)
    -
    -virtualinherited
    -
    - -

    Sets the type of the class instance.

    - -

    Definition at line 372 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_value()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::D4Sequence::set_value (D4SeqValuesvalues)
    -
    -inlinevirtual
    -
    - -

    Set the internal value. The 'values' of a D4Sequence is a vector of vectors of BaseType* objects. Using this method does not perform a deep copy; the BaseType*s are copied so the caller should not free them. Note that this does set d_length but the read_p flag for the BaseTypes should all be set to keep the serializer from trying to read each of them.

    -
    Parameters
    - - -
    values
    -
    -
    - -

    Definition at line 271 of file D4Sequence.h.

    - -
    -
    - -

    ◆ synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::synthesized_p ()
    -
    -virtualinherited
    -
    -

    Returns true if the variable is a synthesized variable. A synthesized variable is one that is added to the dataset by the server (usually with a `projection function'.

    - -

    Definition at line 452 of file BaseType.cc.

    - -
    -
    - -

    ◆ toString()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::toString ()
    -
    -virtualinherited
    -
    -

    Write out the object's internal fields in a string. To be used for debugging when regular inspection w/ddd or gdb isn't enough.

    -
    Returns
    A string which shows the object's internal stuff.
    - -

    Reimplemented in libdap::Sequence.

    - -

    Definition at line 184 of file BaseType.cc.

    - -
    -
    - -

    ◆ transfer_attributes()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::transfer_attributes (AttrTableat_container)
    -
    -virtualinherited
    -
    -

    Transfer attributes from a DAS object into this variable. Because of the rough history of the DAS object and the way that various server code built the DAS, this is necessarily a heuristic process. The intent is that this method will be overridden by handlers that need to look for certain patterns in the DAS (e.g., hdf4's odd variable_dim_n; where n = 0, 1, 2, ...) attribute containers.

    -

    There should be a one-to-one mapping between variables and attribute containers. However, in some cases one variable has attributes spread across several top level containers and in some cases one container is used by several variables

    -
    Note
    This method is technically unnecessary because a server (or client) can easily add attributes directly using the DDS::get_attr_table or BaseType::get_attr_table methods and then poke values in using any of the methods AttrTable provides. This method exists to ease the transition to DDS objects which contain attribute information for the existing servers (Since they all make DAS objects separately from the DDS). They could be modified to use the same AttrTable methods but operate on the AttrTable instances in a DDS/BaseType instead of those in a DAS.
    -
    Parameters
    - - -
    at_containerTransfer attributes from this container.
    -
    -
    -
    Returns
    void
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 844 of file Constructor.cc.

    - -
    -
    - -

    ◆ transform_to_dap2()

    - -
    -
    - - - - - -
    - - - - - - - - -
    std::vector< BaseType * > * libdap::BaseType::transform_to_dap2 (AttrTableparent_attr_table)
    -
    -virtualinherited
    -
    - -

    DAP4 to DAP2 transform.

    -

    For the current BaseType, return a DAP2 'copy' of the variable.

    -
    Note
    For most DAP4 types, in this implementation of DAP2 the corresponding DAP4 type is the same. These types have a different representations in DAP2 and DAP4: Sequences (which are D4Sequences in the DAP4 implementation),
      -
    • Grids (which are semantically subsumed by coverages in DAP4)
    • -
    • Arrays (which use shared dimensions in DAP4)
    • -
    -
    -

    Additionally DAP4 adds the following types:

      -
    • UInt8, Int8, and Char which map to Byte in DAP2.
    • -
    • Int64, Unit64 which have no natural representation in DAP2.
    • -
    • Opaque Possible Byte stuff[] plus metadata?
    • -
    • Enum's can be represented as Int32.
    • -
    • Groups, with the exception of the root group "disappear" into the names of their member variables. Specifically the Group name is add as a prefix followed by a "/" separator to the names of all of the Group's member groups variables.
    • -
    -
    Parameters
    - - -
    TheAttrTable pointer parent_attr_table is used by Groups, which disappear from the DAP2 representation. Their children are returned in the the BAseType vector their attributes are added to parent_attr_table;
    -
    -
    -
    Returns
    A pointer to a vector of BaseType pointers (right?). In most cases this vector will contain a single pointer but DAP4 types 'disappear' such as Group will return all of their member variables in the vector. DAP4 types with no representation in DAP2 (ex: UInt64) the will return a NULL pointer and so this must be tested!
    - -

    Reimplemented in libdap::Array, libdap::D4Enum, libdap::D4Group, libdap::D4Opaque, libdap::Byte, libdap::Structure, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 259 of file BaseType.cc.

    - -
    -
    - -

    ◆ transform_to_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::transform_to_dap4 (D4Grouproot,
    Constructorcontainer 
    )
    -
    -virtualinherited
    -
    - -

    DAP2 to DAP4 transform.

    -

    For the current BaseType, return a DAP4 'copy' of the variable.

    -
    Note
    For most DAP2 types, in this implementation of DAP4 the corresponding DAP4 type is the same. The different types are Sequences (which are D4Sequences in the DAP4 implementation), Grids (which are coverages) and Arrays (which use shared dimensions).
    -
    Parameters
    - - - -
    rootThe root group that should hold this new variable. Add Group-level stuff here (e.g., D4Dimensions).
    containerAdd the new variable to this container.
    -
    -
    -
    Returns
    A pointer to the transformed variable
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Sequence, libdap::Grid, and libdap::Structure.

    - -

    Definition at line 141 of file Constructor.cc.

    - -
    -
    - -

    ◆ type()

    - -
    -
    - - - - - -
    - - - - - - - -
    Type libdap::BaseType::type () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance.

    - -

    Definition at line 365 of file BaseType.cc.

    - -
    -
    - -

    ◆ type_name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::type_name () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance as a string.

    - -

    Definition at line 379 of file BaseType.cc.

    - -
    -
    - -

    ◆ val2buf()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    virtual unsigned int libdap::Constructor::val2buf (void * val,
    bool reuse 
    )
    -
    -inlinevirtualinherited
    -
    - -

    Loads class data.

    -

    Store the value pointed to by val in the object's internal buffer. This function does not perform any checks, so users must be sure that the thing pointed to can actually be stored in the object's buffer.

    -

    Only simple objects (Int, Float, Byte, and so on) and arrays of these simple objects may be stored using this function. To put data into more complex constructor types, use the functions provided by that class.

    -
    Deprecated:
    Use set_value() in the leaf classes.
    -
    Parameters
    - - - -
    valA pointer to the data to be inserted into the class data buffer.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect. This is currently used only in the Vector class.
    -
    -
    -
    Returns
    The size (in bytes) of the information copied from val.
    -
    See also
    Grid
    -
    -Vector::val2buf
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 115 of file Constructor.h.

    - -
    -
    - -

    ◆ value()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual D4SeqValues libdap::D4Sequence::value () const
    -
    -inlinevirtual
    -
    - -

    Get the values for this D4Sequence This method returns a reference to the values held by the instance. You should make sure that the instance really holds values before calling it! Do not free the BaseType*s contained in the vector of vectors.

    -
    Returns
    A reference tp the vector of vector of BaseType*
    - -

    Definition at line 281 of file D4Sequence.h.

    - -
    -
    - -

    ◆ value_ref()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual D4SeqValues& libdap::D4Sequence::value_ref ()
    -
    -inlinevirtual
    -
    - -

    Get the sequence values by reference This method returns a reference to the D4Sequence's values, eliminating the copy of all the pointers. For large sequences, that could be a substantial number of values (even though they are 'just' pointers).

    -
    Returns
    A reference to the vector of vector of BaseType*
    - -

    Definition at line 291 of file D4Sequence.h.

    - -
    -
    - -

    ◆ var() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::Constructor::var (const string & name,
    bool exact_match = true,
    btp_stack * s = 0 
    )
    -
    -virtualinherited
    -
    - -

    btp_stack no longer needed; use back pointers (BaseType::get_parent())

    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 267 of file Constructor.cc.

    - -
    -
    - -

    ◆ var() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::Constructor::var (const string & n,
    btp_stack & s 
    )
    -
    -virtualinherited
    -
    -
    Deprecated:
    -
    Deprecated:
    See comment in BaseType
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 279 of file Constructor.cc.

    - -
    -
    - -

    ◆ var_begin()

    - -
    -
    - - - - - -
    - - - - - - - -
    Constructor::Vars_iter libdap::Constructor::var_begin ()
    -
    -inherited
    -
    -

    Returns an iterator referencing the first structure element.

    - -

    Definition at line 356 of file Constructor.cc.

    - -
    -
    - -

    ◆ var_end()

    - -
    -
    - - - - - -
    - - - - - - - -
    Constructor::Vars_iter libdap::Constructor::var_end ()
    -
    -inherited
    -
    -

    Returns an iterator referencing the end of the list of structure elements. Does not reference the last structure element.

    - -

    Definition at line 364 of file Constructor.cc.

    - -
    -
    - -

    ◆ var_rbegin()

    - -
    -
    - - - - - -
    - - - - - - - -
    Constructor::Vars_riter libdap::Constructor::var_rbegin ()
    -
    -inherited
    -
    -

    Return a reverse iterator that references the last element.

    - -

    Definition at line 371 of file Constructor.cc.

    - -
    -
    - -

    ◆ var_rend()

    - -
    -
    - - - - - -
    - - - - - - - -
    Constructor::Vars_riter libdap::Constructor::var_rend ()
    -
    -inherited
    -
    -

    Return a reverse iterator that references a point 'before' the first element.

    - -

    Definition at line 379 of file Constructor.cc.

    - -
    -
    - -

    ◆ var_value() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::D4Sequence::var_value (size_t row_num,
    const string & name 
    )
    -
    -virtual
    -
    - -

    Get the BaseType pointer to the named variable of a given row.

    -
    Parameters
    - - - -
    rowRead from row in the sequence.
    nameReturn name from row.
    -
    -
    -
    Returns
    A BaseType which holds the variable and its value.
    -
    See also
    number_of_rows
    - -

    Definition at line 466 of file D4Sequence.cc.

    - -
    -
    - -

    ◆ var_value() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::D4Sequence::var_value (size_t row_num,
    size_t i 
    )
    -
    -virtual
    -
    - -

    Get the BaseType pointer to the $i^{th}$ variable of row.

    -
    Parameters
    - - - -
    rowRead from row in the sequence.
    iReturn the $i^{th}$ variable from row.
    -
    -
    -
    Returns
    A BaseType which holds the variable and its value.
    -
    See also
    number_of_rows
    - -

    Definition at line 481 of file D4Sequence.cc.

    - -
    -
    - -

    ◆ width()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::Constructor::width (bool constrained = false) const
    -
    -virtualinherited
    -
    -

    This version of width simply returns the same thing as width() for simple types and Arrays. For Structure it returns the total size if constrained is false, or the size of the elements in the current projection if true.

    -
    Parameters
    - - -
    constrainedIf true, return the size after applying a constraint.
    -
    -
    -
    Returns
    The number of bytes used by the variable.
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 249 of file Constructor.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1D4Sequence.js b/html/classlibdap_1_1D4Sequence.js deleted file mode 100644 index dbc8179f9..000000000 --- a/html/classlibdap_1_1D4Sequence.js +++ /dev/null @@ -1,106 +0,0 @@ -var classlibdap_1_1D4Sequence = -[ - [ "btp_stack", "classlibdap_1_1D4Sequence.html#ae9c6e71855b90a0e552713011c9ab81f", null ], - [ "Vars_citer", "classlibdap_1_1D4Sequence.html#a5a585c58a099833c4ca26561963e0f83", null ], - [ "Vars_iter", "classlibdap_1_1D4Sequence.html#a2b73df890f61ebb628359c8fd12839b0", null ], - [ "Vars_riter", "classlibdap_1_1D4Sequence.html#a6122400e3f40d457751fb0372a650d03", null ], - [ "D4Sequence", "classlibdap_1_1D4Sequence.html#a2aaf91e5a87163c7cc9f345c93cd15c7", null ], - [ "D4Sequence", "classlibdap_1_1D4Sequence.html#ae702ae63e21cc1751466ca0358ef2ddb", null ], - [ "D4Sequence", "classlibdap_1_1D4Sequence.html#aa1c1e3db85c05113ec8f894f147e427a", null ], - [ "~D4Sequence", "classlibdap_1_1D4Sequence.html#af5d3ae3e41cad5369cc81d7fced29131", null ], - [ "add_var", "classlibdap_1_1D4Sequence.html#a2585c69c45b9ebec9c63993248eb5b4b", null ], - [ "add_var_nocopy", "classlibdap_1_1D4Sequence.html#abdb52463a46e1b10040f245d4ed7642b", null ], - [ "attributes", "classlibdap_1_1D4Sequence.html#a97452f06d2188eb838399a709246b5e9", null ], - [ "buf2val", "classlibdap_1_1D4Sequence.html#ac4dc7e8099322b5b403a7d0ae9079006", null ], - [ "check_semantics", "classlibdap_1_1D4Sequence.html#afe010638fd2ca9aab00dd1c21a9e4825", null ], - [ "clauses", "classlibdap_1_1D4Sequence.html#a5dd9d6d34a348bae0dcbc0f69f41bcea", null ], - [ "clear_local_data", "classlibdap_1_1D4Sequence.html#afb387a094931d25177c61fd0fff9c833", null ], - [ "compute_checksum", "classlibdap_1_1D4Sequence.html#a287ab9a4deb81a8ced6d8432be647925", null ], - [ "d4_ops", "classlibdap_1_1D4Sequence.html#a512a356f31ed6c4c1a368da0b054408a", null ], - [ "dataset", "classlibdap_1_1D4Sequence.html#a47521ce321a17e6ce217870cb6a1a7aa", null ], - [ "del_var", "classlibdap_1_1D4Sequence.html#af38d3785c4a7cd0063cbb9fc5943333c", null ], - [ "del_var", "classlibdap_1_1D4Sequence.html#a69291878fc48217902fb0dcf1e2e1aff", null ], - [ "deserialize", "classlibdap_1_1D4Sequence.html#aa0bee29380a5dd0de2b87f13ea7787d7", null ], - [ "deserialize", "classlibdap_1_1D4Sequence.html#a86cf5e86a736777e4211fd8e82f4bb2a", null ], - [ "dump", "classlibdap_1_1D4Sequence.html#acbe77409b7341fd19c03d6bb6e827819", null ], - [ "element_count", "classlibdap_1_1D4Sequence.html#a1c2eecff00fa7e3af175c711d00fb86e", null ], - [ "FQN", "classlibdap_1_1D4Sequence.html#afa6c06dab830b4e089641b44fea8293c", null ], - [ "get_attr_table", "classlibdap_1_1D4Sequence.html#a1fcd9537c67e3bf88964b2656ff5bac1", null ], - [ "get_parent", "classlibdap_1_1D4Sequence.html#a3459cdaa239c33ce111ef360d8dc3017", null ], - [ "get_var_index", "classlibdap_1_1D4Sequence.html#ac2b4b28ed9d6f435129aa599ab809799", null ], - [ "get_vars_iter", "classlibdap_1_1D4Sequence.html#a1e6d8224e04d75e3d2a21263957cd42f", null ], - [ "intern_data", "classlibdap_1_1D4Sequence.html#af9e0a54e85a84702353dacef30ead588", null ], - [ "intern_data", "classlibdap_1_1D4Sequence.html#a714bcce811fd596d88cd81c104e928c1", null ], - [ "is_constructor_type", "classlibdap_1_1D4Sequence.html#a8b8490e0047c6da52945699a132008ea", null ], - [ "is_dap4", "classlibdap_1_1D4Sequence.html#a7f6835cb5e5589ab5dad3fb4813d3bea", null ], - [ "is_in_selection", "classlibdap_1_1D4Sequence.html#ae302ab2ec26e9fc5b575bf5d3d09aa5c", null ], - [ "is_linear", "classlibdap_1_1D4Sequence.html#af26f89e9c0732a9c32bd5e15d716a7d7", null ], - [ "is_simple_type", "classlibdap_1_1D4Sequence.html#aae57e5b270b3a015d40c8db10b9b5549", null ], - [ "is_vector_type", "classlibdap_1_1D4Sequence.html#a7107c76dbcab71015141142383b6d022", null ], - [ "length", "classlibdap_1_1D4Sequence.html#afd54c5799e2d87fde4f1a28cdd5ff95d", null ], - [ "m_duplicate", "classlibdap_1_1D4Sequence.html#a88b282d06686fc88a74c91e289ef31d7", null ], - [ "m_duplicate", "classlibdap_1_1D4Sequence.html#a0c55b826c8c5dfe7a454dc670e859a41", null ], - [ "m_duplicate", "classlibdap_1_1D4Sequence.html#a7d90852ff161b3eafacfe9c0f6280df4", null ], - [ "m_exact_match", "classlibdap_1_1D4Sequence.html#aa5cd6124619d35e81bcfd426f1e569d3", null ], - [ "m_leaf_match", "classlibdap_1_1D4Sequence.html#a8fe3863a609488f4d5125abea96b82ed", null ], - [ "name", "classlibdap_1_1D4Sequence.html#a24c5d67823b3cff7f4245a993072a142", null ], - [ "operator=", "classlibdap_1_1D4Sequence.html#aca271b6631f208471c93c84c322a6882", null ], - [ "ops", "classlibdap_1_1D4Sequence.html#a8a0000be2a244e3e07abda3020af8800", null ], - [ "print_dap4", "classlibdap_1_1D4Sequence.html#a0f130e129b06773a9f3c94e3b492bb5c", null ], - [ "print_decl", "classlibdap_1_1D4Sequence.html#ab7fb094be8da2a9f80f6d3b85e452934", null ], - [ "print_decl", "classlibdap_1_1D4Sequence.html#a6c2c4d7cbe1d6239c037272ec865f80b", null ], - [ "print_one_row", "classlibdap_1_1D4Sequence.html#a35d4423b080247ff0fa9fc1cffad9c93", null ], - [ "print_val", "classlibdap_1_1D4Sequence.html#aa7f9cce8ca18461af332aab61123bf23", null ], - [ "print_val", "classlibdap_1_1D4Sequence.html#a12be119aa3e3ef128a213c3c3ed162d2", null ], - [ "print_val_by_rows", "classlibdap_1_1D4Sequence.html#a60b0c3db11f1e26d0bc5dcb9c7087858", null ], - [ "print_xml", "classlibdap_1_1D4Sequence.html#a32de0413045173aa8803f540a6cea39b", null ], - [ "print_xml", "classlibdap_1_1D4Sequence.html#a7bbe6beabd94f576140e132e7a1017ff", null ], - [ "print_xml_writer", "classlibdap_1_1D4Sequence.html#ab775a5e7e63757ac961b43800a95635f", null ], - [ "ptr_duplicate", "classlibdap_1_1D4Sequence.html#a784f34f6c6c058546d03341a59a4d228", null ], - [ "read", "classlibdap_1_1D4Sequence.html#ad0af40e2565972fa44985d173370c264", null ], - [ "read_next_instance", "classlibdap_1_1D4Sequence.html#a10c99a2d311fa1db0c4ffd09499d33e6", null ], - [ "read_p", "classlibdap_1_1D4Sequence.html#a38ff819a432217c55db2e9071928d20c", null ], - [ "read_sequence_values", "classlibdap_1_1D4Sequence.html#aba8a56e291c0aa8058c80be4f956bd74", null ], - [ "row_value", "classlibdap_1_1D4Sequence.html#a01ae73579db91a6d55ace7278ecd58a1", null ], - [ "send_p", "classlibdap_1_1D4Sequence.html#a980c0013817836aa77ef74aeec7fb192", null ], - [ "serialize", "classlibdap_1_1D4Sequence.html#a2fb5f1dea7b57cef2ffb184f4855a3f4", null ], - [ "serialize", "classlibdap_1_1D4Sequence.html#aac396e4b859d246caf2a719be66a3cac", null ], - [ "set_attr_table", "classlibdap_1_1D4Sequence.html#a572a1d76a75981abac83a4241e90c0fa", null ], - [ "set_attributes", "classlibdap_1_1D4Sequence.html#ad4dda4cf43dca838d3de183b8e01cd09", null ], - [ "set_attributes_nocopy", "classlibdap_1_1D4Sequence.html#afd0e5f87d19020f560d5c1ff8dd4d6a3", null ], - [ "set_in_selection", "classlibdap_1_1D4Sequence.html#ac30becb1ffe7d2cd4cbcd24fc216c9a3", null ], - [ "set_is_dap4", "classlibdap_1_1D4Sequence.html#abca9ddaa9a1ada8447cbe7193e8e288a", null ], - [ "set_length", "classlibdap_1_1D4Sequence.html#abb2e9c282480cee7f53f7af00618a441", null ], - [ "set_name", "classlibdap_1_1D4Sequence.html#a86504564f45a3e6748c6f1cc0ff4e9fa", null ], - [ "set_parent", "classlibdap_1_1D4Sequence.html#a5b6a39f6ce6594fa74f3fc899ac9a966", null ], - [ "set_read_p", "classlibdap_1_1D4Sequence.html#af52e60d8589eed1a18a14e9c6a57db65", null ], - [ "set_send_p", "classlibdap_1_1D4Sequence.html#aafbcf9bef6719fe60ac707e02956e09d", null ], - [ "set_synthesized_p", "classlibdap_1_1D4Sequence.html#a595cb4059cff24f801a1b6da79bd2f9e", null ], - [ "set_type", "classlibdap_1_1D4Sequence.html#af74f8d1ef57c9fcca46f620f75d175a3", null ], - [ "set_value", "classlibdap_1_1D4Sequence.html#a1f5efd16cb2c3d0a6f3ef12eb2f0fc67", null ], - [ "synthesized_p", "classlibdap_1_1D4Sequence.html#ae64e677da27249473cdba0b60cdbb90a", null ], - [ "toString", "classlibdap_1_1D4Sequence.html#a701eb3361f5b5628329ece019cd34519", null ], - [ "transfer_attributes", "classlibdap_1_1D4Sequence.html#a799d2bd8ef9505b1d493d8cd73b72746", null ], - [ "transform_to_dap2", "classlibdap_1_1D4Sequence.html#affec8a11e9cc035d4b1e8fb9a87b2072", null ], - [ "transform_to_dap4", "classlibdap_1_1D4Sequence.html#a3affad818961b2e7e984415cdd3c6e9e", null ], - [ "type", "classlibdap_1_1D4Sequence.html#af8e803b20a7a7dc5f2ef351d7fac4a56", null ], - [ "type_name", "classlibdap_1_1D4Sequence.html#a18a42c8ec35cb5b15cd651a4152f8a2c", null ], - [ "val2buf", "classlibdap_1_1D4Sequence.html#ac742b1bf93889e541128b1d123821ee6", null ], - [ "value", "classlibdap_1_1D4Sequence.html#a6d5152308495305816b986891a7d3529", null ], - [ "value_ref", "classlibdap_1_1D4Sequence.html#aee7a551768b2b80ad1189c48fd92f832", null ], - [ "var", "classlibdap_1_1D4Sequence.html#a36a7412da7b5257d7666add726fea1a6", null ], - [ "var", "classlibdap_1_1D4Sequence.html#a68f1779dc328f890062722d90fad084a", null ], - [ "var_begin", "classlibdap_1_1D4Sequence.html#adeafe3d6c82d07b456a598a7b446c2c6", null ], - [ "var_end", "classlibdap_1_1D4Sequence.html#a936b38c7c35ffb4fe17c5b8e85bdaaa2", null ], - [ "var_rbegin", "classlibdap_1_1D4Sequence.html#aa025cf546ca35250454653c1ec684d91", null ], - [ "var_rend", "classlibdap_1_1D4Sequence.html#aede7cf5889e101db1ea8f22c3a84a5d3", null ], - [ "var_value", "classlibdap_1_1D4Sequence.html#ac7d746f2ab07a0779d7c9219dfadf31c", null ], - [ "var_value", "classlibdap_1_1D4Sequence.html#ac47ec6d389020cea11e414a7fe2e65b0", null ], - [ "width", "classlibdap_1_1D4Sequence.html#a0b1e3ae7195f95c42ca98f42826a1ff5", null ], - [ "D4SequenceTest", "classlibdap_1_1D4Sequence.html#aaf919d007dcbca783e988cbf9169ac01", null ], - [ "d_in_selection", "classlibdap_1_1D4Sequence.html#a949a89714965d7afdcd1e3edc8b7f0d4", null ], - [ "d_is_synthesized", "classlibdap_1_1D4Sequence.html#a629e97e8eb7d285b54c9af8c1ec9a29a", null ], - [ "d_length", "classlibdap_1_1D4Sequence.html#a4348f6cc0a91e4145e546050f2d8b5e3", null ], - [ "d_values", "classlibdap_1_1D4Sequence.html#a69232a3fe413e73eb7160005ac267bf5", null ], - [ "d_vars", "classlibdap_1_1D4Sequence.html#a75b2aa694dc76294d6aa5f7456e49aa2", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1D4Sequence__inherit__graph.map b/html/classlibdap_1_1D4Sequence__inherit__graph.map deleted file mode 100644 index 0590cd07c..000000000 --- a/html/classlibdap_1_1D4Sequence__inherit__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/html/classlibdap_1_1D4Sequence__inherit__graph.md5 b/html/classlibdap_1_1D4Sequence__inherit__graph.md5 deleted file mode 100644 index 0f4969e04..000000000 --- a/html/classlibdap_1_1D4Sequence__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -b91ccb545c278c4214beb464e5e59745 \ No newline at end of file diff --git a/html/classlibdap_1_1D4Sequence__inherit__graph.png b/html/classlibdap_1_1D4Sequence__inherit__graph.png deleted file mode 100644 index 7e425aceb2d5ca2a59e692bd7f772296f94ab056..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92144 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%0D_+~seRlKM$MFPG6yN2M< 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

    1Tlw7;4L0}(m5&s@8EX~W(=$X9VGxo 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 diff --git a/html/classlibdap_1_1D4StreamMarshaller-members.html b/html/classlibdap_1_1D4StreamMarshaller-members.html deleted file mode 100644 index 2d68db69c..000000000 --- a/html/classlibdap_1_1D4StreamMarshaller-members.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -

    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::D4StreamMarshaller Member List
    -
    -
    - -

    This is the complete list of members for libdap::D4StreamMarshaller, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    checksum_update(const void *data, unsigned long len)libdap::D4StreamMarshallervirtual
    D4StreamMarshaller(std::ostream &out, bool write_data=true)libdap::D4StreamMarshaller
    dump(std::ostream &strm) constlibdap::D4StreamMarshallervirtual
    get_checksum()libdap::D4StreamMarshallervirtual
    put_byte(dods_byte val) (defined in libdap::D4StreamMarshaller)libdap::D4StreamMarshallervirtual
    put_checksum()libdap::D4StreamMarshallervirtual
    put_count(int64_t count)libdap::D4StreamMarshallervirtual
    put_float32(dods_float32 val) (defined in libdap::D4StreamMarshaller)libdap::D4StreamMarshallervirtual
    put_float64(dods_float64 val) (defined in libdap::D4StreamMarshaller)libdap::D4StreamMarshallervirtual
    put_int(int) (defined in libdap::D4StreamMarshaller)libdap::D4StreamMarshallerinlinevirtual
    put_int16(dods_int16 val) (defined in libdap::D4StreamMarshaller)libdap::D4StreamMarshallervirtual
    put_int32(dods_int32 val) (defined in libdap::D4StreamMarshaller)libdap::D4StreamMarshallervirtual
    put_int64(dods_int64 val) (defined in libdap::D4StreamMarshaller)libdap::D4StreamMarshallervirtual
    put_int8(dods_int8 val) (defined in libdap::D4StreamMarshaller)libdap::D4StreamMarshallervirtual
    put_opaque(char *, unsigned int) (defined in libdap::D4StreamMarshaller)libdap::D4StreamMarshallerinlinevirtual
    put_opaque_dap4(const char *val, int64_t len) (defined in libdap::D4StreamMarshaller)libdap::D4StreamMarshallervirtual
    put_str(const string &val) (defined in libdap::D4StreamMarshaller)libdap::D4StreamMarshallervirtual
    put_uint16(dods_uint16 val) (defined in libdap::D4StreamMarshaller)libdap::D4StreamMarshallervirtual
    put_uint32(dods_uint32 val) (defined in libdap::D4StreamMarshaller)libdap::D4StreamMarshallervirtual
    put_uint64(dods_uint64 val) (defined in libdap::D4StreamMarshaller)libdap::D4StreamMarshallervirtual
    put_url(const string &val) (defined in libdap::D4StreamMarshaller)libdap::D4StreamMarshallervirtual
    put_vector(char *val, int64_t num_bytes)libdap::D4StreamMarshallervirtual
    put_vector(char *val, int64_t num_elem, int elem_size) (defined in libdap::D4StreamMarshaller)libdap::D4StreamMarshallervirtual
    put_vector(char *, int, Vector &) (defined in libdap::D4StreamMarshaller)libdap::D4StreamMarshallerinlinevirtual
    put_vector(char *, int, int, Vector &) (defined in libdap::D4StreamMarshaller)libdap::D4StreamMarshallerinlinevirtual
    put_vector_end()libdap::D4StreamMarshallerinlinevirtual
    put_vector_float32(char *val, int64_t num_elem)libdap::D4StreamMarshallervirtual
    put_vector_float64(char *val, int64_t num_elem)libdap::D4StreamMarshallervirtual
    put_vector_part(char *, unsigned int, int, Type)libdap::D4StreamMarshallervirtual
    put_vector_start(int)libdap::D4StreamMarshallerinlinevirtual
    reset_checksum()libdap::D4StreamMarshallervirtual
    ~D4StreamMarshaller() (defined in libdap::D4StreamMarshaller)libdap::D4StreamMarshallervirtual
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1D4StreamMarshaller.html b/html/classlibdap_1_1D4StreamMarshaller.html deleted file mode 100644 index f88a9e24c..000000000 --- a/html/classlibdap_1_1D4StreamMarshaller.html +++ /dev/null @@ -1,715 +0,0 @@ - - - - - - - -libdap: libdap::D4StreamMarshaller Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::D4StreamMarshaller Class Reference
    -
    -
    - -

    Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4's receiver-makes-right scheme. This code adds checksums to the stream and uses the xdr library to encode real values if the underlying representation is not IEEE 754. It also supports computing the checksum only. - More...

    - -

    #include <D4StreamMarshaller.h>

    -
    -Inheritance diagram for libdap::D4StreamMarshaller:
    -
    -
    Inheritance graph
    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual void checksum_update (const void *data, unsigned long len)
     
     D4StreamMarshaller (std::ostream &out, bool write_data=true)
     
    virtual void dump (std::ostream &strm) const
     dump the contents of this object to the specified ostream More...
     
    virtual string get_checksum ()
     
    -virtual void put_byte (dods_byte val)
     
    virtual void put_checksum ()
     Write the checksum Write the checksum for the data sent since the last call to reset_checksum() to the I/O stream associated with this marshaller. Use this to send the checksum, not get_checksum(). More...
     
    virtual void put_count (int64_t count)
     
    -virtual void put_float32 (dods_float32 val)
     
    -virtual void put_float64 (dods_float64 val)
     
    -virtual void put_int (int)
     
    -virtual void put_int16 (dods_int16 val)
     
    -virtual void put_int32 (dods_int32 val)
     
    -virtual void put_int64 (dods_int64 val)
     
    -virtual void put_int8 (dods_int8 val)
     
    -virtual void put_opaque (char *, unsigned int)
     
    -virtual void put_opaque_dap4 (const char *val, int64_t len)
     
    -virtual void put_str (const string &val)
     
    -virtual void put_uint16 (dods_uint16 val)
     
    -virtual void put_uint32 (dods_uint32 val)
     
    -virtual void put_uint64 (dods_uint64 val)
     
    -virtual void put_url (const string &val)
     
    virtual void put_vector (char *val, int64_t num_bytes)
     Write a fixed size vector. More...
     
    -virtual void put_vector (char *val, int64_t num_elem, int elem_size)
     
    -virtual void put_vector (char *, int, Vector &)
     
    -virtual void put_vector (char *, int, int, Vector &)
     
    virtual void put_vector_end ()
     
    virtual void put_vector_float32 (char *val, int64_t num_elem)
     Write a fixed size vector. More...
     
    virtual void put_vector_float64 (char *val, int64_t num_elem)
     Write a fixed size vector of float64s. More...
     
    virtual void put_vector_part (char *, unsigned int, int, Type)
     
    virtual void put_vector_start (int)
     
    virtual void reset_checksum ()
     
    -

    Detailed Description

    -

    Marshaller that knows how to marshal/serialize dap data objects to a C++ iostream using DAP4's receiver-makes-right scheme. This code adds checksums to the stream and uses the xdr library to encode real values if the underlying representation is not IEEE 754. It also supports computing the checksum only.

    -
    Note
    This class uses the Marshaller interface; it could be rewritten to use far fewer methods since all of the put_*() methods take different types.
    - -

    Definition at line 71 of file D4StreamMarshaller.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ D4StreamMarshaller()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    libdap::D4StreamMarshaller::D4StreamMarshaller (std::ostream & out,
    bool write_data = true 
    )
    -
    -

    Build an instance of D4StreamMarshaller. Bind the C++ stream out to this instance. If the write_data parameter is true, write the data in addition to computing and sending the checksum.

    -
    Parameters
    - - - -
    outWrite to this stream object.
    write_dataIf true, write data values. True by default
    -
    -
    - -

    Definition at line 201 of file D4StreamMarshaller.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ checksum_update()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::D4StreamMarshaller::checksum_update (const void * data,
    unsigned long len 
    )
    -
    -virtual
    -
    -

    Update the current CRC 32 checksum value. Calling this with len equal to zero has no effect on the checksum value.

    - -

    Definition at line 276 of file D4StreamMarshaller.cc.

    - -
    -
    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::D4StreamMarshaller::dump (std::ostream & strm) const
    -
    -virtual
    -
    - -

    dump the contents of this object to the specified ostream

    -

    This method is implemented by all derived classes to dump their contents, in other words, any state they might have, private variables, etc...

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the object to
    -
    -
    - -

    Implements libdap::Marshaller.

    - -

    Definition at line 820 of file D4StreamMarshaller.cc.

    - -
    -
    - -

    ◆ get_checksum()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::D4StreamMarshaller::get_checksum ()
    -
    -virtual
    -
    -

    Get the current checksum. It is not possible to continue computing the checksum once this has been called.

    -
    Note
    This method is not intended to be called often or for inserting the checksum into an I/O stream; see put_checksum(). This is intended for instrumentation code.
    -
    Returns
    The checksum in a string object that always has eight characters.
    - -

    Definition at line 248 of file D4StreamMarshaller.cc.

    - -
    -
    - -

    ◆ put_checksum()

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::D4StreamMarshaller::put_checksum ()
    -
    -virtual
    -
    - -

    Write the checksum Write the checksum for the data sent since the last call to reset_checksum() to the I/O stream associated with this marshaller. Use this to send the checksum, not get_checksum().

    - -

    Definition at line 263 of file D4StreamMarshaller.cc.

    - -
    -
    - -

    ◆ put_count()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::D4StreamMarshaller::put_count (int64_t count)
    -
    -virtual
    -
    -

    Used only for Sequences, where the count must be added to the stream and then the fields sent using separate calls to methods here. The methods put_opaque_dap4(), ..., that need counts sent as prefixes to their data handle it themselves.

    -
    Parameters
    - - -
    countHow many elements follow.
    -
    -
    - -

    Definition at line 489 of file D4StreamMarshaller.cc.

    - -
    -
    - -

    ◆ put_vector()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::D4StreamMarshaller::put_vector (char * val,
    int64_t num_bytes 
    )
    -
    -virtual
    -
    - -

    Write a fixed size vector.

    -
    Parameters
    - - - -
    valPointer to the data
    numNumber of bytes to write
    -
    -
    - -

    Definition at line 546 of file D4StreamMarshaller.cc.

    - -
    -
    - -

    ◆ put_vector_end()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual void libdap::D4StreamMarshaller::put_vector_end ()
    -
    -inlinevirtual
    -
    -

    Close a vector when its values are written using put_vector_part(). In DAP4 this does nothing because arrays are serialized using the server's binary representation (i.e., using 'reader make right').

    -
    See also
    put_vector_start()
    -
    -put_vector_part()
    - -

    Reimplemented from libdap::Marshaller.

    - -

    Definition at line 170 of file D4StreamMarshaller.h.

    - -
    -
    - -

    ◆ put_vector_float32()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::D4StreamMarshaller::put_vector_float32 (char * val,
    int64_t num_elem 
    )
    -
    -virtual
    -
    - -

    Write a fixed size vector.

    -
    Note
    This method and its companion for float64 exists in case we need to support machine that do not use IEEE754 for their floating point representation.
    -
    Parameters
    - - - - - -
    valPointer to the data
    numNumber of elements
    widthSize of a single element
    typeDAP variable type; used to handle float32 and float64 types correctly
    -
    -
    - -

    Definition at line 625 of file D4StreamMarshaller.cc.

    - -
    -
    - -

    ◆ put_vector_float64()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::D4StreamMarshaller::put_vector_float64 (char * val,
    int64_t num_elem 
    )
    -
    -virtual
    -
    - -

    Write a fixed size vector of float64s.

    -
    Parameters
    - - - - - -
    valPointer to the data
    numNumber of elements
    widthSize of a single element
    typeDAP variable type; used to handle float32 and float64 types correctly
    -
    -
    - -

    Definition at line 699 of file D4StreamMarshaller.cc.

    - -
    -
    - -

    ◆ put_vector_part()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::D4StreamMarshaller::put_vector_part (char * ,
    unsigned int ,
    int ,
    Type  
    )
    -
    -virtual
    -
    -

    Write one part of a vector's contents.

    -
    Parameters
    - - - - - -
    valPointer to the part's values
    numThe number of values in this part
    widthThe number of bytes per value
    typeThe DAP2 data type for each value
    -
    -
    - -

    Reimplemented from libdap::Marshaller.

    - -

    Definition at line 762 of file D4StreamMarshaller.cc.

    - -
    -
    - -

    ◆ put_vector_start()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::D4StreamMarshaller::put_vector_start (int )
    -
    -inlinevirtual
    -
    -

    Prepare to send a single array/vector using a series of 'put' calls. In DAP4 this does nothing because arrays are serialized using the server's binary representation (i.e., using 'reader make right').

    -
    Parameters
    - - -
    numIgnored
    -
    -
    -
    See also
    put_vector_part()
    -
    -put_vector_end()
    - -

    Reimplemented from libdap::Marshaller.

    - -

    Definition at line 157 of file D4StreamMarshaller.h.

    - -
    -
    - -

    ◆ reset_checksum()

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::D4StreamMarshaller::reset_checksum ()
    -
    -virtual
    -
    -

    Initialize the checksum buffer. This resets the checksum calculation.

    - -

    Definition at line 233 of file D4StreamMarshaller.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1D4StreamMarshaller.js b/html/classlibdap_1_1D4StreamMarshaller.js deleted file mode 100644 index aa27a7ae9..000000000 --- a/html/classlibdap_1_1D4StreamMarshaller.js +++ /dev/null @@ -1,35 +0,0 @@ -var classlibdap_1_1D4StreamMarshaller = -[ - [ "D4StreamMarshaller", "classlibdap_1_1D4StreamMarshaller.html#a978005078f2c0810e424a97dcf9f3317", null ], - [ "~D4StreamMarshaller", "classlibdap_1_1D4StreamMarshaller.html#a5e20e73f0aa4c2be62bf0c6e007970ae", null ], - [ "checksum_update", "classlibdap_1_1D4StreamMarshaller.html#ae2d562a21a2631f32f305eb387817014", null ], - [ "dump", "classlibdap_1_1D4StreamMarshaller.html#a92b392f76e951b1611796870b82a3af9", null ], - [ "get_checksum", "classlibdap_1_1D4StreamMarshaller.html#af8ab8224637c2c673b59baa6dd583759", null ], - [ "put_byte", "classlibdap_1_1D4StreamMarshaller.html#a7a4c48925d2c65b4c6aebcf96ab1b3cf", null ], - [ "put_checksum", "classlibdap_1_1D4StreamMarshaller.html#a16a0f121e713cb391fe00284f6c656c4", null ], - [ "put_count", "classlibdap_1_1D4StreamMarshaller.html#a9ac90afeac1465d2c35719ede1e3c0ec", null ], - [ "put_float32", "classlibdap_1_1D4StreamMarshaller.html#af559b42bd8940be2d89435784da3b71d", null ], - [ "put_float64", "classlibdap_1_1D4StreamMarshaller.html#ae3d6f85a47ca42b8261230f02cb22a1b", null ], - [ "put_int", "classlibdap_1_1D4StreamMarshaller.html#a9123dfde32be90c5226422e4a5cf824c", null ], - [ "put_int16", "classlibdap_1_1D4StreamMarshaller.html#acb820f7d65e6234cd76a65eaec4d1c6e", null ], - [ "put_int32", "classlibdap_1_1D4StreamMarshaller.html#a26fa20c2ff973a0e1282bf7bc135c63a", null ], - [ "put_int64", "classlibdap_1_1D4StreamMarshaller.html#aac0868cbf6586c8921c61ebf36456f4e", null ], - [ "put_int8", "classlibdap_1_1D4StreamMarshaller.html#a9b3e898993236a8df8fb551b40ed38e8", null ], - [ "put_opaque", "classlibdap_1_1D4StreamMarshaller.html#af4c18b2dbaf48948a8aae7fcdbd99f28", null ], - [ "put_opaque_dap4", "classlibdap_1_1D4StreamMarshaller.html#a50b4b015d7e6aaad1db72a635981f889", null ], - [ "put_str", "classlibdap_1_1D4StreamMarshaller.html#a8f09b0c43cbc64ad8ba7d36a5bfe377d", null ], - [ "put_uint16", "classlibdap_1_1D4StreamMarshaller.html#a070a83ffce32e59815b00c9a3a99f0e8", null ], - [ "put_uint32", "classlibdap_1_1D4StreamMarshaller.html#adb1ab1cae5aa4a98423824bab78ed9be", null ], - [ "put_uint64", "classlibdap_1_1D4StreamMarshaller.html#a5a81d9401be0d05971f9d41a89f7aa21", null ], - [ "put_url", "classlibdap_1_1D4StreamMarshaller.html#ab1798da31bb80cc8cfc7dd3dca58cd4d", null ], - [ "put_vector", "classlibdap_1_1D4StreamMarshaller.html#a8f6b04b483ed9847e4e36969af2a08e0", null ], - [ "put_vector", "classlibdap_1_1D4StreamMarshaller.html#a7ac2c25895bde1ace566367eb7d23f36", null ], - [ "put_vector", "classlibdap_1_1D4StreamMarshaller.html#ad9ed11a93d2db1e415120fa2e1a815f8", null ], - [ "put_vector", "classlibdap_1_1D4StreamMarshaller.html#aecb796da2494b81fa2b4d9013a4b1e44", null ], - [ "put_vector_end", "classlibdap_1_1D4StreamMarshaller.html#af8ee88d2bbe84932a14719c7b176167d", null ], - [ "put_vector_float32", "classlibdap_1_1D4StreamMarshaller.html#a6fb8d61bd9c50d6e6821d849e02d9fb5", null ], - [ "put_vector_float64", "classlibdap_1_1D4StreamMarshaller.html#af2513d572ee927a7ffc98ab4a271fac6", null ], - [ "put_vector_part", "classlibdap_1_1D4StreamMarshaller.html#a792123584b2e6700a8f61663ebbf0460", null ], - [ "put_vector_start", "classlibdap_1_1D4StreamMarshaller.html#a20af2f5bb5f046c1749b4dad380047ed", null ], - [ "reset_checksum", "classlibdap_1_1D4StreamMarshaller.html#a4009f8aba9d7c19ae464af849c504177", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1D4StreamMarshaller__inherit__graph.map b/html/classlibdap_1_1D4StreamMarshaller__inherit__graph.map deleted file mode 100644 index dbe3c530b..000000000 --- a/html/classlibdap_1_1D4StreamMarshaller__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1D4StreamMarshaller__inherit__graph.md5 b/html/classlibdap_1_1D4StreamMarshaller__inherit__graph.md5 deleted file mode 100644 index 39b61cc94..000000000 --- a/html/classlibdap_1_1D4StreamMarshaller__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -16a9bf7e2f85f9be54ba0a681ac9819b \ No newline at end of file diff --git a/html/classlibdap_1_1D4StreamMarshaller__inherit__graph.png b/html/classlibdap_1_1D4StreamMarshaller__inherit__graph.png deleted file mode 100644 index cc998b1d89b6dfdf105bdd08c0192f09e4ace281..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31351 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 diff --git a/html/classlibdap_1_1D4StreamUnMarshaller-members.html b/html/classlibdap_1_1D4StreamUnMarshaller-members.html deleted file mode 100644 index e7a126460..000000000 --- a/html/classlibdap_1_1D4StreamUnMarshaller-members.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -

    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::D4StreamUnMarshaller Member List
    -
    -
    - -

    This is the complete list of members for libdap::D4StreamUnMarshaller, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    c_checksum_length (defined in libdap::D4StreamUnMarshaller)libdap::D4StreamUnMarshallerstatic
    D4StreamUnMarshaller(istream &in, bool twiddle_bytes)libdap::D4StreamUnMarshaller
    D4StreamUnMarshaller(istream &in)libdap::D4StreamUnMarshaller
    dump(ostream &strm) constlibdap::D4StreamUnMarshallervirtual
    get_byte(dods_byte &val) (defined in libdap::D4StreamUnMarshaller)libdap::D4StreamUnMarshallervirtual
    get_checksum() (defined in libdap::D4StreamUnMarshaller)libdap::D4StreamUnMarshaller
    get_checksum_str() (defined in libdap::D4StreamUnMarshaller)libdap::D4StreamUnMarshaller
    get_count()libdap::D4StreamUnMarshaller
    get_float32(dods_float32 &val) (defined in libdap::D4StreamUnMarshaller)libdap::D4StreamUnMarshallervirtual
    get_float64(dods_float64 &val) (defined in libdap::D4StreamUnMarshaller)libdap::D4StreamUnMarshallervirtual
    get_int(int &) (defined in libdap::D4StreamUnMarshaller)libdap::D4StreamUnMarshallerinlinevirtual
    get_int16(dods_int16 &val) (defined in libdap::D4StreamUnMarshaller)libdap::D4StreamUnMarshallervirtual
    get_int32(dods_int32 &val) (defined in libdap::D4StreamUnMarshaller)libdap::D4StreamUnMarshallervirtual
    get_int64(dods_int64 &val) (defined in libdap::D4StreamUnMarshaller)libdap::D4StreamUnMarshallervirtual
    get_int8(dods_int8 &val) (defined in libdap::D4StreamUnMarshaller)libdap::D4StreamUnMarshallervirtual
    get_opaque(char *, unsigned int) (defined in libdap::D4StreamUnMarshaller)libdap::D4StreamUnMarshallerinlinevirtual
    get_opaque_dap4(char **val, int64_t &len)libdap::D4StreamUnMarshallervirtual
    get_opaque_dap4(vector< uint8_t > &val) (defined in libdap::D4StreamUnMarshaller)libdap::D4StreamUnMarshallervirtual
    get_str(string &val) (defined in libdap::D4StreamUnMarshaller)libdap::D4StreamUnMarshallervirtual
    get_uint16(dods_uint16 &val) (defined in libdap::D4StreamUnMarshaller)libdap::D4StreamUnMarshallervirtual
    get_uint32(dods_uint32 &val) (defined in libdap::D4StreamUnMarshaller)libdap::D4StreamUnMarshallervirtual
    get_uint64(dods_uint64 &val) (defined in libdap::D4StreamUnMarshaller)libdap::D4StreamUnMarshallervirtual
    get_url(string &val) (defined in libdap::D4StreamUnMarshaller)libdap::D4StreamUnMarshallervirtual
    get_vector(char **, unsigned int &, Vector &) (defined in libdap::D4StreamUnMarshaller)libdap::D4StreamUnMarshallerinlinevirtual
    get_vector(char **, unsigned int &, int, Vector &) (defined in libdap::D4StreamUnMarshaller)libdap::D4StreamUnMarshallerinlinevirtual
    get_vector(char *val, int64_t num_bytes) (defined in libdap::D4StreamUnMarshaller)libdap::D4StreamUnMarshallervirtual
    get_vector(char *val, int64_t num_elem, int elem_size) (defined in libdap::D4StreamUnMarshaller)libdap::D4StreamUnMarshallervirtual
    get_vector_float32(char *val, int64_t num_elem) (defined in libdap::D4StreamUnMarshaller)libdap::D4StreamUnMarshallervirtual
    get_vector_float64(char *val, int64_t num_elem) (defined in libdap::D4StreamUnMarshaller)libdap::D4StreamUnMarshallervirtual
    is_source_big_endian() constlibdap::D4StreamUnMarshallerinline
    set_twiddle_bytes(bool twiddle) (defined in libdap::D4StreamUnMarshaller)libdap::D4StreamUnMarshallerinline
    ~D4StreamUnMarshaller() (defined in libdap::D4StreamUnMarshaller)libdap::D4StreamUnMarshallervirtual
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1D4StreamUnMarshaller.html b/html/classlibdap_1_1D4StreamUnMarshaller.html deleted file mode 100644 index 811812a3c..000000000 --- a/html/classlibdap_1_1D4StreamUnMarshaller.html +++ /dev/null @@ -1,412 +0,0 @@ - - - - - - - -libdap: libdap::D4StreamUnMarshaller Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::D4StreamUnMarshaller Class Reference
    -
    -
    - -

    Read data from the stream made by D4StreamMarshaller. - More...

    - -

    #include <D4StreamUnMarshaller.h>

    -
    -Inheritance diagram for libdap::D4StreamUnMarshaller:
    -
    -
    Inheritance graph
    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     D4StreamUnMarshaller (istream &in, bool twiddle_bytes)
     Build a DAP4 Stream unMarshaller. More...
     
     D4StreamUnMarshaller (istream &in)
     
    virtual void dump (ostream &strm) const
     dump the contents of this object to the specified ostream More...
     
    -virtual void get_byte (dods_byte &val)
     
    -Crc32::checksum get_checksum ()
     
    -string get_checksum_str ()
     
    int64_t get_count ()
     
    -virtual void get_float32 (dods_float32 &val)
     
    -virtual void get_float64 (dods_float64 &val)
     
    -virtual void get_int (int &)
     
    -virtual void get_int16 (dods_int16 &val)
     
    -virtual void get_int32 (dods_int32 &val)
     
    -virtual void get_int64 (dods_int64 &val)
     
    -virtual void get_int8 (dods_int8 &val)
     
    -virtual void get_opaque (char *, unsigned int)
     
    virtual void get_opaque_dap4 (char **val, int64_t &len)
     
    -virtual void get_opaque_dap4 (vector< uint8_t > &val)
     
    -virtual void get_str (string &val)
     
    -virtual void get_uint16 (dods_uint16 &val)
     
    -virtual void get_uint32 (dods_uint32 &val)
     
    -virtual void get_uint64 (dods_uint64 &val)
     
    -virtual void get_url (string &val)
     
    -virtual void get_vector (char **, unsigned int &, Vector &)
     
    -virtual void get_vector (char **, unsigned int &, int, Vector &)
     
    -virtual void get_vector (char *val, int64_t num_bytes)
     
    -virtual void get_vector (char *val, int64_t num_elem, int elem_size)
     
    -virtual void get_vector_float32 (char *val, int64_t num_elem)
     
    -virtual void get_vector_float64 (char *val, int64_t num_elem)
     
    bool is_source_big_endian () const
     Is the data source we are reading from a big-endian machine? We need this because the value of the CRC32 checksum is dependent on byte order. More...
     
    -void set_twiddle_bytes (bool twiddle)
     
    - - - -

    -Static Public Attributes

    -static const unsigned int c_checksum_length = 4
     
    -

    Detailed Description

    -

    Read data from the stream made by D4StreamMarshaller.

    - -

    Definition at line 65 of file D4StreamUnMarshaller.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ D4StreamUnMarshaller() [1/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    libdap::D4StreamUnMarshaller::D4StreamUnMarshaller (istream & in,
    bool twiddle_bytes 
    )
    -
    - -

    Build a DAP4 Stream unMarshaller.

    -

    Build a DAP4 Stream UnMarshaller initialed to read from am istream object. Figure out if the words read for values need to be 'twiddled' based on the byte-order of the stream an this host (see set_twiddle_bytes()).

    -
    Parameters
    - - - -
    inRead from this input stream
    is_stream_bigendianThe byte order of the data in the stream
    -
    -
    - -

    Definition at line 59 of file D4StreamUnMarshaller.cc.

    - -
    -
    - -

    ◆ D4StreamUnMarshaller() [2/2]

    - -
    -
    - - - - - - - - -
    libdap::D4StreamUnMarshaller::D4StreamUnMarshaller (istream & in)
    -
    -

    When using this constructor, set_twiddle_bytes() should be called before data are processed.

    -
    Parameters
    - - -
    in
    -
    -
    - -

    Definition at line 80 of file D4StreamUnMarshaller.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::D4StreamUnMarshaller::dump (ostream & strm) const
    -
    -virtual
    -
    - -

    dump the contents of this object to the specified ostream

    -

    This method is implemented by all derived classes to dump their contents, in other words, any state they might have, private variables, etc...

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the object to
    -
    -
    - -

    Implements libdap::UnMarshaller.

    - -

    Definition at line 468 of file D4StreamUnMarshaller.cc.

    - -
    -
    - -

    ◆ get_count()

    - -
    -
    - - - - - - - -
    int64_t libdap::D4StreamUnMarshaller::get_count ()
    -
    -

    Read a count value from the stream. This is used with D4Sequence which needs to use various other 'get' methods to read its fields. Methods like get_opaque_dap4() handle reading their count values themselves.

    -
    Parameters
    - - -
    countThe number of elements to follow.
    -
    -
    - -

    Definition at line 264 of file D4StreamUnMarshaller.cc.

    - -
    -
    - -

    ◆ get_opaque_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::D4StreamUnMarshaller::get_opaque_dap4 (char ** val,
    int64_t & len 
    )
    -
    -virtual
    -
    -

    Get opaque data when the size of the data to be read is not known in advance.

    -
    Parameters
    - - - -
    valValue-result parameter for the data; caller must delete.
    lenvalue-result parameter for the length of the data
    -
    -
    - -

    Definition at line 279 of file D4StreamUnMarshaller.cc.

    - -
    -
    - -

    ◆ is_source_big_endian()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::D4StreamUnMarshaller::is_source_big_endian () const
    -
    -inline
    -
    - -

    Is the data source we are reading from a big-endian machine? We need this because the value of the CRC32 checksum is dependent on byte order.

    -
    Note
    This is somewhat tortured logic, but if this host is big-endian and twiddle_bytes is not true, then the remote host must be big-endian. Similarly, if this host is not big-endian and twiddle_bytes is true, then the remote host must be big-endian
    - -

    Definition at line 104 of file D4StreamUnMarshaller.h.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1D4StreamUnMarshaller.js b/html/classlibdap_1_1D4StreamUnMarshaller.js deleted file mode 100644 index 8a6810045..000000000 --- a/html/classlibdap_1_1D4StreamUnMarshaller.js +++ /dev/null @@ -1,34 +0,0 @@ -var classlibdap_1_1D4StreamUnMarshaller = -[ - [ "D4StreamUnMarshaller", "classlibdap_1_1D4StreamUnMarshaller.html#a5a42def8c559570e04f46ea6feba7efa", null ], - [ "D4StreamUnMarshaller", "classlibdap_1_1D4StreamUnMarshaller.html#afcf81b26351507aa4ed3b011648646b6", null ], - [ "~D4StreamUnMarshaller", "classlibdap_1_1D4StreamUnMarshaller.html#a9aebbc212ef92e54cce03cb546b3fa69", null ], - [ "dump", "classlibdap_1_1D4StreamUnMarshaller.html#ab25aaee0813767bad8309e21945fe8fb", null ], - [ "get_byte", "classlibdap_1_1D4StreamUnMarshaller.html#a20488ddfa257f28a6e12b8305d04bded", null ], - [ "get_checksum", "classlibdap_1_1D4StreamUnMarshaller.html#a3c4713b26d736b226d2cf935614ae17f", null ], - [ "get_checksum_str", "classlibdap_1_1D4StreamUnMarshaller.html#a08e0d9075031d7ffd80804f51393a11d", null ], - [ "get_count", "classlibdap_1_1D4StreamUnMarshaller.html#a891d4d6570feaac2cf6558940b0c82ed", null ], - [ "get_float32", "classlibdap_1_1D4StreamUnMarshaller.html#ada14cfa6ec7e05135275b545373a0c02", null ], - [ "get_float64", "classlibdap_1_1D4StreamUnMarshaller.html#a7411dc274329760ac3b8d7bf3fc23183", null ], - [ "get_int", "classlibdap_1_1D4StreamUnMarshaller.html#a6d11ae3b74e880c32c9ee85bf460374f", null ], - [ "get_int16", "classlibdap_1_1D4StreamUnMarshaller.html#aa05594fb1ffdcd3a358b602c2d664511", null ], - [ "get_int32", "classlibdap_1_1D4StreamUnMarshaller.html#a60cd6a748e4b8e9100b2d7a2a688597e", null ], - [ "get_int64", "classlibdap_1_1D4StreamUnMarshaller.html#ae349b901ed2602ffbd9c0f62f994b5b6", null ], - [ "get_int8", "classlibdap_1_1D4StreamUnMarshaller.html#ad8f1995f50dcdd2e1047535ee3a5408c", null ], - [ "get_opaque", "classlibdap_1_1D4StreamUnMarshaller.html#afadcf57084fe640801cb6683aa957196", null ], - [ "get_opaque_dap4", "classlibdap_1_1D4StreamUnMarshaller.html#a98fcfd8205bc819fc4548acba9402946", null ], - [ "get_opaque_dap4", "classlibdap_1_1D4StreamUnMarshaller.html#aa7da5a3125d3cee9970ec976dce8550b", null ], - [ "get_str", "classlibdap_1_1D4StreamUnMarshaller.html#a6cf80500bec74801353f52203f6ed172", null ], - [ "get_uint16", "classlibdap_1_1D4StreamUnMarshaller.html#a62e4a5c71a4de92a8d1199ef491ed3dd", null ], - [ "get_uint32", "classlibdap_1_1D4StreamUnMarshaller.html#ae39d1ad0b2d97e8ae0ee6210eff91bc9", null ], - [ "get_uint64", "classlibdap_1_1D4StreamUnMarshaller.html#a506f22cc2080747f0f8cbf6cc2815707", null ], - [ "get_url", "classlibdap_1_1D4StreamUnMarshaller.html#a8556867a933b3269f4340df8972c5396", null ], - [ "get_vector", "classlibdap_1_1D4StreamUnMarshaller.html#ad7890e3cdd371db06c03bb65de25bceb", null ], - [ "get_vector", "classlibdap_1_1D4StreamUnMarshaller.html#acf95264ce4c33c9c42c37a6376138a80", null ], - [ "get_vector", "classlibdap_1_1D4StreamUnMarshaller.html#a4d78db6e07b654a8bdb6b1f7cee5900b", null ], - [ "get_vector", "classlibdap_1_1D4StreamUnMarshaller.html#a461cdb09b2e6c966a3141f375e1974bc", null ], - [ "get_vector_float32", "classlibdap_1_1D4StreamUnMarshaller.html#a61f7f5b4ca7da0b76a1360def1fd8f14", null ], - [ "get_vector_float64", "classlibdap_1_1D4StreamUnMarshaller.html#a2c16755bd8337478c6db2dd10d1f772e", null ], - [ "is_source_big_endian", "classlibdap_1_1D4StreamUnMarshaller.html#a476fdcae5c5b7a077548fa138275b842", null ], - [ "set_twiddle_bytes", "classlibdap_1_1D4StreamUnMarshaller.html#a83cc5d2256b5902b8e9effdba7bd7f7d", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1D4StreamUnMarshaller__inherit__graph.map b/html/classlibdap_1_1D4StreamUnMarshaller__inherit__graph.map deleted file mode 100644 index 871159002..000000000 --- a/html/classlibdap_1_1D4StreamUnMarshaller__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1D4StreamUnMarshaller__inherit__graph.md5 b/html/classlibdap_1_1D4StreamUnMarshaller__inherit__graph.md5 deleted file mode 100644 index 8327b03b8..000000000 --- a/html/classlibdap_1_1D4StreamUnMarshaller__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -df9d74095f2d3ba05b782e9db4daf1ab \ No newline at end of file diff --git a/html/classlibdap_1_1D4StreamUnMarshaller__inherit__graph.png b/html/classlibdap_1_1D4StreamUnMarshaller__inherit__graph.png deleted file mode 100644 index 09730580761d521653a2db52288319329538e9ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36036 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 t^6My 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 xXrO4IXrO4IXrO4IXrO4IXrO4IXkf+~_IX diff --git a/html/classlibdap_1_1DAPCache3-members.html b/html/classlibdap_1_1DAPCache3-members.html deleted file mode 100644 index aab90ea86..000000000 --- a/html/classlibdap_1_1DAPCache3-members.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::DAPCache3 Member List
    -
    -
    - -

    This is the complete list of members for libdap::DAPCache3, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - -
    cache_too_big(unsigned long long current_size) constlibdap::DAPCache3virtual
    create_and_lock(const string &target, int &fd)libdap::DAPCache3virtual
    dump(ostream &strm) constlibdap::DAPCache3virtual
    libdap::DapObj::dump(std::ostream &strm) const =0libdap::DapObjpure virtual
    exclusive_to_shared_lock(int fd)libdap::DAPCache3virtual
    get_cache_file_name(const string &src, bool mangle=true)libdap::DAPCache3
    get_cache_size()libdap::DAPCache3virtual
    get_instance(const string &cache_dir, const string &prefix, unsigned long long size) (defined in libdap::DAPCache3)libdap::DAPCache3static
    get_instance()libdap::DAPCache3static
    get_read_lock(const string &target, int &fd)libdap::DAPCache3virtual
    lock_cache_read()libdap::DAPCache3virtual
    lock_cache_write()libdap::DAPCache3virtual
    purge_file(const string &file)libdap::DAPCache3virtual
    unlock_and_close(const string &target) (defined in libdap::DAPCache3)libdap::DAPCache3virtual
    unlock_and_close(int fd)libdap::DAPCache3virtual
    unlock_cache()libdap::DAPCache3virtual
    update_and_purge(const string &new_file)libdap::DAPCache3virtual
    update_cache_info(const string &target)libdap::DAPCache3virtual
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1DAPCache3.html b/html/classlibdap_1_1DAPCache3.html deleted file mode 100644 index b0a7a1248..000000000 --- a/html/classlibdap_1_1DAPCache3.html +++ /dev/null @@ -1,749 +0,0 @@ - - - - - - - -libdap: libdap::DAPCache3 Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::DAPCache3 Class Referenceabstract
    -
    -
    - -

    Implementation of a caching mechanism for compressed data. This cache uses simple advisory locking found on most modern unix file systems. Compressed files are decompressed and stored in a cache where they can be used over and over until removed from the cache. Several processes can share the cache with each reading from files. At the same time, new files can be added and the cache can be purged, without disrupting the existing read operations. - More...

    - -

    #include <DAPCache3.h>

    -
    -Inheritance diagram for libdap::DAPCache3:
    -
    -
    Inheritance graph
    - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual bool cache_too_big (unsigned long long current_size) const
     look at the cache size; is it too large? Look at the cache size and see if it is too big. More...
     
    virtual bool create_and_lock (const string &target, int &fd)
     Create a file in the cache and lock it for write access. If the file does not exist, make it, open it for read-write access and get an exclusive lock on it. The locking operation blocks, although that should never happen. More...
     
    virtual void dump (std::ostream &strm) const =0
     dump the contents of this object to the specified ostream More...
     
    virtual void dump (ostream &strm) const
     dumps information about this object More...
     
    virtual void exclusive_to_shared_lock (int fd)
     Transfer from an exclusive lock to a shared lock. If the file has an exclusive write lock on it, change that to a shared read lock. This is an atomic operation. If the call to fcntl(2) is protected by locking the cache, a dead lock will result given typical use of this class. This method exists to help with the situation where one process has the cache locked and is blocking on a shared read lock for a file that a second process has locked exclusively (for writing). By changing the exclusive lock to a shared lock, the first process can get its shared lock and then release the cache. More...
     
    string get_cache_file_name (const string &src, bool mangle=true)
     
    virtual unsigned long long get_cache_size ()
     Get the cache size. Read the size information from the cache info file and return it. This methods locks the cache. More...
     
    virtual bool get_read_lock (const string &target, int &fd)
     Get a read-only lock on the file if it exists. More...
     
    virtual void lock_cache_read ()
     
    virtual void lock_cache_write ()
     
    virtual void purge_file (const string &file)
     Purge a single file from the cache. More...
     
    -virtual void unlock_and_close (const string &target)
     
    virtual void unlock_and_close (int fd)
     
    virtual void unlock_cache ()
     
    virtual void update_and_purge (const string &new_file)
     Purge files from the cache. More...
     
    virtual unsigned long long update_cache_info (const string &target)
     Update the cache info file to include 'target'. More...
     
    - - - - - -

    -Static Public Member Functions

    -static DAPCache3get_instance (const string &cache_dir, const string &prefix, unsigned long long size)
     
    static DAPCache3get_instance ()
     
    -

    Detailed Description

    -

    Implementation of a caching mechanism for compressed data. This cache uses simple advisory locking found on most modern unix file systems. Compressed files are decompressed and stored in a cache where they can be used over and over until removed from the cache. Several processes can share the cache with each reading from files. At the same time, new files can be added and the cache can be purged, without disrupting the existing read operations.

    -

    How it works. When a file is added to the cache, the cache is locked - no other processes can add, read or remove files. Once a file has been added, the cache size is examined and, if needed, the cache is purged so that its size is 80% of the maximum size. Then the cache is unlocked. When a process looks to see if a file is already in the cache, the entire cache is locked. If the file is present, a shared read lock is obtained and the cache is unlocked.

    -

    Methods: create_and_lock() and get_read_lock() open and lock files; the former creates the file and locks it exclusively iff it does not exist, while the latter obtains a shared lock iff the file already exists. The unlock() methods unlock a file. The lock_cache_info() and unlock_cache_info() are used to control access to the whole cache - with the open + lock and close + unlock operations performed atomically. Other methods that operate on the cache info file must only be called when the lock has been obtained.

    - -

    Definition at line 82 of file DAPCache3.h.

    -

    Member Function Documentation

    - -

    ◆ cache_too_big()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool libdap::DAPCache3::cache_too_big (unsigned long long current_size) const
    -
    -virtual
    -
    - -

    look at the cache size; is it too large? Look at the cache size and see if it is too big.

    -
    Returns
    True if the size is too big, false otherwise.
    - -

    Definition at line 760 of file DAPCache3.cc.

    - -
    -
    - -

    ◆ create_and_lock()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::DAPCache3::create_and_lock (const string & target,
    int & fd 
    )
    -
    -virtual
    -
    - -

    Create a file in the cache and lock it for write access. If the file does not exist, make it, open it for read-write access and get an exclusive lock on it. The locking operation blocks, although that should never happen.

    -
    Parameters
    - - - -
    targetThe name of the file to make/open/lock
    fdValue-result param that holds the file descriptor of the opened file
    -
    -
    -
    Returns
    True if the operation was successful, false otherwise. This method will return false if the file already existed (the file won't be locked and the descriptor reference is undefined - but likely -1).
    -
    Exceptions
    - - -
    BESInternalErrorif any error except EEXIST is returned by open(2) or if fcntl(2) returns an error.
    -
    -
    - -

    Definition at line 590 of file DAPCache3.cc.

    - -
    -
    - -

    ◆ dump() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::DapObj::dump (std::ostream & strm) const
    -
    -pure virtualinherited
    -
    -
    - -

    ◆ dump() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DAPCache3::dump (ostream & strm) const
    -
    -virtual
    -
    - -

    dumps information about this object

    -

    Displays the pointer value of this instance along with information about this cache.

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the information to
    -
    -
    - -

    Definition at line 993 of file DAPCache3.cc.

    - -
    -
    - -

    ◆ exclusive_to_shared_lock()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DAPCache3::exclusive_to_shared_lock (int fd)
    -
    -virtual
    -
    - -

    Transfer from an exclusive lock to a shared lock. If the file has an exclusive write lock on it, change that to a shared read lock. This is an atomic operation. If the call to fcntl(2) is protected by locking the cache, a dead lock will result given typical use of this class. This method exists to help with the situation where one process has the cache locked and is blocking on a shared read lock for a file that a second process has locked exclusively (for writing). By changing the exclusive lock to a shared lock, the first process can get its shared lock and then release the cache.

    -
    Parameters
    - - -
    fdThe file descriptor that is exclusively locked and which, on exit, will have a shared lock.
    -
    -
    - -

    Definition at line 620 of file DAPCache3.cc.

    - -
    -
    - -

    ◆ get_cache_file_name()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    string libdap::DAPCache3::get_cache_file_name (const string & src,
    bool mangle = true 
    )
    -
    -

    Build the name of file that will holds the uncompressed data from 'src' in the cache.

    -
    Note
    How names are mangled: 'src' is the full name of the file to be cached.Tthe file name passed has an extension on the end that will be stripped once the file is cached. For example, if the full path to the file name is /usr/lib/data/fnoc1.nc.gz then the resulting file name will be #<prefix>#usr#lib#data#fnoc1.nc.
    -
    Parameters
    - - - -
    srcThe source name to cache
    mangleif True, assume the name is a file pathname and mangle it. If false, do not mangle the name (assume the caller has sent a suitable string) but do turn the string into a pathname located in the cache directory with the cache prefix. the 'mangle' param is true by default.
    -
    -
    - -

    Definition at line 521 of file DAPCache3.cc.

    - -
    -
    - -

    ◆ get_cache_size()

    - -
    -
    - - - - - -
    - - - - - - - -
    unsigned long long libdap::DAPCache3::get_cache_size ()
    -
    -virtual
    -
    - -

    Get the cache size. Read the size information from the cache info file and return it. This methods locks the cache.

    -
    Returns
    The size of the cache.
    - -

    Definition at line 772 of file DAPCache3.cc.

    - -
    -
    - -

    ◆ get_instance()

    - -
    -
    - - - - - -
    - - - - - - - -
    DAPCache3 * libdap::DAPCache3::get_instance ()
    -
    -static
    -
    -

    Get an instance of the DAPCache3 object. This version is used when there's no question that the cache has been instantiated.

    - -

    Definition at line 153 of file DAPCache3.cc.

    - -
    -
    - -

    ◆ get_read_lock()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::DAPCache3::get_read_lock (const string & target,
    int & fd 
    )
    -
    -virtual
    -
    - -

    Get a read-only lock on the file if it exists.

    -

    Try to get a read-only lock on the file, blocking until we can get it. If the file does not exist, return false.

    -
    Note
    If this code returns false, that means the file did not exist in the cache at the time of the test. by the time the caller gets the result, the file may have been added to the cache by another process.
    -
    Parameters
    - - - -
    srcsrc file that will be cached eventually
    targeta value-result parameter set to the resulting cached file
    -
    -
    -
    Returns
    true if the file is in the cache and has been locked, false if the file is/was not in the cache.
    -
    Exceptions
    - - -
    Errorif the attempt to get the (shared) lock failed for any reason other than that the file does/did not exist.
    -
    -
    - -

    Definition at line 562 of file DAPCache3.cc.

    - -
    -
    - -

    ◆ lock_cache_read()

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::DAPCache3::lock_cache_read ()
    -
    -virtual
    -
    -

    Get a shared lock on the 'cache info' file.

    - -

    Definition at line 654 of file DAPCache3.cc.

    - -
    -
    - -

    ◆ lock_cache_write()

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::DAPCache3::lock_cache_write ()
    -
    -virtual
    -
    -

    Get an exclusive lock on the 'cache info' file. The 'cache info' file is used to control certain cache actions, ensuring that they are atomic. These include making sure that the create_and_lock() and read_and_lock() operations are atomic as well as the purge and related operations.

    -
    Note
    This is intended to be used internally only but might be useful in some settings.
    - -

    Definition at line 642 of file DAPCache3.cc.

    - -
    -
    - -

    ◆ purge_file()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DAPCache3::purge_file (const string & file)
    -
    -virtual
    -
    - -

    Purge a single file from the cache.

    -

    Purge a single file from the cache. The file might be old, etc., and need to be removed. Don't use this to shrink the cache when it gets too big, use update_and_purge() instead since that file optimizes accesses to the cache control file for several changes in a row.

    -
    Todo:
    This is a new feature; add to BESCache3
    -
    Parameters
    - - -
    fileThe name of the file to purge.
    -
    -
    - -

    Definition at line 944 of file DAPCache3.cc.

    - -
    -
    - -

    ◆ unlock_and_close()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DAPCache3::unlock_and_close (int fd)
    -
    -virtual
    -
    -

    Unlock the file. This does not do any name mangling; it just unlocks whatever is named (or throws BESInternalError if the file cannot be closed).

    Parameters
    - - -
    fdThe descriptor of the file to unlock.
    -
    -
    -
    Exceptions
    - - -
    BESInternalError
    -
    -
    - -

    Definition at line 700 of file DAPCache3.cc.

    - -
    -
    - -

    ◆ unlock_cache()

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::DAPCache3::unlock_cache ()
    -
    -virtual
    -
    -

    Unlock the cache info file.

    -
    Note
    This is intended to be used internally only bt might be useful in some settings.
    - -

    Definition at line 668 of file DAPCache3.cc.

    - -
    -
    - -

    ◆ update_and_purge()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DAPCache3::update_and_purge (const string & new_file)
    -
    -virtual
    -
    - -

    Purge files from the cache.

    -

    Purge files, oldest to newest, if the current size of the cache exceeds the size of the cache specified in the constructor. This method uses an exclusive lock on the cache for the duration of the purge process.

    -
    Parameters
    - - -
    new_fileThe name of a file this process just added to the cache. Using fcntl(2) locking there is no way this process can detect its own lock, so the shared read lock on the new file won't keep this process from deleting it (but will keep other processes from deleting it).
    -
    -
    - -

    Definition at line 854 of file DAPCache3.cc.

    - -
    -
    - -

    ◆ update_cache_info()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned long long libdap::DAPCache3::update_cache_info (const string & target)
    -
    -virtual
    -
    - -

    Update the cache info file to include 'target'.

    -

    Add the size of the named file to the total cache size recorded in the cache info file. The cache info file is exclusively locked by this method for its duration. This updates the cache info file and returns the new size.

    -
    Parameters
    - - -
    targetThe name of the file
    -
    -
    -
    Returns
    The new size of the cache
    - -

    Definition at line 719 of file DAPCache3.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1DAPCache3.js b/html/classlibdap_1_1DAPCache3.js deleted file mode 100644 index a972bcc45..000000000 --- a/html/classlibdap_1_1DAPCache3.js +++ /dev/null @@ -1,19 +0,0 @@ -var classlibdap_1_1DAPCache3 = -[ - [ "cache_too_big", "classlibdap_1_1DAPCache3.html#a485d7a65317308cefff252998acdd142", null ], - [ "create_and_lock", "classlibdap_1_1DAPCache3.html#afcf4ad0cb6808bf453a262d29b8f6169", null ], - [ "dump", "classlibdap_1_1DAPCache3.html#a51e52c3fbaad17173676a8bd48d16047", null ], - [ "dump", "classlibdap_1_1DAPCache3.html#a7c688942b296c46d7977e4f87a7220e0", null ], - [ "exclusive_to_shared_lock", "classlibdap_1_1DAPCache3.html#a89b43f4929a90b4708c155257b40fae2", null ], - [ "get_cache_file_name", "classlibdap_1_1DAPCache3.html#a3620d839ba6727d0245c61541ef8e6d0", null ], - [ "get_cache_size", "classlibdap_1_1DAPCache3.html#a20cccf6a9c84957acf358418f2f920fe", null ], - [ "get_read_lock", "classlibdap_1_1DAPCache3.html#a5065a7f6678bdb34ba3e9615e9f5554e", null ], - [ "lock_cache_read", "classlibdap_1_1DAPCache3.html#a8b68e963914b0fe307a37b86a6986599", null ], - [ "lock_cache_write", "classlibdap_1_1DAPCache3.html#af75c177ee450c8f18e3570c0ebefd8ac", null ], - [ "purge_file", "classlibdap_1_1DAPCache3.html#a48cd52daa0ae17a1b3abc84473d0e66e", null ], - [ "unlock_and_close", "classlibdap_1_1DAPCache3.html#a8ee589484c58c3c6959000fae1e010a4", null ], - [ "unlock_and_close", "classlibdap_1_1DAPCache3.html#a782bf630f76e5bcab4c356db6101d346", null ], - [ "unlock_cache", "classlibdap_1_1DAPCache3.html#a72f2d56a33176ac93ade3bf16c6c7ec6", null ], - [ "update_and_purge", "classlibdap_1_1DAPCache3.html#ae115f42c90bdadc1e6700994c85c9176", null ], - [ "update_cache_info", "classlibdap_1_1DAPCache3.html#ac3cc2b1e37e3c54080bb38d1abbc3b60", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1DAPCache3__inherit__graph.map b/html/classlibdap_1_1DAPCache3__inherit__graph.map deleted file mode 100644 index 370475dbb..000000000 --- a/html/classlibdap_1_1DAPCache3__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/classlibdap_1_1DAPCache3__inherit__graph.md5 b/html/classlibdap_1_1DAPCache3__inherit__graph.md5 deleted file mode 100644 index 295be1f6f..000000000 --- a/html/classlibdap_1_1DAPCache3__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -bf8042778a0cc52a369e648fb4d16a63 \ No newline at end of file diff --git a/html/classlibdap_1_1DAPCache3__inherit__graph.png b/html/classlibdap_1_1DAPCache3__inherit__graph.png deleted file mode 100644 index b4adb5dc87a825dffadd28a869364566bf4c2b69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25284 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 d~x|~53#6u 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 - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::DAS Member List
    -
    -
    - -

    This is the complete list of members for libdap::DAS, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - -
    add_table(const string &name, AttrTable *at)libdap::DASvirtual
    container()libdap::DASinlinevirtual
    container_name() constlibdap::DASinlinevirtual
    container_name(const string &cn)libdap::DASvirtual
    DAS() (defined in libdap::DAS)libdap::DASinline
    DAS(const DAS &das) (defined in libdap::DAS)libdap::DASinline
    dump(ostream &strm) constlibdap::DASvirtual
    erase()libdap::DASvirtual
    get_name(AttrTable::Attr_iter &i)libdap::DAS
    get_size() constlibdap::DASvirtual
    get_table(AttrTable::Attr_iter &i)libdap::DAS
    get_table(const string &name)libdap::DASvirtual
    get_top_level_attributes()libdap::DASinlinevirtual
    operator=(const DAS &rhs) (defined in libdap::DAS)libdap::DAS
    parse(string fname)libdap::DASvirtual
    parse(int fd)libdap::DASvirtual
    parse(FILE *in=stdin)libdap::DASvirtual
    print(FILE *out, bool dereference=false)libdap::DASvirtual
    print(ostream &out, bool dereference=false)libdap::DASvirtual
    var_begin()libdap::DAS
    var_end()libdap::DAS
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    ~DAS() (defined in libdap::DAS)libdap::DASinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1DAS.html b/html/classlibdap_1_1DAS.html deleted file mode 100644 index 0387d521c..000000000 --- a/html/classlibdap_1_1DAS.html +++ /dev/null @@ -1,779 +0,0 @@ - - - - - - - -libdap: libdap::DAS Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::DAS Class Reference
    -
    -
    - -

    Hold attribute data for a DAP2 dataset. - More...

    - -

    #include <DAS.h>

    -
    -Inheritance diagram for libdap::DAS:
    -
    -
    Inheritance graph
    - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual AttrTablecontainer ()
     Returns the current attribute container when multiple files used to build this DAS. More...
     
    virtual string container_name () const
     Returns the name of the current attribute container when multiple files used to build this DAS. More...
     
    virtual void container_name (const string &cn)
     Sets the name of the current attribute container when multiple files used to build this DAS. More...
     
    DAS (const DAS &das)
     
    virtual void dump (ostream &strm) const
     dumps information about this object More...
     
    virtual void erase ()
     erase all attributes in this DAS More...
     
    string get_name (AttrTable::Attr_iter &i)
     Returns the name of the referenced variable attribute table. More...
     
    virtual unsigned int get_size () const
     Returns the number of attributes in the current attribute table. More...
     
    AttrTableget_table (AttrTable::Attr_iter &i)
     Returns the referenced variable attribute table. More...
     
    virtual AttrTableget_table (const string &name)
     Returns the variable attribute table with the given name. More...
     
    virtual AttrTableget_top_level_attributes ()
     Returns the top most set of attributes. More...
     
    -DASoperator= (const DAS &rhs)
     
    virtual void print (FILE *out, bool dereference=false)
     
    virtual void print (ostream &out, bool dereference=false)
     
    AttrTable::Attr_iter var_begin ()
     Returns a reference to the attribute table for the first variable. More...
     
    AttrTable::Attr_iter var_end ()
     
    add_table()

    Adds an attribute table to the DAS.

    -
    virtual AttrTableadd_table (const string &name, AttrTable *at)
     Adds a variable attribute table to the DAS or the current dataset container attribute table. More...
     
    parse()

    Reads a DAS in from an external source.

    -
    virtual void parse (string fname)
     Reads a DAS from the named file. More...
     
    virtual void parse (int fd)
     Read attributes from a file descriptor. More...
     
    virtual void parse (FILE *in=stdin)
     Reads a DAS from an open file descriptor. More...
     
    -

    Detailed Description

    -

    Hold attribute data for a DAP2 dataset.

    -

    The Data Attribute Structure is a set of name-value pairs used to describe the data in a particular dataset. The name-value pairs are called the ``attributes''. The values may be of any of the DAP2 simple data types (Byte, Int16, UInt16, Int32, UInt32, Float32, Float64, String and URL), and may be scalar or vector. Note that all values are actually stored as String data, making the easy to read/check using a web browser.

    -

    A value may also consist of a set of other name-value pairs. This makes it possible to nest collections of attributes, giving rise to a hierarchy of attributes. DAP2 uses this structure to provide information about variables in a dataset. For example, consider the dataset used in the DDS example earlier.

    -

    In the following example of a DAS, several of the attribute collections have names corresponding to the names of variables in the DDS example. The attributes in that collection are said to belong to that variable. For example, the lat variable has an attribute units'' ofdegrees_north''.

    -
    -Attributes {
    -    GLOBAL {
    -        String title "Reynolds Optimum Interpolation (OI) SST";
    -    }
    -    lat {
    -        String units "degrees_north";
    -        String long_name "Latitude";
    -        Float64 actual_range 89.5, -89.5;
    -    }
    -    lon {
    -        String units "degrees_east";
    -        String long_name "Longitude";
    -        Float64 actual_range 0.5, 359.5;
    -    }
    -    time {
    -        String units "days since 1-1-1 00:00:00";
    -        String long_name "Time";
    -        Float64 actual_range 726468., 729289.;
    -        String delta_t "0000-00-07 00:00:00";
    -    }
    -    sst {
    -        String long_name "Weekly Means of Sea Surface Temperature";
    -        Float64 actual_range -1.8, 35.09;
    -        String units "degC";
    -        Float64 add_offset 0.;
    -        Float64 scale_factor 0.0099999998;
    -        Int32 missing_value 32767;
    -    }
    -}
    -

    Attributes may have arbitrary names, although in most datasets it is important to choose these names so a reader will know what they describe. In the above example, the ``GLOBAL'' attribute provides information about the entire dataset.

    -

    Data attribute information is an important part of the the data provided to a DAP2 client by a server, and the DAS is how this data is packaged for sending (and how it is received).

    -

    The DAS class is simply a sequence of attribute tables and names. It may be thought of as the top level of the attribute hierarchy.

    -
    See also
    DDS
    -
    -AttrTable
    - -

    Definition at line 121 of file DAS.h.

    -

    Member Function Documentation

    - -

    ◆ add_table()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    AttrTable * libdap::DAS::add_table (const string & name,
    AttrTableat 
    )
    -
    -virtual
    -
    - -

    Adds a variable attribute table to the DAS or the current dataset container attribute table.

    - -

    Definition at line 209 of file DAS.cc.

    - -
    -
    - -

    ◆ container()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual AttrTable* libdap::DAS::container ()
    -
    -inlinevirtual
    -
    - -

    Returns the current attribute container when multiple files used to build this DAS.

    -
    Returns
    current attribute table for current container
    - -

    Definition at line 158 of file DAS.h.

    - -
    -
    - -

    ◆ container_name() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual string libdap::DAS::container_name () const
    -
    -inlinevirtual
    -
    - -

    Returns the name of the current attribute container when multiple files used to build this DAS.

    - -

    Definition at line 149 of file DAS.h.

    - -
    -
    - -

    ◆ container_name() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DAS::container_name (const string & cn)
    -
    -virtual
    -
    - -

    Sets the name of the current attribute container when multiple files used to build this DAS.

    -
    Parameters
    - - -
    cncontainer name
    -
    -
    - -

    Definition at line 102 of file DAS.cc.

    - -
    -
    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DAS::dump (ostream & strm) const
    -
    -virtual
    -
    - -

    dumps information about this object

    -

    Displays the pointer value of this instance and then calls parent dump

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the information to
    -
    -
    -
    Returns
    void
    - -

    Implements libdap::DapObj.

    - -

    Definition at line 369 of file DAS.cc.

    - -
    -
    - -

    ◆ erase()

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::DAS::erase ()
    -
    -virtual
    -
    - -

    erase all attributes in this DAS

    - -

    Definition at line 135 of file DAS.cc.

    - -
    -
    - -

    ◆ get_name()

    - -
    -
    - - - - - - - - -
    string libdap::DAS::get_name (AttrTable::Attr_iter & i)
    -
    - -

    Returns the name of the referenced variable attribute table.

    - -

    Definition at line 168 of file DAS.cc.

    - -
    -
    - -

    ◆ get_size()

    - -
    -
    - - - - - -
    - - - - - - - -
    unsigned int libdap::DAS::get_size () const
    -
    -virtual
    -
    - -

    Returns the number of attributes in the current attribute table.

    -

    If the there is a container set, then return the number of variable attribute tables for the current container. If not set then return the number of current attribute tables in the outermost attribute table.

    - -

    Definition at line 125 of file DAS.cc.

    - -
    -
    - -

    ◆ get_table() [1/2]

    - -
    -
    - - - - - - - - -
    AttrTable * libdap::DAS::get_table (AttrTable::Attr_iter & i)
    -
    - -

    Returns the referenced variable attribute table.

    - -

    Definition at line 179 of file DAS.cc.

    - -
    -
    - -

    ◆ get_table() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    AttrTable * libdap::DAS::get_table (const string & name)
    -
    -virtual
    -
    - -

    Returns the variable attribute table with the given name.

    - -

    Definition at line 190 of file DAS.cc.

    - -
    -
    - -

    ◆ get_top_level_attributes()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual AttrTable* libdap::DAS::get_top_level_attributes ()
    -
    -inlinevirtual
    -
    - -

    Returns the top most set of attributes.

    -

    This could be the top most variable attribute tables, or it could be the top most dataset container attribute tables, if we have multiple datasets being used to construct this DAS

    - -

    Definition at line 166 of file DAS.h.

    - -
    -
    - -

    ◆ parse() [1/3]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DAS::parse (string fname)
    -
    -virtual
    -
    - -

    Reads a DAS from the named file.

    -

    Read a DAS by parsing the specified file

    -

    Read attributes from a file. Throws Error if unable to open the file, otherwise parses the file.

    - -

    Definition at line 232 of file DAS.cc.

    - -
    -
    - -

    ◆ parse() [2/3]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DAS::parse (int fd)
    -
    -virtual
    -
    - -

    Read attributes from a file descriptor.

    -

    If the file descriptor cannot be fdopen'd, return false, otherwise return the status of the mfunc parse.

    -
    Note
    Added call to dup() within fdopen so that once the FILE * is closed the decriptor fd will not also be closed (instead the duplicate descriptor will be closed). Thus further information can be read from the descriptor fd.
    - -

    Definition at line 259 of file DAS.cc.

    - -
    -
    - -

    ◆ parse() [3/3]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DAS::parse (FILE * in = stdin)
    -
    -virtual
    -
    - -

    Reads a DAS from an open file descriptor.

    -

    Read attributes from in (which defaults to stdin). If dasrestart() fails, return false, otherwise return the status of dasparse().

    - -

    Definition at line 292 of file DAS.cc.

    - -
    -
    - -

    ◆ print() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::DAS::print (FILE * out,
    bool dereference = false 
    )
    -
    -virtual
    -
    -

    Print the DAS

    -

    Creates an ASCII representation of a DAS on the given output stream.

    -

    When an identifier contains a character that contains characters that cannot be present in a URL (e.g., a space) AttrTable::print replaces those characters with WWW escape codes. 7/13/2001 jhrg

    -
    Parameters
    - - - -
    outoutput FILE on which to print the DAS
    dereferenceIf true, follow aliases. Default is false.
    -
    -
    - -

    Definition at line 331 of file DAS.cc.

    - -
    -
    - -

    ◆ print() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::DAS::print (ostream & out,
    bool dereference = false 
    )
    -
    -virtual
    -
    -

    Creates an ASCII representation of a DAS on the given output stream.

    -

    When an identifier contains a character that contains characters that cannot be present in a URL (e.g., a space) AttrTable::print replaces those characters with WWW escape codes. 7/13/2001 jhrg

    -
    Parameters
    - - - -
    outoutput ostream on which to print the DAS
    dereferenceIf true, follow aliases. Default is false.
    -
    -
    - -

    Definition at line 353 of file DAS.cc.

    - -
    -
    - -

    ◆ var_begin()

    - -
    -
    - - - - - - - -
    AttrTable::Attr_iter libdap::DAS::var_begin ()
    -
    - -

    Returns a reference to the attribute table for the first variable.

    - -

    Definition at line 147 of file DAS.cc.

    - -
    -
    - -

    ◆ var_end()

    - -
    -
    - - - - - - - -
    AttrTable::Attr_iter libdap::DAS::var_end ()
    -
    -

    Returns a reference to the end of the attribute table. Does not point to an attribute table.

    - -

    Definition at line 158 of file DAS.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1DAS.js b/html/classlibdap_1_1DAS.js deleted file mode 100644 index bd8e9bbf2..000000000 --- a/html/classlibdap_1_1DAS.js +++ /dev/null @@ -1,25 +0,0 @@ -var classlibdap_1_1DAS = -[ - [ "DAS", "classlibdap_1_1DAS.html#a89fa25390938a00076584ff7edbc85cf", null ], - [ "DAS", "classlibdap_1_1DAS.html#a47c193658638af264b666e0ed2f5e9d6", null ], - [ "~DAS", "classlibdap_1_1DAS.html#ab1a8dca7f96e4a6769031da39111a891", null ], - [ "add_table", "classlibdap_1_1DAS.html#a77e38a71ab41ab58fd098603e1cd9cb8", null ], - [ "container", "classlibdap_1_1DAS.html#ae5d31b2dd7b948ed3b1fa71db3fa32eb", null ], - [ "container_name", "classlibdap_1_1DAS.html#afbb88a74e1fcfa857526019e4f730b57", null ], - [ "container_name", "classlibdap_1_1DAS.html#a46a47320689bd71f2f640de1848e958c", null ], - [ "dump", "classlibdap_1_1DAS.html#a95501eff38ff4c1078a9d659fc6bd14b", null ], - [ "erase", "classlibdap_1_1DAS.html#aee2b84645cf0825b20e0e68cca07bd2f", null ], - [ "get_name", "classlibdap_1_1DAS.html#af4463849acea7b327626fc6f5f58da28", null ], - [ "get_size", "classlibdap_1_1DAS.html#a6b096a1c76874f7338a8e4a1d17ea724", null ], - [ "get_table", "classlibdap_1_1DAS.html#ac0cd00dbb4425986999832275ce84303", null ], - [ "get_table", "classlibdap_1_1DAS.html#a64edb34eb9e89df6f5b1cd383319afde", null ], - [ "get_top_level_attributes", "classlibdap_1_1DAS.html#a3bce04e836fabf8b0303e6a2dfd8664b", null ], - [ "operator=", "classlibdap_1_1DAS.html#a2e429ec68d1e03cf4b1b5f2b6ca53f2f", null ], - [ "parse", "classlibdap_1_1DAS.html#aa84ac295a96a12f9f083a8210732f5a8", null ], - [ "parse", "classlibdap_1_1DAS.html#a24a6bf97aae19d9d05f8172b424b11e2", null ], - [ "parse", "classlibdap_1_1DAS.html#a9afb27cb11b659ec8252c04b68935ba8", null ], - [ "print", "classlibdap_1_1DAS.html#a8983b961e6fba3a6fd33ffcfd944eaf2", null ], - [ "print", "classlibdap_1_1DAS.html#a32e72f6ecc303f270e40724dc7d3dfb7", null ], - [ "var_begin", "classlibdap_1_1DAS.html#a0f2d73b7f882231e2ff452cb4e89c113", null ], - [ "var_end", "classlibdap_1_1DAS.html#a9a9c295e437408d7c91641f8d8dd23f7", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1DAS__inherit__graph.map b/html/classlibdap_1_1DAS__inherit__graph.map deleted file mode 100644 index 9be88013e..000000000 --- a/html/classlibdap_1_1DAS__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/classlibdap_1_1DAS__inherit__graph.md5 b/html/classlibdap_1_1DAS__inherit__graph.md5 deleted file mode 100644 index 01cf7debf..000000000 --- a/html/classlibdap_1_1DAS__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -d4130352d56b9e31257b22bfdccd83a8 \ No newline at end of file diff --git a/html/classlibdap_1_1DAS__inherit__graph.png b/html/classlibdap_1_1DAS__inherit__graph.png deleted file mode 100644 index 6b10ff6a3cf5f2acacd75e3326ff64a58e26e28d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18447 zcmc$m^;cV6^yY(GaA|ON3IU1)r?^Y;Vu1psP+W>baCa;2&|(FOyHnhXyBCMzHt9Rx zS!@1+nV*t-lY8#DC;Oc9?9a1T!qrvfurbLn0RRBDg1odQ{51&xKo~|xg}>uW{P7n4 zg5azv_ZCn&MsWZDNB|V1CAGdF9A{xXQchoWGXG{XNTSm+eiZuUJtoUUH) z>%5uuJ0CUi7#0^#=Sj1G)Kltn1;*XU$1B?4oDP~e9F#hSTtF={6Iiv|J%*X3pX z8teETGg#4HhRw{BY_pc6^^Dj!s&jqGHly#F6t($Q;}(Z?Ttl_(_)%6zE>U)W)pFYm zvzP)cMB>;{qVk*=OZY7R?}L;Zjw-SUJGx}uSFI8b&RxVPe)NrzG}k}YFp2|cH4ol( zkxy$?{=ng{&+)wR}yyG!Y1!2)060_^WSNNlpJHDED`2 zProED|j_g!XmQ9`lASOxXK zxM^x+O$KKaUGB(S1m5~*f?XJ}H9X{m{mbO3tKusgUdE&X)dSoh0y-Hjc$+$byE8)vX8qi3`0~PL3qMBPR1%exr)xv%lf=j8%tx(-pG%KjUvdllW`o$;`SmV#Sx z`S>afo+Cts@zA?UqD+?CuQaC}Ik|{yU+Qzml?}IqRbMU3Rfp2x$>r?qECRdk%4UFR z-$`+!zc3-McNjp)A%gmGIB%&1l^i}x3cUz*nP73!hCTnR$R)U!fcR?TF>T#Hz?N}G z=o=Gg60G&Rc98Gve;>{SckO>%ckFtc=BX~x?*~O9kE;=9g31jptYDKp?6!B3B(+=;$AZ))1-Hx>}o#rLrv0?gL z7jx?=j_KlGkYh`P5P1f4^@BUEkxHHC@8hBAlW1PaRW73IE#kz5 zVh*QAITt2HYE8NNXcfQIfeK>f%*<6-z6|qA9W(=mNS^5V(=_@ict>1cV%Iq&gM)V@ zUY1y;s?6rU5u*-9vt#mT6?urA?)3CKbzgc62&3E(L?IUP5~y@A#)xU$@Yj`VlVT!P zGRiX_vo$@bxCxCptZ? zm~oOL#xJe8Zz+8KddfXgv6E!oVAC+;y z7`aGoEMI=ElfnRVmguVZ-kJ`D@X!Zah;g5bc^B1X5V5!z1MLaw{5p>i9ELQWz?92KSWBy}fA8Hl8X#YR z))+_J%d@A%@+CAV5@nA-T2ZF0g-Cdx)z8BuIi*&q7gsxeluN2e&|t=Ov-k8 zDw~&+>0Y2+cM~xaolvj+CSH%YtTm5Dc@{tJCTi(90-bpp`7AN_DRUnQ@wyhi>d-|g(y!C}0;wSZWmn1>)$YiX3#(n+;rHFrt?$7k#7I!7a-jBX5rvtOO&06`|PFM~wqNB2x5JFMIi~Pr_`lt_dCk*3rBAP@oaX$Q^X(NQqpQ^j-AG z0l~<+ctHn5*@;N}SuZgpM0X9^pl_Pgog9J4YQzj3!yU*~B;}|vslQG!S2ddtMDCs% zXnN+XVBgW%qT-Rf4X2UEUr}(Nm$MFn<(d!)2t^AU{xy;gbgjk99s{J3wDt&_=*9TZ zNC60rB&#OGuOn7Ayf+Xbe&4mOJr3qlc?z2(ejxw@z}eke5D8C&@0j-^+n77!HZZIM zg?K;w^HEsfb{E4H!U-`2?JWy4qVj-G8Y^?_;V;-owf~jnOJj$alzL}15vo&pAwrr5 zf+PdJzwuRq@K>XL^+ECcwN)M`V^%+*63!Df!4GKs?!F>S5EGzUEQdKFXb_ z@|g|HWxW!Hx!h2>&ISXFrN@35s?17vH-sPT6D2IFt zxdktuz?LxE*>3A{-D)VB4ZZfc-yz2{vHXG-C*^DTyHGF;I>)8mU_Iy1oYkze!@gs( zfg>|%Z<|Tx?Zt=$wZ2NOl`@ZTMbn3O3#Eu9ihQ{|P{8hZ+NMfF3L7p99aR_w&Iqf< zk$!CH&bZjrXYfotwJXM%-I3AE_GY`HQYp%@^WXEb}zxB^m z1#DN(PoNixgm=3PR;veN?>u5juJuX~gMgGQIHpu1gklt&%)oG$c3hB!hV5hpfXFKu zTzBq@X`UOJR6uxrQ>hle)xPS{hU={T>+*JdbSvo$^tBA5C2dWjAAGX-yK&hMgdD{E?=tq3)q(}fAgB!m(K&7_F}5SBCC z5_egkq!JcV3E`gp{!eQ7JC-3i1AuE#2uP3P8rG&yb#fKN=YG5V&?@c621F_ub26@$Pwr_^w6k@1cj|{ z_nI@CZr~I{mEbYUlqm5m_Ae|KcYF}Tb3We}+Cm|am}f^q=cD)bx%TvItOr4lz3rH5s3q!UmMe|D{ z&6U4B=GbA3<%_5*9xjf}^Sq16duoH@8z~VXE-V^-9Ks;| z38Of%eUTTUnbHuOom)CdQ>rd@6e#Qt`5`&x4#$*OG7Uo(^*7<8@|mHe3xlbKB+(Tq zOrBg~3F35ZT^;ktQ%&bJWAg5mbtdI8Mk=mi5Y7CqnZGb{RK zyKeXMMN2%*XEuiyiLM4@543FOa8pp6C%6(flUJIA>UO+R`z>F>mq$YGBicOwJ7m)Q zI1YI-e<<+*AsSF=#)PBtZJ9UeUD0Q1Q*g3+Qco$8AWIkF#RH|Nb!U}AX_WM{=82!d z*`=oNOX8YeYRnZH#!Y*+^rLEGjRI_%zVc26xZ}GNxb5vBd7=wqL<7zO=5k(1^VBoC zEXJi45sD>b^xP|_T<4!q(gqJ;tZo^#O2y<5Nhi>z$Nfcp8{kHIQC{1u*%{JW`M0`O zC*L32qhf}f@{F@zomI&3Zb#0i#cI4K{f<;C*IzY@T}#O)-MYpg^4;3ZAL2ESJv$E> zrcl&mmN;gqCmE{#H%(indBOaGQeuCG(|KQ9T?TxXk8rz5Qn3CG7A51@eQ4T|t$1Fr zGEv?j^!l6Da#Lq*9*znQ%kw`_=MI`QgBItBdLq9==>tJ*N>i5X-@wzl{DaNpYY-iN z&)oP|nZLUn5Ptc8y~LQ&cUz#p_dW01!~MI@J$LUsE^2c!E}p~Zk?pa&x_>n{@Ovpg z`%I_8hgGep^=C(2NW;U0lEAX4@aILrlDg|7kNwLWzh_3xUm&)SZ2s*&Jj=Z-`?U8V zO-9nh9d4@0RC8DR+%|LE=KY|RUA&^H24$Zn?cSC^OKeBRf5bB33O0wpf1Ho-%l z#@^?l86&K<^f`$A>SBD&RKrn~1L7sBqJa(sXw$_{e-@}jJw@o0Eowy>75C>rY|?nD zx&{YFcRPEb&ZF8f+kZceCeS+kR<$YTwiK(Hz)^zBt_aiMSaDwuoA|d_<9u_i9attO zljdUFv?B)FPdDPrY~G_|m-?4$jxI#>yLesURUOal+?H;^0;{*PTCDMaCa%x(hl*tG zmTskZ8ahT-rNQF&`?U=gdcr>09-fB8%}1)@FPRpGwJ~}wlQJopJQhHuY@i|$SXe8J z*mCUATaI*!ByN*C$A{lWdEY5@`e541mJ4Ohg_YwroLeglLE63fT}X?V?|G`p^=)#J z4=sOb&cjZ=+8q|&qmr8~QCLamloIuIXtpTsVR7!jn#M9a|1i7V+T6}?bl#u0zc=|m z0kxOgtA_a-oxzM)TrbtzljnFBB^*x*F6>f zA0H6J@+_(CYoIqZo5_PzgMHjF{ecJE>ha9WPJv zo@qG53MB01$?(AYsX2BMS?JHL#h_nat%C`YnpK3fa3vuAQ1tk4jQUFKe!rmWdsRD` zZO7AfSI6^J)q1qRDti5rUCa8I@M)65W4USVD8JH`Y{Qzb7x=XG5)}y*D6id-qWG>v z72B@)p!lK!KF!>#mz{=D$Ze}7tG5%BQiiVpeb@PsoS5xb74|4gwzbhDseT@N;e^bn zyjEkt-|y|)ObepS<1dw3!jtL2=4BDPrH6(g&O-7$og zt%oybqi1{mDbsSbsrY;9_ac0|Mg6i5qO`o=5zub*?8G9WQFZ;bbt$g*l-3Sd_ zdpdFNy4%a4_P#$TF{(6ioz?Dw>}3*qUuLWU>lZ(<4`|WLM(uZ38`*u#OH4^o7t5-j zH;V)Sk)p1DR{6Y6v&ufnc`G+6E?#!p+~fE1u;w3=W8c1C=Pnd*JKtJ>>gv z{K|WW-Go(F0`uu2wF6k$@qBN(5&ViX_2sI{4;vMiielMufU>JlA+cHhJ;?d?Y@-YQ z^hT90vsJ!)jpzO3fs}6Zd4|6u&|bgJ^M)DrS`qeYf;|Iar(vDMH@;% za8xtQdE#3b)y-bjx|w}*e^}K*m$rS@lbD4G9`$>^%<-pH4sc(mZ2H~d_p%QE(WjME zyPx3Wiv@b?GjCmz1*4A@nd161v{er+9T$7xkod+Ta@L8|rRIB)xX$Hwr{u66fQGu4 z?PYhi8OhbWu~nF;is}2efVznm@hOrPEeq>*I_G)YyCmB6$BZ7H4Cwun9Dn7}oCd(7e?sF6wpd zB9+QRdo_WOYVe7*gm7{d{`5qxFV7E^7z&byX?M+sl~{3ZuZ+LsC7SO0+f@A2SvEH) zZv6~mQ~sf?qt7_+GOe-__j4;oxEbfGh=-HE9bzJoQfTJMu4yL)fwHRlZZ|_1qxa6H zs%;m9-Dd(l{yFD{3Eq>BP1ZGDa24EJyX_Z%J>9H{>)HP36Lh_bi%ZVctui(WQ4ML4 z3`A{OQeX5i2@wm1_JpA58haFZJ@bx>5U&4Rrw;N9(Fr|?ko(@@c<|KyQUM-CqxN36 z4790ivP`YoUuki_%S_+2NHrn>d;2^rt+@ez4$?&?RdLmh@a&l5r0AJp%-N-Ov#EjF zO>F^8zVM)4IZB37+}>`*2Kqg2Q6uz_X%Z-m9NCYH-nb0LjR@1fez-c^11+u0!~7O? z-nLzi2^$R#MaAjkN4&|}?YSHuSG66hcHd36LM69r%p=E1SD=me_Gk4mb!+@PrSu@9 zO(}joZ{AgBJq?@Hc|W>x)6ntsTF*S14;IPQF4(vZ!=lKq6NjVRleYA(ZoPdYOl2Xr zH6QnZ$Bon9LKPQF^}yiO^C=}R2;H>8$TcXx{bA))=pYaq4YfO^2-xQ*-i%3L!>Qo$ ze7$6k=Dy;Z`n`m*JFW~EP8aQ>2R~l1Nc;SFdv3uNqy-@hhcM6fW%E@B zI=pYO0HZ(fzBpLOvyTxAtbQ?fSN5@0F?qS43tW5L73kVah$LATvo(CI<>+|4s4Ulh zsXLCFD^bf?-!F)D>$Uvd3k=)9kWLrf2qJ{ZyfT_e$DZMh!9b9q%KC8L_X=0te^Q0B z?e7$z7+J^Av2Q($KE`1{89D8o`w;;CwP2NV3<8!puKCb#P6%hMnQptHf zgt7MsV!g|M2!^hA2E;5}uX>&OEA+u9)UIWfywS-7?|JgvxHF?0Oz=k7@Hv)2Z@u)+%Dnhaw79-~i=9_nB(jSx{^W&7ZorX7GO zPfiWO*;>3hoV^6e8oMo6Q2xGzcr>j11||z|S7QgS(0GU!OfT_El+86I{{X$)f%mMft6^68HBUd4xpu@a-Rw8boKn zj1|s|pg*z%?1OLN=!s*d)~n@T1LO+jG+1yASED|Da{LcU*)jZpar`4nZ$(=g$l;$f z$M<5^sCRc*|WU*Z4s4I??&6QynL_YQI0R>t`P|2ALX zAIe8%^HQ9XWlQg`+*-V)t6k$96jDFFb9zAMYg>&wskTJ+E{3_>h4JSOAr

    a$q9z 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 diff --git a/html/classlibdap_1_1DDS-members.html b/html/classlibdap_1_1DDS-members.html deleted file mode 100644 index 758fbc447..000000000 --- a/html/classlibdap_1_1DDS-members.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -

    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::DDS Member List
    -
    -
    - -

    This is the complete list of members for libdap::DDS, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    add_var(BaseType *bt)libdap::DDS
    add_var_nocopy(BaseType *bt)libdap::DDS
    check_semantics(bool all=false)libdap::DDS
    container()libdap::DDS
    container_name()libdap::DDS
    container_name(const string &cn)libdap::DDS
    DDS(BaseTypeFactory *factory, const string &name="")libdap::DDS
    DDS(BaseTypeFactory *factory, const string &name, const string &version)libdap::DDS
    DDS(const DDS &dds)libdap::DDS
    DDSTest (defined in libdap::DDS)libdap::DDSfriend
    del_var(const string &n)libdap::DDS
    del_var(Vars_iter i)libdap::DDS
    del_var(Vars_iter i1, Vars_iter i2)libdap::DDS
    dump(ostream &strm) constlibdap::DDSvirtual
    duplicate(const DDS &dds) (defined in libdap::DDS)libdap::DDSprotected
    exact_match(const string &name, BaseType::btp_stack *s=0) (defined in libdap::DDS)libdap::DDSprotected
    filename() constlibdap::DDS
    filename(const string &fn)libdap::DDS
    get_attr_table()libdap::DDSvirtual
    get_dap_major() constlibdap::DDSinline
    get_dap_minor() constlibdap::DDSinline
    get_dap_version() const (defined in libdap::DDS)libdap::DDSinline
    get_das()libdap::DDS
    get_das(DAS *das) (defined in libdap::DDS)libdap::DDS
    get_dataset_name() constlibdap::DDS
    get_dmr_version() const (defined in libdap::DDS)libdap::DDSinline
    get_factory() constlibdap::DDSinline
    get_namespace() constlibdap::DDSinline
    get_request_size(bool constrained)libdap::DDS
    get_request_xml_base() constlibdap::DDSinline
    get_response_limit()libdap::DDSinline
    get_timeout() (defined in libdap::DDS)libdap::DDS
    get_var_index(int i)libdap::DDS
    get_vars_iter(int i)libdap::DDS
    insert_var(Vars_iter i, BaseType *ptr)libdap::DDS
    insert_var_nocopy(Vars_iter i, BaseType *ptr)libdap::DDS
    leaf_match(const string &name, BaseType::btp_stack *s=0) (defined in libdap::DDS)libdap::DDSprotected
    mark(const string &name, bool state)libdap::DDS
    mark_all(bool state)libdap::DDS
    num_var()libdap::DDS
    operator=(const DDS &rhs) (defined in libdap::DDS)libdap::DDS
    parse(string fname)libdap::DDS
    parse(int fd)libdap::DDS
    parse(FILE *in=stdin)libdap::DDS
    print(FILE *out)libdap::DDS
    print(ostream &out)libdap::DDS
    print_constrained(FILE *out)libdap::DDS
    print_constrained(ostream &out)libdap::DDS
    print_das(ostream &out)libdap::DDS
    print_dmr(ostream &out, bool constrained)libdap::DDS
    print_xml(FILE *out, bool constrained, const string &blob="")libdap::DDS
    print_xml(ostream &out, bool constrained, const string &blob="")libdap::DDS
    print_xml_writer(ostream &out, bool constrained, const string &blob="")libdap::DDS
    set_dap_major(int p)libdap::DDS
    set_dap_minor(int p)libdap::DDS
    set_dap_version(const string &version_string="2.0")libdap::DDS
    set_dap_version(double d)libdap::DDS
    set_dataset_name(const string &n)libdap::DDS
    set_factory(BaseTypeFactory *factory)libdap::DDSinline
    set_namespace(const string &ns)libdap::DDSinline
    set_request_xml_base(const string &xb)libdap::DDSinline
    set_response_limit(long size)libdap::DDSinline
    set_timeout(int t) (defined in libdap::DDS)libdap::DDS
    tag_nested_sequences()libdap::DDS
    timeout_off() (defined in libdap::DDS)libdap::DDS
    timeout_on() (defined in libdap::DDS)libdap::DDS
    transfer_attributes(DAS *das)libdap::DDSvirtual
    var(const string &n, BaseType::btp_stack &s)libdap::DDS
    var(const string &n, BaseType::btp_stack *s=0)libdap::DDS
    var_begin()libdap::DDS
    var_end()libdap::DDS
    var_rbegin()libdap::DDS
    var_rend()libdap::DDS
    Vars_citer typedef (defined in libdap::DDS)libdap::DDS
    Vars_iter typedef (defined in libdap::DDS)libdap::DDS
    Vars_riter typedef (defined in libdap::DDS)libdap::DDS
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    ~DDS() (defined in libdap::DDS)libdap::DDSvirtual
    -
    - - - - diff --git a/html/classlibdap_1_1DDS.html b/html/classlibdap_1_1DDS.html deleted file mode 100644 index ce6727133..000000000 --- a/html/classlibdap_1_1DDS.html +++ /dev/null @@ -1,2147 +0,0 @@ - - - - - - - -libdap: libdap::DDS Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    - -

    #include <DDS.h>

    -
    -Inheritance diagram for libdap::DDS:
    -
    -
    Inheritance graph
    - - - - -
    - - - - - - - - -

    -Public Types

    -typedef std::vector< BaseType * >::const_iterator Vars_citer
     
    -typedef std::vector< BaseType * >::iterator Vars_iter
     
    -typedef std::vector< BaseType * >::reverse_iterator Vars_riter
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    void add_var (BaseType *bt)
     Adds a copy of the variable to the DDS. Using the ptr_duplicate() method, perform a deep copy on the variable bt and adds the result to this DDS. More...
     
    void add_var_nocopy (BaseType *bt)
     Adds the variable to the DDS. More...
     
    bool check_semantics (bool all=false)
     Check the semantics of each of the variables represented in the DDS. More...
     
     DDS (BaseTypeFactory *factory, const string &name="")
     
     DDS (BaseTypeFactory *factory, const string &name, const string &version)
     
     DDS (const DDS &dds)
     
    void del_var (const string &n)
     Removes a variable from the DDS. More...
     
    void del_var (Vars_iter i)
     Removes a variable from the DDS. More...
     
    void del_var (Vars_iter i1, Vars_iter i2)
     Removes a range of variables from the DDS. More...
     
    virtual void dump (ostream &strm) const
     dumps information about this object More...
     
    virtual AttrTableget_attr_table ()
     
    int get_dap_major () const
     Get the DAP major version as sent by the client. More...
     
    int get_dap_minor () const
     Get the DAP minor version as sent by the client. More...
     
    -string get_dap_version () const
     
    DASget_das ()
     Get a DAS object. More...
     
    -void get_das (DAS *das)
     
    -string get_dmr_version () const
     
    BaseTypeFactoryget_factory () const
     
    string get_namespace () const
     Get the namespace associated with the DDS - likely set only by DDX responses. More...
     
    int get_request_size (bool constrained)
     Get the estimated response size. More...
     
    string get_request_xml_base () const
     Get the URL that will return this DDS/DDX/DataThing. More...
     
    long get_response_limit ()
     Get the maximum response size, in Bytes. Zero indicates no limit. More...
     
    BaseTypeget_var_index (int i)
     Get a variable. More...
     
    Vars_iter get_vars_iter (int i)
     Get an iterator. More...
     
    void insert_var (Vars_iter i, BaseType *ptr)
     Insert a variable before the referenced element. More...
     
    void insert_var_nocopy (Vars_iter i, BaseType *ptr)
     
    bool mark (const string &name, bool state)
     Mark the send_p flag of the named variable to state. More...
     
    void mark_all (bool state)
     
    int num_var ()
     Returns the number of variables in the DDS. More...
     
    -DDSoperator= (const DDS &rhs)
     
    void parse (string fname)
     Parse a DDS from a file with the given d_name. More...
     
    void parse (int fd)
     Parse a DDS from a file indicated by the input file descriptor. More...
     
    void parse (FILE *in=stdin)
     Parse a DDS from a file indicated by the input file descriptor. Read the persistent representation of a DDS from the FILE *in, parse it and create a matching binary object. More...
     
    void print (FILE *out)
     Print the entire DDS to the specified file. More...
     
    void print (ostream &out)
     Print the entire DDS to the specified ostream. More...
     
    void print_constrained (FILE *out)
     Print a constrained DDS to the specified file. More...
     
    void print_constrained (ostream &out)
     Print a constrained DDS to the specified ostream. More...
     
    void print_das (ostream &out)
     write the DAS response given the attribute information in the DDS More...
     
    void print_dmr (ostream &out, bool constrained)
     Print the DAP4 DMR object using a DDS. More...
     
    void print_xml (FILE *out, bool constrained, const string &blob="")
     
    void print_xml (ostream &out, bool constrained, const string &blob="")
     
    void print_xml_writer (ostream &out, bool constrained, const string &blob="")
     
    void set_dap_major (int p)
     
    void set_dap_minor (int p)
     
    void set_dap_version (const string &version_string="2.0")
     
    void set_dap_version (double d)
     
    BaseTypeFactoryset_factory (BaseTypeFactory *factory)
     
    void set_namespace (const string &ns)
     Set the namespace for this DDS/DDX object/response. More...
     
    void set_request_xml_base (const string &xb)
     
    void set_response_limit (long size)
     
    void tag_nested_sequences ()
     Traverse DDS, set Sequence leaf nodes. More...
     
    virtual void transfer_attributes (DAS *das)
     
    BaseTypevar (const string &n, BaseType::btp_stack &s)
     
    BaseTypevar (const string &n, BaseType::btp_stack *s=0)
     Find the variable with the given d_name. More...
     
    Vars_iter var_begin ()
     Return an iterator to the first variable. More...
     
    Vars_iter var_end ()
     Return an iterator. More...
     
    Vars_riter var_rbegin ()
     Return a reverse iterator. More...
     
    Vars_riter var_rend ()
     Return a reverse iterator. More...
     
    string get_dataset_name () const
     
    void set_dataset_name (const string &n)
     
    string filename () const
     
    void filename (const string &fn)
     
    string container_name ()
     
    void container_name (const string &cn)
     
    Structurecontainer ()
     
    DDS_timeout

    Old deprecated DDS timeout code

    Deprecated:
    -
    -void timeout_on ()
     
    -void timeout_off ()
     
    -void set_timeout (int t)
     
    -int get_timeout ()
     
    - - - - - - - -

    -Protected Member Functions

    -void duplicate (const DDS &dds)
     
    -BaseTypeexact_match (const string &name, BaseType::btp_stack *s=0)
     
    -BaseTypeleaf_match (const string &name, BaseType::btp_stack *s=0)
     
    - - - -

    -Friends

    -class DDSTest
     
    -

    Detailed Description

    -

    The DAP2 Data Descriptor Object (DDS) is a data structure used by the DAP2 software to describe datasets and subsets of those datasets. The DDS may be thought of as the declarations for the data structures that will hold data requested by some DAP2 client. Part of the job of a DAP2 server is to build a suitable DDS for a specific dataset and to send it to the client. Depending on the data access API in use, this may involve reading part of the dataset and inferring the DDS. Other APIs may require the server simply to read some ancillary data file with the DDS in it.

    -

    On the server side, in addition to the data declarations, the DDS holds the clauses of any constraint expression that may have accompanied the data request from the DAP2 client. The DDS object includes methods for modifying the DDS according to the given constraint expression. It also has methods for directly modifying a DDS, and for transmitting it from a server to a client.

    -

    For the client, the DDS object includes methods for reading the persistent form of the object sent from a server. This includes parsing the ASCII representation of the object and, possibly, reading data received from a server into a data object.

    -

    Note that the class DDS is used to instantiate both DDS and DataDDS objects. A DDS that is empty (contains no actual data) is used by servers to send structural information to the client. The same DDS can becomes a DataDDS when data values are bound to the variables it defines.

    -

    For a complete description of the DDS layout and protocol, please refer to The OPeNDAP User Guide.

    -

    The DDS has an ASCII representation, which is what is transmitted from a DAP2 server to a client. Here is the DDS representation of an entire dataset containing a time series of worldwide grids of sea surface temperatures:

    -
    -Dataset {
    -    Float64 lat[lat = 180];
    -    Float64 lon[lon = 360];
    -    Float64 time[time = 404];
    -    Grid {
    -     ARRAY:
    -        Int32 sst[time = 404][lat = 180][lon = 360];
    -     MAPS:
    -        Float64 time[time = 404];
    -        Float64 lat[lat = 180];
    -        Float64 lon[lon = 360];
    -    } sst;
    -} weekly;
    -

    If the data request to this dataset includes a constraint expression, the corresponding DDS might be different. For example, if the request was only for northern hemisphere data at a specific time, the above DDS might be modified to appear like this:

    -
    -Dataset {
    -    Grid {
    -     ARRAY:
    -        Int32 sst[time = 1][lat = 90][lon = 360];
    -     MAPS:
    -        Float64 time[time = 1];
    -        Float64 lat[lat = 90];
    -        Float64 lon[lon = 360];
    -    } sst;
    -} weekly;
    -

    Since the constraint has narrowed the area of interest, the range of latitude values has been halved, and there is only one time value in the returned array. Note that the simple arrays (lat, lon, and time) described in the dataset are also part of the sst Grid object. They can be requested by themselves or as part of that larger object.

    -

    See the The OPeNDAP User Guide, or the documentation of the BaseType class for descriptions of the DAP2 data types.

    -
    Note
    Make sure to pass a valid pointer to the DDS constructor or use the set_factory() method before actually using the DDS. Also make sure that the Factory's lifetime thereafter is the same as the DDS's. Never delete the factory until you're done using the DDS.
    -
    -Update: I removed the DEFAULT_BASETYPE_FACTORY switch because it caused more confusion than it avoided. See Trac #130. jhrg
    -
    -The compile-time symbol DEFAULT_BASETYPE_FACTORY controls whether the old (3.4 and earlier) DDS and DataDDS constructors are supported. These constructors now use a default factory class (BaseTypeFactory, implemented by this library) to instantiate Byte, ..., Grid variables. To use the default ctor in your code you must also define this symbol. If you do choose to define this and fail to provide a specialization of BaseTypeFactory when your software needs one, you code may not link or may fail at run time. In addition to the older ctors for DDS and DataDDS, defining the symbol also makes some of the older methods in Connect available (because those methods require the older DDS and DataDDS ctors.
    -
    See also
    BaseType
    -
    -DAS
    - -

    Definition at line 183 of file DDS.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ DDS() [1/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    libdap::DDS::DDS (BaseTypeFactoryfactory,
    const string & name = "" 
    )
    -
    -

    Make a DDS which uses the given BaseTypeFactory to create variables.

    -
    Note
    The default DAP version is 3.2 - this is really DAP2 with a handful of enhancements that our WCS software relies on.
    -
    Parameters
    - - - -
    factoryThe BaseTypeFactory to use when creating instances of DAP variables. The caller must ensure the factory's lifetime is at least that of the DDS instance.
    nameThe name of the DDS - usually derived from the name of the pathname or table name of the dataset.
    -
    -
    - -

    Definition at line 204 of file DDS.cc.

    - -
    -
    - -

    ◆ DDS() [2/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    libdap::DDS::DDS (BaseTypeFactoryfactory,
    const string & name,
    const string & version 
    )
    -
    -

    Make a DDS with the DAP protocol set to a specific value. This method provides an easy way to build DDS objects for use in a server or client that will process DAP4, for example. It's roughly equivalent to calling set_dap_version() after making an instance using DDS::DDS(BaseTypeFactory *, const string &).

    -
    Parameters
    - - - - -
    factoryThe BaseTypeFactory to use when creating instances of DAP variables. The caller must ensure the factory's lifetime is at least that of the DDS instance.
    nameThe name of the DDS - usually derived from the name of the pathname or table name of the dataset.
    versionThe DAP version to support. This sets the DAP version, as well as a number of other dependent constants.
    -
    -
    - -

    Definition at line 231 of file DDS.cc.

    - -
    -
    - -

    ◆ DDS() [3/3]

    - -
    -
    - - - - - - - - -
    libdap::DDS::DDS (const DDSrhs)
    -
    -

    The DDS copy constructor.

    - -

    Definition at line 244 of file DDS.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ add_var()

    - -
    -
    - - - - - - - - -
    void libdap::DDS::add_var (BaseTypebt)
    -
    - -

    Adds a copy of the variable to the DDS. Using the ptr_duplicate() method, perform a deep copy on the variable bt and adds the result to this DDS.

    -
    Note
    The copy will not copy data values.
    -
    Parameters
    - - -
    btSource variable.
    -
    -
    - -

    Definition at line 586 of file DDS.cc.

    - -
    -
    - -

    ◆ add_var_nocopy()

    - -
    -
    - - - - - - - - -
    void libdap::DDS::add_var_nocopy (BaseTypebt)
    -
    - -

    Adds the variable to the DDS.

    -
    Parameters
    - - -
    btSource variable.
    -
    -
    - -

    Definition at line 613 of file DDS.cc.

    - -
    -
    - -

    ◆ check_semantics()

    - -
    -
    - - - - - - - - -
    bool libdap::DDS::check_semantics (bool all = false)
    -
    - -

    Check the semantics of each of the variables represented in the DDS.

    -

    Check the semantics of the DDS describing a complete dataset. If ALL is true, check not only the semantics of THIS->TABLE, but also recursively all ctor types in the THIS->TABLE. By default, ALL is false since parsing a DDS input file runs semantic checks on all variables (but not the dataset itself.

    -
    Returns
    TRUE if the conventions for the DDS are not violated, FALSE otherwise.
    -
    Parameters
    - - -
    allIf true, recursively check the individual members of compound variables.
    -
    -
    -
    See also
    BaseType::check_semantics
    - -

    Definition at line 1720 of file DDS.cc.

    - -
    -
    - -

    ◆ container()

    - -
    -
    - - - - - - - -
    Structure * libdap::DDS::container ()
    -
    -

    Get the current container structure.

    - -

    Definition at line 547 of file DDS.cc.

    - -
    -
    - -

    ◆ container_name() [1/2]

    - -
    -
    - - - - - - - -
    string libdap::DDS::container_name ()
    -
    -

    Get and set the current container. If there are multiple files being used to build this DDS, using a container will set a virtual structure for the current container.

    -

    Container Name Accessor

    See also
    Dataset Name Accessors Gets the dataset file d_name.
    - -

    Definition at line 511 of file DDS.cc.

    - -
    -
    - -

    ◆ container_name() [2/2]

    - -
    -
    - - - - - - - - -
    void libdap::DDS::container_name (const string & cn)
    -
    -

    Set the current container d_name and get or create a structure for that d_name.

    - -

    Definition at line 519 of file DDS.cc.

    - -
    -
    - -

    ◆ del_var() [1/3]

    - -
    -
    - - - - - - - - -
    void libdap::DDS::del_var (const string & n)
    -
    - -

    Removes a variable from the DDS.

    -

    Remove the named variable from the DDS. This method is not smart about looking up names. The variable must exist at the top level of the DDS and must match exactly the d_name given.

    -
    Note
    Invalidates any iterators that reference the contents of the DDS.
    -
    Parameters
    - - -
    nThe d_name of the variable to remove.
    -
    -
    - -

    Definition at line 636 of file DDS.cc.

    - -
    -
    - -

    ◆ del_var() [2/3]

    - -
    -
    - - - - - - - - -
    void libdap::DDS::del_var (Vars_iter i)
    -
    - -

    Removes a variable from the DDS.

    -

    Remove the variable referenced by the iterator and free its storage.

    -
    Note
    Invalidates any iterators that reference the contents of the DDS.
    -
    Parameters
    - - -
    iThe Vars_iter which refers to the variable.
    -
    -
    - -

    Definition at line 659 of file DDS.cc.

    - -
    -
    - -

    ◆ del_var() [3/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void libdap::DDS::del_var (Vars_iter i1,
    Vars_iter i2 
    )
    -
    - -

    Removes a range of variables from the DDS.

    -

    Remove the variables referenced by the range of iterators and free their storage.

    -
    Note
    Invalidates any iterators that reference the contents of the DDS.
    -
    Parameters
    - - - -
    i1The start of the range.
    i2The end of the range.
    -
    -
    - -

    Definition at line 675 of file DDS.cc.

    - -
    -
    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDS::dump (ostream & strm) const
    -
    -virtual
    -
    - -

    dumps information about this object

    -

    Displays the pointer value of this instance and then calls parent dump

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the information to
    -
    -
    -
    Returns
    void
    - -

    Implements libdap::DapObj.

    - -

    Reimplemented in libdap::DataDDS.

    - -

    Definition at line 1835 of file DDS.cc.

    - -
    -
    - -

    ◆ filename() [1/2]

    - -
    -
    - - - - - - - -
    string libdap::DDS::filename () const
    -
    -

    Get and set the dataset's filename. This is the physical location on a disk where the dataset exists. The dataset d_name is simply a title.

    -

    File Name Accessor

    See also
    Dataset Name Accessors Gets the dataset file d_name.
    - -

    Definition at line 387 of file DDS.cc.

    - -
    -
    - -

    ◆ filename() [2/2]

    - -
    -
    - - - - - - - - -
    void libdap::DDS::filename (const string & fn)
    -
    -

    Set the dataset's filename.

    - -

    Definition at line 394 of file DDS.cc.

    - -
    -
    - -

    ◆ get_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - -
    AttrTable & libdap::DDS::get_attr_table ()
    -
    -virtual
    -
    -

    Get the attribute table for the global attributes.

    - -

    Definition at line 372 of file DDS.cc.

    - -
    -
    - -

    ◆ get_dap_major()

    - -
    -
    - - - - - -
    - - - - - - - -
    int libdap::DDS::get_dap_major () const
    -
    -inline
    -
    - -

    Get the DAP major version as sent by the client.

    - -

    Definition at line 266 of file DDS.h.

    - -
    -
    - -

    ◆ get_dap_minor()

    - -
    -
    - - - - - -
    - - - - - - - -
    int libdap::DDS::get_dap_minor () const
    -
    -inline
    -
    - -

    Get the DAP minor version as sent by the client.

    - -

    Definition at line 268 of file DDS.h.

    - -
    -
    - -

    ◆ get_das()

    - -
    -
    - - - - - - - -
    DAS * libdap::DDS::get_das ()
    -
    - -

    Get a DAS object.

    -

    Returns a new DAS that contains all of the Dataset attributes. This includes all Variable attributes as well as Global attributes. The caller is responsible for deleting the returned object.

    -
    Returns
    A newly allocated DAS object
    - -

    Definition at line 1211 of file DDS.cc.

    - -
    -
    - -

    ◆ get_dataset_name()

    - -
    -
    - - - - - - - -
    string libdap::DDS::get_dataset_name () const
    -
    -

    Get and set the dataset's d_name. This is the d_name of the dataset itself, and is not to be confused with the d_name of the file or disk on which it is stored.

    -

    Dataset Name Accessors Returns the dataset's d_name.

    - -

    Definition at line 356 of file DDS.cc.

    - -
    -
    - -

    ◆ get_factory()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseTypeFactory* libdap::DDS::get_factory () const
    -
    -inline
    -
    -

    Return the factory which makes instances of the Byte, ..., Grid type classes. Specialize BaseTypeFactory so that a DDS will be populated with your client or server's specialized types.

    Returns
    An instance of BaseTypeFactory.
    - -

    Definition at line 242 of file DDS.h.

    - -
    -
    - -

    ◆ get_namespace()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::DDS::get_namespace () const
    -
    -inline
    -
    - -

    Get the namespace associated with the DDS - likely set only by DDX responses.

    - -

    Definition at line 292 of file DDS.h.

    - -
    -
    - -

    ◆ get_request_size()

    - -
    -
    - - - - - - - - -
    int libdap::DDS::get_request_size (bool constrained)
    -
    - -

    Get the estimated response size.

    -

    Get the size of a response. This method looks at the variables in the DDS a computes the number of bytes in the response.

    -
    Note
    This version of the method does a poor job with Sequences. A better implementation would look at row-constraint-based limitations and use them for size computations. If a row-constraint is missing, return an error.
    -
    Parameters
    - - -
    constrainedShould the size of the whole DDS be used or should the current constraint be taken into account?
    -
    -
    - -

    Definition at line 565 of file DDS.cc.

    - -
    -
    - -

    ◆ get_request_xml_base()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::DDS::get_request_xml_base () const
    -
    -inline
    -
    - -

    Get the URL that will return this DDS/DDX/DataThing.

    - -

    Definition at line 286 of file DDS.h.

    - -
    -
    - -

    ◆ get_response_limit()

    - -
    -
    - - - - - -
    - - - - - - - -
    long libdap::DDS::get_response_limit ()
    -
    -inline
    -
    - -

    Get the maximum response size, in Bytes. Zero indicates no limit.

    - -

    Definition at line 298 of file DDS.h.

    - -
    -
    - -

    ◆ get_var_index()

    - -
    -
    - - - - - - - - -
    BaseType * libdap::DDS::get_var_index (int i)
    -
    - -

    Get a variable.

    -

    Return the ith variable.

    Parameters
    - - -
    ithe index
    -
    -
    -
    Returns
    The corresponding variable
    - -

    Definition at line 835 of file DDS.cc.

    - -
    -
    - -

    ◆ get_vars_iter()

    - -
    -
    - - - - - - - - -
    DDS::Vars_iter libdap::DDS::get_vars_iter (int i)
    -
    - -

    Get an iterator.

    -

    Return the iterator for the ith variable.

    Parameters
    - - -
    ithe index
    -
    -
    -
    Returns
    The corresponding Vars_iter
    - -

    Definition at line 826 of file DDS.cc.

    - -
    -
    - -

    ◆ insert_var()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void libdap::DDS::insert_var (Vars_iter i,
    BaseTypeptr 
    )
    -
    - -

    Insert a variable before the referenced element.

    -

    Insert a copy of the BaseType before the position given.

    Parameters
    - - - -
    iThe iterator that marks the position
    ptrThe BaseType object to copy and insert
    -
    -
    - -

    Definition at line 845 of file DDS.cc.

    - -
    -
    - -

    ◆ insert_var_nocopy()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void libdap::DDS::insert_var_nocopy (Vars_iter i,
    BaseTypeptr 
    )
    -
    -

    Insert the BaseType before the position given.

    Note
    Does not copy the BaseType object - that caller must not free the inserted object's pointer. This object will, however, delete the pointer when it is deleted.
    -
    Parameters
    - - - -
    iThe iterator that marks the position
    ptrThe BaseType object to insert
    -
    -
    - -

    Definition at line 862 of file DDS.cc.

    - -
    -
    - -

    ◆ mark()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::DDS::mark (const string & n,
    bool state 
    )
    -
    - -

    Mark the send_p flag of the named variable to state.

    -

    Mark the named variable by setting its SEND_P flag to STATE (true indicates that it is to be sent). Names must be fully qualified.

    -
    Note
    For aggregate types this sets each part to STATE when STATE is True. Thus, if State is True and N is `exp1.test', then both `exp1' and `test' have their SEND_P flag set to True. If STATE is False, then the SEND_P flag of the `test' is set to False, but `exp1' is left unchanged. This means that a single variable can be removed from the current projection without removing all the other children of its parent. See the mfunc set_send_p().
    -
    Returns
    True if the named variable was found, false otherwise.
    -
    Todo:
    These methods that use the btp_stack to keep track of the path from the top of a dataset to a particular variable can be rewritten to use the parent field instead.
    -
    Todo:
    All the methods that use names to identify variables should have counterparts that take BaseType pointers.
    - -

    Definition at line 1764 of file DDS.cc.

    - -
    -
    - -

    ◆ mark_all()

    - -
    -
    - - - - - - - - -
    void libdap::DDS::mark_all (bool state)
    -
    -

    Mark the member variable send_p flags to state.

    -
    Returns
    Void
    - -

    Definition at line 1821 of file DDS.cc.

    - -
    -
    - -

    ◆ num_var()

    - -
    -
    - - - - - - - -
    int libdap::DDS::num_var ()
    -
    - -

    Returns the number of variables in the DDS.

    - -

    Definition at line 873 of file DDS.cc.

    - -
    -
    - -

    ◆ parse() [1/3]

    - -
    -
    - - - - - - - - -
    void libdap::DDS::parse (string fname)
    -
    - -

    Parse a DDS from a file with the given d_name.

    - -

    Definition at line 942 of file DDS.cc.

    - -
    -
    - -

    ◆ parse() [2/3]

    - -
    -
    - - - - - - - - -
    void libdap::DDS::parse (int fd)
    -
    - -

    Parse a DDS from a file indicated by the input file descriptor.

    - -

    Definition at line 963 of file DDS.cc.

    - -
    -
    - -

    ◆ parse() [3/3]

    - -
    -
    - - - - - - - - -
    void libdap::DDS::parse (FILE * in = stdin)
    -
    - -

    Parse a DDS from a file indicated by the input file descriptor. Read the persistent representation of a DDS from the FILE *in, parse it and create a matching binary object.

    -
    Parameters
    - - -
    inRead the persistent DDS from this FILE*.
    -
    -
    -
    Exceptions
    - - - -
    InternalErrThrown if in is null
    ErrorThrown if the parse fails.
    -
    -
    - -

    Definition at line 996 of file DDS.cc.

    - -
    -
    - -

    ◆ print() [1/2]

    - -
    -
    - - - - - - - - -
    void libdap::DDS::print (FILE * out)
    -
    - -

    Print the entire DDS to the specified file.

    - -

    Definition at line 1023 of file DDS.cc.

    - -
    -
    - -

    ◆ print() [2/2]

    - -
    -
    - - - - - - - - -
    void libdap::DDS::print (ostream & out)
    -
    - -

    Print the entire DDS to the specified ostream.

    - -

    Definition at line 1032 of file DDS.cc.

    - -
    -
    - -

    ◆ print_constrained() [1/2]

    - -
    -
    - - - - - - - - -
    void libdap::DDS::print_constrained (FILE * out)
    -
    - -

    Print a constrained DDS to the specified file.

    -

    Print those parts (variables) of the DDS structure to OS that are marked to be sent after evaluating the constraint expression.

    -
    Note
    This function only works for scalars at the top level.
    -
    Returns
    true.
    - -

    Definition at line 1332 of file DDS.cc.

    - -
    -
    - -

    ◆ print_constrained() [2/2]

    - -
    -
    - - - - - - - - -
    void libdap::DDS::print_constrained (ostream & out)
    -
    - -

    Print a constrained DDS to the specified ostream.

    -

    Print those parts (variables) of the DDS structure to OS that are marked to be sent after evaluating the constraint expression.

    -
    Note
    This function only works for scalars at the top level.
    -
    Returns
    true.
    - -

    Definition at line 1350 of file DDS.cc.

    - -
    -
    - -

    ◆ print_das()

    - -
    -
    - - - - - - - - -
    void libdap::DDS::print_das (ostream & out)
    -
    - -

    write the DAS response given the attribute information in the DDS

    -

    This method provides the same DAS response as DAS::print(), but does so using the AttrTables bound to the variables in this DDS object.

    -
    Parameters
    - - -
    outWrite the DAS response to this stream
    -
    -
    - -

    Definition at line 1182 of file DDS.cc.

    - -
    -
    - -

    ◆ print_dmr()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void libdap::DDS::print_dmr (ostream & out,
    bool constrained 
    )
    -
    - -

    Print the DAP4 DMR object using a DDS.

    -

    This method prints the DMR from a DDS. If the dap version is not >= 4.0, it's an error to call this method.

    -
    Note
    Calling methods that print the DDS or DDX when get_dap_major() returns a value >= 4 is undefined. Use this method to get the DAP4 metadata response.
    -
    Parameters
    - - - -
    outWrite the XML to this stream
    constrainedShould the DMR be subject to a constraint?
    -
    -
    - -

    Definition at line 1649 of file DDS.cc.

    - -
    -
    - -

    ◆ print_xml() [1/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::DDS::print_xml (FILE * out,
    bool constrained,
    const string & blob = "" 
    )
    -
    -

    Print an XML representation of this DDS. This method is used to generate the part of the DDX response. The Dataset tag is not written by this code. The caller of this method must handle writing that and including the dataBLOB tag.

    -
    Parameters
    - - - - -
    outDestination.
    constrainedTrue if the output should be limited to just those variables that are in the projection of the current constraint expression.
    blobThe dataBLOB href.
    -
    -
    -
    Deprecated:
    - -

    Definition at line 1378 of file DDS.cc.

    - -
    -
    - -

    ◆ print_xml() [2/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::DDS::print_xml (ostream & out,
    bool constrained,
    const string & blob = "" 
    )
    -
    -

    Print an XML representation of this DDS. This method is used to generate the DDX response. The Dataset tag is not written by this code. The caller of this method must handle writing that and including the dataBLOB tag.

    -
    Parameters
    - - - - -
    outDestination ostream.
    constrainedTrue if the output should be limited to just those variables that are in the projection of the current constraint expression.
    blobThe dataBLOB href.
    -
    -
    -
    Deprecated:
    - -

    Definition at line 1397 of file DDS.cc.

    - -
    -
    - -

    ◆ print_xml_writer()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::DDS::print_xml_writer (ostream & out,
    bool constrained,
    const string & blob = "" 
    )
    -
    -

    Print the DDX. This code uses the libxml2 'TextWriter' interface; something that seems to be a good compromise between doing it by hand (although more verbose it is also more reliable) and DOM.

    -
    Note
    This code handles several different versions of DAP in a fairly crude way. I've broken it up into three different responses: DAP2, DAP3.2 and DAP4.
    -
    Parameters
    - - - - -
    outWrite the XML to this output sink
    constrainedTrue if the only variables to print are those in the current projection. If true, this will also suppress printing attributes.
    blobThis is an href (DAP2) or a cid (DAP3.4 and 4). The href points to the binary data; the cid is the M-MIME separator for the binary data.
    -
    -
    - -

    Definition at line 1433 of file DDS.cc.

    - -
    -
    - -

    ◆ set_dap_major()

    - -
    -
    - - - - - - - - -
    void libdap::DDS::set_dap_major (int p)
    -
    -
    Deprecated:
    -
    Deprecated:
    - -

    Definition at line 404 of file DDS.cc.

    - -
    -
    - -

    ◆ set_dap_minor()

    - -
    -
    - - - - - - - - -
    void libdap::DDS::set_dap_minor (int p)
    -
    -
    Deprecated:
    -
    Deprecated:
    - -

    Definition at line 423 of file DDS.cc.

    - -
    -
    - -

    ◆ set_dap_version() [1/2]

    - -
    -
    - - - - - - - - -
    void libdap::DDS::set_dap_version (const string & v = "2.0")
    -
    -

    Given the DAP protocol version, parse that string and set the DDS fields.

    -
    Parameters
    - - -
    vThe version string.
    -
    -
    - -

    Definition at line 440 of file DDS.cc.

    - -
    -
    - -

    ◆ set_dap_version() [2/2]

    - -
    -
    - - - - - - - - -
    void libdap::DDS::set_dap_version (double d)
    -
    -
    Deprecated:
    -

    Old way to set the DAP version.

    -
    Note
    Don't use this - two interfaces to set the version number is overkill
    -
    Parameters
    - - -
    dThe protocol version requested by the client, as a double.
    -
    -
    -
    Deprecated:
    - -

    Definition at line 488 of file DDS.cc.

    - -
    -
    - -

    ◆ set_dataset_name()

    - -
    -
    - - - - - - - - -
    void libdap::DDS::set_dataset_name (const string & n)
    -
    -

    Sets the dataset d_name.

    - -

    Definition at line 363 of file DDS.cc.

    - -
    -
    - -

    ◆ set_factory()

    - -
    -
    - - - - - -
    - - - - - - - - -
    BaseTypeFactory* libdap::DDS::set_factory (BaseTypeFactoryfactory)
    -
    -inline
    -
    -

    Set the factory class used to instantiate variables during the parse of a DDS.

    Parameters
    - - -
    factoryThe factory this DDS should use. Caller must free factory when done with this DDS.
    -
    -
    -
    Returns
    The old factory.
    -
    See also
    BaseTypeFactory
    - -

    Definition at line 253 of file DDS.h.

    - -
    -
    - -

    ◆ set_namespace()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDS::set_namespace (const string & ns)
    -
    -inline
    -
    - -

    Set the namespace for this DDS/DDX object/response.

    - -

    Definition at line 295 of file DDS.h.

    - -
    -
    - -

    ◆ set_request_xml_base()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDS::set_request_xml_base (const string & xb)
    -
    -inline
    -
    -
    See also
    get_request_xml_base
    - -

    Definition at line 289 of file DDS.h.

    - -
    -
    - -

    ◆ set_response_limit()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDS::set_response_limit (long size)
    -
    -inline
    -
    -

    Set the maximum response size. Zero is the default value. The size is given in kilobytes (but stored internally as the number of bytes).

    Parameters
    - - -
    sizeThe maximum size of the response in kilobytes.
    -
    -
    - -

    Definition at line 303 of file DDS.h.

    - -
    -
    - -

    ◆ tag_nested_sequences()

    - -
    -
    - - - - - - - -
    void libdap::DDS::tag_nested_sequences ()
    -
    - -

    Traverse DDS, set Sequence leaf nodes.

    - -

    Definition at line 930 of file DDS.cc.

    - -
    -
    - -

    ◆ transfer_attributes()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDS::transfer_attributes (DASdas)
    -
    -virtual
    -
    -

    This is the main method used to transfer attributes from a DAS object into a DDS. This uses the BaseType::transfer_attributes() method and the various implementations found here (in the constructors classes) and in handlers.

    -

    This method uses a deep copy to transfer the attributes, so it is safe to delete the source DAS object passed to this method once it is done.

    -
    Note
    To accommodate oddly built DAS objects produced by various handlers, specialize the methods there.
    -
    Parameters
    - - -
    dasTransfer (copy) attributes from this DAS object.
    -
    -
    - -

    Definition at line 286 of file DDS.cc.

    - -
    -
    - -

    ◆ var() [1/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::DDS::var (const string & n,
    BaseType::btp_stack & s 
    )
    -
    -

    Search for for variable n as above but record all compound type variables which ultimately contain n on s. This stack can then be used to mark the contained compound-type variables as part of the current projection.

    -
    Returns
    A BaseType pointer to the variable n or 0 if n could not be found.
    - -

    Definition at line 692 of file DDS.cc.

    - -
    -
    - -

    ◆ var() [2/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::DDS::var (const string & n,
    BaseType::btp_stack * s = 0 
    )
    -
    - -

    Find the variable with the given d_name.

    -

    Returns a pointer to the named variable. If the d_name contains one or more field separators then the function looks for a variable whose name matches exactly. If the d_name contains no field separators then the function looks first in the top level and then in all subsequent levels and returns the first occurrence found. In general, this function searches constructor types in the order in which they appear in the DDS, but there is no requirement that it do so.

    -
    Note
    If a dataset contains two constructor types which have field names that are the same (say point.x and pair.x) you should use fully qualified names to get each of those variables.
    -
    Parameters
    - - - -
    nThe name of the variable to find.
    sIf given, this value-result parameter holds the path to the returned BaseType. Thus, this method can return the FQN for the variable n.
    -
    -
    -
    Returns
    A BaseType pointer to the variable or null if not found.
    - -

    Definition at line 716 of file DDS.cc.

    - -
    -
    - -

    ◆ var_begin()

    - -
    -
    - - - - - - - -
    DDS::Vars_iter libdap::DDS::var_begin ()
    -
    - -

    Return an iterator to the first variable.

    -

    Returns the first variable in the DDS.

    - -

    Definition at line 799 of file DDS.cc.

    - -
    -
    - -

    ◆ var_end()

    - -
    -
    - - - - - - - -
    DDS::Vars_iter libdap::DDS::var_end ()
    -
    - -

    Return an iterator.

    - -

    Definition at line 811 of file DDS.cc.

    - -
    -
    - -

    ◆ var_rbegin()

    - -
    -
    - - - - - - - -
    DDS::Vars_riter libdap::DDS::var_rbegin ()
    -
    - -

    Return a reverse iterator.

    - -

    Definition at line 805 of file DDS.cc.

    - -
    -
    - -

    ◆ var_rend()

    - -
    -
    - - - - - - - -
    DDS::Vars_riter libdap::DDS::var_rend ()
    -
    - -

    Return a reverse iterator.

    - -

    Definition at line 817 of file DDS.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1DDS.js b/html/classlibdap_1_1DDS.js deleted file mode 100644 index 5cf381362..000000000 --- a/html/classlibdap_1_1DDS.js +++ /dev/null @@ -1,80 +0,0 @@ -var classlibdap_1_1DDS = -[ - [ "Vars_citer", "classlibdap_1_1DDS.html#ae18628332086dd04361e0ba745cd91ca", null ], - [ "Vars_iter", "classlibdap_1_1DDS.html#a5140f67d8f7eecf0a260d8a5d9fc39c5", null ], - [ "Vars_riter", "classlibdap_1_1DDS.html#a03816194d9596596926d6c8fa1872604", null ], - [ "DDS", "classlibdap_1_1DDS.html#a9c1073a70ad827f48791d62c472399e3", null ], - [ "DDS", "classlibdap_1_1DDS.html#a4baeb0eea6ebee7c0ed684817aca1f27", null ], - [ "DDS", "classlibdap_1_1DDS.html#aee64217da3a62758690e62767e25168d", null ], - [ "~DDS", "classlibdap_1_1DDS.html#a090d0721ce2fd39ea411646cd9ffc264", null ], - [ "add_var", "classlibdap_1_1DDS.html#ade87418e97ee5c7efd92279cd41e421c", null ], - [ "add_var_nocopy", "classlibdap_1_1DDS.html#a0a9c873e5cbd8e75b4427875a38455bd", null ], - [ "check_semantics", "classlibdap_1_1DDS.html#a0d1bf35c18c77a15bb266a895f99f1c6", null ], - [ "container", "classlibdap_1_1DDS.html#add7c78964a7574239e2d3dd6717a0f31", null ], - [ "container_name", "classlibdap_1_1DDS.html#aaca262d193346e04d4a6caa7acd117e2", null ], - [ "container_name", "classlibdap_1_1DDS.html#a025d5fef84ebc2d958a59e4297883d20", null ], - [ "del_var", "classlibdap_1_1DDS.html#a7030e5bf19371742219f14d6b3aeeedf", null ], - [ "del_var", "classlibdap_1_1DDS.html#ac06f060770215ad790aa5437e567a215", null ], - [ "del_var", "classlibdap_1_1DDS.html#a6ae053eca0eadcfa1368da8486bf5e06", null ], - [ "dump", "classlibdap_1_1DDS.html#afb88b506187aac19b45cfe8b7d28af86", null ], - [ "duplicate", "classlibdap_1_1DDS.html#a88195f7e5c14124b3d70d07b290dcea4", null ], - [ "exact_match", "classlibdap_1_1DDS.html#a6f4fb3cf9a40d44e2e154ab1c0096a5d", null ], - [ "filename", "classlibdap_1_1DDS.html#a1106220194c07459b481a2c190f62482", null ], - [ "filename", "classlibdap_1_1DDS.html#a3dc8062cbb44db0d9b5f47b1109effd9", null ], - [ "get_attr_table", "classlibdap_1_1DDS.html#a177e3df069cb0dcb3b30c0dcd236f8b3", null ], - [ "get_dap_major", "classlibdap_1_1DDS.html#aced9c6fed3f727de8bff5d759780b966", null ], - [ "get_dap_minor", "classlibdap_1_1DDS.html#a8ecd1a8f622ead2c379567295f6b99a4", null ], - [ "get_dap_version", "classlibdap_1_1DDS.html#a1ed5890202999a874b2edafd18f3054e", null ], - [ "get_das", "classlibdap_1_1DDS.html#aa02904d9b79b8d7a92b4f3bcbacc68aa", null ], - [ "get_das", "classlibdap_1_1DDS.html#a7bff1a465b6b26e5d1ab9633ae49c6f0", null ], - [ "get_dataset_name", "classlibdap_1_1DDS.html#a60042aabde37ccaefd56174641284673", null ], - [ "get_dmr_version", "classlibdap_1_1DDS.html#abee41546bc1b77d4836716be64538763", null ], - [ "get_factory", "classlibdap_1_1DDS.html#a28fe4bd419122bd8a82ededae0ab4a8b", null ], - [ "get_namespace", "classlibdap_1_1DDS.html#a3c066d28e6aec58d2169a9099d0979a2", null ], - [ "get_request_size", "classlibdap_1_1DDS.html#a51bc473c9614419e880378686e7462b2", null ], - [ "get_request_xml_base", "classlibdap_1_1DDS.html#ac2c33bda0c2148fce3da754f27a0323f", null ], - [ "get_response_limit", "classlibdap_1_1DDS.html#af37da63ace68d6f07649913ac7ab95d2", null ], - [ "get_timeout", "classlibdap_1_1DDS.html#a24bd3f9014033dbf054b901028427c33", null ], - [ "get_var_index", "classlibdap_1_1DDS.html#a5161e73a84f49c759bd411c8a3c3c356", null ], - [ "get_vars_iter", "classlibdap_1_1DDS.html#a415f3083d3864eb04d6508772b3c4128", null ], - [ "insert_var", "classlibdap_1_1DDS.html#a828c46d43447678bd736135946c9bacc", null ], - [ "insert_var_nocopy", "classlibdap_1_1DDS.html#abf72254ae41d26940b300c792611fa4e", null ], - [ "leaf_match", "classlibdap_1_1DDS.html#a2f60c6b71b5534d5b16c14c9c1dbed00", null ], - [ "mark", "classlibdap_1_1DDS.html#a88c063f273e5aa68b38df4d8e09fb426", null ], - [ "mark_all", "classlibdap_1_1DDS.html#a03c7fb8494b890e227279e70ba4b483e", null ], - [ "num_var", "classlibdap_1_1DDS.html#a3e99a99da58051c745cc8a3ab82e3b38", null ], - [ "operator=", "classlibdap_1_1DDS.html#afa02245fb564ba26b76c2fd2fd1634ed", null ], - [ "parse", "classlibdap_1_1DDS.html#a733c8e49ed42ab47d74afe68056340e6", null ], - [ "parse", "classlibdap_1_1DDS.html#a3af2c3d3707f1a9c91d9c00937bb7325", null ], - [ "parse", "classlibdap_1_1DDS.html#a02857d9355cd01dec621ae0bdf453075", null ], - [ "print", "classlibdap_1_1DDS.html#a471a9e61f7154518b040a7818fa5a2b5", null ], - [ "print", "classlibdap_1_1DDS.html#a535b5900c31f0038061f4aef5fa1c6c1", null ], - [ "print_constrained", "classlibdap_1_1DDS.html#aac3dca048c1d085d72b44df8b7088cd5", null ], - [ "print_constrained", "classlibdap_1_1DDS.html#ab2e1cacd542373312d5154565b3c1571", null ], - [ "print_das", "classlibdap_1_1DDS.html#afb0339f6ff59ad01a00cf132d68cb548", null ], - [ "print_dmr", "classlibdap_1_1DDS.html#a06da8fda5e65e039be2000f8fd22d295", null ], - [ "print_xml", "classlibdap_1_1DDS.html#a80902a2bd86bd08392abbd3178a49b8b", null ], - [ "print_xml", "classlibdap_1_1DDS.html#af319354a044d02ea89732160131004dc", null ], - [ "print_xml_writer", "classlibdap_1_1DDS.html#af1b1fca603ab8d48220218a7771d064c", null ], - [ "set_dap_major", "classlibdap_1_1DDS.html#a03062495c46ed3fad9fa0a5f6f6e8d00", null ], - [ "set_dap_minor", "classlibdap_1_1DDS.html#a358929d8f517dcdfe439037fb402351b", null ], - [ "set_dap_version", "classlibdap_1_1DDS.html#adcb80ef551e544b1cf527163cf54a30a", null ], - [ "set_dap_version", "classlibdap_1_1DDS.html#a38cc72c3b47c508d597535b9c9a39c37", null ], - [ "set_dataset_name", "classlibdap_1_1DDS.html#a0138ce1c3b26968f968a6b723ec70dfb", null ], - [ "set_factory", "classlibdap_1_1DDS.html#abd73e1da6d32409062399c6e3333814a", null ], - [ "set_namespace", "classlibdap_1_1DDS.html#a0d1c1e04bc651072a5a56210d86dd801", null ], - [ "set_request_xml_base", "classlibdap_1_1DDS.html#a1872d99f10b845eb15960916229a2457", null ], - [ "set_response_limit", "classlibdap_1_1DDS.html#a1d8dc5bcfaf287b360a10857837da952", null ], - [ "set_timeout", "classlibdap_1_1DDS.html#ac97d9bc59c742b46614779f9381baf6a", null ], - [ "tag_nested_sequences", "classlibdap_1_1DDS.html#a9d4421c2ccfdbc5ebd4a7d963ab53795", null ], - [ "timeout_off", "classlibdap_1_1DDS.html#a6740f99a5fc64640505924c5603ace0a", null ], - [ "timeout_on", "classlibdap_1_1DDS.html#a8cd9b6a34f5e1a49665de3189e141de8", null ], - [ "transfer_attributes", "classlibdap_1_1DDS.html#a2810a944fbdc7d21b08f2d8c19022b52", null ], - [ "var", "classlibdap_1_1DDS.html#a74c67b99babe3317a0f76c8d8f7ba37a", null ], - [ "var", "classlibdap_1_1DDS.html#ab53f39cffc45142b4cb38117e5650487", null ], - [ "var_begin", "classlibdap_1_1DDS.html#aac98f248cd5730a8769f9d71af9788d3", null ], - [ "var_end", "classlibdap_1_1DDS.html#ad204bbd6eed8d440fb996f41bc986058", null ], - [ "var_rbegin", "classlibdap_1_1DDS.html#a395947ea7f5abab45e7bfe7541ec9dc2", null ], - [ "var_rend", "classlibdap_1_1DDS.html#a098d88f09002ad80e27acdb81a52659e", null ], - [ "DDSTest", "classlibdap_1_1DDS.html#a93e283c2829a7c7fb6cc2bf6c990bfbc", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1DDS__inherit__graph.map b/html/classlibdap_1_1DDS__inherit__graph.map deleted file mode 100644 index 0ba725b2b..000000000 --- a/html/classlibdap_1_1DDS__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1DDS__inherit__graph.md5 b/html/classlibdap_1_1DDS__inherit__graph.md5 deleted file mode 100644 index a9cfc0361..000000000 --- a/html/classlibdap_1_1DDS__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -402d2270002de764d8d007800989a74e \ No newline at end of file diff --git a/html/classlibdap_1_1DDS__inherit__graph.png b/html/classlibdap_1_1DDS__inherit__graph.png deleted file mode 100644 index e2ae0c7e1b07331d6a10696ec3ca1d6800091e53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49037 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 - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::DDXParseFailed Member List
    -
    -
    - -

    This is the complete list of members for libdap::DDXParseFailed, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    _error_code (defined in libdap::Error)libdap::Errorprotected
    _error_message (defined in libdap::Error)libdap::Errorprotected
    d_file (defined in libdap::Error)libdap::Errorprotected
    d_line (defined in libdap::Error)libdap::Errorprotected
    DDXParseFailed() (defined in libdap::DDXParseFailed)libdap::DDXParseFailedinline
    DDXParseFailed(const string &msg) (defined in libdap::DDXParseFailed)libdap::DDXParseFailedinline
    Error(ErrorCode ec, std::string msg, std::string file="", int line=0)libdap::Error
    Error(std::string msg, std::string file="", int line=0)libdap::Error
    Error()libdap::Error
    Error(const Error &copy_from) (defined in libdap::Error)libdap::Error
    get_error_code() constlibdap::Error
    get_error_message() constlibdap::Error
    get_file() const (defined in libdap::Error)libdap::Errorinline
    get_line() const (defined in libdap::Error)libdap::Errorinline
    OK() constlibdap::Error
    operator=(const Error &rhs) (defined in libdap::Error)libdap::Error
    parse(FILE *fp)libdap::Error
    print(FILE *out) constlibdap::Error
    print(std::ostream &out) constlibdap::Error
    set_error_code(ErrorCode ec=undefined_error)libdap::Error
    set_error_message(std::string msg="")libdap::Error
    set_file(std::string f) (defined in libdap::Error)libdap::Errorinline
    set_line(int l) (defined in libdap::Error)libdap::Errorinline
    what() constlibdap::Errorinlinevirtual
    ~Error() (defined in libdap::Error)libdap::Errorvirtual
    -
    - - - - diff --git a/html/classlibdap_1_1DDXParseFailed.html b/html/classlibdap_1_1DDXParseFailed.html deleted file mode 100644 index 98cc7a34e..000000000 --- a/html/classlibdap_1_1DDXParseFailed.html +++ /dev/null @@ -1,453 +0,0 @@ - - - - - - - -libdap: libdap::DDXParseFailed Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::DDXParseFailed Class Reference
    -
    -
    - -

    #include <DDXExceptions.h>

    -
    -Inheritance diagram for libdap::DDXParseFailed:
    -
    -
    Inheritance graph
    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    DDXParseFailed (const string &msg)
     
    ErrorCode get_error_code () const
     
    std::string get_error_message () const
     
    -std::string get_file () const
     
    -int get_line () const
     
    bool OK () const
     Is the Error object valid? More...
     
    bool parse (FILE *fp)
     Parse an Error object. More...
     
    void print (FILE *out) const
     
    void print (std::ostream &out) const
     
    void set_error_code (ErrorCode ec=undefined_error)
     
    void set_error_message (std::string msg="")
     
    -void set_file (std::string f)
     
    -void set_line (int l)
     
    virtual const char * what () const throw ()
     The pointer is valid only for the lifetime of the Error instance. jhrg 9/22/20. More...
     
    - - - - - - - - - -

    -Protected Attributes

    -ErrorCode _error_code
     
    -std::string _error_message
     
    -std::string d_file
     
    -int d_line
     
    -

    Detailed Description

    -

    Thrown when the DDX response cannot be parsed..

    - -

    Definition at line 37 of file DDXExceptions.h.

    -

    Member Function Documentation

    - -

    ◆ get_error_code()

    - -
    -
    - - - - - -
    - - - - - - - -
    ErrorCode libdap::Error::get_error_code () const
    -
    -inherited
    -
    -

    Get the ErrorCode for this instance.

    - -

    Definition at line 249 of file Error.cc.

    - -
    -
    - -

    ◆ get_error_message()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::Error::get_error_message () const
    -
    -inherited
    -
    -

    Return the current error message.

    - -

    Definition at line 278 of file Error.cc.

    - -
    -
    - -

    ◆ OK()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::Error::OK () const
    -
    -inherited
    -
    - -

    Is the Error object valid?

    -

    Use this function to determine whether an Error object is valid. To be a valid, an Error object must either be: 1) empty or contain a message and a code.

    -
    Returns
    TRUE if the object is valid, FALSE otherwise.
    - -

    Definition at line 135 of file Error.cc.

    - -
    -
    - -

    ◆ parse()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool libdap::Error::parse (FILE * fp)
    -
    -inherited
    -
    - -

    Parse an Error object.

    -

    Given an input stream (FILE *) fp, parse an Error object from stream. Values for fields of the Error object are parsed and this is set accordingly. This is how a client program receives an error object from a server.

    -
    Parameters
    - - -
    fpA valid file pointer to an input stream.
    -
    -
    -
    Returns
    TRUE if no error was detected, FALSE otherwise.
    - -

    Definition at line 158 of file Error.cc.

    - -
    -
    - -

    ◆ print() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Error::print (FILE * out) const
    -
    -inherited
    -
    -

    Creates a printable representation of the Error object. It is suitable for framing, and also for printing and sending over a network.

    -

    The printed representation produced by this function can be parsed by the parse() member function. Thus parse and print form a symmetrical pair that can be used to send and receive an Error object over the network in a MIME document.

    -
    Parameters
    - - -
    outA pointer to the output stream on which the Error object is to be rendered.
    -
    -
    - -

    Definition at line 200 of file Error.cc.

    - -
    -
    - -

    ◆ print() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Error::print (std::ostream & out) const
    -
    -inherited
    -
    -

    Creates a printable representation of the Error object. It is suitable for framing, and also for printing and sending over a network.

    -

    The printed representation produced by this function can be parsed by the parse() member function. Thus parse and print form a symmetrical pair that can be used to send and receive an Error object over the network in a MIME document.

    -
    Parameters
    - - -
    strmA reference to the output stream on which the Error object is to be rendered.
    -
    -
    - -

    Definition at line 229 of file Error.cc.

    - -
    -
    - -

    ◆ set_error_code()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Error::set_error_code (ErrorCode ec = undefined_error)
    -
    -inherited
    -
    -

    Set the ErrorCode. If the current error message has not been set, use ec to set the error message. The resulting error message string is the same as the ErrorCode name. If ec is not within the range of values for an OPeNDAP ErrorCode, the error message is left unchanged.

    -
    Parameters
    - - -
    ecThe new ErrorCode value.
    -
    -
    - -

    Definition at line 262 of file Error.cc.

    - -
    -
    - -

    ◆ set_error_message()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Error::set_error_message (std::string msg = "")
    -
    -inherited
    -
    -

    Set the error message.

    - -

    Definition at line 287 of file Error.cc.

    - -
    -
    - -

    ◆ what()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - -
    virtual const char* libdap::Error::what () const
    throw (
    )
    -
    -inlinevirtualinherited
    -
    - -

    The pointer is valid only for the lifetime of the Error instance. jhrg 9/22/20.

    - -

    Definition at line 127 of file Error.h.

    - -
    -
    -
    The documentation for this class was generated from the following file: -
    -
    - - - - diff --git a/html/classlibdap_1_1DDXParseFailed.js b/html/classlibdap_1_1DDXParseFailed.js deleted file mode 100644 index 314063e4d..000000000 --- a/html/classlibdap_1_1DDXParseFailed.js +++ /dev/null @@ -1,22 +0,0 @@ -var classlibdap_1_1DDXParseFailed = -[ - [ "DDXParseFailed", "classlibdap_1_1DDXParseFailed.html#a6444854bd98d8b24bffab03cf7c3392e", null ], - [ "DDXParseFailed", "classlibdap_1_1DDXParseFailed.html#a68d582abdf8f1af822f5290b26598cc1", null ], - [ "get_error_code", "classlibdap_1_1DDXParseFailed.html#aaca0caca09e939602cade604cbc9824f", null ], - [ "get_error_message", "classlibdap_1_1DDXParseFailed.html#ab24a61e4974aae62962a40f9975e674c", null ], - [ "get_file", "classlibdap_1_1DDXParseFailed.html#a5165d667334a9fd6f337735c2b57e28c", null ], - [ "get_line", "classlibdap_1_1DDXParseFailed.html#a44b91121bdbc7d9d389db3440e2299cf", null ], - [ "OK", "classlibdap_1_1DDXParseFailed.html#acf3ab60821773bd8b62284750b02cfc0", null ], - [ "parse", "classlibdap_1_1DDXParseFailed.html#ac705b3c1cfab1f7530d66a974eb0e8b6", null ], - [ "print", "classlibdap_1_1DDXParseFailed.html#a552d711be27e6695854bd2b977a5cf31", null ], - [ "print", "classlibdap_1_1DDXParseFailed.html#a4c58ef196c2b247bd37529bb7ad6a666", null ], - [ "set_error_code", "classlibdap_1_1DDXParseFailed.html#a47c0f4b6a38d8ca075d1056076d2845d", null ], - [ "set_error_message", "classlibdap_1_1DDXParseFailed.html#a3ca90d33bf1c95529c9eefdfe8646e34", null ], - [ "set_file", "classlibdap_1_1DDXParseFailed.html#a94a26bbdd9f4ede88c74de97e9e9e98d", null ], - [ "set_line", "classlibdap_1_1DDXParseFailed.html#a63a9c54019daa8b406c4287faba5e60a", null ], - [ "what", "classlibdap_1_1DDXParseFailed.html#accc5eeb469c8c18ec16dbf7fefe3cc41", null ], - [ "_error_code", "classlibdap_1_1DDXParseFailed.html#a30226017ae9dfbe2e27be502b4fbdef4", null ], - [ "_error_message", "classlibdap_1_1DDXParseFailed.html#a87f74c6be2134736ca1e400c90a3d571", null ], - [ "d_file", "classlibdap_1_1DDXParseFailed.html#ac947a4c3d229d7ec505ad921a77702ea", null ], - [ "d_line", "classlibdap_1_1DDXParseFailed.html#af7d939b4b8154518f870d5424ff55f62", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1DDXParseFailed__inherit__graph.map b/html/classlibdap_1_1DDXParseFailed__inherit__graph.map deleted file mode 100644 index b1fa653f8..000000000 --- a/html/classlibdap_1_1DDXParseFailed__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1DDXParseFailed__inherit__graph.md5 b/html/classlibdap_1_1DDXParseFailed__inherit__graph.md5 deleted file mode 100644 index e4b7b48c9..000000000 --- a/html/classlibdap_1_1DDXParseFailed__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -7d6300c148dfa4634804ed48bebfa28f \ No newline at end of file diff --git a/html/classlibdap_1_1DDXParseFailed__inherit__graph.png b/html/classlibdap_1_1DDXParseFailed__inherit__graph.png deleted file mode 100644 index 52cb629d93fab38657f1f96945f4b2834d243edb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21510 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 - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::DDXParser Member List
    -
    -
    - -

    This is the complete list of members for libdap::DDXParser, including all inherited members.

    - - - - - - - - - - - - - - - -
    ddx_end_document(void *parser)libdap::DDXParserstatic
    ddx_fatal_error(void *parser, const char *msg,...)libdap::DDXParserstatic
    ddx_get_cdata(void *parser, const xmlChar *value, int len)libdap::DDXParserstatic
    ddx_get_characters(void *parser, const xmlChar *ch, int len)libdap::DDXParserstatic
    ddx_get_entity(void *parser, const xmlChar *name)libdap::DDXParserstatic
    ddx_ignoreable_whitespace(void *parser, const xmlChar *ch, int len)libdap::DDXParserstatic
    ddx_sax2_end_element(void *parser, const xmlChar *localname, const xmlChar *prefix, const xmlChar *URI) (defined in libdap::DDXParser)libdap::DDXParserstatic
    ddx_sax2_start_element(void *parser, const xmlChar *localname, const xmlChar *prefix, const xmlChar *URI, int nb_namespaces, const xmlChar **namespaces, int nb_attributes, int nb_defaulted, const xmlChar **attributes) (defined in libdap::DDXParser)libdap::DDXParserstatic
    ddx_start_document(void *parser)libdap::DDXParserstatic
    DDXParser(BaseTypeFactory *factory) (defined in libdap::DDXParser)libdap::DDXParserinline
    DDXParserTest (defined in libdap::DDXParser)libdap::DDXParserfriend
    intern(const string &document, DDS *dest_dds, string &cid)libdap::DDXParser
    intern_stream(FILE *in, DDS *dds, string &cid, const string &boundary="")libdap::DDXParser
    intern_stream(istream &in, DDS *dds, string &cid, const string &boundary="")libdap::DDXParser
    -
    - - - - diff --git a/html/classlibdap_1_1DDXParser.html b/html/classlibdap_1_1DDXParser.html deleted file mode 100644 index 6e32e2689..000000000 --- a/html/classlibdap_1_1DDXParser.html +++ /dev/null @@ -1,594 +0,0 @@ - - - - - - - -libdap: libdap::DDXParser Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::DDXParser Class Reference
    -
    -
    - -

    #include <DDXParserSAX2.h>

    - - - - - - - - - - - -

    -Public Member Functions

    DDXParser (BaseTypeFactory *factory)
     
    void intern (const string &document, DDS *dest_dds, string &cid)
     
    void intern_stream (FILE *in, DDS *dds, string &cid, const string &boundary="")
     Read the DDX from a stream instead of a file. More...
     
    void intern_stream (istream &in, DDS *dds, string &cid, const string &boundary="")
     
    - - - - - - - - - - - - - - - - - - - - - -

    -Static Public Member Functions

    SAX Parser Callbacks

    These methods are declared static in the class header. This gives them C linkage which allows them to be used as callbacks by the SAX parser engine.

    -
    static void ddx_start_document (void *parser)
     
    static void ddx_end_document (void *parser)
     
    -static void ddx_sax2_start_element (void *parser, const xmlChar *localname, const xmlChar *prefix, const xmlChar *URI, int nb_namespaces, const xmlChar **namespaces, int nb_attributes, int nb_defaulted, const xmlChar **attributes)
     
    -static void ddx_sax2_end_element (void *parser, const xmlChar *localname, const xmlChar *prefix, const xmlChar *URI)
     
    static void ddx_get_characters (void *parser, const xmlChar *ch, int len)
     
    static void ddx_ignoreable_whitespace (void *parser, const xmlChar *ch, int len)
     
    static void ddx_get_cdata (void *parser, const xmlChar *value, int len)
     
    static xmlEntityPtr ddx_get_entity (void *parser, const xmlChar *name)
     
    static void ddx_fatal_error (void *parser, const char *msg,...)
     
    - - - -

    -Friends

    -class DDXParserTest
     
    -

    Detailed Description

    -

    Parse the XML text which encodes the network/persistent representation of the DDX object. In the current implementation, the DDX is held by an instance of the class DDS which in turn holds variables which include attributes. That is, the binary implementation of a DDX uses the old DDS, BaseType and AttrTable classes, albeit arranged in a slightly new way.

    -

    This parser for the DDX document uses the SAX interface of libxml2. Static methods are used as callbacks for the SAX parser. These static methods are public because making them private complicates compilation. They should not be called by anything other than the intern method. They do not throw exceptions because exceptions from within callbacks are not reliable or portable. To signal errors, the methods record information in the DDXParser object. Once the error handler is called, construction of an DDX/DDS object ends even though the SAX parser still calls the various callback functions. The parser treats warnings, errors and fatal_errors the same way; when any are found parsing stops. The intern method throws an DDXParseFailed exception if an error was found.

    -

    Note that this class uses the C++-supplied default definitions for the default and copy constructors as well as the destructor and assignment operator.

    -
    See also
    DDS
    - -

    Definition at line 79 of file DDXParserSAX2.h.

    -

    Member Function Documentation

    - -

    ◆ ddx_end_document()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDXParser::ddx_end_document (void * p)
    -
    -static
    -
    -

    Clean up after finishing a parse.

    Parameters
    - - -
    pThe SAX parser
    -
    -
    - -

    Definition at line 472 of file DDXParserSAX2.cc.

    - -
    -
    - -

    ◆ ddx_fatal_error()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::DDXParser::ddx_fatal_error (void * p,
    const char * msg,
     ... 
    )
    -
    -static
    -
    -

    Process an XML fatal error. Note that SAX provides for warnings, errors and fatal errors. This code treats them all as fatal errors since there's typically no way to tell a user about the error since there's often no user interface for this software.

    -
    Parameters
    - - - -
    pThe SAX parser
    msgA printf-style format string.
    -
    -
    - -

    Definition at line 1000 of file DDXParserSAX2.cc.

    - -
    -
    - -

    ◆ ddx_get_cdata()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::DDXParser::ddx_get_cdata (void * p,
    const xmlChar * value,
    int len 
    )
    -
    -static
    -
    -

    Get characters in a cdata block. DAP does not use CData, but XML in an OtherXML attribute (the value of that DAP attribute) might use it. This callback also allows CData when the parser is in the 'parser_unknown' state since some future DAP element might use it.

    - -

    Definition at line 964 of file DDXParserSAX2.cc.

    - -
    -
    - -

    ◆ ddx_get_characters()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::DDXParser::ddx_get_characters (void * p,
    const xmlChar * ch,
    int len 
    )
    -
    -static
    -
    -

    Process/accumulate character data. This may be called more than once for one logical clump of data. Only save character data when processing 'value' elements; throw away all other characters.

    - -

    Definition at line 920 of file DDXParserSAX2.cc.

    - -
    -
    - -

    ◆ ddx_get_entity()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    xmlEntityPtr libdap::DDXParser::ddx_get_entity (void * parser,
    const xmlChar * name 
    )
    -
    -static
    -
    -

    Handle the standard XML entities.

    -
    Parameters
    - - - -
    parserThe SAX parser
    nameThe XML entity.
    -
    -
    - -

    Definition at line 988 of file DDXParserSAX2.cc.

    - -
    -
    - -

    ◆ ddx_ignoreable_whitespace()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::DDXParser::ddx_ignoreable_whitespace (void * p,
    const xmlChar * ch,
    int len 
    )
    -
    -static
    -
    -

    Read whitespace that's not really important for content. This is used only for the OtherXML attribute type to preserve formating of the XML. Doing so makes the attribute value far easier to read.

    - -

    Definition at line 944 of file DDXParserSAX2.cc.

    - -
    -
    - -

    ◆ ddx_start_document()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDXParser::ddx_start_document (void * p)
    -
    -static
    -
    -

    Initialize the SAX parser state object. This object is passed to each callback as a void pointer. The initial state is parser_start.

    -
    Parameters
    - - -
    pThe SAX parser
    -
    -
    - -

    Definition at line 451 of file DDXParserSAX2.cc.

    - -
    -
    - -

    ◆ intern()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::DDXParser::intern (const string & document,
    DDSdest_dds,
    string & cid 
    )
    -
    -

    Parse a DDX document stored in a file. The XML in the document is parsed and a binary DDX is built. This implementation stores the result in a DDS object where each instance of BaseType can hold an AttrTable object.

    -
    Parameters
    - - - - -
    documentRead the DDX from this file.
    dest_ddsValue/result parameter; dumps the information to this DDS instance.
    cidValue/result parameter; puts the href which references the CID.
    -
    -
    -
    Exceptions
    - - -
    DDXParseFailedThrown if the XML document could not be read or parsed.
    -
    -
    - -

    Definition at line 1196 of file DDXParserSAX2.cc.

    - -
    -
    - -

    ◆ intern_stream() [1/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::DDXParser::intern_stream (FILE * in,
    DDSdest_dds,
    string & cid,
    const string & boundary = "" 
    )
    -
    - -

    Read the DDX from a stream instead of a file.

    -
    See also
    DDXParser::intern().
    - -

    Definition at line 1127 of file DDXParserSAX2.cc.

    - -
    -
    - -

    ◆ intern_stream() [2/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::DDXParser::intern_stream (istream & in,
    DDSdest_dds,
    string & cid,
    const string & boundary = "" 
    )
    -
    -

    Read a DDX from a C++ input stream and populate a DDS object.

    -
    Parameters
    - - - - - -
    in
    dds
    cid
    boundary
    -
    -
    - -

    Definition at line 1055 of file DDXParserSAX2.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1DDXParser.js b/html/classlibdap_1_1DDXParser.js deleted file mode 100644 index 1c7c075a4..000000000 --- a/html/classlibdap_1_1DDXParser.js +++ /dev/null @@ -1,8 +0,0 @@ -var classlibdap_1_1DDXParser = -[ - [ "DDXParser", "classlibdap_1_1DDXParser.html#abfbc95ad430e73daf1b31049feb71dd5", null ], - [ "intern", "classlibdap_1_1DDXParser.html#ab9b18fbb234851a7047e8fe4d38233b8", null ], - [ "intern_stream", "classlibdap_1_1DDXParser.html#a76537c4e78cb5913b2c2f78b9f7cd458", null ], - [ "intern_stream", "classlibdap_1_1DDXParser.html#a569959217f75a9e7334bd02e951bd099", null ], - [ "DDXParserTest", "classlibdap_1_1DDXParser.html#a99e6fccac5f43590df51a5d657c002da", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1DMR-members.html b/html/classlibdap_1_1DMR-members.html deleted file mode 100644 index 907418128..000000000 --- a/html/classlibdap_1_1DMR-members.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::DMR Member List
    -
    -
    - -

    This is the complete list of members for libdap::DMR, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    build_using_dds(DDS &dds)libdap::DMRvirtual
    dap_major() const (defined in libdap::DMR)libdap::DMRinline
    dap_minor() const (defined in libdap::DMR)libdap::DMRinline
    dap_version() const (defined in libdap::DMR)libdap::DMRinline
    DMR()libdap::DMR
    DMR(const DMR &dmr)libdap::DMR
    DMR(D4BaseTypeFactory *factory, const std::string &name="")libdap::DMR
    DMR(D4BaseTypeFactory *factory, DDS &dds)libdap::DMR
    dmr_version() const (defined in libdap::DMR)libdap::DMRinline
    DMRTest (defined in libdap::DMR)libdap::DMRfriend
    dump(std::ostream &strm) constlibdap::DMRvirtual
    factory()libdap::DMRinlinevirtual
    filename() constlibdap::DMRinline
    get_namespace() constlibdap::DMRinline
    getDDS()libdap::DMRvirtual
    m_duplicate(const DMR &dmr) (defined in libdap::DMR)libdap::DMRprotected
    name() constlibdap::DMRinline
    OK() constlibdap::DMRinline
    operator=(const DMR &rhs) (defined in libdap::DMR)libdap::DMR
    print_dap4(XMLWriter &xml, bool constrained=false)libdap::DMR
    request_size(bool constrained)libdap::DMR
    request_xml_base() constlibdap::DMRinline
    response_limit()libdap::DMRinline
    root()libdap::DMR
    set_dap_version(const std::string &version_string)libdap::DMR
    set_dmr_version(const std::string &v) (defined in libdap::DMR)libdap::DMRinline
    set_factory(D4BaseTypeFactory *f) (defined in libdap::DMR)libdap::DMRinlinevirtual
    set_filename(const std::string &fn) (defined in libdap::DMR)libdap::DMRinline
    set_name(const std::string &n) (defined in libdap::DMR)libdap::DMRinline
    set_namespace(const std::string &ns)libdap::DMRinline
    set_request_xml_base(const std::string &xb)libdap::DMRinline
    set_response_limit(long size)libdap::DMRinline
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    ~DMR()libdap::DMRvirtual
    -
    - - - - diff --git a/html/classlibdap_1_1DMR.html b/html/classlibdap_1_1DMR.html deleted file mode 100644 index b278601bb..000000000 --- a/html/classlibdap_1_1DMR.html +++ /dev/null @@ -1,871 +0,0 @@ - - - - - - - -libdap: libdap::DMR Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    - -

    #include <DMR.h>

    -
    -Inheritance diagram for libdap::DMR:
    -
    -
    Inheritance graph
    - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual void build_using_dds (DDS &dds)
     
    -int dap_major () const
     
    -int dap_minor () const
     
    -std::string dap_version () const
     
     DMR ()
     
     DMR (const DMR &dmr)
     
     DMR (D4BaseTypeFactory *factory, const std::string &name="")
     
     DMR (D4BaseTypeFactory *factory, DDS &dds)
     Build a DMR using a DAP2 DDS. More...
     
    -std::string dmr_version () const
     
    virtual void dump (std::ostream &strm) const
     dumps information about this object More...
     
    std::string get_namespace () const
     Get the namespace associated with the DMR. More...
     
    virtual DDSgetDDS ()
     Build a DDS from a DMR. More...
     
    bool OK () const
     
    -DMRoperator= (const DMR &rhs)
     
    void print_dap4 (XMLWriter &xml, bool constrained=false)
     
    long request_size (bool constrained)
     Get the estimated response size, in kilo bytes. More...
     
    std::string request_xml_base () const
     Get the URL that will return this DMR. More...
     
    long response_limit ()
     Get the maximum response size, in KB. Zero indicates no limit. More...
     
    D4Grouproot ()
     
    void set_dap_version (const std::string &version_string)
     
    -void set_dmr_version (const std::string &v)
     
    void set_namespace (const std::string &ns)
     Set the namespace for this DMR. More...
     
    void set_request_xml_base (const std::string &xb)
     
    void set_response_limit (long size)
     
    virtual ~DMR ()
     
    std::string name () const
     
    -void set_name (const std::string &n)
     
    virtual D4BaseTypeFactoryfactory ()
     
    -virtual void set_factory (D4BaseTypeFactory *f)
     
    std::string filename () const
     
    -void set_filename (const std::string &fn)
     
    - - - -

    -Protected Member Functions

    -void m_duplicate (const DMR &dmr)
     
    - - - -

    -Friends

    -class DMRTest
     
    -

    Detailed Description

    -

    DMR is root object for a DAP4 dataset. It holds a D4Group and other information about the dataset (DAP protocol number, DMR version, etc.).

    -
    Note
    This class holds the dataset name and filename (which might actually be a database name, but it's usually a filename). The variables of a DAP4 dataset are held by the D4Group instance (which is a child of Constructor).
    - -

    Definition at line 53 of file DMR.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ DMR() [1/4]

    - -
    -
    - - - - - - - -
    libdap::DMR::DMR ()
    -
    -

    Make a DMR which uses the given BaseTypeFactory to create variables.

    -
    Note
    The default DAP version is 4.0 - use the DDS class to make DAP2 things. The default DMR version is 1.0
    - -

    Definition at line 182 of file DMR.cc.

    - -
    -
    - -

    ◆ DMR() [2/4]

    - -
    -
    - - - - - - - - -
    libdap::DMR::DMR (const DMRrhs)
    -
    -

    The DMR copy constructor.

    - -

    Definition at line 192 of file DMR.cc.

    - -
    -
    - -

    ◆ DMR() [3/4]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    libdap::DMR::DMR (D4BaseTypeFactoryfactory,
    const std::string & name = "" 
    )
    -
    -

    Make a DMR which uses the given BaseTypeFactory to create variables.

    -
    Note
    The default DAP version is 4.0 - use the DDS class to make DAP2 things. The default DMR version is 1.0
    -
    Parameters
    - - - -
    factoryThe D4BaseTypeFactory to use when creating instances of DAP4 variables. The caller must ensure the factory's lifetime is at least that of the DMR instance.
    nameThe name of the DMR - usually derived from the name of the pathname or table name of the dataset.
    -
    -
    - -

    Definition at line 120 of file DMR.cc.

    - -
    -
    - -

    ◆ DMR() [4/4]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    libdap::DMR::DMR (D4BaseTypeFactoryfactory,
    DDSdds 
    )
    -
    - -

    Build a DMR using a DAP2 DDS.

    -

    Given a DDS from code written for DAP2, build a DAP4 DMR object. This works because DAP4 subsumes DAP2, but there are a few quirks... For each variable in the DDS, transform it to the equivalent DAP4 variable type and then copy the variable's attributes. Most types convert easily. Types that need special treatment are: Array: DAP2 array dimensions must be morphed to DAP4 Sequence: Make a D4Sequence Grid: Make a coverage; assume Grids with the same dimension names have 'shared dimensions' and that maps with the same names are shared too.

    -
    Note
    Assume that a DDS has only a root group. This is not actually true for a DDS from the HDF5 handler, because it has Groups encoded into the variable names. jhrg 3/18/14
    -
    Parameters
    - - - -
    factoryFactory class used to make new variables
    ddsGet the variables to convert from this DAP2 DDS.
    -
    -
    -
    See also
    BaseType::transform_to_dap4()
    - -

    Definition at line 150 of file DMR.cc.

    - -
    -
    - -

    ◆ ~DMR()

    - -
    -
    - - - - - -
    - - - - - - - -
    libdap::DMR::~DMR ()
    -
    -virtual
    -
    -

    Delete a DMR. The BaseType factory is not freed, while the contained group is.

    - -

    Definition at line 200 of file DMR.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ build_using_dds()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DMR::build_using_dds (DDSdds)
    -
    -virtual
    -
    -

    If we have a DDS that includes Attributes, use it to build the DMR. This will copy all of the variables in the DDS into the DMR using BaseType::transform_to_dap4(), so the actual types added can be controlled by code that specializes the various type classes.

    -
    Parameters
    - - -
    ddsRead variables and Attributes from this DDS
    -
    -
    - -

    Definition at line 226 of file DMR.cc.

    - -
    -
    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DMR::dump (std::ostream & strm) const
    -
    -virtual
    -
    - -

    dumps information about this object

    -

    Displays the pointer value of this instance and then calls parent dump

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the information to
    -
    -
    -
    Returns
    void
    - -

    Implements libdap::DapObj.

    - -

    Definition at line 531 of file DMR.cc.

    - -
    -
    - -

    ◆ factory()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual D4BaseTypeFactory* libdap::DMR::factory ()
    -
    -inlinevirtual
    -
    -

    Get/set the factory which makes instances of the variables. Specialize D4BaseTypeFactory so that a DMR will be populated with your client's or server's specialized types.

    - -

    Definition at line 123 of file DMR.h.

    - -
    -
    - -

    ◆ filename()

    - -
    -
    - - - - - -
    - - - - - - - -
    std::string libdap::DMR::filename () const
    -
    -inline
    -
    -

    get/set the dataset's 'filename.' The filename is a string that can be used to access the dataset via some data store (it's usually a pathname to a file, but it might be a database key).

    - -

    Definition at line 132 of file DMR.h.

    - -
    -
    - -

    ◆ get_namespace()

    - -
    -
    - - - - - -
    - - - - - - - -
    std::string libdap::DMR::get_namespace () const
    -
    -inline
    -
    - -

    Get the namespace associated with the DMR.

    - -

    Definition at line 151 of file DMR.h.

    - -
    -
    - -

    ◆ getDDS()

    - -
    -
    - - - - - -
    - - - - - - - -
    DDS * libdap::DMR::getDDS ()
    -
    -virtual
    -
    - -

    Build a DDS from a DMR.

    -

    Build a DDS from a DMR, collapsing DAP4 Groups, transforming Arrays to Grids as needed, and moving the attributes around to match the new variables. All of the variables in the returned DDS object are newly allocated with separate lifetimes from the objects in the DMR. They are made using ptr_duplicate() so that all of the variables mirror specializations for the various types. That is, if the HDF5 handler built the DMR, then the resulting DDS will hold instances of H5Int32, etc.

    -
    Note
    The caller is responsible for deleting the resulting DDS object.
    -
    Returns
    A pointer to the newly allocated DDS.
    - -

    Definition at line 371 of file DMR.cc.

    - -
    -
    - -

    ◆ name()

    - -
    -
    - - - - - -
    - - - - - - - -
    std::string libdap::DMR::name () const
    -
    -inline
    -
    -

    Get and set the DMR's name. This is effectively the 'dataset' name. It should not be used to reference the dataset's data store (e.g., it should not be a pathname to a file). This will be used in error messages.

    - -

    Definition at line 115 of file DMR.h.

    - -
    -
    - -

    ◆ OK()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::DMR::OK () const
    -
    -inline
    -
    -

    Class invariant. If true, any method can be used.

    Returns
    True if the instance is OK to use, false otherwise.
    - -

    Definition at line 107 of file DMR.h.

    - -
    -
    - -

    ◆ print_dap4()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void libdap::DMR::print_dap4 (XMLWriterxml,
    bool constrained = false 
    )
    -
    -

    Print the DAP4 DMR object.

    -
    Parameters
    - - - -
    xmluse this XMLWriter to build the XML.
    constrainedShould the DMR be subject to a constraint? Defaults to False
    -
    -
    - -

    Definition at line 478 of file DMR.cc.

    - -
    -
    - -

    ◆ request_size()

    - -
    -
    - - - - - - - - -
    long libdap::DMR::request_size (bool constrained)
    -
    - -

    Get the estimated response size, in kilo bytes.

    -

    Get the size of a response, in kilobytes. This method looks at the variables in the DMR a computes the number of bytes in the response.

    -
    Note
    This version of the method does a poor job with Arrays that have varying dimensions.
    -
    Parameters
    - - -
    constrainedShould the size of the whole DMR be used or should the current constraint be taken into account?
    -
    -
    -
    Returns
    The size of the request in kilobytes
    - -

    Definition at line 465 of file DMR.cc.

    - -
    -
    - -

    ◆ request_xml_base()

    - -
    -
    - - - - - -
    - - - - - - - -
    std::string libdap::DMR::request_xml_base () const
    -
    -inline
    -
    - -

    Get the URL that will return this DMR.

    - -

    Definition at line 145 of file DMR.h.

    - -
    -
    - -

    ◆ response_limit()

    - -
    -
    - - - - - -
    - - - - - - - -
    long libdap::DMR::response_limit ()
    -
    -inline
    -
    - -

    Get the maximum response size, in KB. Zero indicates no limit.

    - -

    Definition at line 158 of file DMR.h.

    - -
    -
    - -

    ◆ root()

    - -
    -
    - - - - - - - -
    D4Group * libdap::DMR::root ()
    -
    -

    Return the root group of this Dataset. If no root group has been set, use the D4BaseType factory to make it.

    Returns
    The root group of the dataset.
    -

    Get the root group for this DMR. This accessor allocates the root group if one does not exist using the factory class bound to this DMR

    -
    Returns
    A pointer to the root group.
    - -

    Definition at line 407 of file DMR.cc.

    - -
    -
    - -

    ◆ set_dap_version()

    - -
    -
    - - - - - - - - -
    void libdap::DMR::set_dap_version (const std::string & version_string)
    -
    -

    Given the DAP protocol version, parse that string and set the DMR fields.

    -
    Parameters
    - - -
    vThe version string.
    -
    -
    - -

    Definition at line 419 of file DMR.cc.

    - -
    -
    - -

    ◆ set_namespace()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DMR::set_namespace (const std::string & ns)
    -
    -inline
    -
    - -

    Set the namespace for this DMR.

    - -

    Definition at line 154 of file DMR.h.

    - -
    -
    - -

    ◆ set_request_xml_base()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DMR::set_request_xml_base (const std::string & xb)
    -
    -inline
    -
    -
    See also
    get_request_xml_base
    - -

    Definition at line 148 of file DMR.h.

    - -
    -
    - -

    ◆ set_response_limit()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DMR::set_response_limit (long size)
    -
    -inline
    -
    -

    Set the maximum response size. Zero is the default value. The size is given in kilobytes.

    Parameters
    - - -
    sizeThe maximum size of the response in kilobytes.
    -
    -
    - -

    Definition at line 163 of file DMR.h.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1DMR.js b/html/classlibdap_1_1DMR.js deleted file mode 100644 index 772544477..000000000 --- a/html/classlibdap_1_1DMR.js +++ /dev/null @@ -1,36 +0,0 @@ -var classlibdap_1_1DMR = -[ - [ "DMR", "classlibdap_1_1DMR.html#af1bd5ebee7ec448c98d55c006178a2f7", null ], - [ "DMR", "classlibdap_1_1DMR.html#a32cd8e199dbe1ff6de21fe6ead07ed5d", null ], - [ "DMR", "classlibdap_1_1DMR.html#ab5662afa1f91fbb97fa279498959245c", null ], - [ "DMR", "classlibdap_1_1DMR.html#a38543e91dc011b905e186753f3b0c387", null ], - [ "~DMR", "classlibdap_1_1DMR.html#a798392d82895753cc8fc55fcc0e1dff4", null ], - [ "build_using_dds", "classlibdap_1_1DMR.html#a955fff9d3339f3b72580ecc495640f36", null ], - [ "dap_major", "classlibdap_1_1DMR.html#af0a8e41da24594292f6ca18bfcbd8a3f", null ], - [ "dap_minor", "classlibdap_1_1DMR.html#afd2c7ee87b356498220dd5db8dcecee0", null ], - [ "dap_version", "classlibdap_1_1DMR.html#a3d981d7d583f763153e4baa0a8acc44b", null ], - [ "dmr_version", "classlibdap_1_1DMR.html#aedf566e3f1d42c6765c7343673a030af", null ], - [ "dump", "classlibdap_1_1DMR.html#a64aecb065a2df76d59494a9b016076a5", null ], - [ "factory", "classlibdap_1_1DMR.html#a8fe55cd7ad530103f70fadfb0bede195", null ], - [ "filename", "classlibdap_1_1DMR.html#adab6bba727b8b80aca7d639836c87e0c", null ], - [ "get_namespace", "classlibdap_1_1DMR.html#a394c0eac5282eb5d660145fe2361c19f", null ], - [ "getDDS", "classlibdap_1_1DMR.html#a0a8f854d9ab41ce5f212e0ef666e5fca", null ], - [ "m_duplicate", "classlibdap_1_1DMR.html#a13f58ede19889f21c981f192ba2e6227", null ], - [ "name", "classlibdap_1_1DMR.html#a184f08e2119726b02c1e17c6f0a1e87e", null ], - [ "OK", "classlibdap_1_1DMR.html#abd615e04485de5ed0680eb662bec8842", null ], - [ "operator=", "classlibdap_1_1DMR.html#a602a35289f65a64f486e063bef3151a7", null ], - [ "print_dap4", "classlibdap_1_1DMR.html#afb5a4eaa1681c1a594022ea17f58b656", null ], - [ "request_size", "classlibdap_1_1DMR.html#aa3b8799bbfd1db2b93c72dbd271a8724", null ], - [ "request_xml_base", "classlibdap_1_1DMR.html#a4884c28f2f91d747f94d6946b6c6e4d8", null ], - [ "response_limit", "classlibdap_1_1DMR.html#a1a4db5f5e76e824efb67268ea05b9cfe", null ], - [ "root", "classlibdap_1_1DMR.html#a9d76d4fe1ae853c98d0cc783c4636316", null ], - [ "set_dap_version", "classlibdap_1_1DMR.html#a2cc86493e515e990a7ea5a71fef38f6d", null ], - [ "set_dmr_version", "classlibdap_1_1DMR.html#ab08049e1a4014dc7f1f9c5915b822512", null ], - [ "set_factory", "classlibdap_1_1DMR.html#a33a7a982e3a85edb4ee0d9fb5f98bd31", null ], - [ "set_filename", "classlibdap_1_1DMR.html#acb4a1bd91706bd81503094151f74fd57", null ], - [ "set_name", "classlibdap_1_1DMR.html#a6dded2bfba57cc4676e972a8d4b9881b", null ], - [ "set_namespace", "classlibdap_1_1DMR.html#acd9202bbb351dd09aded3d89432325de", null ], - [ "set_request_xml_base", "classlibdap_1_1DMR.html#ade8d164421de4f11a01f66b81ed5acb4", null ], - [ "set_response_limit", "classlibdap_1_1DMR.html#a3116407e0a666d94059c97a9c0b1ca11", null ], - [ "DMRTest", "classlibdap_1_1DMR.html#a6274f1c88e1a22d128bcddcaffdccebe", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1DMR__inherit__graph.map b/html/classlibdap_1_1DMR__inherit__graph.map deleted file mode 100644 index 6ae7760f2..000000000 --- a/html/classlibdap_1_1DMR__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/classlibdap_1_1DMR__inherit__graph.md5 b/html/classlibdap_1_1DMR__inherit__graph.md5 deleted file mode 100644 index ae754cf10..000000000 --- a/html/classlibdap_1_1DMR__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -cf07fc9ecf4ccbd97ffb7d0c11218caa \ No newline at end of file diff --git a/html/classlibdap_1_1DMR__inherit__graph.png b/html/classlibdap_1_1DMR__inherit__graph.png deleted file mode 100644 index 1b220a39a7430177514bb69ca7bcb78a9fde68b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23647 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 - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::DODSFilter Member List
    -
    -
    - -

    This is the complete list of members for libdap::DODSFilter, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    BLOB_Response enum value (defined in libdap::DODSFilter)libdap::DODSFilter
    d_action (defined in libdap::DODSFilter)libdap::DODSFilterprotected
    d_anc_das_lmt (defined in libdap::DODSFilter)libdap::DODSFilterprotected
    d_anc_dds_lmt (defined in libdap::DODSFilter)libdap::DODSFilterprotected
    d_anc_dir (defined in libdap::DODSFilter)libdap::DODSFilterprotected
    d_anc_file (defined in libdap::DODSFilter)libdap::DODSFilterprotected
    d_bad_options (defined in libdap::DODSFilter)libdap::DODSFilterprotected
    d_cache_dir (defined in libdap::DODSFilter)libdap::DODSFilterprotected
    d_cgi_ver (defined in libdap::DODSFilter)libdap::DODSFilterprotected
    d_comp (defined in libdap::DODSFilter)libdap::DODSFilterprotected
    d_conditional_request (defined in libdap::DODSFilter)libdap::DODSFilterprotected
    d_dap2ce (defined in libdap::DODSFilter)libdap::DODSFilterprotected
    d_dataset (defined in libdap::DODSFilter)libdap::DODSFilterprotected
    d_if_modified_since (defined in libdap::DODSFilter)libdap::DODSFilterprotected
    d_program_name (defined in libdap::DODSFilter)libdap::DODSFilterprotected
    d_response (defined in libdap::DODSFilter)libdap::DODSFilterprotected
    d_timeout (defined in libdap::DODSFilter)libdap::DODSFilterprotected
    d_url (defined in libdap::DODSFilter)libdap::DODSFilterprotected
    DAS_Response enum value (defined in libdap::DODSFilter)libdap::DODSFilter
    DataDDS_Response enum value (defined in libdap::DODSFilter)libdap::DODSFilter
    DataDDX_Response enum value (defined in libdap::DODSFilter)libdap::DODSFilter
    dataset_constraint(DDS &dds, ConstraintEvaluator &eval, ostream &out, bool ce_eval=true) const (defined in libdap::DODSFilter)libdap::DODSFiltervirtual
    dataset_constraint(DDS &dds, ConstraintEvaluator &eval, FILE *out, bool ce_eval=true) const (defined in libdap::DODSFilter)libdap::DODSFiltervirtual
    dataset_constraint_ddx(DDS &dds, ConstraintEvaluator &eval, ostream &out, const string &boundary, const string &start, bool ce_eval=true) const (defined in libdap::DODSFilter)libdap::DODSFiltervirtual
    DDS_Response enum value (defined in libdap::DODSFilter)libdap::DODSFilter
    DDX_Response enum value (defined in libdap::DODSFilter)libdap::DODSFilter
    DODSFilter()libdap::DODSFilterinline
    DODSFilter(int argc, char *argv[])libdap::DODSFilter
    establish_timeout(ostream &stream) const (defined in libdap::DODSFilter)libdap::DODSFiltervirtual
    establish_timeout(FILE *stream) constlibdap::DODSFiltervirtual
    functional_constraint(BaseType &var, DDS &dds, ConstraintEvaluator &eval, ostream &out) const (defined in libdap::DODSFilter)libdap::DODSFiltervirtual
    functional_constraint(BaseType &var, DDS &dds, ConstraintEvaluator &eval, FILE *out) const (defined in libdap::DODSFilter)libdap::DODSFiltervirtual
    get_action() constlibdap::DODSFiltervirtual
    get_cache_dir() constlibdap::DODSFiltervirtual
    get_ce() constlibdap::DODSFiltervirtual
    get_cgi_version() constlibdap::DODSFiltervirtual
    get_das_last_modified_time(const string &anc_location="") constlibdap::DODSFiltervirtual
    get_data_last_modified_time(const string &anc_location="") constlibdap::DODSFiltervirtual
    get_dataset_last_modified_time() constlibdap::DODSFiltervirtual
    get_dataset_name() constlibdap::DODSFiltervirtual
    get_dataset_version() constlibdap::DODSFiltervirtual
    get_dds_last_modified_time(const string &anc_location="") constlibdap::DODSFiltervirtual
    get_request_if_modified_since() constlibdap::DODSFiltervirtual
    get_response() constlibdap::DODSFiltervirtual
    get_timeout() constlibdap::DODSFilter
    get_URL() constlibdap::DODSFiltervirtual
    initialize()libdap::DODSFilterprotected
    initialize(int argc, char *argv[])libdap::DODSFilterprotected
    is_conditional() constlibdap::DODSFiltervirtual
    print_usage() constlibdap::DODSFiltervirtual
    process_options(int argc, char *argv[])libdap::DODSFilterprotectedvirtual
    Response enum namelibdap::DODSFilter
    send_das(DAS &das, const string &anc_location="", bool with_mime_headers=true) const (defined in libdap::DODSFilter)libdap::DODSFiltervirtual
    send_das(ostream &out, DAS &das, const string &anc_location="", bool with_mime_headers=true) constlibdap::DODSFiltervirtual
    send_das(FILE *out, DAS &das, const string &anc_location="", bool with_mime_headers=true) constlibdap::DODSFiltervirtual
    send_data(DDS &dds, ConstraintEvaluator &eval, ostream &data_stream, const string &anc_location="", bool with_mime_headers=true) constlibdap::DODSFiltervirtual
    send_data(DDS &dds, ConstraintEvaluator &eval, FILE *data_stream, const string &anc_location="", bool with_mime_headers=true) constlibdap::DODSFiltervirtual
    send_data_ddx(DDS &dds, ConstraintEvaluator &eval, ostream &data_stream, const string &start, const string &boundary, const string &anc_location="", bool with_mime_headers=true) constlibdap::DODSFiltervirtual
    send_dds(DDS &dds, ConstraintEvaluator &eval, bool constrained=false, const string &anc_location="", bool with_mime_headers=true) const (defined in libdap::DODSFilter)libdap::DODSFiltervirtual
    send_dds(ostream &out, DDS &dds, ConstraintEvaluator &eval, bool constrained=false, const string &anc_location="", bool with_mime_headers=true) constlibdap::DODSFiltervirtual
    send_dds(FILE *out, DDS &dds, ConstraintEvaluator &eval, bool constrained=false, const string &anc_location="", bool with_mime_headers=true) constlibdap::DODSFiltervirtual
    send_ddx(DDS &dds, ConstraintEvaluator &eval, ostream &out, bool with_mime_headers=true) constlibdap::DODSFiltervirtual
    send_ddx(DDS &dds, ConstraintEvaluator &eval, FILE *out, bool with_mime_headers=true) constlibdap::DODSFiltervirtual
    send_version_info() constlibdap::DODSFiltervirtual
    set_ce(string _ce) (defined in libdap::DODSFilter)libdap::DODSFiltervirtual
    set_cgi_version(string version)libdap::DODSFiltervirtual
    set_dataset_name(const string _dataset) (defined in libdap::DODSFilter)libdap::DODSFiltervirtual
    set_response(const string &r)libdap::DODSFiltervirtual
    set_timeout(int timeout=0)libdap::DODSFilter
    set_URL(const string &url)libdap::DODSFiltervirtual
    Unknown_Response enum value (defined in libdap::DODSFilter)libdap::DODSFilter
    Version_Response enum value (defined in libdap::DODSFilter)libdap::DODSFilter
    ~DODSFilter() (defined in libdap::DODSFilter)libdap::DODSFiltervirtual
    -
    - - - - diff --git a/html/classlibdap_1_1DODSFilter.html b/html/classlibdap_1_1DODSFilter.html deleted file mode 100644 index 1e5ceecee..000000000 --- a/html/classlibdap_1_1DODSFilter.html +++ /dev/null @@ -1,1873 +0,0 @@ - - - - - - - -libdap: libdap::DODSFilter Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    - -

    Common functions for DODS server filter programs. - More...

    - -

    #include <DODSFilter.h>

    - - - - -

    -Public Types

    enum  Response {
    -  Unknown_Response, -DAS_Response, -DDS_Response, -DataDDS_Response, -
    -  DDX_Response, -DataDDX_Response, -BLOB_Response, -Version_Response -
    - }
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    -virtual void dataset_constraint (DDS &dds, ConstraintEvaluator &eval, ostream &out, bool ce_eval=true) const
     
    -virtual void dataset_constraint (DDS &dds, ConstraintEvaluator &eval, FILE *out, bool ce_eval=true) const
     
    -virtual void dataset_constraint_ddx (DDS &dds, ConstraintEvaluator &eval, ostream &out, const string &boundary, const string &start, bool ce_eval=true) const
     
     DODSFilter ()
     
     DODSFilter (int argc, char *argv[]) throw (Error)
     DODSFilter constructor. More...
     
    -virtual void establish_timeout (ostream &stream) const
     
    virtual void establish_timeout (FILE *stream) const
     
    -virtual void functional_constraint (BaseType &var, DDS &dds, ConstraintEvaluator &eval, ostream &out) const
     
    -virtual void functional_constraint (BaseType &var, DDS &dds, ConstraintEvaluator &eval, FILE *out) const
     
    virtual string get_action () const
     
    virtual string get_cache_dir () const
     Get the cache directory. More...
     
    virtual string get_ce () const
     Get the constraint expression. More...
     
    virtual string get_cgi_version () const
     
    virtual time_t get_das_last_modified_time (const string &anc_location="") const
     
    virtual time_t get_data_last_modified_time (const string &anc_location="") const
     
    virtual time_t get_dataset_last_modified_time () const
     
    virtual string get_dataset_name () const
     Get the dataset name. More...
     
    virtual string get_dataset_version () const
     Get the version information for the dataset. More...
     
    virtual time_t get_dds_last_modified_time (const string &anc_location="") const
     
    virtual time_t get_request_if_modified_since () const
     
    virtual Response get_response () const
     
    int get_timeout () const
     
    virtual string get_URL () const
     
    virtual bool is_conditional () const
     Is this request conditional? More...
     
    virtual void print_usage () const
     Print usage information for a filter program. More...
     
    -virtual void send_das (DAS &das, const string &anc_location="", bool with_mime_headers=true) const
     
    virtual void send_das (ostream &out, DAS &das, const string &anc_location="", bool with_mime_headers=true) const
     Transmit a DAS. More...
     
    virtual void send_das (FILE *out, DAS &das, const string &anc_location="", bool with_mime_headers=true) const
     Transmit a DAS. More...
     
    virtual void send_data (DDS &dds, ConstraintEvaluator &eval, ostream &data_stream, const string &anc_location="", bool with_mime_headers=true) const
     Transmit data. More...
     
    virtual void send_data (DDS &dds, ConstraintEvaluator &eval, FILE *data_stream, const string &anc_location="", bool with_mime_headers=true) const
     Transmit data. More...
     
    virtual void send_data_ddx (DDS &dds, ConstraintEvaluator &eval, ostream &data_stream, const string &start, const string &boundary, const string &anc_location="", bool with_mime_headers=true) const
     Transmit data. More...
     
    -virtual void send_dds (DDS &dds, ConstraintEvaluator &eval, bool constrained=false, const string &anc_location="", bool with_mime_headers=true) const
     
    virtual void send_dds (ostream &out, DDS &dds, ConstraintEvaluator &eval, bool constrained=false, const string &anc_location="", bool with_mime_headers=true) const
     Transmit a DDS. More...
     
    virtual void send_dds (FILE *out, DDS &dds, ConstraintEvaluator &eval, bool constrained=false, const string &anc_location="", bool with_mime_headers=true) const
     Transmit a DDS. More...
     
    virtual void send_ddx (DDS &dds, ConstraintEvaluator &eval, ostream &out, bool with_mime_headers=true) const
     
    virtual void send_ddx (DDS &dds, ConstraintEvaluator &eval, FILE *out, bool with_mime_headers=true) const
     
    virtual void send_version_info () const
     Send version information back to the client program. More...
     
    -virtual void set_ce (string _ce)
     
    virtual void set_cgi_version (string version)
     
    -virtual void set_dataset_name (const string _dataset)
     
    virtual void set_response (const string &r)
     
    void set_timeout (int timeout=0)
     
    virtual void set_URL (const string &url)
     
    - - - - - - - -

    -Protected Member Functions

    void initialize ()
     
    void initialize (int argc, char *argv[])
     
    virtual int process_options (int argc, char *argv[])
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Protected Attributes

    -string d_action
     
    -time_t d_anc_das_lmt
     
    -time_t d_anc_dds_lmt
     
    -string d_anc_dir
     
    -string d_anc_file
     
    -bool d_bad_options
     
    -string d_cache_dir
     
    -string d_cgi_ver
     
    -bool d_comp
     
    -bool d_conditional_request
     
    -string d_dap2ce
     
    -string d_dataset
     
    -time_t d_if_modified_since
     
    -string d_program_name
     
    -Response d_response
     
    -int d_timeout
     
    -string d_url
     
    -

    Detailed Description

    -

    Common functions for DODS server filter programs.

    -

    When a DODS server receives a request from a DODS client, the server CGI script dispatches the request to one of several ``filter'' programs. Each filter is responsible for returning a different aspect of the dataset information: one is for data, one is for the dataset DDS, one is for the dataset DAS, and a fourth is for a usage message describing the server itself. Some installations may have additional optional filters.

    -

    The filter program receives a data request from the dispatch script. It receives its operating parameters from the command line, like any UNIX command, and it returns its output to standard output, which the httpd server packages up into a reply to the client.

    -

    This class contains some common functions for the filter programs used to make up the DODS data servers. The filter programs do not have to be called by a CGI program, but that is the normal mechanism by which they are invoked.

    -
    Todo:

    Add a test to make sure that the required arguments are given.

    -

    We need to rethink the ancillary file/directory stuff. I don't think it's ever been used...

    -
    -
    Author
    jhrg 8/26/97
    - -

    Definition at line 78 of file DODSFilter.h.

    -

    Member Enumeration Documentation

    - -

    ◆ Response

    - -
    -
    -

    Types of responses DODSFilter know about.

    - -

    Definition at line 82 of file DODSFilter.h.

    - -
    -
    -

    Constructor & Destructor Documentation

    - -

    ◆ DODSFilter() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    libdap::DODSFilter::DODSFilter ()
    -
    -inline
    -
    -

    Make an empty instance. Use the set_*() methods to load with needed values. You must call at least set_dataset_name() or be requesting version information.

    -
    Todo:
    Add methods to provide a way to set all of the parameters this class contains. They can currently only be set using the argc/argv command line parameters.
    - -

    Definition at line 129 of file DODSFilter.h.

    - -
    -
    - -

    ◆ DODSFilter() [2/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    libdap::DODSFilter::DODSFilter (int argc,
    char * argv[] 
    )
    throw (Error
    )
    -
    - -

    DODSFilter constructor.

    -

    Create an instance of DODSFilter using the command line arguments passed by the CGI (or other) program. The default constructor is private; this and the copy constructor (which is just the default copy constructor) are the only way to create an instance of DODSFilter.

    -

    These are the valid options:

    -
    -
    filename
    -

    The name of the file on which the filter is to operate. Usually this would be the file whose data has been requested. In fact, this class can be specialized and any meaning can be associated to this string. It could be the name of a database, for example.

    -

    -
    -
    -o response
    -

    -

    Specifies the type of response desired. The response is a string and must be one of DAS, DDS, DataDDS or Version. Note that Version returns version information in the body of the response and is useful for debugging, et cetera. Each response returns version information in an HTTP header for internal use by a client.

    -

    -
    -
    -c
    -

    Send compressed data. Data are compressed using the deflate program.

    -

    -
    -
    -e expression
    -

    This option specifies a non-blank constraint expression used to subsample a dataset.

    -

    -
    -
    -v cgi-version
    -

    Set the CGI/Server version to cgi-version. This is a way for the caller to set version information passed back to the client either as the response to a version request of in the response headers.

    -

    -
    -
    -d ancdir
    -

    Specifies that ancillary data be sought in the ancdir directory. ancdir must end in '/'.

    -

    -
    -
    -f ancfile
    -

    Specifies that ancillary data may be found in a file called ancfile.

    -

    -
    -
    -r cache directory
    -

    Specify a directory to use if/when files are to be cached. Not all handlers support caching and each uses its own rules tailored to a specific file or data type.

    -

    -
    -
    -t timeout
    -

    Specifies a a timeout value in seconds. If the server runs longer than timeout seconds, an Error is returned to the client explaining that the request has timed out.

    -

    -
    -
    -l time
    -

    Indicates that the request is a conditional request; send a complete response if and only if the data has changed since time. If it has not changed since time, then send a 304 (Not Modified) response. The time parameter is the Last-Modified time from an If-Modified-Since condition GET request. It is given in seconds since the start of the Unix epoch (Midnight, 1 Jan 1970).

    -

    -
    -
    - -

    Definition at line 170 of file DODSFilter.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ establish_timeout()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DODSFilter::establish_timeout (FILE * stream) const
    -
    -virtual
    -
    -

    Use values of this instance to establish a timeout alarm for the server. If the timeout value is zero, do nothing.

    -
    Todo:
    When the alarm handler is called, two CRLF pairs are dumped to the stream and then an Error object is sent. No attempt is made to write the 'correct' MIME headers for an Error object. Instead, a savvy client will know that when an exception is thrown during a deserialize operation, it should scan ahead in the input stream for an Error object. Add this, or a sensible variant once libdap++ supports reliable error delivery. Dumb clients will never get the Error object...
    - -

    Definition at line 628 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ get_action()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::DODSFilter::get_action () const
    -
    -virtual
    -
    -

    Get the string name of the response to be returned.

    - -

    Definition at line 458 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ get_cache_dir()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::DODSFilter::get_cache_dir () const
    -
    -virtual
    -
    - -

    Get the cache directory.

    -

    The cache_dir is used to hold the cached .dds and .das files. By default, this returns an empty string (store cache files in current directory.

    -
    Returns
    A string object that contains the cache file directory.
    - -

    Definition at line 594 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ get_ce()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::DODSFilter::get_ce () const
    -
    -virtual
    -
    - -

    Get the constraint expression.

    -

    Return the entire constraint expression in a string. This includes both the projection and selection clauses, but not the question mark.

    -
    Returns
    A string object that contains the constraint expression.
    - -

    Definition at line 350 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ get_cgi_version()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::DODSFilter::get_cgi_version () const
    -
    -virtual
    -
    -

    Return the version information passed to the instance when it was created. This string is passed to the DODSFilter ctor using the -v option.

    -
    Returns
    The version string supplied at initialization.
    - -

    Definition at line 338 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ get_das_last_modified_time()

    - -
    -
    - - - - - -
    - - - - - - - - -
    time_t libdap::DODSFilter::get_das_last_modified_time (const string & anc_location = "") const
    -
    -virtual
    -
    -

    Get the last modified time for the dataset's DAS. This time, given in seconds since the epoch (1 Jan 1970 00:00:00 GMT), is the greater of the datasets's and any ancillary DAS' last modified time.

    -
    Parameters
    - - -
    anc_locationA directory to search for ancillary files (in addition to the CWD).
    -
    -
    -
    Returns
    Time of last modification of the DAS.
    -
    See also
    get_dataset_last_modified_time()
    -
    -get_dds_last_modified_time()
    - -

    Definition at line 499 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ get_data_last_modified_time()

    - -
    -
    - - - - - -
    - - - - - - - - -
    time_t libdap::DODSFilter::get_data_last_modified_time (const string & anc_location = "") const
    -
    -virtual
    -
    -

    Get the last modified time to be used for a particular data request. This method should look at both the constraint expression and any ancillary files for this dataset. The implementation provided here returns the latest time returned by the get_dataset...(), get_das...() and get_dds...() methods and does not currently check the CE.

    -
    Parameters
    - - -
    anc_locationA directory to search for ancillary files (in addition to the CWD).
    -
    -
    -
    Returns
    Time of last modification of the data.
    -
    See also
    get_dataset_last_modified_time()
    -
    -get_das_last_modified_time()
    -
    -get_dds_last_modified_time()
    - -

    Definition at line 551 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ get_dataset_last_modified_time()

    - -
    -
    - - - - - -
    - - - - - - - -
    time_t libdap::DODSFilter::get_dataset_last_modified_time () const
    -
    -virtual
    -
    -

    Get the dataset's last modified time. This returns the time at which the dataset was last modified as defined by UNIX's notion of modification. This does not take into account the modification of an ancillary DAS or DDS. Time is given in seconds since the epoch (1 Jan 1970 00:00:00 GMT).

    -

    This method perform a simple check on the file named by the dataset given when the DODSFilter instance was created. If the dataset is not a filter, this method returns the current time. Servers which provide access to non-file-based data should subclass DODSFilter and supply a more suitable version of this method.

    -

    From the stat(2) man page: ``Traditionally, st_mtime is changed by mknod(2), utime(2), and write(2). The st_mtime is not changed for changes in owner, group, hard link count, or mode.''

    -
    Returns
    Time of the last modification in seconds since the epoch.
    -
    See also
    get_das_last_modified_time()
    -
    -get_dds_last_modified_time()
    - -

    Definition at line 484 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ get_dataset_name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::DODSFilter::get_dataset_name () const
    -
    -virtual
    -
    - -

    Get the dataset name.

    -

    The ``dataset name'' is the filename or other string that the filter program will use to access the data. In some cases this will indicate a disk file containing the data. In others, it may represent a database query or some other exotic data access method.

    -
    Returns
    A string object that contains the name of the dataset.
    - -

    Definition at line 370 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ get_dataset_version()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::DODSFilter::get_dataset_version () const
    -
    -virtual
    -
    - -

    Get the version information for the dataset.

    -

    To read version information that is specific to a certain dataset, override this method with an implementation that does what you want. By default, this returns an empty string.

    -
    Returns
    A string object that contains the dataset version information.
    - -

    Definition at line 409 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ get_dds_last_modified_time()

    - -
    -
    - - - - - -
    - - - - - - - - -
    time_t libdap::DODSFilter::get_dds_last_modified_time (const string & anc_location = "") const
    -
    -virtual
    -
    -

    Get the last modified time for the dataset's DDS. This time, given in seconds since the epoch (1 Jan 1970 00:00:00 GMT), is the greater of the datasets's and any ancillary DDS' last modified time.

    -
    Returns
    Time of last modification of the DDS.
    -
    See also
    get_dataset_last_modified_time()
    -
    -get_dds_last_modified_time()
    - -

    Definition at line 522 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ get_request_if_modified_since()

    - -
    -
    - - - - - -
    - - - - - - - -
    time_t libdap::DODSFilter::get_request_if_modified_since () const
    -
    -virtual
    -
    -

    Get the value of a conditional request's If-Modified-Since header. This value is used to determine if the request should get a full response or a Not Modified (304) response. The time is given in seconds since the Unix epoch (midnight, 1 Jan 1970). If no time was given with the request, this methods returns -1.

    -
    Returns
    If-Modified-Since time from a condition GET request.
    - -

    Definition at line 582 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ get_response()

    - -
    -
    - - - - - -
    - - - - - - - -
    DODSFilter::Response libdap::DODSFilter::get_response () const
    -
    -virtual
    -
    -

    Get the enum name of the response to be returned.

    - -

    Definition at line 452 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ get_timeout()

    - -
    -
    - - - - - - - -
    int libdap::DODSFilter::get_timeout () const
    -
    -

    Get the server's timeout value.

    - -

    Definition at line 611 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ get_URL()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::DODSFilter::get_URL () const
    -
    -virtual
    -
    -

    Get the URL. This returns the URL, minus the constraint originally sent to the server.

    Returns
    The URL.
    - -

    Definition at line 385 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ initialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::DODSFilter::initialize ()
    -
    -protected
    -
    -

    Called when initializing a DODSFilter that's not going to be passed a command line arguments.

    - -

    Definition at line 194 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ initialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::DODSFilter::initialize (int argc,
    char * argv[] 
    )
    -
    -protected
    -
    -

    Initialize. Specializations can call this once an empty DODSFilter has been created using the default constructor. Using a method such as this provides a way to specialize the process_options() method and then have that specialization called by the subclass' constructor.

    -

    This class and any class that specializes it should call this method in its constructor. Note that when this method is called, the object is not fully constructed.

    -
    Parameters
    - - - -
    argcThe argument count
    argvThe vector of char * argument strings.
    -
    -
    - -

    Definition at line 235 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ is_conditional()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::DODSFilter::is_conditional () const
    -
    -virtual
    -
    - -

    Is this request conditional?

    -
    Returns
    True if the request is conditional.
    -
    See also
    get_request_if_modified_since().
    - -

    Definition at line 308 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ print_usage()

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::DODSFilter::print_usage () const
    -
    -virtual
    -
    - -

    Print usage information for a filter program.

    -

    This message is printed when the filter program is incorrectly invoked by the dispatch CGI. This is an error in the server installation or the CGI implementation, so the error message is written to stderr instead of stdout. A server's stderr messages show up in the httpd log file. In addition, an error object is sent back to the client program telling them that the server is broken.

    - -

    Definition at line 665 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ process_options()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    int libdap::DODSFilter::process_options (int argc,
    char * argv[] 
    )
    -
    -protectedvirtual
    -
    -

    Processing the command line options passed to the filter is handled by this method so that specializations can change the options easily.

    -
    Parameters
    - - - -
    argcThe argument count
    argvThe vector of char * argument strings.
    -
    -
    -
    Returns
    The index of the next, unprocessed, argument. This must be the identifier passed to the filter program that identifies the data source. It's often a file name.
    - -

    Definition at line 264 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ send_das() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::DODSFilter::send_das (ostream & out,
    DASdas,
    const string & anc_location = "",
    bool with_mime_headers = true 
    ) const
    -
    -virtual
    -
    - -

    Transmit a DAS.

    -

    This function formats and prints an ASCII representation of a DAS on stdout. This has the effect of sending the DAS object back to the client program.

    -
    Parameters
    - - - - - -
    outThe output stream to which the DAS is to be sent.
    dasThe DAS object to be sent.
    anc_locationThe directory in which the external DAS file resides.
    with_mime_headersIf true (the default) send MIME headers.
    -
    -
    -
    Returns
    void
    -
    See also
    DAS
    - -

    Definition at line 716 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ send_das() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::DODSFilter::send_das (FILE * out,
    DASdas,
    const string & anc_location = "",
    bool with_mime_headers = true 
    ) const
    -
    -virtual
    -
    - -

    Transmit a DAS.

    -

    This function formats and prints an ASCII representation of a DAS on stdout. This has the effect of sending the DAS object back to the client program.

    -
    Parameters
    - - - - - -
    outThe output FILE to which the DAS is to be sent.
    dasThe DAS object to be sent.
    anc_locationThe directory in which the external DAS file resides.
    with_mime_headersIf true (the default) send MIME headers.
    -
    -
    -
    Returns
    void
    -
    See also
    DAS
    - -

    Definition at line 696 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ send_data() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::DODSFilter::send_data (DDSdds,
    ConstraintEvaluatoreval,
    ostream & data_stream,
    const string & anc_location = "",
    bool with_mime_headers = true 
    ) const
    -
    -virtual
    -
    - -

    Transmit data.

    -

    Send the data in the DDS object back to the client program. The data is encoded using a Marshaller, and enclosed in a MIME document which is all sent to data_stream. If this is being called from a CGI, data_stream is probably stdout and writing to it has the effect of sending the response back to the client.

    -
    Parameters
    - - - - - - -
    ddsA DDS object containing the data to be sent.
    evalA reference to the ConstraintEvaluator to use.
    data_streamWrite the response to this stream.
    anc_locationA directory to search for ancillary files (in addition to the CWD). This is used in a call to get_data_last_modified_time().
    with_mime_headersIf true, include the MIME headers in the response. Defaults to true.
    -
    -
    -
    Returns
    void
    - -

    Definition at line 976 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ send_data() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::DODSFilter::send_data (DDSdds,
    ConstraintEvaluatoreval,
    FILE * data_stream,
    const string & anc_location = "",
    bool with_mime_headers = true 
    ) const
    -
    -virtual
    -
    - -

    Transmit data.

    -

    Send the data in the DDS object back to the client program. The data is encoded using a Marshaller, and enclosed in a MIME document which is all sent to data_stream. If this is being called from a CGI, data_stream is probably stdout and writing to it has the effect of sending the response back to the client.

    -
    Parameters
    - - - - - - -
    ddsA DDS object containing the data to be sent.
    evalA reference to the ConstraintEvaluator to use.
    data_streamWrite the response to this FILE.
    anc_locationA directory to search for ancillary files (in addition to the CWD). This is used in a call to get_data_last_modified_time().
    with_mime_headersIf true, include the MIME headers in the response. Defaults to true.
    -
    -
    -
    Returns
    void
    - -

    Definition at line 950 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ send_data_ddx()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::DODSFilter::send_data_ddx (DDSdds,
    ConstraintEvaluatoreval,
    ostream & data_stream,
    const string & start,
    const string & boundary,
    const string & anc_location = "",
    bool with_mime_headers = true 
    ) const
    -
    -virtual
    -
    - -

    Transmit data.

    -

    Send the data in the DDS object back to the client program. The data is encoded using a Marshaller, and enclosed in a MIME document which is all sent to data_stream. If this is being called from a CGI, data_stream is probably stdout and writing to it has the effect of sending the response back to the client.

    -
    Parameters
    - - - - - - - - -
    ddsA DDS object containing the data to be sent.
    evalA reference to the ConstraintEvaluator to use.
    data_streamWrite the response to this stream.
    start
    boundary
    anc_locationA directory to search for ancillary files (in addition to the CWD). This is used in a call to get_data_last_modified_time().
    with_mime_headersIf true, include the MIME headers in the response. Defaults to true.
    -
    -
    -
    Returns
    void
    - -

    Definition at line 1118 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ send_dds() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::DODSFilter::send_dds (ostream & out,
    DDSdds,
    ConstraintEvaluatoreval,
    bool constrained = false,
    const string & anc_location = "",
    bool with_mime_headers = true 
    ) const
    -
    -virtual
    -
    - -

    Transmit a DDS.

    -

    This function formats and prints an ASCII representation of a DDS on stdout. When called by a CGI program, this has the effect of sending a DDS object back to the client program. Either an entire DDS or a constrained DDS may be sent.

    -
    Parameters
    - - - - - - - -
    outThe output stream to which the DAS is to be sent.
    ddsThe DDS to send back to a client.
    evalA reference to the ConstraintEvaluator to use.
    constrainedIf this argument is true, evaluate the current constraint expression and send the `constrained DDS' back to the client.
    anc_locationThe directory in which the external DAS file resides.
    with_mime_headersIf true (the default) send MIME headers.
    -
    -
    -
    Returns
    void
    -
    See also
    DDS
    - -

    Definition at line 784 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ send_dds() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::DODSFilter::send_dds (FILE * out,
    DDSdds,
    ConstraintEvaluatoreval,
    bool constrained = false,
    const string & anc_location = "",
    bool with_mime_headers = true 
    ) const
    -
    -virtual
    -
    - -

    Transmit a DDS.

    -

    This function formats and prints an ASCII representation of a DDS on stdout. When called by a CGI program, this has the effect of sending a DDS object back to the client program. Either an entire DDS or a constrained DDS may be sent.

    -
    Parameters
    - - - - - - - -
    outThe output FILE to which the DAS is to be sent.
    ddsThe DDS to send back to a client.
    evalA reference to the ConstraintEvaluator to use.
    constrainedIf this argument is true, evaluate the current constraint expression and send the `constrained DDS' back to the client.
    anc_locationThe directory in which the external DAS file resides.
    with_mime_headersIf true (the default) send MIME headers.
    -
    -
    -
    Returns
    void
    -
    See also
    DDS
    - -

    Definition at line 757 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ send_ddx() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::DODSFilter::send_ddx (DDSdds,
    ConstraintEvaluatoreval,
    ostream & out,
    bool with_mime_headers = true 
    ) const
    -
    -virtual
    -
    -

    Send the DDX response. The DDX never contains data, instead it holds a reference to a Blob response which is used to get the data values. The DDS and DAS objects are built using code that already exists in the servers.

    -
    Parameters
    - - - - - -
    ddsThe dataset's DDS with attributes in the variables.
    evalA reference to the ConstraintEvaluator to use.
    outDestination
    with_mime_headersIf true, include the MIME headers in the response. Defaults to true.
    -
    -
    - -

    Definition at line 1070 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ send_ddx() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::DODSFilter::send_ddx (DDSdds,
    ConstraintEvaluatoreval,
    FILE * out,
    bool with_mime_headers = true 
    ) const
    -
    -virtual
    -
    -

    Send the DDX response. The DDX never contains data, instead it holds a reference to a Blob response which is used to get the data values. The DDS and DAS objects are built using code that already exists in the servers.

    -
    Parameters
    - - - - - -
    ddsThe dataset's DDS with attributes in the variables.
    evalA reference to the ConstraintEvaluator to use.
    outDestination
    with_mime_headersIf true, include the MIME headers in the response. Defaults to true.
    -
    -
    - -

    Definition at line 1051 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ send_version_info()

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::DODSFilter::send_version_info () const
    -
    -virtual
    -
    - -

    Send version information back to the client program.

    -

    This function formats and sends to stdout version information from the httpd server, the server dispatch scripts, the DODS core software, and (optionally) the dataset.

    - -

    Definition at line 679 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ set_cgi_version()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DODSFilter::set_cgi_version (string version)
    -
    -virtual
    -
    -

    Set the CGI/Server version number. Servers use this when answering requests for version information. The version `number' should include both the name of the server (e.g., ff_dods) as well as the version number. Since this information is typically divined by configure, it's up to the executable to poke the correct value in using this method.

    -

    Note that the -v switch that this class understands is deprecated since it is usually called by Perl code. It makes more sense to have the actual C++ software set the version string.

    -
    Parameters
    - - -
    versionA version string for this server.
    -
    -
    - -

    Definition at line 327 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ set_response()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DODSFilter::set_response (const string & r)
    -
    -virtual
    -
    -

    Set the response to be returned. Valid response names are "DAS", "DDS", "DataDDS, "Version".

    -
    Parameters
    - - -
    rThe name of the object.
    -
    -
    -
    Exceptions
    - - -
    InternalErrThrown if the response is not one of the valid names.
    -
    -
    - -

    Definition at line 420 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ set_timeout()

    - -
    -
    - - - - - - - - -
    void libdap::DODSFilter::set_timeout (int t = 0)
    -
    -

    Set the server's timeout value. A value of zero (the default) means no timeout.

    -
    Parameters
    - - -
    tServer timeout in seconds. Default is zero (no timeout).
    -
    -
    - -

    Definition at line 604 of file DODSFilter.cc.

    - -
    -
    - -

    ◆ set_URL()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DODSFilter::set_URL (const string & url)
    -
    -virtual
    -
    -

    Set the URL. Set the URL sent to the server.

    Parameters
    - - -
    urlThe URL, minus the constraint.
    -
    -
    - -

    Definition at line 393 of file DODSFilter.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1DODSFilter.js b/html/classlibdap_1_1DODSFilter.js deleted file mode 100644 index 7e0c292ff..000000000 --- a/html/classlibdap_1_1DODSFilter.js +++ /dev/null @@ -1,77 +0,0 @@ -var classlibdap_1_1DODSFilter = -[ - [ "Response", "classlibdap_1_1DODSFilter.html#a908589f76cb20a5acdbc1eee0707fe9c", [ - [ "Unknown_Response", "classlibdap_1_1DODSFilter.html#a908589f76cb20a5acdbc1eee0707fe9ca8dc83891bc5af14f36728cf41ae8a56d", null ], - [ "DAS_Response", "classlibdap_1_1DODSFilter.html#a908589f76cb20a5acdbc1eee0707fe9ca76e8a72ea312936dea238527ce4695c4", null ], - [ "DDS_Response", "classlibdap_1_1DODSFilter.html#a908589f76cb20a5acdbc1eee0707fe9ca8b6e5aa1130bc4ad747f7a206144c900", null ], - [ "DataDDS_Response", "classlibdap_1_1DODSFilter.html#a908589f76cb20a5acdbc1eee0707fe9caa78c10a0edfb814265ff23373af482fc", null ], - [ "DDX_Response", "classlibdap_1_1DODSFilter.html#a908589f76cb20a5acdbc1eee0707fe9ca4019280b92b56b01a879c0235dc8419c", null ], - [ "DataDDX_Response", "classlibdap_1_1DODSFilter.html#a908589f76cb20a5acdbc1eee0707fe9caee571a8ebbbf7085de41bf30c25d14f0", null ], - [ "BLOB_Response", "classlibdap_1_1DODSFilter.html#a908589f76cb20a5acdbc1eee0707fe9cab5315b3a7bd11190e8067cd5897de28f", null ], - [ "Version_Response", "classlibdap_1_1DODSFilter.html#a908589f76cb20a5acdbc1eee0707fe9ca9c4a350a040f60ac49d34e20ca528159", null ] - ] ], - [ "DODSFilter", "classlibdap_1_1DODSFilter.html#aa802f48ceffcaff00634940067a1ba02", null ], - [ "DODSFilter", "classlibdap_1_1DODSFilter.html#aab6e493b315d390b41f6d6e806c90045", null ], - [ "~DODSFilter", "classlibdap_1_1DODSFilter.html#a31b50cf60ff28ac38e73703abb432cb7", null ], - [ "dataset_constraint", "classlibdap_1_1DODSFilter.html#ab7d2372a8cd192af7fb3cd208b912645", null ], - [ "dataset_constraint", "classlibdap_1_1DODSFilter.html#a1865c3f7958bdfb6eee32b95b545103e", null ], - [ "dataset_constraint_ddx", "classlibdap_1_1DODSFilter.html#af4b9844c5b110f8943a7edb2b2f3c754", null ], - [ "establish_timeout", "classlibdap_1_1DODSFilter.html#a65b1b9febdb2465a561931d663bf4c0c", null ], - [ "establish_timeout", "classlibdap_1_1DODSFilter.html#a75106d93808b268b9f3ef1ac97c5e551", null ], - [ "functional_constraint", "classlibdap_1_1DODSFilter.html#a85eb20e4cbe2b711cb477dc719b8c2dd", null ], - [ "functional_constraint", "classlibdap_1_1DODSFilter.html#a9e77d7aeaf71b17e2fc04dd80d27ea9b", null ], - [ "get_action", "classlibdap_1_1DODSFilter.html#a74f7f411df86c7a57f08f6a311a422fd", null ], - [ "get_cache_dir", "classlibdap_1_1DODSFilter.html#adac7f923c25d16410b0f4b73afba08c1", null ], - [ "get_ce", "classlibdap_1_1DODSFilter.html#a08084f202b86f92c50611eec2b929ff3", null ], - [ "get_cgi_version", "classlibdap_1_1DODSFilter.html#ab2ddf2af37fcb080e86285721825ae2a", null ], - [ "get_das_last_modified_time", "classlibdap_1_1DODSFilter.html#ae4e6c33243d991ad4eefc28d27c50750", null ], - [ "get_data_last_modified_time", "classlibdap_1_1DODSFilter.html#af53e6f349847054152c4e1eee63980ff", null ], - [ "get_dataset_last_modified_time", "classlibdap_1_1DODSFilter.html#a5a7323353dcce227beeb503aeba0f1e1", null ], - [ "get_dataset_name", "classlibdap_1_1DODSFilter.html#aaae008cb404f7b434b6af72b6b23bcba", null ], - [ "get_dataset_version", "classlibdap_1_1DODSFilter.html#aa40d06abb824f427fa66314eccd91460", null ], - [ "get_dds_last_modified_time", "classlibdap_1_1DODSFilter.html#a207b77e0c203ed54251869e4911f0ee8", null ], - [ "get_request_if_modified_since", "classlibdap_1_1DODSFilter.html#aed25e11334c3184da363a4dffc172a29", null ], - [ "get_response", "classlibdap_1_1DODSFilter.html#a3a062aefb96045bdba4fd7f4e2d39325", null ], - [ "get_timeout", "classlibdap_1_1DODSFilter.html#ada3d864292534694594bdda03f7f9839", null ], - [ "get_URL", "classlibdap_1_1DODSFilter.html#ad93a5c5bfef30ab4036cd79d8ff996c0", null ], - [ "initialize", "classlibdap_1_1DODSFilter.html#a8ac695c5b7ebe39e2a7c8dd44079f317", null ], - [ "initialize", "classlibdap_1_1DODSFilter.html#a1420d214791dc0c4bb907cd9f6d967a6", null ], - [ "is_conditional", "classlibdap_1_1DODSFilter.html#aa9c03b6da01df9fb71baa5b2d973cb39", null ], - [ "print_usage", "classlibdap_1_1DODSFilter.html#a916548931d78abba139bea6641db6e72", null ], - [ "process_options", "classlibdap_1_1DODSFilter.html#a609ed4df55fdf7cc995e3951a1f2ddd0", null ], - [ "send_das", "classlibdap_1_1DODSFilter.html#a8f3f0d7fd7542f3984cc8024b48e0c47", null ], - [ "send_das", "classlibdap_1_1DODSFilter.html#a88c4473e601409f5268bf19159242b8c", null ], - [ "send_das", "classlibdap_1_1DODSFilter.html#a7315eee0c3a733e568840784f445aa3c", null ], - [ "send_data", "classlibdap_1_1DODSFilter.html#a1ca0cdc66d2eaa77dc7bbe126cb7eb04", null ], - [ "send_data", "classlibdap_1_1DODSFilter.html#a4236f7ac38d4499d01bda826fd98bde5", null ], - [ "send_data_ddx", "classlibdap_1_1DODSFilter.html#ac46088698a88e1452b381b18015785d7", null ], - [ "send_dds", "classlibdap_1_1DODSFilter.html#a34bdffa81c6910650bb3457ff9389705", null ], - [ "send_dds", "classlibdap_1_1DODSFilter.html#ad84000bbbfbdcd3bf41bab6136e55790", null ], - [ "send_dds", "classlibdap_1_1DODSFilter.html#a99f2e1dde433219446073ed3fba41cc0", null ], - [ "send_ddx", "classlibdap_1_1DODSFilter.html#aae5ece89f0fb09dbc8b30f2018e02295", null ], - [ "send_ddx", "classlibdap_1_1DODSFilter.html#a42e19516994bd9cc154cafed7e5ac3aa", null ], - [ "send_version_info", "classlibdap_1_1DODSFilter.html#abb9505908d58a0c2a058dc4ea6065e8d", null ], - [ "set_ce", "classlibdap_1_1DODSFilter.html#a7a3b83c758edb5ed45270004673a355d", null ], - [ "set_cgi_version", "classlibdap_1_1DODSFilter.html#ad95070bc42a8aff97cb6c626c78480b6", null ], - [ "set_dataset_name", "classlibdap_1_1DODSFilter.html#ab4aa216d0b462b2a18234a241d9b6b01", null ], - [ "set_response", "classlibdap_1_1DODSFilter.html#acdf3c3346d326a252d17f5dc346aed5c", null ], - [ "set_timeout", "classlibdap_1_1DODSFilter.html#a8d9a76bd0ef270d86ef40b7cc4dc03ff", null ], - [ "set_URL", "classlibdap_1_1DODSFilter.html#a6c1b6941a1a6421607eadd675d341077", null ], - [ "d_action", "classlibdap_1_1DODSFilter.html#a18f324b6760e82d1a0fea5a272125af3", null ], - [ "d_anc_das_lmt", "classlibdap_1_1DODSFilter.html#a32605daab8497b578477748934b009cc", null ], - [ "d_anc_dds_lmt", "classlibdap_1_1DODSFilter.html#a10ec1bad5515cb040d6b67e42a738a5c", null ], - [ "d_anc_dir", "classlibdap_1_1DODSFilter.html#ad3b704cdf6eae452da68dc16731ee5ce", null ], - [ "d_anc_file", "classlibdap_1_1DODSFilter.html#a624e0d9fd279c1d75ec769655d6db372", null ], - [ "d_bad_options", "classlibdap_1_1DODSFilter.html#aafe1eced520da8420b3a3a4aee610fe2", null ], - [ "d_cache_dir", "classlibdap_1_1DODSFilter.html#a71eee99308f72e94171ceca9ad161e5a", null ], - [ "d_cgi_ver", "classlibdap_1_1DODSFilter.html#a20a3784b4893aa9344908e60c228101d", null ], - [ "d_comp", "classlibdap_1_1DODSFilter.html#ac341bef83b259326604a80d39662c8ba", null ], - [ "d_conditional_request", "classlibdap_1_1DODSFilter.html#a61a5b0904d54eb56c7a6ad1684c05a34", null ], - [ "d_dap2ce", "classlibdap_1_1DODSFilter.html#a25c4f064890c0c4ea98aab7f26ac795f", null ], - [ "d_dataset", "classlibdap_1_1DODSFilter.html#abd2238d1d57f34a1d3a0a1d074b9530f", null ], - [ "d_if_modified_since", "classlibdap_1_1DODSFilter.html#a6e1e20b5e89ce89556d3ef2a818a9093", null ], - [ "d_program_name", "classlibdap_1_1DODSFilter.html#aff22b76e40a2a5341fcc2b0551080b24", null ], - [ "d_response", "classlibdap_1_1DODSFilter.html#aab229b7ab7035001dbfbc664c5b31a06", null ], - [ "d_timeout", "classlibdap_1_1DODSFilter.html#aacd4a007b3849111d16f53fbdad31268", null ], - [ "d_url", "classlibdap_1_1DODSFilter.html#ae415bfa9bee1c09e58a4330f51c761f8", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1DapIndent-members.html b/html/classlibdap_1_1DapIndent-members.html deleted file mode 100644 index 72c58f5de..000000000 --- a/html/classlibdap_1_1DapIndent-members.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::DapIndent Member List
    -
    -
    - -

    This is the complete list of members for libdap::DapIndent, including all inherited members.

    - - - - - - - -
    GetIndent() (defined in libdap::DapIndent)libdap::DapIndentstatic
    Indent() (defined in libdap::DapIndent)libdap::DapIndentstatic
    LMarg(ostream &strm) (defined in libdap::DapIndent)libdap::DapIndentstatic
    Reset() (defined in libdap::DapIndent)libdap::DapIndentstatic
    SetIndent(const string &indent) (defined in libdap::DapIndent)libdap::DapIndentstatic
    UnIndent() (defined in libdap::DapIndent)libdap::DapIndentstatic
    -
    - - - - diff --git a/html/classlibdap_1_1DapIndent.html b/html/classlibdap_1_1DapIndent.html deleted file mode 100644 index 5b71f0309..000000000 --- a/html/classlibdap_1_1DapIndent.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - -libdap: libdap::DapIndent Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::DapIndent Class Reference
    -
    -
    - -

    class with static methods to help with indentation of debug information. - More...

    - -

    #include <DapIndent.h>

    - - - - - - - - - - - - - - -

    -Static Public Member Functions

    -static const string & GetIndent ()
     
    -static void Indent ()
     
    -static ostream & LMarg (ostream &strm)
     
    -static void Reset ()
     
    -static void SetIndent (const string &indent)
     
    -static void UnIndent ()
     
    -

    Detailed Description

    -

    class with static methods to help with indentation of debug information.

    - -

    Definition at line 51 of file DapIndent.h.

    -

    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1DapObj-members.html b/html/classlibdap_1_1DapObj-members.html deleted file mode 100644 index adcbf67e4..000000000 --- a/html/classlibdap_1_1DapObj-members.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::DapObj Member List
    -
    -
    - -

    This is the complete list of members for libdap::DapObj, including all inherited members.

    - - - -
    dump(std::ostream &strm) const =0libdap::DapObjpure virtual
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1DapObj.html b/html/classlibdap_1_1DapObj.html deleted file mode 100644 index 64f53b735..000000000 --- a/html/classlibdap_1_1DapObj.html +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - - -libdap: libdap::DapObj Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::DapObj Class Referenceabstract
    -
    -
    - -

    libdap base object for common functionality of libdap objects - More...

    - -

    #include <DapObj.h>

    -
    -Inheritance diagram for libdap::DapObj:
    -
    -
    Inheritance graph
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - -

    -Public Member Functions

    virtual void dump (std::ostream &strm) const =0
     dump the contents of this object to the specified ostream More...
     
    -

    Detailed Description

    -

    libdap base object for common functionality of libdap objects

    -

    A base object for any libdap objects to use. Provides simple methods for dumping the contents of the object.

    - -

    Definition at line 50 of file DapObj.h.

    -

    Member Function Documentation

    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::DapObj::dump (std::ostream & strm) const
    -
    -pure virtual
    -
    -
    -
    The documentation for this class was generated from the following file: -
    -
    - - - - diff --git a/html/classlibdap_1_1DapObj.js b/html/classlibdap_1_1DapObj.js deleted file mode 100644 index f6b6d7e15..000000000 --- a/html/classlibdap_1_1DapObj.js +++ /dev/null @@ -1,5 +0,0 @@ -var classlibdap_1_1DapObj = -[ - [ "~DapObj", "classlibdap_1_1DapObj.html#a18783d1c71c1ccec3d2d0c8ee995530b", null ], - [ "dump", "classlibdap_1_1DapObj.html#a51e52c3fbaad17173676a8bd48d16047", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1DapObj__inherit__graph.map b/html/classlibdap_1_1DapObj__inherit__graph.map deleted file mode 100644 index e748fa9e0..000000000 --- a/html/classlibdap_1_1DapObj__inherit__graph.map +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/html/classlibdap_1_1DapObj__inherit__graph.md5 b/html/classlibdap_1_1DapObj__inherit__graph.md5 deleted file mode 100644 index 512f288d1..000000000 --- a/html/classlibdap_1_1DapObj__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -1c726d36d0dadd3fb7f471a7f6529702 \ No newline at end of file diff --git a/html/classlibdap_1_1DapObj__inherit__graph.png b/html/classlibdap_1_1DapObj__inherit__graph.png deleted file mode 100644 index 020190f9b5f80edffd63165dd24b44b134014a15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1019109 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%0A^x}X1uchaSwy(U%|QiZiy^X`C? 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

    s*le+z{|O1&1NLZOG{Cg#YF9@x9szi7!N{!I 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

    ;v5%+2y-NENF&On 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�*;=h-`kKtfbR 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

    I|DZjtL(GP2*K34DB^L9H40wpadP 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 kEc@|)&9KwI+ - - - - - - -libdap: Member List - - - - - - - - - - - -

    -
    - -
    -
    -
    - -
    - - - - diff --git a/html/classlibdap_1_1DapXmlNamspaces.html b/html/classlibdap_1_1DapXmlNamspaces.html deleted file mode 100644 index 50b648bd0..000000000 --- a/html/classlibdap_1_1DapXmlNamspaces.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - -libdap: libdap::DapXmlNamspaces Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::DapXmlNamspaces Class Reference
    -
    -
    - - - - - - - - - - - - - - -

    -Static Public Member Functions

    static std::string getDapNamespaceString (DAPVersion version)
     
    static std::string getGrddlTransformation (DAPVersion version)
     
    static std::string getSchemaLocationDeclarationString (DAPVersion version)
     
    static std::string getSchemaLocationString (DAPVersion version)
     
    static std::string getXmlNamespace ()
     
    static std::string getXmlXsiNamespace ()
     
    -

    Detailed Description

    -
    -

    Definition at line 34 of file DapXmlNamespaces.h.

    -

    Member Function Documentation

    - -

    ◆ getDapNamespaceString()

    - -
    -
    - - - - - -
    - - - - - - - - -
    static std::string libdap::DapXmlNamspaces::getDapNamespaceString (DAPVersion version)
    -
    -inlinestatic
    -
    -

    Returns the DAP XML namespace string for the passed DAP version.

    - -

    Definition at line 84 of file DapXmlNamespaces.h.

    - -
    -
    - -

    ◆ getGrddlTransformation()

    - -
    -
    - - - - - -
    - - - - - - - - -
    static std::string libdap::DapXmlNamspaces::getGrddlTransformation (DAPVersion version)
    -
    -inlinestatic
    -
    -

    Returns the GRDDL transformation URL for the passed DAP version.

    - -

    Definition at line 57 of file DapXmlNamespaces.h.

    - -
    -
    - -

    ◆ getSchemaLocationDeclarationString()

    - -
    -
    - - - - - -
    - - - - - - - - -
    static std::string libdap::DapXmlNamspaces::getSchemaLocationDeclarationString (DAPVersion version)
    -
    -inlinestatic
    -
    -

    Returns the schema location declaration (the namespace string followed by a space followed by the schema location string) for the passed DAP version.

    - -

    Definition at line 135 of file DapXmlNamespaces.h.

    - -
    -
    - -

    ◆ getSchemaLocationString()

    - -
    -
    - - - - - -
    - - - - - - - - -
    static std::string libdap::DapXmlNamspaces::getSchemaLocationString (DAPVersion version)
    -
    -inlinestatic
    -
    -

    Returns the schema location URI string for the passed DAP version.

    - -

    Definition at line 108 of file DapXmlNamespaces.h.

    - -
    -
    - -

    ◆ getXmlNamespace()

    - -
    -
    - - - - - -
    - - - - - - - -
    static std::string libdap::DapXmlNamspaces::getXmlNamespace ()
    -
    -inlinestatic
    -
    -

    Returns the XML namespace string.

    - -

    Definition at line 50 of file DapXmlNamespaces.h.

    - -
    -
    - -

    ◆ getXmlXsiNamespace()

    - -
    -
    - - - - - -
    - - - - - - - -
    static std::string libdap::DapXmlNamspaces::getXmlXsiNamespace ()
    -
    -inlinestatic
    -
    -

    Returns the XML Schema-instance namespace string.

    - -

    Definition at line 43 of file DapXmlNamespaces.h.

    - -
    -
    -
    The documentation for this class was generated from the following file: -
    -
    - - - - diff --git a/html/classlibdap_1_1DapXmlNamspaces.js b/html/classlibdap_1_1DapXmlNamspaces.js deleted file mode 100644 index 63a91881e..000000000 --- a/html/classlibdap_1_1DapXmlNamspaces.js +++ /dev/null @@ -1,4 +0,0 @@ -var classlibdap_1_1DapXmlNamspaces = -[ - [ "~DapXmlNamspaces", "classlibdap_1_1DapXmlNamspaces.html#a536f625a02210fe23f7de681f22a7036", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1DataDDS-members.html b/html/classlibdap_1_1DataDDS-members.html deleted file mode 100644 index ccfb81e31..000000000 --- a/html/classlibdap_1_1DataDDS-members.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::DataDDS Member List
    -
    -
    - -

    This is the complete list of members for libdap::DataDDS, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    add_var(BaseType *bt)libdap::DDS
    add_var_nocopy(BaseType *bt)libdap::DDS
    check_semantics(bool all=false)libdap::DDS
    container()libdap::DDS
    container_name()libdap::DDS
    container_name(const string &cn)libdap::DDS
    DataDDS(BaseTypeFactory *factory, const string &n="", const string &v="", const string &p="")libdap::DataDDS
    DDS(BaseTypeFactory *factory, const string &name="")libdap::DDS
    DDS(BaseTypeFactory *factory, const string &name, const string &version)libdap::DDS
    DDS(const DDS &dds)libdap::DDS
    del_var(const string &n)libdap::DDS
    del_var(Vars_iter i)libdap::DDS
    del_var(Vars_iter i1, Vars_iter i2)libdap::DDS
    dump(ostream &strm) constlibdap::DataDDSvirtual
    duplicate(const DDS &dds) (defined in libdap::DDS)libdap::DDSprotected
    exact_match(const string &name, BaseType::btp_stack *s=0) (defined in libdap::DDS)libdap::DDSprotected
    filename() constlibdap::DDS
    filename(const string &fn)libdap::DDS
    get_attr_table()libdap::DDSvirtual
    get_dap_major() constlibdap::DDSinline
    get_dap_minor() constlibdap::DDSinline
    get_dap_version() const (defined in libdap::DDS)libdap::DDSinline
    get_das()libdap::DDS
    get_das(DAS *das) (defined in libdap::DDS)libdap::DDS
    get_dataset_name() constlibdap::DDS
    get_dmr_version() const (defined in libdap::DDS)libdap::DDSinline
    get_factory() constlibdap::DDSinline
    get_namespace() constlibdap::DDSinline
    get_protocol() const (defined in libdap::DataDDS)libdap::DataDDSinline
    get_protocol_major() const (defined in libdap::DataDDS)libdap::DataDDSinline
    get_protocol_minor() const (defined in libdap::DataDDS)libdap::DataDDSinline
    get_request_size(bool constrained)libdap::DDS
    get_request_xml_base() constlibdap::DDSinline
    get_response_limit()libdap::DDSinline
    get_timeout() (defined in libdap::DDS)libdap::DDS
    get_var_index(int i)libdap::DDS
    get_vars_iter(int i)libdap::DDS
    get_version() constlibdap::DataDDSinline
    get_version_major() constlibdap::DataDDSinline
    get_version_minor() constlibdap::DataDDSinline
    insert_var(Vars_iter i, BaseType *ptr)libdap::DDS
    insert_var_nocopy(Vars_iter i, BaseType *ptr)libdap::DDS
    leaf_match(const string &name, BaseType::btp_stack *s=0) (defined in libdap::DDS)libdap::DDSprotected
    mark(const string &name, bool state)libdap::DDS
    mark_all(bool state)libdap::DDS
    num_var()libdap::DDS
    operator=(const DDS &rhs) (defined in libdap::DDS)libdap::DDS
    parse(string fname)libdap::DDS
    parse(int fd)libdap::DDS
    parse(FILE *in=stdin)libdap::DDS
    print(FILE *out)libdap::DDS
    print(ostream &out)libdap::DDS
    print_constrained(FILE *out)libdap::DDS
    print_constrained(ostream &out)libdap::DDS
    print_das(ostream &out)libdap::DDS
    print_dmr(ostream &out, bool constrained)libdap::DDS
    print_xml(FILE *out, bool constrained, const string &blob="")libdap::DDS
    print_xml(ostream &out, bool constrained, const string &blob="")libdap::DDS
    print_xml_writer(ostream &out, bool constrained, const string &blob="")libdap::DDS
    set_dap_major(int p)libdap::DDS
    set_dap_minor(int p)libdap::DDS
    set_dap_version(const string &version_string="2.0")libdap::DDS
    set_dap_version(double d)libdap::DDS
    set_dataset_name(const string &n)libdap::DDS
    set_factory(BaseTypeFactory *factory)libdap::DDSinline
    set_namespace(const string &ns)libdap::DDSinline
    set_protocol(const string &p) (defined in libdap::DataDDS)libdap::DataDDSinline
    set_request_xml_base(const string &xb)libdap::DDSinline
    set_response_limit(long size)libdap::DDSinline
    set_timeout(int t) (defined in libdap::DDS)libdap::DDS
    set_version(const string &v)libdap::DataDDSinline
    tag_nested_sequences()libdap::DDS
    timeout_off() (defined in libdap::DDS)libdap::DDS
    timeout_on() (defined in libdap::DDS)libdap::DDS
    transfer_attributes(DAS *das)libdap::DDSvirtual
    var(const string &n, BaseType::btp_stack &s)libdap::DDS
    var(const string &n, BaseType::btp_stack *s=0)libdap::DDS
    var_begin()libdap::DDS
    var_end()libdap::DDS
    var_rbegin()libdap::DDS
    var_rend()libdap::DDS
    Vars_citer typedef (defined in libdap::DDS)libdap::DDS
    Vars_iter typedef (defined in libdap::DDS)libdap::DDS
    Vars_riter typedef (defined in libdap::DDS)libdap::DDS
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    ~DataDDS() (defined in libdap::DataDDS)libdap::DataDDSinlinevirtual
    ~DDS() (defined in libdap::DDS)libdap::DDSvirtual
    -
    - - - - diff --git a/html/classlibdap_1_1DataDDS.html b/html/classlibdap_1_1DataDDS.html deleted file mode 100644 index 3e3ec8454..000000000 --- a/html/classlibdap_1_1DataDDS.html +++ /dev/null @@ -1,2548 +0,0 @@ - - - - - - - -libdap: libdap::DataDDS Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    - -

    Holds a DAP2 DDS. - More...

    - -

    #include <DataDDS.h>

    -
    -Inheritance diagram for libdap::DataDDS:
    -
    -
    Inheritance graph
    - - - - -
    - - - - - - - - -

    -Public Types

    -typedef std::vector< BaseType * >::const_iterator Vars_citer
     
    -typedef std::vector< BaseType * >::iterator Vars_iter
     
    -typedef std::vector< BaseType * >::reverse_iterator Vars_riter
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    void add_var (BaseType *bt)
     Adds a copy of the variable to the DDS. Using the ptr_duplicate() method, perform a deep copy on the variable bt and adds the result to this DDS. More...
     
    void add_var_nocopy (BaseType *bt)
     Adds the variable to the DDS. More...
     
    bool check_semantics (bool all=false)
     Check the semantics of each of the variables represented in the DDS. More...
     
     DataDDS (BaseTypeFactory *factory, const string &n="", const string &v="", const string &p="")
     Make an instance of DataDDS A DataDDS instance is a DDS with additional information about the version of the server from which the data came. More...
     
    void del_var (const string &n)
     Removes a variable from the DDS. More...
     
    void del_var (Vars_iter i)
     Removes a variable from the DDS. More...
     
    void del_var (Vars_iter i1, Vars_iter i2)
     Removes a range of variables from the DDS. More...
     
    virtual void dump (ostream &strm) const
     dumps information about this object More...
     
    virtual AttrTableget_attr_table ()
     
    int get_dap_major () const
     Get the DAP major version as sent by the client. More...
     
    int get_dap_minor () const
     Get the DAP minor version as sent by the client. More...
     
    -string get_dap_version () const
     
    DASget_das ()
     Get a DAS object. More...
     
    -void get_das (DAS *das)
     
    -string get_dmr_version () const
     
    BaseTypeFactoryget_factory () const
     
    string get_namespace () const
     Get the namespace associated with the DDS - likely set only by DDX responses. More...
     
    -string get_protocol () const
     
    -int get_protocol_major () const
     
    -int get_protocol_minor () const
     
    int get_request_size (bool constrained)
     Get the estimated response size. More...
     
    string get_request_xml_base () const
     Get the URL that will return this DDS/DDX/DataThing. More...
     
    long get_response_limit ()
     Get the maximum response size, in Bytes. Zero indicates no limit. More...
     
    BaseTypeget_var_index (int i)
     Get a variable. More...
     
    Vars_iter get_vars_iter (int i)
     Get an iterator. More...
     
    string get_version () const
     Get the server version string, unparsed. More...
     
    int get_version_major () const
     Returns the major version number. More...
     
    int get_version_minor () const
     Returns the minor version number. More...
     
    void insert_var (Vars_iter i, BaseType *ptr)
     Insert a variable before the referenced element. More...
     
    void insert_var_nocopy (Vars_iter i, BaseType *ptr)
     
    bool mark (const string &name, bool state)
     Mark the send_p flag of the named variable to state. More...
     
    void mark_all (bool state)
     
    int num_var ()
     Returns the number of variables in the DDS. More...
     
    void parse (string fname)
     Parse a DDS from a file with the given d_name. More...
     
    void parse (int fd)
     Parse a DDS from a file indicated by the input file descriptor. More...
     
    void parse (FILE *in=stdin)
     Parse a DDS from a file indicated by the input file descriptor. Read the persistent representation of a DDS from the FILE *in, parse it and create a matching binary object. More...
     
    void print (FILE *out)
     Print the entire DDS to the specified file. More...
     
    void print (ostream &out)
     Print the entire DDS to the specified ostream. More...
     
    void print_constrained (FILE *out)
     Print a constrained DDS to the specified file. More...
     
    void print_constrained (ostream &out)
     Print a constrained DDS to the specified ostream. More...
     
    void print_das (ostream &out)
     write the DAS response given the attribute information in the DDS More...
     
    void print_dmr (ostream &out, bool constrained)
     Print the DAP4 DMR object using a DDS. More...
     
    void print_xml (FILE *out, bool constrained, const string &blob="")
     
    void print_xml (ostream &out, bool constrained, const string &blob="")
     
    void print_xml_writer (ostream &out, bool constrained, const string &blob="")
     
    void set_dap_major (int p)
     
    void set_dap_minor (int p)
     
    void set_dap_version (const string &version_string="2.0")
     
    void set_dap_version (double d)
     
    BaseTypeFactoryset_factory (BaseTypeFactory *factory)
     
    void set_namespace (const string &ns)
     Set the namespace for this DDS/DDX object/response. More...
     
    -void set_protocol (const string &p)
     
    void set_request_xml_base (const string &xb)
     
    void set_response_limit (long size)
     
    void set_version (const string &v)
     
    void tag_nested_sequences ()
     Traverse DDS, set Sequence leaf nodes. More...
     
    virtual void transfer_attributes (DAS *das)
     
    BaseTypevar (const string &n, BaseType::btp_stack &s)
     
    BaseTypevar (const string &n, BaseType::btp_stack *s=0)
     Find the variable with the given d_name. More...
     
    Vars_iter var_begin ()
     Return an iterator to the first variable. More...
     
    Vars_iter var_end ()
     Return an iterator. More...
     
    Vars_riter var_rbegin ()
     Return a reverse iterator. More...
     
    Vars_riter var_rend ()
     Return a reverse iterator. More...
     
    string get_dataset_name () const
     
    void set_dataset_name (const string &n)
     
    string filename () const
     
    void filename (const string &fn)
     
    string container_name ()
     
    void container_name (const string &cn)
     
    Structurecontainer ()
     
    DDS_timeout

    Old deprecated DDS timeout code

    Deprecated:
    -
    -void timeout_on ()
     
    -void timeout_off ()
     
    -void set_timeout (int t)
     
    -int get_timeout ()
     
    - - - - - - - -

    -Protected Member Functions

    -void duplicate (const DDS &dds)
     
    -BaseTypeexact_match (const string &name, BaseType::btp_stack *s=0)
     
    -BaseTypeleaf_match (const string &name, BaseType::btp_stack *s=0)
     
    -

    Detailed Description

    -

    Holds a DAP2 DDS.

    -

    This class adds some useful state information to the DDS structure. It is for use on the client side of the connection.

    -
    Note
    Make sure to pass a valid pointer to the DDS constructor or use the set_factory() method before actually using the DDS. Also make sure that the Factory's lifetime thereafter is the same as the DDS's. Never delete the factory until you're done using the DDS.
    -
    -Update: I removed the DEFAULT_BASETYPE_FACTORY switch because it caused more confusion than it avoided. See Trac #130.
    -
    -The compile-time symbol DEFAULT_BASETYPE_FACTORY controls whether the old (3.4 and earlier) DDS and DataDDS constructors are supported. These constructors now use a default factory class (BaseTypeFactory, implemented by this library) to instantiate Byte, ..., Grid variables. To use the default ctor in your code you must also define this symbol. If you do choose to define this and fail to provide a specialization of BaseTypeFactory when your software needs one, you code may not link or may fail at run time. In addition to the older ctors for DDS and DataDDS, defining the symbol also makes some of the older methods in Connect available (because those methods require the older DDS and DataDDS ctors.
    -
    See also
    Connect
    - -

    Definition at line 77 of file DataDDS.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ DataDDS()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    libdap::DataDDS::DataDDS (BaseTypeFactoryfactory,
    const string & n = "",
    const string & v = "",
    const string & p = "" 
    )
    -
    - -

    Make an instance of DataDDS A DataDDS instance is a DDS with additional information about the version of the server from which the data came.

    -
    Parameters
    - - - - - -
    factoryUse this BaseTypeFactory to instantiate the variables. Caller must free; can also be set using the set_factory() method. Never delete until just before deleting the DDS itself unless you intend to replace the factory with a new instance.
    nThe name of the dataset. Can also be set using the set_dataset_name() method.
    vThe server version.
    pThe protocol version.
    -
    -
    - -

    Definition at line 159 of file DataDDS.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ add_var()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDS::add_var (BaseTypebt)
    -
    -inherited
    -
    - -

    Adds a copy of the variable to the DDS. Using the ptr_duplicate() method, perform a deep copy on the variable bt and adds the result to this DDS.

    -
    Note
    The copy will not copy data values.
    -
    Parameters
    - - -
    btSource variable.
    -
    -
    - -

    Definition at line 586 of file DDS.cc.

    - -
    -
    - -

    ◆ add_var_nocopy()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDS::add_var_nocopy (BaseTypebt)
    -
    -inherited
    -
    - -

    Adds the variable to the DDS.

    -
    Parameters
    - - -
    btSource variable.
    -
    -
    - -

    Definition at line 613 of file DDS.cc.

    - -
    -
    - -

    ◆ check_semantics()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool libdap::DDS::check_semantics (bool all = false)
    -
    -inherited
    -
    - -

    Check the semantics of each of the variables represented in the DDS.

    -

    Check the semantics of the DDS describing a complete dataset. If ALL is true, check not only the semantics of THIS->TABLE, but also recursively all ctor types in the THIS->TABLE. By default, ALL is false since parsing a DDS input file runs semantic checks on all variables (but not the dataset itself.

    -
    Returns
    TRUE if the conventions for the DDS are not violated, FALSE otherwise.
    -
    Parameters
    - - -
    allIf true, recursively check the individual members of compound variables.
    -
    -
    -
    See also
    BaseType::check_semantics
    - -

    Definition at line 1720 of file DDS.cc.

    - -
    -
    - -

    ◆ container()

    - -
    -
    - - - - - -
    - - - - - - - -
    Structure * libdap::DDS::container ()
    -
    -inherited
    -
    -

    Get the current container structure.

    - -

    Definition at line 547 of file DDS.cc.

    - -
    -
    - -

    ◆ container_name() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::DDS::container_name ()
    -
    -inherited
    -
    -

    Get and set the current container. If there are multiple files being used to build this DDS, using a container will set a virtual structure for the current container.

    -

    Container Name Accessor

    See also
    Dataset Name Accessors Gets the dataset file d_name.
    - -

    Definition at line 511 of file DDS.cc.

    - -
    -
    - -

    ◆ container_name() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDS::container_name (const string & cn)
    -
    -inherited
    -
    -

    Set the current container d_name and get or create a structure for that d_name.

    - -

    Definition at line 519 of file DDS.cc.

    - -
    -
    - -

    ◆ del_var() [1/3]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDS::del_var (const string & n)
    -
    -inherited
    -
    - -

    Removes a variable from the DDS.

    -

    Remove the named variable from the DDS. This method is not smart about looking up names. The variable must exist at the top level of the DDS and must match exactly the d_name given.

    -
    Note
    Invalidates any iterators that reference the contents of the DDS.
    -
    Parameters
    - - -
    nThe d_name of the variable to remove.
    -
    -
    - -

    Definition at line 636 of file DDS.cc.

    - -
    -
    - -

    ◆ del_var() [2/3]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDS::del_var (Vars_iter i)
    -
    -inherited
    -
    - -

    Removes a variable from the DDS.

    -

    Remove the variable referenced by the iterator and free its storage.

    -
    Note
    Invalidates any iterators that reference the contents of the DDS.
    -
    Parameters
    - - -
    iThe Vars_iter which refers to the variable.
    -
    -
    - -

    Definition at line 659 of file DDS.cc.

    - -
    -
    - -

    ◆ del_var() [3/3]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::DDS::del_var (Vars_iter i1,
    Vars_iter i2 
    )
    -
    -inherited
    -
    - -

    Removes a range of variables from the DDS.

    -

    Remove the variables referenced by the range of iterators and free their storage.

    -
    Note
    Invalidates any iterators that reference the contents of the DDS.
    -
    Parameters
    - - - -
    i1The start of the range.
    i2The end of the range.
    -
    -
    - -

    Definition at line 675 of file DDS.cc.

    - -
    -
    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DataDDS::dump (ostream & strm) const
    -
    -virtual
    -
    - -

    dumps information about this object

    -

    Displays the pointer value of this instance and then calls parent dump

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the information to
    -
    -
    -
    Returns
    void
    - -

    Reimplemented from libdap::DDS.

    - -

    Definition at line 124 of file DataDDS.cc.

    - -
    -
    - -

    ◆ filename() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::DDS::filename () const
    -
    -inherited
    -
    -

    Get and set the dataset's filename. This is the physical location on a disk where the dataset exists. The dataset d_name is simply a title.

    -

    File Name Accessor

    See also
    Dataset Name Accessors Gets the dataset file d_name.
    - -

    Definition at line 387 of file DDS.cc.

    - -
    -
    - -

    ◆ filename() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDS::filename (const string & fn)
    -
    -inherited
    -
    -

    Set the dataset's filename.

    - -

    Definition at line 394 of file DDS.cc.

    - -
    -
    - -

    ◆ get_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - -
    AttrTable & libdap::DDS::get_attr_table ()
    -
    -virtualinherited
    -
    -

    Get the attribute table for the global attributes.

    - -

    Definition at line 372 of file DDS.cc.

    - -
    -
    - -

    ◆ get_dap_major()

    - -
    -
    - - - - - -
    - - - - - - - -
    int libdap::DDS::get_dap_major () const
    -
    -inlineinherited
    -
    - -

    Get the DAP major version as sent by the client.

    - -

    Definition at line 266 of file DDS.h.

    - -
    -
    - -

    ◆ get_dap_minor()

    - -
    -
    - - - - - -
    - - - - - - - -
    int libdap::DDS::get_dap_minor () const
    -
    -inlineinherited
    -
    - -

    Get the DAP minor version as sent by the client.

    - -

    Definition at line 268 of file DDS.h.

    - -
    -
    - -

    ◆ get_das()

    - -
    -
    - - - - - -
    - - - - - - - -
    DAS * libdap::DDS::get_das ()
    -
    -inherited
    -
    - -

    Get a DAS object.

    -

    Returns a new DAS that contains all of the Dataset attributes. This includes all Variable attributes as well as Global attributes. The caller is responsible for deleting the returned object.

    -
    Returns
    A newly allocated DAS object
    - -

    Definition at line 1211 of file DDS.cc.

    - -
    -
    - -

    ◆ get_dataset_name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::DDS::get_dataset_name () const
    -
    -inherited
    -
    -

    Get and set the dataset's d_name. This is the d_name of the dataset itself, and is not to be confused with the d_name of the file or disk on which it is stored.

    -

    Dataset Name Accessors Returns the dataset's d_name.

    - -

    Definition at line 356 of file DDS.cc.

    - -
    -
    - -

    ◆ get_factory()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseTypeFactory* libdap::DDS::get_factory () const
    -
    -inlineinherited
    -
    -

    Return the factory which makes instances of the Byte, ..., Grid type classes. Specialize BaseTypeFactory so that a DDS will be populated with your client or server's specialized types.

    Returns
    An instance of BaseTypeFactory.
    - -

    Definition at line 242 of file DDS.h.

    - -
    -
    - -

    ◆ get_namespace()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::DDS::get_namespace () const
    -
    -inlineinherited
    -
    - -

    Get the namespace associated with the DDS - likely set only by DDX responses.

    - -

    Definition at line 292 of file DDS.h.

    - -
    -
    - -

    ◆ get_request_size()

    - -
    -
    - - - - - -
    - - - - - - - - -
    int libdap::DDS::get_request_size (bool constrained)
    -
    -inherited
    -
    - -

    Get the estimated response size.

    -

    Get the size of a response. This method looks at the variables in the DDS a computes the number of bytes in the response.

    -
    Note
    This version of the method does a poor job with Sequences. A better implementation would look at row-constraint-based limitations and use them for size computations. If a row-constraint is missing, return an error.
    -
    Parameters
    - - -
    constrainedShould the size of the whole DDS be used or should the current constraint be taken into account?
    -
    -
    - -

    Definition at line 565 of file DDS.cc.

    - -
    -
    - -

    ◆ get_request_xml_base()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::DDS::get_request_xml_base () const
    -
    -inlineinherited
    -
    - -

    Get the URL that will return this DDS/DDX/DataThing.

    - -

    Definition at line 286 of file DDS.h.

    - -
    -
    - -

    ◆ get_response_limit()

    - -
    -
    - - - - - -
    - - - - - - - -
    long libdap::DDS::get_response_limit ()
    -
    -inlineinherited
    -
    - -

    Get the maximum response size, in Bytes. Zero indicates no limit.

    - -

    Definition at line 298 of file DDS.h.

    - -
    -
    - -

    ◆ get_var_index()

    - -
    -
    - - - - - -
    - - - - - - - - -
    BaseType * libdap::DDS::get_var_index (int i)
    -
    -inherited
    -
    - -

    Get a variable.

    -

    Return the ith variable.

    Parameters
    - - -
    ithe index
    -
    -
    -
    Returns
    The corresponding variable
    - -

    Definition at line 835 of file DDS.cc.

    - -
    -
    - -

    ◆ get_vars_iter()

    - -
    -
    - - - - - -
    - - - - - - - - -
    DDS::Vars_iter libdap::DDS::get_vars_iter (int i)
    -
    -inherited
    -
    - -

    Get an iterator.

    -

    Return the iterator for the ith variable.

    Parameters
    - - -
    ithe index
    -
    -
    -
    Returns
    The corresponding Vars_iter
    - -

    Definition at line 826 of file DDS.cc.

    - -
    -
    - -

    ◆ get_version()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::DataDDS::get_version () const
    -
    -inline
    -
    - -

    Get the server version string, unparsed.

    - -

    Definition at line 109 of file DataDDS.h.

    - -
    -
    - -

    ◆ get_version_major()

    - -
    -
    - - - - - -
    - - - - - - - -
    int libdap::DataDDS::get_version_major () const
    -
    -inline
    -
    - -

    Returns the major version number.

    - -

    Definition at line 114 of file DataDDS.h.

    - -
    -
    - -

    ◆ get_version_minor()

    - -
    -
    - - - - - -
    - - - - - - - -
    int libdap::DataDDS::get_version_minor () const
    -
    -inline
    -
    - -

    Returns the minor version number.

    - -

    Definition at line 119 of file DataDDS.h.

    - -
    -
    - -

    ◆ insert_var()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::DDS::insert_var (Vars_iter i,
    BaseTypeptr 
    )
    -
    -inherited
    -
    - -

    Insert a variable before the referenced element.

    -

    Insert a copy of the BaseType before the position given.

    Parameters
    - - - -
    iThe iterator that marks the position
    ptrThe BaseType object to copy and insert
    -
    -
    - -

    Definition at line 845 of file DDS.cc.

    - -
    -
    - -

    ◆ insert_var_nocopy()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::DDS::insert_var_nocopy (Vars_iter i,
    BaseTypeptr 
    )
    -
    -inherited
    -
    -

    Insert the BaseType before the position given.

    Note
    Does not copy the BaseType object - that caller must not free the inserted object's pointer. This object will, however, delete the pointer when it is deleted.
    -
    Parameters
    - - - -
    iThe iterator that marks the position
    ptrThe BaseType object to insert
    -
    -
    - -

    Definition at line 862 of file DDS.cc.

    - -
    -
    - -

    ◆ mark()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::DDS::mark (const string & n,
    bool state 
    )
    -
    -inherited
    -
    - -

    Mark the send_p flag of the named variable to state.

    -

    Mark the named variable by setting its SEND_P flag to STATE (true indicates that it is to be sent). Names must be fully qualified.

    -
    Note
    For aggregate types this sets each part to STATE when STATE is True. Thus, if State is True and N is `exp1.test', then both `exp1' and `test' have their SEND_P flag set to True. If STATE is False, then the SEND_P flag of the `test' is set to False, but `exp1' is left unchanged. This means that a single variable can be removed from the current projection without removing all the other children of its parent. See the mfunc set_send_p().
    -
    Returns
    True if the named variable was found, false otherwise.
    -
    Todo:
    These methods that use the btp_stack to keep track of the path from the top of a dataset to a particular variable can be rewritten to use the parent field instead.
    -
    Todo:
    All the methods that use names to identify variables should have counterparts that take BaseType pointers.
    - -

    Definition at line 1764 of file DDS.cc.

    - -
    -
    - -

    ◆ mark_all()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDS::mark_all (bool state)
    -
    -inherited
    -
    -

    Mark the member variable send_p flags to state.

    -
    Returns
    Void
    - -

    Definition at line 1821 of file DDS.cc.

    - -
    -
    - -

    ◆ num_var()

    - -
    -
    - - - - - -
    - - - - - - - -
    int libdap::DDS::num_var ()
    -
    -inherited
    -
    - -

    Returns the number of variables in the DDS.

    - -

    Definition at line 873 of file DDS.cc.

    - -
    -
    - -

    ◆ parse() [1/3]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDS::parse (string fname)
    -
    -inherited
    -
    - -

    Parse a DDS from a file with the given d_name.

    - -

    Definition at line 942 of file DDS.cc.

    - -
    -
    - -

    ◆ parse() [2/3]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDS::parse (int fd)
    -
    -inherited
    -
    - -

    Parse a DDS from a file indicated by the input file descriptor.

    - -

    Definition at line 963 of file DDS.cc.

    - -
    -
    - -

    ◆ parse() [3/3]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDS::parse (FILE * in = stdin)
    -
    -inherited
    -
    - -

    Parse a DDS from a file indicated by the input file descriptor. Read the persistent representation of a DDS from the FILE *in, parse it and create a matching binary object.

    -
    Parameters
    - - -
    inRead the persistent DDS from this FILE*.
    -
    -
    -
    Exceptions
    - - - -
    InternalErrThrown if in is null
    ErrorThrown if the parse fails.
    -
    -
    - -

    Definition at line 996 of file DDS.cc.

    - -
    -
    - -

    ◆ print() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDS::print (FILE * out)
    -
    -inherited
    -
    - -

    Print the entire DDS to the specified file.

    - -

    Definition at line 1023 of file DDS.cc.

    - -
    -
    - -

    ◆ print() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDS::print (ostream & out)
    -
    -inherited
    -
    - -

    Print the entire DDS to the specified ostream.

    - -

    Definition at line 1032 of file DDS.cc.

    - -
    -
    - -

    ◆ print_constrained() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDS::print_constrained (FILE * out)
    -
    -inherited
    -
    - -

    Print a constrained DDS to the specified file.

    -

    Print those parts (variables) of the DDS structure to OS that are marked to be sent after evaluating the constraint expression.

    -
    Note
    This function only works for scalars at the top level.
    -
    Returns
    true.
    - -

    Definition at line 1332 of file DDS.cc.

    - -
    -
    - -

    ◆ print_constrained() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDS::print_constrained (ostream & out)
    -
    -inherited
    -
    - -

    Print a constrained DDS to the specified ostream.

    -

    Print those parts (variables) of the DDS structure to OS that are marked to be sent after evaluating the constraint expression.

    -
    Note
    This function only works for scalars at the top level.
    -
    Returns
    true.
    - -

    Definition at line 1350 of file DDS.cc.

    - -
    -
    - -

    ◆ print_das()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDS::print_das (ostream & out)
    -
    -inherited
    -
    - -

    write the DAS response given the attribute information in the DDS

    -

    This method provides the same DAS response as DAS::print(), but does so using the AttrTables bound to the variables in this DDS object.

    -
    Parameters
    - - -
    outWrite the DAS response to this stream
    -
    -
    - -

    Definition at line 1182 of file DDS.cc.

    - -
    -
    - -

    ◆ print_dmr()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::DDS::print_dmr (ostream & out,
    bool constrained 
    )
    -
    -inherited
    -
    - -

    Print the DAP4 DMR object using a DDS.

    -

    This method prints the DMR from a DDS. If the dap version is not >= 4.0, it's an error to call this method.

    -
    Note
    Calling methods that print the DDS or DDX when get_dap_major() returns a value >= 4 is undefined. Use this method to get the DAP4 metadata response.
    -
    Parameters
    - - - -
    outWrite the XML to this stream
    constrainedShould the DMR be subject to a constraint?
    -
    -
    - -

    Definition at line 1649 of file DDS.cc.

    - -
    -
    - -

    ◆ print_xml() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::DDS::print_xml (FILE * out,
    bool constrained,
    const string & blob = "" 
    )
    -
    -inherited
    -
    -

    Print an XML representation of this DDS. This method is used to generate the part of the DDX response. The Dataset tag is not written by this code. The caller of this method must handle writing that and including the dataBLOB tag.

    -
    Parameters
    - - - - -
    outDestination.
    constrainedTrue if the output should be limited to just those variables that are in the projection of the current constraint expression.
    blobThe dataBLOB href.
    -
    -
    -
    Deprecated:
    - -

    Definition at line 1378 of file DDS.cc.

    - -
    -
    - -

    ◆ print_xml() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::DDS::print_xml (ostream & out,
    bool constrained,
    const string & blob = "" 
    )
    -
    -inherited
    -
    -

    Print an XML representation of this DDS. This method is used to generate the DDX response. The Dataset tag is not written by this code. The caller of this method must handle writing that and including the dataBLOB tag.

    -
    Parameters
    - - - - -
    outDestination ostream.
    constrainedTrue if the output should be limited to just those variables that are in the projection of the current constraint expression.
    blobThe dataBLOB href.
    -
    -
    -
    Deprecated:
    - -

    Definition at line 1397 of file DDS.cc.

    - -
    -
    - -

    ◆ print_xml_writer()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::DDS::print_xml_writer (ostream & out,
    bool constrained,
    const string & blob = "" 
    )
    -
    -inherited
    -
    -

    Print the DDX. This code uses the libxml2 'TextWriter' interface; something that seems to be a good compromise between doing it by hand (although more verbose it is also more reliable) and DOM.

    -
    Note
    This code handles several different versions of DAP in a fairly crude way. I've broken it up into three different responses: DAP2, DAP3.2 and DAP4.
    -
    Parameters
    - - - - -
    outWrite the XML to this output sink
    constrainedTrue if the only variables to print are those in the current projection. If true, this will also suppress printing attributes.
    blobThis is an href (DAP2) or a cid (DAP3.4 and 4). The href points to the binary data; the cid is the M-MIME separator for the binary data.
    -
    -
    - -

    Definition at line 1433 of file DDS.cc.

    - -
    -
    - -

    ◆ set_dap_major()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDS::set_dap_major (int p)
    -
    -inherited
    -
    -
    Deprecated:
    -
    Deprecated:
    - -

    Definition at line 404 of file DDS.cc.

    - -
    -
    - -

    ◆ set_dap_minor()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDS::set_dap_minor (int p)
    -
    -inherited
    -
    -
    Deprecated:
    -
    Deprecated:
    - -

    Definition at line 423 of file DDS.cc.

    - -
    -
    - -

    ◆ set_dap_version() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDS::set_dap_version (const string & v = "2.0")
    -
    -inherited
    -
    -

    Given the DAP protocol version, parse that string and set the DDS fields.

    -
    Parameters
    - - -
    vThe version string.
    -
    -
    - -

    Definition at line 440 of file DDS.cc.

    - -
    -
    - -

    ◆ set_dap_version() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDS::set_dap_version (double d)
    -
    -inherited
    -
    -
    Deprecated:
    -

    Old way to set the DAP version.

    -
    Note
    Don't use this - two interfaces to set the version number is overkill
    -
    Parameters
    - - -
    dThe protocol version requested by the client, as a double.
    -
    -
    -
    Deprecated:
    - -

    Definition at line 488 of file DDS.cc.

    - -
    -
    - -

    ◆ set_dataset_name()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDS::set_dataset_name (const string & n)
    -
    -inherited
    -
    -

    Sets the dataset d_name.

    - -

    Definition at line 363 of file DDS.cc.

    - -
    -
    - -

    ◆ set_factory()

    - -
    -
    - - - - - -
    - - - - - - - - -
    BaseTypeFactory* libdap::DDS::set_factory (BaseTypeFactoryfactory)
    -
    -inlineinherited
    -
    -

    Set the factory class used to instantiate variables during the parse of a DDS.

    Parameters
    - - -
    factoryThe factory this DDS should use. Caller must free factory when done with this DDS.
    -
    -
    -
    Returns
    The old factory.
    -
    See also
    BaseTypeFactory
    - -

    Definition at line 253 of file DDS.h.

    - -
    -
    - -

    ◆ set_namespace()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDS::set_namespace (const string & ns)
    -
    -inlineinherited
    -
    - -

    Set the namespace for this DDS/DDX object/response.

    - -

    Definition at line 295 of file DDS.h.

    - -
    -
    - -

    ◆ set_request_xml_base()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDS::set_request_xml_base (const string & xb)
    -
    -inlineinherited
    -
    -
    See also
    get_request_xml_base
    - -

    Definition at line 289 of file DDS.h.

    - -
    -
    - -

    ◆ set_response_limit()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDS::set_response_limit (long size)
    -
    -inlineinherited
    -
    -

    Set the maximum response size. Zero is the default value. The size is given in kilobytes (but stored internally as the number of bytes).

    Parameters
    - - -
    sizeThe maximum size of the response in kilobytes.
    -
    -
    - -

    Definition at line 303 of file DDS.h.

    - -
    -
    - -

    ◆ set_version()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DataDDS::set_version (const string & v)
    -
    -inline
    -
    -

    Sets the version string. This typically looks something like: DODS/2.15, where 2'' is the major version number, and15'' the minor number.

    - -

    Definition at line 103 of file DataDDS.h.

    - -
    -
    - -

    ◆ tag_nested_sequences()

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::DDS::tag_nested_sequences ()
    -
    -inherited
    -
    - -

    Traverse DDS, set Sequence leaf nodes.

    - -

    Definition at line 930 of file DDS.cc.

    - -
    -
    - -

    ◆ transfer_attributes()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::DDS::transfer_attributes (DASdas)
    -
    -virtualinherited
    -
    -

    This is the main method used to transfer attributes from a DAS object into a DDS. This uses the BaseType::transfer_attributes() method and the various implementations found here (in the constructors classes) and in handlers.

    -

    This method uses a deep copy to transfer the attributes, so it is safe to delete the source DAS object passed to this method once it is done.

    -
    Note
    To accommodate oddly built DAS objects produced by various handlers, specialize the methods there.
    -
    Parameters
    - - -
    dasTransfer (copy) attributes from this DAS object.
    -
    -
    - -

    Definition at line 286 of file DDS.cc.

    - -
    -
    - -

    ◆ var() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::DDS::var (const string & n,
    BaseType::btp_stack & s 
    )
    -
    -inherited
    -
    -

    Search for for variable n as above but record all compound type variables which ultimately contain n on s. This stack can then be used to mark the contained compound-type variables as part of the current projection.

    -
    Returns
    A BaseType pointer to the variable n or 0 if n could not be found.
    - -

    Definition at line 692 of file DDS.cc.

    - -
    -
    - -

    ◆ var() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::DDS::var (const string & n,
    BaseType::btp_stack * s = 0 
    )
    -
    -inherited
    -
    - -

    Find the variable with the given d_name.

    -

    Returns a pointer to the named variable. If the d_name contains one or more field separators then the function looks for a variable whose name matches exactly. If the d_name contains no field separators then the function looks first in the top level and then in all subsequent levels and returns the first occurrence found. In general, this function searches constructor types in the order in which they appear in the DDS, but there is no requirement that it do so.

    -
    Note
    If a dataset contains two constructor types which have field names that are the same (say point.x and pair.x) you should use fully qualified names to get each of those variables.
    -
    Parameters
    - - - -
    nThe name of the variable to find.
    sIf given, this value-result parameter holds the path to the returned BaseType. Thus, this method can return the FQN for the variable n.
    -
    -
    -
    Returns
    A BaseType pointer to the variable or null if not found.
    - -

    Definition at line 716 of file DDS.cc.

    - -
    -
    - -

    ◆ var_begin()

    - -
    -
    - - - - - -
    - - - - - - - -
    DDS::Vars_iter libdap::DDS::var_begin ()
    -
    -inherited
    -
    - -

    Return an iterator to the first variable.

    -

    Returns the first variable in the DDS.

    - -

    Definition at line 799 of file DDS.cc.

    - -
    -
    - -

    ◆ var_end()

    - -
    -
    - - - - - -
    - - - - - - - -
    DDS::Vars_iter libdap::DDS::var_end ()
    -
    -inherited
    -
    - -

    Return an iterator.

    - -

    Definition at line 811 of file DDS.cc.

    - -
    -
    - -

    ◆ var_rbegin()

    - -
    -
    - - - - - -
    - - - - - - - -
    DDS::Vars_riter libdap::DDS::var_rbegin ()
    -
    -inherited
    -
    - -

    Return a reverse iterator.

    - -

    Definition at line 805 of file DDS.cc.

    - -
    -
    - -

    ◆ var_rend()

    - -
    -
    - - - - - -
    - - - - - - - -
    DDS::Vars_riter libdap::DDS::var_rend ()
    -
    -inherited
    -
    - -

    Return a reverse iterator.

    - -

    Definition at line 817 of file DDS.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1DataDDS.js b/html/classlibdap_1_1DataDDS.js deleted file mode 100644 index eb235eeee..000000000 --- a/html/classlibdap_1_1DataDDS.js +++ /dev/null @@ -1,84 +0,0 @@ -var classlibdap_1_1DataDDS = -[ - [ "Vars_citer", "classlibdap_1_1DataDDS.html#ae18628332086dd04361e0ba745cd91ca", null ], - [ "Vars_iter", "classlibdap_1_1DataDDS.html#a5140f67d8f7eecf0a260d8a5d9fc39c5", null ], - [ "Vars_riter", "classlibdap_1_1DataDDS.html#a03816194d9596596926d6c8fa1872604", null ], - [ "DataDDS", "classlibdap_1_1DataDDS.html#a726223338475f0ad01315475b358c0c6", null ], - [ "~DataDDS", "classlibdap_1_1DataDDS.html#a0cdbbfa0f61fba687ce292dc0fb6ba2d", null ], - [ "add_var", "classlibdap_1_1DataDDS.html#ade87418e97ee5c7efd92279cd41e421c", null ], - [ "add_var_nocopy", "classlibdap_1_1DataDDS.html#a0a9c873e5cbd8e75b4427875a38455bd", null ], - [ "check_semantics", "classlibdap_1_1DataDDS.html#a0d1bf35c18c77a15bb266a895f99f1c6", null ], - [ "container", "classlibdap_1_1DataDDS.html#add7c78964a7574239e2d3dd6717a0f31", null ], - [ "container_name", "classlibdap_1_1DataDDS.html#aaca262d193346e04d4a6caa7acd117e2", null ], - [ "container_name", "classlibdap_1_1DataDDS.html#a025d5fef84ebc2d958a59e4297883d20", null ], - [ "del_var", "classlibdap_1_1DataDDS.html#a7030e5bf19371742219f14d6b3aeeedf", null ], - [ "del_var", "classlibdap_1_1DataDDS.html#ac06f060770215ad790aa5437e567a215", null ], - [ "del_var", "classlibdap_1_1DataDDS.html#a6ae053eca0eadcfa1368da8486bf5e06", null ], - [ "dump", "classlibdap_1_1DataDDS.html#a386e17c1cd81a9c01ebf80489aee7127", null ], - [ "duplicate", "classlibdap_1_1DataDDS.html#a88195f7e5c14124b3d70d07b290dcea4", null ], - [ "exact_match", "classlibdap_1_1DataDDS.html#a6f4fb3cf9a40d44e2e154ab1c0096a5d", null ], - [ "filename", "classlibdap_1_1DataDDS.html#a1106220194c07459b481a2c190f62482", null ], - [ "filename", "classlibdap_1_1DataDDS.html#a3dc8062cbb44db0d9b5f47b1109effd9", null ], - [ "get_attr_table", "classlibdap_1_1DataDDS.html#a177e3df069cb0dcb3b30c0dcd236f8b3", null ], - [ "get_dap_major", "classlibdap_1_1DataDDS.html#aced9c6fed3f727de8bff5d759780b966", null ], - [ "get_dap_minor", "classlibdap_1_1DataDDS.html#a8ecd1a8f622ead2c379567295f6b99a4", null ], - [ "get_dap_version", "classlibdap_1_1DataDDS.html#a1ed5890202999a874b2edafd18f3054e", null ], - [ "get_das", "classlibdap_1_1DataDDS.html#aa02904d9b79b8d7a92b4f3bcbacc68aa", null ], - [ "get_das", "classlibdap_1_1DataDDS.html#a7bff1a465b6b26e5d1ab9633ae49c6f0", null ], - [ "get_dataset_name", "classlibdap_1_1DataDDS.html#a60042aabde37ccaefd56174641284673", null ], - [ "get_dmr_version", "classlibdap_1_1DataDDS.html#abee41546bc1b77d4836716be64538763", null ], - [ "get_factory", "classlibdap_1_1DataDDS.html#a28fe4bd419122bd8a82ededae0ab4a8b", null ], - [ "get_namespace", "classlibdap_1_1DataDDS.html#a3c066d28e6aec58d2169a9099d0979a2", null ], - [ "get_protocol", "classlibdap_1_1DataDDS.html#ad318ec809085a0705e29d24468977738", null ], - [ "get_protocol_major", "classlibdap_1_1DataDDS.html#a267a17823d2118f876f000cf27fc6f1e", null ], - [ "get_protocol_minor", "classlibdap_1_1DataDDS.html#aaf282a51b67654461749c4f03837387f", null ], - [ "get_request_size", "classlibdap_1_1DataDDS.html#a51bc473c9614419e880378686e7462b2", null ], - [ "get_request_xml_base", "classlibdap_1_1DataDDS.html#ac2c33bda0c2148fce3da754f27a0323f", null ], - [ "get_response_limit", "classlibdap_1_1DataDDS.html#af37da63ace68d6f07649913ac7ab95d2", null ], - [ "get_timeout", "classlibdap_1_1DataDDS.html#a24bd3f9014033dbf054b901028427c33", null ], - [ "get_var_index", "classlibdap_1_1DataDDS.html#a5161e73a84f49c759bd411c8a3c3c356", null ], - [ "get_vars_iter", "classlibdap_1_1DataDDS.html#a415f3083d3864eb04d6508772b3c4128", null ], - [ "get_version", "classlibdap_1_1DataDDS.html#a1c8b566c9413d7f50a9bcea1a4b23d46", null ], - [ "get_version_major", "classlibdap_1_1DataDDS.html#a88cab0c2f0a783017691a47f7067c254", null ], - [ "get_version_minor", "classlibdap_1_1DataDDS.html#ab86723ce18922f12e0d24e7dcb0579c7", null ], - [ "insert_var", "classlibdap_1_1DataDDS.html#a828c46d43447678bd736135946c9bacc", null ], - [ "insert_var_nocopy", "classlibdap_1_1DataDDS.html#abf72254ae41d26940b300c792611fa4e", null ], - [ "leaf_match", "classlibdap_1_1DataDDS.html#a2f60c6b71b5534d5b16c14c9c1dbed00", null ], - [ "mark", "classlibdap_1_1DataDDS.html#a88c063f273e5aa68b38df4d8e09fb426", null ], - [ "mark_all", "classlibdap_1_1DataDDS.html#a03c7fb8494b890e227279e70ba4b483e", null ], - [ "num_var", "classlibdap_1_1DataDDS.html#a3e99a99da58051c745cc8a3ab82e3b38", null ], - [ "parse", "classlibdap_1_1DataDDS.html#a733c8e49ed42ab47d74afe68056340e6", null ], - [ "parse", "classlibdap_1_1DataDDS.html#a3af2c3d3707f1a9c91d9c00937bb7325", null ], - [ "parse", "classlibdap_1_1DataDDS.html#a02857d9355cd01dec621ae0bdf453075", null ], - [ "print", "classlibdap_1_1DataDDS.html#a471a9e61f7154518b040a7818fa5a2b5", null ], - [ "print", "classlibdap_1_1DataDDS.html#a535b5900c31f0038061f4aef5fa1c6c1", null ], - [ "print_constrained", "classlibdap_1_1DataDDS.html#aac3dca048c1d085d72b44df8b7088cd5", null ], - [ "print_constrained", "classlibdap_1_1DataDDS.html#ab2e1cacd542373312d5154565b3c1571", null ], - [ "print_das", "classlibdap_1_1DataDDS.html#afb0339f6ff59ad01a00cf132d68cb548", null ], - [ "print_dmr", "classlibdap_1_1DataDDS.html#a06da8fda5e65e039be2000f8fd22d295", null ], - [ "print_xml", "classlibdap_1_1DataDDS.html#a80902a2bd86bd08392abbd3178a49b8b", null ], - [ "print_xml", "classlibdap_1_1DataDDS.html#af319354a044d02ea89732160131004dc", null ], - [ "print_xml_writer", "classlibdap_1_1DataDDS.html#af1b1fca603ab8d48220218a7771d064c", null ], - [ "set_dap_major", "classlibdap_1_1DataDDS.html#a03062495c46ed3fad9fa0a5f6f6e8d00", null ], - [ "set_dap_minor", "classlibdap_1_1DataDDS.html#a358929d8f517dcdfe439037fb402351b", null ], - [ "set_dap_version", "classlibdap_1_1DataDDS.html#adcb80ef551e544b1cf527163cf54a30a", null ], - [ "set_dap_version", "classlibdap_1_1DataDDS.html#a38cc72c3b47c508d597535b9c9a39c37", null ], - [ "set_dataset_name", "classlibdap_1_1DataDDS.html#a0138ce1c3b26968f968a6b723ec70dfb", null ], - [ "set_factory", "classlibdap_1_1DataDDS.html#abd73e1da6d32409062399c6e3333814a", null ], - [ "set_namespace", "classlibdap_1_1DataDDS.html#a0d1c1e04bc651072a5a56210d86dd801", null ], - [ "set_protocol", "classlibdap_1_1DataDDS.html#a5048c753969354f9710948c961f77afb", null ], - [ "set_request_xml_base", "classlibdap_1_1DataDDS.html#a1872d99f10b845eb15960916229a2457", null ], - [ "set_response_limit", "classlibdap_1_1DataDDS.html#a1d8dc5bcfaf287b360a10857837da952", null ], - [ "set_timeout", "classlibdap_1_1DataDDS.html#ac97d9bc59c742b46614779f9381baf6a", null ], - [ "set_version", "classlibdap_1_1DataDDS.html#a971a9fa89f7a210c2d6fd2207a0041e5", null ], - [ "tag_nested_sequences", "classlibdap_1_1DataDDS.html#a9d4421c2ccfdbc5ebd4a7d963ab53795", null ], - [ "timeout_off", "classlibdap_1_1DataDDS.html#a6740f99a5fc64640505924c5603ace0a", null ], - [ "timeout_on", "classlibdap_1_1DataDDS.html#a8cd9b6a34f5e1a49665de3189e141de8", null ], - [ "transfer_attributes", "classlibdap_1_1DataDDS.html#a2810a944fbdc7d21b08f2d8c19022b52", null ], - [ "var", "classlibdap_1_1DataDDS.html#a74c67b99babe3317a0f76c8d8f7ba37a", null ], - [ "var", "classlibdap_1_1DataDDS.html#ab53f39cffc45142b4cb38117e5650487", null ], - [ "var_begin", "classlibdap_1_1DataDDS.html#aac98f248cd5730a8769f9d71af9788d3", null ], - [ "var_end", "classlibdap_1_1DataDDS.html#ad204bbd6eed8d440fb996f41bc986058", null ], - [ "var_rbegin", "classlibdap_1_1DataDDS.html#a395947ea7f5abab45e7bfe7541ec9dc2", null ], - [ "var_rend", "classlibdap_1_1DataDDS.html#a098d88f09002ad80e27acdb81a52659e", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1DataDDS__inherit__graph.map b/html/classlibdap_1_1DataDDS__inherit__graph.map deleted file mode 100644 index 49c0d33ab..000000000 --- a/html/classlibdap_1_1DataDDS__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1DataDDS__inherit__graph.md5 b/html/classlibdap_1_1DataDDS__inherit__graph.md5 deleted file mode 100644 index d9277a3e6..000000000 --- a/html/classlibdap_1_1DataDDS__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -1dc0402811d34a9cfaca9231ffb07b64 \ No newline at end of file diff --git a/html/classlibdap_1_1DataDDS__inherit__graph.png b/html/classlibdap_1_1DataDDS__inherit__graph.png deleted file mode 100644 index ddfa4bc66c7502e6bf9a6b6bb24448f93edaae1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54990 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 nhk{?{} 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 VSiPon#GwEH002ovPDHLkV1h-qj5q)Q diff --git a/html/classlibdap_1_1Error-members.html b/html/classlibdap_1_1Error-members.html deleted file mode 100644 index 70873f92f..000000000 --- a/html/classlibdap_1_1Error-members.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -

    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::Error Member List
    -
    -
    - -

    This is the complete list of members for libdap::Error, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - -
    _error_code (defined in libdap::Error)libdap::Errorprotected
    _error_message (defined in libdap::Error)libdap::Errorprotected
    d_file (defined in libdap::Error)libdap::Errorprotected
    d_line (defined in libdap::Error)libdap::Errorprotected
    Error(ErrorCode ec, std::string msg, std::string file="", int line=0)libdap::Error
    Error(std::string msg, std::string file="", int line=0)libdap::Error
    Error()libdap::Error
    Error(const Error &copy_from) (defined in libdap::Error)libdap::Error
    get_error_code() constlibdap::Error
    get_error_message() constlibdap::Error
    get_file() const (defined in libdap::Error)libdap::Errorinline
    get_line() const (defined in libdap::Error)libdap::Errorinline
    OK() constlibdap::Error
    operator=(const Error &rhs) (defined in libdap::Error)libdap::Error
    parse(FILE *fp)libdap::Error
    print(FILE *out) constlibdap::Error
    print(std::ostream &out) constlibdap::Error
    set_error_code(ErrorCode ec=undefined_error)libdap::Error
    set_error_message(std::string msg="")libdap::Error
    set_file(std::string f) (defined in libdap::Error)libdap::Errorinline
    set_line(int l) (defined in libdap::Error)libdap::Errorinline
    what() constlibdap::Errorinlinevirtual
    ~Error() (defined in libdap::Error)libdap::Errorvirtual
    -
    - - - - diff --git a/html/classlibdap_1_1Error.html b/html/classlibdap_1_1Error.html deleted file mode 100644 index 4678a94c0..000000000 --- a/html/classlibdap_1_1Error.html +++ /dev/null @@ -1,528 +0,0 @@ - - - - - - - -libdap: libdap::Error Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::Error Class Reference
    -
    -
    - -

    A class for error processing. - More...

    - -

    #include <Error.h>

    -
    -Inheritance diagram for libdap::Error:
    -
    -
    Inheritance graph
    - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     Error (ErrorCode ec, std::string msg, std::string file="", int line=0)
     
     Error (std::string msg, std::string file="", int line=0)
     
     Error ()
     
    Error (const Error &copy_from)
     
    ErrorCode get_error_code () const
     
    std::string get_error_message () const
     
    -std::string get_file () const
     
    -int get_line () const
     
    bool OK () const
     Is the Error object valid? More...
     
    -Erroroperator= (const Error &rhs)
     
    bool parse (FILE *fp)
     Parse an Error object. More...
     
    void print (FILE *out) const
     
    void print (std::ostream &out) const
     
    void set_error_code (ErrorCode ec=undefined_error)
     
    void set_error_message (std::string msg="")
     
    -void set_file (std::string f)
     
    -void set_line (int l)
     
    virtual const char * what () const throw ()
     The pointer is valid only for the lifetime of the Error instance. jhrg 9/22/20. More...
     
    - - - - - - - - - -

    -Protected Attributes

    -ErrorCode _error_code
     
    -std::string _error_message
     
    -std::string d_file
     
    -int d_line
     
    -

    Detailed Description

    -

    A class for error processing.

    -

    The Error class is used to transport error information from the server to the client within libdap. This class is also the base class for all the errors thrown by methods in the DAP, so catching Error will catch all DAP throws. Errors consist of an error code and a string. The code can be used to quickly distinguish between certain common errors while the string is used to convey information about the error to the user. The error code should never be displayed to the user.

    -

    This class is used on both clients and servers. The print() and parse() methods are used to send the object back and forth.

    -
    Note
    A past version of this class supported the notion of an error correcting program (Tcl, Java, ...) that could be sent from the server to the client to help users correct the error and resubmit the request. This never worked well in practice and that feature of the class is deprecated.
    -
    Author
    jhrg
    - -

    Definition at line 92 of file Error.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ Error() [1/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    libdap::Error::Error (ErrorCode ec,
    std::string msg,
    std::string file = "",
    int line = 0 
    )
    -
    -

    Create an instance with a specific code and message string. This ctor provides a way to to use any code and string you'd like. The code can be one of the standard codes or it may be specific to your server. Thus a client which can tell it's dealing with a specific type of server can use the code accordingly. In general, clients simply show the error message to users or write it to a log file.

    -
    Parameters
    - - - -
    ecThe error code
    msgThe error message string.
    -
    -
    - -

    Definition at line 86 of file Error.cc.

    - -
    -
    - -

    ◆ Error() [2/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    libdap::Error::Error (std::string msg,
    std::string file = "",
    int line = 0 
    )
    -
    -

    Create an instance with a specific message. The error code is set to unknown_error.

    -
    Parameters
    - - -
    msgThe error message.
    -
    -
    -
    See also
    ErrorCode
    - -

    Definition at line 95 of file Error.cc.

    - -
    -
    - -

    ◆ Error() [3/3]

    - -
    -
    - - - - - - - -
    libdap::Error::Error ()
    -
    -

    Specializations of Error should use this to set the error code and message.

    - -

    Definition at line 74 of file Error.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ get_error_code()

    - -
    -
    - - - - - - - -
    ErrorCode libdap::Error::get_error_code () const
    -
    -

    Get the ErrorCode for this instance.

    - -

    Definition at line 249 of file Error.cc.

    - -
    -
    - -

    ◆ get_error_message()

    - -
    -
    - - - - - - - -
    string libdap::Error::get_error_message () const
    -
    -

    Return the current error message.

    - -

    Definition at line 278 of file Error.cc.

    - -
    -
    - -

    ◆ OK()

    - -
    -
    - - - - - - - -
    bool libdap::Error::OK () const
    -
    - -

    Is the Error object valid?

    -

    Use this function to determine whether an Error object is valid. To be a valid, an Error object must either be: 1) empty or contain a message and a code.

    -
    Returns
    TRUE if the object is valid, FALSE otherwise.
    - -

    Definition at line 135 of file Error.cc.

    - -
    -
    - -

    ◆ parse()

    - -
    -
    - - - - - - - - -
    bool libdap::Error::parse (FILE * fp)
    -
    - -

    Parse an Error object.

    -

    Given an input stream (FILE *) fp, parse an Error object from stream. Values for fields of the Error object are parsed and this is set accordingly. This is how a client program receives an error object from a server.

    -
    Parameters
    - - -
    fpA valid file pointer to an input stream.
    -
    -
    -
    Returns
    TRUE if no error was detected, FALSE otherwise.
    - -

    Definition at line 158 of file Error.cc.

    - -
    -
    - -

    ◆ print() [1/2]

    - -
    -
    - - - - - - - - -
    void libdap::Error::print (FILE * out) const
    -
    -

    Creates a printable representation of the Error object. It is suitable for framing, and also for printing and sending over a network.

    -

    The printed representation produced by this function can be parsed by the parse() member function. Thus parse and print form a symmetrical pair that can be used to send and receive an Error object over the network in a MIME document.

    -
    Parameters
    - - -
    outA pointer to the output stream on which the Error object is to be rendered.
    -
    -
    - -

    Definition at line 200 of file Error.cc.

    - -
    -
    - -

    ◆ print() [2/2]

    - -
    -
    - - - - - - - - -
    void libdap::Error::print (std::ostream & out) const
    -
    -

    Creates a printable representation of the Error object. It is suitable for framing, and also for printing and sending over a network.

    -

    The printed representation produced by this function can be parsed by the parse() member function. Thus parse and print form a symmetrical pair that can be used to send and receive an Error object over the network in a MIME document.

    -
    Parameters
    - - -
    strmA reference to the output stream on which the Error object is to be rendered.
    -
    -
    - -

    Definition at line 229 of file Error.cc.

    - -
    -
    - -

    ◆ set_error_code()

    - -
    -
    - - - - - - - - -
    void libdap::Error::set_error_code (ErrorCode ec = undefined_error)
    -
    -

    Set the ErrorCode. If the current error message has not been set, use ec to set the error message. The resulting error message string is the same as the ErrorCode name. If ec is not within the range of values for an OPeNDAP ErrorCode, the error message is left unchanged.

    -
    Parameters
    - - -
    ecThe new ErrorCode value.
    -
    -
    - -

    Definition at line 262 of file Error.cc.

    - -
    -
    - -

    ◆ set_error_message()

    - -
    -
    - - - - - - - - -
    void libdap::Error::set_error_message (std::string msg = "")
    -
    -

    Set the error message.

    - -

    Definition at line 287 of file Error.cc.

    - -
    -
    - -

    ◆ what()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - -
    virtual const char* libdap::Error::what () const
    throw (
    )
    -
    -inlinevirtual
    -
    - -

    The pointer is valid only for the lifetime of the Error instance. jhrg 9/22/20.

    - -

    Definition at line 127 of file Error.h.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1Error.js b/html/classlibdap_1_1Error.js deleted file mode 100644 index 4ada1f131..000000000 --- a/html/classlibdap_1_1Error.js +++ /dev/null @@ -1,26 +0,0 @@ -var classlibdap_1_1Error = -[ - [ "Error", "classlibdap_1_1Error.html#a39c3001623d0eda5d40cf132ac82b00f", null ], - [ "Error", "classlibdap_1_1Error.html#abc68351bbd6df70d666c4bcb499d338c", null ], - [ "Error", "classlibdap_1_1Error.html#a0d75f4244ed27998bf2e5e031bc1bf4b", null ], - [ "Error", "classlibdap_1_1Error.html#a749c827344436b813dc86b6c202069ad", null ], - [ "~Error", "classlibdap_1_1Error.html#a746f8a7ae2a12f2c8f5c7b6d0e5c6283", null ], - [ "get_error_code", "classlibdap_1_1Error.html#aaca0caca09e939602cade604cbc9824f", null ], - [ "get_error_message", "classlibdap_1_1Error.html#ab24a61e4974aae62962a40f9975e674c", null ], - [ "get_file", "classlibdap_1_1Error.html#a5165d667334a9fd6f337735c2b57e28c", null ], - [ "get_line", "classlibdap_1_1Error.html#a44b91121bdbc7d9d389db3440e2299cf", null ], - [ "OK", "classlibdap_1_1Error.html#acf3ab60821773bd8b62284750b02cfc0", null ], - [ "operator=", "classlibdap_1_1Error.html#a351366d737b8b5899e68599b055fd596", null ], - [ "parse", "classlibdap_1_1Error.html#ac705b3c1cfab1f7530d66a974eb0e8b6", null ], - [ "print", "classlibdap_1_1Error.html#a552d711be27e6695854bd2b977a5cf31", null ], - [ "print", "classlibdap_1_1Error.html#a4c58ef196c2b247bd37529bb7ad6a666", null ], - [ "set_error_code", "classlibdap_1_1Error.html#a47c0f4b6a38d8ca075d1056076d2845d", null ], - [ "set_error_message", "classlibdap_1_1Error.html#a3ca90d33bf1c95529c9eefdfe8646e34", null ], - [ "set_file", "classlibdap_1_1Error.html#a94a26bbdd9f4ede88c74de97e9e9e98d", null ], - [ "set_line", "classlibdap_1_1Error.html#a63a9c54019daa8b406c4287faba5e60a", null ], - [ "what", "classlibdap_1_1Error.html#accc5eeb469c8c18ec16dbf7fefe3cc41", null ], - [ "_error_code", "classlibdap_1_1Error.html#a30226017ae9dfbe2e27be502b4fbdef4", null ], - [ "_error_message", "classlibdap_1_1Error.html#a87f74c6be2134736ca1e400c90a3d571", null ], - [ "d_file", "classlibdap_1_1Error.html#ac947a4c3d229d7ec505ad921a77702ea", null ], - [ "d_line", "classlibdap_1_1Error.html#af7d939b4b8154518f870d5424ff55f62", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1Error__inherit__graph.map b/html/classlibdap_1_1Error__inherit__graph.map deleted file mode 100644 index 5acfed057..000000000 --- a/html/classlibdap_1_1Error__inherit__graph.map +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/html/classlibdap_1_1Error__inherit__graph.md5 b/html/classlibdap_1_1Error__inherit__graph.md5 deleted file mode 100644 index 576dc15f5..000000000 --- a/html/classlibdap_1_1Error__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -77c305bc72bf136ca4dd291f66675bec \ No newline at end of file diff --git a/html/classlibdap_1_1Error__inherit__graph.png b/html/classlibdap_1_1Error__inherit__graph.png deleted file mode 100644 index 0badc658353bc290526b762b47b728bcc2462ab8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128802 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 - - - - - - -libdap: Member List - - - - - - - - - - - -

    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - - - - diff --git a/html/classlibdap_1_1EventHandler.html b/html/classlibdap_1_1EventHandler.html deleted file mode 100644 index 2db596f11..000000000 --- a/html/classlibdap_1_1EventHandler.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - - -libdap: libdap::EventHandler Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::EventHandler Class Referenceabstract
    -
    -
    - -

    #include <EventHandler.h>

    -
    -Inheritance diagram for libdap::EventHandler:
    -
    -
    Inheritance graph
    - - - - -
    - - - - - - -

    -Public Member Functions

    virtual void handle_signal (int signum)=0
     
    virtual ~EventHandler ()
     
    -

    Detailed Description

    -

    An abstract class which provides a hook method used by SignalHandler.

    -

    Based on "Applying Design Patterns to Simplify Signal Handling", Douglas C. Schmidt, 1998, http://www.cs.wustl.edu/~schmidt/signal-patterns.html.

    -
    See also
    SignalHandler
    -
    -AlarmHandler
    -
    Author
    James Gallagher jgall.nosp@m.aghe.nosp@m.r@ope.nosp@m.ndap.nosp@m..org
    - -

    Definition at line 42 of file EventHandler.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ ~EventHandler()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual libdap::EventHandler::~EventHandler ()
    -
    -inlinevirtual
    -
    -

    We don't need a destructor, but including one might stave off an error later on...

    - -

    Definition at line 52 of file EventHandler.h.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ handle_signal()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::EventHandler::handle_signal (int signum)
    -
    -pure virtual
    -
    -

    Hook method for SignalHandler. If a concrete instance of this class is registered with SignalHandler, this method will be called when signum is received.

    - -

    Implemented in libdap::AlarmHandler, and libdap::HTTPCacheInterruptHandler.

    - -
    -
    -
    The documentation for this class was generated from the following file: -
    -
    - - - - diff --git a/html/classlibdap_1_1EventHandler.js b/html/classlibdap_1_1EventHandler.js deleted file mode 100644 index 84d330205..000000000 --- a/html/classlibdap_1_1EventHandler.js +++ /dev/null @@ -1,5 +0,0 @@ -var classlibdap_1_1EventHandler = -[ - [ "~EventHandler", "classlibdap_1_1EventHandler.html#a3124eab6cce13c78e66bda0f8724f394", null ], - [ "handle_signal", "classlibdap_1_1EventHandler.html#a9cb4e0ec28ce8562067c1a9103f93559", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1EventHandler__inherit__graph.map b/html/classlibdap_1_1EventHandler__inherit__graph.map deleted file mode 100644 index 7602e192e..000000000 --- a/html/classlibdap_1_1EventHandler__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1EventHandler__inherit__graph.md5 b/html/classlibdap_1_1EventHandler__inherit__graph.md5 deleted file mode 100644 index 34759a342..000000000 --- a/html/classlibdap_1_1EventHandler__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -4de7a098b92e11d47714dfa62a3721d7 \ No newline at end of file diff --git a/html/classlibdap_1_1EventHandler__inherit__graph.png b/html/classlibdap_1_1EventHandler__inherit__graph.png deleted file mode 100644 index 89c70393fe739d1c495594fb10c057550b62ce3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26291 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 uNq^g~Zqh}+{`GwEOnry| diff --git a/html/classlibdap_1_1Float32-members.html b/html/classlibdap_1_1Float32-members.html deleted file mode 100644 index e08a7393a..000000000 --- a/html/classlibdap_1_1Float32-members.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::Float32 Member List
    -
    -
    - -

    This is the complete list of members for libdap::Float32, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    add_var(BaseType *bt, Part part=nil)libdap::BaseTypevirtual
    add_var_nocopy(BaseType *bt, Part part=nil) (defined in libdap::BaseType)libdap::BaseTypevirtual
    attributes()libdap::BaseTypevirtual
    BaseType(const string &n, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const string &n, const string &d, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const BaseType &copy_from)libdap::BaseType
    btp_stack typedef (defined in libdap::BaseType)libdap::BaseType
    buf2val(void **val)libdap::Float32virtual
    check_semantics(string &msg, bool all=false)libdap::BaseTypevirtual
    clear_local_data()libdap::BaseTypeinlinevirtual
    compute_checksum(Crc32 &checksum)libdap::Float32virtual
    d4_ops(BaseType *b, int op)libdap::Float32virtual
    d_buf (defined in libdap::Float32)libdap::Float32protected
    d_in_selection (defined in libdap::BaseType)libdap::BaseTypeprotected
    d_is_synthesized (defined in libdap::BaseType)libdap::BaseTypeprotected
    dataset() constlibdap::BaseTypevirtual
    deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)libdap::Float32virtual
    deserialize(D4StreamUnMarshaller &um, DMR &dmr)libdap::Float32virtual
    dump(ostream &strm) constlibdap::Float32virtual
    element_count(bool leaves=false)libdap::BaseTypevirtual
    Float32(const string &n)libdap::Float32
    Float32(const string &n, const string &d)libdap::Float32
    Float32(const Float32 &copy_from) (defined in libdap::Float32)libdap::Float32
    FQN() constlibdap::BaseTypevirtual
    get_attr_table()libdap::BaseTypevirtual
    get_parent() constlibdap::BaseTypevirtual
    intern_data(ConstraintEvaluator &eval, DDS &dds)libdap::BaseTypevirtual
    intern_data()libdap::BaseTypevirtual
    is_constructor_type() constlibdap::BaseTypevirtual
    is_dap4() const (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    is_in_selection()libdap::BaseTypevirtual
    is_simple_type() constlibdap::BaseTypevirtual
    is_vector_type() constlibdap::BaseTypevirtual
    length() constlibdap::BaseTypeinlinevirtual
    m_duplicate(const BaseType &bt)libdap::BaseTypeprotected
    name() constlibdap::BaseTypevirtual
    operator=(const Float32 &rhs) (defined in libdap::Float32)libdap::Float32
    operator=(const BaseType &rhs) (defined in libdap::BaseType)libdap::BaseType
    ops(BaseType *b, int op)libdap::Float32virtual
    print_dap4(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
    print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_val(FILE *out, string space="", bool print_decl_p=true)libdap::Float32virtual
    print_val(ostream &out, string space="", bool print_decl_p=true)libdap::Float32virtual
    print_xml(FILE *out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml(ostream &out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml_writer(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
    ptr_duplicate()libdap::Float32virtual
    read()libdap::BaseTypevirtual
    read_p()libdap::BaseTypevirtual
    send_p()libdap::BaseTypevirtual
    serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)libdap::Float32virtual
    serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)libdap::Float32virtual
    set_attr_table(const AttrTable &at)libdap::BaseTypevirtual
    set_attributes(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_attributes_nocopy(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_in_selection(bool state)libdap::BaseTypevirtual
    set_is_dap4(const bool v) (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    set_length(int)libdap::BaseTypeinlinevirtual
    set_name(const string &n)libdap::BaseTypevirtual
    set_parent(BaseType *parent)libdap::BaseTypevirtual
    set_read_p(bool state)libdap::BaseTypevirtual
    set_send_p(bool state)libdap::BaseTypevirtual
    set_synthesized_p(bool state)libdap::BaseTypevirtual
    set_type(const Type &t)libdap::BaseTypevirtual
    set_value(dods_float32 f) (defined in libdap::Float32)libdap::Float32virtual
    synthesized_p()libdap::BaseTypevirtual
    toString()libdap::BaseTypevirtual
    transfer_attributes(AttrTable *at)libdap::BaseTypevirtual
    transform_to_dap2(AttrTable *parent_attr_table)libdap::BaseTypevirtual
    transform_to_dap4(D4Group *root, Constructor *container)libdap::BaseTypevirtual
    type() constlibdap::BaseTypevirtual
    type_name() constlibdap::BaseTypevirtual
    val2buf(void *val, bool reuse=false)libdap::Float32virtual
    value() constlibdap::Float32virtual
    var(const string &name="", bool exact_match=true, btp_stack *s=0)libdap::BaseTypevirtual
    var(const string &name, btp_stack &s)libdap::BaseTypevirtual
    width(bool constrained=false) constlibdap::Float32virtual
    ~BaseType() (defined in libdap::BaseType)libdap::BaseTypevirtual
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    ~Float32() (defined in libdap::Float32)libdap::Float32inlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1Float32.html b/html/classlibdap_1_1Float32.html deleted file mode 100644 index 466afbc6f..000000000 --- a/html/classlibdap_1_1Float32.html +++ /dev/null @@ -1,2953 +0,0 @@ - - - - - - - -libdap: libdap::Float32 Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    - -

    Holds a 32-bit floating point value. - More...

    - -

    #include <Float32.h>

    -
    -Inheritance diagram for libdap::Float32:
    -
    -
    Inheritance graph
    - - - - -
    - - - - -

    -Public Types

    -typedef stack< BaseType * > btp_stack
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual void add_var (BaseType *bt, Part part=nil)
     Add a variable. More...
     
    -virtual void add_var_nocopy (BaseType *bt, Part part=nil)
     
    virtual unsigned int buf2val (void **val)
     Reads the class data. More...
     
    virtual bool check_semantics (string &msg, bool all=false)
     Compare an object's current state with the semantics of its type. More...
     
    virtual void clear_local_data ()
     
    virtual void compute_checksum (Crc32 &checksum)
     include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum. More...
     
    virtual bool d4_ops (BaseType *b, int op)
     
    virtual string dataset () const
     Returns the name of the dataset used to create this instance. More...
     
    virtual bool deserialize (UnMarshaller &um, DDS *dds, bool reuse=false)
     Receive data from the net. More...
     
    virtual void deserialize (D4StreamUnMarshaller &um, DMR &dmr)
     
    virtual void dump (ostream &strm) const
     dumps information about this object More...
     
    virtual int element_count (bool leaves=false)
     Count the members of constructor types. More...
     
     Float32 (const string &n)
     
     Float32 (const string &n, const string &d)
     
    Float32 (const Float32 &copy_from)
     
    virtual std::string FQN () const
     
    virtual AttrTableget_attr_table ()
     
    virtual BaseTypeget_parent () const
     
    virtual bool is_constructor_type () const
     Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable. More...
     
    -virtual bool is_dap4 () const
     
    virtual bool is_in_selection ()
     Is this variable part of the current selection? More...
     
    virtual bool is_simple_type () const
     Returns true if the instance is a numeric, string or URL type variable. More...
     
    virtual bool is_vector_type () const
     Returns true if the instance is a vector (i.e., array) type variable. More...
     
    virtual int length () const
     How many elements are in this variable. More...
     
    virtual string name () const
     Returns the name of the class instance. More...
     
    -Float32operator= (const Float32 &rhs)
     
    virtual bool ops (BaseType *b, int op)
     Evaluate relational operators. More...
     
    virtual void print_dap4 (XMLWriter &xml, bool constrained=false)
     
    virtual void print_decl (FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_decl (ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_val (FILE *out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_val (ostream &out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_xml (FILE *out, string space=" ", bool constrained=false)
     
    virtual void print_xml (ostream &out, string space=" ", bool constrained=false)
     
    virtual void print_xml_writer (XMLWriter &xml, bool constrained=false)
     
    virtual BaseTypeptr_duplicate ()
     
    virtual bool read ()
     Read data into a local buffer. More...
     
    virtual bool read_p ()
     Has this variable been read? More...
     
    virtual bool send_p ()
     Should this variable be sent? More...
     
    virtual bool serialize (ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
     Move data to the net, then remove them from the object. More...
     
    virtual void serialize (D4StreamMarshaller &m, DMR &dmr, bool filter=false)
     Serialize an Int8. More...
     
    virtual void set_attr_table (const AttrTable &at)
     
    virtual void set_in_selection (bool state)
     
    -virtual void set_is_dap4 (const bool v)
     
    virtual void set_length (int)
     Set the number of elements for this variable. More...
     
    virtual void set_name (const string &n)
     Sets the name of the class instance. More...
     
    virtual void set_parent (BaseType *parent)
     
    virtual void set_read_p (bool state)
     Sets the value of the read_p property. More...
     
    virtual void set_send_p (bool state)
     
    virtual void set_synthesized_p (bool state)
     
    virtual void set_type (const Type &t)
     Sets the type of the class instance. More...
     
    -virtual bool set_value (dods_float32 f)
     
    virtual bool synthesized_p ()
     
    virtual string toString ()
     
    virtual void transfer_attributes (AttrTable *at)
     
    virtual std::vector< BaseType * > * transform_to_dap2 (AttrTable *parent_attr_table)
     DAP4 to DAP2 transform. More...
     
    virtual void transform_to_dap4 (D4Group *root, Constructor *container)
     DAP2 to DAP4 transform. More...
     
    virtual Type type () const
     Returns the type of the class instance. More...
     
    virtual string type_name () const
     Returns the type of the class instance as a string. More...
     
    virtual unsigned int val2buf (void *val, bool reuse=false)
     Loads class data. More...
     
    virtual dods_float32 value () const
     
    virtual BaseTypevar (const string &name="", bool exact_match=true, btp_stack *s=0)
     Returns a pointer to a member of a constructor class. More...
     
    virtual BaseTypevar (const string &name, btp_stack &s)
     
    virtual unsigned int width (bool constrained=false) const
     How many bytes does this variable use Return the number of bytes of storage this variable uses. For scalar types, this is pretty simple (an int32 uses 4 bytes, etc.). For arrays and Constructors, it is a bit more complex. Note that a scalar String variable uses sizeof(String*) bytes, not the length of the string value. The width() of a String array returns the number of elements in the array times sizeof(String*). More...
     
    virtual D4Attributesattributes ()
     
    -virtual void set_attributes (D4Attributes *)
     
    -virtual void set_attributes_nocopy (D4Attributes *)
     
    Abstract Methods
    virtual void intern_data (ConstraintEvaluator &eval, DDS &dds)
     
    virtual void intern_data ()
     Read data into this variable. More...
     
    - - - - -

    -Protected Member Functions

    void m_duplicate (const BaseType &bt)
     Perform a deep copy. More...
     
    - - - - - - - -

    -Protected Attributes

    -dods_float32 d_buf
     
    -bool d_in_selection
     
    -bool d_is_synthesized
     
    -

    Detailed Description

    -

    Holds a 32-bit floating point value.

    -
    See also
    BaseType
    - -

    Definition at line 61 of file Float32.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ Float32() [1/2]

    - -
    -
    - - - - - - - - -
    libdap::Float32::Float32 (const string & n)
    -
    -

    The Float32 constructor accepts only the name of the variable. The name may be omitted, which will create a nameless variable. This may be adequate for some applications.

    -
    Parameters
    - - -
    nA string containing the name of the variable to be created.
    -
    -
    - -

    Definition at line 85 of file Float32.cc.

    - -
    -
    - -

    ◆ Float32() [2/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    libdap::Float32::Float32 (const string & n,
    const string & d 
    )
    -
    -

    The Float32 server-side constructor accepts the name of the variable and the dataset name from which this instance is created.

    -
    Parameters
    - - - -
    nA string containing the name of the variable to be created.
    dA string containing the name of the dataset from which this variable is created
    -
    -
    - -

    Definition at line 95 of file Float32.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ add_var()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::add_var (BaseTypebt,
    Part part = nil 
    )
    -
    -virtualinherited
    -
    - -

    Add a variable.

    -

    Adds a variable to an instance of a constructor class, such as Array, Structure et cetera. This function is only used by those classes. For constructors with more than one variable, the variables appear in the same order in which they were added (i.e., the order in which add_var() was called). Since this method is only for use by Vectors and Constructors, the BaseType implementation throws InternalErr.

    -
    Note
    For the implementation of this method in Structure, Sequence, et c., first copy bt and then insert the copy. If bt is itself a constructor type you must either use the var() method to get a pointer to the actual instance added to *this or you must first add all of bt's children to it before adding it to *this. The implementations should use m_duplicate() to perform a deep copy of bt.
    -
    Todo:
    We should get rid of the Part parameter and adopt the convention that the first variable is the Array and all subsequent ones are Maps (when dealing with a Grid, the only time Part matters). This would enable several methods to migrate from Structure, Sequence and Grid to Constructor.
    -
    Parameters
    - - - -
    btThe variable to be added to this instance. The caller of this method must free memory it allocates for v. This method will make a deep copy of the object pointed to by v.
    partThe part of the constructor data to be modified. Only meaningful for Grid variables.
    -
    -
    -
    See also
    Part
    - -

    Reimplemented in libdap::Vector, libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 815 of file BaseType.cc.

    - -
    -
    - -

    ◆ attributes()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4Attributes * libdap::BaseType::attributes ()
    -
    -virtualinherited
    -
    -

    DAP4 Attribute methods

    - -

    Definition at line 599 of file BaseType.cc.

    - -
    -
    - -

    ◆ buf2val()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::Float32::buf2val (void ** val)
    -
    -virtual
    -
    - -

    Reads the class data.

    -

    Reads the class data into the memory referenced by val. The caller should either allocate enough storage to val to hold the class data or set *val to null. If *val is NULL, memory will be allocated by this function with new(). If the memory is allocated this way, the caller is responsible for deallocating that memory. Array and values for simple types are stored as C would store an array.

    -
    Deprecated:
    Use value() in the leaf classes.
    -
    Parameters
    - - -
    valA pointer to a pointer to the memory into which the class data will be copied. If the value pointed to is NULL, memory will be allocated to hold the data, and the pointer value modified accordingly. The calling program is responsible for deallocating the memory references by this pointer.
    -
    -
    -
    Returns
    The size (in bytes) of the information copied to val.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 202 of file Float32.cc.

    - -
    -
    - -

    ◆ check_semantics()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::check_semantics (string & msg,
    bool all = false 
    )
    -
    -virtualinherited
    -
    - -

    Compare an object's current state with the semantics of its type.

    -

    This function checks the class instance for internal consistency. This is important to check for complex constructor classes. For BaseType, an object is semantically correct if it has both a non-null name and type.

    -

    For example, an Int32 instance would return FALSE if it had no name or no type defined. A Grid instance might return FALSE for more complex reasons, such as having Map arrays of the wrong size or shape.

    -

    This function is used by the DDS class, and will rarely, if ever, be explicitly called by a DODS application program. A variable must pass this test before it is sent, but there may be many other stages in a retrieve operation where it would fail.

    -
    Returns
    Returns FALSE when the current state violates some aspect of the type semantics, TRUE otherwise.
    -
    Parameters
    - - - -
    msgA returned string, containing a message indicating the source of any problem.
    allFor complex constructor types (Grid, Sequence, Structure), this flag indicates whether to check the semantics of the member variables, too.
    -
    -
    -
    See also
    DDS::check_semantics
    - -

    Reimplemented in libdap::Array, libdap::Vector, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1209 of file BaseType.cc.

    - -
    -
    - -

    ◆ clear_local_data()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual void libdap::BaseType::clear_local_data ()
    -
    -inlinevirtualinherited
    -
    -

    Remove any read or set data in the private data of the variable, setting read_p() to false. Used to clear any dynamically allocated storage that holds (potentially large) data. For the simple types, this no-op version is all that's needed. Vector and some other classes define a special version and have serialize() implementations that call it to free data as soon as possible after sending it.

    -
    Note
    Added 7/5/15 jhrg
    -
    -Any specialization of this should make sure to reset the read_p property.
    - -

    Reimplemented in libdap::Sequence, libdap::Vector, libdap::D4Sequence, and libdap::D4Opaque.

    - -

    Definition at line 179 of file BaseType.h.

    - -
    -
    - -

    ◆ compute_checksum()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Float32::compute_checksum (Crc32checksum)
    -
    -virtual
    -
    - -

    include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum.

    -
    Parameters
    - - -
    checksumA Crc32 instance that holds the current checksum.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 156 of file Float32.cc.

    - -
    -
    - -

    ◆ d4_ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::Float32::d4_ops (BaseTypeb,
    int op 
    )
    -
    -virtual
    -
    -
    See also
    BaseType::d4_ops(BaseType *, int)
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 282 of file Float32.cc.

    - -
    -
    - -

    ◆ dataset()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::dataset () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the dataset used to create this instance.

    -

    A dataset from which the data is to be read. The meaning of this string will vary among different types of data sources. It may be the name of a data file or an identifier used to read data from a relational database.

    - -

    Definition at line 358 of file BaseType.cc.

    - -
    -
    - -

    ◆ deserialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::Float32::deserialize (UnMarshallerum,
    DDSdds,
    bool reuse = false 
    )
    -
    -virtual
    -
    - -

    Receive data from the net.

    -

    Receives data from the network connection identified by the source parameter. The data is put into the class data buffer according to the input dds.

    -

    This function is only used on the client side of the DODS client/server connection.

    -
    Parameters
    - - - - -
    umAn UnMarshaller that knows how to deserialize data types
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure. This would have been received from the server in an earlier transmission.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect.
    -
    -
    -
    Returns
    Always returns TRUE.
    -
    Exceptions
    - - -
    Errorwhen a problem reading from the UnMarshaller is found.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 148 of file Float32.cc.

    - -
    -
    - -

    ◆ deserialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Float32::deserialize (D4StreamUnMarshallerum,
    DMRdmr 
    )
    -
    -virtual
    -
    -

    The DAP4 deserialization method.

    Parameters
    - - - -
    um
    dmr
    -
    -
    -
    Exceptions
    - - -
    Erroror InternalErr
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 179 of file Float32.cc.

    - -
    -
    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Float32::dump (ostream & strm) const
    -
    -virtual
    -
    - -

    dumps information about this object

    -

    Displays the pointer value of this instance and information about this instance.

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the information to
    -
    -
    -
    Returns
    void
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 326 of file Float32.cc.

    - -
    -
    - -

    ◆ element_count()

    - -
    -
    - - - - - -
    - - - - - - - - -
    int libdap::BaseType::element_count (bool leaves = false)
    -
    -virtualinherited
    -
    - -

    Count the members of constructor types.

    -

    Return a count of the total number of variables in this variable. This is used to count the number of variables held by a constructor variable - for simple type and vector variables it always returns 1.

    -

    For compound data types, there are two ways to count members. You can count the members, or you can count the simple members and add that to the count of the compound members. For example, if a Structure contains an Int32 and another Structure that itself contains two Int32 members, the element count of the top-level structure could be two (one Int32 and one Structure) or three (one Int32 by itself and two Int32's in the subsidiary Structure). Use the leaves parameter to control which kind of counting you desire.

    -
    Returns
    Returns 1 for simple types. For compound members, the count depends on the leaves argument.
    -
    Parameters
    - - -
    leavesThis parameter is only relevant if the object contains other compound data types. If FALSE, the function counts only the data variables mentioned in the object's declaration. If TRUE, it counts the simple members, and adds that to the sum of the counts for the compound members. This parameter has no effect for simple type variables.
    -
    -
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 443 of file BaseType.cc.

    - -
    -
    - -

    ◆ FQN()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::FQN () const
    -
    -virtualinherited
    -
    -

    Return the FQN for this variable. This will include the D4 Group component of the name.

    -
    Returns
    The FQN in a string
    - -

    Reimplemented in libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 332 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - -
    AttrTable & libdap::BaseType::get_attr_table ()
    -
    -virtualinherited
    -
    -

    Get this variable's AttrTable. It's generally a bad idea to return a reference to a contained object, but in this case it seems that building an interface inside BaseType is overkill.

    -

    Use the AttrTable methods to manipulate the table.

    - -

    Definition at line 582 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_parent()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::BaseType::get_parent () const
    -
    -virtualinherited
    -
    -

    Return a pointer to the Constructor or Vector which holds (contains) this variable. If this variable is at the top level, this method returns null.

    -
    Returns
    A BaseType pointer to the variable's parent.
    - -

    Definition at line 751 of file BaseType.cc.

    - -
    -
    - -

    ◆ intern_data() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::intern_data (ConstraintEvaluatoreval,
    DDSdds 
    )
    -
    -virtualinherited
    -
    -

    Similar to using serialize() and deserialize() together in one object. Data are read as for serialize and those values are stored in the objects as deserialize() does but does not write and then read data to/from a stream.

    -

    This method is defined by the various data type classes. It calls the read() abstract method. Unlike serialize(), this method does not clear the memory use to hold the data values, so the caller should make sure to delete the DDS or the variable as soon as possible.

    -
    Parameters
    - - - -
    evalUse this as the constraint expression evaluator.
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    -
    -
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 908 of file BaseType.cc.

    - -
    -
    - -

    ◆ intern_data() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::BaseType::intern_data ()
    -
    -virtualinherited
    -
    - -

    Read data into this variable.

    -
    Parameters
    - - - -
    evalEvaluator for a constraint expression
    dmrDMR for the whole dataset
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 927 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_constructor_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_constructor_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable.

    -
    Returns
    True if the instance is a Structure, Sequence or Grid, False otherwise.
    - -

    Definition at line 412 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_in_selection ()
    -
    -virtualinherited
    -
    - -

    Is this variable part of the current selection?

    -

    Does this variable appear in either the selection part or as a function argument in the current constrain expression. If this property is set (true) then implementations of the read() method should read this variable.

    -
    Note
    This method does not check, nor does it know about the semantics of, string arguments passed to functions. Those functions might include variable names in strings; they are responsible for reading those variables. See the grid (func_grid_select()) for an example.
    -
    See also
    BaseType::read()
    - -

    Definition at line 703 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_simple_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_simple_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a numeric, string or URL type variable.

    -
    Returns
    True if the instance is a scalar numeric, String or URL variable, False otherwise. Arrays (even of simple types) return False.
    -
    See also
    is_vector_type()
    - -

    Definition at line 393 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_vector_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_vector_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a vector (i.e., array) type variable.

    -
    Returns
    True if the instance is an Array, False otherwise.
    - -

    Definition at line 402 of file BaseType.cc.

    - -
    -
    - -

    ◆ length()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual int libdap::BaseType::length () const
    -
    -inlinevirtualinherited
    -
    - -

    How many elements are in this variable.

    -
    Todo:
    change the return type to int64_t
    -
    Returns
    The number of elements; 1 for scalars
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, libdap::Str, and libdap::D4Opaque.

    - -

    Definition at line 207 of file BaseType.h.

    - -
    -
    - -

    ◆ m_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::m_duplicate (const BaseTypebt)
    -
    -protectedinherited
    -
    - -

    Perform a deep copy.

    -

    Perform a deep copy. Copies the values of bt into *this. Pointers are dereferenced and their values are copied into a newly allocated instance.

    -
    Parameters
    - - -
    btThe source object.
    -
    -
    - -

    Definition at line 86 of file BaseType.cc.

    - -
    -
    - -

    ◆ name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::name () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the class instance.

    - -

    Definition at line 320 of file BaseType.cc.

    - -
    -
    - -

    ◆ ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::Float32::ops (BaseTypeb,
    int op 
    )
    -
    -virtual
    -
    - -

    Evaluate relational operators.

    -

    This method contains the relational operators used by the constraint expression evaluator in the DDS class. Each class that wants to be able to evaluate relational expressions must overload this function. The implementation in BaseType throws an InternalErr exception. The DAP library classes Byte, ..., Url provide specializations of this method. It is not meaningful for classes such as Array because relational expressions using Array are not supported.

    -

    The op argument refers to a table generated by bison from the constraint expression parser. Use statements like the following to correctly interpret its value:

    -
    switch (op) {
    -    case EQUAL: return i1 == i2;
    -    case NOT_EQUAL: return i1 != i2;
    -    case GREATER: return i1 > i2;
    -    case GREATER_EQL: return i1 >= i2;
    -    case LESS: return i1 < i2;
    -    case LESS_EQL: return i1 <= i2;
    -    case REGEXP: throw Error("Regular expressions are not supported for integer values");
    -    default: throw Error("Unknown operator");
    -}
    -

    This function is used by the constraint expression evaluator.

    -
    Parameters
    - - - -
    bCompare the value of this instance with b.
    opAn integer index indicating which relational operator is implied. Choose one from the following: EQUAL, NOT_EQUAL, GREATER, GREATER_EQL, LESS, LESS_EQL, and REGEXP.
    -
    -
    -
    Returns
    The boolean value of the comparison.
    -
    See also
    BaseType::d4_ops(BaseType *, int)
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 260 of file Float32.cc.

    - -
    -
    - -

    ◆ print_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_dap4 (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the DAP4 XML representation for this variable. This method is used to build the DAP4 DMR response object.

    -
    Parameters
    - - - -
    xmlAn XMLWriter that will do the serialization
    constrainedTrue if the response should show the variables subject to the current constraint expression.
    -
    -
    - -

    Reimplemented in libdap::Array, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 1164 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (FILE * out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1003 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (ostream & out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1054 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_val() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Float32::print_val (FILE * out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtual
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output stream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 238 of file Float32.cc.

    - -
    -
    - -

    ◆ print_val() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Float32::print_val (ostream & out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtual
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output ostream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 246 of file Float32.cc.

    - -
    -
    - -

    ◆ print_xml() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (FILE * out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination.
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1105 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (ostream & out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1120 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml_writer()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml_writer (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    - -

    Reimplemented in libdap::Array, libdap::D4Enum, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1134 of file BaseType.cc.

    - -
    -
    - -

    ◆ ptr_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::Float32::ptr_duplicate ()
    -
    -virtual
    -
    -

    Clone this instance. Allocate a new instance and copy *this into it. This method must perform a deep copy.

    @note This method should \e not copy data values, but must copy all
    -other fields in the object.
    -
    Returns
    A newly allocated copy of this.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 104 of file Float32.cc.

    - -
    -
    - -

    ◆ read()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read ()
    -
    -virtualinherited
    -
    - -

    Read data into a local buffer.

    -

    This method should be implemented for each of the data type classes (Byte, ..., Grid) when using the DAP class library to build a server. This method is only for DAP servers. The library provides a default definition here which throws an InternalErr exception unless the read_p property has been set. In that case it returns false, indicating that all the data have been read. The latter case can happen when building a constant value that needs to be passed to a function. The variable/constant is loaded with a value when it is created.

    -

    When implementing a new DAP server, the Byte, ..., Grid data type classes are usually specialized. In each of those specializations read() should be defined to read values from the data source and store them in the object's local buffer. The read() method is called by other methods in this library. When writing read(), follow these rules:

    -
      -
    • -read() should throw Error if it encounters an error. The message should be verbose enough to be understood by someone running a client on a different machine.
    • -
    • -The value(s) should be read if and only if either send_p() or is_in_selection() return true. If neither of these return true, the value(s) should not be read. This is important when writing read() for a Constructor type such as Grid where a client may ask for only the map vectors (and thus reading the much larger Array part is not needed).
    • -
    • -For each specialization of read(), the method should first test the value of the read_p property (using the read_p() method) and read values only if the value of read_p() is false. Once the read() method reads data and stores it in the instance, it must set the value of the read_p property to true using set_read_p(). If your read() methods fail to do this data may not serialize correctly.
    • -
    • -The Array::read() and Grid::read() methods should take into account any restrictions on Array sizes.
    • -
    • -If you are writing Sequence::read(), be sure to check the documentation for Sequence::read_row() and Sequence::serialize() so you understand how Sequence::read() is being called.
    • -
    • -

      For Sequence::read(), your specialization must correctly manage the unsent_data property and row count in addition to the read_p property (handle the read_p property as describe above). For a Sequence to serialize correctly, once all data from the Sequence has been read, unsent_data property must be set to false (use Sequence::set_unsent_data()). Also, at that time the row number counter must be reset (use Sequence::reset_row_counter()). Typically the correct time to set unsent_data to false and reset the row counter is the time when Sequence::read() return false indicating that all the data for the Sequence have been read. Failure to handle these tasks will break serialization of nested Sequences. Note that when Sequence::read() returns with a result of true (indicating there is more data to send, the value of the unsent_data property should be true.

      -

      Also, if you server must handle nested sequences, be sure to read about subclassing set_read_p().

      -
    • -
    -
    Todo:
    Modify the D4 serialize code so that it supports the true/false behavior of read() for arrays.
    -
    Todo:
    Modify all of the stock handlers so they conform to this!
    -
    Returns
    False means more data remains to be read, True indicates that no more data need to be read. For Sequence and D4Sequence, this method will generally read one instance of the Sequence; for other types it will generally read the entire variable modulo any limitations due to a constraint. However, the library should be written so that read can return less than all of the data for a variable - serialize() would then call the function until it returns True.
    -
    See also
    BaseType
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 899 of file BaseType.cc.

    - -
    -
    - -

    ◆ read_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read_p ()
    -
    -virtualinherited
    -
    - -

    Has this variable been read?

    -

    Returns true if the value(s) for this variable have been read from the data source, otherwise returns false. This method is used to determine when values need to be read using the read() method. When read_p() returns true, this library assumes that buf2val() (and other methods such as get_vec()) can be used to access the value(s) of a variable.

    -
    Returns
    True if the variable's value(s) have been read, false otherwise.
    - -

    Definition at line 480 of file BaseType.cc.

    - -
    -
    - -

    ◆ send_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::send_p ()
    -
    -virtualinherited
    -
    - -

    Should this variable be sent?

    -

    Returns the state of the send_p property. If true, this variable should be sent to the client, if false, it should not. If no constraint expression (CE) has been evaluated, this property is true for all variables in a data source (i.e., for all the variables listed in a DDS). If a CE has been evaluated, this property is true only for those variables listed in the projection part of the CE.

    -
    Returns
    True if the variable should be sent to the client, false otherwise.
    - -

    Definition at line 554 of file BaseType.cc.

    - -
    -
    - -

    ◆ serialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::Float32::serialize (ConstraintEvaluatoreval,
    DDSdds,
    Marshallerm,
    bool ce_eval = true 
    )
    -
    -virtual
    -
    - -

    Move data to the net, then remove them from the object.

    -

    Sends the data from the indicated (local) dataset through the connection identified by the Marshaller parameter. If the data is not already incorporated into the DDS object, read the data from the dataset. Once the data are sent (written to the Marshaller), they are deleted from the object and the object state is reset so that they will be read again if the read() method is called.

    -

    This function is only used on the server side of the client/server connection, and is generally only called from the ResponseBuilder functions. It has no BaseType implementation; each datatype child class supplies its own implementation.

    @param eval Use this as the constraint expression evaluator.
    -
    Parameters
    - - - - -
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    mA marshaller used to serialize data types
    ce_evalA boolean value indicating whether to evaluate the DODS constraint expression that may accompany this dataset. The constraint expression is stored in the dds.
    -
    -
    -
    Returns
    This method always returns true. Older versions used the return value to signal success or failure.
    -
    Note
    We changed the default behavior of this method so that it calls BaseType::clear_local_data() once the values are sent. This, combined with the behavior that read() is called by this method just before data are sent, means that data for any given variable remain in memory for the shortest time possible. Furthermore, since variables are serialized one at a time, no more than one variable's data will be in memory at any given time when using the default behavior. Some code - code that uses intern_data() or server functions - might alter this default behavior. Only Array (i.e. Vector), Sequence, D4Sequence and D4Opaque types actually hold data in dynamically allocated memory, so sonly those types have the new/changed behavior. This change was made on 7/5/15.
    -
    Exceptions
    - - - -
    InternalErr.
    Error.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 129 of file Float32.cc.

    - -
    -
    - -

    ◆ serialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Float32::serialize (D4StreamMarshallerm,
    DMRdmr,
    bool filter = false 
    )
    -
    -virtual
    -
    - -

    Serialize an Int8.

    -
    Parameters
    - - - - - -
    m
    dmrUnused
    evalUnused
    filterUnused
    -
    -
    -
    Exceptions
    - - -
    Erroris thrown if the value needs to be read and that operation fails.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 170 of file Float32.cc.

    - -
    -
    - -

    ◆ set_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_attr_table (const AttrTableat)
    -
    -virtualinherited
    -
    -

    Set this variable's attribute table.

    Parameters
    - - -
    atSource of the attributes.
    -
    -
    - -

    Definition at line 590 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_in_selection (bool state)
    -
    -virtualinherited
    -
    -

    Set the in_selection property to state. This property indicates that the variable is used as a parameter to a constraint expression function or that it appears as an argument in a selection sub-expression. If set (true), implementations of the BaseType::read() method should read this variable.

    -
    Parameters
    - - -
    stateSet the in_selection property to this state.
    -
    -
    -
    See also
    BaseType::read()
    -
    -BaseType::is_in_selection() for more information.
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 718 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_length()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::BaseType::set_length (int )
    -
    -inlinevirtualinherited
    -
    - -

    Set the number of elements for this variable.

    -
    Todo:
    change param type to int64_t
    -
    Parameters
    - - -
    lThe number of elements
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, and libdap::Vector.

    - -

    Definition at line 214 of file BaseType.h.

    - -
    -
    - -

    ◆ set_name()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_name (const string & n)
    -
    -virtualinherited
    -
    - -

    Sets the name of the class instance.

    - -

    Reimplemented in libdap::Vector.

    - -

    Definition at line 344 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_parent()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_parent (BaseTypeparent)
    -
    -virtualinherited
    -
    -

    Set the parent property for this variable.

    -
    Note
    Added ability to set parent to null. 10/19/12 jhrg
    -
    Parameters
    - - -
    parentPointer to the Constructor of Vector parent variable or null if the variable has no parent (if it is at the top-level of a DAP2/3 DDS).
    -
    -
    -
    Exceptions
    - - -
    InternalErrthrown if called with anything other than a Constructor, Vector or Null.
    -
    -
    - -

    Definition at line 733 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_read_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_read_p (bool state)
    -
    -virtualinherited
    -
    - -

    Sets the value of the read_p property.

    -

    Sets the value of the read_p property. This indicates that the value(s) of this variable has/have been read. An implementation of the read() method should use this to set the read_p property to true.

    -
    Note
    If the is_synthesized property is true, this method will not alter the is_read property. If you need that behavior, specialize the method in your subclasses if the various types.
    -
    -For most of the types the default implementation of this method is fine. However, if you're building a server which must handle data represented using nested sequences, then you may need to provide a specialization of Sequence::set_read_p(). By default Sequence::set_read_p() recursively sets the read_p property for all child variables to state. For servers where one Sequence reads an outer set of values and another reads an inner set, this is cumbersome. In such a case, it is easier to specialize Sequence::set_read_p() so that it does not recursively set the read_p property for the inner Sequence. Be sure to see the documentation for the read() method!
    -
    Todo:
    Look at making synthesized variables easier to implement and at making them more integrated into the overall CE evaluation process. Maybe the code that computes the synthesized var's value should be in the that variable's read() method? This might provide a way to get rid of the awkward 'projection functions' by replacing them with real children of BaseType. It would also provide a way to clean up the way the synthesized_p prop intrudes on the read_p prop.
    -
    See also
    BaseType::read()
    -
    Parameters
    - - -
    stateSet the read_p property to this state.
    -
    -
    - -

    Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 516 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_send_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_send_p (bool state)
    -
    -virtualinherited
    -
    -

    Sets the value of the send_p flag. This function is meant to be called from within the constraint evaluator of other code which determines that this variable should be returned to the client. Data are ready to be sent when both the d_is_send and d_is_read flags are set to TRUE.

    -
    Parameters
    - - -
    stateThe logical state to set the send_p flag.
    -
    -
    - -

    Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 568 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_synthesized_p (bool state)
    -
    -virtualinherited
    -
    -

    Set the synthesized flag. Before setting this flag be sure to set the read_p() state. Once this flag is set you cannot alter the state of the read_p flag!

    -
    See also
    synthesized_p()
    - -

    Definition at line 463 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_type()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_type (const Typet)
    -
    -virtualinherited
    -
    - -

    Sets the type of the class instance.

    - -

    Definition at line 372 of file BaseType.cc.

    - -
    -
    - -

    ◆ synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::synthesized_p ()
    -
    -virtualinherited
    -
    -

    Returns true if the variable is a synthesized variable. A synthesized variable is one that is added to the dataset by the server (usually with a `projection function'.

    - -

    Definition at line 452 of file BaseType.cc.

    - -
    -
    - -

    ◆ toString()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::toString ()
    -
    -virtualinherited
    -
    -

    Write out the object's internal fields in a string. To be used for debugging when regular inspection w/ddd or gdb isn't enough.

    -
    Returns
    A string which shows the object's internal stuff.
    - -

    Reimplemented in libdap::Sequence.

    - -

    Definition at line 184 of file BaseType.cc.

    - -
    -
    - -

    ◆ transfer_attributes()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::transfer_attributes (AttrTableat_container)
    -
    -virtualinherited
    -
    -

    Transfer attributes from a DAS object into this variable. Because of the rough history of the DAS object and the way that various server code built the DAS, this is necessarily a heuristic process. The intent is that this method will be overridden by handlers that need to look for certain patterns in the DAS (e.g., hdf4's odd variable_dim_n; where n = 0, 1, 2, ...) attribute containers.

    -

    There should be a one-to-one mapping between variables and attribute containers. However, in some cases one variable has attributes spread across several top level containers and in some cases one container is used by several variables

    -
    Note
    This method is technically unnecessary because a server (or client) can easily add attributes directly using the DDS::get_attr_table or BaseType::get_attr_table methods and then poke values in using any of the methods AttrTable provides. This method exists to ease the transition to DDS objects which contain attribute information for the existing servers (Since they all make DAS objects separately from the DDS). They could be modified to use the same AttrTable methods but operate on the AttrTable instances in a DDS/BaseType instead of those in a DAS.
    -
    Parameters
    - - -
    at_containerTransfer attributes from this container.
    -
    -
    -
    Returns
    void
    - -

    Reimplemented in libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 644 of file BaseType.cc.

    - -
    -
    - -

    ◆ transform_to_dap2()

    - -
    -
    - - - - - -
    - - - - - - - - -
    std::vector< BaseType * > * libdap::BaseType::transform_to_dap2 (AttrTableparent_attr_table)
    -
    -virtualinherited
    -
    - -

    DAP4 to DAP2 transform.

    -

    For the current BaseType, return a DAP2 'copy' of the variable.

    -
    Note
    For most DAP4 types, in this implementation of DAP2 the corresponding DAP4 type is the same. These types have a different representations in DAP2 and DAP4: Sequences (which are D4Sequences in the DAP4 implementation),
      -
    • Grids (which are semantically subsumed by coverages in DAP4)
    • -
    • Arrays (which use shared dimensions in DAP4)
    • -
    -
    -

    Additionally DAP4 adds the following types:

      -
    • UInt8, Int8, and Char which map to Byte in DAP2.
    • -
    • Int64, Unit64 which have no natural representation in DAP2.
    • -
    • Opaque Possible Byte stuff[] plus metadata?
    • -
    • Enum's can be represented as Int32.
    • -
    • Groups, with the exception of the root group "disappear" into the names of their member variables. Specifically the Group name is add as a prefix followed by a "/" separator to the names of all of the Group's member groups variables.
    • -
    -
    Parameters
    - - -
    TheAttrTable pointer parent_attr_table is used by Groups, which disappear from the DAP2 representation. Their children are returned in the the BAseType vector their attributes are added to parent_attr_table;
    -
    -
    -
    Returns
    A pointer to a vector of BaseType pointers (right?). In most cases this vector will contain a single pointer but DAP4 types 'disappear' such as Group will return all of their member variables in the vector. DAP4 types with no representation in DAP2 (ex: UInt64) the will return a NULL pointer and so this must be tested!
    - -

    Reimplemented in libdap::Array, libdap::D4Enum, libdap::D4Group, libdap::D4Opaque, libdap::Byte, libdap::Structure, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 259 of file BaseType.cc.

    - -
    -
    - -

    ◆ transform_to_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::transform_to_dap4 (D4Grouproot,
    Constructorcontainer 
    )
    -
    -virtualinherited
    -
    - -

    DAP2 to DAP4 transform.

    -

    For the current BaseType, return a DAP4 'copy' of the variable.

    -
    Note
    For most DAP2 types, in this implementation of DAP4 the corresponding DAP4 type is the same. The different types are Sequences (which are D4Sequences in the DAP4 implementation), Grids (which are coverages) and Arrays (which use shared dimensions).
    -
    Parameters
    - - - -
    rootThe root group that should hold this new variable. Add Group-level stuff here (e.g., D4Dimensions).
    containerAdd the new variable to this container.
    -
    -
    -
    Returns
    A pointer to the transformed variable
    - -

    Reimplemented in libdap::Sequence, libdap::Array, libdap::Grid, libdap::Structure, and libdap::Constructor.

    - -

    Definition at line 216 of file BaseType.cc.

    - -
    -
    - -

    ◆ type()

    - -
    -
    - - - - - -
    - - - - - - - -
    Type libdap::BaseType::type () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance.

    - -

    Definition at line 365 of file BaseType.cc.

    - -
    -
    - -

    ◆ type_name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::type_name () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance as a string.

    - -

    Definition at line 379 of file BaseType.cc.

    - -
    -
    - -

    ◆ val2buf()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    unsigned int libdap::Float32::val2buf (void * val,
    bool reuse = false 
    )
    -
    -virtual
    -
    - -

    Loads class data.

    -

    Store the value pointed to by val in the object's internal buffer. This function does not perform any checks, so users must be sure that the thing pointed to can actually be stored in the object's buffer.

    -

    Only simple objects (Int, Float, Byte, and so on) and arrays of these simple objects may be stored using this function. To put data into more complex constructor types, use the functions provided by that class.

    -
    Deprecated:
    Use set_value() in the leaf classes.
    -
    Parameters
    - - - -
    valA pointer to the data to be inserted into the class data buffer.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect. This is currently used only in the Vector class.
    -
    -
    -
    Returns
    The size (in bytes) of the information copied from val.
    -
    See also
    Grid
    -
    -Vector::val2buf
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 185 of file Float32.cc.

    - -
    -
    - -

    ◆ value()

    - -
    -
    - - - - - -
    - - - - - - - -
    dods_float32 libdap::Float32::value () const
    -
    -virtual
    -
    -

    Return the value of the Float32 held by this instance. This is more convenient than the general interface provided by buf2val, but its use requires a cast from BaseType to Float32.

    -
    Returns
    The dods_float32 value.
    - -

    Definition at line 232 of file Float32.cc.

    - -
    -
    - -

    ◆ var() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::BaseType::var (const string & name = "",
    bool exact_match = true,
    btp_stack * s = 0 
    )
    -
    -virtualinherited
    -
    - -

    Returns a pointer to a member of a constructor class.

    -

    Returns a pointer to the contained variable in a composite class. The composite classes are those made up of aggregated simple data types. Array, Grid, and Structure are composite types, while Int and Float are simple types. This function is only used by composite classes. The BaseType implementation always returns null.

    -

    Several of the subclasses provide alternate access methods that make sense for that particular data type. For example, the Array class defines a *var(int i) method that returns the ith entry in the Array data, and the Structure provides a *var(Vars_iter) function using a pseudo-index to access the different members of the structure.

    -
    Parameters
    - - - - -
    nameThe name of the class member. Defaults to ""
    exact_matchTrue if only interested in variables whose full names match n exactly. If false, returns the first variable whose name matches name. For example, if name is x and point.x is a variable, then var("x", false) would return a BaseType pointer to point.x. If exact_match was true then name would need to be "point.x" for var to return that pointer. This feature simplifies constraint expressions for datasets which have complex, nested, constructor variables. Defaults to true.
    sRecord the path to name. Defaults to null, in which case it is not used.
    -
    -
    -
    Returns
    A pointer to the member named in the n argument. If no name is given, the function returns the first (only) variable. For example, an Array has only one variable, while a Structure can have many.
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 758 of file BaseType.cc.

    - -
    -
    - -

    ◆ var() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::BaseType::var (const string & name,
    btp_stack & s 
    )
    -
    -virtualinherited
    -
    -

    This version of var(...) searches for name and returns a pointer to the BaseType object if found. It uses the same search algorithm as BaseType::var(const string &, bool, btp_stack *) when exact_match is false. In addition to returning a pointer to the variable, it pushes onto s a BaseType pointer to each constructor type that ultimately contains name.

    -
    Note
    The BaseType implementation always returns null. There are no default values for the parameters. If var() is called w/o any params, the three parameter version will be used.
    -
    Deprecated:
    This method is deprecated because it tries first to use exact_match and, if that fails, then tries leaf_match. It's better to use the alternate form of var(...) and specify exactly what you'd like to do.
    -
    Returns
    A pointer to the named variable.
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 780 of file BaseType.cc.

    - -
    -
    - -

    ◆ width()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::Float32::width (bool constrained = false) const
    -
    -virtual
    -
    - -

    How many bytes does this variable use Return the number of bytes of storage this variable uses. For scalar types, this is pretty simple (an int32 uses 4 bytes, etc.). For arrays and Constructors, it is a bit more complex. Note that a scalar String variable uses sizeof(String*) bytes, not the length of the string value. The width() of a String array returns the number of elements in the array times sizeof(String*).

    -
    Parameters
    - - -
    constrainedShould the current constraint be taken into account?
    -
    -
    -
    Returns
    Bytes of storage
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 123 of file Float32.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1Float32.js b/html/classlibdap_1_1Float32.js deleted file mode 100644 index 10cbea94f..000000000 --- a/html/classlibdap_1_1Float32.js +++ /dev/null @@ -1,78 +0,0 @@ -var classlibdap_1_1Float32 = -[ - [ "btp_stack", "classlibdap_1_1Float32.html#ae9c6e71855b90a0e552713011c9ab81f", null ], - [ "Float32", "classlibdap_1_1Float32.html#a440340df1382b7a5ddb0c5de7c690d39", null ], - [ "Float32", "classlibdap_1_1Float32.html#abb78eb0831332e4203c02d587bdc622c", null ], - [ "Float32", "classlibdap_1_1Float32.html#a5a2c3a95ef18f47d32643fff1a71435c", null ], - [ "~Float32", "classlibdap_1_1Float32.html#aa9c18f00b3d208eb4facd2f3f8fffc41", null ], - [ "add_var", "classlibdap_1_1Float32.html#adca3c2621c4a509537c18362005d7f7f", null ], - [ "add_var_nocopy", "classlibdap_1_1Float32.html#aa1192360cea4dc516c822cd3e13dc723", null ], - [ "attributes", "classlibdap_1_1Float32.html#a97452f06d2188eb838399a709246b5e9", null ], - [ "buf2val", "classlibdap_1_1Float32.html#af6f943ec5481067249a6b56ec57c6ec5", null ], - [ "check_semantics", "classlibdap_1_1Float32.html#aec503abec2fd3090e7738c0a575491f8", null ], - [ "clear_local_data", "classlibdap_1_1Float32.html#aaddb97a4efbe035f41deaf03c6e8683f", null ], - [ "compute_checksum", "classlibdap_1_1Float32.html#a0e7dc43c3ed796b87941ba4a70635820", null ], - [ "d4_ops", "classlibdap_1_1Float32.html#a37db8a37ba94af597cd3cfbc6e31f20f", null ], - [ "dataset", "classlibdap_1_1Float32.html#a47521ce321a17e6ce217870cb6a1a7aa", null ], - [ "deserialize", "classlibdap_1_1Float32.html#a8c274b30cfb8ebcb34ccecae15438da1", null ], - [ "deserialize", "classlibdap_1_1Float32.html#a08debecb23f1026013ca0b1a2a866753", null ], - [ "dump", "classlibdap_1_1Float32.html#abc04a7fe1914803c9854f0a26635c81f", null ], - [ "element_count", "classlibdap_1_1Float32.html#a5c2235737737b482bfa7536b8aeab810", null ], - [ "FQN", "classlibdap_1_1Float32.html#a977cb954cc8f0d914d6f66ea0f48a9e3", null ], - [ "get_attr_table", "classlibdap_1_1Float32.html#a1fcd9537c67e3bf88964b2656ff5bac1", null ], - [ "get_parent", "classlibdap_1_1Float32.html#a3459cdaa239c33ce111ef360d8dc3017", null ], - [ "intern_data", "classlibdap_1_1Float32.html#a722d33783aa0272d339b0301a4f77e59", null ], - [ "intern_data", "classlibdap_1_1Float32.html#a1956e6ea90a745516f5372c859173433", null ], - [ "is_constructor_type", "classlibdap_1_1Float32.html#a8b8490e0047c6da52945699a132008ea", null ], - [ "is_dap4", "classlibdap_1_1Float32.html#a7f6835cb5e5589ab5dad3fb4813d3bea", null ], - [ "is_in_selection", "classlibdap_1_1Float32.html#ae302ab2ec26e9fc5b575bf5d3d09aa5c", null ], - [ "is_simple_type", "classlibdap_1_1Float32.html#aae57e5b270b3a015d40c8db10b9b5549", null ], - [ "is_vector_type", "classlibdap_1_1Float32.html#a7107c76dbcab71015141142383b6d022", null ], - [ "length", "classlibdap_1_1Float32.html#aadcda7a659157bc6a832d8a5fb775b3f", null ], - [ "m_duplicate", "classlibdap_1_1Float32.html#a0c55b826c8c5dfe7a454dc670e859a41", null ], - [ "name", "classlibdap_1_1Float32.html#a24c5d67823b3cff7f4245a993072a142", null ], - [ "operator=", "classlibdap_1_1Float32.html#a3a2a80201f53d63e874cf8ec80eba67a", null ], - [ "ops", "classlibdap_1_1Float32.html#accebf037e94f4e455cce505295c4cb0a", null ], - [ "print_dap4", "classlibdap_1_1Float32.html#afcddbe441380b95c894510c02980b163", null ], - [ "print_decl", "classlibdap_1_1Float32.html#a2d799fad93255d7f2b803562ae7a5784", null ], - [ "print_decl", "classlibdap_1_1Float32.html#afd744b0ddeb04e7b173c9e83423ec572", null ], - [ "print_val", "classlibdap_1_1Float32.html#a4dcf48f6faa3d8b00655d18d396391f5", null ], - [ "print_val", "classlibdap_1_1Float32.html#a16d3bc5792e80d6bf660416391f81dde", null ], - [ "print_xml", "classlibdap_1_1Float32.html#a825820edee179550cfde3dfd4d274f2a", null ], - [ "print_xml", "classlibdap_1_1Float32.html#a8bd2c7682edd48c64b210bdf247bdef7", null ], - [ "print_xml_writer", "classlibdap_1_1Float32.html#a11554ff931528b243e9af8173d205b44", null ], - [ "ptr_duplicate", "classlibdap_1_1Float32.html#a05e8f21ce016d9bea6b572a900e4d473", null ], - [ "read", "classlibdap_1_1Float32.html#a1da003c53f2e663223f603ab3fbd7c8e", null ], - [ "read_p", "classlibdap_1_1Float32.html#a38ff819a432217c55db2e9071928d20c", null ], - [ "send_p", "classlibdap_1_1Float32.html#a980c0013817836aa77ef74aeec7fb192", null ], - [ "serialize", "classlibdap_1_1Float32.html#af2aa447cb5128232e6f7cd4d7b3cac53", null ], - [ "serialize", "classlibdap_1_1Float32.html#a4fa3abf9221449b4254f0e005429667a", null ], - [ "set_attr_table", "classlibdap_1_1Float32.html#a572a1d76a75981abac83a4241e90c0fa", null ], - [ "set_attributes", "classlibdap_1_1Float32.html#ad4dda4cf43dca838d3de183b8e01cd09", null ], - [ "set_attributes_nocopy", "classlibdap_1_1Float32.html#afd0e5f87d19020f560d5c1ff8dd4d6a3", null ], - [ "set_in_selection", "classlibdap_1_1Float32.html#a2bc036248cdaf1affac464170f32ad30", null ], - [ "set_is_dap4", "classlibdap_1_1Float32.html#abca9ddaa9a1ada8447cbe7193e8e288a", null ], - [ "set_length", "classlibdap_1_1Float32.html#a4fe343c1eeb6fb1d61ab030433651d90", null ], - [ "set_name", "classlibdap_1_1Float32.html#a86504564f45a3e6748c6f1cc0ff4e9fa", null ], - [ "set_parent", "classlibdap_1_1Float32.html#a5b6a39f6ce6594fa74f3fc899ac9a966", null ], - [ "set_read_p", "classlibdap_1_1Float32.html#a4533905a450d2a7af32e7d5acd557676", null ], - [ "set_send_p", "classlibdap_1_1Float32.html#aba7b27635c95b74536de18393133628e", null ], - [ "set_synthesized_p", "classlibdap_1_1Float32.html#a595cb4059cff24f801a1b6da79bd2f9e", null ], - [ "set_type", "classlibdap_1_1Float32.html#af74f8d1ef57c9fcca46f620f75d175a3", null ], - [ "set_value", "classlibdap_1_1Float32.html#a39f5adac2bd94e2fc0de1d483396afcb", null ], - [ "synthesized_p", "classlibdap_1_1Float32.html#ae64e677da27249473cdba0b60cdbb90a", null ], - [ "toString", "classlibdap_1_1Float32.html#a701eb3361f5b5628329ece019cd34519", null ], - [ "transfer_attributes", "classlibdap_1_1Float32.html#add8e836c622042a339152a6c31e5bdfb", null ], - [ "transform_to_dap2", "classlibdap_1_1Float32.html#affec8a11e9cc035d4b1e8fb9a87b2072", null ], - [ "transform_to_dap4", "classlibdap_1_1Float32.html#adb03e2e1e40c3c888577c4666831a949", null ], - [ "type", "classlibdap_1_1Float32.html#af8e803b20a7a7dc5f2ef351d7fac4a56", null ], - [ "type_name", "classlibdap_1_1Float32.html#a18a42c8ec35cb5b15cd651a4152f8a2c", null ], - [ "val2buf", "classlibdap_1_1Float32.html#a3204d0d25e857aeefc00b36065e5bde8", null ], - [ "value", "classlibdap_1_1Float32.html#a5d9d9573f17e8fdd16aa07ee8c6dca5d", null ], - [ "var", "classlibdap_1_1Float32.html#a4dc4fac1bb6083f6db645f37bfd59b85", null ], - [ "var", "classlibdap_1_1Float32.html#adecfc442b5927c79933c7f71cfe03fd2", null ], - [ "width", "classlibdap_1_1Float32.html#ae9e5884f35ed3c99e6f0ab22c7dae3ef", null ], - [ "d_buf", "classlibdap_1_1Float32.html#a49ffc98cc7bdd11e0b5e850cb5217945", null ], - [ "d_in_selection", "classlibdap_1_1Float32.html#a949a89714965d7afdcd1e3edc8b7f0d4", null ], - [ "d_is_synthesized", "classlibdap_1_1Float32.html#a629e97e8eb7d285b54c9af8c1ec9a29a", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1Float32__inherit__graph.map b/html/classlibdap_1_1Float32__inherit__graph.map deleted file mode 100644 index fe82826a7..000000000 --- a/html/classlibdap_1_1Float32__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1Float32__inherit__graph.md5 b/html/classlibdap_1_1Float32__inherit__graph.md5 deleted file mode 100644 index bab076e40..000000000 --- a/html/classlibdap_1_1Float32__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -6f9b3b3d4292e1e945b5d6c6a109af02 \ No newline at end of file diff --git a/html/classlibdap_1_1Float32__inherit__graph.png b/html/classlibdap_1_1Float32__inherit__graph.png deleted file mode 100644 index 4539ad30b2d55b5a3a7158036dadef6bb8858263..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62666 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�FF%siM zceLe@sIQ>Cd@A^RG{&mE{kV7)bY#A{F6e+Ky>6Pc^fZVrW+J>A0Ts_TfE(!PBNH;;2Os-!B^tg0WMwa60-^jaM+0?o9 z3w4RU;}M?Gf3xDjsU_Z1=@itd}yo4+vC2RYJkd|$?VtdX|Im!2~97AZYW z$Qr4`+7Sacu!n)mR(>wEF+vzu92ADRN3E$=LO*pn?i`6%S8o-LJcd-zo+uNIZU)~x86|U{ABy!J zczMP;M}TYnDh$#Q(0TCXfM9q+S|d|rW?xmB;fyMPlZS!?EAyJD-xi2V{T0`&&oygg z5%6*l-U9>e^~Q6QjMmv4jR*$|ZJR+dQNZK67Al`Je!Bd;8q7}6WndnA=Z}VNtPedh zP`FdeHQSGM5LJq}c=cg=F74gpH}nMuqp@l?fjctX_6QvZ8H&}^B4`?8E9S1!v6hC# zMA1R=5NFHds|G9fFa>aZE1-!Bkf&aat!EQXswP;b5rVttFP|O|2%{|xd}xXumzyTw zz-dYo-^x78vKaFu!!e4CI~zqZtxV}I`|iVMw>oLHk=v+aK}io}@aWUlHSje<(fZmY zlD<5NX0P*`dl6>k<@H5&pC+prwyD%#^)J2Px5dtc4T7@pEpjAtA-$E7nLoK<<8Oj_wjLiJ39XM zn`CXS`9WcFZlCB4L!TauFB5SNYz3IF_&{&4<3h ze!j%#w88fz-#GQ5AVHuvn?ce`9;CkE@NTePwcX5lox;S7Jnl!Th1!Wk^*|A#Fy#6B ze)d-@Vf>P)GLVv`TNb>-&ZSdd!Y!L0_HqY~?b+ys(`}2D-shWFpBj%#G%w&~ADOB>`WL^kef(DmNr~>v9u?)53m^mEb8lW=X-VY zmzm(nzDu!G`t@_`57)899&r`oB+ir-SUS8+Pq5&qyYKKhQtairD*}VIa z!pOy(Yh4{0!sr+62NKx>rf|DQE+mnA0Fb8gmL{|lw69&vMznTkk04^2kH-J|T@zB| z4(A-##~y^-_MBTK-45Tg_pvt^c<<)j3&rODSB+R<7;v*$M&sh?bbo#JXxpY;ndQ6n z_q=B)?d-3eNb%-B_OodxG|JYDm?Pg_c3bw^zE9a36%F_r@Xiy

    mR;E(dwA4LMFU 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%0A!;VI7uH* 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 MR!ycx$|Cgt0Pg - - - - - - -libdap: Member List - - - - - - - - - - - -

    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::Float64 Member List
    -
    -
    - -

    This is the complete list of members for libdap::Float64, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    add_var(BaseType *bt, Part part=nil)libdap::BaseTypevirtual
    add_var_nocopy(BaseType *bt, Part part=nil) (defined in libdap::BaseType)libdap::BaseTypevirtual
    attributes()libdap::BaseTypevirtual
    BaseType(const string &n, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const string &n, const string &d, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const BaseType &copy_from)libdap::BaseType
    btp_stack typedef (defined in libdap::BaseType)libdap::BaseType
    buf2val(void **val)libdap::Float64virtual
    check_semantics(string &msg, bool all=false)libdap::BaseTypevirtual
    clear_local_data()libdap::BaseTypeinlinevirtual
    compute_checksum(Crc32 &checksum)libdap::Float64virtual
    d4_ops(BaseType *b, int op)libdap::Float64virtual
    d_buf (defined in libdap::Float64)libdap::Float64protected
    d_in_selection (defined in libdap::BaseType)libdap::BaseTypeprotected
    d_is_synthesized (defined in libdap::BaseType)libdap::BaseTypeprotected
    dataset() constlibdap::BaseTypevirtual
    deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)libdap::Float64virtual
    deserialize(D4StreamUnMarshaller &um, DMR &dmr)libdap::Float64virtual
    dump(ostream &strm) constlibdap::Float64virtual
    element_count(bool leaves=false)libdap::BaseTypevirtual
    Float64(const string &n)libdap::Float64
    Float64(const string &n, const string &d)libdap::Float64
    Float64(const Float64 &copy_from) (defined in libdap::Float64)libdap::Float64
    FQN() constlibdap::BaseTypevirtual
    get_attr_table()libdap::BaseTypevirtual
    get_parent() constlibdap::BaseTypevirtual
    intern_data(ConstraintEvaluator &eval, DDS &dds)libdap::BaseTypevirtual
    intern_data()libdap::BaseTypevirtual
    is_constructor_type() constlibdap::BaseTypevirtual
    is_dap4() const (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    is_in_selection()libdap::BaseTypevirtual
    is_simple_type() constlibdap::BaseTypevirtual
    is_vector_type() constlibdap::BaseTypevirtual
    length() constlibdap::BaseTypeinlinevirtual
    m_duplicate(const BaseType &bt)libdap::BaseTypeprotected
    name() constlibdap::BaseTypevirtual
    operator=(const Float64 &rhs) (defined in libdap::Float64)libdap::Float64
    operator=(const BaseType &rhs) (defined in libdap::BaseType)libdap::BaseType
    ops(BaseType *b, int op)libdap::Float64virtual
    print_dap4(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
    print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_val(FILE *out, string space="", bool print_decl_p=true)libdap::Float64virtual
    print_val(ostream &out, string space="", bool print_decl_p=true)libdap::Float64virtual
    print_xml(FILE *out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml(ostream &out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml_writer(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
    ptr_duplicate()libdap::Float64virtual
    read()libdap::BaseTypevirtual
    read_p()libdap::BaseTypevirtual
    send_p()libdap::BaseTypevirtual
    serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)libdap::Float64virtual
    serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)libdap::Float64virtual
    set_attr_table(const AttrTable &at)libdap::BaseTypevirtual
    set_attributes(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_attributes_nocopy(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_in_selection(bool state)libdap::BaseTypevirtual
    set_is_dap4(const bool v) (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    set_length(int)libdap::BaseTypeinlinevirtual
    set_name(const string &n)libdap::BaseTypevirtual
    set_parent(BaseType *parent)libdap::BaseTypevirtual
    set_read_p(bool state)libdap::BaseTypevirtual
    set_send_p(bool state)libdap::BaseTypevirtual
    set_synthesized_p(bool state)libdap::BaseTypevirtual
    set_type(const Type &t)libdap::BaseTypevirtual
    set_value(dods_float64 val) (defined in libdap::Float64)libdap::Float64virtual
    synthesized_p()libdap::BaseTypevirtual
    toString()libdap::BaseTypevirtual
    transfer_attributes(AttrTable *at)libdap::BaseTypevirtual
    transform_to_dap2(AttrTable *parent_attr_table)libdap::BaseTypevirtual
    transform_to_dap4(D4Group *root, Constructor *container)libdap::BaseTypevirtual
    type() constlibdap::BaseTypevirtual
    type_name() constlibdap::BaseTypevirtual
    val2buf(void *val, bool reuse=false)libdap::Float64virtual
    value() constlibdap::Float64virtual
    var(const string &name="", bool exact_match=true, btp_stack *s=0)libdap::BaseTypevirtual
    var(const string &name, btp_stack &s)libdap::BaseTypevirtual
    width(bool constrained=false) constlibdap::Float64virtual
    ~BaseType() (defined in libdap::BaseType)libdap::BaseTypevirtual
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    ~Float64() (defined in libdap::Float64)libdap::Float64inlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1Float64.html b/html/classlibdap_1_1Float64.html deleted file mode 100644 index 7a5ca8f5c..000000000 --- a/html/classlibdap_1_1Float64.html +++ /dev/null @@ -1,2965 +0,0 @@ - - - - - - - -libdap: libdap::Float64 Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    - -

    Holds a 64-bit (double precision) floating point value. - More...

    - -

    #include <Float64.h>

    -
    -Inheritance diagram for libdap::Float64:
    -
    -
    Inheritance graph
    - - - - -
    - - - - -

    -Public Types

    -typedef stack< BaseType * > btp_stack
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual void add_var (BaseType *bt, Part part=nil)
     Add a variable. More...
     
    -virtual void add_var_nocopy (BaseType *bt, Part part=nil)
     
    virtual unsigned int buf2val (void **val)
     Reads the class data. More...
     
    virtual bool check_semantics (string &msg, bool all=false)
     Compare an object's current state with the semantics of its type. More...
     
    virtual void clear_local_data ()
     
    virtual void compute_checksum (Crc32 &checksum)
     include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum. More...
     
    virtual bool d4_ops (BaseType *b, int op)
     Evaluator a relop for DAP4. More...
     
    virtual string dataset () const
     Returns the name of the dataset used to create this instance. More...
     
    virtual bool deserialize (UnMarshaller &um, DDS *dds, bool reuse=false)
     Receive data from the net. More...
     
    virtual void deserialize (D4StreamUnMarshaller &um, DMR &dmr)
     
    virtual void dump (ostream &strm) const
     dumps information about this object More...
     
    virtual int element_count (bool leaves=false)
     Count the members of constructor types. More...
     
     Float64 (const string &n)
     
     Float64 (const string &n, const string &d)
     
    Float64 (const Float64 &copy_from)
     
    virtual std::string FQN () const
     
    virtual AttrTableget_attr_table ()
     
    virtual BaseTypeget_parent () const
     
    virtual bool is_constructor_type () const
     Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable. More...
     
    -virtual bool is_dap4 () const
     
    virtual bool is_in_selection ()
     Is this variable part of the current selection? More...
     
    virtual bool is_simple_type () const
     Returns true if the instance is a numeric, string or URL type variable. More...
     
    virtual bool is_vector_type () const
     Returns true if the instance is a vector (i.e., array) type variable. More...
     
    virtual int length () const
     How many elements are in this variable. More...
     
    virtual string name () const
     Returns the name of the class instance. More...
     
    -Float64operator= (const Float64 &rhs)
     
    virtual bool ops (BaseType *b, int op)
     Evaluate relational operators. More...
     
    virtual void print_dap4 (XMLWriter &xml, bool constrained=false)
     
    virtual void print_decl (FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_decl (ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_val (FILE *out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_val (ostream &out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_xml (FILE *out, string space=" ", bool constrained=false)
     
    virtual void print_xml (ostream &out, string space=" ", bool constrained=false)
     
    virtual void print_xml_writer (XMLWriter &xml, bool constrained=false)
     
    virtual BaseTypeptr_duplicate ()
     
    virtual bool read ()
     Read data into a local buffer. More...
     
    virtual bool read_p ()
     Has this variable been read? More...
     
    virtual bool send_p ()
     Should this variable be sent? More...
     
    virtual bool serialize (ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
     Move data to the net, then remove them from the object. More...
     
    virtual void serialize (D4StreamMarshaller &m, DMR &dmr, bool filter=false)
     Serialize an Int8. More...
     
    virtual void set_attr_table (const AttrTable &at)
     
    virtual void set_in_selection (bool state)
     
    -virtual void set_is_dap4 (const bool v)
     
    virtual void set_length (int)
     Set the number of elements for this variable. More...
     
    virtual void set_name (const string &n)
     Sets the name of the class instance. More...
     
    virtual void set_parent (BaseType *parent)
     
    virtual void set_read_p (bool state)
     Sets the value of the read_p property. More...
     
    virtual void set_send_p (bool state)
     
    virtual void set_synthesized_p (bool state)
     
    virtual void set_type (const Type &t)
     Sets the type of the class instance. More...
     
    -virtual bool set_value (dods_float64 val)
     
    virtual bool synthesized_p ()
     
    virtual string toString ()
     
    virtual void transfer_attributes (AttrTable *at)
     
    virtual std::vector< BaseType * > * transform_to_dap2 (AttrTable *parent_attr_table)
     DAP4 to DAP2 transform. More...
     
    virtual void transform_to_dap4 (D4Group *root, Constructor *container)
     DAP2 to DAP4 transform. More...
     
    virtual Type type () const
     Returns the type of the class instance. More...
     
    virtual string type_name () const
     Returns the type of the class instance as a string. More...
     
    virtual unsigned int val2buf (void *val, bool reuse=false)
     Loads class data. More...
     
    virtual dods_float64 value () const
     
    virtual BaseTypevar (const string &name="", bool exact_match=true, btp_stack *s=0)
     Returns a pointer to a member of a constructor class. More...
     
    virtual BaseTypevar (const string &name, btp_stack &s)
     
    virtual unsigned int width (bool constrained=false) const
     How many bytes does this variable use Return the number of bytes of storage this variable uses. For scalar types, this is pretty simple (an int32 uses 4 bytes, etc.). For arrays and Constructors, it is a bit more complex. Note that a scalar String variable uses sizeof(String*) bytes, not the length of the string value. The width() of a String array returns the number of elements in the array times sizeof(String*). More...
     
    virtual D4Attributesattributes ()
     
    -virtual void set_attributes (D4Attributes *)
     
    -virtual void set_attributes_nocopy (D4Attributes *)
     
    Abstract Methods
    virtual void intern_data (ConstraintEvaluator &eval, DDS &dds)
     
    virtual void intern_data ()
     Read data into this variable. More...
     
    - - - - -

    -Protected Member Functions

    void m_duplicate (const BaseType &bt)
     Perform a deep copy. More...
     
    - - - - - - - -

    -Protected Attributes

    -dods_float64 d_buf
     
    -bool d_in_selection
     
    -bool d_is_synthesized
     
    -

    Detailed Description

    -

    Holds a 64-bit (double precision) floating point value.

    -
    See also
    BaseType
    - -

    Definition at line 60 of file Float64.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ Float64() [1/2]

    - -
    -
    - - - - - - - - -
    libdap::Float64::Float64 (const string & n)
    -
    -

    The Float64 constructor requires only the name of the variable to be created. The name may be omitted, which will create a nameless variable. This may be adequate for some applications.

    -
    Parameters
    - - -
    nA string containing the name of the variable to be created.
    -
    -
    - -

    Definition at line 84 of file Float64.cc.

    - -
    -
    - -

    ◆ Float64() [2/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    libdap::Float64::Float64 (const string & n,
    const string & d 
    )
    -
    -

    The Float64 server-side constructor accepts the name of the variable and the dataset name from which this instance is created.

    -
    Parameters
    - - - -
    nA string containing the name of the variable to be created.
    dA string containing the name of the dataset from which this variable is created
    -
    -
    - -

    Definition at line 94 of file Float64.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ add_var()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::add_var (BaseTypebt,
    Part part = nil 
    )
    -
    -virtualinherited
    -
    - -

    Add a variable.

    -

    Adds a variable to an instance of a constructor class, such as Array, Structure et cetera. This function is only used by those classes. For constructors with more than one variable, the variables appear in the same order in which they were added (i.e., the order in which add_var() was called). Since this method is only for use by Vectors and Constructors, the BaseType implementation throws InternalErr.

    -
    Note
    For the implementation of this method in Structure, Sequence, et c., first copy bt and then insert the copy. If bt is itself a constructor type you must either use the var() method to get a pointer to the actual instance added to *this or you must first add all of bt's children to it before adding it to *this. The implementations should use m_duplicate() to perform a deep copy of bt.
    -
    Todo:
    We should get rid of the Part parameter and adopt the convention that the first variable is the Array and all subsequent ones are Maps (when dealing with a Grid, the only time Part matters). This would enable several methods to migrate from Structure, Sequence and Grid to Constructor.
    -
    Parameters
    - - - -
    btThe variable to be added to this instance. The caller of this method must free memory it allocates for v. This method will make a deep copy of the object pointed to by v.
    partThe part of the constructor data to be modified. Only meaningful for Grid variables.
    -
    -
    -
    See also
    Part
    - -

    Reimplemented in libdap::Vector, libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 815 of file BaseType.cc.

    - -
    -
    - -

    ◆ attributes()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4Attributes * libdap::BaseType::attributes ()
    -
    -virtualinherited
    -
    -

    DAP4 Attribute methods

    - -

    Definition at line 599 of file BaseType.cc.

    - -
    -
    - -

    ◆ buf2val()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::Float64::buf2val (void ** val)
    -
    -virtual
    -
    - -

    Reads the class data.

    -

    Reads the class data into the memory referenced by val. The caller should either allocate enough storage to val to hold the class data or set *val to null. If *val is NULL, memory will be allocated by this function with new(). If the memory is allocated this way, the caller is responsible for deallocating that memory. Array and values for simple types are stored as C would store an array.

    -
    Deprecated:
    Use value() in the leaf classes.
    -
    Parameters
    - - -
    valA pointer to a pointer to the memory into which the class data will be copied. If the value pointed to is NULL, memory will be allocated to hold the data, and the pointer value modified accordingly. The calling program is responsible for deallocating the memory references by this pointer.
    -
    -
    -
    Returns
    The size (in bytes) of the information copied to val.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 200 of file Float64.cc.

    - -
    -
    - -

    ◆ check_semantics()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::check_semantics (string & msg,
    bool all = false 
    )
    -
    -virtualinherited
    -
    - -

    Compare an object's current state with the semantics of its type.

    -

    This function checks the class instance for internal consistency. This is important to check for complex constructor classes. For BaseType, an object is semantically correct if it has both a non-null name and type.

    -

    For example, an Int32 instance would return FALSE if it had no name or no type defined. A Grid instance might return FALSE for more complex reasons, such as having Map arrays of the wrong size or shape.

    -

    This function is used by the DDS class, and will rarely, if ever, be explicitly called by a DODS application program. A variable must pass this test before it is sent, but there may be many other stages in a retrieve operation where it would fail.

    -
    Returns
    Returns FALSE when the current state violates some aspect of the type semantics, TRUE otherwise.
    -
    Parameters
    - - - -
    msgA returned string, containing a message indicating the source of any problem.
    allFor complex constructor types (Grid, Sequence, Structure), this flag indicates whether to check the semantics of the member variables, too.
    -
    -
    -
    See also
    DDS::check_semantics
    - -

    Reimplemented in libdap::Array, libdap::Vector, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1209 of file BaseType.cc.

    - -
    -
    - -

    ◆ clear_local_data()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual void libdap::BaseType::clear_local_data ()
    -
    -inlinevirtualinherited
    -
    -

    Remove any read or set data in the private data of the variable, setting read_p() to false. Used to clear any dynamically allocated storage that holds (potentially large) data. For the simple types, this no-op version is all that's needed. Vector and some other classes define a special version and have serialize() implementations that call it to free data as soon as possible after sending it.

    -
    Note
    Added 7/5/15 jhrg
    -
    -Any specialization of this should make sure to reset the read_p property.
    - -

    Reimplemented in libdap::Sequence, libdap::Vector, libdap::D4Sequence, and libdap::D4Opaque.

    - -

    Definition at line 179 of file BaseType.h.

    - -
    -
    - -

    ◆ compute_checksum()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Float64::compute_checksum (Crc32checksum)
    -
    -virtual
    -
    - -

    include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum.

    -
    Parameters
    - - -
    checksumA Crc32 instance that holds the current checksum.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 155 of file Float64.cc.

    - -
    -
    - -

    ◆ d4_ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::Float64::d4_ops (BaseTypeb,
    int op 
    )
    -
    -virtual
    -
    - -

    Evaluator a relop for DAP4.

    -

    This method is used by the filter expression evaluation code in DAP4. Each of the 'data type' classes that support relops must overload this method. In an expression of the form arg1 op arg2, this object is arg1, the parameter 'b' is arg2 and op is the relational operator.

    -
    Note
    I used the same relop codes for DAP4 as in the DAP2 parser/scanner which makes for some coupling between them, but cuts way down on the duplication of the evaluator logic, which is somewhat involved.
    -
    Parameters
    - - - -
    bThe second argument in the relational expression
    opThe infix relational operator
    -
    -
    -
    Returns
    True if the expression is true, False otherwise.
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 287 of file Float64.cc.

    - -
    -
    - -

    ◆ dataset()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::dataset () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the dataset used to create this instance.

    -

    A dataset from which the data is to be read. The meaning of this string will vary among different types of data sources. It may be the name of a data file or an identifier used to read data from a relational database.

    - -

    Definition at line 358 of file BaseType.cc.

    - -
    -
    - -

    ◆ deserialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::Float64::deserialize (UnMarshallerum,
    DDSdds,
    bool reuse = false 
    )
    -
    -virtual
    -
    - -

    Receive data from the net.

    -

    Receives data from the network connection identified by the source parameter. The data is put into the class data buffer according to the input dds.

    -

    This function is only used on the client side of the DODS client/server connection.

    -
    Parameters
    - - - - -
    umAn UnMarshaller that knows how to deserialize data types
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure. This would have been received from the server in an earlier transmission.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect.
    -
    -
    -
    Returns
    Always returns TRUE.
    -
    Exceptions
    - - -
    Errorwhen a problem reading from the UnMarshaller is found.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 147 of file Float64.cc.

    - -
    -
    - -

    ◆ deserialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Float64::deserialize (D4StreamUnMarshallerum,
    DMRdmr 
    )
    -
    -virtual
    -
    -

    The DAP4 deserialization method.

    Parameters
    - - - -
    um
    dmr
    -
    -
    -
    Exceptions
    - - -
    Erroror InternalErr
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 178 of file Float64.cc.

    - -
    -
    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Float64::dump (ostream & strm) const
    -
    -virtual
    -
    - -

    dumps information about this object

    -

    Displays the pointer value of this instance and information about this instance.

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the information to
    -
    -
    -
    Returns
    void
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 334 of file Float64.cc.

    - -
    -
    - -

    ◆ element_count()

    - -
    -
    - - - - - -
    - - - - - - - - -
    int libdap::BaseType::element_count (bool leaves = false)
    -
    -virtualinherited
    -
    - -

    Count the members of constructor types.

    -

    Return a count of the total number of variables in this variable. This is used to count the number of variables held by a constructor variable - for simple type and vector variables it always returns 1.

    -

    For compound data types, there are two ways to count members. You can count the members, or you can count the simple members and add that to the count of the compound members. For example, if a Structure contains an Int32 and another Structure that itself contains two Int32 members, the element count of the top-level structure could be two (one Int32 and one Structure) or three (one Int32 by itself and two Int32's in the subsidiary Structure). Use the leaves parameter to control which kind of counting you desire.

    -
    Returns
    Returns 1 for simple types. For compound members, the count depends on the leaves argument.
    -
    Parameters
    - - -
    leavesThis parameter is only relevant if the object contains other compound data types. If FALSE, the function counts only the data variables mentioned in the object's declaration. If TRUE, it counts the simple members, and adds that to the sum of the counts for the compound members. This parameter has no effect for simple type variables.
    -
    -
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 443 of file BaseType.cc.

    - -
    -
    - -

    ◆ FQN()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::FQN () const
    -
    -virtualinherited
    -
    -

    Return the FQN for this variable. This will include the D4 Group component of the name.

    -
    Returns
    The FQN in a string
    - -

    Reimplemented in libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 332 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - -
    AttrTable & libdap::BaseType::get_attr_table ()
    -
    -virtualinherited
    -
    -

    Get this variable's AttrTable. It's generally a bad idea to return a reference to a contained object, but in this case it seems that building an interface inside BaseType is overkill.

    -

    Use the AttrTable methods to manipulate the table.

    - -

    Definition at line 582 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_parent()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::BaseType::get_parent () const
    -
    -virtualinherited
    -
    -

    Return a pointer to the Constructor or Vector which holds (contains) this variable. If this variable is at the top level, this method returns null.

    -
    Returns
    A BaseType pointer to the variable's parent.
    - -

    Definition at line 751 of file BaseType.cc.

    - -
    -
    - -

    ◆ intern_data() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::intern_data (ConstraintEvaluatoreval,
    DDSdds 
    )
    -
    -virtualinherited
    -
    -

    Similar to using serialize() and deserialize() together in one object. Data are read as for serialize and those values are stored in the objects as deserialize() does but does not write and then read data to/from a stream.

    -

    This method is defined by the various data type classes. It calls the read() abstract method. Unlike serialize(), this method does not clear the memory use to hold the data values, so the caller should make sure to delete the DDS or the variable as soon as possible.

    -
    Parameters
    - - - -
    evalUse this as the constraint expression evaluator.
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    -
    -
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 908 of file BaseType.cc.

    - -
    -
    - -

    ◆ intern_data() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::BaseType::intern_data ()
    -
    -virtualinherited
    -
    - -

    Read data into this variable.

    -
    Parameters
    - - - -
    evalEvaluator for a constraint expression
    dmrDMR for the whole dataset
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 927 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_constructor_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_constructor_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable.

    -
    Returns
    True if the instance is a Structure, Sequence or Grid, False otherwise.
    - -

    Definition at line 412 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_in_selection ()
    -
    -virtualinherited
    -
    - -

    Is this variable part of the current selection?

    -

    Does this variable appear in either the selection part or as a function argument in the current constrain expression. If this property is set (true) then implementations of the read() method should read this variable.

    -
    Note
    This method does not check, nor does it know about the semantics of, string arguments passed to functions. Those functions might include variable names in strings; they are responsible for reading those variables. See the grid (func_grid_select()) for an example.
    -
    See also
    BaseType::read()
    - -

    Definition at line 703 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_simple_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_simple_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a numeric, string or URL type variable.

    -
    Returns
    True if the instance is a scalar numeric, String or URL variable, False otherwise. Arrays (even of simple types) return False.
    -
    See also
    is_vector_type()
    - -

    Definition at line 393 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_vector_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_vector_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a vector (i.e., array) type variable.

    -
    Returns
    True if the instance is an Array, False otherwise.
    - -

    Definition at line 402 of file BaseType.cc.

    - -
    -
    - -

    ◆ length()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual int libdap::BaseType::length () const
    -
    -inlinevirtualinherited
    -
    - -

    How many elements are in this variable.

    -
    Todo:
    change the return type to int64_t
    -
    Returns
    The number of elements; 1 for scalars
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, libdap::Str, and libdap::D4Opaque.

    - -

    Definition at line 207 of file BaseType.h.

    - -
    -
    - -

    ◆ m_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::m_duplicate (const BaseTypebt)
    -
    -protectedinherited
    -
    - -

    Perform a deep copy.

    -

    Perform a deep copy. Copies the values of bt into *this. Pointers are dereferenced and their values are copied into a newly allocated instance.

    -
    Parameters
    - - -
    btThe source object.
    -
    -
    - -

    Definition at line 86 of file BaseType.cc.

    - -
    -
    - -

    ◆ name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::name () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the class instance.

    - -

    Definition at line 320 of file BaseType.cc.

    - -
    -
    - -

    ◆ ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::Float64::ops (BaseTypeb,
    int op 
    )
    -
    -virtual
    -
    - -

    Evaluate relational operators.

    -

    This method contains the relational operators used by the constraint expression evaluator in the DDS class. Each class that wants to be able to evaluate relational expressions must overload this function. The implementation in BaseType throws an InternalErr exception. The DAP library classes Byte, ..., Url provide specializations of this method. It is not meaningful for classes such as Array because relational expressions using Array are not supported.

    -

    The op argument refers to a table generated by bison from the constraint expression parser. Use statements like the following to correctly interpret its value:

    -
    switch (op) {
    -    case EQUAL: return i1 == i2;
    -    case NOT_EQUAL: return i1 != i2;
    -    case GREATER: return i1 > i2;
    -    case GREATER_EQL: return i1 >= i2;
    -    case LESS: return i1 < i2;
    -    case LESS_EQL: return i1 <= i2;
    -    case REGEXP: throw Error("Regular expressions are not supported for integer values");
    -    default: throw Error("Unknown operator");
    -}
    -

    This function is used by the constraint expression evaluator.

    -
    Parameters
    - - - -
    bCompare the value of this instance with b.
    opAn integer index indicating which relational operator is implied. Choose one from the following: EQUAL, NOT_EQUAL, GREATER, GREATER_EQL, LESS, LESS_EQL, and REGEXP.
    -
    -
    -
    Returns
    The boolean value of the comparison.
    -
    See also
    BaseType::d4_ops(BaseType *, int)
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 261 of file Float64.cc.

    - -
    -
    - -

    ◆ print_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_dap4 (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the DAP4 XML representation for this variable. This method is used to build the DAP4 DMR response object.

    -
    Parameters
    - - - -
    xmlAn XMLWriter that will do the serialization
    constrainedTrue if the response should show the variables subject to the current constraint expression.
    -
    -
    - -

    Reimplemented in libdap::Array, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 1164 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (FILE * out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1003 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (ostream & out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1054 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_val() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Float64::print_val (FILE * out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtual
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output stream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 236 of file Float64.cc.

    - -
    -
    - -

    ◆ print_val() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Float64::print_val (ostream & out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtual
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output ostream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 244 of file Float64.cc.

    - -
    -
    - -

    ◆ print_xml() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (FILE * out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination.
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1105 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (ostream & out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1120 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml_writer()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml_writer (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    - -

    Reimplemented in libdap::Array, libdap::D4Enum, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1134 of file BaseType.cc.

    - -
    -
    - -

    ◆ ptr_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::Float64::ptr_duplicate ()
    -
    -virtual
    -
    -

    Clone this instance. Allocate a new instance and copy *this into it. This method must perform a deep copy.

    @note This method should \e not copy data values, but must copy all
    -other fields in the object.
    -
    Returns
    A newly allocated copy of this.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 103 of file Float64.cc.

    - -
    -
    - -

    ◆ read()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read ()
    -
    -virtualinherited
    -
    - -

    Read data into a local buffer.

    -

    This method should be implemented for each of the data type classes (Byte, ..., Grid) when using the DAP class library to build a server. This method is only for DAP servers. The library provides a default definition here which throws an InternalErr exception unless the read_p property has been set. In that case it returns false, indicating that all the data have been read. The latter case can happen when building a constant value that needs to be passed to a function. The variable/constant is loaded with a value when it is created.

    -

    When implementing a new DAP server, the Byte, ..., Grid data type classes are usually specialized. In each of those specializations read() should be defined to read values from the data source and store them in the object's local buffer. The read() method is called by other methods in this library. When writing read(), follow these rules:

    -
      -
    • -read() should throw Error if it encounters an error. The message should be verbose enough to be understood by someone running a client on a different machine.
    • -
    • -The value(s) should be read if and only if either send_p() or is_in_selection() return true. If neither of these return true, the value(s) should not be read. This is important when writing read() for a Constructor type such as Grid where a client may ask for only the map vectors (and thus reading the much larger Array part is not needed).
    • -
    • -For each specialization of read(), the method should first test the value of the read_p property (using the read_p() method) and read values only if the value of read_p() is false. Once the read() method reads data and stores it in the instance, it must set the value of the read_p property to true using set_read_p(). If your read() methods fail to do this data may not serialize correctly.
    • -
    • -The Array::read() and Grid::read() methods should take into account any restrictions on Array sizes.
    • -
    • -If you are writing Sequence::read(), be sure to check the documentation for Sequence::read_row() and Sequence::serialize() so you understand how Sequence::read() is being called.
    • -
    • -

      For Sequence::read(), your specialization must correctly manage the unsent_data property and row count in addition to the read_p property (handle the read_p property as describe above). For a Sequence to serialize correctly, once all data from the Sequence has been read, unsent_data property must be set to false (use Sequence::set_unsent_data()). Also, at that time the row number counter must be reset (use Sequence::reset_row_counter()). Typically the correct time to set unsent_data to false and reset the row counter is the time when Sequence::read() return false indicating that all the data for the Sequence have been read. Failure to handle these tasks will break serialization of nested Sequences. Note that when Sequence::read() returns with a result of true (indicating there is more data to send, the value of the unsent_data property should be true.

      -

      Also, if you server must handle nested sequences, be sure to read about subclassing set_read_p().

      -
    • -
    -
    Todo:
    Modify the D4 serialize code so that it supports the true/false behavior of read() for arrays.
    -
    Todo:
    Modify all of the stock handlers so they conform to this!
    -
    Returns
    False means more data remains to be read, True indicates that no more data need to be read. For Sequence and D4Sequence, this method will generally read one instance of the Sequence; for other types it will generally read the entire variable modulo any limitations due to a constraint. However, the library should be written so that read can return less than all of the data for a variable - serialize() would then call the function until it returns True.
    -
    See also
    BaseType
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 899 of file BaseType.cc.

    - -
    -
    - -

    ◆ read_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read_p ()
    -
    -virtualinherited
    -
    - -

    Has this variable been read?

    -

    Returns true if the value(s) for this variable have been read from the data source, otherwise returns false. This method is used to determine when values need to be read using the read() method. When read_p() returns true, this library assumes that buf2val() (and other methods such as get_vec()) can be used to access the value(s) of a variable.

    -
    Returns
    True if the variable's value(s) have been read, false otherwise.
    - -

    Definition at line 480 of file BaseType.cc.

    - -
    -
    - -

    ◆ send_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::send_p ()
    -
    -virtualinherited
    -
    - -

    Should this variable be sent?

    -

    Returns the state of the send_p property. If true, this variable should be sent to the client, if false, it should not. If no constraint expression (CE) has been evaluated, this property is true for all variables in a data source (i.e., for all the variables listed in a DDS). If a CE has been evaluated, this property is true only for those variables listed in the projection part of the CE.

    -
    Returns
    True if the variable should be sent to the client, false otherwise.
    - -

    Definition at line 554 of file BaseType.cc.

    - -
    -
    - -

    ◆ serialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::Float64::serialize (ConstraintEvaluatoreval,
    DDSdds,
    Marshallerm,
    bool ce_eval = true 
    )
    -
    -virtual
    -
    - -

    Move data to the net, then remove them from the object.

    -

    Sends the data from the indicated (local) dataset through the connection identified by the Marshaller parameter. If the data is not already incorporated into the DDS object, read the data from the dataset. Once the data are sent (written to the Marshaller), they are deleted from the object and the object state is reset so that they will be read again if the read() method is called.

    -

    This function is only used on the server side of the client/server connection, and is generally only called from the ResponseBuilder functions. It has no BaseType implementation; each datatype child class supplies its own implementation.

    @param eval Use this as the constraint expression evaluator.
    -
    Parameters
    - - - - -
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    mA marshaller used to serialize data types
    ce_evalA boolean value indicating whether to evaluate the DODS constraint expression that may accompany this dataset. The constraint expression is stored in the dds.
    -
    -
    -
    Returns
    This method always returns true. Older versions used the return value to signal success or failure.
    -
    Note
    We changed the default behavior of this method so that it calls BaseType::clear_local_data() once the values are sent. This, combined with the behavior that read() is called by this method just before data are sent, means that data for any given variable remain in memory for the shortest time possible. Furthermore, since variables are serialized one at a time, no more than one variable's data will be in memory at any given time when using the default behavior. Some code - code that uses intern_data() or server functions - might alter this default behavior. Only Array (i.e. Vector), Sequence, D4Sequence and D4Opaque types actually hold data in dynamically allocated memory, so sonly those types have the new/changed behavior. This change was made on 7/5/15.
    -
    Exceptions
    - - - -
    InternalErr.
    Error.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 128 of file Float64.cc.

    - -
    -
    - -

    ◆ serialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Float64::serialize (D4StreamMarshallerm,
    DMRdmr,
    bool filter = false 
    )
    -
    -virtual
    -
    - -

    Serialize an Int8.

    -
    Parameters
    - - - - - -
    m
    dmrUnused
    evalUnused
    filterUnused
    -
    -
    -
    Exceptions
    - - -
    Erroris thrown if the value needs to be read and that operation fails.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 169 of file Float64.cc.

    - -
    -
    - -

    ◆ set_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_attr_table (const AttrTableat)
    -
    -virtualinherited
    -
    -

    Set this variable's attribute table.

    Parameters
    - - -
    atSource of the attributes.
    -
    -
    - -

    Definition at line 590 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_in_selection (bool state)
    -
    -virtualinherited
    -
    -

    Set the in_selection property to state. This property indicates that the variable is used as a parameter to a constraint expression function or that it appears as an argument in a selection sub-expression. If set (true), implementations of the BaseType::read() method should read this variable.

    -
    Parameters
    - - -
    stateSet the in_selection property to this state.
    -
    -
    -
    See also
    BaseType::read()
    -
    -BaseType::is_in_selection() for more information.
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 718 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_length()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::BaseType::set_length (int )
    -
    -inlinevirtualinherited
    -
    - -

    Set the number of elements for this variable.

    -
    Todo:
    change param type to int64_t
    -
    Parameters
    - - -
    lThe number of elements
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, and libdap::Vector.

    - -

    Definition at line 214 of file BaseType.h.

    - -
    -
    - -

    ◆ set_name()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_name (const string & n)
    -
    -virtualinherited
    -
    - -

    Sets the name of the class instance.

    - -

    Reimplemented in libdap::Vector.

    - -

    Definition at line 344 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_parent()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_parent (BaseTypeparent)
    -
    -virtualinherited
    -
    -

    Set the parent property for this variable.

    -
    Note
    Added ability to set parent to null. 10/19/12 jhrg
    -
    Parameters
    - - -
    parentPointer to the Constructor of Vector parent variable or null if the variable has no parent (if it is at the top-level of a DAP2/3 DDS).
    -
    -
    -
    Exceptions
    - - -
    InternalErrthrown if called with anything other than a Constructor, Vector or Null.
    -
    -
    - -

    Definition at line 733 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_read_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_read_p (bool state)
    -
    -virtualinherited
    -
    - -

    Sets the value of the read_p property.

    -

    Sets the value of the read_p property. This indicates that the value(s) of this variable has/have been read. An implementation of the read() method should use this to set the read_p property to true.

    -
    Note
    If the is_synthesized property is true, this method will not alter the is_read property. If you need that behavior, specialize the method in your subclasses if the various types.
    -
    -For most of the types the default implementation of this method is fine. However, if you're building a server which must handle data represented using nested sequences, then you may need to provide a specialization of Sequence::set_read_p(). By default Sequence::set_read_p() recursively sets the read_p property for all child variables to state. For servers where one Sequence reads an outer set of values and another reads an inner set, this is cumbersome. In such a case, it is easier to specialize Sequence::set_read_p() so that it does not recursively set the read_p property for the inner Sequence. Be sure to see the documentation for the read() method!
    -
    Todo:
    Look at making synthesized variables easier to implement and at making them more integrated into the overall CE evaluation process. Maybe the code that computes the synthesized var's value should be in the that variable's read() method? This might provide a way to get rid of the awkward 'projection functions' by replacing them with real children of BaseType. It would also provide a way to clean up the way the synthesized_p prop intrudes on the read_p prop.
    -
    See also
    BaseType::read()
    -
    Parameters
    - - -
    stateSet the read_p property to this state.
    -
    -
    - -

    Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 516 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_send_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_send_p (bool state)
    -
    -virtualinherited
    -
    -

    Sets the value of the send_p flag. This function is meant to be called from within the constraint evaluator of other code which determines that this variable should be returned to the client. Data are ready to be sent when both the d_is_send and d_is_read flags are set to TRUE.

    -
    Parameters
    - - -
    stateThe logical state to set the send_p flag.
    -
    -
    - -

    Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 568 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_synthesized_p (bool state)
    -
    -virtualinherited
    -
    -

    Set the synthesized flag. Before setting this flag be sure to set the read_p() state. Once this flag is set you cannot alter the state of the read_p flag!

    -
    See also
    synthesized_p()
    - -

    Definition at line 463 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_type()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_type (const Typet)
    -
    -virtualinherited
    -
    - -

    Sets the type of the class instance.

    - -

    Definition at line 372 of file BaseType.cc.

    - -
    -
    - -

    ◆ synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::synthesized_p ()
    -
    -virtualinherited
    -
    -

    Returns true if the variable is a synthesized variable. A synthesized variable is one that is added to the dataset by the server (usually with a `projection function'.

    - -

    Definition at line 452 of file BaseType.cc.

    - -
    -
    - -

    ◆ toString()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::toString ()
    -
    -virtualinherited
    -
    -

    Write out the object's internal fields in a string. To be used for debugging when regular inspection w/ddd or gdb isn't enough.

    -
    Returns
    A string which shows the object's internal stuff.
    - -

    Reimplemented in libdap::Sequence.

    - -

    Definition at line 184 of file BaseType.cc.

    - -
    -
    - -

    ◆ transfer_attributes()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::transfer_attributes (AttrTableat_container)
    -
    -virtualinherited
    -
    -

    Transfer attributes from a DAS object into this variable. Because of the rough history of the DAS object and the way that various server code built the DAS, this is necessarily a heuristic process. The intent is that this method will be overridden by handlers that need to look for certain patterns in the DAS (e.g., hdf4's odd variable_dim_n; where n = 0, 1, 2, ...) attribute containers.

    -

    There should be a one-to-one mapping between variables and attribute containers. However, in some cases one variable has attributes spread across several top level containers and in some cases one container is used by several variables

    -
    Note
    This method is technically unnecessary because a server (or client) can easily add attributes directly using the DDS::get_attr_table or BaseType::get_attr_table methods and then poke values in using any of the methods AttrTable provides. This method exists to ease the transition to DDS objects which contain attribute information for the existing servers (Since they all make DAS objects separately from the DDS). They could be modified to use the same AttrTable methods but operate on the AttrTable instances in a DDS/BaseType instead of those in a DAS.
    -
    Parameters
    - - -
    at_containerTransfer attributes from this container.
    -
    -
    -
    Returns
    void
    - -

    Reimplemented in libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 644 of file BaseType.cc.

    - -
    -
    - -

    ◆ transform_to_dap2()

    - -
    -
    - - - - - -
    - - - - - - - - -
    std::vector< BaseType * > * libdap::BaseType::transform_to_dap2 (AttrTableparent_attr_table)
    -
    -virtualinherited
    -
    - -

    DAP4 to DAP2 transform.

    -

    For the current BaseType, return a DAP2 'copy' of the variable.

    -
    Note
    For most DAP4 types, in this implementation of DAP2 the corresponding DAP4 type is the same. These types have a different representations in DAP2 and DAP4: Sequences (which are D4Sequences in the DAP4 implementation),
      -
    • Grids (which are semantically subsumed by coverages in DAP4)
    • -
    • Arrays (which use shared dimensions in DAP4)
    • -
    -
    -

    Additionally DAP4 adds the following types:

      -
    • UInt8, Int8, and Char which map to Byte in DAP2.
    • -
    • Int64, Unit64 which have no natural representation in DAP2.
    • -
    • Opaque Possible Byte stuff[] plus metadata?
    • -
    • Enum's can be represented as Int32.
    • -
    • Groups, with the exception of the root group "disappear" into the names of their member variables. Specifically the Group name is add as a prefix followed by a "/" separator to the names of all of the Group's member groups variables.
    • -
    -
    Parameters
    - - -
    TheAttrTable pointer parent_attr_table is used by Groups, which disappear from the DAP2 representation. Their children are returned in the the BAseType vector their attributes are added to parent_attr_table;
    -
    -
    -
    Returns
    A pointer to a vector of BaseType pointers (right?). In most cases this vector will contain a single pointer but DAP4 types 'disappear' such as Group will return all of their member variables in the vector. DAP4 types with no representation in DAP2 (ex: UInt64) the will return a NULL pointer and so this must be tested!
    - -

    Reimplemented in libdap::Array, libdap::D4Enum, libdap::D4Group, libdap::D4Opaque, libdap::Byte, libdap::Structure, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 259 of file BaseType.cc.

    - -
    -
    - -

    ◆ transform_to_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::transform_to_dap4 (D4Grouproot,
    Constructorcontainer 
    )
    -
    -virtualinherited
    -
    - -

    DAP2 to DAP4 transform.

    -

    For the current BaseType, return a DAP4 'copy' of the variable.

    -
    Note
    For most DAP2 types, in this implementation of DAP4 the corresponding DAP4 type is the same. The different types are Sequences (which are D4Sequences in the DAP4 implementation), Grids (which are coverages) and Arrays (which use shared dimensions).
    -
    Parameters
    - - - -
    rootThe root group that should hold this new variable. Add Group-level stuff here (e.g., D4Dimensions).
    containerAdd the new variable to this container.
    -
    -
    -
    Returns
    A pointer to the transformed variable
    - -

    Reimplemented in libdap::Sequence, libdap::Array, libdap::Grid, libdap::Structure, and libdap::Constructor.

    - -

    Definition at line 216 of file BaseType.cc.

    - -
    -
    - -

    ◆ type()

    - -
    -
    - - - - - -
    - - - - - - - -
    Type libdap::BaseType::type () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance.

    - -

    Definition at line 365 of file BaseType.cc.

    - -
    -
    - -

    ◆ type_name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::type_name () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance as a string.

    - -

    Definition at line 379 of file BaseType.cc.

    - -
    -
    - -

    ◆ val2buf()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    unsigned int libdap::Float64::val2buf (void * val,
    bool reuse = false 
    )
    -
    -virtual
    -
    - -

    Loads class data.

    -

    Store the value pointed to by val in the object's internal buffer. This function does not perform any checks, so users must be sure that the thing pointed to can actually be stored in the object's buffer.

    -

    Only simple objects (Int, Float, Byte, and so on) and arrays of these simple objects may be stored using this function. To put data into more complex constructor types, use the functions provided by that class.

    -
    Deprecated:
    Use set_value() in the leaf classes.
    -
    Parameters
    - - - -
    valA pointer to the data to be inserted into the class data buffer.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect. This is currently used only in the Vector class.
    -
    -
    -
    Returns
    The size (in bytes) of the information copied from val.
    -
    See also
    Grid
    -
    -Vector::val2buf
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 184 of file Float64.cc.

    - -
    -
    - -

    ◆ value()

    - -
    -
    - - - - - -
    - - - - - - - -
    dods_float64 libdap::Float64::value () const
    -
    -virtual
    -
    -

    Return the value of the Float64 held by this instance. This is more convenient than the general interface provided by buf2val, but its use requires a downcase from BaseType to Float64.

    -
    Returns
    The dods_float32 value.
    - -

    Definition at line 221 of file Float64.cc.

    - -
    -
    - -

    ◆ var() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::BaseType::var (const string & name = "",
    bool exact_match = true,
    btp_stack * s = 0 
    )
    -
    -virtualinherited
    -
    - -

    Returns a pointer to a member of a constructor class.

    -

    Returns a pointer to the contained variable in a composite class. The composite classes are those made up of aggregated simple data types. Array, Grid, and Structure are composite types, while Int and Float are simple types. This function is only used by composite classes. The BaseType implementation always returns null.

    -

    Several of the subclasses provide alternate access methods that make sense for that particular data type. For example, the Array class defines a *var(int i) method that returns the ith entry in the Array data, and the Structure provides a *var(Vars_iter) function using a pseudo-index to access the different members of the structure.

    -
    Parameters
    - - - - -
    nameThe name of the class member. Defaults to ""
    exact_matchTrue if only interested in variables whose full names match n exactly. If false, returns the first variable whose name matches name. For example, if name is x and point.x is a variable, then var("x", false) would return a BaseType pointer to point.x. If exact_match was true then name would need to be "point.x" for var to return that pointer. This feature simplifies constraint expressions for datasets which have complex, nested, constructor variables. Defaults to true.
    sRecord the path to name. Defaults to null, in which case it is not used.
    -
    -
    -
    Returns
    A pointer to the member named in the n argument. If no name is given, the function returns the first (only) variable. For example, an Array has only one variable, while a Structure can have many.
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 758 of file BaseType.cc.

    - -
    -
    - -

    ◆ var() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::BaseType::var (const string & name,
    btp_stack & s 
    )
    -
    -virtualinherited
    -
    -

    This version of var(...) searches for name and returns a pointer to the BaseType object if found. It uses the same search algorithm as BaseType::var(const string &, bool, btp_stack *) when exact_match is false. In addition to returning a pointer to the variable, it pushes onto s a BaseType pointer to each constructor type that ultimately contains name.

    -
    Note
    The BaseType implementation always returns null. There are no default values for the parameters. If var() is called w/o any params, the three parameter version will be used.
    -
    Deprecated:
    This method is deprecated because it tries first to use exact_match and, if that fails, then tries leaf_match. It's better to use the alternate form of var(...) and specify exactly what you'd like to do.
    -
    Returns
    A pointer to the named variable.
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 780 of file BaseType.cc.

    - -
    -
    - -

    ◆ width()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::Float64::width (bool constrained = false) const
    -
    -virtual
    -
    - -

    How many bytes does this variable use Return the number of bytes of storage this variable uses. For scalar types, this is pretty simple (an int32 uses 4 bytes, etc.). For arrays and Constructors, it is a bit more complex. Note that a scalar String variable uses sizeof(String*) bytes, not the length of the string value. The width() of a String array returns the number of elements in the array times sizeof(String*).

    -
    Parameters
    - - -
    constrainedShould the current constraint be taken into account?
    -
    -
    -
    Returns
    Bytes of storage
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 122 of file Float64.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1Float64.js b/html/classlibdap_1_1Float64.js deleted file mode 100644 index 21b05df75..000000000 --- a/html/classlibdap_1_1Float64.js +++ /dev/null @@ -1,78 +0,0 @@ -var classlibdap_1_1Float64 = -[ - [ "btp_stack", "classlibdap_1_1Float64.html#ae9c6e71855b90a0e552713011c9ab81f", null ], - [ "Float64", "classlibdap_1_1Float64.html#a60797eb0a6d96ba4cac22d687dfb59b6", null ], - [ "Float64", "classlibdap_1_1Float64.html#a8ead3377a8a7f64edae16efefa6e4071", null ], - [ "~Float64", "classlibdap_1_1Float64.html#a743409089a8e2391bb2ac93aeb97a02b", null ], - [ "Float64", "classlibdap_1_1Float64.html#a69e557e54a470602c1b411d1dd384125", null ], - [ "add_var", "classlibdap_1_1Float64.html#adca3c2621c4a509537c18362005d7f7f", null ], - [ "add_var_nocopy", "classlibdap_1_1Float64.html#aa1192360cea4dc516c822cd3e13dc723", null ], - [ "attributes", "classlibdap_1_1Float64.html#a97452f06d2188eb838399a709246b5e9", null ], - [ "buf2val", "classlibdap_1_1Float64.html#a34faaf7e5c2f5d3ed0010aca6bdac3ba", null ], - [ "check_semantics", "classlibdap_1_1Float64.html#aec503abec2fd3090e7738c0a575491f8", null ], - [ "clear_local_data", "classlibdap_1_1Float64.html#aaddb97a4efbe035f41deaf03c6e8683f", null ], - [ "compute_checksum", "classlibdap_1_1Float64.html#a07e2562d92832ce1ea1ec6673f99ec30", null ], - [ "d4_ops", "classlibdap_1_1Float64.html#a157203407e1db27b876b9fceacfbf375", null ], - [ "dataset", "classlibdap_1_1Float64.html#a47521ce321a17e6ce217870cb6a1a7aa", null ], - [ "deserialize", "classlibdap_1_1Float64.html#ac58d25ee3cc87aaa1608322f9fbe5962", null ], - [ "deserialize", "classlibdap_1_1Float64.html#a7bcd1b10ab54094640b87b25308eed98", null ], - [ "dump", "classlibdap_1_1Float64.html#af90cf75012ca7573411ac9da4e55cacf", null ], - [ "element_count", "classlibdap_1_1Float64.html#a5c2235737737b482bfa7536b8aeab810", null ], - [ "FQN", "classlibdap_1_1Float64.html#a977cb954cc8f0d914d6f66ea0f48a9e3", null ], - [ "get_attr_table", "classlibdap_1_1Float64.html#a1fcd9537c67e3bf88964b2656ff5bac1", null ], - [ "get_parent", "classlibdap_1_1Float64.html#a3459cdaa239c33ce111ef360d8dc3017", null ], - [ "intern_data", "classlibdap_1_1Float64.html#a722d33783aa0272d339b0301a4f77e59", null ], - [ "intern_data", "classlibdap_1_1Float64.html#a1956e6ea90a745516f5372c859173433", null ], - [ "is_constructor_type", "classlibdap_1_1Float64.html#a8b8490e0047c6da52945699a132008ea", null ], - [ "is_dap4", "classlibdap_1_1Float64.html#a7f6835cb5e5589ab5dad3fb4813d3bea", null ], - [ "is_in_selection", "classlibdap_1_1Float64.html#ae302ab2ec26e9fc5b575bf5d3d09aa5c", null ], - [ "is_simple_type", "classlibdap_1_1Float64.html#aae57e5b270b3a015d40c8db10b9b5549", null ], - [ "is_vector_type", "classlibdap_1_1Float64.html#a7107c76dbcab71015141142383b6d022", null ], - [ "length", "classlibdap_1_1Float64.html#aadcda7a659157bc6a832d8a5fb775b3f", null ], - [ "m_duplicate", "classlibdap_1_1Float64.html#a0c55b826c8c5dfe7a454dc670e859a41", null ], - [ "name", "classlibdap_1_1Float64.html#a24c5d67823b3cff7f4245a993072a142", null ], - [ "operator=", "classlibdap_1_1Float64.html#a25bbf834d30867b40e55dd284f1b7b30", null ], - [ "ops", "classlibdap_1_1Float64.html#a32114121abfd8b081b4834fb87dc19ac", null ], - [ "print_dap4", "classlibdap_1_1Float64.html#afcddbe441380b95c894510c02980b163", null ], - [ "print_decl", "classlibdap_1_1Float64.html#a2d799fad93255d7f2b803562ae7a5784", null ], - [ "print_decl", "classlibdap_1_1Float64.html#afd744b0ddeb04e7b173c9e83423ec572", null ], - [ "print_val", "classlibdap_1_1Float64.html#a83adee2778296322406f557c191cd416", null ], - [ "print_val", "classlibdap_1_1Float64.html#aa9a669b0fe9efa0d188759a5ace09ab2", null ], - [ "print_xml", "classlibdap_1_1Float64.html#a825820edee179550cfde3dfd4d274f2a", null ], - [ "print_xml", "classlibdap_1_1Float64.html#a8bd2c7682edd48c64b210bdf247bdef7", null ], - [ "print_xml_writer", "classlibdap_1_1Float64.html#a11554ff931528b243e9af8173d205b44", null ], - [ "ptr_duplicate", "classlibdap_1_1Float64.html#af0c3dbeab0fb34e94f99b2dbb577fb16", null ], - [ "read", "classlibdap_1_1Float64.html#a1da003c53f2e663223f603ab3fbd7c8e", null ], - [ "read_p", "classlibdap_1_1Float64.html#a38ff819a432217c55db2e9071928d20c", null ], - [ "send_p", "classlibdap_1_1Float64.html#a980c0013817836aa77ef74aeec7fb192", null ], - [ "serialize", "classlibdap_1_1Float64.html#a1d155177c95e19a1d101de3b54ae1acf", null ], - [ "serialize", "classlibdap_1_1Float64.html#ab9180d68989a963df839faf0fab604f8", null ], - [ "set_attr_table", "classlibdap_1_1Float64.html#a572a1d76a75981abac83a4241e90c0fa", null ], - [ "set_attributes", "classlibdap_1_1Float64.html#ad4dda4cf43dca838d3de183b8e01cd09", null ], - [ "set_attributes_nocopy", "classlibdap_1_1Float64.html#afd0e5f87d19020f560d5c1ff8dd4d6a3", null ], - [ "set_in_selection", "classlibdap_1_1Float64.html#a2bc036248cdaf1affac464170f32ad30", null ], - [ "set_is_dap4", "classlibdap_1_1Float64.html#abca9ddaa9a1ada8447cbe7193e8e288a", null ], - [ "set_length", "classlibdap_1_1Float64.html#a4fe343c1eeb6fb1d61ab030433651d90", null ], - [ "set_name", "classlibdap_1_1Float64.html#a86504564f45a3e6748c6f1cc0ff4e9fa", null ], - [ "set_parent", "classlibdap_1_1Float64.html#a5b6a39f6ce6594fa74f3fc899ac9a966", null ], - [ "set_read_p", "classlibdap_1_1Float64.html#a4533905a450d2a7af32e7d5acd557676", null ], - [ "set_send_p", "classlibdap_1_1Float64.html#aba7b27635c95b74536de18393133628e", null ], - [ "set_synthesized_p", "classlibdap_1_1Float64.html#a595cb4059cff24f801a1b6da79bd2f9e", null ], - [ "set_type", "classlibdap_1_1Float64.html#af74f8d1ef57c9fcca46f620f75d175a3", null ], - [ "set_value", "classlibdap_1_1Float64.html#a3633bdb0e786fe6cb6298f7ed00617c3", null ], - [ "synthesized_p", "classlibdap_1_1Float64.html#ae64e677da27249473cdba0b60cdbb90a", null ], - [ "toString", "classlibdap_1_1Float64.html#a701eb3361f5b5628329ece019cd34519", null ], - [ "transfer_attributes", "classlibdap_1_1Float64.html#add8e836c622042a339152a6c31e5bdfb", null ], - [ "transform_to_dap2", "classlibdap_1_1Float64.html#affec8a11e9cc035d4b1e8fb9a87b2072", null ], - [ "transform_to_dap4", "classlibdap_1_1Float64.html#adb03e2e1e40c3c888577c4666831a949", null ], - [ "type", "classlibdap_1_1Float64.html#af8e803b20a7a7dc5f2ef351d7fac4a56", null ], - [ "type_name", "classlibdap_1_1Float64.html#a18a42c8ec35cb5b15cd651a4152f8a2c", null ], - [ "val2buf", "classlibdap_1_1Float64.html#a65af2862bce9334100736d2eb400aa7b", null ], - [ "value", "classlibdap_1_1Float64.html#af96b650288179aa3f5fcbcbc215c1721", null ], - [ "var", "classlibdap_1_1Float64.html#a4dc4fac1bb6083f6db645f37bfd59b85", null ], - [ "var", "classlibdap_1_1Float64.html#adecfc442b5927c79933c7f71cfe03fd2", null ], - [ "width", "classlibdap_1_1Float64.html#a1627393eea6b9990f444236e0787774d", null ], - [ "d_buf", "classlibdap_1_1Float64.html#a875d80666ee4e7e4e900fb1cc2423429", null ], - [ "d_in_selection", "classlibdap_1_1Float64.html#a949a89714965d7afdcd1e3edc8b7f0d4", null ], - [ "d_is_synthesized", "classlibdap_1_1Float64.html#a629e97e8eb7d285b54c9af8c1ec9a29a", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1Float64__inherit__graph.map b/html/classlibdap_1_1Float64__inherit__graph.map deleted file mode 100644 index 768df6852..000000000 --- a/html/classlibdap_1_1Float64__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1Float64__inherit__graph.md5 b/html/classlibdap_1_1Float64__inherit__graph.md5 deleted file mode 100644 index 90ae4486a..000000000 --- a/html/classlibdap_1_1Float64__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -3e6f9c56398865418f6b86551d660c91 \ No newline at end of file diff --git a/html/classlibdap_1_1Float64__inherit__graph.png b/html/classlibdap_1_1Float64__inherit__graph.png deleted file mode 100644 index 17a2f666c4cb952b0191f11e1edae241d58cde6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62631 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�FF%siM zceLe@sIQ>Cd@A^RG{&mE{kV7)bY#A{F6e+Ky>6Pc^fZVrW+J>A0Ts_TfE(!PBNH;;2Os-!B^tg0WMwa60-^jaM+0?o9 z3w4RU;}M?Gf3xDjsU_Z1=@itd}yo4+vC2RYJkd|$?VtdX|Im!2~97AZYW z$Qr4`+7Sacu!n)mR(>wEF+vzu92ADRN3E$=LO*pn?i`6%S8o-LJcd-zo+uNIZU)~x86|U{ABy!J zczMP;M}TYnDh$#Q(0TCXfM9q+S|d|rW?xmB;fyMPlZS!?EAyJD-xi2V{T0`&&oygg z5%6*l-U9>e^~Q6QjMmv4jR*$|ZJR+dQNZK67Al`Je!Bd;8q7}6WndnA=Z}VNtPedh zP`FdeHQSGM5LJq}c=cg=F74gpH}nMuqp@l?fjctX_6QvZ8H&}^B4`?8E9S1!v6hC# zMA1R=5NFHds|G9fFa>aZE1-!Bkf&aat!EQXswP;b5rVttFP|O|2%{|xd}xXumzyTw zz-dYo-^x78vKaFu!!e4CI~zqZtxV}I`|iVMw>oLHk=v+aK}io}@aWUlHSje<(fZmY zlD<5NX0P*`dl6>k<@H5&pC+prwyD%#^)J2Px5dtc4T7@pEpjAtA-$E7nLoK<<8Oj_wjLiJ39XM zn`CXS`9WcFZlCB4L!TauFB5SNYz3IF_&{&4<3h ze!j%#w88fz-#GQ5AVHuvn?ce`9;CkE@NTePwcX5lox;S7Jnl!Th1!Wk^*|A#Fy#6B ze)d-@Vf>P)GLVv`TNb>-&ZSdd!Y!L0_HqY~?b+ys(`}2D-shWFpBj%#G%w&~ADOB>`WL^kef(DmNr~>v9u?)53m^mEb8lW=X-VY zmzm(nzDu!G`t@_`57)899&r`oB+ir-SUS8+Pq5&qyYKKhQtairD*}VIa z!pOy(Yh4{0!sr+62NKx>rf|DQE+mnA0Fb8gmL{|lw69&vMznTkk04^2kH-J|T@zB| z4(A-##~y^-_MBTK-45Tg_pvt^c<<)j3&rODSB+R<7;v*$M&sh?bbo#JXxpY;ndQ6n z_q=B)?d-3eNb%-B_OodxG|JYDm?Pg_c3bw^zE9a36%F_r@Xiy

    mR;E(dwA4LMFU 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%0A!;VI7uH* z5Q8A*)F%N}N1X;(8!zHeg2>zqudo zlG5Fc(xrePji7XQH%K?45`%z(bPvsdbPbI#z#!d2H=OZ#&i9;mt+U=g;H>rj%&<4i z{@it4*M04yCvt3hQxf3hdTg1#bv8woH975p@P_mL?H8Jm7OPDc$?&vu?3!Tq~Nrdn~ z3;+_P;uDixCvw=MZ1etb&Ic7RMdF&egdKui*g`~~+)3_N)yt;%TCz4&w0ZIq`0l-_ z3Zy#FGGnf0sq+EVUqRLvtxxW$W)b2xiUTi$+9@9ukhFmJq3c~WsjsGTxDl?W<0b60 zrxjGkxwYN6hW!D$hKTQ*&S3~hySvPBRBI@}#1d@0^wtR`YM9Sjzvaq&3?Ir5H705z zP}&VBpp=NvN+^=p^x&htK#s;c+s2`54**Xsz#5w?r4+#f@KT>oZG~{xoUfW+cq=Bp zCn{rlj7vvzz4GjJ>jbnS#yHBzL0qEVr5{JYy)*wk>>as3si#W^DtJ7p*eV&5$v-8& z%O|X;u}N-X0I6b`&Ds1x@Zroc&Y6AU3UBvtd^d6AwZ`guK6BYvw86dic!%MptNwg9 zG)s?!ss|%z6{O9^i_F1gL}M#CNK9d}`FAXvhe@M&Zjp!4FSM6TJ`P9C_@=qH2A9L! z&oBGG8t}{AMeeze`Oi#){0$I!k7UWKMmv%5f z4oX6%9Uj!2C`KAS%euPNoovC8L&TGm-sLyw1j-q&qCp;G@MDL)mPqje6fJ`KR{g5a z=TN}|nFfPQh&iY2^gdv;;b+Bo$!*c1+rOkDydMPxty18;@_S}SCoy1-a)32^YuvK~ zTH^@0{?kw*Y>CB1C~bk3gNGl=8T( zTp3d!ttr)|gWwj{rfb1V(5XMqEY=a5-`}NVSOF8w2h`?7BJZ5$aq$Kv z0LbN+&*hN4-!+o`W7YUn#W7vTDWeVj2vSQzyYOjDA!+xID`Xq4EstE>Y|A?SD=!&G zYxoG80+$;Ies`aCQ&_g8SC6?M4f$)HF)!@_b!Sc}k!XzXvMqc(}CumA(J(%=~hiBzt@AHB|(WxSaKlUY(?l|&V;LA2|k?Z?+;Qfn1j(PV^$)z z&LgZKC428`mV>+unFCTpPLeQlA33s#r#BHYFk7r#d;=lmQo2}XkrhirJ2D4g-p{ZF zztvxZy_XyZdaiB9FDqbb@wG_2$~D;Wj2Hg?;cGa!4lq^i{m(RqG$%;%h@FRz| zw?(XxOBEdWgV(B&PD65&JmJ0?fRU!BrAQHy&)CuhtK9-Yu)0TK`vRJh5VBnPSIfQH z5>aE#Z0d3oI#w-Am{wbvL8KE)fLw>e<2eY;qW`IlES&3H{2u7>4uF# zGtZim%9yg!IzLXt-c_u4!+ABsVUOO(@jbZeLel5T*=ZsE7#0B!vGlSHtytwVB>(Gf zb7id7L|+IWw=kEsKxxC1uS!7#_}v84aZQdTSG03axHW~=!M%LZDxqM-fv2v% z87p5s%g+ape1i~2!qh7_t4WpIxuWter;l-kN1xUcALMyJjC4MfRKKwm_UEl>gtPLI z7%GuPn9)A3vIRE7^)3c9EMa7*gnCa=AgTFTTZ(>pCY|(pu7{i+Ann4u^bbH4kQMJI z#6|2}Fw%d2&UCaaRf=xd_0_oI`$X7;E=;`>DZkjP@w7Ex58Th_!8u-t?|in;UgEj$C2$m-D1<*!YS*uEW!Sw1rQYaS}e&DAL(k-2Kw6ZcL9{!PlJ>Nx-dZskqdD`uXA$=lRr_MuPeo96bpR!{w$ zg7EdN-v_H@Fq(e>5PbG@48ortYHqULeK=Wr?@RNiiYPfvmcQ)lfSUlu)}F=P!kl~{j3CrW7g&jHI%X;x(sd`z2nPw|4+YM>%;R3IQsS0aFO>9hQGI+fudKnF= z4nr5^4hSTA-+%<~acKjj*^APjPd8`AuipNxH+P=fhKmpqU*fny?^S@(y=v?Bz6-Z& zrwrDeE>a8$#v{OxvDA>o88W{SGtUiC=W{nlWr76fPR&>_sB$AgG;>u-C79qnr!9DCac3h$ZIi|>_+*m6j@<9(2HHtpcs?|cG^xx@R?5wSY^ z3kt2CB$U1jMDH7yYEF&-mhP)TxD#7mkiAb(pwOVT5)iHNr~TUBUQb%7G~X@Bo9 z%s*F3(g>7HnWct(&zL$8nx}Ba0Q|Dl(JCNjTE8X>cuyQp&baLahb8;Htt_tb*KkUUVdnZEuv7JSN5tfXB|QpTCJR04m* zcxflm<~IC_jB0Qh<#PX1j~|p+ZO1@QD}1YKppkid{rp+3uFV4}n2s9#u#-6Y-NL6h zVGCL?-EVSFqXvRIV4K$aPBsx_JraxRA^sMqHam|dVZ)NVe^*UNewKvy>6xkOS>vc2 zqHnGY*11=W4oY(numw}RZSTGiQn&w(i3FG^cdMGmOiQZtvbdm=|2);~BI__ByReHx z*jG1$;H)KTbB&<4W!Skr%z=JVm|3BJX$PcPfjO~~vbR|J*~?cl`O|K1M({+}!LK^x zqpsc8^yW3K>PD}3a=v#lxjtn^3V#+Ro9`1uLJq$KxfwHa?8zIQoJciOCXE`T&FvhN zy{4e)2duvnImt0=Mh*OZ#yNrc_F9@YsMJJu_=h5mG3X0m$SS*aB~o2Ah6-0#P|3}N z3ah6d{^<*~D^_6Ms;EO}MV}_-=-&q5)4IM#?Q?xA{B6;jgv%=j4$91q z*%I8(#deET8n+RpAy4kk<^Z1bg;itqm>SrHH@FDnt0&0Cv$?=(hJ92fd7B0&D6uM- z-9Id77qRM*v(+b1>k~c2NZWBD`^)Lt`!t?k zMQeqPxm=iOb`jnCI3iw;7-c!hg;%sQ49?Ibk`e&?;_jwNTp>PvUk1K@THRaup_F z{o5iTM4LE*yGM9bWsU#2F6oGCE`du+s`$DK3*E3vi7u7jZMP3x9w$k$mZO*=>CN-SyA%~u@n(|a!qdj=MU+Qoz~hIMw+ zATY1EO~gOk?LGMB+?IIY*Rahed)(3N6YYwL{i_*>e0d^fSLnk9h&bp*i{E?QlF1EE zbU93P&6g-23G_<3T=heIZ%uT2wVfc*z-uwfi}BTFherGYeT%}y3KoK#?Vf=tmcvyM zxZ5Ckn{-!sO|0?MLiygc>=pEcMk@%W4@IO?f;RfCE5X(yJCbmecCG1`$Q(IZ3(u%5 z#l)KW8ho5s#S*1d+SiPKZctJVh`KL~i&Et!*#N{&N(Aa&lqtO`w7D!vPVt1jRAluT zNnXp|QwT0wvzu+!f39~)zOfPovQZ6`L_!RklqHf|mDd!ruVNIlht2D*9U*Qn=te7; zw2DhSV%nXR+qN59zJ~}@FJ|_3eGFn|o{7aYvNC?n_UX&_2~@6>XFe37Zh~X?Z@oLr zjlIjhRT<^^6Xjk%xZ-i4s*3-$LK*x#vc&tWA;sKYWK?1ybZwg~cUO$_!#RyRtmMVw zYyFMB=U&boV^xx4c6d@~0EO3Mf9JzP)z;0;C$;UW>szxC0(NoxJ-qyWZz*LC#AB}Z zG+?t;oO9hZZkAcIJMp8Pa;JTbQGGi|XCw27HnS~~;VStp2WXi?YBnIoWzpUi{P5~$%L1>O85$DhmQ+7uNlUUeM_|(7_KHPdFDJKcFCg9P zb}+UEQflL}Jlt(7Ml#KU=To2q<|WG5g*^)=yd`16mVKFKkh3Ti zq%Cz=!PWK>G}>&b?7GajjjhztV98bzl{My7OX=4{IOK476K+x+wchY^X%$)J9Rtc0 z{JF{ren5D;`VX&N1@`d|ml|Gi(X9lv#xp&y>uM9O{v~wdD{RG~OeeJdBR#1YIhXGB z*ud$hlsiwMkf8EI+}tjjD^V!w^cJ*^U;m-sUFaAWWYrp)jPbsc<8asy3{AMm9N-Q& zM!yB(sdt&n`z^_00IX$kJlKBwwp-FVS<8vxP@)0uKfAKn7OufDTo1<~=_H#Ee-l#q z#^C&zN4lC}SIL42)8F}4?aXPW2Hs)36@VVC2zEoxtZ0dtxrZFkr~l5Z-xE4s-WwwX zH2y`7chRnJE--Qzye}#Wr3tX*bRMEk-f-*(kOiV$ke*4CF@)kjV1mgX2svcO;xcwp z8fSjzqcAlY;hUT#S$;PEb3ZS&F%Vv=z&_`UO{hzCj1v^s9RMK4^!s+J3T zlHk9m@Nn#+OZV$WZGEZ>U*zUFVDR1Fw$7^+5JGtxwt4&t3_!j>GRAiKQ(J1$j!h8-Gcg2TXj{IQs_F zyzsl>KY4!n(BVj#euUj|S4wDE*rzuYl0oxhN4oJ*&~w`Zj*3uJU~nzdf6{<-3s5=V zC`$?aJv^?dsG@7lfDaIZ2$=I_dVDlL0piy&w2PVH_xDA;HTuCT@`yGXpEQ-&*K3y6 zZng!b^{Wg5q|Gfh>0rL^SO=7GdgU$ot$eASkq*D;V9>q5k$=jwIeTmY42^ZWcGMv!|TpX(cEDubyx|7H0Y-h7DcFZCg4 zV6`QX^*Im4b>*Ov&Wf6FWn?FO{3ls*PX6+^wb8uXxWe-sIsy6)bG7p;yLdx;nEz|C zT(5-N3@Tc(mJ{vzU8(-Xq3^}-B!{>9o5N31;j~*3WvfS^V4@Jztv%WYRAmKmaf2;U z^35nF3sz6;_m2i)UJ_q+u;u9p)-0$I3p|)dnaI6U5x0a2$B&KJfPtUY_-)vx@=mA= z3lHrpbr#P*dJ$6}c@-n`teLfgy5c^jL-!OEo3+auuIU}-tGg1lTFoS+pDu1`h4{oR zq3r@)Z7;}F>2D#}XRBgk2a_g%JHz-%DDej4)<^H3`&J;$fjY*7F#N+rgB0h1A42aX z->~>6D21TiB7oCsps8Sn{r(nSx&Aw%Gfcp*8PI53qb~d%yAQqQ=Cv&J`Ah|ZTFx7nV2F7R3ZPx$6{q=myRA2^vw9OM6_XU<#8Yz&)-K6;eOO`FwX zg7HVPFC4jBp4n(frZT%gtyLzEhZcMyM>z=Q?%ZFGNF_EtLx62Wb4I_4+JSX#0MYyPf{-fslhKeaA- z(HkD7{WMo9Z|ck27#BAolJb-dY1`Hw5X`Sp_@sX!bY#0+&Sv>v?J0X<*I;%*PhBvQi&q&!&mrt5K2YDWHJNSn00lNE5{Q%ty`l9N`9Ab$ zn8YfB`aupLMwW5^6U@7{swui)@T>`^EG&pHiUnQ;YCB};4u=wV!&F7gT&R?3690vBCPi?VXS8Xzx(D=JCTZaYgpq->K@6ylfY#?u~xeDq3?lv#tG+#r~|%*Qv%Q zme3)g#P)@iVhyLJ90}$tu2*M|9b4t8Zq44}Tl+y{GJ`i#;{o3*KfkT(I5n;NVD;x4 z1KwP?$CWoGg>W`Y^k?+BE%X_hzuqPsRNGJhGoai<2w2Z~q{vOC<8@MLt z!axrT{?!>83!1pc6vCOo4#e@vW-mx&pQG79{T{mfhz`b|eu-e&C)TPycQjTEpd^X` z>3)>TVCH!`jpKOBgedr}1f6{$gAKT&aizXP*K5h28JKddD68qjk(RH(=JCI+9<#-H z{{nxgrX?!&oI92c!V(^Q97R+y&6(p{GDleO5tVb0~ zrm~^O73fQhOFs^{3FB#0OQBv!-Ur@(hSH>CN65N%w4*WkBb7W#tdb1T2hxKaC=mU?CF>AM~*t zOAs!OC=@r~%nr-qJLKaI_7$2Q5QcSznqT|x3>PriB7$*(h+^cMjl$!4JGi-8QFzpV zf!R=lgFaOWVtZdK4ks9!TNPV|TW5gomTor6k-Uq}kDev3nj2X<+>Wq~RaIBXHRb-; zYMBuXLaiXofJsC#Ea^<5oll% zRF-h%h+6?A2de?TIBhl|T<)Z{u(BReDEg#PJOMzDOZq{e+A!yH zzk>@Fhb0W#!?^BA604Mm8p8`Ib^j&M+{Zf-jh73@e~hgw3ht#GY8>U}N=rW3 zM-FCNCObn6N8C_;XIrg^e8g{*q?{gti!Di(Nq4GHXiX2MGx^wzeDs?x z1vP$J2YbP2+wviVL(<23P!d^`y=&Hiv^+3V8y^BnPV zQjVc}#sW(U8=zSEh7Y~L9tM0nJNPpDbqKRRl~9ZRs)88$v*Fx__$hSn5 zC9)0QFROlyedR4-TPsiGn9lPtFxoY&J5v~?sPZsEa{TZzWYIpG5oblcA`uE7NPU_b z(;$gnldAtNgA=N96O#g7YE|*wg;&M>Bn0Q;L`!6V&Fb*W@nhs&REA|>G8lx+CqjW4 z)^~9TlWh#P9u`o){y|r8M8elg8Q;8nZg8i_f$)(67hrkJO^Lp0^q)9t8P+ZVZ7p(^ zf~8k45hP-i(z|pZw<@9)IbwEZ>GK1NfX-Nsb`_X+N3<-&7f}J#sp!Q#Jg~a{P_xqe zXGF>@Ku`yF?V{nZ%sdIJ3FT=J$#K0iV+iPRoQ$DT}-wS;3!WS@;JKlP20L!c(Jkc%~#@vf||2f zK>FDo8tadfQ|rW0IToo)8(8}7>(99PN;|)QP2FTA7_Wvv9QwkIsN0sMD;Cg&q@)9l zfKB+8Qd|tAlzUq1&BX|#%Qa`F2fQH}Q*wW^swDv44kq5L3WYb@y~JJ0(0IDA2zn;p zVIORg&}8~aWjs$uK6o)fm5&IkE7KL#Hd4Nfg#X~r6<<`m{7x}LWGN!Vl^sL-R{2jb zNz0NiLHNXz`_Fld{p}%KQ>&w7TU*D-;|J7N_b;wITM_@l)`a?YS@LHZ^*ONJIVNEe zSqhtIsAqO-%{GtTyjpemC7L+tSO4Co>xlcnYt%h@VzSS4jOuIMn71co+ilXX|1O-i z&gb*~tlMJ>Ldp7q1Ws$+IJ3X{esoDe=xzD%@$;0(1>!DdjDspeWn9`1F9_IBxhGokofhMcu|l&lki+)n-w zE6d)T+1oX+^;oqj#K|ft=6WtZ?bORY=Lc509Xg6~pDq*&;Ln`T8C)JeeEG?P*6u^| zr1=Z-I~6%hry9d$i9RFWz-IPRdXh(!=M><0$?r%M%q)dRXQ@R7?4*#1utVU0iQhbM z{0xKP&@=s1aGLu>`MCJ$UB8w2V<^SbSw6BPh}&=_$SkaQm7WUYr;h0`RyR7|9LD6{ zt%lH*iGFq%YW?r|!mjw{#_5h@mR;Jkghg;4n05R3FeX6W2^VMp6@H=A%>lA$BYMCZ zN^T2*bbwwhklM^Sp-55X zW}7VWlXg!tf#l3=)cmG#WtyAVGcxW9S^iMbRb4PKy}^|9YYZM@wQgECh`Y z+rK9-rTCrKlF}$9;oZjepN)@u?HfwBsPdl7^F^1FQV9P7?r4 zt!DQOEpX))>I-cy2f;2|Z7U8Vvwdglbt8WjJRE=bB=NPm$x8SNV)`M=o-A~pj?fq3q#^V0; z?(W_zcP)dqWJ$Hqo4A^PBCFG8bD3+r@QgK^l7|cz#;4io0i%8kJpaS;)h5a{vouKS z52t*uC#7vqi$pa~v{+$c`pfg{ekR*uW8v=^4Nk}9_iVG&z4_| zgkUy)1k$Rvy>^K#`7LGi4(rRPNB%E4Eq4Cw1NIPHp=fbe35;{r6A2AeS>}5dzMQxO z=3u-wEdN3ME@I@Xng}E8;L2b2@!tB!X(W@}%Wr=rpk&piLl?9pYa?D%Op)E?!Y@?7 zTE!9jr=QFTLro~HQ4RwxMX?<2U=AH9R^S7#@Ia~d)1BzDm2bj{;d7v~jyx4wLQ{~W zm{yfXfQ2cc86Db@oFSDNjZ_o<@QHWz3k3rO!Yd;k$sR{2$f-~kOp=8qjPtHX*|TtKy86E01AjJJkbHzkn5~Zgp|N}qUQ6!4MvBZg z!FCo6G{QDPTSRY?gmgz8arL`Zw0w^uI`5x#7b364*Anp=!HD24r@tG${! zqpU#B1p6jp?R8RbFJ+%4n0-Fk2;C&5#>CKm^@j0raZ*rcq%KoZMB2pndhPHZc>aT(VOVQo zLaydJw>^QNV<{Zu;z@-DrgTU2LAW%1#sPVn6&NpY5xjw@c$%~!vyBa`-$kzqkJoHR z@jo(LQoZ7*rTk!$)o*O^ws{R@(>y}Pqp~lhn z0r~H@t)3XNTj9Z?9Z@)~Gbo1L3tEJ6jVru=Mf~9QHm#|B{~SgFbNR9H4aR}Aly(Ld zpW2>|$nmyJm<3(1%+U6kx|39Zy1f&Qs|LkcAx;rHV~WIpg~H-0;Cp(W8sv?OFr z_M9`Dh#^e&3Cjegbj$n(1)iD%~bB5-Z_*FBJ-ExrKb);uaTFQyAcyZ z@6ZH)(mBVHrR|LT>`L^D__MXVc!zeE$C)bpu0+>@SqjHI?9zTkzW0VpC`7t>{+7T! z$I8+VN^%ra3cr`eiVvF{J~RN7J$mqkoqm6yQ3_>~H;?G-I7DZH*uY_j1oHj|kA$(z zw8~(0j;gdlGocIgD-(5l6yb6hmFdXKO5_VH!n?o9uNe_7hd!b*gk#lnvJcCkBx?OTGm^njGEY)McVmd4Ml% z61FfUQF;8#qj&wuAb3g!|VRpjyXlBGT zk&gYl5{oP&Z=LwLp#b@J1wt|PrGe@6jx3Hq>C7=TZqK5n;vH9a)|^^e;s z5_5Fa3Pq<}=u-}Voi2$9#rlR+p>%|j!X2DMb>e%f7~5t?9X>V|x+kxPKRz=-Q|cCj zp6(Ocqg=^_cd$(ItJ>1WLmoh{?AD39J9N~5$6uhLrSr)M<|}qp0AAerTgL~-@mu%! z%`7W4Tlj91D{y-xaIXzxIr-$R__$2+MnO(M;ljA}3eYS2RL4^PnU%sf@g6lQAH}}C zp;;a8uvoa}3hFpSc2$&*b{RbpVF^YBGA+*P>~E1#5gc{Rfwo#GWug_kg2NMzaFT}k zY4Hp~`~HAo-+Y6fw<|=gt!hC*L0@xGfb#qldv)`7y-vG{$&o?uPw;yNEQavDb~+Q3 zAH6n%deO}11VVZ3MZ;^p zDzw`j)MJNF*0~bLbN4n`l+3!?l-7ahhEJ`97(F>B8c@#_XZ{}NPS+rb`u6jud-Mxw zN5-Y4lhterzLg!#G9M>jaPl<0T__8>e_=@?JLni4nYVF|c0cm$F$(QH;b>!i6Q0T0 z+pxg8POZ$*rw3nIW{;UgVgr^x%aVKO^Cu>R*+*_GNDS4!^eb3eYtU8x;w(@V+8M&Aec|D zrg6`~`td;S;uAb3wLc0w?9>gFeH^)HBu=!^?i)>JKUw7L$qtK=QOG+Km+l|Po#&rg!ya4m@IRl4oZs?99LS;T`QKZ?y`IDl z*-1_l7C4QCuSCS}VNs#WU#xY1#Q^%+KtI-L<*Ch>#_ugh7$S$RK5D-k*=k_*Yk@jp=Dc;oYw$B6WM5l`c2;%h&@TGGF`3cXfmVOodu%5+yW%Z{C@ zAs4$1K6!$tInZCiZlpq08%l*&n$tKn7p$dpL(xR<$CMuD%*16*zbWT3{{)%4Di=$d zL1CS=rfsxt?LL*PW1-8{r6)7@&fOXcO@OD;Uwy4MdgemUgBy3yB*-YEi1^4Wqxz`$ zK2c=c1_MUT;4=O+(9noCtS3O*c?s;x+o6_S<84F0@M8#jx}EK3Bs^(ak=m)&zPd00*p>0sx+0#l6op)^Ng>f zar@K0-xJ}y@7=YZ=Sk6-6Ol!RxkqMpSU7SleXVY?@~t=jMSE+02$Py9>n?AiC1}`(=cV9bmgpc;3%pU7&KSdRnFYCD)V7H%bHG`*Ms9O%^uw3P4 zepqovH@tVI}?L-cl8xDSkH{0***~K%dp2S>TF||$(8(@ z5!;|ln?VQ4adzJiOoocL2cIAD97%=6vV4n|abDH=)&C+8`nn|(82iy~9S99Gf8!cGnM%_Y;f?D+sY1MX?Ru;wz>)?L|tp6FX{{I=Urt7yZ zdiG)EuMGHIuoq;$C0t0p>Q9~_sEviz9H!jERsD5XAdQ~M} z%wO?FDTbbq2$j%iHb!maH{Zf>gq~lmhnp$aqwYDiZKYG}vW^qsTH=e7K>uTQI%VNX zg}lmnuL43Oa_uO(v~{w6&9W@M7f$9E)i)Wj*B2rC0W*>1Pjf(J^tfD|le*SB$2KaE%+djzxT^X9w#oK~{ieyoJT zF?OGIH0ffj<7Y4od4JyV`22_{IBE5AC8%bHniyO5a4hCPj-s`)L+SoeFQQW_m{uSS zdX~k9E9Bb52n@X9|F}KAE=zZX@u3@um`Gsh+jBX*>NhvHYVKOHzaA%c*SGzLp%bKR zuh^zePMpLhO>TIKOX%sDLEYb)x&jEC4|^HQivx_TI%~HSNC-0z=kPWSO6-0#W^4>1 z8VL=s6l6D0ECmytVH28B(8S|=zs!EutHQ&z0bBnGB_Kc5+VC#;L6@l~lZXg_3UXf7 z)O0Xf=KJ@FriGuUK`kT_BG(vgy`K5cy@v!lqc>41cTpht$Xk>Cd~=V7bB=Nk&~6h3 zC_JZ=i-J^(&xh#L)PPYo!?7OR!J)3=uFfX)%^X7LnFv@uf7U+;Cohp*yB`;!5pf`z zCkCNC15Qh_iYyeQ&)`dug?71>#Y+UdjUeeW-DKl0Uaj=;0C!mA7~ zTn#d0h8&aA4Etm_OiMGq@gb{<28LYNn3W>V08bEo!GJfU@+@nMwn?(^*;Z*xDA?Q`-*PV%s#+*%A9E?W-1}C1Ryd zI#uYtjm|J`eO(F{RhXGyTv}PTpbmcD!LsKg-ikr#W>!IXe`@ji^N-3=zuq`Sno+L6#2{4~j`wK$J$17G%4By%2Y2WhQ zuXfMf8S~LkkAWr}p#B{XAX09^*-Pwa(k{kVgi`1~=e@F8v%mLDKryw#V&s~ouTg}| zyl~pkFBk%xZ|CA2U@u(?@=5YLtG6HhIlIX}3O`4#=4m2fKN@lL z<5WGSuO+vr@ATY{?IKqq0t`1~L}mfZ`%@KNG^!APRa-tfrEWKpdWqCz%eU3}i(M7H zq^_7!1ih7o;1bxgD>V;%fxje!4yu}^%YVE8)Ub6d`5cKZ81x*ucu+1EkXt~jXx$rK z&2AH$$ONF*?Ge&vxU8A2y4@jGbiP?5WGjupg^~)D1Tk*QJiC{RcoPKINBnU8??dyj z8UNqVgxojYy1GgA_MOme0KJGmZUjGgxgKSgDF~7z6e^5nI`+i`Fz#bLfou9=g!8bS zh=EyZOn8IH+X#bEf^ma=+fjVFN)Z(QB$t-RNz*PF)@~0zBIhs#cQ+oKxt=Xj>DW)e z;V08?(cd*^_y0nU9uk6lp&!Z)dx{ak)F-VdR1EueN!BsrY&X?2hV&Q zzHPlZuqbUYTze!3#z!AK!wdQy;gY18xNeUiIQxTlFtcUwdejoef_>~_wmJ@52_BR_ zR1v#dxeG4y3&2clZEj+jX&aoKzHp%~Mu^r4+B9-#Hq8oIOdfAQ0dX0kwvyn&_mg^C{I88(IXi?~6-lm0Fy9c`yWEN$0+ z!1D#L_Mbdt0J0`ukA)rcp=wlN?iwOK9w|{_?>1xEk z28)7|%?O0(6Mq-Bi@+bw@#o1hu(l?0PK-_sFsjTcykq7dy4Z>4$qt4pQ|zt~f{z?` z05`&^;3Zw;zE~mtcBXc8J*|PLuPBFa4A>>(&XD&@MpoRL1@LftvU*8LY7n|jj|B3? zKJ6#`AjpTEkb&vbhbMWMt%71x!}-nA-52^4EXzyK^?I^l76Rrn)?u=OFpx6Px5q{>h6+Voz>4O-81d(EuZwz z1UTFvxmI22s34j?82OS9nV3{iAWZ^F`y~a4ZEO-~-4{)_tHJ!uV0@-q5Hx516Xubm z1{6=!QKZW%Iv;y`;>A$^loaqA8=h5|;n-Q~{tAX05Y`tUeZ@H!=*nV(y%-vFPcO7y z@7Uv%ZI#@=-Z*mf(S%#-FGoHO#(s6Ey`|7bEG%2mGl=M^kp}k%(YG}|zX1UDdZkyd zS`wn2L1Ww??4#W2%Y|adv28Uc1Z801S-V`vd4(W-hF#*V@RMdE@4sz9Vlz77Z-W*y zmuLIfnloiW7RC%=3=z)4aXWT+rX)PSTm=e6>GAx}2SK8jw{S-)oSL=|Qrk0x`aap1 z=^E=l+o_?t*E(e^iQkFAya#Whw6aR%zUJCmWtQaj#`2OEE1u~+`xJ$-O6~e8W2|r{ zA60h0VJ<)DS5wB;MOLQ@pP8!PLy(l?YY@_CYwig^w{50&`3EM)W9r=m=y>n^GOFUK z0pW<8I@P5*%xAvPzyS}YCKR&?9aOF62G2+UWRN5q-(P0Eb*3xGz#S)9uePSGVrUfk z8$OE4Ap(G_FkJcA55b%eUe|T+Qwc<}@gj#jFE>FRuf5q$+)cwpS>!yT9wcks-t1Nn7WCN7p@AqTp9h`^#%_KIDt@b{gd9@O`=x`G}@^3* zY~RLTKUAUBeP9_c+a}Qa!|p1^bW$Xji?!0j_eA9=r}#?IU6BJkAhk1qyy&dshF{_r zWZ`M*6p1^TW<;unk+&-sjLv${#a(kAkp|E~AFYq`^z*L& zl`>1>zMSt1T^h$<=MRG6r;w0VcT1+qN9~p(cw-US7R>V5BIz+Za?z!uon7chR&m`u zCv?@nzD9X+OdzsMxMsBPE`lfdwK>*fL{cwfLX2(Y_YpZO=_dLkNYR=ot^p4}PSXpz zZxRQwx5=5npU~+0WS8yU>7%rkP2b7n?K zv7}NyJW6b~<)}ZMr+Mj-eJ+?sUO*`{b$O`Vv!t07{Aoi3VQXQm$p(^KZ)AZOE>0fs z!}rdVprPhb^$V%1igSu|xSe4Q1)Te65tgd##qlNZ@ao(SD0cWJ(>vK3T609O^XH4` zL`!}s6 zO|ov%Mnk50B~sv#UKWe2e|sUe7Bs+*X6j3*t#iG>56V5&2l{Exss!6T(nPKRj+Di9 z-+({qJ>yFdo`2TTJ+&1UXT&1TQrMVd2P1*jP_-B3odUlW({xp2F?PkTLjKAggU{$v ziiGU}BhTR7bf}l13uH27NDAlHRk}9*mDQ*7)qrgb`)7AQ|1!D^u@6p2VaH2Bc;M~6 zC#CEJnyjiY&vB>8_seO{Wjx@||Ha%}Mz#5b-=bJ>ceg^JcyagQTD&-v;_gr^L5mhG z#ex;r76?voD8;QMKq&5R#ZLJB&sq1byVm)Bzs*`C!@PNCo|)Ot-uqE1MP9)(`NuwT z&x2*Fy(#Nj^+mWur;n1(fIrkYT}yc;|Nf!8SN|`yaf67G(da`arkA>}UaE1%iT?>s zeUf{4GE+_M`8)PCa>k?@Uk9clFupc{|ahdxwWybh2o zlF_@j3NtiT8l;%@w5}zeGw1!(F00?6(v~*A14J;yT8(q#3FMWOL_v~?q7H$~AgFL1 z+A3~yE26}kHLhY<`gzF}Akmn1!3~UjH~$r9Yv^54q-olJ7%^pwg}W^!zB3dA-o7QS zEERFMk@CoyA`<)&!stLtw2B?fMumzwgYGRF=xR;m@miYTC7&YuEan zhZ&$rC+zyB)X)ggMh=-OrImGh_(jvzNQbdT#5&M zo(EsydYMl;G|tA2Rfqggn!~vGvkYdMRu3NioEcI>Z1>K-ko^$DVe(!vsP_+_<*dpO_hg&3BMF<&1| z6KZnm{O#CcHPG>^{pQ#oknw>Pu|$xyh>F2?7q ziLat;gYuuIKkU>A`Rh)4+b`?eCI)*L+8PXd=d9(=bH}maQOj{Vh@ejqz>W?~a8Umd zP$?KBwu_`e2oj>Z;23Wegfemd?oaPRq_matqw(v-ZVKlqU3=dg*>M)Wap-p)w1Gn` zP_JRFl`^P+#3h29Z==cIeR~$}kNEJhM;;sL+X4@Z;-`0YX0u}-T(R=s_V20mE(EqZ zsSn(|;5FN(v0h72iAoB~*3Tbdf{XNMc$oS3RisoQD6FrSQrBR8vH{rBmQQO}(L|@l zTK5ir$kG`iL#-T1L5z9QnH>^vrO5!p2orG2toKBC6?ETqsKNM~MfAg-&1D$=%K+k_ zh|7o3d{iFXRx(MYix)G+1Eq{RxXdIy$x0N9IqGkOeiK??&g@vU=8K2;xwIXo#fA6Ho>u@>d#BzBgRRZQUrs zV(~&$lqP+NW}**-|Kco}rSLjgTSPK~3M*-!mFT~75-KYCrqPtrI8YJ8$Ca%y)&MmEdFHVuwXNq-AsD(~Zw3HN4FY?8n zp&P9Uy+7JKYos6!j5yxO3rv~~N=4qy#B&ok_vw_U!zlJ0LG!Fd)~_fObDn<}H(kl3 zy_&hMdK-Cv`Q&RCXA?>Q4Rjj5w1&Nd6m&?&D3!HRg~Muu^Go($guXK+=S=;Ot#?n& z@F}=A|IYO9ksfGzH>H4V@UTW9>d^y{hBoiDj4;Jc)Lh5&VyI)guKDYywk}0X4oI8_ z1aL$AEf|hK18cScguSp%S(vaPka6Z}TWY(qkczU$_#-$Yo!*@|K*pEWVhJ%sCq!dWIg9~kHF071p`u;LS#mevStPm%u1T;F z>h;C^+@fV7K!b-=gV*=TaDYS>+=qUpq}YD+E*#)}-yy*YlM8 z)MA~8LR9-BqHw6)n~>F{^uKifz8PfvrS|fln<;GiCUXbnf0miVRr(ymV7EJgH>4@e z%Jd7?cJEM16~LZR*`HB!*ptf>R)Syh=ytb{$gQ)QN_YDD0xl*CXgdwXBZ{dz( zQSjGxwfy#0NSBf#F0s*ifsB#>$KpmhysgkL*sDMS)rn%kFQ#kGlP_BRFIDO&ZuSdo zvr*?cStq`(0;%}u1d%qUavw%JPq04{G|ONnMIoXD=HPlKEm98X&>R7Sh#&hC{U5Mdj){?O5~*m?x@g9}$ks z9C*+-jqeA}CgATYvfzZ1ki3qn9uc5p;+~6+eQ(I~bP4j?uS?k&csS6=x19#l*@k&A zap5hm>74|v8h1z7%eJPN>96Qj$EXHaK8O@iDIdZG+CiAHyx7qzE_4mn#AYg$4p%wS(!VW$WTy8A6E7 zkb=ZJb&Nc4vp`E&tr#yA>>XmwWdD;obe@{A8`)Mk(3nh@U(Czd#zMjyXL&dUM)s9< zDEm68d9ZPS|HYYrr>j$S9cS4;^}h-*d1B3|o}m%O&KnS?2_R>mv7{MNO z5PU+BD$K7*H~iMCfk_Zd@R$1QL%DmQt$FpMwm2Qx1J@oTgrwXTECc(1(uqTTw+BZN z#kU!FfGJ1BkGEA4bYS!3Uqa6Ypxo0S!u$!G{yb0y<9sE{;4=nugNq9`?yD@BFMiFi zs0{XOcf|}Im`jzEp%uEKDCTD<9~8$Ce6*QHQU}3xdAErJHC15pt z@IZLe1M@834?B+KBgi90e1JY=*^(|?xV|3mQ=4_yp%UoK>!tf|a0y#F zstSJW!FkW7z8;F_ljNTHHP$Kc=qve*q1n5(e_@J=zmIRbrt;?&_!GV#AnFdQ?+l1XmT@fLIi3&K(VS!RGFZ82D%t9xYL7BQ>#iqiPQ9 ziDtw?f|&sg4Q*waquwQ*lE6%$)+F*`E!Ac>i0TI5*tZt+J&P_F5j^3-6BGf=V_P|Fb$sdeMj=I?o z!?x_BIKd2Hp2Fz@GFago*QNUv^_o6=t-k?}Bi&^LuaVu*yMz(a{&(9ZNx$|&a=~x* z7cySm?^vxzSZIfepowWEpJ&GS$jpnOe~7rgkai)EOY%ku;HsQiL>c|e@HJ`OwcdSb zA7VfQA*5~hW)7CskzuA+4aHA`vmj8}r7vgxP(RmW2?(BeIGgOs>Nw$S%y1d_d=GDi zasHO&5mADIaV5U(Pptc&RHp<_3|`V+AGRmW!9(zxf5gyQfX+gXiZS2i*VZB z@w#LtyGFh{#qMlh|I;m`)E1+5PYkBu+dN2E2^$t(y? z6-_m!Wp5Wamw=+qZlD&&`>cERJX>tx>hvk14fSKK-1zb@RU5*!au#}^LY$~}qV8N` z`z-hZJq@0PaO)P{M>Qkd0+Jk6W?n+Eu9)1hHmR@gXU$OssimHTPhKBj?7e0G084w- zk_i6c*?t2I)!w*enIc^8igB(5dDKO_hZFc4OipS?+d=Of2sVcsg3Kqwhyo>4C6xm# z*j0M{F_X~?)XTF-=eQwcs-*2al-H?i%<^{(c_sdA7p`#cOsaaEa+w}qCFZCr^7ymS zM1&&o#yWG!*mlo+@J&l^#>p!fM(tHCoRSBlg`^1C!6C1Z$x9BRGKe77i1@9gS2gJW zNaWIF(wm?ZjE;2&bM1~`SI_{GUc;&i>pUrLgZT)r(2rN8eb6_Zg7i;0|5{u7u+k^+ z=x58mr`o}Gm#;(Sh+yz4}84yoM;TEbU?NL|p>`wl$-KH**)qKzfUS1M%H3PHri%}$jEl+)5> zHVc7q@%;2lgC)yf5hlE+#{g8>p>GjYbylTqiyboJZM;2i%wPYqY{>j1a$)*O8`V;` z4pcXFE6aO?Dn;D;9*;GY`=~)6@ zb7UPUAJ&9PcFZRijW8&BJPA3EwxzMneC7=hIKRg!gzo!C&l^hmNHxg<3Wt_apKoiRvqlS)X+DjOQxqZjhuaUJyFel8^shc*`4KOVBUrms z0^zKg&Z}0=k>+Fjl|zXqB`3DK6@pHE7f(1!&QjYjj*{5@MX={H*q;`orRNDsYD_Q4 zveb(DKZ;#MQAEOhR^phREk1gs@bv;55jj(xytM)_(LUY;+WyXiJ}lYx9tZM}ja1OX zsN-ry`Vp17C)h(Y{l!p_m3{-m>8a`;MEPI%mt1?go_s#LV&3cP-K-e&*^ zQYXRo>4y_~o81x1IDuGqOzC~&?iXv{of3jPKVR)Jb5}S~w&d+`Uudlr=1`QxOoJDq z;f@N~Ys8*KiXEJr)MhDl9h2YU2RzYCv_YIkKlMB-P%?~Iy3HdR5&Ov7iI{5S0k2#s zD|1ZSq@Ov&mST=AAxbakhWEdIb~l_ysC27Kx~@BoiM27bQ$6*?(=LA28>Bx`pK2ES zC=?-54on2iOmrXS@)Wk>O#mCaBP;AWAFkNyv1r|k!Y{lE`fl`F^Cfon2~~Sf!r%S| zq^03x&ITXK5A241d#gJ=joO(p%5~kPm-WCU7C}3bdIvv6bVJrYuKv-qbklEgpsKI! zwYkba7E$DUAl;hz4Tiq?+!+j!hFy{S{wv&lap=>eD*sFxtCzRuH1Y zBcH#-a-GUkve2WKVAdq^-)+40o0@_thA?p1nwE5ipR}3VkjbD~a`(1pVZntGVL<9s z&tZm%I8~m3rU`!9P|FwAEoZ|+FWf}Qyqb!hp;+zp(93TiS=nJ6WSq4V+Zsv2d$zd(@77pjWkCXT|yT6xu?%>KJ zE%onH=hI~HzaKU>XPkQ)Y5jQPi7|2k^Zlg+&$ z*giIe3oF{*W0VK?NHwv&lIYn+Nb)QBP%c)C!t+Jdol~f2{K^GB$681kab`zs2_9YW zrtQC0PGfYjg+-(Jvi02}y~##hB?lkEVpdN+{-#{5|*NBziADd<^82+CA;9_7A0-O02j{)lGT z_egjV%uKyJbfN=Ps=nX3H$v>Y1&!j(T!z|vkO1j$wp1U?Q1$oZ2~i8s8EP30jNa1| zcC^G7e{FF80Y2a05uKgaZz4`@6<0d**E&K85*iWF+xg83!?C?u{WyovVkgZ{e}*`8 zapFlV+0|lpDinEeuzCgHMTj)Hvpu@gAjH{T?Njo5>raQOZwKY& zFsWdI9h`l|TcruqiAI{@TCoI`JV%EYorzA_wi&ysaM9SO6J0CkboW%LE;B_Y zLp4s6^V*>#>1H+mkyd6PmMz#IE1@q)4fm)01V3DhG}eQxq~5bpVlnjUQvysZyll@H zQ0nyR!f_lWNaF69hP{SP=pjh6yWj|PUzRhxo4&C$IItC43(c1gw+?|n2ZqCSj2RL6 zz8Vj7>Nf6Ea?tB&zK|vA&4Qw_rx&3LsaHc8`*I2k0Y@=~;J>b_A>$q0ZgO1!JpEgA zDja7}zNxM7A&NA~5r~mumH<3t=q|U4zS+N%Z7rp zSC84b)pb^C`usT%*IKI0%_-`Fh^?SsD}9n?$T<=8|GX)&oD6R0ApW5wTOfJ+(S031 zl6xFKBpDl9DLPh*7qu;i#G6qL?Svzk3yi$N2Re4lL__&i8Dru3Kg3GdI!La7AyC)Y z=rSfttmJSd2*3fHS-RQvNChDhj{ISrc1gl}C}01eY8C9tSZ*5oJ~COW62YvWQ0>?OR zuji@8cU==@FQH(sPs}L7{&x7YMXuJ6AN7|bjQZPBoRO6ozf90bA=v18eIn$7wVn(& z(l~VN5SQUwEZ!yEDD15UQs-TroD|wo_Tf5e{mOL;>yR)#EFTdv_;FrFB}lsDA@Ug3 zPm^N`$BJQ9iXlOJsh4$^MI3-)9KE6#KlRj1hOEQsY^q(ok#??88PLreUGe1kaohkT zaA)Ra!zzM)E1_o~LrgKe4`<#-a+jqTHb4lnCm|H&oelH-v0Hqf{vTY4458t=hJ}ui zr4IRp5;nhVy*|PV!;rDztT}h^P(^sH7`B~ubQUo93w_WM3=e_Jp0FsoXU+4!ug)Cj zN}*Q|HKYMl8gVa?WIz0L31PpyC*(1r{&D^qRS9YWCucVT*n^4lgZbA@o;NDF0&IR~m1Gz!IP->|MC`@s zJ`#MN7BDLHv6W_z5y*@q~VmteJL8Z4-Ucj&N#Qu^ncn%uJ72<8s{J}6p}9%#YRNFbWD+2eVM?)%Ej9HC&+ zt3G0^O!%}%eTX?elKIk0$N?Rj+8>cUOWK%uFUrIv)V5vWA+=M=tIbiDAL;4A61R3j z%Y~L4z7lMN*_IdU8ab2TwS>Pw(;P)-O}W@LxNFEU9QcR842g$%Xpeax*)gNCot&a0 zt8F;yZ;^#SMgdz6BDH);or@qYEVL@E@QmV2xhWb(25{Q^20p3^zEn)Dhc&PN6lQ7Q zOGx5RWXLR`v$XVxe-C>qx8`|Yp}#ByVVC-_l#LlrIbx7a+ZY_#)n`6t@qZx>sQvUl5pCYK_mljWyVIo zd>Q<3i(MnMJ0kHC)RtV&;4oQ9up^YkuPf&`=|-l7bT>ZWH(STBPG?;ryYrRVuXm| zGJzzpRg7ir{?{5nPd+3>T~OKLkCc9B*Bk%odFzei=0}o^wIf|*jL7VJFs>EImUzo{ z$Mrw8X#7m|Q?GXrqYx?73a&M8QIRo!C?7mPGF0S5tx#;#TS*)WWdZdW4M-hQV15aPV7 zsc4yXcQYj^slq$&CRAEo3g>?e*P9PL$xBi>D`qS5B=+FSCF0~RN%?co7(vl*xUyc; zkC%9NP$RW{-L(O`LFt8JX|S@DVu|BVz?4wQ$F*bgOfw5FeNhhV0V+YFsI z+`=RTcPQMo#8-god#c7NJdb~GE#CG`>eS4%^oQ*zzW0Y4i|v})@|5X zJ5NGR2y+YckJOA^xSVz9Y5crQ9trY$6=&b=^tt?Z1-Aw)BEj5pv4Wg8sV+WY&0j)X znMu>44{QR_+Iq;r*JFRkKR*H%DBzJxrp-k+kFVBe0dL|!Cl`b)M z-pK1Xaq;R5NguKe{}_CDH$2?;2XXrSlWEq=ErX5Ghx;Y1A8YT?GW<#HhG`7pM1z!` znm-%m!3Ih6e7!jFn~xBCS0CHV_*jW-g=K{VKSJKt(`+4j7*}}4y`CSIig?E|s6jG# zrPJ@epf6xp9y;#23e`5r^*P7hpO~?>^^j0VdD z^fi|N%ilGcIec(}O39t1A7N-eDm-MygBP${eot=w^ME?RRTsTIUjKN;9O?UNP@f^k z&n8TPpLBOnUE-MSnp-f(>{&i{Tai2bX8y&%zq#2k{}7XrbW09xyz`1 zM~Dq=&a>t+1IKmsBrCdQ`qh$`?7fg9^@?NS>hNe3emNq&aN5y@d(={4YRkEVv+Qs5 zb&x&+3i{5$E&80j>?f9hP~-_&Bb_I_7d=p&SR|`)EKiCZ*}p?hZ=9v^5%~Q&y%)$66i{0WaMcxsC9gwJ_Im2<*Oe=&{2zVkCGI@xD95zY4+}D2XV~XH{4crw>`>; zb|v?JhRduq6|7sk8WZzGoy!IuyFTMaTQ59#a5LMU!xh{7DP%vyt}vQ z)U??aEjIj%FaA?DhreqZa`W^CPgD*g++wLqIGmB8EszJO2QMJJa7NsoqpSZxH`_7XPinb=wQxm~8#Ab^3*7MYAGqugZGiM>C>SB@d5<%>NLvt1 zTtXzyTly@MZe9;DN3!gJ68_*I>TK|a%g=c%fy7D7Fy&UVY)zR)0^;~Y@xDKzFHoxb z2&@gL-V;PFu$~g$pf_|5$SaZcRR$y6%8u2dM2gi42)nTiky|);6(%ED8a0Ubgg{*{ z_~~&oNXjX&r)BLU(bi%JX@d3jw=4eo#QL-Tr8)FEY2xYa+TG*8meIvB_E9m3sU{$I^(|%a zcEHL4*hOvcud3?1p-CGr`5Xo6+>rXzv264j@-Q*Wwb5|&o-FYt9Sl3vv8st$HV28He7w?h@#1;Y^3NA}07n7kg5 zx@pt)a@bdHyp}#P_KWU*P|axGbzOP;+hwxzM=s@Ak+}HE0l_eV%j#|KX`z#5 z4;}}kAk^zcwjO3Meq@YwW*qwHofvcL2jAYV6P48FI?ITa{(({^!0naC=T<3?rD9!L zEb9hb1O}NN1b5d{CXhfoP%dtx|2R3I|DP!Q&#Ys#*jwqoM=Xb;%PIE1A_MO z!^8*)xEOmWLMHpQ+b3td0%w!pgzzJlo*b$VZCS68Rrc-Cf(#O!#ym~bL23|?nkUux zTj%xHH2UUuoNkVP=F>__uP48>K|k*H^3UYx@dn(H#qnl(<~@{H7J3TF_<*+9rb*_b zqmxFQFD-Cn75;m0qjG|wWz>sllWVwS6X@HX9rYrI(}vJrga??DQt%Yys_jEtTC`T^ zzkku+%E%ya)3eL`j8yj+uHO^=)j*cxv~msYE2VV&sU>-q7ah?ZLp{!`6YRVh2IUhT z=7qO7o4b=SkA~s`Y7}3~%GFG!(#m~NBmok=?QqlYZ{}cw=D%_tatA{m3{6ihI{$<; zWnMjv%eF+7$|i?M&X!QObDv%mr}%;4vGP$uUyr*^VH`<^l7B3S5tZx=4z^c2cY#a9 z*8!Ra?$n6fQ)Cw$Tg#b>-%#D2T;=X_+MH6vp21Ix%*<=v@0W$M?ImMvhBM&2WGX)F zabUGOQKPree=OCsU05Be`s@^*{|RYD9nFZRY$81;UN zm2#V^zfq&)VT|M@VSgO)6o0U0dxi~bFkYj^n9CsHrSo~WxJLER=>(OmIX$6tpZrLFHDm?=31Oc8g0 znq({HVb&>Uj%~Csu=hk-B@xR}T-2r{0rYMxjWc^bMh}|DxyHS?6{OO_R8Kq#UVyJx$bfEaHZ%-uRGZCowIVJ!61{x&A&E0J`YGo>7$8Vy zib->C=253P4E(uy0(gBt;|#p%{J7!OI4z)3r;=)u|M->QZL=Bg}&K+y)>?9+^Z>>&>(n8 zK&$tPoJGeDo3e{|2iuw+VGKSpL_>U7gHR+0F%MGWne`$OEDg~Yns2WS>pM0X8!4j3 z2Q!0QWCj?4flGJpHwnF0EBxH*f4HGVn`W>`@xxZXW#$K;(y<0Wpc8RN%ZmS+j_e{C z_FPDIW6d)Kiy}&qUKnw!&Cl#dp9PawnFShFhG-L)yqeypm=+?He5SueaeS7MHV|f2 z3!@uIOwul0Z)4NlBHwwngLKzBpHc-B(5V_Uhnn6uyuvFtyzobF^7d;d>~WSMP?wvaV5O+^$`MyaRDGb0aF<)FuC& zVg4fEmx=uVV$htM{wjEYVfm^?Im)uPz?#Yi<*uWM+rJP9} zfz625BPcNI;1t0mEdcgX8ber0X;oD6cZFA!pE)kXWp=Q4Ut%{tt{E2oiyGvQ#DV2Z zMApHdLH0TLv#U>;C!$;u;SQaYn!0-5MeKq37i8*T8?dBN7nwBb(i!G>XSq1Jq(wVX zZ_(+C10)@u^v?)FVw7&ZXo)W~l|O5?Kk>gcN^keKhAv!&VwBNrzIgOV6iX;Cz2@eh z`|m97g9mx={zEPC6{WHSD%;z1qsp1%{sb=J;px5T1nAS$Ylg|eh|^cP&CRPrwGVCH z5w(TW3;k3W%D*Api}XCu{3s2<)^BK7bQkf6K<`xOk7{@PpJTmRV6JwWDYo@L{BAZ| zfkl8)uNGLhHG>lE!CL%B)K55IlCvs#jj}%RhuceA!_?iSzBe-h2>S_XZEVArv*p?t zQXUlzkQ>-1jR^2>MYDuVDLVf1df^Yxq_sUa!9|3NhcU4vwgk3#IC`L1|DZ(n4|?6i zC`dJr!0mUAwPQHN$xDcp8E$C_MHc}*@H}nQ94kK24sX=9PmAa06IAa@>^q#0FTV

    %wT8nD;n<5JK^oO2!5o#`4&KDfs#1pI>s)F;G;?1BG{;ER255@tLPJ;{18@3 zq|&2Z+C7M}G$9OqcYp$j5XnV|UpdOieG@ubkpJ&SDY($QLF{&`D@ysHCznM_=i=#Z z>P&t*t&Q*qt>rZj`kfdJx;#^!S_IDia(Qn~e{e6;iO~(=R1DN(PM)) z^O1~4B_lKn)uI-C`zvFTd^%`nxMZDO!i^elLLk zH1Q|oTQ0}8?uh3_gw)Sg#=4oC=iJiux4V#@;-)S*XFDw(q6+A#U=H_66yyi8k}})%PBRft8C=)ylVx2t%i!@Zmx@aKa$!`C%oh5o>S< z!^D0gIOUlByG%89(C+~`M;B=asqDJ2Rg}BFH8Ac&#m82(p@Yn=C--AXcujc{dKYHV zAok!&y%noNQ5^T{SoYAOqE|q=#Mp*6fMA6K^Eht91MW{Ya`o1U)MNw14T=ZUI7Ar^ z`Zrr)9p_#vjqU!&%k6hp(jP**TigAA{`UT`JvN>#V2>_pO88CA7u-RBR!4%iBRRXR zF2^E#eVbZR`_ZFX$Z6>+2=~zXQFR+bGt^x-q0M;AYXn|9FQUOJ9DPWHd)E}*d@VythY7D8} zUXDrsBQR+7PosqZMEo=O@5+4JsgBOQ zhQ5mJf2f0#0r~Jw^yDtAk3g*jq>AFG%K)*fR>rZ%1aQ8>cJwak4NA`i9}ArwkdgRW z6S|M~#C+4mIDO#>g#wZC9Q~oI*j{0j$!WH-Z)qIZd@ro=ZWZ$I8g;=juyKh~AF>haR<6si{F@7mo%S`Hk4(Av&=ri%}eppTZ`wFu`?B{EM+!2 z&TC33sL&;uNb={Md;6s>m~_nCa&BqDytDLGG3PJ2s2~%M&!b^Wv)U2HTS|LWqzVxj z8?VcC;<0U(q;*ehm9l*D zbz|?hw@9dPZM23nT#5q@hZGXPbjOZUa;P?svEB&<&=jZZ6(xr8tE~iyS3^{=fjLKM zu@rP@0L@}Wn7wzD=ZcLb6Co`|E-Ar?_?*`&GXV}WENk@n-k3E;S&z2 zG)W%4Xbmuc$^lirwV?I&*awur1?5;406Sv^r9l5@C)lWpf5 zS|PxJ=g|x&2A1QeUq`@w5wjuY-$%rx+LE?BD`0s_CQ}r8r=B7_InpcpFqzR!HY;A= zsg^P>YFPh{CTLX1M~lHCLk0({((Sn5`$I1KN$@L?PjcTS-O^!_)0|dzzqhGmC?Y@0 z5N*8ayMV_5uQ5>+0INhW`4eSerSgMxlVW2-}XJ|Bn*r<`CvadnO%W>Z!E3p zo0K}#)UGV}5KsaWB^k$QJIL_Le;bU^KKe)jl&PStnvWLPY}3tfe!$DK)qV;;T+oQ1 z_rf?PLtenPN@upx3mlGE0j0bvC+@)p^1*QKPmzQGH{anlKnfh@->)kkbUoq<|?y~o&10Tiw>%9`R8no@60)J2IPWPaDO+^8haGdh0nj(?}Rrzq;e)UH2 zm|;QQ8#)Dk6ieS-QE4mma-;ga!ZF<0VwBWSF^`U(@`D#weFXU;6cM}ll=1D9$i$TJ z-PkZe{^T$t9qWz*AEJ$!q_0RMFmB8llo%}fS1QViUyEOQ(9!+Xg?6HCQz)huumrS% z{fK`jMs9BG=*yv}^)v(j@1X^32!(MxJa{)3kO0p9i!UqxC%*jh9HlLb#N$V`^p4D~ zqv|LBis60ESHe6UuN_PZj;?;;kff(O+hFTS$`0@zGH~+~TQQ{;Z<{vOFV6x{RNS{{ zK9I)R9ToW;{i|9DJ^Cp7wfBp)uAIvf8+Is{gAOBL&p`dk)r#&;#YBPH*dnv2elPb$ z><u}7Y4%5Lp%>r6lyDy9JAouod)^1zrL(tS!x2q&{Xe_Hur}`v zq_O(I&3@rVL|CT=a!_Tb$e~Pd2SDJ)a^WE?Y#Kr_j2tL-75MiN2i}%Ki{?D=ccVzc zM7bQp=R4_7q-GX`@IOWX2~4L4^3)I{rEmDs_i~Rq&2p!t!v$Mgmmg2+E|2@p zuJcEkSPm7TPgVE!s3gfG_g`h00@NNYUx_N507qLhIG29Vusi{Q-PJHYon{ftGs$Z5 zZeqpMJ~$sgE<>sG8rJ|?IzioV!2lrJQHUK2p#OfT7*?K1;KqE{PmE(1Q3{i)<2P%~P<}QCU%!!4S$0M@@=#a$#w?$LVWzi<%0bX*aI6O zVmuqzSZ+dj0yK$#o?$=-8k1AwJ!PUytr4iO2h``@F|SGb-o^OSKm1`B-g{LdvDI^k z_W2+OtLx>Bh#ZJm7tFqu&+MAdw(VD}hC6mk_3qxf(Yu6kEU{l}Pv7egn2U5+f%}#E zQZ@ZyGD?FJR?vsyaAccea5AZ2iEfk~S4>=iH`)U)L1z98$0mN(;oppqrSw>oM606$ z)nIhYBd$eD4_jz8(sv(ilVNo)^B4J4*O1!{G{2M94jiq_5Dg&G-sEq$iBL7|h<9_u zv{_oj@BjCbG*;0X-2LbMQ;ZMaO0ZxAa)b))IuJzKIWSk)lB+F&qG5xq> zwU13rsvTiAmzrE6)p3H@MwbxVsK+N-h}sDgv<2{sQzzC+NAh{m&+3%sx%D+E+1sJm zosY)3zK^f?)q%o^)}XokJp1)HFVSaR^)(qXLD%|Pu$QJj^UrhN8v+-F*4>hze3Y#v z?I(A&h+z7=xaxonwj~E_kr|Vg9*QNQyy3rQX8Kyk_VkOBPm%O)NfeuO1lC#l2UjxU z5YRxTO*n?Vs)oEp_9f%f;mPCkgqfV^Kv`lU5znc>2JKpGS5#d;|;I}aFPQ8&|u||`>uIJsW4+{&L5k+5uKg~{F|0-|q z#S)Qb+D3nw>%LLZSHgFW?ZWZ~hl7)#sRWT7w*8=h-CxQ22A|ztq0KaHDHUZ9hTsSV z`_+=FOty>f%{+n!>77id!f|tZ+ zXVURxEL$;_j}Q9?2{u>jM#K1i*7)Ez5LzUO`}&5}j#pM= zc_LAz_pDixJ7og)<7Q0?F>o(vXjQcrW(5Gx>s$D1|8ca(!kcX7CW#KQAzC{8%qP0; z`!fkWO>A&G;*W~tam#Y_uRW5)fcvW<*DfYwug~+T1g!i(|8*`9^@jDfl<$V0PQnQW z#b5aO;;#C~^jiGJ{m$>M0NbN`6RQ|}I`NK^t0nvHi@suV+80ai-?X0y))sNSN)Z1& zssC`!Ie?8ymiQpQ-Wh)-EbPWd>?QJ%#22R`#Sus6u{;v%S67z{Wv(wdMtbukCVW9p zU-0QZSg;L=7>C{#{=6M>?QS6D+j8TQGR+XSRSH)-Yk8%omHoHC_~Yr^VEo17L5}+e z^39@snb79nB3t9T2E3gY5$9vMV#VF06G)9@lILS7?)Kv>mvG#iNyj(YgO9KO>rE}^ zb#dSPnSFlX)-L64@l1uDvaTjD|0j=x&t+zgOIabQidU}F4(LO7Z!Y&;-tLV3g{4g# z=!0X|V%s+1+(wRj_XGWI$SfDdV#FA!6%Y!Bl3E3Y{Q2Q-nHBLOK7lSaJv!UO>DpjZ zXEPv1MEVAP;CpY|yh@2p=`9kSWT0*mv}@hj_4L?|A>p$F8NNF%xK*8_IRK84^5sbg zVAX^-zU}$aUhO`(mywN_RN1Nyfbh{n%++XzC%<0Lm;b*G=}I<2s)R@YZ@*Y>DCzuHuK$XV zz2DB{h{Kn}ZfyB$^i>@a_Wi!)Q|0ZeZ{7{esTT<)WLCeOdC^ULhz zNv`LanJHp-S)Gj{gvaj8(-}^aAAHmbuW4Dq{&#)M01H@8gldPLrCD9h84*05Wp$&O zy0zNX&%RYJtsHo`US)_CVqbJ9PJC-_Iq`-e?7pGOcDA$oev^0E+Esm4$Rz34m)9=> zc1yE>?p?Ppja{4OfPve2B8`ylheLNLM^!bk&*2}TvyTFFEvx}ojIT{QPc{@pk{9Vfl;k~A%BbUbQO)f^0lk9>rB?k8J0?#-~J zF$qoH){wspUc*d}mMsJ`JsLQ?9VcAdqTwt#&b6(~6VPy*M_h4#H`TS3y*A$Nd;Two zMF$hA(bB&?ACh@|-6*ZAak={RC~|Y~eFFG~!d&o+ZIX!{QC?sKfE-g?#U>E2r`aB! zo$B*AtEY|Eyb|O*G@I^!vlfG~K9o$*yc!zZ$$E3rN3gt*RA&?%;Wq%gJMIpvpEEQC zop@lEX<8YI5wI4Jd(P{+G z>MDz=jz(-|SxSqZ_LI<&n14JSfU*^QB>s3Yr3`hh>m)yEUG-lL$;0k%5`lRroFGQk z+Iag^CiC!W(W4I!blAL<)LjvwHS%34nV#-`M_I<}8jns~@MaECZR#ozeVS@3y20^W z`tE?lEO0Xedf2jhR9mP=K*i4za5_K%dXX$SO;=o;MERQe=BWJ`78V*nen=x3;KAp$ zF`T*nt81qA3r*Z5;%m(vX>lZMZCQZz=V^D8_7U-d+ntkS9&fA`%>8|d4;zN)akRuX z)2*`YGCi-8s00Rmqtmpdf2+Du(uL$_C2t_!@g3~4`(}U_MSSFBtq&wLZ`|h#Br`NF z%pf%nd$>eRy7f5!CDOvjHFR5fvA;0U%>vo4Z3o6Mgf9A$Us&dQ_hPZ3&4!JzX5sR5 zUc6}>5zYrbJ~Er!%gO$$qw0V_)qemIoQJvX>LOEf60F-|b zgU9@)kxk6i0`p30{rre+jWfm^&o#}TGUuGyj6ok@RWg3K3c{y7qAWMuS>0Lr=<3#f zD14n^>{yy%a~V1}qno@#Yn-Z61!34yqT5|=_vdq*X1NX!r$%+Y2oQG_P-y?)w#u-U zD6-;ljHUFRFgE=h`5~~TY2GX0;~ws)41g@Be;^yiE>=s2*3tDkT zwjtLRK)foOK#Z5$$Xg1k)eA@>f=>QhZiX>x^`ACk`4iS&H}#YRf(IZ~Es`Zb*-bX$P@Rb;qN{hNCvA|R!ZbrGs?t>H1| z@t0VX6{?Q7<7`fJ^jzO3QsGzEJpHS!G^@RSA&AQR-LQ)OHiJ_3_ zUHI2DD?EO$#gBnQ-pM#i=KtSl(;{Ls0_mG^dZk6kY4JmFap3PalnH{Jf05G_j@BQ~ z6i=**V?$5He+Yrs5`rp=GZ?>r`tGtMehtZ&+RtWeCvP49E!fhfmA{mphX0t zRNORpMt~Op0y_!@oGqgOY*^W@>*Pox1KCfu^?jR8rVv0akrmV|WZ5S5n8eA3^4a~t zacRz*d69{+%wQj!lV#-CE_kLR$Ok4?LuPTaw{cGGR_I{%Gqrd|E^*UWg~iWUM5yn` zCtM4-IG^@XXv`wl4Na9f6LdXh{ep6EK7WmD zr$+r^8D{WHZCPgBiGZ6OR}!c}&UWMwsb9I6x;>VL$M`Dlk5g^>a<70;{6)~q@~v2E z)Z-|}9bPD$DO_JG4|_Rh8_dDkMgeWy73S#tPdh)Iw|do9h57|rI+>@7khk~LF%>73A2U<_fs$VK)Ud`RIM{lf0?cUlO=|do5g^0EqbzTMX8C`TfGQIXAER&VV##*sxUYC?m5K=)=wC-ruTc8+1x_ zG8YrCOxRFa;>kNJ_g{%2t)~-w%qiTDPr%ul>$w_M2-fc7hQ%;y$2&ru&}(|9&O=q* z>2Ne~@X?#mM`6LA5{(E+l)~6xZWQ>KpI-emMS6hnBw&UbhAt$cw0&ld|F0}u`zo264$NmR8>bOM! zj(_#@ZFpKTN|}Z8q+rwA7FznMIh#zA+4YwANP3u-foJvLs{{7A4h#&QZs?6{9z`Ef zBMO~+sJm97(1_alxQ5Kb7oPpxfV(}Oa`C+z{k^fq<_}j310dA@{xGo@Hlc9d3{unu zbwGyqTuYd@gkn>0hZKS*`C3vy9S4TlxiiA0O)MA?txEmdfFr~lI&@Zrr;Vu`$M}nb%V&Nz4}3HYMWS zG%Dhus&;3~B>JKxE4vcId>JUc3pF*%AFfwca+EKum=0gzOKrw5nS!yS07Pao7dbc5A?Ry-GQ;g4j0o_J(iP}=E$Jgvyl zvj8N?XtbqbhaQepHE+@EdYJqZWs{yoHb3(B$dLDurms}W$4*K40-Mv@9hs+vyq6F3 zNd%}0qsi)M)ok>h;bwZZav0?%T5bl#L-kg-aC%V$+9!ElP;wAdjB;ppYn6`oq_DRY|JQ-{1Y(#e&nS z7+9t6b{SdSe&q!#(fTmaciN`Sgo#CY{zpeXt(}36@^^e8U`dl+bkIb@!<_3sI73;x z=id5yye1xmKZ5|>ub1+0uFi~$=*1ird$ld32E+GyOycD5u{ejo6<+eqJ*iVxK5$E# z>6Fr;`h{cLR)%`Y)S&;(o<<<0vB#+JBSU#fRj-Rz_v04|kTOXN8b@IPkto$?%8ZZ- z6h5i1o~E6StVQ%f)M#E7K~%NFw0?(c(*?qF##67u$^Z03;Ckf!SNC;vZ0ql_mLTZ4 zYU6Ud!&N3FCHE=U(f{k}8R4$ z9*lPXs6~{KRNZl|QV3suZqqnf>+45uNszyYoc8>?a0^i>T!%Av#B%vzRY-fBIhd@o6AaU3GQ`^F~6{fC)g7JYJ%H< zI0on8Y8a*TVSSIW2CEF7MU*&RPl{k9GR>98P@m=5%|@aG21hpofadwc4yv1|&-qfL z;3RS)+4Ef;XxE0GHagL3J(2ATil6Qpf>t%UnQ&#@*#sKSx_^E|?erW8uymHZ-AqLd zSrGi$_Y3S{H7z^8qJO&z&MmK_Xwi9x!)d$=ymEjl^u9^g!lL1eLREs`>QOAZvlAy8So& z#W3~^w)V78R4UmKPwoEQI9~rC*`PK4^KDQ#^jIhXZY|zphKge1HS?OM0I&Hii#a{< zSxfe};CeoR9V8a7_Xh8AE&U=E-n)6C4~6iv>V%9lE-ZAchG2(C9JltUU3E%AY562; z#sf`JlCAeNTW7j)pq%7^CGjHes`x#tx_&!(-nt(&j9-1IYd?l~^X9#X(CWO6xtf%Q zaL*yn0KLL*$~G zlU$Fz^95)Xm%K1*M6U;K*EJRMH8DN(9FRmtb_xQ2!@#91+oJw(-;3R~MpVJKB|E6O zOV+7shI@{x`+Nuu7Eoz7Fh{!=5=?Y9H@;k2R@s>A;!yWbx7m5sApNzT;hl5vt5s8~ zTDY+fAATNM6N{HQ-@a0#&3Y95?KI8yS}Y2alwfp#AwIf?C;2~nAwC&13c~4bYd&$+ zj!}`NUG8Y36i0pv#Yc6(e4Oc*ya;tH*wz|}Z_``KxGBV8m9S|QJ)1S8F25;73GjD{ z!brL^lo>t_`ez<{1%D$rSln5T|FH>$cVaFYW>s96Dj2ufgM84Y$eeCkXY^?+xm0!e zCaLt@p4XQd7uNh3F&Fk5r{G%z9&B8-n2utLyu7n>0;R?BweZjTXx|7A3L*3DOQ6B= zyqLM$)jcSBdZ_lC$n`F^$CzUqr7$|Z#JyjhXoIn)vI6NBA*R09jbcgbMqRjPYQY^(J073upfoQqT=afemhZ&YvM0P4k-j^W=s^-ngEQ0I;fOZnwxDY zveox)u0GLpOh38~dzKLNFW{eg?EqEVs2ca@KDQVRVqArjSO0at-A%%Iuc>rXUGxSO zhYeO4a}Jm440@3svcm`M#R4nVWKe_AEkFcF9_C{&#}&EdYAjBN^*&J++OKNhg~IVK zyt1k(|M&RPV&z{Wkg=-rlXm;&XMYvl?sxis!B{;QkfnwELZ13ExRm(j|ubd^kDc)Cv)OBU%Q!2Qv0 z|Ak+QVg}8ihMcDOytqW-1!KkHW7>z+1v>ahV!%i*aSl&%H)2ufXOf`11rX?zd!^GJ zfj_PebJe@=`5L~qgbx>wry`#ve{fac8@w?qdXcvaPoI*GPWw-yBImzs2`)UBA<~)xI zG1Kke_NmC_BK&n(8TY!rq}=AvHE-&Xm&BvI#`F7J5!~|Y5RreAY5urfbK^55!unau zrCznja2vNwTjj5Fb^4!g#1%^1gQJEi>2Wx+m~{l8xb+!NGOr&MR!(bsx;jgXJs!%# z%Q)72h;ZcZ@#M?_Z<|hq6&_r$HCl=nXKC}{knLHlXts3$BBdxH7Ib?M7tQjChU$$C zA8PqK$0xCSecgKMn+e@~=KvZzn8dcHEm(UkqB6n~JpYZ?5Wu0n5|9Vb2 zI4(6mL$vHKoxm=`)?fj6l+r2|Ywm==L+y2^{(Of6jg258agOIa!(C+0?z zLS++e3ZL_hL_O$6x%1zM_4<2xS2YL&!4^)~Ag7Cl=(X!TOaVZ)?S^VMn;T2mj21in z?+zu1){H{%o9SYT46}V{v6iazctwA8^Q&r&wBEWsB#l%+s0W(jkvW5CGIrL7U(Ta1 zThBDG$F#+sdU}vF73dKEjBh&w%l9EsPzxMYJ@s(fx|+Xi+*qn!Jz=ynu$Dzq@mHNl z)MAfnHpHE1dT4CTkH$hYn_pkOVa&Gc1*7nhjLM_$6Yk?YPN=3a`FwqS|FSLQsGI=2 zDH08j)uV?9p-O$4Yxg?XraTtpDex<01-PB}lU?tBlxIs&+y%S!s7u_q5}gtjmK0f4 z4Rhv2um>b)vFc)+Ng69?WxARh0wmnh$Q1XqB=Ez4!OKkE+@`^NLIJe9-}SjB9Qbe9 zbKfo61t;!qkGyy4c)0R~9g^0)lw6$lq4h!=91cN8!r++3MOuP%@wugRmk|kL+A7%u z7r9ApV2x20iBXxS9I@IGh6$TT}IV~;O}lP$DZ)h$Q8ZFcQ(v$ zs)85h?_Fy{ot-FE%PkTv^$|6n{zZLFK<28NLmr8O1-W<=uYM=n>Y4)rSj+2+)h}W; z5)UOk{@aQIPS)EYgYmy!nC;bLzOVl!H=laO*2U*x!RcF&ZEoZcj~ec|m5A!rg9ekP z9K~R-k71z|=oO;!1(t<_g`^m~wlYm2;+8gL<_GsG!^>_7@S3VW^MSi_kLxR~lN82{ zzln$#HqbK6_7;0u{U)hJm8ykwlmpfFvWy-e#W_f*ec{la?qVXrHNVv3DTn0#kr=|R zA&jATKbAR*zt&wfi-Qk-C085!mI?Y=(?jp73GyV=#DrBndm{1ivudo7287!1vF8RDssn#<2LluVIX~>*(f+gnx*G z5D8q>Gpn-4h5zceiFP)dyNUjon_@^)ES1PV*tTb)%3cthnl_o%zme zXtzZSg$e|J%%mE0fjn4S+c^I-`w*E8BNO#yao7CJK1%#_W64$(V+MbVc4@N{`*ezZ z0vsy6{+BQlnOgm>W*NwQN69B7K%D;=VP)?tN}q)`yGWCnop?5AX^>oALF!L16_+&CaP~`No$X=3kkFDyGI|``)qAxeyo|su z&+5;;#mG%11;rSsu=y}RPrjt)r*KWP-4%CI70AdlkE9k@Sk8lfdq@GtiE>&WqO(+?$#vx4q4kc-C}KG zdBM(gZi9KdNI2Tj9+(`3zjdl&#Vy$plr2si1MJdMSvVHpEE^Uv4`5mh1AiSgj519O0X{t{ zRxF+Dm%UeR_iG?05h+&48^}5BRv6g795LKJ^bfSlrdko=Sl7wt9i}e-Tk3pflbO&q z>Q0aIzvq^wIS+%WSDHmmAZRmKu7l}1b zuVLI|0X_*Bx*8j7ui8DVoIP>{20kAiX4ix*PZR#{#IZX2;rKbFz7`z#+*$TXw@#^y zrYiXF*i6N^eWH;^uJZe;ZLxIO+z<`mdN^Ghx#^ZXF5->}aPHE#LwU=d$Dc|Ssq_}9 z%PH?sl#4t>n_;6ylnb%K?&%$+wLV7E&BDCg9)hiuqRzQ0CB{P0KYs`PP^-Y~7D<}v zD!gUWG(?nge?#&4z-7UBjCH1{|6bC5x}rAZ#vQs=kx{D|)y;Yltw| z2%7n8VNS!;20_s(CDlyDHtC0?eX4OtXK!RNyUnPKEY zq!35Mj4sd9X4_8w(qCJBYgPT`U{nlrRCFBI*aWvjZTe~oehp&G0>yvCCeXqGC!+u` zarZL97Zh=>*{v_8$6l}9_cSiO*Enba3u7hED-_$zm%N;Yn>@lsHT#vXu!vaD$c$Zs zW8Fgb-6mnIZArLLpOBq;di~%J5F&mw+??3wdlXL5IR{t2liBfJauOvQio2ml68F*{ ziH+&PsgSu>nn$+;r3@m&)RpMfv1rgdqFj&*k%8QsGK3~M`Bb&d><`4r z34)T5*R$E`A+!gPC~oK^S*vT3DS4;hfB2|AoT;AIrT_zST73G*g$B}n^z*2ra4#|S+t zEmVl5PNJc$A)%i66fXb=tZyuRyGcYgs+_pcEY6lhC{0ITk50!A0)R{EjdjM;`)Bq55~=c-^ZG_N@VX` zdxV|QyT`nM$sAAo1?0c`ol zOg8+e+KoP{6ugX{X2T3RtK&cELsr$8EC-}ah*a*y;#xJf+x6nv|47XEA2egRg{1(e zz3mEwkjH))ZQUEH^dzhU%v2$$eZJi49baLNW=B0yI>aCu8$%||Rpg7S_*I7(I8Bk; z2as9vz(F9!xTMfc6`aRLl<1PEqw-E|o{LjJrJfkonM`(F1f$Arjf-u>=|+AohZr!N zb=<6DXWEv|C|s3~vT0Hd;)1f?ivt=aoG3J!%yC-F9(9u3P9;W)&K&AhyKeev=S(U1 zGsQ%T*_(eiXJZ^C*A|e{^YAY3#&v3jiL7sy89J<~-PiL^>uj1)o9Y0vS4pK1KLPm1 zEiiGtB50aT`4+dGwec~iM3$nFcA|g$J-m5Q7hfJ#$cKN^cZV1ZxsvQbYooh=fL@ zQ-t=Po3q*`9B}e9(w%ry#+qY)ZmfIbdTY3BD0nOAIo&0|mBFR7su^fZl1I~@;q{Zs zoCxFQoAucC59Cxn0yC)kMx1oB&Sh78`Y{fFg1p%U;60FlwqY9Akd0p&RFg4>|2+a;qfTWSUi-; zEx`+QAl{Vj6I#&97~h}`B2{spzndA<2fKf8cI#6d0ZCbXCg@gw1(i=ORM_g~bgkBk z+G|>iXM^{ee>7pbPrQm!UfjS9A9b-cZE0rc%Xxg6>}Tq7dpk<|o-}qizzY2G=an0A z%eqZE^^9ZcbE_Z3w__v;Vzw!V;<9x zwt`1Q$idOEcM^N^YvM*P)55>hgg3N}17Z6F2<)5d)w>?zwiEA&-$D?jM^NE|)IIur zYnwL4H)R?|bc0T^1`a(j?zu6Qdh>3|+$@g>0IOC2OOhp(ax39LX71{sT-J`MMO=O6 ziSTIbEwCKj;Zh#CF#)i5U!=jr|2@~#ADLF(HYKtQDN8_&{La+g{=YY-bVsSnC$)!a zRbBzz1~5VyLx)K!E6Dx1fDWA_3>NI3)85Ao9m>B;!amy1lbjPFU}2d6w_~%J%i2gg z4H8#R?_dNf@fHnGHgB^LQIsNihT3RalhQrUV^=!W4m-&%h>Ws7eh%>D7^X3hd`QjL zr`&edt&_zr&*(LE@~aiHkM;pIb2EM!D9==Me`O3f{}Q=o-#Kx}yMNR(U;4hfa61?d zbv_5@<{4BUEt&$0dr9&ftg6D^&VvhbPhAFVi4p(aspUVH0l>dFK4)uFUL@;00$3gG ze!9$U!h*H;mVsvpoK{%R$s(Tv(~_lUek&2`1JeDS>;uXuFo>O#MdlSU>#EFmm3DVWgt4tAph!mA-b@JpOTi%;S6w=s}c8e?vEJ;{E_; zrY^XK)K(*A&vNh8Z_g>UP(Ytzosdi?R>oj_pu0|@Op@auYz};S>;jw_NB^}8XeoS6 z0XXk*=3oe*_-*9Ox#v<#1pK#fIcFwA4)J_jzmxB0*m+0FA#7VtunnZ!^fV)&>hMjl zm*=ie21wrRmhc>5+_GB)G(L9kmfisS4$R}8m8vW>h_cV0@dfQk!w^h}4Gwoy%alqBa zIrtd#TkZHZU&>EpyT*_`;eX)6kP$J+?ej~4OdM1QtM)8M@ir9!@ZkiUQfWxK$+48`kUwx(>Vb9FPDX^WNv>y~R{(!cOc>c>fp zAH?`F|6GR|WZH=GWF=k>gMQ<2z;x_W`bdo&Nu~a@kG?x71!CJIc0&iTobm-%@oEk5 zP`$h3nWX#-m8Kkx7xdbnM!H^Lla*n`;xxmuQFZ^R)D?owLk_shuxr$l&k566!J6E( z{-<3PaJiG;-$PrM(<@{$+67V^v+=fVx#b$|$Dm9l+eMq?lT#Sq@g81tlLR=!Y89O1 zypWDNo&rQ$jT~wa)S;rugW4=05xLte4QAsRf?j|iI7z9X!-+M62KDxCIvI6|j#Bv^JI=0288 zWy4XXi2HAFk8Af55@ju6{gWWGk;)5=h9jbLBua%F}#1T4o$`zf-;|9Ha_{!dcZ zz$X2ayW#1z`#$IgC{!|CdIDLKof28!pgy%^y)d*yIuB3;sJTrUUS8sgGh-G3y&@ zzOqj~3}}o0t>^clWEk<+5MGE_D86jdexMR{HXaUB*XjGDQ9w%#m^Pd(S^XdXosZ-5 z0Bi5m;{MMVds6$Rtzr@~kzk}-(BmMh;nB1&4W4$^?nK{4P#0ZB3LrxSkZ#jS`FaMy z&eHWv-B@~B1-b|J*z_HVE6j8rZvWGiIlR!4ZTIRNx;>Q@-lvtA6$AHrsG;Tu_e=r6 zc}qD&oE*A`Lz|$JwPh}?gPye)Mx>7EiW>eoxp^7e%4#w8{K_h6P>NofF#w|rqtvV; zpmsyY0q@cPkOuSAsLrW>(4%7D;Q;m$t~tB2@rtj{v2N?y~&EAxN&@3lx-lop+mc%RFv^bDg?f@dnxO~Prk z;(vEP=377U0PeNp)I`r&3h1(`=;B*O(V~~)`ou9vrIIwrej>+hRL-qM9uqGSvWt@z zGlQ{T&u3%_1y`AsYwn8RZ|1}z2icd}l`r7Zjt@*UyG=4jQl zHo-#brU51t(2~hQ2di)kftX-kUx_@dSnQ)Ie$ej(u?Y5Mz+gMJSn}lb5!f-sFACWP zypZSZOSDZ=SdgJo#EW$_=*@Q(s zmwfdEudqi@C2C{Li#d1f)KWE&)G?#hazugL4vQXIL^0WKV zBEoh|C9jL6uMwh%2Jc>RpFSy&A)om+XFnNtJeXK-_VE2T&jh$WQGEnkeJ&@im4_6s z%ot30*kRa7n6=Jzr4WRw7P`)s^wCh;nCK9u82lDckd>zT5}HwggO(?C^aW10e@ - - - - - - -libdap: Member List - - - - - - - - - - - -

    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::Grid Member List
    -
    -
    - -

    This is the complete list of members for libdap::Grid, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    add_map(Array *p_new_map, bool add_copy)libdap::Gridvirtual
    add_var(BaseType *bt, Part part)libdap::Gridvirtual
    add_var_nocopy(BaseType *bt, Part part)libdap::Gridvirtual
    array_var()libdap::Grid
    attributes()libdap::BaseTypevirtual
    BaseType(const string &n, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const string &n, const string &d, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const BaseType &copy_from)libdap::BaseType
    btp_stack typedef (defined in libdap::BaseType)libdap::BaseType
    buf2val(void **)libdap::Constructorinlinevirtual
    check_semantics(string &msg, bool all=false)libdap::Gridvirtual
    clear_constraint()libdap::Gridvirtual
    clear_local_data()libdap::BaseTypeinlinevirtual
    components(bool constrained=false)libdap::Gridvirtual
    compute_checksum(Crc32 &checksum)libdap::Constructorvirtual
    Constructor(const string &name, const Type &type, bool is_dap4=false) (defined in libdap::Constructor)libdap::Constructorprotected
    Constructor(const string &name, const string &d, const Type &type, bool is_dap4=false)libdap::Constructorprotected
    Constructor(const Constructor &copy_from) (defined in libdap::Constructor)libdap::Constructorprotected
    d4_ops(BaseType *b, int op)libdap::BaseTypevirtual
    d_in_selection (defined in libdap::BaseType)libdap::BaseTypeprotected
    d_is_synthesized (defined in libdap::BaseType)libdap::BaseTypeprotected
    d_vars (defined in libdap::Constructor)libdap::Constructorprotected
    dataset() constlibdap::BaseTypevirtual
    del_var(const string &name)libdap::Constructorvirtual
    del_var(Vars_iter i) (defined in libdap::Constructor)libdap::Constructorvirtual
    deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)libdap::Constructorvirtual
    deserialize(D4StreamUnMarshaller &um, DMR &dmr)libdap::Constructorvirtual
    dump(ostream &strm) constlibdap::Gridvirtual
    element_count(bool leaves=false)libdap::Constructorvirtual
    FQN() constlibdap::Constructorvirtual
    get_array()libdap::Grid
    get_attr_table()libdap::BaseTypevirtual
    get_map_iter(int i)libdap::Grid
    get_parent() constlibdap::BaseTypevirtual
    get_var_index(int i)libdap::Constructor
    get_vars_iter(int i)libdap::Constructor
    Grid(const string &n)libdap::Grid
    Grid(const string &n, const string &d)libdap::Grid
    Grid(const Grid &rhs)libdap::Grid
    intern_data(ConstraintEvaluator &eval, DDS &dds)libdap::Constructorvirtual
    intern_data()libdap::Constructorvirtual
    is_constructor_type() constlibdap::BaseTypevirtual
    is_dap2_only_type()libdap::Gridvirtual
    is_dap4() const (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    is_in_selection()libdap::BaseTypevirtual
    is_linear()libdap::Constructorvirtual
    is_simple_type() constlibdap::BaseTypevirtual
    is_vector_type() constlibdap::BaseTypevirtual
    length() constlibdap::BaseTypeinlinevirtual
    m_duplicate(const Grid &s) (defined in libdap::Grid)libdap::Gridprotected
    m_duplicate(const Constructor &s) (defined in libdap::Constructor)libdap::Constructorprotected
    libdap::BaseType::m_duplicate(const BaseType &bt)libdap::BaseTypeprotected
    m_exact_match(const string &name, btp_stack *s=0) (defined in libdap::Constructor)libdap::Constructorprotected
    m_leaf_match(const string &name, btp_stack *s=0) (defined in libdap::Constructor)libdap::Constructorprotected
    make_dropped_vars_attr_table(vector< BaseType *> *dropped_vars) (defined in libdap::Constructor)libdap::Constructorstatic
    map_begin()libdap::Grid
    Map_citer typedef (defined in libdap::Grid)libdap::Grid
    map_end()libdap::Grid
    Map_iter typedef (defined in libdap::Grid)libdap::Grid
    map_rbegin()libdap::Grid
    map_rend()libdap::Grid
    Map_riter typedef (defined in libdap::Grid)libdap::Grid
    name() constlibdap::BaseTypevirtual
    operator=(const Grid &rhs) (defined in libdap::Grid)libdap::Grid
    operator=(const Constructor &rhs) (defined in libdap::Constructor)libdap::Constructor
    operator=(const BaseType &rhs) (defined in libdap::BaseType)libdap::BaseType
    ops(BaseType *b, int op)libdap::BaseTypevirtual
    prepend_map(Array *p_new_map, bool add_copy)libdap::Gridvirtual
    print_dap4(XMLWriter &xml, bool constrained=false)libdap::Constructorvirtual
    print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::Gridvirtual
    print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::Gridvirtual
    print_val(ostream &out, string space="", bool print_decl_p=true)libdap::Gridvirtual
    print_val(FILE *out, string space="", bool print_decl_p=true)libdap::Gridvirtual
    print_xml(ostream &out, string space=" ", bool constrained=false)libdap::Gridvirtual
    print_xml(FILE *out, string space=" ", bool constrained=false)libdap::Gridvirtual
    print_xml_writer(XMLWriter &xml, bool constrained=false)libdap::Gridvirtual
    projection_yields_grid()libdap::Gridvirtual
    ptr_duplicate()libdap::Gridvirtual
    read()libdap::Constructorvirtual
    read_p()libdap::BaseTypevirtual
    send_p()libdap::BaseTypevirtual
    serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)libdap::Constructorvirtual
    serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)libdap::Constructorvirtual
    set_array(Array *p_new_arr)libdap::Gridvirtual
    set_attr_table(const AttrTable &at)libdap::BaseTypevirtual
    set_attributes(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_attributes_nocopy(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_in_selection(bool state)libdap::Constructorvirtual
    set_is_dap4(const bool v) (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    set_length(int)libdap::BaseTypeinlinevirtual
    set_name(const string &n)libdap::BaseTypevirtual
    set_parent(BaseType *parent)libdap::BaseTypevirtual
    set_read_p(bool state)libdap::Constructorvirtual
    set_send_p(bool state)libdap::Constructorvirtual
    set_synthesized_p(bool state)libdap::BaseTypevirtual
    set_type(const Type &t)libdap::BaseTypevirtual
    synthesized_p()libdap::BaseTypevirtual
    toString()libdap::BaseTypevirtual
    transfer_attributes(AttrTable *at_container)libdap::Gridvirtual
    transform_to_dap2(AttrTable *parent_attr_table)libdap::BaseTypevirtual
    transform_to_dap4(D4Group *root, Constructor *container)libdap::Gridvirtual
    type() constlibdap::BaseTypevirtual
    type_name() constlibdap::BaseTypevirtual
    val2buf(void *, bool)libdap::Constructorinlinevirtual
    var(const string &name, bool exact_match=true, btp_stack *s=0)libdap::Constructorvirtual
    var(const string &n, btp_stack &s)libdap::Constructorvirtual
    var_begin()libdap::Constructor
    var_end()libdap::Constructor
    var_rbegin()libdap::Constructor
    var_rend()libdap::Constructor
    Vars_citer typedef (defined in libdap::Constructor)libdap::Constructor
    Vars_iter typedef (defined in libdap::Constructor)libdap::Constructor
    Vars_riter typedef (defined in libdap::Constructor)libdap::Constructor
    width(bool constrained=false) constlibdap::Constructorvirtual
    ~BaseType() (defined in libdap::BaseType)libdap::BaseTypevirtual
    ~Constructor() (defined in libdap::Constructor)libdap::Constructorvirtual
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    ~Grid() (defined in libdap::Grid)libdap::Gridvirtual
    -
    - - - - diff --git a/html/classlibdap_1_1Grid.html b/html/classlibdap_1_1Grid.html deleted file mode 100644 index 58cd9f0ee..000000000 --- a/html/classlibdap_1_1Grid.html +++ /dev/null @@ -1,3731 +0,0 @@ - - - - - - - -libdap: libdap::Grid Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    - -

    Holds the Grid data type. - More...

    - -

    #include <Grid.h>

    -
    -Inheritance diagram for libdap::Grid:
    -
    -
    Inheritance graph
    - - - - - -
    - - - - - - - - - - - - - - - - -

    -Public Types

    -typedef stack< BaseType * > btp_stack
     
    -typedef std::vector< BaseType * >::const_iterator Map_citer
     
    -typedef std::vector< BaseType * >::iterator Map_iter
     
    -typedef std::vector< BaseType * >::reverse_iterator Map_riter
     
    -typedef std::vector< BaseType * >::const_iterator Vars_citer
     
    -typedef std::vector< BaseType * >::iterator Vars_iter
     
    -typedef std::vector< BaseType * >::reverse_iterator Vars_riter
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual Arrayadd_map (Array *p_new_map, bool add_copy)
     
    virtual void add_var (BaseType *bt, Part part)
     
    virtual void add_var_nocopy (BaseType *bt, Part part)
     
    BaseTypearray_var ()
     Returns the Grid Array. More...
     
    virtual unsigned int buf2val (void **)
     Reads the class data. More...
     
    virtual bool check_semantics (string &msg, bool all=false)
     Return true if this Grid is well formed. More...
     
    virtual void clear_constraint ()
     
    virtual void clear_local_data ()
     
    virtual int components (bool constrained=false)
     Returns the number of components in the Grid object. More...
     
    virtual void compute_checksum (Crc32 &checksum)
     include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum. More...
     
    virtual bool d4_ops (BaseType *b, int op)
     Evaluator a relop for DAP4. More...
     
    virtual string dataset () const
     Returns the name of the dataset used to create this instance. More...
     
    virtual void del_var (const string &name)
     
    -virtual void del_var (Vars_iter i)
     
    virtual bool deserialize (UnMarshaller &um, DDS *dds, bool reuse=false)
     Receive data from the net. More...
     
    virtual void deserialize (D4StreamUnMarshaller &um, DMR &dmr)
     
    virtual void dump (ostream &strm) const
     dumps information about this object More...
     
    virtual int element_count (bool leaves=false)
     Count the members of constructor types. More...
     
    virtual std::string FQN () const
     
    Arrayget_array ()
     Returns the Grid Array. This method returns the array using an Array*, so no cast is required. More...
     
    virtual AttrTableget_attr_table ()
     
    Map_iter get_map_iter (int i)
     
    virtual BaseTypeget_parent () const
     
    BaseTypeget_var_index (int i)
     
    Vars_iter get_vars_iter (int i)
     
     Grid (const string &n)
     The Grid constructor. More...
     
     Grid (const string &n, const string &d)
     The Grid constructor. More...
     
     Grid (const Grid &rhs)
     The Grid copy constructor. More...
     
    virtual void intern_data (ConstraintEvaluator &eval, DDS &dds)
     
    virtual void intern_data ()
     Read data into this variable. More...
     
    virtual bool is_constructor_type () const
     Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable. More...
     
    virtual bool is_dap2_only_type ()
     
    -virtual bool is_dap4 () const
     
    virtual bool is_in_selection ()
     Is this variable part of the current selection? More...
     
    virtual bool is_linear ()
     Check to see whether this variable can be printed simply. More...
     
    virtual bool is_simple_type () const
     Returns true if the instance is a numeric, string or URL type variable. More...
     
    virtual bool is_vector_type () const
     Returns true if the instance is a vector (i.e., array) type variable. More...
     
    virtual int length () const
     How many elements are in this variable. More...
     
    Map_iter map_begin ()
     Returns an iterator referencing the first Map vector. More...
     
    Map_iter map_end ()
     
    Map_riter map_rbegin ()
     Returns an iterator referencing the first Map vector. More...
     
    Map_riter map_rend ()
     
    virtual string name () const
     Returns the name of the class instance. More...
     
    -Gridoperator= (const Grid &rhs)
     
    virtual bool ops (BaseType *b, int op)
     Evaluate relational operators. More...
     
    virtual Arrayprepend_map (Array *p_new_map, bool add_copy)
     
    void print_dap4 (XMLWriter &xml, bool constrained=false)
     
    virtual void print_decl (ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_decl (FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_val (ostream &out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_val (FILE *out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_xml (ostream &out, string space=" ", bool constrained=false)
     
    virtual void print_xml (FILE *out, string space=" ", bool constrained=false)
     
    virtual void print_xml_writer (XMLWriter &xml, bool constrained=false)
     
    virtual bool projection_yields_grid ()
     
    virtual BaseTypeptr_duplicate ()
     
    virtual bool read ()
     simple implementation of read that iterates through vars and calls read on them More...
     
    virtual bool read_p ()
     Has this variable been read? More...
     
    virtual bool send_p ()
     Should this variable be sent? More...
     
    virtual bool serialize (ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
     Move data to the net, then remove them from the object. More...
     
    virtual void serialize (D4StreamMarshaller &m, DMR &dmr, bool filter=false)
     Serialize a Constructor. More...
     
    virtual void set_array (Array *p_new_arr)
     
    virtual void set_attr_table (const AttrTable &at)
     
    virtual void set_in_selection (bool state)
     Set the in_selection property. More...
     
    -virtual void set_is_dap4 (const bool v)
     
    virtual void set_length (int)
     Set the number of elements for this variable. More...
     
    virtual void set_name (const string &n)
     Sets the name of the class instance. More...
     
    virtual void set_parent (BaseType *parent)
     
    virtual void set_read_p (bool state)
     Sets the value of the read_p property. More...
     
    virtual void set_send_p (bool state)
     
    virtual void set_synthesized_p (bool state)
     
    virtual void set_type (const Type &t)
     Sets the type of the class instance. More...
     
    virtual bool synthesized_p ()
     
    virtual string toString ()
     
    virtual void transfer_attributes (AttrTable *at_container)
     
    virtual std::vector< BaseType * > * transform_to_dap2 (AttrTable *parent_attr_table)
     DAP4 to DAP2 transform. More...
     
    virtual void transform_to_dap4 (D4Group *root, Constructor *container)
     DAP2 to DAP4 transform. More...
     
    virtual Type type () const
     Returns the type of the class instance. More...
     
    virtual string type_name () const
     Returns the type of the class instance as a string. More...
     
    virtual unsigned int val2buf (void *, bool)
     Loads class data. More...
     
    virtual BaseTypevar (const string &name, bool exact_match=true, btp_stack *s=0)
     btp_stack no longer needed; use back pointers (BaseType::get_parent()) More...
     
    virtual BaseTypevar (const string &n, btp_stack &s)
     
    Vars_iter var_begin ()
     
    Vars_iter var_end ()
     
    Vars_riter var_rbegin ()
     
    Vars_riter var_rend ()
     
    virtual unsigned int width (bool constrained=false) const
     
    virtual D4Attributesattributes ()
     
    -virtual void set_attributes (D4Attributes *)
     
    -virtual void set_attributes_nocopy (D4Attributes *)
     
    - - - -

    -Static Public Member Functions

    -static AttrTablemake_dropped_vars_attr_table (vector< BaseType *> *dropped_vars)
     
    - - - - - - - - - - - - -

    -Protected Member Functions

    -void m_duplicate (const Constructor &s)
     
    -void m_duplicate (const Grid &s)
     
    void m_duplicate (const BaseType &bt)
     Perform a deep copy. More...
     
    -BaseTypem_exact_match (const string &name, btp_stack *s=0)
     
    -BaseTypem_leaf_match (const string &name, btp_stack *s=0)
     
    - - - - - - - -

    -Protected Attributes

    -bool d_in_selection
     
    -bool d_is_synthesized
     
    -std::vector< BaseType * > d_vars
     
    -

    Detailed Description

    -

    Holds the Grid data type.

    -

    The Grid data type is a collection of an Array and a set of ``Map'' vectors. The Map vectors are one-dimensional arrays corresponding to each dimension of the central Array. Using this scheme, a Grid can represent, in a rectilinear array, data which is not in reality rectilinear. An example will help make it clear.

    -

    Assume that the following array contains measurements of some real quantity, conducted at nine different points in space:

    -
    -A = [ 1  2  3  4 ]
    -    [ 2  4  6  8 ]
    -    [ 3  6  9  12]
    -

    To locate this Array in the real world, we could note the location of one corner of the grid, and the grid spacing. This would allow us to calculate the location of any of the other points of the Array.

    -

    This approach will not work, however, unless the grid spacing is precisely regular. If the distance between Row 1 and Row 2 is not the same as the distance between Row 2 and Row 3, the scheme will break down. The solution is to equip the Array with two Map vectors that define the location of each row or column of the array:

    -
    -     A = [ 1  2  3  4 ] Row = [ 0 ]
    -         [ 2  4  6  8 ]       [ 3 ]
    -         [ 3  6  9  12]       [ 8 ]
    Column = [ 0  2  8  27]
    -

    The real location of the point in the first row and column of the array is now exactly fixed at (0,0), and the point in the last row and last column is at (8,27).

    -

    The Grid data type has two parts: an Array, and a singly-linked list of Map vectors to describe the Array. The access functions for this class include a function to return the Array (get_array()), and a set of functions for cycling through the list of Map vectors.

    -
    Todo:

    Move, in some sense, the d_map_vars up to Constructor. Look at using Constructor's _var field for these.

    -

    Along the same lines as the previous item, consider removing the Part enum and adopting the convention that the first variable added is the array and any subsequent variables are maps.

    -
    -
    See also
    Array
    - -

    Definition at line 122 of file Grid.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ Grid() [1/3]

    - -
    -
    - - - - - - - - -
    libdap::Grid::Grid (const string & n)
    -
    - -

    The Grid constructor.

    -

    The Grid constructor requires only the name of the variable to be created. The name may be omitted, which will create a nameless variable. This may be adequate for some applications.

    -
    Parameters
    - - -
    nA string containing the name of the variable to be created.
    -
    -
    - -

    Definition at line 86 of file Grid.cc.

    - -
    -
    - -

    ◆ Grid() [2/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    libdap::Grid::Grid (const string & n,
    const string & d 
    )
    -
    - -

    The Grid constructor.

    -

    The Grid server-side constructor requires the name of the variable to be created and the dataset name from which this variable is created. Used when creating variables on the server side.

    -
    Parameters
    - - - -
    nA string containing the name of the variable to be created.
    dA string containing the name of the dataset from which this variable is being created.
    -
    -
    - -

    Definition at line 100 of file Grid.cc.

    - -
    -
    - -

    ◆ Grid() [3/3]

    - -
    -
    - - - - - - - - -
    libdap::Grid::Grid (const Gridrhs)
    -
    - -

    The Grid copy constructor.

    - -

    Definition at line 105 of file Grid.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ add_map()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    Array * libdap::Grid::add_map (Arrayp_new_map,
    bool add_as_copy 
    )
    -
    -virtual
    -
    -

    Add the given array p_new_map as a new map vector for the Grid.

    -

    If add_as_copy, p_new_map will be cloned and the copy added, leaving p_new_map in the control of the caller.

    -

    If !add_as_copy, p_new_map will be explicitly added as the new map vector.

    -

    The actual Array* in the Grid will be returned, either the address of the COPY if add_as_copy, else p_new_map itself if !add_as_copy.

    -

    It is an exception for p_new_map to be null.

    -
    Parameters
    - - - -
    p_new_mapthe map we want to add
    add_as_copywhether to add p_new_map explicitly and take onwership of memory or to add a clone of it and leave control to caller.
    -
    -
    -
    Returns
    the actual object stored in the Grid, whether p_new_map, or the address of the copy.
    - -

    Definition at line 455 of file Grid.cc.

    - -
    -
    - -

    ◆ add_var()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Grid::add_var (BaseTypebt,
    Part part 
    )
    -
    -virtual
    -
    -

    Add an array or map to the Grid.

    -

    The original version of this method required that the part parameter be present. However, this complicates using the class from a parser (e.g., the schema-based XML parser). I have modified the method so that if part is nil (the default), then the first variable added is the array and subsequent variables are maps. This matches the behavior in the Java DAP implementation.

    -
    Parameters
    - - - -
    btArray or Map variable
    partis this an array or a map. If not present, first bt is the array and subsequent bts are maps.
    -
    -
    -

    d_array_var

    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 264 of file Grid.cc.

    - -
    -
    - -

    ◆ add_var_nocopy()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Grid::add_var_nocopy (BaseTypebt,
    Part part 
    )
    -
    -virtual
    -
    -

    Add an array or map to the Grid.

    -
    Note
    The original version of this method required that the part parameter be present. However, this complicates using the class from a parser (e.g., the schema-based XML parser). I have modified the method so that if part is nil (the default), then the first variable added is the array and subsequent variables are maps. This matches the behavior in the Java DAP implementation.
    -
    -This version of the method does not the BaseType before adding it. The caller must not free the BaseType object.
    -
    Parameters
    - - - -
    btArray or Map variable
    partis this an array or a map. If not present, first bt is the array and subsequent bts are maps.
    -
    -
    -

    get_array()

    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 330 of file Grid.cc.

    - -
    -
    - -

    ◆ array_var()

    - -
    -
    - - - - - - - -
    BaseType * libdap::Grid::array_var ()
    -
    - -

    Returns the Grid Array.

    -
    Deprecated:
    -
    See also
    get_array()
    - -

    Definition at line 501 of file Grid.cc.

    - -
    -
    - -

    ◆ attributes()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4Attributes * libdap::BaseType::attributes ()
    -
    -virtualinherited
    -
    -

    DAP4 Attribute methods

    - -

    Definition at line 599 of file BaseType.cc.

    - -
    -
    - -

    ◆ buf2val()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual unsigned int libdap::Constructor::buf2val (void ** val)
    -
    -inlinevirtualinherited
    -
    - -

    Reads the class data.

    -

    Reads the class data into the memory referenced by val. The caller should either allocate enough storage to val to hold the class data or set *val to null. If *val is NULL, memory will be allocated by this function with new(). If the memory is allocated this way, the caller is responsible for deallocating that memory. Array and values for simple types are stored as C would store an array.

    -
    Deprecated:
    Use value() in the leaf classes.
    -
    Parameters
    - - -
    valA pointer to a pointer to the memory into which the class data will be copied. If the value pointed to is NULL, memory will be allocated to hold the data, and the pointer value modified accordingly. The calling program is responsible for deallocating the memory references by this pointer.
    -
    -
    -
    Returns
    The size (in bytes) of the information copied to val.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 118 of file Constructor.h.

    - -
    -
    - -

    ◆ check_semantics()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::Grid::check_semantics (string & msg,
    bool all = false 
    )
    -
    -virtual
    -
    - -

    Return true if this Grid is well formed.

    -

    The array dimensions and number of map vectors must match and both the array and maps must be of simple-type elements.

    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 937 of file Grid.cc.

    - -
    -
    - -

    ◆ clear_constraint()

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::Grid::clear_constraint ()
    -
    -virtual
    -
    -

    For each of the Array and Maps in this Grid, call clear_constraint().

    - -

    Definition at line 736 of file Grid.cc.

    - -
    -
    - -

    ◆ clear_local_data()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual void libdap::BaseType::clear_local_data ()
    -
    -inlinevirtualinherited
    -
    -

    Remove any read or set data in the private data of the variable, setting read_p() to false. Used to clear any dynamically allocated storage that holds (potentially large) data. For the simple types, this no-op version is all that's needed. Vector and some other classes define a special version and have serialize() implementations that call it to free data as soon as possible after sending it.

    -
    Note
    Added 7/5/15 jhrg
    -
    -Any specialization of this should make sure to reset the read_p property.
    - -

    Reimplemented in libdap::Sequence, libdap::Vector, libdap::D4Sequence, and libdap::D4Opaque.

    - -

    Definition at line 179 of file BaseType.h.

    - -
    -
    - -

    ◆ components()

    - -
    -
    - - - - - -
    - - - - - - - - -
    int libdap::Grid::components (bool constrained = false)
    -
    -virtual
    -
    - -

    Returns the number of components in the Grid object.

    -

    Returns the number of components in the Grid object. This is equal to one plus the number of Map vectors. If there is a constraint expression in effect, the number of dimensions needed may be smaller than the actual number in the stored data. (Or the Array might not even be requested.) In this case, a user can request the smaller number with the constrained flag.

    -
    Returns
    The number of components in the Grid object.
    -
    Parameters
    - - -
    constrainedIf TRUE, the function returns the number of components contained in the constrained Grid. Since a constraint expression might well eliminate one or more of the Grid dimensions, this number can be lower than the actual number of components. If this parameter is FALSE (the default), the actual number of components will be returned.
    -
    -
    - -

    Definition at line 585 of file Grid.cc.

    - -
    -
    - -

    ◆ compute_checksum()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::compute_checksum (Crc32checksum)
    -
    -virtualinherited
    -
    - -

    include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum.

    -
    Parameters
    - - -
    checksumA Crc32 instance that holds the current checksum.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 550 of file Constructor.cc.

    - -
    -
    - -

    ◆ d4_ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::d4_ops (BaseTypeb,
    int op 
    )
    -
    -virtualinherited
    -
    - -

    Evaluator a relop for DAP4.

    -

    This method is used by the filter expression evaluation code in DAP4. Each of the 'data type' classes that support relops must overload this method. In an expression of the form arg1 op arg2, this object is arg1, the parameter 'b' is arg2 and op is the relational operator.

    -
    Note
    I used the same relop codes for DAP4 as in the DAP2 parser/scanner which makes for some coupling between them, but cuts way down on the duplication of the evaluator logic, which is somewhat involved.
    -
    Parameters
    - - - -
    bThe second argument in the relational expression
    opThe infix relational operator
    -
    -
    -
    Returns
    True if the expression is true, False otherwise.
    - -

    Reimplemented in libdap::Str, libdap::Int32, libdap::Float32, libdap::Byte, libdap::Float64, libdap::Int16, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 1282 of file BaseType.cc.

    - -
    -
    - -

    ◆ dataset()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::dataset () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the dataset used to create this instance.

    -

    A dataset from which the data is to be read. The meaning of this string will vary among different types of data sources. It may be the name of a data file or an identifier used to read data from a relational database.

    - -

    Definition at line 358 of file BaseType.cc.

    - -
    -
    - -

    ◆ del_var()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::del_var (const string & n)
    -
    -virtualinherited
    -
    -

    Remove an element from a Constructor.

    -
    Parameters
    - - -
    nname of the variable to remove
    -
    -
    - -

    Definition at line 448 of file Constructor.cc.

    - -
    -
    - -

    ◆ deserialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::Constructor::deserialize (UnMarshallerum,
    DDSdds,
    bool reuse = false 
    )
    -
    -virtualinherited
    -
    - -

    Receive data from the net.

    -

    Receives data from the network connection identified by the source parameter. The data is put into the class data buffer according to the input dds.

    -

    This function is only used on the client side of the DODS client/server connection.

    -
    Parameters
    - - - - -
    umAn UnMarshaller that knows how to deserialize data types
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure. This would have been received from the server in an earlier transmission.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect.
    -
    -
    -
    Returns
    Always returns TRUE.
    -
    Exceptions
    - - -
    Errorwhen a problem reading from the UnMarshaller is found.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Sequence, and libdap::D4Sequence.

    - -

    Definition at line 540 of file Constructor.cc.

    - -
    -
    - -

    ◆ deserialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::deserialize (D4StreamUnMarshallerum,
    DMRdmr 
    )
    -
    -virtualinherited
    -
    -

    The DAP4 deserialization method.

    Parameters
    - - - -
    um
    dmr
    -
    -
    -
    Exceptions
    - - -
    Erroror InternalErr
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Sequence, and libdap::D4Group.

    - -

    Definition at line 609 of file Constructor.cc.

    - -
    -
    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Grid::dump (ostream & strm) const
    -
    -virtual
    -
    - -

    dumps information about this object

    -

    Displays the pointer value of this instance and information about this instance.

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the information to
    -
    -
    -
    Returns
    void
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 1033 of file Grid.cc.

    - -
    -
    - -

    ◆ element_count()

    - -
    -
    - - - - - -
    - - - - - - - - -
    int libdap::Constructor::element_count (bool leaves = false)
    -
    -virtualinherited
    -
    - -

    Count the members of constructor types.

    -

    Return a count of the total number of variables in this variable. This is used to count the number of variables held by a constructor variable - for simple type and vector variables it always returns 1.

    -

    For compound data types, there are two ways to count members. You can count the members, or you can count the simple members and add that to the count of the compound members. For example, if a Structure contains an Int32 and another Structure that itself contains two Int32 members, the element count of the top-level structure could be two (one Int32 and one Structure) or three (one Int32 by itself and two Int32's in the subsidiary Structure). Use the leaves parameter to control which kind of counting you desire.

    -
    Returns
    Returns 1 for simple types. For compound members, the count depends on the leaves argument.
    -
    Parameters
    - - -
    leavesThis parameter is only relevant if the object contains other compound data types. If FALSE, the function counts only the data variables mentioned in the object's declaration. If TRUE, it counts the simple members, and adds that to the sum of the counts for the compound members. This parameter has no effect for simple type variables.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 194 of file Constructor.cc.

    - -
    -
    - -

    ◆ FQN()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::Constructor::FQN () const
    -
    -virtualinherited
    -
    -

    Return the FQN for this variable. This will include the D4 Group component of the name.

    -
    Returns
    The FQN in a string
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Group.

    - -

    Definition at line 181 of file Constructor.cc.

    - -
    -
    - -

    ◆ get_array()

    - -
    -
    - - - - - - - -
    Array * libdap::Grid::get_array ()
    -
    - -

    Returns the Grid Array. This method returns the array using an Array*, so no cast is required.

    -
    Returns
    A pointer to the Grid's (dependent) data array
    - -

    Definition at line 518 of file Grid.cc.

    - -
    -
    - -

    ◆ get_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - -
    AttrTable & libdap::BaseType::get_attr_table ()
    -
    -virtualinherited
    -
    -

    Get this variable's AttrTable. It's generally a bad idea to return a reference to a contained object, but in this case it seems that building an interface inside BaseType is overkill.

    -

    Use the AttrTable methods to manipulate the table.

    - -

    Definition at line 582 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_map_iter()

    - -
    -
    - - - - - - - - -
    Grid::Map_iter libdap::Grid::get_map_iter (int i)
    -
    -

    Return the iterator for the ith map.

    Parameters
    - - -
    ithe index
    -
    -
    -
    Returns
    The corresponding Vars_iter
    - -

    Definition at line 563 of file Grid.cc.

    - -
    -
    - -

    ◆ get_parent()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::BaseType::get_parent () const
    -
    -virtualinherited
    -
    -

    Return a pointer to the Constructor or Vector which holds (contains) this variable. If this variable is at the top level, this method returns null.

    -
    Returns
    A BaseType pointer to the variable's parent.
    - -

    Definition at line 751 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_var_index()

    - -
    -
    - - - - - -
    - - - - - - - - -
    BaseType * libdap::Constructor::get_var_index (int i)
    -
    -inherited
    -
    -

    Return the BaseType pointer for the ith variable.

    Parameters
    - - -
    iThis index
    -
    -
    -
    Returns
    The corresponding BaseType*.
    - -

    Definition at line 397 of file Constructor.cc.

    - -
    -
    - -

    ◆ get_vars_iter()

    - -
    -
    - - - - - -
    - - - - - - - - -
    Constructor::Vars_iter libdap::Constructor::get_vars_iter (int i)
    -
    -inherited
    -
    -

    Return the iterator for the ith variable.

    Parameters
    - - -
    ithe index
    -
    -
    -
    Returns
    The corresponding Vars_iter
    - -

    Definition at line 388 of file Constructor.cc.

    - -
    -
    - -

    ◆ intern_data() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::intern_data (ConstraintEvaluatoreval,
    DDSdds 
    )
    -
    -virtualinherited
    -
    -

    Similar to using serialize() and deserialize() together in one object. Data are read as for serialize and those values are stored in the objects as deserialize() does but does not write and then read data to/from a stream.

    -

    This method is defined by the various data type classes. It calls the read() abstract method. Unlike serialize(), this method does not clear the memory use to hold the data values, so the caller should make sure to delete the DDS or the variable as soon as possible.

    -
    Parameters
    - - - -
    evalUse this as the constraint expression evaluator.
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Sequence, and libdap::D4Sequence.

    - -

    Definition at line 490 of file Constructor.cc.

    - -
    -
    - -

    ◆ intern_data() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::Constructor::intern_data ()
    -
    -virtualinherited
    -
    - -

    Read data into this variable.

    -
    Parameters
    - - - -
    evalEvaluator for a constraint expression
    dmrDMR for the whole dataset
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Sequence, and libdap::D4Group.

    - -

    Definition at line 556 of file Constructor.cc.

    - -
    -
    - -

    ◆ is_constructor_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_constructor_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable.

    -
    Returns
    True if the instance is a Structure, Sequence or Grid, False otherwise.
    - -

    Definition at line 412 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_dap2_only_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::Grid::is_dap2_only_type ()
    -
    -virtual
    -
    -

    Grid can only be used for DAP2.

    Note
    This might change depending on just how complex DAP4Array becomes, for example.
    - -

    Definition at line 246 of file Grid.cc.

    - -
    -
    - -

    ◆ is_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_in_selection ()
    -
    -virtualinherited
    -
    - -

    Is this variable part of the current selection?

    -

    Does this variable appear in either the selection part or as a function argument in the current constrain expression. If this property is set (true) then implementations of the read() method should read this variable.

    -
    Note
    This method does not check, nor does it know about the semantics of, string arguments passed to functions. Those functions might include variable names in strings; they are responsible for reading those variables. See the grid (func_grid_select()) for an example.
    -
    See also
    BaseType::read()
    - -

    Definition at line 703 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_linear()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::Constructor::is_linear ()
    -
    -virtualinherited
    -
    - -

    Check to see whether this variable can be printed simply.

    -

    True if the instance can be flattened and printed as a single table of values. For Arrays and Grids this is always false. For Structures and Sequences the conditions are more complex. The implementation provided by this class always returns false. Other classes should override this implementation.

    -
    Todo:
    Change the name to is_flattenable or something like that. 05/16/03 jhrg
    -
    Returns
    True if the instance can be printed as a single table of values, false otherwise.
    - -

    Reimplemented in libdap::Sequence, and libdap::Structure.

    - -

    Definition at line 823 of file Constructor.cc.

    - -
    -
    - -

    ◆ is_simple_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_simple_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a numeric, string or URL type variable.

    -
    Returns
    True if the instance is a scalar numeric, String or URL variable, False otherwise. Arrays (even of simple types) return False.
    -
    See also
    is_vector_type()
    - -

    Definition at line 393 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_vector_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_vector_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a vector (i.e., array) type variable.

    -
    Returns
    True if the instance is an Array, False otherwise.
    - -

    Definition at line 402 of file BaseType.cc.

    - -
    -
    - -

    ◆ length()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual int libdap::BaseType::length () const
    -
    -inlinevirtualinherited
    -
    - -

    How many elements are in this variable.

    -
    Todo:
    change the return type to int64_t
    -
    Returns
    The number of elements; 1 for scalars
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, libdap::Str, and libdap::D4Opaque.

    - -

    Definition at line 207 of file BaseType.h.

    - -
    -
    - -

    ◆ m_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::m_duplicate (const BaseTypebt)
    -
    -protectedinherited
    -
    - -

    Perform a deep copy.

    -

    Perform a deep copy. Copies the values of bt into *this. Pointers are dereferenced and their values are copied into a newly allocated instance.

    -
    Parameters
    - - -
    btThe source object.
    -
    -
    - -

    Definition at line 86 of file BaseType.cc.

    - -
    -
    - -

    ◆ map_begin()

    - -
    -
    - - - - - - - -
    Grid::Map_iter libdap::Grid::map_begin ()
    -
    - -

    Returns an iterator referencing the first Map vector.

    - -

    Definition at line 525 of file Grid.cc.

    - -
    -
    - -

    ◆ map_end()

    - -
    -
    - - - - - - - -
    Grid::Map_iter libdap::Grid::map_end ()
    -
    -

    Returns an iterator referencing the end of the list of Map vectors. It does not reference the last Map vector

    - -

    Definition at line 537 of file Grid.cc.

    - -
    -
    - -

    ◆ map_rbegin()

    - -
    -
    - - - - - - - -
    Grid::Map_riter libdap::Grid::map_rbegin ()
    -
    - -

    Returns an iterator referencing the first Map vector.

    - -

    Definition at line 544 of file Grid.cc.

    - -
    -
    - -

    ◆ map_rend()

    - -
    -
    - - - - - - - -
    Grid::Map_riter libdap::Grid::map_rend ()
    -
    -

    Returns an iterator referencing the end of the list of Map vectors. It does not reference the last Map vector

    - -

    Definition at line 554 of file Grid.cc.

    - -
    -
    - -

    ◆ name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::name () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the class instance.

    - -

    Definition at line 320 of file BaseType.cc.

    - -
    -
    - -

    ◆ ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::ops (BaseTypeb,
    int op 
    )
    -
    -virtualinherited
    -
    - -

    Evaluate relational operators.

    -

    This method contains the relational operators used by the constraint expression evaluator in the DDS class. Each class that wants to be able to evaluate relational expressions must overload this function. The implementation in BaseType throws an InternalErr exception. The DAP library classes Byte, ..., Url provide specializations of this method. It is not meaningful for classes such as Array because relational expressions using Array are not supported.

    -

    The op argument refers to a table generated by bison from the constraint expression parser. Use statements like the following to correctly interpret its value:

    -
    switch (op) {
    -    case EQUAL: return i1 == i2;
    -    case NOT_EQUAL: return i1 != i2;
    -    case GREATER: return i1 > i2;
    -    case GREATER_EQL: return i1 >= i2;
    -    case LESS: return i1 < i2;
    -    case LESS_EQL: return i1 <= i2;
    -    case REGEXP: throw Error("Regular expressions are not supported for integer values");
    -    default: throw Error("Unknown operator");
    -}
    -

    This function is used by the constraint expression evaluator.

    -
    Parameters
    - - - -
    bCompare the value of this instance with b.
    opAn integer index indicating which relational operator is implied. Choose one from the following: EQUAL, NOT_EQUAL, GREATER, GREATER_EQL, LESS, LESS_EQL, and REGEXP.
    -
    -
    -
    Returns
    The boolean value of the comparison.
    -
    See also
    BaseType::d4_ops(BaseType *, int)
    - -

    Reimplemented in libdap::D4Enum, libdap::Str, libdap::Int32, libdap::Float32, libdap::Byte, libdap::Float64, libdap::UInt32, libdap::D4Opaque, libdap::Int16, libdap::UInt16, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 1256 of file BaseType.cc.

    - -
    -
    - -

    ◆ prepend_map()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    Array * libdap::Grid::prepend_map (Arrayp_new_map,
    bool add_copy 
    )
    -
    -virtual
    -
    -

    Add pMap (or a clone if addAsCopy) to the FRONT of the maps list. This is needed if we are preserving Grid semantics but want to add a new OUTER dimension, whereas add_map appends to the end making a new INNER dimension.

    Parameters
    - - - -
    p_new_mapthe map to add or copy and add
    add_copyif true, copy pMap and add the copy.
    -
    -
    -
    Returns
    The actual memory stored in the Grid, either pMap (if !add_copy) or the ptr to the clone (if add_copy).
    - -

    Definition at line 484 of file Grid.cc.

    - -
    -
    - -

    ◆ print_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_dap4 (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the DAP4 XML representation for this variable. This method is used to build the DAP4 DMR response object.

    -
    Parameters
    - - - -
    xmlAn XMLWriter that will do the serialization
    constrainedTrue if the response should show the variables subject to the current constraint expression.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Group.

    - -

    Definition at line 768 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_decl() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Grid::print_decl (ostream & out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtual
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 753 of file Grid.cc.

    - -
    -
    - -

    ◆ print_decl() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Grid::print_decl (FILE * out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtual
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 744 of file Grid.cc.

    - -
    -
    - -

    ◆ print_val() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Grid::print_val (ostream & out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtual
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output ostream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 900 of file Grid.cc.

    - -
    -
    - -

    ◆ print_val() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Grid::print_val (FILE * out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtual
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output stream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 893 of file Grid.cc.

    - -
    -
    - -

    ◆ print_xml() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Grid::print_xml (ostream & out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtual
    -
    -
    Deprecated:
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 819 of file Grid.cc.

    - -
    -
    - -

    ◆ print_xml() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Grid::print_xml (FILE * out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtual
    -
    -
    Deprecated:
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 808 of file Grid.cc.

    - -
    -
    - -

    ◆ print_xml_writer()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Grid::print_xml_writer (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtual
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 847 of file Grid.cc.

    - -
    -
    - -

    ◆ projection_yields_grid()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::Grid::projection_yields_grid ()
    -
    -virtual
    -
    -

    Returns TRUE if the current projection will yield a Grid that will pass the check_semantics() function. A Grid that, when projected, will not pass the check_semantics() function must be sent as either a Structure of Arrays or a single Array depending on the projection.

    -

    The function first checks to see whether the Array is present. Then, for each dimension in the Array part, the function checks the corresponding Map vector to make sure it is present in the projected Grid. If for each projected dimension in the Array component, there is a matching Map vector, then the Grid is valid.

    -
    Returns
    TRUE if the projected grid is still a Grid. FALSE otherwise.
    - -

    Definition at line 692 of file Grid.cc.

    - -
    -
    - -

    ◆ ptr_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::Grid::ptr_duplicate ()
    -
    -virtual
    -
    -

    Clone this instance. Allocate a new instance and copy *this into it. This method must perform a deep copy.

    @note This method should \e not copy data values, but must copy all
    -other fields in the object.
    -
    Returns
    A newly allocated copy of this.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 116 of file Grid.cc.

    - -
    -
    - -

    ◆ read()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::Constructor::read ()
    -
    -virtualinherited
    -
    - -

    simple implementation of read that iterates through vars and calls read on them

    -
    Returns
    returns false to signify all has been read
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 476 of file Constructor.cc.

    - -
    -
    - -

    ◆ read_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read_p ()
    -
    -virtualinherited
    -
    - -

    Has this variable been read?

    -

    Returns true if the value(s) for this variable have been read from the data source, otherwise returns false. This method is used to determine when values need to be read using the read() method. When read_p() returns true, this library assumes that buf2val() (and other methods such as get_vec()) can be used to access the value(s) of a variable.

    -
    Returns
    True if the variable's value(s) have been read, false otherwise.
    - -

    Definition at line 480 of file BaseType.cc.

    - -
    -
    - -

    ◆ send_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::send_p ()
    -
    -virtualinherited
    -
    - -

    Should this variable be sent?

    -

    Returns the state of the send_p property. If true, this variable should be sent to the client, if false, it should not. If no constraint expression (CE) has been evaluated, this property is true for all variables in a data source (i.e., for all the variables listed in a DDS). If a CE has been evaluated, this property is true only for those variables listed in the projection part of the CE.

    -
    Returns
    True if the variable should be sent to the client, false otherwise.
    - -

    Definition at line 554 of file BaseType.cc.

    - -
    -
    - -

    ◆ serialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::Constructor::serialize (ConstraintEvaluatoreval,
    DDSdds,
    Marshallerm,
    bool ce_eval = true 
    )
    -
    -virtualinherited
    -
    - -

    Move data to the net, then remove them from the object.

    -

    Sends the data from the indicated (local) dataset through the connection identified by the Marshaller parameter. If the data is not already incorporated into the DDS object, read the data from the dataset. Once the data are sent (written to the Marshaller), they are deleted from the object and the object state is reset so that they will be read again if the read() method is called.

    -

    This function is only used on the server side of the client/server connection, and is generally only called from the ResponseBuilder functions. It has no BaseType implementation; each datatype child class supplies its own implementation.

    @param eval Use this as the constraint expression evaluator.
    -
    Parameters
    - - - - -
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    mA marshaller used to serialize data types
    ce_evalA boolean value indicating whether to evaluate the DODS constraint expression that may accompany this dataset. The constraint expression is stored in the dds.
    -
    -
    -
    Returns
    This method always returns true. Older versions used the return value to signal success or failure.
    -
    Note
    We changed the default behavior of this method so that it calls BaseType::clear_local_data() once the values are sent. This, combined with the behavior that read() is called by this method just before data are sent, means that data for any given variable remain in memory for the shortest time possible. Furthermore, since variables are serialized one at a time, no more than one variable's data will be in memory at any given time when using the default behavior. Some code - code that uses intern_data() or server functions - might alter this default behavior. Only Array (i.e. Vector), Sequence, D4Sequence and D4Opaque types actually hold data in dynamically allocated memory, so sonly those types have the new/changed behavior. This change was made on 7/5/15.
    -
    Exceptions
    - - - -
    InternalErr.
    Error.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Sequence, and libdap::D4Sequence.

    - -

    Definition at line 504 of file Constructor.cc.

    - -
    -
    - -

    ◆ serialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::serialize (D4StreamMarshallerm,
    DMRdmr,
    bool filter = false 
    )
    -
    -virtualinherited
    -
    - -

    Serialize a Constructor.

    -
    Todo:
    See notebook for 8/21/14
    -
    Parameters
    - - - - - -
    m
    dmrUnused
    evalUnused
    filterUnused
    -
    -
    -
    Exceptions
    - - -
    Erroris thrown if the value needs to be read and that operation fails.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Sequence, and libdap::D4Group.

    - -

    Definition at line 578 of file Constructor.cc.

    - -
    -
    - -

    ◆ set_array()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Grid::set_array (Arrayp_new_arr)
    -
    -virtual
    -
    -

    Set the Array part of the Grid to point to the memory p_new_arr. Grid takes control of the memory (no copy is made). If there already exists an array portion, the old one will be deleted to avoid leaks.

    -
    Note
    This code has been modified to use a new storage for the Grid's variables (the storage defined by Constructor).
    -
    Parameters
    - - -
    p_new_arrthe object to store as the array part of the grid.
    -
    -
    -

    d_array_var

    - -

    Definition at line 389 of file Grid.cc.

    - -
    -
    - -

    ◆ set_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_attr_table (const AttrTableat)
    -
    -virtualinherited
    -
    -

    Set this variable's attribute table.

    Parameters
    - - -
    atSource of the attributes.
    -
    -
    - -

    Definition at line 590 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::set_in_selection (bool state)
    -
    -virtualinherited
    -
    - -

    Set the in_selection property.

    -

    Set the in_selection property for this variable and all of its children.

    -
    Parameters
    - - -
    stateSet the property value to state.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 834 of file Constructor.cc.

    - -
    -
    - -

    ◆ set_length()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::BaseType::set_length (int )
    -
    -inlinevirtualinherited
    -
    - -

    Set the number of elements for this variable.

    -
    Todo:
    change param type to int64_t
    -
    Parameters
    - - -
    lThe number of elements
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, and libdap::Vector.

    - -

    Definition at line 214 of file BaseType.h.

    - -
    -
    - -

    ◆ set_name()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_name (const string & n)
    -
    -virtualinherited
    -
    - -

    Sets the name of the class instance.

    - -

    Reimplemented in libdap::Vector.

    - -

    Definition at line 344 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_parent()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_parent (BaseTypeparent)
    -
    -virtualinherited
    -
    -

    Set the parent property for this variable.

    -
    Note
    Added ability to set parent to null. 10/19/12 jhrg
    -
    Parameters
    - - -
    parentPointer to the Constructor of Vector parent variable or null if the variable has no parent (if it is at the top-level of a DAP2/3 DDS).
    -
    -
    -
    Exceptions
    - - -
    InternalErrthrown if called with anything other than a Constructor, Vector or Null.
    -
    -
    - -

    Definition at line 733 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_read_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::set_read_p (bool state)
    -
    -virtualinherited
    -
    - -

    Sets the value of the read_p property.

    -

    Sets the value of the read_p property. This indicates that the value(s) of this variable has/have been read. An implementation of the read() method should use this to set the read_p property to true.

    -
    Note
    If the is_synthesized property is true, this method will not alter the is_read property. If you need that behavior, specialize the method in your subclasses if the various types.
    -
    -For most of the types the default implementation of this method is fine. However, if you're building a server which must handle data represented using nested sequences, then you may need to provide a specialization of Sequence::set_read_p(). By default Sequence::set_read_p() recursively sets the read_p property for all child variables to state. For servers where one Sequence reads an outer set of values and another reads an inner set, this is cumbersome. In such a case, it is easier to specialize Sequence::set_read_p() so that it does not recursively set the read_p property for the inner Sequence. Be sure to see the documentation for the read() method!
    -
    Todo:
    Look at making synthesized variables easier to implement and at making them more integrated into the overall CE evaluation process. Maybe the code that computes the synthesized var's value should be in the that variable's read() method? This might provide a way to get rid of the awkward 'projection functions' by replacing them with real children of BaseType. It would also provide a way to clean up the way the synthesized_p prop intrudes on the read_p prop.
    -
    See also
    BaseType::read()
    -
    Parameters
    - - -
    stateSet the read_p property to this state.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Group.

    - -

    Definition at line 218 of file Constructor.cc.

    - -
    -
    - -

    ◆ set_send_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::set_send_p (bool state)
    -
    -virtualinherited
    -
    -

    Sets the value of the send_p flag. This function is meant to be called from within the constraint evaluator of other code which determines that this variable should be returned to the client. Data are ready to be sent when both the d_is_send and d_is_read flags are set to TRUE.

    -
    Parameters
    - - -
    stateThe logical state to set the send_p flag.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Group.

    - -

    Definition at line 208 of file Constructor.cc.

    - -
    -
    - -

    ◆ set_synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_synthesized_p (bool state)
    -
    -virtualinherited
    -
    -

    Set the synthesized flag. Before setting this flag be sure to set the read_p() state. Once this flag is set you cannot alter the state of the read_p flag!

    -
    See also
    synthesized_p()
    - -

    Definition at line 463 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_type()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_type (const Typet)
    -
    -virtualinherited
    -
    - -

    Sets the type of the class instance.

    - -

    Definition at line 372 of file BaseType.cc.

    - -
    -
    - -

    ◆ synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::synthesized_p ()
    -
    -virtualinherited
    -
    -

    Returns true if the variable is a synthesized variable. A synthesized variable is one that is added to the dataset by the server (usually with a `projection function'.

    - -

    Definition at line 452 of file BaseType.cc.

    - -
    -
    - -

    ◆ toString()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::toString ()
    -
    -virtualinherited
    -
    -

    Write out the object's internal fields in a string. To be used for debugging when regular inspection w/ddd or gdb isn't enough.

    -
    Returns
    A string which shows the object's internal stuff.
    - -

    Reimplemented in libdap::Sequence.

    - -

    Definition at line 184 of file BaseType.cc.

    - -
    -
    - -

    ◆ transfer_attributes()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Grid::transfer_attributes (AttrTableat_container)
    -
    -virtual
    -
    -

    All the attributes in a AttrTable for a Grid go in AttrTable for the Array.

    -
    Parameters
    - - -
    at_container
    -
    -
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 610 of file Grid.cc.

    - -
    -
    - -

    ◆ transform_to_dap2()

    - -
    -
    - - - - - -
    - - - - - - - - -
    std::vector< BaseType * > * libdap::BaseType::transform_to_dap2 (AttrTableparent_attr_table)
    -
    -virtualinherited
    -
    - -

    DAP4 to DAP2 transform.

    -

    For the current BaseType, return a DAP2 'copy' of the variable.

    -
    Note
    For most DAP4 types, in this implementation of DAP2 the corresponding DAP4 type is the same. These types have a different representations in DAP2 and DAP4: Sequences (which are D4Sequences in the DAP4 implementation),
      -
    • Grids (which are semantically subsumed by coverages in DAP4)
    • -
    • Arrays (which use shared dimensions in DAP4)
    • -
    -
    -

    Additionally DAP4 adds the following types:

      -
    • UInt8, Int8, and Char which map to Byte in DAP2.
    • -
    • Int64, Unit64 which have no natural representation in DAP2.
    • -
    • Opaque Possible Byte stuff[] plus metadata?
    • -
    • Enum's can be represented as Int32.
    • -
    • Groups, with the exception of the root group "disappear" into the names of their member variables. Specifically the Group name is add as a prefix followed by a "/" separator to the names of all of the Group's member groups variables.
    • -
    -
    Parameters
    - - -
    TheAttrTable pointer parent_attr_table is used by Groups, which disappear from the DAP2 representation. Their children are returned in the the BAseType vector their attributes are added to parent_attr_table;
    -
    -
    -
    Returns
    A pointer to a vector of BaseType pointers (right?). In most cases this vector will contain a single pointer but DAP4 types 'disappear' such as Group will return all of their member variables in the vector. DAP4 types with no representation in DAP2 (ex: UInt64) the will return a NULL pointer and so this must be tested!
    - -

    Reimplemented in libdap::Array, libdap::D4Enum, libdap::D4Group, libdap::D4Opaque, libdap::Byte, libdap::Structure, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 259 of file BaseType.cc.

    - -
    -
    - -

    ◆ transform_to_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Grid::transform_to_dap4 (D4Grouproot,
    Constructorcontainer 
    )
    -
    -virtual
    -
    - -

    DAP2 to DAP4 transform.

    -

    For the current BaseType, return a DAP4 'copy' of the variable.

    -
    Note
    For most DAP2 types, in this implementation of DAP4 the corresponding DAP4 type is the same. The different types are Sequences (which are D4Sequences in the DAP4 implementation), Grids (which are coverages) and Arrays (which use shared dimensions).
    -
    Parameters
    - - - -
    rootThe root group that should hold this new variable. Add Group-level stuff here (e.g., D4Dimensions).
    containerAdd the new variable to this container.
    -
    -
    -
    Returns
    A pointer to the transformed variable
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 148 of file Grid.cc.

    - -
    -
    - -

    ◆ type()

    - -
    -
    - - - - - -
    - - - - - - - -
    Type libdap::BaseType::type () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance.

    - -

    Definition at line 365 of file BaseType.cc.

    - -
    -
    - -

    ◆ type_name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::type_name () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance as a string.

    - -

    Definition at line 379 of file BaseType.cc.

    - -
    -
    - -

    ◆ val2buf()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    virtual unsigned int libdap::Constructor::val2buf (void * val,
    bool reuse 
    )
    -
    -inlinevirtualinherited
    -
    - -

    Loads class data.

    -

    Store the value pointed to by val in the object's internal buffer. This function does not perform any checks, so users must be sure that the thing pointed to can actually be stored in the object's buffer.

    -

    Only simple objects (Int, Float, Byte, and so on) and arrays of these simple objects may be stored using this function. To put data into more complex constructor types, use the functions provided by that class.

    -
    Deprecated:
    Use set_value() in the leaf classes.
    -
    Parameters
    - - - -
    valA pointer to the data to be inserted into the class data buffer.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect. This is currently used only in the Vector class.
    -
    -
    -
    Returns
    The size (in bytes) of the information copied from val.
    -
    See also
    Grid
    -
    -Vector::val2buf
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 115 of file Constructor.h.

    - -
    -
    - -

    ◆ var() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::Constructor::var (const string & name,
    bool exact_match = true,
    btp_stack * s = 0 
    )
    -
    -virtualinherited
    -
    - -

    btp_stack no longer needed; use back pointers (BaseType::get_parent())

    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 267 of file Constructor.cc.

    - -
    -
    - -

    ◆ var() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::Constructor::var (const string & n,
    btp_stack & s 
    )
    -
    -virtualinherited
    -
    -
    Deprecated:
    -
    Deprecated:
    See comment in BaseType
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 279 of file Constructor.cc.

    - -
    -
    - -

    ◆ var_begin()

    - -
    -
    - - - - - -
    - - - - - - - -
    Constructor::Vars_iter libdap::Constructor::var_begin ()
    -
    -inherited
    -
    -

    Returns an iterator referencing the first structure element.

    - -

    Definition at line 356 of file Constructor.cc.

    - -
    -
    - -

    ◆ var_end()

    - -
    -
    - - - - - -
    - - - - - - - -
    Constructor::Vars_iter libdap::Constructor::var_end ()
    -
    -inherited
    -
    -

    Returns an iterator referencing the end of the list of structure elements. Does not reference the last structure element.

    - -

    Definition at line 364 of file Constructor.cc.

    - -
    -
    - -

    ◆ var_rbegin()

    - -
    -
    - - - - - -
    - - - - - - - -
    Constructor::Vars_riter libdap::Constructor::var_rbegin ()
    -
    -inherited
    -
    -

    Return a reverse iterator that references the last element.

    - -

    Definition at line 371 of file Constructor.cc.

    - -
    -
    - -

    ◆ var_rend()

    - -
    -
    - - - - - -
    - - - - - - - -
    Constructor::Vars_riter libdap::Constructor::var_rend ()
    -
    -inherited
    -
    -

    Return a reverse iterator that references a point 'before' the first element.

    - -

    Definition at line 379 of file Constructor.cc.

    - -
    -
    - -

    ◆ width()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::Constructor::width (bool constrained = false) const
    -
    -virtualinherited
    -
    -

    This version of width simply returns the same thing as width() for simple types and Arrays. For Structure it returns the total size if constrained is false, or the size of the elements in the current projection if true.

    -
    Parameters
    - - -
    constrainedIf true, return the size after applying a constraint.
    -
    -
    -
    Returns
    The number of bytes used by the variable.
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 249 of file Constructor.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1Grid.js b/html/classlibdap_1_1Grid.js deleted file mode 100644 index 7d45c7b3c..000000000 --- a/html/classlibdap_1_1Grid.js +++ /dev/null @@ -1,109 +0,0 @@ -var classlibdap_1_1Grid = -[ - [ "btp_stack", "classlibdap_1_1Grid.html#ae9c6e71855b90a0e552713011c9ab81f", null ], - [ "Map_citer", "classlibdap_1_1Grid.html#ad147322e168c6750893b6913d7f3edc5", null ], - [ "Map_iter", "classlibdap_1_1Grid.html#a69ee284e8087d1482373989f3256f95d", null ], - [ "Map_riter", "classlibdap_1_1Grid.html#a1c1791bdfac09f6ec42a71089fdccc75", null ], - [ "Vars_citer", "classlibdap_1_1Grid.html#a5a585c58a099833c4ca26561963e0f83", null ], - [ "Vars_iter", "classlibdap_1_1Grid.html#a2b73df890f61ebb628359c8fd12839b0", null ], - [ "Vars_riter", "classlibdap_1_1Grid.html#a6122400e3f40d457751fb0372a650d03", null ], - [ "Grid", "classlibdap_1_1Grid.html#a75774a8fe1c7c7ec9a1e48a7d6d2cbc0", null ], - [ "Grid", "classlibdap_1_1Grid.html#adec10faa3280dde1bee9c1bf2eda9038", null ], - [ "Grid", "classlibdap_1_1Grid.html#ad9c190d610f40faee6165467f554fb9a", null ], - [ "~Grid", "classlibdap_1_1Grid.html#a6a81c2fe6689b4159d7ea9e6eb8f5e78", null ], - [ "add_map", "classlibdap_1_1Grid.html#ad24067d02100d7ad77053d2fd9cac680", null ], - [ "add_var", "classlibdap_1_1Grid.html#ae8356b6e1b8c6c67718bb9bfefd9f7e8", null ], - [ "add_var_nocopy", "classlibdap_1_1Grid.html#afa0b5bb14fec2675e7fd7da245e95ca1", null ], - [ "array_var", "classlibdap_1_1Grid.html#a13f73ec1242460db6be3b7a818c8328f", null ], - [ "attributes", "classlibdap_1_1Grid.html#a97452f06d2188eb838399a709246b5e9", null ], - [ "buf2val", "classlibdap_1_1Grid.html#ac4dc7e8099322b5b403a7d0ae9079006", null ], - [ "check_semantics", "classlibdap_1_1Grid.html#ae66a262518b81ff354061528654fae75", null ], - [ "clear_constraint", "classlibdap_1_1Grid.html#a3b7ce41c5ab7b86bdb30508d39127600", null ], - [ "clear_local_data", "classlibdap_1_1Grid.html#aaddb97a4efbe035f41deaf03c6e8683f", null ], - [ "components", "classlibdap_1_1Grid.html#ad26dc472b37af0abeb540a43fb04d8dc", null ], - [ "compute_checksum", "classlibdap_1_1Grid.html#a287ab9a4deb81a8ced6d8432be647925", null ], - [ "d4_ops", "classlibdap_1_1Grid.html#a512a356f31ed6c4c1a368da0b054408a", null ], - [ "dataset", "classlibdap_1_1Grid.html#a47521ce321a17e6ce217870cb6a1a7aa", null ], - [ "del_var", "classlibdap_1_1Grid.html#af38d3785c4a7cd0063cbb9fc5943333c", null ], - [ "del_var", "classlibdap_1_1Grid.html#a69291878fc48217902fb0dcf1e2e1aff", null ], - [ "deserialize", "classlibdap_1_1Grid.html#a63763d2bae05463b100e823fb461a784", null ], - [ "deserialize", "classlibdap_1_1Grid.html#a6f4253236d69c3c0ef64343136b5039b", null ], - [ "dump", "classlibdap_1_1Grid.html#acf0402fd88c5ab7d1307615f8597d002", null ], - [ "element_count", "classlibdap_1_1Grid.html#a1c2eecff00fa7e3af175c711d00fb86e", null ], - [ "FQN", "classlibdap_1_1Grid.html#afa6c06dab830b4e089641b44fea8293c", null ], - [ "get_array", "classlibdap_1_1Grid.html#a905ac86a44a9d8ce576056ba244cf558", null ], - [ "get_attr_table", "classlibdap_1_1Grid.html#a1fcd9537c67e3bf88964b2656ff5bac1", null ], - [ "get_map_iter", "classlibdap_1_1Grid.html#a30dd7f9fa8a28b4bf6ccd6e94a12b62c", null ], - [ "get_parent", "classlibdap_1_1Grid.html#a3459cdaa239c33ce111ef360d8dc3017", null ], - [ "get_var_index", "classlibdap_1_1Grid.html#ac2b4b28ed9d6f435129aa599ab809799", null ], - [ "get_vars_iter", "classlibdap_1_1Grid.html#a1e6d8224e04d75e3d2a21263957cd42f", null ], - [ "intern_data", "classlibdap_1_1Grid.html#a065056826ef9c6fb2d08463af9e15a34", null ], - [ "intern_data", "classlibdap_1_1Grid.html#a822a036364c56df5288a55670f51197e", null ], - [ "is_constructor_type", "classlibdap_1_1Grid.html#a8b8490e0047c6da52945699a132008ea", null ], - [ "is_dap2_only_type", "classlibdap_1_1Grid.html#afef375f10211131b5fbea773b0011e5c", null ], - [ "is_dap4", "classlibdap_1_1Grid.html#a7f6835cb5e5589ab5dad3fb4813d3bea", null ], - [ "is_in_selection", "classlibdap_1_1Grid.html#ae302ab2ec26e9fc5b575bf5d3d09aa5c", null ], - [ "is_linear", "classlibdap_1_1Grid.html#af26f89e9c0732a9c32bd5e15d716a7d7", null ], - [ "is_simple_type", "classlibdap_1_1Grid.html#aae57e5b270b3a015d40c8db10b9b5549", null ], - [ "is_vector_type", "classlibdap_1_1Grid.html#a7107c76dbcab71015141142383b6d022", null ], - [ "length", "classlibdap_1_1Grid.html#aadcda7a659157bc6a832d8a5fb775b3f", null ], - [ "m_duplicate", "classlibdap_1_1Grid.html#a88b282d06686fc88a74c91e289ef31d7", null ], - [ "m_duplicate", "classlibdap_1_1Grid.html#a86b8fa7bc7a3aa88985f2c151e502ec8", null ], - [ "m_duplicate", "classlibdap_1_1Grid.html#a0c55b826c8c5dfe7a454dc670e859a41", null ], - [ "m_exact_match", "classlibdap_1_1Grid.html#aa5cd6124619d35e81bcfd426f1e569d3", null ], - [ "m_leaf_match", "classlibdap_1_1Grid.html#a8fe3863a609488f4d5125abea96b82ed", null ], - [ "map_begin", "classlibdap_1_1Grid.html#a2e9d2e436c0ff138a977dbba54c018eb", null ], - [ "map_end", "classlibdap_1_1Grid.html#aaebbf2a5329ec01b6527b4bafde87837", null ], - [ "map_rbegin", "classlibdap_1_1Grid.html#afdddc12f67c7f4f6bb6c78d55a2f75b2", null ], - [ "map_rend", "classlibdap_1_1Grid.html#ab821c8beb7c653ce38842fcb27d644ca", null ], - [ "name", "classlibdap_1_1Grid.html#a24c5d67823b3cff7f4245a993072a142", null ], - [ "operator=", "classlibdap_1_1Grid.html#aecf55730764a11b15858bb94b5a56988", null ], - [ "ops", "classlibdap_1_1Grid.html#a8a0000be2a244e3e07abda3020af8800", null ], - [ "prepend_map", "classlibdap_1_1Grid.html#a5a39d31cad6c5a9437bc07b696bb8db4", null ], - [ "print_dap4", "classlibdap_1_1Grid.html#a0f130e129b06773a9f3c94e3b492bb5c", null ], - [ "print_decl", "classlibdap_1_1Grid.html#a5a239b053928636e13e3a478faf8e334", null ], - [ "print_decl", "classlibdap_1_1Grid.html#a1c0bcf75f8474ef140d133f47a78ed67", null ], - [ "print_val", "classlibdap_1_1Grid.html#a5322f6b5ce04e5d00347bf50b341f4e6", null ], - [ "print_val", "classlibdap_1_1Grid.html#abc90f12653afefe765bea1917dcecc08", null ], - [ "print_xml", "classlibdap_1_1Grid.html#a29d53347639f843c164f19e3a3f19b7d", null ], - [ "print_xml", "classlibdap_1_1Grid.html#a7e55419705f8a64c5d86f3b0a236709e", null ], - [ "print_xml_writer", "classlibdap_1_1Grid.html#adb96de26565e6498cb0e8df6789a9f1c", null ], - [ "projection_yields_grid", "classlibdap_1_1Grid.html#aa737cef63a1b9c8b8b0952fcb22a621b", null ], - [ "ptr_duplicate", "classlibdap_1_1Grid.html#a0c4a5aefa252d3eab94b8a0ce5232dc6", null ], - [ "read", "classlibdap_1_1Grid.html#ad0af40e2565972fa44985d173370c264", null ], - [ "read_p", "classlibdap_1_1Grid.html#a38ff819a432217c55db2e9071928d20c", null ], - [ "send_p", "classlibdap_1_1Grid.html#a980c0013817836aa77ef74aeec7fb192", null ], - [ "serialize", "classlibdap_1_1Grid.html#a64268840654a0b37a15ccc601dbcfd33", null ], - [ "serialize", "classlibdap_1_1Grid.html#ab868fe97d5075b702bd084c2e9540913", null ], - [ "set_array", "classlibdap_1_1Grid.html#a35412b1401ff8795504af40be6d09aa1", null ], - [ "set_attr_table", "classlibdap_1_1Grid.html#a572a1d76a75981abac83a4241e90c0fa", null ], - [ "set_attributes", "classlibdap_1_1Grid.html#ad4dda4cf43dca838d3de183b8e01cd09", null ], - [ "set_attributes_nocopy", "classlibdap_1_1Grid.html#afd0e5f87d19020f560d5c1ff8dd4d6a3", null ], - [ "set_in_selection", "classlibdap_1_1Grid.html#ac30becb1ffe7d2cd4cbcd24fc216c9a3", null ], - [ "set_is_dap4", "classlibdap_1_1Grid.html#abca9ddaa9a1ada8447cbe7193e8e288a", null ], - [ "set_length", "classlibdap_1_1Grid.html#a4fe343c1eeb6fb1d61ab030433651d90", null ], - [ "set_name", "classlibdap_1_1Grid.html#a86504564f45a3e6748c6f1cc0ff4e9fa", null ], - [ "set_parent", "classlibdap_1_1Grid.html#a5b6a39f6ce6594fa74f3fc899ac9a966", null ], - [ "set_read_p", "classlibdap_1_1Grid.html#af52e60d8589eed1a18a14e9c6a57db65", null ], - [ "set_send_p", "classlibdap_1_1Grid.html#aafbcf9bef6719fe60ac707e02956e09d", null ], - [ "set_synthesized_p", "classlibdap_1_1Grid.html#a595cb4059cff24f801a1b6da79bd2f9e", null ], - [ "set_type", "classlibdap_1_1Grid.html#af74f8d1ef57c9fcca46f620f75d175a3", null ], - [ "synthesized_p", "classlibdap_1_1Grid.html#ae64e677da27249473cdba0b60cdbb90a", null ], - [ "toString", "classlibdap_1_1Grid.html#a701eb3361f5b5628329ece019cd34519", null ], - [ "transfer_attributes", "classlibdap_1_1Grid.html#a9483bb65505c86e3fc44a9b856a55323", null ], - [ "transform_to_dap2", "classlibdap_1_1Grid.html#affec8a11e9cc035d4b1e8fb9a87b2072", null ], - [ "transform_to_dap4", "classlibdap_1_1Grid.html#a160c21980788f0b732f2562feff971ef", null ], - [ "type", "classlibdap_1_1Grid.html#af8e803b20a7a7dc5f2ef351d7fac4a56", null ], - [ "type_name", "classlibdap_1_1Grid.html#a18a42c8ec35cb5b15cd651a4152f8a2c", null ], - [ "val2buf", "classlibdap_1_1Grid.html#ac742b1bf93889e541128b1d123821ee6", null ], - [ "var", "classlibdap_1_1Grid.html#a36a7412da7b5257d7666add726fea1a6", null ], - [ "var", "classlibdap_1_1Grid.html#a68f1779dc328f890062722d90fad084a", null ], - [ "var_begin", "classlibdap_1_1Grid.html#adeafe3d6c82d07b456a598a7b446c2c6", null ], - [ "var_end", "classlibdap_1_1Grid.html#a936b38c7c35ffb4fe17c5b8e85bdaaa2", null ], - [ "var_rbegin", "classlibdap_1_1Grid.html#aa025cf546ca35250454653c1ec684d91", null ], - [ "var_rend", "classlibdap_1_1Grid.html#aede7cf5889e101db1ea8f22c3a84a5d3", null ], - [ "width", "classlibdap_1_1Grid.html#a0b1e3ae7195f95c42ca98f42826a1ff5", null ], - [ "d_in_selection", "classlibdap_1_1Grid.html#a949a89714965d7afdcd1e3edc8b7f0d4", null ], - [ "d_is_synthesized", "classlibdap_1_1Grid.html#a629e97e8eb7d285b54c9af8c1ec9a29a", null ], - [ "d_vars", "classlibdap_1_1Grid.html#a75b2aa694dc76294d6aa5f7456e49aa2", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1Grid__inherit__graph.map b/html/classlibdap_1_1Grid__inherit__graph.map deleted file mode 100644 index 2a69e92d9..000000000 --- a/html/classlibdap_1_1Grid__inherit__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/html/classlibdap_1_1Grid__inherit__graph.md5 b/html/classlibdap_1_1Grid__inherit__graph.md5 deleted file mode 100644 index 57664f02e..000000000 --- a/html/classlibdap_1_1Grid__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -4c8f66eb4a58dfd3c38076895e35da89 \ No newline at end of file diff --git a/html/classlibdap_1_1Grid__inherit__graph.png b/html/classlibdap_1_1Grid__inherit__graph.png deleted file mode 100644 index 59b1c8dad2834a4defbf05fe8f20f98c6eca7e92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90684 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 I#S?@72MpnV4*&oF diff --git a/html/classlibdap_1_1HTTPCache-members.html b/html/classlibdap_1_1HTTPCache-members.html deleted file mode 100644 index 51f664044..000000000 --- a/html/classlibdap_1_1HTTPCache-members.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::HTTPCache Member List
    -
    -
    - -

    This is the complete list of members for libdap::HTTPCache, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    cache_response(const string &url, time_t request_time, const vector< string > &headers, const FILE *body)libdap::HTTPCache
    get_always_validate() constlibdap::HTTPCache
    get_cache_control()libdap::HTTPCache
    get_cache_disconnected() constlibdap::HTTPCache
    get_cache_root() constlibdap::HTTPCache
    get_cached_response(const string &url, vector< string > &headers, string &cacheName)libdap::HTTPCache
    get_cached_response(const string &url, vector< string > &headers)libdap::HTTPCache
    get_cached_response(const string &url)libdap::HTTPCache
    get_conditional_request_headers(const string &url)libdap::HTTPCache
    get_default_expiration() constlibdap::HTTPCache
    get_max_entry_size() constlibdap::HTTPCache
    get_max_size() constlibdap::HTTPCache
    HTTPCacheInterruptHandler (defined in libdap::HTTPCache)libdap::HTTPCachefriend
    HTTPCacheTest (defined in libdap::HTTPCache)libdap::HTTPCachefriend
    HTTPConnectTest (defined in libdap::HTTPCache)libdap::HTTPCachefriend
    instance(const string &cache_root, bool force=false)libdap::HTTPCachestatic
    is_cache_enabled() constlibdap::HTTPCache
    is_expire_ignored() const (defined in libdap::HTTPCache)libdap::HTTPCache
    is_url_valid(const string &url)libdap::HTTPCache
    lock_cache_interface() (defined in libdap::HTTPCache)libdap::HTTPCacheinline
    purge_cache()libdap::HTTPCache
    release_cached_response(FILE *response)libdap::HTTPCache
    set_always_validate(bool validate)libdap::HTTPCache
    set_cache_control(const vector< string > &cc)libdap::HTTPCache
    set_cache_disconnected(CacheDisconnectedMode mode)libdap::HTTPCache
    set_cache_enabled(bool mode)libdap::HTTPCache
    set_default_expiration(int exp_time)libdap::HTTPCache
    set_expire_ignored(bool mode)libdap::HTTPCache
    set_max_entry_size(unsigned long size)libdap::HTTPCache
    set_max_size(unsigned long size)libdap::HTTPCache
    unlock_cache_interface() (defined in libdap::HTTPCache)libdap::HTTPCacheinline
    update_response(const string &url, time_t request_time, const vector< string > &headers)libdap::HTTPCache
    ~HTTPCache()libdap::HTTPCachevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1HTTPCache.html b/html/classlibdap_1_1HTTPCache.html deleted file mode 100644 index 608c3cf27..000000000 --- a/html/classlibdap_1_1HTTPCache.html +++ /dev/null @@ -1,1055 +0,0 @@ - - - - - - - -libdap: libdap::HTTPCache Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::HTTPCache Class Reference
    -
    -
    - -

    #include <HTTPCache.h>

    - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    bool cache_response (const string &url, time_t request_time, const vector< string > &headers, const FILE *body)
     
    FILE * get_cached_response (const string &url, vector< string > &headers, string &cacheName)
     
    FILE * get_cached_response (const string &url, vector< string > &headers)
     
    FILE * get_cached_response (const string &url)
     
    vector< string > get_conditional_request_headers (const string &url)
     
    bool is_url_valid (const string &url)
     
    -void lock_cache_interface ()
     
    void purge_cache ()
     
    void release_cached_response (FILE *response)
     
    -void unlock_cache_interface ()
     
    void update_response (const string &url, time_t request_time, const vector< string > &headers)
     
    virtual ~HTTPCache ()
     
    - - - -

    -Static Public Member Functions

    static HTTPCacheinstance (const string &cache_root, bool force=false)
     
    - - - - - - - -

    -Friends

    -class HTTPCacheInterruptHandler
     
    -class HTTPCacheTest
     
    -class HTTPConnectTest
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Accessors and Mutators for various properties.

    string get_cache_root () const
     
    void set_cache_enabled (bool mode)
     
    bool is_cache_enabled () const
     
    void set_cache_disconnected (CacheDisconnectedMode mode)
     
    CacheDisconnectedMode get_cache_disconnected () const
     
    void set_expire_ignored (bool mode)
     
    -bool is_expire_ignored () const
     
    void set_max_size (unsigned long size)
     
    unsigned long get_max_size () const
     
    void set_max_entry_size (unsigned long size)
     
    unsigned long get_max_entry_size () const
     
    void set_default_expiration (int exp_time)
     
    int get_default_expiration () const
     
    void set_always_validate (bool validate)
     
    bool get_always_validate () const
     
    void set_cache_control (const vector< string > &cc)
     
    vector< string > get_cache_control ()
     
    -

    Detailed Description

    -

    Implements a multi-process MT-safe HTTP 1.1 compliant (mostly) cache.

    -

    Clients that run as users lacking a writable HOME directory MUST disable this cache. Use Connect::set_cache_enable(false).

    -

    The original design of this class was taken from the W3C libwww software, written by Henrik Frystyk Nielsen, Copyright MIT

      -
    1. See the file MIT_COPYRIGHT. This software is a complete rewrite in C++ with additional features useful to the DODS and OPeNDAP projects.
    2. -
    -

    This cache does not implement range checking. Partial responses should not be cached (HFN's version did, but it doesn't mesh well with the DAP for which this is being written).

    -

    The cache uses the local file system to store responses. If it is being used in a MT application, care should be taken to ensure that the number of available file descriptors is not exceeded.

    -

    In addition, when used in a MT program only one thread should use the mutators to set property values. Even though the methods are robust WRT MT software, having several threads change values of cache's properties will lead to odd behavior on the part of the cache. Many of the public methods lock access to the class' interface. This is noted in the documentation for those methods.

    -

    Even though the public interface to the cache is typically locked when accessed, an extra locking mechanism is in place for `entries' which are accessed. If a thread accesses a entry, that response must be locked to prevent it from being updated until the thread tells the cache that it's no longer using it. The method get_cache_response() and get_cache_response_body() both lock an entry; use release_cache_response() to release the lock. Entries are locked using a combination of a counter and a mutex. The following methods block when called on a locked entry: is_url_valid(), get_conditional_request_headers(), update_response(). (The locking scheme could be modified so that a distinction is made between reading from and writing to an entry. In this case is_url_valid() and get_conditional_request_headers() would only lock when an entry is in use for writing. But I haven't done that.)

    -
    Todo:
    Update documentation: get_cache_response() now also serves as is_url_in_cache() and is_url_valid() should only be called after a locked cached response is accessed using get_cahced_response(). These lock the cache for reading. The methods cache_response() and update_response() lock an entry for writing.
    -
    Todo:
    Check that the lock-for-write and lock-for-read work together since it's possible that an entry in use might have a stream of readers and never free the 'read-lock' thus blocking a writer.
    -
    Author
    James Gallagher jgall.nosp@m.aghe.nosp@m.r@ope.nosp@m.ndap.nosp@m..org
    - -

    Definition at line 103 of file HTTPCache.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ ~HTTPCache()

    - -
    -
    - - - - - -
    - - - - - - - -
    libdap::HTTPCache::~HTTPCache ()
    -
    -virtual
    -
    -

    Destroy an instance of HTTPCache. This writes the cache index and frees the in-memory cache table structure. The persistent cache (the response headers and bodies and the index file) are not removed. To remove those, either erase the directory that contains the cache using a file system command or use the purge_cache() method (which leaves the cache directory structure in place but removes all the cached information).

    -

    This class uses the singleton pattern. Clients should never call this method. The HTTPCache::instance() method arranges to call the HTTPCache::delete_instance() using atexit(). If delete is called more than once, the result will likely be an index file that is corrupt.

    - -

    Definition at line 302 of file HTTPCache.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ cache_response()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::HTTPCache::cache_response (const string & url,
    time_t request_time,
    const vector< string > & headers,
    const FILE * body 
    )
    -
    -

    Add a new response to the cache, or replace an existing cached response with new data. This method returns True if the information for url was added to the cache. A response might not be cache-able; in that case this method returns false. (For example, the response might contain the 'Cache-Control: no-cache' header.)

    -

    Note that the FILE *body is rewound so that the caller can re-read it without using fseek or rewind.

    -

    If a response for url is already present in the cache, it will be replaced by the new headers and body. To update a response in the cache with new meta data, use update_response().

    -

    This method locks the class' interface.

    -
    Parameters
    - - - - - -
    urlA string which holds the request URL.
    request_timeThe time when the request was made, in seconds since 1 Jan 1970.
    headersA vector of strings which hold the response headers.
    bodyA FILE * to a file which holds the response body.
    -
    -
    -
    Returns
    True if the response was cached, False if the response could not be cached.
    -
    Exceptions
    - - -
    InternalErrThrown if there was a I/O error while writing to the persistent store.
    -
    -
    - -

    Definition at line 1156 of file HTTPCache.cc.

    - -
    -
    - -

    ◆ get_always_validate()

    - -
    -
    - - - - - - - -
    bool libdap::HTTPCache::get_always_validate () const
    -
    -

    Should every cache entry be validated before each use?

    Returns
    True if all cache entries require validation.
    - -

    Definition at line 850 of file HTTPCache.cc.

    - -
    -
    - -

    ◆ get_cache_control()

    - -
    -
    - - - - - - - -
    vector< string > libdap::HTTPCache::get_cache_control ()
    -
    -

    Get the Cache-Control headers.

    -
    Returns
    A vector of strings, one string for each header.
    - -

    Definition at line 920 of file HTTPCache.cc.

    - -
    -
    - -

    ◆ get_cache_disconnected()

    - -
    -
    - - - - - - - -
    CacheDisconnectedMode libdap::HTTPCache::get_cache_disconnected () const
    -
    -

    Get the cache's disconnected mode property.

    - -

    Definition at line 676 of file HTTPCache.cc.

    - -
    -
    - -

    ◆ get_cache_root()

    - -
    -
    - - - - - - - -
    string libdap::HTTPCache::get_cache_root () const
    -
    -

    Get the current cache root directory.

    Returns
    A string that contains the cache root directory.
    - -

    Definition at line 516 of file HTTPCache.cc.

    - -
    -
    - -

    ◆ get_cached_response() [1/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    FILE * libdap::HTTPCache::get_cached_response (const string & url,
    vector< string > & headers,
    string & cacheName 
    )
    -
    -

    Get information from the cache. For a given URL, get the headers, cache object name and body stored in the cache. Note that this method increments the hit counter for url's entry and locks that entry. To release the lock, the method release_cached_response() must be called. Methods that block on a locked entry are: get_conditional_request_headers(), update_response() and is_url_valid(). In addition, purge_cache() throws Error if it's called and any entries are locked. The garbage collection system will not reclaim locked entries (but works fine when some entries are locked).

    -

    This method locks the class' interface.

    -

    This method does not check to see that the response is valid, just that it is in the cache. To see if a cached response is valid, use is_url_valid(). The FILE* returned can be used for both reading and writing. The latter allows a client to update the body of a cached response without having to first dump it all to a separate file and then copy it into the cache (using cache_response()).

    -
    Parameters
    - - - - -
    urlGet response information for this URL.
    headersReturn the response headers in this parameter
    cacheNameA value-result parameter; the name of the cache file
    -
    -
    -
    Returns
    A FILE * to the response body.
    -
    Exceptions
    - - - -
    ErrorThrown if the URL's response is not in the cache.
    InternalErrThrown if the persistent store cannot be opened.
    -
    -
    - -

    Definition at line 1480 of file HTTPCache.cc.

    - -
    -
    - -

    ◆ get_cached_response() [2/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    FILE * libdap::HTTPCache::get_cached_response (const string & url,
    vector< string > & headers 
    )
    -
    -

    Get information from the cache. This is a convenience method that calls the three parameter version of get_cache_response().

    -

    This method locks the class' interface.

    -
    Parameters
    - - - -
    urlGet response information for this URL.
    headersReturn the response headers in this parameter
    -
    -
    -
    Returns
    A FILE * to the response body.
    -
    Exceptions
    - - - -
    ErrorThrown if the URL's response is not in the cache.
    InternalErrThrown if the persistent store cannot be opened.
    -
    -
    - -

    Definition at line 1534 of file HTTPCache.cc.

    - -
    -
    - -

    ◆ get_cached_response() [3/3]

    - -
    -
    - - - - - - - - -
    FILE * libdap::HTTPCache::get_cached_response (const string & url)
    -
    -

    Get a pointer to a cached response body. This is a convenience method that calls the three parameter version of get_cache_response().

    -

    This method locks the class' interface.

    -
    Parameters
    - - -
    urlFind the body associated with this URL.
    -
    -
    -
    Returns
    A FILE* that points to the response body.
    -
    Exceptions
    - - - -
    ErrorThrown if the URL is not in the cache.
    InternalErrThrown if an I/O error is detected.
    -
    -
    - -

    Definition at line 1551 of file HTTPCache.cc.

    - -
    -
    - -

    ◆ get_conditional_request_headers()

    - -
    -
    - - - - - - - - -
    vector< string > libdap::HTTPCache::get_conditional_request_headers (const string & url)
    -
    -

    Build the headers to send along with a GET request to make that request conditional. This method examines the headers for a given response in the cache and formulates the correct headers for a valid HTTP 1.1 conditional GET request. See RFC 2616, Section 13.3.4.

    -

    Rules: If an ETag is present, it must be used. Use If-None-Match. If a Last-Modified header is present, use it. Use If-Modified-Since. If both are present, use both (this means that HTTP 1.0 daemons are more likely to work). If a Last-Modified header is not present, use the value of the Cache-Control max-age or Expires header(s). Note that a 'Cache-Control: max-age' header overrides an Expires header (Sec 14.9.3).

    -

    This method locks the cache interface and the cache entry.

    -
    Parameters
    - - -
    urlGet the HTTPCacheTable::CacheEntry for this URL.
    -
    -
    -
    Returns
    A vector of strings, one request header per string.
    -
    Exceptions
    - - -
    ErrorThrown if the url is not in the cache.
    -
    -
    - -

    Definition at line 1249 of file HTTPCache.cc.

    - -
    -
    - -

    ◆ get_default_expiration()

    - -
    -
    - - - - - - - -
    int libdap::HTTPCache::get_default_expiration () const
    -
    -

    Get the default expiration time used by the cache.

    - -

    Definition at line 831 of file HTTPCache.cc.

    - -
    -
    - -

    ◆ get_max_entry_size()

    - -
    -
    - - - - - - - -
    unsigned long libdap::HTTPCache::get_max_entry_size () const
    -
    -

    Get the maximum size of an individual entry in the cache.

    -
    Returns
    The maximum size in megabytes.
    - -

    Definition at line 803 of file HTTPCache.cc.

    - -
    -
    - -

    ◆ get_max_size()

    - -
    -
    - - - - - - - -
    unsigned long libdap::HTTPCache::get_max_size () const
    -
    -

    How big is the cache? The value returned is the size in megabytes.

    - -

    Definition at line 758 of file HTTPCache.cc.

    - -
    -
    - -

    ◆ instance()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    HTTPCache * libdap::HTTPCache::instance (const string & cache_root,
    bool force = false 
    )
    -
    -static
    -
    -

    Get a pointer to the HTTP 1.1 compliant cache. If not already instantiated, this creates an instance of the HTTP cache object and initializes it to use cache_root as the location of the persistent store. If there's an index (.index) file in that directory, it is read as part of the initialization. If the cache has already been initialized, this method returns a pointer to that instance. Note HTTPCache uses the singleton pattern; A process may have only one instance of this object. Also note that HTTPCache is MT-safe. However, if the force parameter is set to true, it may be possible for two or more processes to access the persistent store at the same time resulting in undefined behavior.

    -

    Default values: is_cache_enabled(): true, is_cache_protected(): false, is_expire_ignored(): false, the total size of the cache is 20M, 2M of that is reserved for response headers, during GC the cache is reduced to at least 18M (total size - 10% of the total size), and the max size for an individual entry is 3M. It is possible to change the size of the cache, but not to make it smaller than 5M. If expiration information is not sent with a response, it is assumed to expire in 24 hours.

    -
    Parameters
    - - - -
    cache_rootThe fully qualified pathname of the directory which will hold the cache data (i.e., the persistent store).
    forceForce access to the persistent store if true. By default false. Use this only if you're sure no one else is using the same cache root! This is included so that programs may use a cache that was left in an inconsistent state.
    -
    -
    -
    Returns
    A pointer to the HTTPCache object.
    -
    Exceptions
    - - -
    Errorthrown if the cache root cannot set.
    -
    -
    - -

    Definition at line 129 of file HTTPCache.cc.

    - -
    -
    - -

    ◆ is_cache_enabled()

    - -
    -
    - - - - - - - -
    bool libdap::HTTPCache::is_cache_enabled () const
    -
    -

    Is the cache currently enabled?

    - -

    Definition at line 647 of file HTTPCache.cc.

    - -
    -
    - -

    ◆ is_url_valid()

    - -
    -
    - - - - - - - - -
    bool libdap::HTTPCache::is_url_valid (const string & url)
    -
    -

    Look in the cache and return the status (validity) of the cached response. This method should be used to determine if a cached response requires validation.

    -

    This method locks the class' interface and the cache entry.

    -
    Parameters
    - - -
    urlFind the cached response associated with this URL.
    -
    -
    -
    Returns
    True indicates that the response can be used, False indicates that it must first be validated.
    -
    Exceptions
    - - -
    ErrorThrown if the URL's response is not in the cache.
    -
    -
    - -

    Definition at line 1388 of file HTTPCache.cc.

    - -
    -
    - -

    ◆ purge_cache()

    - -
    -
    - - - - - - - -
    void libdap::HTTPCache::purge_cache ()
    -
    -

    Purge both the in-memory cache table and the contents of the cache on disk. This method deletes every entry in the persistent store but leaves the structure intact. The client of HTTPCache is responsible for making sure that all threads have released any responses they pulled from the cache. If this method is called when a response is still in use, it will throw an Error object and not purge the cache.

    -

    This method locks the class' interface.

    -
    Exceptions
    - - -
    ErrorThrown if an attempt is made to purge the cache when an entry is still in use.
    -
    -
    - -

    Definition at line 1600 of file HTTPCache.cc.

    - -
    -
    - -

    ◆ release_cached_response()

    - -
    -
    - - - - - - - - -
    void libdap::HTTPCache::release_cached_response (FILE * body)
    -
    -

    Call this method to inform the cache that a particular response is no longer in use. When a response is accessed using get_cached_response(), it is locked so that updates and removal (e.g., by the garbage collector) are not possible. Calling this method frees that lock.

    -

    This method locks the class' interface.

    -
    Parameters
    - - -
    bodyRelease the lock on the response information associated with this FILE *.
    -
    -
    -
    Exceptions
    - - -
    ErrorThrown if body does not belong to an entry in the cache or if the entry was already released.
    -
    -
    - -

    Definition at line 1571 of file HTTPCache.cc.

    - -
    -
    - -

    ◆ set_always_validate()

    - -
    -
    - - - - - - - - -
    void libdap::HTTPCache::set_always_validate (bool validate)
    -
    -

    Should every cache entry be validated?

    Parameters
    - - -
    validateTrue if every cache entry should be validated before being used.
    -
    -
    - -

    Definition at line 841 of file HTTPCache.cc.

    - -
    -
    - -

    ◆ set_cache_control()

    - -
    -
    - - - - - - - - -
    void libdap::HTTPCache::set_cache_control (const vector< string > & cc)
    -
    -

    Set the request Cache-Control headers. If a request must be satisfied using HTTP, these headers should be included in request since they might be pertinent to a proxy cache.

    -

    Ignored headers: no-transform, only-if-cached. These headers are not used by HTTPCache and are not recorded. However, if present in the vector passed to this method, they will be present in the vector returned by get_cache_control.

    -

    This method locks the class' interface.

    -
    Parameters
    - - -
    ccA vector of strings, each string holds one Cache-Control header.
    -
    -
    -
    Exceptions
    - - -
    InternalErrThrown if one of the strings in cc does not start with 'Cache-Control: '.
    -
    -
    - -

    Definition at line 872 of file HTTPCache.cc.

    - -
    -
    - -

    ◆ set_cache_disconnected()

    - -
    -
    - - - - - - - - -
    void libdap::HTTPCache::set_cache_disconnected (CacheDisconnectedMode mode)
    -
    -

    Set the cache's disconnected property. The cache can operate either disconnected from the network or using a proxy cache (but tell that proxy not to use the network).

    -

    This method locks the class' interface.

    -
    Parameters
    - - -
    modeOne of DISCONNECT_NONE, DISCONNECT_NORMAL or DISCONNECT_EXTERNAL.
    -
    -
    -
    See also
    CacheDIsconnectedMode
    - -

    Definition at line 664 of file HTTPCache.cc.

    - -
    -
    - -

    ◆ set_cache_enabled()

    - -
    -
    - - - - - - - - -
    void libdap::HTTPCache::set_cache_enabled (bool mode)
    -
    -

    Enable or disable the cache. The cache can be temporarily suspended using the enable/disable property. This does not prevent the cache from being enabled/disable at a later point in time.

    -

    Default: yes

    -

    This method locks the class' interface.

    -
    Parameters
    - - -
    modeTrue if the cache should be enabled, False if it should be disabled.
    -
    -
    - -

    Definition at line 635 of file HTTPCache.cc.

    - -
    -
    - -

    ◆ set_default_expiration()

    - -
    -
    - - - - - - - - -
    void libdap::HTTPCache::set_default_expiration (int exp_time)
    -
    -

    Set the default expiration time. Use the default expiration property to determine when a cached response becomes stale if the response lacks the information necessary to compute a specific value.

    -

    Default: 24 hours (86,400 seconds)

    -

    This method locks the class' interface.

    -
    Parameters
    - - -
    exp_timeThe time in seconds.
    -
    -
    - -

    Definition at line 819 of file HTTPCache.cc.

    - -
    -
    - -

    ◆ set_expire_ignored()

    - -
    -
    - - - - - - - - -
    void libdap::HTTPCache::set_expire_ignored (bool mode)
    -
    -

    How should the cache handle the Expires header? Default: no

    -

    This method locks the class' interface.

    -
    Parameters
    - - -
    modeTrue if a responses Expires header should be ignored, False otherwise.
    -
    -
    - -

    Definition at line 690 of file HTTPCache.cc.

    - -
    -
    - -

    ◆ set_max_entry_size()

    - -
    -
    - - - - - - - - -
    void libdap::HTTPCache::set_max_entry_size (unsigned long size)
    -
    -

    Set the maximum size for a single entry in the cache.

    -

    Default: 3M

    -

    This method locks the class' interface.

    -
    Parameters
    - - -
    sizeThe size in megabytes.
    -
    -
    - -

    Definition at line 772 of file HTTPCache.cc.

    - -
    -
    - -

    ◆ set_max_size()

    - -
    -
    - - - - - - - - -
    void libdap::HTTPCache::set_max_size (unsigned long size)
    -
    -

    Cache size management. The default cache size is 20M. The minimum size is 5M in order not to get into weird problems while writing the cache. The size is indicated in Mega bytes. Note that reducing the size of the cache may trigger a garbage collection operation.

    -
    Note
    The maximum cache size is UINT_MAX bytes (usually 4294967295 for 32-bit computers). If size is larger the value will be truncated to the value of that constant. It seems pretty unlikely that will happen given that the parameter is an unsigned long. This is a fix for bug 689 which was reported when the parameter type was signed.
    -

    This method locks the class' interface.

    -
    Parameters
    - - -
    sizeThe maximum size of the cache in megabytes.
    -
    -
    - -

    Definition at line 724 of file HTTPCache.cc.

    - -
    -
    - -

    ◆ update_response()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::HTTPCache::update_response (const string & url,
    time_t request_time,
    const vector< string > & headers 
    )
    -
    -

    Update the meta data for a response already in the cache. This method provides a way to merge response headers returned from a conditional GET request, for the given URL, with those already present.

    -

    This method locks the class' interface and the cache entry.

    -
    Parameters
    - - - - -
    urlUpdate the meta data for this cache entry.
    request_timeThe time (Unix time, seconds since 1 Jan 1970) that the conditional request was made.
    headersNew headers, one header per string, returned in the response.
    -
    -
    -
    Exceptions
    - - -
    ErrorThrown if the url is not in the cache.
    -
    -
    - -

    Definition at line 1319 of file HTTPCache.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1HTTPCache.js b/html/classlibdap_1_1HTTPCache.js deleted file mode 100644 index f5420d4cc..000000000 --- a/html/classlibdap_1_1HTTPCache.js +++ /dev/null @@ -1,35 +0,0 @@ -var classlibdap_1_1HTTPCache = -[ - [ "~HTTPCache", "classlibdap_1_1HTTPCache.html#ac8fcde4b345c50bad6c3507dcbd2f447", null ], - [ "cache_response", "classlibdap_1_1HTTPCache.html#a0cbaded239e55f3e328448adcc180365", null ], - [ "get_always_validate", "classlibdap_1_1HTTPCache.html#a95f59f69a7ca0c9104748e5a7cb07101", null ], - [ "get_cache_control", "classlibdap_1_1HTTPCache.html#a15d15a90105d60b0d743fc90456d223e", null ], - [ "get_cache_disconnected", "classlibdap_1_1HTTPCache.html#a0745589ca1ed117b11efc52765a25b7e", null ], - [ "get_cache_root", "classlibdap_1_1HTTPCache.html#a2c872a03a4065237cf384f778cceb126", null ], - [ "get_cached_response", "classlibdap_1_1HTTPCache.html#aefcbe732444c6160c839b9e2c3468b1d", null ], - [ "get_cached_response", "classlibdap_1_1HTTPCache.html#a151026836e9f397857dd76aa080ddfef", null ], - [ "get_cached_response", "classlibdap_1_1HTTPCache.html#a6f3bbb3dc0b1e85f32e2291006ff858e", null ], - [ "get_conditional_request_headers", "classlibdap_1_1HTTPCache.html#a635a277480a95d7d37d0e9fddd480362", null ], - [ "get_default_expiration", "classlibdap_1_1HTTPCache.html#a9b03792f717b8d584e782d6797a1b331", null ], - [ "get_max_entry_size", "classlibdap_1_1HTTPCache.html#a66ec8c722b1c82124e697916b73036fe", null ], - [ "get_max_size", "classlibdap_1_1HTTPCache.html#a7e89f36cc369c826aa6cd414adc06393", null ], - [ "is_cache_enabled", "classlibdap_1_1HTTPCache.html#af9960970163436617a8753f95866c5a9", null ], - [ "is_expire_ignored", "classlibdap_1_1HTTPCache.html#aba172e9218a416213aa1d9f54e59e669", null ], - [ "is_url_valid", "classlibdap_1_1HTTPCache.html#aa695d43815cc2588458232f37095b780", null ], - [ "lock_cache_interface", "classlibdap_1_1HTTPCache.html#a71ed87540113c4403a33bb436d3f8b9c", null ], - [ "purge_cache", "classlibdap_1_1HTTPCache.html#afee7fca59d1a37f495ea74c95fad600a", null ], - [ "release_cached_response", "classlibdap_1_1HTTPCache.html#a4de0458e4ab0e89049a0f0fa7b819b91", null ], - [ "set_always_validate", "classlibdap_1_1HTTPCache.html#aa9a13a18ec837e891e81823a4d30da47", null ], - [ "set_cache_control", "classlibdap_1_1HTTPCache.html#ac6823b2de27745c20c7e8d41af5a2088", null ], - [ "set_cache_disconnected", "classlibdap_1_1HTTPCache.html#a44857ae03334d09e34cc5b2275669a71", null ], - [ "set_cache_enabled", "classlibdap_1_1HTTPCache.html#a71aa835c2b38bc0e891f40b5a77c53ce", null ], - [ "set_default_expiration", "classlibdap_1_1HTTPCache.html#a1ca5c8c205241f62596e283943906386", null ], - [ "set_expire_ignored", "classlibdap_1_1HTTPCache.html#a1a8c5f13e82c3038e97eca9979ebd39c", null ], - [ "set_max_entry_size", "classlibdap_1_1HTTPCache.html#a92cc5b035dc08ae2704924002144fa29", null ], - [ "set_max_size", "classlibdap_1_1HTTPCache.html#ab2447c27c88ebb29511379ede8ac5b6f", null ], - [ "unlock_cache_interface", "classlibdap_1_1HTTPCache.html#a5b6a28e17912e87389260f7695fdf876", null ], - [ "update_response", "classlibdap_1_1HTTPCache.html#ab0b1e3fb63084b93e277c53d189ad6c2", null ], - [ "HTTPCacheInterruptHandler", "classlibdap_1_1HTTPCache.html#a99997995a5158687260499f88ea57f36", null ], - [ "HTTPCacheTest", "classlibdap_1_1HTTPCache.html#a76bd6ce419aad54c8c87e993f5bd11c9", null ], - [ "HTTPConnectTest", "classlibdap_1_1HTTPCache.html#a9aed79b4a282abc0feb24f3e28234f13", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1HTTPCacheInterruptHandler-members.html b/html/classlibdap_1_1HTTPCacheInterruptHandler-members.html deleted file mode 100644 index 94bdcf5a2..000000000 --- a/html/classlibdap_1_1HTTPCacheInterruptHandler-members.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::HTTPCacheInterruptHandler Member List
    -
    -
    - -

    This is the complete list of members for libdap::HTTPCacheInterruptHandler, including all inherited members.

    - - - - - -
    handle_signal(int signum)libdap::HTTPCacheInterruptHandlerinlinevirtual
    HTTPCacheInterruptHandler() (defined in libdap::HTTPCacheInterruptHandler)libdap::HTTPCacheInterruptHandlerinline
    ~EventHandler()libdap::EventHandlerinlinevirtual
    ~HTTPCacheInterruptHandler() (defined in libdap::HTTPCacheInterruptHandler)libdap::HTTPCacheInterruptHandlerinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1HTTPCacheInterruptHandler.html b/html/classlibdap_1_1HTTPCacheInterruptHandler.html deleted file mode 100644 index 4667aa057..000000000 --- a/html/classlibdap_1_1HTTPCacheInterruptHandler.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - -libdap: libdap::HTTPCacheInterruptHandler Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::HTTPCacheInterruptHandler Class Reference
    -
    -
    - -

    #include <HTTPCacheInterruptHandler.h>

    -
    -Inheritance diagram for libdap::HTTPCacheInterruptHandler:
    -
    -
    Inheritance graph
    - - - -
    - - - - -

    -Public Member Functions

    virtual void handle_signal (int signum)
     
    -

    Detailed Description

    -

    Handle SIGINT for HTTPCache. When the cache is in use and the process is sent SIGINT, we must make sure that the cache is left in a consistent state. This includes removing the lock file, updating the index file and making sure no partially written data or meta data files exist.

    -
    See also
    EventHandler
    -
    -SignalHandler
    -
    -HTTPCache
    -
    Author
    James Gallagher jgall.nosp@m.aghe.nosp@m.r@ope.nosp@m.ndap.nosp@m..org
    - -

    Definition at line 57 of file HTTPCacheInterruptHandler.h.

    -

    Member Function Documentation

    - -

    ◆ handle_signal()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::HTTPCacheInterruptHandler::handle_signal (int signum)
    -
    -inlinevirtual
    -
    -

    Handle SIGINT. This handler first deletes any files opened but not added to the cache index files and then calls HTTPCache::delete_instance().

    -
    Parameters
    - - -
    signumWe know it is SIGINT; included here as a check and only when NDEBUG is not defined.
    -
    -
    -
    Returns
    Never returns.
    - -

    Implements libdap::EventHandler.

    - -

    Definition at line 77 of file HTTPCacheInterruptHandler.h.

    - -
    -
    -
    The documentation for this class was generated from the following file: -
    -
    - - - - diff --git a/html/classlibdap_1_1HTTPCacheInterruptHandler.js b/html/classlibdap_1_1HTTPCacheInterruptHandler.js deleted file mode 100644 index 8e9c857d9..000000000 --- a/html/classlibdap_1_1HTTPCacheInterruptHandler.js +++ /dev/null @@ -1,6 +0,0 @@ -var classlibdap_1_1HTTPCacheInterruptHandler = -[ - [ "HTTPCacheInterruptHandler", "classlibdap_1_1HTTPCacheInterruptHandler.html#ab8c290e6df3e6ce64b1e93037ba1ee6b", null ], - [ "~HTTPCacheInterruptHandler", "classlibdap_1_1HTTPCacheInterruptHandler.html#a8a673024265a0c273c4aa2411b6890e2", null ], - [ "handle_signal", "classlibdap_1_1HTTPCacheInterruptHandler.html#a61f19f17f5da4f50969494b6f24cdfc7", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1HTTPCacheInterruptHandler__inherit__graph.map b/html/classlibdap_1_1HTTPCacheInterruptHandler__inherit__graph.map deleted file mode 100644 index 3bb64bccd..000000000 --- a/html/classlibdap_1_1HTTPCacheInterruptHandler__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/classlibdap_1_1HTTPCacheInterruptHandler__inherit__graph.md5 b/html/classlibdap_1_1HTTPCacheInterruptHandler__inherit__graph.md5 deleted file mode 100644 index 6a5085b0d..000000000 --- a/html/classlibdap_1_1HTTPCacheInterruptHandler__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -7f49162b0c6fab3264276184387a902b \ No newline at end of file diff --git a/html/classlibdap_1_1HTTPCacheInterruptHandler__inherit__graph.png b/html/classlibdap_1_1HTTPCacheInterruptHandler__inherit__graph.png deleted file mode 100644 index bb9461385f7e156f314ba1e88213e00bc1f3e371..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15079 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 diff --git a/html/classlibdap_1_1HTTPCacheResponse-members.html b/html/classlibdap_1_1HTTPCacheResponse-members.html deleted file mode 100644 index 8ed28b58a..000000000 --- a/html/classlibdap_1_1HTTPCacheResponse-members.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::HTTPCacheResponse Member List
    -
    -
    - -

    This is the complete list of members for libdap::HTTPCacheResponse, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    get_cpp_stream() const (defined in libdap::Response)libdap::Responseinlinevirtual
    get_file() const (defined in libdap::HTTPResponse)libdap::HTTPResponseinlinevirtual
    get_headers() const (defined in libdap::HTTPResponse)libdap::HTTPResponseinlinevirtual
    get_protocol() const (defined in libdap::Response)libdap::Responseinlinevirtual
    get_status() const (defined in libdap::Response)libdap::Responseinlinevirtual
    get_stream() const (defined in libdap::Response)libdap::Responseinlinevirtual
    get_type() const (defined in libdap::Response)libdap::Responseinlinevirtual
    get_version() const (defined in libdap::Response)libdap::Responseinlinevirtual
    HTTPCacheResponse() (defined in libdap::HTTPCacheResponse)libdap::HTTPCacheResponseprotected
    HTTPCacheResponse(const HTTPCacheResponse &rs) (defined in libdap::HTTPCacheResponse)libdap::HTTPCacheResponseprotected
    HTTPCacheResponse(FILE *s, int status_code, vector< string > *headers, HTTPCache *c)libdap::HTTPCacheResponseinline
    HTTPCacheResponse(FILE *s, int status_code, vector< string > *headers, const string &file_name, HTTPCache *c)libdap::HTTPCacheResponseinline
    HTTPResponse() (defined in libdap::HTTPResponse)libdap::HTTPResponseprotected
    HTTPResponse(const HTTPResponse &rs) (defined in libdap::HTTPResponse)libdap::HTTPResponseprotected
    HTTPResponse(FILE *s, int status, std::vector< std::string > *h, const std::string &temp_file)libdap::HTTPResponseinline
    HTTPResponse(std::fstream *s, int status, std::vector< std::string > *h, const std::string &temp_file)libdap::HTTPResponseinline
    operator=(const HTTPCacheResponse &) (defined in libdap::HTTPCacheResponse)libdap::HTTPCacheResponseprotected
    operator=(const HTTPResponse &) (defined in libdap::HTTPResponse)libdap::HTTPResponseprotected
    operator=(const Response &) (defined in libdap::Response)libdap::Responseprotected
    Response(const Response &) (defined in libdap::Response)libdap::Responseprotected
    Response() (defined in libdap::Response)libdap::Responseinline
    Response(FILE *s, int status=0)libdap::Responseinline
    Response(std::fstream *s, int status=0) (defined in libdap::Response)libdap::Responseinline
    set_cpp_stream(std::istream *s) (defined in libdap::Response)libdap::Responseinlinevirtual
    set_file(const std::string &n) (defined in libdap::HTTPResponse)libdap::HTTPResponseinlinevirtual
    set_headers(std::vector< std::string > *h) (defined in libdap::HTTPResponse)libdap::HTTPResponseinlinevirtual
    set_protocol(const std::string &p) (defined in libdap::Response)libdap::Responseinlinevirtual
    set_status(int s) (defined in libdap::Response)libdap::Responseinlinevirtual
    set_stream(FILE *s) (defined in libdap::Response)libdap::Responseinlinevirtual
    set_type(ObjectType o) (defined in libdap::Response)libdap::Responseinlinevirtual
    set_version(const std::string &v) (defined in libdap::Response)libdap::Responseinlinevirtual
    transform_to_cpp()libdap::HTTPResponseinline
    ~HTTPCacheResponse()libdap::HTTPCacheResponseinlinevirtual
    ~HTTPResponse()libdap::HTTPResponseinlinevirtual
    ~Response()libdap::Responseinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1HTTPCacheResponse.html b/html/classlibdap_1_1HTTPCacheResponse.html deleted file mode 100644 index b6f72afb3..000000000 --- a/html/classlibdap_1_1HTTPCacheResponse.html +++ /dev/null @@ -1,343 +0,0 @@ - - - - - - - -libdap: libdap::HTTPCacheResponse Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::HTTPCacheResponse Class Reference
    -
    -
    - -

    #include <HTTPCacheResponse.h>

    -
    -Inheritance diagram for libdap::HTTPCacheResponse:
    -
    -
    Inheritance graph
    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     HTTPCacheResponse (FILE *s, int status_code, vector< string > *headers, HTTPCache *c)
     
     HTTPCacheResponse (FILE *s, int status_code, vector< string > *headers, const string &file_name, HTTPCache *c)
     
    void transform_to_cpp ()
     
    virtual ~HTTPCacheResponse ()
     
    Accessors
    -virtual std::vector< std::string > * get_headers () const
     
    -virtual std::string get_file () const
     
    Mutators
    -virtual void set_headers (std::vector< std::string > *h)
     
    -virtual void set_file (const std::string &n)
     
    getters
    -virtual int get_status () const
     
    -virtual FILE * get_stream () const
     
    -virtual std::istream * get_cpp_stream () const
     
    -virtual ObjectType get_type () const
     
    -virtual std::string get_version () const
     
    -virtual std::string get_protocol () const
     
    setters
    -virtual void set_status (int s)
     
    -virtual void set_stream (FILE *s)
     
    -virtual void set_cpp_stream (std::istream *s)
     
    -virtual void set_type (ObjectType o)
     
    -virtual void set_version (const std::string &v)
     
    -virtual void set_protocol (const std::string &p)
     
    - - - - - - - - -

    -Protected Member Functions

    Suppressed default methods
    HTTPCacheResponse ()
     
    HTTPCacheResponse (const HTTPCacheResponse &rs)
     
    -HTTPCacheResponseoperator= (const HTTPCacheResponse &)
     
    -

    Detailed Description

    -

    Encapsulate a response. Instead of directly returning the FILE pointer from which a response is read, return an instance of this object.

    - -

    Definition at line 44 of file HTTPCacheResponse.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ HTTPCacheResponse() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    libdap::HTTPCacheResponse::HTTPCacheResponse (FILE * s,
    int status_code,
    vector< string > * headers,
    HTTPCachec 
    )
    -
    -inline
    -
    -

    Build a Response object. Instances of this class are used to represent responses from a local HTTP/1.1 cache. The stream and headers pointer are passed to the parent (HTTPResponse); there's no temporary file for the parent to manage since the body is read from a file managed by the cache subsystem. This class releases the lock on the cache entry when the destructor is called.

    - -

    Definition at line 64 of file HTTPCacheResponse.h.

    - -
    -
    - -

    ◆ HTTPCacheResponse() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    libdap::HTTPCacheResponse::HTTPCacheResponse (FILE * s,
    int status_code,
    vector< string > * headers,
    const string & file_name,
    HTTPCachec 
    )
    -
    -inline
    -
    -

    Build a Response object. Instances of this class are used to represent responses from a local HTTP/1.1 cache. The stream and headers pointer are passed to the parent (HTTPResponse); there's no temporary file for the parent to manage since the body is read from a file managed by the cache subsystem. This class releases the lock on the cache entry when the destructor is called.

    - -

    Definition at line 74 of file HTTPCacheResponse.h.

    - -
    -
    - -

    ◆ ~HTTPCacheResponse()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual libdap::HTTPCacheResponse::~HTTPCacheResponse ()
    -
    -inlinevirtual
    -
    -

    Free the cache entry lock. Call the parent's destructor.

    - -

    Definition at line 80 of file HTTPCacheResponse.h.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ transform_to_cpp()

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::HTTPResponse::transform_to_cpp ()
    -
    -inlineinherited
    -
    -

    Build a new HTTPResponse object that works with C++ streams. Assume that the FILE* references a disk file.

    Returns
    - -

    Definition at line 151 of file HTTPResponse.h.

    - -
    -
    -
    The documentation for this class was generated from the following file: -
    -
    - - - - diff --git a/html/classlibdap_1_1HTTPCacheResponse.js b/html/classlibdap_1_1HTTPCacheResponse.js deleted file mode 100644 index 31426f160..000000000 --- a/html/classlibdap_1_1HTTPCacheResponse.js +++ /dev/null @@ -1,26 +0,0 @@ -var classlibdap_1_1HTTPCacheResponse = -[ - [ "HTTPCacheResponse", "classlibdap_1_1HTTPCacheResponse.html#a3ef35c42f312c9d2b1316d5ca7773400", null ], - [ "HTTPCacheResponse", "classlibdap_1_1HTTPCacheResponse.html#a2ac39b915210c7bf3907de5d92066c47", null ], - [ "HTTPCacheResponse", "classlibdap_1_1HTTPCacheResponse.html#a98dcff76b943f4da0d1a54e43e119938", null ], - [ "HTTPCacheResponse", "classlibdap_1_1HTTPCacheResponse.html#a319dc8cc6540adbc5c53154ab706cf33", null ], - [ "~HTTPCacheResponse", "classlibdap_1_1HTTPCacheResponse.html#a3f42de3899515f12b97f20233901d6c7", null ], - [ "get_cpp_stream", "classlibdap_1_1HTTPCacheResponse.html#a0e9f20410cc36e2bd9f427840b7be3e1", null ], - [ "get_file", "classlibdap_1_1HTTPCacheResponse.html#a445f06e173d3112bf4db050946c30fe9", null ], - [ "get_headers", "classlibdap_1_1HTTPCacheResponse.html#a14d0202b95a11038b4b5283691fb2f9d", null ], - [ "get_protocol", "classlibdap_1_1HTTPCacheResponse.html#a2a6b775e5fa6265fc9ac4f9c576e815c", null ], - [ "get_status", "classlibdap_1_1HTTPCacheResponse.html#a1cba94a4d25c344985f5182a54e789b8", null ], - [ "get_stream", "classlibdap_1_1HTTPCacheResponse.html#ad90b4fce34ae4d8c0b806c6424213b28", null ], - [ "get_type", "classlibdap_1_1HTTPCacheResponse.html#ae39b13938ed524bbf14807c8a35b31cc", null ], - [ "get_version", "classlibdap_1_1HTTPCacheResponse.html#afe78405b68946981c4b2d4e8cd305651", null ], - [ "operator=", "classlibdap_1_1HTTPCacheResponse.html#a5d46d8d674d8c19d3b9ff0962c138176", null ], - [ "set_cpp_stream", "classlibdap_1_1HTTPCacheResponse.html#a4f4ff88c4b09e011d285f633a6b6aba0", null ], - [ "set_file", "classlibdap_1_1HTTPCacheResponse.html#a98b820cc398d3adc65731be4c2350f3e", null ], - [ "set_headers", "classlibdap_1_1HTTPCacheResponse.html#a553706aaed4202ada58e49ab2eb1bf05", null ], - [ "set_protocol", "classlibdap_1_1HTTPCacheResponse.html#aeeab3df1376b578b865c313dfe7b26ee", null ], - [ "set_status", "classlibdap_1_1HTTPCacheResponse.html#a3de0ea86ac433904efdc0e4f4c86fa26", null ], - [ "set_stream", "classlibdap_1_1HTTPCacheResponse.html#a5cda40501a3ce7b1675b13a6e0858020", null ], - [ "set_type", "classlibdap_1_1HTTPCacheResponse.html#a7a7807d0a45dd1f6111987f054956e24", null ], - [ "set_version", "classlibdap_1_1HTTPCacheResponse.html#a0eb078feca514d7d1f8428d9c001f262", null ], - [ "transform_to_cpp", "classlibdap_1_1HTTPCacheResponse.html#aeb73ee749ec7e6f6b26b8a9985485184", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1HTTPCacheResponse__inherit__graph.map b/html/classlibdap_1_1HTTPCacheResponse__inherit__graph.map deleted file mode 100644 index 3e5e46cfb..000000000 --- a/html/classlibdap_1_1HTTPCacheResponse__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1HTTPCacheResponse__inherit__graph.md5 b/html/classlibdap_1_1HTTPCacheResponse__inherit__graph.md5 deleted file mode 100644 index 972e14585..000000000 --- a/html/classlibdap_1_1HTTPCacheResponse__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -35283db4edbf84e82f71d8baec0ba7b5 \ No newline at end of file diff --git a/html/classlibdap_1_1HTTPCacheResponse__inherit__graph.png b/html/classlibdap_1_1HTTPCacheResponse__inherit__graph.png deleted file mode 100644 index e32e9c20fd3b03416f232b03262826ff62c5309b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73634 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 z 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 diff --git a/html/classlibdap_1_1HTTPCacheTable-members.html b/html/classlibdap_1_1HTTPCacheTable-members.html deleted file mode 100644 index 36a0f1bea..000000000 --- a/html/classlibdap_1_1HTTPCacheTable-members.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::HTTPCacheTable Member List
    -
    -
    - -

    This is the complete list of members for libdap::HTTPCacheTable, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    add_entry_to_cache_table(CacheEntry *entry)libdap::HTTPCacheTable
    bind_entry_to_data(CacheEntry *entry, FILE *body) (defined in libdap::HTTPCacheTable)libdap::HTTPCacheTable
    cache_index_delete()libdap::HTTPCacheTable
    cache_index_parse_line(const char *line)libdap::HTTPCacheTable
    cache_index_read()libdap::HTTPCacheTable
    cache_index_write()libdap::HTTPCacheTable
    CacheEntries typedef (defined in libdap::HTTPCacheTable)libdap::HTTPCacheTable
    CacheEntriesIter typedef (defined in libdap::HTTPCacheTable)libdap::HTTPCacheTable
    CacheTable typedef (defined in libdap::HTTPCacheTable)libdap::HTTPCacheTable
    calculate_time(HTTPCacheTable::CacheEntry *entry, int default_expiration, time_t request_time)libdap::HTTPCacheTable
    create_hash_directory(int hash)libdap::HTTPCacheTable
    create_location(CacheEntry *entry)libdap::HTTPCacheTable
    delete_all_entries() (defined in libdap::HTTPCacheTable)libdap::HTTPCacheTable
    delete_by_hits(int hits) (defined in libdap::HTTPCacheTable)libdap::HTTPCacheTable
    delete_by_size(unsigned int size) (defined in libdap::HTTPCacheTable)libdap::HTTPCacheTable
    delete_expired_entries(time_t time=0) (defined in libdap::HTTPCacheTable)libdap::HTTPCacheTable
    get_block_size() const (defined in libdap::HTTPCacheTable)libdap::HTTPCacheTableinline
    get_cache_root() (defined in libdap::HTTPCacheTable)libdap::HTTPCacheTableinline
    get_current_size() const (defined in libdap::HTTPCacheTable)libdap::HTTPCacheTableinline
    get_locked_entry_from_cache_table(const string &url)libdap::HTTPCacheTable
    get_new_entries() const (defined in libdap::HTTPCacheTable)libdap::HTTPCacheTableinline
    get_write_locked_entry_from_cache_table(const string &url)libdap::HTTPCacheTable
    HTTPCacheTable(const string &cache_root, int block_size) (defined in libdap::HTTPCacheTable)libdap::HTTPCacheTable
    HTTPCacheTest (defined in libdap::HTTPCacheTable)libdap::HTTPCacheTablefriend
    increment_new_entries() (defined in libdap::HTTPCacheTable)libdap::HTTPCacheTableinline
    is_locked_read_responses() (defined in libdap::HTTPCacheTable)libdap::HTTPCacheTable
    parse_headers(HTTPCacheTable::CacheEntry *entry, unsigned long max_entry_size, const vector< string > &headers)libdap::HTTPCacheTable
    remove_cache_entry(HTTPCacheTable::CacheEntry *entry)libdap::HTTPCacheTable
    remove_entry_from_cache_table(const string &url)libdap::HTTPCacheTable
    set_block_size(unsigned int sz) (defined in libdap::HTTPCacheTable)libdap::HTTPCacheTableinline
    set_cache_root(const string &cr) (defined in libdap::HTTPCacheTable)libdap::HTTPCacheTableinline
    set_current_size(unsigned long sz) (defined in libdap::HTTPCacheTable)libdap::HTTPCacheTableinline
    uncouple_entry_from_data(FILE *body) (defined in libdap::HTTPCacheTable)libdap::HTTPCacheTable
    ~HTTPCacheTable() (defined in libdap::HTTPCacheTable)libdap::HTTPCacheTable
    -
    - - - - diff --git a/html/classlibdap_1_1HTTPCacheTable.html b/html/classlibdap_1_1HTTPCacheTable.html deleted file mode 100644 index 0b3503f08..000000000 --- a/html/classlibdap_1_1HTTPCacheTable.html +++ /dev/null @@ -1,616 +0,0 @@ - - - - - - - -libdap: libdap::HTTPCacheTable Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::HTTPCacheTable Class Reference
    -
    -
    - -

    #include <HTTPCacheTable.h>

    - - - - -

    -Classes

    struct  CacheEntry
     
    - - - - - - - -

    -Public Types

    -typedef vector< CacheEntry * > CacheEntries
     
    -typedef CacheEntries::iterator CacheEntriesIter
     
    -typedef CacheEntries ** CacheTable
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    -void bind_entry_to_data (CacheEntry *entry, FILE *body)
     
    string create_hash_directory (int hash)
     
    void create_location (CacheEntry *entry)
     
    -void delete_by_hits (int hits)
     
    -void delete_by_size (unsigned int size)
     
    -void delete_expired_entries (time_t time=0)
     
    HTTPCacheTable (const string &cache_root, int block_size)
     
    -bool is_locked_read_responses ()
     
    -void uncouple_entry_from_data (FILE *body)
     
    -unsigned long get_current_size () const
     
    -void set_current_size (unsigned long sz)
     
    -unsigned int get_block_size () const
     
    -void set_block_size (unsigned int sz)
     
    -int get_new_entries () const
     
    -void increment_new_entries ()
     
    -string get_cache_root ()
     
    -void set_cache_root (const string &cr)
     
    Cache Index

    These methods manage the cache's index file. Each cache holds an index file named .index which stores the cache's state information.

    -
    bool cache_index_delete ()
     
    bool cache_index_read ()
     
    CacheEntrycache_index_parse_line (const char *line)
     
    void cache_index_write ()
     
    - - - -

    -Friends

    -class HTTPCacheTest
     
    - - - - - - - - - - - - - - - - - -

    -Methods to manipulate instances of CacheEntry.

    -void delete_all_entries ()
     
    void add_entry_to_cache_table (CacheEntry *entry)
     
    void remove_cache_entry (HTTPCacheTable::CacheEntry *entry)
     
    void remove_entry_from_cache_table (const string &url)
     
    CacheEntryget_locked_entry_from_cache_table (const string &url)
     
    CacheEntryget_write_locked_entry_from_cache_table (const string &url)
     
    void calculate_time (HTTPCacheTable::CacheEntry *entry, int default_expiration, time_t request_time)
     
    void parse_headers (HTTPCacheTable::CacheEntry *entry, unsigned long max_entry_size, const vector< string > &headers)
     
    -

    Detailed Description

    -

    The table of entries in the client-side cache. This class maintains a table of CacheEntries, where one instance of CacheEntry is made for each item in the cache. When an item is accessed it is either locked for reading or writing. When locked for reading the entry is recorded on a list of read-locked entries. The caller must explicitly free the entry for it to be removed from this list (which is the only way it can be opened for writing). An entry can be accessed by multiple readers but only one writer.

    -
    Note
    The CacheEntry class used to contain a lock that was used to ensure that the entry was locked during any changes to any of its fields. That has been removed - its now the responsibility of the caller. This change was made because it's likely the caller will need to lock all of the methods that operate on a CacheEntry anyway, so the CacheEntry-specific lock was redundant.
    - -

    Definition at line 101 of file HTTPCacheTable.h.

    -

    Member Function Documentation

    - -

    ◆ add_entry_to_cache_table()

    - -
    -
    - - - - - - - - -
    void libdap::HTTPCacheTable::add_entry_to_cache_table (CacheEntryentry)
    -
    -

    Add a CacheEntry to the cache table. As each entry is read, load it into the in-memory cache table and update the HTTPCache's current_size. The later is used by the garbage collection method.

    -
    Parameters
    - - -
    entryThe CacheEntry instance to add.
    -
    -
    - -

    Definition at line 562 of file HTTPCacheTable.cc.

    - -
    -
    - -

    ◆ cache_index_delete()

    - -
    -
    - - - - - - - -
    bool libdap::HTTPCacheTable::cache_index_delete ()
    -
    -

    Remove the cache index file.

    -

    A private method.

    -
    Returns
    True if the file was deleted, otherwise false.
    - -

    Definition at line 282 of file HTTPCacheTable.cc.

    - -
    -
    - -

    ◆ cache_index_parse_line()

    - -
    -
    - - - - - - - - -
    HTTPCacheTable::CacheEntry * libdap::HTTPCacheTable::cache_index_parse_line (const char * line)
    -
    -

    Parse one line of the index file.

    -

    A private method.

    -
    Parameters
    - - -
    lineA single line from the .index file.
    -
    -
    -
    Returns
    A CacheEntry initialized with the information from line.
    - -

    Definition at line 331 of file HTTPCacheTable.cc.

    - -
    -
    - -

    ◆ cache_index_read()

    - -
    -
    - - - - - - - -
    bool libdap::HTTPCacheTable::cache_index_read ()
    -
    -

    Read the saved set of cached entries from disk. Consistency between the in-memory cache and the index is maintained by only reading the index file when the HTTPCache object is created!

    -

    A private method.

    -
    Returns
    True when a cache index was found and read, false otherwise.
    - -

    Definition at line 298 of file HTTPCacheTable.cc.

    - -
    -
    - -

    ◆ cache_index_write()

    - -
    -
    - - - - - - - -
    void libdap::HTTPCacheTable::cache_index_write ()
    -
    -

    Walk through the list of cached objects and write the cache index file to disk. If the file does not exist, it is created. If the file does exist, it is overwritten. As a side effect, zero the new_entries counter.

    -

    A private method.

    -
    Exceptions
    - - -
    ErrorThrown if the index file cannot be opened for writing.
    -
    -
    -
    Note
    The HTTPCache destructor calls this method and silently ignores this exception.
    - -

    Definition at line 402 of file HTTPCacheTable.cc.

    - -
    -
    - -

    ◆ calculate_time()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::HTTPCacheTable::calculate_time (HTTPCacheTable::CacheEntryentry,
    int default_expiration,
    time_t request_time 
    )
    -
    -

    Calculate the corrected_initial_age of the object. We use the time when this function is called as the response_time as this is when we have received the complete response. This may cause a delay if the response header is very big but should not cause any incorrect behavior.

    -

    A private method.

    -
    Parameters
    - - - - -
    entryThe CacheEntry object.
    default_expirationThe default value of the cached object's expiration time.
    request_timeWhen was the request made? I think this value must be passed into the method that calls this method...
    -
    -
    - -

    Definition at line 761 of file HTTPCacheTable.cc.

    - -
    -
    - -

    ◆ create_hash_directory()

    - -
    -
    - - - - - - - - -
    string libdap::HTTPCacheTable::create_hash_directory (int hash)
    -
    -

    Create the directory path for cache file. The cache uses a set of directories within d_cache_root to store individual responses. The name of the directory that holds a given response is the value returned by the get_hash() function (i.e., it's a number). If the directory exists, this method does nothing.

    -

    A private method.

    -
    Parameters
    - - -
    hashThe hash value (i.e., directory name). An integer between 0 and CACHE_TABLE_SIZE (See HTTPCache.h).
    -
    -
    -
    Returns
    The pathname to the directory (even if it already existed).
    -
    Exceptions
    - - -
    ErrorThrown if the directory cannot be created.
    -
    -
    - -

    Definition at line 447 of file HTTPCacheTable.cc.

    - -
    -
    - -

    ◆ create_location()

    - -
    -
    - - - - - - - - -
    void libdap::HTTPCacheTable::create_location (HTTPCacheTable::CacheEntryentry)
    -
    -

    Create the directory for this url (using the hash value from get_hash()) and a file within that directory to hold the response's information. The cache name and cache_body_fd fields of entry are updated.

    -

    mkstemp opens the file it creates, which is a good thing but it makes tracking resources hard for the HTTPCache object (because an exception might cause a file descriptor resource leak). So I close that file descriptor here.

    -

    A private method.

    -
    Parameters
    - - -
    entryThe cache entry object to operate on.
    -
    -
    -
    Exceptions
    - - -
    ErrorIf the file for the response's body cannot be created.
    -
    -
    - -

    Definition at line 505 of file HTTPCacheTable.cc.

    - -
    -
    - -

    ◆ get_locked_entry_from_cache_table()

    - -
    -
    - - - - - - - - -
    HTTPCacheTable::CacheEntry * libdap::HTTPCacheTable::get_locked_entry_from_cache_table (const string & url)
    -
    -

    Get a pointer to a CacheEntry from the cache table.

    -
    Parameters
    - - -
    urlLook for this URL.
    -
    -
    - -

    Definition at line 588 of file HTTPCacheTable.cc.

    - -
    -
    - -

    ◆ get_write_locked_entry_from_cache_table()

    - -
    -
    - - - - - - - - -
    HTTPCacheTable::CacheEntry * libdap::HTTPCacheTable::get_write_locked_entry_from_cache_table (const string & url)
    -
    -

    Get a pointer to a CacheEntry from the cache table. Providing a way to pass the hash code into this method makes it easier to test for correct behavior when two entries collide. 10/07/02 jhrg

    -
    Parameters
    - - -
    urlLook for this URL.
    -
    -
    -
    Returns
    The matching CacheEntry instance or NULL if none was found.
    - -

    Definition at line 627 of file HTTPCacheTable.cc.

    - -
    -
    - -

    ◆ parse_headers()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::HTTPCacheTable::parse_headers (HTTPCacheTable::CacheEntryentry,
    unsigned long max_entry_size,
    const vector< string > & headers 
    )
    -
    -

    Parse various headers from the vector (which can be retrieved from libcurl once a response is received) and load the CacheEntry object with values. This method should only be called with headers from a response (it should not be used to parse request headers).

    -

    A private method.

    -
    Parameters
    - - - - -
    entryStore values from the headers here.
    max_entry_sizeDO not cache entries larger than this.
    headersA vector of header lines.
    -
    -
    - -

    Definition at line 804 of file HTTPCacheTable.cc.

    - -
    -
    - -

    ◆ remove_cache_entry()

    - -
    -
    - - - - - - - - -
    void libdap::HTTPCacheTable::remove_cache_entry (HTTPCacheTable::CacheEntryentry)
    -
    -

    Remove a CacheEntry. This means delete the entry's files on disk and free the CacheEntry object. The caller should null the entry's pointer in the cache_table. The total size of the cache is decremented once the entry is deleted.

    -
    Parameters
    - - -
    entryThe CacheEntry to delete.
    -
    -
    -
    Exceptions
    - - -
    InternalErrThrown if entry is in use.
    -
    -
    - -

    Definition at line 653 of file HTTPCacheTable.cc.

    - -
    -
    - -

    ◆ remove_entry_from_cache_table()

    - -
    -
    - - - - - - - - -
    void libdap::HTTPCacheTable::remove_entry_from_cache_table (const string & url)
    -
    -

    Find the CacheEntry for the given url and remove both its information in the persistent store and the entry in d_cache_table. If url is not in the cache, this method does nothing.

    -
    Parameters
    - - -
    urlRemove this URL's entry.
    -
    -
    -
    Exceptions
    - - -
    InternalErrThrown if the CacheEntry for url is locked.
    -
    -
    - -

    Definition at line 701 of file HTTPCacheTable.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1HTTPCacheTable.js b/html/classlibdap_1_1HTTPCacheTable.js deleted file mode 100644 index 2d7a723f9..000000000 --- a/html/classlibdap_1_1HTTPCacheTable.js +++ /dev/null @@ -1,38 +0,0 @@ -var classlibdap_1_1HTTPCacheTable = -[ - [ "CacheEntry", "structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html", "structlibdap_1_1HTTPCacheTable_1_1CacheEntry" ], - [ "CacheEntries", "classlibdap_1_1HTTPCacheTable.html#a36425575bbfac384964ce2f364f15679", null ], - [ "CacheEntriesIter", "classlibdap_1_1HTTPCacheTable.html#a8527d6a5b1e720e2d500e1ec1eeecf9f", null ], - [ "CacheTable", "classlibdap_1_1HTTPCacheTable.html#aa8e43995c010ac4fae6ca8cc13395930", null ], - [ "HTTPCacheTable", "classlibdap_1_1HTTPCacheTable.html#a03e241526025dfaeb2662f7c15ce1d17", null ], - [ "~HTTPCacheTable", "classlibdap_1_1HTTPCacheTable.html#a78d0655261edb7f9ff0b2d61b7f97917", null ], - [ "add_entry_to_cache_table", "classlibdap_1_1HTTPCacheTable.html#a8f5660848048a98454fce23c28de573c", null ], - [ "bind_entry_to_data", "classlibdap_1_1HTTPCacheTable.html#a24b2c86910ba623a59184ab42410b4cb", null ], - [ "cache_index_delete", "classlibdap_1_1HTTPCacheTable.html#a3e636690b069b3384e908135fcaebd51", null ], - [ "cache_index_parse_line", "classlibdap_1_1HTTPCacheTable.html#a48569affedb01e6e0e87343bcc621c0a", null ], - [ "cache_index_read", "classlibdap_1_1HTTPCacheTable.html#a24e70dae002ffeef9641bb6493109513", null ], - [ "cache_index_write", "classlibdap_1_1HTTPCacheTable.html#a7cd5a3a24fd0cd41ac0d9a3192075e9c", null ], - [ "calculate_time", "classlibdap_1_1HTTPCacheTable.html#a0ca63c76e70064549d128ff8f5951534", null ], - [ "create_hash_directory", "classlibdap_1_1HTTPCacheTable.html#a0f7f6193848fb3ba8ad17082fd95b6c6", null ], - [ "create_location", "classlibdap_1_1HTTPCacheTable.html#a0ab52cb3d5d01575977adb33a21b31d2", null ], - [ "delete_all_entries", "classlibdap_1_1HTTPCacheTable.html#ad02f9346125f4c311d6e74b6a8354f9e", null ], - [ "delete_by_hits", "classlibdap_1_1HTTPCacheTable.html#a51707b1b5533c2d06e57dc52a0ea90b2", null ], - [ "delete_by_size", "classlibdap_1_1HTTPCacheTable.html#a04655ab9af621a261420ed8af681cf80", null ], - [ "delete_expired_entries", "classlibdap_1_1HTTPCacheTable.html#a107d8cc87728a855eaa18210b90c09d5", null ], - [ "get_block_size", "classlibdap_1_1HTTPCacheTable.html#a3c7c90f1c20eb4b8bc2e8f056be5ad50", null ], - [ "get_cache_root", "classlibdap_1_1HTTPCacheTable.html#a86f13e699f533ebdfd4e7ca3ef83401d", null ], - [ "get_current_size", "classlibdap_1_1HTTPCacheTable.html#acafa29f363fd70558e3719b34178fe2d", null ], - [ "get_locked_entry_from_cache_table", "classlibdap_1_1HTTPCacheTable.html#ac8c8e58c208b8c542b89f500829032a0", null ], - [ "get_new_entries", "classlibdap_1_1HTTPCacheTable.html#aade9a27801741f7c01d62b9ae22f25ae", null ], - [ "get_write_locked_entry_from_cache_table", "classlibdap_1_1HTTPCacheTable.html#a57c01c8b9462f0e0ea6541b7d9fcf2f5", null ], - [ "increment_new_entries", "classlibdap_1_1HTTPCacheTable.html#af17bd7a96186412f3ef53caed42db767", null ], - [ "is_locked_read_responses", "classlibdap_1_1HTTPCacheTable.html#afc2ef03d687c3db809e2bfbc3bca3bd3", null ], - [ "parse_headers", "classlibdap_1_1HTTPCacheTable.html#a53379f3151fe6b85e85c75c401a14963", null ], - [ "remove_cache_entry", "classlibdap_1_1HTTPCacheTable.html#a85d4438820f0920002f5e77b51900ea9", null ], - [ "remove_entry_from_cache_table", "classlibdap_1_1HTTPCacheTable.html#ad1b8ffd257ff335b3d87b90600f5bffd", null ], - [ "set_block_size", "classlibdap_1_1HTTPCacheTable.html#a3ffe278c93c2d3a0dc2f180fefc6ae3c", null ], - [ "set_cache_root", "classlibdap_1_1HTTPCacheTable.html#a9e6fada9e04ddcf835160780222e9a43", null ], - [ "set_current_size", "classlibdap_1_1HTTPCacheTable.html#abf4e75cf192355d7c7bfcf9f0e736168", null ], - [ "uncouple_entry_from_data", "classlibdap_1_1HTTPCacheTable.html#ad0ac242f618a804562e18546738904df", null ], - [ "HTTPCacheTest", "classlibdap_1_1HTTPCacheTable.html#a76bd6ce419aad54c8c87e993f5bd11c9", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1HTTPConnect-members.html b/html/classlibdap_1_1HTTPConnect-members.html deleted file mode 100644 index e7ebc30f1..000000000 --- a/html/classlibdap_1_1HTTPConnect-members.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::HTTPConnect Member List
    -
    -
    - -

    This is the complete list of members for libdap::HTTPConnect, including all inherited members.

    - - - - - - - - - - - - - - - - - - -
    fetch_url(const string &url)libdap::HTTPConnect
    HTTPConnect() (defined in libdap::HTTPConnect)libdap::HTTPConnectprotected
    HTTPConnect(const HTTPConnect &) (defined in libdap::HTTPConnect)libdap::HTTPConnectprotected
    HTTPConnect(RCReader *rcr, bool use_cpp=false)libdap::HTTPConnect
    HTTPConnectTest (defined in libdap::HTTPConnect)libdap::HTTPConnectfriend
    is_cache_enabled()libdap::HTTPConnectinline
    operator=(const HTTPConnect &) (defined in libdap::HTTPConnect)libdap::HTTPConnectprotected
    ParseHeader (defined in libdap::HTTPConnect)libdap::HTTPConnectfriend
    save_raw_http_header (defined in libdap::HTTPConnect)libdap::HTTPConnectfriend
    set_accept_deflate(bool defalte)libdap::HTTPConnect
    set_cache_enabled(bool enabled)libdap::HTTPConnectinline
    set_cookie_jar(const string &cookie_jar)libdap::HTTPConnectinline
    set_credentials(const string &u, const string &p)libdap::HTTPConnect
    set_use_cpp_streams(bool use_cpp_streams) (defined in libdap::HTTPConnect)libdap::HTTPConnectinline
    set_xdap_protocol(int major, int minor)libdap::HTTPConnect
    use_cpp_streams() const (defined in libdap::HTTPConnect)libdap::HTTPConnectinline
    ~HTTPConnect() (defined in libdap::HTTPConnect)libdap::HTTPConnectvirtual
    -
    - - - - diff --git a/html/classlibdap_1_1HTTPConnect.html b/html/classlibdap_1_1HTTPConnect.html deleted file mode 100644 index 995cc9b94..000000000 --- a/html/classlibdap_1_1HTTPConnect.html +++ /dev/null @@ -1,430 +0,0 @@ - - - - - - - -libdap: libdap::HTTPConnect Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::HTTPConnect Class Reference
    -
    -
    - -

    #include <HTTPConnect.h>

    - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    HTTPResponsefetch_url (const string &url)
     
     HTTPConnect (RCReader *rcr, bool use_cpp=false)
     
    bool is_cache_enabled ()
     
    void set_accept_deflate (bool defalte)
     
    void set_cache_enabled (bool enabled)
     
    void set_cookie_jar (const string &cookie_jar)
     
    void set_credentials (const string &u, const string &p)
     
    -void set_use_cpp_streams (bool use_cpp_streams)
     
    void set_xdap_protocol (int major, int minor)
     
    -bool use_cpp_streams () const
     
    - - - - - - - - - -

    -Protected Member Functions

    Suppress default methods

    These methods are not supported and are implemented here as protected methods to suppress the C++-supplied default versions (which will break this object).

    -
    HTTPConnect ()
     
    HTTPConnect (const HTTPConnect &)
     
    -HTTPConnectoperator= (const HTTPConnect &)
     
    - - - - - - - -

    -Friends

    -class HTTPConnectTest
     
    -class ParseHeader
     
    -size_t save_raw_http_header (void *ptr, size_t size, size_t nmemb, void *http_connect)
     
    -

    Detailed Description

    -

    Use the CURL library to dereference a HTTP URL. Scan the response for headers used by DAP 2.0 and extract their values. The body of the response is made available using a FILE pointer.

    -
    Author
    jhrg
    - -

    Definition at line 73 of file HTTPConnect.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ HTTPConnect()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    libdap::HTTPConnect::HTTPConnect (RCReaderrcr,
    bool use_cpp = false 
    )
    -
    -

    Build a virtual connection to a remote data source that will be accessed using HTTP.

    -
    Parameters
    - - -
    rcrA pointer to the RCReader object which holds configuration file information to be used by this virtual connection.
    -
    -
    - -

    Definition at line 556 of file HTTPConnect.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ fetch_url()

    - -
    -
    - - - - - - - - -
    HTTPResponse * libdap::HTTPConnect::fetch_url (const string & url)
    -
    -

    Dereference a URL. This method dereferences a URL and stores the result (i.e., it formulates an HTTP request and processes the HTTP server's response). After this method is successfully called, the value of is_response_present() will be true and the methods get_response_headers(), type() and server_version() may be called.

    -
    Parameters
    - - -
    urlThe URL to dereference.
    -
    -
    -
    Returns
    A pointer to the stream.
    -
    Exceptions
    - - - -
    ErrorThrown if the URL could not be dereferenced.
    InternalErrThrown if a temporary file to hold the response could not be opened.
    -
    -
    - -

    Definition at line 627 of file HTTPConnect.cc.

    - -
    -
    - -

    ◆ is_cache_enabled()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::HTTPConnect::is_cache_enabled ()
    -
    -inline
    -
    -

    Return the current state of the HTTP cache.

    - -

    Definition at line 157 of file HTTPConnect.h.

    - -
    -
    - -

    ◆ set_accept_deflate()

    - -
    -
    - - - - - - - - -
    void libdap::HTTPConnect::set_accept_deflate (bool deflate)
    -
    -

    Set the accept deflate property. If true, the DAP client announces to a server that it can accept responses compressed using the deflate algorithm. This property is automatically set using a value from the .dodsrc configuration file. This method provides a way to override that behavior.

    -
    Note
    If the configuration file is not present or does not include a value for this property, it is set to false.
    -
    Parameters
    - - -
    deflateTrue sets the accept deflate property, False clears it.
    -
    -
    - -

    Definition at line 1008 of file HTTPConnect.cc.

    - -
    -
    - -

    ◆ set_cache_enabled()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::HTTPConnect::set_cache_enabled (bool enabled)
    -
    -inline
    -
    -

    Set the state of the HTTP cache. By default, the HTTP cache is enabled or disabled using the value of the USE_CACHE property in the .dodsrc file. Use this method to set the state from within a program.

    Parameters
    - - -
    enabledTrue to use the cache, False to disable.
    -
    -
    - -

    Definition at line 151 of file HTTPConnect.h.

    - -
    -
    - -

    ◆ set_cookie_jar()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::HTTPConnect::set_cookie_jar (const string & cookie_jar)
    -
    -inline
    -
    -

    Set the cookie jar. This function sets the name of a file used to store cookies returned by servers. This will help with things like single sign on systems.

    -
    Parameters
    - - -
    cookie_jarThe pathname to the file that stores cookies. If this is the empty string saving cookies is disabled.
    -
    -
    - -

    Definition at line 144 of file HTTPConnect.h.

    - -
    -
    - -

    ◆ set_credentials()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void libdap::HTTPConnect::set_credentials (const string & u,
    const string & p 
    )
    -
    -

    Set the credentials for responding to challenges while dereferencing URLs. Alternatively, these can be embedded in the URL. This method provides a way for clients of HTTPConnect to get credentials from users (say using a pop up dialog) and to not hack the URL to pass that information to libcurl. Note that the 'credentials in the URL' scheme is part of the URL standard.

    -

    This method does nothing if u, the username, is empty.

    -
    Parameters
    - - - -
    uThe username.
    pThe password.
    -
    -
    -
    Exceptions
    - - -
    InternalErrThe credentials could not be registered with libcurl.
    -
    -
    -
    See also
    extract_auth_info()
    - -

    Definition at line 1074 of file HTTPConnect.cc.

    - -
    -
    - -

    ◆ set_xdap_protocol()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void libdap::HTTPConnect::set_xdap_protocol (int major,
    int minor 
    )
    -
    -

    Set the xdap_accept property/HTTP-header. This sets the value of the DAP which the client advertises to servers that it understands. The information (client protocol major and minor versions) are recorded in the instance and the information is sent to servers using the XDAP-Accept HTTP request header.

    -
    Parameters
    - - - -
    majorThe dap client major protocol version
    minorThe dap client minor protocol version
    -
    -
    - -

    Definition at line 1037 of file HTTPConnect.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1HTTPConnect.js b/html/classlibdap_1_1HTTPConnect.js deleted file mode 100644 index 873b9613b..000000000 --- a/html/classlibdap_1_1HTTPConnect.js +++ /dev/null @@ -1,20 +0,0 @@ -var classlibdap_1_1HTTPConnect = -[ - [ "HTTPConnect", "classlibdap_1_1HTTPConnect.html#a6648957e9aa38739b953e61241fdb162", null ], - [ "HTTPConnect", "classlibdap_1_1HTTPConnect.html#a510d3277f37839b275aca7f26a82d082", null ], - [ "HTTPConnect", "classlibdap_1_1HTTPConnect.html#a0b211b1afe685d706c8d0a235f626a5d", null ], - [ "~HTTPConnect", "classlibdap_1_1HTTPConnect.html#adaecf86117db43a3d4d78971d897252e", null ], - [ "fetch_url", "classlibdap_1_1HTTPConnect.html#a5e3558838e245a96c9392b33ef4ba298", null ], - [ "is_cache_enabled", "classlibdap_1_1HTTPConnect.html#a1e9a7b25527264a342dbe9c2aff59f2f", null ], - [ "operator=", "classlibdap_1_1HTTPConnect.html#aad5c634ebb6237e8449e76d83abde372", null ], - [ "set_accept_deflate", "classlibdap_1_1HTTPConnect.html#a01d67a5afa18a84ef744b8f222094260", null ], - [ "set_cache_enabled", "classlibdap_1_1HTTPConnect.html#aaf200f19c2a64adc4b17887372dcc595", null ], - [ "set_cookie_jar", "classlibdap_1_1HTTPConnect.html#ac6641c75c291e2908be9caade2eb5547", null ], - [ "set_credentials", "classlibdap_1_1HTTPConnect.html#a84190d0d80154943ee997c4982a7c96a", null ], - [ "set_use_cpp_streams", "classlibdap_1_1HTTPConnect.html#a7d9988dbd935a1e3df58e7fc358ae476", null ], - [ "set_xdap_protocol", "classlibdap_1_1HTTPConnect.html#ac232e85c5d2448c66c1a24f62dcbf89a", null ], - [ "use_cpp_streams", "classlibdap_1_1HTTPConnect.html#a365ed606f3976009be1f69d1c99d2318", null ], - [ "HTTPConnectTest", "classlibdap_1_1HTTPConnect.html#a9aed79b4a282abc0feb24f3e28234f13", null ], - [ "ParseHeader", "classlibdap_1_1HTTPConnect.html#a6cf7d84a8b4cb42b8503948b6c5973cc", null ], - [ "save_raw_http_header", "classlibdap_1_1HTTPConnect.html#af4392e8b4c78632ef10da4542127388a", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1HTTPResponse-members.html b/html/classlibdap_1_1HTTPResponse-members.html deleted file mode 100644 index 53a5a25ad..000000000 --- a/html/classlibdap_1_1HTTPResponse-members.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::HTTPResponse Member List
    -
    -
    - -

    This is the complete list of members for libdap::HTTPResponse, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    get_cpp_stream() const (defined in libdap::Response)libdap::Responseinlinevirtual
    get_file() const (defined in libdap::HTTPResponse)libdap::HTTPResponseinlinevirtual
    get_headers() const (defined in libdap::HTTPResponse)libdap::HTTPResponseinlinevirtual
    get_protocol() const (defined in libdap::Response)libdap::Responseinlinevirtual
    get_status() const (defined in libdap::Response)libdap::Responseinlinevirtual
    get_stream() const (defined in libdap::Response)libdap::Responseinlinevirtual
    get_type() const (defined in libdap::Response)libdap::Responseinlinevirtual
    get_version() const (defined in libdap::Response)libdap::Responseinlinevirtual
    HTTPResponse() (defined in libdap::HTTPResponse)libdap::HTTPResponseprotected
    HTTPResponse(const HTTPResponse &rs) (defined in libdap::HTTPResponse)libdap::HTTPResponseprotected
    HTTPResponse(FILE *s, int status, std::vector< std::string > *h, const std::string &temp_file)libdap::HTTPResponseinline
    HTTPResponse(std::fstream *s, int status, std::vector< std::string > *h, const std::string &temp_file)libdap::HTTPResponseinline
    operator=(const HTTPResponse &) (defined in libdap::HTTPResponse)libdap::HTTPResponseprotected
    operator=(const Response &) (defined in libdap::Response)libdap::Responseprotected
    Response(const Response &) (defined in libdap::Response)libdap::Responseprotected
    Response() (defined in libdap::Response)libdap::Responseinline
    Response(FILE *s, int status=0)libdap::Responseinline
    Response(std::fstream *s, int status=0) (defined in libdap::Response)libdap::Responseinline
    set_cpp_stream(std::istream *s) (defined in libdap::Response)libdap::Responseinlinevirtual
    set_file(const std::string &n) (defined in libdap::HTTPResponse)libdap::HTTPResponseinlinevirtual
    set_headers(std::vector< std::string > *h) (defined in libdap::HTTPResponse)libdap::HTTPResponseinlinevirtual
    set_protocol(const std::string &p) (defined in libdap::Response)libdap::Responseinlinevirtual
    set_status(int s) (defined in libdap::Response)libdap::Responseinlinevirtual
    set_stream(FILE *s) (defined in libdap::Response)libdap::Responseinlinevirtual
    set_type(ObjectType o) (defined in libdap::Response)libdap::Responseinlinevirtual
    set_version(const std::string &v) (defined in libdap::Response)libdap::Responseinlinevirtual
    transform_to_cpp()libdap::HTTPResponseinline
    ~HTTPResponse()libdap::HTTPResponseinlinevirtual
    ~Response()libdap::Responseinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1HTTPResponse.html b/html/classlibdap_1_1HTTPResponse.html deleted file mode 100644 index 16f205d5b..000000000 --- a/html/classlibdap_1_1HTTPResponse.html +++ /dev/null @@ -1,359 +0,0 @@ - - - - - - - -libdap: libdap::HTTPResponse Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::HTTPResponse Class Reference
    -
    -
    - -

    #include <HTTPResponse.h>

    -
    -Inheritance diagram for libdap::HTTPResponse:
    -
    -
    Inheritance graph
    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     HTTPResponse (FILE *s, int status, std::vector< std::string > *h, const std::string &temp_file)
     
     HTTPResponse (std::fstream *s, int status, std::vector< std::string > *h, const std::string &temp_file)
     Build a HTTPResponse using a cpp fstream When working with DAP4 responses, use C++ streams for I/0. More...
     
    void transform_to_cpp ()
     
    virtual ~HTTPResponse ()
     
    Accessors
    -virtual std::vector< std::string > * get_headers () const
     
    -virtual std::string get_file () const
     
    Mutators
    -virtual void set_headers (std::vector< std::string > *h)
     
    -virtual void set_file (const std::string &n)
     
    getters
    -virtual int get_status () const
     
    -virtual FILE * get_stream () const
     
    -virtual std::istream * get_cpp_stream () const
     
    -virtual ObjectType get_type () const
     
    -virtual std::string get_version () const
     
    -virtual std::string get_protocol () const
     
    setters
    -virtual void set_status (int s)
     
    -virtual void set_stream (FILE *s)
     
    -virtual void set_cpp_stream (std::istream *s)
     
    -virtual void set_type (ObjectType o)
     
    -virtual void set_version (const std::string &v)
     
    -virtual void set_protocol (const std::string &p)
     
    - - - - - - - - -

    -Protected Member Functions

    Suppressed default methods
    HTTPResponse ()
     
    HTTPResponse (const HTTPResponse &rs)
     
    -HTTPResponseoperator= (const HTTPResponse &)
     
    -

    Detailed Description

    -

    Encapsulate an http response. Instead of directly returning the FILE pointer from which a response is read and vector of headers, return an instance of this object.

    -
    Todo:
    Maybe refactor so that the header parsing code is here and not in HTTPConnect?
    - -

    Definition at line 56 of file HTTPResponse.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ HTTPResponse() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    libdap::HTTPResponse::HTTPResponse (FILE * s,
    int status,
    std::vector< std::string > * h,
    const std::string & temp_file 
    )
    -
    -inline
    -
    -

    Build an HTTPResponse object. An instance of this class is used to return an HTTP response (body and headers). If the response is really from a remote server, the current HTTP code stores the body in a temporary file and the headers in a vector<string> object. This class will delete those resources when its destructor is called. If the response does not have a temporary file that needs to be deleted (say it actually comes from a local cache or was read directly into memory), the temp file should be set to "".

    -
    Parameters
    - - - - - -
    sFILE * to the response. Read the response body from this stream.
    statusThe HTTP response status code.
    hResponse headers. This class will delete the pointer when the instance that contains it is destroyed.
    temp_fileName a the temporary file that holds the response body; this file is deleted when this instance is deleted.
    -
    -
    - -

    Definition at line 87 of file HTTPResponse.h.

    - -
    -
    - -

    ◆ HTTPResponse() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    libdap::HTTPResponse::HTTPResponse (std::fstream * s,
    int status,
    std::vector< std::string > * h,
    const std::string & temp_file 
    )
    -
    -inline
    -
    - -

    Build a HTTPResponse using a cpp fstream When working with DAP4 responses, use C++ streams for I/0.

    -
    Todo:
    Decide on how the temp files fit into DAP4
    -
    Parameters
    - - - - - -
    s
    status
    h
    temp_file
    -
    -
    - -

    Definition at line 105 of file HTTPResponse.h.

    - -
    -
    - -

    ◆ ~HTTPResponse()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual libdap::HTTPResponse::~HTTPResponse ()
    -
    -inlinevirtual
    -
    -

    When an instance is destroyed, free the temporary resources: the temp_file and headers are deleted. If the tmp file name is "", it is not deleted.

    - -

    Definition at line 117 of file HTTPResponse.h.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ transform_to_cpp()

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::HTTPResponse::transform_to_cpp ()
    -
    -inline
    -
    -

    Build a new HTTPResponse object that works with C++ streams. Assume that the FILE* references a disk file.

    Returns
    - -

    Definition at line 151 of file HTTPResponse.h.

    - -
    -
    -
    The documentation for this class was generated from the following file: -
    -
    - - - - diff --git a/html/classlibdap_1_1HTTPResponse.js b/html/classlibdap_1_1HTTPResponse.js deleted file mode 100644 index a608541f4..000000000 --- a/html/classlibdap_1_1HTTPResponse.js +++ /dev/null @@ -1,26 +0,0 @@ -var classlibdap_1_1HTTPResponse = -[ - [ "HTTPResponse", "classlibdap_1_1HTTPResponse.html#ad811b78884b86fe0028c9aa7fe91e63d", null ], - [ "HTTPResponse", "classlibdap_1_1HTTPResponse.html#ab8145e01fcaa440bf7d3d8b0e1f010a9", null ], - [ "HTTPResponse", "classlibdap_1_1HTTPResponse.html#afcfa13c872457f0f46af2ef8c3d09baa", null ], - [ "HTTPResponse", "classlibdap_1_1HTTPResponse.html#a544c05dec998de91e78c9a517041ac3c", null ], - [ "~HTTPResponse", "classlibdap_1_1HTTPResponse.html#aaaa8595779b1608ad1727bce9a308341", null ], - [ "get_cpp_stream", "classlibdap_1_1HTTPResponse.html#a0e9f20410cc36e2bd9f427840b7be3e1", null ], - [ "get_file", "classlibdap_1_1HTTPResponse.html#a445f06e173d3112bf4db050946c30fe9", null ], - [ "get_headers", "classlibdap_1_1HTTPResponse.html#a14d0202b95a11038b4b5283691fb2f9d", null ], - [ "get_protocol", "classlibdap_1_1HTTPResponse.html#a2a6b775e5fa6265fc9ac4f9c576e815c", null ], - [ "get_status", "classlibdap_1_1HTTPResponse.html#a1cba94a4d25c344985f5182a54e789b8", null ], - [ "get_stream", "classlibdap_1_1HTTPResponse.html#ad90b4fce34ae4d8c0b806c6424213b28", null ], - [ "get_type", "classlibdap_1_1HTTPResponse.html#ae39b13938ed524bbf14807c8a35b31cc", null ], - [ "get_version", "classlibdap_1_1HTTPResponse.html#afe78405b68946981c4b2d4e8cd305651", null ], - [ "operator=", "classlibdap_1_1HTTPResponse.html#aab2833dfcf4fd409e6ecee928e9faef8", null ], - [ "set_cpp_stream", "classlibdap_1_1HTTPResponse.html#a4f4ff88c4b09e011d285f633a6b6aba0", null ], - [ "set_file", "classlibdap_1_1HTTPResponse.html#a98b820cc398d3adc65731be4c2350f3e", null ], - [ "set_headers", "classlibdap_1_1HTTPResponse.html#a553706aaed4202ada58e49ab2eb1bf05", null ], - [ "set_protocol", "classlibdap_1_1HTTPResponse.html#aeeab3df1376b578b865c313dfe7b26ee", null ], - [ "set_status", "classlibdap_1_1HTTPResponse.html#a3de0ea86ac433904efdc0e4f4c86fa26", null ], - [ "set_stream", "classlibdap_1_1HTTPResponse.html#a5cda40501a3ce7b1675b13a6e0858020", null ], - [ "set_type", "classlibdap_1_1HTTPResponse.html#a7a7807d0a45dd1f6111987f054956e24", null ], - [ "set_version", "classlibdap_1_1HTTPResponse.html#a0eb078feca514d7d1f8428d9c001f262", null ], - [ "transform_to_cpp", "classlibdap_1_1HTTPResponse.html#aeb73ee749ec7e6f6b26b8a9985485184", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1HTTPResponse__inherit__graph.map b/html/classlibdap_1_1HTTPResponse__inherit__graph.map deleted file mode 100644 index 75b1b0adf..000000000 --- a/html/classlibdap_1_1HTTPResponse__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1HTTPResponse__inherit__graph.md5 b/html/classlibdap_1_1HTTPResponse__inherit__graph.md5 deleted file mode 100644 index 4e6ee802a..000000000 --- a/html/classlibdap_1_1HTTPResponse__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -985a50bf8910753a5a1819dd1f72311f \ No newline at end of file diff --git a/html/classlibdap_1_1HTTPResponse__inherit__graph.png b/html/classlibdap_1_1HTTPResponse__inherit__graph.png deleted file mode 100644 index c9c8c4268dd847053085e645b895ef8d8c0f9cef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74105 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 T+FiwQ0oTRzX6MSz+Ee}mW2VyE diff --git a/html/classlibdap_1_1Int16-members.html b/html/classlibdap_1_1Int16-members.html deleted file mode 100644 index 553bd7f13..000000000 --- a/html/classlibdap_1_1Int16-members.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -

    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::Int16 Member List
    -
    -
    - -

    This is the complete list of members for libdap::Int16, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    add_var(BaseType *bt, Part part=nil)libdap::BaseTypevirtual
    add_var_nocopy(BaseType *bt, Part part=nil) (defined in libdap::BaseType)libdap::BaseTypevirtual
    attributes()libdap::BaseTypevirtual
    BaseType(const string &n, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const string &n, const string &d, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const BaseType &copy_from)libdap::BaseType
    btp_stack typedef (defined in libdap::BaseType)libdap::BaseType
    buf2val(void **val)libdap::Int16virtual
    check_semantics(string &msg, bool all=false)libdap::BaseTypevirtual
    clear_local_data()libdap::BaseTypeinlinevirtual
    compute_checksum(Crc32 &checksum)libdap::Int16virtual
    d4_ops(BaseType *b, int op)libdap::Int16virtual
    d_buf (defined in libdap::Int16)libdap::Int16protected
    d_in_selection (defined in libdap::BaseType)libdap::BaseTypeprotected
    d_is_synthesized (defined in libdap::BaseType)libdap::BaseTypeprotected
    dataset() constlibdap::BaseTypevirtual
    deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)libdap::Int16virtual
    deserialize(D4StreamUnMarshaller &um, DMR &dmr)libdap::Int16virtual
    dump(ostream &strm) constlibdap::Int16virtual
    element_count(bool leaves=false)libdap::BaseTypevirtual
    FQN() constlibdap::BaseTypevirtual
    get_attr_table()libdap::BaseTypevirtual
    get_parent() constlibdap::BaseTypevirtual
    Int16(const string &n)libdap::Int16
    Int16(const string &n, const string &d)libdap::Int16
    Int16(const Int16 &copy_from) (defined in libdap::Int16)libdap::Int16
    intern_data(ConstraintEvaluator &eval, DDS &dds)libdap::BaseTypevirtual
    intern_data()libdap::BaseTypevirtual
    is_constructor_type() constlibdap::BaseTypevirtual
    is_dap4() const (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    is_in_selection()libdap::BaseTypevirtual
    is_simple_type() constlibdap::BaseTypevirtual
    is_vector_type() constlibdap::BaseTypevirtual
    length() constlibdap::BaseTypeinlinevirtual
    m_duplicate(const BaseType &bt)libdap::BaseTypeprotected
    name() constlibdap::BaseTypevirtual
    operator=(const Int16 &rhs) (defined in libdap::Int16)libdap::Int16
    operator=(const BaseType &rhs) (defined in libdap::BaseType)libdap::BaseType
    ops(BaseType *b, int op)libdap::Int16virtual
    print_dap4(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
    print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_val(FILE *out, string space="", bool print_decl_p=true)libdap::Int16virtual
    print_val(ostream &out, string space="", bool print_decl_p=true)libdap::Int16virtual
    print_xml(FILE *out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml(ostream &out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml_writer(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
    ptr_duplicate()libdap::Int16virtual
    read()libdap::BaseTypevirtual
    read_p()libdap::BaseTypevirtual
    send_p()libdap::BaseTypevirtual
    serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)libdap::Int16virtual
    serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)libdap::Int16virtual
    set_attr_table(const AttrTable &at)libdap::BaseTypevirtual
    set_attributes(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_attributes_nocopy(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_in_selection(bool state)libdap::BaseTypevirtual
    set_is_dap4(const bool v) (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    set_length(int)libdap::BaseTypeinlinevirtual
    set_name(const string &n)libdap::BaseTypevirtual
    set_parent(BaseType *parent)libdap::BaseTypevirtual
    set_read_p(bool state)libdap::BaseTypevirtual
    set_send_p(bool state)libdap::BaseTypevirtual
    set_synthesized_p(bool state)libdap::BaseTypevirtual
    set_type(const Type &t)libdap::BaseTypevirtual
    set_value(dods_int16 val) (defined in libdap::Int16)libdap::Int16virtual
    synthesized_p()libdap::BaseTypevirtual
    toString()libdap::BaseTypevirtual
    transfer_attributes(AttrTable *at)libdap::BaseTypevirtual
    transform_to_dap2(AttrTable *parent_attr_table)libdap::BaseTypevirtual
    transform_to_dap4(D4Group *root, Constructor *container)libdap::BaseTypevirtual
    type() constlibdap::BaseTypevirtual
    type_name() constlibdap::BaseTypevirtual
    val2buf(void *val, bool reuse=false)libdap::Int16virtual
    value() const (defined in libdap::Int16)libdap::Int16virtual
    var(const string &name="", bool exact_match=true, btp_stack *s=0)libdap::BaseTypevirtual
    var(const string &name, btp_stack &s)libdap::BaseTypevirtual
    width(bool constrained=false) constlibdap::Int16virtual
    ~BaseType() (defined in libdap::BaseType)libdap::BaseTypevirtual
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    ~Int16() (defined in libdap::Int16)libdap::Int16inlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1Int16.html b/html/classlibdap_1_1Int16.html deleted file mode 100644 index 6534e5d88..000000000 --- a/html/classlibdap_1_1Int16.html +++ /dev/null @@ -1,2924 +0,0 @@ - - - - - - - -libdap: libdap::Int16 Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    - -

    Holds a 16-bit signed integer value. - More...

    - -

    #include <Int16.h>

    -
    -Inheritance diagram for libdap::Int16:
    -
    -
    Inheritance graph
    - - - - -
    - - - - -

    -Public Types

    -typedef stack< BaseType * > btp_stack
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual void add_var (BaseType *bt, Part part=nil)
     Add a variable. More...
     
    -virtual void add_var_nocopy (BaseType *bt, Part part=nil)
     
    virtual unsigned int buf2val (void **val)
     Reads the class data. More...
     
    virtual bool check_semantics (string &msg, bool all=false)
     Compare an object's current state with the semantics of its type. More...
     
    virtual void clear_local_data ()
     
    virtual void compute_checksum (Crc32 &checksum)
     include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum. More...
     
    virtual bool d4_ops (BaseType *b, int op)
     
    virtual string dataset () const
     Returns the name of the dataset used to create this instance. More...
     
    virtual bool deserialize (UnMarshaller &um, DDS *dds, bool reuse=false)
     Receive data from the net. More...
     
    virtual void deserialize (D4StreamUnMarshaller &um, DMR &dmr)
     
    virtual void dump (ostream &strm) const
     dumps information about this object More...
     
    virtual int element_count (bool leaves=false)
     Count the members of constructor types. More...
     
    virtual std::string FQN () const
     
    virtual AttrTableget_attr_table ()
     
    virtual BaseTypeget_parent () const
     
     Int16 (const string &n)
     
     Int16 (const string &n, const string &d)
     
    Int16 (const Int16 &copy_from)
     
    virtual bool is_constructor_type () const
     Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable. More...
     
    -virtual bool is_dap4 () const
     
    virtual bool is_in_selection ()
     Is this variable part of the current selection? More...
     
    virtual bool is_simple_type () const
     Returns true if the instance is a numeric, string or URL type variable. More...
     
    virtual bool is_vector_type () const
     Returns true if the instance is a vector (i.e., array) type variable. More...
     
    virtual int length () const
     How many elements are in this variable. More...
     
    virtual string name () const
     Returns the name of the class instance. More...
     
    -Int16operator= (const Int16 &rhs)
     
    virtual bool ops (BaseType *b, int op)
     Evaluate relational operators. More...
     
    virtual void print_dap4 (XMLWriter &xml, bool constrained=false)
     
    virtual void print_decl (FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_decl (ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_val (FILE *out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_val (ostream &out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_xml (FILE *out, string space=" ", bool constrained=false)
     
    virtual void print_xml (ostream &out, string space=" ", bool constrained=false)
     
    virtual void print_xml_writer (XMLWriter &xml, bool constrained=false)
     
    virtual BaseTypeptr_duplicate ()
     
    virtual bool read ()
     Read data into a local buffer. More...
     
    virtual bool read_p ()
     Has this variable been read? More...
     
    virtual bool send_p ()
     Should this variable be sent? More...
     
    virtual bool serialize (ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
     Move data to the net, then remove them from the object. More...
     
    virtual void serialize (D4StreamMarshaller &m, DMR &dmr, bool filter=false)
     Serialize an Int8. More...
     
    virtual void set_attr_table (const AttrTable &at)
     
    virtual void set_in_selection (bool state)
     
    -virtual void set_is_dap4 (const bool v)
     
    virtual void set_length (int)
     Set the number of elements for this variable. More...
     
    virtual void set_name (const string &n)
     Sets the name of the class instance. More...
     
    virtual void set_parent (BaseType *parent)
     
    virtual void set_read_p (bool state)
     Sets the value of the read_p property. More...
     
    virtual void set_send_p (bool state)
     
    virtual void set_synthesized_p (bool state)
     
    virtual void set_type (const Type &t)
     Sets the type of the class instance. More...
     
    -virtual bool set_value (dods_int16 val)
     
    virtual bool synthesized_p ()
     
    virtual string toString ()
     
    virtual void transfer_attributes (AttrTable *at)
     
    virtual std::vector< BaseType * > * transform_to_dap2 (AttrTable *parent_attr_table)
     DAP4 to DAP2 transform. More...
     
    virtual void transform_to_dap4 (D4Group *root, Constructor *container)
     DAP2 to DAP4 transform. More...
     
    virtual Type type () const
     Returns the type of the class instance. More...
     
    virtual string type_name () const
     Returns the type of the class instance as a string. More...
     
    virtual unsigned int val2buf (void *val, bool reuse=false)
     Loads class data. More...
     
    -virtual dods_int16 value () const
     
    virtual BaseTypevar (const string &name="", bool exact_match=true, btp_stack *s=0)
     Returns a pointer to a member of a constructor class. More...
     
    virtual BaseTypevar (const string &name, btp_stack &s)
     
    virtual unsigned int width (bool constrained=false) const
     How many bytes does this variable use Return the number of bytes of storage this variable uses. For scalar types, this is pretty simple (an int32 uses 4 bytes, etc.). For arrays and Constructors, it is a bit more complex. Note that a scalar String variable uses sizeof(String*) bytes, not the length of the string value. The width() of a String array returns the number of elements in the array times sizeof(String*). More...
     
    virtual D4Attributesattributes ()
     
    -virtual void set_attributes (D4Attributes *)
     
    -virtual void set_attributes_nocopy (D4Attributes *)
     
    Abstract Methods
    virtual void intern_data (ConstraintEvaluator &eval, DDS &dds)
     
    virtual void intern_data ()
     Read data into this variable. More...
     
    - - - - -

    -Protected Member Functions

    void m_duplicate (const BaseType &bt)
     Perform a deep copy. More...
     
    - - - - - - - -

    -Protected Attributes

    -dods_int16 d_buf
     
    -bool d_in_selection
     
    -bool d_is_synthesized
     
    -

    Detailed Description

    -

    Holds a 16-bit signed integer value.

    - -

    Definition at line 59 of file Int16.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ Int16() [1/2]

    - -
    -
    - - - - - - - - -
    libdap::Int16::Int16 (const string & n)
    -
    -

    The Int16 constructor accepts the name of the variable to be created.

    -
    Parameters
    - - -
    nA string containing the name of the variable to be created.
    -
    -
    - -

    Definition at line 79 of file Int16.cc.

    - -
    -
    - -

    ◆ Int16() [2/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    libdap::Int16::Int16 (const string & n,
    const string & d 
    )
    -
    -

    The Int16 server-side constructor accepts the name of the variable and the dataset name from which this instance is created.

    -
    Parameters
    - - - -
    nA string containing the name of the variable to be created.
    dA string containing the name of the dataset from which this variable is created
    -
    -
    - -

    Definition at line 89 of file Int16.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ add_var()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::add_var (BaseTypebt,
    Part part = nil 
    )
    -
    -virtualinherited
    -
    - -

    Add a variable.

    -

    Adds a variable to an instance of a constructor class, such as Array, Structure et cetera. This function is only used by those classes. For constructors with more than one variable, the variables appear in the same order in which they were added (i.e., the order in which add_var() was called). Since this method is only for use by Vectors and Constructors, the BaseType implementation throws InternalErr.

    -
    Note
    For the implementation of this method in Structure, Sequence, et c., first copy bt and then insert the copy. If bt is itself a constructor type you must either use the var() method to get a pointer to the actual instance added to *this or you must first add all of bt's children to it before adding it to *this. The implementations should use m_duplicate() to perform a deep copy of bt.
    -
    Todo:
    We should get rid of the Part parameter and adopt the convention that the first variable is the Array and all subsequent ones are Maps (when dealing with a Grid, the only time Part matters). This would enable several methods to migrate from Structure, Sequence and Grid to Constructor.
    -
    Parameters
    - - - -
    btThe variable to be added to this instance. The caller of this method must free memory it allocates for v. This method will make a deep copy of the object pointed to by v.
    partThe part of the constructor data to be modified. Only meaningful for Grid variables.
    -
    -
    -
    See also
    Part
    - -

    Reimplemented in libdap::Vector, libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 815 of file BaseType.cc.

    - -
    -
    - -

    ◆ attributes()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4Attributes * libdap::BaseType::attributes ()
    -
    -virtualinherited
    -
    -

    DAP4 Attribute methods

    - -

    Definition at line 599 of file BaseType.cc.

    - -
    -
    - -

    ◆ buf2val()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::Int16::buf2val (void ** val)
    -
    -virtual
    -
    - -

    Reads the class data.

    -

    Reads the class data into the memory referenced by val. The caller should either allocate enough storage to val to hold the class data or set *val to null. If *val is NULL, memory will be allocated by this function with new(). If the memory is allocated this way, the caller is responsible for deallocating that memory. Array and values for simple types are stored as C would store an array.

    -
    Deprecated:
    Use value() in the leaf classes.
    -
    Parameters
    - - -
    valA pointer to a pointer to the memory into which the class data will be copied. If the value pointed to is NULL, memory will be allocated to hold the data, and the pointer value modified accordingly. The calling program is responsible for deallocating the memory references by this pointer.
    -
    -
    -
    Returns
    The size (in bytes) of the information copied to val.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 195 of file Int16.cc.

    - -
    -
    - -

    ◆ check_semantics()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::check_semantics (string & msg,
    bool all = false 
    )
    -
    -virtualinherited
    -
    - -

    Compare an object's current state with the semantics of its type.

    -

    This function checks the class instance for internal consistency. This is important to check for complex constructor classes. For BaseType, an object is semantically correct if it has both a non-null name and type.

    -

    For example, an Int32 instance would return FALSE if it had no name or no type defined. A Grid instance might return FALSE for more complex reasons, such as having Map arrays of the wrong size or shape.

    -

    This function is used by the DDS class, and will rarely, if ever, be explicitly called by a DODS application program. A variable must pass this test before it is sent, but there may be many other stages in a retrieve operation where it would fail.

    -
    Returns
    Returns FALSE when the current state violates some aspect of the type semantics, TRUE otherwise.
    -
    Parameters
    - - - -
    msgA returned string, containing a message indicating the source of any problem.
    allFor complex constructor types (Grid, Sequence, Structure), this flag indicates whether to check the semantics of the member variables, too.
    -
    -
    -
    See also
    DDS::check_semantics
    - -

    Reimplemented in libdap::Array, libdap::Vector, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1209 of file BaseType.cc.

    - -
    -
    - -

    ◆ clear_local_data()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual void libdap::BaseType::clear_local_data ()
    -
    -inlinevirtualinherited
    -
    -

    Remove any read or set data in the private data of the variable, setting read_p() to false. Used to clear any dynamically allocated storage that holds (potentially large) data. For the simple types, this no-op version is all that's needed. Vector and some other classes define a special version and have serialize() implementations that call it to free data as soon as possible after sending it.

    -
    Note
    Added 7/5/15 jhrg
    -
    -Any specialization of this should make sure to reset the read_p property.
    - -

    Reimplemented in libdap::Sequence, libdap::Vector, libdap::D4Sequence, and libdap::D4Opaque.

    - -

    Definition at line 179 of file BaseType.h.

    - -
    -
    - -

    ◆ compute_checksum()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Int16::compute_checksum (Crc32checksum)
    -
    -virtual
    -
    - -

    include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum.

    -
    Parameters
    - - -
    checksumA Crc32 instance that holds the current checksum.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 150 of file Int16.cc.

    - -
    -
    - -

    ◆ d4_ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::Int16::d4_ops (BaseTypeb,
    int op 
    )
    -
    -virtual
    -
    -
    See also
    BaseType::d4_ops(BaseType *, int)
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 274 of file Int16.cc.

    - -
    -
    - -

    ◆ dataset()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::dataset () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the dataset used to create this instance.

    -

    A dataset from which the data is to be read. The meaning of this string will vary among different types of data sources. It may be the name of a data file or an identifier used to read data from a relational database.

    - -

    Definition at line 358 of file BaseType.cc.

    - -
    -
    - -

    ◆ deserialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::Int16::deserialize (UnMarshallerum,
    DDSdds,
    bool reuse = false 
    )
    -
    -virtual
    -
    - -

    Receive data from the net.

    -

    Receives data from the network connection identified by the source parameter. The data is put into the class data buffer according to the input dds.

    -

    This function is only used on the client side of the DODS client/server connection.

    -
    Parameters
    - - - - -
    umAn UnMarshaller that knows how to deserialize data types
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure. This would have been received from the server in an earlier transmission.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect.
    -
    -
    -
    Returns
    Always returns TRUE.
    -
    Exceptions
    - - -
    Errorwhen a problem reading from the UnMarshaller is found.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 142 of file Int16.cc.

    - -
    -
    - -

    ◆ deserialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Int16::deserialize (D4StreamUnMarshallerum,
    DMRdmr 
    )
    -
    -virtual
    -
    -

    The DAP4 deserialization method.

    Parameters
    - - - -
    um
    dmr
    -
    -
    -
    Exceptions
    - - -
    Erroror InternalErr
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 173 of file Int16.cc.

    - -
    -
    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Int16::dump (ostream & strm) const
    -
    -virtual
    -
    - -

    dumps information about this object

    -

    Displays the pointer value of this instance and information about this instance.

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the information to
    -
    -
    -
    Returns
    void
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 314 of file Int16.cc.

    - -
    -
    - -

    ◆ element_count()

    - -
    -
    - - - - - -
    - - - - - - - - -
    int libdap::BaseType::element_count (bool leaves = false)
    -
    -virtualinherited
    -
    - -

    Count the members of constructor types.

    -

    Return a count of the total number of variables in this variable. This is used to count the number of variables held by a constructor variable - for simple type and vector variables it always returns 1.

    -

    For compound data types, there are two ways to count members. You can count the members, or you can count the simple members and add that to the count of the compound members. For example, if a Structure contains an Int32 and another Structure that itself contains two Int32 members, the element count of the top-level structure could be two (one Int32 and one Structure) or three (one Int32 by itself and two Int32's in the subsidiary Structure). Use the leaves parameter to control which kind of counting you desire.

    -
    Returns
    Returns 1 for simple types. For compound members, the count depends on the leaves argument.
    -
    Parameters
    - - -
    leavesThis parameter is only relevant if the object contains other compound data types. If FALSE, the function counts only the data variables mentioned in the object's declaration. If TRUE, it counts the simple members, and adds that to the sum of the counts for the compound members. This parameter has no effect for simple type variables.
    -
    -
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 443 of file BaseType.cc.

    - -
    -
    - -

    ◆ FQN()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::FQN () const
    -
    -virtualinherited
    -
    -

    Return the FQN for this variable. This will include the D4 Group component of the name.

    -
    Returns
    The FQN in a string
    - -

    Reimplemented in libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 332 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - -
    AttrTable & libdap::BaseType::get_attr_table ()
    -
    -virtualinherited
    -
    -

    Get this variable's AttrTable. It's generally a bad idea to return a reference to a contained object, but in this case it seems that building an interface inside BaseType is overkill.

    -

    Use the AttrTable methods to manipulate the table.

    - -

    Definition at line 582 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_parent()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::BaseType::get_parent () const
    -
    -virtualinherited
    -
    -

    Return a pointer to the Constructor or Vector which holds (contains) this variable. If this variable is at the top level, this method returns null.

    -
    Returns
    A BaseType pointer to the variable's parent.
    - -

    Definition at line 751 of file BaseType.cc.

    - -
    -
    - -

    ◆ intern_data() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::intern_data (ConstraintEvaluatoreval,
    DDSdds 
    )
    -
    -virtualinherited
    -
    -

    Similar to using serialize() and deserialize() together in one object. Data are read as for serialize and those values are stored in the objects as deserialize() does but does not write and then read data to/from a stream.

    -

    This method is defined by the various data type classes. It calls the read() abstract method. Unlike serialize(), this method does not clear the memory use to hold the data values, so the caller should make sure to delete the DDS or the variable as soon as possible.

    -
    Parameters
    - - - -
    evalUse this as the constraint expression evaluator.
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    -
    -
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 908 of file BaseType.cc.

    - -
    -
    - -

    ◆ intern_data() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::BaseType::intern_data ()
    -
    -virtualinherited
    -
    - -

    Read data into this variable.

    -
    Parameters
    - - - -
    evalEvaluator for a constraint expression
    dmrDMR for the whole dataset
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 927 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_constructor_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_constructor_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable.

    -
    Returns
    True if the instance is a Structure, Sequence or Grid, False otherwise.
    - -

    Definition at line 412 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_in_selection ()
    -
    -virtualinherited
    -
    - -

    Is this variable part of the current selection?

    -

    Does this variable appear in either the selection part or as a function argument in the current constrain expression. If this property is set (true) then implementations of the read() method should read this variable.

    -
    Note
    This method does not check, nor does it know about the semantics of, string arguments passed to functions. Those functions might include variable names in strings; they are responsible for reading those variables. See the grid (func_grid_select()) for an example.
    -
    See also
    BaseType::read()
    - -

    Definition at line 703 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_simple_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_simple_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a numeric, string or URL type variable.

    -
    Returns
    True if the instance is a scalar numeric, String or URL variable, False otherwise. Arrays (even of simple types) return False.
    -
    See also
    is_vector_type()
    - -

    Definition at line 393 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_vector_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_vector_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a vector (i.e., array) type variable.

    -
    Returns
    True if the instance is an Array, False otherwise.
    - -

    Definition at line 402 of file BaseType.cc.

    - -
    -
    - -

    ◆ length()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual int libdap::BaseType::length () const
    -
    -inlinevirtualinherited
    -
    - -

    How many elements are in this variable.

    -
    Todo:
    change the return type to int64_t
    -
    Returns
    The number of elements; 1 for scalars
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, libdap::Str, and libdap::D4Opaque.

    - -

    Definition at line 207 of file BaseType.h.

    - -
    -
    - -

    ◆ m_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::m_duplicate (const BaseTypebt)
    -
    -protectedinherited
    -
    - -

    Perform a deep copy.

    -

    Perform a deep copy. Copies the values of bt into *this. Pointers are dereferenced and their values are copied into a newly allocated instance.

    -
    Parameters
    - - -
    btThe source object.
    -
    -
    - -

    Definition at line 86 of file BaseType.cc.

    - -
    -
    - -

    ◆ name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::name () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the class instance.

    - -

    Definition at line 320 of file BaseType.cc.

    - -
    -
    - -

    ◆ ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::Int16::ops (BaseTypeb,
    int op 
    )
    -
    -virtual
    -
    - -

    Evaluate relational operators.

    -

    This method contains the relational operators used by the constraint expression evaluator in the DDS class. Each class that wants to be able to evaluate relational expressions must overload this function. The implementation in BaseType throws an InternalErr exception. The DAP library classes Byte, ..., Url provide specializations of this method. It is not meaningful for classes such as Array because relational expressions using Array are not supported.

    -

    The op argument refers to a table generated by bison from the constraint expression parser. Use statements like the following to correctly interpret its value:

    -
    switch (op) {
    -    case EQUAL: return i1 == i2;
    -    case NOT_EQUAL: return i1 != i2;
    -    case GREATER: return i1 > i2;
    -    case GREATER_EQL: return i1 >= i2;
    -    case LESS: return i1 < i2;
    -    case LESS_EQL: return i1 <= i2;
    -    case REGEXP: throw Error("Regular expressions are not supported for integer values");
    -    default: throw Error("Unknown operator");
    -}
    -

    This function is used by the constraint expression evaluator.

    -
    Parameters
    - - - -
    bCompare the value of this instance with b.
    opAn integer index indicating which relational operator is implied. Choose one from the following: EQUAL, NOT_EQUAL, GREATER, GREATER_EQL, LESS, LESS_EQL, and REGEXP.
    -
    -
    -
    Returns
    The boolean value of the comparison.
    -
    See also
    BaseType::d4_ops(BaseType *, int)
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 245 of file Int16.cc.

    - -
    -
    - -

    ◆ print_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_dap4 (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the DAP4 XML representation for this variable. This method is used to build the DAP4 DMR response object.

    -
    Parameters
    - - - -
    xmlAn XMLWriter that will do the serialization
    constrainedTrue if the response should show the variables subject to the current constraint expression.
    -
    -
    - -

    Reimplemented in libdap::Array, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 1164 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (FILE * out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1003 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (ostream & out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1054 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_val() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Int16::print_val (FILE * out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtual
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output stream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 226 of file Int16.cc.

    - -
    -
    - -

    ◆ print_val() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Int16::print_val (ostream & out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtual
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output ostream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 234 of file Int16.cc.

    - -
    -
    - -

    ◆ print_xml() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (FILE * out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination.
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1105 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (ostream & out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1120 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml_writer()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml_writer (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    - -

    Reimplemented in libdap::Array, libdap::D4Enum, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1134 of file BaseType.cc.

    - -
    -
    - -

    ◆ ptr_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::Int16::ptr_duplicate ()
    -
    -virtual
    -
    -

    Clone this instance. Allocate a new instance and copy *this into it. This method must perform a deep copy.

    @note This method should \e not copy data values, but must copy all
    -other fields in the object.
    -
    Returns
    A newly allocated copy of this.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 98 of file Int16.cc.

    - -
    -
    - -

    ◆ read()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read ()
    -
    -virtualinherited
    -
    - -

    Read data into a local buffer.

    -

    This method should be implemented for each of the data type classes (Byte, ..., Grid) when using the DAP class library to build a server. This method is only for DAP servers. The library provides a default definition here which throws an InternalErr exception unless the read_p property has been set. In that case it returns false, indicating that all the data have been read. The latter case can happen when building a constant value that needs to be passed to a function. The variable/constant is loaded with a value when it is created.

    -

    When implementing a new DAP server, the Byte, ..., Grid data type classes are usually specialized. In each of those specializations read() should be defined to read values from the data source and store them in the object's local buffer. The read() method is called by other methods in this library. When writing read(), follow these rules:

    -
      -
    • -read() should throw Error if it encounters an error. The message should be verbose enough to be understood by someone running a client on a different machine.
    • -
    • -The value(s) should be read if and only if either send_p() or is_in_selection() return true. If neither of these return true, the value(s) should not be read. This is important when writing read() for a Constructor type such as Grid where a client may ask for only the map vectors (and thus reading the much larger Array part is not needed).
    • -
    • -For each specialization of read(), the method should first test the value of the read_p property (using the read_p() method) and read values only if the value of read_p() is false. Once the read() method reads data and stores it in the instance, it must set the value of the read_p property to true using set_read_p(). If your read() methods fail to do this data may not serialize correctly.
    • -
    • -The Array::read() and Grid::read() methods should take into account any restrictions on Array sizes.
    • -
    • -If you are writing Sequence::read(), be sure to check the documentation for Sequence::read_row() and Sequence::serialize() so you understand how Sequence::read() is being called.
    • -
    • -

      For Sequence::read(), your specialization must correctly manage the unsent_data property and row count in addition to the read_p property (handle the read_p property as describe above). For a Sequence to serialize correctly, once all data from the Sequence has been read, unsent_data property must be set to false (use Sequence::set_unsent_data()). Also, at that time the row number counter must be reset (use Sequence::reset_row_counter()). Typically the correct time to set unsent_data to false and reset the row counter is the time when Sequence::read() return false indicating that all the data for the Sequence have been read. Failure to handle these tasks will break serialization of nested Sequences. Note that when Sequence::read() returns with a result of true (indicating there is more data to send, the value of the unsent_data property should be true.

      -

      Also, if you server must handle nested sequences, be sure to read about subclassing set_read_p().

      -
    • -
    -
    Todo:
    Modify the D4 serialize code so that it supports the true/false behavior of read() for arrays.
    -
    Todo:
    Modify all of the stock handlers so they conform to this!
    -
    Returns
    False means more data remains to be read, True indicates that no more data need to be read. For Sequence and D4Sequence, this method will generally read one instance of the Sequence; for other types it will generally read the entire variable modulo any limitations due to a constraint. However, the library should be written so that read can return less than all of the data for a variable - serialize() would then call the function until it returns True.
    -
    See also
    BaseType
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 899 of file BaseType.cc.

    - -
    -
    - -

    ◆ read_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read_p ()
    -
    -virtualinherited
    -
    - -

    Has this variable been read?

    -

    Returns true if the value(s) for this variable have been read from the data source, otherwise returns false. This method is used to determine when values need to be read using the read() method. When read_p() returns true, this library assumes that buf2val() (and other methods such as get_vec()) can be used to access the value(s) of a variable.

    -
    Returns
    True if the variable's value(s) have been read, false otherwise.
    - -

    Definition at line 480 of file BaseType.cc.

    - -
    -
    - -

    ◆ send_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::send_p ()
    -
    -virtualinherited
    -
    - -

    Should this variable be sent?

    -

    Returns the state of the send_p property. If true, this variable should be sent to the client, if false, it should not. If no constraint expression (CE) has been evaluated, this property is true for all variables in a data source (i.e., for all the variables listed in a DDS). If a CE has been evaluated, this property is true only for those variables listed in the projection part of the CE.

    -
    Returns
    True if the variable should be sent to the client, false otherwise.
    - -

    Definition at line 554 of file BaseType.cc.

    - -
    -
    - -

    ◆ serialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::Int16::serialize (ConstraintEvaluatoreval,
    DDSdds,
    Marshallerm,
    bool ce_eval = true 
    )
    -
    -virtual
    -
    - -

    Move data to the net, then remove them from the object.

    -

    Sends the data from the indicated (local) dataset through the connection identified by the Marshaller parameter. If the data is not already incorporated into the DDS object, read the data from the dataset. Once the data are sent (written to the Marshaller), they are deleted from the object and the object state is reset so that they will be read again if the read() method is called.

    -

    This function is only used on the server side of the client/server connection, and is generally only called from the ResponseBuilder functions. It has no BaseType implementation; each datatype child class supplies its own implementation.

    @param eval Use this as the constraint expression evaluator.
    -
    Parameters
    - - - - -
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    mA marshaller used to serialize data types
    ce_evalA boolean value indicating whether to evaluate the DODS constraint expression that may accompany this dataset. The constraint expression is stored in the dds.
    -
    -
    -
    Returns
    This method always returns true. Older versions used the return value to signal success or failure.
    -
    Note
    We changed the default behavior of this method so that it calls BaseType::clear_local_data() once the values are sent. This, combined with the behavior that read() is called by this method just before data are sent, means that data for any given variable remain in memory for the shortest time possible. Furthermore, since variables are serialized one at a time, no more than one variable's data will be in memory at any given time when using the default behavior. Some code - code that uses intern_data() or server functions - might alter this default behavior. Only Array (i.e. Vector), Sequence, D4Sequence and D4Opaque types actually hold data in dynamically allocated memory, so sonly those types have the new/changed behavior. This change was made on 7/5/15.
    -
    Exceptions
    - - - -
    InternalErr.
    Error.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 123 of file Int16.cc.

    - -
    -
    - -

    ◆ serialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Int16::serialize (D4StreamMarshallerm,
    DMRdmr,
    bool filter = false 
    )
    -
    -virtual
    -
    - -

    Serialize an Int8.

    -
    Parameters
    - - - - - -
    m
    dmrUnused
    evalUnused
    filterUnused
    -
    -
    -
    Exceptions
    - - -
    Erroris thrown if the value needs to be read and that operation fails.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 164 of file Int16.cc.

    - -
    -
    - -

    ◆ set_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_attr_table (const AttrTableat)
    -
    -virtualinherited
    -
    -

    Set this variable's attribute table.

    Parameters
    - - -
    atSource of the attributes.
    -
    -
    - -

    Definition at line 590 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_in_selection (bool state)
    -
    -virtualinherited
    -
    -

    Set the in_selection property to state. This property indicates that the variable is used as a parameter to a constraint expression function or that it appears as an argument in a selection sub-expression. If set (true), implementations of the BaseType::read() method should read this variable.

    -
    Parameters
    - - -
    stateSet the in_selection property to this state.
    -
    -
    -
    See also
    BaseType::read()
    -
    -BaseType::is_in_selection() for more information.
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 718 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_length()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::BaseType::set_length (int )
    -
    -inlinevirtualinherited
    -
    - -

    Set the number of elements for this variable.

    -
    Todo:
    change param type to int64_t
    -
    Parameters
    - - -
    lThe number of elements
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, and libdap::Vector.

    - -

    Definition at line 214 of file BaseType.h.

    - -
    -
    - -

    ◆ set_name()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_name (const string & n)
    -
    -virtualinherited
    -
    - -

    Sets the name of the class instance.

    - -

    Reimplemented in libdap::Vector.

    - -

    Definition at line 344 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_parent()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_parent (BaseTypeparent)
    -
    -virtualinherited
    -
    -

    Set the parent property for this variable.

    -
    Note
    Added ability to set parent to null. 10/19/12 jhrg
    -
    Parameters
    - - -
    parentPointer to the Constructor of Vector parent variable or null if the variable has no parent (if it is at the top-level of a DAP2/3 DDS).
    -
    -
    -
    Exceptions
    - - -
    InternalErrthrown if called with anything other than a Constructor, Vector or Null.
    -
    -
    - -

    Definition at line 733 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_read_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_read_p (bool state)
    -
    -virtualinherited
    -
    - -

    Sets the value of the read_p property.

    -

    Sets the value of the read_p property. This indicates that the value(s) of this variable has/have been read. An implementation of the read() method should use this to set the read_p property to true.

    -
    Note
    If the is_synthesized property is true, this method will not alter the is_read property. If you need that behavior, specialize the method in your subclasses if the various types.
    -
    -For most of the types the default implementation of this method is fine. However, if you're building a server which must handle data represented using nested sequences, then you may need to provide a specialization of Sequence::set_read_p(). By default Sequence::set_read_p() recursively sets the read_p property for all child variables to state. For servers where one Sequence reads an outer set of values and another reads an inner set, this is cumbersome. In such a case, it is easier to specialize Sequence::set_read_p() so that it does not recursively set the read_p property for the inner Sequence. Be sure to see the documentation for the read() method!
    -
    Todo:
    Look at making synthesized variables easier to implement and at making them more integrated into the overall CE evaluation process. Maybe the code that computes the synthesized var's value should be in the that variable's read() method? This might provide a way to get rid of the awkward 'projection functions' by replacing them with real children of BaseType. It would also provide a way to clean up the way the synthesized_p prop intrudes on the read_p prop.
    -
    See also
    BaseType::read()
    -
    Parameters
    - - -
    stateSet the read_p property to this state.
    -
    -
    - -

    Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 516 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_send_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_send_p (bool state)
    -
    -virtualinherited
    -
    -

    Sets the value of the send_p flag. This function is meant to be called from within the constraint evaluator of other code which determines that this variable should be returned to the client. Data are ready to be sent when both the d_is_send and d_is_read flags are set to TRUE.

    -
    Parameters
    - - -
    stateThe logical state to set the send_p flag.
    -
    -
    - -

    Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 568 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_synthesized_p (bool state)
    -
    -virtualinherited
    -
    -

    Set the synthesized flag. Before setting this flag be sure to set the read_p() state. Once this flag is set you cannot alter the state of the read_p flag!

    -
    See also
    synthesized_p()
    - -

    Definition at line 463 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_type()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_type (const Typet)
    -
    -virtualinherited
    -
    - -

    Sets the type of the class instance.

    - -

    Definition at line 372 of file BaseType.cc.

    - -
    -
    - -

    ◆ synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::synthesized_p ()
    -
    -virtualinherited
    -
    -

    Returns true if the variable is a synthesized variable. A synthesized variable is one that is added to the dataset by the server (usually with a `projection function'.

    - -

    Definition at line 452 of file BaseType.cc.

    - -
    -
    - -

    ◆ toString()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::toString ()
    -
    -virtualinherited
    -
    -

    Write out the object's internal fields in a string. To be used for debugging when regular inspection w/ddd or gdb isn't enough.

    -
    Returns
    A string which shows the object's internal stuff.
    - -

    Reimplemented in libdap::Sequence.

    - -

    Definition at line 184 of file BaseType.cc.

    - -
    -
    - -

    ◆ transfer_attributes()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::transfer_attributes (AttrTableat_container)
    -
    -virtualinherited
    -
    -

    Transfer attributes from a DAS object into this variable. Because of the rough history of the DAS object and the way that various server code built the DAS, this is necessarily a heuristic process. The intent is that this method will be overridden by handlers that need to look for certain patterns in the DAS (e.g., hdf4's odd variable_dim_n; where n = 0, 1, 2, ...) attribute containers.

    -

    There should be a one-to-one mapping between variables and attribute containers. However, in some cases one variable has attributes spread across several top level containers and in some cases one container is used by several variables

    -
    Note
    This method is technically unnecessary because a server (or client) can easily add attributes directly using the DDS::get_attr_table or BaseType::get_attr_table methods and then poke values in using any of the methods AttrTable provides. This method exists to ease the transition to DDS objects which contain attribute information for the existing servers (Since they all make DAS objects separately from the DDS). They could be modified to use the same AttrTable methods but operate on the AttrTable instances in a DDS/BaseType instead of those in a DAS.
    -
    Parameters
    - - -
    at_containerTransfer attributes from this container.
    -
    -
    -
    Returns
    void
    - -

    Reimplemented in libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 644 of file BaseType.cc.

    - -
    -
    - -

    ◆ transform_to_dap2()

    - -
    -
    - - - - - -
    - - - - - - - - -
    std::vector< BaseType * > * libdap::BaseType::transform_to_dap2 (AttrTableparent_attr_table)
    -
    -virtualinherited
    -
    - -

    DAP4 to DAP2 transform.

    -

    For the current BaseType, return a DAP2 'copy' of the variable.

    -
    Note
    For most DAP4 types, in this implementation of DAP2 the corresponding DAP4 type is the same. These types have a different representations in DAP2 and DAP4: Sequences (which are D4Sequences in the DAP4 implementation),
      -
    • Grids (which are semantically subsumed by coverages in DAP4)
    • -
    • Arrays (which use shared dimensions in DAP4)
    • -
    -
    -

    Additionally DAP4 adds the following types:

      -
    • UInt8, Int8, and Char which map to Byte in DAP2.
    • -
    • Int64, Unit64 which have no natural representation in DAP2.
    • -
    • Opaque Possible Byte stuff[] plus metadata?
    • -
    • Enum's can be represented as Int32.
    • -
    • Groups, with the exception of the root group "disappear" into the names of their member variables. Specifically the Group name is add as a prefix followed by a "/" separator to the names of all of the Group's member groups variables.
    • -
    -
    Parameters
    - - -
    TheAttrTable pointer parent_attr_table is used by Groups, which disappear from the DAP2 representation. Their children are returned in the the BAseType vector their attributes are added to parent_attr_table;
    -
    -
    -
    Returns
    A pointer to a vector of BaseType pointers (right?). In most cases this vector will contain a single pointer but DAP4 types 'disappear' such as Group will return all of their member variables in the vector. DAP4 types with no representation in DAP2 (ex: UInt64) the will return a NULL pointer and so this must be tested!
    - -

    Reimplemented in libdap::Array, libdap::D4Enum, libdap::D4Group, libdap::D4Opaque, libdap::Byte, libdap::Structure, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 259 of file BaseType.cc.

    - -
    -
    - -

    ◆ transform_to_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::transform_to_dap4 (D4Grouproot,
    Constructorcontainer 
    )
    -
    -virtualinherited
    -
    - -

    DAP2 to DAP4 transform.

    -

    For the current BaseType, return a DAP4 'copy' of the variable.

    -
    Note
    For most DAP2 types, in this implementation of DAP4 the corresponding DAP4 type is the same. The different types are Sequences (which are D4Sequences in the DAP4 implementation), Grids (which are coverages) and Arrays (which use shared dimensions).
    -
    Parameters
    - - - -
    rootThe root group that should hold this new variable. Add Group-level stuff here (e.g., D4Dimensions).
    containerAdd the new variable to this container.
    -
    -
    -
    Returns
    A pointer to the transformed variable
    - -

    Reimplemented in libdap::Sequence, libdap::Array, libdap::Grid, libdap::Structure, and libdap::Constructor.

    - -

    Definition at line 216 of file BaseType.cc.

    - -
    -
    - -

    ◆ type()

    - -
    -
    - - - - - -
    - - - - - - - -
    Type libdap::BaseType::type () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance.

    - -

    Definition at line 365 of file BaseType.cc.

    - -
    -
    - -

    ◆ type_name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::type_name () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance as a string.

    - -

    Definition at line 379 of file BaseType.cc.

    - -
    -
    - -

    ◆ val2buf()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    unsigned int libdap::Int16::val2buf (void * val,
    bool reuse = false 
    )
    -
    -virtual
    -
    - -

    Loads class data.

    -

    Store the value pointed to by val in the object's internal buffer. This function does not perform any checks, so users must be sure that the thing pointed to can actually be stored in the object's buffer.

    -

    Only simple objects (Int, Float, Byte, and so on) and arrays of these simple objects may be stored using this function. To put data into more complex constructor types, use the functions provided by that class.

    -
    Deprecated:
    Use set_value() in the leaf classes.
    -
    Parameters
    - - - -
    valA pointer to the data to be inserted into the class data buffer.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect. This is currently used only in the Vector class.
    -
    -
    -
    Returns
    The size (in bytes) of the information copied from val.
    -
    See also
    Grid
    -
    -Vector::val2buf
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 179 of file Int16.cc.

    - -
    -
    - -

    ◆ var() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::BaseType::var (const string & name = "",
    bool exact_match = true,
    btp_stack * s = 0 
    )
    -
    -virtualinherited
    -
    - -

    Returns a pointer to a member of a constructor class.

    -

    Returns a pointer to the contained variable in a composite class. The composite classes are those made up of aggregated simple data types. Array, Grid, and Structure are composite types, while Int and Float are simple types. This function is only used by composite classes. The BaseType implementation always returns null.

    -

    Several of the subclasses provide alternate access methods that make sense for that particular data type. For example, the Array class defines a *var(int i) method that returns the ith entry in the Array data, and the Structure provides a *var(Vars_iter) function using a pseudo-index to access the different members of the structure.

    -
    Parameters
    - - - - -
    nameThe name of the class member. Defaults to ""
    exact_matchTrue if only interested in variables whose full names match n exactly. If false, returns the first variable whose name matches name. For example, if name is x and point.x is a variable, then var("x", false) would return a BaseType pointer to point.x. If exact_match was true then name would need to be "point.x" for var to return that pointer. This feature simplifies constraint expressions for datasets which have complex, nested, constructor variables. Defaults to true.
    sRecord the path to name. Defaults to null, in which case it is not used.
    -
    -
    -
    Returns
    A pointer to the member named in the n argument. If no name is given, the function returns the first (only) variable. For example, an Array has only one variable, while a Structure can have many.
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 758 of file BaseType.cc.

    - -
    -
    - -

    ◆ var() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::BaseType::var (const string & name,
    btp_stack & s 
    )
    -
    -virtualinherited
    -
    -

    This version of var(...) searches for name and returns a pointer to the BaseType object if found. It uses the same search algorithm as BaseType::var(const string &, bool, btp_stack *) when exact_match is false. In addition to returning a pointer to the variable, it pushes onto s a BaseType pointer to each constructor type that ultimately contains name.

    -
    Note
    The BaseType implementation always returns null. There are no default values for the parameters. If var() is called w/o any params, the three parameter version will be used.
    -
    Deprecated:
    This method is deprecated because it tries first to use exact_match and, if that fails, then tries leaf_match. It's better to use the alternate form of var(...) and specify exactly what you'd like to do.
    -
    Returns
    A pointer to the named variable.
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 780 of file BaseType.cc.

    - -
    -
    - -

    ◆ width()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::Int16::width (bool constrained = false) const
    -
    -virtual
    -
    - -

    How many bytes does this variable use Return the number of bytes of storage this variable uses. For scalar types, this is pretty simple (an int32 uses 4 bytes, etc.). For arrays and Constructors, it is a bit more complex. Note that a scalar String variable uses sizeof(String*) bytes, not the length of the string value. The width() of a String array returns the number of elements in the array times sizeof(String*).

    -
    Parameters
    - - -
    constrainedShould the current constraint be taken into account?
    -
    -
    -
    Returns
    Bytes of storage
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 117 of file Int16.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1Int16.js b/html/classlibdap_1_1Int16.js deleted file mode 100644 index e519aadd6..000000000 --- a/html/classlibdap_1_1Int16.js +++ /dev/null @@ -1,78 +0,0 @@ -var classlibdap_1_1Int16 = -[ - [ "btp_stack", "classlibdap_1_1Int16.html#ae9c6e71855b90a0e552713011c9ab81f", null ], - [ "Int16", "classlibdap_1_1Int16.html#a8221f1fa8aaf054c72059a48e5ec2753", null ], - [ "Int16", "classlibdap_1_1Int16.html#a40e5dd3ede0dce7a1b15320358519d6f", null ], - [ "~Int16", "classlibdap_1_1Int16.html#a6c6285fb38705f00e8b766e5edc17923", null ], - [ "Int16", "classlibdap_1_1Int16.html#a89761a72409722d72d5186d9aea825e0", null ], - [ "add_var", "classlibdap_1_1Int16.html#adca3c2621c4a509537c18362005d7f7f", null ], - [ "add_var_nocopy", "classlibdap_1_1Int16.html#aa1192360cea4dc516c822cd3e13dc723", null ], - [ "attributes", "classlibdap_1_1Int16.html#a97452f06d2188eb838399a709246b5e9", null ], - [ "buf2val", "classlibdap_1_1Int16.html#a7b1983c756a0c27942fc2a7563bb5d2e", null ], - [ "check_semantics", "classlibdap_1_1Int16.html#aec503abec2fd3090e7738c0a575491f8", null ], - [ "clear_local_data", "classlibdap_1_1Int16.html#aaddb97a4efbe035f41deaf03c6e8683f", null ], - [ "compute_checksum", "classlibdap_1_1Int16.html#aa413c9da6c53e3bc7a7c3e727b139941", null ], - [ "d4_ops", "classlibdap_1_1Int16.html#ae02bd87bfcc0479c36c1e6b625e0fcdc", null ], - [ "dataset", "classlibdap_1_1Int16.html#a47521ce321a17e6ce217870cb6a1a7aa", null ], - [ "deserialize", "classlibdap_1_1Int16.html#a2f5bf801ac701d4b886c22abd75794df", null ], - [ "deserialize", "classlibdap_1_1Int16.html#a0f454a350731ba04f593466e6c45551e", null ], - [ "dump", "classlibdap_1_1Int16.html#a39829155a76b195e6a9c62e06d50bc0f", null ], - [ "element_count", "classlibdap_1_1Int16.html#a5c2235737737b482bfa7536b8aeab810", null ], - [ "FQN", "classlibdap_1_1Int16.html#a977cb954cc8f0d914d6f66ea0f48a9e3", null ], - [ "get_attr_table", "classlibdap_1_1Int16.html#a1fcd9537c67e3bf88964b2656ff5bac1", null ], - [ "get_parent", "classlibdap_1_1Int16.html#a3459cdaa239c33ce111ef360d8dc3017", null ], - [ "intern_data", "classlibdap_1_1Int16.html#a722d33783aa0272d339b0301a4f77e59", null ], - [ "intern_data", "classlibdap_1_1Int16.html#a1956e6ea90a745516f5372c859173433", null ], - [ "is_constructor_type", "classlibdap_1_1Int16.html#a8b8490e0047c6da52945699a132008ea", null ], - [ "is_dap4", "classlibdap_1_1Int16.html#a7f6835cb5e5589ab5dad3fb4813d3bea", null ], - [ "is_in_selection", "classlibdap_1_1Int16.html#ae302ab2ec26e9fc5b575bf5d3d09aa5c", null ], - [ "is_simple_type", "classlibdap_1_1Int16.html#aae57e5b270b3a015d40c8db10b9b5549", null ], - [ "is_vector_type", "classlibdap_1_1Int16.html#a7107c76dbcab71015141142383b6d022", null ], - [ "length", "classlibdap_1_1Int16.html#aadcda7a659157bc6a832d8a5fb775b3f", null ], - [ "m_duplicate", "classlibdap_1_1Int16.html#a0c55b826c8c5dfe7a454dc670e859a41", null ], - [ "name", "classlibdap_1_1Int16.html#a24c5d67823b3cff7f4245a993072a142", null ], - [ "operator=", "classlibdap_1_1Int16.html#a68375240267e7ab5324bd77cf86379d8", null ], - [ "ops", "classlibdap_1_1Int16.html#ad72c7db64b35bf1e8ad8aa7e27526cb9", null ], - [ "print_dap4", "classlibdap_1_1Int16.html#afcddbe441380b95c894510c02980b163", null ], - [ "print_decl", "classlibdap_1_1Int16.html#a2d799fad93255d7f2b803562ae7a5784", null ], - [ "print_decl", "classlibdap_1_1Int16.html#afd744b0ddeb04e7b173c9e83423ec572", null ], - [ "print_val", "classlibdap_1_1Int16.html#a172f4ff5eb67a2e64c918700406a5f4f", null ], - [ "print_val", "classlibdap_1_1Int16.html#ac60b82349f40d252114773c7f6361aaf", null ], - [ "print_xml", "classlibdap_1_1Int16.html#a825820edee179550cfde3dfd4d274f2a", null ], - [ "print_xml", "classlibdap_1_1Int16.html#a8bd2c7682edd48c64b210bdf247bdef7", null ], - [ "print_xml_writer", "classlibdap_1_1Int16.html#a11554ff931528b243e9af8173d205b44", null ], - [ "ptr_duplicate", "classlibdap_1_1Int16.html#a2deba43131c5ca63ae81f4f7449b6327", null ], - [ "read", "classlibdap_1_1Int16.html#a1da003c53f2e663223f603ab3fbd7c8e", null ], - [ "read_p", "classlibdap_1_1Int16.html#a38ff819a432217c55db2e9071928d20c", null ], - [ "send_p", "classlibdap_1_1Int16.html#a980c0013817836aa77ef74aeec7fb192", null ], - [ "serialize", "classlibdap_1_1Int16.html#a3c6904ab6d9679c194c6519dde592892", null ], - [ "serialize", "classlibdap_1_1Int16.html#afa863cbbe21b125528965176b3e8498f", null ], - [ "set_attr_table", "classlibdap_1_1Int16.html#a572a1d76a75981abac83a4241e90c0fa", null ], - [ "set_attributes", "classlibdap_1_1Int16.html#ad4dda4cf43dca838d3de183b8e01cd09", null ], - [ "set_attributes_nocopy", "classlibdap_1_1Int16.html#afd0e5f87d19020f560d5c1ff8dd4d6a3", null ], - [ "set_in_selection", "classlibdap_1_1Int16.html#a2bc036248cdaf1affac464170f32ad30", null ], - [ "set_is_dap4", "classlibdap_1_1Int16.html#abca9ddaa9a1ada8447cbe7193e8e288a", null ], - [ "set_length", "classlibdap_1_1Int16.html#a4fe343c1eeb6fb1d61ab030433651d90", null ], - [ "set_name", "classlibdap_1_1Int16.html#a86504564f45a3e6748c6f1cc0ff4e9fa", null ], - [ "set_parent", "classlibdap_1_1Int16.html#a5b6a39f6ce6594fa74f3fc899ac9a966", null ], - [ "set_read_p", "classlibdap_1_1Int16.html#a4533905a450d2a7af32e7d5acd557676", null ], - [ "set_send_p", "classlibdap_1_1Int16.html#aba7b27635c95b74536de18393133628e", null ], - [ "set_synthesized_p", "classlibdap_1_1Int16.html#a595cb4059cff24f801a1b6da79bd2f9e", null ], - [ "set_type", "classlibdap_1_1Int16.html#af74f8d1ef57c9fcca46f620f75d175a3", null ], - [ "set_value", "classlibdap_1_1Int16.html#acc13cb757d7ba3da5422935105f46cdd", null ], - [ "synthesized_p", "classlibdap_1_1Int16.html#ae64e677da27249473cdba0b60cdbb90a", null ], - [ "toString", "classlibdap_1_1Int16.html#a701eb3361f5b5628329ece019cd34519", null ], - [ "transfer_attributes", "classlibdap_1_1Int16.html#add8e836c622042a339152a6c31e5bdfb", null ], - [ "transform_to_dap2", "classlibdap_1_1Int16.html#affec8a11e9cc035d4b1e8fb9a87b2072", null ], - [ "transform_to_dap4", "classlibdap_1_1Int16.html#adb03e2e1e40c3c888577c4666831a949", null ], - [ "type", "classlibdap_1_1Int16.html#af8e803b20a7a7dc5f2ef351d7fac4a56", null ], - [ "type_name", "classlibdap_1_1Int16.html#a18a42c8ec35cb5b15cd651a4152f8a2c", null ], - [ "val2buf", "classlibdap_1_1Int16.html#ab2c9d7ed6f92e1dbdb08b179943bab4f", null ], - [ "value", "classlibdap_1_1Int16.html#a645d9c79731e1fde18fa662aaa2f456c", null ], - [ "var", "classlibdap_1_1Int16.html#a4dc4fac1bb6083f6db645f37bfd59b85", null ], - [ "var", "classlibdap_1_1Int16.html#adecfc442b5927c79933c7f71cfe03fd2", null ], - [ "width", "classlibdap_1_1Int16.html#a4999690c9bc6d0fa42138e10ee33cb4f", null ], - [ "d_buf", "classlibdap_1_1Int16.html#a796017764317567e0e620880ca656bb3", null ], - [ "d_in_selection", "classlibdap_1_1Int16.html#a949a89714965d7afdcd1e3edc8b7f0d4", null ], - [ "d_is_synthesized", "classlibdap_1_1Int16.html#a629e97e8eb7d285b54c9af8c1ec9a29a", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1Int16__inherit__graph.map b/html/classlibdap_1_1Int16__inherit__graph.map deleted file mode 100644 index 25d23b59d..000000000 --- a/html/classlibdap_1_1Int16__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1Int16__inherit__graph.md5 b/html/classlibdap_1_1Int16__inherit__graph.md5 deleted file mode 100644 index c504abf05..000000000 --- a/html/classlibdap_1_1Int16__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -6d6d3ab4a1874959d22964d8e5bd9f3c \ No newline at end of file diff --git a/html/classlibdap_1_1Int16__inherit__graph.png b/html/classlibdap_1_1Int16__inherit__graph.png deleted file mode 100644 index 2368c0ee04cb86fcc47b8631174443f78d6f4c51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62190 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�FF%siM zceLe@sIQ>Cd@A^RG{&mE{kV7)bY#A{F6e+Ky>6Pc^fZVrW+J>A0Ts_TfE(!PBNH;;2Os-!B^tg0WMwa60-^jaM+0?o9 z3w4RU;}M?Gf3xDjsU_Z1=@itd}yo4+vC2RYJkd|$?VtdX|Im!2~97AZYW z$Qr4`+7Sacu!n)mR(>wEF+vzu92ADRN3E$=LO*pn?i`6%S8o-LJcd-zo+uNIZU)~x86|U{ABy!J zczMP;M}TYnDh$#Q(0TCXfM9q+S|d|rW?xmB;fyMPlZS!?EAyJD-xi2V{T0`&&oygg z5%6*l-U9>e^~Q6QjMmv4jR*$|ZJR+dQNZK67Al`Je!Bd;8q7}6WndnA=Z}VNtPedh zP`FdeHQSGM5LJq}c=cg=F74gpH}nMuqp@l?fjctX_6QvZ8H&}^B4`?8E9S1!v6hC# zMA1R=5NFHds|G9fFa>aZE1-!Bkf&aat!EQXswP;b5rVttFP|O|2%{|xd}xXumzyTw zz-dYo-^x78vKaFu!!e4CI~zqZtxV}I`|iVMw>oLHk=v+aK}io}@aWUlHSje<(fZmY zlD<5NX0P*`dl6>k<@H5&pC+prwyD%#^)J2Px5dtc4T7@pEpjAtA-$E7nLoK<<8Oj_wjLiJ39XM zn`CXS`9WcFZlCB4L!TauFB5SNYz3IF_&{&4<3h ze!j%#w88fz-#GQ5AVHuvn?ce`9;CkE@NTePwcX5lox;S7Jnl!Th1!Wk^*|A#Fy#6B ze)d-@Vf>P)GLVv`TNb>-&ZSdd!Y!L0_HqY~?b+ys(`}2D-shWFpBj%#G%w&~ADOB>`WL^kef(DmNr~>v9u?)53m^mEb8lW=X-VY zmzm(nzDu!G`t@_`57)899&r`oB+ir-SUS8+Pq5&qyYKKhQtairD*}VIa z!pOy(Yh4{0!sr+62NKx>rf|DQE+mnA0Fb8gmL{|lw69&vMznTkk04^2kH-J|T@zB| z4(A-##~y^-_MBTK-45Tg_pvt^c<<)j3&rODSB+R<7;v*$M&sh?bbo#JXxpY;ndQ6n z_q=B)?d-3eNb%-B_OodxG|JYDm?Pg_c3bw^zE9a36%F_r@Xiy

    mR;E(dwA4LMFU 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%0A!;VI7uH* z5Q8A*)F%N}N1X;(8!zHeg2>zqudo zlG5Fc(xrePji7XQH%K?45`%z(bPvsdbPbI#z#!d2H=OZ#&i9;mt+U=g;H>rj%&<4i z{@it4*M04yCvt3hQxf3hdTg1#bv8woH975p@P_mL?H8Jm7OPDc$?&vu?3!Tq~Nrdn~ z3;+_P;uDixCvw=MZ1etb&Ic7RMdF&egdKui*g`~~+)3_N)yt;%TCz4&w0ZIq`0l-_ z3Zy#FGGnf0sq+EVUqRLvtxxW$W)b2xiUTi$+9@9ukhFmJq3c~WsjsGTxDl?W<0b60 zrxjGkxwYN6hW!D$hKTQ*&S3~hySvPBRBI@}#1d@0^wtR`YM9Sjzvaq&3?Ir5H705z zP}&VBpp=NvN+^=p^x&htK#s;c+s2`54**Xsz#5w?r4+#f@KT>oZG~{xoUfW+cq=Bp zCn{rlj7vvzz4GjJ>jbnS#yHBzL0qEVr5{JYy)*wk>>as3si#W^DtJ7p*eV&5$v-8& z%O|X;u}N-X0I6b`&Ds1x@Zroc&Y6AU3UBvtd^d6AwZ`guK6BYvw86dic!%MptNwg9 zG)s?!ss|%z6{O9^i_F1gL}M#CNK9d}`FAXvhe@M&Zjp!4FSM6TJ`P9C_@=qH2A9L! z&oBGG8t}{AMeeze`Oi#){0$I!k7UWKMmv%5f z4oX6%9Uj!2C`KAS%euPNoovC8L&TGm-sLyw1j-q&qCp;G@MDL)mPqje6fJ`KR{g5a z=TN}|nFfPQh&iY2^gdv;;b+Bo$!*c1+rOkDydMPxty18;@_S}SCoy1-a)32^YuvK~ zTH^@0{?kw*Y>CB1C~bk3gNGl=8T( zTp3d!ttr)|gWwj{rfb1V(5XMqEY=a5-`}NVSOF8w2h`?7BJZ5$aq$Kv z0LbN+&*hN4-!+o`W7YUn#W7vTDWeVj2vSQzyYOjDA!+xID`Xq4EstE>Y|A?SD=!&G zYxoG80+$;Ies`aCQ&_g8SC6?M4f$)HF)!@_b!Sc}k!XzXvMqc(}CumA(J(%=~hiBzt@AHB|(WxSaKlUY(?l|&V;LA2|k?Z?+;Qfn1j(PV^$)z z&LgZKC428`mV>+unFCTpPLeQlA33s#r#BHYFk7r#d;=lmQo2}XkrhirJ2D4g-p{ZF zztvxZy_XyZdaiB9FDqbb@wG_2$~D;Wj2Hg?;cGa!4lq^i{m(RqG$%;%h@FRz| zw?(XxOBEdWgV(B&PD65&JmJ0?fRU!BrAQHy&)CuhtK9-Yu)0TK`vRJh5VBnPSIfQH z5>aE#Z0d3oI#w-Am{wbvL8KE)fLw>e<2eY;qW`IlES&3H{2u7>4uF# zGtZim%9yg!IzLXt-c_u4!+ABsVUOO(@jbZeLel5T*=ZsE7#0B!vGlSHtytwVB>(Gf zb7id7L|+IWw=kEsKxxC1uS!7#_}v84aZQdTSG03axHW~=!M%LZDxqM-fv2v% z87p5s%g+ape1i~2!qh7_t4WpIxuWter;l-kN1xUcALMyJjC4MfRKKwm_UEl>gtPLI z7%GuPn9)A3vIRE7^)3c9EMa7*gnCa=AgTFTTZ(>pCY|(pu7{i+Ann4u^bbH4kQMJI z#6|2}Fw%d2&UCaaRf=xd_0_oI`$X7;E=;`>DZkjP@w7Ex58Th_!8u-t?|in;UgEj$C2$m-D1<*!YS*uEW!Sw1rQYaS}e&DAL(k-2Kw6ZcL9{!PlJ>Nx-dZskqdD`uXA$=lRr_MuPeo96bpR!{w$ zg7EdN-v_H@Fq(e>5PbG@48ortYHqULeK=Wr?@RNiiYPfvmcQ)lfSUlu)}F=P!kl~{j3CrW7g&jHI%X;x(sd`z2nPw|4+YM>%;R3IQsS0aFO>9hQGI+fudKnF= z4nr5^4hSTA-+%<~acKjj*^APjPd8`AuipNxH+P=fhKmpqU*fny?^S@(y=v?Bz6-Z& zrwrDeE>a8$#v{OxvDA>o88W{SGtUiC=W{nlWr76fPR&>_sB$AgG;>u-C79qnr!9DCac3h$ZIi|>_+*m6j@<9(2HHtpcs?|cG^xx@R?5wSY^ z3kt2CB$U1jMDH7yYEF&-mhP)TxD#7mkiAb(pwOVT5)iHNr~TUBUQb%7G~X@Bo9 z%s*F3(g>7HnWct(&zL$8nx}Ba0Q|Dl(JCNjTE8X>cuyQp&baLahb8;Htt_tb*KkUUVdnZEuv7JSN5tfXB|QpTCJR04m* zcxflm<~IC_jB0Qh<#PX1j~|p+ZO1@QD}1YKppkid{rp+3uFV4}n2s9#u#-6Y-NL6h zVGCL?-EVSFqXvRIV4K$aPBsx_JraxRA^sMqHam|dVZ)NVe^*UNewKvy>6xkOS>vc2 zqHnGY*11=W4oY(numw}RZSTGiQn&w(i3FG^cdMGmOiQZtvbdm=|2);~BI__ByReHx z*jG1$;H)KTbB&<4W!Skr%z=JVm|3BJX$PcPfjO~~vbR|J*~?cl`O|K1M({+}!LK^x zqpsc8^yW3K>PD}3a=v#lxjtn^3V#+Ro9`1uLJq$KxfwHa?8zIQoJciOCXE`T&FvhN zy{4e)2duvnImt0=Mh*OZ#yNrc_F9@YsMJJu_=h5mG3X0m$SS*aB~o2Ah6-0#P|3}N z3ah6d{^<*~D^_6Ms;EO}MV}_-=-&q5)4IM#?Q?xA{B6;jgv%=j4$91q z*%I8(#deET8n+RpAy4kk<^Z1bg;itqm>SrHH@FDnt0&0Cv$?=(hJ92fd7B0&D6uM- z-9Id77qRM*v(+b1>k~c2NZWBD`^)Lt`!t?k zMQeqPxm=iOb`jnCI3iw;7-c!hg;%sQ49?Ibk`e&?;_jwNTp>PvUk1K@THRaup_F z{o5iTM4LE*yGM9bWsU#2F6oGCE`du+s`$DK3*E3vi7u7jZMP3x9w$k$mZO*=>CN-SyA%~u@n(|a!qdj=MU+Qoz~hIMw+ zATY1EO~gOk?LGMB+?IIY*Rahed)(3N6YYwL{i_*>e0d^fSLnk9h&bp*i{E?QlF1EE zbU93P&6g-23G_<3T=heIZ%uT2wVfc*z-uwfi}BTFherGYeT%}y3KoK#?Vf=tmcvyM zxZ5Ckn{-!sO|0?MLiygc>=pEcMk@%W4@IO?f;RfCE5X(yJCbmecCG1`$Q(IZ3(u%5 z#l)KW8ho5s#S*1d+SiPKZctJVh`KL~i&Et!*#N{&N(Aa&lqtO`w7D!vPVt1jRAluT zNnXp|QwT0wvzu+!f39~)zOfPovQZ6`L_!RklqHf|mDd!ruVNIlht2D*9U*Qn=te7; zw2DhSV%nXR+qN59zJ~}@FJ|_3eGFn|o{7aYvNC?n_UX&_2~@6>XFe37Zh~X?Z@oLr zjlIjhRT<^^6Xjk%xZ-i4s*3-$LK*x#vc&tWA;sKYWK?1ybZwg~cUO$_!#RyRtmMVw zYyFMB=U&boV^xx4c6d@~0EO3Mf9JzP)z;0;C$;UW>szxC0(NoxJ-qyWZz*LC#AB}Z zG+?t;oO9hZZkAcIJMp8Pa;JTbQGGi|XCw27HnS~~;VStp2WXi?YBnIoWzpUi{P5~$%L1>O85$DhmQ+7uNlUUeM_|(7_KHPdFDJKcFCg9P zb}+UEQflL}Jlt(7Ml#KU=To2q<|WG5g*^)=yd`16mVKFKkh3Ti zq%Cz=!PWK>G}>&b?7GajjjhztV98bzl{My7OX=4{IOK476K+x+wchY^X%$)J9Rtc0 z{JF{ren5D;`VX&N1@`d|ml|Gi(X9lv#xp&y>uM9O{v~wdD{RG~OeeJdBR#1YIhXGB z*ud$hlsiwMkf8EI+}tjjD^V!w^cJ*^U;m-sUFaAWWYrp)jPbsc<8asy3{AMm9N-Q& zM!yB(sdt&n`z^_00IX$kJlKBwwp-FVS<8vxP@)0uKfAKn7OufDTo1<~=_H#Ee-l#q z#^C&zN4lC}SIL42)8F}4?aXPW2Hs)36@VVC2zEoxtZ0dtxrZFkr~l5Z-xE4s-WwwX zH2y`7chRnJE--Qzye}#Wr3tX*bRMEk-f-*(kOiV$ke*4CF@)kjV1mgX2svcO;xcwp z8fSjzqcAlY;hUT#S$;PEb3ZS&F%Vv=z&_`UO{hzCj1v^s9RMK4^!s+J3T zlHk9m@Nn#+OZV$WZGEZ>U*zUFVDR1Fw$7^+5JGtxwt4&t3_!j>GRAiKQ(J1$j!h8-Gcg2TXj{IQs_F zyzsl>KY4!n(BVj#euUj|S4wDE*rzuYl0oxhN4oJ*&~w`Zj*3uJU~nzdf6{<-3s5=V zC`$?aJv^?dsG@7lfDaIZ2$=I_dVDlL0piy&w2PVH_xDA;HTuCT@`yGXpEQ-&*K3y6 zZng!b^{Wg5q|Gfh>0rL^SO=7GdgU$ot$eASkq*D;V9>q5k$=jwIeTmY42^ZWcGMv!|TpX(cEDubyx|7H0Y-h7DcFZCg4 zV6`QX^*Im4b>*Ov&Wf6FWn?FO{3ls*PX6+^wb8uXxWe-sIsy6)bG7p;yLdx;nEz|C zT(5-N3@Tc(mJ{vzU8(-Xq3^}-B!{>9o5N31;j~*3WvfS^V4@Jztv%WYRAmKmaf2;U z^35nF3sz6;_m2i)UJ_q+u;u9p)-0$I3p|)dnaI6U5x0a2$B&KJfPtUY_-)vx@=mA= z3lHrpbr#P*dJ$6}c@-n`teLfgy5c^jL-!OEo3+auuIU}-tGg1lTFoS+pDu1`h4{oR zq3r@)Z7;}F>2D#}XRBgk2a_g%JHz-%DDej4)<^H3`&J;$fjY*7F#N+rgB0h1A42aX z->~>6D21TiB7oCsps8Sn{r(nSx&Aw%Gfcp*8PI53qb~d%yAQqQ=Cv&J`Ah|ZTFx7nV2F7R3ZPx$6{q=myRA2^vw9OM6_XU<#8Yz&)-K6;eOO`FwX zg7HVPFC4jBp4n(frZT%gtyLzEhZcMyM>z=Q?%ZFGNF_EtLx62Wb4I_4+JSX#0MYyPf{-fslhKeaA- z(HkD7{WMo9Z|ck27#BAolJb-dY1`Hw5X`Sp_@sX!bY#0+&Sv>v?J0X<*I;%*PhBvQi&q&!&mrt5K2YDWHJNSn00lNE5{Q%ty`l9N`9Ab$ zn8YfB`aupLMwW5^6U@7{swui)@T>`^EG&pHiUnQ;YCB};4u=wV!&F7gT&R?3690vBCPi?VXS8Xzx(D=JCTZaYgpq->K@6ylfY#?u~xeDq3?lv#tG+#r~|%*Qv%Q zme3)g#P)@iVhyLJ90}$tu2*M|9b4t8Zq44}Tl+y{GJ`i#;{o3*KfkT(I5n;NVD;x4 z1KwP?$CWoGg>W`Y^k?+BE%X_hzuqPsRNGJhGoai<2w2Z~q{vOC<8@MLt z!axrT{?!>83!1pc6vCOo4#e@vW-mx&pQG79{T{mfhz`b|eu-e&C)TPycQjTEpd^X` z>3)>TVCH!`jpKOBgedr}1f6{$gAKT&aizXP*K5h28JKddD68qjk(RH(=JCI+9<#-H z{{nxgrX?!&oI92c!V(^Q97R+y&6(p{GDleO5tVb0~ zrm~^O73fQhOFs^{3FB#0OQBv!-Ur@(hSH>CN65N%w4*WkBb7W#tdb1T2hxKaC=mU?CF>AM~*t zOAs!OC=@r~%nr-qJLKaI_7$2Q5QcSznqT|x3>PriB7$*(h+^cMjl$!4JGi-8QFzpV zf!R=lgFaOWVtZdK4ks9!TNPV|TW5gomTor6k-Uq}kDev3nj2X<+>Wq~RaIBXHRb-; zYMBuXLaiXofJsC#Ea^<5oll% zRF-h%h+6?A2de?TIBhl|T<)Z{u(BReDEg#PJOMzDOZq{e+A!yH zzk>@Fhb0W#!?^BA604Mm8p8`Ib^j&M+{Zf-jh73@e~hgw3ht#GY8>U}N=rW3 zM-FCNCObn6N8C_;XIrg^e8g{*q?{gti!Di(Nq4GHXiX2MGx^wzeDs?x z1vP$J2YbP2+wviVL(<23P!d^`y=&Hiv^+3V8y^BnPV zQjVc}#sW(U8=zSEh7Y~L9tM0nJNPpDbqKRRl~9ZRs)88$v*Fx__$hSn5 zC9)0QFROlyedR4-TPsiGn9lPtFxoY&J5v~?sPZsEa{TZzWYIpG5oblcA`uE7NPU_b z(;$gnldAtNgA=N96O#g7YE|*wg;&M>Bn0Q;L`!6V&Fb*W@nhs&REA|>G8lx+CqjW4 z)^~9TlWh#P9u`o){y|r8M8elg8Q;8nZg8i_f$)(67hrkJO^Lp0^q)9t8P+ZVZ7p(^ zf~8k45hP-i(z|pZw<@9)IbwEZ>GK1NfX-Nsb`_X+N3<-&7f}J#sp!Q#Jg~a{P_xqe zXGF>@Ku`yF?V{nZ%sdIJ3FT=J$#K0iV+iPRoQ$DT}-wS;3!WS@;JKlP20L!c(Jkc%~#@vf||2f zK>FDo8tadfQ|rW0IToo)8(8}7>(99PN;|)QP2FTA7_Wvv9QwkIsN0sMD;Cg&q@)9l zfKB+8Qd|tAlzUq1&BX|#%Qa`F2fQH}Q*wW^swDv44kq5L3WYb@y~JJ0(0IDA2zn;p zVIORg&}8~aWjs$uK6o)fm5&IkE7KL#Hd4Nfg#X~r6<<`m{7x}LWGN!Vl^sL-R{2jb zNz0NiLHNXz`_Fld{p}%KQ>&w7TU*D-;|J7N_b;wITM_@l)`a?YS@LHZ^*ONJIVNEe zSqhtIsAqO-%{GtTyjpemC7L+tSO4Co>xlcnYt%h@VzSS4jOuIMn71co+ilXX|1O-i z&gb*~tlMJ>Ldp7q1Ws$+IJ3X{esoDe=xzD%@$;0(1>!DdjDspeWn9`1F9_IBxhGokofhMcu|l&lki+)n-w zE6d)T+1oX+^;oqj#K|ft=6WtZ?bORY=Lc509Xg6~pDq*&;Ln`T8C)JeeEG?P*6u^| zr1=Z-I~6%hry9d$i9RFWz-IPRdXh(!=M><0$?r%M%q)dRXQ@R7?4*#1utVU0iQhbM z{0xKP&@=s1aGLu>`MCJ$UB8w2V<^SbSw6BPh}&=_$SkaQm7WUYr;h0`RyR7|9LD6{ zt%lH*iGFq%YW?r|!mjw{#_5h@mR;Jkghg;4n05R3FeX6W2^VMp6@H=A%>lA$BYMCZ zN^T2*bbwwhklM^Sp-55X zW}7VWlXg!tf#l3=)cmG#WtyAVGcxW9S^iMbRb4PKy}^|9YYZM@wQgECh`Y z+rK9-rTCrKlF}$9;oZjepN)@u?HfwBsPdl7^F^1FQV9P7?r4 zt!DQOEpX))>I-cy2f;2|Z7U8Vvwdglbt8WjJRE=bB=NPm$x8SNV)`M=o-A~pj?fq3q#^V0; z?(W_zcP)dqWJ$Hqo4A^PBCFG8bD3+r@QgK^l7|cz#;4io0i%8kJpaS;)h5a{vouKS z52t*uC#7vqi$pa~v{+$c`pfg{ekR*uW8v=^4Nk}9_iVG&z4_| zgkUy)1k$Rvy>^K#`7LGi4(rRPNB%E4Eq4Cw1NIPHp=fbe35;{r6A2AeS>}5dzMQxO z=3u-wEdN3ME@I@Xng}E8;L2b2@!tB!X(W@}%Wr=rpk&piLl?9pYa?D%Op)E?!Y@?7 zTE!9jr=QFTLro~HQ4RwxMX?<2U=AH9R^S7#@Ia~d)1BzDm2bj{;d7v~jyx4wLQ{~W zm{yfXfQ2cc86Db@oFSDNjZ_o<@QHWz3k3rO!Yd;k$sR{2$f-~kOp=8qjPtHX*|TtKy86E01AjJJkbHzkn5~Zgp|N}qUQ6!4MvBZg z!FCo6G{QDPTSRY?gmgz8arL`Zw0w^uI`5x#7b364*Anp=!HD24r@tG${! zqpU#B1p6jp?R8RbFJ+%4n0-Fk2;C&5#>CKm^@j0raZ*rcq%KoZMB2pndhPHZc>aT(VOVQo zLaydJw>^QNV<{Zu;z@-DrgTU2LAW%1#sPVn6&NpY5xjw@c$%~!vyBa`-$kzqkJoHR z@jo(LQoZ7*rTk!$)o*O^ws{R@(>y}Pqp~lhn z0r~H@t)3XNTj9Z?9Z@)~Gbo1L3tEJ6jVru=Mf~9QHm#|B{~SgFbNR9H4aR}Aly(Ld zpW2>|$nmyJm<3(1%+U6kx|39Zy1f&Qs|LkcAx;rHV~WIpg~H-0;Cp(W8sv?OFr z_M9`Dh#^e&3Cjegbj$n(1)iD%~bB5-Z_*FBJ-ExrKb);uaTFQyAcyZ z@6ZH)(mBVHrR|LT>`L^D__MXVc!zeE$C)bpu0+>@SqjHI?9zTkzW0VpC`7t>{+7T! z$I8+VN^%ra3cr`eiVvF{J~RN7J$mqkoqm6yQ3_>~H;?G-I7DZH*uY_j1oHj|kA$(z zw8~(0j;gdlGocIgD-(5l6yb6hmFdXKO5_VH!n?o9uNe_7hd!b*gk#lnvJcCkBx?OTGm^njGEY)McVmd4Ml% z61FfUQF;8#qj&wuAb3g!|VRpjyXlBGT zk&gYl5{oP&Z=LwLp#b@J1wt|PrGe@6jx3Hq>C7=TZqK5n;vH9a)|^^e;s z5_5Fa3Pq<}=u-}Voi2$9#rlR+p>%|j!X2DMb>e%f7~5t?9X>V|x+kxPKRz=-Q|cCj zp6(Ocqg=^_cd$(ItJ>1WLmoh{?AD39J9N~5$6uhLrSr)M<|}qp0AAerTgL~-@mu%! z%`7W4Tlj91D{y-xaIXzxIr-$R__$2+MnO(M;ljA}3eYS2RL4^PnU%sf@g6lQAH}}C zp;;a8uvoa}3hFpSc2$&*b{RbpVF^YBGA+*P>~E1#5gc{Rfwo#GWug_kg2NMzaFT}k zY4Hp~`~HAo-+Y6fw<|=gt!hC*L0@xGfb#qldv)`7y-vG{$&o?uPw;yNEQavDb~+Q3 zAH6n%deO}11VVZ3MZ;^p zDzw`j)MJNF*0~bLbN4n`l+3!?l-7ahhEJ`97(F>B8c@#_XZ{}NPS+rb`u6jud-Mxw zN5-Y4lhterzLg!#G9M>jaPl<0T__8>e_=@?JLni4nYVF|c0cm$F$(QH;b>!i6Q0T0 z+pxg8POZ$*rw3nIW{;UgVgr^x%aVKO^Cu>R*+*_GNDS4!^eb3eYtU8x;w(@V+8M&Aec|D zrg6`~`td;S;uAb3wLc0w?9>gFeH^)HBu=!^?i)>JKUw7L$qtK=QOG+Km+l|Po#&rg!ya4m@IRl4oZs?99LS;T`QKZ?y`IDl z*-1_l7C4QCuSCS}VNs#WU#xY1#Q^%+KtI-L<*Ch>#_ugh7$S$RK5D-k*=k_*Yk@jp=Dc;oYw$B6WM5l`c2;%h&@TGGF`3cXfmVOodu%5+yW%Z{C@ zAs4$1K6!$tInZCiZlpq08%l*&n$tKn7p$dpL(xR<$CMuD%*16*zbWT3{{)%4Di=$d zL1CS=rfsxt?LL*PW1-8{r6)7@&fOXcO@OD;Uwy4MdgemUgBy3yB*-YEi1^4Wqxz`$ zK2c=c1_MUT;4=O+(9noCtS3O*c?s;x+o6_S<84F0@M8#jx}EK3Bs^(ak=m)&zPd00*p>0sx+0#l6op)^Ng>f zar@K0-xJ}y@7=YZ=Sk6-6Ol!RxkqMpSU7SleXVY?@~t=jMSE+02$Py9>n?AiC1}`(=cV9bmgpc;3%pU7&KSdRnFYCD)V7H%bHG`*Ms9O%^uw3P4 zepqovH@tVI}?L-cl8xDSkH{0***~K%dp2S>TF||$(8(@ z5!;|ln?VQ4adzJiOoocL2cIAD97%=6vV4n|abDH=)&C+8`nn|(82iy~9S99Gf8!cGnM%_Y;f?D+sY1MX?Ru;wz>)?L|tp6FX{{I=Urt7yZ zdiG)EuMGHIuoq;$C0t0p>Q9~_sEviz9H!jERsD5XAdQ~M} z%wO?FDTbbq2$j%iHb!maH{Zf>gq~lmhnp$aqwYDiZKYG}vW^qsTH=e7K>uTQI%VNX zg}lmnuL43Oa_uO(v~{w6&9W@M7f$9E)i)Wj*B2rC0W*>1Pjf(J^tfD|le*SB$2KaE%+djzxT^X9w#oK~{ieyoJT zF?OGIH0ffj<7Y4od4JyV`22_{IBE5AC8%bHniyO5a4hCPj-s`)L+SoeFQQW_m{uSS zdX~k9E9Bb52n@X9|F}KAE=zZX@u3@um`Gsh+jBX*>NhvHYVKOHzaA%c*SGzLp%bKR zuh^zePMpLhO>TIKOX%sDLEYb)x&jEC4|^HQivx_TI%~HSNC-0z=kPWSO6-0#W^4>1 z8VL=s6l6D0ECmytVH28B(8S|=zs!EutHQ&z0bBnGB_Kc5+VC#;L6@l~lZXg_3UXf7 z)O0Xf=KJ@FriGuUK`kT_BG(vgy`K5cy@v!lqc>41cTpht$Xk>Cd~=V7bB=Nk&~6h3 zC_JZ=i-J^(&xh#L)PPYo!?7OR!J)3=uFfX)%^X7LnFv@uf7U+;Cohp*yB`;!5pf`z zCkCNC15Qh_iYyeQ&)`dug?71>#Y+UdjUeeW-DKl0Uaj=;0C!mA7~ zTn#d0h8&aA4Etm_OiMGq@gb{<28LYNn3W>V08bEo!GJfU@+@nMwn?(^*;Z*xDA?Q`-*PV%s#+*%A9E?W-1}C1Ryd zI#uYtjm|J`eO(F{RhXGyTv}PTpbmcD!LsKg-ikr#W>!IXe`@ji^N-3=zuq`Sno+L6#2{4~j`wK$J$17G%4By%2Y2WhQ zuXfMf8S~LkkAWr}p#B{XAX09^*-Pwa(k{kVgi`1~=e@F8v%mLDKryw#V&s~ouTg}| zyl~pkFBk%xZ|CA2U@u(?@=5YLtG6HhIlIX}3O`4#=4m2fKN@lL z<5WGSuO+vr@ATY{?IKqq0t`1~L}mfZ`%@KNG^!APRa-tfrEWKpdWqCz%eU3}i(M7H zq^_7!1ih7o;1bxgD>V;%fxje!4yu}^%YVE8)Ub6d`5cKZ81x*ucu+1EkXt~jXx$rK z&2AH$$ONF*?Ge&vxU8A2y4@jGbiP?5WGjupg^~)D1Tk*QJiC{RcoPKINBnU8??dyj z8UNqVgxojYy1GgA_MOme0KJGmZUjGgxgKSgDF~7z6e^5nI`+i`Fz#bLfou9=g!8bS zh=EyZOn8IH+X#bEf^ma=+fjVFN)Z(QB$t-RNz*PF)@~0zBIhs#cQ+oKxt=Xj>DW)e z;V08?(cd*^_y0nU9uk6lp&!Z)dx{ak)F-VdR1EueN!BsrY&X?2hV&Q zzHPlZuqbUYTze!3#z!AK!wdQy;gY18xNeUiIQxTlFtcUwdejoef_>~_wmJ@52_BR_ zR1v#dxeG4y3&2clZEj+jX&aoKzHp%~Mu^r4+B9-#Hq8oIOdfAQ0dX0kwvyn&_mg^C{I88(IXi?~6-lm0Fy9c`yWEN$0+ z!1D#L_Mbdt0J0`ukA)rcp=wlN?iwOK9w|{_?>1xEk z28)7|%?O0(6Mq-Bi@+bw@#o1hu(l?0PK-_sFsjTcykq7dy4Z>4$qt4pQ|zt~f{z?` z05`&^;3Zw;zE~mtcBXc8J*|PLuPBFa4A>>(&XD&@MpoRL1@LftvU*8LY7n|jj|B3? zKJ6#`AjpTEkb&vbhbMWMt%71x!}-nA-52^4EXzyK^?I^l76Rrn)?u=OFpx6Px5q{>h6+Voz>4O-81d(EuZwz z1UTFvxmI22s34j?82OS9nV3{iAWZ^F`y~a4ZEO-~-4{)_tHJ!uV0@-q5Hx516Xubm z1{6=!QKZW%Iv;y`;>A$^loaqA8=h5|;n-Q~{tAX05Y`tUeZ@H!=*nV(y%-vFPcO7y z@7Uv%ZI#@=-Z*mf(S%#-FGoHO#(s6Ey`|7bEG%2mGl=M^kp}k%(YG}|zX1UDdZkyd zS`wn2L1Ww??4#W2%Y|adv28Uc1Z801S-V`vd4(W-hF#*V@RMdE@4sz9Vlz77Z-W*y zmuLIfnloiW7RC%=3=z)4aXWT+rX)PSTm=e6>GAx}2SK8jw{S-)oSL=|Qrk0x`aap1 z=^E=l+o_?t*E(e^iQkFAya#Whw6aR%zUJCmWtQaj#`2OEE1u~+`xJ$-O6~e8W2|r{ zA60h0VJ<)DS5wB;MOLQ@pP8!PLy(l?YY@_CYwig^w{50&`3EM)W9r=m=y>n^GOFUK z0pW<8I@P5*%xAvPzyS}YCKR&?9aOF62G2+UWRN5q-(P0Eb*3xGz#S)9uePSGVrUfk z8$OE4Ap(G_FkJcA55b%eUe|T+Qwc<}@gj#jFE>FRuf5q$+)cwpS>!yT9wcks-t1Nn7WCN7p@AqTp9h`^#%_KIDt@b{gd9@O`=x`G}@^3* zY~RLTKUAUBeP9_c+a}Qa!|p1^bW$Xji?!0j_eA9=r}#?IU6BJkAhk1qyy&dshF{_r zWZ`M*6p1^TW<;unk+&-sjLv${#a(kAkp|E~AFYq`^z*L& zl`>1>zMSt1T^h$<=MRG6r;w0VcT1+qN9~p(cw-US7R>V5BIz+Za?z!uon7chR&m`u zCv?@nzD9X+OdzsMxMsBPE`lfdwK>*fL{cwfLX2(Y_YpZO=_dLkNYR=ot^p4}PSXpz zZxRQwx5=5npU~+0WS8yU>7%rkP2b7n?K zv7}NyJW6b~<)}ZMr+Mj-eJ+?sUO*`{b$O`Vv!t07{Aoi3VQXQm$p(^KZ)AZOE>0fs z!}rdVprPhb^$V%1igSu|xSe4Q1)Te65tgd##qlNZ@ao(SD0cWJ(>vK3T609O^XH4` zL`!}s6 zO|ov%Mnk50B~sv#UKWe2e|sUe7Bs+*X6j3*t#iG>56V5&2l{Exss!6T(nPKRj+Di9 z-+({qJ>yFdo`2TTJ+&1UXT&1TQrMVd2P1*jP_-B3odUlW({xp2F?PkTLjKAggU{$v ziiGU}BhTR7bf}l13uH27NDAlHRk}9*mDQ*7)qrgb`)7AQ|1!D^u@6p2VaH2Bc;M~6 zC#CEJnyjiY&vB>8_seO{Wjx@||Ha)~2F2AyU4vNT?h-6OAVGtBW5I)4f=hzCL$Gc% z!7UK1(cluSaTkmDoV!Ek#Y9|_`9D5(* zRL438$1zq^T3t7^zS!p;=$)Zz2T%-=Mi#=HNv+pU5DDKX$H68KKH8CxJ=jCJ$y*=s zJfQZyS&*KAd>_S>t9d2)v@!SB7Ac)p#pa}$Z4iPX)?|?RjX*|TUKlJMBW&aQ5)2cp zLR-OYXhM{DGsl$+N+ zOACc;t|eSD#)@k~;AvG)n(w~7i-emJ_+rJD#is?ImF&^{uOvD?9njEz|5|U2xV6R}@{Xk>y z1RRsuK)kyQd$*B4Tk|oerI@#at2Iv(Gzq~q} zAbiiR@wffo<07c%mRb3W`eKD{>Y`yBQlm~|XOs)|b;Hnf50%aP?3S8FKOlwE)ZDj> zRnZlcEpYbJ#OLiQ0dLJQck3k`%NTzbJxkpI_l(u-8O|tHJZfo98zJ;@g2luA4>+i| z1XQxRF)cz#P=e_2b~uKXtUxNxzrBeasD!$Fb~t{u$aU@vrDNB-!%ytF?`(P;`z+v4 z6V$84rcxj(AZCFeqi86u*0Xc={*VVBd+_lWU9;~&-nWSzjj8m=2S==It)5-Qu36tE zJC)vRCT^oG8uQh7#jx0*be-%$Mz~O?s*90#cS(F1g2MWCA#ruFTgnG}!t`nNGMwnd zK<(aUo-CO@G|i69Q;2nUFNcme^zLjNQY<$Hq#oYwS1 zOyO$fnR9La&jRT&?LK>GhuRTyC9-ZM-8nNB)>NBI{ zxJdgy(KnTfJvZH~1Is#CpRrv1&s|yLrL;Oq%ufVCWW!Ie3W#nJ!GXsznJ^HlaTR_pVy{5OyuLNi7QMffyz)w3Kup()Pu9~ah zw;Ic67^2!A5rs|V?x@szO79Ej+6_O0w91QHC&R^w>(p(O|CwfDm&w!geI3pO?$G)q zGs85jt*-v~GJrLM(BaVgN2V0}H_j!*e1z@S?Bg?VWqvJL$IM{^L3E(mXjOu%FaKWx z1WnW4N>xBC8j;O)K6IiNCcFhzZ7SQ6P@n1)5}(=}B^Kw_^n8n%jx!C4F+#@&^_A)X zHyX;Mb1>AqD5@#vZBTFPG)(+{qT)#6X|D6{ zMvH9U5OjZi*7J%}-F7OMCl9d%sw?D$^#QA9)Ga?e2n(LouJgG{7Yc+%_nUpzg4+&< z!QXzWu^}Je5^c{Mvb9X4oDelj98ABsff+=&U&HiP+IaZMQcvR8Bjl(g&<6!m zV4F85J-u4<8ar<3TyqgGwl`xgNAa83gF8bS(C9syP9rE96)$UF42Lg6xWdZz5aGzk zh6{be;J){C6mC`W9Zom~&1x;{6av}C>^f*zcLh8T7eBAPs`&NZhkey-%LxdrWsnOa z2j0@E_OaiJK}U$SR8zc>&a!rSgp!Zx)8HGM#WQ^yy)SHULN7{ug93OmLQLf23N;_F z?o(U{jd1-w((it%roE1*d3p2+IELC1tcQWuPj51mpy2H{J&U75r~JqYfi-CeOoi_% za#7-s!erov%13SNHv3M$@iDG$x4>tRFTtiTQiL1jt7SffLIVM>ep=K_O4r1@)PoWm zA^C~6Y3RG)eg`jLHDSDxwYG^glKM~T&~{?Prf*qdL-S#x__0<*)Hm}%SYPn=dIKQsl^14`0|@r0 z4gV90L~eFPvR+Y_DkgzH!9VIB55>;8md53e>Y}t{4;;JD0Fq))2ypQ;N*fOK-7XwO z7~i7zVNoIE+emXMK`S;__66*;7sfdOCd?ki>B$18FwB%P_dR1U*SNS4gYMFTnf$l( za|#gG7Dr6~-swbf;0u9EihN%B;yzIv{zr=mBn8m2DYSeoi;jq(Y_Dd<%vD-Wg)4JBYD zxNl!@!v*s++Y392`3u-3LT5SX<1aYIrx`h&Zs>uv`IuN(gp)};owB7V4d^G{r*M^? zDB_dKWP2Cs_GZ}(F7kdND+#CeSLcI%RzqBWvW{iUKrfs=d`fLh7R+5+`{q&k{jOEf*Ph!=^R{mR zTQaN+e&oV_&#JN(i02XOocbfu&i7F3VRNI#j1U44W7TT^Be{~+NeuonDSsngOnPfbnpPtVh=YcS%kr`0VN9RJMTxOPwv2XDbGilGRcAc-oa-;xG)2-go_ znUL~*f13eoXBl8>EGLixKK{SPG~2JNwM*x13vp*HyjBwK zXZH*vS~Yv+M=wOVH->7AktkRw#8sh!*Qw>r)U}*cBgN=l+VKK4)WZ)vWa7O3xa6oC zJ&V|;-4w@|J}<{{+ClVY_y$$UUU^-H&tB{AAR|b3DgLWu*K`g+gfIR(ZIdKlxgj~= zH+Tyetn9U}R3j|31BK8;)Z)%kBRqgJBIut(uFfSL2&7}(QG7T`C+ARx66k-#t~pja z_wPY3!b;WYs&Qf7M50wo}mnaE>wyTaiLI zZEw3>yd=9qzB|Em5fo0})q*y2={@y_ZCYr=ZkQfhyZo9`aly1`l=|Hkk!s;=a z(=jbmkaP4T_;-X`x8NSC5#c6?K!RgF^&?DUj>8Foqj z?Q|#xp-8+oPhBvu+%@id*VvVE{CW|i^0E?6$%WBKl80<#la<0|b_TIaXaKQq7t3<1Tq$n+c?d7jk5(i-&^PS-bWYg+nVWmC z&_#3Uq)S;*ZDTvjl&>;-$QkF3d6G_x(8dUE%f5uo(JS*dGA*LFgZrf_kVmXJ?zFis zzbbXx;d}l}s)gxappT)S`>clSs~9;m&Me`*l98Rt7}^S+twed~oONbd&ww~ijWzdl zUk5TAKA?HxBt(zhwIMi%)J_DA!OMQ64rnUf2QC1QV7GPQUj@jQie%-oe#8b1cBT82 z6OunIW__c+@zO2y6)gQgnDCw)0Z^s-i$cn(%nF<5T7ja?+@0@?-~KVJN&PBxZunIl z)l{LEL49#}deSUHu5~laVk)(2m2>2~BGK31`Rl6+~8PpBL+io#Jh4 z&HjT7DO<{iRY8(%yz(R_goCy`NdLL|4iJpkHs6rwio@_KJzDa)k^@9@ak@lz0--B0HM_=+t-L2#3g-D{DqjVmi|JI};$@FEAQApJ1d0 zbo|Tmj_BOvp_30@%fS(nHq^*k&4Cc@;f62|YN7vLdf8U!lozdu6$w z0-#831Y0MckLfIS22G>*BAqcM_Y69iR%`8|{ah0+cVBXr*iklS?Q)*0t>$J>6hurw zX2apOvgxbDu6c5;>>JcZ@l~y3Mc;Z|(LShy+4X;GyOyA&=rea1hx|gUBU+;o<;cBm znG$Bkn3l1>Gl)$^Y#RgQnP><0ek3^S%^*~|hfkPzZ#bDwc`~-0uvX&8*FNTF1USqvw z-OX=}6>ph^k+VUxtH#$DI>ytdi-e!Mmw}HiIN3W(@%jOP180*U8|=# z0UBH~*$d29iChJ#olQ5ZEecm$^tG*U^Q3RF(pP@3V1X{IXr`i|v zgFcdoKiWCJ97hf9m-ar+mwk^h$(3iwuw5m0@8Sv=4RK_!p?R4D%7&6ehZ2~-i3Z6m zUz-huBR19|q(9D3#m}=MVltmmT4Q?jS+M^UJ%dWe%QK^~0X6i-H}>6M#_%n6{w{Rh z!4(D@tF01el7RTqs8Qm0RbU*Lb2#MbWuAE;vO);X@BA_@h`uD%gd3v=*gGHO9qAq3 zN2mYp{l@qv0tKdOT-FS$mb{qk;7)8sU1WN~>g!e;GiYjSqP+yIFvl!PK{0$x{XPKE zo=|o_QyNi}1x*?##O0(qBQ?I%&O=$@_w!%jZTdKft1|@s-DKQ|T+zzUs5miA8UZ*%kQ`E^%3iC&M(mh4n6fr>xzw1s(h!IiQw<5<%5IPyi0o49!8w5C+r9rf z-~UDv=NpMBn{vc;U50NIfw??cdhEijT~ql*7XE0a*uMr^Q|KpIlb{Yei&onxNrnxC136)PnceU}a;;Dd>q z^A@FD4V7P_> z10vs7;et-x%y~i%ejCmcut2?$lQ;at6eyc`*`Kl}Ej#OT7?BJ4=cp7g(%Ru9-44Lh zxk0DGu?J@xS_&SZNRk|a87QU*ApLsI(klp@M|km+<9h*~5$=rhenY>Yo31r_X)~wm zK+dZ*eDhmD{&fi{*~#D~i+jM-A08-|-o5D_i|%eEFr)_zk7K9yjDLtmUP0m_e3~|` z$vJ)fn4Vc)Wu~mdn*nvKq}tdRr_Kr4^!u~iEpCLI5khzCPKjlwdrb@V4kXzG%UBQX zX?T&`<9HzfEi5HySxlHJ8xM##!faXy2QgD3M@joq5s)3HO0a^@Ea`zavAjVWd@P?DT=MpVQ(a zG+=OA`7^@GSSrJ@lqf3=ggdyCZ?OeWkwe4;g$rB zanw@HRgUktD$G_u!B!oUl80S%@VimEQjZt)kL@CL(L$8InGrA0Z!j04f3-FmaL!Uq zh8t=SIDCLhUlfUVK|8dlrHa&cS0ychc9?#!hFZOR70=QyNVk}c2pPOMufn3m9kLL4 z4D+Y4Vc8?Opfb4tzum-(s*AigfP5V7ya+Fq#8mq42NUU3JKBRS9790x^*c?`xS0`L zA0$Xy>P5{8f_^KetqUZk7}$fq+(UAfq8QLc2(rhZ6vb^dGd+=;JYWA$T!{>!;ksH3 z941Tb_X;Fzc-3@uh!=zbv|z6|vvE;Ec&+F)pR~5+(0dDfR^ty2fJ+@S%Q=6a;k7DH z9pQ+lQwh|g0hH=8}|y`h)vj z4#6uC2aGn%3EFT0DEZg=_pX{Z-G6G2Ilo|jhxuU6M@0hv4F~TKMo%V@RwejLla<LT>dpRoS7gF3eG@ z$1gb0;)0j`^)Z{XA{|2~qumzpXK5P3Xw50-+WU6&-VFH86Br?Jz3kt8xrc04o~RTl@t*D)GOPORQdOSohjHM@u}FH%c?|YNdU?w@p&N~^Bd)$ZaS6C>$OWVqgei_1Q#Qn z4^>pH9?1`ub&Cx_t-%8na3dek33~CxF1Wd)?ZzJ;iU~5`U9HtAtz02t|6~Le_q_oQ z52dB`eZIl25ZDfriOGkGqz}oQK8yH(B7C7ErA(O z78Q{6uDAGSb+uGa3r{yY8Bae~NB;Cu#3s`0PeVjo2a z5yfSENfuWymehORs)Ag3kPvl2rSiW}dZAsd|EK4zHi()Tj5AOVbpYyf+EK-ou`ns2SD1{aX^{gvrYLye z9m1Lc@5eLWyarjIxc7~Ic8c9f5}NJT^V={FJU|>w=vX;dc|A@&<$ctIse)_%n)VL# zP${_y;D;^R*`52^8D*9SO6bA0*u>MXMOQfosl2@)8occkcD5FElCaZ|Sc#9y;R|Br=wbmSsq+A*Bn%aqZ$VXW(IiyuWY- z?fSY`cy};;S@5j~#=r1g_>oM^%F*3jl@mnze2U54`IYbV=&WiV{4&MQ-rCXSd zIVS%<(6^u7YR7JMZC?Xhz5u&zgrHfbISN!B1l27L%&oy)MY-DKTV;pRsD&8`2tN}$ zY!~$jDAD{B;wC00cqCr>Q+y6a|3%3*n&KQb+Swoua_26M1;oudg;v|#V~Qaq<9vFi z-k6he;M-;?_8BW}W`za{_bp~5BPg1>_~ENc#$b%j-iF{Pqj~|v{hf}sd7yNQ-yV@{ zY1R6^!^hL-j-)gwx_`mFWV@#nosp-}9VSf)8_^1{ob@T#pPmePFMA?f94Y&kdk{`! ziI-nvdIMWRaQL@rUve$JmzAeO1W%ozwJ$#wwJ;~WuO+B5U|c-JUMMj`6+H~w1e3X( zM(EtZCLaQD`-2?|Jo%_<6IEB}xPD|SHESIEYE|>*$_I#Uhp5E#_HOA}VWa(d_0OVi ze+RMusDF!^!h5LYoe$%})9*@zYtCtoA@dLXW)xf=EVzh#R@{5059a7%1z~gq3&8+u z7HlkS#{tKLnK?R#$_5S`_8N3FUTz;A39`H7rao?WJN$P9HwVliEjndl`Ppw!oqxre zxqv#pBuxt6x9~-4?j(m?4bPJ&Jmj|?%DZHo@6o%f#J#IR*oM0|i2FLfJ6Ip5P7gT; zm(ElNs&xMhaYoq5vWyKZ_C!rKxBkzxmSeiRYC?s4hbrJME+zxus2!op@LeTpSA5yWGGou9H1s9y&@%o$0`8Q@>v3==t;BM><4{gRfp7+=rZj z%C!iwp~czv=~UklO>Oa#4q%UR+=8_ma;SEGL{t?XjqD#=BqqCUO}I-X6{fnhLooB+ zdUq@7BOs^y4AQ8>-oZ>_DeTbdE|mrX3E?k`_tNHa5kagq<#Q zYU5q-?*EUx7M3)I(~ffFi|?TdO&ODh&WBP3q7F5eb%Cl;%F){2tDzSP#WkY! z{qd*uLc`N!;yLV%(#|hA?bFSg#x0TU)?yW~^&&$~u}K zfx_)^Jqd8&YJJX{xuXFwSJ;`9?~&s(ZnVkd!iAgi$sZA|sXf4DFzZ#Cku83tRC3ezrque&0fV9-#G-9`^eqWIa|mV{H$-hU?r@oDmj$pWi4mss@^?!^#zCJb9$~!NNAy`r zB@e#UUZs12&{>uf!fW)Jwq6-|vhGrUgj?B>a+pxQat>h!mL78B8*bULQ08B%#Jd9E zb|zjr+!T^x3hW6f>rk}S2tpcv9i6R`e;$$EEdOW@+>Yxx+C_}y{K_qMm2)jme=y*E z(orPryE+rFmH4dBHuH1i!=C@+`zbdH0`^(#QTW3pbezS?bJegfaC?@T#SYg{5-?mo3?=fhZ1rCtXpw6rop- z(up%?eK?GVe9Z+)Pg>*e$|9l{mb1_CH8EnDDt46m+C%+zY8tP}Wsdaf{Xx+1Vq9!jw?dx6)qzAij(8E%yn5 z;|3Ql8zeu}t2x%rmk|8W2=mk^^r1VEmrb8NyV{Qx6C0{bLza7b3mE}7mo5oS5-tn* znlG@-Yj6=5WU?RJSzCcX3~gT_znSjKSg+21qVV}CrD*UIM&NG_e5b-iKgz~?Y0S}u zrm-kt1r0paNLJ2*J!naKjbl(D?@-1V{& zcR=#X>$Ab9IKXVUz`jTAT0V~J@eY4|OnFZRGGXB*l0?C~B{aa0L~9#uK!oB6qc{5m zEx`vdA!2Y5wnBtV_D6?D#z+ay2Ej4m7c6aQRF4-wyY$V{Zw_aHNVKXmG-3ORejsYD zM1!KXs~<^p4IkN^Z0Bc^3JR~r(wbpkcDi^cGqkyV?#QCJQ(dzj3QTid1%MvlP1XsL znegz~LHi3694XoVUR=MJpnnPVeB#3uT)ZA!wEKyA?v35Lz(0fsn4P@;IP|jlb8}L- zTHx(%c+pQXDBSS$B0D9~IfCQwXiqta`6#JaRsB*v8Gn31hMB1~ytTj6er1%6J4Ls6 z)WtaW24`buEaFj5luw!B$IoKr593M2o+#n~v91=lVePx=#XjRd84sC#0S|hHCnjz4 z0rjbuPa{%|VTDq00pe2y)GeGR=lSto5O}0an81&t_LIdou?OPwCd7zJcDnmpD{VWV z1>!58_qxv1h}=_XI~-fho{Cpb#hP64E+J`JK4e$-w@GU16?g4L?o>;`aI@YdBrA@J z2YUom?o9N{UEn{KYSPYP94w|&JI*!!|9%t_3B*nDyUx-&u&U20O-$d9PZ#5M$I6Rk zO$|``_`$PnMmy$P;*crPGG4aTdg&=H|7Szq%(r-GK(+~j>K59Zq^TdD>~ZUPPnw*iT>I_9$UXXZ>PqiSOrvShLqwKoqJ z`pOGgGcL3^krZfOu2=Y9h;)n1ZMRT0KU<8ZtQd8(R7pdLmWH5XQkR`psf^gz!B@>sSb#ltk8)+tD}b^ z8Og;?znejwc%$ph$>qcCnSj&#uI=+1pt_(r`o~=XVF~KmD)*RH<7A4wrO0y36TO~a zfQKX-)ktRZCddBoj*1rMl(e6yfgDO=?d@>#L8$eqJEKbBZYAv9&fA3%IfEX>${_@) zm#VP}?pBZ+8@iS^b-ztQlp29Rq<+Ug>S7Luyar=NN___N~P`Hm1*n;@r9 z%kv@I;PqP9#-KZUGC~#rXRn(nU_DC1-IeSLgh-c3LS~JIAkYbL%7#HUf#XACpEuX&AEtat8>{)_Ya0J0@Q@il;1 zJF|?KZ*0zS5U%WDB2V)e-Qh}gaUOa&I*solXI#D$wD|oB73g&3;OFj(^FA}A)JaAB z_7w9E0WUD}GnoGU^u!PTeGJpr6$)XdT{-4dF46C&U-G-qIp90VW@8*(XbDQug6ur+}p4|-cX#y zjM304_%p~p4S#m^`RR%%mqfTtE1|5S(tRGeZ=8lqJzxP5*Ka42L|r(=9BC^SB^Nho zA?nIIVcJL1;7U$F5E8>QtAz_ZUs8FqqogY=8DO;clqw{`)VIP;8x=nmK17mk{(e*`BZ#+yB|tEBj`uCmCX!-{N<$ zTJp^S2-9P zF=5bhF20-EH>*c*isM&MGb7x>0*ZD5I?!3tkTKS`m``{^mfdPxzn@^*X^|gs0@D8E z9(uS5mLt&wFU0UkJ6DKor+=LYBVu|Nsy z-$_?`Q)+Y-2~>)}VmrLOM*c6<*F`?GCMYq(j>Bxi2tJy`4T6oTOjWXgxq?0l&JJLq zL@GSod9e#skR)70-|3|QAw+T^qL;Qn=^}x{S(*P%l>D;|>%>ksn!=QyJ2RQpG|r#y z#!qD?l9~w*(Hh@!q2Gznpvy33DTm(ocLSoK#xKsZy5DL4b1Q#4}$xB5j~QvO54v8`^gLchVfQJWRk zz(X<;7KhL%j7T{x;svo~k31U!!XJNWQ7?9eb3p=U(M=|kceAVRV1L`A<-;{t?{|H8 zPhx&Ui!$GAX%4!che-TxVyK$De$Fjj72O4N=GV8w*;`)VA*#?H>I>KbZGJadAN99o zp31%hJCyQoBP=$bg$Zr`m2dt?i4ZjF%qEpoKZ6foh0kH@g2j%xGN)p)xoe47Y^w zKrP?x8Hy;vir1szfyYMk_VnPs`)^&kP$zPz z;*=Vk`OG&M7hGvFNC3!U+_RK95kvM_WZJ9<%l`B zjq$;H-9P?_t`=C1?f17=+SWnRMk2i`Xa(i2dliEFQ1Yb-t$#mt^U3*09A3p1i_s30 z-v3ICqgOunKCh1&9Jx^?=YY(gr>GOnQsbRmJclF5Bae5T?{Gj}(`>f> zYQcrHzPtbz`R*z<-E={MbvH7t9T+f~)JfLgb)UmEV0UOC-GCMHMYZ@rDrQ=(pqr!JvJ42QgjiK_G1X< ze@Bg~xR?ZpBQE&<5}-~jEGYK$|9Wno55q#_VmBAGMQ?t<5B@Jjp`3q-? z^<^;}+ZW39A;`=J-?}CegO{D-kpY_nkYVV{qr@Ib5RVTl42(wBH#pb@`ZBLcVg~XD zn16&*!qxygk&5n9Xs6?hk6h3WI0{JdbP}zKbV}{z&zkDi0yT;+g)W|~B9&~4O-jMa za$-L}?fUSCo;Jx-KLz^s5Tvt4`r|786mWjshBZML6@d{8y^2L~N5Nn_7x`~1K zDhL!r7HS)ugOx|%PCqOmO}K+w{!($C6~uEl3G&0sqAAjb;~-6T$9p87fD{*%K(jcH zAC4uY3wG8(ci1Q%MIoRTOt&D?CuUoz8o@EOUCOQ>rxBtw1^JyH-NcTVr*Mf?hCxlf zlv+ePy+0-JHDqTfqR*(;=l!r|uWviY_AtqlTHS6G#&orGfLs5xKq;xP0PNm*9!=io z43SSB+!q!kRuPNRWOle)x-9N}5nmMjh984$*A(=P>~SI251W}+NNW@#N$R6W2ga_4 zGBh0Ig6J`+t>i*J@?J@k&73$4uGDw=Pgp%gEsCqURPtiq!3?w^0^B1UODrNUwp$Qu$- zD3R1jdWQJqT!^H>(QFzc-?%Qey;-`OK^=sP(k_W+#AbzQd^>psd{C9r$$K})+)#gW zBXoBqsivv3@1VI%Sp%I%QX08OH3SmAtnp905-)l5yD~=n)T$tC4GoVsPl}jH_Y_)^ z=qmt21}PQ^0rESouVrBBfCQs%fReV=~Aq=)=yNM8UvW=J1JOpmhSk;s86$oq`}$NbAdiwjm$4d33sjpiSZFaORkkpX9^u zRj!Cym0c919bz@-l!(2E7C*Rrk}lYP2|^kc{79(Ox0O@X=?u6cLlYh$>`}$gveu!7 ze}Qp<{-2_YdeRdsRvz_(PQ2jQV4l>&SV{-cl&DMV$M_Lp`Dz`SnFMi<5kiv`U=~2P zk)Z0YuRQ5>OfpSB#FkD-%c-4*%}iHhi;4!bYhV)1cbrE;Sm#($8twvX1T>Ol>TBrI ze7pWU$V<_x z^B8ciP=ZjT-Xn7n8_68=N;8YSs{j9gWU=DG+GmF5F>Jg-enWKNgW&XF5mOXM6wV*3 z4}#C}k?XNH^>*k@YR{tC;=@MTAX698(vlBHI3}z%vD%x$EDrJ1*FTtsW&SYKjB%u8 zL@<&in0%RELlUqGkao}fnjc%pqRBupoTbzBm!&O&-$N(2rdZ>N*r@z?1%FzbA)#rn z&|Tm3VzcRt(H7e>ycba8NI-TkH3o?#E!N`{DGvACfBgxs)ZEwhYgZ|sDxqyzb#Z2< z?lqrWtP1(afkqIv)tjcbWfx@o+;fI5IIudT+H$SWjND4?AI150T+e=o0kKEOtb~n6 zSjiuOulvuy_Fg|Mv31@wrJKRf`Xeu}VU?iXV60T;JJHRzJXmIR@q+_G?_6lq?2w9W zzsU{3j1(3;ENlcsayaIsHA3(kavy6fjbF!?tY^P@zZynBC^z5!nlg-!dDRZqfz{4( z9R+U(b!vf3aSl1JE6u!N-Du8aXtAWN@8X|SQ+XIYelZ-EGi2@IBPM$kpHv!_vUNB+0#IA>yY!b@7gK$iT{2UOuN&$r=hO{OlJG>S)j^7%8 z{lo+XF-R@z0}RpX1G6?>1SgcpVs<0}lO6x3C2jF*!-DBLo@Otvh;IB%8L^baG>@OK zpF}!)ECC(=)X^RppQ?y6UkkUoI8JxfETSd`F~a^}3!Nve#el>K%6hp03F|z<(YW3H zCF;T|Z;{EmexF(^Nq_!`=O%-kVsTNdmdv=E5b?c6yYxy-a%Iw83d(?02c8Vs&pGcc`k7gad5Gjdt{~ATGP~uZD z$_A315+~g5HCmB;jIU`tH%jo2nr4PK1EL_@_%$S5>=alW--v<@aZf%)s3 zvnB>hba18yBzt&CcE0sv?o!Jjk>Sa8*AqVmvq(GpMki`wlwi(lVJ!`FUy;?{Ct(bw z1B@UfQE$wZA^NG;ju9q?N@^yg<+`j>ZU<=~lnblFt-|azv=!nPuYBU+WguH*W9oqW z#!sZ7Q*Cs zwJ9SXM2Ttfp;+Jx2OzJTUaJ5eurY7_u2Q=(2xE4GU zF1Awb&4@c~7?Tp5zrqDGr;xVy5mWNR$Hz&*UA*#F!XJ3*uE$`4r2NG|0I#k}k+Q$f zDk@q+gEO}LDy|ar3tGb8qBNR}de|)pXS7BL-ox=PRo`c{?qEnMAFF?vJO>-9I5#NA!DTYV3ou;;*dlhQgkP z5^O({GBfnenx^bKzC_I=*5PW}CJnP!YkmFjSo&Indo!Cu05^cIw9+MkCMVhc;j2;A zMxkW^&lz?(%ey@tJ#ssxtWu}AbiCK`#i>*7QX(`HOFtH~NqIJ%)OQzZ`3j}pX3<>q zK*C84tP)HN1J1{{@9Yf<$S&4+Xe#($_bm!FZvIM|BHf;=sok5h{V+Q*;kxpnHj>cX zjMRo0o1=azm(^>>ZJ?aX7=Nim=|}S2=d=;y4*k&I$klgO7rs@J#=5%J;~B%Pj`N3n@@AD-)6ujOmeo02-h$w_-r+q5%K?fC zR8qwI+12)R%l^&-xJpS#SDZyZ*fe=XsokyR488_DT&Opar&x`vWoKeCH=d0G~a%A;Cx;R+eCL$pQU;cdM^U=QH$*2c8Y{ zsYe*lXT{QrMcVzF`QX&lJ!{i8sAi`eViBt?5HPl{pVs)PL&CCec-gr5#by5Hw+erJ z&G+q(n;A#(%dGcoV3vX+BobV7fg+^Iy_~??KYP3`RtYs22@^bgDhKUs%w!XW%W1qD z_ZQv#VpVvEX0?~?Pb}o99VS}pxI0{kF#IUWak=cjrN-_H{-pRGd9q16X$*US9r2fE zx1Y;RN?w}{XZ;A(lQMa}m=&_TP=1eSk}2jolv8EIMQb}%nZ6x1rTfoUxn%MBh>NX@ zKL%}D+MQ`)0$3Hnty+kSD(Al4l;`nMqGSVDPeEMx2Jq=sO(6!W+ItyxhAPCx$X-T` zUttlV-|UD#BKsC1E=*RUr`ex}!v9Af34x04GsUERGN8p1^+*ev`EphvR#sS;Kh8r- z@2KNsU24<)Q)DaitYs}$tWvfq%&=V;d!O>VjV%k?@y^ej=Ce^?hg@aDcXo?Id|J`r z{pGfnx88=-^BtlZ@Q$Yk=U(-d&Tp+iJ$G?9>2ST#-)w#rY2sG zc6`h3qY{TO4Epj*ub`CzrKCj+`Y*@%yq`xhcT9X%0asJn>P_73HnmYFai@YRGTMAs z-%SH|oLUY9ul@+F2&dhq=$p9KTIKA;i>5lP?#6e2y6y+g7j&GBh&jy~dwVj;N4xyY^7^r6GC#FH zHZ@G!-r7rUIBe`O{?4hgX%joCja0U)ADI}46(2fhk`#=u%Z{bQTIe3$S?i15S&#UZ zCA=5HV*&Rk{pNxz>7(Ljs*T)^X0pMK?0fLqUMxSkBk|MZBp>dR@<< zn+_CEQQP9)EPl=oLq}bcT_PfLEkgLDe z^g;o*9^PG8tUgLhwbts5m-F`iashU>wzix&DZ7Yn_UNY%YE|ExDoGMU{O3~RO5nne zpC8me(+tKG;IWh_8>c;V;c$CYwO#&bSq-PT_itZMR9Qs9;ec1R-`aWami%ncB)jeb z-XC|HSU>l~5~6Q62jZGhQQNPU{Y?_J4&Mtct($4YVtatd^o_=!HmD^0&Rx#_2<4bK zNodV5#fkqD`;+$8a`Ex*=%}*o@*^-XIE2E)$K15hv2kg}bAN99Vt4wtWgSN!#W(JD z=uyv9N^Im;vOlx8@K>Vgj%i|tSqC-!bWXWpa&*_B0Vspx&irb)nsu8_~M*-B~xlR~q7Wm8e2 z1vT%HLw>5<3V!r-q009etAZU_0*Q59B9FysebcrJ>aEgn$cl;YM#|y10{sQ?+fp?K zq8%RW?OOx8Qe@FYlnE-&d@WB001y+@NeitOr<6wT;RQ8i5^kT+vDZ{ya$J6`Vo%!W17=;`MJx|o-9RYz@ z!Y2C`OfJUG~n3T-pKZ=gyryFymGSqj>x5b+IUq2dubdJs( zd%dGrXx4TyB1d?YeTulY^iwU-eOIzBJZTkuo6%(GXY^Txlw(*mrDIXWVwPB{A-G%_w1L%B zDNZ|*r~kr#4+M-%e4t^)zzrwuxg|ttzA$ud+b9%HPtO=XG~dWAyNk0N~B9)JWg* zZgNA1ggx{R8__7rAz#z}S5H?N7sb~`=~z-)8tHCaArgz>B zoXB#uQ(8*=Ol^@KgVd0RkR+VK*QB&=q`5LO#0WGBxiR{p-H-?L!&&yub}JFctSteY z`sGHNw2NkC%G)P0WpNomw&!<#^JiW^U+~#<>U+f^0YMLnEWJDpQ^9xDa8Q|aL zKHU%2th4`FHQ~@#WSt^(E=?2+)znL{T;z>fyQVWN& z=zam&|KzBhRu{c_${36tmxhhOGiy%#NzXAvJM@nfJ@w zzj&k&AVuY~cA>ob*@uo*;C z$dIu!sK$xLg&i{LB76R5rpb@hXs&nvmECM_Xtb$GOSt_;yvx1&m5~(`zjQOL^S-z# zm8JI+!=g=+T07`pQ|H4tKlOI6GCY&#oq@H*;@wf(q-5q=3QDhZCyiuK`$x*bcM2E> zmOJC}Fx43XMY(qI^Y=5zJ^R(QJ)p>BSyVctgWSh+=FZPq@6?Q4T5PQzcTsa>8T5j; zcpUl=^z~?Z5b=A`=4UuoaIE9yM(dt{hD`c7^9jrPxS2^5uG!)jv5hbr3-ia$!Pt14 z;k@_f8B`P@NH{c2p$ntC*i7pqiFRyS{t+0cc}Mt4thj8E$1l7)iv^ib`E*nq<#A=8 zFUe3V@}-!NM;zI#t^l(48HgI`%#4gauP?|ywlA+5o|jw|tK*+PVMxR{ESxS%E-RUO zMc5$Sz9o{TBJ9sbsj4g%ZYq3qmBbn7AcLhuv3Ar-Sr--yTR{JGz`Lmn3^%GYG{r185dJU5wdPA*dr4sm19%%_$(@P64> zIM!Y>0F17$=?^_dk*uMv&R_al&4 zX6Hpy@8v&1|1wvtD`n4qvv$1mhVz>a*eNR)||ML8ayYt>%$f65D;gDz|GNgcN%%0`` z2elU-uH}Mlnx_YD$h~GB*O;jbq-n*^X>z9TNYp1v# zXpn)F&U-}{PPrja##n*WT6a_|akT^)oaIQK!UiGg*Y!I8oTsltReY70x|1(je`YG0 zysh9)2oFDbfi1z^y8G%Q=0%8<3^tKxoX0DRe#CtCp4LQksw}Vme%na)-l?ypQg)7* zs*z@(SBMGDw~`~Si(^`aZ*KBZzUV8oKAo3JUaZeG<2gk4$vHaZsdR9Q@x8Oj1GZ7_ z<=sWGAA_&gN7@%2{45NQBUEf5cemP~DL30F5Jd(Gfin6oyR2WK!Vy}YpQJf$feuem z7d4hy}dP= z^eBPzD^$AhjW1(Dmz3PcKN1Wl8BW!Eei!?H7)7!4@Eg9FqBp8@$}45L|HCHI7%q(Q|bx?d}DU zQnTWaB5V5ArRrQ&dg8X*gEX@ORZ8>A^CD=fqXyy)Q_88<@S+H4njuM{0j1H=@?>cR z;X&WfmbkNyB)_WejV(@#wF`q$&| z7UN7mQN$)u_wKI}$~juHH2i_)6f1P*nG@bY%1!@ULJhI?@!+D~+Qal-DDIueAFDba zpwj9B7x;(ze}W*^OKa1s2G{GKHsU{t=iFgz4?CAn6cnW1 zU(|fOX!J#Eyq?=_u$ojYFu!)5IQ3U>++Z48%Whobie7{c6Z+L|QhtNR?tAmwjgisZ zQJUvGSA816T2GjSOg_wlE9mcgh*XkIN4jA+w02 zArb-CuHIM6-gm>)aP(p1H>DRhlPa`{98{ntBRHZ1>gI>af5d-_13iq+5Q~AkB*~e!X`5!c{TnY3Zd1rLe_nSS^26eAzV4Ca zecK8imB%PCm_=0$`jKe`E@0iul{J0Tab>nj_ibe4w&+#MD{b>}^%)jER0w+f>*;}{(|2&Ki)l_mrv z>yuIt*aLiS0?aHimYfPbmD%vN^OG!Qi*T{u^eQ&0QodlwZS55c(1Kb`a=ekOLJtuE zV+RS6!*grKfEsW2B{5U@p7)ZQLPzm#f?6XS+xkfz@ZqNUCoC!+#&5fg#k9Qrt$!}f z%H^f%_Ti^7yIa;q5-9YvfsPsha$vu}JcQS{>w4hKWJq*pgRvPJ3!|0#k8dosx_1Y+p_?Id(PXaeT&^%1<-xV_SO191lP7Wn$ zCa$cg0}2}d3+x@fcU@x#`Qg<2dzBYI3uk4Y!rP{#AuEv;R9jjZ{Ece|6c;V|kos)Z z)cBW>w;RI6SXe%=-8=-*EX4MJ^JaVxS!Ol%;vGkc*mc??fJV7YBn_JrjK9?$%KRom zbSvt|%7u9A?BQc(!Z9fWxXkITsb|Vt#Bv2itPxzg@*GR*iJzk{*-t&YjS8Tv8uP<~9jSw3Gl|NS zrPp#lHP0m&UPXuD4nxsBLnq1oUUxwg)%4tgD$vMy3baos(ISPVyUU7ShX+d=Afj|p z!s~z3YXKYgklml9u%eccUnljh%^(L-F|nie=NLu@B}d8WH6UVE=EU#z&(HqMzuE5! z_=diAFepV0{)ss1klD$5)?2Uja+7krz@<0ASm$Y6)%~qDKSq}fqU-(j>7(t*p01}2 zP)a7DmdW}0wVEVmyF21=8zX1WR^HRWwdQu6g$R8sa zW=kLHE>s3Ww^@HEp4iMOzalEk-HxP=N>SKR8J!oyOG%P{)oPYf2l6_1e<^CTiKJ{qlYU7pdLYS&MbO9usw6EJQH!JH(cI!1KOt z&&Y8UvvfcXv75c=w~Od;eLf8G?H0b~YShD&WwZCAeLdmMwWiNLBwg6Kaz8B?ox1yD zb8Id~{t`x22~~8SxY!5i^~W{5p3ra^UJapf>%q%nDN}f+64qgPKZ1~^9q1H8>|#d8 zxODY`nhfjCySUKVj^R|cI}?A9?y$;(zz)?iAXd?HR+eA@c$PI5!5kBwo32V3hf%G> zjIxmhA!3yX%3@rJe7Fa>C zanmnX3qLUPtOgzNG~VAd8pGwR!#Br=aHJ%JnZ| z#^_q|nd{MxZRL- zef6X2iZ;ML`5TMeezhTX{oGS^Y$}Nc%!JoFfHNJ3k$|kGpjNQ~9?x6u}2@|1*n*!{wFS@PY z8QaX%C8b0+Ra?8;r+U6(b>(1I#9Ln=R||r$fsOE4q>xugMd|2|;HXVDx9&5BW zwO;^9BUHyBT#l!crL0fEUV}5?!G_*^A+oQ?IS8i-YHkuw3U@`30|!gj`DA%aDOLH) zk+j7{GBMe@R@q`wM0sK=jP>DkMKgS7MR1}rG^p%`1r*%ZZWHdXsYa^)CbZ%Nm4Rm} z4NO0aSe4)K8dX1VtHWA(yo+OXcvy9gK&tI0!%Q}$KVweztzoRV>SY*TjBQR?OTe=` z>nEY=CWjJW3`bN|5vc%`6G>Qt=Pf0LFrkvLDzCNDPIpUG1C)+-;g=o>g-DV(!k;yF zDMbOYHeJ)a1S79+0iJz)+xnk%y~aKnX^*&ph80XCn6%)ga*I}2Z_$~jEL72Kuum|8 zF_T;4#8i7XIrQZx+Jh-?g>yocx)74~f}H;>MI{kq<0e-`iC8geHQb&* zFM{=%M9NZK#x71``tNV@r?&avy;1RzWDKvhQ_BMis$R)QEtlFdyq}U=a9$pKi-b0~ zS!2@W7yJaefUU!1rK}};#b_^QI0cO=!JW@jsC$w}i^Lzu-T?8MBDVVGR&tjOP zl_u4HT*jVo|7$-V#GW4r-&dU%y3e@bv4SZE0v2B9I_DO7^MMkw2{bZAynk@53qN-q zO7SMqsO!rq7hC_6mp(=-*QjfS)9WXYCTwWiCAKAkQ{1y;m69pml-udJNUDEwkYP!KPoq8ENuy;KH z$EeqOM86~b7v>9)NUE*>V%y;opU}RPc3=6I2>tR+qH3i1*>oNmMrABVS%qh`)@zLg;@ay$R!EleV8-6@M0Crz+X!XpRK0yG z0l+qm{dZ7jciYCFw3MPdPFb3@nqkyIo#OQcZN#tUO`twM^|)Kbkg?!k`K!M2e~dso zv_6UT+A^23HjpewMtRvBn-Yi+gWzJz)V8qRZ_;?I?6yWV$EB(H4g>nPpH%kAo87e*)HxW|Ko)L}gfz z(&g~P_qRQo{biuO3u|#kn7c6Z2GMKF%R~ljaxAK#hXeDw2WIZ(wcuHy-dEN=UoQ^k zCNBVDpBp?-rvj_B>l4$W4In?&@t}j1{N{anZu9LvG1+oB!9Y)oGAxB{{o}*}SEe{e z%w^QiN*~?=G@0247b}=pxRn2e?2o*< zXR?S(K2aNZm;2Gq?TY{LU)l5*G$H*++enz zpk$Eq9|bd{b20%ERKEJunJIQ2`XC(14UHJSwhm6rJ^|gw zA>HYdOfMJS{QW4w0wDc4;5Q>#Ww=_j8ZG#^43Rn!8OXglTz+CyumvSlU{{c*zw=~7 z*Xua5&EFf&L2}28TZk2?+IIj&t)XX(7LgnxU}x@a1+k`DS6rjICnKtDR?U1pu24TE zAo>~&ppuW2GiuCWp$r4Tb#rF^H$44DXs1t_q-cti?`4R34^tE!IThl@PzZuz?DOpj z4=8AHh1f9mBavpw&Y1stmE0V{B|*tgoZc=p>2(wmc4P2k>odC_Bt;C-Dc|rI2~wo3 zGT_wMOqSb%b0*X1Q`i?DGCTk|=60y=kQ%$z37KwY{%JW6VB=!mS^(%ZQS~YxdlO+_ zFjjF=Aet&w{(P3j8bTHM2#A)qhDuDK^G2E3p*ZAmNa;8%|CB)+=GH4JNbnrBTqgCb z-3!;ox!9xDc#oRmohYQ1ge7P1a190Wt}F!+x2`Q5uy}sNOX0Atz{B7!1V~@R3kg^8 z>7&EW-osL9Yi)qgjHwPBr1DOdmw)~7m4rFbe0*g21&byZvexT}o|NR6LST0n8d*ny zNnaPZXk?LU2Y((GA|{1;MXefo1&Xnk9HJBYcP3{>KIeHJNei1aw1$-F^7-<7|Er@% zeJpE|VvEhk8Z1cKrZ90Le%KNqY2L5!9V$ZkX8@`DFi@=4%p!B3JJL`S3R?$m;Oam? z*&kk7hUOTT!*75->X%EH{gb2dsW8=YaG*%a6fGH`2IPmsZGs+eb{@EF72kSsSieAg z?doB}@lt`>x2RL?%0Z5te}NE*eP}_<6DWUHZX#m}Pe^PsaiOgXk8yPU89VJK5Dlov*V#2s$V}>Q{f*O40ydMxewm zUVo@>A&}sFR=+6B3C{9HYX9a+TkFvBZ%-t09O6dbxBzSpBaQ5eMBwdp2fbmK7a&aw z-@mbNq;+^wXsAvOfZ7gmqPqVP*27HE6s(2uo0{QTumfWH)x#QZd$=?kvTAAx-LRos zh&3^;ZtF>Y))}WpBhfpb!E)uHkR-jKBH)7F6FX3KFfTnN@I7BI+rAI9}pd0N9g#sXt3uD&sis+W`cfVbk~4V{R2jBMX6=wEV;GV|4~B z{;C1$5|CCF?|v=*KX_?v0CI$%9v>Va>djB+d_U@Nri#vVG?`d`(a`mbNv%Ft|=}0Y> zF8@HPK}uf5;AhPssp5kfOewkUT>Ck|0^YFlIg7dayyuy?O$_g^tmjh!%ACYDUB<*} z;4FbHM+YUyhN)$oy_WLKIEUl;8iDUqYsN>o!jaO;8MlcIaBny@Qi+D5Tk5}j^F_5& zTHa>;-HrtOg06X?9Vx1v2}mI_Sxg->@s3JWtDk&PXa5^!pvIKQcx%SF|Ce}ZMS|ac z!sF|5a~%If4zTD-p-M*>YDt&P(KeO0+!Tg&>4&Wc)d#a?{_lm{w-h^xy?>!D#zYbg zQ9(9?ZchhknDybpzsZ~VG9sN6`xqjQ?1$?Mq3m?hd)&*D59 z2dTyVzO8~osUj?0&T1QmVCdAl9&sw5;*e)A$0}qy-5z{7adSScVS2pM@t@lRd759V zp&N~&88EtZeP{tpbqdUaHGk@Z|ayJZE#=J}3; zvA9kW&wwy{Ip+COp7aJM(;|<5Lb&&MbON`_`DG86EsvzXZqKeW45zop<4|!RD9MB9 ztloj$77?(Yv{3L^K!00BaV`PifA?|;qA|JlQ=DsIFM0>cLq`=oZniMvnP%#B+E%&j zKFax>!;99AJG;pAhrW5B=iorKN0)7?VadfGw@1J|axKm`XK0^2>mjP7@r?P)9bYx% z`fk7U-YZV?!&G_%1fO4j+m63iv4OaAhAAxS$6rG#zkL0i*2OahjNZZgEcu0HH!7(I zpsN)717jc#N$P~`OysO5eCH80N4d<91J`4+YiIWpR93gLEf~X=!xy;l2hirHG)BW( z5WyI2l*l}n9ak#{lZBFHbRJ^539e33UiyVN&Tp;8sEUnRpVE1~8Dn*HN>tqrHA^yi zeljrdodE8O8*2}G-I6Oyl5>mmEuewlJJY$EsQZfzPEMt;ZW{kXUK%XQlu&!7a^&3w zr!RG3Bzti)2MG$)4r*9JVFiTm6yA;FXXPbw09Fy{k*iV_jyk!_j>C`1-2@c{Qg&me zk()$`#Cupt2h7GzEpIvyEVl6H=@0`+9b$BCxG9#K+yPnWsIulesJw7 zN4EfSYLgkB#{B#1Po!oTN%s@IMy0PwwH6V2924`^u`ujJav8 zUZVLF9MhG{4&Bc)M{q!kDf(Q73Z&sI(bGP{j;&1Z6i~Z zf%Sy=l}UIExnPO?WKPhrQiqV3%hzG1BS4A#HULJELJaLbAUc@ z*8TV)f;bkJ9LG9En~wBLSpAQTyHip@h_c!oeeNB@a`FRXo997^p$fI0yW_x*;BM+P zx*v#|td58VhP6qB8x|tcfj##Qn*N}z&n-zA==3C+RI07qaeE#zOy8c7j^~s3<$P}@ z+dqT3H#Iu4JVLLJU(mm~W<4qE!!hpy9CPg%FZ5JuzvYGLzFO#YcM7b&yfsR5`qNM> z1;qWvIHji#0C`_U2zDz5TvEMMUh|egR?L16i7H%fZ%y3f1r{EKL{RzCmgYTP^6*07 zD7(4vof-A28`t^WHErtm$Z5WA@jZyB-L$xp^Te;~y7Hmi2GINuM zn^&5Whv#lmZJu2t7rRn|N7O2nRH%t9C1{gf>wADed&<~NiCyG@hSxz@PkHIAiw55V zoP8HAc|3wsss5JEs{S5{!WQw72P_ejiu2MZhzmh?e**_2+k{jLC7ScCrU%5rxfP%N zRlYmfJEAyVyO0TyL4J2$<{DuI&H#m7=ykKjA48|AhW5Rr^1zTofG#o$-iuxU9}WW3 zs?^&t*wXVWN54erlham(p8I4hY!-CcO(>qcRdjWAGQSua@_Baz!h&cJA-jR+UC_*=~|~*t#zQ zl!s)&*%AKfZl9RY7PM&j8$#1QC;VQ2P?>UV9Aj?te0hGL&H zzAy_fMo68OyoHyP=aH3~RbFHe7IGJcf%qBHA7S55p0>0x$|2P;#9_lMXy14LdN6Tt zebX2u@)6x2D{%$zn&=mCw3KJ$_hv8)fSCuYot@s=R$W6Vsv^j&N8Ji2G=IMb-uanh zbI|xA%n)a_*H&l>aj-f22FHkF8U$SqP<*&XCI0bgLFs-O(Zgqe={ghPI>Q_?F8G+0 zoA4D%rXd$H0z7B4Nd(^i{h{-(=UX@uYjlobEG9PQWQWhupP$xT!^7-*#8OyjV*&lw z1u2C{j46VmB|8&tASa|*eAHA(O7HyE&L3tGB?sTXz8rtHh^r{RS>!orN`h=kQfF!~ zFBuA@!~jRg=AKo#niSv>Ve*Nb4fO$hT7%R5+L=(mB&BvjP=yKD``?9Wm&}OPy3Tg7 zXnp|c))Q0`h+d^m - - - - - - -libdap: Member List - - - - - - - - - - - -

    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::Int32 Member List
    -
    -
    - -

    This is the complete list of members for libdap::Int32, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    add_var(BaseType *bt, Part part=nil)libdap::BaseTypevirtual
    add_var_nocopy(BaseType *bt, Part part=nil) (defined in libdap::BaseType)libdap::BaseTypevirtual
    attributes()libdap::BaseTypevirtual
    BaseType(const string &n, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const string &n, const string &d, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const BaseType &copy_from)libdap::BaseType
    btp_stack typedef (defined in libdap::BaseType)libdap::BaseType
    buf2val(void **val)libdap::Int32virtual
    check_semantics(string &msg, bool all=false)libdap::BaseTypevirtual
    clear_local_data()libdap::BaseTypeinlinevirtual
    compute_checksum(Crc32 &checksum)libdap::Int32virtual
    d4_ops(BaseType *b, int op)libdap::Int32virtual
    d_buf (defined in libdap::Int32)libdap::Int32protected
    d_in_selection (defined in libdap::BaseType)libdap::BaseTypeprotected
    d_is_synthesized (defined in libdap::BaseType)libdap::BaseTypeprotected
    dataset() constlibdap::BaseTypevirtual
    deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)libdap::Int32virtual
    deserialize(D4StreamUnMarshaller &um, DMR &dmr)libdap::Int32virtual
    dump(ostream &strm) constlibdap::Int32virtual
    element_count(bool leaves=false)libdap::BaseTypevirtual
    FQN() constlibdap::BaseTypevirtual
    get_attr_table()libdap::BaseTypevirtual
    get_parent() constlibdap::BaseTypevirtual
    Int32(const string &n)libdap::Int32
    Int32(const string &n, const string &d)libdap::Int32
    Int32(const Int32 &copy_from) (defined in libdap::Int32)libdap::Int32
    intern_data(ConstraintEvaluator &eval, DDS &dds)libdap::BaseTypevirtual
    intern_data()libdap::BaseTypevirtual
    is_constructor_type() constlibdap::BaseTypevirtual
    is_dap4() const (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    is_in_selection()libdap::BaseTypevirtual
    is_simple_type() constlibdap::BaseTypevirtual
    is_vector_type() constlibdap::BaseTypevirtual
    length() constlibdap::BaseTypeinlinevirtual
    m_duplicate(const BaseType &bt)libdap::BaseTypeprotected
    name() constlibdap::BaseTypevirtual
    operator=(const Int32 &rhs) (defined in libdap::Int32)libdap::Int32
    operator=(const BaseType &rhs) (defined in libdap::BaseType)libdap::BaseType
    ops(BaseType *b, int op)libdap::Int32virtual
    print_dap4(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
    print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_val(FILE *out, string space="", bool print_decl_p=true)libdap::Int32virtual
    print_val(ostream &out, string space="", bool print_decl_p=true)libdap::Int32virtual
    print_xml(FILE *out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml(ostream &out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml_writer(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
    ptr_duplicate()libdap::Int32virtual
    read()libdap::BaseTypevirtual
    read_p()libdap::BaseTypevirtual
    send_p()libdap::BaseTypevirtual
    serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)libdap::Int32virtual
    serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)libdap::Int32virtual
    set_attr_table(const AttrTable &at)libdap::BaseTypevirtual
    set_attributes(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_attributes_nocopy(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_in_selection(bool state)libdap::BaseTypevirtual
    set_is_dap4(const bool v) (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    set_length(int)libdap::BaseTypeinlinevirtual
    set_name(const string &n)libdap::BaseTypevirtual
    set_parent(BaseType *parent)libdap::BaseTypevirtual
    set_read_p(bool state)libdap::BaseTypevirtual
    set_send_p(bool state)libdap::BaseTypevirtual
    set_synthesized_p(bool state)libdap::BaseTypevirtual
    set_type(const Type &t)libdap::BaseTypevirtual
    set_value(dods_int32 i) (defined in libdap::Int32)libdap::Int32virtual
    synthesized_p()libdap::BaseTypevirtual
    toString()libdap::BaseTypevirtual
    transfer_attributes(AttrTable *at)libdap::BaseTypevirtual
    transform_to_dap2(AttrTable *parent_attr_table)libdap::BaseTypevirtual
    transform_to_dap4(D4Group *root, Constructor *container)libdap::BaseTypevirtual
    type() constlibdap::BaseTypevirtual
    type_name() constlibdap::BaseTypevirtual
    val2buf(void *val, bool reuse=false)libdap::Int32virtual
    value() const (defined in libdap::Int32)libdap::Int32virtual
    var(const string &name="", bool exact_match=true, btp_stack *s=0)libdap::BaseTypevirtual
    var(const string &name, btp_stack &s)libdap::BaseTypevirtual
    width(bool constrained=false) constlibdap::Int32virtual
    ~BaseType() (defined in libdap::BaseType)libdap::BaseTypevirtual
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    ~Int32() (defined in libdap::Int32)libdap::Int32virtual
    -
    - - - - diff --git a/html/classlibdap_1_1Int32.html b/html/classlibdap_1_1Int32.html deleted file mode 100644 index e961f114f..000000000 --- a/html/classlibdap_1_1Int32.html +++ /dev/null @@ -1,2925 +0,0 @@ - - - - - - - -libdap: libdap::Int32 Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    - -

    Holds a 32-bit signed integer. - More...

    - -

    #include <Int32.h>

    -
    -Inheritance diagram for libdap::Int32:
    -
    -
    Inheritance graph
    - - - - -
    - - - - -

    -Public Types

    -typedef stack< BaseType * > btp_stack
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual void add_var (BaseType *bt, Part part=nil)
     Add a variable. More...
     
    -virtual void add_var_nocopy (BaseType *bt, Part part=nil)
     
    virtual unsigned int buf2val (void **val)
     Reads the class data. More...
     
    virtual bool check_semantics (string &msg, bool all=false)
     Compare an object's current state with the semantics of its type. More...
     
    virtual void clear_local_data ()
     
    virtual void compute_checksum (Crc32 &checksum)
     include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum. More...
     
    virtual bool d4_ops (BaseType *b, int op)
     
    virtual string dataset () const
     Returns the name of the dataset used to create this instance. More...
     
    virtual bool deserialize (UnMarshaller &um, DDS *dds, bool reuse=false)
     Receive data from the net. More...
     
    virtual void deserialize (D4StreamUnMarshaller &um, DMR &dmr)
     
    virtual void dump (ostream &strm) const
     dumps information about this object More...
     
    virtual int element_count (bool leaves=false)
     Count the members of constructor types. More...
     
    virtual std::string FQN () const
     
    virtual AttrTableget_attr_table ()
     
    virtual BaseTypeget_parent () const
     
     Int32 (const string &n)
     
     Int32 (const string &n, const string &d)
     
    Int32 (const Int32 &copy_from)
     
    virtual bool is_constructor_type () const
     Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable. More...
     
    -virtual bool is_dap4 () const
     
    virtual bool is_in_selection ()
     Is this variable part of the current selection? More...
     
    virtual bool is_simple_type () const
     Returns true if the instance is a numeric, string or URL type variable. More...
     
    virtual bool is_vector_type () const
     Returns true if the instance is a vector (i.e., array) type variable. More...
     
    virtual int length () const
     How many elements are in this variable. More...
     
    virtual string name () const
     Returns the name of the class instance. More...
     
    -Int32operator= (const Int32 &rhs)
     
    virtual bool ops (BaseType *b, int op)
     Evaluate relational operators. More...
     
    virtual void print_dap4 (XMLWriter &xml, bool constrained=false)
     
    virtual void print_decl (FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_decl (ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_val (FILE *out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_val (ostream &out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_xml (FILE *out, string space=" ", bool constrained=false)
     
    virtual void print_xml (ostream &out, string space=" ", bool constrained=false)
     
    virtual void print_xml_writer (XMLWriter &xml, bool constrained=false)
     
    virtual BaseTypeptr_duplicate ()
     
    virtual bool read ()
     Read data into a local buffer. More...
     
    virtual bool read_p ()
     Has this variable been read? More...
     
    virtual bool send_p ()
     Should this variable be sent? More...
     
    virtual bool serialize (ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
     Move data to the net, then remove them from the object. More...
     
    virtual void serialize (D4StreamMarshaller &m, DMR &dmr, bool filter=false)
     Serialize an Int8. More...
     
    virtual void set_attr_table (const AttrTable &at)
     
    virtual void set_in_selection (bool state)
     
    -virtual void set_is_dap4 (const bool v)
     
    virtual void set_length (int)
     Set the number of elements for this variable. More...
     
    virtual void set_name (const string &n)
     Sets the name of the class instance. More...
     
    virtual void set_parent (BaseType *parent)
     
    virtual void set_read_p (bool state)
     Sets the value of the read_p property. More...
     
    virtual void set_send_p (bool state)
     
    virtual void set_synthesized_p (bool state)
     
    virtual void set_type (const Type &t)
     Sets the type of the class instance. More...
     
    -virtual bool set_value (dods_int32 i)
     
    virtual bool synthesized_p ()
     
    virtual string toString ()
     
    virtual void transfer_attributes (AttrTable *at)
     
    virtual std::vector< BaseType * > * transform_to_dap2 (AttrTable *parent_attr_table)
     DAP4 to DAP2 transform. More...
     
    virtual void transform_to_dap4 (D4Group *root, Constructor *container)
     DAP2 to DAP4 transform. More...
     
    virtual Type type () const
     Returns the type of the class instance. More...
     
    virtual string type_name () const
     Returns the type of the class instance as a string. More...
     
    virtual unsigned int val2buf (void *val, bool reuse=false)
     Loads class data. More...
     
    -virtual dods_int32 value () const
     
    virtual BaseTypevar (const string &name="", bool exact_match=true, btp_stack *s=0)
     Returns a pointer to a member of a constructor class. More...
     
    virtual BaseTypevar (const string &name, btp_stack &s)
     
    virtual unsigned int width (bool constrained=false) const
     How many bytes does this variable use Return the number of bytes of storage this variable uses. For scalar types, this is pretty simple (an int32 uses 4 bytes, etc.). For arrays and Constructors, it is a bit more complex. Note that a scalar String variable uses sizeof(String*) bytes, not the length of the string value. The width() of a String array returns the number of elements in the array times sizeof(String*). More...
     
    virtual D4Attributesattributes ()
     
    -virtual void set_attributes (D4Attributes *)
     
    -virtual void set_attributes_nocopy (D4Attributes *)
     
    Abstract Methods
    virtual void intern_data (ConstraintEvaluator &eval, DDS &dds)
     
    virtual void intern_data ()
     Read data into this variable. More...
     
    - - - - -

    -Protected Member Functions

    void m_duplicate (const BaseType &bt)
     Perform a deep copy. More...
     
    - - - - - - - -

    -Protected Attributes

    -dods_int32 d_buf
     
    -bool d_in_selection
     
    -bool d_is_synthesized
     
    -

    Detailed Description

    -

    Holds a 32-bit signed integer.

    -
    See also
    BaseType
    - -

    Definition at line 65 of file Int32.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ Int32() [1/2]

    - -
    -
    - - - - - - - - -
    libdap::Int32::Int32 (const string & n)
    -
    -

    The Int32 constructor requires only the name of the variable to be created. The name may be omitted, which will create a nameless variable. This may be adequate for some applications.

    -
    Parameters
    - - -
    nA string containing the name of the variable to be created.
    -
    -
    - -

    Definition at line 84 of file Int32.cc.

    - -
    -
    - -

    ◆ Int32() [2/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    libdap::Int32::Int32 (const string & n,
    const string & d 
    )
    -
    -

    The Int32 server-side constructor accepts the name of the variable and the dataset name from which this instance is created.

    -
    Parameters
    - - - -
    nA string containing the name of the variable to be created.
    dA string containing the name of the dataset from which this variable is created
    -
    -
    - -

    Definition at line 94 of file Int32.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ add_var()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::add_var (BaseTypebt,
    Part part = nil 
    )
    -
    -virtualinherited
    -
    - -

    Add a variable.

    -

    Adds a variable to an instance of a constructor class, such as Array, Structure et cetera. This function is only used by those classes. For constructors with more than one variable, the variables appear in the same order in which they were added (i.e., the order in which add_var() was called). Since this method is only for use by Vectors and Constructors, the BaseType implementation throws InternalErr.

    -
    Note
    For the implementation of this method in Structure, Sequence, et c., first copy bt and then insert the copy. If bt is itself a constructor type you must either use the var() method to get a pointer to the actual instance added to *this or you must first add all of bt's children to it before adding it to *this. The implementations should use m_duplicate() to perform a deep copy of bt.
    -
    Todo:
    We should get rid of the Part parameter and adopt the convention that the first variable is the Array and all subsequent ones are Maps (when dealing with a Grid, the only time Part matters). This would enable several methods to migrate from Structure, Sequence and Grid to Constructor.
    -
    Parameters
    - - - -
    btThe variable to be added to this instance. The caller of this method must free memory it allocates for v. This method will make a deep copy of the object pointed to by v.
    partThe part of the constructor data to be modified. Only meaningful for Grid variables.
    -
    -
    -
    See also
    Part
    - -

    Reimplemented in libdap::Vector, libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 815 of file BaseType.cc.

    - -
    -
    - -

    ◆ attributes()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4Attributes * libdap::BaseType::attributes ()
    -
    -virtualinherited
    -
    -

    DAP4 Attribute methods

    - -

    Definition at line 599 of file BaseType.cc.

    - -
    -
    - -

    ◆ buf2val()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::Int32::buf2val (void ** val)
    -
    -virtual
    -
    - -

    Reads the class data.

    -

    Reads the class data into the memory referenced by val. The caller should either allocate enough storage to val to hold the class data or set *val to null. If *val is NULL, memory will be allocated by this function with new(). If the memory is allocated this way, the caller is responsible for deallocating that memory. Array and values for simple types are stored as C would store an array.

    -
    Deprecated:
    Use value() in the leaf classes.
    -
    Parameters
    - - -
    valA pointer to a pointer to the memory into which the class data will be copied. If the value pointed to is NULL, memory will be allocated to hold the data, and the pointer value modified accordingly. The calling program is responsible for deallocating the memory references by this pointer.
    -
    -
    -
    Returns
    The size (in bytes) of the information copied to val.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 206 of file Int32.cc.

    - -
    -
    - -

    ◆ check_semantics()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::check_semantics (string & msg,
    bool all = false 
    )
    -
    -virtualinherited
    -
    - -

    Compare an object's current state with the semantics of its type.

    -

    This function checks the class instance for internal consistency. This is important to check for complex constructor classes. For BaseType, an object is semantically correct if it has both a non-null name and type.

    -

    For example, an Int32 instance would return FALSE if it had no name or no type defined. A Grid instance might return FALSE for more complex reasons, such as having Map arrays of the wrong size or shape.

    -

    This function is used by the DDS class, and will rarely, if ever, be explicitly called by a DODS application program. A variable must pass this test before it is sent, but there may be many other stages in a retrieve operation where it would fail.

    -
    Returns
    Returns FALSE when the current state violates some aspect of the type semantics, TRUE otherwise.
    -
    Parameters
    - - - -
    msgA returned string, containing a message indicating the source of any problem.
    allFor complex constructor types (Grid, Sequence, Structure), this flag indicates whether to check the semantics of the member variables, too.
    -
    -
    -
    See also
    DDS::check_semantics
    - -

    Reimplemented in libdap::Array, libdap::Vector, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1209 of file BaseType.cc.

    - -
    -
    - -

    ◆ clear_local_data()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual void libdap::BaseType::clear_local_data ()
    -
    -inlinevirtualinherited
    -
    -

    Remove any read or set data in the private data of the variable, setting read_p() to false. Used to clear any dynamically allocated storage that holds (potentially large) data. For the simple types, this no-op version is all that's needed. Vector and some other classes define a special version and have serialize() implementations that call it to free data as soon as possible after sending it.

    -
    Note
    Added 7/5/15 jhrg
    -
    -Any specialization of this should make sure to reset the read_p property.
    - -

    Reimplemented in libdap::Sequence, libdap::Vector, libdap::D4Sequence, and libdap::D4Opaque.

    - -

    Definition at line 179 of file BaseType.h.

    - -
    -
    - -

    ◆ compute_checksum()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Int32::compute_checksum (Crc32checksum)
    -
    -virtual
    -
    - -

    include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum.

    -
    Parameters
    - - -
    checksumA Crc32 instance that holds the current checksum.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 161 of file Int32.cc.

    - -
    -
    - -

    ◆ d4_ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::Int32::d4_ops (BaseTypeb,
    int op 
    )
    -
    -virtual
    -
    -
    See also
    BaseType::d4_ops(BaseType *, int)
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 282 of file Int32.cc.

    - -
    -
    - -

    ◆ dataset()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::dataset () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the dataset used to create this instance.

    -

    A dataset from which the data is to be read. The meaning of this string will vary among different types of data sources. It may be the name of a data file or an identifier used to read data from a relational database.

    - -

    Definition at line 358 of file BaseType.cc.

    - -
    -
    - -

    ◆ deserialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::Int32::deserialize (UnMarshallerum,
    DDSdds,
    bool reuse = false 
    )
    -
    -virtual
    -
    - -

    Receive data from the net.

    -

    Receives data from the network connection identified by the source parameter. The data is put into the class data buffer according to the input dds.

    -

    This function is only used on the client side of the DODS client/server connection.

    -
    Parameters
    - - - - -
    umAn UnMarshaller that knows how to deserialize data types
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure. This would have been received from the server in an earlier transmission.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect.
    -
    -
    -
    Returns
    Always returns TRUE.
    -
    Exceptions
    - - -
    Errorwhen a problem reading from the UnMarshaller is found.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 153 of file Int32.cc.

    - -
    -
    - -

    ◆ deserialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Int32::deserialize (D4StreamUnMarshallerum,
    DMRdmr 
    )
    -
    -virtual
    -
    -

    The DAP4 deserialization method.

    Parameters
    - - - -
    um
    dmr
    -
    -
    -
    Exceptions
    - - -
    Erroror InternalErr
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 184 of file Int32.cc.

    - -
    -
    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Int32::dump (ostream & strm) const
    -
    -virtual
    -
    - -

    dumps information about this object

    -

    Displays the pointer value of this instance and information about this instance.

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the information to
    -
    -
    -
    Returns
    void
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 323 of file Int32.cc.

    - -
    -
    - -

    ◆ element_count()

    - -
    -
    - - - - - -
    - - - - - - - - -
    int libdap::BaseType::element_count (bool leaves = false)
    -
    -virtualinherited
    -
    - -

    Count the members of constructor types.

    -

    Return a count of the total number of variables in this variable. This is used to count the number of variables held by a constructor variable - for simple type and vector variables it always returns 1.

    -

    For compound data types, there are two ways to count members. You can count the members, or you can count the simple members and add that to the count of the compound members. For example, if a Structure contains an Int32 and another Structure that itself contains two Int32 members, the element count of the top-level structure could be two (one Int32 and one Structure) or three (one Int32 by itself and two Int32's in the subsidiary Structure). Use the leaves parameter to control which kind of counting you desire.

    -
    Returns
    Returns 1 for simple types. For compound members, the count depends on the leaves argument.
    -
    Parameters
    - - -
    leavesThis parameter is only relevant if the object contains other compound data types. If FALSE, the function counts only the data variables mentioned in the object's declaration. If TRUE, it counts the simple members, and adds that to the sum of the counts for the compound members. This parameter has no effect for simple type variables.
    -
    -
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 443 of file BaseType.cc.

    - -
    -
    - -

    ◆ FQN()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::FQN () const
    -
    -virtualinherited
    -
    -

    Return the FQN for this variable. This will include the D4 Group component of the name.

    -
    Returns
    The FQN in a string
    - -

    Reimplemented in libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 332 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - -
    AttrTable & libdap::BaseType::get_attr_table ()
    -
    -virtualinherited
    -
    -

    Get this variable's AttrTable. It's generally a bad idea to return a reference to a contained object, but in this case it seems that building an interface inside BaseType is overkill.

    -

    Use the AttrTable methods to manipulate the table.

    - -

    Definition at line 582 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_parent()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::BaseType::get_parent () const
    -
    -virtualinherited
    -
    -

    Return a pointer to the Constructor or Vector which holds (contains) this variable. If this variable is at the top level, this method returns null.

    -
    Returns
    A BaseType pointer to the variable's parent.
    - -

    Definition at line 751 of file BaseType.cc.

    - -
    -
    - -

    ◆ intern_data() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::intern_data (ConstraintEvaluatoreval,
    DDSdds 
    )
    -
    -virtualinherited
    -
    -

    Similar to using serialize() and deserialize() together in one object. Data are read as for serialize and those values are stored in the objects as deserialize() does but does not write and then read data to/from a stream.

    -

    This method is defined by the various data type classes. It calls the read() abstract method. Unlike serialize(), this method does not clear the memory use to hold the data values, so the caller should make sure to delete the DDS or the variable as soon as possible.

    -
    Parameters
    - - - -
    evalUse this as the constraint expression evaluator.
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    -
    -
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 908 of file BaseType.cc.

    - -
    -
    - -

    ◆ intern_data() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::BaseType::intern_data ()
    -
    -virtualinherited
    -
    - -

    Read data into this variable.

    -
    Parameters
    - - - -
    evalEvaluator for a constraint expression
    dmrDMR for the whole dataset
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 927 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_constructor_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_constructor_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable.

    -
    Returns
    True if the instance is a Structure, Sequence or Grid, False otherwise.
    - -

    Definition at line 412 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_in_selection ()
    -
    -virtualinherited
    -
    - -

    Is this variable part of the current selection?

    -

    Does this variable appear in either the selection part or as a function argument in the current constrain expression. If this property is set (true) then implementations of the read() method should read this variable.

    -
    Note
    This method does not check, nor does it know about the semantics of, string arguments passed to functions. Those functions might include variable names in strings; they are responsible for reading those variables. See the grid (func_grid_select()) for an example.
    -
    See also
    BaseType::read()
    - -

    Definition at line 703 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_simple_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_simple_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a numeric, string or URL type variable.

    -
    Returns
    True if the instance is a scalar numeric, String or URL variable, False otherwise. Arrays (even of simple types) return False.
    -
    See also
    is_vector_type()
    - -

    Definition at line 393 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_vector_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_vector_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a vector (i.e., array) type variable.

    -
    Returns
    True if the instance is an Array, False otherwise.
    - -

    Definition at line 402 of file BaseType.cc.

    - -
    -
    - -

    ◆ length()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual int libdap::BaseType::length () const
    -
    -inlinevirtualinherited
    -
    - -

    How many elements are in this variable.

    -
    Todo:
    change the return type to int64_t
    -
    Returns
    The number of elements; 1 for scalars
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, libdap::Str, and libdap::D4Opaque.

    - -

    Definition at line 207 of file BaseType.h.

    - -
    -
    - -

    ◆ m_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::m_duplicate (const BaseTypebt)
    -
    -protectedinherited
    -
    - -

    Perform a deep copy.

    -

    Perform a deep copy. Copies the values of bt into *this. Pointers are dereferenced and their values are copied into a newly allocated instance.

    -
    Parameters
    - - -
    btThe source object.
    -
    -
    - -

    Definition at line 86 of file BaseType.cc.

    - -
    -
    - -

    ◆ name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::name () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the class instance.

    - -

    Definition at line 320 of file BaseType.cc.

    - -
    -
    - -

    ◆ ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::Int32::ops (BaseTypeb,
    int op 
    )
    -
    -virtual
    -
    - -

    Evaluate relational operators.

    -

    This method contains the relational operators used by the constraint expression evaluator in the DDS class. Each class that wants to be able to evaluate relational expressions must overload this function. The implementation in BaseType throws an InternalErr exception. The DAP library classes Byte, ..., Url provide specializations of this method. It is not meaningful for classes such as Array because relational expressions using Array are not supported.

    -

    The op argument refers to a table generated by bison from the constraint expression parser. Use statements like the following to correctly interpret its value:

    -
    switch (op) {
    -    case EQUAL: return i1 == i2;
    -    case NOT_EQUAL: return i1 != i2;
    -    case GREATER: return i1 > i2;
    -    case GREATER_EQL: return i1 >= i2;
    -    case LESS: return i1 < i2;
    -    case LESS_EQL: return i1 <= i2;
    -    case REGEXP: throw Error("Regular expressions are not supported for integer values");
    -    default: throw Error("Unknown operator");
    -}
    -

    This function is used by the constraint expression evaluator.

    -
    Parameters
    - - - -
    bCompare the value of this instance with b.
    opAn integer index indicating which relational operator is implied. Choose one from the following: EQUAL, NOT_EQUAL, GREATER, GREATER_EQL, LESS, LESS_EQL, and REGEXP.
    -
    -
    -
    Returns
    The boolean value of the comparison.
    -
    See also
    BaseType::d4_ops(BaseType *, int)
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 255 of file Int32.cc.

    - -
    -
    - -

    ◆ print_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_dap4 (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the DAP4 XML representation for this variable. This method is used to build the DAP4 DMR response object.

    -
    Parameters
    - - - -
    xmlAn XMLWriter that will do the serialization
    constrainedTrue if the response should show the variables subject to the current constraint expression.
    -
    -
    - -

    Reimplemented in libdap::Array, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 1164 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (FILE * out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1003 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (ostream & out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1054 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_val() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Int32::print_val (FILE * out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtual
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output stream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 237 of file Int32.cc.

    - -
    -
    - -

    ◆ print_val() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Int32::print_val (ostream & out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtual
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output ostream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 244 of file Int32.cc.

    - -
    -
    - -

    ◆ print_xml() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (FILE * out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination.
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1105 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (ostream & out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1120 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml_writer()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml_writer (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    - -

    Reimplemented in libdap::Array, libdap::D4Enum, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1134 of file BaseType.cc.

    - -
    -
    - -

    ◆ ptr_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::Int32::ptr_duplicate ()
    -
    -virtual
    -
    -

    Clone this instance. Allocate a new instance and copy *this into it. This method must perform a deep copy.

    @note This method should \e not copy data values, but must copy all
    -other fields in the object.
    -
    Returns
    A newly allocated copy of this.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 103 of file Int32.cc.

    - -
    -
    - -

    ◆ read()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read ()
    -
    -virtualinherited
    -
    - -

    Read data into a local buffer.

    -

    This method should be implemented for each of the data type classes (Byte, ..., Grid) when using the DAP class library to build a server. This method is only for DAP servers. The library provides a default definition here which throws an InternalErr exception unless the read_p property has been set. In that case it returns false, indicating that all the data have been read. The latter case can happen when building a constant value that needs to be passed to a function. The variable/constant is loaded with a value when it is created.

    -

    When implementing a new DAP server, the Byte, ..., Grid data type classes are usually specialized. In each of those specializations read() should be defined to read values from the data source and store them in the object's local buffer. The read() method is called by other methods in this library. When writing read(), follow these rules:

    -
      -
    • -read() should throw Error if it encounters an error. The message should be verbose enough to be understood by someone running a client on a different machine.
    • -
    • -The value(s) should be read if and only if either send_p() or is_in_selection() return true. If neither of these return true, the value(s) should not be read. This is important when writing read() for a Constructor type such as Grid where a client may ask for only the map vectors (and thus reading the much larger Array part is not needed).
    • -
    • -For each specialization of read(), the method should first test the value of the read_p property (using the read_p() method) and read values only if the value of read_p() is false. Once the read() method reads data and stores it in the instance, it must set the value of the read_p property to true using set_read_p(). If your read() methods fail to do this data may not serialize correctly.
    • -
    • -The Array::read() and Grid::read() methods should take into account any restrictions on Array sizes.
    • -
    • -If you are writing Sequence::read(), be sure to check the documentation for Sequence::read_row() and Sequence::serialize() so you understand how Sequence::read() is being called.
    • -
    • -

      For Sequence::read(), your specialization must correctly manage the unsent_data property and row count in addition to the read_p property (handle the read_p property as describe above). For a Sequence to serialize correctly, once all data from the Sequence has been read, unsent_data property must be set to false (use Sequence::set_unsent_data()). Also, at that time the row number counter must be reset (use Sequence::reset_row_counter()). Typically the correct time to set unsent_data to false and reset the row counter is the time when Sequence::read() return false indicating that all the data for the Sequence have been read. Failure to handle these tasks will break serialization of nested Sequences. Note that when Sequence::read() returns with a result of true (indicating there is more data to send, the value of the unsent_data property should be true.

      -

      Also, if you server must handle nested sequences, be sure to read about subclassing set_read_p().

      -
    • -
    -
    Todo:
    Modify the D4 serialize code so that it supports the true/false behavior of read() for arrays.
    -
    Todo:
    Modify all of the stock handlers so they conform to this!
    -
    Returns
    False means more data remains to be read, True indicates that no more data need to be read. For Sequence and D4Sequence, this method will generally read one instance of the Sequence; for other types it will generally read the entire variable modulo any limitations due to a constraint. However, the library should be written so that read can return less than all of the data for a variable - serialize() would then call the function until it returns True.
    -
    See also
    BaseType
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 899 of file BaseType.cc.

    - -
    -
    - -

    ◆ read_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read_p ()
    -
    -virtualinherited
    -
    - -

    Has this variable been read?

    -

    Returns true if the value(s) for this variable have been read from the data source, otherwise returns false. This method is used to determine when values need to be read using the read() method. When read_p() returns true, this library assumes that buf2val() (and other methods such as get_vec()) can be used to access the value(s) of a variable.

    -
    Returns
    True if the variable's value(s) have been read, false otherwise.
    - -

    Definition at line 480 of file BaseType.cc.

    - -
    -
    - -

    ◆ send_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::send_p ()
    -
    -virtualinherited
    -
    - -

    Should this variable be sent?

    -

    Returns the state of the send_p property. If true, this variable should be sent to the client, if false, it should not. If no constraint expression (CE) has been evaluated, this property is true for all variables in a data source (i.e., for all the variables listed in a DDS). If a CE has been evaluated, this property is true only for those variables listed in the projection part of the CE.

    -
    Returns
    True if the variable should be sent to the client, false otherwise.
    - -

    Definition at line 554 of file BaseType.cc.

    - -
    -
    - -

    ◆ serialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::Int32::serialize (ConstraintEvaluatoreval,
    DDSdds,
    Marshallerm,
    bool ce_eval = true 
    )
    -
    -virtual
    -
    - -

    Move data to the net, then remove them from the object.

    -

    Sends the data from the indicated (local) dataset through the connection identified by the Marshaller parameter. If the data is not already incorporated into the DDS object, read the data from the dataset. Once the data are sent (written to the Marshaller), they are deleted from the object and the object state is reset so that they will be read again if the read() method is called.

    -

    This function is only used on the server side of the client/server connection, and is generally only called from the ResponseBuilder functions. It has no BaseType implementation; each datatype child class supplies its own implementation.

    @param eval Use this as the constraint expression evaluator.
    -
    Parameters
    - - - - -
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    mA marshaller used to serialize data types
    ce_evalA boolean value indicating whether to evaluate the DODS constraint expression that may accompany this dataset. The constraint expression is stored in the dds.
    -
    -
    -
    Returns
    This method always returns true. Older versions used the return value to signal success or failure.
    -
    Note
    We changed the default behavior of this method so that it calls BaseType::clear_local_data() once the values are sent. This, combined with the behavior that read() is called by this method just before data are sent, means that data for any given variable remain in memory for the shortest time possible. Furthermore, since variables are serialized one at a time, no more than one variable's data will be in memory at any given time when using the default behavior. Some code - code that uses intern_data() or server functions - might alter this default behavior. Only Array (i.e. Vector), Sequence, D4Sequence and D4Opaque types actually hold data in dynamically allocated memory, so sonly those types have the new/changed behavior. This change was made on 7/5/15.
    -
    Exceptions
    - - - -
    InternalErr.
    Error.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 133 of file Int32.cc.

    - -
    -
    - -

    ◆ serialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Int32::serialize (D4StreamMarshallerm,
    DMRdmr,
    bool filter = false 
    )
    -
    -virtual
    -
    - -

    Serialize an Int8.

    -
    Parameters
    - - - - - -
    m
    dmrUnused
    evalUnused
    filterUnused
    -
    -
    -
    Exceptions
    - - -
    Erroris thrown if the value needs to be read and that operation fails.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 175 of file Int32.cc.

    - -
    -
    - -

    ◆ set_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_attr_table (const AttrTableat)
    -
    -virtualinherited
    -
    -

    Set this variable's attribute table.

    Parameters
    - - -
    atSource of the attributes.
    -
    -
    - -

    Definition at line 590 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_in_selection (bool state)
    -
    -virtualinherited
    -
    -

    Set the in_selection property to state. This property indicates that the variable is used as a parameter to a constraint expression function or that it appears as an argument in a selection sub-expression. If set (true), implementations of the BaseType::read() method should read this variable.

    -
    Parameters
    - - -
    stateSet the in_selection property to this state.
    -
    -
    -
    See also
    BaseType::read()
    -
    -BaseType::is_in_selection() for more information.
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 718 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_length()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::BaseType::set_length (int )
    -
    -inlinevirtualinherited
    -
    - -

    Set the number of elements for this variable.

    -
    Todo:
    change param type to int64_t
    -
    Parameters
    - - -
    lThe number of elements
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, and libdap::Vector.

    - -

    Definition at line 214 of file BaseType.h.

    - -
    -
    - -

    ◆ set_name()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_name (const string & n)
    -
    -virtualinherited
    -
    - -

    Sets the name of the class instance.

    - -

    Reimplemented in libdap::Vector.

    - -

    Definition at line 344 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_parent()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_parent (BaseTypeparent)
    -
    -virtualinherited
    -
    -

    Set the parent property for this variable.

    -
    Note
    Added ability to set parent to null. 10/19/12 jhrg
    -
    Parameters
    - - -
    parentPointer to the Constructor of Vector parent variable or null if the variable has no parent (if it is at the top-level of a DAP2/3 DDS).
    -
    -
    -
    Exceptions
    - - -
    InternalErrthrown if called with anything other than a Constructor, Vector or Null.
    -
    -
    - -

    Definition at line 733 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_read_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_read_p (bool state)
    -
    -virtualinherited
    -
    - -

    Sets the value of the read_p property.

    -

    Sets the value of the read_p property. This indicates that the value(s) of this variable has/have been read. An implementation of the read() method should use this to set the read_p property to true.

    -
    Note
    If the is_synthesized property is true, this method will not alter the is_read property. If you need that behavior, specialize the method in your subclasses if the various types.
    -
    -For most of the types the default implementation of this method is fine. However, if you're building a server which must handle data represented using nested sequences, then you may need to provide a specialization of Sequence::set_read_p(). By default Sequence::set_read_p() recursively sets the read_p property for all child variables to state. For servers where one Sequence reads an outer set of values and another reads an inner set, this is cumbersome. In such a case, it is easier to specialize Sequence::set_read_p() so that it does not recursively set the read_p property for the inner Sequence. Be sure to see the documentation for the read() method!
    -
    Todo:
    Look at making synthesized variables easier to implement and at making them more integrated into the overall CE evaluation process. Maybe the code that computes the synthesized var's value should be in the that variable's read() method? This might provide a way to get rid of the awkward 'projection functions' by replacing them with real children of BaseType. It would also provide a way to clean up the way the synthesized_p prop intrudes on the read_p prop.
    -
    See also
    BaseType::read()
    -
    Parameters
    - - -
    stateSet the read_p property to this state.
    -
    -
    - -

    Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 516 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_send_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_send_p (bool state)
    -
    -virtualinherited
    -
    -

    Sets the value of the send_p flag. This function is meant to be called from within the constraint evaluator of other code which determines that this variable should be returned to the client. Data are ready to be sent when both the d_is_send and d_is_read flags are set to TRUE.

    -
    Parameters
    - - -
    stateThe logical state to set the send_p flag.
    -
    -
    - -

    Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 568 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_synthesized_p (bool state)
    -
    -virtualinherited
    -
    -

    Set the synthesized flag. Before setting this flag be sure to set the read_p() state. Once this flag is set you cannot alter the state of the read_p flag!

    -
    See also
    synthesized_p()
    - -

    Definition at line 463 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_type()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_type (const Typet)
    -
    -virtualinherited
    -
    - -

    Sets the type of the class instance.

    - -

    Definition at line 372 of file BaseType.cc.

    - -
    -
    - -

    ◆ synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::synthesized_p ()
    -
    -virtualinherited
    -
    -

    Returns true if the variable is a synthesized variable. A synthesized variable is one that is added to the dataset by the server (usually with a `projection function'.

    - -

    Definition at line 452 of file BaseType.cc.

    - -
    -
    - -

    ◆ toString()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::toString ()
    -
    -virtualinherited
    -
    -

    Write out the object's internal fields in a string. To be used for debugging when regular inspection w/ddd or gdb isn't enough.

    -
    Returns
    A string which shows the object's internal stuff.
    - -

    Reimplemented in libdap::Sequence.

    - -

    Definition at line 184 of file BaseType.cc.

    - -
    -
    - -

    ◆ transfer_attributes()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::transfer_attributes (AttrTableat_container)
    -
    -virtualinherited
    -
    -

    Transfer attributes from a DAS object into this variable. Because of the rough history of the DAS object and the way that various server code built the DAS, this is necessarily a heuristic process. The intent is that this method will be overridden by handlers that need to look for certain patterns in the DAS (e.g., hdf4's odd variable_dim_n; where n = 0, 1, 2, ...) attribute containers.

    -

    There should be a one-to-one mapping between variables and attribute containers. However, in some cases one variable has attributes spread across several top level containers and in some cases one container is used by several variables

    -
    Note
    This method is technically unnecessary because a server (or client) can easily add attributes directly using the DDS::get_attr_table or BaseType::get_attr_table methods and then poke values in using any of the methods AttrTable provides. This method exists to ease the transition to DDS objects which contain attribute information for the existing servers (Since they all make DAS objects separately from the DDS). They could be modified to use the same AttrTable methods but operate on the AttrTable instances in a DDS/BaseType instead of those in a DAS.
    -
    Parameters
    - - -
    at_containerTransfer attributes from this container.
    -
    -
    -
    Returns
    void
    - -

    Reimplemented in libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 644 of file BaseType.cc.

    - -
    -
    - -

    ◆ transform_to_dap2()

    - -
    -
    - - - - - -
    - - - - - - - - -
    std::vector< BaseType * > * libdap::BaseType::transform_to_dap2 (AttrTableparent_attr_table)
    -
    -virtualinherited
    -
    - -

    DAP4 to DAP2 transform.

    -

    For the current BaseType, return a DAP2 'copy' of the variable.

    -
    Note
    For most DAP4 types, in this implementation of DAP2 the corresponding DAP4 type is the same. These types have a different representations in DAP2 and DAP4: Sequences (which are D4Sequences in the DAP4 implementation),
      -
    • Grids (which are semantically subsumed by coverages in DAP4)
    • -
    • Arrays (which use shared dimensions in DAP4)
    • -
    -
    -

    Additionally DAP4 adds the following types:

      -
    • UInt8, Int8, and Char which map to Byte in DAP2.
    • -
    • Int64, Unit64 which have no natural representation in DAP2.
    • -
    • Opaque Possible Byte stuff[] plus metadata?
    • -
    • Enum's can be represented as Int32.
    • -
    • Groups, with the exception of the root group "disappear" into the names of their member variables. Specifically the Group name is add as a prefix followed by a "/" separator to the names of all of the Group's member groups variables.
    • -
    -
    Parameters
    - - -
    TheAttrTable pointer parent_attr_table is used by Groups, which disappear from the DAP2 representation. Their children are returned in the the BAseType vector their attributes are added to parent_attr_table;
    -
    -
    -
    Returns
    A pointer to a vector of BaseType pointers (right?). In most cases this vector will contain a single pointer but DAP4 types 'disappear' such as Group will return all of their member variables in the vector. DAP4 types with no representation in DAP2 (ex: UInt64) the will return a NULL pointer and so this must be tested!
    - -

    Reimplemented in libdap::Array, libdap::D4Enum, libdap::D4Group, libdap::D4Opaque, libdap::Byte, libdap::Structure, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 259 of file BaseType.cc.

    - -
    -
    - -

    ◆ transform_to_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::transform_to_dap4 (D4Grouproot,
    Constructorcontainer 
    )
    -
    -virtualinherited
    -
    - -

    DAP2 to DAP4 transform.

    -

    For the current BaseType, return a DAP4 'copy' of the variable.

    -
    Note
    For most DAP2 types, in this implementation of DAP4 the corresponding DAP4 type is the same. The different types are Sequences (which are D4Sequences in the DAP4 implementation), Grids (which are coverages) and Arrays (which use shared dimensions).
    -
    Parameters
    - - - -
    rootThe root group that should hold this new variable. Add Group-level stuff here (e.g., D4Dimensions).
    containerAdd the new variable to this container.
    -
    -
    -
    Returns
    A pointer to the transformed variable
    - -

    Reimplemented in libdap::Sequence, libdap::Array, libdap::Grid, libdap::Structure, and libdap::Constructor.

    - -

    Definition at line 216 of file BaseType.cc.

    - -
    -
    - -

    ◆ type()

    - -
    -
    - - - - - -
    - - - - - - - -
    Type libdap::BaseType::type () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance.

    - -

    Definition at line 365 of file BaseType.cc.

    - -
    -
    - -

    ◆ type_name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::type_name () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance as a string.

    - -

    Definition at line 379 of file BaseType.cc.

    - -
    -
    - -

    ◆ val2buf()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    unsigned int libdap::Int32::val2buf (void * val,
    bool reuse = false 
    )
    -
    -virtual
    -
    - -

    Loads class data.

    -

    Store the value pointed to by val in the object's internal buffer. This function does not perform any checks, so users must be sure that the thing pointed to can actually be stored in the object's buffer.

    -

    Only simple objects (Int, Float, Byte, and so on) and arrays of these simple objects may be stored using this function. To put data into more complex constructor types, use the functions provided by that class.

    -
    Deprecated:
    Use set_value() in the leaf classes.
    -
    Parameters
    - - - -
    valA pointer to the data to be inserted into the class data buffer.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect. This is currently used only in the Vector class.
    -
    -
    -
    Returns
    The size (in bytes) of the information copied from val.
    -
    See also
    Grid
    -
    -Vector::val2buf
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 190 of file Int32.cc.

    - -
    -
    - -

    ◆ var() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::BaseType::var (const string & name = "",
    bool exact_match = true,
    btp_stack * s = 0 
    )
    -
    -virtualinherited
    -
    - -

    Returns a pointer to a member of a constructor class.

    -

    Returns a pointer to the contained variable in a composite class. The composite classes are those made up of aggregated simple data types. Array, Grid, and Structure are composite types, while Int and Float are simple types. This function is only used by composite classes. The BaseType implementation always returns null.

    -

    Several of the subclasses provide alternate access methods that make sense for that particular data type. For example, the Array class defines a *var(int i) method that returns the ith entry in the Array data, and the Structure provides a *var(Vars_iter) function using a pseudo-index to access the different members of the structure.

    -
    Parameters
    - - - - -
    nameThe name of the class member. Defaults to ""
    exact_matchTrue if only interested in variables whose full names match n exactly. If false, returns the first variable whose name matches name. For example, if name is x and point.x is a variable, then var("x", false) would return a BaseType pointer to point.x. If exact_match was true then name would need to be "point.x" for var to return that pointer. This feature simplifies constraint expressions for datasets which have complex, nested, constructor variables. Defaults to true.
    sRecord the path to name. Defaults to null, in which case it is not used.
    -
    -
    -
    Returns
    A pointer to the member named in the n argument. If no name is given, the function returns the first (only) variable. For example, an Array has only one variable, while a Structure can have many.
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 758 of file BaseType.cc.

    - -
    -
    - -

    ◆ var() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::BaseType::var (const string & name,
    btp_stack & s 
    )
    -
    -virtualinherited
    -
    -

    This version of var(...) searches for name and returns a pointer to the BaseType object if found. It uses the same search algorithm as BaseType::var(const string &, bool, btp_stack *) when exact_match is false. In addition to returning a pointer to the variable, it pushes onto s a BaseType pointer to each constructor type that ultimately contains name.

    -
    Note
    The BaseType implementation always returns null. There are no default values for the parameters. If var() is called w/o any params, the three parameter version will be used.
    -
    Deprecated:
    This method is deprecated because it tries first to use exact_match and, if that fails, then tries leaf_match. It's better to use the alternate form of var(...) and specify exactly what you'd like to do.
    -
    Returns
    A pointer to the named variable.
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 780 of file BaseType.cc.

    - -
    -
    - -

    ◆ width()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::Int32::width (bool constrained = false) const
    -
    -virtual
    -
    - -

    How many bytes does this variable use Return the number of bytes of storage this variable uses. For scalar types, this is pretty simple (an int32 uses 4 bytes, etc.). For arrays and Constructors, it is a bit more complex. Note that a scalar String variable uses sizeof(String*) bytes, not the length of the string value. The width() of a String array returns the number of elements in the array times sizeof(String*).

    -
    Parameters
    - - -
    constrainedShould the current constraint be taken into account?
    -
    -
    -
    Returns
    Bytes of storage
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 127 of file Int32.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1Int32.js b/html/classlibdap_1_1Int32.js deleted file mode 100644 index 5c028e530..000000000 --- a/html/classlibdap_1_1Int32.js +++ /dev/null @@ -1,78 +0,0 @@ -var classlibdap_1_1Int32 = -[ - [ "btp_stack", "classlibdap_1_1Int32.html#ae9c6e71855b90a0e552713011c9ab81f", null ], - [ "Int32", "classlibdap_1_1Int32.html#aca0a0d84a219e98c4ebbd7afda49af26", null ], - [ "Int32", "classlibdap_1_1Int32.html#aa965395a50cee7277d9773f762a9c205", null ], - [ "Int32", "classlibdap_1_1Int32.html#a8afca7647664422621ee75f1aa13b5df", null ], - [ "~Int32", "classlibdap_1_1Int32.html#a7ac41b60930b8ffbf78104d44298512c", null ], - [ "add_var", "classlibdap_1_1Int32.html#adca3c2621c4a509537c18362005d7f7f", null ], - [ "add_var_nocopy", "classlibdap_1_1Int32.html#aa1192360cea4dc516c822cd3e13dc723", null ], - [ "attributes", "classlibdap_1_1Int32.html#a97452f06d2188eb838399a709246b5e9", null ], - [ "buf2val", "classlibdap_1_1Int32.html#a56e6f9ece856568be871fab239328912", null ], - [ "check_semantics", "classlibdap_1_1Int32.html#aec503abec2fd3090e7738c0a575491f8", null ], - [ "clear_local_data", "classlibdap_1_1Int32.html#aaddb97a4efbe035f41deaf03c6e8683f", null ], - [ "compute_checksum", "classlibdap_1_1Int32.html#a64d749e3500405c7f6f0ae194cc0fd69", null ], - [ "d4_ops", "classlibdap_1_1Int32.html#ab74be58716d8c3e6d26462dff2a9b565", null ], - [ "dataset", "classlibdap_1_1Int32.html#a47521ce321a17e6ce217870cb6a1a7aa", null ], - [ "deserialize", "classlibdap_1_1Int32.html#aac0c8bdfad94663d57af5f7a571451a4", null ], - [ "deserialize", "classlibdap_1_1Int32.html#aad1329f624040df27cb880d7e2640a4a", null ], - [ "dump", "classlibdap_1_1Int32.html#aaae2d081b7d4d852854648b37441ed4d", null ], - [ "element_count", "classlibdap_1_1Int32.html#a5c2235737737b482bfa7536b8aeab810", null ], - [ "FQN", "classlibdap_1_1Int32.html#a977cb954cc8f0d914d6f66ea0f48a9e3", null ], - [ "get_attr_table", "classlibdap_1_1Int32.html#a1fcd9537c67e3bf88964b2656ff5bac1", null ], - [ "get_parent", "classlibdap_1_1Int32.html#a3459cdaa239c33ce111ef360d8dc3017", null ], - [ "intern_data", "classlibdap_1_1Int32.html#a722d33783aa0272d339b0301a4f77e59", null ], - [ "intern_data", "classlibdap_1_1Int32.html#a1956e6ea90a745516f5372c859173433", null ], - [ "is_constructor_type", "classlibdap_1_1Int32.html#a8b8490e0047c6da52945699a132008ea", null ], - [ "is_dap4", "classlibdap_1_1Int32.html#a7f6835cb5e5589ab5dad3fb4813d3bea", null ], - [ "is_in_selection", "classlibdap_1_1Int32.html#ae302ab2ec26e9fc5b575bf5d3d09aa5c", null ], - [ "is_simple_type", "classlibdap_1_1Int32.html#aae57e5b270b3a015d40c8db10b9b5549", null ], - [ "is_vector_type", "classlibdap_1_1Int32.html#a7107c76dbcab71015141142383b6d022", null ], - [ "length", "classlibdap_1_1Int32.html#aadcda7a659157bc6a832d8a5fb775b3f", null ], - [ "m_duplicate", "classlibdap_1_1Int32.html#a0c55b826c8c5dfe7a454dc670e859a41", null ], - [ "name", "classlibdap_1_1Int32.html#a24c5d67823b3cff7f4245a993072a142", null ], - [ "operator=", "classlibdap_1_1Int32.html#a80c3a12adf61bc928a616df9c08ee96c", null ], - [ "ops", "classlibdap_1_1Int32.html#ac319d1cdae57d4fc7bfbd972f2f8d4a1", null ], - [ "print_dap4", "classlibdap_1_1Int32.html#afcddbe441380b95c894510c02980b163", null ], - [ "print_decl", "classlibdap_1_1Int32.html#a2d799fad93255d7f2b803562ae7a5784", null ], - [ "print_decl", "classlibdap_1_1Int32.html#afd744b0ddeb04e7b173c9e83423ec572", null ], - [ "print_val", "classlibdap_1_1Int32.html#abd206d26908919c73e932a59d02966ba", null ], - [ "print_val", "classlibdap_1_1Int32.html#ae8cb63e9eb85cbc3e378267670b0aef5", null ], - [ "print_xml", "classlibdap_1_1Int32.html#a825820edee179550cfde3dfd4d274f2a", null ], - [ "print_xml", "classlibdap_1_1Int32.html#a8bd2c7682edd48c64b210bdf247bdef7", null ], - [ "print_xml_writer", "classlibdap_1_1Int32.html#a11554ff931528b243e9af8173d205b44", null ], - [ "ptr_duplicate", "classlibdap_1_1Int32.html#aa7ff77174068c8b33d51d065ed922af4", null ], - [ "read", "classlibdap_1_1Int32.html#a1da003c53f2e663223f603ab3fbd7c8e", null ], - [ "read_p", "classlibdap_1_1Int32.html#a38ff819a432217c55db2e9071928d20c", null ], - [ "send_p", "classlibdap_1_1Int32.html#a980c0013817836aa77ef74aeec7fb192", null ], - [ "serialize", "classlibdap_1_1Int32.html#ac769546107e556cfdefa0fb4961711e8", null ], - [ "serialize", "classlibdap_1_1Int32.html#a8c67aae2fbbbe48c5b6d8049d5af04a2", null ], - [ "set_attr_table", "classlibdap_1_1Int32.html#a572a1d76a75981abac83a4241e90c0fa", null ], - [ "set_attributes", "classlibdap_1_1Int32.html#ad4dda4cf43dca838d3de183b8e01cd09", null ], - [ "set_attributes_nocopy", "classlibdap_1_1Int32.html#afd0e5f87d19020f560d5c1ff8dd4d6a3", null ], - [ "set_in_selection", "classlibdap_1_1Int32.html#a2bc036248cdaf1affac464170f32ad30", null ], - [ "set_is_dap4", "classlibdap_1_1Int32.html#abca9ddaa9a1ada8447cbe7193e8e288a", null ], - [ "set_length", "classlibdap_1_1Int32.html#a4fe343c1eeb6fb1d61ab030433651d90", null ], - [ "set_name", "classlibdap_1_1Int32.html#a86504564f45a3e6748c6f1cc0ff4e9fa", null ], - [ "set_parent", "classlibdap_1_1Int32.html#a5b6a39f6ce6594fa74f3fc899ac9a966", null ], - [ "set_read_p", "classlibdap_1_1Int32.html#a4533905a450d2a7af32e7d5acd557676", null ], - [ "set_send_p", "classlibdap_1_1Int32.html#aba7b27635c95b74536de18393133628e", null ], - [ "set_synthesized_p", "classlibdap_1_1Int32.html#a595cb4059cff24f801a1b6da79bd2f9e", null ], - [ "set_type", "classlibdap_1_1Int32.html#af74f8d1ef57c9fcca46f620f75d175a3", null ], - [ "set_value", "classlibdap_1_1Int32.html#a5268f9af882bbc19ac5dccf2bcb5ea9a", null ], - [ "synthesized_p", "classlibdap_1_1Int32.html#ae64e677da27249473cdba0b60cdbb90a", null ], - [ "toString", "classlibdap_1_1Int32.html#a701eb3361f5b5628329ece019cd34519", null ], - [ "transfer_attributes", "classlibdap_1_1Int32.html#add8e836c622042a339152a6c31e5bdfb", null ], - [ "transform_to_dap2", "classlibdap_1_1Int32.html#affec8a11e9cc035d4b1e8fb9a87b2072", null ], - [ "transform_to_dap4", "classlibdap_1_1Int32.html#adb03e2e1e40c3c888577c4666831a949", null ], - [ "type", "classlibdap_1_1Int32.html#af8e803b20a7a7dc5f2ef351d7fac4a56", null ], - [ "type_name", "classlibdap_1_1Int32.html#a18a42c8ec35cb5b15cd651a4152f8a2c", null ], - [ "val2buf", "classlibdap_1_1Int32.html#a8beb52ecacfe72077489b5687db7b9a4", null ], - [ "value", "classlibdap_1_1Int32.html#a473e8004d97400c60905fd82e2bc26b7", null ], - [ "var", "classlibdap_1_1Int32.html#a4dc4fac1bb6083f6db645f37bfd59b85", null ], - [ "var", "classlibdap_1_1Int32.html#adecfc442b5927c79933c7f71cfe03fd2", null ], - [ "width", "classlibdap_1_1Int32.html#a38a592e39c59f44933d490373f6fbe7c", null ], - [ "d_buf", "classlibdap_1_1Int32.html#a8081532830cd553bf75b79f8925a5068", null ], - [ "d_in_selection", "classlibdap_1_1Int32.html#a949a89714965d7afdcd1e3edc8b7f0d4", null ], - [ "d_is_synthesized", "classlibdap_1_1Int32.html#a629e97e8eb7d285b54c9af8c1ec9a29a", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1Int32__inherit__graph.map b/html/classlibdap_1_1Int32__inherit__graph.map deleted file mode 100644 index b0c71530f..000000000 --- a/html/classlibdap_1_1Int32__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1Int32__inherit__graph.md5 b/html/classlibdap_1_1Int32__inherit__graph.md5 deleted file mode 100644 index 618770b83..000000000 --- a/html/classlibdap_1_1Int32__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -0b8c4f5150a8f0a8c5af935b9103dbda \ No newline at end of file diff --git a/html/classlibdap_1_1Int32__inherit__graph.png b/html/classlibdap_1_1Int32__inherit__graph.png deleted file mode 100644 index b34abc4cfc5be2b295b2d2e01b7f6b3dc98ab486..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62346 zcmd43WmMZi^eu`73(^*f2TGxZ;x3_hvEuFoD=xv^tt}ATiWiD|vEWjqxNETDP~82d ze|h(<`__H;>s@@vu#z>Inctj!_SyTu7ZoKLd|V1#6ciMEIoS_t$kzrG6!ar(Oynp? zACiiEL3L4+kwB>!q1r`35krytAg1ry^%nMdn$Pn zlJ@ z*UZeHvY+x4{i{C})@4hUQ-@tZdyM3%a-*B1-9TPuIzWHakCxMGORw#)(k08de`nxH z_wt$q=ul2cR56zk`WX}7lY@hrh_dVzhN-(h3$hN93f)J3twPbFFE@iby5GBW+=M^M zM~kMqKLzQ=rbK$aE{oMntcejfZYwhcPxYfs+sP+e5`cg5_x4rnK0b5h`_k9J8Fjo8 zltUyJ^_z<=J}8Hq6*IlVd=7oe^K)L=_*ivvi1RmzkZcmGTEb6`pEg?sFGJW?@BMJ+ z+RwCp^m^nPPR;G5i?&pFbUuEZ@8ix6%}y;+Sr}zdF#HWXEc(_F*81EK!JQu+y5AXm z%!turotHK4i>KpHf2|X9;ho4y;XU$QRaZSh+P;Co#$NzrfZZUTTluc1mqzibUn{O}NYTHkbsJAP^Si|6XFro%y7Xv(7pOa@t$o(oglD@y^ zJIJkUtB8`}M#Ga{=mr}W(y`MD&cN|{N%@q`gFs6j$c{~Feo2`&{qm=>*3u&(Xddon zoL8ZT?v8QQ&fZ}QB|gWEBNGf6Ft&^!NpT`{& zw4ly*ADN&DEPGxv@5COOWTVm9k1^9L4ReXGW~`LxE|-Vj1lk8+$&1GV*IA)Xf?Kq! z>T4D%o4p>iOK3k=(XTNwwvC?EKL5h0G9&^r9R;z~8^ILa4nJ;{OWtCS3?2lIG^n(_ z9^{9*j$`ZwN=szgx%l8-EnNFQp=KIC}V&ZSRi0Ne@mfJq~2{^cweDsdY zFlz4sd5tcqY4MkY`Ps@xtCp-JQ$KNFisDeS@P4^e;phKwsJ9YfZ@XkdbZ5JJ5-|1a zX3GAI7`}fwlmA82HfRGet;dlGX&@<@wf`NiGsKP|chHUIzgN~Qwp&>4t)~5UJtZjr z(lUrsVZM?@PKqVRVc;)1u{k@2L^@lm zp(#y2-B*GheoHYt=@fd%5q@-9Qwci~5GyM0;w;o9|BZ4v)wM4^A=h!?COTnfV}%^? z@>uMZw6P!&wCzylnS#JkMSKFIzo&iywUOD!(FtwBQWZ4-?(AMZc# zrJ&$;(}a-7ju=9&=!Ofz|BWQg3M%#nkxSa&_s^f7`adi#|H)Afx#CN3`uP)U@#@GA z@?fNssMs+`r+C{pzOVU#V^LhZSz)Im$@~21sPG7x-{5s-~>5Nrd{XB?9^F!x~_j&ZLYQrPk78P!0*)KozFM1U{vj?#;#girVU zpe5-R4D~hIIqLhA&kP|?1)n_8G8AtqJW+aspK4c7pKVNbwLPRnPoJ%}j;$rwnE#vj zQGf5zw(-YC-bw(LpNtMFN$4{-p}3JJq4&~PtM>)M0UkQfF*|5XY@ttfq04}&`znUU zi=DI|0o~*6ohqf>rP0NLqW9ZX2h7FNBs<6l^F^*ccbpYUNM=78SRiZ3C(({7y|~!n zcXoIDZ0B73Nv6wbs@%AFwWT!9AK!ErQThw;&M*_O(Cl*5z1iFoE4g~i*v`M(!dGal zp>d6C-GJAV7_&i?7oME}%d31!R{ng-Hz;%@FhCLpFeXn$sqT$Gk&D-$18zWEZKmu? z-ME9}f`4X-Ed+2cl?QtJT&~%QioW7!WU_v>#5}m4!Q?)+`McQ=2iIPrZK~R_!WsSa zD)>n+-Nzn;u%fOd#>w+gi)I;HrfX20-Fc_J*2?I}GrI4N>ka@RihRj1;M3P=W!i_? zZXH`T*bKLtA0EgMDKQv*W5tr7-_qqBqn0(U;HeI@gC%&nO)$i%i{6s}fyshX8FGs; z62aX0aNYLoa)>^i1#}?-&4}y>+u)OZ0AlhLY~4fKvod^O!eE0EX6=o_jWVZv7hUH%D?yPY&9Yt7p#ax7&A+|8cU-2ls4w?)VZ8 zZ2=o&k?9#W)LnDd(z@xDlzaMGy2@fW@! z3ztOR%xBb*ynky9JvQYxq{m-gyY-~BH;ZGHX*kG#{GBowV*IA+sL+J_S_mUkva5X9 zHun{Hp&s>-EXiJe;b0W+m{g{r!=RiP-tK=F5&Q7GQ8*T}kxW`#v?xp~Cqc%T-;=BY zwcYXV)EgJ$K&p#$S;Cp^gkhL^!w`=!&_x(P5}psP5wmSkNp3={sO=gFB�FF%siM zceLe@sIQ>Cd@A^RG{&mE{kV7)bY#A{F6e+Ky>6Pc^fZVrW+J>A0Ts_TfE(!PBNH;;2Os-!B^tg0WMwa60-^jaM+0?o9 z3w4RU;}M?Gf3xDjsU_Z1=@itd}yo4+vC2RYJkd|$?VtdX|Im!2~97AZYW z$Qr4`+7Sacu!n)mR(>wEF+vzu92ADRN3E$=LO*pn?i`6%S8o-LJcd-zo+uNIZU)~x86|U{ABy!J zczMP;M}TYnDh$#Q(0TCXfM9q+S|d|rW?xmB;fyMPlZS!?EAyJD-xi2V{T0`&&oygg z5%6*l-U9>e^~Q6QjMmv4jR*$|ZJR+dQNZK67Al`Je!Bd;8q7}6WndnA=Z}VNtPedh zP`FdeHQSGM5LJq}c=cg=F74gpH}nMuqp@l?fjctX_6QvZ8H&}^B4`?8E9S1!v6hC# zMA1R=5NFHds|G9fFa>aZE1-!Bkf&aat!EQXswP;b5rVttFP|O|2%{|xd}xXumzyTw zz-dYo-^x78vKaFu!!e4CI~zqZtxV}I`|iVMw>oLHk=v+aK}io}@aWUlHSje<(fZmY zlD<5NX0P*`dl6>k<@H5&pC+prwyD%#^)J2Px5dtc4T7@pEpjAtA-$E7nLoK<<8Oj_wjLiJ39XM zn`CXS`9WcFZlCB4L!TauFB5SNYz3IF_&{&4<3h ze!j%#w88fz-#GQ5AVHuvn?ce`9;CkE@NTePwcX5lox;S7Jnl!Th1!Wk^*|A#Fy#6B ze)d-@Vf>P)GLVv`TNb>-&ZSdd!Y!L0_HqY~?b+ys(`}2D-shWFpBj%#G%w&~ADOB>`WL^kef(DmNr~>v9u?)53m^mEb8lW=X-VY zmzm(nzDu!G`t@_`57)899&r`oB+ir-SUS8+Pq5&qyYKKhQtairD*}VIa z!pOy(Yh4{0!sr+62NKx>rf|DQE+mnA0Fb8gmL{|lw69&vMznTkk04^2kH-J|T@zB| z4(A-##~y^-_MBTK-45Tg_pvt^c<<)j3&rODSB+R<7;v*$M&sh?bbo#JXxpY;ndQ6n z_q=B)?d-3eNb%-B_OodxG|JYDm?Pg_c3bw^zE9a36%F_r@Xiy

    mR;E(dwA4LMFU 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%0A!;VI7uH* z5Q8A*)F%N}N1X;(8!zHeg2>zqudo zlG5Fc(xrePji7XQH%K?45`%z(bPvsdbPbI#z#!d2H=OZ#&i9;mt+U=g;H>rj%&<4i z{@it4*M04yCvt3hQxf3hdTg1#bv8woH975p@P_mL?H8Jm7OPDc$?&vu?3!Tq~Nrdn~ z3;+_P;uDixCvw=MZ1etb&Ic7RMdF&egdKui*g`~~+)3_N)yt;%TCz4&w0ZIq`0l-_ z3Zy#FGGnf0sq+EVUqRLvtxxW$W)b2xiUTi$+9@9ukhFmJq3c~WsjsGTxDl?W<0b60 zrxjGkxwYN6hW!D$hKTQ*&S3~hySvPBRBI@}#1d@0^wtR`YM9Sjzvaq&3?Ir5H705z zP}&VBpp=NvN+^=p^x&htK#s;c+s2`54**Xsz#5w?r4+#f@KT>oZG~{xoUfW+cq=Bp zCn{rlj7vvzz4GjJ>jbnS#yHBzL0qEVr5{JYy)*wk>>as3si#W^DtJ7p*eV&5$v-8& z%O|X;u}N-X0I6b`&Ds1x@Zroc&Y6AU3UBvtd^d6AwZ`guK6BYvw86dic!%MptNwg9 zG)s?!ss|%z6{O9^i_F1gL}M#CNK9d}`FAXvhe@M&Zjp!4FSM6TJ`P9C_@=qH2A9L! z&oBGG8t}{AMeeze`Oi#){0$I!k7UWKMmv%5f z4oX6%9Uj!2C`KAS%euPNoovC8L&TGm-sLyw1j-q&qCp;G@MDL)mPqje6fJ`KR{g5a z=TN}|nFfPQh&iY2^gdv;;b+Bo$!*c1+rOkDydMPxty18;@_S}SCoy1-a)32^YuvK~ zTH^@0{?kw*Y>CB1C~bk3gNGl=8T( zTp3d!ttr)|gWwj{rfb1V(5XMqEY=a5-`}NVSOF8w2h`?7BJZ5$aq$Kv z0LbN+&*hN4-!+o`W7YUn#W7vTDWeVj2vSQzyYOjDA!+xID`Xq4EstE>Y|A?SD=!&G zYxoG80+$;Ies`aCQ&_g8SC6?M4f$)HF)!@_b!Sc}k!XzXvMqc(}CumA(J(%=~hiBzt@AHB|(WxSaKlUY(?l|&V;LA2|k?Z?+;Qfn1j(PV^$)z z&LgZKC428`mV>+unFCTpPLeQlA33s#r#BHYFk7r#d;=lmQo2}XkrhirJ2D4g-p{ZF zztvxZy_XyZdaiB9FDqbb@wG_2$~D;Wj2Hg?;cGa!4lq^i{m(RqG$%;%h@FRz| zw?(XxOBEdWgV(B&PD65&JmJ0?fRU!BrAQHy&)CuhtK9-Yu)0TK`vRJh5VBnPSIfQH z5>aE#Z0d3oI#w-Am{wbvL8KE)fLw>e<2eY;qW`IlES&3H{2u7>4uF# zGtZim%9yg!IzLXt-c_u4!+ABsVUOO(@jbZeLel5T*=ZsE7#0B!vGlSHtytwVB>(Gf zb7id7L|+IWw=kEsKxxC1uS!7#_}v84aZQdTSG03axHW~=!M%LZDxqM-fv2v% z87p5s%g+ape1i~2!qh7_t4WpIxuWter;l-kN1xUcALMyJjC4MfRKKwm_UEl>gtPLI z7%GuPn9)A3vIRE7^)3c9EMa7*gnCa=AgTFTTZ(>pCY|(pu7{i+Ann4u^bbH4kQMJI z#6|2}Fw%d2&UCaaRf=xd_0_oI`$X7;E=;`>DZkjP@w7Ex58Th_!8u-t?|in;UgEj$C2$m-D1<*!YS*uEW!Sw1rQYaS}e&DAL(k-2Kw6ZcL9{!PlJ>Nx-dZskqdD`uXA$=lRr_MuPeo96bpR!{w$ zg7EdN-v_H@Fq(e>5PbG@48ortYHqULeK=Wr?@RNiiYPfvmcQ)lfSUlu)}F=P!kl~{j3CrW7g&jHI%X;x(sd`z2nPw|4+YM>%;R3IQsS0aFO>9hQGI+fudKnF= z4nr5^4hSTA-+%<~acKjj*^APjPd8`AuipNxH+P=fhKmpqU*fny?^S@(y=v?Bz6-Z& zrwrDeE>a8$#v{OxvDA>o88W{SGtUiC=W{nlWr76fPR&>_sB$AgG;>u-C79qnr!9DCac3h$ZIi|>_+*m6j@<9(2HHtpcs?|cG^xx@R?5wSY^ z3kt2CB$U1jMDH7yYEF&-mhP)TxD#7mkiAb(pwOVT5)iHNr~TUBUQb%7G~X@Bo9 z%s*F3(g>7HnWct(&zL$8nx}Ba0Q|Dl(JCNjTE8X>cuyQp&baLahb8;Htt_tb*KkUUVdnZEuv7JSN5tfXB|QpTCJR04m* zcxflm<~IC_jB0Qh<#PX1j~|p+ZO1@QD}1YKppkid{rp+3uFV4}n2s9#u#-6Y-NL6h zVGCL?-EVSFqXvRIV4K$aPBsx_JraxRA^sMqHam|dVZ)NVe^*UNewKvy>6xkOS>vc2 zqHnGY*11=W4oY(numw}RZSTGiQn&w(i3FG^cdMGmOiQZtvbdm=|2);~BI__ByReHx z*jG1$;H)KTbB&<4W!Skr%z=JVm|3BJX$PcPfjO~~vbR|J*~?cl`O|K1M({+}!LK^x zqpsc8^yW3K>PD}3a=v#lxjtn^3V#+Ro9`1uLJq$KxfwHa?8zIQoJciOCXE`T&FvhN zy{4e)2duvnImt0=Mh*OZ#yNrc_F9@YsMJJu_=h5mG3X0m$SS*aB~o2Ah6-0#P|3}N z3ah6d{^<*~D^_6Ms;EO}MV}_-=-&q5)4IM#?Q?xA{B6;jgv%=j4$91q z*%I8(#deET8n+RpAy4kk<^Z1bg;itqm>SrHH@FDnt0&0Cv$?=(hJ92fd7B0&D6uM- z-9Id77qRM*v(+b1>k~c2NZWBD`^)Lt`!t?k zMQeqPxm=iOb`jnCI3iw;7-c!hg;%sQ49?Ibk`e&?;_jwNTp>PvUk1K@THRaup_F z{o5iTM4LE*yGM9bWsU#2F6oGCE`du+s`$DK3*E3vi7u7jZMP3x9w$k$mZO*=>CN-SyA%~u@n(|a!qdj=MU+Qoz~hIMw+ zATY1EO~gOk?LGMB+?IIY*Rahed)(3N6YYwL{i_*>e0d^fSLnk9h&bp*i{E?QlF1EE zbU93P&6g-23G_<3T=heIZ%uT2wVfc*z-uwfi}BTFherGYeT%}y3KoK#?Vf=tmcvyM zxZ5Ckn{-!sO|0?MLiygc>=pEcMk@%W4@IO?f;RfCE5X(yJCbmecCG1`$Q(IZ3(u%5 z#l)KW8ho5s#S*1d+SiPKZctJVh`KL~i&Et!*#N{&N(Aa&lqtO`w7D!vPVt1jRAluT zNnXp|QwT0wvzu+!f39~)zOfPovQZ6`L_!RklqHf|mDd!ruVNIlht2D*9U*Qn=te7; zw2DhSV%nXR+qN59zJ~}@FJ|_3eGFn|o{7aYvNC?n_UX&_2~@6>XFe37Zh~X?Z@oLr zjlIjhRT<^^6Xjk%xZ-i4s*3-$LK*x#vc&tWA;sKYWK?1ybZwg~cUO$_!#RyRtmMVw zYyFMB=U&boV^xx4c6d@~0EO3Mf9JzP)z;0;C$;UW>szxC0(NoxJ-qyWZz*LC#AB}Z zG+?t;oO9hZZkAcIJMp8Pa;JTbQGGi|XCw27HnS~~;VStp2WXi?YBnIoWzpUi{P5~$%L1>O85$DhmQ+7uNlUUeM_|(7_KHPdFDJKcFCg9P zb}+UEQflL}Jlt(7Ml#KU=To2q<|WG5g*^)=yd`16mVKFKkh3Ti zq%Cz=!PWK>G}>&b?7GajjjhztV98bzl{My7OX=4{IOK476K+x+wchY^X%$)J9Rtc0 z{JF{ren5D;`VX&N1@`d|ml|Gi(X9lv#xp&y>uM9O{v~wdD{RG~OeeJdBR#1YIhXGB z*ud$hlsiwMkf8EI+}tjjD^V!w^cJ*^U;m-sUFaAWWYrp)jPbsc<8asy3{AMm9N-Q& zM!yB(sdt&n`z^_00IX$kJlKBwwp-FVS<8vxP@)0uKfAKn7OufDTo1<~=_H#Ee-l#q z#^C&zN4lC}SIL42)8F}4?aXPW2Hs)36@VVC2zEoxtZ0dtxrZFkr~l5Z-xE4s-WwwX zH2y`7chRnJE--Qzye}#Wr3tX*bRMEk-f-*(kOiV$ke*4CF@)kjV1mgX2svcO;xcwp z8fSjzqcAlY;hUT#S$;PEb3ZS&F%Vv=z&_`UO{hzCj1v^s9RMK4^!s+J3T zlHk9m@Nn#+OZV$WZGEZ>U*zUFVDR1Fw$7^+5JGtxwt4&t3_!j>GRAiKQ(J1$j!h8-Gcg2TXj{IQs_F zyzsl>KY4!n(BVj#euUj|S4wDE*rzuYl0oxhN4oJ*&~w`Zj*3uJU~nzdf6{<-3s5=V zC`$?aJv^?dsG@7lfDaIZ2$=I_dVDlL0piy&w2PVH_xDA;HTuCT@`yGXpEQ-&*K3y6 zZng!b^{Wg5q|Gfh>0rL^SO=7GdgU$ot$eASkq*D;V9>q5k$=jwIeTmY42^ZWcGMv!|TpX(cEDubyx|7H0Y-h7DcFZCg4 zV6`QX^*Im4b>*Ov&Wf6FWn?FO{3ls*PX6+^wb8uXxWe-sIsy6)bG7p;yLdx;nEz|C zT(5-N3@Tc(mJ{vzU8(-Xq3^}-B!{>9o5N31;j~*3WvfS^V4@Jztv%WYRAmKmaf2;U z^35nF3sz6;_m2i)UJ_q+u;u9p)-0$I3p|)dnaI6U5x0a2$B&KJfPtUY_-)vx@=mA= z3lHrpbr#P*dJ$6}c@-n`teLfgy5c^jL-!OEo3+auuIU}-tGg1lTFoS+pDu1`h4{oR zq3r@)Z7;}F>2D#}XRBgk2a_g%JHz-%DDej4)<^H3`&J;$fjY*7F#N+rgB0h1A42aX z->~>6D21TiB7oCsps8Sn{r(nSx&Aw%Gfcp*8PI53qb~d%yAQqQ=Cv&J`Ah|ZTFx7nV2F7R3ZPx$6{q=myRA2^vw9OM6_XU<#8Yz&)-K6;eOO`FwX zg7HVPFC4jBp4n(frZT%gtyLzEhZcMyM>z=Q?%ZFGNF_EtLx62Wb4I_4+JSX#0MYyPf{-fslhKeaA- z(HkD7{WMo9Z|ck27#BAolJb-dY1`Hw5X`Sp_@sX!bY#0+&Sv>v?J0X<*I;%*PhBvQi&q&!&mrt5K2YDWHJNSn00lNE5{Q%ty`l9N`9Ab$ zn8YfB`aupLMwW5^6U@7{swui)@T>`^EG&pHiUnQ;YCB};4u=wV!&F7gT&R?3690vBCPi?VXS8Xzx(D=JCTZaYgpq->K@6ylfY#?u~xeDq3?lv#tG+#r~|%*Qv%Q zme3)g#P)@iVhyLJ90}$tu2*M|9b4t8Zq44}Tl+y{GJ`i#;{o3*KfkT(I5n;NVD;x4 z1KwP?$CWoGg>W`Y^k?+BE%X_hzuqPsRNGJhGoai<2w2Z~q{vOC<8@MLt z!axrT{?!>83!1pc6vCOo4#e@vW-mx&pQG79{T{mfhz`b|eu-e&C)TPycQjTEpd^X` z>3)>TVCH!`jpKOBgedr}1f6{$gAKT&aizXP*K5h28JKddD68qjk(RH(=JCI+9<#-H z{{nxgrX?!&oI92c!V(^Q97R+y&6(p{GDleO5tVb0~ zrm~^O73fQhOFs^{3FB#0OQBv!-Ur@(hSH>CN65N%w4*WkBb7W#tdb1T2hxKaC=mU?CF>AM~*t zOAs!OC=@r~%nr-qJLKaI_7$2Q5QcSznqT|x3>PriB7$*(h+^cMjl$!4JGi-8QFzpV zf!R=lgFaOWVtZdK4ks9!TNPV|TW5gomTor6k-Uq}kDev3nj2X<+>Wq~RaIBXHRb-; zYMBuXLaiXofJsC#Ea^<5oll% zRF-h%h+6?A2de?TIBhl|T<)Z{u(BReDEg#PJOMzDOZq{e+A!yH zzk>@Fhb0W#!?^BA604Mm8p8`Ib^j&M+{Zf-jh73@e~hgw3ht#GY8>U}N=rW3 zM-FCNCObn6N8C_;XIrg^e8g{*q?{gti!Di(Nq4GHXiX2MGx^wzeDs?x z1vP$J2YbP2+wviVL(<23P!d^`y=&Hiv^+3V8y^BnPV zQjVc}#sW(U8=zSEh7Y~L9tM0nJNPpDbqKRRl~9ZRs)88$v*Fx__$hSn5 zC9)0QFROlyedR4-TPsiGn9lPtFxoY&J5v~?sPZsEa{TZzWYIpG5oblcA`uE7NPU_b z(;$gnldAtNgA=N96O#g7YE|*wg;&M>Bn0Q;L`!6V&Fb*W@nhs&REA|>G8lx+CqjW4 z)^~9TlWh#P9u`o){y|r8M8elg8Q;8nZg8i_f$)(67hrkJO^Lp0^q)9t8P+ZVZ7p(^ zf~8k45hP-i(z|pZw<@9)IbwEZ>GK1NfX-Nsb`_X+N3<-&7f}J#sp!Q#Jg~a{P_xqe zXGF>@Ku`yF?V{nZ%sdIJ3FT=J$#K0iV+iPRoQ$DT}-wS;3!WS@;JKlP20L!c(Jkc%~#@vf||2f zK>FDo8tadfQ|rW0IToo)8(8}7>(99PN;|)QP2FTA7_Wvv9QwkIsN0sMD;Cg&q@)9l zfKB+8Qd|tAlzUq1&BX|#%Qa`F2fQH}Q*wW^swDv44kq5L3WYb@y~JJ0(0IDA2zn;p zVIORg&}8~aWjs$uK6o)fm5&IkE7KL#Hd4Nfg#X~r6<<`m{7x}LWGN!Vl^sL-R{2jb zNz0NiLHNXz`_Fld{p}%KQ>&w7TU*D-;|J7N_b;wITM_@l)`a?YS@LHZ^*ONJIVNEe zSqhtIsAqO-%{GtTyjpemC7L+tSO4Co>xlcnYt%h@VzSS4jOuIMn71co+ilXX|1O-i z&gb*~tlMJ>Ldp7q1Ws$+IJ3X{esoDe=xzD%@$;0(1>!DdjDspeWn9`1F9_IBxhGokofhMcu|l&lki+)n-w zE6d)T+1oX+^;oqj#K|ft=6WtZ?bORY=Lc509Xg6~pDq*&;Ln`T8C)JeeEG?P*6u^| zr1=Z-I~6%hry9d$i9RFWz-IPRdXh(!=M><0$?r%M%q)dRXQ@R7?4*#1utVU0iQhbM z{0xKP&@=s1aGLu>`MCJ$UB8w2V<^SbSw6BPh}&=_$SkaQm7WUYr;h0`RyR7|9LD6{ zt%lH*iGFq%YW?r|!mjw{#_5h@mR;Jkghg;4n05R3FeX6W2^VMp6@H=A%>lA$BYMCZ zN^T2*bbwwhklM^Sp-55X zW}7VWlXg!tf#l3=)cmG#WtyAVGcxW9S^iMbRb4PKy}^|9YYZM@wQgECh`Y z+rK9-rTCrKlF}$9;oZjepN)@u?HfwBsPdl7^F^1FQV9P7?r4 zt!DQOEpX))>I-cy2f;2|Z7U8Vvwdglbt8WjJRE=bB=NPm$x8SNV)`M=o-A~pj?fq3q#^V0; z?(W_zcP)dqWJ$Hqo4A^PBCFG8bD3+r@QgK^l7|cz#;4io0i%8kJpaS;)h5a{vouKS z52t*uC#7vqi$pa~v{+$c`pfg{ekR*uW8v=^4Nk}9_iVG&z4_| zgkUy)1k$Rvy>^K#`7LGi4(rRPNB%E4Eq4Cw1NIPHp=fbe35;{r6A2AeS>}5dzMQxO z=3u-wEdN3ME@I@Xng}E8;L2b2@!tB!X(W@}%Wr=rpk&piLl?9pYa?D%Op)E?!Y@?7 zTE!9jr=QFTLro~HQ4RwxMX?<2U=AH9R^S7#@Ia~d)1BzDm2bj{;d7v~jyx4wLQ{~W zm{yfXfQ2cc86Db@oFSDNjZ_o<@QHWz3k3rO!Yd;k$sR{2$f-~kOp=8qjPtHX*|TtKy86E01AjJJkbHzkn5~Zgp|N}qUQ6!4MvBZg z!FCo6G{QDPTSRY?gmgz8arL`Zw0w^uI`5x#7b364*Anp=!HD24r@tG${! zqpU#B1p6jp?R8RbFJ+%4n0-Fk2;C&5#>CKm^@j0raZ*rcq%KoZMB2pndhPHZc>aT(VOVQo zLaydJw>^QNV<{Zu;z@-DrgTU2LAW%1#sPVn6&NpY5xjw@c$%~!vyBa`-$kzqkJoHR z@jo(LQoZ7*rTk!$)o*O^ws{R@(>y}Pqp~lhn z0r~H@t)3XNTj9Z?9Z@)~Gbo1L3tEJ6jVru=Mf~9QHm#|B{~SgFbNR9H4aR}Aly(Ld zpW2>|$nmyJm<3(1%+U6kx|39Zy1f&Qs|LkcAx;rHV~WIpg~H-0;Cp(W8sv?OFr z_M9`Dh#^e&3Cjegbj$n(1)iD%~bB5-Z_*FBJ-ExrKb);uaTFQyAcyZ z@6ZH)(mBVHrR|LT>`L^D__MXVc!zeE$C)bpu0+>@SqjHI?9zTkzW0VpC`7t>{+7T! z$I8+VN^%ra3cr`eiVvF{J~RN7J$mqkoqm6yQ3_>~H;?G-I7DZH*uY_j1oHj|kA$(z zw8~(0j;gdlGocIgD-(5l6yb6hmFdXKO5_VH!n?o9uNe_7hd!b*gk#lnvJcCkBx?OTGm^njGEY)McVmd4Ml% z61FfUQF;8#qj&wuAb3g!|VRpjyXlBGT zk&gYl5{oP&Z=LwLp#b@J1wt|PrGe@6jx3Hq>C7=TZqK5n;vH9a)|^^e;s z5_5Fa3Pq<}=u-}Voi2$9#rlR+p>%|j!X2DMb>e%f7~5t?9X>V|x+kxPKRz=-Q|cCj zp6(Ocqg=^_cd$(ItJ>1WLmoh{?AD39J9N~5$6uhLrSr)M<|}qp0AAerTgL~-@mu%! z%`7W4Tlj91D{y-xaIXzxIr-$R__$2+MnO(M;ljA}3eYS2RL4^PnU%sf@g6lQAH}}C zp;;a8uvoa}3hFpSc2$&*b{RbpVF^YBGA+*P>~E1#5gc{Rfwo#GWug_kg2NMzaFT}k zY4Hp~`~HAo-+Y6fw<|=gt!hC*L0@xGfb#qldv)`7y-vG{$&o?uPw;yNEQavDb~+Q3 zAH6n%deO}11VVZ3MZ;^p zDzw`j)MJNF*0~bLbN4n`l+3!?l-7ahhEJ`97(F>B8c@#_XZ{}NPS+rb`u6jud-Mxw zN5-Y4lhterzLg!#G9M>jaPl<0T__8>e_=@?JLni4nYVF|c0cm$F$(QH;b>!i6Q0T0 z+pxg8POZ$*rw3nIW{;UgVgr^x%aVKO^Cu>R*+*_GNDS4!^eb3eYtU8x;w(@V+8M&Aec|D zrg6`~`td;S;uAb3wLc0w?9>gFeH^)HBu=!^?i)>JKUw7L$qtK=QOG+Km+l|Po#&rg!ya4m@IRl4oZs?99LS;T`QKZ?y`IDl z*-1_l7C4QCuSCS}VNs#WU#xY1#Q^%+KtI-L<*Ch>#_ugh7$S$RK5D-k*=k_*Yk@jp=Dc;oYw$B6WM5l`c2;%h&@TGGF`3cXfmVOodu%5+yW%Z{C@ zAs4$1K6!$tInZCiZlpq08%l*&n$tKn7p$dpL(xR<$CMuD%*16*zbWT3{{)%4Di=$d zL1CS=rfsxt?LL*PW1-8{r6)7@&fOXcO@OD;Uwy4MdgemUgBy3yB*-YEi1^4Wqxz`$ zK2c=c1_MUT;4=O+(9noCtS3O*c?s;x+o6_S<84F0@M8#jx}EK3Bs^(ak=m)&zPd00*p>0sx+0#l6op)^Ng>f zar@K0-xJ}y@7=YZ=Sk6-6Ol!RxkqMpSU7SleXVY?@~t=jMSE+02$Py9>n?AiC1}`(=cV9bmgpc;3%pU7&KSdRnFYCD)V7H%bHG`*Ms9O%^uw3P4 zepqovH@tVI}?L-cl8xDSkH{0***~K%dp2S>TF||$(8(@ z5!;|ln?VQ4adzJiOoocL2cIAD97%=6vV4n|abDH=)&C+8`nn|(82iy~9S99Gf8!cGnM%_Y;f?D+sY1MX?Ru;wz>)?L|tp6FX{{I=Urt7yZ zdiG)EuMGHIuoq;$C0t0p>Q9~_sEviz9H!jERsD5XAdQ~M} z%wO?FDTbbq2$j%iHb!maH{Zf>gq~lmhnp$aqwYDiZKYG}vW^qsTH=e7K>uTQI%VNX zg}lmnuL43Oa_uO(v~{w6&9W@M7f$9E)i)Wj*B2rC0W*>1Pjf(J^tfD|le*SB$2KaE%+djzxT^X9w#oK~{ieyoJT zF?OGIH0ffj<7Y4od4JyV`22_{IBE5AC8%bHniyO5a4hCPj-s`)L+SoeFQQW_m{uSS zdX~k9E9Bb52n@X9|F}KAE=zZX@u3@um`Gsh+jBX*>NhvHYVKOHzaA%c*SGzLp%bKR zuh^zePMpLhO>TIKOX%sDLEYb)x&jEC4|^HQivx_TI%~HSNC-0z=kPWSO6-0#W^4>1 z8VL=s6l6D0ECmytVH28B(8S|=zs!EutHQ&z0bBnGB_Kc5+VC#;L6@l~lZXg_3UXf7 z)O0Xf=KJ@FriGuUK`kT_BG(vgy`K5cy@v!lqc>41cTpht$Xk>Cd~=V7bB=Nk&~6h3 zC_JZ=i-J^(&xh#L)PPYo!?7OR!J)3=uFfX)%^X7LnFv@uf7U+;Cohp*yB`;!5pf`z zCkCNC15Qh_iYyeQ&)`dug?71>#Y+UdjUeeW-DKl0Uaj=;0C!mA7~ zTn#d0h8&aA4Etm_OiMGq@gb{<28LYNn3W>V08bEo!GJfU@+@nMwn?(^*;Z*xDA?Q`-*PV%s#+*%A9E?W-1}C1Ryd zI#uYtjm|J`eO(F{RhXGyTv}PTpbmcD!LsKg-ikr#W>!IXe`@ji^N-3=zuq`Sno+L6#2{4~j`wK$J$17G%4By%2Y2WhQ zuXfMf8S~LkkAWr}p#B{XAX09^*-Pwa(k{kVgi`1~=e@F8v%mLDKryw#V&s~ouTg}| zyl~pkFBk%xZ|CA2U@u(?@=5YLtG6HhIlIX}3O`4#=4m2fKN@lL z<5WGSuO+vr@ATY{?IKqq0t`1~L}mfZ`%@KNG^!APRa-tfrEWKpdWqCz%eU3}i(M7H zq^_7!1ih7o;1bxgD>V;%fxje!4yu}^%YVE8)Ub6d`5cKZ81x*ucu+1EkXt~jXx$rK z&2AH$$ONF*?Ge&vxU8A2y4@jGbiP?5WGjupg^~)D1Tk*QJiC{RcoPKINBnU8??dyj z8UNqVgxojYy1GgA_MOme0KJGmZUjGgxgKSgDF~7z6e^5nI`+i`Fz#bLfou9=g!8bS zh=EyZOn8IH+X#bEf^ma=+fjVFN)Z(QB$t-RNz*PF)@~0zBIhs#cQ+oKxt=Xj>DW)e z;V08?(cd*^_y0nU9uk6lp&!Z)dx{ak)F-VdR1EueN!BsrY&X?2hV&Q zzHPlZuqbUYTze!3#z!AK!wdQy;gY18xNeUiIQxTlFtcUwdejoef_>~_wmJ@52_BR_ zR1v#dxeG4y3&2clZEj+jX&aoKzHp%~Mu^r4+B9-#Hq8oIOdfAQ0dX0kwvyn&_mg^C{I88(IXi?~6-lm0Fy9c`yWEN$0+ z!1D#L_Mbdt0J0`ukA)rcp=wlN?iwOK9w|{_?>1xEk z28)7|%?O0(6Mq-Bi@+bw@#o1hu(l?0PK-_sFsjTcykq7dy4Z>4$qt4pQ|zt~f{z?` z05`&^;3Zw;zE~mtcBXc8J*|PLuPBFa4A>>(&XD&@MpoRL1@LftvU*8LY7n|jj|B3? zKJ6#`AjpTEkb&vbhbMWMt%71x!}-nA-52^4EXzyK^?I^l76Rrn)?u=OFpx6Px5q{>h6+Voz>4O-81d(EuZwz z1UTFvxmI22s34j?82OS9nV3{iAWZ^F`y~a4ZEO-~-4{)_tHJ!uV0@-q5Hx516Xubm z1{6=!QKZW%Iv;y`;>A$^loaqA8=h5|;n-Q~{tAX05Y`tUeZ@H!=*nV(y%-vFPcO7y z@7Uv%ZI#@=-Z*mf(S%#-FGoHO#(s6Ey`|7bEG%2mGl=M^kp}k%(YG}|zX1UDdZkyd zS`wn2L1Ww??4#W2%Y|adv28Uc1Z801S-V`vd4(W-hF#*V@RMdE@4sz9Vlz77Z-W*y zmuLIfnloiW7RC%=3=z)4aXWT+rX)PSTm=e6>GAx}2SK8jw{S-)oSL=|Qrk0x`aap1 z=^E=l+o_?t*E(e^iQkFAya#Whw6aR%zUJCmWtQaj#`2OEE1u~+`xJ$-O6~e8W2|r{ zA60h0VJ<)DS5wB;MOLQ@pP8!PLy(l?YY@_CYwig^w{50&`3EM)W9r=m=y>n^GOFUK z0pW<8I@P5*%xAvPzyS}YCKR&?9aOF62G2+UWRN5q-(P0Eb*3xGz#S)9uePSGVrUfk z8$OE4Ap(G_FkJcA55b%eUe|T+Qwc<}@gj#jFE>FRuf5q$+)cwpS>!yT9wcks-t1Nn7WCN7p@AqTp9h`^#%_KIDt@b{gd9@O`=x`G}@^3* zY~RLTKUAUBeP9_c+a}Qa!|p1^bW$Xji?!0j_eA9=r}#?IU6BJkAhk1qyy&dshF{_r zWZ`M*6p1^TW<;unk+&-sjLv${#a(kAkp|E~AFYq`^z*L& zl`>1>zMSt1T^h$<=MRG6r;w0VcT1+qN9~p(cw-US7R>V5BIz+Za?z!uon7chR&m`u zCv?@nzD9X+OdzsMxMsBPE`lfdwK>*fL{cwfLX2(Y_YpZO=_dLkNYR=ot^p4}PSXpz zZxRQwx5=5npU~+0WS8yU>7%rkP2b7n?K zv7}NyJW6b~<)}ZMr+Mj-eJ+?sUO*`{b$O`Vv!t07{Aoi3VQXQm$p(^KZ)AZOE>0fs z!}rdVprPhb^$V%1igSu|xSe4Q1)Te65tgd##qlNZ@ao(SD0cWJ(>vK3T609O^XH4` zL`!}s6 zO|ov%Mnk50B~sv#UKWe2e|sUe7Bs+*X6j3*t#iG>56V5&2l{Exss!6T(nPKRj+Di9 z-+({qJ>yFdo`2TTJ+&1UXT&1TQrMVd2P1*jP_-B3odUlW({xp2F?PkTLjKAggU{$v ziiGU}BhTR7bf}l13uH27NDAlHRk}9*mDQ*7)qrgb`)7AQ|1!D^u@6p2VaH2Bc;M~6 zC#CEJnyjiY&vB>8_seO{Wjx@||Ha%}M#a%YU8C3_gS$Hff(PR9F&b(1V)okQ03)e@>-zd#I^Dyub zzaiN(DuuPS?&W1uJHxKvQ2!ilCy084BB2c7N#VG51SEVD-G^KJo-mF@?;!4KY=nbk zi{*`O?IKOhRR^eNyzT3#W~~L^v?&<3tGA}lZ9)KsSc`eyTVf?uRY|C9lB82G8x$d4 zkF`wD)B==vvnNoA%s44M2PK&^%zMDlZ{|MY{~feQj)RmvUaYlcb_w!&#gdNSDE(T(p?D)7ZX}!S42?Ucyg__cQT_-Q)J0P&R=Aeo&CT z^I-_}o~B)gP%~YPC*e*wxCEtcP9fc`52vyMYNou}L~q>n)y{iAs5Pz-gjVKCRkzaT zI>d}fKIAsGq(el*26KVqO~I2*SGGvBq=7vI>!DEJRH}81%|WL-3B|M!cp2yBBNlHr z=#bJ07T9ARL?RGfYsbMYLbuir4%DXq|v_gUe!WUnk7i@5i2oF;BnLVA7)*$!zd z5ia&OD5Tk>A40kFUv4OhU`jvQn+?8B?7_O{_@YYIOi4Q^mLZ3|+|B!JJKVH%l84_RxHg|tjTYc_7~PV}O?Y#N#Eqjl0LXlrZ^k*D^US$Lbf zBE5{U0WEl#dc9dM7HBZx>-gK)At}_$)WKxPH+Q9Ajz5u$kWP``NdkM47`eau93S(V zm{!>&sZAmsPW&#e6NO`_ES81;XJ={)E~lqj5J%J?by+k=E@!P2_{h6GEJ9oSS!@h0xp84Pw z7p?wFc0sERdi#}B_1NUd9OHsvR+L1ywwG04Z)IvVKw%YLOj|+rDg=S2Y#&z6<4BLp zb#I-1QD!j5MA$h~Kw0viX0^+pR40N=qo2c?XMD$_su4TxgN^2&Y~t>=Uz|k}JqjWV zi9WjS;Q*`l#TPnS4|GxOe`lkU90eo$a)3BgC>bvM`~e~lmH6`%DBl|;=CNuP zZL@GHDM_EPNI%{SC1O8L;V8OD(UXvkro~I1Y##DIl+ZuFdhCZGckhX!)lcqy_AM__ zMSx=P6?03K%)gl9-9>n5stjmUBWkQsg_RArw{6)xf39ZED1d7b^BM2Fd)C= zVoWzKC4{*j`vaJnm^+MLN)5JZp#vmaWMq~4DS2geFQuuodoA%UNOZBOix-ol8zeqB zGIwEp!|sc-&K@pIgaO+-r6&_s19CAp({K5SU3>K_GLY0e&d@o|V*AI`D!Kp0#lt{0 zdAoMDv*CqOpi;_(o9lBL5ItfFwYUP_L<`xYWRc5Ws>bIu!~dah9c}DN!#mwD=-}I3 zJ9Gr=DY&uxvu^~Q+Da{?9N4Q>j=lE+($LmDw$Ya0B%M`4ALe?li`qW{nyYeTRG_3e zP!K;n(1v**+P~ruMAC!oP(X^CLRhBHH{>>|ifC!N&BI`s8BCsJL7IPfZ=EjD_A&fP z!|-l$6}*4N9y(cj+%d~lt)66dNxh3FJtQ5C&1DHXu1$<2ijeF?&sMyI&7d)k^G(3a zFfUH$W*2N@3Sg)AbPp0R;Wiy92FL*E&&M3Nk?2kDtFNC-ycPJ06Nt@eLb%#wB$tml zG0oHQ*YMwmAsogGGN5 z12j$7m)c@7?|^Ks=e`HCB*`_T{;#GpIo+{w8QHPZL0UyoW8d4P*%aHzBr9wp$Uv2` z{CZQhVj+%R4|N00E_w_2KXRXlduV4n=`In|Tgo)z3Zv+r^R*j$s_*H^m!j+fyi^w- zuM8=7Eg`p;Cw-6j^_*vlgo=Srpq^TB?0|gzoSwt;J4x}AFKbV{70bk8-VNHlHbgm( z#-fB@)rmOTp`FP}xFy6H1+&P4oJ&4468??&0A7X=YmAqOez06|onUVXJX5cyzT7Ev z$ibZBGhz-D@ z)L{G8^oK{Q0TYL9-K$=*6|Qz1H5egNJ19?B6Be^y%W*t)v-u_6euVBUV!z<8NT&vx)iegd;C$`priklAMBy;@+%>^#0Pljc1a4AG)5HWRn4 zE;E6IHW6Y9_*#JQ)7jKE?v(FJ)yyemIbXUJ3@xlmq`om$Jb!T=@hXD4d zljsA6Tv0)7hUupsZCv6|;y-jB?Jky=iUDbS(fb!uXljrpZy@dYfMaAAJdx_QL8MQO$Zn8l zAWl)L$yR5;$n6cHK~G+;9n*oaR*xO(O(bw3a_sUC6=^S4X&x{*k(}0$v z26n~Qy>O2U0>FtJVNkDl6sV4B_mlsg*34Q;U9-B2zN19*WKueR z#J0;CGRJX@F8cCzw!h^ z)7Wa%ffw&Bm)2?opUoi|Kt2iDDdxDJ%>g2AM;nkl*Z~!Mrr_CI6phxVZ%)(ju zl@!Y{V)uqq0uWko^>s4&<2 zkYL+h>O2(ulLd3{DeagXIcuk~lJF|?b^&=tx{CbviuhW}36~=d?tu~%EK6@&ehpJ%kZaGf}GmrPLfh<|&knH(=$ zVCAJ0{J!Sp2=NQxZC^K*m6BZ!+t%&)5#zq)}lj!u5C{zERUGF{#Ab+zVC6@%t?;a{Q1#CbSq|9o#NQ<9~v)6Rw_7{Aj*l7dPxSe zNo_N*Q|xq9HsIDRzJqB+@)ttBUzK%+z&mI4#9ODkxSg@a6s41U5I+>&#o0FGevM3j z+?)ja>fLq;iO^fS;+P~^?TmM=gL>7+c}5WjnoLaS#l1q@I1#T8HHKJEM3M%}XvnGs z*>J1(1mdP(7iv{xQ_S+iDK#kC1ZXbOR@jtonDa{mxlY|tzFD*l_!aWq{;F)T=TvWx zN0IC$qIz%Yt56}5bL@lVr+(P$E+NK8ynpQN{WzK4 z2^i-nyrkU(dn(neaQLZM7ftw6%t|pPiEk>iAr_c5MVi@>*qzWpg_A#W@p$F*r!1&(Ysn!o~(1f2_Gpb&*YA5M9tS>+;z`;a<1jV+-D|Q`+6@U zSoZI*{PEwvo4Dx!IEQo|#LZDlArx*{TD^N-AipS|HObGV=;!K`HOe7m=1neDyEIcz z%U{d~C%zS7S{x|-{Sh$XJvsnkDhz&#uCBK$Yh7rUmu?m8er7HF!?rQ&jl`+t8$C>0 zgL-KF#24dr*jyoFzazj?E#l`4UPpKe4MOwZi!CV?DK1vFT_q zxR5>u)$V-OXE)5h{+l#xabft`DN!?_q%qIL+M;2nus1 zQI5qH%>PmB0!0x?b~wr6yZ;I?sYb09;!7x6>gTT%!bo=r$FX)c?~IWt4!8L5yBxH_ zZWeuaJBlz&y6#Xf$qe?v5If^W=A$ExUqJa^)Q3Dr#_j?VKR(j@gp2b>SjvI{`M$>> zI9dns#?k9TrWaeowuw&?JaM1yn0K+Sd~taf;{E=7n~lHHg{C=woBvdIr6`xWG=2&; zABS>Q&RHSzE>>yhU8l23t#6$x73*X+BIcO^!q8Aq3O^k?8ZVmKaOgWm6x zCue7k>yZ3Cm&{hmxj9^wopEUA<9kojIY6abQ`&jaVNRxpqnGAwES-M(y}=~of$m7B z#80^xNI9?)H?cClp3PVO`}R3#ZEJXmTmSVrR|6h{XK~c2Phsz+aZ7>B<_?KQ&ta6| zPf&U~e%4Iro>Ko-#3w_8sVU5k%n`nePNVEQKB;Ji;j|mn5pWsGwlS?R%d+)=iT>)| zR$*)PYYs{D0tn-Z^(Bt6_3SYcNW(5Ee)$pQxiI+V^jtn8DQZEcyt+_1&J*#(zRb@a za|$FEXiA?XwvTw8#2Fk)zHe08Zamp!497;k;I=IRWQeS5r0!pv{*IjP_(~jKD>5&T z`^^3&FrI~n`i|4>I~_WxC~NPKi3sQb3~U=nh=--s79&EgauL(^RfJ#5tkX!(%5h=1 zzJOA}BF9CVKI?!S(533(EumlpA5EwVW zWcEyFeey4W0@F4x8N@a`J)7oHNz zJ|o^ZutbTgINah?gm%k)<9aO9y#Yw_tAsF4m&~FHB(+>qY3Tzhp1e=6ku&4XiT*3P ze=3;1BdnIr;^u&i!}90)6Tqp(l@?3{{~?9-r#Y7CLU$tf0Dm63w>Xyxh}1ZLVid$p zNK7)nqE8l+lkkYQ(*M_+Qf51`_&utZ{1X${JtC+kzj9q!EvT4mA$5efj^ z`i({xXgdMVEN9p1JwY}8(X^9)e(`{DHP@`0>U?vgE@Z}AfX*C}rRF-qe|5B(Wlt7{ zW!rmCavI7;_j~YAAEH`wyLoE{e0K{!OE>YE>TSb=og5VnT{*sXN_@rSS*tJ!j>(5>2i@lT4j*i{g+FP_+on+WD;FTg zF`id`lUU1QoMdQ~$7=#L3lxmEy&9Q)^BOqx_7Hzh&$Oxy!v3s_PZuf!r4O}#zti+- zx1s_m7fQT|zoT-cI*vL1nZBgXYVD|anO?DtbPFfkZag(7zBUw_?ppC@?&5D8RjBGl zb-UpkJ>g%|n;odietE=nW-g19$a{X};^>v-iU*+>&=*|qi=S_!Lp@T^en)NqDIsq7 zMqSLtT!kq3L2-H?C2Zlark1xc99w$vmAT^t8&!NPIqA@9?yk;9@0dY)p_bd#U9It( zH6{h2eW;e-h9J+ds{N0&G7YzF21D({KA<(;9`zA_buZRl4Y8AZ$wh<5++$1wdT!(6 zaLkNRZ&V+J?<_-}c*{EEGkC}ZN1NG#MPvJO91~vlj;5m^Enr8Rf?Zb36Ygx~_Ex3)W+CfjxL(S1-<3NM|1>fJl^Wi$bjhgsXk z!sEyHIe9hpcACZ_xp4P7+V%BGy29wcAwQOSWv$S2qnWOKY4BW3E*as05#)cNN{%Bt z`T^v(_yK70FC63;Ic?bMn)k@oW1ZSahH>Xv1jTptU$K!67F1`BMiqROD&=Y?KZk@P z+!Nx;S#9xBqEz7^CsyV5D(-% zJbZXo^EJyITD8Ngubx^~oX`EYCDNJc!`}n&^0|eV2Dm<<4!QY=yK8b3 z&Ouv)Kn;=miX?X_HFrZ&W-<8F-uGt3I#UtMAI?a+Pm76Wc2*+tA;U#5vy0X7@KeqP zN`e^kh|xU)=1&QPXN)6ALv6H-2+K);nSGLa{v9@;^%?Vx!oP!E{^g6s)6bwx+xTwlUpp*Q~zu0#oFxGs

    (J2xF=uo};L^%|MPYvVu^N)#v{{REjCt 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 diff --git a/html/classlibdap_1_1Int64-members.html b/html/classlibdap_1_1Int64-members.html deleted file mode 100644 index 5d5043bec..000000000 --- a/html/classlibdap_1_1Int64-members.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -

    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::Int64 Member List
    -
    -
    - -

    This is the complete list of members for libdap::Int64, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    add_var(BaseType *bt, Part part=nil)libdap::BaseTypevirtual
    add_var_nocopy(BaseType *bt, Part part=nil) (defined in libdap::BaseType)libdap::BaseTypevirtual
    attributes()libdap::BaseTypevirtual
    BaseType(const string &n, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const string &n, const string &d, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const BaseType &copy_from)libdap::BaseType
    btp_stack typedef (defined in libdap::BaseType)libdap::BaseType
    check_semantics(string &msg, bool all=false)libdap::BaseTypevirtual
    clear_local_data()libdap::BaseTypeinlinevirtual
    compute_checksum(Crc32 &checksum)libdap::Int64virtual
    d4_ops(BaseType *b, int op)libdap::Int64virtual
    d_buf (defined in libdap::Int64)libdap::Int64protected
    d_in_selection (defined in libdap::BaseType)libdap::BaseTypeprotected
    d_is_synthesized (defined in libdap::BaseType)libdap::BaseTypeprotected
    dataset() constlibdap::BaseTypevirtual
    deserialize(D4StreamUnMarshaller &um, DMR &dmr)libdap::Int64virtual
    libdap::BaseType::deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)libdap::BaseTypevirtual
    dump(ostream &strm) constlibdap::Int64virtual
    element_count(bool leaves=false)libdap::BaseTypevirtual
    FQN() constlibdap::BaseTypevirtual
    get_attr_table()libdap::BaseTypevirtual
    get_parent() constlibdap::BaseTypevirtual
    Int64(const string &n)libdap::Int64
    Int64(const string &n, const string &d)libdap::Int64
    Int64(const Int64 &copy_from) (defined in libdap::Int64)libdap::Int64
    intern_data(ConstraintEvaluator &eval, DDS &dds)libdap::BaseTypevirtual
    intern_data()libdap::BaseTypevirtual
    is_constructor_type() constlibdap::BaseTypevirtual
    is_dap4() const (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    is_in_selection()libdap::BaseTypevirtual
    is_simple_type() constlibdap::BaseTypevirtual
    is_vector_type() constlibdap::BaseTypevirtual
    length() constlibdap::BaseTypeinlinevirtual
    m_duplicate(const BaseType &bt)libdap::BaseTypeprotected
    name() constlibdap::BaseTypevirtual
    operator=(const Int64 &rhs) (defined in libdap::Int64)libdap::Int64
    operator=(const BaseType &rhs) (defined in libdap::BaseType)libdap::BaseType
    ops(BaseType *b, int op)libdap::Int64virtual
    print_dap4(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
    print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_val(ostream &out, string space="", bool print_decl_p=true)libdap::Int64virtual
    print_xml(FILE *out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml(ostream &out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml_writer(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
    ptr_duplicate()libdap::Int64virtual
    read()libdap::BaseTypevirtual
    read_p()libdap::BaseTypevirtual
    send_p()libdap::BaseTypevirtual
    serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)libdap::Int64virtual
    libdap::BaseType::serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)libdap::BaseTypevirtual
    set_attr_table(const AttrTable &at)libdap::BaseTypevirtual
    set_attributes(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_attributes_nocopy(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_in_selection(bool state)libdap::BaseTypevirtual
    set_is_dap4(const bool v) (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    set_length(int)libdap::BaseTypeinlinevirtual
    set_name(const string &n)libdap::BaseTypevirtual
    set_parent(BaseType *parent)libdap::BaseTypevirtual
    set_read_p(bool state)libdap::BaseTypevirtual
    set_send_p(bool state)libdap::BaseTypevirtual
    set_synthesized_p(bool state)libdap::BaseTypevirtual
    set_type(const Type &t)libdap::BaseTypevirtual
    set_value(dods_int64 i) (defined in libdap::Int64)libdap::Int64virtual
    synthesized_p()libdap::BaseTypevirtual
    toString()libdap::BaseTypevirtual
    transfer_attributes(AttrTable *at)libdap::BaseTypevirtual
    transform_to_dap2(AttrTable *parent_attr_table)libdap::Int64virtual
    transform_to_dap4(D4Group *root, Constructor *container)libdap::BaseTypevirtual
    type() constlibdap::BaseTypevirtual
    type_name() constlibdap::BaseTypevirtual
    value() const (defined in libdap::Int64)libdap::Int64virtual
    var(const string &name="", bool exact_match=true, btp_stack *s=0)libdap::BaseTypevirtual
    var(const string &name, btp_stack &s)libdap::BaseTypevirtual
    width(bool constrained=false) constlibdap::Int64virtual
    ~BaseType() (defined in libdap::BaseType)libdap::BaseTypevirtual
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    ~Int64() (defined in libdap::Int64)libdap::Int64virtual
    -
    - - - - diff --git a/html/classlibdap_1_1Int64.html b/html/classlibdap_1_1Int64.html deleted file mode 100644 index b0c7072b2..000000000 --- a/html/classlibdap_1_1Int64.html +++ /dev/null @@ -1,2746 +0,0 @@ - - - - - - - -libdap: libdap::Int64 Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    - -

    Holds a64-bit signed integer. - More...

    - -

    #include <Int64.h>

    -
    -Inheritance diagram for libdap::Int64:
    -
    -
    Inheritance graph
    - - - - -
    - - - - -

    -Public Types

    -typedef stack< BaseType * > btp_stack
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual void add_var (BaseType *bt, Part part=nil)
     Add a variable. More...
     
    -virtual void add_var_nocopy (BaseType *bt, Part part=nil)
     
    virtual bool check_semantics (string &msg, bool all=false)
     Compare an object's current state with the semantics of its type. More...
     
    virtual void clear_local_data ()
     
    virtual void compute_checksum (Crc32 &checksum)
     include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum. More...
     
    virtual bool d4_ops (BaseType *b, int op)
     
    virtual string dataset () const
     Returns the name of the dataset used to create this instance. More...
     
    virtual void deserialize (D4StreamUnMarshaller &um, DMR &dmr)
     
    virtual void dump (ostream &strm) const
     dumps information about this object More...
     
    virtual int element_count (bool leaves=false)
     Count the members of constructor types. More...
     
    virtual std::string FQN () const
     
    virtual AttrTableget_attr_table ()
     
    virtual BaseTypeget_parent () const
     
     Int64 (const string &n)
     
     Int64 (const string &n, const string &d)
     
    Int64 (const Int64 &copy_from)
     
    virtual bool is_constructor_type () const
     Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable. More...
     
    -virtual bool is_dap4 () const
     
    virtual bool is_in_selection ()
     Is this variable part of the current selection? More...
     
    virtual bool is_simple_type () const
     Returns true if the instance is a numeric, string or URL type variable. More...
     
    virtual bool is_vector_type () const
     Returns true if the instance is a vector (i.e., array) type variable. More...
     
    virtual int length () const
     How many elements are in this variable. More...
     
    virtual string name () const
     Returns the name of the class instance. More...
     
    -Int64operator= (const Int64 &rhs)
     
    virtual bool ops (BaseType *b, int op)
     Evaluate relational operators. More...
     
    virtual void print_dap4 (XMLWriter &xml, bool constrained=false)
     
    virtual void print_decl (FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_decl (ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_val (ostream &out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_xml (FILE *out, string space=" ", bool constrained=false)
     
    virtual void print_xml (ostream &out, string space=" ", bool constrained=false)
     
    virtual void print_xml_writer (XMLWriter &xml, bool constrained=false)
     
    virtual BaseTypeptr_duplicate ()
     
    virtual bool read ()
     Read data into a local buffer. More...
     
    virtual bool read_p ()
     Has this variable been read? More...
     
    virtual bool send_p ()
     Should this variable be sent? More...
     
    virtual void serialize (D4StreamMarshaller &m, DMR &dmr, bool filter=false)
     Serialize an Int8. More...
     
    virtual void set_attr_table (const AttrTable &at)
     
    virtual void set_in_selection (bool state)
     
    -virtual void set_is_dap4 (const bool v)
     
    virtual void set_length (int)
     Set the number of elements for this variable. More...
     
    virtual void set_name (const string &n)
     Sets the name of the class instance. More...
     
    virtual void set_parent (BaseType *parent)
     
    virtual void set_read_p (bool state)
     Sets the value of the read_p property. More...
     
    virtual void set_send_p (bool state)
     
    virtual void set_synthesized_p (bool state)
     
    virtual void set_type (const Type &t)
     Sets the type of the class instance. More...
     
    -virtual bool set_value (dods_int64 i)
     
    virtual bool synthesized_p ()
     
    virtual string toString ()
     
    virtual void transfer_attributes (AttrTable *at)
     
    virtual std::vector< BaseType * > * transform_to_dap2 (AttrTable *parent_attr_table)
     DAP4 to DAP2 transform. More...
     
    virtual void transform_to_dap4 (D4Group *root, Constructor *container)
     DAP2 to DAP4 transform. More...
     
    virtual Type type () const
     Returns the type of the class instance. More...
     
    virtual string type_name () const
     Returns the type of the class instance as a string. More...
     
    -virtual dods_int64 value () const
     
    virtual BaseTypevar (const string &name="", bool exact_match=true, btp_stack *s=0)
     Returns a pointer to a member of a constructor class. More...
     
    virtual BaseTypevar (const string &name, btp_stack &s)
     
    virtual unsigned int width (bool constrained=false) const
     How many bytes does this variable use Return the number of bytes of storage this variable uses. For scalar types, this is pretty simple (an int32 uses 4 bytes, etc.). For arrays and Constructors, it is a bit more complex. Note that a scalar String variable uses sizeof(String*) bytes, not the length of the string value. The width() of a String array returns the number of elements in the array times sizeof(String*). More...
     
    virtual D4Attributesattributes ()
     
    -virtual void set_attributes (D4Attributes *)
     
    -virtual void set_attributes_nocopy (D4Attributes *)
     
    Abstract Methods
    virtual void intern_data (ConstraintEvaluator &eval, DDS &dds)
     
    virtual void intern_data ()
     Read data into this variable. More...
     
    virtual bool serialize (ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
     Move data to the net, then remove them from the object. More...
     
    virtual bool deserialize (UnMarshaller &um, DDS *dds, bool reuse=false)
     Receive data from the net. More...
     
    - - - - -

    -Protected Member Functions

    void m_duplicate (const BaseType &bt)
     Perform a deep copy. More...
     
    - - - - - - - -

    -Protected Attributes

    -dods_int64 d_buf
     
    -bool d_in_selection
     
    -bool d_is_synthesized
     
    -

    Detailed Description

    -

    Holds a64-bit signed integer.

    -
    See also
    BaseType
    - -

    Definition at line 49 of file Int64.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ Int64() [1/2]

    - -
    -
    - - - - - - - - -
    libdap::Int64::Int64 (const string & n)
    -
    -

    The Int64 constructor requires only the name of the variable to be created. The name may be omitted, which will create a nameless variable. This may be adequate for some applications.

    -
    Note
    This type is available in DAP4 only. See http://docs.opendap.org/index.php/DAP4:_Specification_Volume_1#Atomic_Types
    -
    Parameters
    - - -
    nA string containing the name of the variable to be created.
    -
    -
    - -

    Definition at line 89 of file Int64.cc.

    - -
    -
    - -

    ◆ Int64() [2/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    libdap::Int64::Int64 (const string & n,
    const string & d 
    )
    -
    -

    The Int64 server-side constructor accepts the name of the variable and the dataset name from which this instance is created.

    -
    Note
    This type is available in DAP4 only. See http://docs.opendap.org/index.php/DAP4:_Specification_Volume_1#Atomic_Types
    -
    Parameters
    - - - -
    nA string containing the name of the variable to be created.
    dA string containing the name of the dataset from which this variable is created
    -
    -
    - -

    Definition at line 102 of file Int64.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ add_var()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::add_var (BaseTypebt,
    Part part = nil 
    )
    -
    -virtualinherited
    -
    - -

    Add a variable.

    -

    Adds a variable to an instance of a constructor class, such as Array, Structure et cetera. This function is only used by those classes. For constructors with more than one variable, the variables appear in the same order in which they were added (i.e., the order in which add_var() was called). Since this method is only for use by Vectors and Constructors, the BaseType implementation throws InternalErr.

    -
    Note
    For the implementation of this method in Structure, Sequence, et c., first copy bt and then insert the copy. If bt is itself a constructor type you must either use the var() method to get a pointer to the actual instance added to *this or you must first add all of bt's children to it before adding it to *this. The implementations should use m_duplicate() to perform a deep copy of bt.
    -
    Todo:
    We should get rid of the Part parameter and adopt the convention that the first variable is the Array and all subsequent ones are Maps (when dealing with a Grid, the only time Part matters). This would enable several methods to migrate from Structure, Sequence and Grid to Constructor.
    -
    Parameters
    - - - -
    btThe variable to be added to this instance. The caller of this method must free memory it allocates for v. This method will make a deep copy of the object pointed to by v.
    partThe part of the constructor data to be modified. Only meaningful for Grid variables.
    -
    -
    -
    See also
    Part
    - -

    Reimplemented in libdap::Vector, libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 815 of file BaseType.cc.

    - -
    -
    - -

    ◆ attributes()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4Attributes * libdap::BaseType::attributes ()
    -
    -virtualinherited
    -
    -

    DAP4 Attribute methods

    - -

    Definition at line 599 of file BaseType.cc.

    - -
    -
    - -

    ◆ check_semantics()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::check_semantics (string & msg,
    bool all = false 
    )
    -
    -virtualinherited
    -
    - -

    Compare an object's current state with the semantics of its type.

    -

    This function checks the class instance for internal consistency. This is important to check for complex constructor classes. For BaseType, an object is semantically correct if it has both a non-null name and type.

    -

    For example, an Int32 instance would return FALSE if it had no name or no type defined. A Grid instance might return FALSE for more complex reasons, such as having Map arrays of the wrong size or shape.

    -

    This function is used by the DDS class, and will rarely, if ever, be explicitly called by a DODS application program. A variable must pass this test before it is sent, but there may be many other stages in a retrieve operation where it would fail.

    -
    Returns
    Returns FALSE when the current state violates some aspect of the type semantics, TRUE otherwise.
    -
    Parameters
    - - - -
    msgA returned string, containing a message indicating the source of any problem.
    allFor complex constructor types (Grid, Sequence, Structure), this flag indicates whether to check the semantics of the member variables, too.
    -
    -
    -
    See also
    DDS::check_semantics
    - -

    Reimplemented in libdap::Array, libdap::Vector, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1209 of file BaseType.cc.

    - -
    -
    - -

    ◆ clear_local_data()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual void libdap::BaseType::clear_local_data ()
    -
    -inlinevirtualinherited
    -
    -

    Remove any read or set data in the private data of the variable, setting read_p() to false. Used to clear any dynamically allocated storage that holds (potentially large) data. For the simple types, this no-op version is all that's needed. Vector and some other classes define a special version and have serialize() implementations that call it to free data as soon as possible after sending it.

    -
    Note
    Added 7/5/15 jhrg
    -
    -Any specialization of this should make sure to reset the read_p property.
    - -

    Reimplemented in libdap::Sequence, libdap::Vector, libdap::D4Sequence, and libdap::D4Opaque.

    - -

    Definition at line 179 of file BaseType.h.

    - -
    -
    - -

    ◆ compute_checksum()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Int64::compute_checksum (Crc32checksum)
    -
    -virtual
    -
    - -

    include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum.

    -
    Parameters
    - - -
    checksumA Crc32 instance that holds the current checksum.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 141 of file Int64.cc.

    - -
    -
    - -

    ◆ d4_ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::Int64::d4_ops (BaseTypeb,
    int op 
    )
    -
    -virtual
    -
    -
    See also
    BaseType::d4_ops(BaseType *, int)
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 224 of file Int64.cc.

    - -
    -
    - -

    ◆ dataset()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::dataset () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the dataset used to create this instance.

    -

    A dataset from which the data is to be read. The meaning of this string will vary among different types of data sources. It may be the name of a data file or an identifier used to read data from a relational database.

    - -

    Definition at line 358 of file BaseType.cc.

    - -
    -
    - -

    ◆ deserialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Int64::deserialize (D4StreamUnMarshallerum,
    DMRdmr 
    )
    -
    -virtual
    -
    -

    The DAP4 deserialization method.

    Parameters
    - - - -
    um
    dmr
    -
    -
    -
    Exceptions
    - - -
    Erroror InternalErr
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 164 of file Int64.cc.

    - -
    -
    - -

    ◆ deserialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::deserialize (UnMarshallerum,
    DDSdds,
    bool reuse = false 
    )
    -
    -virtualinherited
    -
    - -

    Receive data from the net.

    -

    Receives data from the network connection identified by the source parameter. The data is put into the class data buffer according to the input dds.

    -

    This function is only used on the client side of the DODS client/server connection.

    -
    Parameters
    - - - - -
    umAn UnMarshaller that knows how to deserialize data types
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure. This would have been received from the server in an earlier transmission.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect.
    -
    -
    -
    Returns
    Always returns TRUE.
    -
    Exceptions
    - - -
    Errorwhen a problem reading from the UnMarshaller is found.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, libdap::Constructor, libdap::Str, libdap::Int32, libdap::Byte, libdap::Float32, libdap::Float64, libdap::UInt32, libdap::Int16, libdap::UInt16, and libdap::D4Opaque.

    - -

    Definition at line 943 of file BaseType.cc.

    - -
    -
    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Int64::dump (ostream & strm) const
    -
    -virtual
    -
    - -

    dumps information about this object

    -

    Displays the pointer value of this instance and information about this instance.

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the information to
    -
    -
    -
    Returns
    void
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 287 of file Int64.cc.

    - -
    -
    - -

    ◆ element_count()

    - -
    -
    - - - - - -
    - - - - - - - - -
    int libdap::BaseType::element_count (bool leaves = false)
    -
    -virtualinherited
    -
    - -

    Count the members of constructor types.

    -

    Return a count of the total number of variables in this variable. This is used to count the number of variables held by a constructor variable - for simple type and vector variables it always returns 1.

    -

    For compound data types, there are two ways to count members. You can count the members, or you can count the simple members and add that to the count of the compound members. For example, if a Structure contains an Int32 and another Structure that itself contains two Int32 members, the element count of the top-level structure could be two (one Int32 and one Structure) or three (one Int32 by itself and two Int32's in the subsidiary Structure). Use the leaves parameter to control which kind of counting you desire.

    -
    Returns
    Returns 1 for simple types. For compound members, the count depends on the leaves argument.
    -
    Parameters
    - - -
    leavesThis parameter is only relevant if the object contains other compound data types. If FALSE, the function counts only the data variables mentioned in the object's declaration. If TRUE, it counts the simple members, and adds that to the sum of the counts for the compound members. This parameter has no effect for simple type variables.
    -
    -
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 443 of file BaseType.cc.

    - -
    -
    - -

    ◆ FQN()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::FQN () const
    -
    -virtualinherited
    -
    -

    Return the FQN for this variable. This will include the D4 Group component of the name.

    -
    Returns
    The FQN in a string
    - -

    Reimplemented in libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 332 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - -
    AttrTable & libdap::BaseType::get_attr_table ()
    -
    -virtualinherited
    -
    -

    Get this variable's AttrTable. It's generally a bad idea to return a reference to a contained object, but in this case it seems that building an interface inside BaseType is overkill.

    -

    Use the AttrTable methods to manipulate the table.

    - -

    Definition at line 582 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_parent()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::BaseType::get_parent () const
    -
    -virtualinherited
    -
    -

    Return a pointer to the Constructor or Vector which holds (contains) this variable. If this variable is at the top level, this method returns null.

    -
    Returns
    A BaseType pointer to the variable's parent.
    - -

    Definition at line 751 of file BaseType.cc.

    - -
    -
    - -

    ◆ intern_data() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::intern_data (ConstraintEvaluatoreval,
    DDSdds 
    )
    -
    -virtualinherited
    -
    -

    Similar to using serialize() and deserialize() together in one object. Data are read as for serialize and those values are stored in the objects as deserialize() does but does not write and then read data to/from a stream.

    -

    This method is defined by the various data type classes. It calls the read() abstract method. Unlike serialize(), this method does not clear the memory use to hold the data values, so the caller should make sure to delete the DDS or the variable as soon as possible.

    -
    Parameters
    - - - -
    evalUse this as the constraint expression evaluator.
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    -
    -
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 908 of file BaseType.cc.

    - -
    -
    - -

    ◆ intern_data() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::BaseType::intern_data ()
    -
    -virtualinherited
    -
    - -

    Read data into this variable.

    -
    Parameters
    - - - -
    evalEvaluator for a constraint expression
    dmrDMR for the whole dataset
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 927 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_constructor_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_constructor_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable.

    -
    Returns
    True if the instance is a Structure, Sequence or Grid, False otherwise.
    - -

    Definition at line 412 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_in_selection ()
    -
    -virtualinherited
    -
    - -

    Is this variable part of the current selection?

    -

    Does this variable appear in either the selection part or as a function argument in the current constrain expression. If this property is set (true) then implementations of the read() method should read this variable.

    -
    Note
    This method does not check, nor does it know about the semantics of, string arguments passed to functions. Those functions might include variable names in strings; they are responsible for reading those variables. See the grid (func_grid_select()) for an example.
    -
    See also
    BaseType::read()
    - -

    Definition at line 703 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_simple_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_simple_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a numeric, string or URL type variable.

    -
    Returns
    True if the instance is a scalar numeric, String or URL variable, False otherwise. Arrays (even of simple types) return False.
    -
    See also
    is_vector_type()
    - -

    Definition at line 393 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_vector_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_vector_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a vector (i.e., array) type variable.

    -
    Returns
    True if the instance is an Array, False otherwise.
    - -

    Definition at line 402 of file BaseType.cc.

    - -
    -
    - -

    ◆ length()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual int libdap::BaseType::length () const
    -
    -inlinevirtualinherited
    -
    - -

    How many elements are in this variable.

    -
    Todo:
    change the return type to int64_t
    -
    Returns
    The number of elements; 1 for scalars
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, libdap::Str, and libdap::D4Opaque.

    - -

    Definition at line 207 of file BaseType.h.

    - -
    -
    - -

    ◆ m_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::m_duplicate (const BaseTypebt)
    -
    -protectedinherited
    -
    - -

    Perform a deep copy.

    -

    Perform a deep copy. Copies the values of bt into *this. Pointers are dereferenced and their values are copied into a newly allocated instance.

    -
    Parameters
    - - -
    btThe source object.
    -
    -
    - -

    Definition at line 86 of file BaseType.cc.

    - -
    -
    - -

    ◆ name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::name () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the class instance.

    - -

    Definition at line 320 of file BaseType.cc.

    - -
    -
    - -

    ◆ ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::Int64::ops (BaseTypeb,
    int op 
    )
    -
    -virtual
    -
    - -

    Evaluate relational operators.

    -

    This method contains the relational operators used by the constraint expression evaluator in the DDS class. Each class that wants to be able to evaluate relational expressions must overload this function. The implementation in BaseType throws an InternalErr exception. The DAP library classes Byte, ..., Url provide specializations of this method. It is not meaningful for classes such as Array because relational expressions using Array are not supported.

    -

    The op argument refers to a table generated by bison from the constraint expression parser. Use statements like the following to correctly interpret its value:

    -
    switch (op) {
    -    case EQUAL: return i1 == i2;
    -    case NOT_EQUAL: return i1 != i2;
    -    case GREATER: return i1 > i2;
    -    case GREATER_EQL: return i1 >= i2;
    -    case LESS: return i1 < i2;
    -    case LESS_EQL: return i1 <= i2;
    -    case REGEXP: throw Error("Regular expressions are not supported for integer values");
    -    default: throw Error("Unknown operator");
    -}
    -

    This function is used by the constraint expression evaluator.

    -
    Parameters
    - - - -
    bCompare the value of this instance with b.
    opAn integer index indicating which relational operator is implied. Choose one from the following: EQUAL, NOT_EQUAL, GREATER, GREATER_EQL, LESS, LESS_EQL, and REGEXP.
    -
    -
    -
    Returns
    The boolean value of the comparison.
    -
    See also
    BaseType::d4_ops(BaseType *, int)
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 208 of file Int64.cc.

    - -
    -
    - -

    ◆ print_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_dap4 (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the DAP4 XML representation for this variable. This method is used to build the DAP4 DMR response object.

    -
    Parameters
    - - - -
    xmlAn XMLWriter that will do the serialization
    constrainedTrue if the response should show the variables subject to the current constraint expression.
    -
    -
    - -

    Reimplemented in libdap::Array, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 1164 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (FILE * out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1003 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (ostream & out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1054 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_val()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Int64::print_val (ostream & out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtual
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output ostream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 197 of file Int64.cc.

    - -
    -
    - -

    ◆ print_xml() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (FILE * out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination.
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1105 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (ostream & out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1120 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml_writer()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml_writer (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    - -

    Reimplemented in libdap::Array, libdap::D4Enum, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1134 of file BaseType.cc.

    - -
    -
    - -

    ◆ ptr_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::Int64::ptr_duplicate ()
    -
    -virtual
    -
    -

    Clone this instance. Allocate a new instance and copy *this into it. This method must perform a deep copy.

    @note This method should \e not copy data values, but must copy all
    -other fields in the object.
    -
    Returns
    A newly allocated copy of this.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 111 of file Int64.cc.

    - -
    -
    - -

    ◆ read()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read ()
    -
    -virtualinherited
    -
    - -

    Read data into a local buffer.

    -

    This method should be implemented for each of the data type classes (Byte, ..., Grid) when using the DAP class library to build a server. This method is only for DAP servers. The library provides a default definition here which throws an InternalErr exception unless the read_p property has been set. In that case it returns false, indicating that all the data have been read. The latter case can happen when building a constant value that needs to be passed to a function. The variable/constant is loaded with a value when it is created.

    -

    When implementing a new DAP server, the Byte, ..., Grid data type classes are usually specialized. In each of those specializations read() should be defined to read values from the data source and store them in the object's local buffer. The read() method is called by other methods in this library. When writing read(), follow these rules:

    -
      -
    • -read() should throw Error if it encounters an error. The message should be verbose enough to be understood by someone running a client on a different machine.
    • -
    • -The value(s) should be read if and only if either send_p() or is_in_selection() return true. If neither of these return true, the value(s) should not be read. This is important when writing read() for a Constructor type such as Grid where a client may ask for only the map vectors (and thus reading the much larger Array part is not needed).
    • -
    • -For each specialization of read(), the method should first test the value of the read_p property (using the read_p() method) and read values only if the value of read_p() is false. Once the read() method reads data and stores it in the instance, it must set the value of the read_p property to true using set_read_p(). If your read() methods fail to do this data may not serialize correctly.
    • -
    • -The Array::read() and Grid::read() methods should take into account any restrictions on Array sizes.
    • -
    • -If you are writing Sequence::read(), be sure to check the documentation for Sequence::read_row() and Sequence::serialize() so you understand how Sequence::read() is being called.
    • -
    • -

      For Sequence::read(), your specialization must correctly manage the unsent_data property and row count in addition to the read_p property (handle the read_p property as describe above). For a Sequence to serialize correctly, once all data from the Sequence has been read, unsent_data property must be set to false (use Sequence::set_unsent_data()). Also, at that time the row number counter must be reset (use Sequence::reset_row_counter()). Typically the correct time to set unsent_data to false and reset the row counter is the time when Sequence::read() return false indicating that all the data for the Sequence have been read. Failure to handle these tasks will break serialization of nested Sequences. Note that when Sequence::read() returns with a result of true (indicating there is more data to send, the value of the unsent_data property should be true.

      -

      Also, if you server must handle nested sequences, be sure to read about subclassing set_read_p().

      -
    • -
    -
    Todo:
    Modify the D4 serialize code so that it supports the true/false behavior of read() for arrays.
    -
    Todo:
    Modify all of the stock handlers so they conform to this!
    -
    Returns
    False means more data remains to be read, True indicates that no more data need to be read. For Sequence and D4Sequence, this method will generally read one instance of the Sequence; for other types it will generally read the entire variable modulo any limitations due to a constraint. However, the library should be written so that read can return less than all of the data for a variable - serialize() would then call the function until it returns True.
    -
    See also
    BaseType
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 899 of file BaseType.cc.

    - -
    -
    - -

    ◆ read_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read_p ()
    -
    -virtualinherited
    -
    - -

    Has this variable been read?

    -

    Returns true if the value(s) for this variable have been read from the data source, otherwise returns false. This method is used to determine when values need to be read using the read() method. When read_p() returns true, this library assumes that buf2val() (and other methods such as get_vec()) can be used to access the value(s) of a variable.

    -
    Returns
    True if the variable's value(s) have been read, false otherwise.
    - -

    Definition at line 480 of file BaseType.cc.

    - -
    -
    - -

    ◆ send_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::send_p ()
    -
    -virtualinherited
    -
    - -

    Should this variable be sent?

    -

    Returns the state of the send_p property. If true, this variable should be sent to the client, if false, it should not. If no constraint expression (CE) has been evaluated, this property is true for all variables in a data source (i.e., for all the variables listed in a DDS). If a CE has been evaluated, this property is true only for those variables listed in the projection part of the CE.

    -
    Returns
    True if the variable should be sent to the client, false otherwise.
    - -

    Definition at line 554 of file BaseType.cc.

    - -
    -
    - -

    ◆ serialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Int64::serialize (D4StreamMarshallerm,
    DMRdmr,
    bool filter = false 
    )
    -
    -virtual
    -
    - -

    Serialize an Int8.

    -
    Parameters
    - - - - - -
    m
    dmrUnused
    evalUnused
    filterUnused
    -
    -
    -
    Exceptions
    - - -
    Erroris thrown if the value needs to be read and that operation fails.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 155 of file Int64.cc.

    - -
    -
    - -

    ◆ serialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::serialize (ConstraintEvaluatoreval,
    DDSdds,
    Marshallerm,
    bool ce_eval = true 
    )
    -
    -virtualinherited
    -
    - -

    Move data to the net, then remove them from the object.

    -

    Sends the data from the indicated (local) dataset through the connection identified by the Marshaller parameter. If the data is not already incorporated into the DDS object, read the data from the dataset. Once the data are sent (written to the Marshaller), they are deleted from the object and the object state is reset so that they will be read again if the read() method is called.

    -

    This function is only used on the server side of the client/server connection, and is generally only called from the ResponseBuilder functions. It has no BaseType implementation; each datatype child class supplies its own implementation.

    @param eval Use this as the constraint expression evaluator.
    -
    Parameters
    - - - - -
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    mA marshaller used to serialize data types
    ce_evalA boolean value indicating whether to evaluate the DODS constraint expression that may accompany this dataset. The constraint expression is stored in the dds.
    -
    -
    -
    Returns
    This method always returns true. Older versions used the return value to signal success or failure.
    -
    Note
    We changed the default behavior of this method so that it calls BaseType::clear_local_data() once the values are sent. This, combined with the behavior that read() is called by this method just before data are sent, means that data for any given variable remain in memory for the shortest time possible. Furthermore, since variables are serialized one at a time, no more than one variable's data will be in memory at any given time when using the default behavior. Some code - code that uses intern_data() or server functions - might alter this default behavior. Only Array (i.e. Vector), Sequence, D4Sequence and D4Opaque types actually hold data in dynamically allocated memory, so sonly those types have the new/changed behavior. This change was made on 7/5/15.
    -
    Exceptions
    - - - -
    InternalErr.
    Error.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, libdap::Constructor, libdap::Str, libdap::Int32, libdap::Byte, libdap::Float32, libdap::Float64, libdap::UInt32, libdap::Int16, libdap::UInt16, and libdap::D4Opaque.

    - -

    Definition at line 937 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_attr_table (const AttrTableat)
    -
    -virtualinherited
    -
    -

    Set this variable's attribute table.

    Parameters
    - - -
    atSource of the attributes.
    -
    -
    - -

    Definition at line 590 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_in_selection (bool state)
    -
    -virtualinherited
    -
    -

    Set the in_selection property to state. This property indicates that the variable is used as a parameter to a constraint expression function or that it appears as an argument in a selection sub-expression. If set (true), implementations of the BaseType::read() method should read this variable.

    -
    Parameters
    - - -
    stateSet the in_selection property to this state.
    -
    -
    -
    See also
    BaseType::read()
    -
    -BaseType::is_in_selection() for more information.
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 718 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_length()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::BaseType::set_length (int )
    -
    -inlinevirtualinherited
    -
    - -

    Set the number of elements for this variable.

    -
    Todo:
    change param type to int64_t
    -
    Parameters
    - - -
    lThe number of elements
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, and libdap::Vector.

    - -

    Definition at line 214 of file BaseType.h.

    - -
    -
    - -

    ◆ set_name()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_name (const string & n)
    -
    -virtualinherited
    -
    - -

    Sets the name of the class instance.

    - -

    Reimplemented in libdap::Vector.

    - -

    Definition at line 344 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_parent()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_parent (BaseTypeparent)
    -
    -virtualinherited
    -
    -

    Set the parent property for this variable.

    -
    Note
    Added ability to set parent to null. 10/19/12 jhrg
    -
    Parameters
    - - -
    parentPointer to the Constructor of Vector parent variable or null if the variable has no parent (if it is at the top-level of a DAP2/3 DDS).
    -
    -
    -
    Exceptions
    - - -
    InternalErrthrown if called with anything other than a Constructor, Vector or Null.
    -
    -
    - -

    Definition at line 733 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_read_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_read_p (bool state)
    -
    -virtualinherited
    -
    - -

    Sets the value of the read_p property.

    -

    Sets the value of the read_p property. This indicates that the value(s) of this variable has/have been read. An implementation of the read() method should use this to set the read_p property to true.

    -
    Note
    If the is_synthesized property is true, this method will not alter the is_read property. If you need that behavior, specialize the method in your subclasses if the various types.
    -
    -For most of the types the default implementation of this method is fine. However, if you're building a server which must handle data represented using nested sequences, then you may need to provide a specialization of Sequence::set_read_p(). By default Sequence::set_read_p() recursively sets the read_p property for all child variables to state. For servers where one Sequence reads an outer set of values and another reads an inner set, this is cumbersome. In such a case, it is easier to specialize Sequence::set_read_p() so that it does not recursively set the read_p property for the inner Sequence. Be sure to see the documentation for the read() method!
    -
    Todo:
    Look at making synthesized variables easier to implement and at making them more integrated into the overall CE evaluation process. Maybe the code that computes the synthesized var's value should be in the that variable's read() method? This might provide a way to get rid of the awkward 'projection functions' by replacing them with real children of BaseType. It would also provide a way to clean up the way the synthesized_p prop intrudes on the read_p prop.
    -
    See also
    BaseType::read()
    -
    Parameters
    - - -
    stateSet the read_p property to this state.
    -
    -
    - -

    Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 516 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_send_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_send_p (bool state)
    -
    -virtualinherited
    -
    -

    Sets the value of the send_p flag. This function is meant to be called from within the constraint evaluator of other code which determines that this variable should be returned to the client. Data are ready to be sent when both the d_is_send and d_is_read flags are set to TRUE.

    -
    Parameters
    - - -
    stateThe logical state to set the send_p flag.
    -
    -
    - -

    Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 568 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_synthesized_p (bool state)
    -
    -virtualinherited
    -
    -

    Set the synthesized flag. Before setting this flag be sure to set the read_p() state. Once this flag is set you cannot alter the state of the read_p flag!

    -
    See also
    synthesized_p()
    - -

    Definition at line 463 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_type()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_type (const Typet)
    -
    -virtualinherited
    -
    - -

    Sets the type of the class instance.

    - -

    Definition at line 372 of file BaseType.cc.

    - -
    -
    - -

    ◆ synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::synthesized_p ()
    -
    -virtualinherited
    -
    -

    Returns true if the variable is a synthesized variable. A synthesized variable is one that is added to the dataset by the server (usually with a `projection function'.

    - -

    Definition at line 452 of file BaseType.cc.

    - -
    -
    - -

    ◆ toString()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::toString ()
    -
    -virtualinherited
    -
    -

    Write out the object's internal fields in a string. To be used for debugging when regular inspection w/ddd or gdb isn't enough.

    -
    Returns
    A string which shows the object's internal stuff.
    - -

    Reimplemented in libdap::Sequence.

    - -

    Definition at line 184 of file BaseType.cc.

    - -
    -
    - -

    ◆ transfer_attributes()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::transfer_attributes (AttrTableat_container)
    -
    -virtualinherited
    -
    -

    Transfer attributes from a DAS object into this variable. Because of the rough history of the DAS object and the way that various server code built the DAS, this is necessarily a heuristic process. The intent is that this method will be overridden by handlers that need to look for certain patterns in the DAS (e.g., hdf4's odd variable_dim_n; where n = 0, 1, 2, ...) attribute containers.

    -

    There should be a one-to-one mapping between variables and attribute containers. However, in some cases one variable has attributes spread across several top level containers and in some cases one container is used by several variables

    -
    Note
    This method is technically unnecessary because a server (or client) can easily add attributes directly using the DDS::get_attr_table or BaseType::get_attr_table methods and then poke values in using any of the methods AttrTable provides. This method exists to ease the transition to DDS objects which contain attribute information for the existing servers (Since they all make DAS objects separately from the DDS). They could be modified to use the same AttrTable methods but operate on the AttrTable instances in a DDS/BaseType instead of those in a DAS.
    -
    Parameters
    - - -
    at_containerTransfer attributes from this container.
    -
    -
    -
    Returns
    void
    - -

    Reimplemented in libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 644 of file BaseType.cc.

    - -
    -
    - -

    ◆ transform_to_dap2()

    - -
    -
    - - - - - -
    - - - - - - - - -
    vector< BaseType * > * libdap::Int64::transform_to_dap2 (AttrTableparent_attr_table)
    -
    -virtual
    -
    - -

    DAP4 to DAP2 transform.

    -

    Return a DAP2 'copy' of the variable.

    -
    Returns
    A pointer to the transformed variable
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 262 of file Int64.cc.

    - -
    -
    - -

    ◆ transform_to_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::transform_to_dap4 (D4Grouproot,
    Constructorcontainer 
    )
    -
    -virtualinherited
    -
    - -

    DAP2 to DAP4 transform.

    -

    For the current BaseType, return a DAP4 'copy' of the variable.

    -
    Note
    For most DAP2 types, in this implementation of DAP4 the corresponding DAP4 type is the same. The different types are Sequences (which are D4Sequences in the DAP4 implementation), Grids (which are coverages) and Arrays (which use shared dimensions).
    -
    Parameters
    - - - -
    rootThe root group that should hold this new variable. Add Group-level stuff here (e.g., D4Dimensions).
    containerAdd the new variable to this container.
    -
    -
    -
    Returns
    A pointer to the transformed variable
    - -

    Reimplemented in libdap::Sequence, libdap::Array, libdap::Grid, libdap::Structure, and libdap::Constructor.

    - -

    Definition at line 216 of file BaseType.cc.

    - -
    -
    - -

    ◆ type()

    - -
    -
    - - - - - -
    - - - - - - - -
    Type libdap::BaseType::type () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance.

    - -

    Definition at line 365 of file BaseType.cc.

    - -
    -
    - -

    ◆ type_name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::type_name () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance as a string.

    - -

    Definition at line 379 of file BaseType.cc.

    - -
    -
    - -

    ◆ var() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::BaseType::var (const string & name = "",
    bool exact_match = true,
    btp_stack * s = 0 
    )
    -
    -virtualinherited
    -
    - -

    Returns a pointer to a member of a constructor class.

    -

    Returns a pointer to the contained variable in a composite class. The composite classes are those made up of aggregated simple data types. Array, Grid, and Structure are composite types, while Int and Float are simple types. This function is only used by composite classes. The BaseType implementation always returns null.

    -

    Several of the subclasses provide alternate access methods that make sense for that particular data type. For example, the Array class defines a *var(int i) method that returns the ith entry in the Array data, and the Structure provides a *var(Vars_iter) function using a pseudo-index to access the different members of the structure.

    -
    Parameters
    - - - - -
    nameThe name of the class member. Defaults to ""
    exact_matchTrue if only interested in variables whose full names match n exactly. If false, returns the first variable whose name matches name. For example, if name is x and point.x is a variable, then var("x", false) would return a BaseType pointer to point.x. If exact_match was true then name would need to be "point.x" for var to return that pointer. This feature simplifies constraint expressions for datasets which have complex, nested, constructor variables. Defaults to true.
    sRecord the path to name. Defaults to null, in which case it is not used.
    -
    -
    -
    Returns
    A pointer to the member named in the n argument. If no name is given, the function returns the first (only) variable. For example, an Array has only one variable, while a Structure can have many.
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 758 of file BaseType.cc.

    - -
    -
    - -

    ◆ var() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::BaseType::var (const string & name,
    btp_stack & s 
    )
    -
    -virtualinherited
    -
    -

    This version of var(...) searches for name and returns a pointer to the BaseType object if found. It uses the same search algorithm as BaseType::var(const string &, bool, btp_stack *) when exact_match is false. In addition to returning a pointer to the variable, it pushes onto s a BaseType pointer to each constructor type that ultimately contains name.

    -
    Note
    The BaseType implementation always returns null. There are no default values for the parameters. If var() is called w/o any params, the three parameter version will be used.
    -
    Deprecated:
    This method is deprecated because it tries first to use exact_match and, if that fails, then tries leaf_match. It's better to use the alternate form of var(...) and specify exactly what you'd like to do.
    -
    Returns
    A pointer to the named variable.
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 780 of file BaseType.cc.

    - -
    -
    - -

    ◆ width()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::Int64::width (bool constrained = false) const
    -
    -virtual
    -
    - -

    How many bytes does this variable use Return the number of bytes of storage this variable uses. For scalar types, this is pretty simple (an int32 uses 4 bytes, etc.). For arrays and Constructors, it is a bit more complex. Note that a scalar String variable uses sizeof(String*) bytes, not the length of the string value. The width() of a String array returns the number of elements in the array times sizeof(String*).

    -
    Parameters
    - - -
    constrainedShould the current constraint be taken into account?
    -
    -
    -
    Returns
    Bytes of storage
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 135 of file Int64.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1Int64.js b/html/classlibdap_1_1Int64.js deleted file mode 100644 index 9e0f1d30a..000000000 --- a/html/classlibdap_1_1Int64.js +++ /dev/null @@ -1,75 +0,0 @@ -var classlibdap_1_1Int64 = -[ - [ "btp_stack", "classlibdap_1_1Int64.html#ae9c6e71855b90a0e552713011c9ab81f", null ], - [ "Int64", "classlibdap_1_1Int64.html#a3fb9408eeebf8d532d58f276573aa32e", null ], - [ "Int64", "classlibdap_1_1Int64.html#a33ab39f101e981b5d097f8f558f3857f", null ], - [ "Int64", "classlibdap_1_1Int64.html#a1046d1e94c13462b4a911afc0c7f7d24", null ], - [ "~Int64", "classlibdap_1_1Int64.html#a8255c11acaf27befda854fac5fb579a7", null ], - [ "add_var", "classlibdap_1_1Int64.html#adca3c2621c4a509537c18362005d7f7f", null ], - [ "add_var_nocopy", "classlibdap_1_1Int64.html#aa1192360cea4dc516c822cd3e13dc723", null ], - [ "attributes", "classlibdap_1_1Int64.html#a97452f06d2188eb838399a709246b5e9", null ], - [ "check_semantics", "classlibdap_1_1Int64.html#aec503abec2fd3090e7738c0a575491f8", null ], - [ "clear_local_data", "classlibdap_1_1Int64.html#aaddb97a4efbe035f41deaf03c6e8683f", null ], - [ "compute_checksum", "classlibdap_1_1Int64.html#ab18cb68a6ac3fafc03fa223408fd1108", null ], - [ "d4_ops", "classlibdap_1_1Int64.html#ac066aff6a587475d50ddd60b3279eb17", null ], - [ "dataset", "classlibdap_1_1Int64.html#a47521ce321a17e6ce217870cb6a1a7aa", null ], - [ "deserialize", "classlibdap_1_1Int64.html#a8c1a1dddd04b2e892f9efca2058e833d", null ], - [ "deserialize", "classlibdap_1_1Int64.html#a1f27d99250e857efd86ac9db788bbf1b", null ], - [ "dump", "classlibdap_1_1Int64.html#a63ad042799beb2ccf9a902df4e36d1f6", null ], - [ "element_count", "classlibdap_1_1Int64.html#a5c2235737737b482bfa7536b8aeab810", null ], - [ "FQN", "classlibdap_1_1Int64.html#a977cb954cc8f0d914d6f66ea0f48a9e3", null ], - [ "get_attr_table", "classlibdap_1_1Int64.html#a1fcd9537c67e3bf88964b2656ff5bac1", null ], - [ "get_parent", "classlibdap_1_1Int64.html#a3459cdaa239c33ce111ef360d8dc3017", null ], - [ "intern_data", "classlibdap_1_1Int64.html#a722d33783aa0272d339b0301a4f77e59", null ], - [ "intern_data", "classlibdap_1_1Int64.html#a1956e6ea90a745516f5372c859173433", null ], - [ "is_constructor_type", "classlibdap_1_1Int64.html#a8b8490e0047c6da52945699a132008ea", null ], - [ "is_dap4", "classlibdap_1_1Int64.html#a7f6835cb5e5589ab5dad3fb4813d3bea", null ], - [ "is_in_selection", "classlibdap_1_1Int64.html#ae302ab2ec26e9fc5b575bf5d3d09aa5c", null ], - [ "is_simple_type", "classlibdap_1_1Int64.html#aae57e5b270b3a015d40c8db10b9b5549", null ], - [ "is_vector_type", "classlibdap_1_1Int64.html#a7107c76dbcab71015141142383b6d022", null ], - [ "length", "classlibdap_1_1Int64.html#aadcda7a659157bc6a832d8a5fb775b3f", null ], - [ "m_duplicate", "classlibdap_1_1Int64.html#a0c55b826c8c5dfe7a454dc670e859a41", null ], - [ "name", "classlibdap_1_1Int64.html#a24c5d67823b3cff7f4245a993072a142", null ], - [ "operator=", "classlibdap_1_1Int64.html#a142cc658ec33613edef79e3df688e5af", null ], - [ "ops", "classlibdap_1_1Int64.html#a80a9bdafa15ee063ad3d387cffe36cf1", null ], - [ "print_dap4", "classlibdap_1_1Int64.html#afcddbe441380b95c894510c02980b163", null ], - [ "print_decl", "classlibdap_1_1Int64.html#a2d799fad93255d7f2b803562ae7a5784", null ], - [ "print_decl", "classlibdap_1_1Int64.html#afd744b0ddeb04e7b173c9e83423ec572", null ], - [ "print_val", "classlibdap_1_1Int64.html#a569745a0983529a9e752dc2f221fc45c", null ], - [ "print_xml", "classlibdap_1_1Int64.html#a825820edee179550cfde3dfd4d274f2a", null ], - [ "print_xml", "classlibdap_1_1Int64.html#a8bd2c7682edd48c64b210bdf247bdef7", null ], - [ "print_xml_writer", "classlibdap_1_1Int64.html#a11554ff931528b243e9af8173d205b44", null ], - [ "ptr_duplicate", "classlibdap_1_1Int64.html#a5b550206f8c98647d01660f9f2405408", null ], - [ "read", "classlibdap_1_1Int64.html#a1da003c53f2e663223f603ab3fbd7c8e", null ], - [ "read_p", "classlibdap_1_1Int64.html#a38ff819a432217c55db2e9071928d20c", null ], - [ "send_p", "classlibdap_1_1Int64.html#a980c0013817836aa77ef74aeec7fb192", null ], - [ "serialize", "classlibdap_1_1Int64.html#a540f4af6a2b78079a9b6d4c9edaa10b7", null ], - [ "serialize", "classlibdap_1_1Int64.html#adc24a735977e28acb0e6f78667c1dd21", null ], - [ "set_attr_table", "classlibdap_1_1Int64.html#a572a1d76a75981abac83a4241e90c0fa", null ], - [ "set_attributes", "classlibdap_1_1Int64.html#ad4dda4cf43dca838d3de183b8e01cd09", null ], - [ "set_attributes_nocopy", "classlibdap_1_1Int64.html#afd0e5f87d19020f560d5c1ff8dd4d6a3", null ], - [ "set_in_selection", "classlibdap_1_1Int64.html#a2bc036248cdaf1affac464170f32ad30", null ], - [ "set_is_dap4", "classlibdap_1_1Int64.html#abca9ddaa9a1ada8447cbe7193e8e288a", null ], - [ "set_length", "classlibdap_1_1Int64.html#a4fe343c1eeb6fb1d61ab030433651d90", null ], - [ "set_name", "classlibdap_1_1Int64.html#a86504564f45a3e6748c6f1cc0ff4e9fa", null ], - [ "set_parent", "classlibdap_1_1Int64.html#a5b6a39f6ce6594fa74f3fc899ac9a966", null ], - [ "set_read_p", "classlibdap_1_1Int64.html#a4533905a450d2a7af32e7d5acd557676", null ], - [ "set_send_p", "classlibdap_1_1Int64.html#aba7b27635c95b74536de18393133628e", null ], - [ "set_synthesized_p", "classlibdap_1_1Int64.html#a595cb4059cff24f801a1b6da79bd2f9e", null ], - [ "set_type", "classlibdap_1_1Int64.html#af74f8d1ef57c9fcca46f620f75d175a3", null ], - [ "set_value", "classlibdap_1_1Int64.html#a15db735ca24143c3a4f67a2c250eba5e", null ], - [ "synthesized_p", "classlibdap_1_1Int64.html#ae64e677da27249473cdba0b60cdbb90a", null ], - [ "toString", "classlibdap_1_1Int64.html#a701eb3361f5b5628329ece019cd34519", null ], - [ "transfer_attributes", "classlibdap_1_1Int64.html#add8e836c622042a339152a6c31e5bdfb", null ], - [ "transform_to_dap2", "classlibdap_1_1Int64.html#ac95e288099ac33fa8a6b0197ef315f08", null ], - [ "transform_to_dap4", "classlibdap_1_1Int64.html#adb03e2e1e40c3c888577c4666831a949", null ], - [ "type", "classlibdap_1_1Int64.html#af8e803b20a7a7dc5f2ef351d7fac4a56", null ], - [ "type_name", "classlibdap_1_1Int64.html#a18a42c8ec35cb5b15cd651a4152f8a2c", null ], - [ "value", "classlibdap_1_1Int64.html#ac7c2c886f37a5870b667b76f9dac8511", null ], - [ "var", "classlibdap_1_1Int64.html#a4dc4fac1bb6083f6db645f37bfd59b85", null ], - [ "var", "classlibdap_1_1Int64.html#adecfc442b5927c79933c7f71cfe03fd2", null ], - [ "width", "classlibdap_1_1Int64.html#a2f157a10955f9b51973863e4683462d6", null ], - [ "d_buf", "classlibdap_1_1Int64.html#aedef6b320401ffee13c8f1ea4ca4cf76", null ], - [ "d_in_selection", "classlibdap_1_1Int64.html#a949a89714965d7afdcd1e3edc8b7f0d4", null ], - [ "d_is_synthesized", "classlibdap_1_1Int64.html#a629e97e8eb7d285b54c9af8c1ec9a29a", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1Int64__inherit__graph.map b/html/classlibdap_1_1Int64__inherit__graph.map deleted file mode 100644 index 47d8c1389..000000000 --- a/html/classlibdap_1_1Int64__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1Int64__inherit__graph.md5 b/html/classlibdap_1_1Int64__inherit__graph.md5 deleted file mode 100644 index 6f1c6a321..000000000 --- a/html/classlibdap_1_1Int64__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -24abc7e35ec68282445653cbd3b38db9 \ No newline at end of file diff --git a/html/classlibdap_1_1Int64__inherit__graph.png b/html/classlibdap_1_1Int64__inherit__graph.png deleted file mode 100644 index 1c262e56a8c25da9aec129df97bb592652ca09d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62417 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�FF%siM zceLe@sIQ>Cd@A^RG{&mE{kV7)bY#A{F6e+Ky>6Pc^fZVrW+J>A0Ts_TfE(!PBNH;;2Os-!B^tg0WMwa60-^jaM+0?o9 z3w4RU;}M?Gf3xDjsU_Z1=@itd}yo4+vC2RYJkd|$?VtdX|Im!2~97AZYW z$Qr4`+7Sacu!n)mR(>wEF+vzu92ADRN3E$=LO*pn?i`6%S8o-LJcd-zo+uNIZU)~x86|U{ABy!J zczMP;M}TYnDh$#Q(0TCXfM9q+S|d|rW?xmB;fyMPlZS!?EAyJD-xi2V{T0`&&oygg z5%6*l-U9>e^~Q6QjMmv4jR*$|ZJR+dQNZK67Al`Je!Bd;8q7}6WndnA=Z}VNtPedh zP`FdeHQSGM5LJq}c=cg=F74gpH}nMuqp@l?fjctX_6QvZ8H&}^B4`?8E9S1!v6hC# zMA1R=5NFHds|G9fFa>aZE1-!Bkf&aat!EQXswP;b5rVttFP|O|2%{|xd}xXumzyTw zz-dYo-^x78vKaFu!!e4CI~zqZtxV}I`|iVMw>oLHk=v+aK}io}@aWUlHSje<(fZmY zlD<5NX0P*`dl6>k<@H5&pC+prwyD%#^)J2Px5dtc4T7@pEpjAtA-$E7nLoK<<8Oj_wjLiJ39XM zn`CXS`9WcFZlCB4L!TauFB5SNYz3IF_&{&4<3h ze!j%#w88fz-#GQ5AVHuvn?ce`9;CkE@NTePwcX5lox;S7Jnl!Th1!Wk^*|A#Fy#6B ze)d-@Vf>P)GLVv`TNb>-&ZSdd!Y!L0_HqY~?b+ys(`}2D-shWFpBj%#G%w&~ADOB>`WL^kef(DmNr~>v9u?)53m^mEb8lW=X-VY zmzm(nzDu!G`t@_`57)899&r`oB+ir-SUS8+Pq5&qyYKKhQtairD*}VIa z!pOy(Yh4{0!sr+62NKx>rf|DQE+mnA0Fb8gmL{|lw69&vMznTkk04^2kH-J|T@zB| z4(A-##~y^-_MBTK-45Tg_pvt^c<<)j3&rODSB+R<7;v*$M&sh?bbo#JXxpY;ndQ6n z_q=B)?d-3eNb%-B_OodxG|JYDm?Pg_c3bw^zE9a36%F_r@Xiy

    mR;E(dwA4LMFU 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%0A!;VI7uH* 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 - - - - - - -libdap: Member List - - - - - - - - - - - -

    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::Int8 Member List
    -
    -
    - -

    This is the complete list of members for libdap::Int8, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    add_var(BaseType *bt, Part part=nil)libdap::BaseTypevirtual
    add_var_nocopy(BaseType *bt, Part part=nil) (defined in libdap::BaseType)libdap::BaseTypevirtual
    attributes()libdap::BaseTypevirtual
    BaseType(const string &n, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const string &n, const string &d, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const BaseType &copy_from)libdap::BaseType
    btp_stack typedef (defined in libdap::BaseType)libdap::BaseType
    check_semantics(string &msg, bool all=false)libdap::BaseTypevirtual
    clear_local_data()libdap::BaseTypeinlinevirtual
    compute_checksum(Crc32 &checksum)libdap::Int8virtual
    d4_ops(BaseType *b, int op)libdap::Int8virtual
    d_buf (defined in libdap::Int8)libdap::Int8protected
    d_in_selection (defined in libdap::BaseType)libdap::BaseTypeprotected
    d_is_synthesized (defined in libdap::BaseType)libdap::BaseTypeprotected
    dataset() constlibdap::BaseTypevirtual
    deserialize(D4StreamUnMarshaller &um, DMR &dmr)libdap::Int8virtual
    libdap::BaseType::deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)libdap::BaseTypevirtual
    dump(ostream &strm) constlibdap::Int8virtual
    element_count(bool leaves=false)libdap::BaseTypevirtual
    FQN() constlibdap::BaseTypevirtual
    get_attr_table()libdap::BaseTypevirtual
    get_parent() constlibdap::BaseTypevirtual
    Int8(const string &n)libdap::Int8
    Int8(const string &n, const string &d)libdap::Int8
    Int8(const Int8 &copy_from) (defined in libdap::Int8)libdap::Int8
    intern_data(ConstraintEvaluator &eval, DDS &dds)libdap::BaseTypevirtual
    intern_data()libdap::BaseTypevirtual
    is_constructor_type() constlibdap::BaseTypevirtual
    is_dap4() const (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    is_in_selection()libdap::BaseTypevirtual
    is_simple_type() constlibdap::BaseTypevirtual
    is_vector_type() constlibdap::BaseTypevirtual
    length() constlibdap::BaseTypeinlinevirtual
    m_duplicate(const BaseType &bt)libdap::BaseTypeprotected
    name() constlibdap::BaseTypevirtual
    operator=(const Int8 &rhs) (defined in libdap::Int8)libdap::Int8
    operator=(const BaseType &rhs) (defined in libdap::BaseType)libdap::BaseType
    ops(BaseType *b, int op)libdap::Int8virtual
    print_dap4(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
    print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_val(ostream &out, string space="", bool print_decl_p=true)libdap::Int8virtual
    print_xml(FILE *out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml(ostream &out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml_writer(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
    ptr_duplicate()libdap::Int8virtual
    read()libdap::BaseTypevirtual
    read_p()libdap::BaseTypevirtual
    send_p()libdap::BaseTypevirtual
    serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)libdap::Int8virtual
    libdap::BaseType::serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)libdap::BaseTypevirtual
    set_attr_table(const AttrTable &at)libdap::BaseTypevirtual
    set_attributes(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_attributes_nocopy(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_in_selection(bool state)libdap::BaseTypevirtual
    set_is_dap4(const bool v) (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    set_length(int)libdap::BaseTypeinlinevirtual
    set_name(const string &n)libdap::BaseTypevirtual
    set_parent(BaseType *parent)libdap::BaseTypevirtual
    set_read_p(bool state)libdap::BaseTypevirtual
    set_send_p(bool state)libdap::BaseTypevirtual
    set_synthesized_p(bool state)libdap::BaseTypevirtual
    set_type(const Type &t)libdap::BaseTypevirtual
    set_value(dods_int8 val) (defined in libdap::Int8)libdap::Int8virtual
    synthesized_p()libdap::BaseTypevirtual
    toString()libdap::BaseTypevirtual
    transfer_attributes(AttrTable *at)libdap::BaseTypevirtual
    transform_to_dap2(AttrTable *parent_attr_table)libdap::Int8virtual
    transform_to_dap4(D4Group *root, Constructor *container)libdap::BaseTypevirtual
    type() constlibdap::BaseTypevirtual
    type_name() constlibdap::BaseTypevirtual
    value() const (defined in libdap::Int8)libdap::Int8virtual
    var(const string &name="", bool exact_match=true, btp_stack *s=0)libdap::BaseTypevirtual
    var(const string &name, btp_stack &s)libdap::BaseTypevirtual
    width(bool constrained=false) constlibdap::Int8virtual
    ~BaseType() (defined in libdap::BaseType)libdap::BaseTypevirtual
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    ~Int8() (defined in libdap::Int8)libdap::Int8inlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1Int8.html b/html/classlibdap_1_1Int8.html deleted file mode 100644 index ed43b0c7c..000000000 --- a/html/classlibdap_1_1Int8.html +++ /dev/null @@ -1,2752 +0,0 @@ - - - - - - - -libdap: libdap::Int8 Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    - -

    Holds an 8-bit signed integer value. - More...

    - -

    #include <Int8.h>

    -
    -Inheritance diagram for libdap::Int8:
    -
    -
    Inheritance graph
    - - - - -
    - - - - -

    -Public Types

    -typedef stack< BaseType * > btp_stack
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual void add_var (BaseType *bt, Part part=nil)
     Add a variable. More...
     
    -virtual void add_var_nocopy (BaseType *bt, Part part=nil)
     
    virtual bool check_semantics (string &msg, bool all=false)
     Compare an object's current state with the semantics of its type. More...
     
    virtual void clear_local_data ()
     
    virtual void compute_checksum (Crc32 &checksum)
     include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum. More...
     
    virtual bool d4_ops (BaseType *b, int op)
     
    virtual string dataset () const
     Returns the name of the dataset used to create this instance. More...
     
    virtual void deserialize (D4StreamUnMarshaller &um, DMR &dmr)
     
    virtual void dump (ostream &strm) const
     dumps information about this object More...
     
    virtual int element_count (bool leaves=false)
     Count the members of constructor types. More...
     
    virtual std::string FQN () const
     
    virtual AttrTableget_attr_table ()
     
    virtual BaseTypeget_parent () const
     
     Int8 (const string &n)
     
     Int8 (const string &n, const string &d)
     
    Int8 (const Int8 &copy_from)
     
    virtual bool is_constructor_type () const
     Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable. More...
     
    -virtual bool is_dap4 () const
     
    virtual bool is_in_selection ()
     Is this variable part of the current selection? More...
     
    virtual bool is_simple_type () const
     Returns true if the instance is a numeric, string or URL type variable. More...
     
    virtual bool is_vector_type () const
     Returns true if the instance is a vector (i.e., array) type variable. More...
     
    virtual int length () const
     How many elements are in this variable. More...
     
    virtual string name () const
     Returns the name of the class instance. More...
     
    -Int8operator= (const Int8 &rhs)
     
    virtual bool ops (BaseType *b, int op)
     Evaluate relational operators. More...
     
    virtual void print_dap4 (XMLWriter &xml, bool constrained=false)
     
    virtual void print_decl (FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_decl (ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_val (ostream &out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_xml (FILE *out, string space=" ", bool constrained=false)
     
    virtual void print_xml (ostream &out, string space=" ", bool constrained=false)
     
    virtual void print_xml_writer (XMLWriter &xml, bool constrained=false)
     
    virtual BaseTypeptr_duplicate ()
     
    virtual bool read ()
     Read data into a local buffer. More...
     
    virtual bool read_p ()
     Has this variable been read? More...
     
    virtual bool send_p ()
     Should this variable be sent? More...
     
    virtual void serialize (D4StreamMarshaller &m, DMR &dmr, bool filter=false)
     Serialize an Int8. More...
     
    virtual void set_attr_table (const AttrTable &at)
     
    virtual void set_in_selection (bool state)
     
    -virtual void set_is_dap4 (const bool v)
     
    virtual void set_length (int)
     Set the number of elements for this variable. More...
     
    virtual void set_name (const string &n)
     Sets the name of the class instance. More...
     
    virtual void set_parent (BaseType *parent)
     
    virtual void set_read_p (bool state)
     Sets the value of the read_p property. More...
     
    virtual void set_send_p (bool state)
     
    virtual void set_synthesized_p (bool state)
     
    virtual void set_type (const Type &t)
     Sets the type of the class instance. More...
     
    -virtual bool set_value (dods_int8 val)
     
    virtual bool synthesized_p ()
     
    virtual string toString ()
     
    virtual void transfer_attributes (AttrTable *at)
     
    virtual std::vector< BaseType * > * transform_to_dap2 (AttrTable *parent_attr_table)
     DAP4 to DAP2 transform. More...
     
    virtual void transform_to_dap4 (D4Group *root, Constructor *container)
     DAP2 to DAP4 transform. More...
     
    virtual Type type () const
     Returns the type of the class instance. More...
     
    virtual string type_name () const
     Returns the type of the class instance as a string. More...
     
    -virtual dods_int8 value () const
     
    virtual BaseTypevar (const string &name="", bool exact_match=true, btp_stack *s=0)
     Returns a pointer to a member of a constructor class. More...
     
    virtual BaseTypevar (const string &name, btp_stack &s)
     
    virtual unsigned int width (bool constrained=false) const
     How many bytes does this variable use Return the number of bytes of storage this variable uses. For scalar types, this is pretty simple (an int32 uses 4 bytes, etc.). For arrays and Constructors, it is a bit more complex. Note that a scalar String variable uses sizeof(String*) bytes, not the length of the string value. The width() of a String array returns the number of elements in the array times sizeof(String*). More...
     
    virtual D4Attributesattributes ()
     
    -virtual void set_attributes (D4Attributes *)
     
    -virtual void set_attributes_nocopy (D4Attributes *)
     
    Abstract Methods
    virtual void intern_data (ConstraintEvaluator &eval, DDS &dds)
     
    virtual void intern_data ()
     Read data into this variable. More...
     
    virtual bool serialize (ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
     Move data to the net, then remove them from the object. More...
     
    virtual bool deserialize (UnMarshaller &um, DDS *dds, bool reuse=false)
     Receive data from the net. More...
     
    - - - - -

    -Protected Member Functions

    void m_duplicate (const BaseType &bt)
     Perform a deep copy. More...
     
    - - - - - - - -

    -Protected Attributes

    -dods_int8 d_buf
     
    -bool d_in_selection
     
    -bool d_is_synthesized
     
    -

    Detailed Description

    -

    Holds an 8-bit signed integer value.

    - -

    Definition at line 42 of file Int8.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ Int8() [1/2]

    - -
    -
    - - - - - - - - -
    libdap::Int8::Int8 (const string & n)
    -
    -

    The Int8 constructor accepts the name of the variable to be created.

    -
    Note
    This type is available in DAP4 only. See http://docs.opendap.org/index.php/DAP4:_Specification_Volume_1#Atomic_Types
    -
    Parameters
    - - -
    nA string containing the name of the variable to be created.
    -
    -
    - -

    Definition at line 68 of file Int8.cc.

    - -
    -
    - -

    ◆ Int8() [2/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    libdap::Int8::Int8 (const string & n,
    const string & d 
    )
    -
    -

    The Int8 server-side constructor accepts the name of the variable and the dataset name from which this instance is created. This is a signed 8-bit integer and was added for DAP4; Byte and UInt8 are unsigned 8-bit integers.

    -
    Note
    This integer type cannot be used with DAP2; it is only present in DAP4. See http://docs.opendap.org/index.php/DAP4:_Specification_Volume_1#Atomic_Types.
    -
    Parameters
    - - - -
    nA string containing the name of the variable to be created.
    dA string containing the name of the dataset from which this variable is created
    -
    -
    - -

    Definition at line 83 of file Int8.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ add_var()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::add_var (BaseTypebt,
    Part part = nil 
    )
    -
    -virtualinherited
    -
    - -

    Add a variable.

    -

    Adds a variable to an instance of a constructor class, such as Array, Structure et cetera. This function is only used by those classes. For constructors with more than one variable, the variables appear in the same order in which they were added (i.e., the order in which add_var() was called). Since this method is only for use by Vectors and Constructors, the BaseType implementation throws InternalErr.

    -
    Note
    For the implementation of this method in Structure, Sequence, et c., first copy bt and then insert the copy. If bt is itself a constructor type you must either use the var() method to get a pointer to the actual instance added to *this or you must first add all of bt's children to it before adding it to *this. The implementations should use m_duplicate() to perform a deep copy of bt.
    -
    Todo:
    We should get rid of the Part parameter and adopt the convention that the first variable is the Array and all subsequent ones are Maps (when dealing with a Grid, the only time Part matters). This would enable several methods to migrate from Structure, Sequence and Grid to Constructor.
    -
    Parameters
    - - - -
    btThe variable to be added to this instance. The caller of this method must free memory it allocates for v. This method will make a deep copy of the object pointed to by v.
    partThe part of the constructor data to be modified. Only meaningful for Grid variables.
    -
    -
    -
    See also
    Part
    - -

    Reimplemented in libdap::Vector, libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 815 of file BaseType.cc.

    - -
    -
    - -

    ◆ attributes()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4Attributes * libdap::BaseType::attributes ()
    -
    -virtualinherited
    -
    -

    DAP4 Attribute methods

    - -

    Definition at line 599 of file BaseType.cc.

    - -
    -
    - -

    ◆ check_semantics()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::check_semantics (string & msg,
    bool all = false 
    )
    -
    -virtualinherited
    -
    - -

    Compare an object's current state with the semantics of its type.

    -

    This function checks the class instance for internal consistency. This is important to check for complex constructor classes. For BaseType, an object is semantically correct if it has both a non-null name and type.

    -

    For example, an Int32 instance would return FALSE if it had no name or no type defined. A Grid instance might return FALSE for more complex reasons, such as having Map arrays of the wrong size or shape.

    -

    This function is used by the DDS class, and will rarely, if ever, be explicitly called by a DODS application program. A variable must pass this test before it is sent, but there may be many other stages in a retrieve operation where it would fail.

    -
    Returns
    Returns FALSE when the current state violates some aspect of the type semantics, TRUE otherwise.
    -
    Parameters
    - - - -
    msgA returned string, containing a message indicating the source of any problem.
    allFor complex constructor types (Grid, Sequence, Structure), this flag indicates whether to check the semantics of the member variables, too.
    -
    -
    -
    See also
    DDS::check_semantics
    - -

    Reimplemented in libdap::Array, libdap::Vector, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1209 of file BaseType.cc.

    - -
    -
    - -

    ◆ clear_local_data()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual void libdap::BaseType::clear_local_data ()
    -
    -inlinevirtualinherited
    -
    -

    Remove any read or set data in the private data of the variable, setting read_p() to false. Used to clear any dynamically allocated storage that holds (potentially large) data. For the simple types, this no-op version is all that's needed. Vector and some other classes define a special version and have serialize() implementations that call it to free data as soon as possible after sending it.

    -
    Note
    Added 7/5/15 jhrg
    -
    -Any specialization of this should make sure to reset the read_p property.
    - -

    Reimplemented in libdap::Sequence, libdap::Vector, libdap::D4Sequence, and libdap::D4Opaque.

    - -

    Definition at line 179 of file BaseType.h.

    - -
    -
    - -

    ◆ compute_checksum()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Int8::compute_checksum (Crc32checksum)
    -
    -virtual
    -
    - -

    include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum.

    -
    Parameters
    - - -
    checksumA Crc32 instance that holds the current checksum.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 117 of file Int8.cc.

    - -
    -
    - -

    ◆ d4_ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::Int8::d4_ops (BaseTypeb,
    int op 
    )
    -
    -virtual
    -
    -
    See also
    BaseType::d4_ops(BaseType *, int)
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 187 of file Int8.cc.

    - -
    -
    - -

    ◆ dataset()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::dataset () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the dataset used to create this instance.

    -

    A dataset from which the data is to be read. The meaning of this string will vary among different types of data sources. It may be the name of a data file or an identifier used to read data from a relational database.

    - -

    Definition at line 358 of file BaseType.cc.

    - -
    -
    - -

    ◆ deserialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Int8::deserialize (D4StreamUnMarshallerum,
    DMRdmr 
    )
    -
    -virtual
    -
    -

    The DAP4 deserialization method.

    Parameters
    - - - -
    um
    dmr
    -
    -
    -
    Exceptions
    - - -
    Erroror InternalErr
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 140 of file Int8.cc.

    - -
    -
    - -

    ◆ deserialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::deserialize (UnMarshallerum,
    DDSdds,
    bool reuse = false 
    )
    -
    -virtualinherited
    -
    - -

    Receive data from the net.

    -

    Receives data from the network connection identified by the source parameter. The data is put into the class data buffer according to the input dds.

    -

    This function is only used on the client side of the DODS client/server connection.

    -
    Parameters
    - - - - -
    umAn UnMarshaller that knows how to deserialize data types
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure. This would have been received from the server in an earlier transmission.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect.
    -
    -
    -
    Returns
    Always returns TRUE.
    -
    Exceptions
    - - -
    Errorwhen a problem reading from the UnMarshaller is found.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, libdap::Constructor, libdap::Str, libdap::Int32, libdap::Byte, libdap::Float32, libdap::Float64, libdap::UInt32, libdap::Int16, libdap::UInt16, and libdap::D4Opaque.

    - -

    Definition at line 943 of file BaseType.cc.

    - -
    -
    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Int8::dump (ostream & strm) const
    -
    -virtual
    -
    - -

    dumps information about this object

    -

    Displays the pointer value of this instance and information about this instance.

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the information to
    -
    -
    -
    Returns
    void
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 254 of file Int8.cc.

    - -
    -
    - -

    ◆ element_count()

    - -
    -
    - - - - - -
    - - - - - - - - -
    int libdap::BaseType::element_count (bool leaves = false)
    -
    -virtualinherited
    -
    - -

    Count the members of constructor types.

    -

    Return a count of the total number of variables in this variable. This is used to count the number of variables held by a constructor variable - for simple type and vector variables it always returns 1.

    -

    For compound data types, there are two ways to count members. You can count the members, or you can count the simple members and add that to the count of the compound members. For example, if a Structure contains an Int32 and another Structure that itself contains two Int32 members, the element count of the top-level structure could be two (one Int32 and one Structure) or three (one Int32 by itself and two Int32's in the subsidiary Structure). Use the leaves parameter to control which kind of counting you desire.

    -
    Returns
    Returns 1 for simple types. For compound members, the count depends on the leaves argument.
    -
    Parameters
    - - -
    leavesThis parameter is only relevant if the object contains other compound data types. If FALSE, the function counts only the data variables mentioned in the object's declaration. If TRUE, it counts the simple members, and adds that to the sum of the counts for the compound members. This parameter has no effect for simple type variables.
    -
    -
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 443 of file BaseType.cc.

    - -
    -
    - -

    ◆ FQN()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::FQN () const
    -
    -virtualinherited
    -
    -

    Return the FQN for this variable. This will include the D4 Group component of the name.

    -
    Returns
    The FQN in a string
    - -

    Reimplemented in libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 332 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - -
    AttrTable & libdap::BaseType::get_attr_table ()
    -
    -virtualinherited
    -
    -

    Get this variable's AttrTable. It's generally a bad idea to return a reference to a contained object, but in this case it seems that building an interface inside BaseType is overkill.

    -

    Use the AttrTable methods to manipulate the table.

    - -

    Definition at line 582 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_parent()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::BaseType::get_parent () const
    -
    -virtualinherited
    -
    -

    Return a pointer to the Constructor or Vector which holds (contains) this variable. If this variable is at the top level, this method returns null.

    -
    Returns
    A BaseType pointer to the variable's parent.
    - -

    Definition at line 751 of file BaseType.cc.

    - -
    -
    - -

    ◆ intern_data() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::intern_data (ConstraintEvaluatoreval,
    DDSdds 
    )
    -
    -virtualinherited
    -
    -

    Similar to using serialize() and deserialize() together in one object. Data are read as for serialize and those values are stored in the objects as deserialize() does but does not write and then read data to/from a stream.

    -

    This method is defined by the various data type classes. It calls the read() abstract method. Unlike serialize(), this method does not clear the memory use to hold the data values, so the caller should make sure to delete the DDS or the variable as soon as possible.

    -
    Parameters
    - - - -
    evalUse this as the constraint expression evaluator.
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    -
    -
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 908 of file BaseType.cc.

    - -
    -
    - -

    ◆ intern_data() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::BaseType::intern_data ()
    -
    -virtualinherited
    -
    - -

    Read data into this variable.

    -
    Parameters
    - - - -
    evalEvaluator for a constraint expression
    dmrDMR for the whole dataset
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 927 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_constructor_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_constructor_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable.

    -
    Returns
    True if the instance is a Structure, Sequence or Grid, False otherwise.
    - -

    Definition at line 412 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_in_selection ()
    -
    -virtualinherited
    -
    - -

    Is this variable part of the current selection?

    -

    Does this variable appear in either the selection part or as a function argument in the current constrain expression. If this property is set (true) then implementations of the read() method should read this variable.

    -
    Note
    This method does not check, nor does it know about the semantics of, string arguments passed to functions. Those functions might include variable names in strings; they are responsible for reading those variables. See the grid (func_grid_select()) for an example.
    -
    See also
    BaseType::read()
    - -

    Definition at line 703 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_simple_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_simple_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a numeric, string or URL type variable.

    -
    Returns
    True if the instance is a scalar numeric, String or URL variable, False otherwise. Arrays (even of simple types) return False.
    -
    See also
    is_vector_type()
    - -

    Definition at line 393 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_vector_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_vector_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a vector (i.e., array) type variable.

    -
    Returns
    True if the instance is an Array, False otherwise.
    - -

    Definition at line 402 of file BaseType.cc.

    - -
    -
    - -

    ◆ length()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual int libdap::BaseType::length () const
    -
    -inlinevirtualinherited
    -
    - -

    How many elements are in this variable.

    -
    Todo:
    change the return type to int64_t
    -
    Returns
    The number of elements; 1 for scalars
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, libdap::Str, and libdap::D4Opaque.

    - -

    Definition at line 207 of file BaseType.h.

    - -
    -
    - -

    ◆ m_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::m_duplicate (const BaseTypebt)
    -
    -protectedinherited
    -
    - -

    Perform a deep copy.

    -

    Perform a deep copy. Copies the values of bt into *this. Pointers are dereferenced and their values are copied into a newly allocated instance.

    -
    Parameters
    - - -
    btThe source object.
    -
    -
    - -

    Definition at line 86 of file BaseType.cc.

    - -
    -
    - -

    ◆ name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::name () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the class instance.

    - -

    Definition at line 320 of file BaseType.cc.

    - -
    -
    - -

    ◆ ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::Int8::ops (BaseTypeb,
    int op 
    )
    -
    -virtual
    -
    - -

    Evaluate relational operators.

    -

    This method contains the relational operators used by the constraint expression evaluator in the DDS class. Each class that wants to be able to evaluate relational expressions must overload this function. The implementation in BaseType throws an InternalErr exception. The DAP library classes Byte, ..., Url provide specializations of this method. It is not meaningful for classes such as Array because relational expressions using Array are not supported.

    -

    The op argument refers to a table generated by bison from the constraint expression parser. Use statements like the following to correctly interpret its value:

    -
    switch (op) {
    -    case EQUAL: return i1 == i2;
    -    case NOT_EQUAL: return i1 != i2;
    -    case GREATER: return i1 > i2;
    -    case GREATER_EQL: return i1 >= i2;
    -    case LESS: return i1 < i2;
    -    case LESS_EQL: return i1 <= i2;
    -    case REGEXP: throw Error("Regular expressions are not supported for integer values");
    -    default: throw Error("Unknown operator");
    -}
    -

    This function is used by the constraint expression evaluator.

    -
    Parameters
    - - - -
    bCompare the value of this instance with b.
    opAn integer index indicating which relational operator is implied. Choose one from the following: EQUAL, NOT_EQUAL, GREATER, GREATER_EQL, LESS, LESS_EQL, and REGEXP.
    -
    -
    -
    Returns
    The boolean value of the comparison.
    -
    See also
    BaseType::d4_ops(BaseType *, int)
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 171 of file Int8.cc.

    - -
    -
    - -

    ◆ print_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_dap4 (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the DAP4 XML representation for this variable. This method is used to build the DAP4 DMR response object.

    -
    Parameters
    - - - -
    xmlAn XMLWriter that will do the serialization
    constrainedTrue if the response should show the variables subject to the current constraint expression.
    -
    -
    - -

    Reimplemented in libdap::Array, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 1164 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (FILE * out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1003 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (ostream & out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1054 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_val()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Int8::print_val (ostream & out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtual
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output ostream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 160 of file Int8.cc.

    - -
    -
    - -

    ◆ print_xml() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (FILE * out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination.
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1105 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (ostream & out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1120 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml_writer()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml_writer (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    - -

    Reimplemented in libdap::Array, libdap::D4Enum, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1134 of file BaseType.cc.

    - -
    -
    - -

    ◆ ptr_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::Int8::ptr_duplicate ()
    -
    -virtual
    -
    -

    Clone this instance. Allocate a new instance and copy *this into it. This method must perform a deep copy.

    @note This method should \e not copy data values, but must copy all
    -other fields in the object.
    -
    Returns
    A newly allocated copy of this.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 92 of file Int8.cc.

    - -
    -
    - -

    ◆ read()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read ()
    -
    -virtualinherited
    -
    - -

    Read data into a local buffer.

    -

    This method should be implemented for each of the data type classes (Byte, ..., Grid) when using the DAP class library to build a server. This method is only for DAP servers. The library provides a default definition here which throws an InternalErr exception unless the read_p property has been set. In that case it returns false, indicating that all the data have been read. The latter case can happen when building a constant value that needs to be passed to a function. The variable/constant is loaded with a value when it is created.

    -

    When implementing a new DAP server, the Byte, ..., Grid data type classes are usually specialized. In each of those specializations read() should be defined to read values from the data source and store them in the object's local buffer. The read() method is called by other methods in this library. When writing read(), follow these rules:

    -
      -
    • -read() should throw Error if it encounters an error. The message should be verbose enough to be understood by someone running a client on a different machine.
    • -
    • -The value(s) should be read if and only if either send_p() or is_in_selection() return true. If neither of these return true, the value(s) should not be read. This is important when writing read() for a Constructor type such as Grid where a client may ask for only the map vectors (and thus reading the much larger Array part is not needed).
    • -
    • -For each specialization of read(), the method should first test the value of the read_p property (using the read_p() method) and read values only if the value of read_p() is false. Once the read() method reads data and stores it in the instance, it must set the value of the read_p property to true using set_read_p(). If your read() methods fail to do this data may not serialize correctly.
    • -
    • -The Array::read() and Grid::read() methods should take into account any restrictions on Array sizes.
    • -
    • -If you are writing Sequence::read(), be sure to check the documentation for Sequence::read_row() and Sequence::serialize() so you understand how Sequence::read() is being called.
    • -
    • -

      For Sequence::read(), your specialization must correctly manage the unsent_data property and row count in addition to the read_p property (handle the read_p property as describe above). For a Sequence to serialize correctly, once all data from the Sequence has been read, unsent_data property must be set to false (use Sequence::set_unsent_data()). Also, at that time the row number counter must be reset (use Sequence::reset_row_counter()). Typically the correct time to set unsent_data to false and reset the row counter is the time when Sequence::read() return false indicating that all the data for the Sequence have been read. Failure to handle these tasks will break serialization of nested Sequences. Note that when Sequence::read() returns with a result of true (indicating there is more data to send, the value of the unsent_data property should be true.

      -

      Also, if you server must handle nested sequences, be sure to read about subclassing set_read_p().

      -
    • -
    -
    Todo:
    Modify the D4 serialize code so that it supports the true/false behavior of read() for arrays.
    -
    Todo:
    Modify all of the stock handlers so they conform to this!
    -
    Returns
    False means more data remains to be read, True indicates that no more data need to be read. For Sequence and D4Sequence, this method will generally read one instance of the Sequence; for other types it will generally read the entire variable modulo any limitations due to a constraint. However, the library should be written so that read can return less than all of the data for a variable - serialize() would then call the function until it returns True.
    -
    See also
    BaseType
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 899 of file BaseType.cc.

    - -
    -
    - -

    ◆ read_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read_p ()
    -
    -virtualinherited
    -
    - -

    Has this variable been read?

    -

    Returns true if the value(s) for this variable have been read from the data source, otherwise returns false. This method is used to determine when values need to be read using the read() method. When read_p() returns true, this library assumes that buf2val() (and other methods such as get_vec()) can be used to access the value(s) of a variable.

    -
    Returns
    True if the variable's value(s) have been read, false otherwise.
    - -

    Definition at line 480 of file BaseType.cc.

    - -
    -
    - -

    ◆ send_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::send_p ()
    -
    -virtualinherited
    -
    - -

    Should this variable be sent?

    -

    Returns the state of the send_p property. If true, this variable should be sent to the client, if false, it should not. If no constraint expression (CE) has been evaluated, this property is true for all variables in a data source (i.e., for all the variables listed in a DDS). If a CE has been evaluated, this property is true only for those variables listed in the projection part of the CE.

    -
    Returns
    True if the variable should be sent to the client, false otherwise.
    - -

    Definition at line 554 of file BaseType.cc.

    - -
    -
    - -

    ◆ serialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Int8::serialize (D4StreamMarshallerm,
    DMRdmr,
    bool filter = false 
    )
    -
    -virtual
    -
    - -

    Serialize an Int8.

    -
    Parameters
    - - - - - -
    m
    dmrUnused
    evalUnused
    filterUnused
    -
    -
    -
    Exceptions
    - - -
    Erroris thrown if the value needs to be read and that operation fails.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 131 of file Int8.cc.

    - -
    -
    - -

    ◆ serialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::serialize (ConstraintEvaluatoreval,
    DDSdds,
    Marshallerm,
    bool ce_eval = true 
    )
    -
    -virtualinherited
    -
    - -

    Move data to the net, then remove them from the object.

    -

    Sends the data from the indicated (local) dataset through the connection identified by the Marshaller parameter. If the data is not already incorporated into the DDS object, read the data from the dataset. Once the data are sent (written to the Marshaller), they are deleted from the object and the object state is reset so that they will be read again if the read() method is called.

    -

    This function is only used on the server side of the client/server connection, and is generally only called from the ResponseBuilder functions. It has no BaseType implementation; each datatype child class supplies its own implementation.

    @param eval Use this as the constraint expression evaluator.
    -
    Parameters
    - - - - -
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    mA marshaller used to serialize data types
    ce_evalA boolean value indicating whether to evaluate the DODS constraint expression that may accompany this dataset. The constraint expression is stored in the dds.
    -
    -
    -
    Returns
    This method always returns true. Older versions used the return value to signal success or failure.
    -
    Note
    We changed the default behavior of this method so that it calls BaseType::clear_local_data() once the values are sent. This, combined with the behavior that read() is called by this method just before data are sent, means that data for any given variable remain in memory for the shortest time possible. Furthermore, since variables are serialized one at a time, no more than one variable's data will be in memory at any given time when using the default behavior. Some code - code that uses intern_data() or server functions - might alter this default behavior. Only Array (i.e. Vector), Sequence, D4Sequence and D4Opaque types actually hold data in dynamically allocated memory, so sonly those types have the new/changed behavior. This change was made on 7/5/15.
    -
    Exceptions
    - - - -
    InternalErr.
    Error.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, libdap::Constructor, libdap::Str, libdap::Int32, libdap::Byte, libdap::Float32, libdap::Float64, libdap::UInt32, libdap::Int16, libdap::UInt16, and libdap::D4Opaque.

    - -

    Definition at line 937 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_attr_table (const AttrTableat)
    -
    -virtualinherited
    -
    -

    Set this variable's attribute table.

    Parameters
    - - -
    atSource of the attributes.
    -
    -
    - -

    Definition at line 590 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_in_selection (bool state)
    -
    -virtualinherited
    -
    -

    Set the in_selection property to state. This property indicates that the variable is used as a parameter to a constraint expression function or that it appears as an argument in a selection sub-expression. If set (true), implementations of the BaseType::read() method should read this variable.

    -
    Parameters
    - - -
    stateSet the in_selection property to this state.
    -
    -
    -
    See also
    BaseType::read()
    -
    -BaseType::is_in_selection() for more information.
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 718 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_length()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::BaseType::set_length (int )
    -
    -inlinevirtualinherited
    -
    - -

    Set the number of elements for this variable.

    -
    Todo:
    change param type to int64_t
    -
    Parameters
    - - -
    lThe number of elements
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, and libdap::Vector.

    - -

    Definition at line 214 of file BaseType.h.

    - -
    -
    - -

    ◆ set_name()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_name (const string & n)
    -
    -virtualinherited
    -
    - -

    Sets the name of the class instance.

    - -

    Reimplemented in libdap::Vector.

    - -

    Definition at line 344 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_parent()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_parent (BaseTypeparent)
    -
    -virtualinherited
    -
    -

    Set the parent property for this variable.

    -
    Note
    Added ability to set parent to null. 10/19/12 jhrg
    -
    Parameters
    - - -
    parentPointer to the Constructor of Vector parent variable or null if the variable has no parent (if it is at the top-level of a DAP2/3 DDS).
    -
    -
    -
    Exceptions
    - - -
    InternalErrthrown if called with anything other than a Constructor, Vector or Null.
    -
    -
    - -

    Definition at line 733 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_read_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_read_p (bool state)
    -
    -virtualinherited
    -
    - -

    Sets the value of the read_p property.

    -

    Sets the value of the read_p property. This indicates that the value(s) of this variable has/have been read. An implementation of the read() method should use this to set the read_p property to true.

    -
    Note
    If the is_synthesized property is true, this method will not alter the is_read property. If you need that behavior, specialize the method in your subclasses if the various types.
    -
    -For most of the types the default implementation of this method is fine. However, if you're building a server which must handle data represented using nested sequences, then you may need to provide a specialization of Sequence::set_read_p(). By default Sequence::set_read_p() recursively sets the read_p property for all child variables to state. For servers where one Sequence reads an outer set of values and another reads an inner set, this is cumbersome. In such a case, it is easier to specialize Sequence::set_read_p() so that it does not recursively set the read_p property for the inner Sequence. Be sure to see the documentation for the read() method!
    -
    Todo:
    Look at making synthesized variables easier to implement and at making them more integrated into the overall CE evaluation process. Maybe the code that computes the synthesized var's value should be in the that variable's read() method? This might provide a way to get rid of the awkward 'projection functions' by replacing them with real children of BaseType. It would also provide a way to clean up the way the synthesized_p prop intrudes on the read_p prop.
    -
    See also
    BaseType::read()
    -
    Parameters
    - - -
    stateSet the read_p property to this state.
    -
    -
    - -

    Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 516 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_send_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_send_p (bool state)
    -
    -virtualinherited
    -
    -

    Sets the value of the send_p flag. This function is meant to be called from within the constraint evaluator of other code which determines that this variable should be returned to the client. Data are ready to be sent when both the d_is_send and d_is_read flags are set to TRUE.

    -
    Parameters
    - - -
    stateThe logical state to set the send_p flag.
    -
    -
    - -

    Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 568 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_synthesized_p (bool state)
    -
    -virtualinherited
    -
    -

    Set the synthesized flag. Before setting this flag be sure to set the read_p() state. Once this flag is set you cannot alter the state of the read_p flag!

    -
    See also
    synthesized_p()
    - -

    Definition at line 463 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_type()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_type (const Typet)
    -
    -virtualinherited
    -
    - -

    Sets the type of the class instance.

    - -

    Definition at line 372 of file BaseType.cc.

    - -
    -
    - -

    ◆ synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::synthesized_p ()
    -
    -virtualinherited
    -
    -

    Returns true if the variable is a synthesized variable. A synthesized variable is one that is added to the dataset by the server (usually with a `projection function'.

    - -

    Definition at line 452 of file BaseType.cc.

    - -
    -
    - -

    ◆ toString()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::toString ()
    -
    -virtualinherited
    -
    -

    Write out the object's internal fields in a string. To be used for debugging when regular inspection w/ddd or gdb isn't enough.

    -
    Returns
    A string which shows the object's internal stuff.
    - -

    Reimplemented in libdap::Sequence.

    - -

    Definition at line 184 of file BaseType.cc.

    - -
    -
    - -

    ◆ transfer_attributes()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::transfer_attributes (AttrTableat_container)
    -
    -virtualinherited
    -
    -

    Transfer attributes from a DAS object into this variable. Because of the rough history of the DAS object and the way that various server code built the DAS, this is necessarily a heuristic process. The intent is that this method will be overridden by handlers that need to look for certain patterns in the DAS (e.g., hdf4's odd variable_dim_n; where n = 0, 1, 2, ...) attribute containers.

    -

    There should be a one-to-one mapping between variables and attribute containers. However, in some cases one variable has attributes spread across several top level containers and in some cases one container is used by several variables

    -
    Note
    This method is technically unnecessary because a server (or client) can easily add attributes directly using the DDS::get_attr_table or BaseType::get_attr_table methods and then poke values in using any of the methods AttrTable provides. This method exists to ease the transition to DDS objects which contain attribute information for the existing servers (Since they all make DAS objects separately from the DDS). They could be modified to use the same AttrTable methods but operate on the AttrTable instances in a DDS/BaseType instead of those in a DAS.
    -
    Parameters
    - - -
    at_containerTransfer attributes from this container.
    -
    -
    -
    Returns
    void
    - -

    Reimplemented in libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 644 of file BaseType.cc.

    - -
    -
    - -

    ◆ transform_to_dap2()

    - -
    -
    - - - - - -
    - - - - - - - - -
    std::vector< BaseType * > * libdap::Int8::transform_to_dap2 (AttrTableparent_attr_table)
    -
    -virtual
    -
    - -

    DAP4 to DAP2 transform.

    -

    Return a DAP2 'copy' of the variable. In this case, since Int8 doesn't have a natural representation in DAP2 we are going to just call it a Byte . Why? Because SIZE.

    -
    Parameters
    - - - -
    rootThe root group that should hold this new variable. Add Group-level stuff here (e.g., D4Dimensions).
    containerAdd the new variable to this container.
    -
    -
    -
    Returns
    A pointer to the transformed variable
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 232 of file Int8.cc.

    - -
    -
    - -

    ◆ transform_to_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::transform_to_dap4 (D4Grouproot,
    Constructorcontainer 
    )
    -
    -virtualinherited
    -
    - -

    DAP2 to DAP4 transform.

    -

    For the current BaseType, return a DAP4 'copy' of the variable.

    -
    Note
    For most DAP2 types, in this implementation of DAP4 the corresponding DAP4 type is the same. The different types are Sequences (which are D4Sequences in the DAP4 implementation), Grids (which are coverages) and Arrays (which use shared dimensions).
    -
    Parameters
    - - - -
    rootThe root group that should hold this new variable. Add Group-level stuff here (e.g., D4Dimensions).
    containerAdd the new variable to this container.
    -
    -
    -
    Returns
    A pointer to the transformed variable
    - -

    Reimplemented in libdap::Sequence, libdap::Array, libdap::Grid, libdap::Structure, and libdap::Constructor.

    - -

    Definition at line 216 of file BaseType.cc.

    - -
    -
    - -

    ◆ type()

    - -
    -
    - - - - - -
    - - - - - - - -
    Type libdap::BaseType::type () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance.

    - -

    Definition at line 365 of file BaseType.cc.

    - -
    -
    - -

    ◆ type_name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::type_name () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance as a string.

    - -

    Definition at line 379 of file BaseType.cc.

    - -
    -
    - -

    ◆ var() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::BaseType::var (const string & name = "",
    bool exact_match = true,
    btp_stack * s = 0 
    )
    -
    -virtualinherited
    -
    - -

    Returns a pointer to a member of a constructor class.

    -

    Returns a pointer to the contained variable in a composite class. The composite classes are those made up of aggregated simple data types. Array, Grid, and Structure are composite types, while Int and Float are simple types. This function is only used by composite classes. The BaseType implementation always returns null.

    -

    Several of the subclasses provide alternate access methods that make sense for that particular data type. For example, the Array class defines a *var(int i) method that returns the ith entry in the Array data, and the Structure provides a *var(Vars_iter) function using a pseudo-index to access the different members of the structure.

    -
    Parameters
    - - - - -
    nameThe name of the class member. Defaults to ""
    exact_matchTrue if only interested in variables whose full names match n exactly. If false, returns the first variable whose name matches name. For example, if name is x and point.x is a variable, then var("x", false) would return a BaseType pointer to point.x. If exact_match was true then name would need to be "point.x" for var to return that pointer. This feature simplifies constraint expressions for datasets which have complex, nested, constructor variables. Defaults to true.
    sRecord the path to name. Defaults to null, in which case it is not used.
    -
    -
    -
    Returns
    A pointer to the member named in the n argument. If no name is given, the function returns the first (only) variable. For example, an Array has only one variable, while a Structure can have many.
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 758 of file BaseType.cc.

    - -
    -
    - -

    ◆ var() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::BaseType::var (const string & name,
    btp_stack & s 
    )
    -
    -virtualinherited
    -
    -

    This version of var(...) searches for name and returns a pointer to the BaseType object if found. It uses the same search algorithm as BaseType::var(const string &, bool, btp_stack *) when exact_match is false. In addition to returning a pointer to the variable, it pushes onto s a BaseType pointer to each constructor type that ultimately contains name.

    -
    Note
    The BaseType implementation always returns null. There are no default values for the parameters. If var() is called w/o any params, the three parameter version will be used.
    -
    Deprecated:
    This method is deprecated because it tries first to use exact_match and, if that fails, then tries leaf_match. It's better to use the alternate form of var(...) and specify exactly what you'd like to do.
    -
    Returns
    A pointer to the named variable.
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 780 of file BaseType.cc.

    - -
    -
    - -

    ◆ width()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::Int8::width (bool constrained = false) const
    -
    -virtual
    -
    - -

    How many bytes does this variable use Return the number of bytes of storage this variable uses. For scalar types, this is pretty simple (an int32 uses 4 bytes, etc.). For arrays and Constructors, it is a bit more complex. Note that a scalar String variable uses sizeof(String*) bytes, not the length of the string value. The width() of a String array returns the number of elements in the array times sizeof(String*).

    -
    Parameters
    - - -
    constrainedShould the current constraint be taken into account?
    -
    -
    -
    Returns
    Bytes of storage
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 111 of file Int8.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1Int8.js b/html/classlibdap_1_1Int8.js deleted file mode 100644 index f7121a1ea..000000000 --- a/html/classlibdap_1_1Int8.js +++ /dev/null @@ -1,75 +0,0 @@ -var classlibdap_1_1Int8 = -[ - [ "btp_stack", "classlibdap_1_1Int8.html#ae9c6e71855b90a0e552713011c9ab81f", null ], - [ "Int8", "classlibdap_1_1Int8.html#a97bcbc8d5851b032caab70db6a8514db", null ], - [ "Int8", "classlibdap_1_1Int8.html#a916571c6be394d1f30c195094353d4d7", null ], - [ "~Int8", "classlibdap_1_1Int8.html#af8e7f66a8bf65f1f4cea65e17a9705ff", null ], - [ "Int8", "classlibdap_1_1Int8.html#a9d9b9248272d830d96d7c7018a2e0bb5", null ], - [ "add_var", "classlibdap_1_1Int8.html#adca3c2621c4a509537c18362005d7f7f", null ], - [ "add_var_nocopy", "classlibdap_1_1Int8.html#aa1192360cea4dc516c822cd3e13dc723", null ], - [ "attributes", "classlibdap_1_1Int8.html#a97452f06d2188eb838399a709246b5e9", null ], - [ "check_semantics", "classlibdap_1_1Int8.html#aec503abec2fd3090e7738c0a575491f8", null ], - [ "clear_local_data", "classlibdap_1_1Int8.html#aaddb97a4efbe035f41deaf03c6e8683f", null ], - [ "compute_checksum", "classlibdap_1_1Int8.html#a3cca62e5feff92761fdaa8f02295c881", null ], - [ "d4_ops", "classlibdap_1_1Int8.html#aba2aa5b603379c089a2dba07442dfcb9", null ], - [ "dataset", "classlibdap_1_1Int8.html#a47521ce321a17e6ce217870cb6a1a7aa", null ], - [ "deserialize", "classlibdap_1_1Int8.html#a7afc5e4a5c43f76e37a8dcbd7c39799b", null ], - [ "deserialize", "classlibdap_1_1Int8.html#a1f27d99250e857efd86ac9db788bbf1b", null ], - [ "dump", "classlibdap_1_1Int8.html#a0ccf9a858616fc6e67f6764dade84a9b", null ], - [ "element_count", "classlibdap_1_1Int8.html#a5c2235737737b482bfa7536b8aeab810", null ], - [ "FQN", "classlibdap_1_1Int8.html#a977cb954cc8f0d914d6f66ea0f48a9e3", null ], - [ "get_attr_table", "classlibdap_1_1Int8.html#a1fcd9537c67e3bf88964b2656ff5bac1", null ], - [ "get_parent", "classlibdap_1_1Int8.html#a3459cdaa239c33ce111ef360d8dc3017", null ], - [ "intern_data", "classlibdap_1_1Int8.html#a722d33783aa0272d339b0301a4f77e59", null ], - [ "intern_data", "classlibdap_1_1Int8.html#a1956e6ea90a745516f5372c859173433", null ], - [ "is_constructor_type", "classlibdap_1_1Int8.html#a8b8490e0047c6da52945699a132008ea", null ], - [ "is_dap4", "classlibdap_1_1Int8.html#a7f6835cb5e5589ab5dad3fb4813d3bea", null ], - [ "is_in_selection", "classlibdap_1_1Int8.html#ae302ab2ec26e9fc5b575bf5d3d09aa5c", null ], - [ "is_simple_type", "classlibdap_1_1Int8.html#aae57e5b270b3a015d40c8db10b9b5549", null ], - [ "is_vector_type", "classlibdap_1_1Int8.html#a7107c76dbcab71015141142383b6d022", null ], - [ "length", "classlibdap_1_1Int8.html#aadcda7a659157bc6a832d8a5fb775b3f", null ], - [ "m_duplicate", "classlibdap_1_1Int8.html#a0c55b826c8c5dfe7a454dc670e859a41", null ], - [ "name", "classlibdap_1_1Int8.html#a24c5d67823b3cff7f4245a993072a142", null ], - [ "operator=", "classlibdap_1_1Int8.html#a90c4b39e43854a1211c6f32463355633", null ], - [ "ops", "classlibdap_1_1Int8.html#a2d63b4ba6571ce6d2c673fe7f9adb59a", null ], - [ "print_dap4", "classlibdap_1_1Int8.html#afcddbe441380b95c894510c02980b163", null ], - [ "print_decl", "classlibdap_1_1Int8.html#a2d799fad93255d7f2b803562ae7a5784", null ], - [ "print_decl", "classlibdap_1_1Int8.html#afd744b0ddeb04e7b173c9e83423ec572", null ], - [ "print_val", "classlibdap_1_1Int8.html#a6232678aa95847bee75c063c1175f706", null ], - [ "print_xml", "classlibdap_1_1Int8.html#a825820edee179550cfde3dfd4d274f2a", null ], - [ "print_xml", "classlibdap_1_1Int8.html#a8bd2c7682edd48c64b210bdf247bdef7", null ], - [ "print_xml_writer", "classlibdap_1_1Int8.html#a11554ff931528b243e9af8173d205b44", null ], - [ "ptr_duplicate", "classlibdap_1_1Int8.html#a8c468c88483f4d926bb79c26d6e27c65", null ], - [ "read", "classlibdap_1_1Int8.html#a1da003c53f2e663223f603ab3fbd7c8e", null ], - [ "read_p", "classlibdap_1_1Int8.html#a38ff819a432217c55db2e9071928d20c", null ], - [ "send_p", "classlibdap_1_1Int8.html#a980c0013817836aa77ef74aeec7fb192", null ], - [ "serialize", "classlibdap_1_1Int8.html#a9825b8d30a147936f4e69e3db56ae1a6", null ], - [ "serialize", "classlibdap_1_1Int8.html#adc24a735977e28acb0e6f78667c1dd21", null ], - [ "set_attr_table", "classlibdap_1_1Int8.html#a572a1d76a75981abac83a4241e90c0fa", null ], - [ "set_attributes", "classlibdap_1_1Int8.html#ad4dda4cf43dca838d3de183b8e01cd09", null ], - [ "set_attributes_nocopy", "classlibdap_1_1Int8.html#afd0e5f87d19020f560d5c1ff8dd4d6a3", null ], - [ "set_in_selection", "classlibdap_1_1Int8.html#a2bc036248cdaf1affac464170f32ad30", null ], - [ "set_is_dap4", "classlibdap_1_1Int8.html#abca9ddaa9a1ada8447cbe7193e8e288a", null ], - [ "set_length", "classlibdap_1_1Int8.html#a4fe343c1eeb6fb1d61ab030433651d90", null ], - [ "set_name", "classlibdap_1_1Int8.html#a86504564f45a3e6748c6f1cc0ff4e9fa", null ], - [ "set_parent", "classlibdap_1_1Int8.html#a5b6a39f6ce6594fa74f3fc899ac9a966", null ], - [ "set_read_p", "classlibdap_1_1Int8.html#a4533905a450d2a7af32e7d5acd557676", null ], - [ "set_send_p", "classlibdap_1_1Int8.html#aba7b27635c95b74536de18393133628e", null ], - [ "set_synthesized_p", "classlibdap_1_1Int8.html#a595cb4059cff24f801a1b6da79bd2f9e", null ], - [ "set_type", "classlibdap_1_1Int8.html#af74f8d1ef57c9fcca46f620f75d175a3", null ], - [ "set_value", "classlibdap_1_1Int8.html#a0c8c3539e59f231d33fc60ef6c0e7da9", null ], - [ "synthesized_p", "classlibdap_1_1Int8.html#ae64e677da27249473cdba0b60cdbb90a", null ], - [ "toString", "classlibdap_1_1Int8.html#a701eb3361f5b5628329ece019cd34519", null ], - [ "transfer_attributes", "classlibdap_1_1Int8.html#add8e836c622042a339152a6c31e5bdfb", null ], - [ "transform_to_dap2", "classlibdap_1_1Int8.html#ad27c8597a1c0d8efdca4f0e844ea1ee0", null ], - [ "transform_to_dap4", "classlibdap_1_1Int8.html#adb03e2e1e40c3c888577c4666831a949", null ], - [ "type", "classlibdap_1_1Int8.html#af8e803b20a7a7dc5f2ef351d7fac4a56", null ], - [ "type_name", "classlibdap_1_1Int8.html#a18a42c8ec35cb5b15cd651a4152f8a2c", null ], - [ "value", "classlibdap_1_1Int8.html#af9e3b82e40c4b00e130f5ce92369884e", null ], - [ "var", "classlibdap_1_1Int8.html#a4dc4fac1bb6083f6db645f37bfd59b85", null ], - [ "var", "classlibdap_1_1Int8.html#adecfc442b5927c79933c7f71cfe03fd2", null ], - [ "width", "classlibdap_1_1Int8.html#a377dd97f28aa950ba6ff98ffe0d26808", null ], - [ "d_buf", "classlibdap_1_1Int8.html#a169bb2e8366ef610671c5a1beee54a87", null ], - [ "d_in_selection", "classlibdap_1_1Int8.html#a949a89714965d7afdcd1e3edc8b7f0d4", null ], - [ "d_is_synthesized", "classlibdap_1_1Int8.html#a629e97e8eb7d285b54c9af8c1ec9a29a", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1Int8__inherit__graph.map b/html/classlibdap_1_1Int8__inherit__graph.map deleted file mode 100644 index b7aeb8dd6..000000000 --- a/html/classlibdap_1_1Int8__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1Int8__inherit__graph.md5 b/html/classlibdap_1_1Int8__inherit__graph.md5 deleted file mode 100644 index a52edf044..000000000 --- a/html/classlibdap_1_1Int8__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -2b4ea3761dbc013dafaff32e152c4b5d \ No newline at end of file diff --git a/html/classlibdap_1_1Int8__inherit__graph.png b/html/classlibdap_1_1Int8__inherit__graph.png deleted file mode 100644 index 5eac9126417d12acd31ccf1ce37f114e4d5f3256..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62081 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�FF%siM zceLe@sIQ>Cd@A^RG{&mE{kV7)bY#A{F6e+Ky>6Pc^fZVrW+J>A0Ts_TfE(!PBNH;;2Os-!B^tg0WMwa60-^jaM+0?o9 z3w4RU;}M?Gf3xDjsU_Z1=@itd}yo4+vC2RYJkd|$?VtdX|Im!2~97AZYW z$Qr4`+7Sacu!n)mR(>wEF+vzu92ADRN3E$=LO*pn?i`6%S8o-LJcd-zo+uNIZU)~x86|U{ABy!J zczMP;M}TYnDh$#Q(0TCXfM9q+S|d|rW?xmB;fyMPlZS!?EAyJD-xi2V{T0`&&oygg z5%6*l-U9>e^~Q6QjMmv4jR*$|ZJR+dQNZK67Al`Je!Bd;8q7}6WndnA=Z}VNtPedh zP`FdeHQSGM5LJq}c=cg=F74gpH}nMuqp@l?fjctX_6QvZ8H&}^B4`?8E9S1!v6hC# zMA1R=5NFHds|G9fFa>aZE1-!Bkf&aat!EQXswP;b5rVttFP|O|2%{|xd}xXumzyTw zz-dYo-^x78vKaFu!!e4CI~zqZtxV}I`|iVMw>oLHk=v+aK}io}@aWUlHSje<(fZmY zlD<5NX0P*`dl6>k<@H5&pC+prwyD%#^)J2Px5dtc4T7@pEpjAtA-$E7nLoK<<8Oj_wjLiJ39XM zn`CXS`9WcFZlCB4L!TauFB5SNYz3IF_&{&4<3h ze!j%#w88fz-#GQ5AVHuvn?ce`9;CkE@NTePwcX5lox;S7Jnl!Th1!Wk^*|A#Fy#6B ze)d-@Vf>P)GLVv`TNb>-&ZSdd!Y!L0_HqY~?b+ys(`}2D-shWFpBj%#G%w&~ADOB>`WL^kef(DmNr~>v9u?)53m^mEb8lW=X-VY zmzm(nzDu!G`t@_`57)899&r`oB+ir-SUS8+Pq5&qyYKKhQtairD*}VIa z!pOy(Yh4{0!sr+62NKx>rf|DQE+mnA0Fb8gmL{|lw69&vMznTkk04^2kH-J|T@zB| z4(A-##~y^-_MBTK-45Tg_pvt^c<<)j3&rODSB+R<7;v*$M&sh?bbo#JXxpY;ndQ6n z_q=B)?d-3eNb%-B_OodxG|JYDm?Pg_c3bw^zE9a36%F_r@Xiy

    mR;E(dwA4LMFU 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%0A!;VI7uH* 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 - - - - - - -libdap: Member List - - - - - - - - - - - -

    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::InternalErr Member List
    -
    -
    - -

    This is the complete list of members for libdap::InternalErr, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    _error_code (defined in libdap::Error)libdap::Errorprotected
    _error_message (defined in libdap::Error)libdap::Errorprotected
    d_file (defined in libdap::Error)libdap::Errorprotected
    d_line (defined in libdap::Error)libdap::Errorprotected
    Error(ErrorCode ec, std::string msg, std::string file="", int line=0)libdap::Error
    Error(std::string msg, std::string file="", int line=0)libdap::Error
    Error()libdap::Error
    Error(const Error &copy_from) (defined in libdap::Error)libdap::Error
    get_error_code() constlibdap::Error
    get_error_message() constlibdap::Error
    get_file() const (defined in libdap::Error)libdap::Errorinline
    get_line() const (defined in libdap::Error)libdap::Errorinline
    InternalErr(const string &msg) (defined in libdap::InternalErr)libdap::InternalErr
    InternalErr(const string &file, const int &line, const string &msg) (defined in libdap::InternalErr)libdap::InternalErr
    InternalErr() (defined in libdap::InternalErr)libdap::InternalErr
    InternalErr(const InternalErr &copy_from) (defined in libdap::InternalErr)libdap::InternalErr
    OK()libdap::InternalErr
    libdap::Error::OK() constlibdap::Error
    operator=(const InternalErr &rhs) (defined in libdap::InternalErr)libdap::InternalErr
    operator=(const Error &rhs) (defined in libdap::Error)libdap::Error
    parse(FILE *fp)libdap::Error
    print(FILE *out) constlibdap::Error
    print(std::ostream &out) constlibdap::Error
    set_error_code(ErrorCode ec=undefined_error)libdap::Error
    set_error_message(std::string msg="")libdap::Error
    set_file(std::string f) (defined in libdap::Error)libdap::Errorinline
    set_line(int l) (defined in libdap::Error)libdap::Errorinline
    what() constlibdap::Errorinlinevirtual
    ~Error() (defined in libdap::Error)libdap::Errorvirtual
    ~InternalErr() (defined in libdap::InternalErr)libdap::InternalErrvirtual
    -
    - - - - diff --git a/html/classlibdap_1_1InternalErr.html b/html/classlibdap_1_1InternalErr.html deleted file mode 100644 index 296caaaf4..000000000 --- a/html/classlibdap_1_1InternalErr.html +++ /dev/null @@ -1,502 +0,0 @@ - - - - - - - -libdap: libdap::InternalErr Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::InternalErr Class Reference
    -
    -
    - -

    A class for software fault reporting. - More...

    - -

    #include <InternalErr.h>

    -
    -Inheritance diagram for libdap::InternalErr:
    -
    -
    Inheritance graph
    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    ErrorCode get_error_code () const
     
    std::string get_error_message () const
     
    -std::string get_file () const
     
    -int get_line () const
     
    bool OK ()
     Is the InternalErr object valid? More...
     
    bool OK () const
     Is the Error object valid? More...
     
    -InternalErroperator= (const InternalErr &rhs)
     
    bool parse (FILE *fp)
     Parse an Error object. More...
     
    void print (FILE *out) const
     
    void print (std::ostream &out) const
     
    void set_error_code (ErrorCode ec=undefined_error)
     
    void set_error_message (std::string msg="")
     
    -void set_file (std::string f)
     
    -void set_line (int l)
     
    virtual const char * what () const throw ()
     The pointer is valid only for the lifetime of the Error instance. jhrg 9/22/20. More...
     
    Constructors

    Constructors for the Error object

    -

    These constructors always set the error code to internal_error.

    -

    Note that there is no way to specify an error correction program for an internal error.

    -
    InternalErr (const string &msg)
     
    InternalErr (const string &file, const int &line, const string &msg)
     
    InternalErr ()
     
    InternalErr (const InternalErr &copy_from)
     
    - - - - - - - - - -

    -Protected Attributes

    -ErrorCode _error_code
     
    -std::string _error_message
     
    -std::string d_file
     
    -int d_line
     
    -

    Detailed Description

    -

    A class for software fault reporting.

    -

    The InternalErr class is used to signal that somewhere inside libdap a software fault was found. This class wraps the message text in some boiler plate that asks the error be reported to us (tech support).

    -

    NB: This class Adds some text to the message and might, in the future, hold information not also held in Error. However, all Error objects thrown on the server-side of libdap that cannot be resolved (and that's all of them for now, 5/3/99 jhrg) will be sent to the client-side using Error objects. That is, the information recorded in an InternalErr object will be sent by calling the print(...) mfunc of Error.

    -
    Author
    jhrg
    - -

    Definition at line 64 of file InternalErr.h.

    -

    Member Function Documentation

    - -

    ◆ get_error_code()

    - -
    -
    - - - - - -
    - - - - - - - -
    ErrorCode libdap::Error::get_error_code () const
    -
    -inherited
    -
    -

    Get the ErrorCode for this instance.

    - -

    Definition at line 249 of file Error.cc.

    - -
    -
    - -

    ◆ get_error_message()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::Error::get_error_message () const
    -
    -inherited
    -
    -

    Return the current error message.

    - -

    Definition at line 278 of file Error.cc.

    - -
    -
    - -

    ◆ OK() [1/2]

    - -
    -
    - - - - - - - -
    bool libdap::InternalErr::OK ()
    -
    - -

    Is the InternalErr object valid?

    -
    Returns
    TRUE if the object is valid, FALSE otherwise.
    - -

    Definition at line 102 of file InternalErr.cc.

    - -
    -
    - -

    ◆ OK() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::Error::OK () const
    -
    -inherited
    -
    - -

    Is the Error object valid?

    -

    Use this function to determine whether an Error object is valid. To be a valid, an Error object must either be: 1) empty or contain a message and a code.

    -
    Returns
    TRUE if the object is valid, FALSE otherwise.
    - -

    Definition at line 135 of file Error.cc.

    - -
    -
    - -

    ◆ parse()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool libdap::Error::parse (FILE * fp)
    -
    -inherited
    -
    - -

    Parse an Error object.

    -

    Given an input stream (FILE *) fp, parse an Error object from stream. Values for fields of the Error object are parsed and this is set accordingly. This is how a client program receives an error object from a server.

    -
    Parameters
    - - -
    fpA valid file pointer to an input stream.
    -
    -
    -
    Returns
    TRUE if no error was detected, FALSE otherwise.
    - -

    Definition at line 158 of file Error.cc.

    - -
    -
    - -

    ◆ print() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Error::print (FILE * out) const
    -
    -inherited
    -
    -

    Creates a printable representation of the Error object. It is suitable for framing, and also for printing and sending over a network.

    -

    The printed representation produced by this function can be parsed by the parse() member function. Thus parse and print form a symmetrical pair that can be used to send and receive an Error object over the network in a MIME document.

    -
    Parameters
    - - -
    outA pointer to the output stream on which the Error object is to be rendered.
    -
    -
    - -

    Definition at line 200 of file Error.cc.

    - -
    -
    - -

    ◆ print() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Error::print (std::ostream & out) const
    -
    -inherited
    -
    -

    Creates a printable representation of the Error object. It is suitable for framing, and also for printing and sending over a network.

    -

    The printed representation produced by this function can be parsed by the parse() member function. Thus parse and print form a symmetrical pair that can be used to send and receive an Error object over the network in a MIME document.

    -
    Parameters
    - - -
    strmA reference to the output stream on which the Error object is to be rendered.
    -
    -
    - -

    Definition at line 229 of file Error.cc.

    - -
    -
    - -

    ◆ set_error_code()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Error::set_error_code (ErrorCode ec = undefined_error)
    -
    -inherited
    -
    -

    Set the ErrorCode. If the current error message has not been set, use ec to set the error message. The resulting error message string is the same as the ErrorCode name. If ec is not within the range of values for an OPeNDAP ErrorCode, the error message is left unchanged.

    -
    Parameters
    - - -
    ecThe new ErrorCode value.
    -
    -
    - -

    Definition at line 262 of file Error.cc.

    - -
    -
    - -

    ◆ set_error_message()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Error::set_error_message (std::string msg = "")
    -
    -inherited
    -
    -

    Set the error message.

    - -

    Definition at line 287 of file Error.cc.

    - -
    -
    - -

    ◆ what()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - -
    virtual const char* libdap::Error::what () const
    throw (
    )
    -
    -inlinevirtualinherited
    -
    - -

    The pointer is valid only for the lifetime of the Error instance. jhrg 9/22/20.

    - -

    Definition at line 127 of file Error.h.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1InternalErr.js b/html/classlibdap_1_1InternalErr.js deleted file mode 100644 index 544ace129..000000000 --- a/html/classlibdap_1_1InternalErr.js +++ /dev/null @@ -1,27 +0,0 @@ -var classlibdap_1_1InternalErr = -[ - [ "InternalErr", "classlibdap_1_1InternalErr.html#a230ac6033046f6c0d49da403bca191a4", null ], - [ "InternalErr", "classlibdap_1_1InternalErr.html#aa79be065b91588a473ef9fb9d488d004", null ], - [ "InternalErr", "classlibdap_1_1InternalErr.html#aec58ae4106a19d656ef8a0fd56f38059", null ], - [ "InternalErr", "classlibdap_1_1InternalErr.html#a7c3f3492b6bd00b2864dd9777587bcdc", null ], - [ "~InternalErr", "classlibdap_1_1InternalErr.html#a93c4a08c26e8c2ce41a7ea41ea8e109f", null ], - [ "get_error_code", "classlibdap_1_1InternalErr.html#aaca0caca09e939602cade604cbc9824f", null ], - [ "get_error_message", "classlibdap_1_1InternalErr.html#ab24a61e4974aae62962a40f9975e674c", null ], - [ "get_file", "classlibdap_1_1InternalErr.html#a5165d667334a9fd6f337735c2b57e28c", null ], - [ "get_line", "classlibdap_1_1InternalErr.html#a44b91121bdbc7d9d389db3440e2299cf", null ], - [ "OK", "classlibdap_1_1InternalErr.html#ae3487b9f8d63ae20250ba8148689a278", null ], - [ "OK", "classlibdap_1_1InternalErr.html#acf3ab60821773bd8b62284750b02cfc0", null ], - [ "operator=", "classlibdap_1_1InternalErr.html#a2274ad30c112ecce66b751ba352af781", null ], - [ "parse", "classlibdap_1_1InternalErr.html#ac705b3c1cfab1f7530d66a974eb0e8b6", null ], - [ "print", "classlibdap_1_1InternalErr.html#a552d711be27e6695854bd2b977a5cf31", null ], - [ "print", "classlibdap_1_1InternalErr.html#a4c58ef196c2b247bd37529bb7ad6a666", null ], - [ "set_error_code", "classlibdap_1_1InternalErr.html#a47c0f4b6a38d8ca075d1056076d2845d", null ], - [ "set_error_message", "classlibdap_1_1InternalErr.html#a3ca90d33bf1c95529c9eefdfe8646e34", null ], - [ "set_file", "classlibdap_1_1InternalErr.html#a94a26bbdd9f4ede88c74de97e9e9e98d", null ], - [ "set_line", "classlibdap_1_1InternalErr.html#a63a9c54019daa8b406c4287faba5e60a", null ], - [ "what", "classlibdap_1_1InternalErr.html#accc5eeb469c8c18ec16dbf7fefe3cc41", null ], - [ "_error_code", "classlibdap_1_1InternalErr.html#a30226017ae9dfbe2e27be502b4fbdef4", null ], - [ "_error_message", "classlibdap_1_1InternalErr.html#a87f74c6be2134736ca1e400c90a3d571", null ], - [ "d_file", "classlibdap_1_1InternalErr.html#ac947a4c3d229d7ec505ad921a77702ea", null ], - [ "d_line", "classlibdap_1_1InternalErr.html#af7d939b4b8154518f870d5424ff55f62", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1InternalErr__inherit__graph.map b/html/classlibdap_1_1InternalErr__inherit__graph.map deleted file mode 100644 index 1d841bcac..000000000 --- a/html/classlibdap_1_1InternalErr__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1InternalErr__inherit__graph.md5 b/html/classlibdap_1_1InternalErr__inherit__graph.md5 deleted file mode 100644 index b99aa1d24..000000000 --- a/html/classlibdap_1_1InternalErr__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -6441316e0a599231a55ff48fd3634ded \ No newline at end of file diff --git a/html/classlibdap_1_1InternalErr__inherit__graph.png b/html/classlibdap_1_1InternalErr__inherit__graph.png deleted file mode 100644 index 5ecdb52d08545851268a2966205df4a76f9a7b73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24995 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

    Le+UxcIZ4I}vx2Ij9J+;s*on)y@5d>*DL} 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 diff --git a/html/classlibdap_1_1Keywords-members.html b/html/classlibdap_1_1Keywords-members.html deleted file mode 100644 index b3b31e5e4..000000000 --- a/html/classlibdap_1_1Keywords-members.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -

    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::Keywords Member List
    -
    -
    - -

    This is the complete list of members for libdap::Keywords, including all inherited members.

    - - - - - - - - - - - -
    get_keyword_value(const keyword &kw) constlibdap::Keywordsvirtual
    get_keywords() constlibdap::Keywordsvirtual
    has_keyword(const keyword &kw) constlibdap::Keywordsvirtual
    is_known_keyword(const string &s) constlibdap::Keywordsvirtual
    keyword typedef (defined in libdap::Keywords)libdap::Keywords
    keyword_value typedef (defined in libdap::Keywords)libdap::Keywords
    Keywords() (defined in libdap::Keywords)libdap::Keywords
    parse_keywords(const string &ce)libdap::Keywordsvirtual
    value_set_t typedef (defined in libdap::Keywords)libdap::Keywords
    ~Keywords() (defined in libdap::Keywords)libdap::Keywordsvirtual
    -
    - - - - diff --git a/html/classlibdap_1_1Keywords.html b/html/classlibdap_1_1Keywords.html deleted file mode 100644 index 69a185409..000000000 --- a/html/classlibdap_1_1Keywords.html +++ /dev/null @@ -1,294 +0,0 @@ - - - - - - - -libdap: libdap::Keywords Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::Keywords Class Reference
    -
    -
    - -

    #include <Keywords2.h>

    - - - - - - - - -

    -Public Types

    -typedef string keyword
     
    -typedef string keyword_value
     
    -typedef set< keyword_value > value_set_t
     
    - - - - - - - - - - - -

    -Public Member Functions

    virtual keyword_value get_keyword_value (const keyword &kw) const
     
    virtual list< keyword > get_keywords () const
     
    virtual bool has_keyword (const keyword &kw) const
     
    virtual bool is_known_keyword (const string &s) const
     
    virtual string parse_keywords (const string &ce)
     
    -

    Detailed Description

    -

    Manage keywords for libdap. These are passed in to the library using the constraint expression - in fact they are an extension of the CE and this class implements the parsing needed to remove them from the CE so that the ConstraintExpression evaluator can parse it (because the keywords are not identifiers in the DDS, they will cause a parse error.

    -
    Note
    If pointers are added to this code, modify DDS so copying still works!
    -
    -The keywords are used to specify the DAP version(s) that the client can understand.
    -
    -Keywords are parsed and used by the BES in Hyrax - libdap never makes calls to these methods.
    - -

    Definition at line 52 of file Keywords2.h.

    -

    Member Function Documentation

    - -

    ◆ get_keyword_value()

    - -
    -
    - - - - - -
    - - - - - - - - -
    Keywords::keyword_value libdap::Keywords::get_keyword_value (const keyword & kw) const
    -
    -virtual
    -
    -

    Look at the parsed keywords for the value associated with a given keyword.

    -
    Parameters
    - - -
    k
    -
    -
    -
    Returns
    The value
    - -

    Definition at line 158 of file Keywords2.cc.

    - -
    -
    - -

    ◆ get_keywords()

    - -
    -
    - - - - - -
    - - - - - - - -
    list< Keywords::keyword > libdap::Keywords::get_keywords () const
    -
    -virtual
    -
    -

    Get a list of the strings that make up the set of current keywords for this request.

    Returns
    The list of keywords as a list of string objects.
    - -

    Definition at line 131 of file Keywords2.cc.

    - -
    -
    - -

    ◆ has_keyword()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool libdap::Keywords::has_keyword (const keyword & kw) const
    -
    -virtual
    -
    -

    Lookup a keyword_kind and return true if it has been set for this request, otherwise return false.

    Parameters
    - - -
    kwKeyword
    -
    -
    -
    Returns
    true if the keyword is set.
    - -

    Definition at line 148 of file Keywords2.cc.

    - -
    -
    - -

    ◆ is_known_keyword()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool libdap::Keywords::is_known_keyword (const string & word) const
    -
    -virtual
    -
    -

    Is the word one of the known keywords for this version of libdap?

    Parameters
    - - -
    sAs a string, including the value
    -
    -
    -
    Returns
    true if the keyword is known
    - -

    Definition at line 121 of file Keywords2.cc.

    - -
    -
    - -

    ◆ parse_keywords()

    - -
    -
    - - - - - -
    - - - - - - - - -
    string libdap::Keywords::parse_keywords (const string & ce)
    -
    -virtual
    -
    -

    Parse the constraint expression, removing all keywords. As a side effect, return the remaining CE.

    Parameters
    - - -
    ce
    -
    -
    -
    Returns
    The CE stripped of all recognized keywords.
    - -

    Definition at line 171 of file Keywords2.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1Keywords.js b/html/classlibdap_1_1Keywords.js deleted file mode 100644 index 645f28c53..000000000 --- a/html/classlibdap_1_1Keywords.js +++ /dev/null @@ -1,13 +0,0 @@ -var classlibdap_1_1Keywords = -[ - [ "keyword", "classlibdap_1_1Keywords.html#a22df47305e66d7aa6f977db8bad430e0", null ], - [ "keyword_value", "classlibdap_1_1Keywords.html#aaf312a34ee1571b1d6b7e08476c18c3e", null ], - [ "value_set_t", "classlibdap_1_1Keywords.html#a15bea7067913e777eee68574269c47b8", null ], - [ "Keywords", "classlibdap_1_1Keywords.html#ab1894eb34c0734655f482bf7c72f6ca2", null ], - [ "~Keywords", "classlibdap_1_1Keywords.html#a540d4747ae624a570596c3f032503bac", null ], - [ "get_keyword_value", "classlibdap_1_1Keywords.html#a0738caba6444fbf51305f1c53b46c35e", null ], - [ "get_keywords", "classlibdap_1_1Keywords.html#a14a91e22db14749c3d84dec48304ca9e", null ], - [ "has_keyword", "classlibdap_1_1Keywords.html#a6cedb7cd4c9dafbea36ae9d2301ebebd", null ], - [ "is_known_keyword", "classlibdap_1_1Keywords.html#a8cd25d75f81739917a9898a2155896e7", null ], - [ "parse_keywords", "classlibdap_1_1Keywords.html#acc56ce43a21cce844f2a2de3ecd54e8c", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1Locker-members.html b/html/classlibdap_1_1Locker-members.html deleted file mode 100644 index 3dc7a6a62..000000000 --- a/html/classlibdap_1_1Locker-members.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::Locker Member List
    -
    -
    - -

    This is the complete list of members for libdap::Locker, including all inherited members.

    - - - -
    Locker(pthread_mutex_t &lock, pthread_cond_t &cond, int &count)libdap::Locker
    ~Locker()libdap::Lockervirtual
    -
    - - - - diff --git a/html/classlibdap_1_1Locker.html b/html/classlibdap_1_1Locker.html deleted file mode 100644 index 8d01f83bb..000000000 --- a/html/classlibdap_1_1Locker.html +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - - -libdap: libdap::Locker Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::Locker Class Reference
    -
    -
    - -

    #include <MarshallerThread.h>

    - - - - - - -

    -Public Member Functions

     Locker (pthread_mutex_t &lock, pthread_cond_t &cond, int &count)
     
    virtual ~Locker ()
     
    -

    Detailed Description

    -

    RAII for the MarshallerThread mutex and condition variable. Used by the Main thread. The constructor locks the mutex and then, if the count of child threads is not zero, blocks on the associated condition variable. When signaled by the child thread using the condition variable (the child thread count should then be zero), the mutex is (re)locked and the ctor returns. The destructor unlocks the mutex.

    - -

    Definition at line 52 of file MarshallerThread.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ Locker()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    Locker::Locker (pthread_mutex_t & lock,
    pthread_cond_t & cond,
    int & count 
    )
    -
    -

    Lock the mutex then wait for the child thread to signal using the condition variable 'cond'. Once the signal is received, re-test count to make sure it's zero (there are no child threads).

    -

    This is used to lock the main thread and ensure that a second child (writer) thread is not started until any current child thread completes, which keeps the write operations in the correct order.

    - -

    Definition at line 88 of file MarshallerThread.cc.

    - -
    -
    - -

    ◆ ~Locker()

    - -
    -
    - - - - - -
    - - - - - - - -
    Locker::~Locker ()
    -
    -virtual
    -
    -

    Unlock the mutex

    - -

    Definition at line 108 of file MarshallerThread.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1Locker.js b/html/classlibdap_1_1Locker.js deleted file mode 100644 index 2daf1ef42..000000000 --- a/html/classlibdap_1_1Locker.js +++ /dev/null @@ -1,5 +0,0 @@ -var classlibdap_1_1Locker = -[ - [ "Locker", "classlibdap_1_1Locker.html#aeeefa18f8a9713d91b830589e5c2b6a9", null ], - [ "~Locker", "classlibdap_1_1Locker.html#a6332fec7611d1507cb7323987ec86845", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1Marshaller-members.html b/html/classlibdap_1_1Marshaller-members.html deleted file mode 100644 index f5b926e56..000000000 --- a/html/classlibdap_1_1Marshaller-members.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::Marshaller Member List
    -
    -
    - -

    This is the complete list of members for libdap::Marshaller, including all inherited members.

    - - - - - - - - - - - - - - - - - - - -
    dump(std::ostream &strm) const =0libdap::Marshallerpure virtual
    put_byte(dods_byte val)=0 (defined in libdap::Marshaller)libdap::Marshallerpure virtual
    put_float32(dods_float32 val)=0 (defined in libdap::Marshaller)libdap::Marshallerpure virtual
    put_float64(dods_float64 val)=0 (defined in libdap::Marshaller)libdap::Marshallerpure virtual
    put_int(int val)=0 (defined in libdap::Marshaller)libdap::Marshallerpure virtual
    put_int16(dods_int16 val)=0 (defined in libdap::Marshaller)libdap::Marshallerpure virtual
    put_int32(dods_int32 val)=0 (defined in libdap::Marshaller)libdap::Marshallerpure virtual
    put_opaque(char *val, unsigned int len)=0 (defined in libdap::Marshaller)libdap::Marshallerpure virtual
    put_str(const std::string &val)=0 (defined in libdap::Marshaller)libdap::Marshallerpure virtual
    put_uint16(dods_uint16 val)=0 (defined in libdap::Marshaller)libdap::Marshallerpure virtual
    put_uint32(dods_uint32 val)=0 (defined in libdap::Marshaller)libdap::Marshallerpure virtual
    put_url(const std::string &val)=0 (defined in libdap::Marshaller)libdap::Marshallerpure virtual
    put_vector(char *val, int num, Vector &vec)=0 (defined in libdap::Marshaller)libdap::Marshallerpure virtual
    put_vector(char *val, int num, int width, Vector &vec)=0 (defined in libdap::Marshaller)libdap::Marshallerpure virtual
    put_vector_end()libdap::Marshallerinlinevirtual
    put_vector_part(char *, unsigned int, int, Type)libdap::Marshallerinlinevirtual
    put_vector_start(int)libdap::Marshallerinlinevirtual
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1Marshaller.html b/html/classlibdap_1_1Marshaller.html deleted file mode 100644 index 2dc01631f..000000000 --- a/html/classlibdap_1_1Marshaller.html +++ /dev/null @@ -1,326 +0,0 @@ - - - - - - - -libdap: libdap::Marshaller Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::Marshaller Class Referenceabstract
    -
    -
    - -

    abstract base class used to marshal/serialize dap data objects - More...

    - -

    #include <Marshaller.h>

    -
    -Inheritance diagram for libdap::Marshaller:
    -
    -
    Inheritance graph
    - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual void dump (std::ostream &strm) const =0
     dump the contents of this object to the specified ostream More...
     
    -virtual void put_byte (dods_byte val)=0
     
    -virtual void put_float32 (dods_float32 val)=0
     
    -virtual void put_float64 (dods_float64 val)=0
     
    -virtual void put_int (int val)=0
     
    -virtual void put_int16 (dods_int16 val)=0
     
    -virtual void put_int32 (dods_int32 val)=0
     
    -virtual void put_opaque (char *val, unsigned int len)=0
     
    -virtual void put_str (const std::string &val)=0
     
    -virtual void put_uint16 (dods_uint16 val)=0
     
    -virtual void put_uint32 (dods_uint32 val)=0
     
    -virtual void put_url (const std::string &val)=0
     
    -virtual void put_vector (char *val, int num, Vector &vec)=0
     
    -virtual void put_vector (char *val, int num, int width, Vector &vec)=0
     
    virtual void put_vector_end ()
     
    virtual void put_vector_part (char *, unsigned int, int, Type)
     
    virtual void put_vector_start (int)
     
    -

    Detailed Description

    -

    abstract base class used to marshal/serialize dap data objects

    - -

    Definition at line 50 of file Marshaller.h.

    -

    Member Function Documentation

    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::Marshaller::dump (std::ostream & strm) const
    -
    -pure virtual
    -
    - -

    dump the contents of this object to the specified ostream

    -

    This method is implemented by all derived classes to dump their contents, in other words, any state they might have, private variables, etc...

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the object to
    -
    -
    - -

    Implements libdap::DapObj.

    - -

    Implemented in libdap::D4StreamMarshaller, libdap::XDRStreamMarshaller, and libdap::XDRFileMarshaller.

    - -
    -
    - -

    ◆ put_vector_end()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual void libdap::Marshaller::put_vector_end ()
    -
    -inlinevirtual
    -
    -

    Close a vector written using put_vector_part()

    - -

    Reimplemented in libdap::D4StreamMarshaller, and libdap::XDRStreamMarshaller.

    - -

    Definition at line 98 of file Marshaller.h.

    - -
    -
    - -

    ◆ put_vector_part()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    virtual void libdap::Marshaller::put_vector_part (char * ,
    unsigned int ,
    int ,
    Type  
    )
    -
    -inlinevirtual
    -
    -

    Write one part of a vector's contents.

    -
    Parameters
    - - - - - -
    valPointer to the part's values
    numThe number of values in this part
    widthThe number of bytes per value
    typeThe DAP2 data type for each value
    -
    -
    - -

    Reimplemented in libdap::D4StreamMarshaller, and libdap::XDRStreamMarshaller.

    - -

    Definition at line 91 of file Marshaller.h.

    - -
    -
    - -

    ◆ put_vector_start()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::Marshaller::put_vector_start (int )
    -
    -inlinevirtual
    -
    -

    Write the prefix bytes for a vector and reset the state/counter for a vector/array that will be written using put_vector_part() and put_vector_end().

    -
    Parameters
    - - -
    numThe number of elements to write
    -
    -
    - -

    Reimplemented in libdap::D4StreamMarshaller, and libdap::XDRStreamMarshaller.

    - -

    Definition at line 79 of file Marshaller.h.

    - -
    -
    -
    The documentation for this class was generated from the following file: -
    -
    - - - - diff --git a/html/classlibdap_1_1Marshaller.js b/html/classlibdap_1_1Marshaller.js deleted file mode 100644 index 93c084e62..000000000 --- a/html/classlibdap_1_1Marshaller.js +++ /dev/null @@ -1,20 +0,0 @@ -var classlibdap_1_1Marshaller = -[ - [ "dump", "classlibdap_1_1Marshaller.html#a0e88a4aed6f7fa1908c50695cbf9e2df", null ], - [ "put_byte", "classlibdap_1_1Marshaller.html#a3dca09eaab7f05d389a86a0c962da1ac", null ], - [ "put_float32", "classlibdap_1_1Marshaller.html#ac251489a50acd9fa32990c2cb48c28f5", null ], - [ "put_float64", "classlibdap_1_1Marshaller.html#a6c670e9d28ec15bda0dc26326157d00e", null ], - [ "put_int", "classlibdap_1_1Marshaller.html#a8504f5f478559a36f23f1ab094a586e1", null ], - [ "put_int16", "classlibdap_1_1Marshaller.html#ad304d979a115c073bf8919ad426d4465", null ], - [ "put_int32", "classlibdap_1_1Marshaller.html#ae5b3b71fd28aa50e2ed281233721d38f", null ], - [ "put_opaque", "classlibdap_1_1Marshaller.html#ad8ebf5e88e4969821b5d4274a3d41516", null ], - [ "put_str", "classlibdap_1_1Marshaller.html#a158c49be88a397c570513d2124d670c0", null ], - [ "put_uint16", "classlibdap_1_1Marshaller.html#a73463c9be72dbd79b2889e0f4b00dc15", null ], - [ "put_uint32", "classlibdap_1_1Marshaller.html#a8b5c2bd2460ae0e5407947e9d4b5fadf", null ], - [ "put_url", "classlibdap_1_1Marshaller.html#ae7a22d714586ceac9e84c5510c7e2ce0", null ], - [ "put_vector", "classlibdap_1_1Marshaller.html#a986c4ae898e02d846406a72bdbaf0846", null ], - [ "put_vector", "classlibdap_1_1Marshaller.html#a37f9aa990375bf5ae54bdb0c8ead6b2f", null ], - [ "put_vector_end", "classlibdap_1_1Marshaller.html#a3409a138c4a67bc9dd24a3a2ad6f97db", null ], - [ "put_vector_part", "classlibdap_1_1Marshaller.html#a8b303c96939749f6aca62d0e582909b0", null ], - [ "put_vector_start", "classlibdap_1_1Marshaller.html#ae0cd4b847386e89eace23e6b2fc08826", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1MarshallerThread-members.html b/html/classlibdap_1_1MarshallerThread-members.html deleted file mode 100644 index df3d370b5..000000000 --- a/html/classlibdap_1_1MarshallerThread-members.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::MarshallerThread Member List
    -
    -
    - -

    This is the complete list of members for libdap::MarshallerThread, including all inherited members.

    - - - - - - - - - - - -
    get_child_thread_count() (defined in libdap::MarshallerThread)libdap::MarshallerThreadinline
    get_cond() (defined in libdap::MarshallerThread)libdap::MarshallerThreadinline
    get_mutex() (defined in libdap::MarshallerThread)libdap::MarshallerThreadinline
    increment_child_thread_count() (defined in libdap::MarshallerThread)libdap::MarshallerThreadinline
    MarshallerThread() (defined in libdap::MarshallerThread)libdap::MarshallerThread
    start_thread(void *(*thread)(void *arg), std::ostream &out, char *byte_buf, unsigned int bytes_written)libdap::MarshallerThread
    start_thread(void *(*thread)(void *arg), int fd, char *byte_buf, unsigned int bytes_written)libdap::MarshallerThread
    write_thread(void *arg)libdap::MarshallerThreadstatic
    write_thread_part(void *arg)libdap::MarshallerThreadstatic
    ~MarshallerThread() (defined in libdap::MarshallerThread)libdap::MarshallerThreadvirtual
    -
    - - - - diff --git a/html/classlibdap_1_1MarshallerThread.html b/html/classlibdap_1_1MarshallerThread.html deleted file mode 100644 index ce292cc49..000000000 --- a/html/classlibdap_1_1MarshallerThread.html +++ /dev/null @@ -1,270 +0,0 @@ - - - - - - - -libdap: libdap::MarshallerThread Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::MarshallerThread Class Reference
    -
    -
    - -

    #include <MarshallerThread.h>

    - - - - - - - - - - - - - - -

    -Public Member Functions

    -int & get_child_thread_count ()
     
    -pthread_cond_t & get_cond ()
     
    -pthread_mutex_t & get_mutex ()
     
    -void increment_child_thread_count ()
     
    void start_thread (void *(*thread)(void *arg), std::ostream &out, char *byte_buf, unsigned int bytes_written)
     
    void start_thread (void *(*thread)(void *arg), int fd, char *byte_buf, unsigned int bytes_written)
     
    - - - - - -

    -Static Public Member Functions

    static void * write_thread (void *arg)
     
    static void * write_thread_part (void *arg)
     
    -

    Detailed Description

    -

    Implement a multi-threaded data transmission sub-system for libdap. This class makes it fairly painless to send data using a child thread so that the main thread can be used to read the next chunk of data while whatever has been read to this point is sent over the wire.

    -

    This code is used by XDRStreamMarshaller and (soon) D4StreamMarshaller.

    - -

    Definition at line 96 of file MarshallerThread.h.

    -

    Member Function Documentation

    - -

    ◆ start_thread() [1/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void MarshallerThread::start_thread (void *(*)(void *arg) thread,
    std::ostream & out,
    char * byte_buf,
    unsigned int bytes 
    )
    -
    -

    Start the child thread, using the arguments given. This will write 'bytes' bytes from 'byte_buf' to the output stream 'out'

    - -

    Definition at line 215 of file MarshallerThread.cc.

    - -
    -
    - -

    ◆ start_thread() [2/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void MarshallerThread::start_thread (void *(*)(void *arg) thread,
    int fd,
    char * byte_buf,
    unsigned int bytes 
    )
    -
    -

    Write 'bytes' bytes from 'byte_buf' to the file descriptor 'fd'.

    - -

    Definition at line 227 of file MarshallerThread.cc.

    - -
    -
    - -

    ◆ write_thread()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void * MarshallerThread::write_thread (void * arg)
    -
    -static
    -
    -

    This static method is used to write data to the ostream referenced by the ostream element of write_args. This is used by start_thread() and passed to pthread_create()

    -
    Note
    The write_args argument may contain either a file descriptor (d_out_file) or an ostream& (d_out). If the file descriptor is not -1, then use that, else use the ostream reference.
    - -

    Definition at line 245 of file MarshallerThread.cc.

    - -
    -
    - -

    ◆ write_thread_part()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void * MarshallerThread::write_thread_part (void * arg)
    -
    -static
    -
    -

    This static method is used to write data to the ostream referenced by the ostream element of write_args. This is used by start_thread() and passed to pthread_create()

    -
    Note
    This differers from MarshallerThread::write_thread() in that it writes data starting after the four-byte length prefix that XDR adds to the data. It is used for the put_vector_part() calls in XDRStreamMarshaller.
    -
    Returns
    0 if successful, -1 otherwise.
    - -

    Definition at line 302 of file MarshallerThread.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1MarshallerThread.js b/html/classlibdap_1_1MarshallerThread.js deleted file mode 100644 index f21c54ea5..000000000 --- a/html/classlibdap_1_1MarshallerThread.js +++ /dev/null @@ -1,11 +0,0 @@ -var classlibdap_1_1MarshallerThread = -[ - [ "MarshallerThread", "classlibdap_1_1MarshallerThread.html#a89665213cc052beff7f145a45c44a777", null ], - [ "~MarshallerThread", "classlibdap_1_1MarshallerThread.html#ab274b1fd609eac2a8c093f2f6cf97023", null ], - [ "get_child_thread_count", "classlibdap_1_1MarshallerThread.html#af0b7469e14024ac75dfff14f7f1b1ef0", null ], - [ "get_cond", "classlibdap_1_1MarshallerThread.html#a688cdb82161fa003bf5dd7802ffc8a27", null ], - [ "get_mutex", "classlibdap_1_1MarshallerThread.html#a268171c55887184a00afb3285e0889b8", null ], - [ "increment_child_thread_count", "classlibdap_1_1MarshallerThread.html#a4841f510da304cc6e1693801131cdc50", null ], - [ "start_thread", "classlibdap_1_1MarshallerThread.html#acc8bb280ae10063aca52d5b73000c247", null ], - [ "start_thread", "classlibdap_1_1MarshallerThread.html#a7c22686ec230b6725aa811fe53b53ade", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1Marshaller__inherit__graph.map b/html/classlibdap_1_1Marshaller__inherit__graph.map deleted file mode 100644 index 7e7a825d5..000000000 --- a/html/classlibdap_1_1Marshaller__inherit__graph.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/html/classlibdap_1_1Marshaller__inherit__graph.md5 b/html/classlibdap_1_1Marshaller__inherit__graph.md5 deleted file mode 100644 index 192ddd848..000000000 --- a/html/classlibdap_1_1Marshaller__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -93e6e613aca1f759a1b54befd86f924f \ No newline at end of file diff --git a/html/classlibdap_1_1Marshaller__inherit__graph.png b/html/classlibdap_1_1Marshaller__inherit__graph.png deleted file mode 100644 index 9a37ff42c4ae96e0cff7831c1c7c123e91fa602e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60677 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

    i}If5jv}VMD{|xIH9dsJS&-mcL5&dvhN&2s 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 BRg4Ht#~oWMzCzlbgT; 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 diff --git a/html/classlibdap_1_1NoSuchPrimaryResource-members.html b/html/classlibdap_1_1NoSuchPrimaryResource-members.html deleted file mode 100644 index ff627d927..000000000 --- a/html/classlibdap_1_1NoSuchPrimaryResource-members.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -

    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::NoSuchPrimaryResource Member List
    -
    -
    - -

    This is the complete list of members for libdap::NoSuchPrimaryResource, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    _error_code (defined in libdap::Error)libdap::Errorprotected
    _error_message (defined in libdap::Error)libdap::Errorprotected
    d_file (defined in libdap::Error)libdap::Errorprotected
    d_line (defined in libdap::Error)libdap::Errorprotected
    Error(ErrorCode ec, std::string msg, std::string file="", int line=0)libdap::Error
    Error(std::string msg, std::string file="", int line=0)libdap::Error
    Error()libdap::Error
    Error(const Error &copy_from) (defined in libdap::Error)libdap::Error
    get_error_code() constlibdap::Error
    get_error_message() constlibdap::Error
    get_file() const (defined in libdap::Error)libdap::Errorinline
    get_line() const (defined in libdap::Error)libdap::Errorinline
    NoSuchPrimaryResource() (defined in libdap::NoSuchPrimaryResource)libdap::NoSuchPrimaryResourceinline
    OK() constlibdap::Error
    operator=(const Error &rhs) (defined in libdap::Error)libdap::Error
    parse(FILE *fp)libdap::Error
    print(FILE *out) constlibdap::Error
    print(std::ostream &out) constlibdap::Error
    set_error_code(ErrorCode ec=undefined_error)libdap::Error
    set_error_message(std::string msg="")libdap::Error
    set_file(std::string f) (defined in libdap::Error)libdap::Errorinline
    set_line(int l) (defined in libdap::Error)libdap::Errorinline
    what() constlibdap::Errorinlinevirtual
    ~Error() (defined in libdap::Error)libdap::Errorvirtual
    -
    - - - - diff --git a/html/classlibdap_1_1NoSuchPrimaryResource.html b/html/classlibdap_1_1NoSuchPrimaryResource.html deleted file mode 100644 index 897281002..000000000 --- a/html/classlibdap_1_1NoSuchPrimaryResource.html +++ /dev/null @@ -1,450 +0,0 @@ - - - - - - - -libdap: libdap::NoSuchPrimaryResource Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::NoSuchPrimaryResource Class Reference
    -
    -
    - -

    #include <AISExceptions.h>

    -
    -Inheritance diagram for libdap::NoSuchPrimaryResource:
    -
    -
    Inheritance graph
    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    ErrorCode get_error_code () const
     
    std::string get_error_message () const
     
    -std::string get_file () const
     
    -int get_line () const
     
    bool OK () const
     Is the Error object valid? More...
     
    bool parse (FILE *fp)
     Parse an Error object. More...
     
    void print (FILE *out) const
     
    void print (std::ostream &out) const
     
    void set_error_code (ErrorCode ec=undefined_error)
     
    void set_error_message (std::string msg="")
     
    -void set_file (std::string f)
     
    -void set_line (int l)
     
    virtual const char * what () const throw ()
     The pointer is valid only for the lifetime of the Error instance. jhrg 9/22/20. More...
     
    - - - - - - - - - -

    -Protected Attributes

    -ErrorCode _error_code
     
    -std::string _error_message
     
    -std::string d_file
     
    -int d_line
     
    -

    Detailed Description

    -

    Thrown when a client asks for the AIS resources for an unknown primary resource.

    - -

    Definition at line 38 of file AISExceptions.h.

    -

    Member Function Documentation

    - -

    ◆ get_error_code()

    - -
    -
    - - - - - -
    - - - - - - - -
    ErrorCode libdap::Error::get_error_code () const
    -
    -inherited
    -
    -

    Get the ErrorCode for this instance.

    - -

    Definition at line 249 of file Error.cc.

    - -
    -
    - -

    ◆ get_error_message()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::Error::get_error_message () const
    -
    -inherited
    -
    -

    Return the current error message.

    - -

    Definition at line 278 of file Error.cc.

    - -
    -
    - -

    ◆ OK()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::Error::OK () const
    -
    -inherited
    -
    - -

    Is the Error object valid?

    -

    Use this function to determine whether an Error object is valid. To be a valid, an Error object must either be: 1) empty or contain a message and a code.

    -
    Returns
    TRUE if the object is valid, FALSE otherwise.
    - -

    Definition at line 135 of file Error.cc.

    - -
    -
    - -

    ◆ parse()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool libdap::Error::parse (FILE * fp)
    -
    -inherited
    -
    - -

    Parse an Error object.

    -

    Given an input stream (FILE *) fp, parse an Error object from stream. Values for fields of the Error object are parsed and this is set accordingly. This is how a client program receives an error object from a server.

    -
    Parameters
    - - -
    fpA valid file pointer to an input stream.
    -
    -
    -
    Returns
    TRUE if no error was detected, FALSE otherwise.
    - -

    Definition at line 158 of file Error.cc.

    - -
    -
    - -

    ◆ print() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Error::print (FILE * out) const
    -
    -inherited
    -
    -

    Creates a printable representation of the Error object. It is suitable for framing, and also for printing and sending over a network.

    -

    The printed representation produced by this function can be parsed by the parse() member function. Thus parse and print form a symmetrical pair that can be used to send and receive an Error object over the network in a MIME document.

    -
    Parameters
    - - -
    outA pointer to the output stream on which the Error object is to be rendered.
    -
    -
    - -

    Definition at line 200 of file Error.cc.

    - -
    -
    - -

    ◆ print() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Error::print (std::ostream & out) const
    -
    -inherited
    -
    -

    Creates a printable representation of the Error object. It is suitable for framing, and also for printing and sending over a network.

    -

    The printed representation produced by this function can be parsed by the parse() member function. Thus parse and print form a symmetrical pair that can be used to send and receive an Error object over the network in a MIME document.

    -
    Parameters
    - - -
    strmA reference to the output stream on which the Error object is to be rendered.
    -
    -
    - -

    Definition at line 229 of file Error.cc.

    - -
    -
    - -

    ◆ set_error_code()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Error::set_error_code (ErrorCode ec = undefined_error)
    -
    -inherited
    -
    -

    Set the ErrorCode. If the current error message has not been set, use ec to set the error message. The resulting error message string is the same as the ErrorCode name. If ec is not within the range of values for an OPeNDAP ErrorCode, the error message is left unchanged.

    -
    Parameters
    - - -
    ecThe new ErrorCode value.
    -
    -
    - -

    Definition at line 262 of file Error.cc.

    - -
    -
    - -

    ◆ set_error_message()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Error::set_error_message (std::string msg = "")
    -
    -inherited
    -
    -

    Set the error message.

    - -

    Definition at line 287 of file Error.cc.

    - -
    -
    - -

    ◆ what()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - -
    virtual const char* libdap::Error::what () const
    throw (
    )
    -
    -inlinevirtualinherited
    -
    - -

    The pointer is valid only for the lifetime of the Error instance. jhrg 9/22/20.

    - -

    Definition at line 127 of file Error.h.

    - -
    -
    -
    The documentation for this class was generated from the following file: -
    -
    - - - - diff --git a/html/classlibdap_1_1NoSuchPrimaryResource.js b/html/classlibdap_1_1NoSuchPrimaryResource.js deleted file mode 100644 index 58dcbd41c..000000000 --- a/html/classlibdap_1_1NoSuchPrimaryResource.js +++ /dev/null @@ -1,21 +0,0 @@ -var classlibdap_1_1NoSuchPrimaryResource = -[ - [ "NoSuchPrimaryResource", "classlibdap_1_1NoSuchPrimaryResource.html#a70768a07f380bf41eca5aa7e157b99b6", null ], - [ "get_error_code", "classlibdap_1_1NoSuchPrimaryResource.html#aaca0caca09e939602cade604cbc9824f", null ], - [ "get_error_message", "classlibdap_1_1NoSuchPrimaryResource.html#ab24a61e4974aae62962a40f9975e674c", null ], - [ "get_file", "classlibdap_1_1NoSuchPrimaryResource.html#a5165d667334a9fd6f337735c2b57e28c", null ], - [ "get_line", "classlibdap_1_1NoSuchPrimaryResource.html#a44b91121bdbc7d9d389db3440e2299cf", null ], - [ "OK", "classlibdap_1_1NoSuchPrimaryResource.html#acf3ab60821773bd8b62284750b02cfc0", null ], - [ "parse", "classlibdap_1_1NoSuchPrimaryResource.html#ac705b3c1cfab1f7530d66a974eb0e8b6", null ], - [ "print", "classlibdap_1_1NoSuchPrimaryResource.html#a552d711be27e6695854bd2b977a5cf31", null ], - [ "print", "classlibdap_1_1NoSuchPrimaryResource.html#a4c58ef196c2b247bd37529bb7ad6a666", null ], - [ "set_error_code", "classlibdap_1_1NoSuchPrimaryResource.html#a47c0f4b6a38d8ca075d1056076d2845d", null ], - [ "set_error_message", "classlibdap_1_1NoSuchPrimaryResource.html#a3ca90d33bf1c95529c9eefdfe8646e34", null ], - [ "set_file", "classlibdap_1_1NoSuchPrimaryResource.html#a94a26bbdd9f4ede88c74de97e9e9e98d", null ], - [ "set_line", "classlibdap_1_1NoSuchPrimaryResource.html#a63a9c54019daa8b406c4287faba5e60a", null ], - [ "what", "classlibdap_1_1NoSuchPrimaryResource.html#accc5eeb469c8c18ec16dbf7fefe3cc41", null ], - [ "_error_code", "classlibdap_1_1NoSuchPrimaryResource.html#a30226017ae9dfbe2e27be502b4fbdef4", null ], - [ "_error_message", "classlibdap_1_1NoSuchPrimaryResource.html#a87f74c6be2134736ca1e400c90a3d571", null ], - [ "d_file", "classlibdap_1_1NoSuchPrimaryResource.html#ac947a4c3d229d7ec505ad921a77702ea", null ], - [ "d_line", "classlibdap_1_1NoSuchPrimaryResource.html#af7d939b4b8154518f870d5424ff55f62", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1NoSuchPrimaryResource__inherit__graph.map b/html/classlibdap_1_1NoSuchPrimaryResource__inherit__graph.map deleted file mode 100644 index 6d860daf2..000000000 --- a/html/classlibdap_1_1NoSuchPrimaryResource__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1NoSuchPrimaryResource__inherit__graph.md5 b/html/classlibdap_1_1NoSuchPrimaryResource__inherit__graph.md5 deleted file mode 100644 index 691219557..000000000 --- a/html/classlibdap_1_1NoSuchPrimaryResource__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -eb28514d50050d591ef45803f21ce1ac \ No newline at end of file diff --git a/html/classlibdap_1_1NoSuchPrimaryResource__inherit__graph.png b/html/classlibdap_1_1NoSuchPrimaryResource__inherit__graph.png deleted file mode 100644 index 5d7dc1bf63e11dd3713e971df2f051c98edf9bb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23744 zcmeGEXIN8F*9HjFo3uazC_R7>dIu>AlF)lcdb5EP2?Eljr_cojDbl1D0g);-0TiT5 zQEHGbT?C}f@p<3xduOhhYi9n=HN&5fb8`0CXO(;Jb+5G!+SpKwj^+jp5fKrcjyBvB z_*^0)BK}Q90sJ?xpt}lu5c`>G-6g6X;@BV}QX|rVtD6TBZ|6{EfDwOtgVoj41z=2M zR&a2=%Mdlbr?Rvp*JTKk(F5xpKlD~qJw%rVxEPk8u0u=)ZT5+%BZY)?$fyUdF67Mg z#s_~7{u=uAY&c~1unp-C{C%@M`etP@S09+$1(qb&CpPQ+Kl;dX0GF1&E}2}`h@cXz#f5cB8Y<{~Iv^IX^XG^6o!feKsm-%_ZjV!g5zkD<4E&6|U|Yr!=`3RRCW4o` zW4>qf%klo_DO>ZOjc z?Y4vd=t6(zZ~CmR9N|@8VwZ^HYg!+MlFMO;nB@aZeh57(G(NCY^5(!SHyA0}3+eQZ z)7bM4hm4vlxJf^YFSUWkiXp|$%O4}~>XIh2>e)RyG--ZxzT~VatJCYPETM{^?^_-ir=8vNoF<;RwHP`yzTaS;(esEP>l>+f zZ`OdUC`K>2LYNhdd>&zyiXVIz^#l3BM*vB3KbEvhO!wXdf<@<9^Po=tlfSD(;q{D zdAJs>@6p69&L_j>Cr+GFiMfPw0x1FNdkyq~xrQ}I%6H)wbdf8bwWorS0er=%qemHT z6>`^8!lg70y9nN=tSxM63(V3E>Ix+ogZR2_8NiN^E-}L0l(onUd=TMpHr4u}#GRi( z9vj-KlHK%#UBWyxPlc`HY%ii~Gq^TuTKBvL#k)r4Fxj!+%Z{B7Is8iJ*OCus$`l-& zPexAiA!zqxYTqg9&_*Sm7AeAUq;`B15nT>EmuVQB%v=V|+sb7#LNL@!uR4L{^UJm6 z^gm1sjLm=EQ=zzp3>nuj7YG$*iW#jon{yjaewVyJ|6`qLTN*RVz4#M!zf6HohPdhF zni+b;IXO^mGrMP-pg^dBuGm@0!iAhP*?0{%$E1`90ZX#puv%Qe2_hmKn+|<4kT$)7&Nl$tqMRlO8b=+0 z=FjdH8kb@D?o#(|w%PO07Y1Y$sxb$+^!=vE02NQ+@zr@m<6ZO69M)mdV2tyiDZEk5 z?OpfK7FoeK#YPhYnv-9K)Ul?9Jxbxv;{sPiFPTaQn0Ll(Cz*8cMt0~dQzcPru_&k&@AX~bT`SK#j8+6i+6J*az+P)6z{^xzj3?o)a4;Uud6 zVgXzEg!8u5;>rZInI;8Y@h2zLNz+Nj`hnTVnQ@z1h%Sd9!2otAD!L2YZ$P{qzuKy- z+xrAxg=jNn69X?%$P}ZuP@FyJrz+khNL!T1O2)i^tpV|xvpq*21>reC6YB2Qgop@6 zR4>!9W1K~6Q1_SmCvN!{X9o^P=Gz5m*{{Jek_Fz3x_!G=-1A$F-|SOL#9>I(olS}i ziLfs|r0m*(d-{t?^9r1+#aMm3$r=N+`o}vJ0MQ0DDw%YZEd8Bx9-<;h?ng^KjD9Xe zGH#-w4|Xze0-!kJxp`;&doFyVRu&0hs}CIzR zvxr(J?^a~8rMIslq>QZnwtpF#7gXU*B0BO~_HcDoB+JF_Y=vWU-g8MB1Aht`dLl� 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 - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::PipeResponse Member List
    -
    -
    - -

    This is the complete list of members for libdap::PipeResponse, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - -
    get_cpp_stream() const (defined in libdap::Response)libdap::Responseinlinevirtual
    get_protocol() const (defined in libdap::Response)libdap::Responseinlinevirtual
    get_status() const (defined in libdap::Response)libdap::Responseinlinevirtual
    get_stream() const (defined in libdap::PipeResponse)libdap::PipeResponseinlinevirtual
    get_type() const (defined in libdap::Response)libdap::Responseinlinevirtual
    get_version() const (defined in libdap::Response)libdap::Responseinlinevirtual
    operator=(const Response &) (defined in libdap::Response)libdap::Responseprotected
    PipeResponse(FILE *s)libdap::PipeResponseinline
    Response(const Response &) (defined in libdap::Response)libdap::Responseprotected
    Response() (defined in libdap::Response)libdap::Responseinline
    Response(FILE *s, int status=0)libdap::Responseinline
    Response(std::fstream *s, int status=0) (defined in libdap::Response)libdap::Responseinline
    set_cpp_stream(std::istream *s) (defined in libdap::Response)libdap::Responseinlinevirtual
    set_protocol(const std::string &p) (defined in libdap::Response)libdap::Responseinlinevirtual
    set_status(int s) (defined in libdap::Response)libdap::Responseinlinevirtual
    set_stream(FILE *s) (defined in libdap::PipeResponse)libdap::PipeResponseinlinevirtual
    set_type(ObjectType o) (defined in libdap::Response)libdap::Responseinlinevirtual
    set_version(const std::string &v) (defined in libdap::Response)libdap::Responseinlinevirtual
    ~PipeResponse()libdap::PipeResponseinlinevirtual
    ~Response()libdap::Responseinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1PipeResponse.html b/html/classlibdap_1_1PipeResponse.html deleted file mode 100644 index c6c87d553..000000000 --- a/html/classlibdap_1_1PipeResponse.html +++ /dev/null @@ -1,214 +0,0 @@ - - - - - - - -libdap: libdap::PipeResponse Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::PipeResponse Class Reference
    -
    -
    - -

    Encapsulate a response. This class provides special treatment for 'stream pipes.' It arranges to close them using pclose() instead of fclose(). - More...

    - -

    #include <PipeResponse.h>

    -
    -Inheritance diagram for libdap::PipeResponse:
    -
    -
    Inheritance graph
    - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    -virtual FILE * get_stream () const
     
     PipeResponse (FILE *s)
     Initialize with a stream returned by popen(). More...
     
    -virtual void set_stream (FILE *s)
     
    virtual ~PipeResponse ()
     
    getters
    -virtual int get_status () const
     
    -virtual std::istream * get_cpp_stream () const
     
    -virtual ObjectType get_type () const
     
    -virtual std::string get_version () const
     
    -virtual std::string get_protocol () const
     
    setters
    -virtual void set_status (int s)
     
    -virtual void set_cpp_stream (std::istream *s)
     
    -virtual void set_type (ObjectType o)
     
    -virtual void set_version (const std::string &v)
     
    -virtual void set_protocol (const std::string &p)
     
    -

    Detailed Description

    -

    Encapsulate a response. This class provides special treatment for 'stream pipes.' It arranges to close them using pclose() instead of fclose().

    - -

    Definition at line 47 of file PipeResponse.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ PipeResponse()

    - -
    -
    - - - - - -
    - - - - - - - - -
    libdap::PipeResponse::PipeResponse (FILE * s)
    -
    -inline
    -
    - -

    Initialize with a stream returned by popen().

    -

    Create an instance initialized to a stream returned by popen(). By default get_type() and get_version() return default values of unknown_type and "dods/0.0", respectively. Note that this class closes the stream.

    @note Since Unix provides no easy way to differentiate between a 
    -FILE* returned by fopen() or popen(), you're on your own here. Make
    -sure you use the correct type of FILE Pointer. 
    -
    -@see Response
    -
    -@param s Pointer to a pipe stream returned by popen().
    -

    Definition at line 70 of file PipeResponse.h.

    - -
    -
    - -

    ◆ ~PipeResponse()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual libdap::PipeResponse::~PipeResponse ()
    -
    -inlinevirtual
    -
    -

    Close the stream.

    - -

    Definition at line 74 of file PipeResponse.h.

    - -
    -
    -
    The documentation for this class was generated from the following file: -
    -
    - - - - diff --git a/html/classlibdap_1_1PipeResponse.js b/html/classlibdap_1_1PipeResponse.js deleted file mode 100644 index 7723cb997..000000000 --- a/html/classlibdap_1_1PipeResponse.js +++ /dev/null @@ -1,17 +0,0 @@ -var classlibdap_1_1PipeResponse = -[ - [ "PipeResponse", "classlibdap_1_1PipeResponse.html#a37f0a6670887caa96ea5b9381b2e5e10", null ], - [ "~PipeResponse", "classlibdap_1_1PipeResponse.html#ae6837a191d34e2b686634e52bee73a4c", null ], - [ "get_cpp_stream", "classlibdap_1_1PipeResponse.html#a0e9f20410cc36e2bd9f427840b7be3e1", null ], - [ "get_protocol", "classlibdap_1_1PipeResponse.html#a2a6b775e5fa6265fc9ac4f9c576e815c", null ], - [ "get_status", "classlibdap_1_1PipeResponse.html#a1cba94a4d25c344985f5182a54e789b8", null ], - [ "get_stream", "classlibdap_1_1PipeResponse.html#a8fdea44223fe03662d322322c2d642f6", null ], - [ "get_type", "classlibdap_1_1PipeResponse.html#ae39b13938ed524bbf14807c8a35b31cc", null ], - [ "get_version", "classlibdap_1_1PipeResponse.html#afe78405b68946981c4b2d4e8cd305651", null ], - [ "set_cpp_stream", "classlibdap_1_1PipeResponse.html#a4f4ff88c4b09e011d285f633a6b6aba0", null ], - [ "set_protocol", "classlibdap_1_1PipeResponse.html#aeeab3df1376b578b865c313dfe7b26ee", null ], - [ "set_status", "classlibdap_1_1PipeResponse.html#a3de0ea86ac433904efdc0e4f4c86fa26", null ], - [ "set_stream", "classlibdap_1_1PipeResponse.html#a388249c36decc15f92514eaf2a1a8119", null ], - [ "set_type", "classlibdap_1_1PipeResponse.html#a7a7807d0a45dd1f6111987f054956e24", null ], - [ "set_version", "classlibdap_1_1PipeResponse.html#a0eb078feca514d7d1f8428d9c001f262", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1PipeResponse__inherit__graph.map b/html/classlibdap_1_1PipeResponse__inherit__graph.map deleted file mode 100644 index 4052bedf1..000000000 --- a/html/classlibdap_1_1PipeResponse__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/classlibdap_1_1PipeResponse__inherit__graph.md5 b/html/classlibdap_1_1PipeResponse__inherit__graph.md5 deleted file mode 100644 index e5b578e36..000000000 --- a/html/classlibdap_1_1PipeResponse__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -8d6a293a3f857d44c3005685b0a8c23a \ No newline at end of file diff --git a/html/classlibdap_1_1PipeResponse__inherit__graph.png b/html/classlibdap_1_1PipeResponse__inherit__graph.png deleted file mode 100644 index 2c6b4ec6d92968a89ee4ddd328fc93723afa518d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44362 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
    ?R_F7acqCjh9@(3~j# z;>dl7AC4D5HHpIO!XWy5Kf-N_f*I)^NvG#rz3)yAtCwJZ;7>g_>BtE*d``x8vA~`8 zJ;-eAWU?uc&I&W<^Vzr?%i}+(G49OM!}qzn?(`*W$=_6PhWmE3#Uy1wvyAY;4;CgQ zn?e4Ql;Xi^UzH|k4}-H{3>HUt3Mf=VavpV{Hj|a(Gm~2 zoN4DWM-d4!Gy3y5-_gHP(<<7c%{Bnxp0DF#`4*mg(lY=#JSY-HPqW}I>FT)j;BZ9I z2-%R`Ie7V<4#D;%J)t`+G!P$C<%(pb?(aruDYOvx|M<#L-RBL`*L>fkQ$^?5=Mik? z_!sBC-98&s`;sw2kxhYv)EDnINb&%m^BC-pAzc}6vQa0cTf2RdtF5^%-_94LqDh~c z9IcxO_(Ms?sday;fDhLsg?8hZjpC8dTduT9=Xbos z?+2d(QCfpUU~vfku-utMgS_f*=O&hD-It%%3`Y)rHq*R%U*pZ9nhcsMS^8^$Ab~>9 z^-p=D{TLDT?WjCQb4P@Uh}7Dg4XbaPj8C2udHtf!-~%R?gWrdCIade01pAM94a{`S zof-!nUh?hFB>hv%j+2A}4WkWHIjD9#8u}zRB1yQp3!HK4I1GAP)-mBr6HZ;a$Gpt| zuRNvp7-z15q4)D>w0kcC8kbu=*%UV>ftNprRpSz0YC*&ak)4xInk5wpOPC?G&#c<;s5}d27P>wrZMxGn@`Z~= z_ui1(jdpcPsic=-`(GmoO*E3wbUdpU|5t1LLughTYd3VLnva~jCF80i2H_r*`1aVM z&xHkoC4&El+5B1NvEU+&5;SS6IH2J-vYqAd8J60RFo#5OY|YtEp7$IPf>wTx;=Jq1 zfDg7lL4*WoO;aBLW5$*n>Vex)Q;$Jvg=QM}bld$?w7jVA0YERxSvu*jwtb8px23p{ zfaEu~;9UKw`5XW8@=0tx-*2u(3qp3fJbYM!!ZpHvf4hUv}5t6 za8Jd2!TP{q8${S)c8rb9Qo1A&C&#Owe z!M?J$IpLi-4F>X=BG1aJc7QXeF+#$6EXy2P`t}$!h4!k1d`Lf2&RplkFP_N#v|vfO zZK?5=Stu`H|6f`1FMnY`@)vOFlf1pTO_pPaQP#D9bCyNwNkU66N<0l*mTAjMe$lAm zFzH~@o|f{#x_f;77UA3$2x~=z^`~}~$#fH?`}$&~qA%7v-ngcX{)W2k{;=?Z01V`# zFQr*#=nxGdqD^Q;w-@Ex~E%9Bjd$TABL!E&cB|n!(2+3RXakJf#by_-hrj^ssJ=w;itkejG`IrsV?WfogX=B}z zlw`LzGGCL*dO3#(RyP&H3#2zjf_&Me$I`H5jY)k_$%A~$e|Au8*iE`X-C5rDZ@6Q1 z_rm)x^4GKf2|P5yw^lS^j=rEP92@d|j9r6zAqodkCv)`$^g(eP-)Gj;L;)zuoxbpb z61PfR*4wlH6Le0Sl>QYi1-73UZn8fPt)EPu@Nn33xON>Cr2f+~3z$BMeT2r+e2_7FR;kWf{l45uYJ0zc%@_K>IDotkG<&6|16w#Vxah z#XI(~-P}TPmi*4DQo7I*X4xwi+5O#3DW->mzk60-vh!@4*bnEQxfhf%HxsW%&izq{ znWGD~XYsp@Xu8c-v^MXWV=nvjAJa$rb1*}-dAijZ&KaLPaU=y{svpT|97BEcPrDriJ)l< zCj9e_Tqb+}-*lF#5zp7E;CCPH9vL@?EY8@KWG05pw{~&8>LmQ#PTqi*#Jt%wAFKT0 zCGj&PbMBbd&*!3FWQ?EQ|17PeC;I-*;TL8Awj8Fs+cC~pi!ZM5lbB@+s&5I~AMcOH zl6-bz_LM&7m{p{xFE%Cq_?TMbS+=zpdihq#e8I0ELG=zD9uwkYZm0U~fc7^XuHi-0 zC1~%$80}qzNp7kg&oVi?L4sp0R&w~iyPM(u6Er13tk>@kzZmtr$-MSzJ=op6={{s` z-}6Jw()^G3kw$VoM-Pq3u{Uh{Mukv*#8u&Pr9jbBAZBD!H zimOL7^LURR)G+@Gss9rlvNQjUEeD3?=8Fd~SZmxqF2FTFti$;NQ<^<0leRlDigl_< zuARaW(Anf#w_){Od%rjOr#pLDuMmH!kyeye$v0htbwN@Rk{_xpUCTdxUtKLR{=X@# zZ`|(|aj!9C?LwL{PGVkdqTP(1TbU_isoR_uF=uIr?(j%{Osr^3M5qve*z*bCd$xHfP5v~dg1x6Cx94mq0MM;7w%A~-+ZE- z$T;5pC(xG|d%x5CgcNOuhU1s{9As??TsE#Uf-C2D4zDM7QE_Pu@(8?a%kRn)D5?J> z!>wd9wqDo=g+3#BOuZ_adR%WJXKYs{XR4+QPRKn>+IgEVk+1DTC=JHVu6=AsBZm~Y zQkpzBiXmSFUpC33ZGO1C!l@0ME#egh{(6iYZT0jRwZf6I07>#i_@F_WAN1!MwQU%G zRp@uW@-eFeeGsKB^WRwiVdB|8^Xt?mA?DL_aUn~iOo=Z0e(?QLy`+pcmCo!i1_83! z?O`c1TjMjfj*9n?j*Q&ecb9330|%Y-T&4f6agYvvO)B!@=Ic=Jr_F_r-^wY7>gpmS z8-|H;3x5BB__?+$jRepg;otNsc@xZ*8}HAwa~1ho2pQsm4mxLjMp}6WYSi7#PP#10 zEf@H)oA4={LSrhOU91}s46EPTTxJ%iBN@nMd_GCi1Tpgof5x?ZwAKAPt?VM8?D3{p z0r&{VkDNM8Qx=uFdZVy}xw^4E%kCJstjWmauY2B=((3$rCW@Ftx3>DzFW3y&xzhuI zmvm(t)$GG{5?N<$p-UzkB1eAU=EbFl)0J2Lb(09-a*_4Hb%y2IiOehXEjUI2_$gabK)?LBpSMb12UN9~w5dZpDt;m~mdV)h`X(}9&@a0GASh7aXYP%A{eE#ke zFuG$BVRWe-L>;YQ-ZGSZ>DGg&WhzXD4tg+N!D-fW{!MX*f=h&Duvrw)DfL{2DQ2XIusFPQq@f?^B3zZ2Db+UK!}twq1kiiZG$zPt6t>Q{>h$S&AU)du79T?i{C z3gMu=Q+{VEuW)`NuONIL?C0x$&=hkfko9aa`BEcN_q|L0u5U{RF><8i~> zo2kAgO`edJ7O|c7!ts5z+C^L_zt(AELrMC}PwS+Ya&_8=&n+#sgou8SY<@{=i!7Z_ ziaYK`7$vOEdSLNQx;(#n%92go!;B8JpAn&(B)T1YbrVH;lCoaaB)@S;?hM25{D9U^ z^j|bCQgG$zeGA}DebTYng>RWMZ+a7s_EEiA=m_{O_*SYkCl(e8KgpD>mo99ZD4nih ztSU9Ll~oJ_j9W!&M&IgboxBAWoV0y8#Ki5^Q*%-*s_1`*$3KJu0R1@_MUbh}=y&W1*&dDnA%-u@F#s{aY0iyq~(zyp?kZvMn2eDsAP2p_MvO@M0db-oh?3DE|Y zC`iV3DbeoTe2vo0kI&)DS;jHhrwnql)C< z-+Y07na%#2`*wM*?&|FdJ6oH7fhw_Q;jS}4dNaIlBn>p7*44b*vtY;8 zu*4D=p`MUPe_v7WNx!H-`q_Vb8NTn*uMiJ@7Cy^QfR5V`iwrvSyou@@h|ZX=x$H1S zF_4fm$*j~oVZ^EPXSKTz4)r=gcd_4s=4Vt_Z+U(yp9VG4TPD;*fNk0P4-|XZxE4f6 zdz7=ltbziRdv`vtD zvP8&<)rG@w;X%^Rd`!b+7D#VNmxc`-p(zfg5qs70_911ri@h z!vERmV5b9qz3o#?ISa^%V^N5bML|#%+dec81PAD+s{99Lhp$|(aNEGbCGgGKOu6xnE9UPVp^V;r%{tV>4jkf)~*!$D~kL#eAF^IbT zc^GlIji8j-)S=cJ9vb~!dpefAN_1eo7$ZJj7k6j2rj?6146R)KB_dAf3e~%U_Y*9Ao z3^q5Z&W3Kp@y$q|0!u!;Y#5-jFGvRx*6F`~IeMz+bamn??maeRXq?1s@-nfx81I_e zGsAi&&6ifkuS-y5`&yZ#61@+_FBRP#sS`<`&Iz2Sp$kK|Iot8d7lb7byKtJwobw6p zI6jWbL8^wDY2~z2zr5dOkWr`oxqb5ZkJpsz)8mr6n7GP3yX&yLh>yDsCM;XdKY^$a zAeUP=jsWqvm&igE3w#LrbEe_Hi;y(~Fk<8tjDW2I~kTEk{ATaUi)es1H!8WN)+K*D|cIP$Gb!@hx-$Q?(z4PlJ&7*^n@aM!utzeuZJq>pNOAKW_*qf zjkU|@JqvW$ls#Utgw-MID?&YP4~(}--*&XD@YfVb4ur1RR{;mMQ^S9ZGH)&MLM^DT zqdN0puG)(cxDUchvLK)|esyO_Y${lOLKWQy0;6C!QxKJAH^pqjcZ4GSz{9{zKn(GhbM*c}BN zb6Zu#?f^p~2@0%|`R0D$zjwOwa~O5vxPhZbIWE(x42jKnHTBTNrRa&@LlsT>Dw9lh z0eyIj1XEOEttipnvSGUnE3SafS~&VFy|sW9BnWB)Rrgy1{~oc}tEUc)dHZ!XA7pN7 zstosg%1RV7)SN`rZ(L4$BqVq=4*f1OLNE`1W9s6_{wDZI=-jV}2ZnuG*xGxNhk5#! zWU5&lQcYTUHcJq5ewF2Ve71Uh2gz#VFg?7E zXLH?UYou=zBl(lUY*z#DydJ(moYqAEwgv0c+;wa|%pQtNoJP!yxo(erQ1`|99;G4k z?|gbY64qru9Q26R@-klstUIVI;aXnXyTGxSvrV=> z18owAO@OpkoMZR|U-m`K-^xb$++-+z1h=rVX1!kGBCJb(MTY+4R^bx5`bWAhwtc|FHNTPL`3*aAchE>M8V4?fJox8rP5Vk z;430M$=8?Xj6D;!(v3-pRwJg*!f#@)xDabwae?g(pt9{+!=nj3{qNz%Y&O5Vmp~6# zZVK2$@o}8lW=~_HIs$NqM$Wj*1G7u27<{`^9CTo{CWG)aLqYlbv}L6oV)cD9 ze?S#0KQ_(U|ICgSqGw0dwYGd)jvw1eu5o=5VR^jO{g6ZJ1U)l_{{_k6#S4mg-tV2S z9(-{pitCo&ix_M$m`U%6i4^U)BE-(LtI236II3FPY!Pv^$J;PtIa1< zfVMt4;GhCY*_pZC)*EzEIo;}ilFHjjH{&sHr={IOJDAfLeziyxG4Oj}>lQ9=&y=TG zYO%CZUQ+RQ%iPLw-oW|Z+=OavVK!sP@NmX2x>dU!=2UnDy(l_ z)^=biV9iOJd*)dRIiacEe}Z1M8_m1-DqPUxytOmZ1%ctT%2 zM%jv!K|ID5^#LgLNm**d^IEZ9yg$f`NvuC;=PU1NlkcsX#>c-3w|zgZAF*9FL6iya zi%3tpjLU=6E4I=#$L3w;s=};oNZNs(;jLWg<&J4TL|vRV@RwbQ(wm9APs`B$y=qnq zS^~FT65{H8WFSQSp&U^?v^?=PFFKw1xnDAO&+|#_`1-W~^Zs9OWIFqq38nEHmuv8F zm;kmMZhDc@xh+t)@9w~tRd~%tzAAE(`>uK<-RUg}PaXc+5F$mcn5>+3gP;D@)1P!s7l4#O!_qNMw+sGMw=suX1~(PYF&P4xKYr{@^s z5%r2&67&>os~Tq7H0K-Nb$+(ubsGhA-V;LplGnpPnu`z2H9&ezagkAQxJtIN&GF=3(QY+@5$T zn4cYq-gib6^F9$#lTv)jE+d7A*<^xvMMH&&&_@2Hp=rERNaBZIpD$nBU4n)9V>C9k zBq+nLS!am(aNZXZAJJq25!6OR z$`;?$N=ZqN6h>)pO8(+pzGfjADAwJ=`b@R95)O#OjcmR@7oRO7xT zA;j4!a7g_Z_TVq`;kxDcLb*x(GncD#GO&0}wcQnCnc#B#?m(CMukg~%U$0Z`%_^Ej z`A+VyO<~0bV4_l`7NNwX{ZU|)mX#(%vvh3Z{j(pA2dHFil^Yr%iUCFVIFVs-VKG!4 zy=e2ss;X&y0loLSD(H(piMrvrdeES7-%LsTv#TwKF( zW_ow^B56c>JG1jEHt+fDo9#6ZUl=bj=>+kcYB2oOL%(&-=` z-r?AiFwowI?O=rlSe4BC)Jf-}QQ;&h$9m8=U_WlTfJF@w-q;;ir`lghJ@>vS1#W&- zn1u<~!zu1-_?WCmP*TK)8^0r~o|Gha6?i7K|1FQSM*?R6SbGnmt zdBw$RRBp9=XR|EOuint+MhDCf;(vAV(;6uELRRTlM?l4};2<$%Q)7q_mU>$hkTV== z#pVMf8j2l3?^NRm=JuK7h775$2T7FP={REYQcmxE8K{G_?WCfhNo+AaS3b2{G49O? z6hsm=j>U;50_P-M!Xa?Yuavy6- ztJsp(X|zxFE?lhKdE4rxOE$~H<~7suILSxupZ-Zbn0@^W32uF3c!V-EDPbzg@#Kk= zr{E&n4$@Oz24)IGOsuNeHcxa2*R~Ew@rcdvhhg34fRFIf8kRzw8}PIvfTlOfd#0%? zHgx2?Zfp5xO(nth!|+vC3HLrm$|=FWFCeR-U>Hh#(5Lh1V(uwTct)jL))Nexfk*Xm z)VNj928f-Qz`Q}&PZ1!<*1xz0xeEtGF=}V>l8yZGDuxTt@+4yw-0QUKLiMMQoR#_A z#RL&VVF;i}EZCpbHZ=6+VFA1)6o@N}sxfskL2#2Tr z(k`y=0!_cmXcI-5qB2pk5cc<1;E3P~06RPevGtR+2QZMwW{CToo@bpW-0|+WvWpaa zHTH#+x{MC?_M6DtmS+8IF2hqnd*k*}+T{Sx-c!-VT-K=F4r86%^zSdk^@E)|xa?Ju z{3zY}H47DWB&84;Px+U$fqD4qF)n%>j0cTH@VhHlX_Ua^Gk9pD`&M(|-#hiDBd@i= z{*|%w-PROD#PthQDd8;a$;P{=NavJ`{!Wz8nFZ`~v#v<@QHPgIE_W7Krt>@M{stqe z6OufM*ZD-uc{7xgBcS790$*K$&SK5BitdGnORr%Eu}QBYiuQkirOuLt68p^VN}zr( z7!)t6BBK(AWH9g=p1!Opx6TL_;mVq-l-!B43uL07)sD$^6oS`Cu3(9mzjzkA2qzlw zO-gfl;gOLpfnh8|_G4Z4!} z;hjE=h+WQqi8N~>V~x{=<3)rjx^%IDyD>Sa+XIX|w`S{6S1 z_89^|tS0gw3fa5WC8_V$|4{=@`Ns~p4ba#N!*Z8Qu>lkxvW>kHNZ+!Y`xa*n+X`rO zLy~&jnM}w>z;*@eEKvWSRw`3E&@%tt6zuJdHJ$p3Y5>e=@o!aiOxsCVYw~W_K+c+g z|1TALtvaNHMK&wuFJv$i@o(j97DF5Cqz8xd+8@$uSMndZ!&e8cz<7ZOBX2VaBhQ0$ z;^n>4;URGY0!=kwN~++~$GFcBKm``~$I-8q)!YldlE#aVA#e!%{RRJSHBrdHzE9Sn zO)+=4YiPGo%nuacOmup%?cCB454-sZ*drbYVFehgfC6xmq%xXaeOP`EAxqcjcdYpr zK>La85DNyocKzbcR23Gus=C3Wem`;|;I9s=$*R@_|Fs{V6X{mL#WLDbU2YcP>dK=u zgui4eNN0BjvqMcF7D)oM!tQ#=6AI0n%vArD)kKR2eqM2<-hA4svncYI3tH|8@R!V{ zrXc11rU9G&A!y_vi7>f(W_}c0KY>gqBRk=TDnPJf5it}?pwdu4skIs^zj|oNjiF>R za@90{WyDRqyI7s4VVj2UsqfF%!UP|iYoPD{xW+CvM=ng5hLneYg-VgwTJPnTDb#y< ztwpLz>b8#&Rd@{?GmD1{OmZaTPoSXUe0zpgAVU9FAf13(I8!GNO+4R6erNGL=Fa_Q zvF*B|RlvGHl3Wo{7qTsu11{!{(b(5fiD_5KW2nnLou5b-Srj%2+5pFkDZrNz`5(>n zcu4!Y`(InF8d-9G?sS;Rlq0E-PVqu6=~c2p<^UU>r5{&x*OUfKkSYxUNJ&WBWOZwLGA1Rv_$d7GSqKn~pJXN@* zf^Ca{+oIiQ2q<3rF5@T>Dnd-f3?X|@(gmI*HR@5(?6)8(xYMNLrm>^u6W0Q=Q-}8# z*DKzGqVu5G7g(Tpzynt>Z!jMp#eHnt*k5QQ0K?u83!7U0J8suVUEbk0Wz*4GG=;la z#sIB)yiYrqf;Myb%(w&WvF0(WV!R7@50HfVY}1dJ4_L)SF&4gLt@eM!A6*$up;CmF zWs+6NzyRnun1cn~hC?&h~uzgZow7=OcFe1Fw;wYsnl3i_%O#Rk3NK%va>!s)&Jyh|GS0 z=VFinLTT=`cCy(tR_fkYMYpZ+Os79@vZ+{#@jmmyUmE*+fsVVSy#C{VfEB>p)ApuL zLMd&WZAL$c@wDt0EFmY;gC>nuh3}PWA-<=y)!Y_>l^&imx5=&~P|>efsb?Z*q-W=$ zN>uqP(8$X-XC_HjD`?7B>mS{$>F8Yp=7yUhy4vV!+^GCbSnpm|c1PO!)Ve525S=7B z#5I2$wx|DYclI}CxU|0#4AM@pTYx*aBOqfW5&YW{-2tnIrmYO$A9L5NH)y|{n}Bn{ zw-zPEt@wxt@k^-%0^1~spq|Vxi za%bIm_8~vgn9$=#%q)388=T^o2^~8P6BXgL2c);%5~`m_sfF2q5=J3B+41%@ANX5> z`4-`B0|O}aGv~UjC9PsPXDyL~98`}zJ zKC=r2GGqYM*M;Y!2u%OvT8WqEU$LZbie_eq`34}92CgO5%N16MB+x^9VMFC#V)8_A zA~})kNKY2<826eilV=X^61d@ONh@-l;KSlx?8ODCY|OVWpGFE|28I%IyVWkqo3H9t zauJggS*JN@of(5>5el805WwcEq_4_c3M+O$1Z!+_ZkvaH0EliIofW#Wj{}$Yknarj z*ay&J&Nb36W3>p%j!!Fm{xMgqF@4tv{jaB2;_=NNUudSO)U^qA0I-*_j{_o_Ro!{R zjrvm|GUn9Xh5#jkO8wx!IDjm-2_d|vzQ_6 zfFF1en(0k$Nn&w^8!0VQ5ijOYgjSya@C%1}W;l_tT?0dJ6uW)Zz~+ar^jX0H0MUy{ z0&E`Sr)sC?-9nqm4hERSO0*)*_AeZtPgiE^f_M2D*~|oM2*X1dp=*{ zUAKSIK?L;$E^q6yLDzco%^VYCK8YA3`yIv+Hq2SD2W22NX5tB+%3~?{#ral zrd{+M;|H0pYC;{XISXOtiG#!XB#z1~g;voBMr4L=jzC{Rij8y1jUkd4~ldCZ^lz`;Pr3oi~SLwmsTmFUM=? zCHw^P`PQ#?ityWpS-oqvzgb=`tg#k-_3vc=jVWnX@xVFb<*e+#EjWi|un52Mn?&P- zU>TSiz5ulPloND>lUBp}% zIQ$9ZO5j#00V__;G@*u5e#K;*ONiIW!mYoIO@$nKzM%>AZtUNRc))+gX+J}Q0AS-4 zw!r}-_GcD#(M#IdXffYIkNT6qeV3R1e%q6q`mj01N?!Wv|LMUV1z6Rs7rL04l>!dn z&ahwGyrADk#dO|{>Q?a!GA5qv%G^mZ&Mazb&bEg|@}m__JmO^%f_2@VlZ# zF;7`($NFGjshkfQ+D~6ZR1t#yV_ttc;QRL7oBFVDKq0_huf&GOglw8?`^`Hu9ViPk zXK5U|NC5!a@MiUGx!R7~4*^L_>W;~F!C}1chFHCyxtBzr+6pr4@_IS*iT6UXM_qT2h5T_@~f?KQ! z?+43}&=l$A-&M73%p-3i&4kVk)iCCnN?f5ary2rwmdRz!D7|%s9E)}*GTGCkx2j6j zHqc5!ae~<=fL$Q!)s6oDs~let)ekGIa)m!e*%ekj2asUWcvaojsjuVyeTU_ta+k3Z z0j-C`YVOYirJYj>{ABeoJZ%N?=pL|A9X{Z<2xE+5+V z%MWO905>@cM5ZIMtLMAr_3>QSABX#Osh<^R3%z-qsK4+Jts1_g(JCpY5<`0UCVuFp z%FFN}am%2;a`{uHK@MU#)#)!6*uBbP6I5qQ!f`aQi%|Y+-7jL;9xXS<1caLLB@u+* z)&{1T`*y)!e1POaRB^DL=5}w>@-VPIaM~YamZ7VB9}Pyn8yc`vm6I^3R)@&pA0zp> zbm9oQ@2mEhFORa&`qAqB|I?323FEBMPlRzR8m7&0UIbPhd0_SWhdI~q)};Ssft3um z{zAXjifJWWLak#CEhFt+%?`2uS4LV{;RO7{p)#hL{O6B9FgkZ{fAW$!Np1b5!xb6* z715Nts=CxD5d`$l(^%I{=!5$2hsG12>B^+KDIaKFL^yP|UkmCV7M#!G1qRKWswBK9 zjg^MmzDn9ke2Pj$`Pt(nS+VZIz1uSg#W{QWP=}~V2)HN_Kod(xE$EUKYo!tyeRZG* zq1ofDi)yY{xB6E5PR%1pjEOArr3{vb#{iUd!=}Gxpa%kIOB7ZfwVip?@ZBoGZ8ooF z+p#`fOMOg4%|pRhku}8sEnp%oAZW_Qj$mNHo&{Dp{OAbspkm2m&AkBpfXF~o&SquD zloWhbPLMP#l8}kcZ6F6Kya!nSZZ8T;zRicTE5AVn8)4rg0A)SjeDrIgJ-h2#A;nct z>?{pOF{AA+YgWD^IU^1hI6r#te<7ONOyRXeW|Q|j=7>CfjDBkXFQzm0nQ_Z>G9j+C ztAw%RBlHIg^62xR{p%y+ljMv`kAVds@!N|WQo*x&T)`iRlO(pvxom6R%Ua}-w*vBE zNVPm-K z3;Bytmrnu>J8CAYn2R0_x#X$N%#%9)p{vClylI=l(}PCUAET-jZ@%r<;R5&;dT@L1 zOr@D@*2rJxqsEN!>KTfq2pQ-}{s}VxHx`C8^3Q;8s9629IfHgN<=iLaFjQb^-miA> z0<&su0u0Ax&6LP^0 zT>h~z)gGuR5Hw6VzyLw3uKIUe#3o9@KV^5SIVcd;<4?QkVDI3nxFM7raBe6zmSPoq z_^!%9zZ9h}xf^oJN@zNPTu~fW+YBXa)0?I}i?MWeGI|9L3k`9ViSpHPs!y&Aq1qc7 zn1^KT;lkpbaj(c)OpydC*qe$V=0{dgYzMkrR;q&ACy=}D)Bbwsrd1*+dgNZ!u}RwI zH`JXu+!c}q|LoQhq+!~yK!`Ryu%~T9>E_-dZZn-Dlix&~TrBLfm%LSI5Y)<5J`Sbx zZZe=Z(|R@h!iw+dkKocu*5_hVU!7$mD+iouF~3(VvWD>TPZwatIRf@ zB07f*VKVAuSvtxRGzkY>o7FKTCAh4s$`0@(7_{Sg8c!{tMD3O9WSDqo#{-{yuytB~ zdc^nH_NMw1*?Tdm!wKz5)0iiW3yGhYjGh}((DI5oZp0c5tn`QfXI}+2HZAEm=EO)o z#%$Y_!bswI=%6JPBQ?NTsUhsmr+jbv6`b)&h?{fc!@zgX2e7XP|H=NZEv;k*xNFuS zcb5x_4Yh;udhzM)OH>o&Lxd^Re>zlHX+hBqn&8cj%=nd~5}D`ozIb6ywRRl6RmgiSv&=TmB7T|7uW4Nc za8bYk_ayJm(6fJLbQ7=|7xfmkfU1C4d}@UQahwS! zY1Ck6Z0kX?bhmUT`iE({dBOE3;{+$bd$IP>) zGOM>PWWGz!RydFa*QSZ675exDWHF5!u5}*~xvu-{=ZV%l)`ie2LEDqA=P1&oumDpL zx6ccnOM0!43`R2;fQTSy;U&P8s&{m+kaol&`vV4MWJsy{TU>a?s4&zk6OZ$VGU?Y> zQo*59I8)`gEZL;2m>Kb^8{YP(w)lgujtB3){&G?Ve&VMoDT2Sg#`K7^MLX*6t>-Rq zv2XiE6}sW#Wh`o1ThpoZZ-~ac(#_4kJL}3vrrsraE^V~Bw64A}e+cp`WrMfWniuq; z_Z#>Jo7E^Z=m68W?emu;nJ{jML4BiUTP>6x&)s+$>WD@~x*PaK7$(u*VUMP?dXTb= zcKpz4T^4ttJx}1Dsa1_+r_2CgxZCErtFC|)t++O55rW0G0 z(54iFwAj+TzC)?P7?b=C-=N$IU&WW_pGP6hJtydPHqg94sLwQ3(H6K=^{b#9^Vo{l z1?c_eM$=5_HdT@8GQx_{|L7<;LcvNM9BGjY=xXQF&ob?2RQZMP5zs=_H~T-zm6q~&Pn^P*Mvw^?x_VduMudW{HO zAEx);8ZArPwJm2YSX6l>%9)bog&B41B4Y(;DaS4%)oE~_f0oe4CV~GyH#huGe;%Fb zxxC%;)q<7Nrq2P-Jh98W)ZexuTjeg{pxtD;|I=j~d$dZ}0jTBq+9AMlBt0ix*!+N!fU0XI?DkWYdtVk_-H0PGRl zBs%95^j)wDe)fGdVfs+up|U~;{t7Ly9zte#uI9lHp|pTx46R2Z#Td)g$%if#6}*w` zUzH@M(spRRtydP$yk2=S4Xpb#oCObSv49eUGeE*0X}pOW-h`q7;nTLFECWb~zL^1% z021t3M9e*&UD5gdv>~jvBz#^I$`~+IjOaCUNOKFIwW5gc(2lZZF3fR)XNYJEv%f{c zT`JLUl!-wUL2+MInW;d9*_8FES7Xx3>63fvk;>i6%`UBb$R7@~bC!-HXDxsP@H51m zJeQfzRN9M$_*)QEOjodyq1pK4b(%a_m*QlspA8azTisj)Fp~#er@(DL3ktvpNil1c zp!$746WnkWhOJe?^@T5qhd+9;U+ec@+K;Bkc0d&@li&-#HR)K^x%ntSOziU;DiP`1 zwuV$PTtoDOMcl7zRmGMxh?jHp&`s`#Cuql`1nqdtHI*(I^ozU>TTn%t8Npelxi`^| zLd>WEqGxu_#lx~t`2w$kpRI+84wAnQTu~9#>D=L0l|4^=2*q<{TF?kFzGwO9kgFkw zaSB@h8?q`OGN(}YQi0}#9ul2e$G&MTouL!caaOzaV}+q*8os~jzZR*or0Mu|Nm)h# zUEAb}JT7X9oG!SMKJqEgYXja5FTX5n*5_BbIq;D zH@c22-I?p$s5FS}<`B}I-2|DztNmvJk~1iXftjnVU>3g0TumN=w&ADCY#WCQE`wmH z@DNJS(US>sFHkx%1fCe1?ZU3C-?sF4R#(E>o#%mF$SytB4Cr0mtW^Bg21!>)OUH+I z_1n7GTJ_zwub8y>zNXC8TP-Mv2egP_jD692%y;vuFkbh(R!-;Dx3q=oZ`BH1CuQO4 zx#LPNazT8(?v^~0V2I0J{s>9|B*R33;8hWsafT%WuE8NbmLq?&i&!_{D@f;TX%%*W z8EY_~7_b6)6H7>O^-T@BbV~Y!vA|B!yCj3q?%3W?pV%2elYkbL_Su2gMyga^wu5w}e2t7ye`o`l!iD zT7j_t=_%1fp2z)UK5{0D@Y)uDv5%k9%vIwABgn8qp>rZc0k4pyZ_ATHao( zZi6B%VQ@MYkxMsg#daWYPfsV(&x-TLh9_hphtSvDLHemJe98ETbw8|0>a|p zk2`gX83j7l`fXHb0nfP1s-RzkNN40L1+|FK4XgA|Urgc7yVQ_UocfCh36&!b8apcX z8_uKzYi<+JH0em_r$atSThR@(w_UN7 z1K~d_AwYp~x;;qYoxs3Xm4m@n3ObG%ieEfjrTe%Ig+#x=iVdO-^m*VDt*5cZ4T|qa zPtfi?EDa7owV@Iq&b*}mKrWamOF}BH$BY?LW>@xU_zZ%nAX)i=24S0Y+n`RL7R!ic zthS7>lG{SKhSh(5ZVGdy6@cQ3fkS9dyRx+qBjsEX)}h`qSCI~YbCaecZ4eIqZw3Y+ zuLYC-^3k-j;-&O%8c3QIVK&IWb#vf&y?5x_vt1xdKl7C-_5L$6{C#Y`FPY$^b$$}C z^SW?@bpFx$qenbP8c;>!%9`B{=Kc)@*t6Ft5L(4~IJ;>iGs6Ld-7=p0&4z!$3w-RP zXLh!qnRtT1RZ+bj-=E(cEz08)fLspqEbrrC`MMdp*g!089Y zHBxc<4{l+d(4(S5cEMiZQ$Yd%n>P@{C&HChZZdawufO>!$dBJ(7lLMcY}Z84ysDD# z8b|`vB5#4f**q@cq>iCaF0wdM*7$w2h5!F8AQ&yo35JH!ahGC;ESF6U$+hxvlZ299 z9Z2az+W3nc%9fJnS>_?n!Lq5ZP3zhu6yiST8lCIgB6p)om&mBuj!WBSURu?xn7y+5 zVQ$30F{nO+g^mkJa&`SvJRJ>a!a}l_74n& zD~K4xQ8Y$uaDzQpoBIqU54wd!FkcT?BDYtDrS7R%;mB}IkatnqfTmgV8zoE}iH1}i z3Y`~(_{Vf)FegL-(%ikeV<$dQ@KQ0`#orO|+DVEU@NO&t^miK^cX#xxX!ysD)){bm zlTb33a+aV@dWzNjX8!>#~~Bm<2WJNq`JVW_Z_lKj8$fH-s2zCcNb& zC`2RzF~S29(0QDXnS8$PFVCo94bBIBerW-vfZ9iDlGQpPp6RpNxjF?qi>YZ$KYGu; z=FoseM$tM5GV~ar9)oTE7|qHjOy&Mkdycx~fG^F)*s@Sus^n{`q#oYK!HZw@ z;2g*`m4yO85r!6agzR>H-VemwK4^L_=8zdh1*>Y-WgW+LGt_jGa%PsH-z)B9f}iVG}3Jf68t{0nSL#}=9{e*Ii||^nk&}5VQS(O;jW)c z-iGjiPO1EcI$}jJg|Ie)J>2;xKl&>i@x3OoEa#ab%uLV+9PugDbLl4}2J z|4#QahdO7GL&9mI^BWp=946yqw?iz7b;nd9-S9vH<_u(u=%)hp27xO+au#~lY`X9+ zCa`z3K3xM@xcBa>>WhC;C^lFOlHtTZwT!MXkj}n}td{~Dov-sNQQ7*Y0G#%9?lbX^ z-0@@;XJ3)VSmtssfOlhJQ`w0J_l`=>koH^d=i7)%F=EF7m+`7du^VRo(Hu;4>zevOV4H3IJaMq3tyLeg%usXHUZw)d%a=|do(h{CK9 z9+v;gJ;I;%+m1M8MXchICaAa`7A7OJe>Y7;hi>cEB_Hy?N=JtRm9D5T2Pf(Znl&#A zt1)xY?dpwK!bdcZ<|xqohoKXU_VBwWP-BoYfW#t`h(5LpaRce*gJQ9#;&V>d`aCSf zDPl4b3VAXohuA0s6PuWwAseiHW4BaiD zbPSzCE2$ucwvK(aiyBO(Y`pPLF8^iZpI;55sSZHqDr`8ysb>vbYEbg1M@G# zFH2)2pzP0El2%K_Vp zGY~(e5+1py)}!h@Vn5Lnc}@SvhwQ8aEJi={X6A)4BXr&u5MUc(eVZOHkxisEA19Ec zj6-!=u2C`rbJJDO0ejw4Lh=-86{O1x&}hPcMH6;9?gR>Y)tcwjmD!nuEJhqS1hHkt(wA3s<4?3uNF&`nGAE3T&)vlKg#g0(vZXPineCmS~ADs*4+p(5M~|C>EOgJ9xK3UUat_~234B!{&k0)G&%5Mf&}0s@3qae9#3?p-#IwF$jLe9XDn zZ%xw4vdq15)pY9h_+RS!GcFiow}Qd!&+h|Oxf!jhZWlaUFUNH_4(eZd96MgCD5j&c_8ThJbH+`;HxE^f7^?-$ndHR?J0} zcV^xFKEruN7P38q4@JXV)HZU(1Rw)xQI%S%b63_)SfjWQld_mlj<6LxzDE@`|gL!hULALHgM;lTaG73uy<2ZiI zK7q!#eHXAdqkX`02~oi<*e`=?nz-*s^un*jFMEKh$%N~OEh5k5&GR_)y}@T`h^m0-HeF`82qA9hhOqPBuVd#rU8-3sI3i}c10nPWG|?D zqPo=WVPoX`_4Pt7Pi&?_J#*p~gKZAFMw8+TYPfZ|ML_B=f+3@HGOkCSL8{z->NFPK}+>z zmFB?S!wiwHM1q*tw8+&G_TRz}6ll=2%T0Xb#*iCw(+fAIvE=;49Lsh$!Eb3z-w zy(pD+1;f(@cjL(GpRPaKa}W}lrF?4K4vR%Lq&3T;e^vmmA*Z5hE9?)|0Ba~#rklKC z0=&kksBm)@?|{BnK<3)*aU)h1#*c-bvid?;SHsw@sNZ z6=s+cT@D41Y&ME~k&+W?@sEknebkI#aK-+Yq(-usUX*yU{WMqzv8UR1|4a@7rW3?t zj5h!_Se=%zJnA&-=AGXpG2x5%1s5PQ4>_#~s&PLF9x97?uW zloasIs(j(a;OjWt@r~(zf6wjgbhf`f+NL!-#?*fyN^N`83Vdt{R^UOUB=LOK{lH%5 zUzUX-!eIK-4njRE6SKbCv6MysUcB)f;_x)9_m@%rnNr4Z4Sw4H$S{rxn#q`9eGFpx zC*OGAzW*H`!(FWNAkHOgGwfi*bNaYOTg*9w&Vwu!MurSC*;D};hp@yvsEqI&`7&B? zJ6qcl^Xlz8ic=+-oV0Y_ayGJOw|`-0yQYXbuW*UUU_YdFusrAmDE}EZ`bLx&S@AUO zwNaTx)57hG?-F@G1J3pti7LsIXXO+hmYEnv+OT^l^~sME_eL&Em0K#7DMuoYsQHYb zmxGeEC#O8>4Dz6I^6_o3SAYK7yBP!JFDe^^Z%fU$ZqUt$*mCkfHX39MvqN(2Yab_O zfwaU_5Ni8a`h<#-*0ShAi9cradZ5mBF#Bis+83iAeFpXK$S<5{z4a;EZB&m!O+ZB# zS#>H574328&4tVHbn{8rSLH~>w|8j0tv@1^td^XoKpo^V{SRGdP$*n8R+fh=DwNy~ zLyhW3>PG(0!{~Ax$DfdwSF)+^3n$;7&t<1@`G4m%F1v25WB!=>=CCXeJZxsGx(_tP z={p^@{`P!AePibeU2baYb~Ik%_AHW+x;g%5;Z72C3h2$5aiM87(Zb- z@u`>97G@^|1YaV+>Jxw!L~Ig&m>Xk4%zxdU`*6eD)6|*x*j>lJj4mfE{+?!C#I9tE zy3nhfKHHNF>@!-&~J!%a%iU9ohC=t*+R>PlCkq6?xFvr|9GPK3HkQz^M1^`+4?IV%LM) zi}HC(f>>qB&LqZvR)~L#XQP+a*S3E1 z*ro@eUGaE9)5X25)}{i*7@~=id=G?su11h1AhdNVVL?JA8%-hd*e5aJK{?T`7AQN^#Ljrg-x{Qz1y^ zYJ%o%rP%3sjBaBv`I0Ve!y3yY53?p)q9iMTtTbEkCt0CTWeX^%`e-vPS3 z3Ka8O6;8>0G4w%xP9*O7u;IwTbkT1q2tjM%-$tMUy1qEdp9YFkR67hlC1#cZLjts= zv+>6JuBfo&-`>HygZc$(AO2eKokOlADjq@`Ryv~H(_0Q^oJ#U23_fdngzZb{M<2D^ zE1WF&EpcrQ<>gq}gf;lmdUfgk&d+9N?2|52 z%K6dT`@pe!8G@(BC6`o!5C`a^xpnP48F7zUrxIx_pCRe3hlfDB$PCNiozyoM3x2X< zhbz&nx;J~4_fIP%#4a~;+;hb@x;5!Ed@sjK4S5o5CY|CcFM#C0D9}B(=>G^T+vWoDlcj(fyr} zhz&9ZX>1v^QG?FEzj3s=zrFC=y==uMlX3zg-PK^94aJy4kLWUBUqA3eWi`vl4T!~` zZ!f&G<@#A?hu5*c8~u1nMNQ46p1_ple^|Fg(Xd~oWiwr2t;@iD%;?^@qTLS63vQ25 zHCkybofgbKH8HUrkW9LPd&})F%I>ky^Rc7Td)q|$bS0;U-@ki#5!~4sat7>;e%8qW zZfjs($0-s3o!zSz$IMgm>=}($!4axc3C`;P~)4TukHNgdMv@vrRF9|Jtni?K6{f1N|kk2 z!1T&JK97$r?>nlutw63#yeTPv>uFK?bsqiKhSyPYL)e`VfncjT9=xdx}GHHH@1 z?w=Z`ais5@>lVJWwf1yHy^LhWvYyd{B-7W}2gopHuL0sY>u6>P^)-pG818l#;V-4` z!j%#uzCODXGjxV6!9hGr@t9AT_8ktyZA?7Ho@p}}&|s-C23#Dv7UuFb*f2sptJPJl z?g4X3F{X1SNO811BE8P3*rF#k@8vZxnN7>;%RG+&rs_oo8O(Z2=PxPodp7yoQ7Vy^) zDtC%vprbG_A^>M5?u#0nFIG|NN?_irAsb{($NQWr&fx5vj-9yzGz(orn@K#z)ppyB zcq95GK1%F_pX8kn$H2r4((98RJ?-Qr{-y?N&^mt()V->H_NsVoXq#cw98c7J~0sRgb%o z_1fP^oPz}Nhf}*WQLy=P73VX_OOHmL-O zL*l`|Z0gL>1AX8d9)TT^ea6+^ULUU}#l7gFo~ufJSD|ZDNj5@3oNCJZ(zBN$dPpq6K(w-KCCg7Xt2(1?bNF%Le2%ZwT~BHSM?=cA{UzY#9)%zoYyffKT&Wf0hBhUT`Ko(r1lZk);ntC7>EdDYy>o7nM-p&4btm20Ufbn7K5Fp*ltOg@5>AuYIqGaWz;| z`vXP;6Ex*qtm1xKdw8 zUt?2-<~cqArE8cl*;A0+T1kipdstg*^P+pka|BI;8g~rN9RGkz%n*-uMsm5BFAe)` z*-TrvI821HtAT%Gv7C^xUjS?T(9dnYIakVb8rm(ZyYY3JuhRYpX0i@PrCMqN00df7 zFVOsWTpsk>bY(CT;4gMnc>5af7U8z>+XqS0mfZ3nXQb%Pc{~5atT^pnhzTdnUb0jH z|G%PD+h@NAYyd=LQz?kR?kmKzf$+y!B=+-90@&#P!((?s&A=G21jO!IHnEs5;jev5 z$xLLwZW(C?>t#*0NgA`R}5Ux#vcaijFxl3B-0!PBlb$-S@O%;h+UMj@dWj|r1i zSc7ktwZ)r*a9M9z+D69p?J9yN_o!&(BV?IVe(IH99y&`vfwk>o`&*Z0*>6{f+NyE^oo`?Tr~aYcO!a8b|^Zc zz4@c|CS)mjljs}Nym@B8ukdQ0&N6CMRshZwCvkh={?@D6LQMhwEOt08D-r)BOALo; zeXj^l&+XywR3*W>o^k~&RG8$37-jrGqK2R*61?_co$9#&W?2%P>j9N^JBf3<42 zl*~iPRv|e$h>q)fbyurq)aPy5|B;D3$5t zQ1Qp@!${jHmkRh5s`cnD3%qe+W;6Z{u|ZS_lKeby*|Zd^aw+_inA=$d9Ck$`mKXQ9 z1I#eqS$I1jHta3&80ik6{g3%DE)peB7(lh)CJMdHTDkk?W9#{ZBk6F^IGkv9z9TBS zJdB3nX(@S;H(lP_vp>c>Wi5Aq0Tq+=2>%chkLmp-0Jig7>V5Xom$lB}j&zif6;;cU zmOy^-MHSBW*e5NkQR^kS9MckXxwal%_ck^B;pzvTx;V~h9269 zsV-45+_-3}w@mFH=xd88MWcX&%CjXZR^TnqRXWc)b>3TU;!#^`w6cD|dm*p=Z&Q z=X(XBTP_{XYG^bB;2`C;?4;7`?@=SAJ+6;@#+mA(PDnOB<9YUhy`)_8DXTgTMm~n4 zHRCu*T8oquBBZ7T3A*0VugRr}z^qUvH2clhheJb)5g8?XdafpixgK5gh|wYq9stGX zHbN~BiSC8JJb?m3m=emEGni->fI{jm`o9@0T#&$3|QiJZ4BgUG%?t7u8fZwo`lMkn)*(OMLN%N^f zr7lz&PM*^4T&CAZpOOTacb7A@)4lN$bQ+7;I2lnPdC6?-wWaYOcWRs3BFp6C6y@m{NPG3|WA&BYa7#2ECju#(Br8x05(Exc#HzLC3gc zX6*Z}%sia8EBr~dmdmB4)wyRp4p$W&q+ZDp8<1OnRL59oZRGR{+K8-xBooHs$nhmN zJb_N69fpnywyHXAy#8A9!E><@2C(fsN%!9wTv)UD#;pV9>ifAcFujq3$*bO}BQ8Sj zR|<`TDbM0H9gDFd5+&adOD%6E<-+b<+6U80=)3p}*`>o(DI=SHcuhRhkgnx?h%c)2 zdsJ6$c+;K;l#aLKFCD7lH*^(nzMoYfhSbH5VQ!Dbx%WGv!UR93x8%q9%PtP1cVn$yF5k=sUaThMrkp5zPPvPN3O zrlivG4d~ySMBlo8peQFVY7APNI{6x5%`i#>Wte=ODQ@xS>G>~R{l&(Fu35^6jkeL@ zjSS1fOfN89`BC*_k>w@wfjO}h9=%2Axkzv3lgY@C4U8O$YFvqn>sK9p#NYWER^h=p zB}j(RaxpRHsEX=eHsN7Lb*MhRJdWh1AC!h<5wWiX7!xYwgj1Me4I~=8eTRbnp3eAF zb>u8H)?k>tts1h|!5vb#b}9LgX;<^u8EMF3U$sfhD^^;TnlzMP3JZ4Oe2R>RD} zUevUH)q4^T;L@vzrXRLr4;yedLXWEvN>Fk++vi91dx9D&=;2q5^^qe1!@HoDt5T9` zL?y8WqJy^(pTVGjj%w_(h4m;4P7bo&W zo!tHOO>mExEeofOuQX1{A`|9<)fCIVkpo2BIBoUlC<<7AI0ml2iB6Kp~F`*Jm|$&>~SP(L){ z^`CECAK<7bTMBnTraThSiTc>gl$w)412VCAxvWO87_veyqTD;2`=;|eF$`01tc5ah{RJl%dI-etx%}q-N7WT<9nf&n<{2Q;lt;W zgZST;^gtH`o#AXeYbhZW;n9&Yd@&_Z)9^RxVC&xYhBN>=0Vhd?7Gy5sc0wZ+vLZk|0BZ@p&Aq^e zbrKrveb~iwP-DipXYb*&2+{Dn*~1cAuUhLG)En^lJ(N8eToiTs3uBE8OL=fOe%fj< z2KVBQB_Z!~W4)G3wutm5kNTVF+jabKs#62D-r(JE<4?i2XH%(Np^iUq`gw&4Y*?hJ z95V>pQ6CR8^(2V*1G1!U-Z8tI8C+=J&f}jgBjRAzSc+ERDnSO+nUfpPulXZ?U1^H zhPWT^NAKMHyq3az|9ud~O{we^1Y@`Jkj87+ft%MvF!QXij#hEFnut7yMmfhU|15*0 zJ(w_}S{D33kIsK|0@pDRT36sWsz9_;-})Xxc|} z(}8x7j3o2zs?FH31eu2B2D!DK(bGnC?UD{qRe^>nKD|)+U(9&I=T~(}hNu(1aA6BO z=xAZ2yZ2{c5e{5A@=oU9uL6P+(~4lZ^7dSokyRFc;fr9iAr#7s^QK7gb3XIkK$ch@ zmzEjxb5gfHX^34)TT&cm3vSoY{7oj8NAZdPWf8m1>?7lJJeSul1!|@lsECehK0Duf z?fR=*jgjxhLR;Afil>%>cND5$-He{^*pa5r@K@Z0?Hj^yx{E|wWs)@f9B6Z&eh7Aw z0&n&bIX^L=2}h=|PP#&dvu;s+B^57kxngq1V~Bb6IHx}{9P4SxJzabGp5)!tpd00I znhv(|?!}?aGpEyI>K2=1Q6ZVkyDSZB48 zlixp!(Z6mQ39aD%?kspup{lOq^{wS}nFqs{jyt*IRgX~gNj=q8yj+~xb!NCL7)$Tj z2nIekWoSNXnQ)|V^8qgDSJ=&_JX%F76R6vN<-bCzkkZ5c@W1wJz*xElr62j&U$w%x z6b-QUX=P$;+l2`rRp+?!OGA;CVLe~ey#qLVS!?L-A>E%tI_z!B{KKs8$Uo>xDx!u` zKx0u&KI2+ML3iaD8n%t|`o)qjrCQao-%QxHw1&VmzSA8~ASXiKfQ9ZuqaUlarfiU( zekWeH{5Md0BJ}r~n?4-Hek|e9%}7#iA|Y?KcfGr@1R5Z(vkbO>2*4shN%jO=tFffJ zArva95ZaYiLg-Ku%Qo$->WG7NSHWF#uQGHqt6W7(r|kg-bOu|P#kQ~_n%2fL12?PuhmY zzgd6~=U}!-U;g=+C9%?U1^)qw>wrvyV=#3XEgc9B{saqU|1tzs)0StXO>l2VS#hw_ zeY(;D)x>X&mcIJRb5N4NR$7MKLJ2`qd$q{CpK`a7F`pbg*ncP@?IQe6UF^y>In2UJ z*eUr{2TF-E<6H<*(N(MyEEE;-CoQlK)gUN+F{V-#s>id~xUk$%8_|rC^F5^1`!A_1x6|U0*gGpT+ zt4!5Hm9`{q8#pi-V#tFWve9OoG_BLr+Q9xNf9A)bgQ%{s%(*oK;h#iu8rmEAsf3?1 zR-+t>@%)jDI4y&OLMyN6yj7T3E|hQsmWemW4`_di>O*tY=CM7t1Nb~q(^V}~whH?nD4+mF diff --git a/html/classlibdap_1_1RCReader-members.html b/html/classlibdap_1_1RCReader-members.html deleted file mode 100644 index 126a8407c..000000000 --- a/html/classlibdap_1_1RCReader-members.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::RCReader Member List
    -
    -
    - -

    This is the complete list of members for libdap::RCReader, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    get_ais_database() const (defined in libdap::RCReader)libdap::RCReaderinline
    get_always_validate() const (defined in libdap::RCReader)libdap::RCReaderinline
    get_cookie_jar() const (defined in libdap::RCReader)libdap::RCReaderinline
    get_default_expires() const (defined in libdap::RCReader)libdap::RCReaderinline
    get_deflate() const (defined in libdap::RCReader)libdap::RCReaderinline
    get_dods_cache_root() const (defined in libdap::RCReader)libdap::RCReaderinline
    get_ignore_expires() const (defined in libdap::RCReader)libdap::RCReaderinline
    get_max_cache_size() const (defined in libdap::RCReader)libdap::RCReaderinline
    get_max_cached_obj() const (defined in libdap::RCReader)libdap::RCReaderinline
    get_no_proxy_for_host() const (defined in libdap::RCReader)libdap::RCReaderinline
    get_no_proxy_for_port() constlibdap::RCReaderinline
    get_no_proxy_for_protocol() const (defined in libdap::RCReader)libdap::RCReaderinline
    get_proxy_for_proxy_host_url() constlibdap::RCReaderinline
    get_proxy_for_regexp() constlibdap::RCReaderinline
    get_proxy_for_regexp_flags() constlibdap::RCReaderinline
    get_proxy_server_host() constlibdap::RCReaderinline
    get_proxy_server_host_url() constlibdap::RCReaderinline
    get_proxy_server_port() constlibdap::RCReaderinline
    get_proxy_server_protocol() constlibdap::RCReaderinline
    get_proxy_server_userpw() constlibdap::RCReaderinline
    get_use_cache() const (defined in libdap::RCReader)libdap::RCReaderinline
    get_validate_ssl() const (defined in libdap::RCReader)libdap::RCReaderinline
    HTTPConnectTest (defined in libdap::RCReader)libdap::RCReaderfriend
    instance() (defined in libdap::RCReader)libdap::RCReaderstatic
    is_no_proxy_for_used() (defined in libdap::RCReader)libdap::RCReaderinline
    is_proxy_for_used()libdap::RCReaderinline
    RCReaderTest (defined in libdap::RCReader)libdap::RCReaderfriend
    set_ais_database(const string &db) (defined in libdap::RCReader)libdap::RCReaderinline
    set_always_validate(int i) (defined in libdap::RCReader)libdap::RCReaderinline
    set_default_expires(int i) (defined in libdap::RCReader)libdap::RCReaderinline
    set_deflate(bool b) (defined in libdap::RCReader)libdap::RCReaderinline
    set_ignore_expires(int i) (defined in libdap::RCReader)libdap::RCReaderinline
    set_max_cache_size(int i) (defined in libdap::RCReader)libdap::RCReaderinline
    set_max_cached_obj(int i) (defined in libdap::RCReader)libdap::RCReaderinline
    set_no_proxy_for_host(const string &s) (defined in libdap::RCReader)libdap::RCReaderinline
    set_no_proxy_for_port(int i)libdap::RCReaderinline
    set_no_proxy_for_protocol(const string &s) (defined in libdap::RCReader)libdap::RCReaderinline
    set_proxy_for_proxy_host_url(const string &s)libdap::RCReaderinline
    set_proxy_for_regexp(const string &s)libdap::RCReaderinline
    set_proxy_for_regexp_flags(int i)libdap::RCReaderinline
    set_proxy_server_host(const string &s) (defined in libdap::RCReader)libdap::RCReaderinline
    set_proxy_server_host_url(const string &s)libdap::RCReaderinline
    set_proxy_server_port(int l) (defined in libdap::RCReader)libdap::RCReaderinline
    set_proxy_server_protocol(const string &s) (defined in libdap::RCReader)libdap::RCReaderinline
    set_proxy_server_userpw(const string &s) (defined in libdap::RCReader)libdap::RCReaderinline
    set_use_cache(bool b) (defined in libdap::RCReader)libdap::RCReaderinline
    set_validate_ssl(int i) (defined in libdap::RCReader)libdap::RCReaderinline
    -
    - - - - diff --git a/html/classlibdap_1_1RCReader.html b/html/classlibdap_1_1RCReader.html deleted file mode 100644 index 68d26d1c5..000000000 --- a/html/classlibdap_1_1RCReader.html +++ /dev/null @@ -1,756 +0,0 @@ - - - - - - - -libdap: libdap::RCReader Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::RCReader Class Reference
    -
    -
    - -

    #include <RCReader.h>

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    -string get_ais_database () const throw ()
     
    -int get_always_validate () const throw ()
     
    -string get_cookie_jar () const throw ()
     
    -int get_default_expires () const throw ()
     
    -bool get_deflate () const throw ()
     
    -string get_dods_cache_root () const throw ()
     
    -int get_ignore_expires () const throw ()
     
    -int get_max_cache_size () const throw ()
     
    -unsigned int get_max_cached_obj () const throw ()
     
    -string get_no_proxy_for_host () const throw ()
     
    int get_no_proxy_for_port () const throw ()
     
    -string get_no_proxy_for_protocol () const throw ()
     
    string get_proxy_for_proxy_host_url () const throw ()
     
    string get_proxy_for_regexp () const throw ()
     
    int get_proxy_for_regexp_flags () const throw ()
     
    string get_proxy_server_host () const throw ()
     Get the proxy host. More...
     
    string get_proxy_server_host_url () const throw ()
     
    int get_proxy_server_port () const throw ()
     Get the proxy port. More...
     
    string get_proxy_server_protocol () const throw ()
     Get the proxy server protocol. More...
     
    string get_proxy_server_userpw () const throw ()
     Get the proxy username and password. More...
     
    -bool get_use_cache () const throw ()
     
    -int get_validate_ssl () const throw ()
     
    -bool is_no_proxy_for_used () throw ()
     
    bool is_proxy_for_used () throw ()
     
    -void set_ais_database (const string &db) throw ()
     
    -void set_always_validate (int i) throw ()
     
    -void set_default_expires (int i) throw ()
     
    -void set_deflate (bool b) throw ()
     
    -void set_ignore_expires (int i) throw ()
     
    -void set_max_cache_size (int i) throw ()
     
    -void set_max_cached_obj (int i) throw ()
     
    -void set_no_proxy_for_host (const string &s) throw ()
     
    void set_no_proxy_for_port (int i) throw ()
     
    -void set_no_proxy_for_protocol (const string &s) throw ()
     
    void set_proxy_for_proxy_host_url (const string &s) throw ()
     
    void set_proxy_for_regexp (const string &s) throw ()
     
    void set_proxy_for_regexp_flags (int i) throw ()
     
    -void set_proxy_server_host (const string &s) throw ()
     
    void set_proxy_server_host_url (const string &s) throw ()
     
    -void set_proxy_server_port (int l) throw ()
     
    -void set_proxy_server_protocol (const string &s) throw ()
     
    -void set_proxy_server_userpw (const string &s) throw ()
     
    -void set_use_cache (bool b) throw ()
     
    -void set_validate_ssl (int i) throw ()
     
    - - - -

    -Static Public Member Functions

    -static RCReaderinstance ()
     
    - - - - - -

    -Friends

    -class HTTPConnectTest
     
    -class RCReaderTest
     
    -

    Detailed Description

    -

    Read the .dodsrc file. By default the file ~/.dodsrc is read. If the environment variable DODS_CONF is set, use that value as the pathname to the configuration file. Else, if the environment variable DODS_CACHE_INIT is set, use that value.

    -

    NB: DODS_CACHE_INIT is deprecated and may be removed in the future.

    -
    Author
    Jose Garcia jgarc.nosp@m.ia@u.nosp@m.car.e.nosp@m.du
    - -

    Definition at line 54 of file RCReader.h.

    -

    Member Function Documentation

    - -

    ◆ get_no_proxy_for_port()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - -
    int libdap::RCReader::get_no_proxy_for_port () const
    throw (
    )
    -
    -inline
    -
    -
    Deprecated:
    - -

    Definition at line 250 of file RCReader.h.

    - -
    -
    - -

    ◆ get_proxy_for_proxy_host_url()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - -
    string libdap::RCReader::get_proxy_for_proxy_host_url () const
    throw (
    )
    -
    -inline
    -
    -
    Deprecated:
    - -

    Definition at line 220 of file RCReader.h.

    - -
    -
    - -

    ◆ get_proxy_for_regexp()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - -
    string libdap::RCReader::get_proxy_for_regexp () const
    throw (
    )
    -
    -inline
    -
    -
    Deprecated:
    - -

    Definition at line 215 of file RCReader.h.

    - -
    -
    - -

    ◆ get_proxy_for_regexp_flags()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - -
    int libdap::RCReader::get_proxy_for_regexp_flags () const
    throw (
    )
    -
    -inline
    -
    -
    Deprecated:
    - -

    Definition at line 226 of file RCReader.h.

    - -
    -
    - -

    ◆ get_proxy_server_host()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - -
    string libdap::RCReader::get_proxy_server_host () const
    throw (
    )
    -
    -inline
    -
    - -

    Get the proxy host.

    - -

    Definition at line 181 of file RCReader.h.

    - -
    -
    - -

    ◆ get_proxy_server_host_url()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - -
    string libdap::RCReader::get_proxy_server_host_url () const
    throw (
    )
    -
    -inline
    -
    -
    Deprecated:
    - -

    Definition at line 196 of file RCReader.h.

    - -
    -
    - -

    ◆ get_proxy_server_port()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - -
    int libdap::RCReader::get_proxy_server_port () const
    throw (
    )
    -
    -inline
    -
    - -

    Get the proxy port.

    - -

    Definition at line 186 of file RCReader.h.

    - -
    -
    - -

    ◆ get_proxy_server_protocol()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - -
    string libdap::RCReader::get_proxy_server_protocol () const
    throw (
    )
    -
    -inline
    -
    - -

    Get the proxy server protocol.

    - -

    Definition at line 176 of file RCReader.h.

    - -
    -
    - -

    ◆ get_proxy_server_userpw()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - -
    string libdap::RCReader::get_proxy_server_userpw () const
    throw (
    )
    -
    -inline
    -
    - -

    Get the proxy username and password.

    - -

    Definition at line 191 of file RCReader.h.

    - -
    -
    - -

    ◆ is_proxy_for_used()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - -
    bool libdap::RCReader::is_proxy_for_used ()
    throw (
    )
    -
    -inline
    -
    -
    Deprecated:
    - -

    Definition at line 210 of file RCReader.h.

    - -
    -
    - -

    ◆ set_no_proxy_for_port()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - -
    void libdap::RCReader::set_no_proxy_for_port (int i)
    throw (
    )
    -
    -inline
    -
    -
    Deprecated:
    - -

    Definition at line 349 of file RCReader.h.

    - -
    -
    - -

    ◆ set_proxy_for_proxy_host_url()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - -
    void libdap::RCReader::set_proxy_for_proxy_host_url (const string & s)
    throw (
    )
    -
    -inline
    -
    -
    Deprecated:
    - -

    Definition at line 329 of file RCReader.h.

    - -
    -
    - -

    ◆ set_proxy_for_regexp()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - -
    void libdap::RCReader::set_proxy_for_regexp (const string & s)
    throw (
    )
    -
    -inline
    -
    -
    Deprecated:
    - -

    Definition at line 324 of file RCReader.h.

    - -
    -
    - -

    ◆ set_proxy_for_regexp_flags()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - -
    void libdap::RCReader::set_proxy_for_regexp_flags (int i)
    throw (
    )
    -
    -inline
    -
    -
    Deprecated:
    - -

    Definition at line 334 of file RCReader.h.

    - -
    -
    - -

    ◆ set_proxy_server_host_url()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - -
    void libdap::RCReader::set_proxy_server_host_url (const string & s)
    throw (
    )
    -
    -inline
    -
    -
    Deprecated:
    - -

    Definition at line 318 of file RCReader.h.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1RCReader.js b/html/classlibdap_1_1RCReader.js deleted file mode 100644 index e202f9e16..000000000 --- a/html/classlibdap_1_1RCReader.js +++ /dev/null @@ -1,49 +0,0 @@ -var classlibdap_1_1RCReader = -[ - [ "get_ais_database", "classlibdap_1_1RCReader.html#a596627abec0b9211c9b82673f0c1c5be", null ], - [ "get_always_validate", "classlibdap_1_1RCReader.html#a828c75cac86bf55e928bd8509271afea", null ], - [ "get_cookie_jar", "classlibdap_1_1RCReader.html#aa3419548d7748f9dcc628d6093be40b4", null ], - [ "get_default_expires", "classlibdap_1_1RCReader.html#a0d4ca99ac823638cb2ade5dda79a4236", null ], - [ "get_deflate", "classlibdap_1_1RCReader.html#a1f0e3dc088b637cc64f6c77e3ce0f0ae", null ], - [ "get_dods_cache_root", "classlibdap_1_1RCReader.html#a14b4e0edc8158ce0faebddfa28fcd3f7", null ], - [ "get_ignore_expires", "classlibdap_1_1RCReader.html#a94fe77268ca89cdcc4674a1ec9bc9a57", null ], - [ "get_max_cache_size", "classlibdap_1_1RCReader.html#ac000d8006d77d0a73cf122791e559e4b", null ], - [ "get_max_cached_obj", "classlibdap_1_1RCReader.html#ab8f8943fb4b313ffa810b51492426a0a", null ], - [ "get_no_proxy_for_host", "classlibdap_1_1RCReader.html#a0c7e63ca4900cf6a1635fa4c0fc1fd77", null ], - [ "get_no_proxy_for_port", "classlibdap_1_1RCReader.html#a21db450d67811148259166705a2ddfae", null ], - [ "get_no_proxy_for_protocol", "classlibdap_1_1RCReader.html#a54263416c9be177aaac543ea78489e43", null ], - [ "get_proxy_for_proxy_host_url", "classlibdap_1_1RCReader.html#aac6dd12779e6a81fef84ee7bbb1738dd", null ], - [ "get_proxy_for_regexp", "classlibdap_1_1RCReader.html#a72e1a556abbde9fb05a330c0072bcb0d", null ], - [ "get_proxy_for_regexp_flags", "classlibdap_1_1RCReader.html#acf4d55aa8d41827d8b616a9fe5fb784c", null ], - [ "get_proxy_server_host", "classlibdap_1_1RCReader.html#a0f5a320d221c226a9dffd58d844d47cb", null ], - [ "get_proxy_server_host_url", "classlibdap_1_1RCReader.html#a99bf90838d13c4f9b7b010129fc11347", null ], - [ "get_proxy_server_port", "classlibdap_1_1RCReader.html#a46ca3c57a3e33c5f873fe26ab150f39c", null ], - [ "get_proxy_server_protocol", "classlibdap_1_1RCReader.html#abf8b0c2e7e70bfa96ef1613b2bbeddf0", null ], - [ "get_proxy_server_userpw", "classlibdap_1_1RCReader.html#a658abf6e30be88545faff67b1f741698", null ], - [ "get_use_cache", "classlibdap_1_1RCReader.html#a03eaafd39d2b46256a9bb9137ecd0169", null ], - [ "get_validate_ssl", "classlibdap_1_1RCReader.html#ab79855b1e8dea2dd6a4485db9c85b7c9", null ], - [ "is_no_proxy_for_used", "classlibdap_1_1RCReader.html#a11c97a64bbdfe8fde587c24d5e84c80e", null ], - [ "is_proxy_for_used", "classlibdap_1_1RCReader.html#ad02ee19bd75bb0747cfee0d70ee1dcc1", null ], - [ "set_ais_database", "classlibdap_1_1RCReader.html#ad7cc710c4fda07ae6f06f44a607ed32d", null ], - [ "set_always_validate", "classlibdap_1_1RCReader.html#a6578513aaf6b55c17500db5643751b87", null ], - [ "set_default_expires", "classlibdap_1_1RCReader.html#a2e009fc999cb3f8e6bac6680678fc860", null ], - [ "set_deflate", "classlibdap_1_1RCReader.html#ae5f8195beee988e13795df81357e38a0", null ], - [ "set_ignore_expires", "classlibdap_1_1RCReader.html#a7282ab702aadec104fc831f01a24e22f", null ], - [ "set_max_cache_size", "classlibdap_1_1RCReader.html#ad3467c90f9042b582a459b11ed13f354", null ], - [ "set_max_cached_obj", "classlibdap_1_1RCReader.html#ad7f6d868d7a1c20eaf936637aeaaed6c", null ], - [ "set_no_proxy_for_host", "classlibdap_1_1RCReader.html#a80bfbde806114f639c847e23e33c167a", null ], - [ "set_no_proxy_for_port", "classlibdap_1_1RCReader.html#a02d730936d88cb18b1d0e012eac28f46", null ], - [ "set_no_proxy_for_protocol", "classlibdap_1_1RCReader.html#a31e3f6c9e292e35e57be78f186207638", null ], - [ "set_proxy_for_proxy_host_url", "classlibdap_1_1RCReader.html#a1bf789ccd96b83babb833e9b9ec6110a", null ], - [ "set_proxy_for_regexp", "classlibdap_1_1RCReader.html#a360d2280601f9dfb17d7c954ca333b40", null ], - [ "set_proxy_for_regexp_flags", "classlibdap_1_1RCReader.html#ade479cf9efffe7aa52652aff13cc365e", null ], - [ "set_proxy_server_host", "classlibdap_1_1RCReader.html#a6c552e37f77747f0ed99882e195a1a88", null ], - [ "set_proxy_server_host_url", "classlibdap_1_1RCReader.html#a80ac516bfcdd856a512e114f22d22046", null ], - [ "set_proxy_server_port", "classlibdap_1_1RCReader.html#a66b779d044a90d0555ef629ab75267df", null ], - [ "set_proxy_server_protocol", "classlibdap_1_1RCReader.html#abb3e00fb518363d0976f7f3f8ca2f465", null ], - [ "set_proxy_server_userpw", "classlibdap_1_1RCReader.html#a78fdd136c662339e1a434e518ccb6d00", null ], - [ "set_use_cache", "classlibdap_1_1RCReader.html#ae3620724d52e3bd7d8c6d0e364efddd3", null ], - [ "set_validate_ssl", "classlibdap_1_1RCReader.html#a8510e2ab47143d64f0a1a2e0d3f1d113", null ], - [ "HTTPConnectTest", "classlibdap_1_1RCReader.html#a9aed79b4a282abc0feb24f3e28234f13", null ], - [ "RCReaderTest", "classlibdap_1_1RCReader.html#aee3d15d5e4815038af9dc54deebab864", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1Regex-members.html b/html/classlibdap_1_1Regex-members.html deleted file mode 100644 index 6392362bf..000000000 --- a/html/classlibdap_1_1Regex-members.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::Regex Member List
    -
    -
    - -

    This is the complete list of members for libdap::Regex, including all inherited members.

    - - - - - - -
    match(const char *s, int len, int pos=0)libdap::Regex
    Regex(const char *t)libdap::Regex
    Regex(const char *t, int dummy)libdap::Regex
    search(const char *s, int len, int &matchlen, int pos=0)libdap::Regex
    ~Regex() (defined in libdap::Regex)libdap::Regex
    -
    - - - - diff --git a/html/classlibdap_1_1Regex.html b/html/classlibdap_1_1Regex.html deleted file mode 100644 index 44679340f..000000000 --- a/html/classlibdap_1_1Regex.html +++ /dev/null @@ -1,270 +0,0 @@ - - - - - - - -libdap: libdap::Regex Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::Regex Class Reference
    -
    -
    - -

    #include <GNURegex.h>

    - - - - - - - - - - - - -

    -Public Member Functions

    int match (const char *s, int len, int pos=0)
     Does the pattern match. More...
     
     Regex (const char *t)
     
     Regex (const char *t, int dummy)
     
    int search (const char *s, int len, int &matchlen, int pos=0)
     How much of the string does the pattern match. More...
     
    -

    Detailed Description

    -

    a C++ interface to POSIX regular expression functions.

    -
    Author
    James Gallagher jgall.nosp@m.aghe.nosp@m.r@ope.nosp@m.ndap.nosp@m..org
    - -

    Definition at line 35 of file GNURegex.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ Regex() [1/2]

    - -
    -
    - - - - - - - - -
    libdap::Regex::Regex (const char * t)
    -
    -

    Initialize a POSIX regular expression (using the 'extended' features).

    -
    Parameters
    - - -
    tThe regular expression pattern.
    -
    -
    - -

    Definition at line 96 of file GNURegex.cc.

    - -
    -
    - -

    ◆ Regex() [2/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    libdap::Regex::Regex (const char * t,
    int dummy 
    )
    -
    -

    Compatability ctor.

    See also
    Regex::Regex(const char* t)
    - -

    Definition at line 103 of file GNURegex.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ match()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    int libdap::Regex::match (const char * s,
    int len,
    int pos = 0 
    )
    -
    - -

    Does the pattern match.

    -

    Does the regular expression match the string?

    -
    Parameters
    - - - - -
    sThe string
    lenThe length of string to consider
    posStart looking at this position in the string
    -
    -
    -
    Returns
    The number of characters that match, -1 if there's no match.
    - -

    Definition at line 115 of file GNURegex.cc.

    - -
    -
    - -

    ◆ search()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    int libdap::Regex::search (const char * s,
    int len,
    int & matchlen,
    int pos = 0 
    )
    -
    - -

    How much of the string does the pattern match.

    -

    Does the regular expression match the string?

    -
    Parameters
    - - - - - -
    sThe string
    lenThe length of string to consider
    matchlenReturn the length of the matched portion in this value-result parameter.
    posStart looking at this position in the string
    -
    -
    -
    Returns
    The start position of the first match. This is different from POSIX regular expressions, whcih return the start position of the longest match.
    - -

    Definition at line 147 of file GNURegex.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1Regex.js b/html/classlibdap_1_1Regex.js deleted file mode 100644 index a33492da1..000000000 --- a/html/classlibdap_1_1Regex.js +++ /dev/null @@ -1,8 +0,0 @@ -var classlibdap_1_1Regex = -[ - [ "Regex", "classlibdap_1_1Regex.html#add461a940025b957d42d0dbf06d7f7ac", null ], - [ "Regex", "classlibdap_1_1Regex.html#acfe8656faf0ba34834337148fcd64d23", null ], - [ "~Regex", "classlibdap_1_1Regex.html#a88fb53e845d31abf6bed07fb1b8e5285", null ], - [ "match", "classlibdap_1_1Regex.html#aaf743b4f3528a40f435fa1e55ff51b5f", null ], - [ "search", "classlibdap_1_1Regex.html#ae1ce41e1da66aa2d9dcad055b619be21", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1Resource-members.html b/html/classlibdap_1_1Resource-members.html deleted file mode 100644 index 8456ccc4b..000000000 --- a/html/classlibdap_1_1Resource-members.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::Resource Member List
    -
    -
    - -

    This is the complete list of members for libdap::Resource, including all inherited members.

    - - - - - - - - - - - - - - - -
    fallback enum value (defined in libdap::Resource)libdap::Resource
    get_rule() constlibdap::Resourceinlinevirtual
    get_url() constlibdap::Resourceinlinevirtual
    operator<<(ostream &os, const Resource &r)libdap::Resourcefriend
    overwrite enum value (defined in libdap::Resource)libdap::Resource
    replace enum value (defined in libdap::Resource)libdap::Resource
    Resource()libdap::Resourceinline
    Resource(const string &u)libdap::Resourceinline
    Resource(const string &u, const rule &r)libdap::Resourceinline
    Resource(const string &u, const string &r)libdap::Resourceinline
    rule enum namelibdap::Resource
    set_rule(const Resource::rule &r)libdap::Resourceinlinevirtual
    set_url(const string &u)libdap::Resourceinlinevirtual
    ~Resource() (defined in libdap::Resource)libdap::Resourceinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1Resource.html b/html/classlibdap_1_1Resource.html deleted file mode 100644 index 2c8214bf6..000000000 --- a/html/classlibdap_1_1Resource.html +++ /dev/null @@ -1,501 +0,0 @@ - - - - - - - -libdap: libdap::Resource Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::Resource Class Reference
    -
    -
    - -

    Associate a rule with an ancillary resource. - More...

    - -

    #include <Resource.h>

    - - - - - -

    -Public Types

    enum  rule { overwrite, -replace, -fallback - }
     How are ancillary resources used. More...
     
    - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual Resource::rule get_rule () const
     
    virtual string get_url () const
     
     Resource ()
     
     Resource (const string &u)
     
     Resource (const string &u, const rule &r)
     
     Resource (const string &u, const string &r) throw (Error)
     
    virtual void set_rule (const Resource::rule &r)
     
    virtual void set_url (const string &u)
     
    - - - -

    -Friends

    ostream & operator<< (ostream &os, const Resource &r)
     
    -

    Detailed Description

    -

    Associate a rule with an ancillary resource.

    -

    Bind an ancillary resource with the rule that should be used when combining it with a primary resource. Ancillary resources are always specified using URLs. If an ancillary resource is a local file, use file:// URLs.

    -

    Note that operator<< is defined for Resource as a function.

    -
    Author
    James Gallagher jgall.nosp@m.aghe.nosp@m.r@ope.nosp@m.ndap.nosp@m..org
    - -

    Definition at line 50 of file Resource.h.

    -

    Member Enumeration Documentation

    - -

    ◆ rule

    - -
    -
    - - - - -
    enum libdap::Resource::rule
    -
    - -

    How are ancillary resources used.

    -

    The AIS uses this enumeration to describe how a given ancillary should be merged into a primary data source.

    -
      -
    • -overwrite: Attributes in the ancillary source overwrite those in the primary source. New values are added.
    • -
    • -replace: The ancillary source replaces the primary. All of the Attributes in the primary are removed.
    • -
    • -fallback: The ancillary resource provides a set of fallback values if the primary data source lacks any attributes. Note that this does not apply to individual attributes, but to an entire set. The fallback attributes are used only if the original data source lacks attributes altogether.
    • -
    -
    Author
    James Gallagher jgall.nosp@m.aghe.nosp@m.r@ope.nosp@m.ndap.nosp@m..org
    - -

    Definition at line 71 of file Resource.h.

    - -
    -
    -

    Constructor & Destructor Documentation

    - -

    ◆ Resource() [1/4]

    - -
    -
    - - - - - -
    - - - - - - - -
    libdap::Resource::Resource ()
    -
    -inline
    -
    -

    Build a Resource with a null URL and set the combination rule to the default.

    - -

    Definition at line 75 of file Resource.h.

    - -
    -
    - -

    ◆ Resource() [2/4]

    - -
    -
    - - - - - -
    - - - - - - - - -
    libdap::Resource::Resource (const string & u)
    -
    -inline
    -
    -

    Build a resource. Set the combination rule to the default value, which is overwrite.

    Parameters
    - - -
    uThe ancillary resource URL.
    -
    -
    - -

    Definition at line 81 of file Resource.h.

    - -
    -
    - -

    ◆ Resource() [3/4]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    libdap::Resource::Resource (const string & u,
    const ruler 
    )
    -
    -inline
    -
    -

    Build a Resource.

    Parameters
    - - - -
    uThe ancillary resource URL.
    rThe combination rule.
    -
    -
    - -

    Definition at line 87 of file Resource.h.

    - -
    -
    - -

    ◆ Resource() [4/4]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    libdap::Resource::Resource (const string & u,
    const string & r 
    )
    throw (Error
    )
    -
    -inline
    -
    -

    Build a Resource.

    -

    Note: If this is used in a callback, make sure to check the value of r before calling this constructor. Exceptions thrown within callbacks are not portable. Valid values are "overwrite", "replace" and "fallback". The constructor accepts "default" as a synonym for "overwrite".

    -
    Parameters
    - - - -
    uThe ancillary resource URL.
    rThe name of the combination rule.
    -
    -
    - -

    Definition at line 100 of file Resource.h.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ get_rule()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual Resource::rule libdap::Resource::get_rule () const
    -
    -inlinevirtual
    -
    -

    Return combination rule for this resource.

    - -

    Definition at line 129 of file Resource.h.

    - -
    -
    - -

    ◆ get_url()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual string libdap::Resource::get_url () const
    -
    -inlinevirtual
    -
    -

    Return the resource URL.

    - -

    Definition at line 116 of file Resource.h.

    - -
    -
    - -

    ◆ set_rule()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::Resource::set_rule (const Resource::ruler)
    -
    -inlinevirtual
    -
    -

    Set the resource's combination rule.

    Parameters
    - - -
    rThe combination rule.
    -
    -
    - -

    Definition at line 136 of file Resource.h.

    - -
    -
    - -

    ◆ set_url()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::Resource::set_url (const string & u)
    -
    -inlinevirtual
    -
    -

    Set the resource URL.

    Parameters
    - - -
    uThe resource's URL.
    -
    -
    - -

    Definition at line 123 of file Resource.h.

    - -
    -
    -

    Friends And Related Function Documentation

    - -

    ◆ operator<<

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    ostream& operator<< (ostream & os,
    const Resourcer 
    )
    -
    -friend
    -
    -

    Write the XML for this resource. This function is defined in AISResoruces.

    Parameters
    - - -
    osWrite to this ostream. r The Resource to write.
    -
    -
    -

    Output the XML fragment for a Resource. This function is a friend of the Resource class.

    Parameters
    - - - -
    osoutput stream
    rResource to write out.
    -
    -
    -
    See also
    Resource.
    - -

    Definition at line 46 of file AISResources.cc.

    - -
    -
    -
    The documentation for this class was generated from the following file: -
    -
    - - - - diff --git a/html/classlibdap_1_1Resource.js b/html/classlibdap_1_1Resource.js deleted file mode 100644 index f6a07327b..000000000 --- a/html/classlibdap_1_1Resource.js +++ /dev/null @@ -1,18 +0,0 @@ -var classlibdap_1_1Resource = -[ - [ "rule", "classlibdap_1_1Resource.html#ad59dde2f5e40839ae61430f746faa9db", [ - [ "overwrite", "classlibdap_1_1Resource.html#ad59dde2f5e40839ae61430f746faa9dba6f45d9ce9f7ef1a86bf61f0b8a0a05e6", null ], - [ "replace", "classlibdap_1_1Resource.html#ad59dde2f5e40839ae61430f746faa9dba57f09b056e2330d476992375e735a2d9", null ], - [ "fallback", "classlibdap_1_1Resource.html#ad59dde2f5e40839ae61430f746faa9dbaab6da0bd4132968a72d1fc30b00eac15", null ] - ] ], - [ "Resource", "classlibdap_1_1Resource.html#a4900c98c095abda49d70e302940abbdc", null ], - [ "Resource", "classlibdap_1_1Resource.html#a762d0f0c90046fd2ae9cf560d4034853", null ], - [ "Resource", "classlibdap_1_1Resource.html#ae00f0e40bbf9b6adad22f7317e760ac8", null ], - [ "Resource", "classlibdap_1_1Resource.html#a2761a9823e5b26e0160cc1f5377e7f42", null ], - [ "~Resource", "classlibdap_1_1Resource.html#af1c6d2556cf5cc77a823014c1aeccfd6", null ], - [ "get_rule", "classlibdap_1_1Resource.html#a1fc9cb3d7ab36cede2e621d0c11abc93", null ], - [ "get_url", "classlibdap_1_1Resource.html#a1be16a2532ccdaac0b996ff5402f1459", null ], - [ "set_rule", "classlibdap_1_1Resource.html#a96b702c32c4dd26d303f48c47b1d6748", null ], - [ "set_url", "classlibdap_1_1Resource.html#a369191cef05aefab3c0da0d2c3beb0ed", null ], - [ "operator<<", "classlibdap_1_1Resource.html#a1a74855fb08b3d9c092487e988d273b0", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1Response-members.html b/html/classlibdap_1_1Response-members.html deleted file mode 100644 index f15c104a8..000000000 --- a/html/classlibdap_1_1Response-members.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::Response Member List
    -
    -
    - -

    This is the complete list of members for libdap::Response, including all inherited members.

    - - - - - - - - - - - - - - - - - - - -
    get_cpp_stream() const (defined in libdap::Response)libdap::Responseinlinevirtual
    get_protocol() const (defined in libdap::Response)libdap::Responseinlinevirtual
    get_status() const (defined in libdap::Response)libdap::Responseinlinevirtual
    get_stream() const (defined in libdap::Response)libdap::Responseinlinevirtual
    get_type() const (defined in libdap::Response)libdap::Responseinlinevirtual
    get_version() const (defined in libdap::Response)libdap::Responseinlinevirtual
    operator=(const Response &) (defined in libdap::Response)libdap::Responseprotected
    Response(const Response &) (defined in libdap::Response)libdap::Responseprotected
    Response() (defined in libdap::Response)libdap::Responseinline
    Response(FILE *s, int status=0)libdap::Responseinline
    Response(std::fstream *s, int status=0) (defined in libdap::Response)libdap::Responseinline
    set_cpp_stream(std::istream *s) (defined in libdap::Response)libdap::Responseinlinevirtual
    set_protocol(const std::string &p) (defined in libdap::Response)libdap::Responseinlinevirtual
    set_status(int s) (defined in libdap::Response)libdap::Responseinlinevirtual
    set_stream(FILE *s) (defined in libdap::Response)libdap::Responseinlinevirtual
    set_type(ObjectType o) (defined in libdap::Response)libdap::Responseinlinevirtual
    set_version(const std::string &v) (defined in libdap::Response)libdap::Responseinlinevirtual
    ~Response()libdap::Responseinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1Response.html b/html/classlibdap_1_1Response.html deleted file mode 100644 index 86fa1c577..000000000 --- a/html/classlibdap_1_1Response.html +++ /dev/null @@ -1,236 +0,0 @@ - - - - - - - -libdap: libdap::Response Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::Response Class Reference
    -
    -
    - -

    #include <Response.h>

    -
    -Inheritance diagram for libdap::Response:
    -
    -
    Inheritance graph
    - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

     Response (FILE *s, int status=0)
     
    Response (std::fstream *s, int status=0)
     
    virtual ~Response ()
     
    getters
    -virtual int get_status () const
     
    -virtual FILE * get_stream () const
     
    -virtual std::istream * get_cpp_stream () const
     
    -virtual ObjectType get_type () const
     
    -virtual std::string get_version () const
     
    -virtual std::string get_protocol () const
     
    setters
    -virtual void set_status (int s)
     
    -virtual void set_stream (FILE *s)
     
    -virtual void set_cpp_stream (std::istream *s)
     
    -virtual void set_type (ObjectType o)
     
    -virtual void set_version (const std::string &v)
     
    -virtual void set_protocol (const std::string &p)
     
    - - - - - - -

    -Protected Member Functions

    Suppressed default methods
    Response (const Response &)
     
    -Responseoperator= (const Response &)
     
    -

    Detailed Description

    -

    Encapsulate a response. Instead of directly returning the FILE pointer from which a response is read, return an instance of this object. For a simple system where all that needs to be done to free the stream and its associated resources, this is overkill. However, some streams may require complex operations to free their resources once the client is done with the stream. Those classes should return a subclass of Response which has those operations built into the destructor.

    -
    Todo:
    If the code that parses the MIME headers was moved from Connect and HTTPConnect to this class and its children, it would be easier to build a FileConnect class (or maybe the specifics of the connection type could be held in the Response object and HTTPConnect and the to-be-written FileConnect would not be needed).
    - -

    Definition at line 53 of file Response.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ Response()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    libdap::Response::Response (FILE * s,
    int status = 0 
    )
    -
    -inline
    -
    -

    Initialize with a stream. Create an instance initialized to a stream. by default get_type() and get_version() return default values of unknown_type and "dods/0.0", respectively. Specializations (see HTTPResponse and HTTPConnect) may fill these fields in with other values.

    Parameters
    - - - -
    sRead data from this stream.
    statusThe HTTP response status code.
    -
    -
    - -

    Definition at line 88 of file Response.h.

    - -
    -
    - -

    ◆ ~Response()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual libdap::Response::~Response ()
    -
    -inlinevirtual
    -
    -

    Close the stream.

    - -

    Definition at line 95 of file Response.h.

    - -
    -
    -
    The documentation for this class was generated from the following file: -
    -
    - - - - diff --git a/html/classlibdap_1_1Response.js b/html/classlibdap_1_1Response.js deleted file mode 100644 index c48a15b22..000000000 --- a/html/classlibdap_1_1Response.js +++ /dev/null @@ -1,21 +0,0 @@ -var classlibdap_1_1Response = -[ - [ "Response", "classlibdap_1_1Response.html#a0b0452a3508c1d96e1e3725cf5103069", null ], - [ "Response", "classlibdap_1_1Response.html#a00151838968ecfb1993bb0be43298676", null ], - [ "Response", "classlibdap_1_1Response.html#a00c3edee81b107d3cc9e52952ce4e3e5", null ], - [ "Response", "classlibdap_1_1Response.html#a0539283c17802de3251ec1a54ea469be", null ], - [ "~Response", "classlibdap_1_1Response.html#ad49cacc9050fc52103f285f79b1a71c1", null ], - [ "get_cpp_stream", "classlibdap_1_1Response.html#a0e9f20410cc36e2bd9f427840b7be3e1", null ], - [ "get_protocol", "classlibdap_1_1Response.html#a2a6b775e5fa6265fc9ac4f9c576e815c", null ], - [ "get_status", "classlibdap_1_1Response.html#a1cba94a4d25c344985f5182a54e789b8", null ], - [ "get_stream", "classlibdap_1_1Response.html#ad90b4fce34ae4d8c0b806c6424213b28", null ], - [ "get_type", "classlibdap_1_1Response.html#ae39b13938ed524bbf14807c8a35b31cc", null ], - [ "get_version", "classlibdap_1_1Response.html#afe78405b68946981c4b2d4e8cd305651", null ], - [ "operator=", "classlibdap_1_1Response.html#ac2b3d6f2d4625c3540f656a2224a7436", null ], - [ "set_cpp_stream", "classlibdap_1_1Response.html#a4f4ff88c4b09e011d285f633a6b6aba0", null ], - [ "set_protocol", "classlibdap_1_1Response.html#aeeab3df1376b578b865c313dfe7b26ee", null ], - [ "set_status", "classlibdap_1_1Response.html#a3de0ea86ac433904efdc0e4f4c86fa26", null ], - [ "set_stream", "classlibdap_1_1Response.html#a5cda40501a3ce7b1675b13a6e0858020", null ], - [ "set_type", "classlibdap_1_1Response.html#a7a7807d0a45dd1f6111987f054956e24", null ], - [ "set_version", "classlibdap_1_1Response.html#a0eb078feca514d7d1f8428d9c001f262", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1ResponseTooBigErr-members.html b/html/classlibdap_1_1ResponseTooBigErr-members.html deleted file mode 100644 index 59ca32a01..000000000 --- a/html/classlibdap_1_1ResponseTooBigErr-members.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::ResponseTooBigErr Member List
    -
    -
    - -

    This is the complete list of members for libdap::ResponseTooBigErr, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    _error_code (defined in libdap::Error)libdap::Errorprotected
    _error_message (defined in libdap::Error)libdap::Errorprotected
    d_file (defined in libdap::Error)libdap::Errorprotected
    d_line (defined in libdap::Error)libdap::Errorprotected
    Error(ErrorCode ec, std::string msg, std::string file="", int line=0)libdap::Error
    Error(std::string msg, std::string file="", int line=0)libdap::Error
    Error()libdap::Error
    Error(const Error &copy_from) (defined in libdap::Error)libdap::Error
    get_error_code() constlibdap::Error
    get_error_message() constlibdap::Error
    get_file() const (defined in libdap::Error)libdap::Errorinline
    get_line() const (defined in libdap::Error)libdap::Errorinline
    OK() constlibdap::Error
    operator=(const Error &rhs) (defined in libdap::Error)libdap::Error
    parse(FILE *fp)libdap::Error
    print(FILE *out) constlibdap::Error
    print(std::ostream &out) constlibdap::Error
    ResponseTooBigErr(const string &msg) (defined in libdap::ResponseTooBigErr)libdap::ResponseTooBigErr
    ResponseTooBigErr() (defined in libdap::ResponseTooBigErr)libdap::ResponseTooBigErr
    set_error_code(ErrorCode ec=undefined_error)libdap::Error
    set_error_message(std::string msg="")libdap::Error
    set_file(std::string f) (defined in libdap::Error)libdap::Errorinline
    set_line(int l) (defined in libdap::Error)libdap::Errorinline
    what() constlibdap::Errorinlinevirtual
    ~Error() (defined in libdap::Error)libdap::Errorvirtual
    -
    - - - - diff --git a/html/classlibdap_1_1ResponseTooBigErr.html b/html/classlibdap_1_1ResponseTooBigErr.html deleted file mode 100644 index 0c2b60fdc..000000000 --- a/html/classlibdap_1_1ResponseTooBigErr.html +++ /dev/null @@ -1,455 +0,0 @@ - - - - - - - -libdap: libdap::ResponseTooBigErr Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::ResponseTooBigErr Class Reference
    -
    -
    - -

    #include <ResponseTooBigErr.h>

    -
    -Inheritance diagram for libdap::ResponseTooBigErr:
    -
    -
    Inheritance graph
    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    ErrorCode get_error_code () const
     
    std::string get_error_message () const
     
    -std::string get_file () const
     
    -int get_line () const
     
    bool OK () const
     Is the Error object valid? More...
     
    bool parse (FILE *fp)
     Parse an Error object. More...
     
    void print (FILE *out) const
     
    void print (std::ostream &out) const
     
    ResponseTooBigErr (const string &msg)
     
    void set_error_code (ErrorCode ec=undefined_error)
     
    void set_error_message (std::string msg="")
     
    -void set_file (std::string f)
     
    -void set_line (int l)
     
    virtual const char * what () const throw ()
     The pointer is valid only for the lifetime of the Error instance. jhrg 9/22/20. More...
     
    - - - - - - - - - -

    -Protected Attributes

    -ErrorCode _error_code
     
    -std::string _error_message
     
    -std::string d_file
     
    -int d_line
     
    -

    Detailed Description

    -

    ResponseTooBigErr is thrown by HTTPCache::parse_header and write_body if the response that's being cached is too big. The HTTPCache methods determine just what 'too big' means.

    -
    Author
    jhrg
    - -

    Definition at line 45 of file ResponseTooBigErr.h.

    -

    Member Function Documentation

    - -

    ◆ get_error_code()

    - -
    -
    - - - - - -
    - - - - - - - -
    ErrorCode libdap::Error::get_error_code () const
    -
    -inherited
    -
    -

    Get the ErrorCode for this instance.

    - -

    Definition at line 249 of file Error.cc.

    - -
    -
    - -

    ◆ get_error_message()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::Error::get_error_message () const
    -
    -inherited
    -
    -

    Return the current error message.

    - -

    Definition at line 278 of file Error.cc.

    - -
    -
    - -

    ◆ OK()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::Error::OK () const
    -
    -inherited
    -
    - -

    Is the Error object valid?

    -

    Use this function to determine whether an Error object is valid. To be a valid, an Error object must either be: 1) empty or contain a message and a code.

    -
    Returns
    TRUE if the object is valid, FALSE otherwise.
    - -

    Definition at line 135 of file Error.cc.

    - -
    -
    - -

    ◆ parse()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool libdap::Error::parse (FILE * fp)
    -
    -inherited
    -
    - -

    Parse an Error object.

    -

    Given an input stream (FILE *) fp, parse an Error object from stream. Values for fields of the Error object are parsed and this is set accordingly. This is how a client program receives an error object from a server.

    -
    Parameters
    - - -
    fpA valid file pointer to an input stream.
    -
    -
    -
    Returns
    TRUE if no error was detected, FALSE otherwise.
    - -

    Definition at line 158 of file Error.cc.

    - -
    -
    - -

    ◆ print() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Error::print (FILE * out) const
    -
    -inherited
    -
    -

    Creates a printable representation of the Error object. It is suitable for framing, and also for printing and sending over a network.

    -

    The printed representation produced by this function can be parsed by the parse() member function. Thus parse and print form a symmetrical pair that can be used to send and receive an Error object over the network in a MIME document.

    -
    Parameters
    - - -
    outA pointer to the output stream on which the Error object is to be rendered.
    -
    -
    - -

    Definition at line 200 of file Error.cc.

    - -
    -
    - -

    ◆ print() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Error::print (std::ostream & out) const
    -
    -inherited
    -
    -

    Creates a printable representation of the Error object. It is suitable for framing, and also for printing and sending over a network.

    -

    The printed representation produced by this function can be parsed by the parse() member function. Thus parse and print form a symmetrical pair that can be used to send and receive an Error object over the network in a MIME document.

    -
    Parameters
    - - -
    strmA reference to the output stream on which the Error object is to be rendered.
    -
    -
    - -

    Definition at line 229 of file Error.cc.

    - -
    -
    - -

    ◆ set_error_code()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Error::set_error_code (ErrorCode ec = undefined_error)
    -
    -inherited
    -
    -

    Set the ErrorCode. If the current error message has not been set, use ec to set the error message. The resulting error message string is the same as the ErrorCode name. If ec is not within the range of values for an OPeNDAP ErrorCode, the error message is left unchanged.

    -
    Parameters
    - - -
    ecThe new ErrorCode value.
    -
    -
    - -

    Definition at line 262 of file Error.cc.

    - -
    -
    - -

    ◆ set_error_message()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Error::set_error_message (std::string msg = "")
    -
    -inherited
    -
    -

    Set the error message.

    - -

    Definition at line 287 of file Error.cc.

    - -
    -
    - -

    ◆ what()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - -
    virtual const char* libdap::Error::what () const
    throw (
    )
    -
    -inlinevirtualinherited
    -
    - -

    The pointer is valid only for the lifetime of the Error instance. jhrg 9/22/20.

    - -

    Definition at line 127 of file Error.h.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1ResponseTooBigErr.js b/html/classlibdap_1_1ResponseTooBigErr.js deleted file mode 100644 index 18feb001a..000000000 --- a/html/classlibdap_1_1ResponseTooBigErr.js +++ /dev/null @@ -1,22 +0,0 @@ -var classlibdap_1_1ResponseTooBigErr = -[ - [ "ResponseTooBigErr", "classlibdap_1_1ResponseTooBigErr.html#a9cb28cd65b6496db24ba4fa0b0c02153", null ], - [ "ResponseTooBigErr", "classlibdap_1_1ResponseTooBigErr.html#acf4ada20ba43f41d025bed00761e86b7", null ], - [ "get_error_code", "classlibdap_1_1ResponseTooBigErr.html#aaca0caca09e939602cade604cbc9824f", null ], - [ "get_error_message", "classlibdap_1_1ResponseTooBigErr.html#ab24a61e4974aae62962a40f9975e674c", null ], - [ "get_file", "classlibdap_1_1ResponseTooBigErr.html#a5165d667334a9fd6f337735c2b57e28c", null ], - [ "get_line", "classlibdap_1_1ResponseTooBigErr.html#a44b91121bdbc7d9d389db3440e2299cf", null ], - [ "OK", "classlibdap_1_1ResponseTooBigErr.html#acf3ab60821773bd8b62284750b02cfc0", null ], - [ "parse", "classlibdap_1_1ResponseTooBigErr.html#ac705b3c1cfab1f7530d66a974eb0e8b6", null ], - [ "print", "classlibdap_1_1ResponseTooBigErr.html#a552d711be27e6695854bd2b977a5cf31", null ], - [ "print", "classlibdap_1_1ResponseTooBigErr.html#a4c58ef196c2b247bd37529bb7ad6a666", null ], - [ "set_error_code", "classlibdap_1_1ResponseTooBigErr.html#a47c0f4b6a38d8ca075d1056076d2845d", null ], - [ "set_error_message", "classlibdap_1_1ResponseTooBigErr.html#a3ca90d33bf1c95529c9eefdfe8646e34", null ], - [ "set_file", "classlibdap_1_1ResponseTooBigErr.html#a94a26bbdd9f4ede88c74de97e9e9e98d", null ], - [ "set_line", "classlibdap_1_1ResponseTooBigErr.html#a63a9c54019daa8b406c4287faba5e60a", null ], - [ "what", "classlibdap_1_1ResponseTooBigErr.html#accc5eeb469c8c18ec16dbf7fefe3cc41", null ], - [ "_error_code", "classlibdap_1_1ResponseTooBigErr.html#a30226017ae9dfbe2e27be502b4fbdef4", null ], - [ "_error_message", "classlibdap_1_1ResponseTooBigErr.html#a87f74c6be2134736ca1e400c90a3d571", null ], - [ "d_file", "classlibdap_1_1ResponseTooBigErr.html#ac947a4c3d229d7ec505ad921a77702ea", null ], - [ "d_line", "classlibdap_1_1ResponseTooBigErr.html#af7d939b4b8154518f870d5424ff55f62", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1ResponseTooBigErr__inherit__graph.map b/html/classlibdap_1_1ResponseTooBigErr__inherit__graph.map deleted file mode 100644 index 73f31be31..000000000 --- a/html/classlibdap_1_1ResponseTooBigErr__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1ResponseTooBigErr__inherit__graph.md5 b/html/classlibdap_1_1ResponseTooBigErr__inherit__graph.md5 deleted file mode 100644 index d2a62cb64..000000000 --- a/html/classlibdap_1_1ResponseTooBigErr__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -6cdc41ebc8f43db2ef28bfcbd837f992 \ No newline at end of file diff --git a/html/classlibdap_1_1ResponseTooBigErr__inherit__graph.png b/html/classlibdap_1_1ResponseTooBigErr__inherit__graph.png deleted file mode 100644 index eb8acaf080a90d755db61b9baa1584577960f292..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22465 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 - - - - - diff --git a/html/classlibdap_1_1Response__inherit__graph.md5 b/html/classlibdap_1_1Response__inherit__graph.md5 deleted file mode 100644 index 301cfda03..000000000 --- a/html/classlibdap_1_1Response__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -5b937efca97720c589550a4af0cd0513 \ No newline at end of file diff --git a/html/classlibdap_1_1Response__inherit__graph.png b/html/classlibdap_1_1Response__inherit__graph.png deleted file mode 100644 index 19ad8a5e67b4d7dc0fd2afaf2621839021d33514..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109349 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 diff --git a/html/classlibdap_1_1Sequence-members.html b/html/classlibdap_1_1Sequence-members.html deleted file mode 100644 index 60cf645b2..000000000 --- a/html/classlibdap_1_1Sequence-members.html +++ /dev/null @@ -1,217 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::Sequence Member List
    -
    -
    - -

    This is the complete list of members for libdap::Sequence, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    add_var(BaseType *bt, Part part=nil)libdap::Constructorvirtual
    add_var_nocopy(BaseType *bt, Part part=nil)libdap::Constructorvirtual
    attributes()libdap::BaseTypevirtual
    BaseType(const string &n, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const string &n, const string &d, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const BaseType &copy_from)libdap::BaseType
    btp_stack typedef (defined in libdap::BaseType)libdap::BaseType
    buf2val(void **)libdap::Constructorinlinevirtual
    check_semantics(string &msg, bool all=false)libdap::Constructorvirtual
    clear_local_data()libdap::Sequencevirtual
    compute_checksum(Crc32 &checksum)libdap::Constructorvirtual
    Constructor(const string &name, const Type &type, bool is_dap4=false) (defined in libdap::Constructor)libdap::Constructorprotected
    Constructor(const string &name, const string &d, const Type &type, bool is_dap4=false)libdap::Constructorprotected
    Constructor(const Constructor &copy_from) (defined in libdap::Constructor)libdap::Constructorprotected
    d4_ops(BaseType *b, int op)libdap::BaseTypevirtual
    d_in_selection (defined in libdap::BaseType)libdap::BaseTypeprotected
    d_is_synthesized (defined in libdap::BaseType)libdap::BaseTypeprotected
    d_vars (defined in libdap::Constructor)libdap::Constructorprotected
    dataset() constlibdap::BaseTypevirtual
    del_var(const string &name)libdap::Constructorvirtual
    del_var(Vars_iter i) (defined in libdap::Constructor)libdap::Constructorvirtual
    deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)libdap::Sequencevirtual
    libdap::Constructor::deserialize(D4StreamUnMarshaller &um, DMR &dmr)libdap::Constructorvirtual
    dump(ostream &strm) constlibdap::Sequencevirtual
    element_count(bool leaves=false)libdap::Constructorvirtual
    FQN() constlibdap::Constructorvirtual
    get_attr_table()libdap::BaseTypevirtual
    get_ending_row_number()libdap::Sequencevirtual
    get_parent() constlibdap::BaseTypevirtual
    get_row_number() const (defined in libdap::Sequence)libdap::Sequenceinline
    get_row_stride()libdap::Sequencevirtual
    get_starting_row_number()libdap::Sequence
    get_unsent_data() constlibdap::Sequenceinline
    get_var_index(int i)libdap::Constructor
    get_vars_iter(int i)libdap::Constructor
    increment_row_number(unsigned int i) (defined in libdap::Sequence)libdap::Sequenceinline
    intern_data(ConstraintEvaluator &eval, DDS &dds)libdap::Sequencevirtual
    libdap::Constructor::intern_data()libdap::Constructorvirtual
    intern_data_for_leaf(DDS &dds, ConstraintEvaluator &eval, sequence_values_stack_t &sequence_values_stack) (defined in libdap::Sequence)libdap::Sequenceprotectedvirtual
    intern_data_parent_part_one(DDS &dds, ConstraintEvaluator &eval, sequence_values_stack_t &sequence_values_stack) (defined in libdap::Sequence)libdap::Sequenceprotectedvirtual
    intern_data_parent_part_two(DDS &dds, ConstraintEvaluator &eval, sequence_values_stack_t &sequence_values_stack) (defined in libdap::Sequence)libdap::Sequenceprotectedvirtual
    intern_data_private(ConstraintEvaluator &eval, DDS &dds, sequence_values_stack_t &sequence_values_stack) (defined in libdap::Sequence)libdap::Sequenceprotectedvirtual
    is_constructor_type() constlibdap::BaseTypevirtual
    is_dap2_only_type()libdap::Sequencevirtual
    is_dap4() const (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    is_in_selection()libdap::BaseTypevirtual
    is_leaf_sequence() (defined in libdap::Sequence)libdap::Sequencevirtual
    is_linear()libdap::Sequencevirtual
    is_simple_type() constlibdap::BaseTypevirtual
    is_vector_type() constlibdap::BaseTypevirtual
    length() constlibdap::Sequencevirtual
    m_duplicate(const Sequence &s) (defined in libdap::Sequence)libdap::Sequenceprotected
    m_duplicate(const Constructor &s) (defined in libdap::Constructor)libdap::Constructorprotected
    libdap::BaseType::m_duplicate(const BaseType &bt)libdap::BaseTypeprotected
    m_exact_match(const string &name, btp_stack *s=0) (defined in libdap::Constructor)libdap::Constructorprotected
    m_leaf_match(const string &name, btp_stack *s=0) (defined in libdap::Constructor)libdap::Constructorprotected
    make_dropped_vars_attr_table(vector< BaseType *> *dropped_vars) (defined in libdap::Constructor)libdap::Constructorstatic
    name() constlibdap::BaseTypevirtual
    number_of_rows() const (defined in libdap::Sequence)libdap::Sequencevirtual
    operator=(const Sequence &rhs) (defined in libdap::Sequence)libdap::Sequence
    operator=(const Constructor &rhs) (defined in libdap::Constructor)libdap::Constructor
    operator=(const BaseType &rhs) (defined in libdap::BaseType)libdap::BaseType
    ops(BaseType *b, int op)libdap::BaseTypevirtual
    print_dap4(XMLWriter &xml, bool constrained=false)libdap::Constructorvirtual
    print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::Constructorvirtual
    print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::Constructorvirtual
    print_one_row(ostream &out, int row, string space, bool print_row_num=false) (defined in libdap::Sequence)libdap::Sequencevirtual
    print_one_row(FILE *out, int row, string space, bool print_row_num=false) (defined in libdap::Sequence)libdap::Sequencevirtual
    print_val(ostream &out, string space="", bool print_decl_p=true)libdap::Sequencevirtual
    print_val(FILE *out, string space="", bool print_decl_p=true)libdap::Sequencevirtual
    print_val_by_rows(ostream &out, string space="", bool print_decl_p=true, bool print_row_numbers=true) (defined in libdap::Sequence)libdap::Sequencevirtual
    print_val_by_rows(FILE *out, string space="", bool print_decl_p=true, bool print_row_numbers=true) (defined in libdap::Sequence)libdap::Sequencevirtual
    print_xml(ostream &out, string space=" ", bool constrained=false)libdap::Constructorvirtual
    print_xml(FILE *out, string space=" ", bool constrained=false)libdap::Constructorvirtual
    print_xml_writer(XMLWriter &xml, bool constrained=false)libdap::Constructorvirtual
    ptr_duplicate()libdap::Sequencevirtual
    read()libdap::Constructorvirtual
    read_p()libdap::BaseTypevirtual
    read_row(int row, DDS &dds, ConstraintEvaluator &eval, bool ce_eval=true)libdap::Sequencevirtual
    reset_row_number()libdap::Sequence
    reset_row_number(bool recur)libdap::Sequence
    row_value(size_t row)libdap::Sequencevirtual
    send_p()libdap::BaseTypevirtual
    Sequence(const string &n)libdap::Sequence
    Sequence(const string &n, const string &d)libdap::Sequence
    Sequence(const Sequence &rhs)libdap::Sequence
    sequence_values_stack_t typedef (defined in libdap::Sequence)libdap::Sequenceprotected
    SequenceTest (defined in libdap::Sequence)libdap::Sequencefriend
    serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)libdap::Sequencevirtual
    libdap::Constructor::serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)libdap::Constructorvirtual
    serialize_leaf(DDS &dds, ConstraintEvaluator &eval, Marshaller &m, bool ce_eval) (defined in libdap::Sequence)libdap::Sequenceprotectedvirtual
    serialize_parent_part_one(DDS &dds, ConstraintEvaluator &eval, Marshaller &m) (defined in libdap::Sequence)libdap::Sequenceprotectedvirtual
    serialize_parent_part_two(DDS &dds, ConstraintEvaluator &eval, Marshaller &m) (defined in libdap::Sequence)libdap::Sequenceprotectedvirtual
    set_attr_table(const AttrTable &at)libdap::BaseTypevirtual
    set_attributes(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_attributes_nocopy(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_in_selection(bool state)libdap::Constructorvirtual
    set_is_dap4(const bool v) (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    set_leaf_p(bool state) (defined in libdap::Sequence)libdap::Sequencevirtual
    set_leaf_sequence(int lvl=1)libdap::Sequencevirtual
    set_length(int)libdap::BaseTypeinlinevirtual
    set_name(const string &n)libdap::BaseTypevirtual
    set_parent(BaseType *parent)libdap::BaseTypevirtual
    set_read_p(bool state)libdap::Constructorvirtual
    set_row_number_constraint(int start, int stop, int stride=1)libdap::Sequencevirtual
    set_send_p(bool state)libdap::Constructorvirtual
    set_synthesized_p(bool state)libdap::BaseTypevirtual
    set_type(const Type &t)libdap::BaseTypevirtual
    set_unsent_data(bool usd)libdap::Sequenceinline
    set_value(SequenceValues &values)libdap::Sequencevirtual
    synthesized_p()libdap::BaseTypevirtual
    toString()libdap::Sequencevirtual
    transfer_attributes(AttrTable *at)libdap::Constructorvirtual
    transform_to_dap2(AttrTable *parent_attr_table)libdap::BaseTypevirtual
    transform_to_dap4(D4Group *root, Constructor *container)libdap::Sequencevirtual
    type() constlibdap::BaseTypevirtual
    type_name() constlibdap::BaseTypevirtual
    val2buf(void *, bool)libdap::Constructorinlinevirtual
    value()libdap::Sequencevirtual
    value_ref()libdap::Sequencevirtual
    var(const string &name, bool exact_match=true, btp_stack *s=0)libdap::Constructorvirtual
    var(const string &n, btp_stack &s)libdap::Constructorvirtual
    var_begin()libdap::Constructor
    var_end()libdap::Constructor
    var_rbegin()libdap::Constructor
    var_rend()libdap::Constructor
    var_value(size_t row, const string &name)libdap::Sequencevirtual
    var_value(size_t row, size_t i)libdap::Sequencevirtual
    Vars_citer typedef (defined in libdap::Constructor)libdap::Constructor
    Vars_iter typedef (defined in libdap::Constructor)libdap::Constructor
    Vars_riter typedef (defined in libdap::Constructor)libdap::Constructor
    width(bool constrained=false) constlibdap::Constructorvirtual
    ~BaseType() (defined in libdap::BaseType)libdap::BaseTypevirtual
    ~Constructor() (defined in libdap::Constructor)libdap::Constructorvirtual
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    ~Sequence() (defined in libdap::Sequence)libdap::Sequencevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1Sequence.html b/html/classlibdap_1_1Sequence.html deleted file mode 100644 index 3ef767812..000000000 --- a/html/classlibdap_1_1Sequence.html +++ /dev/null @@ -1,4056 +0,0 @@ - - - - - - - -libdap: libdap::Sequence Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    - -

    Holds a sequence. - More...

    - -

    #include <Sequence.h>

    -
    -Inheritance diagram for libdap::Sequence:
    -
    -
    Inheritance graph
    - - - - - -
    - - - - - - - - - - -

    -Public Types

    -typedef stack< BaseType * > btp_stack
     
    -typedef std::vector< BaseType * >::const_iterator Vars_citer
     
    -typedef std::vector< BaseType * >::iterator Vars_iter
     
    -typedef std::vector< BaseType * >::reverse_iterator Vars_riter
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual void add_var (BaseType *bt, Part part=nil)
     
    virtual void add_var_nocopy (BaseType *bt, Part part=nil)
     
    virtual unsigned int buf2val (void **)
     Reads the class data. More...
     
    virtual bool check_semantics (string &msg, bool all=false)
     Compare an object's current state with the semantics of its type. More...
     
    virtual void clear_local_data ()
     
    virtual void compute_checksum (Crc32 &checksum)
     include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum. More...
     
    virtual bool d4_ops (BaseType *b, int op)
     Evaluator a relop for DAP4. More...
     
    virtual string dataset () const
     Returns the name of the dataset used to create this instance. More...
     
    virtual void del_var (const string &name)
     
    -virtual void del_var (Vars_iter i)
     
    virtual void deserialize (D4StreamUnMarshaller &um, DMR &dmr)
     
    virtual bool deserialize (UnMarshaller &um, DDS *dds, bool reuse=false)
     Deserialize (read from the network) the entire Sequence. More...
     
    virtual void dump (ostream &strm) const
     dumps information about this object More...
     
    virtual int element_count (bool leaves=false)
     Count the members of constructor types. More...
     
    virtual std::string FQN () const
     
    virtual AttrTableget_attr_table ()
     
    virtual int get_ending_row_number ()
     Get the ending row number. More...
     
    virtual BaseTypeget_parent () const
     
    -int get_row_number () const
     
    virtual int get_row_stride ()
     Get the row stride. More...
     
    int get_starting_row_number ()
     Get the starting row number. More...
     
    bool get_unsent_data () const
     Get the unsent data property. More...
     
    BaseTypeget_var_index (int i)
     
    Vars_iter get_vars_iter (int i)
     
    -void increment_row_number (unsigned int i)
     
    virtual void intern_data ()
     Read data into this variable. More...
     
    virtual void intern_data (ConstraintEvaluator &eval, DDS &dds)
     
    virtual bool is_constructor_type () const
     Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable. More...
     
    virtual bool is_dap2_only_type ()
     
    -virtual bool is_dap4 () const
     
    virtual bool is_in_selection ()
     Is this variable part of the current selection? More...
     
    -virtual bool is_leaf_sequence ()
     
    virtual bool is_linear ()
     Check to see whether this variable can be printed simply. More...
     
    virtual bool is_simple_type () const
     Returns true if the instance is a numeric, string or URL type variable. More...
     
    virtual bool is_vector_type () const
     Returns true if the instance is a vector (i.e., array) type variable. More...
     
    virtual int length () const
     
    virtual string name () const
     Returns the name of the class instance. More...
     
    -virtual int number_of_rows () const
     
    -Sequenceoperator= (const Sequence &rhs)
     
    virtual bool ops (BaseType *b, int op)
     Evaluate relational operators. More...
     
    void print_dap4 (XMLWriter &xml, bool constrained=false)
     
    virtual void print_decl (ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_decl (FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    -virtual void print_one_row (ostream &out, int row, string space, bool print_row_num=false)
     
    -virtual void print_one_row (FILE *out, int row, string space, bool print_row_num=false)
     
    virtual void print_val (ostream &out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_val (FILE *out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    -virtual void print_val_by_rows (ostream &out, string space="", bool print_decl_p=true, bool print_row_numbers=true)
     
    -virtual void print_val_by_rows (FILE *out, string space="", bool print_decl_p=true, bool print_row_numbers=true)
     
    virtual void print_xml (ostream &out, string space=" ", bool constrained=false)
     
    virtual void print_xml (FILE *out, string space=" ", bool constrained=false)
     
    virtual void print_xml_writer (XMLWriter &xml, bool constrained=false)
     
    virtual BaseTypeptr_duplicate ()
     
    virtual bool read ()
     simple implementation of read that iterates through vars and calls read on them More...
     
    virtual bool read_p ()
     Has this variable been read? More...
     
    virtual bool read_row (int row, DDS &dds, ConstraintEvaluator &eval, bool ce_eval=true)
     
    void reset_row_number ()
     Rest the row number counter. More...
     
    void reset_row_number (bool recur)
     A recursive version of reset_row_number() More...
     
    virtual BaseTypeRowrow_value (size_t row)
     Get a whole row from the sequence. More...
     
    virtual bool send_p ()
     Should this variable be sent? More...
     
     Sequence (const string &n)
     The Sequence constructor. More...
     
     Sequence (const string &n, const string &d)
     The Sequence server-side constructor. More...
     
     Sequence (const Sequence &rhs)
     The Sequence copy constructor. More...
     
    virtual void serialize (D4StreamMarshaller &m, DMR &dmr, bool filter=false)
     Serialize a Constructor. More...
     
    virtual bool serialize (ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
     
    virtual void set_attr_table (const AttrTable &at)
     
    virtual void set_in_selection (bool state)
     Set the in_selection property. More...
     
    -virtual void set_is_dap4 (const bool v)
     
    -virtual void set_leaf_p (bool state)
     
    virtual void set_leaf_sequence (int lvl=1)
     Mark the Sequence which holds the leaf elements. More...
     
    virtual void set_length (int)
     Set the number of elements for this variable. More...
     
    virtual void set_name (const string &n)
     Sets the name of the class instance. More...
     
    virtual void set_parent (BaseType *parent)
     
    virtual void set_read_p (bool state)
     Sets the value of the read_p property. More...
     
    virtual void set_row_number_constraint (int start, int stop, int stride=1)
     
    virtual void set_send_p (bool state)
     
    virtual void set_synthesized_p (bool state)
     
    virtual void set_type (const Type &t)
     Sets the type of the class instance. More...
     
    void set_unsent_data (bool usd)
     Set the unsent data property. More...
     
    virtual void set_value (SequenceValues &values)
     
    virtual bool synthesized_p ()
     
    virtual string toString ()
     
    virtual void transfer_attributes (AttrTable *at)
     
    virtual std::vector< BaseType * > * transform_to_dap2 (AttrTable *parent_attr_table)
     DAP4 to DAP2 transform. More...
     
    virtual void transform_to_dap4 (D4Group *root, Constructor *container)
     
    virtual Type type () const
     Returns the type of the class instance. More...
     
    virtual string type_name () const
     Returns the type of the class instance as a string. More...
     
    virtual unsigned int val2buf (void *, bool)
     Loads class data. More...
     
    virtual SequenceValues value ()
     
    virtual SequenceValuesvalue_ref ()
     
    virtual BaseTypevar (const string &name, bool exact_match=true, btp_stack *s=0)
     btp_stack no longer needed; use back pointers (BaseType::get_parent()) More...
     
    virtual BaseTypevar (const string &n, btp_stack &s)
     
    Vars_iter var_begin ()
     
    Vars_iter var_end ()
     
    Vars_riter var_rbegin ()
     
    Vars_riter var_rend ()
     
    virtual BaseTypevar_value (size_t row, const string &name)
     Get the BaseType pointer to the named variable of a given row. More...
     
    virtual BaseTypevar_value (size_t row, size_t i)
     Get the BaseType pointer to the $i^{th}$ variable of row. More...
     
    virtual unsigned int width (bool constrained=false) const
     
    virtual D4Attributesattributes ()
     
    -virtual void set_attributes (D4Attributes *)
     
    -virtual void set_attributes_nocopy (D4Attributes *)
     
    - - - -

    -Static Public Member Functions

    -static AttrTablemake_dropped_vars_attr_table (vector< BaseType *> *dropped_vars)
     
    - - - -

    -Protected Types

    -typedef stack< SequenceValues * > sequence_values_stack_t
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Protected Member Functions

    -virtual void intern_data_for_leaf (DDS &dds, ConstraintEvaluator &eval, sequence_values_stack_t &sequence_values_stack)
     
    -virtual void intern_data_parent_part_one (DDS &dds, ConstraintEvaluator &eval, sequence_values_stack_t &sequence_values_stack)
     
    -virtual void intern_data_parent_part_two (DDS &dds, ConstraintEvaluator &eval, sequence_values_stack_t &sequence_values_stack)
     
    -virtual void intern_data_private (ConstraintEvaluator &eval, DDS &dds, sequence_values_stack_t &sequence_values_stack)
     
    -void m_duplicate (const Constructor &s)
     
    void m_duplicate (const BaseType &bt)
     Perform a deep copy. More...
     
    -void m_duplicate (const Sequence &s)
     
    -BaseTypem_exact_match (const string &name, btp_stack *s=0)
     
    -BaseTypem_leaf_match (const string &name, btp_stack *s=0)
     
    -virtual bool serialize_leaf (DDS &dds, ConstraintEvaluator &eval, Marshaller &m, bool ce_eval)
     
    -virtual bool serialize_parent_part_one (DDS &dds, ConstraintEvaluator &eval, Marshaller &m)
     
    -virtual void serialize_parent_part_two (DDS &dds, ConstraintEvaluator &eval, Marshaller &m)
     
    - - - - - - - -

    -Protected Attributes

    -bool d_in_selection
     
    -bool d_is_synthesized
     
    -std::vector< BaseType * > d_vars
     
    - - - -

    -Friends

    -class SequenceTest
     
    -

    Detailed Description

    -

    Holds a sequence.

    -

    This is the interface for the class Sequence. A sequence contains a single set of variables, all at the same lexical level just like a Structure. Like a Structure, a Sequence may contain other compound types, including other Sequences. Unlike a Structure, a Sequence defines a pattern that is repeated N times for a sequence of N elements. It is useful to think of a Sequence as representing a table of values (like a relational database), with each row of the table corresponding to a Sequence instance.'' (This usage can be confusing, sinceinstance'' also refers to a particular item of class Sequence.) For example:

    -
    -Sequence {
    -String name;
    -Int32 age;
    -} person;
    -

    This represents a Sequence of ``person'' records, each instance of which contains a name and an age:

    -
    -Fred       34
    -Ralph      23
    -Andrea     29
    -...
    -

    A Sequence can be arbitrarily long, which is to say that its length is not part of its declaration. A Sequence can contain other Sequences:

    -
    -Sequence {
    -String name;
    -Int32 age;
    -Sequence {
    -String friend;
    -} friend_list;
    -} person;
    -

    This is still represented as a single table, but each row contains the elements of both the main Sequence and the nested one:

    -
    -Fred       34     Norman
    -Fred       34     Andrea
    -Fred       34     Ralph
    -Fred       34     Lisa
    -Ralph      23     Norman
    -Ralph      23     Andrea
    -Ralph      23     Lisa
    -Ralph      23     Marth
    -Ralph      23     Throckmorton
    -Ralph      23     Helga
    -Ralph      23     Millicent
    -Andrea     29     Ralph
    -Andrea     29     Natasha
    -Andrea     29     Norman
    -...        ..     ...
    -

    Internally, the Sequence is represented by a vector of vectors. The members of the outer vector are the members of the Sequence. This includes the nested Sequences, as in the above example.

    -

    NB: Note that in the past this class had a different behavior. It held only one row at a time and the deserialize(...) method had to be called from within a loop. This is no longer true. Now the deserailize(...) method should be called once and will read the entire sequence's values from the server. All the values are now stored in an instance of Sequence, not just a single row's.

    -

    Because the length of a Sequence is indeterminate, there are changes to the behavior of the functions to read this class of data. The read() function for Sequence must be written so that successive calls return values for successive rows of the Sequence.

    -

    Similar to a C structure, you refer to members of Sequence elements with a .'' notation. For example, if the Sequence has a member Sequence calledTom'' and Tom has a member Float32 called shoe_size'', you can refer to Tom's shoe size as Tom.shoe_size''.

    -
    Note
    This class contains the 'logic' for both the server- and client-side behavior. The field d_values is used by the client-side methods to store the entire Sequence. On the server-side, the read() method uses an underlying data system to read one row of data values which are then serialized using the serialize() methods of each variable.
    -
    Todo:
    Add an isEmpty() method which returns true if the Sequence is empty. This should work before and after calling deserialize().
    - -

    Definition at line 162 of file Sequence.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ Sequence() [1/3]

    - -
    -
    - - - - - - - - -
    libdap::Sequence::Sequence (const string & n)
    -
    - -

    The Sequence constructor.

    -

    The Sequence constructor requires only the name of the variable to be created. The name may be omitted, which will create a nameless variable. This may be adequate for some applications.

    -
    Parameters
    - - -
    nA string containing the name of the variable to be created.
    -
    -
    - -

    Definition at line 161 of file Sequence.cc.

    - -
    -
    - -

    ◆ Sequence() [2/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    libdap::Sequence::Sequence (const string & n,
    const string & d 
    )
    -
    - -

    The Sequence server-side constructor.

    -

    The Sequence server-side constructor requires the name of the variable to be created and the dataset name from which this variable is being created.

    -
    Parameters
    - - - -
    nA string containing the name of the variable to be created.
    dA string containing the name of the dataset from which this variable is being created.
    -
    -
    - -

    Definition at line 177 of file Sequence.cc.

    - -
    -
    - -

    ◆ Sequence() [3/3]

    - -
    -
    - - - - - - - - -
    libdap::Sequence::Sequence (const Sequencerhs)
    -
    - -

    The Sequence copy constructor.

    - -

    Definition at line 185 of file Sequence.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ add_var()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::add_var (BaseTypebt,
    Part part = nil 
    )
    -
    -virtualinherited
    -
    -

    Adds an element to a Constructor.

    -
    Parameters
    - - - -
    btA pointer to the variable to add to this Constructor.
    partNot used by this class, defaults to nil
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 407 of file Constructor.cc.

    - -
    -
    - -

    ◆ add_var_nocopy()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::add_var_nocopy (BaseTypebt,
    Part part = nil 
    )
    -
    -virtualinherited
    -
    -

    Adds an element to a Constructor.

    -
    Parameters
    - - - -
    btA pointer to thee variable to add to this Constructor.
    partNot used by this class, defaults to nil
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 432 of file Constructor.cc.

    - -
    -
    - -

    ◆ attributes()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4Attributes * libdap::BaseType::attributes ()
    -
    -virtualinherited
    -
    -

    DAP4 Attribute methods

    - -

    Definition at line 599 of file BaseType.cc.

    - -
    -
    - -

    ◆ buf2val()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual unsigned int libdap::Constructor::buf2val (void ** val)
    -
    -inlinevirtualinherited
    -
    - -

    Reads the class data.

    -

    Reads the class data into the memory referenced by val. The caller should either allocate enough storage to val to hold the class data or set *val to null. If *val is NULL, memory will be allocated by this function with new(). If the memory is allocated this way, the caller is responsible for deallocating that memory. Array and values for simple types are stored as C would store an array.

    -
    Deprecated:
    Use value() in the leaf classes.
    -
    Parameters
    - - -
    valA pointer to a pointer to the memory into which the class data will be copied. If the value pointed to is NULL, memory will be allocated to hold the data, and the pointer value modified accordingly. The calling program is responsible for deallocating the memory references by this pointer.
    -
    -
    -
    Returns
    The size (in bytes) of the information copied to val.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 118 of file Constructor.h.

    - -
    -
    - -

    ◆ check_semantics()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::Constructor::check_semantics (string & msg,
    bool all = false 
    )
    -
    -virtualinherited
    -
    - -

    Compare an object's current state with the semantics of its type.

    -

    This function checks the class instance for internal consistency. This is important to check for complex constructor classes. For BaseType, an object is semantically correct if it has both a non-null name and type.

    -

    For example, an Int32 instance would return FALSE if it had no name or no type defined. A Grid instance might return FALSE for more complex reasons, such as having Map arrays of the wrong size or shape.

    -

    This function is used by the DDS class, and will rarely, if ever, be explicitly called by a DODS application program. A variable must pass this test before it is sent, but there may be many other stages in a retrieve operation where it would fail.

    -
    Returns
    Returns FALSE when the current state violates some aspect of the type semantics, TRUE otherwise.
    -
    Parameters
    - - - -
    msgA returned string, containing a message indicating the source of any problem.
    allFor complex constructor types (Grid, Sequence, Structure), this flag indicates whether to check the semantics of the member variables, too.
    -
    -
    -
    See also
    DDS::check_semantics
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 792 of file Constructor.cc.

    - -
    -
    - -

    ◆ clear_local_data()

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::Sequence::clear_local_data ()
    -
    -virtual
    -
    -

    Remove any read or set data in the private data of the variable, setting read_p() to false. Used to clear any dynamically allocated storage that holds (potentially large) data. For the simple types, this no-op version is all that's needed. Vector and some other classes define a special version and have serialize() implementations that call it to free data as soon as possible after sending it.

    -
    Note
    Added 7/5/15 jhrg
    -
    -Any specialization of this should make sure to reset the read_p property.
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 247 of file Sequence.cc.

    - -
    -
    - -

    ◆ compute_checksum()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::compute_checksum (Crc32checksum)
    -
    -virtualinherited
    -
    - -

    include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum.

    -
    Parameters
    - - -
    checksumA Crc32 instance that holds the current checksum.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 550 of file Constructor.cc.

    - -
    -
    - -

    ◆ d4_ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::d4_ops (BaseTypeb,
    int op 
    )
    -
    -virtualinherited
    -
    - -

    Evaluator a relop for DAP4.

    -

    This method is used by the filter expression evaluation code in DAP4. Each of the 'data type' classes that support relops must overload this method. In an expression of the form arg1 op arg2, this object is arg1, the parameter 'b' is arg2 and op is the relational operator.

    -
    Note
    I used the same relop codes for DAP4 as in the DAP2 parser/scanner which makes for some coupling between them, but cuts way down on the duplication of the evaluator logic, which is somewhat involved.
    -
    Parameters
    - - - -
    bThe second argument in the relational expression
    opThe infix relational operator
    -
    -
    -
    Returns
    True if the expression is true, False otherwise.
    - -

    Reimplemented in libdap::Str, libdap::Int32, libdap::Float32, libdap::Byte, libdap::Float64, libdap::Int16, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 1282 of file BaseType.cc.

    - -
    -
    - -

    ◆ dataset()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::dataset () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the dataset used to create this instance.

    -

    A dataset from which the data is to be read. The meaning of this string will vary among different types of data sources. It may be the name of a data file or an identifier used to read data from a relational database.

    - -

    Definition at line 358 of file BaseType.cc.

    - -
    -
    - -

    ◆ del_var()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::del_var (const string & n)
    -
    -virtualinherited
    -
    -

    Remove an element from a Constructor.

    -
    Parameters
    - - -
    nname of the variable to remove
    -
    -
    - -

    Definition at line 448 of file Constructor.cc.

    - -
    -
    - -

    ◆ deserialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::deserialize (D4StreamUnMarshallerum,
    DMRdmr 
    )
    -
    -virtualinherited
    -
    -

    The DAP4 deserialization method.

    Parameters
    - - - -
    um
    dmr
    -
    -
    -
    Exceptions
    - - -
    Erroror InternalErr
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Sequence, and libdap::D4Group.

    - -

    Definition at line 609 of file Constructor.cc.

    - -
    -
    - -

    ◆ deserialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::Sequence::deserialize (UnMarshallerum,
    DDSdds,
    bool reuse = false 
    )
    -
    -virtual
    -
    - -

    Deserialize (read from the network) the entire Sequence.

    -

    This method used to read a single row at a time. Now the entire sequence is read at once. The method used to return True to indicate that more data needed to be deserialized and False when the sequence was completely read. Now it simply returns false. This might seem odd, but making this method return false breaks existing software the least.

    -
    Parameters
    - - - - -
    umAn UnMarshaller that knows how to deserialize data
    ddsA DataDDS from which to read.
    reusePassed to child objects when they are deserialized. Some implementations of deserialize() use this to determine if new storage should be allocated or existing storage reused.
    -
    -
    -
    Exceptions
    - - - -
    Errorif a sequence stream marker cannot be read.
    InternalErrif the dds param is not a DataDDS.
    -
    -
    -
    Returns
    A return value of false indicates that an EOS ("end of -Sequence") marker was found, while a value of true indicates that there are more rows to be read. This version always reads the entire sequence, so it always returns false.
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 1003 of file Sequence.cc.

    - -
    -
    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Sequence::dump (ostream & strm) const
    -
    -virtual
    -
    - -

    dumps information about this object

    -

    Displays the pointer value of this instance and information about this instance.

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the information to
    -
    -
    -
    Returns
    void
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 1278 of file Sequence.cc.

    - -
    -
    - -

    ◆ element_count()

    - -
    -
    - - - - - -
    - - - - - - - - -
    int libdap::Constructor::element_count (bool leaves = false)
    -
    -virtualinherited
    -
    - -

    Count the members of constructor types.

    -

    Return a count of the total number of variables in this variable. This is used to count the number of variables held by a constructor variable - for simple type and vector variables it always returns 1.

    -

    For compound data types, there are two ways to count members. You can count the members, or you can count the simple members and add that to the count of the compound members. For example, if a Structure contains an Int32 and another Structure that itself contains two Int32 members, the element count of the top-level structure could be two (one Int32 and one Structure) or three (one Int32 by itself and two Int32's in the subsidiary Structure). Use the leaves parameter to control which kind of counting you desire.

    -
    Returns
    Returns 1 for simple types. For compound members, the count depends on the leaves argument.
    -
    Parameters
    - - -
    leavesThis parameter is only relevant if the object contains other compound data types. If FALSE, the function counts only the data variables mentioned in the object's declaration. If TRUE, it counts the simple members, and adds that to the sum of the counts for the compound members. This parameter has no effect for simple type variables.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 194 of file Constructor.cc.

    - -
    -
    - -

    ◆ FQN()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::Constructor::FQN () const
    -
    -virtualinherited
    -
    -

    Return the FQN for this variable. This will include the D4 Group component of the name.

    -
    Returns
    The FQN in a string
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Group.

    - -

    Definition at line 181 of file Constructor.cc.

    - -
    -
    - -

    ◆ get_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - -
    AttrTable & libdap::BaseType::get_attr_table ()
    -
    -virtualinherited
    -
    -

    Get this variable's AttrTable. It's generally a bad idea to return a reference to a contained object, but in this case it seems that building an interface inside BaseType is overkill.

    -

    Use the AttrTable methods to manipulate the table.

    - -

    Definition at line 582 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_ending_row_number()

    - -
    -
    - - - - - -
    - - - - - - - -
    int libdap::Sequence::get_ending_row_number ()
    -
    -virtual
    -
    - -

    Get the ending row number.

    -

    Return the ending row number if the sequence was constrained using row numbers (instead of, or in addition to, a relational constraint). If a relational constraint was also given, the row number corresponds to the row number of the sequence after applying the relational constraint.

    -

    If the bracket notation was not used to constrain this sequence, this method returns -1.

    -
    Returns
    The ending row number.
    - -

    Definition at line 1093 of file Sequence.cc.

    - -
    -
    - -

    ◆ get_parent()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::BaseType::get_parent () const
    -
    -virtualinherited
    -
    -

    Return a pointer to the Constructor or Vector which holds (contains) this variable. If this variable is at the top level, this method returns null.

    -
    Returns
    A BaseType pointer to the variable's parent.
    - -

    Definition at line 751 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_row_stride()

    - -
    -
    - - - - - -
    - - - - - - - -
    int libdap::Sequence::get_row_stride ()
    -
    -virtual
    -
    - -

    Get the row stride.

    -

    Return the row stride number if the sequence was constrained using row numbers (instead of, or in addition to, a relational constraint). If a relational constraint was also given, the row stride is applied to the sequence after applying the relational constraint.

    -

    If the bracket notation was not used to constrain this sequence, this method returns -1.

    -
    Returns
    The row stride.
    - -

    Definition at line 1077 of file Sequence.cc.

    - -
    -
    - -

    ◆ get_starting_row_number()

    - -
    -
    - - - - - - - -
    int libdap::Sequence::get_starting_row_number ()
    -
    - -

    Get the starting row number.

    -

    Return the starting row number if the sequence was constrained using row numbers (instead of, or in addition to, a relational constraint). If a relational constraint was also given, the row number corresponds to the row number of the sequence after applying the relational constraint.

    -

    If the bracket notation was not used to constrain this sequence, this method returns -1.

    -
    Returns
    The starting row number.
    - -

    Definition at line 1062 of file Sequence.cc.

    - -
    -
    - -

    ◆ get_unsent_data()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::Sequence::get_unsent_data () const
    -
    -inline
    -
    - -

    Get the unsent data property.

    - -

    Definition at line 271 of file Sequence.h.

    - -
    -
    - -

    ◆ get_var_index()

    - -
    -
    - - - - - -
    - - - - - - - - -
    BaseType * libdap::Constructor::get_var_index (int i)
    -
    -inherited
    -
    -

    Return the BaseType pointer for the ith variable.

    Parameters
    - - -
    iThis index
    -
    -
    -
    Returns
    The corresponding BaseType*.
    - -

    Definition at line 397 of file Constructor.cc.

    - -
    -
    - -

    ◆ get_vars_iter()

    - -
    -
    - - - - - -
    - - - - - - - - -
    Constructor::Vars_iter libdap::Constructor::get_vars_iter (int i)
    -
    -inherited
    -
    -

    Return the iterator for the ith variable.

    Parameters
    - - -
    ithe index
    -
    -
    -
    Returns
    The corresponding Vars_iter
    - -

    Definition at line 388 of file Constructor.cc.

    - -
    -
    - -

    ◆ intern_data() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::Constructor::intern_data ()
    -
    -virtualinherited
    -
    - -

    Read data into this variable.

    -
    Parameters
    - - - -
    evalEvaluator for a constraint expression
    dmrDMR for the whole dataset
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Sequence, and libdap::D4Group.

    - -

    Definition at line 556 of file Constructor.cc.

    - -
    -
    - -

    ◆ intern_data() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Sequence::intern_data (ConstraintEvaluatoreval,
    DDSdds 
    )
    -
    -virtual
    -
    -

    This method is used to evaluate a constraint and based on those results load the Sequence variable with data. This simulates having a server call the serialize() method and a client call the deserialize() method without the overhead of any IPC. Use this method on the server-side to 'load the d_values field with data' so that other code and work with those data.

    -

    The somewhat odd algorithm used by serialize() is largely copied here, so comments about logic in serialize() and the related methods apply here as well.

    -
    Note
    Even though each Sequence variable has a values field, only the top-most Sequence in a hierarchy of Sequences holds values. The field accessed by the var_value() method is a completely linked object; access the values of nested Sequences using the BaseType objects returned by var_value().
    -
    -Only call this method for top-most Sequences. Never call it for Sequences which have a parent (directly or indirectly) variable that is a Sequence.
    -
    Parameters
    - - - -
    evalUse this constraint evaluator
    ddsThis DDS holds the variables for the data source
    -
    -
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 797 of file Sequence.cc.

    - -
    -
    - -

    ◆ is_constructor_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_constructor_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable.

    -
    Returns
    True if the instance is a Structure, Sequence or Grid, False otherwise.
    - -

    Definition at line 412 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_dap2_only_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::Sequence::is_dap2_only_type ()
    -
    -virtual
    -
    -

    The Sequence class will be streamlined for DAP4.

    - -

    Definition at line 272 of file Sequence.cc.

    - -
    -
    - -

    ◆ is_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_in_selection ()
    -
    -virtualinherited
    -
    - -

    Is this variable part of the current selection?

    -

    Does this variable appear in either the selection part or as a function argument in the current constrain expression. If this property is set (true) then implementations of the read() method should read this variable.

    -
    Note
    This method does not check, nor does it know about the semantics of, string arguments passed to functions. Those functions might include variable names in strings; they are responsible for reading those variables. See the grid (func_grid_select()) for an example.
    -
    See also
    BaseType::read()
    - -

    Definition at line 703 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_linear()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::Sequence::is_linear ()
    -
    -virtual
    -
    - -

    Check to see whether this variable can be printed simply.

    -

    True if the instance can be flattened and printed as a single table of values. For Arrays and Grids this is always false. For Structures and Sequences the conditions are more complex. The implementation provided by this class always returns false. Other classes should override this implementation.

    -
    Todo:
    Change the name to is_flattenable or something like that. 05/16/03 jhrg
    -
    Returns
    True if the instance can be printed as a single table of values, false otherwise.
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 292 of file Sequence.cc.

    - -
    -
    - -

    ◆ is_simple_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_simple_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a numeric, string or URL type variable.

    -
    Returns
    True if the instance is a scalar numeric, String or URL variable, False otherwise. Arrays (even of simple types) return False.
    -
    See also
    is_vector_type()
    - -

    Definition at line 393 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_vector_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_vector_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a vector (i.e., array) type variable.

    -
    Returns
    True if the instance is an Array, False otherwise.
    - -

    Definition at line 402 of file BaseType.cc.

    - -
    -
    - -

    ◆ length()

    - -
    -
    - - - - - -
    - - - - - - - -
    int libdap::Sequence::length () const
    -
    -virtual
    -
    -

    Returns the number of elements in a Sequence object. Note that this is not the number of items in a row, but the number of rows in the complete sequence object. To be meaningful, this must be computed after constraint expression (CE) evaluation. The purpose of this function is to facilitate translations between Sequence objects and Array objects, particularly when the Sequence is too large to be transferred from the server to the client in its entirety.

    -

    This function, to be useful, must be specialized for the API and data format in use.

    -
    Returns
    The base implementation returns -1, indicating that the length is not known. Sub-classes specific to a particular API will have a more complete implementation.
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 413 of file Sequence.cc.

    - -
    -
    - -

    ◆ m_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::m_duplicate (const BaseTypebt)
    -
    -protectedinherited
    -
    - -

    Perform a deep copy.

    -

    Perform a deep copy. Copies the values of bt into *this. Pointers are dereferenced and their values are copied into a newly allocated instance.

    -
    Parameters
    - - -
    btThe source object.
    -
    -
    - -

    Definition at line 86 of file BaseType.cc.

    - -
    -
    - -

    ◆ name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::name () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the class instance.

    - -

    Definition at line 320 of file BaseType.cc.

    - -
    -
    - -

    ◆ ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::ops (BaseTypeb,
    int op 
    )
    -
    -virtualinherited
    -
    - -

    Evaluate relational operators.

    -

    This method contains the relational operators used by the constraint expression evaluator in the DDS class. Each class that wants to be able to evaluate relational expressions must overload this function. The implementation in BaseType throws an InternalErr exception. The DAP library classes Byte, ..., Url provide specializations of this method. It is not meaningful for classes such as Array because relational expressions using Array are not supported.

    -

    The op argument refers to a table generated by bison from the constraint expression parser. Use statements like the following to correctly interpret its value:

    -
    switch (op) {
    -    case EQUAL: return i1 == i2;
    -    case NOT_EQUAL: return i1 != i2;
    -    case GREATER: return i1 > i2;
    -    case GREATER_EQL: return i1 >= i2;
    -    case LESS: return i1 < i2;
    -    case LESS_EQL: return i1 <= i2;
    -    case REGEXP: throw Error("Regular expressions are not supported for integer values");
    -    default: throw Error("Unknown operator");
    -}
    -

    This function is used by the constraint expression evaluator.

    -
    Parameters
    - - - -
    bCompare the value of this instance with b.
    opAn integer index indicating which relational operator is implied. Choose one from the following: EQUAL, NOT_EQUAL, GREATER, GREATER_EQL, LESS, LESS_EQL, and REGEXP.
    -
    -
    -
    Returns
    The boolean value of the comparison.
    -
    See also
    BaseType::d4_ops(BaseType *, int)
    - -

    Reimplemented in libdap::D4Enum, libdap::Str, libdap::Int32, libdap::Float32, libdap::Byte, libdap::Float64, libdap::UInt32, libdap::D4Opaque, libdap::Int16, libdap::UInt16, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 1256 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_dap4 (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the DAP4 XML representation for this variable. This method is used to build the DAP4 DMR response object.

    -
    Parameters
    - - - -
    xmlAn XMLWriter that will do the serialization
    constrainedTrue if the response should show the variables subject to the current constraint expression.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Group.

    - -

    Definition at line 768 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_decl() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_decl (ostream & out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 626 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_decl() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_decl (FILE * out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 617 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_val() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Sequence::print_val (ostream & out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtual
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output ostream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 1197 of file Sequence.cc.

    - -
    -
    - -

    ◆ print_val() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Sequence::print_val (FILE * out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtual
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output stream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 1192 of file Sequence.cc.

    - -
    -
    - -

    ◆ print_xml() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_xml (ostream & out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -
    Deprecated:
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 695 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_xml() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_xml (FILE * out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -
    Deprecated:
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 684 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_xml_writer()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_xml_writer (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 718 of file Constructor.cc.

    - -
    -
    - -

    ◆ ptr_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::Sequence::ptr_duplicate ()
    -
    -virtual
    -
    -

    Clone this instance. Allocate a new instance and copy *this into it. This method must perform a deep copy.

    @note This method should \e not copy data values, but must copy all
    -other fields in the object.
    -
    Returns
    A newly allocated copy of this.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 192 of file Sequence.cc.

    - -
    -
    - -

    ◆ read()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::Constructor::read ()
    -
    -virtualinherited
    -
    - -

    simple implementation of read that iterates through vars and calls read on them

    -
    Returns
    returns false to signify all has been read
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 476 of file Constructor.cc.

    - -
    -
    - -

    ◆ read_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read_p ()
    -
    -virtualinherited
    -
    - -

    Has this variable been read?

    -

    Returns true if the value(s) for this variable have been read from the data source, otherwise returns false. This method is used to determine when values need to be read using the read() method. When read_p() returns true, this library assumes that buf2val() (and other methods such as get_vec()) can be used to access the value(s) of a variable.

    -
    Returns
    True if the variable's value(s) have been read, false otherwise.
    - -

    Definition at line 480 of file BaseType.cc.

    - -
    -
    - -

    ◆ read_row()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::Sequence::read_row (int row,
    DDSdds,
    ConstraintEvaluatoreval,
    bool ce_eval = true 
    )
    -
    -virtual
    -
    -

    Read row number row of the Sequence. The values of the row are obtained by calling the read() method of the sequence. The current row just read is stored in the Sequence instance along with its row number. If a selection expression has been supplied, rows are counted only if they satisfy that expression.

    -

    Note that we can only advance in a Sequence. It is not possible to back up and read a row numbered lower than the current row. If you need that you will need to replace the serialize() method with one of your own.

    -

    Used on the server side.

    -
    Note
    The first row is row number zero. A Sequence with 100 rows will have row numbers 0 to 99.
    -
    Todo:
    This code ignores the main reason for nesting the sequences, that if the outer Sequence's current instance fails the CE, there's no need to look at the values of the inner Sequence. But in the code that calls this method (serialize() and intern_data()) the CE is not evaluated until the inner-most Sequence (i.e., the leaf Sequence) is read. That means that each instance of the inner Sequence is read and the CE evaluated for each of those reads. To fix this, and the overall problem of complexity here, we need to re-think Sequences and how they behave. 11/13/2007 jhrg
    -
    Returns
    A boolean value, with TRUE indicating that read_row should be called again because there's more data to be read. FALSE indicates the end of the Sequence.
    -
    Parameters
    - - - - - -
    rowThe row number to read.
    ddsA reference to the DDS for this dataset.
    evalUse this as the constraint expression evaluator.
    ce_evalIf True, evaluate any CE, otherwise do not.
    -
    -
    - -

    Definition at line 499 of file Sequence.cc.

    - -
    -
    - -

    ◆ reset_row_number() [1/2]

    - -
    -
    - - - - - - - -
    void libdap::Sequence::reset_row_number ()
    -
    - -

    Rest the row number counter.

    -

    When reading a nested sequence, use this method to reset the internal row number counter. This is necessary so that the second, ... instances of the inner/nested sequence will start off reading row zero.

    - -

    Definition at line 427 of file Sequence.cc.

    - -
    -
    - -

    ◆ reset_row_number() [2/2]

    - -
    -
    - - - - - - - - -
    void libdap::Sequence::reset_row_number (bool recur)
    -
    - -

    A recursive version of reset_row_number()

    -
    Parameters
    - - -
    recurIf true, reset the row number of child sequences as well
    -
    -
    - -

    Definition at line 437 of file Sequence.cc.

    - -
    -
    - -

    ◆ row_value()

    - -
    -
    - - - - - -
    - - - - - - - - -
    BaseTypeRow * libdap::Sequence::row_value (size_t row)
    -
    -virtual
    -
    - -

    Get a whole row from the sequence.

    -
    Parameters
    - - -
    rowGet row number row from the sequence.
    -
    -
    -
    Returns
    A BaseTypeRow object (vector<BaseType *>). Null if there's no such row number as row.
    - -

    Definition at line 325 of file Sequence.cc.

    - -
    -
    - -

    ◆ send_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::send_p ()
    -
    -virtualinherited
    -
    - -

    Should this variable be sent?

    -

    Returns the state of the send_p property. If true, this variable should be sent to the client, if false, it should not. If no constraint expression (CE) has been evaluated, this property is true for all variables in a data source (i.e., for all the variables listed in a DDS). If a CE has been evaluated, this property is true only for those variables listed in the projection part of the CE.

    -
    Returns
    True if the variable should be sent to the client, false otherwise.
    - -

    Definition at line 554 of file BaseType.cc.

    - -
    -
    - -

    ◆ serialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::serialize (D4StreamMarshallerm,
    DMRdmr,
    bool filter = false 
    )
    -
    -virtualinherited
    -
    - -

    Serialize a Constructor.

    -
    Todo:
    See notebook for 8/21/14
    -
    Parameters
    - - - - - -
    m
    dmrUnused
    evalUnused
    filterUnused
    -
    -
    -
    Exceptions
    - - -
    Erroris thrown if the value needs to be read and that operation fails.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Sequence, and libdap::D4Group.

    - -

    Definition at line 578 of file Constructor.cc.

    - -
    -
    - -

    ◆ serialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::Sequence::serialize (ConstraintEvaluatoreval,
    DDSdds,
    Marshallerm,
    bool ce_eval = true 
    )
    -
    -virtual
    -
    -

    Serialize a Sequence.

    -

    Leaf Sequences must be marked as such (see DDS::tag_nested_sequence()), as must the top most Sequence.

    -

    How the code works. Methods called for various functions are named in brackets:

      -
    1. -

      Sending a one-level sequence:

      -Dataset {
      -    Sequence {
      -        Int x;
      -        Int y;
      -    } flat;
      -} case_1;
      -

      Serialize case_1 by reading successive rows and sending all of those that satisfy the CE. Before each row, send a start of instance (SOI) marker. Once all rows have been sent, send an End of Sequence (EOS) marker.[serialize_leaf].

      -

      -
    2. -
    3. -

      Sending a nested sequence:

      -Dataset {
      -    Sequence {
      -        Int t;
      -        Sequence {
      -            Int z;
      -        } inner;
      -    } outer;
      -} case_2;
      -

      Serialize case_2 by reading the first row of outer and storing the values. Do not evaluate the CE [serialize_parent_part_one]. Call serialize() for inner and read each row for it, evaluating the CE for each row that is read. After the first row of inner is read and satisfies the CE, write out the SOI marker and values for outer [serialize_parent_part_two], then write the SOI and values for the first row of inner. Continue to read and send rows of inner until the last row has been read. Send EOS for inner [serialize_leaf]. Now read the next row of outer and repeat. Once outer is completely read, send its EOS marker.

      -
    4. -
    -

    Notes:

      -
    1. -

      For a nested Sequence, the child sequence must follow all other types in the parent sequence (like the example). There may be only one nested Sequence per level.

      -

      -
    2. -
    3. -

      CE evaluation happens only in a leaf sequence.

      -

      -
    4. -
    5. -When no data satisfies a CE, the empty Sequence is signaled by a single EOS marker, regardless of the level of nesting of Sequences. That is, the EOS marker is sent for only the outer Sequence in the case of a completely empty response.
    6. -
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 607 of file Sequence.cc.

    - -
    -
    - -

    ◆ set_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_attr_table (const AttrTableat)
    -
    -virtualinherited
    -
    -

    Set this variable's attribute table.

    Parameters
    - - -
    atSource of the attributes.
    -
    -
    - -

    Definition at line 590 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::set_in_selection (bool state)
    -
    -virtualinherited
    -
    - -

    Set the in_selection property.

    -

    Set the in_selection property for this variable and all of its children.

    -
    Parameters
    - - -
    stateSet the property value to state.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 834 of file Constructor.cc.

    - -
    -
    - -

    ◆ set_leaf_sequence()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Sequence::set_leaf_sequence (int lvl = 1)
    -
    -virtual
    -
    - -

    Mark the Sequence which holds the leaf elements.

    -

    In a nested Sequence, the Sequence which holds the leaf elements is special because it during the serialization of this Sequence's data that constraint Expressions must be evaluated. If CEs are evaluated at the upper levels, then valid data may not be sent because it was effectively hidden from the serialization and evaluation code (see the documentation for the serialize_leaf() method).

    -

    The notion of the leaf Sequence needs to be modified to mean the lowest level of a Sequence where data are to be sent. Suppose there's a two level Sequence, but that only fields from the top level are to be sent. Then that top level is also the leaf Sequence and should be marked as such. If the lower level is marked as a leaf Sequence, then no values will ever be sent since the send_p property will always be false for each field and it's the call to serialize_leaf() that actually triggers transmission of values (because it's not until the code makes it into serialize_leaf() that it knows there are values to be sent.

    -
    Note
    This method must not be called before the CE is parsed.
    -
    Parameters
    - - -
    lvlThe current level of the Sequence. a lvl of 1 indicates the topmost Sequence. The default value is 1.
    -
    -
    -
    See also
    Sequence::serialize_leaf()
    - -

    Definition at line 1236 of file Sequence.cc.

    - -
    -
    - -

    ◆ set_length()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::BaseType::set_length (int )
    -
    -inlinevirtualinherited
    -
    - -

    Set the number of elements for this variable.

    -
    Todo:
    change param type to int64_t
    -
    Parameters
    - - -
    lThe number of elements
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, and libdap::Vector.

    - -

    Definition at line 214 of file BaseType.h.

    - -
    -
    - -

    ◆ set_name()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_name (const string & n)
    -
    -virtualinherited
    -
    - -

    Sets the name of the class instance.

    - -

    Reimplemented in libdap::Vector.

    - -

    Definition at line 344 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_parent()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_parent (BaseTypeparent)
    -
    -virtualinherited
    -
    -

    Set the parent property for this variable.

    -
    Note
    Added ability to set parent to null. 10/19/12 jhrg
    -
    Parameters
    - - -
    parentPointer to the Constructor of Vector parent variable or null if the variable has no parent (if it is at the top-level of a DAP2/3 DDS).
    -
    -
    -
    Exceptions
    - - -
    InternalErrthrown if called with anything other than a Constructor, Vector or Null.
    -
    -
    - -

    Definition at line 733 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_read_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::set_read_p (bool state)
    -
    -virtualinherited
    -
    - -

    Sets the value of the read_p property.

    -

    Sets the value of the read_p property. This indicates that the value(s) of this variable has/have been read. An implementation of the read() method should use this to set the read_p property to true.

    -
    Note
    If the is_synthesized property is true, this method will not alter the is_read property. If you need that behavior, specialize the method in your subclasses if the various types.
    -
    -For most of the types the default implementation of this method is fine. However, if you're building a server which must handle data represented using nested sequences, then you may need to provide a specialization of Sequence::set_read_p(). By default Sequence::set_read_p() recursively sets the read_p property for all child variables to state. For servers where one Sequence reads an outer set of values and another reads an inner set, this is cumbersome. In such a case, it is easier to specialize Sequence::set_read_p() so that it does not recursively set the read_p property for the inner Sequence. Be sure to see the documentation for the read() method!
    -
    Todo:
    Look at making synthesized variables easier to implement and at making them more integrated into the overall CE evaluation process. Maybe the code that computes the synthesized var's value should be in the that variable's read() method? This might provide a way to get rid of the awkward 'projection functions' by replacing them with real children of BaseType. It would also provide a way to clean up the way the synthesized_p prop intrudes on the read_p prop.
    -
    See also
    BaseType::read()
    -
    Parameters
    - - -
    stateSet the read_p property to this state.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Group.

    - -

    Definition at line 218 of file Constructor.cc.

    - -
    -
    - -

    ◆ set_row_number_constraint()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Sequence::set_row_number_constraint (int start,
    int stop,
    int stride = 1 
    )
    -
    -virtual
    -
    -

    Set the start, stop and stride for a row-number type constraint. This should be used only when the sequence is constrained using the bracket notation (which supplies start, stride and stop information). If omitted, the stride defaults to 1.

    -
    Parameters
    - - - - -
    startThe starting row number. The first row is row zero.
    stopThe ending row number. The 20th row is row 19.
    strideThe stride. A stride of two skips every other row.
    -
    -
    - -

    Definition at line 1106 of file Sequence.cc.

    - -
    -
    - -

    ◆ set_send_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::set_send_p (bool state)
    -
    -virtualinherited
    -
    -

    Sets the value of the send_p flag. This function is meant to be called from within the constraint evaluator of other code which determines that this variable should be returned to the client. Data are ready to be sent when both the d_is_send and d_is_read flags are set to TRUE.

    -
    Parameters
    - - -
    stateThe logical state to set the send_p flag.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Group.

    - -

    Definition at line 208 of file Constructor.cc.

    - -
    -
    - -

    ◆ set_synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_synthesized_p (bool state)
    -
    -virtualinherited
    -
    -

    Set the synthesized flag. Before setting this flag be sure to set the read_p() state. Once this flag is set you cannot alter the state of the read_p flag!

    -
    See also
    synthesized_p()
    - -

    Definition at line 463 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_type()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_type (const Typet)
    -
    -virtualinherited
    -
    - -

    Sets the type of the class instance.

    - -

    Definition at line 372 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_unsent_data()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Sequence::set_unsent_data (bool usd)
    -
    -inline
    -
    - -

    Set the unsent data property.

    - -

    Definition at line 277 of file Sequence.h.

    - -
    -
    - -

    ◆ set_value()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Sequence::set_value (SequenceValuesvalues)
    -
    -virtual
    -
    -

    Set value of this Sequence. This does not perform a deep copy, so data should be allocated on the heap and freed only when the Sequence dtor is called.

    See also
    SequenceValues
    -
    -BaseTypeRow
    -
    Parameters
    - - -
    valuesSet the value of this Sequence.
    -
    -
    - -

    Definition at line 337 of file Sequence.cc.

    - -
    -
    - -

    ◆ synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::synthesized_p ()
    -
    -virtualinherited
    -
    -

    Returns true if the variable is a synthesized variable. A synthesized variable is one that is added to the dataset by the server (usually with a `projection function'.

    - -

    Definition at line 452 of file BaseType.cc.

    - -
    -
    - -

    ◆ toString()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::Sequence::toString ()
    -
    -virtual
    -
    -

    Write out the object's internal fields in a string. To be used for debugging when regular inspection w/ddd or gdb isn't enough.

    -
    Returns
    A string which shows the object's internal stuff.
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 277 of file Sequence.cc.

    - -
    -
    - -

    ◆ transfer_attributes()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::transfer_attributes (AttrTableat_container)
    -
    -virtualinherited
    -
    -

    Transfer attributes from a DAS object into this variable. Because of the rough history of the DAS object and the way that various server code built the DAS, this is necessarily a heuristic process. The intent is that this method will be overridden by handlers that need to look for certain patterns in the DAS (e.g., hdf4's odd variable_dim_n; where n = 0, 1, 2, ...) attribute containers.

    -

    There should be a one-to-one mapping between variables and attribute containers. However, in some cases one variable has attributes spread across several top level containers and in some cases one container is used by several variables

    -
    Note
    This method is technically unnecessary because a server (or client) can easily add attributes directly using the DDS::get_attr_table or BaseType::get_attr_table methods and then poke values in using any of the methods AttrTable provides. This method exists to ease the transition to DDS objects which contain attribute information for the existing servers (Since they all make DAS objects separately from the DDS). They could be modified to use the same AttrTable methods but operate on the AttrTable instances in a DDS/BaseType instead of those in a DAS.
    -
    Parameters
    - - -
    at_containerTransfer attributes from this container.
    -
    -
    -
    Returns
    void
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 844 of file Constructor.cc.

    - -
    -
    - -

    ◆ transform_to_dap2()

    - -
    -
    - - - - - -
    - - - - - - - - -
    std::vector< BaseType * > * libdap::BaseType::transform_to_dap2 (AttrTableparent_attr_table)
    -
    -virtualinherited
    -
    - -

    DAP4 to DAP2 transform.

    -

    For the current BaseType, return a DAP2 'copy' of the variable.

    -
    Note
    For most DAP4 types, in this implementation of DAP2 the corresponding DAP4 type is the same. These types have a different representations in DAP2 and DAP4: Sequences (which are D4Sequences in the DAP4 implementation),
      -
    • Grids (which are semantically subsumed by coverages in DAP4)
    • -
    • Arrays (which use shared dimensions in DAP4)
    • -
    -
    -

    Additionally DAP4 adds the following types:

      -
    • UInt8, Int8, and Char which map to Byte in DAP2.
    • -
    • Int64, Unit64 which have no natural representation in DAP2.
    • -
    • Opaque Possible Byte stuff[] plus metadata?
    • -
    • Enum's can be represented as Int32.
    • -
    • Groups, with the exception of the root group "disappear" into the names of their member variables. Specifically the Group name is add as a prefix followed by a "/" separator to the names of all of the Group's member groups variables.
    • -
    -
    Parameters
    - - -
    TheAttrTable pointer parent_attr_table is used by Groups, which disappear from the DAP2 representation. Their children are returned in the the BAseType vector their attributes are added to parent_attr_table;
    -
    -
    -
    Returns
    A pointer to a vector of BaseType pointers (right?). In most cases this vector will contain a single pointer but DAP4 types 'disappear' such as Group will return all of their member variables in the vector. DAP4 types with no representation in DAP2 (ex: UInt64) the will return a NULL pointer and so this must be tested!
    - -

    Reimplemented in libdap::Array, libdap::D4Enum, libdap::D4Group, libdap::D4Opaque, libdap::Byte, libdap::Structure, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 259 of file BaseType.cc.

    - -
    -
    - -

    ◆ transform_to_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Sequence::transform_to_dap4 (D4Grouproot,
    Constructorcontainer 
    )
    -
    -virtual
    -
    -

    Build a D4Sequence from a DAP2 Sequence.

    -

    Because DAP4 uses a different type for sequences, this code must be subclassed by anything other than trivial test code or client side-only uses of the library.

    -
    Note
    This version of transformto_dap4() builds a new type of object, so it must be subclassed.
    -
    Parameters
    - - - -
    rootUse this as the environment for D4Dimensions
    containerLoad the result into this container
    -
    -
    -
    Returns
    The new D4Sequence
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 212 of file Sequence.cc.

    - -
    -
    - -

    ◆ type()

    - -
    -
    - - - - - -
    - - - - - - - -
    Type libdap::BaseType::type () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance.

    - -

    Definition at line 365 of file BaseType.cc.

    - -
    -
    - -

    ◆ type_name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::type_name () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance as a string.

    - -

    Definition at line 379 of file BaseType.cc.

    - -
    -
    - -

    ◆ val2buf()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    virtual unsigned int libdap::Constructor::val2buf (void * val,
    bool reuse 
    )
    -
    -inlinevirtualinherited
    -
    - -

    Loads class data.

    -

    Store the value pointed to by val in the object's internal buffer. This function does not perform any checks, so users must be sure that the thing pointed to can actually be stored in the object's buffer.

    -

    Only simple objects (Int, Float, Byte, and so on) and arrays of these simple objects may be stored using this function. To put data into more complex constructor types, use the functions provided by that class.

    -
    Deprecated:
    Use set_value() in the leaf classes.
    -
    Parameters
    - - - -
    valA pointer to the data to be inserted into the class data buffer.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect. This is currently used only in the Vector class.
    -
    -
    -
    Returns
    The size (in bytes) of the information copied from val.
    -
    See also
    Grid
    -
    -Vector::val2buf
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 115 of file Constructor.h.

    - -
    -
    - -

    ◆ value()

    - -
    -
    - - - - - -
    - - - - - - - -
    SequenceValues libdap::Sequence::value ()
    -
    -virtual
    -
    -

    Get the value for this sequence.

    Returns
    The SequenceValues object for this Sequence.
    - -

    Definition at line 344 of file Sequence.cc.

    - -
    -
    - -

    ◆ value_ref()

    - -
    -
    - - - - - -
    - - - - - - - -
    SequenceValues & libdap::Sequence::value_ref ()
    -
    -virtual
    -
    -

    Get the value for this sequence.

    Returns
    The SequenceValues object for this Sequence.
    - -

    Definition at line 352 of file Sequence.cc.

    - -
    -
    - -

    ◆ var() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::Constructor::var (const string & name,
    bool exact_match = true,
    btp_stack * s = 0 
    )
    -
    -virtualinherited
    -
    - -

    btp_stack no longer needed; use back pointers (BaseType::get_parent())

    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 267 of file Constructor.cc.

    - -
    -
    - -

    ◆ var() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::Constructor::var (const string & n,
    btp_stack & s 
    )
    -
    -virtualinherited
    -
    -
    Deprecated:
    -
    Deprecated:
    See comment in BaseType
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 279 of file Constructor.cc.

    - -
    -
    - -

    ◆ var_begin()

    - -
    -
    - - - - - -
    - - - - - - - -
    Constructor::Vars_iter libdap::Constructor::var_begin ()
    -
    -inherited
    -
    -

    Returns an iterator referencing the first structure element.

    - -

    Definition at line 356 of file Constructor.cc.

    - -
    -
    - -

    ◆ var_end()

    - -
    -
    - - - - - -
    - - - - - - - -
    Constructor::Vars_iter libdap::Constructor::var_end ()
    -
    -inherited
    -
    -

    Returns an iterator referencing the end of the list of structure elements. Does not reference the last structure element.

    - -

    Definition at line 364 of file Constructor.cc.

    - -
    -
    - -

    ◆ var_rbegin()

    - -
    -
    - - - - - -
    - - - - - - - -
    Constructor::Vars_riter libdap::Constructor::var_rbegin ()
    -
    -inherited
    -
    -

    Return a reverse iterator that references the last element.

    - -

    Definition at line 371 of file Constructor.cc.

    - -
    -
    - -

    ◆ var_rend()

    - -
    -
    - - - - - -
    - - - - - - - -
    Constructor::Vars_riter libdap::Constructor::var_rend ()
    -
    -inherited
    -
    -

    Return a reverse iterator that references a point 'before' the first element.

    - -

    Definition at line 379 of file Constructor.cc.

    - -
    -
    - -

    ◆ var_value() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::Sequence::var_value (size_t row,
    const string & name 
    )
    -
    -virtual
    -
    - -

    Get the BaseType pointer to the named variable of a given row.

    -
    Parameters
    - - - -
    rowRead from row in the sequence.
    nameReturn name from row.
    -
    -
    -
    Returns
    A BaseType which holds the variable and its value.
    -
    See also
    number_of_rows
    - -

    Definition at line 363 of file Sequence.cc.

    - -
    -
    - -

    ◆ var_value() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::Sequence::var_value (size_t row,
    size_t i 
    )
    -
    -virtual
    -
    - -

    Get the BaseType pointer to the $i^{th}$ variable of row.

    -
    Parameters
    - - - -
    rowRead from row in the sequence.
    iReturn the $i^{th}$ variable from row.
    -
    -
    -
    Returns
    A BaseType which holds the variable and its value.
    -
    See also
    number_of_rows
    - -

    Definition at line 385 of file Sequence.cc.

    - -
    -
    - -

    ◆ width()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::Constructor::width (bool constrained = false) const
    -
    -virtualinherited
    -
    -

    This version of width simply returns the same thing as width() for simple types and Arrays. For Structure it returns the total size if constrained is false, or the size of the elements in the current projection if true.

    -
    Parameters
    - - -
    constrainedIf true, return the size after applying a constraint.
    -
    -
    -
    Returns
    The number of bytes used by the variable.
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 249 of file Constructor.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1Sequence.js b/html/classlibdap_1_1Sequence.js deleted file mode 100644 index 12abc555d..000000000 --- a/html/classlibdap_1_1Sequence.js +++ /dev/null @@ -1,127 +0,0 @@ -var classlibdap_1_1Sequence = -[ - [ "btp_stack", "classlibdap_1_1Sequence.html#ae9c6e71855b90a0e552713011c9ab81f", null ], - [ "sequence_values_stack_t", "classlibdap_1_1Sequence.html#afa1dc14e98a94efc8944cdb08214a166", null ], - [ "Vars_citer", "classlibdap_1_1Sequence.html#a5a585c58a099833c4ca26561963e0f83", null ], - [ "Vars_iter", "classlibdap_1_1Sequence.html#a2b73df890f61ebb628359c8fd12839b0", null ], - [ "Vars_riter", "classlibdap_1_1Sequence.html#a6122400e3f40d457751fb0372a650d03", null ], - [ "Sequence", "classlibdap_1_1Sequence.html#a92b97c9d8c1431fd7e619186a557d875", null ], - [ "Sequence", "classlibdap_1_1Sequence.html#ab5a772197dc7c62037cca19b27bacba6", null ], - [ "Sequence", "classlibdap_1_1Sequence.html#a26c7416d7314d45aee035d09ef3db49c", null ], - [ "~Sequence", "classlibdap_1_1Sequence.html#a8a90ca537aeb073da447e4bd55c072a4", null ], - [ "add_var", "classlibdap_1_1Sequence.html#a2585c69c45b9ebec9c63993248eb5b4b", null ], - [ "add_var_nocopy", "classlibdap_1_1Sequence.html#abdb52463a46e1b10040f245d4ed7642b", null ], - [ "attributes", "classlibdap_1_1Sequence.html#a97452f06d2188eb838399a709246b5e9", null ], - [ "buf2val", "classlibdap_1_1Sequence.html#ac4dc7e8099322b5b403a7d0ae9079006", null ], - [ "check_semantics", "classlibdap_1_1Sequence.html#afe010638fd2ca9aab00dd1c21a9e4825", null ], - [ "clear_local_data", "classlibdap_1_1Sequence.html#ab881dcea1786d36ad3a4ef579ace5805", null ], - [ "compute_checksum", "classlibdap_1_1Sequence.html#a287ab9a4deb81a8ced6d8432be647925", null ], - [ "d4_ops", "classlibdap_1_1Sequence.html#a512a356f31ed6c4c1a368da0b054408a", null ], - [ "dataset", "classlibdap_1_1Sequence.html#a47521ce321a17e6ce217870cb6a1a7aa", null ], - [ "del_var", "classlibdap_1_1Sequence.html#af38d3785c4a7cd0063cbb9fc5943333c", null ], - [ "del_var", "classlibdap_1_1Sequence.html#a69291878fc48217902fb0dcf1e2e1aff", null ], - [ "deserialize", "classlibdap_1_1Sequence.html#a6f4253236d69c3c0ef64343136b5039b", null ], - [ "deserialize", "classlibdap_1_1Sequence.html#adf58298f58caf27d467ad41b7ecbb6ec", null ], - [ "dump", "classlibdap_1_1Sequence.html#a50ff267e44d2df91722116e2acbfd1cb", null ], - [ "element_count", "classlibdap_1_1Sequence.html#a1c2eecff00fa7e3af175c711d00fb86e", null ], - [ "FQN", "classlibdap_1_1Sequence.html#afa6c06dab830b4e089641b44fea8293c", null ], - [ "get_attr_table", "classlibdap_1_1Sequence.html#a1fcd9537c67e3bf88964b2656ff5bac1", null ], - [ "get_ending_row_number", "classlibdap_1_1Sequence.html#ae1489f3bc8bb269e51831add438aa392", null ], - [ "get_parent", "classlibdap_1_1Sequence.html#a3459cdaa239c33ce111ef360d8dc3017", null ], - [ "get_row_number", "classlibdap_1_1Sequence.html#a421b3392840b8f0524158b23b0436df6", null ], - [ "get_row_stride", "classlibdap_1_1Sequence.html#ae1461dd491795a2d6b0bd3112aca8550", null ], - [ "get_starting_row_number", "classlibdap_1_1Sequence.html#ad15a2b640e4bee850577ca9500ad31c3", null ], - [ "get_unsent_data", "classlibdap_1_1Sequence.html#ac95128bf22d4556564e27cc3d6f51222", null ], - [ "get_var_index", "classlibdap_1_1Sequence.html#ac2b4b28ed9d6f435129aa599ab809799", null ], - [ "get_vars_iter", "classlibdap_1_1Sequence.html#a1e6d8224e04d75e3d2a21263957cd42f", null ], - [ "increment_row_number", "classlibdap_1_1Sequence.html#a06cc031608183a676e3740a51ac206b8", null ], - [ "intern_data", "classlibdap_1_1Sequence.html#a822a036364c56df5288a55670f51197e", null ], - [ "intern_data", "classlibdap_1_1Sequence.html#aaa428c1a32fea386549399dd19b756ac", null ], - [ "intern_data_for_leaf", "classlibdap_1_1Sequence.html#a25f2ba65cd6ff7553988739a5c1a08d4", null ], - [ "intern_data_parent_part_one", "classlibdap_1_1Sequence.html#a6593f7531b7b2a307f5fe4a7bb276225", null ], - [ "intern_data_parent_part_two", "classlibdap_1_1Sequence.html#abf937ace290ad55a995d1baf5a05232b", null ], - [ "intern_data_private", "classlibdap_1_1Sequence.html#ac193f301017ed380059b94907f9e0be4", null ], - [ "is_constructor_type", "classlibdap_1_1Sequence.html#a8b8490e0047c6da52945699a132008ea", null ], - [ "is_dap2_only_type", "classlibdap_1_1Sequence.html#ab8d629ae2ec9c85add8f181bc05f2269", null ], - [ "is_dap4", "classlibdap_1_1Sequence.html#a7f6835cb5e5589ab5dad3fb4813d3bea", null ], - [ "is_in_selection", "classlibdap_1_1Sequence.html#ae302ab2ec26e9fc5b575bf5d3d09aa5c", null ], - [ "is_leaf_sequence", "classlibdap_1_1Sequence.html#a3cb03f3ccb14372106e91461b468c1bd", null ], - [ "is_linear", "classlibdap_1_1Sequence.html#aae52bdb038d59fbce4f8f6128dfc4559", null ], - [ "is_simple_type", "classlibdap_1_1Sequence.html#aae57e5b270b3a015d40c8db10b9b5549", null ], - [ "is_vector_type", "classlibdap_1_1Sequence.html#a7107c76dbcab71015141142383b6d022", null ], - [ "length", "classlibdap_1_1Sequence.html#ad8e2d23c39b11886e10d0a5d0ae37e5f", null ], - [ "m_duplicate", "classlibdap_1_1Sequence.html#a88b282d06686fc88a74c91e289ef31d7", null ], - [ "m_duplicate", "classlibdap_1_1Sequence.html#a0c55b826c8c5dfe7a454dc670e859a41", null ], - [ "m_duplicate", "classlibdap_1_1Sequence.html#a0246b92d1263183285dbea344791c27a", null ], - [ "m_exact_match", "classlibdap_1_1Sequence.html#aa5cd6124619d35e81bcfd426f1e569d3", null ], - [ "m_leaf_match", "classlibdap_1_1Sequence.html#a8fe3863a609488f4d5125abea96b82ed", null ], - [ "name", "classlibdap_1_1Sequence.html#a24c5d67823b3cff7f4245a993072a142", null ], - [ "number_of_rows", "classlibdap_1_1Sequence.html#afc84c914de74839b7214d682f008c1ee", null ], - [ "operator=", "classlibdap_1_1Sequence.html#a8edd3c82bd969c6f286607731a597aeb", null ], - [ "ops", "classlibdap_1_1Sequence.html#a8a0000be2a244e3e07abda3020af8800", null ], - [ "print_dap4", "classlibdap_1_1Sequence.html#a0f130e129b06773a9f3c94e3b492bb5c", null ], - [ "print_decl", "classlibdap_1_1Sequence.html#ab7fb094be8da2a9f80f6d3b85e452934", null ], - [ "print_decl", "classlibdap_1_1Sequence.html#a6c2c4d7cbe1d6239c037272ec865f80b", null ], - [ "print_one_row", "classlibdap_1_1Sequence.html#a6bbdd92e1d38e00948592b0764d859ab", null ], - [ "print_one_row", "classlibdap_1_1Sequence.html#acdd568667443c96e6b7b25d3db0f6129", null ], - [ "print_val", "classlibdap_1_1Sequence.html#a675995a38339e5139b80a4faa1a46824", null ], - [ "print_val", "classlibdap_1_1Sequence.html#ade8d2f9a5c73eafeb180fb3782a0a199", null ], - [ "print_val_by_rows", "classlibdap_1_1Sequence.html#ab9e02fc99e9739e565b4e59377acf56d", null ], - [ "print_val_by_rows", "classlibdap_1_1Sequence.html#ae924f28d4c0253a3ab8d7912358ccac2", null ], - [ "print_xml", "classlibdap_1_1Sequence.html#a32de0413045173aa8803f540a6cea39b", null ], - [ "print_xml", "classlibdap_1_1Sequence.html#a7bbe6beabd94f576140e132e7a1017ff", null ], - [ "print_xml_writer", "classlibdap_1_1Sequence.html#ab775a5e7e63757ac961b43800a95635f", null ], - [ "ptr_duplicate", "classlibdap_1_1Sequence.html#aacf58704fe079b65130800589e59fa9e", null ], - [ "read", "classlibdap_1_1Sequence.html#ad0af40e2565972fa44985d173370c264", null ], - [ "read_p", "classlibdap_1_1Sequence.html#a38ff819a432217c55db2e9071928d20c", null ], - [ "read_row", "classlibdap_1_1Sequence.html#a62d79555aa03b0a862314ccfdad090f8", null ], - [ "reset_row_number", "classlibdap_1_1Sequence.html#ad555ad129354768a042f4e94f36f299a", null ], - [ "reset_row_number", "classlibdap_1_1Sequence.html#a64ff6191d320ded37975e20e4a45a742", null ], - [ "row_value", "classlibdap_1_1Sequence.html#af034547151c98b59dee6d2d6cb1a954b", null ], - [ "send_p", "classlibdap_1_1Sequence.html#a980c0013817836aa77ef74aeec7fb192", null ], - [ "serialize", "classlibdap_1_1Sequence.html#ab868fe97d5075b702bd084c2e9540913", null ], - [ "serialize", "classlibdap_1_1Sequence.html#ad89a496720935e04e472a75ce7804065", null ], - [ "serialize_leaf", "classlibdap_1_1Sequence.html#a1e28f9c0d173929383e1ffc2002e66ce", null ], - [ "serialize_parent_part_one", "classlibdap_1_1Sequence.html#a30fcc5756f357e1c14f3fafac66e0a30", null ], - [ "serialize_parent_part_two", "classlibdap_1_1Sequence.html#a7e73cc4aecdca6ca600a5ce81fe1780c", null ], - [ "set_attr_table", "classlibdap_1_1Sequence.html#a572a1d76a75981abac83a4241e90c0fa", null ], - [ "set_attributes", "classlibdap_1_1Sequence.html#ad4dda4cf43dca838d3de183b8e01cd09", null ], - [ "set_attributes_nocopy", "classlibdap_1_1Sequence.html#afd0e5f87d19020f560d5c1ff8dd4d6a3", null ], - [ "set_in_selection", "classlibdap_1_1Sequence.html#ac30becb1ffe7d2cd4cbcd24fc216c9a3", null ], - [ "set_is_dap4", "classlibdap_1_1Sequence.html#abca9ddaa9a1ada8447cbe7193e8e288a", null ], - [ "set_leaf_p", "classlibdap_1_1Sequence.html#ab6618d3ef634d6c8ace79ca030c96378", null ], - [ "set_leaf_sequence", "classlibdap_1_1Sequence.html#a630ae5ad80cc4ddbd1c07e7cae0eec6d", null ], - [ "set_length", "classlibdap_1_1Sequence.html#a4fe343c1eeb6fb1d61ab030433651d90", null ], - [ "set_name", "classlibdap_1_1Sequence.html#a86504564f45a3e6748c6f1cc0ff4e9fa", null ], - [ "set_parent", "classlibdap_1_1Sequence.html#a5b6a39f6ce6594fa74f3fc899ac9a966", null ], - [ "set_read_p", "classlibdap_1_1Sequence.html#af52e60d8589eed1a18a14e9c6a57db65", null ], - [ "set_row_number_constraint", "classlibdap_1_1Sequence.html#af182686c5766d73e5d896eecaadb96bc", null ], - [ "set_send_p", "classlibdap_1_1Sequence.html#aafbcf9bef6719fe60ac707e02956e09d", null ], - [ "set_synthesized_p", "classlibdap_1_1Sequence.html#a595cb4059cff24f801a1b6da79bd2f9e", null ], - [ "set_type", "classlibdap_1_1Sequence.html#af74f8d1ef57c9fcca46f620f75d175a3", null ], - [ "set_unsent_data", "classlibdap_1_1Sequence.html#ad7820138d2f1c9c8ff7dfa632dff60c2", null ], - [ "set_value", "classlibdap_1_1Sequence.html#aa581124c5883b3c020a843ddc5566192", null ], - [ "synthesized_p", "classlibdap_1_1Sequence.html#ae64e677da27249473cdba0b60cdbb90a", null ], - [ "toString", "classlibdap_1_1Sequence.html#a24016ba1d3b9b755699959abf0219ff1", null ], - [ "transfer_attributes", "classlibdap_1_1Sequence.html#a799d2bd8ef9505b1d493d8cd73b72746", null ], - [ "transform_to_dap2", "classlibdap_1_1Sequence.html#affec8a11e9cc035d4b1e8fb9a87b2072", null ], - [ "transform_to_dap4", "classlibdap_1_1Sequence.html#a11072c45623476f3fd0745cdd519b376", null ], - [ "type", "classlibdap_1_1Sequence.html#af8e803b20a7a7dc5f2ef351d7fac4a56", null ], - [ "type_name", "classlibdap_1_1Sequence.html#a18a42c8ec35cb5b15cd651a4152f8a2c", null ], - [ "val2buf", "classlibdap_1_1Sequence.html#ac742b1bf93889e541128b1d123821ee6", null ], - [ "value", "classlibdap_1_1Sequence.html#a1efebfab9247785a056d085b1f3aab41", null ], - [ "value_ref", "classlibdap_1_1Sequence.html#a954e428e0d3532246c0411e2b3bd30e8", null ], - [ "var", "classlibdap_1_1Sequence.html#a36a7412da7b5257d7666add726fea1a6", null ], - [ "var", "classlibdap_1_1Sequence.html#a68f1779dc328f890062722d90fad084a", null ], - [ "var_begin", "classlibdap_1_1Sequence.html#adeafe3d6c82d07b456a598a7b446c2c6", null ], - [ "var_end", "classlibdap_1_1Sequence.html#a936b38c7c35ffb4fe17c5b8e85bdaaa2", null ], - [ "var_rbegin", "classlibdap_1_1Sequence.html#aa025cf546ca35250454653c1ec684d91", null ], - [ "var_rend", "classlibdap_1_1Sequence.html#aede7cf5889e101db1ea8f22c3a84a5d3", null ], - [ "var_value", "classlibdap_1_1Sequence.html#ab17e4f1aedda0b734442001b5c81f269", null ], - [ "var_value", "classlibdap_1_1Sequence.html#a75cd422251a9c49294e25f2971164638", null ], - [ "width", "classlibdap_1_1Sequence.html#a0b1e3ae7195f95c42ca98f42826a1ff5", null ], - [ "SequenceTest", "classlibdap_1_1Sequence.html#a81667f7d1cfd26791cb795fc88839fd2", null ], - [ "d_in_selection", "classlibdap_1_1Sequence.html#a949a89714965d7afdcd1e3edc8b7f0d4", null ], - [ "d_is_synthesized", "classlibdap_1_1Sequence.html#a629e97e8eb7d285b54c9af8c1ec9a29a", null ], - [ "d_vars", "classlibdap_1_1Sequence.html#a75b2aa694dc76294d6aa5f7456e49aa2", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1Sequence__inherit__graph.map b/html/classlibdap_1_1Sequence__inherit__graph.map deleted file mode 100644 index 31192a0f8..000000000 --- a/html/classlibdap_1_1Sequence__inherit__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/html/classlibdap_1_1Sequence__inherit__graph.md5 b/html/classlibdap_1_1Sequence__inherit__graph.md5 deleted file mode 100644 index d7090baa5..000000000 --- a/html/classlibdap_1_1Sequence__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -6bd263f82012a39025b9b6094d085007 \ No newline at end of file diff --git a/html/classlibdap_1_1Sequence__inherit__graph.png b/html/classlibdap_1_1Sequence__inherit__graph.png deleted file mode 100644 index cde34abdc12f42160e1bf735aac29ff649cd0cca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102202 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%0DP}u@$>au(vAJ4P13kx&dGz83>(UUywZXg|{6Qtm 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

    QEAg~KUro!#u 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 - - - - - - -libdap: Member List - - - - - - - - - - - -

    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::ServerFunction Member List
    -
    -
    - -

    This is the complete list of members for libdap::ServerFunction, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    canOperateOn(DDS &)libdap::ServerFunctioninlinevirtual
    canOperateOn(DMR &)libdap::ServerFunctioninlinevirtual
    get_bool_func() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
    get_btp_func() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
    get_d4_function() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
    get_proj_func() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
    getDescriptionString() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
    getDocUrl() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
    getName() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
    getRole() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
    getTypeString() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
    getUsageString() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
    getVersion() (defined in libdap::ServerFunction)libdap::ServerFunctioninline
    ServerFunction() (defined in libdap::ServerFunction)libdap::ServerFunction
    ServerFunction(std::string name, std::string version, std::string description, std::string usage, std::string doc_url, std::string role, bool_func f) (defined in libdap::ServerFunction)libdap::ServerFunction
    ServerFunction(std::string name, std::string version, std::string description, std::string usage, std::string doc_url, std::string role, btp_func f) (defined in libdap::ServerFunction)libdap::ServerFunction
    ServerFunction(std::string name, std::string version, std::string description, std::string usage, std::string doc_url, std::string role, proj_func f) (defined in libdap::ServerFunction)libdap::ServerFunction
    ServerFunction(std::string name, std::string version, std::string description, std::string usage, std::string doc_url, std::string role, D4Function f) (defined in libdap::ServerFunction)libdap::ServerFunction
    setDescriptionString(const std::string &desc) (defined in libdap::ServerFunction)libdap::ServerFunctioninline
    setDocUrl(const std::string &url) (defined in libdap::ServerFunction)libdap::ServerFunctioninline
    setFunction(bool_func bf)libdap::ServerFunctioninline
    setFunction(btp_func btp) (defined in libdap::ServerFunction)libdap::ServerFunctioninline
    setFunction(proj_func pf) (defined in libdap::ServerFunction)libdap::ServerFunctioninline
    setFunction(D4Function pf) (defined in libdap::ServerFunction)libdap::ServerFunctioninline
    setName(const std::string &n) (defined in libdap::ServerFunction)libdap::ServerFunctioninline
    setRole(const std::string &r) (defined in libdap::ServerFunction)libdap::ServerFunctioninline
    setUsageString(const std::string &u) (defined in libdap::ServerFunction)libdap::ServerFunctioninline
    setVersion(const std::string &ver) (defined in libdap::ServerFunction)libdap::ServerFunctioninline
    ~ServerFunction() (defined in libdap::ServerFunction)libdap::ServerFunctioninlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1ServerFunction.html b/html/classlibdap_1_1ServerFunction.html deleted file mode 100644 index 00576cd14..000000000 --- a/html/classlibdap_1_1ServerFunction.html +++ /dev/null @@ -1,290 +0,0 @@ - - - - - - - -libdap: libdap::ServerFunction Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::ServerFunction Class Reference
    -
    -
    -
    -Inheritance diagram for libdap::ServerFunction:
    -
    -
    Inheritance graph
    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual bool canOperateOn (DDS &)
     
    virtual bool canOperateOn (DMR &)
     
    -bool_func get_bool_func ()
     
    -btp_func get_btp_func ()
     
    -D4Function get_d4_function ()
     
    -proj_func get_proj_func ()
     
    -std::string getDescriptionString ()
     
    -std::string getDocUrl ()
     
    -std::string getName ()
     
    -std::string getRole ()
     
    -std::string getTypeString ()
     
    -std::string getUsageString ()
     
    -std::string getVersion ()
     
    ServerFunction (std::string name, std::string version, std::string description, std::string usage, std::string doc_url, std::string role, bool_func f)
     
    ServerFunction (std::string name, std::string version, std::string description, std::string usage, std::string doc_url, std::string role, btp_func f)
     
    ServerFunction (std::string name, std::string version, std::string description, std::string usage, std::string doc_url, std::string role, proj_func f)
     
    ServerFunction (std::string name, std::string version, std::string description, std::string usage, std::string doc_url, std::string role, D4Function f)
     
    -void setDescriptionString (const std::string &desc)
     
    -void setDocUrl (const std::string &url)
     
    void setFunction (bool_func bf)
     
    -void setFunction (btp_func btp)
     
    -void setFunction (proj_func pf)
     
    -void setFunction (D4Function pf)
     
    -void setName (const std::string &n)
     
    -void setRole (const std::string &r)
     
    -void setUsageString (const std::string &u)
     
    -void setVersion (const std::string &ver)
     
    -

    Detailed Description

    -
    -

    Definition at line 42 of file ServerFunction.h.

    -

    Member Function Documentation

    - -

    ◆ canOperateOn() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual bool libdap::ServerFunction::canOperateOn (DDS)
    -
    -inlinevirtual
    -
    -

    If you are writing a function that can only operate on a particular kind of data, or one that relies on the presence of particular metadata, then you might override this method in order to stop the server from advertising the function in conjunction with datasets to which it cannot be applied.

    -
    Parameters
    - - -
    ddsA DDS object for the dataset about which we will ask the question: Can this function operate on all or some portion of the contents of this dataset? CAUTION: Any implementation of this should be careful not to read data (or read as little as possible) from the passed DDS. Reading data in this method may have negative effect on overall performance. Examining metadata and dataset structure should be the basis for determining the applicability of a function to the dataset.
    -
    -
    -
    Returns
    true If this function operate on all or some portion of the contents of this dataset, false otherwise.
    - -

    Reimplemented in functions::GeoGridFunction, and functions::GridFunction.

    - -

    Definition at line 103 of file ServerFunction.h.

    - -
    -
    - -

    ◆ canOperateOn() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual bool libdap::ServerFunction::canOperateOn (DMR)
    -
    -inlinevirtual
    -
    -
    See also
    canOperateOn(DDS &)
    -
    Parameters
    - - -
    TheDataset's DMR.
    -
    -
    -
    Returns
    True if the function can work with the dataset, false otherwise.
    - -

    Definition at line 110 of file ServerFunction.h.

    - -
    -
    - -

    ◆ setFunction()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::ServerFunction::setFunction (bool_func bf)
    -
    -inline
    -
    -

    Set the C function pointer for this function object.

    Note
    This does not alter any of the other function pointers, so the same name can be used for all four different kinds of functions without conflict.
    -
    Parameters
    - - -
    bf
    -
    -
    - -

    Definition at line 120 of file ServerFunction.h.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1ServerFunction.js b/html/classlibdap_1_1ServerFunction.js deleted file mode 100644 index 19d1fbe05..000000000 --- a/html/classlibdap_1_1ServerFunction.js +++ /dev/null @@ -1,32 +0,0 @@ -var classlibdap_1_1ServerFunction = -[ - [ "ServerFunction", "classlibdap_1_1ServerFunction.html#ab2fadaf7b3255b7a9c3b8f94f8c0027d", null ], - [ "ServerFunction", "classlibdap_1_1ServerFunction.html#ad5aa045d31ac3fe404f4086849252a63", null ], - [ "ServerFunction", "classlibdap_1_1ServerFunction.html#af4a88a23720fd6abc979de7e1ce6ade2", null ], - [ "ServerFunction", "classlibdap_1_1ServerFunction.html#a1ceea4d364cf160b13cf95164af42a66", null ], - [ "ServerFunction", "classlibdap_1_1ServerFunction.html#aea519edb589756d8a94f3d299426dce1", null ], - [ "~ServerFunction", "classlibdap_1_1ServerFunction.html#a9cc4dda466240d5a6547e0ed95e1fbd6", null ], - [ "canOperateOn", "classlibdap_1_1ServerFunction.html#a37deabffd71441809f9e7839bed90414", null ], - [ "canOperateOn", "classlibdap_1_1ServerFunction.html#a8a3921a3d3a0ef39e1ee6bdd6011ccaf", null ], - [ "get_bool_func", "classlibdap_1_1ServerFunction.html#a5bdae20325085b8ddd916aeee11ba430", null ], - [ "get_btp_func", "classlibdap_1_1ServerFunction.html#a70f7e4e77dfc01329905fec7bdd0cb11", null ], - [ "get_d4_function", "classlibdap_1_1ServerFunction.html#a9241fa333c68968452774496f2be5a1d", null ], - [ "get_proj_func", "classlibdap_1_1ServerFunction.html#a7fac40c961c981efc88f4af915fca9cc", null ], - [ "getDescriptionString", "classlibdap_1_1ServerFunction.html#ace2f37824655a26ea2829f8dc45c86e0", null ], - [ "getDocUrl", "classlibdap_1_1ServerFunction.html#a83e00f6c062a1b1c74596d7855b6b5d5", null ], - [ "getName", "classlibdap_1_1ServerFunction.html#ace9a7b770f7393a2dbaf82105f292935", null ], - [ "getRole", "classlibdap_1_1ServerFunction.html#ac1e65b16ed6d92d7d84bbdb712b1fc3e", null ], - [ "getTypeString", "classlibdap_1_1ServerFunction.html#a1af2b7f618f59a597218a3669bd3b391", null ], - [ "getUsageString", "classlibdap_1_1ServerFunction.html#aeed53f72098111d0d45d3600bd1a9ae9", null ], - [ "getVersion", "classlibdap_1_1ServerFunction.html#ad8456f2fadd48af3d95bcc047feef647", null ], - [ "setDescriptionString", "classlibdap_1_1ServerFunction.html#abe5e41829ca9f51b598589ee2ac42bae", null ], - [ "setDocUrl", "classlibdap_1_1ServerFunction.html#a6fda8e417484c1bd614995d5b2fb5e4e", null ], - [ "setFunction", "classlibdap_1_1ServerFunction.html#a3235a206a2933b96360c00d5b021a1e5", null ], - [ "setFunction", "classlibdap_1_1ServerFunction.html#a86998e0c972070c7199cf8e25778234c", null ], - [ "setFunction", "classlibdap_1_1ServerFunction.html#a133c0bb3a95dcd7f1930a302afe376e8", null ], - [ "setFunction", "classlibdap_1_1ServerFunction.html#a3d2fd4489c8513bbd5642d7f0961ada7", null ], - [ "setName", "classlibdap_1_1ServerFunction.html#a497a6ca1cb5a83ae13b2a97b31694cc0", null ], - [ "setRole", "classlibdap_1_1ServerFunction.html#a18f6129a02f468a0fafdb8bf57792ebc", null ], - [ "setUsageString", "classlibdap_1_1ServerFunction.html#a157a6d045575300466eb0271ed887123", null ], - [ "setVersion", "classlibdap_1_1ServerFunction.html#a2da5e645eb715667335f839b4fa3fd42", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1ServerFunction__inherit__graph.map b/html/classlibdap_1_1ServerFunction__inherit__graph.map deleted file mode 100644 index c08058f27..000000000 --- a/html/classlibdap_1_1ServerFunction__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1ServerFunction__inherit__graph.md5 b/html/classlibdap_1_1ServerFunction__inherit__graph.md5 deleted file mode 100644 index e494c6807..000000000 --- a/html/classlibdap_1_1ServerFunction__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -ac915abaa11f539e8577fef8efb169b2 \ No newline at end of file diff --git a/html/classlibdap_1_1ServerFunction__inherit__graph.png b/html/classlibdap_1_1ServerFunction__inherit__graph.png deleted file mode 100644 index 1dd447a72145fe72218b3d3ec4bd4d70e1742adf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30053 zcmb?@WmHt%8!sTjAPv&pAl=<1jUWwD(jeUpL#Kjt2ndLRlG5GXDUCGJop;asU+aFp zAMOViYhavn&OZA*&##_|QdgBne?j~L4h{}o;kAqg92~qC_~!sYg8e4kIUf9gch!)W zg8Ml_x(f#<0jD4%`PK{mARD<3Pj(_4Sw@zF0Z~ShgVHi~=N03t)^BO9aIP}Xt9H!Z zaZ+t%bx&(yckU5$n#F%(d=;H~xQE}(2=rr&2 z67QS$?;(T;;Xza;|Ia@Xc@b19<882&@PcKv%5xQKoV0&_mo|Z)z8?Ml!#zs7PA@8D zF#0nM!reiY+Ej&kFX>U`PPjw>*7fy9Lcv;R#5Mz`5}hL?EohV^IWBW7!|o?hS>s_t zoB?F8*%mu3@bN~aE!AY7pS7J!?;{$#bQ=~2;%QJ2%C$(4wZeZVs~!#hH+#2s1s4(Q z+!K)zmD{%AWt2L=JJEtQWZLNUlq$5Mb&G0O0)%hZW7zY>{BLC(n@;4;FJ_J9|2Ve# zpAT`5%2Zj6#`CTCos}w{O=+sho{b1QR__*NTH>{~d*xYE+KfV|vI8ROTReoKb{#F(;$H_T1|Nvpou!W1n~po)R9U)urrJyv z$+CP@qJ}PtoDJa)^RM_Rq!t(lKJeVi}xp$X&$KGsjJ5*Q^v7`>Tl^gQ}z z+!`nxnr`zknwDZ*HIZ>-yC>}H)iur^&FZ*) zQ>rJ|9)@C&p@*&%wfVBI-g0o0$QgI(Ryn&Gk6W3JS!4HLX|l@&56V09vpp92jeOU_ z2=bNK>bp=pQ6uc8z4Fs}cD+Z)T1b~~)!7Bcl+a-S8X;YU~J>{I8bAfBb6MJ2m4-=QNk=YR)Sc z0vp>%hzwM1uc zVsAX)Du&N>?jgd?^c)d?y0>2MiW<4E-iQ~LLnd_!>Rg{QPl%f_aBSY`XUL7!*0aFV zvCIve5YM=fL?(MFdfG=*^K6-^IBWfq?V#ywWPB}xg4}(7hV^#k>5;%6Y}S!`w-Lc@ z0aw)B;HyL`X~PF1WkMMaHL}3_lS9K_@0#=P4jb92hrxA@pid<+sKvK!RgH?dUYBFX zd$hkt{7DgToyWYlGhR@T&TS><`>!VThq1=ZKSOWo#L`d6Rz{^$=rV9?QGDA`$hl;d z5IV#$JRL)9|J&VS>=69+;6x%$GicR{IiI8wR4$&BsK$2sRRh@31;`YBV>Y#rH;`eX zygKj;`2?}sZ@2=|5g6_ng0tg>;~@sW?fXruJ6%P4|djK-q|{S1|+FvHV({SqRk@vvF8MaSTzoR_qk{3J zzKCBfx{k|{IQ*SJEEYbj>#Qk@F%icL2IVT+x~JnUg6TqmJZ7$FbTL39EXECSIUpesx@f3W)&9g>X75{^X|bk;&(fwX`fd zHrkF%aWG+F=Fy4HA1fC}yvg>4oyVKrVLT1H0aV-{%;NOlS%1&vd$fd*v{^=wd3-zL zYnPBRlBUnLhs35D2Y6o~JT&wjQp^I2 zAlR`O(k9gwL628GkeH%xTT)7oq$e55(XogiJ@o)1dao1`W ziOkdELpG%a27+m%_X`KYyMWhenId#IkMrQuaU71{eY^F&xytx0PGHv66y6%&k3=ec z`r~t5icE4Y{1?q))tXeIFH}fWj6(@^bN5wbv4#kjny0W*v8GSoJ)A)I~VXXEjiJn99o`hegCUlU?17#VZ{)mfiTe8e_SnOhE zATY4!)WJaf%}}iYB_j6E8e7Hw%0kfn-WgQCM#ipQ!>%T1?!oH$iMH4a|48!(qp&vYd`!uhC_{fx`x|hqrDFjq^H<>elpq? zN)&U-EfMC(*p0hKTc4i@% z_x51K_QVRp-|@(#Ma{Q|A~z1pTSv_WI5zCk^S{PIo<#Z~P6@@m^wA!YfHa$Sh6@HK zEZr5RzH{+#oap6KZBdq?p2K>pd|gSOgYp_;z!f?SdiVCh41`~Mm;)tK@rzlJY31A~ zNg@V9I$Z>Tv0p`IwS`kBTg#shjn0BrW`gvtD9V17Ay%88bw>8e!eTk9$|oSo?NA>I z@4p{MlDl}fXmppLV^`4hT>ul}bkV!u`eay=$^$-4_f|a($bC_;(E0Vsw)UIt&14wC zJ6$Z#cI#i(osf^$KAr~y5V3sgBG8VC*)L}Tu2Pa}WC4%`ZsHj+gW16Z4 zVcu{vN9%FRKuwDSbl6rCCsDk zVFo6ZA)Y3OV0ec&j8$kqz7eX+T(&2an-UA!6Z_HdOO#k8NE|C+ZCG@VpfX_VTUx)6 zI734@Q~B=J>7`)GCtq<&PgX&U{DJW!!GcE%V;Ai#50Oa{RCt#b#dCxk5{_Gz#r>Te zKr032#8JC%*W?B~_&oA8}@# zVPGqtc7?HY zqQK)Gdm~JI;zR_1^UD+#2fVQ@tJ&s%FDcbvSQR%hCH6m*To?{6Ps0wIIpM#T-csN& zIYHI$|3j*byx?k6^<#9s|9jbo3l4LJ_?6Ba2CpSbz&W%`>30qM?_~}+OfCZ@E75<; zric#Cp>T#;oBV%>7YakX@HYMbL%g=IGF5|Lar)oOLXoi2|aW&P7Ko=<=S& z<6zEuZ>r=2-dGQbBdPnp1zw7N0=l?fa$gpo?QG9{_SSnY+dsb@rs`d{tpPep*aFb8 z^b8qU`^!P=)8ja6?II3Y!1bEmiXAq3up1~&xfo=P+8l^2kGK0fku>p z#i%rh%J)Y%H{t{};0F3$2l?`FYp66s z>*u``fdX;vEjL>+#xA`Iv)J*2ELF;GU?JrnTb7%Bn3BF7Tv9jNRw zkZp@pqu-bK)mNdIVsj|B1qosemmkab#y0c!xyc19A&MTMxd0XAY5S`B)Zr4Vihk!N4@e-!mOk9<7K zeUeEKIeiTcT5)WB$RFnW!{W0Z#gLyHaLZ&n{auU4>v+{V3{Tssw!A%D(hOi~?9D&U zy<|q@Dj7Uc@uHWy{3aqdf0M>v{V2uBcAHQb2ZdvMV#{)%-=GViwwGjXW0GwCd)y{% zLEm(Ky?fJ8eFV0LHP}KwX%-b+qv%qcE}BkyND2z#gd4}fw%$lCQ_B?_ zhaumIF53U_?6vPwVCJBJmCED|WJ6N1Qvz9E7zN3^RFbK9TSk%2nik)_FJI z{12Qxrj7IJZ}8v`%^!Bs0uouj1O9}frZbxkhN-*b!`}fY4&p=;7`}oAZ%ModR)4Mw4P{;F`R8 zcaXhxak}kK=6Ea>^a7Bse;tq8Koy7^V-%&D`n~9)}Rm3-TP=&ktUNrHYJv>(y59?+*oThshVTm&-7LzG~sM~t@LxGaGny8q5t zo~lxBOC0?X)93K`2XgqRhjfMhM2=yT$2PvhsD3Rq3jgzulQY=25Y=Twz=LxZYT*yg zAtSUMzeh=sEJ?IWP0V{^lVx@%ir(4%YW~gKN^#J^L->Vn{(aH{7g$ZnpxVs-B!)&U z9x-%f;k7S&qkmed5}6S!^ZW5CxDpbwv$QBUOoxac>nsLST&FQ4d2Oc{8UBv9RJd~I zMe)UQSS;~Ny~v9#BV`rCr4sS{d#EAk zbct@X!F6UB@c!-(vLm1w5^}P)t$vhAK8ocYiM(9$G-l|#2|Q}PTI||`sTSJ%<hG;*;{?viaZ<-b~P_o}yY%k7&`IM}gq965#mRcm?;bc9PZW4+GV z{H~+np-DrvDt7G*Bo6#3BaRMSbb>f>+L=h2IjrAUcKw{KJdVpEu_;`!^l?Gv?&zWN zi}VTVa?DoTFCEeHM3)(&EfX$BWlC#(@9a(j>BagJYVmojp@QzmTTC5jd;#-jd^S}$ zD4C*4uQ#r{&Jrjz4}r+D{O>)Tn)2%@g0pmX>H8cFkpNKB3pCY4Kj+UQiz|K$Rt{y) z>tWo?rxZzo{3E_h{t+Y{S>w2}ypnTDkq02>wq8aWx~ZxZmTw2fVVLlCM}t$A%0g3n z7lUFwKS{?-%UU=|16gyEKSyp`#=Q&9;r!I(Iu8bdWvC6h>55iI*J^fBG-&%;=+|w#c97@sC?tZw>7)Q-P=YI2HwIB zdkev*6jfD7xkgu3+;H$vR@~;4JBtejtldA;ohHRQgD3s4aN@;*9W^WAAV`uK zijh>hWj}QF@@|wL2H)bWi3+VodWPn8iQILVZAGy-a8*Plek2H{77!Gzj!SN zx*->v$8RKfS3bU48g5rU%LMs)7!h`{DG~WRnH85_RUzU|r&NRngE~lY$)nU6Rh+JT zDWi|?Z9emXr-B3^t#Y`IbG)QT7lH3lX>q_Vgmg;gI8WQCB_>|CgTc zEk}A3t6KF-_NYxpdiK`e#LI*8&5GmoY2~#tk6T8Jdd`6^hK(;wB;S@5*NuI1H?a$d79=oLr`Jio?t8>+Lwo zcjW6vuEV@FD{)2u z=ofo`-<&T2bVh2*kSpMvf2Z3GIyE7gQycuaL+z5b9kFEJ8o2=OiP7XUOp!5vY!WQ%|9 zVxN&+pE!F-anT7m+Wdtulj1x>{RWtd>yDOB;XzXt7ulOBGl0&FewoadMZG#XoYpa3 zLWkUHn+B>&YxcN%HRT-e4};~8Wrvu{!m0|;W= zbySpK$!$_4{-*8x`eY*;OIlcd2Zkb4(^kAT;>LkON+b$^!1&|c(Gk=M=!lg#hZ6ig z=R4LwUvTztLS!t8Q4@dQ$ zr&%vpDi}WkNNpsCfzHg3YOu83M#_kyvIH5*hC z1a!GJWghhK@+O?V>CC@h6_WD#92TauU0~>xB76%G2wm3!54Y3r7=RKTA=Eoh4z)x* zq+&nVo2%T|LWPPu;wR_nRaw3%R?W7pIw>Nuzq$EJ#BDjHz;@q&M=^Lg%Q;V3Ey|hR z0EF#^P83}FI-eW6dv+kAA13;+RgX!n(ZNmw#z#X}nOiem!4}541MUa)VJKEcz^5cT z2(A6>+z=Jd8$>OCh^F%E(xBainjg5Qpi8~;Vp=B-`N(C$COPIii9AcmF0j9twi)~@ zfxq90 z3*fU~Mo=L~7R>8^d%gqE=C?AsSq^3sPx<4#f4P3A{WbgZw4RZS6Tp!nSBOpwL31MA#+(LGT_ z;aWV+zE>VUEXHK8Ll|k znBSP`1~hQ_CC=$?j8Q}yjDD;>s=N!Daw5`7s%p=JsWSbV?==^9cUZR&X(aq1N~%1j zss?2E(F;GD&c6yb8#iIz#Vmr!l|x@I zY&i414PUCwap620o#v|{dKfk2aaxtIIsybVv%q~uuUNZIQyuF0eJM8p{YK9!`*Wr0 zAN#5}17lT0L{|YxqGf3Rb6k0xZU+4g=egJCxli{D0S%Xg@Pn&Z#o=k*8s4iS>yb2B z3MlZSuc(xjH(3@p(&n9aDS-gswvbP&R5`6}AQ*QG=%`y#aj9GT+fU4xTm}0M?8%ND(LA8s{&eWbzGGS+b$Wlt#rdB#J~Dt+SelB zhKzjevivTElhgr}%ck!4XF#CU?mHmnb>JT7d3DdkU8}{zlvja@E=!p^(sO(HZ@+pu zJf%bzqdP6N&79VfaM{PntY?pcM*2${Om?APu*f1vN{idIM_b$B#|h)ORTw)qY~WBL zsIJud98z^{`>T!5_gsM9Q}n7>XOUe=4Zd)e(n~jMcrAgil>oNWhb4B$Hv?y;=()(DI$AFG*JdDO2@5B+W^EW{GpCO?R;J5^JYUT0(&4`s71Dv4_WLe$7VvDX^>DXR)^G;4P(b z7sQ?dtXOZbdN4-6eg{;G1t$5S?s5$mgCo*O*7gwF$=H7lnG+nSH9%ea_|YOA?Uex6 zAJYgj!+_FBD-A*&$nuo5-iXMVa_wPuFjAHBj!)3A4oha&ztI0a4lp;CuS&GJE^d4& zh(?PvG$f@?$}{Sx3yo?FZj3$pzB9W87aQtmYM-dq_=q|h>2mlty0%!WeZei%h228@ z3A#^ef%)uO@h#uDY?KXO^OFX(Nt3Dq!hj)c@EYpuIa|V87%V=d7 zDO~8<+?WF-M-B1u(Emnxdg7HHVj5Z(IU24dNwauQEEWUQ(p;FNK-qeSwkVpIuo^N^91IxVsfPe+DlC;mX-ORtTvpDsCCplk&P*czbDQrbJysxc9RyVW(jG z_mG#UpghHdxutJuz8L8Vinj>&BOc3CcNz)vg^zUgvrJ&8*;Mo!g8tH|KtReA4Dmgf zs~}2he-dH#M8YILKvF;&q)8B&C`)W7z}O;0qCCnZPx#nn6N$PJ8&(Mkmq3I6(@*^D zD;g$hLsHFDR@~YZ(owwiB8za>4dJC1Y2I{ddC5i+SzZ=%MSeJ4*1N>JJ3R;K3^b83 z@bK-4yyt?vrJh%vnXuQITve(vQY?B~2=FN)(w)a*QFfVT6$jan_yzXi*WhMRwnf3w zOnB994l-=yNld%_IJ96hKxJFftW!waJzmT#EpplZfGU3;YQQw$&fzCQN*&LMRPq&O#G_0F2z zl6C&`dlJW{wU({whs!_wJWQVAVh(c-gFlxPJ@r!v+E_m7BiiGsu)f6a<433$AW<5) zJL#oJxc1R}J%qwhf7?fs04>%G*Hex1eKu2QbvOPoIjXQ8OGvsPc8ywh!K=lp5A3C)OE`?s{{+JIT-hWSMQ8a4&0_J_n#<5lzw{=vNzehm=H^XT_}b z_TUQp`jh_DRO4e=O9{F?wh?_=b3)|ta3_s-egLJs*kBk}NV>D1aDS~H=?%NGihxvS zDmtOq)BV|@e$hQge>o2F@Dgr-vzITG5dfGly_=irZTqZJ|2!c{nA1VnGxo*3Q`7ho z&ElE-g!0CtmOILkN* z#Qe(X^0#m2_n!|jJ^Li(fH6m|kBq$@ZKRbT)MOXY#34AF08++&*2j;Q4fkSq2i&zN zab7udX%?!3BE*-uFj+qx>-*_`w+mm7kgZ?+YIV#seW}n1v|M~U%QefXbhP)EztH?6 z1+a8$R?;^OO6+ybboPXgnl|W#Z$?;>YMRnZe=peDB*_*WEjKs*SyPnZ({Og&A!KC| zU#DIrQkUWaH;x!~{?dl%JkuxL35w?9Jc(>QBq&bRg4#LewMhlUUBL~ zCz+DUyFA40;H_X#mg+k34&Oi2(YK+aVBHkIsz9Kpomn*Ry-H4|m_61{|GN-$_dpV& z)(MI^EhwrCc^d88iqrGDG5D-|brZ52K7aTP?)Bh9qn>pJ?mgLGgq2|KT z1NUq#cF6bRdqLW%8ath<-1AP7h^zFCUoh1A2B@z0re*<#e^sc?tu`DviY>@d?na@Y zv2szpHJ!yyS*|Bs({SbkJfn7J-YVCwe*?%L&(6}=wz!F5sp=e>QySpFB) zo?Gx^Ipb{={lJ!Uwz6(9RF1BU!ApICRYat$Iq4dEj6wuB2FK@e@ zqc`pCSNyNy?xRWVk3qymbqZ*nO*F>F+h)pBr<;sv!I2v|qP`7BjT(J*+&sokNX5<@ zJ+eT{&z-y0*(eTCr7}DLQ7J zAC{ZEC7ap!y6OpwsD^mzlp=)%%$G!n{qIGVAW68h-l%QopI9pplL|o=slKSO@NISq zpzHPq)paL;e6uZEq#AH$$C=(?FmP7E$JCto9neITe?CLPDGnDP=yaF%vxrfn7#6~# z6Qotb;}=QjyJbCDLu;1Qa*)E$6xkLfA9U)m);a_^$-qjmJjSxqc4Ux!#uJOU?wAZc6a#V?6 z*S1Cq#+Whcq_2~Wr2+nZ1D5-OKj*lZ>pGmqZ-7>bl9O*i7K?rWl1DzP_L|LL2mbu`wYKjr(Ccw-N*#7ux_ zpZ=cBT1#S47F4 znM1EYex_chfXZN==1Y0@V%MZRS55-ZNSdJKG`*DX{0bbV9Xz!5b1>)0Yak4}GEE8V zJk65wzFES0?1Jt{mg}CfuPX|7U%BX3;6wy#=Q`>HdJ~h7_T?l~=XFB#0|5y<_xMYa z6SZ#UU4{4K2OJTQY2t)R3VFhxxUKhsvg5Jh+nr9> zB_1L~(($!x!2>E1ig|{OhLPwUHiRS@qX~g2V~F4Jk}WHm6cF@!!bAuR1bmDK6zmCI0tyh-)I{1xxV~I9WjKWW<(C^%@A$x{Vf^b{N_sCNB51Z?F6RG^OfoJsT%x2wD zj>LY>PHcY+qc>G1o^^dsbE=%kRl7}4tHz0_Iq(z4JBph-KH*D`zJ}uqmChnI+tLFX z^G1KY`PqwfNK7^h2k5b=XioJE#w?DXtk>&09T+QYqToX;k|5qg0)-M=c$F{p^KJ)# z_;~7g7Ls9oiZY7Mzo>5Y3}=wC(QOx}3^cTxA$oKD(iv0vJ*o)OPm{g;d%ngR!Pm|StE?dx4GlGT4dDbdU3?i-2?O0A>CmXfcVGbhKfzulAqs{iw{_3j!ip6n@`E9KNR%qDPQ)>~W*B4vGoNYXKwWC3e@CP0yKRnfk^yN2tLLS_9+ z&+{PoI4BJFyH0#nI3)RD@25x&rL(w5 zYCEXg+#s_)4%m3v;(2?qPf$UF|8%sPt=L!eH}JB%=(qHO3>PUFbUL{`y!K5q^RTn$EE6mo%*CZ&{? z!gL#E8oN!V(ZBsk*-XI}SprWXbGkh5`w}6N!!k@BUMZr>flm+P0C17K5v#VWc1hu= zj3<{=n%C`(cd}5IY=gO>Bco_y9+Z1dQ*Y#_mwRh<6i{;oOd>gYt}v2HAi7ZV+7CL1k1cIfuDm(XVF~ zFy~N#npo7Q`V6!(#9JtsKCXEGXkyagN@ma{gAJE7n|QfMX%65qV_?~4wjeX z3cP070wJho(-;VZ!O$Co$!-uFB;_QeI^d*RO)T}jI{a|;N{WCgl73heVu|!(f@)~Q zsM-hm#P`R3gU2(zf?Ikj6kWmk5aKrwo2qykGaIa;{3up#o*0T9*~IH)3=7j0D>{T(Pt7`JP&q#;;3SSFn{Ip$eIWMc2q&uZ$5N19I6` zgmn8+BPBSq;((pfGE*H&pWvw|!n=aY*7t{i{@@Ik_b;XG-8 zlL$AxDU8zEpvHEy+K(r2pv|)6Ep$s|UaD-RSN4b1mkoyy0W2}6vE}rA6EZPJ-n0(J zVuodWLd1@KBjvYfMe_kX-NhD9g%JSO70%K>XMMv2?id!;7s_e{C{FGYDhfJ@6mze` z$wzte-63)>H`-VtMD_$KPIa#r$k>4+Pc&m4Dk{zlR$}k2)dJ9@sPgCv6ntMi=ahQM zN-8BRhh^?@TEyV^s>6XZO9sulgmEb50ekHwC!f{a$2~wnjBT}CL=kb>% zlFu;9X0Y+Wh0VW2kVM*P!?VXO+qyfA8DtTR4fv7Z5DB-)hnTImAcG*kF*si{eu_Qj z2cf04znPoi9tY#IvB3~;b z=)A^JLgzG%m>rbi@m;w%O|0JFVU(S+qM7*B4~6nn^Om47+UD%J6=^>x@{lbKqF@J! zD^gb%?WGG;sH;|4PpjiQ5tQ)J1`C8E#{%jJ)}WNVU)!3oo*;v7g_VrHW>5^ommpKG zz*25A?EV^Lkr6gXt}pg`sp$36SI_CGJ-NCu-M_y3yAgF8%zcMId1`@m=Ex@Y?&lN4 zUD>cSS&|0%%E^=6QT1=9K@!91d)4+vtIO?wt@l_Q=q>jPrQhgAYO6TupG+WYowPK} zQsqk0)~9~!@vb26MmH1d>+lIhn_io<*9n~)g#?QAm_;GtRZdb(*u=4P-7k~s6-{w! zX@QlLR+_TL8i6N(_1kX(+I+?_vJrUz@(gjR;ty{8!TtVozx6DVqZrw3D!wC0s_JgKM+k7PW0loi&;rQxrXbBQ7ZkLH_)3HOBQF(5q zbel(Iic!+A)@sP%`)+Ui1uiKp(_q2SqmQRIBJ3jA)euOv#lb999y$;xo~yE*17k(N z0k@s}ia2_?@2Tr0P(NQ49)@&1-RUH|h7&-JDNAjTmAOiX+M9T-$0!LdV8M>I%vzcq5IJzC z5VHyzN=ZxZ=`4;6AGvStvd8`H1=M?#{JTqTaq#xh$7>P?Bj9T1{nsiv9Oums06Sk?+Osg#frL_}1pfdvV*OG9XJCeQj ziHRkGxUzi-y-$?mTQQg#miyZ_`O_9SK*39~7-etawndG8=ZH1tRi8M&Pc@_m{hCS{)@;_*3vL#u7N6zcl@cat1a1UKzh*{Bnb|N} zVm-x89TQ(#X_uQUNcx6x#C+N0dXmW4Y_Z5ya2rzJjjTs17?5t$9)J5TGetR0O5W(@ z_pyKVdccvGa(x}&28^yw#^WdTXS97EdOUD zTsOQ=blE1=vv2dL`vl)^v6-XSuT#huDmF+0v@I8y-6B|{oijL4M8MvsL1$!dWuB%t zcbH(#MvpjO-sR)Gh+A&DZTxhbYJlDG3RByk@?Jic@Z*f9k1oG5XWrz`F&=3VKK3;s ze%chrR~pfg5Ohsx`s#wMRX|=wAM$R1?VuF zE*|=HD0hCf$r2zC+ECoAMm_r6G!4zcQ;6|~J8~4w`AtTGP#6o#Iey4SNG=1PP*D*P zHIgXyaISgv@x}d?1elspDcgR1W)CZ&+QOTYPP-Pi=`L>1;+_I(hAF#7c-u%M@up`s7lEO#fSsiV37{; z-?Ivj^f)nw_d`{L>afF)a}hR1NrPj>y^d1Jtc~aUHJ^#T^{D*Bw_A>e8)2y6z4^(5t{3?4h4T%-%pdk(O4l%@mRzkkB&AsMOTw%D zombu|6C$2k$Dr^k*y)l!+3;1^agQMm0gz3zN#jIVq|^9j^;&a&I5D6jB?G`dc4N6s zn0xAX$fotKi<1jc5f7+Yg$rDC8f-wvXS;_vCUzt9!_k=Mibc{Gf?erR94D)}^!MR5 zbhCfK%phOj&{=Px%Lhneq%sL^VCJD00(>oenpWk_ zqER-KfiRU0)om z-AF~~*?I$iOAZJqme3ee!)F_hZGBkZUcy2Eic0u($_T)sFh#mRrslQ&2$?oLRZeOhmKMKF)y|```T!Z2oHryv7j|`^0uhHVJDcAiH z3)@?4v?3eZD84}4>t6|npDfQ*KoZ=R#|H^MQ4&W z+Si6o?a#;iKGG~Lc=Jh0&fU-d8<786-^2gzL>c9c#~}!rGjyQ6Fz<;yDF&7%qa9e= zRQEHymgBHv`Y0x7&A9@FM-LMrMO05aL1sF~!ZW-rpKd%I0bwEBY%JVd>oLFNP_lB0 z!260jxYxQD>LwA}o#mdGu}oHRyfaRz*LBD?G+pD%oNqV@%Vj2Uw})K6%6C2vk_ET= zdeqN$4dmh>#Qjs@V)+Y88YL%rkABj*C^VNvBpgYvdbtIFiUxQE+|m}@xR z49 zZGW1Hc1_vQS5Ie>&=x2!Vp@3w#(;vuTKO!0yBX`Y>l{R3K1lM!&$KL@p~ z^zg_z1WNIYjw9PQGy6lW%4aAq~=H>6;|q5i$8b68OQE5_ju zz%8`-t<<0V9Xw+B^Jg=wv-#X@Q}T7ssBHid5nJc>&vV))el`uFlK=SLns%&7(=>&_ z&M^cew6(!w{tZ0lGMScTg3EaG6UI!-wBA2VHeMEy(0kv^MdoI)Vr8Y2QmMa%*@Jk8 zr-NwdV73y|V{vR^1+eH38z0q>(aBm5OQSGTg>Ls1o|GFZeQQ7jTOoB@D78PG@C*@n z=7rRt5-2*%<9yRuoSy@OgKH_G)N`f>>j!=o^?yOZNYaX$-yEPXw2!QZcco83*T65< zfIZ6^27IFzW(uAo8PzsYcnl>jAgwpHUq8NAY&4+={lQp>Um zNyTF|&3N>=&Q0c@m9{b?^|dlfvjES8t;Fh4aRsrhoqK60+(^%ydUE_&<$P>4h$q)! zsu{aaYklbdx-v25LF3Y?)BQ0o;ASW3g(96Vd{s-(`*RAxkQSp^*X}JGJ)xaM7 zmts_j63u&D$8HU>tTCOKj>rN+N&~(itvZ%=Dh%+x4<6Tn2wFU1$7D}K~0TG>KIaR{?LGX?0x^gXW*m$IFV; zoEwewe)f;(sHLBd{8b)8Y?7aNWF`WQ?DJv+in|@?+GtpL=mEgb{7^!TTb}0Sg!3DC z-&0J2!m8u<(jAku`XXC-i9&8Ws~E%Sx{=XgKVWT8Yv#0Y-F~POhL?oV$*VA{`>124 zoGID_m4!fXoKjb*RLAPyt?1RFW@9jzxC(HwyNG%}(q)@hDS=00l2ocSb6xn?en>h& z{VI3GoI07T@Y*ecW4OHiMeY$5Fg<<7L3VVBOKC`2fJqo+PnVjzxUI~n^znac!&;i% zpq1W{ln}|8tOQA~1)LHM=h|vjc41PQ@rckq3x7JXr&ePBc)B3&+0H^BFU{E33}$00 z_g?~5=GCaby=H2wpq~npOCZ92ujH+^lv(g>Z^Ru(dQKB;#58!&#V8oHorvSs?9l|A zu@`}JR^5^9#j?~DPjO||&+AH$^g?br7WTxs?pwXNa`E7^9OFa^q=AUnM=d6h7+!az^Y;96dVT8G`P_a7e zKxWgNau-pg(HP8NZ(H{zQq|P7)f2LzjaBN=b?RTiG`&E+nvX27VR67z?2pkyel
    CJ9z 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 diff --git a/html/classlibdap_1_1ServerFunctionsList-members.html b/html/classlibdap_1_1ServerFunctionsList-members.html deleted file mode 100644 index a05a0a0f8..000000000 --- a/html/classlibdap_1_1ServerFunctionsList-members.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - - - - diff --git a/html/classlibdap_1_1ServerFunctionsList.html b/html/classlibdap_1_1ServerFunctionsList.html deleted file mode 100644 index 94b250d51..000000000 --- a/html/classlibdap_1_1ServerFunctionsList.html +++ /dev/null @@ -1,439 +0,0 @@ - - - - - - - -libdap: libdap::ServerFunctionsList Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::ServerFunctionsList Class Reference
    -
    -
    - - - - - - -

    -Public Types

    -typedef std::multimap< std::string, ServerFunction * >::const_iterator SFLCIter
     
    -typedef std::multimap< std::string, ServerFunction * >::iterator SFLIter
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual void add_function (ServerFunction *func)
     Adds the passed ServerFunction pointer to the list of ServerFunctions. More...
     
    SFLIter begin ()
     Returns an iterator pointing to the first key pair in the ServerFunctionList. More...
     
    SFLIter end ()
     Returns an iterator pointing to the last key pair in the ServerFunctionList. More...
     
    virtual bool find_function (const std::string &name, bool_func *f) const
     Find a boolean function with a given name in the function list. More...
     
    virtual bool find_function (const std::string &name, btp_func *f) const
     Find a BaseType function with a given name in the function list. More...
     
    virtual bool find_function (const std::string &name, proj_func *f) const
     Find a projection function with a given name in the function list. More...
     
    virtual bool find_function (const std::string &name, D4Function *f) const
     
    ServerFunctiongetFunction (SFLIter it)
     Returns the ServerFunction pointed to by the passed iterator. More...
     
    -virtual void getFunctionNames (std::vector< std::string > *names)
     
    - - - -

    -Static Public Member Functions

    -static ServerFunctionsListTheList ()
     
    - - - -

    -Friends

    -class ServerFunctionsListUnitTest
     
    -

    Detailed Description

    -
    -

    Definition at line 46 of file ServerFunctionsList.h.

    -

    Member Function Documentation

    - -

    ◆ add_function()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::ServerFunctionsList::add_function (ServerFunctionfunc)
    -
    -virtual
    -
    - -

    Adds the passed ServerFunction pointer to the list of ServerFunctions.

    -

    Adds the passed ServerFunction pointer to the list of ServerFunctions using the value of ServerFunction.getName() as the key in the list.

    -
    Parameters
    - - -
    *funcA pointer to the ServerFunction object to add to the ServerFunctionList. The pointer is copied, not the object referenced; this class does not delete the pointer.
    -
    -
    - -

    Definition at line 103 of file ServerFunctionsList.cc.

    - -
    -
    - -

    ◆ begin()

    - -
    -
    - - - - - - - -
    ServerFunctionsList::SFLIter libdap::ServerFunctionsList::begin ()
    -
    - -

    Returns an iterator pointing to the first key pair in the ServerFunctionList.

    - -

    Definition at line 245 of file ServerFunctionsList.cc.

    - -
    -
    - -

    ◆ end()

    - -
    -
    - - - - - - - -
    ServerFunctionsList::SFLIter libdap::ServerFunctionsList::end ()
    -
    - -

    Returns an iterator pointing to the last key pair in the ServerFunctionList.

    - -

    Definition at line 251 of file ServerFunctionsList.cc.

    - -
    -
    - -

    ◆ find_function() [1/4]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::ServerFunctionsList::find_function (const std::string & name,
    bool_func * f 
    ) const
    -
    -virtual
    -
    - -

    Find a boolean function with a given name in the function list.

    -

    Returns the first boolean function in the list whose key value matches the passed string name. When a match is found the function returns true and sets returned value parameter *f to the boolean function held by the ServerFunction object extracted from the list.

    -

    Method: Looks through the list of ServerFunctions and compares each function's key value (which would be the value of SurverFunction.getName()) with the value of the string parameter 'name'. When they match then the returned value parameter is set to the value returned by ServerFunction.get_btp_func(). If the ServerFunction is not a instance of a boolean function then the return value will be 0 (null) and the search for matching function will continue. If the ServerFunction is a boolean function then the returned value will be non-zero and the search will return true (it found the thing) and the returned value parameter *f will have it's value set to the boolean function.

    -
    Parameters
    - - - -
    nameA string containing the name of the function to find.
    *fA returned value parameter through which a point to the desired function is returned.
    -
    -
    - -

    Definition at line 129 of file ServerFunctionsList.cc.

    - -
    -
    - -

    ◆ find_function() [2/4]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::ServerFunctionsList::find_function (const std::string & name,
    btp_func * f 
    ) const
    -
    -virtual
    -
    - -

    Find a BaseType function with a given name in the function list.

    -

    Returns the first BaseType function in the list whose key value matches the passed string name. When a match is found the function returns true and sets returned value parameter *f to the BaseType function held by the ServerFunction object extracted from the list.

    -

    Method: Looks through the list of ServerFunctions and compares each function's key value (which would be the value of SurverFunction.getName()) with the value of the string parameter 'name'. When they match then the returned value parameter is set to the value returned by ServerFunction.get_btp_func(). If the ServerFunction is not a instance of a BaseType function then the return value will be 0 (null) and the search for matching function will continue. If the ServerFunction is a BaseType function then the returned value will be non-zero and the search will return true (it found the thing) and the returned value parameter *f will have it's value set to the BaseType function.

    -
    Parameters
    - - - -
    nameA string containing the name of the function to find.
    *fA returned value parameter through which a point to the desired function is returned.
    -
    -
    - -

    Definition at line 166 of file ServerFunctionsList.cc.

    - -
    -
    - -

    ◆ find_function() [3/4]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::ServerFunctionsList::find_function (const std::string & name,
    proj_func * f 
    ) const
    -
    -virtual
    -
    - -

    Find a projection function with a given name in the function list.

    -

    Returns the first projection function in the list whose key value matches the passed string name. When a match is found the function returns true and sets returned value parameter *f to the projection function held by the ServerFunction object extracted from the list.

    -

    Method: Looks through the list of ServerFunctions and looks at each function's key value (which would be the value of SurverFunction.getName() for each function). When a function has the same key name as the value of the string parameter 'name', then the returned value parameter is set the value returned by ServerFunction.get_proj_func(). If the ServerFunction is not a projection function then the return value will be 0 (null) and the search for matching function will continue. If the ServerFunction is a projection then the returned value will be non-zero and the search will return true (it found the thing) and the returned value parameter *f will have it's value set to the projection function.

    -
    Parameters
    - - - -
    nameA string containing the name of the function to find.
    *fA returned value parameter through which a point to the desired function is returned.
    -
    -
    - -

    Definition at line 204 of file ServerFunctionsList.cc.

    - -
    -
    - -

    ◆ find_function() [4/4]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::ServerFunctionsList::find_function (const std::string & name,
    D4Function * f 
    ) const
    -
    -virtual
    -
    -

    Find a DAP4 function in the Server Functions List.

    -
    Parameters
    - - - -
    nameLook for this function name
    fValue-result parameter. NULL if the function is not found
    -
    -
    -
    Returns
    True if the function was found, otherwise false.
    - -

    Definition at line 228 of file ServerFunctionsList.cc.

    - -
    -
    - -

    ◆ getFunction()

    - -
    -
    - - - - - - - - -
    ServerFunction * libdap::ServerFunctionsList::getFunction (SFLIter it)
    -
    - -

    Returns the ServerFunction pointed to by the passed iterator.

    - -

    Definition at line 262 of file ServerFunctionsList.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1ServerFunctionsList.js b/html/classlibdap_1_1ServerFunctionsList.js deleted file mode 100644 index d670ce091..000000000 --- a/html/classlibdap_1_1ServerFunctionsList.js +++ /dev/null @@ -1,16 +0,0 @@ -var classlibdap_1_1ServerFunctionsList = -[ - [ "SFLCIter", "classlibdap_1_1ServerFunctionsList.html#ae198ea5d124f8a633e8b2ca091252b4b", null ], - [ "SFLIter", "classlibdap_1_1ServerFunctionsList.html#abc7986d5cd2e8fcf5f29003c29d30507", null ], - [ "ServerFunctionsList", "classlibdap_1_1ServerFunctionsList.html#a081ab62f464a2acc477c0838db8af919", null ], - [ "add_function", "classlibdap_1_1ServerFunctionsList.html#a6541bd8eebd85b0faada8ce3d2f9d08a", null ], - [ "begin", "classlibdap_1_1ServerFunctionsList.html#a6a76bd67fbdda8c038f0c2000f24eb6c", null ], - [ "end", "classlibdap_1_1ServerFunctionsList.html#a95627422406ad0ab08fee27d8c274d56", null ], - [ "find_function", "classlibdap_1_1ServerFunctionsList.html#a12a23d0582bf7b53b65c5d95ed4ce601", null ], - [ "find_function", "classlibdap_1_1ServerFunctionsList.html#a65101c8eb7d0dead6cc781287a52f2aa", null ], - [ "find_function", "classlibdap_1_1ServerFunctionsList.html#a63e5f6a54a21a0da686306f996414aa2", null ], - [ "find_function", "classlibdap_1_1ServerFunctionsList.html#a895bc1627d93588bd1f8f9eac5eb7b28", null ], - [ "getFunction", "classlibdap_1_1ServerFunctionsList.html#a9b5a854642a7707c70e84dc88c67d2f8", null ], - [ "getFunctionNames", "classlibdap_1_1ServerFunctionsList.html#a35d0792e474f55547d53e9bb959537e0", null ], - [ "ServerFunctionsListUnitTest", "classlibdap_1_1ServerFunctionsList.html#accf50e7be70739c721639671d23aa3a8", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1SignalHandler-members.html b/html/classlibdap_1_1SignalHandler-members.html deleted file mode 100644 index 8352310fe..000000000 --- a/html/classlibdap_1_1SignalHandler-members.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::SignalHandler Member List
    -
    -
    - -

    This is the complete list of members for libdap::SignalHandler, including all inherited members.

    - - - - - - - -
    HTTPCacheTest (defined in libdap::SignalHandler)libdap::SignalHandlerfriend
    instance()libdap::SignalHandlerstatic
    register_handler(int signum, EventHandler *eh, bool override=false)libdap::SignalHandler
    remove_handler(int signum)libdap::SignalHandler
    SignalHandlerTest (defined in libdap::SignalHandler)libdap::SignalHandlerfriend
    ~SignalHandler() (defined in libdap::SignalHandler)libdap::SignalHandlerinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1SignalHandler.html b/html/classlibdap_1_1SignalHandler.html deleted file mode 100644 index 38b0109a8..000000000 --- a/html/classlibdap_1_1SignalHandler.html +++ /dev/null @@ -1,222 +0,0 @@ - - - - - - - -libdap: libdap::SignalHandler Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::SignalHandler Class Reference
    -
    -
    - -

    #include <SignalHandler.h>

    - - - - - - -

    -Public Member Functions

    EventHandlerregister_handler (int signum, EventHandler *eh, bool override=false)
     
    EventHandlerremove_handler (int signum)
     
    - - - -

    -Static Public Member Functions

    static SignalHandlerinstance ()
     
    - - - - - -

    -Friends

    -class HTTPCacheTest
     
    -class SignalHandlerTest
     
    -

    Detailed Description

    -

    Singleton to handle signals. This class adapts the C-style function call interface to one suited for C++. This class records a signal's old action/handler when it installs new handler. When a signal is caught, the new handler (registered with this class) is run and then the old action/handler is performed. This ensures that when libdap++ is embedded in code which has a handler for a signal such as SIGINT which does something other than the default, that thing, whatever it may be, gets done.

    -

    This class treats signals it registers (using the EventHandler abstract class) differently than ones registered using the signal() or sigaction() system interfaces. If the register_handler() method is called and an instance of EventHandler is already bound to signum, then the old EventHandler is returned. However, if there's an existing handler that was set up with sigaction(), ..., it won't be returned. Instead it will either be run after the newly registered EventHandler or ignored, depending on register_handler()'s override parameter. This feature may be used only for POSIX.1 signals which cause process termination. They are: SIGHUP, SIGINT, SIGKILL, SIGPIPE, SIGALRM, SIGTERM, SIGUSR1, and SIGUSR2.

    -
    Note
    Based on "Applying Design Patterns to Simplify Signal Handling", Douglas C. Schmidt, 1998, http://www.cs.wustl.edu/~schmidt/signal-patterns.html.
    -
    See also
    EventHandler
    -
    Author
    James Gallagher jgall.nosp@m.aghe.nosp@m.r@ope.nosp@m.ndap.nosp@m..org
    - -

    Definition at line 66 of file SignalHandler.h.

    -

    Member Function Documentation

    - -

    ◆ instance()

    - -
    -
    - - - - - -
    - - - - - - - -
    SignalHandler * libdap::SignalHandler::instance ()
    -
    -static
    -
    -

    Get a pointer to the single instance of SignalHandler.

    - -

    Definition at line 131 of file SignalHandler.cc.

    - -
    -
    - -

    ◆ register_handler()

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    EventHandler * libdap::SignalHandler::register_handler (int signum,
    EventHandlereh,
    bool override = false 
    )
    -
    -

    Register an event handler. By default run any previously registered action/handler such as those installed using sigaction(). For signals such as SIGALRM (the alarm signal) this may not be what you want; see the override parameter. See also the class description.

    -
    Parameters
    - - - - -
    signumBind the event handler to this signal number. Limited to those signals that, according to POSIX.1, cause process termination.
    ehA pointer to the EventHandler for signum.
    overrideIf true, do not run the default handler/action. Instead run eh and then treat the signal as if the original action was SIG_IGN. Default is false.
    -
    -
    -
    Returns
    A pointer to the old EventHandler or null.
    - -

    Definition at line 151 of file SignalHandler.cc.

    - -
    -
    - -

    ◆ remove_handler()

    - -
    -
    - - - - - - - - -
    EventHandler * libdap::SignalHandler::remove_handler (int signum)
    -
    -

    Remove the event hander.

    Parameters
    - - -
    signumThe signal number of the handler to remove.
    -
    -
    -
    Returns
    The old event handler
    - -

    Definition at line 220 of file SignalHandler.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1SignalHandler.js b/html/classlibdap_1_1SignalHandler.js deleted file mode 100644 index 3811a813f..000000000 --- a/html/classlibdap_1_1SignalHandler.js +++ /dev/null @@ -1,8 +0,0 @@ -var classlibdap_1_1SignalHandler = -[ - [ "~SignalHandler", "classlibdap_1_1SignalHandler.html#a3aafd093a1a3e93f144cd9e0b048a60d", null ], - [ "register_handler", "classlibdap_1_1SignalHandler.html#a1188177d392bdc1db6cf4450132c6d9f", null ], - [ "remove_handler", "classlibdap_1_1SignalHandler.html#ac9a9ddb318ad6b372604a4c8d58481de", null ], - [ "HTTPCacheTest", "classlibdap_1_1SignalHandler.html#a76bd6ce419aad54c8c87e993f5bd11c9", null ], - [ "SignalHandlerTest", "classlibdap_1_1SignalHandler.html#a6856f863c401edb2bf3b0b147a5008f6", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1SignalHandlerRegisteredErr-members.html b/html/classlibdap_1_1SignalHandlerRegisteredErr-members.html deleted file mode 100644 index 86d8aed04..000000000 --- a/html/classlibdap_1_1SignalHandlerRegisteredErr-members.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::SignalHandlerRegisteredErr Member List
    -
    -
    - -

    This is the complete list of members for libdap::SignalHandlerRegisteredErr, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    _error_code (defined in libdap::Error)libdap::Errorprotected
    _error_message (defined in libdap::Error)libdap::Errorprotected
    d_file (defined in libdap::Error)libdap::Errorprotected
    d_line (defined in libdap::Error)libdap::Errorprotected
    Error(ErrorCode ec, std::string msg, std::string file="", int line=0)libdap::Error
    Error(std::string msg, std::string file="", int line=0)libdap::Error
    Error()libdap::Error
    Error(const Error &copy_from) (defined in libdap::Error)libdap::Error
    get_error_code() constlibdap::Error
    get_error_message() constlibdap::Error
    get_file() const (defined in libdap::Error)libdap::Errorinline
    get_line() const (defined in libdap::Error)libdap::Errorinline
    OK() constlibdap::Error
    operator=(const Error &rhs) (defined in libdap::Error)libdap::Error
    parse(FILE *fp)libdap::Error
    print(FILE *out) constlibdap::Error
    print(std::ostream &out) constlibdap::Error
    set_error_code(ErrorCode ec=undefined_error)libdap::Error
    set_error_message(std::string msg="")libdap::Error
    set_file(std::string f) (defined in libdap::Error)libdap::Errorinline
    set_line(int l) (defined in libdap::Error)libdap::Errorinline
    SignalHandlerRegisteredErr(const string &msg) (defined in libdap::SignalHandlerRegisteredErr)libdap::SignalHandlerRegisteredErrinline
    SignalHandlerRegisteredErr() (defined in libdap::SignalHandlerRegisteredErr)libdap::SignalHandlerRegisteredErrinline
    what() constlibdap::Errorinlinevirtual
    ~Error() (defined in libdap::Error)libdap::Errorvirtual
    -
    - - - - diff --git a/html/classlibdap_1_1SignalHandlerRegisteredErr.html b/html/classlibdap_1_1SignalHandlerRegisteredErr.html deleted file mode 100644 index 0beebbb1f..000000000 --- a/html/classlibdap_1_1SignalHandlerRegisteredErr.html +++ /dev/null @@ -1,454 +0,0 @@ - - - - - - - -libdap: libdap::SignalHandlerRegisteredErr Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::SignalHandlerRegisteredErr Class Reference
    -
    -
    - -

    #include <SignalHandlerRegisteredErr.h>

    -
    -Inheritance diagram for libdap::SignalHandlerRegisteredErr:
    -
    -
    Inheritance graph
    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    ErrorCode get_error_code () const
     
    std::string get_error_message () const
     
    -std::string get_file () const
     
    -int get_line () const
     
    bool OK () const
     Is the Error object valid? More...
     
    bool parse (FILE *fp)
     Parse an Error object. More...
     
    void print (FILE *out) const
     
    void print (std::ostream &out) const
     
    void set_error_code (ErrorCode ec=undefined_error)
     
    void set_error_message (std::string msg="")
     
    -void set_file (std::string f)
     
    -void set_line (int l)
     
    SignalHandlerRegisteredErr (const string &msg)
     
    virtual const char * what () const throw ()
     The pointer is valid only for the lifetime of the Error instance. jhrg 9/22/20. More...
     
    - - - - - - - - - -

    -Protected Attributes

    -ErrorCode _error_code
     
    -std::string _error_message
     
    -std::string d_file
     
    -int d_line
     
    -

    Detailed Description

    -

    SignalHandlerRegisteredErr is thrown by HTTPCache::instance() if a signal handler is already registered.

    -
    Author
    jhrg
    - -

    Definition at line 43 of file SignalHandlerRegisteredErr.h.

    -

    Member Function Documentation

    - -

    ◆ get_error_code()

    - -
    -
    - - - - - -
    - - - - - - - -
    ErrorCode libdap::Error::get_error_code () const
    -
    -inherited
    -
    -

    Get the ErrorCode for this instance.

    - -

    Definition at line 249 of file Error.cc.

    - -
    -
    - -

    ◆ get_error_message()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::Error::get_error_message () const
    -
    -inherited
    -
    -

    Return the current error message.

    - -

    Definition at line 278 of file Error.cc.

    - -
    -
    - -

    ◆ OK()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::Error::OK () const
    -
    -inherited
    -
    - -

    Is the Error object valid?

    -

    Use this function to determine whether an Error object is valid. To be a valid, an Error object must either be: 1) empty or contain a message and a code.

    -
    Returns
    TRUE if the object is valid, FALSE otherwise.
    - -

    Definition at line 135 of file Error.cc.

    - -
    -
    - -

    ◆ parse()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool libdap::Error::parse (FILE * fp)
    -
    -inherited
    -
    - -

    Parse an Error object.

    -

    Given an input stream (FILE *) fp, parse an Error object from stream. Values for fields of the Error object are parsed and this is set accordingly. This is how a client program receives an error object from a server.

    -
    Parameters
    - - -
    fpA valid file pointer to an input stream.
    -
    -
    -
    Returns
    TRUE if no error was detected, FALSE otherwise.
    - -

    Definition at line 158 of file Error.cc.

    - -
    -
    - -

    ◆ print() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Error::print (FILE * out) const
    -
    -inherited
    -
    -

    Creates a printable representation of the Error object. It is suitable for framing, and also for printing and sending over a network.

    -

    The printed representation produced by this function can be parsed by the parse() member function. Thus parse and print form a symmetrical pair that can be used to send and receive an Error object over the network in a MIME document.

    -
    Parameters
    - - -
    outA pointer to the output stream on which the Error object is to be rendered.
    -
    -
    - -

    Definition at line 200 of file Error.cc.

    - -
    -
    - -

    ◆ print() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Error::print (std::ostream & out) const
    -
    -inherited
    -
    -

    Creates a printable representation of the Error object. It is suitable for framing, and also for printing and sending over a network.

    -

    The printed representation produced by this function can be parsed by the parse() member function. Thus parse and print form a symmetrical pair that can be used to send and receive an Error object over the network in a MIME document.

    -
    Parameters
    - - -
    strmA reference to the output stream on which the Error object is to be rendered.
    -
    -
    - -

    Definition at line 229 of file Error.cc.

    - -
    -
    - -

    ◆ set_error_code()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Error::set_error_code (ErrorCode ec = undefined_error)
    -
    -inherited
    -
    -

    Set the ErrorCode. If the current error message has not been set, use ec to set the error message. The resulting error message string is the same as the ErrorCode name. If ec is not within the range of values for an OPeNDAP ErrorCode, the error message is left unchanged.

    -
    Parameters
    - - -
    ecThe new ErrorCode value.
    -
    -
    - -

    Definition at line 262 of file Error.cc.

    - -
    -
    - -

    ◆ set_error_message()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Error::set_error_message (std::string msg = "")
    -
    -inherited
    -
    -

    Set the error message.

    - -

    Definition at line 287 of file Error.cc.

    - -
    -
    - -

    ◆ what()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - -
    virtual const char* libdap::Error::what () const
    throw (
    )
    -
    -inlinevirtualinherited
    -
    - -

    The pointer is valid only for the lifetime of the Error instance. jhrg 9/22/20.

    - -

    Definition at line 127 of file Error.h.

    - -
    -
    -
    The documentation for this class was generated from the following file: -
    -
    - - - - diff --git a/html/classlibdap_1_1SignalHandlerRegisteredErr.js b/html/classlibdap_1_1SignalHandlerRegisteredErr.js deleted file mode 100644 index eb256bbe1..000000000 --- a/html/classlibdap_1_1SignalHandlerRegisteredErr.js +++ /dev/null @@ -1,22 +0,0 @@ -var classlibdap_1_1SignalHandlerRegisteredErr = -[ - [ "SignalHandlerRegisteredErr", "classlibdap_1_1SignalHandlerRegisteredErr.html#adf551280fad2d1965284eff48111de6d", null ], - [ "SignalHandlerRegisteredErr", "classlibdap_1_1SignalHandlerRegisteredErr.html#ac198af4d98ec6e59e317c902dad59241", null ], - [ "get_error_code", "classlibdap_1_1SignalHandlerRegisteredErr.html#aaca0caca09e939602cade604cbc9824f", null ], - [ "get_error_message", "classlibdap_1_1SignalHandlerRegisteredErr.html#ab24a61e4974aae62962a40f9975e674c", null ], - [ "get_file", "classlibdap_1_1SignalHandlerRegisteredErr.html#a5165d667334a9fd6f337735c2b57e28c", null ], - [ "get_line", "classlibdap_1_1SignalHandlerRegisteredErr.html#a44b91121bdbc7d9d389db3440e2299cf", null ], - [ "OK", "classlibdap_1_1SignalHandlerRegisteredErr.html#acf3ab60821773bd8b62284750b02cfc0", null ], - [ "parse", "classlibdap_1_1SignalHandlerRegisteredErr.html#ac705b3c1cfab1f7530d66a974eb0e8b6", null ], - [ "print", "classlibdap_1_1SignalHandlerRegisteredErr.html#a552d711be27e6695854bd2b977a5cf31", null ], - [ "print", "classlibdap_1_1SignalHandlerRegisteredErr.html#a4c58ef196c2b247bd37529bb7ad6a666", null ], - [ "set_error_code", "classlibdap_1_1SignalHandlerRegisteredErr.html#a47c0f4b6a38d8ca075d1056076d2845d", null ], - [ "set_error_message", "classlibdap_1_1SignalHandlerRegisteredErr.html#a3ca90d33bf1c95529c9eefdfe8646e34", null ], - [ "set_file", "classlibdap_1_1SignalHandlerRegisteredErr.html#a94a26bbdd9f4ede88c74de97e9e9e98d", null ], - [ "set_line", "classlibdap_1_1SignalHandlerRegisteredErr.html#a63a9c54019daa8b406c4287faba5e60a", null ], - [ "what", "classlibdap_1_1SignalHandlerRegisteredErr.html#accc5eeb469c8c18ec16dbf7fefe3cc41", null ], - [ "_error_code", "classlibdap_1_1SignalHandlerRegisteredErr.html#a30226017ae9dfbe2e27be502b4fbdef4", null ], - [ "_error_message", "classlibdap_1_1SignalHandlerRegisteredErr.html#a87f74c6be2134736ca1e400c90a3d571", null ], - [ "d_file", "classlibdap_1_1SignalHandlerRegisteredErr.html#ac947a4c3d229d7ec505ad921a77702ea", null ], - [ "d_line", "classlibdap_1_1SignalHandlerRegisteredErr.html#af7d939b4b8154518f870d5424ff55f62", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1SignalHandlerRegisteredErr__inherit__graph.map b/html/classlibdap_1_1SignalHandlerRegisteredErr__inherit__graph.map deleted file mode 100644 index fa6e323ef..000000000 --- a/html/classlibdap_1_1SignalHandlerRegisteredErr__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1SignalHandlerRegisteredErr__inherit__graph.md5 b/html/classlibdap_1_1SignalHandlerRegisteredErr__inherit__graph.md5 deleted file mode 100644 index 8fc2270de..000000000 --- a/html/classlibdap_1_1SignalHandlerRegisteredErr__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -b77cd8817c1716cea33f4c9b7ab6b0dd \ No newline at end of file diff --git a/html/classlibdap_1_1SignalHandlerRegisteredErr__inherit__graph.png b/html/classlibdap_1_1SignalHandlerRegisteredErr__inherit__graph.png deleted file mode 100644 index 0174ad76382713ae54f010e843a9547c96e1fe73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24171 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�p@`ZR(@lokuwtT$GU%o;cfCgUE=%0-ZEy0 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 UdCIkQX)8~puVZ|#QVSaKKg%_boB#j- diff --git a/html/classlibdap_1_1StdinResponse-members.html b/html/classlibdap_1_1StdinResponse-members.html deleted file mode 100644 index b3b58ea47..000000000 --- a/html/classlibdap_1_1StdinResponse-members.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::StdinResponse Member List
    -
    -
    - -

    This is the complete list of members for libdap::StdinResponse, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - -
    get_cpp_stream() const (defined in libdap::StdinResponse)libdap::StdinResponseinlinevirtual
    get_protocol() const (defined in libdap::Response)libdap::Responseinlinevirtual
    get_status() const (defined in libdap::Response)libdap::Responseinlinevirtual
    get_stream() const (defined in libdap::StdinResponse)libdap::StdinResponseinlinevirtual
    get_type() const (defined in libdap::Response)libdap::Responseinlinevirtual
    get_version() const (defined in libdap::Response)libdap::Responseinlinevirtual
    operator=(const Response &) (defined in libdap::Response)libdap::Responseprotected
    Response(const Response &) (defined in libdap::Response)libdap::Responseprotected
    Response() (defined in libdap::Response)libdap::Responseinline
    Response(FILE *s, int status=0)libdap::Responseinline
    Response(std::fstream *s, int status=0) (defined in libdap::Response)libdap::Responseinline
    set_cpp_stream(std::istream *in) (defined in libdap::StdinResponse)libdap::StdinResponseinlinevirtual
    set_protocol(const std::string &p) (defined in libdap::Response)libdap::Responseinlinevirtual
    set_status(int s) (defined in libdap::Response)libdap::Responseinlinevirtual
    set_stream(FILE *s) (defined in libdap::StdinResponse)libdap::StdinResponseinlinevirtual
    set_type(ObjectType o) (defined in libdap::Response)libdap::Responseinlinevirtual
    set_version(const std::string &v) (defined in libdap::Response)libdap::Responseinlinevirtual
    StdinResponse(FILE *s)libdap::StdinResponseinline
    StdinResponse(std::istream &in)libdap::StdinResponseinline
    ~Response()libdap::Responseinlinevirtual
    ~StdinResponse()libdap::StdinResponseinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1StdinResponse.html b/html/classlibdap_1_1StdinResponse.html deleted file mode 100644 index 004b714a9..000000000 --- a/html/classlibdap_1_1StdinResponse.html +++ /dev/null @@ -1,257 +0,0 @@ - - - - - - - -libdap: libdap::StdinResponse Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::StdinResponse Class Reference
    -
    -
    - -

    Encapsulate a response read from stdin. - More...

    - -

    #include <StdinResponse.h>

    -
    -Inheritance diagram for libdap::StdinResponse:
    -
    -
    Inheritance graph
    - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    -virtual std::istream * get_cpp_stream () const
     
    -virtual FILE * get_stream () const
     
    -virtual void set_cpp_stream (std::istream *in)
     
    -virtual void set_stream (FILE *s)
     
     StdinResponse (FILE *s)
     Initialize with standard input. More...
     
     StdinResponse (std::istream &in)
     Build a instance using a C++ istream. More...
     
    virtual ~StdinResponse ()
     
    getters
    -virtual int get_status () const
     
    -virtual ObjectType get_type () const
     
    -virtual std::string get_version () const
     
    -virtual std::string get_protocol () const
     
    setters
    -virtual void set_status (int s)
     
    -virtual void set_type (ObjectType o)
     
    -virtual void set_version (const std::string &v)
     
    -virtual void set_protocol (const std::string &p)
     
    -

    Detailed Description

    -

    Encapsulate a response read from stdin.

    -

    This class holds stdin and provides an interface from which Connect can read DAP2 information from standard input. Unlike the other Response classes, StdinResponse does not close the input stream when it's done reading.

    -
    Note
    Modified 10/25/13 to accommodate C++ istreams.
    - -

    Definition at line 44 of file StdinResponse.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ StdinResponse() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    libdap::StdinResponse::StdinResponse (FILE * s)
    -
    -inline
    -
    - -

    Initialize with standard input.

    -

    Create an instance initialized to standard input. When done, does not close stdin.

    -
    See also
    Response
    -
    Parameters
    - - -
    sPointer to standard input.
    -
    -
    - -

    Definition at line 62 of file StdinResponse.h.

    - -
    -
    - -

    ◆ StdinResponse() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    libdap::StdinResponse::StdinResponse (std::istream & in)
    -
    -inline
    -
    - -

    Build a instance using a C++ istream.

    -
    Parameters
    - - -
    inA pointer to the input stream
    -
    -
    - -

    Definition at line 68 of file StdinResponse.h.

    - -
    -
    - -

    ◆ ~StdinResponse()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual libdap::StdinResponse::~StdinResponse ()
    -
    -inlinevirtual
    -
    -

    Destructor. Does not close standard input.

    - -

    Definition at line 71 of file StdinResponse.h.

    - -
    -
    -
    The documentation for this class was generated from the following file: -
    -
    - - - - diff --git a/html/classlibdap_1_1StdinResponse.js b/html/classlibdap_1_1StdinResponse.js deleted file mode 100644 index ec5a56ac2..000000000 --- a/html/classlibdap_1_1StdinResponse.js +++ /dev/null @@ -1,18 +0,0 @@ -var classlibdap_1_1StdinResponse = -[ - [ "StdinResponse", "classlibdap_1_1StdinResponse.html#a493426389b258aca4595f6090ee5a8bb", null ], - [ "StdinResponse", "classlibdap_1_1StdinResponse.html#abba5fdeb0152e8b6c3affa48a2f19577", null ], - [ "~StdinResponse", "classlibdap_1_1StdinResponse.html#af21584956ced23448dcb88da165258e7", null ], - [ "get_cpp_stream", "classlibdap_1_1StdinResponse.html#aa2b9b6a9e27cd8bfee56566009777cfc", null ], - [ "get_protocol", "classlibdap_1_1StdinResponse.html#a2a6b775e5fa6265fc9ac4f9c576e815c", null ], - [ "get_status", "classlibdap_1_1StdinResponse.html#a1cba94a4d25c344985f5182a54e789b8", null ], - [ "get_stream", "classlibdap_1_1StdinResponse.html#ad397111a0fe34b67cd5177771a083b30", null ], - [ "get_type", "classlibdap_1_1StdinResponse.html#ae39b13938ed524bbf14807c8a35b31cc", null ], - [ "get_version", "classlibdap_1_1StdinResponse.html#afe78405b68946981c4b2d4e8cd305651", null ], - [ "set_cpp_stream", "classlibdap_1_1StdinResponse.html#aaa5dc4cc8c5f99aed42ea3e7a5c43e07", null ], - [ "set_protocol", "classlibdap_1_1StdinResponse.html#aeeab3df1376b578b865c313dfe7b26ee", null ], - [ "set_status", "classlibdap_1_1StdinResponse.html#a3de0ea86ac433904efdc0e4f4c86fa26", null ], - [ "set_stream", "classlibdap_1_1StdinResponse.html#a618f6c7f62c64477e95620bd0a4e5274", null ], - [ "set_type", "classlibdap_1_1StdinResponse.html#a7a7807d0a45dd1f6111987f054956e24", null ], - [ "set_version", "classlibdap_1_1StdinResponse.html#a0eb078feca514d7d1f8428d9c001f262", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1StdinResponse__inherit__graph.map b/html/classlibdap_1_1StdinResponse__inherit__graph.map deleted file mode 100644 index 9227255c3..000000000 --- a/html/classlibdap_1_1StdinResponse__inherit__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/classlibdap_1_1StdinResponse__inherit__graph.md5 b/html/classlibdap_1_1StdinResponse__inherit__graph.md5 deleted file mode 100644 index 37fffbbf7..000000000 --- a/html/classlibdap_1_1StdinResponse__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -58f7e27e0d227c6adf32ac46ac7e5c99 \ No newline at end of file diff --git a/html/classlibdap_1_1StdinResponse__inherit__graph.png b/html/classlibdap_1_1StdinResponse__inherit__graph.png deleted file mode 100644 index f5ca690fbd84d842b31047872fc3fe68368dbbee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46438 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 iord&(A2>O!KO+S3j?NH0?%})ue#-Lda^ - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::Str Member List
    -
    -
    - -

    This is the complete list of members for libdap::Str, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    add_var(BaseType *bt, Part part=nil)libdap::BaseTypevirtual
    add_var_nocopy(BaseType *bt, Part part=nil) (defined in libdap::BaseType)libdap::BaseTypevirtual
    attributes()libdap::BaseTypevirtual
    BaseType(const string &n, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const string &n, const string &d, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const BaseType &copy_from)libdap::BaseType
    btp_stack typedef (defined in libdap::BaseType)libdap::BaseType
    buf2val(void **val)libdap::Strvirtual
    check_semantics(string &msg, bool all=false)libdap::BaseTypevirtual
    clear_local_data()libdap::BaseTypeinlinevirtual
    compute_checksum(Crc32 &checksum)libdap::Strvirtual
    d4_ops(BaseType *b, int op)libdap::Strvirtual
    d_buf (defined in libdap::Str)libdap::Strprotected
    d_in_selection (defined in libdap::BaseType)libdap::BaseTypeprotected
    d_is_synthesized (defined in libdap::BaseType)libdap::BaseTypeprotected
    dataset() constlibdap::BaseTypevirtual
    deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)libdap::Strvirtual
    deserialize(D4StreamUnMarshaller &um, DMR &dmr)libdap::Strvirtual
    dump(ostream &strm) constlibdap::Strvirtual
    element_count(bool leaves=false)libdap::BaseTypevirtual
    FQN() constlibdap::BaseTypevirtual
    get_attr_table()libdap::BaseTypevirtual
    get_parent() constlibdap::BaseTypevirtual
    intern_data(ConstraintEvaluator &eval, DDS &dds)libdap::BaseTypevirtual
    intern_data()libdap::BaseTypevirtual
    is_constructor_type() constlibdap::BaseTypevirtual
    is_dap4() const (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    is_in_selection()libdap::BaseTypevirtual
    is_simple_type() constlibdap::BaseTypevirtual
    is_vector_type() constlibdap::BaseTypevirtual
    length() constlibdap::Strvirtual
    m_duplicate(const BaseType &bt)libdap::BaseTypeprotected
    name() constlibdap::BaseTypevirtual
    operator=(const Str &rhs) (defined in libdap::Str)libdap::Str
    operator=(const BaseType &rhs) (defined in libdap::BaseType)libdap::BaseType
    ops(BaseType *b, int op)libdap::Strvirtual
    print_dap4(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
    print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_val(FILE *out, string space="", bool print_decl_p=true)libdap::Strvirtual
    print_val(ostream &out, string space="", bool print_decl_p=true)libdap::Strvirtual
    print_xml(FILE *out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml(ostream &out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml_writer(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
    ptr_duplicate()libdap::Strvirtual
    read()libdap::BaseTypevirtual
    read_p()libdap::BaseTypevirtual
    send_p()libdap::BaseTypevirtual
    serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)libdap::Strvirtual
    serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)libdap::Strvirtual
    set_attr_table(const AttrTable &at)libdap::BaseTypevirtual
    set_attributes(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_attributes_nocopy(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_in_selection(bool state)libdap::BaseTypevirtual
    set_is_dap4(const bool v) (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    set_length(int)libdap::BaseTypeinlinevirtual
    set_name(const string &n)libdap::BaseTypevirtual
    set_parent(BaseType *parent)libdap::BaseTypevirtual
    set_read_p(bool state)libdap::BaseTypevirtual
    set_send_p(bool state)libdap::BaseTypevirtual
    set_synthesized_p(bool state)libdap::BaseTypevirtual
    set_type(const Type &t)libdap::BaseTypevirtual
    set_value(const string &value)libdap::Strvirtual
    Str(const string &n)libdap::Str
    Str(const string &n, const string &d)libdap::Str
    Str(const Str &copy_from) (defined in libdap::Str)libdap::Str
    synthesized_p()libdap::BaseTypevirtual
    toString()libdap::BaseTypevirtual
    transfer_attributes(AttrTable *at)libdap::BaseTypevirtual
    transform_to_dap2(AttrTable *parent_attr_table)libdap::BaseTypevirtual
    transform_to_dap4(D4Group *root, Constructor *container)libdap::BaseTypevirtual
    type() constlibdap::BaseTypevirtual
    type_name() constlibdap::BaseTypevirtual
    val2buf(void *val, bool reuse=false)libdap::Strvirtual
    value() constlibdap::Strvirtual
    var(const string &name="", bool exact_match=true, btp_stack *s=0)libdap::BaseTypevirtual
    var(const string &name, btp_stack &s)libdap::BaseTypevirtual
    width(bool constrained=false) constlibdap::Strvirtual
    ~BaseType() (defined in libdap::BaseType)libdap::BaseTypevirtual
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    ~Str() (defined in libdap::Str)libdap::Strinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1Str.html b/html/classlibdap_1_1Str.html deleted file mode 100644 index 6ef79a097..000000000 --- a/html/classlibdap_1_1Str.html +++ /dev/null @@ -1,2991 +0,0 @@ - - - - - - - -libdap: libdap::Str Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    - -

    Holds character string data. - More...

    - -

    #include <Str.h>

    -
    -Inheritance diagram for libdap::Str:
    -
    -
    Inheritance graph
    - - - - - -
    - - - - -

    -Public Types

    -typedef stack< BaseType * > btp_stack
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual void add_var (BaseType *bt, Part part=nil)
     Add a variable. More...
     
    -virtual void add_var_nocopy (BaseType *bt, Part part=nil)
     
    virtual unsigned int buf2val (void **val)
     
    virtual bool check_semantics (string &msg, bool all=false)
     Compare an object's current state with the semantics of its type. More...
     
    virtual void clear_local_data ()
     
    virtual void compute_checksum (Crc32 &checksum)
     include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum. More...
     
    virtual bool d4_ops (BaseType *b, int op)
     
    virtual string dataset () const
     Returns the name of the dataset used to create this instance. More...
     
    virtual bool deserialize (UnMarshaller &um, DDS *dds, bool reuse=false)
     Receive data from the net. More...
     
    virtual void deserialize (D4StreamUnMarshaller &um, DMR &dmr)
     
    virtual void dump (ostream &strm) const
     dumps information about this object More...
     
    virtual int element_count (bool leaves=false)
     Count the members of constructor types. More...
     
    virtual std::string FQN () const
     
    virtual AttrTableget_attr_table ()
     
    virtual BaseTypeget_parent () const
     
    virtual bool is_constructor_type () const
     Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable. More...
     
    -virtual bool is_dap4 () const
     
    virtual bool is_in_selection ()
     Is this variable part of the current selection? More...
     
    virtual bool is_simple_type () const
     Returns true if the instance is a numeric, string or URL type variable. More...
     
    virtual bool is_vector_type () const
     Returns true if the instance is a vector (i.e., array) type variable. More...
     
    virtual int length () const
     How many elements are in this variable. More...
     
    virtual string name () const
     Returns the name of the class instance. More...
     
    -Stroperator= (const Str &rhs)
     
    virtual bool ops (BaseType *b, int op)
     Evaluate relational operators. More...
     
    virtual void print_dap4 (XMLWriter &xml, bool constrained=false)
     
    virtual void print_decl (FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_decl (ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_val (FILE *out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_val (ostream &out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_xml (FILE *out, string space=" ", bool constrained=false)
     
    virtual void print_xml (ostream &out, string space=" ", bool constrained=false)
     
    virtual void print_xml_writer (XMLWriter &xml, bool constrained=false)
     
    virtual BaseTypeptr_duplicate ()
     
    virtual bool read ()
     Read data into a local buffer. More...
     
    virtual bool read_p ()
     Has this variable been read? More...
     
    virtual bool send_p ()
     Should this variable be sent? More...
     
    virtual bool serialize (ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
     Move data to the net, then remove them from the object. More...
     
    virtual void serialize (D4StreamMarshaller &m, DMR &dmr, bool filter=false)
     Serialize an Int8. More...
     
    virtual void set_attr_table (const AttrTable &at)
     
    virtual void set_in_selection (bool state)
     
    -virtual void set_is_dap4 (const bool v)
     
    virtual void set_length (int)
     Set the number of elements for this variable. More...
     
    virtual void set_name (const string &n)
     Sets the name of the class instance. More...
     
    virtual void set_parent (BaseType *parent)
     
    virtual void set_read_p (bool state)
     Sets the value of the read_p property. More...
     
    virtual void set_send_p (bool state)
     
    virtual void set_synthesized_p (bool state)
     
    virtual void set_type (const Type &t)
     Sets the type of the class instance. More...
     
    virtual bool set_value (const string &value)
     
     Str (const string &n)
     
     Str (const string &n, const string &d)
     
    Str (const Str &copy_from)
     
    virtual bool synthesized_p ()
     
    virtual string toString ()
     
    virtual void transfer_attributes (AttrTable *at)
     
    virtual std::vector< BaseType * > * transform_to_dap2 (AttrTable *parent_attr_table)
     DAP4 to DAP2 transform. More...
     
    virtual void transform_to_dap4 (D4Group *root, Constructor *container)
     DAP2 to DAP4 transform. More...
     
    virtual Type type () const
     Returns the type of the class instance. More...
     
    virtual string type_name () const
     Returns the type of the class instance as a string. More...
     
    virtual unsigned int val2buf (void *val, bool reuse=false)
     
    virtual string value () const
     
    virtual BaseTypevar (const string &name="", bool exact_match=true, btp_stack *s=0)
     Returns a pointer to a member of a constructor class. More...
     
    virtual BaseTypevar (const string &name, btp_stack &s)
     
    virtual unsigned int width (bool constrained=false) const
     How many bytes does this variable use Return the number of bytes of storage this variable uses. For scalar types, this is pretty simple (an int32 uses 4 bytes, etc.). For arrays and Constructors, it is a bit more complex. Note that a scalar String variable uses sizeof(String*) bytes, not the length of the string value. The width() of a String array returns the number of elements in the array times sizeof(String*). More...
     
    virtual D4Attributesattributes ()
     
    -virtual void set_attributes (D4Attributes *)
     
    -virtual void set_attributes_nocopy (D4Attributes *)
     
    Abstract Methods
    virtual void intern_data (ConstraintEvaluator &eval, DDS &dds)
     
    virtual void intern_data ()
     Read data into this variable. More...
     
    - - - - -

    -Protected Member Functions

    void m_duplicate (const BaseType &bt)
     Perform a deep copy. More...
     
    - - - - - - - -

    -Protected Attributes

    -string d_buf
     
    -bool d_in_selection
     
    -bool d_is_synthesized
     
    -

    Detailed Description

    -

    Holds character string data.

    -
    See also
    BaseType
    -
    -Url
    - -

    Definition at line 62 of file Str.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ Str() [1/2]

    - -
    -
    - - - - - - - - -
    libdap::Str::Str (const string & n)
    -
    -

    The Str constructor requires only the name of the variable to be created. The name may be omitted, which will create a nameless variable. This may be adequate for some applications.

    -
    Parameters
    - - -
    nA string containing the name of the variable to be created.
    -
    -
    - -

    Definition at line 84 of file Str.cc.

    - -
    -
    - -

    ◆ Str() [2/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    libdap::Str::Str (const string & n,
    const string & d 
    )
    -
    -

    The Str server-side constructor accepts the name of the variable and the dataset name from which this instance is created.

    -
    Parameters
    - - - -
    nA string containing the name of the variable to be created.
    dA string containing the name of the dataset from which this variable is created
    -
    -
    - -

    Definition at line 94 of file Str.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ add_var()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::add_var (BaseTypebt,
    Part part = nil 
    )
    -
    -virtualinherited
    -
    - -

    Add a variable.

    -

    Adds a variable to an instance of a constructor class, such as Array, Structure et cetera. This function is only used by those classes. For constructors with more than one variable, the variables appear in the same order in which they were added (i.e., the order in which add_var() was called). Since this method is only for use by Vectors and Constructors, the BaseType implementation throws InternalErr.

    -
    Note
    For the implementation of this method in Structure, Sequence, et c., first copy bt and then insert the copy. If bt is itself a constructor type you must either use the var() method to get a pointer to the actual instance added to *this or you must first add all of bt's children to it before adding it to *this. The implementations should use m_duplicate() to perform a deep copy of bt.
    -
    Todo:
    We should get rid of the Part parameter and adopt the convention that the first variable is the Array and all subsequent ones are Maps (when dealing with a Grid, the only time Part matters). This would enable several methods to migrate from Structure, Sequence and Grid to Constructor.
    -
    Parameters
    - - - -
    btThe variable to be added to this instance. The caller of this method must free memory it allocates for v. This method will make a deep copy of the object pointed to by v.
    partThe part of the constructor data to be modified. Only meaningful for Grid variables.
    -
    -
    -
    See also
    Part
    - -

    Reimplemented in libdap::Vector, libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 815 of file BaseType.cc.

    - -
    -
    - -

    ◆ attributes()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4Attributes * libdap::BaseType::attributes ()
    -
    -virtualinherited
    -
    -

    DAP4 Attribute methods

    - -

    Definition at line 599 of file BaseType.cc.

    - -
    -
    - -

    ◆ buf2val()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::Str::buf2val (void ** val)
    -
    -virtual
    -
    -

    Read the object's value and put a copy in the C++ string object referenced by **val. If *val is null, this method will allocate a string object using new and store the result there. If *val is not null, it will assume that *val references a string object and put the value there.

    -
    Parameters
    - - -
    valA pointer to null or to a string object.
    -
    -
    -
    Returns
    The sizeof(string*)
    -
    Exceptions
    - - -
    InternalErrThrown if val is null.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 206 of file Str.cc.

    - -
    -
    - -

    ◆ check_semantics()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::check_semantics (string & msg,
    bool all = false 
    )
    -
    -virtualinherited
    -
    - -

    Compare an object's current state with the semantics of its type.

    -

    This function checks the class instance for internal consistency. This is important to check for complex constructor classes. For BaseType, an object is semantically correct if it has both a non-null name and type.

    -

    For example, an Int32 instance would return FALSE if it had no name or no type defined. A Grid instance might return FALSE for more complex reasons, such as having Map arrays of the wrong size or shape.

    -

    This function is used by the DDS class, and will rarely, if ever, be explicitly called by a DODS application program. A variable must pass this test before it is sent, but there may be many other stages in a retrieve operation where it would fail.

    -
    Returns
    Returns FALSE when the current state violates some aspect of the type semantics, TRUE otherwise.
    -
    Parameters
    - - - -
    msgA returned string, containing a message indicating the source of any problem.
    allFor complex constructor types (Grid, Sequence, Structure), this flag indicates whether to check the semantics of the member variables, too.
    -
    -
    -
    See also
    DDS::check_semantics
    - -

    Reimplemented in libdap::Array, libdap::Vector, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1209 of file BaseType.cc.

    - -
    -
    - -

    ◆ clear_local_data()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual void libdap::BaseType::clear_local_data ()
    -
    -inlinevirtualinherited
    -
    -

    Remove any read or set data in the private data of the variable, setting read_p() to false. Used to clear any dynamically allocated storage that holds (potentially large) data. For the simple types, this no-op version is all that's needed. Vector and some other classes define a special version and have serialize() implementations that call it to free data as soon as possible after sending it.

    -
    Note
    Added 7/5/15 jhrg
    -
    -Any specialization of this should make sure to reset the read_p property.
    - -

    Reimplemented in libdap::Sequence, libdap::Vector, libdap::D4Sequence, and libdap::D4Opaque.

    - -

    Definition at line 179 of file BaseType.h.

    - -
    -
    - -

    ◆ compute_checksum()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Str::compute_checksum (Crc32checksum)
    -
    -virtual
    -
    - -

    include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum.

    -
    Parameters
    - - -
    checksumA Crc32 instance that holds the current checksum.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 168 of file Str.cc.

    - -
    -
    - -

    ◆ d4_ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::Str::d4_ops (BaseTypeb,
    int op 
    )
    -
    -virtual
    -
    -
    See also
    BaseType::d4_ops(BaseType *, int)
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 317 of file Str.cc.

    - -
    -
    - -

    ◆ dataset()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::dataset () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the dataset used to create this instance.

    -

    A dataset from which the data is to be read. The meaning of this string will vary among different types of data sources. It may be the name of a data file or an identifier used to read data from a relational database.

    - -

    Definition at line 358 of file BaseType.cc.

    - -
    -
    - -

    ◆ deserialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::Str::deserialize (UnMarshallerum,
    DDSdds,
    bool reuse = false 
    )
    -
    -virtual
    -
    - -

    Receive data from the net.

    -

    Receives data from the network connection identified by the source parameter. The data is put into the class data buffer according to the input dds.

    -

    This function is only used on the client side of the DODS client/server connection.

    -
    Parameters
    - - - - -
    umAn UnMarshaller that knows how to deserialize data types
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure. This would have been received from the server in an earlier transmission.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect.
    -
    -
    -
    Returns
    Always returns TRUE.
    -
    Exceptions
    - - -
    Errorwhen a problem reading from the UnMarshaller is found.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 160 of file Str.cc.

    - -
    -
    - -

    ◆ deserialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Str::deserialize (D4StreamUnMarshallerum,
    DMRdmr 
    )
    -
    -virtual
    -
    -

    The DAP4 deserialization method.

    Parameters
    - - - -
    um
    dmr
    -
    -
    -
    Exceptions
    - - -
    Erroror InternalErr
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 191 of file Str.cc.

    - -
    -
    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Str::dump (ostream & strm) const
    -
    -virtual
    -
    - -

    dumps information about this object

    -

    Displays the pointer value of this instance and information about this instance.

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the information to
    -
    -
    -
    Returns
    void
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 349 of file Str.cc.

    - -
    -
    - -

    ◆ element_count()

    - -
    -
    - - - - - -
    - - - - - - - - -
    int libdap::BaseType::element_count (bool leaves = false)
    -
    -virtualinherited
    -
    - -

    Count the members of constructor types.

    -

    Return a count of the total number of variables in this variable. This is used to count the number of variables held by a constructor variable - for simple type and vector variables it always returns 1.

    -

    For compound data types, there are two ways to count members. You can count the members, or you can count the simple members and add that to the count of the compound members. For example, if a Structure contains an Int32 and another Structure that itself contains two Int32 members, the element count of the top-level structure could be two (one Int32 and one Structure) or three (one Int32 by itself and two Int32's in the subsidiary Structure). Use the leaves parameter to control which kind of counting you desire.

    -
    Returns
    Returns 1 for simple types. For compound members, the count depends on the leaves argument.
    -
    Parameters
    - - -
    leavesThis parameter is only relevant if the object contains other compound data types. If FALSE, the function counts only the data variables mentioned in the object's declaration. If TRUE, it counts the simple members, and adds that to the sum of the counts for the compound members. This parameter has no effect for simple type variables.
    -
    -
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 443 of file BaseType.cc.

    - -
    -
    - -

    ◆ FQN()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::FQN () const
    -
    -virtualinherited
    -
    -

    Return the FQN for this variable. This will include the D4 Group component of the name.

    -
    Returns
    The FQN in a string
    - -

    Reimplemented in libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 332 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - -
    AttrTable & libdap::BaseType::get_attr_table ()
    -
    -virtualinherited
    -
    -

    Get this variable's AttrTable. It's generally a bad idea to return a reference to a contained object, but in this case it seems that building an interface inside BaseType is overkill.

    -

    Use the AttrTable methods to manipulate the table.

    - -

    Definition at line 582 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_parent()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::BaseType::get_parent () const
    -
    -virtualinherited
    -
    -

    Return a pointer to the Constructor or Vector which holds (contains) this variable. If this variable is at the top level, this method returns null.

    -
    Returns
    A BaseType pointer to the variable's parent.
    - -

    Definition at line 751 of file BaseType.cc.

    - -
    -
    - -

    ◆ intern_data() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::intern_data (ConstraintEvaluatoreval,
    DDSdds 
    )
    -
    -virtualinherited
    -
    -

    Similar to using serialize() and deserialize() together in one object. Data are read as for serialize and those values are stored in the objects as deserialize() does but does not write and then read data to/from a stream.

    -

    This method is defined by the various data type classes. It calls the read() abstract method. Unlike serialize(), this method does not clear the memory use to hold the data values, so the caller should make sure to delete the DDS or the variable as soon as possible.

    -
    Parameters
    - - - -
    evalUse this as the constraint expression evaluator.
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    -
    -
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 908 of file BaseType.cc.

    - -
    -
    - -

    ◆ intern_data() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::BaseType::intern_data ()
    -
    -virtualinherited
    -
    - -

    Read data into this variable.

    -
    Parameters
    - - - -
    evalEvaluator for a constraint expression
    dmrDMR for the whole dataset
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 927 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_constructor_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_constructor_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable.

    -
    Returns
    True if the instance is a Structure, Sequence or Grid, False otherwise.
    - -

    Definition at line 412 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_in_selection ()
    -
    -virtualinherited
    -
    - -

    Is this variable part of the current selection?

    -

    Does this variable appear in either the selection part or as a function argument in the current constrain expression. If this property is set (true) then implementations of the read() method should read this variable.

    -
    Note
    This method does not check, nor does it know about the semantics of, string arguments passed to functions. Those functions might include variable names in strings; they are responsible for reading those variables. See the grid (func_grid_select()) for an example.
    -
    See also
    BaseType::read()
    - -

    Definition at line 703 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_simple_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_simple_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a numeric, string or URL type variable.

    -
    Returns
    True if the instance is a scalar numeric, String or URL variable, False otherwise. Arrays (even of simple types) return False.
    -
    See also
    is_vector_type()
    - -

    Definition at line 393 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_vector_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_vector_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a vector (i.e., array) type variable.

    -
    Returns
    True if the instance is an Array, False otherwise.
    - -

    Definition at line 402 of file BaseType.cc.

    - -
    -
    - -

    ◆ length()

    - -
    -
    - - - - - -
    - - - - - - - -
    int libdap::Str::length () const
    -
    -virtual
    -
    - -

    How many elements are in this variable.

    -
    Todo:
    change the return type to int64_t
    -
    Returns
    The number of elements; 1 for scalars
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 123 of file Str.cc.

    - -
    -
    - -

    ◆ m_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::m_duplicate (const BaseTypebt)
    -
    -protectedinherited
    -
    - -

    Perform a deep copy.

    -

    Perform a deep copy. Copies the values of bt into *this. Pointers are dereferenced and their values are copied into a newly allocated instance.

    -
    Parameters
    - - -
    btThe source object.
    -
    -
    - -

    Definition at line 86 of file BaseType.cc.

    - -
    -
    - -

    ◆ name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::name () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the class instance.

    - -

    Definition at line 320 of file BaseType.cc.

    - -
    -
    - -

    ◆ ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::Str::ops (BaseTypeb,
    int op 
    )
    -
    -virtual
    -
    - -

    Evaluate relational operators.

    -

    This method contains the relational operators used by the constraint expression evaluator in the DDS class. Each class that wants to be able to evaluate relational expressions must overload this function. The implementation in BaseType throws an InternalErr exception. The DAP library classes Byte, ..., Url provide specializations of this method. It is not meaningful for classes such as Array because relational expressions using Array are not supported.

    -

    The op argument refers to a table generated by bison from the constraint expression parser. Use statements like the following to correctly interpret its value:

    -
    switch (op) {
    -    case EQUAL: return i1 == i2;
    -    case NOT_EQUAL: return i1 != i2;
    -    case GREATER: return i1 > i2;
    -    case GREATER_EQL: return i1 >= i2;
    -    case LESS: return i1 < i2;
    -    case LESS_EQL: return i1 <= i2;
    -    case REGEXP: throw Error("Regular expressions are not supported for integer values");
    -    default: throw Error("Unknown operator");
    -}
    -

    This function is used by the constraint expression evaluator.

    -
    Parameters
    - - - -
    bCompare the value of this instance with b.
    opAn integer index indicating which relational operator is implied. Choose one from the following: EQUAL, NOT_EQUAL, GREATER, GREATER_EQL, LESS, LESS_EQL, and REGEXP.
    -
    -
    -
    Returns
    The boolean value of the comparison.
    -
    See also
    BaseType::d4_ops(BaseType *, int)
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 289 of file Str.cc.

    - -
    -
    - -

    ◆ print_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_dap4 (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the DAP4 XML representation for this variable. This method is used to build the DAP4 DMR response object.

    -
    Parameters
    - - - -
    xmlAn XMLWriter that will do the serialization
    constrainedTrue if the response should show the variables subject to the current constraint expression.
    -
    -
    - -

    Reimplemented in libdap::Array, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 1164 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (FILE * out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1003 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (ostream & out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1054 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_val() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Str::print_val (FILE * out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtual
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output stream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 270 of file Str.cc.

    - -
    -
    - -

    ◆ print_val() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Str::print_val (ostream & out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtual
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output ostream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 278 of file Str.cc.

    - -
    -
    - -

    ◆ print_xml() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (FILE * out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination.
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1105 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (ostream & out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1120 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml_writer()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml_writer (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    - -

    Reimplemented in libdap::Array, libdap::D4Enum, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1134 of file BaseType.cc.

    - -
    -
    - -

    ◆ ptr_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::Str::ptr_duplicate ()
    -
    -virtual
    -
    -

    Clone this instance. Allocate a new instance and copy *this into it. This method must perform a deep copy.

    @note This method should \e not copy data values, but must copy all
    -other fields in the object.
    -
    Returns
    A newly allocated copy of this.
    - -

    Implements libdap::BaseType.

    - -

    Reimplemented in libdap::Url.

    - -

    Definition at line 103 of file Str.cc.

    - -
    -
    - -

    ◆ read()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read ()
    -
    -virtualinherited
    -
    - -

    Read data into a local buffer.

    -

    This method should be implemented for each of the data type classes (Byte, ..., Grid) when using the DAP class library to build a server. This method is only for DAP servers. The library provides a default definition here which throws an InternalErr exception unless the read_p property has been set. In that case it returns false, indicating that all the data have been read. The latter case can happen when building a constant value that needs to be passed to a function. The variable/constant is loaded with a value when it is created.

    -

    When implementing a new DAP server, the Byte, ..., Grid data type classes are usually specialized. In each of those specializations read() should be defined to read values from the data source and store them in the object's local buffer. The read() method is called by other methods in this library. When writing read(), follow these rules:

    -
      -
    • -read() should throw Error if it encounters an error. The message should be verbose enough to be understood by someone running a client on a different machine.
    • -
    • -The value(s) should be read if and only if either send_p() or is_in_selection() return true. If neither of these return true, the value(s) should not be read. This is important when writing read() for a Constructor type such as Grid where a client may ask for only the map vectors (and thus reading the much larger Array part is not needed).
    • -
    • -For each specialization of read(), the method should first test the value of the read_p property (using the read_p() method) and read values only if the value of read_p() is false. Once the read() method reads data and stores it in the instance, it must set the value of the read_p property to true using set_read_p(). If your read() methods fail to do this data may not serialize correctly.
    • -
    • -The Array::read() and Grid::read() methods should take into account any restrictions on Array sizes.
    • -
    • -If you are writing Sequence::read(), be sure to check the documentation for Sequence::read_row() and Sequence::serialize() so you understand how Sequence::read() is being called.
    • -
    • -

      For Sequence::read(), your specialization must correctly manage the unsent_data property and row count in addition to the read_p property (handle the read_p property as describe above). For a Sequence to serialize correctly, once all data from the Sequence has been read, unsent_data property must be set to false (use Sequence::set_unsent_data()). Also, at that time the row number counter must be reset (use Sequence::reset_row_counter()). Typically the correct time to set unsent_data to false and reset the row counter is the time when Sequence::read() return false indicating that all the data for the Sequence have been read. Failure to handle these tasks will break serialization of nested Sequences. Note that when Sequence::read() returns with a result of true (indicating there is more data to send, the value of the unsent_data property should be true.

      -

      Also, if you server must handle nested sequences, be sure to read about subclassing set_read_p().

      -
    • -
    -
    Todo:
    Modify the D4 serialize code so that it supports the true/false behavior of read() for arrays.
    -
    Todo:
    Modify all of the stock handlers so they conform to this!
    -
    Returns
    False means more data remains to be read, True indicates that no more data need to be read. For Sequence and D4Sequence, this method will generally read one instance of the Sequence; for other types it will generally read the entire variable modulo any limitations due to a constraint. However, the library should be written so that read can return less than all of the data for a variable - serialize() would then call the function until it returns True.
    -
    See also
    BaseType
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 899 of file BaseType.cc.

    - -
    -
    - -

    ◆ read_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read_p ()
    -
    -virtualinherited
    -
    - -

    Has this variable been read?

    -

    Returns true if the value(s) for this variable have been read from the data source, otherwise returns false. This method is used to determine when values need to be read using the read() method. When read_p() returns true, this library assumes that buf2val() (and other methods such as get_vec()) can be used to access the value(s) of a variable.

    -
    Returns
    True if the variable's value(s) have been read, false otherwise.
    - -

    Definition at line 480 of file BaseType.cc.

    - -
    -
    - -

    ◆ send_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::send_p ()
    -
    -virtualinherited
    -
    - -

    Should this variable be sent?

    -

    Returns the state of the send_p property. If true, this variable should be sent to the client, if false, it should not. If no constraint expression (CE) has been evaluated, this property is true for all variables in a data source (i.e., for all the variables listed in a DDS). If a CE has been evaluated, this property is true only for those variables listed in the projection part of the CE.

    -
    Returns
    True if the variable should be sent to the client, false otherwise.
    - -

    Definition at line 554 of file BaseType.cc.

    - -
    -
    - -

    ◆ serialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::Str::serialize (ConstraintEvaluatoreval,
    DDSdds,
    Marshallerm,
    bool ce_eval = true 
    )
    -
    -virtual
    -
    - -

    Move data to the net, then remove them from the object.

    -

    Sends the data from the indicated (local) dataset through the connection identified by the Marshaller parameter. If the data is not already incorporated into the DDS object, read the data from the dataset. Once the data are sent (written to the Marshaller), they are deleted from the object and the object state is reset so that they will be read again if the read() method is called.

    -

    This function is only used on the server side of the client/server connection, and is generally only called from the ResponseBuilder functions. It has no BaseType implementation; each datatype child class supplies its own implementation.

    @param eval Use this as the constraint expression evaluator.
    -
    Parameters
    - - - - -
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    mA marshaller used to serialize data types
    ce_evalA boolean value indicating whether to evaluate the DODS constraint expression that may accompany this dataset. The constraint expression is stored in the dds.
    -
    -
    -
    Returns
    This method always returns true. Older versions used the return value to signal success or failure.
    -
    Note
    We changed the default behavior of this method so that it calls BaseType::clear_local_data() once the values are sent. This, combined with the behavior that read() is called by this method just before data are sent, means that data for any given variable remain in memory for the shortest time possible. Furthermore, since variables are serialized one at a time, no more than one variable's data will be in memory at any given time when using the default behavior. Some code - code that uses intern_data() or server functions - might alter this default behavior. Only Array (i.e. Vector), Sequence, D4Sequence and D4Opaque types actually hold data in dynamically allocated memory, so sonly those types have the new/changed behavior. This change was made on 7/5/15.
    -
    Exceptions
    - - - -
    InternalErr.
    Error.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 135 of file Str.cc.

    - -
    -
    - -

    ◆ serialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Str::serialize (D4StreamMarshallerm,
    DMRdmr,
    bool filter = false 
    )
    -
    -virtual
    -
    - -

    Serialize an Int8.

    -
    Parameters
    - - - - - -
    m
    dmrUnused
    evalUnused
    filterUnused
    -
    -
    -
    Exceptions
    - - -
    Erroris thrown if the value needs to be read and that operation fails.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 182 of file Str.cc.

    - -
    -
    - -

    ◆ set_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_attr_table (const AttrTableat)
    -
    -virtualinherited
    -
    -

    Set this variable's attribute table.

    Parameters
    - - -
    atSource of the attributes.
    -
    -
    - -

    Definition at line 590 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_in_selection (bool state)
    -
    -virtualinherited
    -
    -

    Set the in_selection property to state. This property indicates that the variable is used as a parameter to a constraint expression function or that it appears as an argument in a selection sub-expression. If set (true), implementations of the BaseType::read() method should read this variable.

    -
    Parameters
    - - -
    stateSet the in_selection property to this state.
    -
    -
    -
    See also
    BaseType::read()
    -
    -BaseType::is_in_selection() for more information.
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 718 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_length()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::BaseType::set_length (int )
    -
    -inlinevirtualinherited
    -
    - -

    Set the number of elements for this variable.

    -
    Todo:
    change param type to int64_t
    -
    Parameters
    - - -
    lThe number of elements
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, and libdap::Vector.

    - -

    Definition at line 214 of file BaseType.h.

    - -
    -
    - -

    ◆ set_name()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_name (const string & n)
    -
    -virtualinherited
    -
    - -

    Sets the name of the class instance.

    - -

    Reimplemented in libdap::Vector.

    - -

    Definition at line 344 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_parent()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_parent (BaseTypeparent)
    -
    -virtualinherited
    -
    -

    Set the parent property for this variable.

    -
    Note
    Added ability to set parent to null. 10/19/12 jhrg
    -
    Parameters
    - - -
    parentPointer to the Constructor of Vector parent variable or null if the variable has no parent (if it is at the top-level of a DAP2/3 DDS).
    -
    -
    -
    Exceptions
    - - -
    InternalErrthrown if called with anything other than a Constructor, Vector or Null.
    -
    -
    - -

    Definition at line 733 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_read_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_read_p (bool state)
    -
    -virtualinherited
    -
    - -

    Sets the value of the read_p property.

    -

    Sets the value of the read_p property. This indicates that the value(s) of this variable has/have been read. An implementation of the read() method should use this to set the read_p property to true.

    -
    Note
    If the is_synthesized property is true, this method will not alter the is_read property. If you need that behavior, specialize the method in your subclasses if the various types.
    -
    -For most of the types the default implementation of this method is fine. However, if you're building a server which must handle data represented using nested sequences, then you may need to provide a specialization of Sequence::set_read_p(). By default Sequence::set_read_p() recursively sets the read_p property for all child variables to state. For servers where one Sequence reads an outer set of values and another reads an inner set, this is cumbersome. In such a case, it is easier to specialize Sequence::set_read_p() so that it does not recursively set the read_p property for the inner Sequence. Be sure to see the documentation for the read() method!
    -
    Todo:
    Look at making synthesized variables easier to implement and at making them more integrated into the overall CE evaluation process. Maybe the code that computes the synthesized var's value should be in the that variable's read() method? This might provide a way to get rid of the awkward 'projection functions' by replacing them with real children of BaseType. It would also provide a way to clean up the way the synthesized_p prop intrudes on the read_p prop.
    -
    See also
    BaseType::read()
    -
    Parameters
    - - -
    stateSet the read_p property to this state.
    -
    -
    - -

    Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 516 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_send_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_send_p (bool state)
    -
    -virtualinherited
    -
    -

    Sets the value of the send_p flag. This function is meant to be called from within the constraint evaluator of other code which determines that this variable should be returned to the client. Data are ready to be sent when both the d_is_send and d_is_read flags are set to TRUE.

    -
    Parameters
    - - -
    stateThe logical state to set the send_p flag.
    -
    -
    - -

    Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 568 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_synthesized_p (bool state)
    -
    -virtualinherited
    -
    -

    Set the synthesized flag. Before setting this flag be sure to set the read_p() state. Once this flag is set you cannot alter the state of the read_p flag!

    -
    See also
    synthesized_p()
    - -

    Definition at line 463 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_type()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_type (const Typet)
    -
    -virtualinherited
    -
    - -

    Sets the type of the class instance.

    - -

    Definition at line 372 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_value()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool libdap::Str::set_value (const string & value)
    -
    -virtual
    -
    -

    Set the value of this instance.

    Parameters
    - - -
    valueThe value
    -
    -
    -
    Returns
    Always returns true; the return type of bool is for compatibility with the Passive* subclasses written by HAO.
    - -

    Definition at line 253 of file Str.cc.

    - -
    -
    - -

    ◆ synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::synthesized_p ()
    -
    -virtualinherited
    -
    -

    Returns true if the variable is a synthesized variable. A synthesized variable is one that is added to the dataset by the server (usually with a `projection function'.

    - -

    Definition at line 452 of file BaseType.cc.

    - -
    -
    - -

    ◆ toString()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::toString ()
    -
    -virtualinherited
    -
    -

    Write out the object's internal fields in a string. To be used for debugging when regular inspection w/ddd or gdb isn't enough.

    -
    Returns
    A string which shows the object's internal stuff.
    - -

    Reimplemented in libdap::Sequence.

    - -

    Definition at line 184 of file BaseType.cc.

    - -
    -
    - -

    ◆ transfer_attributes()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::transfer_attributes (AttrTableat_container)
    -
    -virtualinherited
    -
    -

    Transfer attributes from a DAS object into this variable. Because of the rough history of the DAS object and the way that various server code built the DAS, this is necessarily a heuristic process. The intent is that this method will be overridden by handlers that need to look for certain patterns in the DAS (e.g., hdf4's odd variable_dim_n; where n = 0, 1, 2, ...) attribute containers.

    -

    There should be a one-to-one mapping between variables and attribute containers. However, in some cases one variable has attributes spread across several top level containers and in some cases one container is used by several variables

    -
    Note
    This method is technically unnecessary because a server (or client) can easily add attributes directly using the DDS::get_attr_table or BaseType::get_attr_table methods and then poke values in using any of the methods AttrTable provides. This method exists to ease the transition to DDS objects which contain attribute information for the existing servers (Since they all make DAS objects separately from the DDS). They could be modified to use the same AttrTable methods but operate on the AttrTable instances in a DDS/BaseType instead of those in a DAS.
    -
    Parameters
    - - -
    at_containerTransfer attributes from this container.
    -
    -
    -
    Returns
    void
    - -

    Reimplemented in libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 644 of file BaseType.cc.

    - -
    -
    - -

    ◆ transform_to_dap2()

    - -
    -
    - - - - - -
    - - - - - - - - -
    std::vector< BaseType * > * libdap::BaseType::transform_to_dap2 (AttrTableparent_attr_table)
    -
    -virtualinherited
    -
    - -

    DAP4 to DAP2 transform.

    -

    For the current BaseType, return a DAP2 'copy' of the variable.

    -
    Note
    For most DAP4 types, in this implementation of DAP2 the corresponding DAP4 type is the same. These types have a different representations in DAP2 and DAP4: Sequences (which are D4Sequences in the DAP4 implementation),
      -
    • Grids (which are semantically subsumed by coverages in DAP4)
    • -
    • Arrays (which use shared dimensions in DAP4)
    • -
    -
    -

    Additionally DAP4 adds the following types:

      -
    • UInt8, Int8, and Char which map to Byte in DAP2.
    • -
    • Int64, Unit64 which have no natural representation in DAP2.
    • -
    • Opaque Possible Byte stuff[] plus metadata?
    • -
    • Enum's can be represented as Int32.
    • -
    • Groups, with the exception of the root group "disappear" into the names of their member variables. Specifically the Group name is add as a prefix followed by a "/" separator to the names of all of the Group's member groups variables.
    • -
    -
    Parameters
    - - -
    TheAttrTable pointer parent_attr_table is used by Groups, which disappear from the DAP2 representation. Their children are returned in the the BAseType vector their attributes are added to parent_attr_table;
    -
    -
    -
    Returns
    A pointer to a vector of BaseType pointers (right?). In most cases this vector will contain a single pointer but DAP4 types 'disappear' such as Group will return all of their member variables in the vector. DAP4 types with no representation in DAP2 (ex: UInt64) the will return a NULL pointer and so this must be tested!
    - -

    Reimplemented in libdap::Array, libdap::D4Enum, libdap::D4Group, libdap::D4Opaque, libdap::Byte, libdap::Structure, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 259 of file BaseType.cc.

    - -
    -
    - -

    ◆ transform_to_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::transform_to_dap4 (D4Grouproot,
    Constructorcontainer 
    )
    -
    -virtualinherited
    -
    - -

    DAP2 to DAP4 transform.

    -

    For the current BaseType, return a DAP4 'copy' of the variable.

    -
    Note
    For most DAP2 types, in this implementation of DAP4 the corresponding DAP4 type is the same. The different types are Sequences (which are D4Sequences in the DAP4 implementation), Grids (which are coverages) and Arrays (which use shared dimensions).
    -
    Parameters
    - - - -
    rootThe root group that should hold this new variable. Add Group-level stuff here (e.g., D4Dimensions).
    containerAdd the new variable to this container.
    -
    -
    -
    Returns
    A pointer to the transformed variable
    - -

    Reimplemented in libdap::Sequence, libdap::Array, libdap::Grid, libdap::Structure, and libdap::Constructor.

    - -

    Definition at line 216 of file BaseType.cc.

    - -
    -
    - -

    ◆ type()

    - -
    -
    - - - - - -
    - - - - - - - -
    Type libdap::BaseType::type () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance.

    - -

    Definition at line 365 of file BaseType.cc.

    - -
    -
    - -

    ◆ type_name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::type_name () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance as a string.

    - -

    Definition at line 379 of file BaseType.cc.

    - -
    -
    - -

    ◆ val2buf()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    unsigned int libdap::Str::val2buf (void * val,
    bool reuse = false 
    )
    -
    -virtual
    -
    -

    Store the value referenced by val in this object. Even though the type of val is void*, this method assumes the type is string*. Note that the value is copied so the caller if free to throw away/reuse the actual parameter once this call has returned.

    -
    Parameters
    - - - -
    valA pointer to a C++ string object.
    reuseNot used by this version of the method.
    -
    -
    -
    Exceptions
    - - -
    IntenalErrif val is null.
    -
    -
    -
    Returns
    The width of the pointer.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 234 of file Str.cc.

    - -
    -
    - -

    ◆ value()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::Str::value () const
    -
    -virtual
    -
    -

    Get the value of this instance.

    Returns
    The value.
    - -

    Definition at line 264 of file Str.cc.

    - -
    -
    - -

    ◆ var() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::BaseType::var (const string & name = "",
    bool exact_match = true,
    btp_stack * s = 0 
    )
    -
    -virtualinherited
    -
    - -

    Returns a pointer to a member of a constructor class.

    -

    Returns a pointer to the contained variable in a composite class. The composite classes are those made up of aggregated simple data types. Array, Grid, and Structure are composite types, while Int and Float are simple types. This function is only used by composite classes. The BaseType implementation always returns null.

    -

    Several of the subclasses provide alternate access methods that make sense for that particular data type. For example, the Array class defines a *var(int i) method that returns the ith entry in the Array data, and the Structure provides a *var(Vars_iter) function using a pseudo-index to access the different members of the structure.

    -
    Parameters
    - - - - -
    nameThe name of the class member. Defaults to ""
    exact_matchTrue if only interested in variables whose full names match n exactly. If false, returns the first variable whose name matches name. For example, if name is x and point.x is a variable, then var("x", false) would return a BaseType pointer to point.x. If exact_match was true then name would need to be "point.x" for var to return that pointer. This feature simplifies constraint expressions for datasets which have complex, nested, constructor variables. Defaults to true.
    sRecord the path to name. Defaults to null, in which case it is not used.
    -
    -
    -
    Returns
    A pointer to the member named in the n argument. If no name is given, the function returns the first (only) variable. For example, an Array has only one variable, while a Structure can have many.
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 758 of file BaseType.cc.

    - -
    -
    - -

    ◆ var() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::BaseType::var (const string & name,
    btp_stack & s 
    )
    -
    -virtualinherited
    -
    -

    This version of var(...) searches for name and returns a pointer to the BaseType object if found. It uses the same search algorithm as BaseType::var(const string &, bool, btp_stack *) when exact_match is false. In addition to returning a pointer to the variable, it pushes onto s a BaseType pointer to each constructor type that ultimately contains name.

    -
    Note
    The BaseType implementation always returns null. There are no default values for the parameters. If var() is called w/o any params, the three parameter version will be used.
    -
    Deprecated:
    This method is deprecated because it tries first to use exact_match and, if that fails, then tries leaf_match. It's better to use the alternate form of var(...) and specify exactly what you'd like to do.
    -
    Returns
    A pointer to the named variable.
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 780 of file BaseType.cc.

    - -
    -
    - -

    ◆ width()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::Str::width (bool constrained = false) const
    -
    -virtual
    -
    - -

    How many bytes does this variable use Return the number of bytes of storage this variable uses. For scalar types, this is pretty simple (an int32 uses 4 bytes, etc.). For arrays and Constructors, it is a bit more complex. Note that a scalar String variable uses sizeof(String*) bytes, not the length of the string value. The width() of a String array returns the number of elements in the array times sizeof(String*).

    -
    Parameters
    - - -
    constrainedShould the current constraint be taken into account?
    -
    -
    -
    Returns
    Bytes of storage
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 129 of file Str.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1Str.js b/html/classlibdap_1_1Str.js deleted file mode 100644 index d33a75ea9..000000000 --- a/html/classlibdap_1_1Str.js +++ /dev/null @@ -1,78 +0,0 @@ -var classlibdap_1_1Str = -[ - [ "btp_stack", "classlibdap_1_1Str.html#ae9c6e71855b90a0e552713011c9ab81f", null ], - [ "Str", "classlibdap_1_1Str.html#a23a93ec403dc5cbb5264cdf47ea01c44", null ], - [ "Str", "classlibdap_1_1Str.html#a37e6b66c284c38052eb0bdebec18bba6", null ], - [ "~Str", "classlibdap_1_1Str.html#a673fe723d05512ef61d9967c6524847f", null ], - [ "Str", "classlibdap_1_1Str.html#a167bf89f44f4ca6daa132ecd7b0b70a5", null ], - [ "add_var", "classlibdap_1_1Str.html#adca3c2621c4a509537c18362005d7f7f", null ], - [ "add_var_nocopy", "classlibdap_1_1Str.html#aa1192360cea4dc516c822cd3e13dc723", null ], - [ "attributes", "classlibdap_1_1Str.html#a97452f06d2188eb838399a709246b5e9", null ], - [ "buf2val", "classlibdap_1_1Str.html#aa63cf0376fe71ceb030b48e7fdbad863", null ], - [ "check_semantics", "classlibdap_1_1Str.html#aec503abec2fd3090e7738c0a575491f8", null ], - [ "clear_local_data", "classlibdap_1_1Str.html#aaddb97a4efbe035f41deaf03c6e8683f", null ], - [ "compute_checksum", "classlibdap_1_1Str.html#ae98348772288b417561f39b445f48c9e", null ], - [ "d4_ops", "classlibdap_1_1Str.html#a051efecca32b2679bd0b1700453db617", null ], - [ "dataset", "classlibdap_1_1Str.html#a47521ce321a17e6ce217870cb6a1a7aa", null ], - [ "deserialize", "classlibdap_1_1Str.html#a2bafe2f1851b3a4cac6089b0e2282010", null ], - [ "deserialize", "classlibdap_1_1Str.html#afdeab29d40e99baa3d0def2f8f6d8b2e", null ], - [ "dump", "classlibdap_1_1Str.html#a9bae029c10a3824cd95d7e3fb2c11911", null ], - [ "element_count", "classlibdap_1_1Str.html#a5c2235737737b482bfa7536b8aeab810", null ], - [ "FQN", "classlibdap_1_1Str.html#a977cb954cc8f0d914d6f66ea0f48a9e3", null ], - [ "get_attr_table", "classlibdap_1_1Str.html#a1fcd9537c67e3bf88964b2656ff5bac1", null ], - [ "get_parent", "classlibdap_1_1Str.html#a3459cdaa239c33ce111ef360d8dc3017", null ], - [ "intern_data", "classlibdap_1_1Str.html#a722d33783aa0272d339b0301a4f77e59", null ], - [ "intern_data", "classlibdap_1_1Str.html#a1956e6ea90a745516f5372c859173433", null ], - [ "is_constructor_type", "classlibdap_1_1Str.html#a8b8490e0047c6da52945699a132008ea", null ], - [ "is_dap4", "classlibdap_1_1Str.html#a7f6835cb5e5589ab5dad3fb4813d3bea", null ], - [ "is_in_selection", "classlibdap_1_1Str.html#ae302ab2ec26e9fc5b575bf5d3d09aa5c", null ], - [ "is_simple_type", "classlibdap_1_1Str.html#aae57e5b270b3a015d40c8db10b9b5549", null ], - [ "is_vector_type", "classlibdap_1_1Str.html#a7107c76dbcab71015141142383b6d022", null ], - [ "length", "classlibdap_1_1Str.html#a6159e681dd78ac9d7660df1a734fd9d4", null ], - [ "m_duplicate", "classlibdap_1_1Str.html#a0c55b826c8c5dfe7a454dc670e859a41", null ], - [ "name", "classlibdap_1_1Str.html#a24c5d67823b3cff7f4245a993072a142", null ], - [ "operator=", "classlibdap_1_1Str.html#a00993d910a5bdb55dceee229bc0be336", null ], - [ "ops", "classlibdap_1_1Str.html#a5b74994fb52ceb3248c558015c4520a5", null ], - [ "print_dap4", "classlibdap_1_1Str.html#afcddbe441380b95c894510c02980b163", null ], - [ "print_decl", "classlibdap_1_1Str.html#a2d799fad93255d7f2b803562ae7a5784", null ], - [ "print_decl", "classlibdap_1_1Str.html#afd744b0ddeb04e7b173c9e83423ec572", null ], - [ "print_val", "classlibdap_1_1Str.html#a3fd0df896926273b491fa8b3dc040b20", null ], - [ "print_val", "classlibdap_1_1Str.html#a7984e46de9b21ef554b156dec40cc559", null ], - [ "print_xml", "classlibdap_1_1Str.html#a825820edee179550cfde3dfd4d274f2a", null ], - [ "print_xml", "classlibdap_1_1Str.html#a8bd2c7682edd48c64b210bdf247bdef7", null ], - [ "print_xml_writer", "classlibdap_1_1Str.html#a11554ff931528b243e9af8173d205b44", null ], - [ "ptr_duplicate", "classlibdap_1_1Str.html#a4e92b00a6a3a8056c80b2f4467646f42", null ], - [ "read", "classlibdap_1_1Str.html#a1da003c53f2e663223f603ab3fbd7c8e", null ], - [ "read_p", "classlibdap_1_1Str.html#a38ff819a432217c55db2e9071928d20c", null ], - [ "send_p", "classlibdap_1_1Str.html#a980c0013817836aa77ef74aeec7fb192", null ], - [ "serialize", "classlibdap_1_1Str.html#a1f71320548c6cf29b85d66de5998144d", null ], - [ "serialize", "classlibdap_1_1Str.html#af341f5722961ea40812d1fde478d1f79", null ], - [ "set_attr_table", "classlibdap_1_1Str.html#a572a1d76a75981abac83a4241e90c0fa", null ], - [ "set_attributes", "classlibdap_1_1Str.html#ad4dda4cf43dca838d3de183b8e01cd09", null ], - [ "set_attributes_nocopy", "classlibdap_1_1Str.html#afd0e5f87d19020f560d5c1ff8dd4d6a3", null ], - [ "set_in_selection", "classlibdap_1_1Str.html#a2bc036248cdaf1affac464170f32ad30", null ], - [ "set_is_dap4", "classlibdap_1_1Str.html#abca9ddaa9a1ada8447cbe7193e8e288a", null ], - [ "set_length", "classlibdap_1_1Str.html#a4fe343c1eeb6fb1d61ab030433651d90", null ], - [ "set_name", "classlibdap_1_1Str.html#a86504564f45a3e6748c6f1cc0ff4e9fa", null ], - [ "set_parent", "classlibdap_1_1Str.html#a5b6a39f6ce6594fa74f3fc899ac9a966", null ], - [ "set_read_p", "classlibdap_1_1Str.html#a4533905a450d2a7af32e7d5acd557676", null ], - [ "set_send_p", "classlibdap_1_1Str.html#aba7b27635c95b74536de18393133628e", null ], - [ "set_synthesized_p", "classlibdap_1_1Str.html#a595cb4059cff24f801a1b6da79bd2f9e", null ], - [ "set_type", "classlibdap_1_1Str.html#af74f8d1ef57c9fcca46f620f75d175a3", null ], - [ "set_value", "classlibdap_1_1Str.html#ac4083a612e46a9ef2d1cddc2d40a955f", null ], - [ "synthesized_p", "classlibdap_1_1Str.html#ae64e677da27249473cdba0b60cdbb90a", null ], - [ "toString", "classlibdap_1_1Str.html#a701eb3361f5b5628329ece019cd34519", null ], - [ "transfer_attributes", "classlibdap_1_1Str.html#add8e836c622042a339152a6c31e5bdfb", null ], - [ "transform_to_dap2", "classlibdap_1_1Str.html#affec8a11e9cc035d4b1e8fb9a87b2072", null ], - [ "transform_to_dap4", "classlibdap_1_1Str.html#adb03e2e1e40c3c888577c4666831a949", null ], - [ "type", "classlibdap_1_1Str.html#af8e803b20a7a7dc5f2ef351d7fac4a56", null ], - [ "type_name", "classlibdap_1_1Str.html#a18a42c8ec35cb5b15cd651a4152f8a2c", null ], - [ "val2buf", "classlibdap_1_1Str.html#add396308f45a14355b60c411ed33bf7a", null ], - [ "value", "classlibdap_1_1Str.html#a6a184f229c17879291dba8f7477db677", null ], - [ "var", "classlibdap_1_1Str.html#a4dc4fac1bb6083f6db645f37bfd59b85", null ], - [ "var", "classlibdap_1_1Str.html#adecfc442b5927c79933c7f71cfe03fd2", null ], - [ "width", "classlibdap_1_1Str.html#a636ebae6c75fb6dc5d929dc6db6f9558", null ], - [ "d_buf", "classlibdap_1_1Str.html#ae743e901dfa00288dace899faa78aafc", null ], - [ "d_in_selection", "classlibdap_1_1Str.html#a949a89714965d7afdcd1e3edc8b7f0d4", null ], - [ "d_is_synthesized", "classlibdap_1_1Str.html#a629e97e8eb7d285b54c9af8c1ec9a29a", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1Str__inherit__graph.map b/html/classlibdap_1_1Str__inherit__graph.map deleted file mode 100644 index 9d9ad2073..000000000 --- a/html/classlibdap_1_1Str__inherit__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/html/classlibdap_1_1Str__inherit__graph.md5 b/html/classlibdap_1_1Str__inherit__graph.md5 deleted file mode 100644 index fedc4d665..000000000 --- a/html/classlibdap_1_1Str__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -07f7693adb02b288fb456d8fe4efa244 \ No newline at end of file diff --git a/html/classlibdap_1_1Str__inherit__graph.png b/html/classlibdap_1_1Str__inherit__graph.png deleted file mode 100644 index 95a17246f4a325a3f242a848c61355f5540a8197..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68244 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 MQc9Aw;wFLr1<6b!`v3p{ diff --git a/html/classlibdap_1_1Structure-members.html b/html/classlibdap_1_1Structure-members.html deleted file mode 100644 index 169527d6d..000000000 --- a/html/classlibdap_1_1Structure-members.html +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::Structure Member List
    -
    -
    - -

    This is the complete list of members for libdap::Structure, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    add_var(BaseType *bt, Part part=nil)libdap::Constructorvirtual
    add_var_nocopy(BaseType *bt, Part part=nil)libdap::Constructorvirtual
    attributes()libdap::BaseTypevirtual
    BaseType(const string &n, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const string &n, const string &d, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const BaseType &copy_from)libdap::BaseType
    btp_stack typedef (defined in libdap::BaseType)libdap::BaseType
    buf2val(void **)libdap::Constructorinlinevirtual
    check_semantics(string &msg, bool all=false)libdap::Constructorvirtual
    clear_local_data()libdap::BaseTypeinlinevirtual
    compute_checksum(Crc32 &checksum)libdap::Constructorvirtual
    Constructor(const string &name, const Type &type, bool is_dap4=false) (defined in libdap::Constructor)libdap::Constructorprotected
    Constructor(const string &name, const string &d, const Type &type, bool is_dap4=false)libdap::Constructorprotected
    Constructor(const Constructor &copy_from) (defined in libdap::Constructor)libdap::Constructorprotected
    d4_ops(BaseType *b, int op)libdap::BaseTypevirtual
    d_in_selection (defined in libdap::BaseType)libdap::BaseTypeprotected
    d_is_synthesized (defined in libdap::BaseType)libdap::BaseTypeprotected
    d_vars (defined in libdap::Constructor)libdap::Constructorprotected
    dataset() constlibdap::BaseTypevirtual
    del_var(const string &name)libdap::Constructorvirtual
    del_var(Vars_iter i) (defined in libdap::Constructor)libdap::Constructorvirtual
    deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)libdap::Constructorvirtual
    deserialize(D4StreamUnMarshaller &um, DMR &dmr)libdap::Constructorvirtual
    dump(ostream &strm) constlibdap::Structurevirtual
    element_count(bool leaves=false)libdap::Constructorvirtual
    FQN() constlibdap::Constructorvirtual
    get_attr_table()libdap::BaseTypevirtual
    get_parent() constlibdap::BaseTypevirtual
    get_var_index(int i)libdap::Constructor
    get_vars_iter(int i)libdap::Constructor
    intern_data(ConstraintEvaluator &eval, DDS &dds)libdap::Constructorvirtual
    intern_data()libdap::Constructorvirtual
    is_constructor_type() constlibdap::BaseTypevirtual
    is_dap4() const (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    is_in_selection()libdap::BaseTypevirtual
    is_linear()libdap::Structurevirtual
    is_simple_type() constlibdap::BaseTypevirtual
    is_vector_type() constlibdap::BaseTypevirtual
    length() constlibdap::BaseTypeinlinevirtual
    m_duplicate(const Constructor &s) (defined in libdap::Constructor)libdap::Constructorprotected
    libdap::BaseType::m_duplicate(const BaseType &bt)libdap::BaseTypeprotected
    m_exact_match(const string &name, btp_stack *s=0) (defined in libdap::Constructor)libdap::Constructorprotected
    m_leaf_match(const string &name, btp_stack *s=0) (defined in libdap::Constructor)libdap::Constructorprotected
    make_dropped_vars_attr_table(vector< BaseType *> *dropped_vars) (defined in libdap::Constructor)libdap::Constructorstatic
    name() constlibdap::BaseTypevirtual
    operator=(const Structure &rhs) (defined in libdap::Structure)libdap::Structure
    operator=(const Constructor &rhs) (defined in libdap::Constructor)libdap::Constructor
    operator=(const BaseType &rhs) (defined in libdap::BaseType)libdap::BaseType
    ops(BaseType *b, int op)libdap::BaseTypevirtual
    print_dap4(XMLWriter &xml, bool constrained=false)libdap::Constructorvirtual
    print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::Constructorvirtual
    print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::Constructorvirtual
    print_val(FILE *out, string space="", bool print_decl_p=true)libdap::Constructorvirtual
    print_val(ostream &out, string space="", bool print_decl_p=true)libdap::Constructorvirtual
    print_xml(ostream &out, string space=" ", bool constrained=false)libdap::Constructorvirtual
    print_xml(FILE *out, string space=" ", bool constrained=false)libdap::Constructorvirtual
    print_xml_writer(XMLWriter &xml, bool constrained=false)libdap::Constructorvirtual
    ptr_duplicate()libdap::Structurevirtual
    read()libdap::Constructorvirtual
    read_p()libdap::BaseTypevirtual
    send_p()libdap::BaseTypevirtual
    serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)libdap::Constructorvirtual
    serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)libdap::Constructorvirtual
    set_attr_table(const AttrTable &at)libdap::BaseTypevirtual
    set_attributes(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_attributes_nocopy(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_in_selection(bool state)libdap::Constructorvirtual
    set_is_dap4(const bool v) (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    set_leaf_sequence(int level=1)libdap::Structurevirtual
    set_length(int)libdap::BaseTypeinlinevirtual
    set_name(const string &n)libdap::BaseTypevirtual
    set_parent(BaseType *parent)libdap::BaseTypevirtual
    set_read_p(bool state)libdap::Constructorvirtual
    set_send_p(bool state)libdap::Constructorvirtual
    set_synthesized_p(bool state)libdap::BaseTypevirtual
    set_type(const Type &t)libdap::BaseTypevirtual
    Structure(const string &n)libdap::Structure
    Structure(const string &n, const string &d)libdap::Structure
    Structure(const Structure &rhs)libdap::Structure
    synthesized_p()libdap::BaseTypevirtual
    toString()libdap::BaseTypevirtual
    transfer_attributes(AttrTable *at)libdap::Constructorvirtual
    transform_to_dap2(AttrTable *parent_attr_table)libdap::Structurevirtual
    transform_to_dap4(D4Group *root, Constructor *container)libdap::Structurevirtual
    type() constlibdap::BaseTypevirtual
    type_name() constlibdap::BaseTypevirtual
    val2buf(void *, bool)libdap::Constructorinlinevirtual
    var(const string &name, bool exact_match=true, btp_stack *s=0)libdap::Constructorvirtual
    var(const string &n, btp_stack &s)libdap::Constructorvirtual
    var_begin()libdap::Constructor
    var_end()libdap::Constructor
    var_rbegin()libdap::Constructor
    var_rend()libdap::Constructor
    Vars_citer typedef (defined in libdap::Constructor)libdap::Constructor
    Vars_iter typedef (defined in libdap::Constructor)libdap::Constructor
    Vars_riter typedef (defined in libdap::Constructor)libdap::Constructor
    width(bool constrained=false) constlibdap::Constructorvirtual
    ~BaseType() (defined in libdap::BaseType)libdap::BaseTypevirtual
    ~Constructor() (defined in libdap::Constructor)libdap::Constructorvirtual
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    ~Structure() (defined in libdap::Structure)libdap::Structurevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1Structure.html b/html/classlibdap_1_1Structure.html deleted file mode 100644 index 5b3bbb96b..000000000 --- a/html/classlibdap_1_1Structure.html +++ /dev/null @@ -1,3295 +0,0 @@ - - - - - - - -libdap: libdap::Structure Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    - -

    Holds a structure (aggregate) type. - More...

    - -

    #include <Structure.h>

    -
    -Inheritance diagram for libdap::Structure:
    -
    -
    Inheritance graph
    - - - - - -
    - - - - - - - - - - -

    -Public Types

    -typedef stack< BaseType * > btp_stack
     
    -typedef std::vector< BaseType * >::const_iterator Vars_citer
     
    -typedef std::vector< BaseType * >::iterator Vars_iter
     
    -typedef std::vector< BaseType * >::reverse_iterator Vars_riter
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual void add_var (BaseType *bt, Part part=nil)
     
    virtual void add_var_nocopy (BaseType *bt, Part part=nil)
     
    virtual unsigned int buf2val (void **)
     Reads the class data. More...
     
    virtual bool check_semantics (string &msg, bool all=false)
     Compare an object's current state with the semantics of its type. More...
     
    virtual void clear_local_data ()
     
    virtual void compute_checksum (Crc32 &checksum)
     include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum. More...
     
    virtual bool d4_ops (BaseType *b, int op)
     Evaluator a relop for DAP4. More...
     
    virtual string dataset () const
     Returns the name of the dataset used to create this instance. More...
     
    virtual void del_var (const string &name)
     
    -virtual void del_var (Vars_iter i)
     
    virtual bool deserialize (UnMarshaller &um, DDS *dds, bool reuse=false)
     Receive data from the net. More...
     
    virtual void deserialize (D4StreamUnMarshaller &um, DMR &dmr)
     
    virtual void dump (ostream &strm) const
     dumps information about this object More...
     
    virtual int element_count (bool leaves=false)
     Count the members of constructor types. More...
     
    virtual std::string FQN () const
     
    virtual AttrTableget_attr_table ()
     
    virtual BaseTypeget_parent () const
     
    BaseTypeget_var_index (int i)
     
    Vars_iter get_vars_iter (int i)
     
    virtual void intern_data (ConstraintEvaluator &eval, DDS &dds)
     
    virtual void intern_data ()
     Read data into this variable. More...
     
    virtual bool is_constructor_type () const
     Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable. More...
     
    -virtual bool is_dap4 () const
     
    virtual bool is_in_selection ()
     Is this variable part of the current selection? More...
     
    virtual bool is_linear ()
     Check to see whether this variable can be printed simply. More...
     
    virtual bool is_simple_type () const
     Returns true if the instance is a numeric, string or URL type variable. More...
     
    virtual bool is_vector_type () const
     Returns true if the instance is a vector (i.e., array) type variable. More...
     
    virtual int length () const
     How many elements are in this variable. More...
     
    virtual string name () const
     Returns the name of the class instance. More...
     
    -Structureoperator= (const Structure &rhs)
     
    virtual bool ops (BaseType *b, int op)
     Evaluate relational operators. More...
     
    void print_dap4 (XMLWriter &xml, bool constrained=false)
     
    virtual void print_decl (ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_decl (FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_val (FILE *out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_val (ostream &out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_xml (ostream &out, string space=" ", bool constrained=false)
     
    virtual void print_xml (FILE *out, string space=" ", bool constrained=false)
     
    virtual void print_xml_writer (XMLWriter &xml, bool constrained=false)
     
    virtual BaseTypeptr_duplicate ()
     
    virtual bool read ()
     simple implementation of read that iterates through vars and calls read on them More...
     
    virtual bool read_p ()
     Has this variable been read? More...
     
    virtual bool send_p ()
     Should this variable be sent? More...
     
    virtual bool serialize (ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
     Move data to the net, then remove them from the object. More...
     
    virtual void serialize (D4StreamMarshaller &m, DMR &dmr, bool filter=false)
     Serialize a Constructor. More...
     
    virtual void set_attr_table (const AttrTable &at)
     
    virtual void set_in_selection (bool state)
     Set the in_selection property. More...
     
    -virtual void set_is_dap4 (const bool v)
     
    virtual void set_leaf_sequence (int level=1)
     Traverse Structure, set Sequence leaf nodes. More...
     
    virtual void set_length (int)
     Set the number of elements for this variable. More...
     
    virtual void set_name (const string &n)
     Sets the name of the class instance. More...
     
    virtual void set_parent (BaseType *parent)
     
    virtual void set_read_p (bool state)
     Sets the value of the read_p property. More...
     
    virtual void set_send_p (bool state)
     
    virtual void set_synthesized_p (bool state)
     
    virtual void set_type (const Type &t)
     Sets the type of the class instance. More...
     
     Structure (const string &n)
     
     Structure (const string &n, const string &d)
     
     Structure (const Structure &rhs)
     
    virtual bool synthesized_p ()
     
    virtual string toString ()
     
    virtual void transfer_attributes (AttrTable *at)
     
    virtual vector< BaseType * > * transform_to_dap2 (AttrTable *parent_attr_table)
     DAP4 to DAP2 transform. More...
     
    virtual void transform_to_dap4 (D4Group *root, Constructor *container)
     
    virtual Type type () const
     Returns the type of the class instance. More...
     
    virtual string type_name () const
     Returns the type of the class instance as a string. More...
     
    virtual unsigned int val2buf (void *, bool)
     Loads class data. More...
     
    virtual BaseTypevar (const string &name, bool exact_match=true, btp_stack *s=0)
     btp_stack no longer needed; use back pointers (BaseType::get_parent()) More...
     
    virtual BaseTypevar (const string &n, btp_stack &s)
     
    Vars_iter var_begin ()
     
    Vars_iter var_end ()
     
    Vars_riter var_rbegin ()
     
    Vars_riter var_rend ()
     
    virtual unsigned int width (bool constrained=false) const
     
    virtual D4Attributesattributes ()
     
    -virtual void set_attributes (D4Attributes *)
     
    -virtual void set_attributes_nocopy (D4Attributes *)
     
    - - - -

    -Static Public Member Functions

    -static AttrTablemake_dropped_vars_attr_table (vector< BaseType *> *dropped_vars)
     
    - - - - - - - - - - -

    -Protected Member Functions

    -void m_duplicate (const Constructor &s)
     
    void m_duplicate (const BaseType &bt)
     Perform a deep copy. More...
     
    -BaseTypem_exact_match (const string &name, btp_stack *s=0)
     
    -BaseTypem_leaf_match (const string &name, btp_stack *s=0)
     
    - - - - - - - -

    -Protected Attributes

    -bool d_in_selection
     
    -bool d_is_synthesized
     
    -std::vector< BaseType * > d_vars
     
    -

    Detailed Description

    -

    Holds a structure (aggregate) type.

    -

    This data type is used to hold a collection of related data types, in a manner roughly corresponding to a C structure. The member types can be simple or compound types, and can include other Structures.

    -

    The DAP2 structure is defined as a singly-linked list. This means that Structure elements can be accessed either by name, with the var() function, or by their position in the list, either with the overloaded version of var(), or the combination of the first_var() and next_var() functions.

    -

    The val2buf() and buf2val() functions only return the size of the structure. To read parts of a DAP2 Structure into an application program, use the buf2val() function of the element of the Structure in question.

    -

    Note that the predicate-setting functions set_send_p() and set_read_p() set their flags for the Structure as well as for each of the Structure's member elements.

    -

    Similar to C, you can refer to members of Structure elements with a .'' notation. For example, if the Structure has a member Structure calledTom'' and Tom has a member Float32 called shoe_size'', then you can refer to Tom's shoe size as Tom.shoe_size''.

    - -

    Definition at line 83 of file Structure.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ Structure() [1/3]

    - -
    -
    - - - - - - - - -
    libdap::Structure::Structure (const string & n)
    -
    -

    The Structure constructor requires only the name of the variable to be created. The name may be omitted, which will create a nameless variable. This may be adequate for some applications.

    -
    Parameters
    - - -
    nA string containing the name of the variable to be created.
    -
    -
    - -

    Definition at line 110 of file Structure.cc.

    - -
    -
    - -

    ◆ Structure() [2/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    libdap::Structure::Structure (const string & n,
    const string & d 
    )
    -
    -

    The Structure server-side constructor requires the name of the variable to be created and the dataset name from which this variable is being created. Used on server-side handlers.

    -
    Parameters
    - - - -
    nA string containing the name of the variable to be created.
    dA string containing the name of the dataset from which this variable is being created.
    -
    -
    - -

    Definition at line 122 of file Structure.cc.

    - -
    -
    - -

    ◆ Structure() [3/3]

    - -
    -
    - - - - - - - - -
    libdap::Structure::Structure (const Structurerhs)
    -
    -

    The Structure copy constructor.

    - -

    Definition at line 127 of file Structure.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ add_var()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::add_var (BaseTypebt,
    Part part = nil 
    )
    -
    -virtualinherited
    -
    -

    Adds an element to a Constructor.

    -
    Parameters
    - - - -
    btA pointer to the variable to add to this Constructor.
    partNot used by this class, defaults to nil
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 407 of file Constructor.cc.

    - -
    -
    - -

    ◆ add_var_nocopy()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::add_var_nocopy (BaseTypebt,
    Part part = nil 
    )
    -
    -virtualinherited
    -
    -

    Adds an element to a Constructor.

    -
    Parameters
    - - - -
    btA pointer to thee variable to add to this Constructor.
    partNot used by this class, defaults to nil
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 432 of file Constructor.cc.

    - -
    -
    - -

    ◆ attributes()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4Attributes * libdap::BaseType::attributes ()
    -
    -virtualinherited
    -
    -

    DAP4 Attribute methods

    - -

    Definition at line 599 of file BaseType.cc.

    - -
    -
    - -

    ◆ buf2val()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual unsigned int libdap::Constructor::buf2val (void ** val)
    -
    -inlinevirtualinherited
    -
    - -

    Reads the class data.

    -

    Reads the class data into the memory referenced by val. The caller should either allocate enough storage to val to hold the class data or set *val to null. If *val is NULL, memory will be allocated by this function with new(). If the memory is allocated this way, the caller is responsible for deallocating that memory. Array and values for simple types are stored as C would store an array.

    -
    Deprecated:
    Use value() in the leaf classes.
    -
    Parameters
    - - -
    valA pointer to a pointer to the memory into which the class data will be copied. If the value pointed to is NULL, memory will be allocated to hold the data, and the pointer value modified accordingly. The calling program is responsible for deallocating the memory references by this pointer.
    -
    -
    -
    Returns
    The size (in bytes) of the information copied to val.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 118 of file Constructor.h.

    - -
    -
    - -

    ◆ check_semantics()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::Constructor::check_semantics (string & msg,
    bool all = false 
    )
    -
    -virtualinherited
    -
    - -

    Compare an object's current state with the semantics of its type.

    -

    This function checks the class instance for internal consistency. This is important to check for complex constructor classes. For BaseType, an object is semantically correct if it has both a non-null name and type.

    -

    For example, an Int32 instance would return FALSE if it had no name or no type defined. A Grid instance might return FALSE for more complex reasons, such as having Map arrays of the wrong size or shape.

    -

    This function is used by the DDS class, and will rarely, if ever, be explicitly called by a DODS application program. A variable must pass this test before it is sent, but there may be many other stages in a retrieve operation where it would fail.

    -
    Returns
    Returns FALSE when the current state violates some aspect of the type semantics, TRUE otherwise.
    -
    Parameters
    - - - -
    msgA returned string, containing a message indicating the source of any problem.
    allFor complex constructor types (Grid, Sequence, Structure), this flag indicates whether to check the semantics of the member variables, too.
    -
    -
    -
    See also
    DDS::check_semantics
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 792 of file Constructor.cc.

    - -
    -
    - -

    ◆ clear_local_data()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual void libdap::BaseType::clear_local_data ()
    -
    -inlinevirtualinherited
    -
    -

    Remove any read or set data in the private data of the variable, setting read_p() to false. Used to clear any dynamically allocated storage that holds (potentially large) data. For the simple types, this no-op version is all that's needed. Vector and some other classes define a special version and have serialize() implementations that call it to free data as soon as possible after sending it.

    -
    Note
    Added 7/5/15 jhrg
    -
    -Any specialization of this should make sure to reset the read_p property.
    - -

    Reimplemented in libdap::Sequence, libdap::Vector, libdap::D4Sequence, and libdap::D4Opaque.

    - -

    Definition at line 179 of file BaseType.h.

    - -
    -
    - -

    ◆ compute_checksum()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::compute_checksum (Crc32checksum)
    -
    -virtualinherited
    -
    - -

    include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum.

    -
    Parameters
    - - -
    checksumA Crc32 instance that holds the current checksum.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 550 of file Constructor.cc.

    - -
    -
    - -

    ◆ d4_ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::d4_ops (BaseTypeb,
    int op 
    )
    -
    -virtualinherited
    -
    - -

    Evaluator a relop for DAP4.

    -

    This method is used by the filter expression evaluation code in DAP4. Each of the 'data type' classes that support relops must overload this method. In an expression of the form arg1 op arg2, this object is arg1, the parameter 'b' is arg2 and op is the relational operator.

    -
    Note
    I used the same relop codes for DAP4 as in the DAP2 parser/scanner which makes for some coupling between them, but cuts way down on the duplication of the evaluator logic, which is somewhat involved.
    -
    Parameters
    - - - -
    bThe second argument in the relational expression
    opThe infix relational operator
    -
    -
    -
    Returns
    True if the expression is true, False otherwise.
    - -

    Reimplemented in libdap::Str, libdap::Int32, libdap::Float32, libdap::Byte, libdap::Float64, libdap::Int16, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 1282 of file BaseType.cc.

    - -
    -
    - -

    ◆ dataset()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::dataset () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the dataset used to create this instance.

    -

    A dataset from which the data is to be read. The meaning of this string will vary among different types of data sources. It may be the name of a data file or an identifier used to read data from a relational database.

    - -

    Definition at line 358 of file BaseType.cc.

    - -
    -
    - -

    ◆ del_var()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::del_var (const string & n)
    -
    -virtualinherited
    -
    -

    Remove an element from a Constructor.

    -
    Parameters
    - - -
    nname of the variable to remove
    -
    -
    - -

    Definition at line 448 of file Constructor.cc.

    - -
    -
    - -

    ◆ deserialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::Constructor::deserialize (UnMarshallerum,
    DDSdds,
    bool reuse = false 
    )
    -
    -virtualinherited
    -
    - -

    Receive data from the net.

    -

    Receives data from the network connection identified by the source parameter. The data is put into the class data buffer according to the input dds.

    -

    This function is only used on the client side of the DODS client/server connection.

    -
    Parameters
    - - - - -
    umAn UnMarshaller that knows how to deserialize data types
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure. This would have been received from the server in an earlier transmission.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect.
    -
    -
    -
    Returns
    Always returns TRUE.
    -
    Exceptions
    - - -
    Errorwhen a problem reading from the UnMarshaller is found.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Sequence, and libdap::D4Sequence.

    - -

    Definition at line 540 of file Constructor.cc.

    - -
    -
    - -

    ◆ deserialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::deserialize (D4StreamUnMarshallerum,
    DMRdmr 
    )
    -
    -virtualinherited
    -
    -

    The DAP4 deserialization method.

    Parameters
    - - - -
    um
    dmr
    -
    -
    -
    Exceptions
    - - -
    Erroror InternalErr
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Sequence, and libdap::D4Group.

    - -

    Definition at line 609 of file Constructor.cc.

    - -
    -
    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Structure::dump (ostream & strm) const
    -
    -virtual
    -
    - -

    dumps information about this object

    -

    Displays the pointer value of this instance and information about this instance.

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the information to
    -
    -
    -
    Returns
    void
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 704 of file Structure.cc.

    - -
    -
    - -

    ◆ element_count()

    - -
    -
    - - - - - -
    - - - - - - - - -
    int libdap::Constructor::element_count (bool leaves = false)
    -
    -virtualinherited
    -
    - -

    Count the members of constructor types.

    -

    Return a count of the total number of variables in this variable. This is used to count the number of variables held by a constructor variable - for simple type and vector variables it always returns 1.

    -

    For compound data types, there are two ways to count members. You can count the members, or you can count the simple members and add that to the count of the compound members. For example, if a Structure contains an Int32 and another Structure that itself contains two Int32 members, the element count of the top-level structure could be two (one Int32 and one Structure) or three (one Int32 by itself and two Int32's in the subsidiary Structure). Use the leaves parameter to control which kind of counting you desire.

    -
    Returns
    Returns 1 for simple types. For compound members, the count depends on the leaves argument.
    -
    Parameters
    - - -
    leavesThis parameter is only relevant if the object contains other compound data types. If FALSE, the function counts only the data variables mentioned in the object's declaration. If TRUE, it counts the simple members, and adds that to the sum of the counts for the compound members. This parameter has no effect for simple type variables.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 194 of file Constructor.cc.

    - -
    -
    - -

    ◆ FQN()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::Constructor::FQN () const
    -
    -virtualinherited
    -
    -

    Return the FQN for this variable. This will include the D4 Group component of the name.

    -
    Returns
    The FQN in a string
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Group.

    - -

    Definition at line 181 of file Constructor.cc.

    - -
    -
    - -

    ◆ get_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - -
    AttrTable & libdap::BaseType::get_attr_table ()
    -
    -virtualinherited
    -
    -

    Get this variable's AttrTable. It's generally a bad idea to return a reference to a contained object, but in this case it seems that building an interface inside BaseType is overkill.

    -

    Use the AttrTable methods to manipulate the table.

    - -

    Definition at line 582 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_parent()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::BaseType::get_parent () const
    -
    -virtualinherited
    -
    -

    Return a pointer to the Constructor or Vector which holds (contains) this variable. If this variable is at the top level, this method returns null.

    -
    Returns
    A BaseType pointer to the variable's parent.
    - -

    Definition at line 751 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_var_index()

    - -
    -
    - - - - - -
    - - - - - - - - -
    BaseType * libdap::Constructor::get_var_index (int i)
    -
    -inherited
    -
    -

    Return the BaseType pointer for the ith variable.

    Parameters
    - - -
    iThis index
    -
    -
    -
    Returns
    The corresponding BaseType*.
    - -

    Definition at line 397 of file Constructor.cc.

    - -
    -
    - -

    ◆ get_vars_iter()

    - -
    -
    - - - - - -
    - - - - - - - - -
    Constructor::Vars_iter libdap::Constructor::get_vars_iter (int i)
    -
    -inherited
    -
    -

    Return the iterator for the ith variable.

    Parameters
    - - -
    ithe index
    -
    -
    -
    Returns
    The corresponding Vars_iter
    - -

    Definition at line 388 of file Constructor.cc.

    - -
    -
    - -

    ◆ intern_data() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::intern_data (ConstraintEvaluatoreval,
    DDSdds 
    )
    -
    -virtualinherited
    -
    -

    Similar to using serialize() and deserialize() together in one object. Data are read as for serialize and those values are stored in the objects as deserialize() does but does not write and then read data to/from a stream.

    -

    This method is defined by the various data type classes. It calls the read() abstract method. Unlike serialize(), this method does not clear the memory use to hold the data values, so the caller should make sure to delete the DDS or the variable as soon as possible.

    -
    Parameters
    - - - -
    evalUse this as the constraint expression evaluator.
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Sequence, and libdap::D4Sequence.

    - -

    Definition at line 490 of file Constructor.cc.

    - -
    -
    - -

    ◆ intern_data() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::Constructor::intern_data ()
    -
    -virtualinherited
    -
    - -

    Read data into this variable.

    -
    Parameters
    - - - -
    evalEvaluator for a constraint expression
    dmrDMR for the whole dataset
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Sequence, and libdap::D4Group.

    - -

    Definition at line 556 of file Constructor.cc.

    - -
    -
    - -

    ◆ is_constructor_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_constructor_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable.

    -
    Returns
    True if the instance is a Structure, Sequence or Grid, False otherwise.
    - -

    Definition at line 412 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_in_selection ()
    -
    -virtualinherited
    -
    - -

    Is this variable part of the current selection?

    -

    Does this variable appear in either the selection part or as a function argument in the current constrain expression. If this property is set (true) then implementations of the read() method should read this variable.

    -
    Note
    This method does not check, nor does it know about the semantics of, string arguments passed to functions. Those functions might include variable names in strings; they are responsible for reading those variables. See the grid (func_grid_select()) for an example.
    -
    See also
    BaseType::read()
    - -

    Definition at line 703 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_linear()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::Structure::is_linear ()
    -
    -virtual
    -
    - -

    Check to see whether this variable can be printed simply.

    -

    True if the instance can be flattened and printed as a single table of values. For Arrays and Grids this is always false. For Structures and Sequences the conditions are more complex. The implementation provided by this class always returns false. Other classes should override this implementation.

    -
    Todo:
    Change the name to is_flattenable or something like that. 05/16/03 jhrg
    -
    Returns
    True if the instance can be printed as a single table of values, false otherwise.
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 279 of file Structure.cc.

    - -
    -
    - -

    ◆ is_simple_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_simple_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a numeric, string or URL type variable.

    -
    Returns
    True if the instance is a scalar numeric, String or URL variable, False otherwise. Arrays (even of simple types) return False.
    -
    See also
    is_vector_type()
    - -

    Definition at line 393 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_vector_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_vector_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a vector (i.e., array) type variable.

    -
    Returns
    True if the instance is an Array, False otherwise.
    - -

    Definition at line 402 of file BaseType.cc.

    - -
    -
    - -

    ◆ length()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual int libdap::BaseType::length () const
    -
    -inlinevirtualinherited
    -
    - -

    How many elements are in this variable.

    -
    Todo:
    change the return type to int64_t
    -
    Returns
    The number of elements; 1 for scalars
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, libdap::Str, and libdap::D4Opaque.

    - -

    Definition at line 207 of file BaseType.h.

    - -
    -
    - -

    ◆ m_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::m_duplicate (const BaseTypebt)
    -
    -protectedinherited
    -
    - -

    Perform a deep copy.

    -

    Perform a deep copy. Copies the values of bt into *this. Pointers are dereferenced and their values are copied into a newly allocated instance.

    -
    Parameters
    - - -
    btThe source object.
    -
    -
    - -

    Definition at line 86 of file BaseType.cc.

    - -
    -
    - -

    ◆ name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::name () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the class instance.

    - -

    Definition at line 320 of file BaseType.cc.

    - -
    -
    - -

    ◆ ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::ops (BaseTypeb,
    int op 
    )
    -
    -virtualinherited
    -
    - -

    Evaluate relational operators.

    -

    This method contains the relational operators used by the constraint expression evaluator in the DDS class. Each class that wants to be able to evaluate relational expressions must overload this function. The implementation in BaseType throws an InternalErr exception. The DAP library classes Byte, ..., Url provide specializations of this method. It is not meaningful for classes such as Array because relational expressions using Array are not supported.

    -

    The op argument refers to a table generated by bison from the constraint expression parser. Use statements like the following to correctly interpret its value:

    -
    switch (op) {
    -    case EQUAL: return i1 == i2;
    -    case NOT_EQUAL: return i1 != i2;
    -    case GREATER: return i1 > i2;
    -    case GREATER_EQL: return i1 >= i2;
    -    case LESS: return i1 < i2;
    -    case LESS_EQL: return i1 <= i2;
    -    case REGEXP: throw Error("Regular expressions are not supported for integer values");
    -    default: throw Error("Unknown operator");
    -}
    -

    This function is used by the constraint expression evaluator.

    -
    Parameters
    - - - -
    bCompare the value of this instance with b.
    opAn integer index indicating which relational operator is implied. Choose one from the following: EQUAL, NOT_EQUAL, GREATER, GREATER_EQL, LESS, LESS_EQL, and REGEXP.
    -
    -
    -
    Returns
    The boolean value of the comparison.
    -
    See also
    BaseType::d4_ops(BaseType *, int)
    - -

    Reimplemented in libdap::D4Enum, libdap::Str, libdap::Int32, libdap::Float32, libdap::Byte, libdap::Float64, libdap::UInt32, libdap::D4Opaque, libdap::Int16, libdap::UInt16, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 1256 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_dap4 (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the DAP4 XML representation for this variable. This method is used to build the DAP4 DMR response object.

    -
    Parameters
    - - - -
    xmlAn XMLWriter that will do the serialization
    constrainedTrue if the response should show the variables subject to the current constraint expression.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Group.

    - -

    Definition at line 768 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_decl() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_decl (ostream & out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 626 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_decl() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_decl (FILE * out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 617 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_val() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_val (FILE * out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtualinherited
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output stream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Sequence, and libdap::Grid.

    - -

    Definition at line 650 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_val() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_val (ostream & out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtualinherited
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output ostream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Reimplemented in libdap::D4Sequence, libdap::Sequence, and libdap::Grid.

    - -

    Definition at line 658 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_xml() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_xml (ostream & out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -
    Deprecated:
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 695 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_xml() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_xml (FILE * out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -
    Deprecated:
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 684 of file Constructor.cc.

    - -
    -
    - -

    ◆ print_xml_writer()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::print_xml_writer (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 718 of file Constructor.cc.

    - -
    -
    - -

    ◆ ptr_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::Structure::ptr_duplicate ()
    -
    -virtual
    -
    -

    Clone this instance. Allocate a new instance and copy *this into it. This method must perform a deep copy.

    @note This method should \e not copy data values, but must copy all
    -other fields in the object.
    -
    Returns
    A newly allocated copy of this.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 138 of file Structure.cc.

    - -
    -
    - -

    ◆ read()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::Constructor::read ()
    -
    -virtualinherited
    -
    - -

    simple implementation of read that iterates through vars and calls read on them

    -
    Returns
    returns false to signify all has been read
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 476 of file Constructor.cc.

    - -
    -
    - -

    ◆ read_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read_p ()
    -
    -virtualinherited
    -
    - -

    Has this variable been read?

    -

    Returns true if the value(s) for this variable have been read from the data source, otherwise returns false. This method is used to determine when values need to be read using the read() method. When read_p() returns true, this library assumes that buf2val() (and other methods such as get_vec()) can be used to access the value(s) of a variable.

    -
    Returns
    True if the variable's value(s) have been read, false otherwise.
    - -

    Definition at line 480 of file BaseType.cc.

    - -
    -
    - -

    ◆ send_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::send_p ()
    -
    -virtualinherited
    -
    - -

    Should this variable be sent?

    -

    Returns the state of the send_p property. If true, this variable should be sent to the client, if false, it should not. If no constraint expression (CE) has been evaluated, this property is true for all variables in a data source (i.e., for all the variables listed in a DDS). If a CE has been evaluated, this property is true only for those variables listed in the projection part of the CE.

    -
    Returns
    True if the variable should be sent to the client, false otherwise.
    - -

    Definition at line 554 of file BaseType.cc.

    - -
    -
    - -

    ◆ serialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::Constructor::serialize (ConstraintEvaluatoreval,
    DDSdds,
    Marshallerm,
    bool ce_eval = true 
    )
    -
    -virtualinherited
    -
    - -

    Move data to the net, then remove them from the object.

    -

    Sends the data from the indicated (local) dataset through the connection identified by the Marshaller parameter. If the data is not already incorporated into the DDS object, read the data from the dataset. Once the data are sent (written to the Marshaller), they are deleted from the object and the object state is reset so that they will be read again if the read() method is called.

    -

    This function is only used on the server side of the client/server connection, and is generally only called from the ResponseBuilder functions. It has no BaseType implementation; each datatype child class supplies its own implementation.

    @param eval Use this as the constraint expression evaluator.
    -
    Parameters
    - - - - -
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    mA marshaller used to serialize data types
    ce_evalA boolean value indicating whether to evaluate the DODS constraint expression that may accompany this dataset. The constraint expression is stored in the dds.
    -
    -
    -
    Returns
    This method always returns true. Older versions used the return value to signal success or failure.
    -
    Note
    We changed the default behavior of this method so that it calls BaseType::clear_local_data() once the values are sent. This, combined with the behavior that read() is called by this method just before data are sent, means that data for any given variable remain in memory for the shortest time possible. Furthermore, since variables are serialized one at a time, no more than one variable's data will be in memory at any given time when using the default behavior. Some code - code that uses intern_data() or server functions - might alter this default behavior. Only Array (i.e. Vector), Sequence, D4Sequence and D4Opaque types actually hold data in dynamically allocated memory, so sonly those types have the new/changed behavior. This change was made on 7/5/15.
    -
    Exceptions
    - - - -
    InternalErr.
    Error.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Sequence, and libdap::D4Sequence.

    - -

    Definition at line 504 of file Constructor.cc.

    - -
    -
    - -

    ◆ serialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Constructor::serialize (D4StreamMarshallerm,
    DMRdmr,
    bool filter = false 
    )
    -
    -virtualinherited
    -
    - -

    Serialize a Constructor.

    -
    Todo:
    See notebook for 8/21/14
    -
    Parameters
    - - - - - -
    m
    dmrUnused
    evalUnused
    filterUnused
    -
    -
    -
    Exceptions
    - - -
    Erroris thrown if the value needs to be read and that operation fails.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Sequence, and libdap::D4Group.

    - -

    Definition at line 578 of file Constructor.cc.

    - -
    -
    - -

    ◆ set_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_attr_table (const AttrTableat)
    -
    -virtualinherited
    -
    -

    Set this variable's attribute table.

    Parameters
    - - -
    atSource of the attributes.
    -
    -
    - -

    Definition at line 590 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::set_in_selection (bool state)
    -
    -virtualinherited
    -
    - -

    Set the in_selection property.

    -

    Set the in_selection property for this variable and all of its children.

    -
    Parameters
    - - -
    stateSet the property value to state.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 834 of file Constructor.cc.

    - -
    -
    - -

    ◆ set_leaf_sequence()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Structure::set_leaf_sequence (int level = 1)
    -
    -virtual
    -
    - -

    Traverse Structure, set Sequence leaf nodes.

    - -

    Definition at line 331 of file Structure.cc.

    - -
    -
    - -

    ◆ set_length()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::BaseType::set_length (int )
    -
    -inlinevirtualinherited
    -
    - -

    Set the number of elements for this variable.

    -
    Todo:
    change param type to int64_t
    -
    Parameters
    - - -
    lThe number of elements
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, and libdap::Vector.

    - -

    Definition at line 214 of file BaseType.h.

    - -
    -
    - -

    ◆ set_name()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_name (const string & n)
    -
    -virtualinherited
    -
    - -

    Sets the name of the class instance.

    - -

    Reimplemented in libdap::Vector.

    - -

    Definition at line 344 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_parent()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_parent (BaseTypeparent)
    -
    -virtualinherited
    -
    -

    Set the parent property for this variable.

    -
    Note
    Added ability to set parent to null. 10/19/12 jhrg
    -
    Parameters
    - - -
    parentPointer to the Constructor of Vector parent variable or null if the variable has no parent (if it is at the top-level of a DAP2/3 DDS).
    -
    -
    -
    Exceptions
    - - -
    InternalErrthrown if called with anything other than a Constructor, Vector or Null.
    -
    -
    - -

    Definition at line 733 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_read_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::set_read_p (bool state)
    -
    -virtualinherited
    -
    - -

    Sets the value of the read_p property.

    -

    Sets the value of the read_p property. This indicates that the value(s) of this variable has/have been read. An implementation of the read() method should use this to set the read_p property to true.

    -
    Note
    If the is_synthesized property is true, this method will not alter the is_read property. If you need that behavior, specialize the method in your subclasses if the various types.
    -
    -For most of the types the default implementation of this method is fine. However, if you're building a server which must handle data represented using nested sequences, then you may need to provide a specialization of Sequence::set_read_p(). By default Sequence::set_read_p() recursively sets the read_p property for all child variables to state. For servers where one Sequence reads an outer set of values and another reads an inner set, this is cumbersome. In such a case, it is easier to specialize Sequence::set_read_p() so that it does not recursively set the read_p property for the inner Sequence. Be sure to see the documentation for the read() method!
    -
    Todo:
    Look at making synthesized variables easier to implement and at making them more integrated into the overall CE evaluation process. Maybe the code that computes the synthesized var's value should be in the that variable's read() method? This might provide a way to get rid of the awkward 'projection functions' by replacing them with real children of BaseType. It would also provide a way to clean up the way the synthesized_p prop intrudes on the read_p prop.
    -
    See also
    BaseType::read()
    -
    Parameters
    - - -
    stateSet the read_p property to this state.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Group.

    - -

    Definition at line 218 of file Constructor.cc.

    - -
    -
    - -

    ◆ set_send_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::set_send_p (bool state)
    -
    -virtualinherited
    -
    -

    Sets the value of the send_p flag. This function is meant to be called from within the constraint evaluator of other code which determines that this variable should be returned to the client. Data are ready to be sent when both the d_is_send and d_is_read flags are set to TRUE.

    -
    Parameters
    - - -
    stateThe logical state to set the send_p flag.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::D4Group.

    - -

    Definition at line 208 of file Constructor.cc.

    - -
    -
    - -

    ◆ set_synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_synthesized_p (bool state)
    -
    -virtualinherited
    -
    -

    Set the synthesized flag. Before setting this flag be sure to set the read_p() state. Once this flag is set you cannot alter the state of the read_p flag!

    -
    See also
    synthesized_p()
    - -

    Definition at line 463 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_type()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_type (const Typet)
    -
    -virtualinherited
    -
    - -

    Sets the type of the class instance.

    - -

    Definition at line 372 of file BaseType.cc.

    - -
    -
    - -

    ◆ synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::synthesized_p ()
    -
    -virtualinherited
    -
    -

    Returns true if the variable is a synthesized variable. A synthesized variable is one that is added to the dataset by the server (usually with a `projection function'.

    - -

    Definition at line 452 of file BaseType.cc.

    - -
    -
    - -

    ◆ toString()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::toString ()
    -
    -virtualinherited
    -
    -

    Write out the object's internal fields in a string. To be used for debugging when regular inspection w/ddd or gdb isn't enough.

    -
    Returns
    A string which shows the object's internal stuff.
    - -

    Reimplemented in libdap::Sequence.

    - -

    Definition at line 184 of file BaseType.cc.

    - -
    -
    - -

    ◆ transfer_attributes()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Constructor::transfer_attributes (AttrTableat_container)
    -
    -virtualinherited
    -
    -

    Transfer attributes from a DAS object into this variable. Because of the rough history of the DAS object and the way that various server code built the DAS, this is necessarily a heuristic process. The intent is that this method will be overridden by handlers that need to look for certain patterns in the DAS (e.g., hdf4's odd variable_dim_n; where n = 0, 1, 2, ...) attribute containers.

    -

    There should be a one-to-one mapping between variables and attribute containers. However, in some cases one variable has attributes spread across several top level containers and in some cases one container is used by several variables

    -
    Note
    This method is technically unnecessary because a server (or client) can easily add attributes directly using the DDS::get_attr_table or BaseType::get_attr_table methods and then poke values in using any of the methods AttrTable provides. This method exists to ease the transition to DDS objects which contain attribute information for the existing servers (Since they all make DAS objects separately from the DDS). They could be modified to use the same AttrTable methods but operate on the AttrTable instances in a DDS/BaseType instead of those in a DAS.
    -
    Parameters
    - - -
    at_containerTransfer attributes from this container.
    -
    -
    -
    Returns
    void
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Grid.

    - -

    Definition at line 844 of file Constructor.cc.

    - -
    -
    - -

    ◆ transform_to_dap2()

    - -
    -
    - - - - - -
    - - - - - - - - -
    vector< BaseType * > * libdap::Structure::transform_to_dap2 (AttrTableparent_attr_table)
    -
    -virtual
    -
    - -

    DAP4 to DAP2 transform.

    -

    Return a DAP2 'copy' of the variable.

    -
    Returns
    A pointer to the transformed variable
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 180 of file Structure.cc.

    - -
    -
    - -

    ◆ transform_to_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Structure::transform_to_dap4 (D4Grouproot,
    Constructorcontainer 
    )
    -
    -virtual
    -
    -

    Build a DAP4 Structure.

    -

    This code must be subclassed for all but the most trivial cases.

    -
    Parameters
    - - - -
    root
    container
    -
    -
    -
    Returns
    The new variable
    - -

    Reimplemented from libdap::Constructor.

    - -

    Definition at line 153 of file Structure.cc.

    - -
    -
    - -

    ◆ type()

    - -
    -
    - - - - - -
    - - - - - - - -
    Type libdap::BaseType::type () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance.

    - -

    Definition at line 365 of file BaseType.cc.

    - -
    -
    - -

    ◆ type_name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::type_name () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance as a string.

    - -

    Definition at line 379 of file BaseType.cc.

    - -
    -
    - -

    ◆ val2buf()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    virtual unsigned int libdap::Constructor::val2buf (void * val,
    bool reuse 
    )
    -
    -inlinevirtualinherited
    -
    - -

    Loads class data.

    -

    Store the value pointed to by val in the object's internal buffer. This function does not perform any checks, so users must be sure that the thing pointed to can actually be stored in the object's buffer.

    -

    Only simple objects (Int, Float, Byte, and so on) and arrays of these simple objects may be stored using this function. To put data into more complex constructor types, use the functions provided by that class.

    -
    Deprecated:
    Use set_value() in the leaf classes.
    -
    Parameters
    - - - -
    valA pointer to the data to be inserted into the class data buffer.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect. This is currently used only in the Vector class.
    -
    -
    -
    Returns
    The size (in bytes) of the information copied from val.
    -
    See also
    Grid
    -
    -Vector::val2buf
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 115 of file Constructor.h.

    - -
    -
    - -

    ◆ var() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::Constructor::var (const string & name,
    bool exact_match = true,
    btp_stack * s = 0 
    )
    -
    -virtualinherited
    -
    - -

    btp_stack no longer needed; use back pointers (BaseType::get_parent())

    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 267 of file Constructor.cc.

    - -
    -
    - -

    ◆ var() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::Constructor::var (const string & n,
    btp_stack & s 
    )
    -
    -virtualinherited
    -
    -
    Deprecated:
    -
    Deprecated:
    See comment in BaseType
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 279 of file Constructor.cc.

    - -
    -
    - -

    ◆ var_begin()

    - -
    -
    - - - - - -
    - - - - - - - -
    Constructor::Vars_iter libdap::Constructor::var_begin ()
    -
    -inherited
    -
    -

    Returns an iterator referencing the first structure element.

    - -

    Definition at line 356 of file Constructor.cc.

    - -
    -
    - -

    ◆ var_end()

    - -
    -
    - - - - - -
    - - - - - - - -
    Constructor::Vars_iter libdap::Constructor::var_end ()
    -
    -inherited
    -
    -

    Returns an iterator referencing the end of the list of structure elements. Does not reference the last structure element.

    - -

    Definition at line 364 of file Constructor.cc.

    - -
    -
    - -

    ◆ var_rbegin()

    - -
    -
    - - - - - -
    - - - - - - - -
    Constructor::Vars_riter libdap::Constructor::var_rbegin ()
    -
    -inherited
    -
    -

    Return a reverse iterator that references the last element.

    - -

    Definition at line 371 of file Constructor.cc.

    - -
    -
    - -

    ◆ var_rend()

    - -
    -
    - - - - - -
    - - - - - - - -
    Constructor::Vars_riter libdap::Constructor::var_rend ()
    -
    -inherited
    -
    -

    Return a reverse iterator that references a point 'before' the first element.

    - -

    Definition at line 379 of file Constructor.cc.

    - -
    -
    - -

    ◆ width()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::Constructor::width (bool constrained = false) const
    -
    -virtualinherited
    -
    -

    This version of width simply returns the same thing as width() for simple types and Arrays. For Structure it returns the total size if constrained is false, or the size of the elements in the current projection if true.

    -
    Parameters
    - - -
    constrainedIf true, return the size after applying a constraint.
    -
    -
    -
    Returns
    The number of bytes used by the variable.
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 249 of file Constructor.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1Structure.js b/html/classlibdap_1_1Structure.js deleted file mode 100644 index 068c9a425..000000000 --- a/html/classlibdap_1_1Structure.js +++ /dev/null @@ -1,92 +0,0 @@ -var classlibdap_1_1Structure = -[ - [ "btp_stack", "classlibdap_1_1Structure.html#ae9c6e71855b90a0e552713011c9ab81f", null ], - [ "Vars_citer", "classlibdap_1_1Structure.html#a5a585c58a099833c4ca26561963e0f83", null ], - [ "Vars_iter", "classlibdap_1_1Structure.html#a2b73df890f61ebb628359c8fd12839b0", null ], - [ "Vars_riter", "classlibdap_1_1Structure.html#a6122400e3f40d457751fb0372a650d03", null ], - [ "Structure", "classlibdap_1_1Structure.html#a4187f25219b1fc7ec93e761795047e0a", null ], - [ "Structure", "classlibdap_1_1Structure.html#aa48289fa5979febe73ae74a90f2d246b", null ], - [ "Structure", "classlibdap_1_1Structure.html#a469f0fe441ac54689db27d7527d28748", null ], - [ "~Structure", "classlibdap_1_1Structure.html#a6ed7d2f86ea9f6e59c9a97ac5de3c7ae", null ], - [ "add_var", "classlibdap_1_1Structure.html#a2585c69c45b9ebec9c63993248eb5b4b", null ], - [ "add_var_nocopy", "classlibdap_1_1Structure.html#abdb52463a46e1b10040f245d4ed7642b", null ], - [ "attributes", "classlibdap_1_1Structure.html#a97452f06d2188eb838399a709246b5e9", null ], - [ "buf2val", "classlibdap_1_1Structure.html#ac4dc7e8099322b5b403a7d0ae9079006", null ], - [ "check_semantics", "classlibdap_1_1Structure.html#afe010638fd2ca9aab00dd1c21a9e4825", null ], - [ "clear_local_data", "classlibdap_1_1Structure.html#aaddb97a4efbe035f41deaf03c6e8683f", null ], - [ "compute_checksum", "classlibdap_1_1Structure.html#a287ab9a4deb81a8ced6d8432be647925", null ], - [ "d4_ops", "classlibdap_1_1Structure.html#a512a356f31ed6c4c1a368da0b054408a", null ], - [ "dataset", "classlibdap_1_1Structure.html#a47521ce321a17e6ce217870cb6a1a7aa", null ], - [ "del_var", "classlibdap_1_1Structure.html#af38d3785c4a7cd0063cbb9fc5943333c", null ], - [ "del_var", "classlibdap_1_1Structure.html#a69291878fc48217902fb0dcf1e2e1aff", null ], - [ "deserialize", "classlibdap_1_1Structure.html#a63763d2bae05463b100e823fb461a784", null ], - [ "deserialize", "classlibdap_1_1Structure.html#a6f4253236d69c3c0ef64343136b5039b", null ], - [ "dump", "classlibdap_1_1Structure.html#a5c51539ddf185011301d04e1c927538a", null ], - [ "element_count", "classlibdap_1_1Structure.html#a1c2eecff00fa7e3af175c711d00fb86e", null ], - [ "FQN", "classlibdap_1_1Structure.html#afa6c06dab830b4e089641b44fea8293c", null ], - [ "get_attr_table", "classlibdap_1_1Structure.html#a1fcd9537c67e3bf88964b2656ff5bac1", null ], - [ "get_parent", "classlibdap_1_1Structure.html#a3459cdaa239c33ce111ef360d8dc3017", null ], - [ "get_var_index", "classlibdap_1_1Structure.html#ac2b4b28ed9d6f435129aa599ab809799", null ], - [ "get_vars_iter", "classlibdap_1_1Structure.html#a1e6d8224e04d75e3d2a21263957cd42f", null ], - [ "intern_data", "classlibdap_1_1Structure.html#a065056826ef9c6fb2d08463af9e15a34", null ], - [ "intern_data", "classlibdap_1_1Structure.html#a822a036364c56df5288a55670f51197e", null ], - [ "is_constructor_type", "classlibdap_1_1Structure.html#a8b8490e0047c6da52945699a132008ea", null ], - [ "is_dap4", "classlibdap_1_1Structure.html#a7f6835cb5e5589ab5dad3fb4813d3bea", null ], - [ "is_in_selection", "classlibdap_1_1Structure.html#ae302ab2ec26e9fc5b575bf5d3d09aa5c", null ], - [ "is_linear", "classlibdap_1_1Structure.html#ac4687a4edb60d00fd781c82de40d53a4", null ], - [ "is_simple_type", "classlibdap_1_1Structure.html#aae57e5b270b3a015d40c8db10b9b5549", null ], - [ "is_vector_type", "classlibdap_1_1Structure.html#a7107c76dbcab71015141142383b6d022", null ], - [ "length", "classlibdap_1_1Structure.html#aadcda7a659157bc6a832d8a5fb775b3f", null ], - [ "m_duplicate", "classlibdap_1_1Structure.html#a88b282d06686fc88a74c91e289ef31d7", null ], - [ "m_duplicate", "classlibdap_1_1Structure.html#a0c55b826c8c5dfe7a454dc670e859a41", null ], - [ "m_exact_match", "classlibdap_1_1Structure.html#aa5cd6124619d35e81bcfd426f1e569d3", null ], - [ "m_leaf_match", "classlibdap_1_1Structure.html#a8fe3863a609488f4d5125abea96b82ed", null ], - [ "name", "classlibdap_1_1Structure.html#a24c5d67823b3cff7f4245a993072a142", null ], - [ "operator=", "classlibdap_1_1Structure.html#aebf03bb4b5ce61f556edace7b1dd8db7", null ], - [ "ops", "classlibdap_1_1Structure.html#a8a0000be2a244e3e07abda3020af8800", null ], - [ "print_dap4", "classlibdap_1_1Structure.html#a0f130e129b06773a9f3c94e3b492bb5c", null ], - [ "print_decl", "classlibdap_1_1Structure.html#ab7fb094be8da2a9f80f6d3b85e452934", null ], - [ "print_decl", "classlibdap_1_1Structure.html#a6c2c4d7cbe1d6239c037272ec865f80b", null ], - [ "print_val", "classlibdap_1_1Structure.html#aa7f9cce8ca18461af332aab61123bf23", null ], - [ "print_val", "classlibdap_1_1Structure.html#af50641301757ed26eb75fb2d29eae7ee", null ], - [ "print_xml", "classlibdap_1_1Structure.html#a32de0413045173aa8803f540a6cea39b", null ], - [ "print_xml", "classlibdap_1_1Structure.html#a7bbe6beabd94f576140e132e7a1017ff", null ], - [ "print_xml_writer", "classlibdap_1_1Structure.html#ab775a5e7e63757ac961b43800a95635f", null ], - [ "ptr_duplicate", "classlibdap_1_1Structure.html#ae20b384171ecded1940c3cb9780eda7e", null ], - [ "read", "classlibdap_1_1Structure.html#ad0af40e2565972fa44985d173370c264", null ], - [ "read_p", "classlibdap_1_1Structure.html#a38ff819a432217c55db2e9071928d20c", null ], - [ "send_p", "classlibdap_1_1Structure.html#a980c0013817836aa77ef74aeec7fb192", null ], - [ "serialize", "classlibdap_1_1Structure.html#a64268840654a0b37a15ccc601dbcfd33", null ], - [ "serialize", "classlibdap_1_1Structure.html#ab868fe97d5075b702bd084c2e9540913", null ], - [ "set_attr_table", "classlibdap_1_1Structure.html#a572a1d76a75981abac83a4241e90c0fa", null ], - [ "set_attributes", "classlibdap_1_1Structure.html#ad4dda4cf43dca838d3de183b8e01cd09", null ], - [ "set_attributes_nocopy", "classlibdap_1_1Structure.html#afd0e5f87d19020f560d5c1ff8dd4d6a3", null ], - [ "set_in_selection", "classlibdap_1_1Structure.html#ac30becb1ffe7d2cd4cbcd24fc216c9a3", null ], - [ "set_is_dap4", "classlibdap_1_1Structure.html#abca9ddaa9a1ada8447cbe7193e8e288a", null ], - [ "set_leaf_sequence", "classlibdap_1_1Structure.html#a69851299078fd4bfc39d722c8cdc3cb9", null ], - [ "set_length", "classlibdap_1_1Structure.html#a4fe343c1eeb6fb1d61ab030433651d90", null ], - [ "set_name", "classlibdap_1_1Structure.html#a86504564f45a3e6748c6f1cc0ff4e9fa", null ], - [ "set_parent", "classlibdap_1_1Structure.html#a5b6a39f6ce6594fa74f3fc899ac9a966", null ], - [ "set_read_p", "classlibdap_1_1Structure.html#af52e60d8589eed1a18a14e9c6a57db65", null ], - [ "set_send_p", "classlibdap_1_1Structure.html#aafbcf9bef6719fe60ac707e02956e09d", null ], - [ "set_synthesized_p", "classlibdap_1_1Structure.html#a595cb4059cff24f801a1b6da79bd2f9e", null ], - [ "set_type", "classlibdap_1_1Structure.html#af74f8d1ef57c9fcca46f620f75d175a3", null ], - [ "synthesized_p", "classlibdap_1_1Structure.html#ae64e677da27249473cdba0b60cdbb90a", null ], - [ "toString", "classlibdap_1_1Structure.html#a701eb3361f5b5628329ece019cd34519", null ], - [ "transfer_attributes", "classlibdap_1_1Structure.html#a799d2bd8ef9505b1d493d8cd73b72746", null ], - [ "transform_to_dap2", "classlibdap_1_1Structure.html#a9e00a214b9076b4849e2b9bc2605af21", null ], - [ "transform_to_dap4", "classlibdap_1_1Structure.html#af687033917e49b86356f23ead6353e6f", null ], - [ "type", "classlibdap_1_1Structure.html#af8e803b20a7a7dc5f2ef351d7fac4a56", null ], - [ "type_name", "classlibdap_1_1Structure.html#a18a42c8ec35cb5b15cd651a4152f8a2c", null ], - [ "val2buf", "classlibdap_1_1Structure.html#ac742b1bf93889e541128b1d123821ee6", null ], - [ "var", "classlibdap_1_1Structure.html#a36a7412da7b5257d7666add726fea1a6", null ], - [ "var", "classlibdap_1_1Structure.html#a68f1779dc328f890062722d90fad084a", null ], - [ "var_begin", "classlibdap_1_1Structure.html#adeafe3d6c82d07b456a598a7b446c2c6", null ], - [ "var_end", "classlibdap_1_1Structure.html#a936b38c7c35ffb4fe17c5b8e85bdaaa2", null ], - [ "var_rbegin", "classlibdap_1_1Structure.html#aa025cf546ca35250454653c1ec684d91", null ], - [ "var_rend", "classlibdap_1_1Structure.html#aede7cf5889e101db1ea8f22c3a84a5d3", null ], - [ "width", "classlibdap_1_1Structure.html#a0b1e3ae7195f95c42ca98f42826a1ff5", null ], - [ "d_in_selection", "classlibdap_1_1Structure.html#a949a89714965d7afdcd1e3edc8b7f0d4", null ], - [ "d_is_synthesized", "classlibdap_1_1Structure.html#a629e97e8eb7d285b54c9af8c1ec9a29a", null ], - [ "d_vars", "classlibdap_1_1Structure.html#a75b2aa694dc76294d6aa5f7456e49aa2", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1Structure__inherit__graph.map b/html/classlibdap_1_1Structure__inherit__graph.map deleted file mode 100644 index 73f927dda..000000000 --- a/html/classlibdap_1_1Structure__inherit__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/html/classlibdap_1_1Structure__inherit__graph.md5 b/html/classlibdap_1_1Structure__inherit__graph.md5 deleted file mode 100644 index c5ed3a399..000000000 --- a/html/classlibdap_1_1Structure__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -bc93ab4f820974566405534c4630f5ed \ No newline at end of file diff --git a/html/classlibdap_1_1Structure__inherit__graph.png b/html/classlibdap_1_1Structure__inherit__graph.png deleted file mode 100644 index 981fb4c65109b7d32c323c7d767efed35997bf1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89178 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 - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::UInt16 Member List
    -
    -
    - -

    This is the complete list of members for libdap::UInt16, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    add_var(BaseType *bt, Part part=nil)libdap::BaseTypevirtual
    add_var_nocopy(BaseType *bt, Part part=nil) (defined in libdap::BaseType)libdap::BaseTypevirtual
    attributes()libdap::BaseTypevirtual
    BaseType(const string &n, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const string &n, const string &d, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const BaseType &copy_from)libdap::BaseType
    btp_stack typedef (defined in libdap::BaseType)libdap::BaseType
    buf2val(void **val)libdap::UInt16virtual
    check_semantics(string &msg, bool all=false)libdap::BaseTypevirtual
    clear_local_data()libdap::BaseTypeinlinevirtual
    compute_checksum(Crc32 &checksum)libdap::UInt16virtual
    d4_ops(BaseType *b, int op)libdap::BaseTypevirtual
    d_buf (defined in libdap::UInt16)libdap::UInt16protected
    d_in_selection (defined in libdap::BaseType)libdap::BaseTypeprotected
    d_is_synthesized (defined in libdap::BaseType)libdap::BaseTypeprotected
    dataset() constlibdap::BaseTypevirtual
    deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)libdap::UInt16virtual
    deserialize(D4StreamUnMarshaller &um, DMR &dmr)libdap::UInt16virtual
    dump(ostream &strm) constlibdap::UInt16virtual
    element_count(bool leaves=false)libdap::BaseTypevirtual
    FQN() constlibdap::BaseTypevirtual
    get_attr_table()libdap::BaseTypevirtual
    get_parent() constlibdap::BaseTypevirtual
    intern_data(ConstraintEvaluator &eval, DDS &dds)libdap::BaseTypevirtual
    intern_data()libdap::BaseTypevirtual
    is_constructor_type() constlibdap::BaseTypevirtual
    is_dap4() const (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    is_in_selection()libdap::BaseTypevirtual
    is_simple_type() constlibdap::BaseTypevirtual
    is_vector_type() constlibdap::BaseTypevirtual
    length() constlibdap::BaseTypeinlinevirtual
    m_duplicate(const BaseType &bt)libdap::BaseTypeprotected
    name() constlibdap::BaseTypevirtual
    operator=(const UInt16 &rhs) (defined in libdap::UInt16)libdap::UInt16
    operator=(const BaseType &rhs) (defined in libdap::BaseType)libdap::BaseType
    ops(BaseType *b, int op)libdap::UInt16virtual
    print_dap4(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
    print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_val(FILE *out, string space="", bool print_decl_p=true)libdap::UInt16virtual
    print_val(ostream &out, string space="", bool print_decl_p=true)libdap::UInt16virtual
    print_xml(FILE *out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml(ostream &out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml_writer(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
    ptr_duplicate()libdap::UInt16virtual
    read()libdap::BaseTypevirtual
    read_p()libdap::BaseTypevirtual
    send_p()libdap::BaseTypevirtual
    serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)libdap::UInt16virtual
    serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)libdap::UInt16virtual
    set_attr_table(const AttrTable &at)libdap::BaseTypevirtual
    set_attributes(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_attributes_nocopy(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_in_selection(bool state)libdap::BaseTypevirtual
    set_is_dap4(const bool v) (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    set_length(int)libdap::BaseTypeinlinevirtual
    set_name(const string &n)libdap::BaseTypevirtual
    set_parent(BaseType *parent)libdap::BaseTypevirtual
    set_read_p(bool state)libdap::BaseTypevirtual
    set_send_p(bool state)libdap::BaseTypevirtual
    set_synthesized_p(bool state)libdap::BaseTypevirtual
    set_type(const Type &t)libdap::BaseTypevirtual
    set_value(dods_uint16 val) (defined in libdap::UInt16)libdap::UInt16virtual
    synthesized_p()libdap::BaseTypevirtual
    toString()libdap::BaseTypevirtual
    transfer_attributes(AttrTable *at)libdap::BaseTypevirtual
    transform_to_dap2(AttrTable *parent_attr_table)libdap::BaseTypevirtual
    transform_to_dap4(D4Group *root, Constructor *container)libdap::BaseTypevirtual
    type() constlibdap::BaseTypevirtual
    type_name() constlibdap::BaseTypevirtual
    UInt16(const string &n)libdap::UInt16
    UInt16(const string &n, const string &d)libdap::UInt16
    UInt16(const UInt16 &copy_from) (defined in libdap::UInt16)libdap::UInt16
    val2buf(void *val, bool reuse=false)libdap::UInt16virtual
    value() const (defined in libdap::UInt16)libdap::UInt16virtual
    var(const string &name="", bool exact_match=true, btp_stack *s=0)libdap::BaseTypevirtual
    var(const string &name, btp_stack &s)libdap::BaseTypevirtual
    width(bool constrained=false) constlibdap::UInt16virtual
    ~BaseType() (defined in libdap::BaseType)libdap::BaseTypevirtual
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    ~UInt16() (defined in libdap::UInt16)libdap::UInt16inlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1UInt16.html b/html/classlibdap_1_1UInt16.html deleted file mode 100644 index 137566354..000000000 --- a/html/classlibdap_1_1UInt16.html +++ /dev/null @@ -1,2936 +0,0 @@ - - - - - - - -libdap: libdap::UInt16 Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    - -

    Holds an unsigned 16-bit integer. - More...

    - -

    #include <UInt16.h>

    -
    -Inheritance diagram for libdap::UInt16:
    -
    -
    Inheritance graph
    - - - - -
    - - - - -

    -Public Types

    -typedef stack< BaseType * > btp_stack
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual void add_var (BaseType *bt, Part part=nil)
     Add a variable. More...
     
    -virtual void add_var_nocopy (BaseType *bt, Part part=nil)
     
    virtual unsigned int buf2val (void **val)
     Reads the class data. More...
     
    virtual bool check_semantics (string &msg, bool all=false)
     Compare an object's current state with the semantics of its type. More...
     
    virtual void clear_local_data ()
     
    virtual void compute_checksum (Crc32 &checksum)
     include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum. More...
     
    virtual bool d4_ops (BaseType *b, int op)
     Evaluator a relop for DAP4. More...
     
    virtual string dataset () const
     Returns the name of the dataset used to create this instance. More...
     
    virtual bool deserialize (UnMarshaller &um, DDS *dds, bool reuse=false)
     Receive data from the net. More...
     
    virtual void deserialize (D4StreamUnMarshaller &um, DMR &dmr)
     
    virtual void dump (ostream &strm) const
     dumps information about this object More...
     
    virtual int element_count (bool leaves=false)
     Count the members of constructor types. More...
     
    virtual std::string FQN () const
     
    virtual AttrTableget_attr_table ()
     
    virtual BaseTypeget_parent () const
     
    virtual bool is_constructor_type () const
     Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable. More...
     
    -virtual bool is_dap4 () const
     
    virtual bool is_in_selection ()
     Is this variable part of the current selection? More...
     
    virtual bool is_simple_type () const
     Returns true if the instance is a numeric, string or URL type variable. More...
     
    virtual bool is_vector_type () const
     Returns true if the instance is a vector (i.e., array) type variable. More...
     
    virtual int length () const
     How many elements are in this variable. More...
     
    virtual string name () const
     Returns the name of the class instance. More...
     
    -UInt16operator= (const UInt16 &rhs)
     
    virtual bool ops (BaseType *b, int op)
     Evaluate relational operators. More...
     
    virtual void print_dap4 (XMLWriter &xml, bool constrained=false)
     
    virtual void print_decl (FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_decl (ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_val (FILE *out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_val (ostream &out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_xml (FILE *out, string space=" ", bool constrained=false)
     
    virtual void print_xml (ostream &out, string space=" ", bool constrained=false)
     
    virtual void print_xml_writer (XMLWriter &xml, bool constrained=false)
     
    virtual BaseTypeptr_duplicate ()
     
    virtual bool read ()
     Read data into a local buffer. More...
     
    virtual bool read_p ()
     Has this variable been read? More...
     
    virtual bool send_p ()
     Should this variable be sent? More...
     
    virtual bool serialize (ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
     Move data to the net, then remove them from the object. More...
     
    virtual void serialize (D4StreamMarshaller &m, DMR &dmr, bool filter=false)
     Serialize an Int8. More...
     
    virtual void set_attr_table (const AttrTable &at)
     
    virtual void set_in_selection (bool state)
     
    -virtual void set_is_dap4 (const bool v)
     
    virtual void set_length (int)
     Set the number of elements for this variable. More...
     
    virtual void set_name (const string &n)
     Sets the name of the class instance. More...
     
    virtual void set_parent (BaseType *parent)
     
    virtual void set_read_p (bool state)
     Sets the value of the read_p property. More...
     
    virtual void set_send_p (bool state)
     
    virtual void set_synthesized_p (bool state)
     
    virtual void set_type (const Type &t)
     Sets the type of the class instance. More...
     
    -virtual bool set_value (dods_uint16 val)
     
    virtual bool synthesized_p ()
     
    virtual string toString ()
     
    virtual void transfer_attributes (AttrTable *at)
     
    virtual std::vector< BaseType * > * transform_to_dap2 (AttrTable *parent_attr_table)
     DAP4 to DAP2 transform. More...
     
    virtual void transform_to_dap4 (D4Group *root, Constructor *container)
     DAP2 to DAP4 transform. More...
     
    virtual Type type () const
     Returns the type of the class instance. More...
     
    virtual string type_name () const
     Returns the type of the class instance as a string. More...
     
     UInt16 (const string &n)
     
     UInt16 (const string &n, const string &d)
     
    UInt16 (const UInt16 &copy_from)
     
    virtual unsigned int val2buf (void *val, bool reuse=false)
     Loads class data. More...
     
    -virtual dods_uint16 value () const
     
    virtual BaseTypevar (const string &name="", bool exact_match=true, btp_stack *s=0)
     Returns a pointer to a member of a constructor class. More...
     
    virtual BaseTypevar (const string &name, btp_stack &s)
     
    virtual unsigned int width (bool constrained=false) const
     How many bytes does this variable use Return the number of bytes of storage this variable uses. For scalar types, this is pretty simple (an int32 uses 4 bytes, etc.). For arrays and Constructors, it is a bit more complex. Note that a scalar String variable uses sizeof(String*) bytes, not the length of the string value. The width() of a String array returns the number of elements in the array times sizeof(String*). More...
     
    virtual D4Attributesattributes ()
     
    -virtual void set_attributes (D4Attributes *)
     
    -virtual void set_attributes_nocopy (D4Attributes *)
     
    Abstract Methods
    virtual void intern_data (ConstraintEvaluator &eval, DDS &dds)
     
    virtual void intern_data ()
     Read data into this variable. More...
     
    - - - - -

    -Protected Member Functions

    void m_duplicate (const BaseType &bt)
     Perform a deep copy. More...
     
    - - - - - - - -

    -Protected Attributes

    -dods_uint16 d_buf
     
    -bool d_in_selection
     
    -bool d_is_synthesized
     
    -

    Detailed Description

    -

    Holds an unsigned 16-bit integer.

    - -

    Definition at line 57 of file UInt16.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ UInt16() [1/2]

    - -
    -
    - - - - - - - - -
    libdap::UInt16::UInt16 (const string & n)
    -
    -

    The UInt16 constructor accepts the name of the variable to be created.

    -
    Parameters
    - - -
    nA string containing the name of the variable to be created.
    -
    -
    - -

    Definition at line 79 of file UInt16.cc.

    - -
    -
    - -

    ◆ UInt16() [2/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    libdap::UInt16::UInt16 (const string & n,
    const string & d 
    )
    -
    -

    The UInt16 server-side constructor accepts the name of the variable to be created and the dataset name from which this instance is created.

    -
    Parameters
    - - - -
    nA string containing the name of the variable to be created.
    dA string containing the name of the dataset from which this variable is created
    -
    -
    - -

    Definition at line 89 of file UInt16.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ add_var()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::add_var (BaseTypebt,
    Part part = nil 
    )
    -
    -virtualinherited
    -
    - -

    Add a variable.

    -

    Adds a variable to an instance of a constructor class, such as Array, Structure et cetera. This function is only used by those classes. For constructors with more than one variable, the variables appear in the same order in which they were added (i.e., the order in which add_var() was called). Since this method is only for use by Vectors and Constructors, the BaseType implementation throws InternalErr.

    -
    Note
    For the implementation of this method in Structure, Sequence, et c., first copy bt and then insert the copy. If bt is itself a constructor type you must either use the var() method to get a pointer to the actual instance added to *this or you must first add all of bt's children to it before adding it to *this. The implementations should use m_duplicate() to perform a deep copy of bt.
    -
    Todo:
    We should get rid of the Part parameter and adopt the convention that the first variable is the Array and all subsequent ones are Maps (when dealing with a Grid, the only time Part matters). This would enable several methods to migrate from Structure, Sequence and Grid to Constructor.
    -
    Parameters
    - - - -
    btThe variable to be added to this instance. The caller of this method must free memory it allocates for v. This method will make a deep copy of the object pointed to by v.
    partThe part of the constructor data to be modified. Only meaningful for Grid variables.
    -
    -
    -
    See also
    Part
    - -

    Reimplemented in libdap::Vector, libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 815 of file BaseType.cc.

    - -
    -
    - -

    ◆ attributes()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4Attributes * libdap::BaseType::attributes ()
    -
    -virtualinherited
    -
    -

    DAP4 Attribute methods

    - -

    Definition at line 599 of file BaseType.cc.

    - -
    -
    - -

    ◆ buf2val()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::UInt16::buf2val (void ** val)
    -
    -virtual
    -
    - -

    Reads the class data.

    -

    Reads the class data into the memory referenced by val. The caller should either allocate enough storage to val to hold the class data or set *val to null. If *val is NULL, memory will be allocated by this function with new(). If the memory is allocated this way, the caller is responsible for deallocating that memory. Array and values for simple types are stored as C would store an array.

    -
    Deprecated:
    Use value() in the leaf classes.
    -
    Parameters
    - - -
    valA pointer to a pointer to the memory into which the class data will be copied. If the value pointed to is NULL, memory will be allocated to hold the data, and the pointer value modified accordingly. The calling program is responsible for deallocating the memory references by this pointer.
    -
    -
    -
    Returns
    The size (in bytes) of the information copied to val.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 195 of file UInt16.cc.

    - -
    -
    - -

    ◆ check_semantics()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::check_semantics (string & msg,
    bool all = false 
    )
    -
    -virtualinherited
    -
    - -

    Compare an object's current state with the semantics of its type.

    -

    This function checks the class instance for internal consistency. This is important to check for complex constructor classes. For BaseType, an object is semantically correct if it has both a non-null name and type.

    -

    For example, an Int32 instance would return FALSE if it had no name or no type defined. A Grid instance might return FALSE for more complex reasons, such as having Map arrays of the wrong size or shape.

    -

    This function is used by the DDS class, and will rarely, if ever, be explicitly called by a DODS application program. A variable must pass this test before it is sent, but there may be many other stages in a retrieve operation where it would fail.

    -
    Returns
    Returns FALSE when the current state violates some aspect of the type semantics, TRUE otherwise.
    -
    Parameters
    - - - -
    msgA returned string, containing a message indicating the source of any problem.
    allFor complex constructor types (Grid, Sequence, Structure), this flag indicates whether to check the semantics of the member variables, too.
    -
    -
    -
    See also
    DDS::check_semantics
    - -

    Reimplemented in libdap::Array, libdap::Vector, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1209 of file BaseType.cc.

    - -
    -
    - -

    ◆ clear_local_data()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual void libdap::BaseType::clear_local_data ()
    -
    -inlinevirtualinherited
    -
    -

    Remove any read or set data in the private data of the variable, setting read_p() to false. Used to clear any dynamically allocated storage that holds (potentially large) data. For the simple types, this no-op version is all that's needed. Vector and some other classes define a special version and have serialize() implementations that call it to free data as soon as possible after sending it.

    -
    Note
    Added 7/5/15 jhrg
    -
    -Any specialization of this should make sure to reset the read_p property.
    - -

    Reimplemented in libdap::Sequence, libdap::Vector, libdap::D4Sequence, and libdap::D4Opaque.

    - -

    Definition at line 179 of file BaseType.h.

    - -
    -
    - -

    ◆ compute_checksum()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::UInt16::compute_checksum (Crc32checksum)
    -
    -virtual
    -
    - -

    include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum.

    -
    Parameters
    - - -
    checksumA Crc32 instance that holds the current checksum.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 150 of file UInt16.cc.

    - -
    -
    - -

    ◆ d4_ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::d4_ops (BaseTypeb,
    int op 
    )
    -
    -virtualinherited
    -
    - -

    Evaluator a relop for DAP4.

    -

    This method is used by the filter expression evaluation code in DAP4. Each of the 'data type' classes that support relops must overload this method. In an expression of the form arg1 op arg2, this object is arg1, the parameter 'b' is arg2 and op is the relational operator.

    -
    Note
    I used the same relop codes for DAP4 as in the DAP2 parser/scanner which makes for some coupling between them, but cuts way down on the duplication of the evaluator logic, which is somewhat involved.
    -
    Parameters
    - - - -
    bThe second argument in the relational expression
    opThe infix relational operator
    -
    -
    -
    Returns
    True if the expression is true, False otherwise.
    - -

    Reimplemented in libdap::Str, libdap::Int32, libdap::Float32, libdap::Byte, libdap::Float64, libdap::Int16, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 1282 of file BaseType.cc.

    - -
    -
    - -

    ◆ dataset()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::dataset () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the dataset used to create this instance.

    -

    A dataset from which the data is to be read. The meaning of this string will vary among different types of data sources. It may be the name of a data file or an identifier used to read data from a relational database.

    - -

    Definition at line 358 of file BaseType.cc.

    - -
    -
    - -

    ◆ deserialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::UInt16::deserialize (UnMarshallerum,
    DDSdds,
    bool reuse = false 
    )
    -
    -virtual
    -
    - -

    Receive data from the net.

    -

    Receives data from the network connection identified by the source parameter. The data is put into the class data buffer according to the input dds.

    -

    This function is only used on the client side of the DODS client/server connection.

    -
    Parameters
    - - - - -
    umAn UnMarshaller that knows how to deserialize data types
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure. This would have been received from the server in an earlier transmission.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect.
    -
    -
    -
    Returns
    Always returns TRUE.
    -
    Exceptions
    - - -
    Errorwhen a problem reading from the UnMarshaller is found.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 142 of file UInt16.cc.

    - -
    -
    - -

    ◆ deserialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::UInt16::deserialize (D4StreamUnMarshallerum,
    DMRdmr 
    )
    -
    -virtual
    -
    -

    The DAP4 deserialization method.

    Parameters
    - - - -
    um
    dmr
    -
    -
    -
    Exceptions
    - - -
    Erroror InternalErr
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 173 of file UInt16.cc.

    - -
    -
    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::UInt16::dump (ostream & strm) const
    -
    -virtual
    -
    - -

    dumps information about this object

    -

    Displays the pointer value of this instance and information about this instance.

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the information to
    -
    -
    -
    Returns
    void
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 302 of file UInt16.cc.

    - -
    -
    - -

    ◆ element_count()

    - -
    -
    - - - - - -
    - - - - - - - - -
    int libdap::BaseType::element_count (bool leaves = false)
    -
    -virtualinherited
    -
    - -

    Count the members of constructor types.

    -

    Return a count of the total number of variables in this variable. This is used to count the number of variables held by a constructor variable - for simple type and vector variables it always returns 1.

    -

    For compound data types, there are two ways to count members. You can count the members, or you can count the simple members and add that to the count of the compound members. For example, if a Structure contains an Int32 and another Structure that itself contains two Int32 members, the element count of the top-level structure could be two (one Int32 and one Structure) or three (one Int32 by itself and two Int32's in the subsidiary Structure). Use the leaves parameter to control which kind of counting you desire.

    -
    Returns
    Returns 1 for simple types. For compound members, the count depends on the leaves argument.
    -
    Parameters
    - - -
    leavesThis parameter is only relevant if the object contains other compound data types. If FALSE, the function counts only the data variables mentioned in the object's declaration. If TRUE, it counts the simple members, and adds that to the sum of the counts for the compound members. This parameter has no effect for simple type variables.
    -
    -
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 443 of file BaseType.cc.

    - -
    -
    - -

    ◆ FQN()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::FQN () const
    -
    -virtualinherited
    -
    -

    Return the FQN for this variable. This will include the D4 Group component of the name.

    -
    Returns
    The FQN in a string
    - -

    Reimplemented in libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 332 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - -
    AttrTable & libdap::BaseType::get_attr_table ()
    -
    -virtualinherited
    -
    -

    Get this variable's AttrTable. It's generally a bad idea to return a reference to a contained object, but in this case it seems that building an interface inside BaseType is overkill.

    -

    Use the AttrTable methods to manipulate the table.

    - -

    Definition at line 582 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_parent()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::BaseType::get_parent () const
    -
    -virtualinherited
    -
    -

    Return a pointer to the Constructor or Vector which holds (contains) this variable. If this variable is at the top level, this method returns null.

    -
    Returns
    A BaseType pointer to the variable's parent.
    - -

    Definition at line 751 of file BaseType.cc.

    - -
    -
    - -

    ◆ intern_data() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::intern_data (ConstraintEvaluatoreval,
    DDSdds 
    )
    -
    -virtualinherited
    -
    -

    Similar to using serialize() and deserialize() together in one object. Data are read as for serialize and those values are stored in the objects as deserialize() does but does not write and then read data to/from a stream.

    -

    This method is defined by the various data type classes. It calls the read() abstract method. Unlike serialize(), this method does not clear the memory use to hold the data values, so the caller should make sure to delete the DDS or the variable as soon as possible.

    -
    Parameters
    - - - -
    evalUse this as the constraint expression evaluator.
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    -
    -
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 908 of file BaseType.cc.

    - -
    -
    - -

    ◆ intern_data() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::BaseType::intern_data ()
    -
    -virtualinherited
    -
    - -

    Read data into this variable.

    -
    Parameters
    - - - -
    evalEvaluator for a constraint expression
    dmrDMR for the whole dataset
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 927 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_constructor_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_constructor_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable.

    -
    Returns
    True if the instance is a Structure, Sequence or Grid, False otherwise.
    - -

    Definition at line 412 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_in_selection ()
    -
    -virtualinherited
    -
    - -

    Is this variable part of the current selection?

    -

    Does this variable appear in either the selection part or as a function argument in the current constrain expression. If this property is set (true) then implementations of the read() method should read this variable.

    -
    Note
    This method does not check, nor does it know about the semantics of, string arguments passed to functions. Those functions might include variable names in strings; they are responsible for reading those variables. See the grid (func_grid_select()) for an example.
    -
    See also
    BaseType::read()
    - -

    Definition at line 703 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_simple_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_simple_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a numeric, string or URL type variable.

    -
    Returns
    True if the instance is a scalar numeric, String or URL variable, False otherwise. Arrays (even of simple types) return False.
    -
    See also
    is_vector_type()
    - -

    Definition at line 393 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_vector_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_vector_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a vector (i.e., array) type variable.

    -
    Returns
    True if the instance is an Array, False otherwise.
    - -

    Definition at line 402 of file BaseType.cc.

    - -
    -
    - -

    ◆ length()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual int libdap::BaseType::length () const
    -
    -inlinevirtualinherited
    -
    - -

    How many elements are in this variable.

    -
    Todo:
    change the return type to int64_t
    -
    Returns
    The number of elements; 1 for scalars
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, libdap::Str, and libdap::D4Opaque.

    - -

    Definition at line 207 of file BaseType.h.

    - -
    -
    - -

    ◆ m_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::m_duplicate (const BaseTypebt)
    -
    -protectedinherited
    -
    - -

    Perform a deep copy.

    -

    Perform a deep copy. Copies the values of bt into *this. Pointers are dereferenced and their values are copied into a newly allocated instance.

    -
    Parameters
    - - -
    btThe source object.
    -
    -
    - -

    Definition at line 86 of file BaseType.cc.

    - -
    -
    - -

    ◆ name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::name () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the class instance.

    - -

    Definition at line 320 of file BaseType.cc.

    - -
    -
    - -

    ◆ ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::UInt16::ops (BaseTypeb,
    int op 
    )
    -
    -virtual
    -
    - -

    Evaluate relational operators.

    -

    This method contains the relational operators used by the constraint expression evaluator in the DDS class. Each class that wants to be able to evaluate relational expressions must overload this function. The implementation in BaseType throws an InternalErr exception. The DAP library classes Byte, ..., Url provide specializations of this method. It is not meaningful for classes such as Array because relational expressions using Array are not supported.

    -

    The op argument refers to a table generated by bison from the constraint expression parser. Use statements like the following to correctly interpret its value:

    -
    switch (op) {
    -    case EQUAL: return i1 == i2;
    -    case NOT_EQUAL: return i1 != i2;
    -    case GREATER: return i1 > i2;
    -    case GREATER_EQL: return i1 >= i2;
    -    case LESS: return i1 < i2;
    -    case LESS_EQL: return i1 <= i2;
    -    case REGEXP: throw Error("Regular expressions are not supported for integer values");
    -    default: throw Error("Unknown operator");
    -}
    -

    This function is used by the constraint expression evaluator.

    -
    Parameters
    - - - -
    bCompare the value of this instance with b.
    opAn integer index indicating which relational operator is implied. Choose one from the following: EQUAL, NOT_EQUAL, GREATER, GREATER_EQL, LESS, LESS_EQL, and REGEXP.
    -
    -
    -
    Returns
    The boolean value of the comparison.
    -
    See also
    BaseType::d4_ops(BaseType *, int)
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 245 of file UInt16.cc.

    - -
    -
    - -

    ◆ print_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_dap4 (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the DAP4 XML representation for this variable. This method is used to build the DAP4 DMR response object.

    -
    Parameters
    - - - -
    xmlAn XMLWriter that will do the serialization
    constrainedTrue if the response should show the variables subject to the current constraint expression.
    -
    -
    - -

    Reimplemented in libdap::Array, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 1164 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (FILE * out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1003 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (ostream & out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1054 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_val() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::UInt16::print_val (FILE * out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtual
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output stream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 226 of file UInt16.cc.

    - -
    -
    - -

    ◆ print_val() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::UInt16::print_val (ostream & out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtual
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output ostream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 234 of file UInt16.cc.

    - -
    -
    - -

    ◆ print_xml() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (FILE * out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination.
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1105 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (ostream & out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1120 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml_writer()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml_writer (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    - -

    Reimplemented in libdap::Array, libdap::D4Enum, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1134 of file BaseType.cc.

    - -
    -
    - -

    ◆ ptr_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::UInt16::ptr_duplicate ()
    -
    -virtual
    -
    -

    Clone this instance. Allocate a new instance and copy *this into it. This method must perform a deep copy.

    @note This method should \e not copy data values, but must copy all
    -other fields in the object.
    -
    Returns
    A newly allocated copy of this.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 98 of file UInt16.cc.

    - -
    -
    - -

    ◆ read()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read ()
    -
    -virtualinherited
    -
    - -

    Read data into a local buffer.

    -

    This method should be implemented for each of the data type classes (Byte, ..., Grid) when using the DAP class library to build a server. This method is only for DAP servers. The library provides a default definition here which throws an InternalErr exception unless the read_p property has been set. In that case it returns false, indicating that all the data have been read. The latter case can happen when building a constant value that needs to be passed to a function. The variable/constant is loaded with a value when it is created.

    -

    When implementing a new DAP server, the Byte, ..., Grid data type classes are usually specialized. In each of those specializations read() should be defined to read values from the data source and store them in the object's local buffer. The read() method is called by other methods in this library. When writing read(), follow these rules:

    -
      -
    • -read() should throw Error if it encounters an error. The message should be verbose enough to be understood by someone running a client on a different machine.
    • -
    • -The value(s) should be read if and only if either send_p() or is_in_selection() return true. If neither of these return true, the value(s) should not be read. This is important when writing read() for a Constructor type such as Grid where a client may ask for only the map vectors (and thus reading the much larger Array part is not needed).
    • -
    • -For each specialization of read(), the method should first test the value of the read_p property (using the read_p() method) and read values only if the value of read_p() is false. Once the read() method reads data and stores it in the instance, it must set the value of the read_p property to true using set_read_p(). If your read() methods fail to do this data may not serialize correctly.
    • -
    • -The Array::read() and Grid::read() methods should take into account any restrictions on Array sizes.
    • -
    • -If you are writing Sequence::read(), be sure to check the documentation for Sequence::read_row() and Sequence::serialize() so you understand how Sequence::read() is being called.
    • -
    • -

      For Sequence::read(), your specialization must correctly manage the unsent_data property and row count in addition to the read_p property (handle the read_p property as describe above). For a Sequence to serialize correctly, once all data from the Sequence has been read, unsent_data property must be set to false (use Sequence::set_unsent_data()). Also, at that time the row number counter must be reset (use Sequence::reset_row_counter()). Typically the correct time to set unsent_data to false and reset the row counter is the time when Sequence::read() return false indicating that all the data for the Sequence have been read. Failure to handle these tasks will break serialization of nested Sequences. Note that when Sequence::read() returns with a result of true (indicating there is more data to send, the value of the unsent_data property should be true.

      -

      Also, if you server must handle nested sequences, be sure to read about subclassing set_read_p().

      -
    • -
    -
    Todo:
    Modify the D4 serialize code so that it supports the true/false behavior of read() for arrays.
    -
    Todo:
    Modify all of the stock handlers so they conform to this!
    -
    Returns
    False means more data remains to be read, True indicates that no more data need to be read. For Sequence and D4Sequence, this method will generally read one instance of the Sequence; for other types it will generally read the entire variable modulo any limitations due to a constraint. However, the library should be written so that read can return less than all of the data for a variable - serialize() would then call the function until it returns True.
    -
    See also
    BaseType
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 899 of file BaseType.cc.

    - -
    -
    - -

    ◆ read_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read_p ()
    -
    -virtualinherited
    -
    - -

    Has this variable been read?

    -

    Returns true if the value(s) for this variable have been read from the data source, otherwise returns false. This method is used to determine when values need to be read using the read() method. When read_p() returns true, this library assumes that buf2val() (and other methods such as get_vec()) can be used to access the value(s) of a variable.

    -
    Returns
    True if the variable's value(s) have been read, false otherwise.
    - -

    Definition at line 480 of file BaseType.cc.

    - -
    -
    - -

    ◆ send_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::send_p ()
    -
    -virtualinherited
    -
    - -

    Should this variable be sent?

    -

    Returns the state of the send_p property. If true, this variable should be sent to the client, if false, it should not. If no constraint expression (CE) has been evaluated, this property is true for all variables in a data source (i.e., for all the variables listed in a DDS). If a CE has been evaluated, this property is true only for those variables listed in the projection part of the CE.

    -
    Returns
    True if the variable should be sent to the client, false otherwise.
    - -

    Definition at line 554 of file BaseType.cc.

    - -
    -
    - -

    ◆ serialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::UInt16::serialize (ConstraintEvaluatoreval,
    DDSdds,
    Marshallerm,
    bool ce_eval = true 
    )
    -
    -virtual
    -
    - -

    Move data to the net, then remove them from the object.

    -

    Sends the data from the indicated (local) dataset through the connection identified by the Marshaller parameter. If the data is not already incorporated into the DDS object, read the data from the dataset. Once the data are sent (written to the Marshaller), they are deleted from the object and the object state is reset so that they will be read again if the read() method is called.

    -

    This function is only used on the server side of the client/server connection, and is generally only called from the ResponseBuilder functions. It has no BaseType implementation; each datatype child class supplies its own implementation.

    @param eval Use this as the constraint expression evaluator.
    -
    Parameters
    - - - - -
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    mA marshaller used to serialize data types
    ce_evalA boolean value indicating whether to evaluate the DODS constraint expression that may accompany this dataset. The constraint expression is stored in the dds.
    -
    -
    -
    Returns
    This method always returns true. Older versions used the return value to signal success or failure.
    -
    Note
    We changed the default behavior of this method so that it calls BaseType::clear_local_data() once the values are sent. This, combined with the behavior that read() is called by this method just before data are sent, means that data for any given variable remain in memory for the shortest time possible. Furthermore, since variables are serialized one at a time, no more than one variable's data will be in memory at any given time when using the default behavior. Some code - code that uses intern_data() or server functions - might alter this default behavior. Only Array (i.e. Vector), Sequence, D4Sequence and D4Opaque types actually hold data in dynamically allocated memory, so sonly those types have the new/changed behavior. This change was made on 7/5/15.
    -
    Exceptions
    - - - -
    InternalErr.
    Error.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 123 of file UInt16.cc.

    - -
    -
    - -

    ◆ serialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::UInt16::serialize (D4StreamMarshallerm,
    DMRdmr,
    bool filter = false 
    )
    -
    -virtual
    -
    - -

    Serialize an Int8.

    -
    Parameters
    - - - - - -
    m
    dmrUnused
    evalUnused
    filterUnused
    -
    -
    -
    Exceptions
    - - -
    Erroris thrown if the value needs to be read and that operation fails.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 164 of file UInt16.cc.

    - -
    -
    - -

    ◆ set_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_attr_table (const AttrTableat)
    -
    -virtualinherited
    -
    -

    Set this variable's attribute table.

    Parameters
    - - -
    atSource of the attributes.
    -
    -
    - -

    Definition at line 590 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_in_selection (bool state)
    -
    -virtualinherited
    -
    -

    Set the in_selection property to state. This property indicates that the variable is used as a parameter to a constraint expression function or that it appears as an argument in a selection sub-expression. If set (true), implementations of the BaseType::read() method should read this variable.

    -
    Parameters
    - - -
    stateSet the in_selection property to this state.
    -
    -
    -
    See also
    BaseType::read()
    -
    -BaseType::is_in_selection() for more information.
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 718 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_length()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::BaseType::set_length (int )
    -
    -inlinevirtualinherited
    -
    - -

    Set the number of elements for this variable.

    -
    Todo:
    change param type to int64_t
    -
    Parameters
    - - -
    lThe number of elements
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, and libdap::Vector.

    - -

    Definition at line 214 of file BaseType.h.

    - -
    -
    - -

    ◆ set_name()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_name (const string & n)
    -
    -virtualinherited
    -
    - -

    Sets the name of the class instance.

    - -

    Reimplemented in libdap::Vector.

    - -

    Definition at line 344 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_parent()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_parent (BaseTypeparent)
    -
    -virtualinherited
    -
    -

    Set the parent property for this variable.

    -
    Note
    Added ability to set parent to null. 10/19/12 jhrg
    -
    Parameters
    - - -
    parentPointer to the Constructor of Vector parent variable or null if the variable has no parent (if it is at the top-level of a DAP2/3 DDS).
    -
    -
    -
    Exceptions
    - - -
    InternalErrthrown if called with anything other than a Constructor, Vector or Null.
    -
    -
    - -

    Definition at line 733 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_read_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_read_p (bool state)
    -
    -virtualinherited
    -
    - -

    Sets the value of the read_p property.

    -

    Sets the value of the read_p property. This indicates that the value(s) of this variable has/have been read. An implementation of the read() method should use this to set the read_p property to true.

    -
    Note
    If the is_synthesized property is true, this method will not alter the is_read property. If you need that behavior, specialize the method in your subclasses if the various types.
    -
    -For most of the types the default implementation of this method is fine. However, if you're building a server which must handle data represented using nested sequences, then you may need to provide a specialization of Sequence::set_read_p(). By default Sequence::set_read_p() recursively sets the read_p property for all child variables to state. For servers where one Sequence reads an outer set of values and another reads an inner set, this is cumbersome. In such a case, it is easier to specialize Sequence::set_read_p() so that it does not recursively set the read_p property for the inner Sequence. Be sure to see the documentation for the read() method!
    -
    Todo:
    Look at making synthesized variables easier to implement and at making them more integrated into the overall CE evaluation process. Maybe the code that computes the synthesized var's value should be in the that variable's read() method? This might provide a way to get rid of the awkward 'projection functions' by replacing them with real children of BaseType. It would also provide a way to clean up the way the synthesized_p prop intrudes on the read_p prop.
    -
    See also
    BaseType::read()
    -
    Parameters
    - - -
    stateSet the read_p property to this state.
    -
    -
    - -

    Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 516 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_send_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_send_p (bool state)
    -
    -virtualinherited
    -
    -

    Sets the value of the send_p flag. This function is meant to be called from within the constraint evaluator of other code which determines that this variable should be returned to the client. Data are ready to be sent when both the d_is_send and d_is_read flags are set to TRUE.

    -
    Parameters
    - - -
    stateThe logical state to set the send_p flag.
    -
    -
    - -

    Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 568 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_synthesized_p (bool state)
    -
    -virtualinherited
    -
    -

    Set the synthesized flag. Before setting this flag be sure to set the read_p() state. Once this flag is set you cannot alter the state of the read_p flag!

    -
    See also
    synthesized_p()
    - -

    Definition at line 463 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_type()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_type (const Typet)
    -
    -virtualinherited
    -
    - -

    Sets the type of the class instance.

    - -

    Definition at line 372 of file BaseType.cc.

    - -
    -
    - -

    ◆ synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::synthesized_p ()
    -
    -virtualinherited
    -
    -

    Returns true if the variable is a synthesized variable. A synthesized variable is one that is added to the dataset by the server (usually with a `projection function'.

    - -

    Definition at line 452 of file BaseType.cc.

    - -
    -
    - -

    ◆ toString()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::toString ()
    -
    -virtualinherited
    -
    -

    Write out the object's internal fields in a string. To be used for debugging when regular inspection w/ddd or gdb isn't enough.

    -
    Returns
    A string which shows the object's internal stuff.
    - -

    Reimplemented in libdap::Sequence.

    - -

    Definition at line 184 of file BaseType.cc.

    - -
    -
    - -

    ◆ transfer_attributes()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::transfer_attributes (AttrTableat_container)
    -
    -virtualinherited
    -
    -

    Transfer attributes from a DAS object into this variable. Because of the rough history of the DAS object and the way that various server code built the DAS, this is necessarily a heuristic process. The intent is that this method will be overridden by handlers that need to look for certain patterns in the DAS (e.g., hdf4's odd variable_dim_n; where n = 0, 1, 2, ...) attribute containers.

    -

    There should be a one-to-one mapping between variables and attribute containers. However, in some cases one variable has attributes spread across several top level containers and in some cases one container is used by several variables

    -
    Note
    This method is technically unnecessary because a server (or client) can easily add attributes directly using the DDS::get_attr_table or BaseType::get_attr_table methods and then poke values in using any of the methods AttrTable provides. This method exists to ease the transition to DDS objects which contain attribute information for the existing servers (Since they all make DAS objects separately from the DDS). They could be modified to use the same AttrTable methods but operate on the AttrTable instances in a DDS/BaseType instead of those in a DAS.
    -
    Parameters
    - - -
    at_containerTransfer attributes from this container.
    -
    -
    -
    Returns
    void
    - -

    Reimplemented in libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 644 of file BaseType.cc.

    - -
    -
    - -

    ◆ transform_to_dap2()

    - -
    -
    - - - - - -
    - - - - - - - - -
    std::vector< BaseType * > * libdap::BaseType::transform_to_dap2 (AttrTableparent_attr_table)
    -
    -virtualinherited
    -
    - -

    DAP4 to DAP2 transform.

    -

    For the current BaseType, return a DAP2 'copy' of the variable.

    -
    Note
    For most DAP4 types, in this implementation of DAP2 the corresponding DAP4 type is the same. These types have a different representations in DAP2 and DAP4: Sequences (which are D4Sequences in the DAP4 implementation),
      -
    • Grids (which are semantically subsumed by coverages in DAP4)
    • -
    • Arrays (which use shared dimensions in DAP4)
    • -
    -
    -

    Additionally DAP4 adds the following types:

      -
    • UInt8, Int8, and Char which map to Byte in DAP2.
    • -
    • Int64, Unit64 which have no natural representation in DAP2.
    • -
    • Opaque Possible Byte stuff[] plus metadata?
    • -
    • Enum's can be represented as Int32.
    • -
    • Groups, with the exception of the root group "disappear" into the names of their member variables. Specifically the Group name is add as a prefix followed by a "/" separator to the names of all of the Group's member groups variables.
    • -
    -
    Parameters
    - - -
    TheAttrTable pointer parent_attr_table is used by Groups, which disappear from the DAP2 representation. Their children are returned in the the BAseType vector their attributes are added to parent_attr_table;
    -
    -
    -
    Returns
    A pointer to a vector of BaseType pointers (right?). In most cases this vector will contain a single pointer but DAP4 types 'disappear' such as Group will return all of their member variables in the vector. DAP4 types with no representation in DAP2 (ex: UInt64) the will return a NULL pointer and so this must be tested!
    - -

    Reimplemented in libdap::Array, libdap::D4Enum, libdap::D4Group, libdap::D4Opaque, libdap::Byte, libdap::Structure, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 259 of file BaseType.cc.

    - -
    -
    - -

    ◆ transform_to_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::transform_to_dap4 (D4Grouproot,
    Constructorcontainer 
    )
    -
    -virtualinherited
    -
    - -

    DAP2 to DAP4 transform.

    -

    For the current BaseType, return a DAP4 'copy' of the variable.

    -
    Note
    For most DAP2 types, in this implementation of DAP4 the corresponding DAP4 type is the same. The different types are Sequences (which are D4Sequences in the DAP4 implementation), Grids (which are coverages) and Arrays (which use shared dimensions).
    -
    Parameters
    - - - -
    rootThe root group that should hold this new variable. Add Group-level stuff here (e.g., D4Dimensions).
    containerAdd the new variable to this container.
    -
    -
    -
    Returns
    A pointer to the transformed variable
    - -

    Reimplemented in libdap::Sequence, libdap::Array, libdap::Grid, libdap::Structure, and libdap::Constructor.

    - -

    Definition at line 216 of file BaseType.cc.

    - -
    -
    - -

    ◆ type()

    - -
    -
    - - - - - -
    - - - - - - - -
    Type libdap::BaseType::type () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance.

    - -

    Definition at line 365 of file BaseType.cc.

    - -
    -
    - -

    ◆ type_name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::type_name () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance as a string.

    - -

    Definition at line 379 of file BaseType.cc.

    - -
    -
    - -

    ◆ val2buf()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    unsigned int libdap::UInt16::val2buf (void * val,
    bool reuse = false 
    )
    -
    -virtual
    -
    - -

    Loads class data.

    -

    Store the value pointed to by val in the object's internal buffer. This function does not perform any checks, so users must be sure that the thing pointed to can actually be stored in the object's buffer.

    -

    Only simple objects (Int, Float, Byte, and so on) and arrays of these simple objects may be stored using this function. To put data into more complex constructor types, use the functions provided by that class.

    -
    Deprecated:
    Use set_value() in the leaf classes.
    -
    Parameters
    - - - -
    valA pointer to the data to be inserted into the class data buffer.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect. This is currently used only in the Vector class.
    -
    -
    -
    Returns
    The size (in bytes) of the information copied from val.
    -
    See also
    Grid
    -
    -Vector::val2buf
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 179 of file UInt16.cc.

    - -
    -
    - -

    ◆ var() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::BaseType::var (const string & name = "",
    bool exact_match = true,
    btp_stack * s = 0 
    )
    -
    -virtualinherited
    -
    - -

    Returns a pointer to a member of a constructor class.

    -

    Returns a pointer to the contained variable in a composite class. The composite classes are those made up of aggregated simple data types. Array, Grid, and Structure are composite types, while Int and Float are simple types. This function is only used by composite classes. The BaseType implementation always returns null.

    -

    Several of the subclasses provide alternate access methods that make sense for that particular data type. For example, the Array class defines a *var(int i) method that returns the ith entry in the Array data, and the Structure provides a *var(Vars_iter) function using a pseudo-index to access the different members of the structure.

    -
    Parameters
    - - - - -
    nameThe name of the class member. Defaults to ""
    exact_matchTrue if only interested in variables whose full names match n exactly. If false, returns the first variable whose name matches name. For example, if name is x and point.x is a variable, then var("x", false) would return a BaseType pointer to point.x. If exact_match was true then name would need to be "point.x" for var to return that pointer. This feature simplifies constraint expressions for datasets which have complex, nested, constructor variables. Defaults to true.
    sRecord the path to name. Defaults to null, in which case it is not used.
    -
    -
    -
    Returns
    A pointer to the member named in the n argument. If no name is given, the function returns the first (only) variable. For example, an Array has only one variable, while a Structure can have many.
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 758 of file BaseType.cc.

    - -
    -
    - -

    ◆ var() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::BaseType::var (const string & name,
    btp_stack & s 
    )
    -
    -virtualinherited
    -
    -

    This version of var(...) searches for name and returns a pointer to the BaseType object if found. It uses the same search algorithm as BaseType::var(const string &, bool, btp_stack *) when exact_match is false. In addition to returning a pointer to the variable, it pushes onto s a BaseType pointer to each constructor type that ultimately contains name.

    -
    Note
    The BaseType implementation always returns null. There are no default values for the parameters. If var() is called w/o any params, the three parameter version will be used.
    -
    Deprecated:
    This method is deprecated because it tries first to use exact_match and, if that fails, then tries leaf_match. It's better to use the alternate form of var(...) and specify exactly what you'd like to do.
    -
    Returns
    A pointer to the named variable.
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 780 of file BaseType.cc.

    - -
    -
    - -

    ◆ width()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::UInt16::width (bool constrained = false) const
    -
    -virtual
    -
    - -

    How many bytes does this variable use Return the number of bytes of storage this variable uses. For scalar types, this is pretty simple (an int32 uses 4 bytes, etc.). For arrays and Constructors, it is a bit more complex. Note that a scalar String variable uses sizeof(String*) bytes, not the length of the string value. The width() of a String array returns the number of elements in the array times sizeof(String*).

    -
    Parameters
    - - -
    constrainedShould the current constraint be taken into account?
    -
    -
    -
    Returns
    Bytes of storage
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 117 of file UInt16.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1UInt16.js b/html/classlibdap_1_1UInt16.js deleted file mode 100644 index 456c4ca57..000000000 --- a/html/classlibdap_1_1UInt16.js +++ /dev/null @@ -1,78 +0,0 @@ -var classlibdap_1_1UInt16 = -[ - [ "btp_stack", "classlibdap_1_1UInt16.html#ae9c6e71855b90a0e552713011c9ab81f", null ], - [ "UInt16", "classlibdap_1_1UInt16.html#ab4b8895483d15ab84eb4fda029089bc8", null ], - [ "UInt16", "classlibdap_1_1UInt16.html#a4481b161be1fad4e9c2ea3c1293d540b", null ], - [ "~UInt16", "classlibdap_1_1UInt16.html#a80f06928519cce10294f8ef2b65ebfcb", null ], - [ "UInt16", "classlibdap_1_1UInt16.html#a7461c6700f93df720efd8fd540cb98e8", null ], - [ "add_var", "classlibdap_1_1UInt16.html#adca3c2621c4a509537c18362005d7f7f", null ], - [ "add_var_nocopy", "classlibdap_1_1UInt16.html#aa1192360cea4dc516c822cd3e13dc723", null ], - [ "attributes", "classlibdap_1_1UInt16.html#a97452f06d2188eb838399a709246b5e9", null ], - [ "buf2val", "classlibdap_1_1UInt16.html#a80b1b42ac738b62de9a8d4d0b1c2d50c", null ], - [ "check_semantics", "classlibdap_1_1UInt16.html#aec503abec2fd3090e7738c0a575491f8", null ], - [ "clear_local_data", "classlibdap_1_1UInt16.html#aaddb97a4efbe035f41deaf03c6e8683f", null ], - [ "compute_checksum", "classlibdap_1_1UInt16.html#a019f53455cc1e502103dc1e4f2b1ba22", null ], - [ "d4_ops", "classlibdap_1_1UInt16.html#a512a356f31ed6c4c1a368da0b054408a", null ], - [ "dataset", "classlibdap_1_1UInt16.html#a47521ce321a17e6ce217870cb6a1a7aa", null ], - [ "deserialize", "classlibdap_1_1UInt16.html#aa2291137d78a57a433db3b6ab2f31d1b", null ], - [ "deserialize", "classlibdap_1_1UInt16.html#ac647da7d972e876ebd5e9855a33deb13", null ], - [ "dump", "classlibdap_1_1UInt16.html#ad9f239f1e7b1ec47d67777fd1592ede8", null ], - [ "element_count", "classlibdap_1_1UInt16.html#a5c2235737737b482bfa7536b8aeab810", null ], - [ "FQN", "classlibdap_1_1UInt16.html#a977cb954cc8f0d914d6f66ea0f48a9e3", null ], - [ "get_attr_table", "classlibdap_1_1UInt16.html#a1fcd9537c67e3bf88964b2656ff5bac1", null ], - [ "get_parent", "classlibdap_1_1UInt16.html#a3459cdaa239c33ce111ef360d8dc3017", null ], - [ "intern_data", "classlibdap_1_1UInt16.html#a722d33783aa0272d339b0301a4f77e59", null ], - [ "intern_data", "classlibdap_1_1UInt16.html#a1956e6ea90a745516f5372c859173433", null ], - [ "is_constructor_type", "classlibdap_1_1UInt16.html#a8b8490e0047c6da52945699a132008ea", null ], - [ "is_dap4", "classlibdap_1_1UInt16.html#a7f6835cb5e5589ab5dad3fb4813d3bea", null ], - [ "is_in_selection", "classlibdap_1_1UInt16.html#ae302ab2ec26e9fc5b575bf5d3d09aa5c", null ], - [ "is_simple_type", "classlibdap_1_1UInt16.html#aae57e5b270b3a015d40c8db10b9b5549", null ], - [ "is_vector_type", "classlibdap_1_1UInt16.html#a7107c76dbcab71015141142383b6d022", null ], - [ "length", "classlibdap_1_1UInt16.html#aadcda7a659157bc6a832d8a5fb775b3f", null ], - [ "m_duplicate", "classlibdap_1_1UInt16.html#a0c55b826c8c5dfe7a454dc670e859a41", null ], - [ "name", "classlibdap_1_1UInt16.html#a24c5d67823b3cff7f4245a993072a142", null ], - [ "operator=", "classlibdap_1_1UInt16.html#ab5ae01efca7bb3bd61433be58af14213", null ], - [ "ops", "classlibdap_1_1UInt16.html#a0f82046f304407cb218bfbe88e89518b", null ], - [ "print_dap4", "classlibdap_1_1UInt16.html#afcddbe441380b95c894510c02980b163", null ], - [ "print_decl", "classlibdap_1_1UInt16.html#a2d799fad93255d7f2b803562ae7a5784", null ], - [ "print_decl", "classlibdap_1_1UInt16.html#afd744b0ddeb04e7b173c9e83423ec572", null ], - [ "print_val", "classlibdap_1_1UInt16.html#a482e6f61f36b497517830b68023ac803", null ], - [ "print_val", "classlibdap_1_1UInt16.html#ac814682caeef62518ae7c7cddceeb45a", null ], - [ "print_xml", "classlibdap_1_1UInt16.html#a825820edee179550cfde3dfd4d274f2a", null ], - [ "print_xml", "classlibdap_1_1UInt16.html#a8bd2c7682edd48c64b210bdf247bdef7", null ], - [ "print_xml_writer", "classlibdap_1_1UInt16.html#a11554ff931528b243e9af8173d205b44", null ], - [ "ptr_duplicate", "classlibdap_1_1UInt16.html#a9522d2413078b922c4e499545f623021", null ], - [ "read", "classlibdap_1_1UInt16.html#a1da003c53f2e663223f603ab3fbd7c8e", null ], - [ "read_p", "classlibdap_1_1UInt16.html#a38ff819a432217c55db2e9071928d20c", null ], - [ "send_p", "classlibdap_1_1UInt16.html#a980c0013817836aa77ef74aeec7fb192", null ], - [ "serialize", "classlibdap_1_1UInt16.html#a1db616a4ec9989c3cee3d18c30bf4f27", null ], - [ "serialize", "classlibdap_1_1UInt16.html#aa7772b37ff53b02e70c146da59c9c4c7", null ], - [ "set_attr_table", "classlibdap_1_1UInt16.html#a572a1d76a75981abac83a4241e90c0fa", null ], - [ "set_attributes", "classlibdap_1_1UInt16.html#ad4dda4cf43dca838d3de183b8e01cd09", null ], - [ "set_attributes_nocopy", "classlibdap_1_1UInt16.html#afd0e5f87d19020f560d5c1ff8dd4d6a3", null ], - [ "set_in_selection", "classlibdap_1_1UInt16.html#a2bc036248cdaf1affac464170f32ad30", null ], - [ "set_is_dap4", "classlibdap_1_1UInt16.html#abca9ddaa9a1ada8447cbe7193e8e288a", null ], - [ "set_length", "classlibdap_1_1UInt16.html#a4fe343c1eeb6fb1d61ab030433651d90", null ], - [ "set_name", "classlibdap_1_1UInt16.html#a86504564f45a3e6748c6f1cc0ff4e9fa", null ], - [ "set_parent", "classlibdap_1_1UInt16.html#a5b6a39f6ce6594fa74f3fc899ac9a966", null ], - [ "set_read_p", "classlibdap_1_1UInt16.html#a4533905a450d2a7af32e7d5acd557676", null ], - [ "set_send_p", "classlibdap_1_1UInt16.html#aba7b27635c95b74536de18393133628e", null ], - [ "set_synthesized_p", "classlibdap_1_1UInt16.html#a595cb4059cff24f801a1b6da79bd2f9e", null ], - [ "set_type", "classlibdap_1_1UInt16.html#af74f8d1ef57c9fcca46f620f75d175a3", null ], - [ "set_value", "classlibdap_1_1UInt16.html#a584b569a4013469967b5c0275c6f4b21", null ], - [ "synthesized_p", "classlibdap_1_1UInt16.html#ae64e677da27249473cdba0b60cdbb90a", null ], - [ "toString", "classlibdap_1_1UInt16.html#a701eb3361f5b5628329ece019cd34519", null ], - [ "transfer_attributes", "classlibdap_1_1UInt16.html#add8e836c622042a339152a6c31e5bdfb", null ], - [ "transform_to_dap2", "classlibdap_1_1UInt16.html#affec8a11e9cc035d4b1e8fb9a87b2072", null ], - [ "transform_to_dap4", "classlibdap_1_1UInt16.html#adb03e2e1e40c3c888577c4666831a949", null ], - [ "type", "classlibdap_1_1UInt16.html#af8e803b20a7a7dc5f2ef351d7fac4a56", null ], - [ "type_name", "classlibdap_1_1UInt16.html#a18a42c8ec35cb5b15cd651a4152f8a2c", null ], - [ "val2buf", "classlibdap_1_1UInt16.html#a0212ba69258238b711d8aef3174f3fb7", null ], - [ "value", "classlibdap_1_1UInt16.html#aae80af0be593369452916b7bdd115afc", null ], - [ "var", "classlibdap_1_1UInt16.html#a4dc4fac1bb6083f6db645f37bfd59b85", null ], - [ "var", "classlibdap_1_1UInt16.html#adecfc442b5927c79933c7f71cfe03fd2", null ], - [ "width", "classlibdap_1_1UInt16.html#a8545ca3b3a55da3eabc9b4d43e008e3e", null ], - [ "d_buf", "classlibdap_1_1UInt16.html#a0fda36917d73f1a603c254991ed97757", null ], - [ "d_in_selection", "classlibdap_1_1UInt16.html#a949a89714965d7afdcd1e3edc8b7f0d4", null ], - [ "d_is_synthesized", "classlibdap_1_1UInt16.html#a629e97e8eb7d285b54c9af8c1ec9a29a", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1UInt16__inherit__graph.map b/html/classlibdap_1_1UInt16__inherit__graph.map deleted file mode 100644 index ce8cd00cc..000000000 --- a/html/classlibdap_1_1UInt16__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1UInt16__inherit__graph.md5 b/html/classlibdap_1_1UInt16__inherit__graph.md5 deleted file mode 100644 index 323e04c3c..000000000 --- a/html/classlibdap_1_1UInt16__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -3c0965eb2b6f766541351de681a9f45f \ No newline at end of file diff --git a/html/classlibdap_1_1UInt16__inherit__graph.png b/html/classlibdap_1_1UInt16__inherit__graph.png deleted file mode 100644 index f2cfc73def4fd3288c94f6408ed259adb5c4de8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63061 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�FF%siM zceLe@sIQ>Cd@A^RG{&mE{kV7)bY#A{F6e+Ky>6Pc^fZVrW+J>A0Ts_TfE(!PBNH;;2Os-!B^tg0WMwa60-^jaM+0?o9 z3w4RU;}M?Gf3xDjsU_Z1=@itd}yo4+vC2RYJkd|$?VtdX|Im!2~97AZYW z$Qr4`+7Sacu!n)mR(>wEF+vzu92ADRN3E$=LO*pn?i`6%S8o-LJcd-zo+uNIZU)~x86|U{ABy!J zczMP;M}TYnDh$#Q(0TCXfM9q+S|d|rW?xmB;fyMPlZS!?EAyJD-xi2V{T0`&&oygg z5%6*l-U9>e^~Q6QjMmv4jR*$|ZJR+dQNZK67Al`Je!Bd;8q7}6WndnA=Z}VNtPedh zP`FdeHQSGM5LJq}c=cg=F74gpH}nMuqp@l?fjctX_6QvZ8H&}^B4`?8E9S1!v6hC# zMA1R=5NFHds|G9fFa>aZE1-!Bkf&aat!EQXswP;b5rVttFP|O|2%{|xd}xXumzyTw zz-dYo-^x78vKaFu!!e4CI~zqZtxV}I`|iVMw>oLHk=v+aK}io}@aWUlHSje<(fZmY zlD<5NX0P*`dl6>k<@H5&pC+prwyD%#^)J2Px5dtc4T7@pEpjAtA-$E7nLoK<<8Oj_wjLiJ39XM zn`CXS`9WcFZlCB4L!TauFB5SNYz3IF_&{&4<3h ze!j%#w88fz-#GQ5AVHuvn?ce`9;CkE@NTePwcX5lox;S7Jnl!Th1!Wk^*|A#Fy#6B ze)d-@Vf>P)GLVv`TNb>-&ZSdd!Y!L0_HqY~?b+ys(`}2D-shWFpBj%#G%w&~ADOB>`WL^kef(DmNr~>v9u?)53m^mEb8lW=X-VY zmzm(nzDu!G`t@_`57)899&r`oB+ir-SUS8+Pq5&qyYKKhQtairD*}VIa z!pOy(Yh4{0!sr+62NKx>rf|DQE+mnA0Fb8gmL{|lw69&vMznTkk04^2kH-J|T@zB| z4(A-##~y^-_MBTK-45Tg_pvt^c<<)j3&rODSB+R<7;v*$M&sh?bbo#JXxpY;ndQ6n z_q=B)?d-3eNb%-B_OodxG|JYDm?Pg_c3bw^zE9a36%F_r@Xiy

    mR;E(dwA4LMFU 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%0A!;VI7uH* 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 - - - - - - -libdap: Member List - - - - - - - - - - - -

    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::UInt32 Member List
    -
    -
    - -

    This is the complete list of members for libdap::UInt32, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    add_var(BaseType *bt, Part part=nil)libdap::BaseTypevirtual
    add_var_nocopy(BaseType *bt, Part part=nil) (defined in libdap::BaseType)libdap::BaseTypevirtual
    attributes()libdap::BaseTypevirtual
    BaseType(const string &n, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const string &n, const string &d, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const BaseType &copy_from)libdap::BaseType
    btp_stack typedef (defined in libdap::BaseType)libdap::BaseType
    buf2val(void **val)libdap::UInt32virtual
    check_semantics(string &msg, bool all=false)libdap::BaseTypevirtual
    clear_local_data()libdap::BaseTypeinlinevirtual
    compute_checksum(Crc32 &checksum)libdap::UInt32virtual
    d4_ops(BaseType *b, int op)libdap::BaseTypevirtual
    d_buf (defined in libdap::UInt32)libdap::UInt32protected
    d_in_selection (defined in libdap::BaseType)libdap::BaseTypeprotected
    d_is_synthesized (defined in libdap::BaseType)libdap::BaseTypeprotected
    dataset() constlibdap::BaseTypevirtual
    deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)libdap::UInt32virtual
    deserialize(D4StreamUnMarshaller &um, DMR &dmr)libdap::UInt32virtual
    dump(ostream &strm) constlibdap::UInt32virtual
    element_count(bool leaves=false)libdap::BaseTypevirtual
    FQN() constlibdap::BaseTypevirtual
    get_attr_table()libdap::BaseTypevirtual
    get_parent() constlibdap::BaseTypevirtual
    intern_data(ConstraintEvaluator &eval, DDS &dds)libdap::BaseTypevirtual
    intern_data()libdap::BaseTypevirtual
    is_constructor_type() constlibdap::BaseTypevirtual
    is_dap4() const (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    is_in_selection()libdap::BaseTypevirtual
    is_simple_type() constlibdap::BaseTypevirtual
    is_vector_type() constlibdap::BaseTypevirtual
    length() constlibdap::BaseTypeinlinevirtual
    m_duplicate(const BaseType &bt)libdap::BaseTypeprotected
    name() constlibdap::BaseTypevirtual
    operator=(const UInt32 &rhs) (defined in libdap::UInt32)libdap::UInt32
    operator=(const BaseType &rhs) (defined in libdap::BaseType)libdap::BaseType
    ops(BaseType *b, int op)libdap::UInt32virtual
    print_dap4(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
    print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_val(FILE *out, string space="", bool print_decl_p=true)libdap::UInt32virtual
    print_val(ostream &out, string space="", bool print_decl_p=true)libdap::UInt32virtual
    print_xml(FILE *out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml(ostream &out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml_writer(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
    ptr_duplicate()libdap::UInt32virtual
    read()libdap::BaseTypevirtual
    read_p()libdap::BaseTypevirtual
    send_p()libdap::BaseTypevirtual
    serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)libdap::UInt32virtual
    serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)libdap::UInt32virtual
    set_attr_table(const AttrTable &at)libdap::BaseTypevirtual
    set_attributes(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_attributes_nocopy(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_in_selection(bool state)libdap::BaseTypevirtual
    set_is_dap4(const bool v) (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    set_length(int)libdap::BaseTypeinlinevirtual
    set_name(const string &n)libdap::BaseTypevirtual
    set_parent(BaseType *parent)libdap::BaseTypevirtual
    set_read_p(bool state)libdap::BaseTypevirtual
    set_send_p(bool state)libdap::BaseTypevirtual
    set_synthesized_p(bool state)libdap::BaseTypevirtual
    set_type(const Type &t)libdap::BaseTypevirtual
    set_value(dods_uint32 val) (defined in libdap::UInt32)libdap::UInt32virtual
    synthesized_p()libdap::BaseTypevirtual
    toString()libdap::BaseTypevirtual
    transfer_attributes(AttrTable *at)libdap::BaseTypevirtual
    transform_to_dap2(AttrTable *parent_attr_table)libdap::BaseTypevirtual
    transform_to_dap4(D4Group *root, Constructor *container)libdap::BaseTypevirtual
    type() constlibdap::BaseTypevirtual
    type_name() constlibdap::BaseTypevirtual
    UInt32(const string &n)libdap::UInt32
    UInt32(const string &n, const string &d)libdap::UInt32
    UInt32(const UInt32 &copy_from) (defined in libdap::UInt32)libdap::UInt32
    val2buf(void *val, bool reuse=false)libdap::UInt32virtual
    value() const (defined in libdap::UInt32)libdap::UInt32virtual
    var(const string &name="", bool exact_match=true, btp_stack *s=0)libdap::BaseTypevirtual
    var(const string &name, btp_stack &s)libdap::BaseTypevirtual
    width(bool constrained=false) constlibdap::UInt32virtual
    ~BaseType() (defined in libdap::BaseType)libdap::BaseTypevirtual
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    ~UInt32() (defined in libdap::UInt32)libdap::UInt32inlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1UInt32.html b/html/classlibdap_1_1UInt32.html deleted file mode 100644 index 7d1d6c836..000000000 --- a/html/classlibdap_1_1UInt32.html +++ /dev/null @@ -1,2937 +0,0 @@ - - - - - - - -libdap: libdap::UInt32 Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    - -

    Holds a 32-bit unsigned integer. - More...

    - -

    #include <UInt32.h>

    -
    -Inheritance diagram for libdap::UInt32:
    -
    -
    Inheritance graph
    - - - - -
    - - - - -

    -Public Types

    -typedef stack< BaseType * > btp_stack
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual void add_var (BaseType *bt, Part part=nil)
     Add a variable. More...
     
    -virtual void add_var_nocopy (BaseType *bt, Part part=nil)
     
    virtual unsigned int buf2val (void **val)
     Reads the class data. More...
     
    virtual bool check_semantics (string &msg, bool all=false)
     Compare an object's current state with the semantics of its type. More...
     
    virtual void clear_local_data ()
     
    virtual void compute_checksum (Crc32 &checksum)
     include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum. More...
     
    virtual bool d4_ops (BaseType *b, int op)
     Evaluator a relop for DAP4. More...
     
    virtual string dataset () const
     Returns the name of the dataset used to create this instance. More...
     
    virtual bool deserialize (UnMarshaller &um, DDS *dds, bool reuse=false)
     Receive data from the net. More...
     
    virtual void deserialize (D4StreamUnMarshaller &um, DMR &dmr)
     
    virtual void dump (ostream &strm) const
     dumps information about this object More...
     
    virtual int element_count (bool leaves=false)
     Count the members of constructor types. More...
     
    virtual std::string FQN () const
     
    virtual AttrTableget_attr_table ()
     
    virtual BaseTypeget_parent () const
     
    virtual bool is_constructor_type () const
     Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable. More...
     
    -virtual bool is_dap4 () const
     
    virtual bool is_in_selection ()
     Is this variable part of the current selection? More...
     
    virtual bool is_simple_type () const
     Returns true if the instance is a numeric, string or URL type variable. More...
     
    virtual bool is_vector_type () const
     Returns true if the instance is a vector (i.e., array) type variable. More...
     
    virtual int length () const
     How many elements are in this variable. More...
     
    virtual string name () const
     Returns the name of the class instance. More...
     
    -UInt32operator= (const UInt32 &rhs)
     
    virtual bool ops (BaseType *b, int op)
     Evaluate relational operators. More...
     
    virtual void print_dap4 (XMLWriter &xml, bool constrained=false)
     
    virtual void print_decl (FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_decl (ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_val (FILE *out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_val (ostream &out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_xml (FILE *out, string space=" ", bool constrained=false)
     
    virtual void print_xml (ostream &out, string space=" ", bool constrained=false)
     
    virtual void print_xml_writer (XMLWriter &xml, bool constrained=false)
     
    virtual BaseTypeptr_duplicate ()
     
    virtual bool read ()
     Read data into a local buffer. More...
     
    virtual bool read_p ()
     Has this variable been read? More...
     
    virtual bool send_p ()
     Should this variable be sent? More...
     
    virtual bool serialize (ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
     Move data to the net, then remove them from the object. More...
     
    virtual void serialize (D4StreamMarshaller &m, DMR &dmr, bool filter=false)
     Serialize an Int8. More...
     
    virtual void set_attr_table (const AttrTable &at)
     
    virtual void set_in_selection (bool state)
     
    -virtual void set_is_dap4 (const bool v)
     
    virtual void set_length (int)
     Set the number of elements for this variable. More...
     
    virtual void set_name (const string &n)
     Sets the name of the class instance. More...
     
    virtual void set_parent (BaseType *parent)
     
    virtual void set_read_p (bool state)
     Sets the value of the read_p property. More...
     
    virtual void set_send_p (bool state)
     
    virtual void set_synthesized_p (bool state)
     
    virtual void set_type (const Type &t)
     Sets the type of the class instance. More...
     
    -virtual bool set_value (dods_uint32 val)
     
    virtual bool synthesized_p ()
     
    virtual string toString ()
     
    virtual void transfer_attributes (AttrTable *at)
     
    virtual std::vector< BaseType * > * transform_to_dap2 (AttrTable *parent_attr_table)
     DAP4 to DAP2 transform. More...
     
    virtual void transform_to_dap4 (D4Group *root, Constructor *container)
     DAP2 to DAP4 transform. More...
     
    virtual Type type () const
     Returns the type of the class instance. More...
     
    virtual string type_name () const
     Returns the type of the class instance as a string. More...
     
     UInt32 (const string &n)
     
     UInt32 (const string &n, const string &d)
     
    UInt32 (const UInt32 &copy_from)
     
    virtual unsigned int val2buf (void *val, bool reuse=false)
     Loads class data. More...
     
    -virtual dods_uint32 value () const
     
    virtual BaseTypevar (const string &name="", bool exact_match=true, btp_stack *s=0)
     Returns a pointer to a member of a constructor class. More...
     
    virtual BaseTypevar (const string &name, btp_stack &s)
     
    virtual unsigned int width (bool constrained=false) const
     How many bytes does this variable use Return the number of bytes of storage this variable uses. For scalar types, this is pretty simple (an int32 uses 4 bytes, etc.). For arrays and Constructors, it is a bit more complex. Note that a scalar String variable uses sizeof(String*) bytes, not the length of the string value. The width() of a String array returns the number of elements in the array times sizeof(String*). More...
     
    virtual D4Attributesattributes ()
     
    -virtual void set_attributes (D4Attributes *)
     
    -virtual void set_attributes_nocopy (D4Attributes *)
     
    Abstract Methods
    virtual void intern_data (ConstraintEvaluator &eval, DDS &dds)
     
    virtual void intern_data ()
     Read data into this variable. More...
     
    - - - - -

    -Protected Member Functions

    void m_duplicate (const BaseType &bt)
     Perform a deep copy. More...
     
    - - - - - - - -

    -Protected Attributes

    -dods_uint32 d_buf
     
    -bool d_in_selection
     
    -bool d_is_synthesized
     
    -

    Detailed Description

    -

    Holds a 32-bit unsigned integer.

    -
    See also
    BaseType
    - -

    Definition at line 59 of file UInt32.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ UInt32() [1/2]

    - -
    -
    - - - - - - - - -
    libdap::UInt32::UInt32 (const string & n)
    -
    -

    The UInt32 constructor accepts the name of the variable to be created.

    -
    Parameters
    - - -
    nA string containing the name of the variable to be created. variable is created
    -
    -
    - -

    Definition at line 80 of file UInt32.cc.

    - -
    -
    - -

    ◆ UInt32() [2/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    libdap::UInt32::UInt32 (const string & n,
    const string & d 
    )
    -
    -

    The UInt32 server-side constructor accepts the name of the variable and the dataset name from which this instance is created.

    -
    Parameters
    - - - -
    nA string containing the name of the variable to be created.
    dA string containing the name of the dataset from which this variable is created
    -
    -
    - -

    Definition at line 90 of file UInt32.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ add_var()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::add_var (BaseTypebt,
    Part part = nil 
    )
    -
    -virtualinherited
    -
    - -

    Add a variable.

    -

    Adds a variable to an instance of a constructor class, such as Array, Structure et cetera. This function is only used by those classes. For constructors with more than one variable, the variables appear in the same order in which they were added (i.e., the order in which add_var() was called). Since this method is only for use by Vectors and Constructors, the BaseType implementation throws InternalErr.

    -
    Note
    For the implementation of this method in Structure, Sequence, et c., first copy bt and then insert the copy. If bt is itself a constructor type you must either use the var() method to get a pointer to the actual instance added to *this or you must first add all of bt's children to it before adding it to *this. The implementations should use m_duplicate() to perform a deep copy of bt.
    -
    Todo:
    We should get rid of the Part parameter and adopt the convention that the first variable is the Array and all subsequent ones are Maps (when dealing with a Grid, the only time Part matters). This would enable several methods to migrate from Structure, Sequence and Grid to Constructor.
    -
    Parameters
    - - - -
    btThe variable to be added to this instance. The caller of this method must free memory it allocates for v. This method will make a deep copy of the object pointed to by v.
    partThe part of the constructor data to be modified. Only meaningful for Grid variables.
    -
    -
    -
    See also
    Part
    - -

    Reimplemented in libdap::Vector, libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 815 of file BaseType.cc.

    - -
    -
    - -

    ◆ attributes()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4Attributes * libdap::BaseType::attributes ()
    -
    -virtualinherited
    -
    -

    DAP4 Attribute methods

    - -

    Definition at line 599 of file BaseType.cc.

    - -
    -
    - -

    ◆ buf2val()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::UInt32::buf2val (void ** val)
    -
    -virtual
    -
    - -

    Reads the class data.

    -

    Reads the class data into the memory referenced by val. The caller should either allocate enough storage to val to hold the class data or set *val to null. If *val is NULL, memory will be allocated by this function with new(). If the memory is allocated this way, the caller is responsible for deallocating that memory. Array and values for simple types are stored as C would store an array.

    -
    Deprecated:
    Use value() in the leaf classes.
    -
    Parameters
    - - -
    valA pointer to a pointer to the memory into which the class data will be copied. If the value pointed to is NULL, memory will be allocated to hold the data, and the pointer value modified accordingly. The calling program is responsible for deallocating the memory references by this pointer.
    -
    -
    -
    Returns
    The size (in bytes) of the information copied to val.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 197 of file UInt32.cc.

    - -
    -
    - -

    ◆ check_semantics()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::check_semantics (string & msg,
    bool all = false 
    )
    -
    -virtualinherited
    -
    - -

    Compare an object's current state with the semantics of its type.

    -

    This function checks the class instance for internal consistency. This is important to check for complex constructor classes. For BaseType, an object is semantically correct if it has both a non-null name and type.

    -

    For example, an Int32 instance would return FALSE if it had no name or no type defined. A Grid instance might return FALSE for more complex reasons, such as having Map arrays of the wrong size or shape.

    -

    This function is used by the DDS class, and will rarely, if ever, be explicitly called by a DODS application program. A variable must pass this test before it is sent, but there may be many other stages in a retrieve operation where it would fail.

    -
    Returns
    Returns FALSE when the current state violates some aspect of the type semantics, TRUE otherwise.
    -
    Parameters
    - - - -
    msgA returned string, containing a message indicating the source of any problem.
    allFor complex constructor types (Grid, Sequence, Structure), this flag indicates whether to check the semantics of the member variables, too.
    -
    -
    -
    See also
    DDS::check_semantics
    - -

    Reimplemented in libdap::Array, libdap::Vector, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1209 of file BaseType.cc.

    - -
    -
    - -

    ◆ clear_local_data()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual void libdap::BaseType::clear_local_data ()
    -
    -inlinevirtualinherited
    -
    -

    Remove any read or set data in the private data of the variable, setting read_p() to false. Used to clear any dynamically allocated storage that holds (potentially large) data. For the simple types, this no-op version is all that's needed. Vector and some other classes define a special version and have serialize() implementations that call it to free data as soon as possible after sending it.

    -
    Note
    Added 7/5/15 jhrg
    -
    -Any specialization of this should make sure to reset the read_p property.
    - -

    Reimplemented in libdap::Sequence, libdap::Vector, libdap::D4Sequence, and libdap::D4Opaque.

    - -

    Definition at line 179 of file BaseType.h.

    - -
    -
    - -

    ◆ compute_checksum()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::UInt32::compute_checksum (Crc32checksum)
    -
    -virtual
    -
    - -

    include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum.

    -
    Parameters
    - - -
    checksumA Crc32 instance that holds the current checksum.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 151 of file UInt32.cc.

    - -
    -
    - -

    ◆ d4_ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::d4_ops (BaseTypeb,
    int op 
    )
    -
    -virtualinherited
    -
    - -

    Evaluator a relop for DAP4.

    -

    This method is used by the filter expression evaluation code in DAP4. Each of the 'data type' classes that support relops must overload this method. In an expression of the form arg1 op arg2, this object is arg1, the parameter 'b' is arg2 and op is the relational operator.

    -
    Note
    I used the same relop codes for DAP4 as in the DAP2 parser/scanner which makes for some coupling between them, but cuts way down on the duplication of the evaluator logic, which is somewhat involved.
    -
    Parameters
    - - - -
    bThe second argument in the relational expression
    opThe infix relational operator
    -
    -
    -
    Returns
    True if the expression is true, False otherwise.
    - -

    Reimplemented in libdap::Str, libdap::Int32, libdap::Float32, libdap::Byte, libdap::Float64, libdap::Int16, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 1282 of file BaseType.cc.

    - -
    -
    - -

    ◆ dataset()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::dataset () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the dataset used to create this instance.

    -

    A dataset from which the data is to be read. The meaning of this string will vary among different types of data sources. It may be the name of a data file or an identifier used to read data from a relational database.

    - -

    Definition at line 358 of file BaseType.cc.

    - -
    -
    - -

    ◆ deserialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::UInt32::deserialize (UnMarshallerum,
    DDSdds,
    bool reuse = false 
    )
    -
    -virtual
    -
    - -

    Receive data from the net.

    -

    Receives data from the network connection identified by the source parameter. The data is put into the class data buffer according to the input dds.

    -

    This function is only used on the client side of the DODS client/server connection.

    -
    Parameters
    - - - - -
    umAn UnMarshaller that knows how to deserialize data types
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure. This would have been received from the server in an earlier transmission.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect.
    -
    -
    -
    Returns
    Always returns TRUE.
    -
    Exceptions
    - - -
    Errorwhen a problem reading from the UnMarshaller is found.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 143 of file UInt32.cc.

    - -
    -
    - -

    ◆ deserialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::UInt32::deserialize (D4StreamUnMarshallerum,
    DMRdmr 
    )
    -
    -virtual
    -
    -

    The DAP4 deserialization method.

    Parameters
    - - - -
    um
    dmr
    -
    -
    -
    Exceptions
    - - -
    Erroror InternalErr
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 174 of file UInt32.cc.

    - -
    -
    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::UInt32::dump (ostream & strm) const
    -
    -virtual
    -
    - -

    dumps information about this object

    -

    Displays the pointer value of this instance and information about this instance.

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the information to
    -
    -
    -
    Returns
    void
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 304 of file UInt32.cc.

    - -
    -
    - -

    ◆ element_count()

    - -
    -
    - - - - - -
    - - - - - - - - -
    int libdap::BaseType::element_count (bool leaves = false)
    -
    -virtualinherited
    -
    - -

    Count the members of constructor types.

    -

    Return a count of the total number of variables in this variable. This is used to count the number of variables held by a constructor variable - for simple type and vector variables it always returns 1.

    -

    For compound data types, there are two ways to count members. You can count the members, or you can count the simple members and add that to the count of the compound members. For example, if a Structure contains an Int32 and another Structure that itself contains two Int32 members, the element count of the top-level structure could be two (one Int32 and one Structure) or three (one Int32 by itself and two Int32's in the subsidiary Structure). Use the leaves parameter to control which kind of counting you desire.

    -
    Returns
    Returns 1 for simple types. For compound members, the count depends on the leaves argument.
    -
    Parameters
    - - -
    leavesThis parameter is only relevant if the object contains other compound data types. If FALSE, the function counts only the data variables mentioned in the object's declaration. If TRUE, it counts the simple members, and adds that to the sum of the counts for the compound members. This parameter has no effect for simple type variables.
    -
    -
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 443 of file BaseType.cc.

    - -
    -
    - -

    ◆ FQN()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::FQN () const
    -
    -virtualinherited
    -
    -

    Return the FQN for this variable. This will include the D4 Group component of the name.

    -
    Returns
    The FQN in a string
    - -

    Reimplemented in libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 332 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - -
    AttrTable & libdap::BaseType::get_attr_table ()
    -
    -virtualinherited
    -
    -

    Get this variable's AttrTable. It's generally a bad idea to return a reference to a contained object, but in this case it seems that building an interface inside BaseType is overkill.

    -

    Use the AttrTable methods to manipulate the table.

    - -

    Definition at line 582 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_parent()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::BaseType::get_parent () const
    -
    -virtualinherited
    -
    -

    Return a pointer to the Constructor or Vector which holds (contains) this variable. If this variable is at the top level, this method returns null.

    -
    Returns
    A BaseType pointer to the variable's parent.
    - -

    Definition at line 751 of file BaseType.cc.

    - -
    -
    - -

    ◆ intern_data() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::intern_data (ConstraintEvaluatoreval,
    DDSdds 
    )
    -
    -virtualinherited
    -
    -

    Similar to using serialize() and deserialize() together in one object. Data are read as for serialize and those values are stored in the objects as deserialize() does but does not write and then read data to/from a stream.

    -

    This method is defined by the various data type classes. It calls the read() abstract method. Unlike serialize(), this method does not clear the memory use to hold the data values, so the caller should make sure to delete the DDS or the variable as soon as possible.

    -
    Parameters
    - - - -
    evalUse this as the constraint expression evaluator.
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    -
    -
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 908 of file BaseType.cc.

    - -
    -
    - -

    ◆ intern_data() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::BaseType::intern_data ()
    -
    -virtualinherited
    -
    - -

    Read data into this variable.

    -
    Parameters
    - - - -
    evalEvaluator for a constraint expression
    dmrDMR for the whole dataset
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 927 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_constructor_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_constructor_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable.

    -
    Returns
    True if the instance is a Structure, Sequence or Grid, False otherwise.
    - -

    Definition at line 412 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_in_selection ()
    -
    -virtualinherited
    -
    - -

    Is this variable part of the current selection?

    -

    Does this variable appear in either the selection part or as a function argument in the current constrain expression. If this property is set (true) then implementations of the read() method should read this variable.

    -
    Note
    This method does not check, nor does it know about the semantics of, string arguments passed to functions. Those functions might include variable names in strings; they are responsible for reading those variables. See the grid (func_grid_select()) for an example.
    -
    See also
    BaseType::read()
    - -

    Definition at line 703 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_simple_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_simple_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a numeric, string or URL type variable.

    -
    Returns
    True if the instance is a scalar numeric, String or URL variable, False otherwise. Arrays (even of simple types) return False.
    -
    See also
    is_vector_type()
    - -

    Definition at line 393 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_vector_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_vector_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a vector (i.e., array) type variable.

    -
    Returns
    True if the instance is an Array, False otherwise.
    - -

    Definition at line 402 of file BaseType.cc.

    - -
    -
    - -

    ◆ length()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual int libdap::BaseType::length () const
    -
    -inlinevirtualinherited
    -
    - -

    How many elements are in this variable.

    -
    Todo:
    change the return type to int64_t
    -
    Returns
    The number of elements; 1 for scalars
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, libdap::Str, and libdap::D4Opaque.

    - -

    Definition at line 207 of file BaseType.h.

    - -
    -
    - -

    ◆ m_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::m_duplicate (const BaseTypebt)
    -
    -protectedinherited
    -
    - -

    Perform a deep copy.

    -

    Perform a deep copy. Copies the values of bt into *this. Pointers are dereferenced and their values are copied into a newly allocated instance.

    -
    Parameters
    - - -
    btThe source object.
    -
    -
    - -

    Definition at line 86 of file BaseType.cc.

    - -
    -
    - -

    ◆ name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::name () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the class instance.

    - -

    Definition at line 320 of file BaseType.cc.

    - -
    -
    - -

    ◆ ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::UInt32::ops (BaseTypeb,
    int op 
    )
    -
    -virtual
    -
    - -

    Evaluate relational operators.

    -

    This method contains the relational operators used by the constraint expression evaluator in the DDS class. Each class that wants to be able to evaluate relational expressions must overload this function. The implementation in BaseType throws an InternalErr exception. The DAP library classes Byte, ..., Url provide specializations of this method. It is not meaningful for classes such as Array because relational expressions using Array are not supported.

    -

    The op argument refers to a table generated by bison from the constraint expression parser. Use statements like the following to correctly interpret its value:

    -
    switch (op) {
    -    case EQUAL: return i1 == i2;
    -    case NOT_EQUAL: return i1 != i2;
    -    case GREATER: return i1 > i2;
    -    case GREATER_EQL: return i1 >= i2;
    -    case LESS: return i1 < i2;
    -    case LESS_EQL: return i1 <= i2;
    -    case REGEXP: throw Error("Regular expressions are not supported for integer values");
    -    default: throw Error("Unknown operator");
    -}
    -

    This function is used by the constraint expression evaluator.

    -
    Parameters
    - - - -
    bCompare the value of this instance with b.
    opAn integer index indicating which relational operator is implied. Choose one from the following: EQUAL, NOT_EQUAL, GREATER, GREATER_EQL, LESS, LESS_EQL, and REGEXP.
    -
    -
    -
    Returns
    The boolean value of the comparison.
    -
    See also
    BaseType::d4_ops(BaseType *, int)
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 247 of file UInt32.cc.

    - -
    -
    - -

    ◆ print_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_dap4 (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the DAP4 XML representation for this variable. This method is used to build the DAP4 DMR response object.

    -
    Parameters
    - - - -
    xmlAn XMLWriter that will do the serialization
    constrainedTrue if the response should show the variables subject to the current constraint expression.
    -
    -
    - -

    Reimplemented in libdap::Array, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 1164 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (FILE * out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1003 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (ostream & out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1054 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_val() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::UInt32::print_val (FILE * out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtual
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output stream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 228 of file UInt32.cc.

    - -
    -
    - -

    ◆ print_val() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::UInt32::print_val (ostream & out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtual
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output ostream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 236 of file UInt32.cc.

    - -
    -
    - -

    ◆ print_xml() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (FILE * out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination.
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1105 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (ostream & out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1120 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml_writer()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml_writer (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    - -

    Reimplemented in libdap::Array, libdap::D4Enum, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1134 of file BaseType.cc.

    - -
    -
    - -

    ◆ ptr_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::UInt32::ptr_duplicate ()
    -
    -virtual
    -
    -

    Clone this instance. Allocate a new instance and copy *this into it. This method must perform a deep copy.

    @note This method should \e not copy data values, but must copy all
    -other fields in the object.
    -
    Returns
    A newly allocated copy of this.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 99 of file UInt32.cc.

    - -
    -
    - -

    ◆ read()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read ()
    -
    -virtualinherited
    -
    - -

    Read data into a local buffer.

    -

    This method should be implemented for each of the data type classes (Byte, ..., Grid) when using the DAP class library to build a server. This method is only for DAP servers. The library provides a default definition here which throws an InternalErr exception unless the read_p property has been set. In that case it returns false, indicating that all the data have been read. The latter case can happen when building a constant value that needs to be passed to a function. The variable/constant is loaded with a value when it is created.

    -

    When implementing a new DAP server, the Byte, ..., Grid data type classes are usually specialized. In each of those specializations read() should be defined to read values from the data source and store them in the object's local buffer. The read() method is called by other methods in this library. When writing read(), follow these rules:

    -
      -
    • -read() should throw Error if it encounters an error. The message should be verbose enough to be understood by someone running a client on a different machine.
    • -
    • -The value(s) should be read if and only if either send_p() or is_in_selection() return true. If neither of these return true, the value(s) should not be read. This is important when writing read() for a Constructor type such as Grid where a client may ask for only the map vectors (and thus reading the much larger Array part is not needed).
    • -
    • -For each specialization of read(), the method should first test the value of the read_p property (using the read_p() method) and read values only if the value of read_p() is false. Once the read() method reads data and stores it in the instance, it must set the value of the read_p property to true using set_read_p(). If your read() methods fail to do this data may not serialize correctly.
    • -
    • -The Array::read() and Grid::read() methods should take into account any restrictions on Array sizes.
    • -
    • -If you are writing Sequence::read(), be sure to check the documentation for Sequence::read_row() and Sequence::serialize() so you understand how Sequence::read() is being called.
    • -
    • -

      For Sequence::read(), your specialization must correctly manage the unsent_data property and row count in addition to the read_p property (handle the read_p property as describe above). For a Sequence to serialize correctly, once all data from the Sequence has been read, unsent_data property must be set to false (use Sequence::set_unsent_data()). Also, at that time the row number counter must be reset (use Sequence::reset_row_counter()). Typically the correct time to set unsent_data to false and reset the row counter is the time when Sequence::read() return false indicating that all the data for the Sequence have been read. Failure to handle these tasks will break serialization of nested Sequences. Note that when Sequence::read() returns with a result of true (indicating there is more data to send, the value of the unsent_data property should be true.

      -

      Also, if you server must handle nested sequences, be sure to read about subclassing set_read_p().

      -
    • -
    -
    Todo:
    Modify the D4 serialize code so that it supports the true/false behavior of read() for arrays.
    -
    Todo:
    Modify all of the stock handlers so they conform to this!
    -
    Returns
    False means more data remains to be read, True indicates that no more data need to be read. For Sequence and D4Sequence, this method will generally read one instance of the Sequence; for other types it will generally read the entire variable modulo any limitations due to a constraint. However, the library should be written so that read can return less than all of the data for a variable - serialize() would then call the function until it returns True.
    -
    See also
    BaseType
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 899 of file BaseType.cc.

    - -
    -
    - -

    ◆ read_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read_p ()
    -
    -virtualinherited
    -
    - -

    Has this variable been read?

    -

    Returns true if the value(s) for this variable have been read from the data source, otherwise returns false. This method is used to determine when values need to be read using the read() method. When read_p() returns true, this library assumes that buf2val() (and other methods such as get_vec()) can be used to access the value(s) of a variable.

    -
    Returns
    True if the variable's value(s) have been read, false otherwise.
    - -

    Definition at line 480 of file BaseType.cc.

    - -
    -
    - -

    ◆ send_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::send_p ()
    -
    -virtualinherited
    -
    - -

    Should this variable be sent?

    -

    Returns the state of the send_p property. If true, this variable should be sent to the client, if false, it should not. If no constraint expression (CE) has been evaluated, this property is true for all variables in a data source (i.e., for all the variables listed in a DDS). If a CE has been evaluated, this property is true only for those variables listed in the projection part of the CE.

    -
    Returns
    True if the variable should be sent to the client, false otherwise.
    - -

    Definition at line 554 of file BaseType.cc.

    - -
    -
    - -

    ◆ serialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::UInt32::serialize (ConstraintEvaluatoreval,
    DDSdds,
    Marshallerm,
    bool ce_eval = true 
    )
    -
    -virtual
    -
    - -

    Move data to the net, then remove them from the object.

    -

    Sends the data from the indicated (local) dataset through the connection identified by the Marshaller parameter. If the data is not already incorporated into the DDS object, read the data from the dataset. Once the data are sent (written to the Marshaller), they are deleted from the object and the object state is reset so that they will be read again if the read() method is called.

    -

    This function is only used on the server side of the client/server connection, and is generally only called from the ResponseBuilder functions. It has no BaseType implementation; each datatype child class supplies its own implementation.

    @param eval Use this as the constraint expression evaluator.
    -
    Parameters
    - - - - -
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    mA marshaller used to serialize data types
    ce_evalA boolean value indicating whether to evaluate the DODS constraint expression that may accompany this dataset. The constraint expression is stored in the dds.
    -
    -
    -
    Returns
    This method always returns true. Older versions used the return value to signal success or failure.
    -
    Note
    We changed the default behavior of this method so that it calls BaseType::clear_local_data() once the values are sent. This, combined with the behavior that read() is called by this method just before data are sent, means that data for any given variable remain in memory for the shortest time possible. Furthermore, since variables are serialized one at a time, no more than one variable's data will be in memory at any given time when using the default behavior. Some code - code that uses intern_data() or server functions - might alter this default behavior. Only Array (i.e. Vector), Sequence, D4Sequence and D4Opaque types actually hold data in dynamically allocated memory, so sonly those types have the new/changed behavior. This change was made on 7/5/15.
    -
    Exceptions
    - - - -
    InternalErr.
    Error.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 124 of file UInt32.cc.

    - -
    -
    - -

    ◆ serialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::UInt32::serialize (D4StreamMarshallerm,
    DMRdmr,
    bool filter = false 
    )
    -
    -virtual
    -
    - -

    Serialize an Int8.

    -
    Parameters
    - - - - - -
    m
    dmrUnused
    evalUnused
    filterUnused
    -
    -
    -
    Exceptions
    - - -
    Erroris thrown if the value needs to be read and that operation fails.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 165 of file UInt32.cc.

    - -
    -
    - -

    ◆ set_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_attr_table (const AttrTableat)
    -
    -virtualinherited
    -
    -

    Set this variable's attribute table.

    Parameters
    - - -
    atSource of the attributes.
    -
    -
    - -

    Definition at line 590 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_in_selection (bool state)
    -
    -virtualinherited
    -
    -

    Set the in_selection property to state. This property indicates that the variable is used as a parameter to a constraint expression function or that it appears as an argument in a selection sub-expression. If set (true), implementations of the BaseType::read() method should read this variable.

    -
    Parameters
    - - -
    stateSet the in_selection property to this state.
    -
    -
    -
    See also
    BaseType::read()
    -
    -BaseType::is_in_selection() for more information.
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 718 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_length()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::BaseType::set_length (int )
    -
    -inlinevirtualinherited
    -
    - -

    Set the number of elements for this variable.

    -
    Todo:
    change param type to int64_t
    -
    Parameters
    - - -
    lThe number of elements
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, and libdap::Vector.

    - -

    Definition at line 214 of file BaseType.h.

    - -
    -
    - -

    ◆ set_name()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_name (const string & n)
    -
    -virtualinherited
    -
    - -

    Sets the name of the class instance.

    - -

    Reimplemented in libdap::Vector.

    - -

    Definition at line 344 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_parent()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_parent (BaseTypeparent)
    -
    -virtualinherited
    -
    -

    Set the parent property for this variable.

    -
    Note
    Added ability to set parent to null. 10/19/12 jhrg
    -
    Parameters
    - - -
    parentPointer to the Constructor of Vector parent variable or null if the variable has no parent (if it is at the top-level of a DAP2/3 DDS).
    -
    -
    -
    Exceptions
    - - -
    InternalErrthrown if called with anything other than a Constructor, Vector or Null.
    -
    -
    - -

    Definition at line 733 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_read_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_read_p (bool state)
    -
    -virtualinherited
    -
    - -

    Sets the value of the read_p property.

    -

    Sets the value of the read_p property. This indicates that the value(s) of this variable has/have been read. An implementation of the read() method should use this to set the read_p property to true.

    -
    Note
    If the is_synthesized property is true, this method will not alter the is_read property. If you need that behavior, specialize the method in your subclasses if the various types.
    -
    -For most of the types the default implementation of this method is fine. However, if you're building a server which must handle data represented using nested sequences, then you may need to provide a specialization of Sequence::set_read_p(). By default Sequence::set_read_p() recursively sets the read_p property for all child variables to state. For servers where one Sequence reads an outer set of values and another reads an inner set, this is cumbersome. In such a case, it is easier to specialize Sequence::set_read_p() so that it does not recursively set the read_p property for the inner Sequence. Be sure to see the documentation for the read() method!
    -
    Todo:
    Look at making synthesized variables easier to implement and at making them more integrated into the overall CE evaluation process. Maybe the code that computes the synthesized var's value should be in the that variable's read() method? This might provide a way to get rid of the awkward 'projection functions' by replacing them with real children of BaseType. It would also provide a way to clean up the way the synthesized_p prop intrudes on the read_p prop.
    -
    See also
    BaseType::read()
    -
    Parameters
    - - -
    stateSet the read_p property to this state.
    -
    -
    - -

    Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 516 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_send_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_send_p (bool state)
    -
    -virtualinherited
    -
    -

    Sets the value of the send_p flag. This function is meant to be called from within the constraint evaluator of other code which determines that this variable should be returned to the client. Data are ready to be sent when both the d_is_send and d_is_read flags are set to TRUE.

    -
    Parameters
    - - -
    stateThe logical state to set the send_p flag.
    -
    -
    - -

    Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 568 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_synthesized_p (bool state)
    -
    -virtualinherited
    -
    -

    Set the synthesized flag. Before setting this flag be sure to set the read_p() state. Once this flag is set you cannot alter the state of the read_p flag!

    -
    See also
    synthesized_p()
    - -

    Definition at line 463 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_type()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_type (const Typet)
    -
    -virtualinherited
    -
    - -

    Sets the type of the class instance.

    - -

    Definition at line 372 of file BaseType.cc.

    - -
    -
    - -

    ◆ synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::synthesized_p ()
    -
    -virtualinherited
    -
    -

    Returns true if the variable is a synthesized variable. A synthesized variable is one that is added to the dataset by the server (usually with a `projection function'.

    - -

    Definition at line 452 of file BaseType.cc.

    - -
    -
    - -

    ◆ toString()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::toString ()
    -
    -virtualinherited
    -
    -

    Write out the object's internal fields in a string. To be used for debugging when regular inspection w/ddd or gdb isn't enough.

    -
    Returns
    A string which shows the object's internal stuff.
    - -

    Reimplemented in libdap::Sequence.

    - -

    Definition at line 184 of file BaseType.cc.

    - -
    -
    - -

    ◆ transfer_attributes()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::transfer_attributes (AttrTableat_container)
    -
    -virtualinherited
    -
    -

    Transfer attributes from a DAS object into this variable. Because of the rough history of the DAS object and the way that various server code built the DAS, this is necessarily a heuristic process. The intent is that this method will be overridden by handlers that need to look for certain patterns in the DAS (e.g., hdf4's odd variable_dim_n; where n = 0, 1, 2, ...) attribute containers.

    -

    There should be a one-to-one mapping between variables and attribute containers. However, in some cases one variable has attributes spread across several top level containers and in some cases one container is used by several variables

    -
    Note
    This method is technically unnecessary because a server (or client) can easily add attributes directly using the DDS::get_attr_table or BaseType::get_attr_table methods and then poke values in using any of the methods AttrTable provides. This method exists to ease the transition to DDS objects which contain attribute information for the existing servers (Since they all make DAS objects separately from the DDS). They could be modified to use the same AttrTable methods but operate on the AttrTable instances in a DDS/BaseType instead of those in a DAS.
    -
    Parameters
    - - -
    at_containerTransfer attributes from this container.
    -
    -
    -
    Returns
    void
    - -

    Reimplemented in libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 644 of file BaseType.cc.

    - -
    -
    - -

    ◆ transform_to_dap2()

    - -
    -
    - - - - - -
    - - - - - - - - -
    std::vector< BaseType * > * libdap::BaseType::transform_to_dap2 (AttrTableparent_attr_table)
    -
    -virtualinherited
    -
    - -

    DAP4 to DAP2 transform.

    -

    For the current BaseType, return a DAP2 'copy' of the variable.

    -
    Note
    For most DAP4 types, in this implementation of DAP2 the corresponding DAP4 type is the same. These types have a different representations in DAP2 and DAP4: Sequences (which are D4Sequences in the DAP4 implementation),
      -
    • Grids (which are semantically subsumed by coverages in DAP4)
    • -
    • Arrays (which use shared dimensions in DAP4)
    • -
    -
    -

    Additionally DAP4 adds the following types:

      -
    • UInt8, Int8, and Char which map to Byte in DAP2.
    • -
    • Int64, Unit64 which have no natural representation in DAP2.
    • -
    • Opaque Possible Byte stuff[] plus metadata?
    • -
    • Enum's can be represented as Int32.
    • -
    • Groups, with the exception of the root group "disappear" into the names of their member variables. Specifically the Group name is add as a prefix followed by a "/" separator to the names of all of the Group's member groups variables.
    • -
    -
    Parameters
    - - -
    TheAttrTable pointer parent_attr_table is used by Groups, which disappear from the DAP2 representation. Their children are returned in the the BAseType vector their attributes are added to parent_attr_table;
    -
    -
    -
    Returns
    A pointer to a vector of BaseType pointers (right?). In most cases this vector will contain a single pointer but DAP4 types 'disappear' such as Group will return all of their member variables in the vector. DAP4 types with no representation in DAP2 (ex: UInt64) the will return a NULL pointer and so this must be tested!
    - -

    Reimplemented in libdap::Array, libdap::D4Enum, libdap::D4Group, libdap::D4Opaque, libdap::Byte, libdap::Structure, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 259 of file BaseType.cc.

    - -
    -
    - -

    ◆ transform_to_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::transform_to_dap4 (D4Grouproot,
    Constructorcontainer 
    )
    -
    -virtualinherited
    -
    - -

    DAP2 to DAP4 transform.

    -

    For the current BaseType, return a DAP4 'copy' of the variable.

    -
    Note
    For most DAP2 types, in this implementation of DAP4 the corresponding DAP4 type is the same. The different types are Sequences (which are D4Sequences in the DAP4 implementation), Grids (which are coverages) and Arrays (which use shared dimensions).
    -
    Parameters
    - - - -
    rootThe root group that should hold this new variable. Add Group-level stuff here (e.g., D4Dimensions).
    containerAdd the new variable to this container.
    -
    -
    -
    Returns
    A pointer to the transformed variable
    - -

    Reimplemented in libdap::Sequence, libdap::Array, libdap::Grid, libdap::Structure, and libdap::Constructor.

    - -

    Definition at line 216 of file BaseType.cc.

    - -
    -
    - -

    ◆ type()

    - -
    -
    - - - - - -
    - - - - - - - -
    Type libdap::BaseType::type () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance.

    - -

    Definition at line 365 of file BaseType.cc.

    - -
    -
    - -

    ◆ type_name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::type_name () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance as a string.

    - -

    Definition at line 379 of file BaseType.cc.

    - -
    -
    - -

    ◆ val2buf()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    unsigned int libdap::UInt32::val2buf (void * val,
    bool reuse = false 
    )
    -
    -virtual
    -
    - -

    Loads class data.

    -

    Store the value pointed to by val in the object's internal buffer. This function does not perform any checks, so users must be sure that the thing pointed to can actually be stored in the object's buffer.

    -

    Only simple objects (Int, Float, Byte, and so on) and arrays of these simple objects may be stored using this function. To put data into more complex constructor types, use the functions provided by that class.

    -
    Deprecated:
    Use set_value() in the leaf classes.
    -
    Parameters
    - - - -
    valA pointer to the data to be inserted into the class data buffer.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect. This is currently used only in the Vector class.
    -
    -
    -
    Returns
    The size (in bytes) of the information copied from val.
    -
    See also
    Grid
    -
    -Vector::val2buf
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 180 of file UInt32.cc.

    - -
    -
    - -

    ◆ var() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::BaseType::var (const string & name = "",
    bool exact_match = true,
    btp_stack * s = 0 
    )
    -
    -virtualinherited
    -
    - -

    Returns a pointer to a member of a constructor class.

    -

    Returns a pointer to the contained variable in a composite class. The composite classes are those made up of aggregated simple data types. Array, Grid, and Structure are composite types, while Int and Float are simple types. This function is only used by composite classes. The BaseType implementation always returns null.

    -

    Several of the subclasses provide alternate access methods that make sense for that particular data type. For example, the Array class defines a *var(int i) method that returns the ith entry in the Array data, and the Structure provides a *var(Vars_iter) function using a pseudo-index to access the different members of the structure.

    -
    Parameters
    - - - - -
    nameThe name of the class member. Defaults to ""
    exact_matchTrue if only interested in variables whose full names match n exactly. If false, returns the first variable whose name matches name. For example, if name is x and point.x is a variable, then var("x", false) would return a BaseType pointer to point.x. If exact_match was true then name would need to be "point.x" for var to return that pointer. This feature simplifies constraint expressions for datasets which have complex, nested, constructor variables. Defaults to true.
    sRecord the path to name. Defaults to null, in which case it is not used.
    -
    -
    -
    Returns
    A pointer to the member named in the n argument. If no name is given, the function returns the first (only) variable. For example, an Array has only one variable, while a Structure can have many.
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 758 of file BaseType.cc.

    - -
    -
    - -

    ◆ var() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::BaseType::var (const string & name,
    btp_stack & s 
    )
    -
    -virtualinherited
    -
    -

    This version of var(...) searches for name and returns a pointer to the BaseType object if found. It uses the same search algorithm as BaseType::var(const string &, bool, btp_stack *) when exact_match is false. In addition to returning a pointer to the variable, it pushes onto s a BaseType pointer to each constructor type that ultimately contains name.

    -
    Note
    The BaseType implementation always returns null. There are no default values for the parameters. If var() is called w/o any params, the three parameter version will be used.
    -
    Deprecated:
    This method is deprecated because it tries first to use exact_match and, if that fails, then tries leaf_match. It's better to use the alternate form of var(...) and specify exactly what you'd like to do.
    -
    Returns
    A pointer to the named variable.
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 780 of file BaseType.cc.

    - -
    -
    - -

    ◆ width()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::UInt32::width (bool constrained = false) const
    -
    -virtual
    -
    - -

    How many bytes does this variable use Return the number of bytes of storage this variable uses. For scalar types, this is pretty simple (an int32 uses 4 bytes, etc.). For arrays and Constructors, it is a bit more complex. Note that a scalar String variable uses sizeof(String*) bytes, not the length of the string value. The width() of a String array returns the number of elements in the array times sizeof(String*).

    -
    Parameters
    - - -
    constrainedShould the current constraint be taken into account?
    -
    -
    -
    Returns
    Bytes of storage
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 118 of file UInt32.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1UInt32.js b/html/classlibdap_1_1UInt32.js deleted file mode 100644 index 4f2205361..000000000 --- a/html/classlibdap_1_1UInt32.js +++ /dev/null @@ -1,78 +0,0 @@ -var classlibdap_1_1UInt32 = -[ - [ "btp_stack", "classlibdap_1_1UInt32.html#ae9c6e71855b90a0e552713011c9ab81f", null ], - [ "UInt32", "classlibdap_1_1UInt32.html#a01d713f1eae7c2b0c9e8287ca1670bcf", null ], - [ "UInt32", "classlibdap_1_1UInt32.html#a2a57e3fcd5013cd0ea6ec1161d5f1ff8", null ], - [ "~UInt32", "classlibdap_1_1UInt32.html#a45811751ce2b56f434e6f91ac0bfe96c", null ], - [ "UInt32", "classlibdap_1_1UInt32.html#a79d3102b59d24815fab55bbee5600e1f", null ], - [ "add_var", "classlibdap_1_1UInt32.html#adca3c2621c4a509537c18362005d7f7f", null ], - [ "add_var_nocopy", "classlibdap_1_1UInt32.html#aa1192360cea4dc516c822cd3e13dc723", null ], - [ "attributes", "classlibdap_1_1UInt32.html#a97452f06d2188eb838399a709246b5e9", null ], - [ "buf2val", "classlibdap_1_1UInt32.html#a132425225a24d8a0d3b2242660533494", null ], - [ "check_semantics", "classlibdap_1_1UInt32.html#aec503abec2fd3090e7738c0a575491f8", null ], - [ "clear_local_data", "classlibdap_1_1UInt32.html#aaddb97a4efbe035f41deaf03c6e8683f", null ], - [ "compute_checksum", "classlibdap_1_1UInt32.html#a2dbfaff74220c15ec27b42310781a286", null ], - [ "d4_ops", "classlibdap_1_1UInt32.html#a512a356f31ed6c4c1a368da0b054408a", null ], - [ "dataset", "classlibdap_1_1UInt32.html#a47521ce321a17e6ce217870cb6a1a7aa", null ], - [ "deserialize", "classlibdap_1_1UInt32.html#a1bf98390bea0fffe8a9b9f0d560f3b72", null ], - [ "deserialize", "classlibdap_1_1UInt32.html#a87953ef0a0ef20ecbbc9ec646a14d8b9", null ], - [ "dump", "classlibdap_1_1UInt32.html#a2506c7fb8f214f635cabc0fabc6b8e62", null ], - [ "element_count", "classlibdap_1_1UInt32.html#a5c2235737737b482bfa7536b8aeab810", null ], - [ "FQN", "classlibdap_1_1UInt32.html#a977cb954cc8f0d914d6f66ea0f48a9e3", null ], - [ "get_attr_table", "classlibdap_1_1UInt32.html#a1fcd9537c67e3bf88964b2656ff5bac1", null ], - [ "get_parent", "classlibdap_1_1UInt32.html#a3459cdaa239c33ce111ef360d8dc3017", null ], - [ "intern_data", "classlibdap_1_1UInt32.html#a722d33783aa0272d339b0301a4f77e59", null ], - [ "intern_data", "classlibdap_1_1UInt32.html#a1956e6ea90a745516f5372c859173433", null ], - [ "is_constructor_type", "classlibdap_1_1UInt32.html#a8b8490e0047c6da52945699a132008ea", null ], - [ "is_dap4", "classlibdap_1_1UInt32.html#a7f6835cb5e5589ab5dad3fb4813d3bea", null ], - [ "is_in_selection", "classlibdap_1_1UInt32.html#ae302ab2ec26e9fc5b575bf5d3d09aa5c", null ], - [ "is_simple_type", "classlibdap_1_1UInt32.html#aae57e5b270b3a015d40c8db10b9b5549", null ], - [ "is_vector_type", "classlibdap_1_1UInt32.html#a7107c76dbcab71015141142383b6d022", null ], - [ "length", "classlibdap_1_1UInt32.html#aadcda7a659157bc6a832d8a5fb775b3f", null ], - [ "m_duplicate", "classlibdap_1_1UInt32.html#a0c55b826c8c5dfe7a454dc670e859a41", null ], - [ "name", "classlibdap_1_1UInt32.html#a24c5d67823b3cff7f4245a993072a142", null ], - [ "operator=", "classlibdap_1_1UInt32.html#a43983c6c4430c4f6c0cfd408aced9cca", null ], - [ "ops", "classlibdap_1_1UInt32.html#a33a7ffcc50faa13ed94a48e7766ffd1e", null ], - [ "print_dap4", "classlibdap_1_1UInt32.html#afcddbe441380b95c894510c02980b163", null ], - [ "print_decl", "classlibdap_1_1UInt32.html#a2d799fad93255d7f2b803562ae7a5784", null ], - [ "print_decl", "classlibdap_1_1UInt32.html#afd744b0ddeb04e7b173c9e83423ec572", null ], - [ "print_val", "classlibdap_1_1UInt32.html#ae627cfc24d4d9dfaf34b538385f1712c", null ], - [ "print_val", "classlibdap_1_1UInt32.html#a2f15a6d4c69db84e0dad12c42630b7e3", null ], - [ "print_xml", "classlibdap_1_1UInt32.html#a825820edee179550cfde3dfd4d274f2a", null ], - [ "print_xml", "classlibdap_1_1UInt32.html#a8bd2c7682edd48c64b210bdf247bdef7", null ], - [ "print_xml_writer", "classlibdap_1_1UInt32.html#a11554ff931528b243e9af8173d205b44", null ], - [ "ptr_duplicate", "classlibdap_1_1UInt32.html#ae3ea27e286caaf645c5d61cdf4d455f4", null ], - [ "read", "classlibdap_1_1UInt32.html#a1da003c53f2e663223f603ab3fbd7c8e", null ], - [ "read_p", "classlibdap_1_1UInt32.html#a38ff819a432217c55db2e9071928d20c", null ], - [ "send_p", "classlibdap_1_1UInt32.html#a980c0013817836aa77ef74aeec7fb192", null ], - [ "serialize", "classlibdap_1_1UInt32.html#af76d9ef68ae7861401bdf611e4bacd16", null ], - [ "serialize", "classlibdap_1_1UInt32.html#ac05e4247715d52c8bc6459a32a810471", null ], - [ "set_attr_table", "classlibdap_1_1UInt32.html#a572a1d76a75981abac83a4241e90c0fa", null ], - [ "set_attributes", "classlibdap_1_1UInt32.html#ad4dda4cf43dca838d3de183b8e01cd09", null ], - [ "set_attributes_nocopy", "classlibdap_1_1UInt32.html#afd0e5f87d19020f560d5c1ff8dd4d6a3", null ], - [ "set_in_selection", "classlibdap_1_1UInt32.html#a2bc036248cdaf1affac464170f32ad30", null ], - [ "set_is_dap4", "classlibdap_1_1UInt32.html#abca9ddaa9a1ada8447cbe7193e8e288a", null ], - [ "set_length", "classlibdap_1_1UInt32.html#a4fe343c1eeb6fb1d61ab030433651d90", null ], - [ "set_name", "classlibdap_1_1UInt32.html#a86504564f45a3e6748c6f1cc0ff4e9fa", null ], - [ "set_parent", "classlibdap_1_1UInt32.html#a5b6a39f6ce6594fa74f3fc899ac9a966", null ], - [ "set_read_p", "classlibdap_1_1UInt32.html#a4533905a450d2a7af32e7d5acd557676", null ], - [ "set_send_p", "classlibdap_1_1UInt32.html#aba7b27635c95b74536de18393133628e", null ], - [ "set_synthesized_p", "classlibdap_1_1UInt32.html#a595cb4059cff24f801a1b6da79bd2f9e", null ], - [ "set_type", "classlibdap_1_1UInt32.html#af74f8d1ef57c9fcca46f620f75d175a3", null ], - [ "set_value", "classlibdap_1_1UInt32.html#adaec104ee8280822a4c4f2287854efab", null ], - [ "synthesized_p", "classlibdap_1_1UInt32.html#ae64e677da27249473cdba0b60cdbb90a", null ], - [ "toString", "classlibdap_1_1UInt32.html#a701eb3361f5b5628329ece019cd34519", null ], - [ "transfer_attributes", "classlibdap_1_1UInt32.html#add8e836c622042a339152a6c31e5bdfb", null ], - [ "transform_to_dap2", "classlibdap_1_1UInt32.html#affec8a11e9cc035d4b1e8fb9a87b2072", null ], - [ "transform_to_dap4", "classlibdap_1_1UInt32.html#adb03e2e1e40c3c888577c4666831a949", null ], - [ "type", "classlibdap_1_1UInt32.html#af8e803b20a7a7dc5f2ef351d7fac4a56", null ], - [ "type_name", "classlibdap_1_1UInt32.html#a18a42c8ec35cb5b15cd651a4152f8a2c", null ], - [ "val2buf", "classlibdap_1_1UInt32.html#a4670043bd9007f36807c7df7fd49cb69", null ], - [ "value", "classlibdap_1_1UInt32.html#a81e29c57dab738e83a4d476060668b72", null ], - [ "var", "classlibdap_1_1UInt32.html#a4dc4fac1bb6083f6db645f37bfd59b85", null ], - [ "var", "classlibdap_1_1UInt32.html#adecfc442b5927c79933c7f71cfe03fd2", null ], - [ "width", "classlibdap_1_1UInt32.html#a38405864c06780759d24d85f95621c62", null ], - [ "d_buf", "classlibdap_1_1UInt32.html#afa20beed0e1a181f523bd88969d58bda", null ], - [ "d_in_selection", "classlibdap_1_1UInt32.html#a949a89714965d7afdcd1e3edc8b7f0d4", null ], - [ "d_is_synthesized", "classlibdap_1_1UInt32.html#a629e97e8eb7d285b54c9af8c1ec9a29a", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1UInt32__inherit__graph.map b/html/classlibdap_1_1UInt32__inherit__graph.map deleted file mode 100644 index 5d6c59910..000000000 --- a/html/classlibdap_1_1UInt32__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1UInt32__inherit__graph.md5 b/html/classlibdap_1_1UInt32__inherit__graph.md5 deleted file mode 100644 index 9ce9d94d5..000000000 --- a/html/classlibdap_1_1UInt32__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -8456e384fcabdb2405d779ae1ae041f2 \ No newline at end of file diff --git a/html/classlibdap_1_1UInt32__inherit__graph.png b/html/classlibdap_1_1UInt32__inherit__graph.png deleted file mode 100644 index 102d6fb2658831e39833015467d3e75a276b7de0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63111 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�FF%siM zceLe@sIQ>Cd@A^RG{&mE{kV7)bY#A{F6e+Ky>6Pc^fZVrW+J>A0Ts_TfE(!PBNH;;2Os-!B^tg0WMwa60-^jaM+0?o9 z3w4RU;}M?Gf3xDjsU_Z1=@itd}yo4+vC2RYJkd|$?VtdX|Im!2~97AZYW z$Qr4`+7Sacu!n)mR(>wEF+vzu92ADRN3E$=LO*pn?i`6%S8o-LJcd-zo+uNIZU)~x86|U{ABy!J zczMP;M}TYnDh$#Q(0TCXfM9q+S|d|rW?xmB;fyMPlZS!?EAyJD-xi2V{T0`&&oygg z5%6*l-U9>e^~Q6QjMmv4jR*$|ZJR+dQNZK67Al`Je!Bd;8q7}6WndnA=Z}VNtPedh zP`FdeHQSGM5LJq}c=cg=F74gpH}nMuqp@l?fjctX_6QvZ8H&}^B4`?8E9S1!v6hC# zMA1R=5NFHds|G9fFa>aZE1-!Bkf&aat!EQXswP;b5rVttFP|O|2%{|xd}xXumzyTw zz-dYo-^x78vKaFu!!e4CI~zqZtxV}I`|iVMw>oLHk=v+aK}io}@aWUlHSje<(fZmY zlD<5NX0P*`dl6>k<@H5&pC+prwyD%#^)J2Px5dtc4T7@pEpjAtA-$E7nLoK<<8Oj_wjLiJ39XM zn`CXS`9WcFZlCB4L!TauFB5SNYz3IF_&{&4<3h ze!j%#w88fz-#GQ5AVHuvn?ce`9;CkE@NTePwcX5lox;S7Jnl!Th1!Wk^*|A#Fy#6B ze)d-@Vf>P)GLVv`TNb>-&ZSdd!Y!L0_HqY~?b+ys(`}2D-shWFpBj%#G%w&~ADOB>`WL^kef(DmNr~>v9u?)53m^mEb8lW=X-VY zmzm(nzDu!G`t@_`57)899&r`oB+ir-SUS8+Pq5&qyYKKhQtairD*}VIa z!pOy(Yh4{0!sr+62NKx>rf|DQE+mnA0Fb8gmL{|lw69&vMznTkk04^2kH-J|T@zB| z4(A-##~y^-_MBTK-45Tg_pvt^c<<)j3&rODSB+R<7;v*$M&sh?bbo#JXxpY;ndQ6n z_q=B)?d-3eNb%-B_OodxG|JYDm?Pg_c3bw^zE9a36%F_r@Xiy

    mR;E(dwA4LMFU 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%0A!;VI7uH* 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 CdVkUY diff --git a/html/classlibdap_1_1UInt64-members.html b/html/classlibdap_1_1UInt64-members.html deleted file mode 100644 index 920a5b765..000000000 --- a/html/classlibdap_1_1UInt64-members.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -

    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::UInt64 Member List
    -
    -
    - -

    This is the complete list of members for libdap::UInt64, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    add_var(BaseType *bt, Part part=nil)libdap::BaseTypevirtual
    add_var_nocopy(BaseType *bt, Part part=nil) (defined in libdap::BaseType)libdap::BaseTypevirtual
    attributes()libdap::BaseTypevirtual
    BaseType(const string &n, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const string &n, const string &d, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const BaseType &copy_from)libdap::BaseType
    btp_stack typedef (defined in libdap::BaseType)libdap::BaseType
    check_semantics(string &msg, bool all=false)libdap::BaseTypevirtual
    clear_local_data()libdap::BaseTypeinlinevirtual
    compute_checksum(Crc32 &checksum)libdap::UInt64virtual
    d4_ops(BaseType *b, int op)libdap::UInt64virtual
    d_buf (defined in libdap::UInt64)libdap::UInt64protected
    d_in_selection (defined in libdap::BaseType)libdap::BaseTypeprotected
    d_is_synthesized (defined in libdap::BaseType)libdap::BaseTypeprotected
    dataset() constlibdap::BaseTypevirtual
    deserialize(D4StreamUnMarshaller &um, DMR &dmr)libdap::UInt64virtual
    libdap::BaseType::deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)libdap::BaseTypevirtual
    dump(ostream &strm) constlibdap::UInt64virtual
    element_count(bool leaves=false)libdap::BaseTypevirtual
    FQN() constlibdap::BaseTypevirtual
    get_attr_table()libdap::BaseTypevirtual
    get_parent() constlibdap::BaseTypevirtual
    intern_data(ConstraintEvaluator &eval, DDS &dds)libdap::BaseTypevirtual
    intern_data()libdap::BaseTypevirtual
    is_constructor_type() constlibdap::BaseTypevirtual
    is_dap4() const (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    is_in_selection()libdap::BaseTypevirtual
    is_simple_type() constlibdap::BaseTypevirtual
    is_vector_type() constlibdap::BaseTypevirtual
    length() constlibdap::BaseTypeinlinevirtual
    m_duplicate(const BaseType &bt)libdap::BaseTypeprotected
    name() constlibdap::BaseTypevirtual
    operator=(const UInt64 &rhs) (defined in libdap::UInt64)libdap::UInt64
    operator=(const BaseType &rhs) (defined in libdap::BaseType)libdap::BaseType
    ops(BaseType *b, int op)libdap::UInt64virtual
    print_dap4(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
    print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_val(ostream &out, string space="", bool print_decl_p=true)libdap::UInt64virtual
    print_xml(FILE *out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml(ostream &out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml_writer(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
    ptr_duplicate()libdap::UInt64virtual
    read()libdap::BaseTypevirtual
    read_p()libdap::BaseTypevirtual
    send_p()libdap::BaseTypevirtual
    serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)libdap::UInt64virtual
    libdap::BaseType::serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)libdap::BaseTypevirtual
    set_attr_table(const AttrTable &at)libdap::BaseTypevirtual
    set_attributes(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_attributes_nocopy(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_in_selection(bool state)libdap::BaseTypevirtual
    set_is_dap4(const bool v) (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    set_length(int)libdap::BaseTypeinlinevirtual
    set_name(const string &n)libdap::BaseTypevirtual
    set_parent(BaseType *parent)libdap::BaseTypevirtual
    set_read_p(bool state)libdap::BaseTypevirtual
    set_send_p(bool state)libdap::BaseTypevirtual
    set_synthesized_p(bool state)libdap::BaseTypevirtual
    set_type(const Type &t)libdap::BaseTypevirtual
    set_value(dods_uint64 val) (defined in libdap::UInt64)libdap::UInt64virtual
    synthesized_p()libdap::BaseTypevirtual
    toString()libdap::BaseTypevirtual
    transfer_attributes(AttrTable *at)libdap::BaseTypevirtual
    transform_to_dap2(AttrTable *parent_attr_table)libdap::UInt64virtual
    transform_to_dap4(D4Group *root, Constructor *container)libdap::BaseTypevirtual
    type() constlibdap::BaseTypevirtual
    type_name() constlibdap::BaseTypevirtual
    UInt64(const string &n)libdap::UInt64
    UInt64(const string &n, const string &d)libdap::UInt64
    UInt64(const UInt64 &copy_from) (defined in libdap::UInt64)libdap::UInt64
    value() const (defined in libdap::UInt64)libdap::UInt64virtual
    var(const string &name="", bool exact_match=true, btp_stack *s=0)libdap::BaseTypevirtual
    var(const string &name, btp_stack &s)libdap::BaseTypevirtual
    width(bool constrained=false) constlibdap::UInt64virtual
    ~BaseType() (defined in libdap::BaseType)libdap::BaseTypevirtual
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    ~UInt64() (defined in libdap::UInt64)libdap::UInt64inlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1UInt64.html b/html/classlibdap_1_1UInt64.html deleted file mode 100644 index 8913e2a4b..000000000 --- a/html/classlibdap_1_1UInt64.html +++ /dev/null @@ -1,2766 +0,0 @@ - - - - - - - -libdap: libdap::UInt64 Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    - -

    Holds a 64-bit unsigned integer. - More...

    - -

    #include <UInt64.h>

    -
    -Inheritance diagram for libdap::UInt64:
    -
    -
    Inheritance graph
    - - - - -
    - - - - -

    -Public Types

    -typedef stack< BaseType * > btp_stack
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual void add_var (BaseType *bt, Part part=nil)
     Add a variable. More...
     
    -virtual void add_var_nocopy (BaseType *bt, Part part=nil)
     
    virtual bool check_semantics (string &msg, bool all=false)
     Compare an object's current state with the semantics of its type. More...
     
    virtual void clear_local_data ()
     
    virtual void compute_checksum (Crc32 &checksum)
     include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum. More...
     
    virtual bool d4_ops (BaseType *b, int op)
     Evaluator a relop for DAP4. More...
     
    virtual string dataset () const
     Returns the name of the dataset used to create this instance. More...
     
    virtual void deserialize (D4StreamUnMarshaller &um, DMR &dmr)
     
    virtual void dump (ostream &strm) const
     dumps information about this object More...
     
    virtual int element_count (bool leaves=false)
     Count the members of constructor types. More...
     
    virtual std::string FQN () const
     
    virtual AttrTableget_attr_table ()
     
    virtual BaseTypeget_parent () const
     
    virtual bool is_constructor_type () const
     Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable. More...
     
    -virtual bool is_dap4 () const
     
    virtual bool is_in_selection ()
     Is this variable part of the current selection? More...
     
    virtual bool is_simple_type () const
     Returns true if the instance is a numeric, string or URL type variable. More...
     
    virtual bool is_vector_type () const
     Returns true if the instance is a vector (i.e., array) type variable. More...
     
    virtual int length () const
     How many elements are in this variable. More...
     
    virtual string name () const
     Returns the name of the class instance. More...
     
    -UInt64operator= (const UInt64 &rhs)
     
    virtual bool ops (BaseType *b, int op)
     Evaluate relational operators. More...
     
    virtual void print_dap4 (XMLWriter &xml, bool constrained=false)
     
    virtual void print_decl (FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_decl (ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_val (ostream &out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_xml (FILE *out, string space=" ", bool constrained=false)
     
    virtual void print_xml (ostream &out, string space=" ", bool constrained=false)
     
    virtual void print_xml_writer (XMLWriter &xml, bool constrained=false)
     
    virtual BaseTypeptr_duplicate ()
     
    virtual bool read ()
     Read data into a local buffer. More...
     
    virtual bool read_p ()
     Has this variable been read? More...
     
    virtual bool send_p ()
     Should this variable be sent? More...
     
    virtual void serialize (D4StreamMarshaller &m, DMR &dmr, bool filter=false)
     Serialize an Int8. More...
     
    virtual void set_attr_table (const AttrTable &at)
     
    virtual void set_in_selection (bool state)
     
    -virtual void set_is_dap4 (const bool v)
     
    virtual void set_length (int)
     Set the number of elements for this variable. More...
     
    virtual void set_name (const string &n)
     Sets the name of the class instance. More...
     
    virtual void set_parent (BaseType *parent)
     
    virtual void set_read_p (bool state)
     Sets the value of the read_p property. More...
     
    virtual void set_send_p (bool state)
     
    virtual void set_synthesized_p (bool state)
     
    virtual void set_type (const Type &t)
     Sets the type of the class instance. More...
     
    -virtual bool set_value (dods_uint64 val)
     
    virtual bool synthesized_p ()
     
    virtual string toString ()
     
    virtual void transfer_attributes (AttrTable *at)
     
    virtual std::vector< BaseType * > * transform_to_dap2 (AttrTable *parent_attr_table)
     DAP4 to DAP2 transform. More...
     
    virtual void transform_to_dap4 (D4Group *root, Constructor *container)
     DAP2 to DAP4 transform. More...
     
    virtual Type type () const
     Returns the type of the class instance. More...
     
    virtual string type_name () const
     Returns the type of the class instance as a string. More...
     
     UInt64 (const string &n)
     
     UInt64 (const string &n, const string &d)
     
    UInt64 (const UInt64 &copy_from)
     
    -virtual dods_uint64 value () const
     
    virtual BaseTypevar (const string &name="", bool exact_match=true, btp_stack *s=0)
     Returns a pointer to a member of a constructor class. More...
     
    virtual BaseTypevar (const string &name, btp_stack &s)
     
    virtual unsigned int width (bool constrained=false) const
     How many bytes does this variable use Return the number of bytes of storage this variable uses. For scalar types, this is pretty simple (an int32 uses 4 bytes, etc.). For arrays and Constructors, it is a bit more complex. Note that a scalar String variable uses sizeof(String*) bytes, not the length of the string value. The width() of a String array returns the number of elements in the array times sizeof(String*). More...
     
    virtual D4Attributesattributes ()
     
    -virtual void set_attributes (D4Attributes *)
     
    -virtual void set_attributes_nocopy (D4Attributes *)
     
    Abstract Methods
    virtual void intern_data (ConstraintEvaluator &eval, DDS &dds)
     
    virtual void intern_data ()
     Read data into this variable. More...
     
    virtual bool serialize (ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
     Move data to the net, then remove them from the object. More...
     
    virtual bool deserialize (UnMarshaller &um, DDS *dds, bool reuse=false)
     Receive data from the net. More...
     
    - - - - -

    -Protected Member Functions

    void m_duplicate (const BaseType &bt)
     Perform a deep copy. More...
     
    - - - - - - - -

    -Protected Attributes

    -dods_uint64 d_buf
     
    -bool d_in_selection
     
    -bool d_is_synthesized
     
    -

    Detailed Description

    -

    Holds a 64-bit unsigned integer.

    -
    See also
    BaseType
    - -

    Definition at line 49 of file UInt64.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ UInt64() [1/2]

    - -
    -
    - - - - - - - - -
    libdap::UInt64::UInt64 (const string & n)
    -
    -

    The UInt64 constructor accepts the name of the variable to be created.

    -
    Note
    This type is available in DAP4 only. See http://docs.opendap.org/index.php/DAP4:_Specification_Volume_1#Atomic_Types
    -
    Parameters
    - - -
    nA string containing the name of the variable to be created. variable is created
    -
    -
    - -

    Definition at line 68 of file UInt64.cc.

    - -
    -
    - -

    ◆ UInt64() [2/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    libdap::UInt64::UInt64 (const string & n,
    const string & d 
    )
    -
    -

    The UInt64 server-side constructor accepts the name of the variable and the dataset name from which this instance is created.

    -
    Note
    This type is available in DAP4 only. See http://docs.opendap.org/index.php/DAP4:_Specification_Volume_1#Atomic_Types
    -
    Parameters
    - - - -
    nA string containing the name of the variable to be created.
    dA string containing the name of the dataset from which this variable is created
    -
    -
    - -

    Definition at line 81 of file UInt64.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ add_var()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::add_var (BaseTypebt,
    Part part = nil 
    )
    -
    -virtualinherited
    -
    - -

    Add a variable.

    -

    Adds a variable to an instance of a constructor class, such as Array, Structure et cetera. This function is only used by those classes. For constructors with more than one variable, the variables appear in the same order in which they were added (i.e., the order in which add_var() was called). Since this method is only for use by Vectors and Constructors, the BaseType implementation throws InternalErr.

    -
    Note
    For the implementation of this method in Structure, Sequence, et c., first copy bt and then insert the copy. If bt is itself a constructor type you must either use the var() method to get a pointer to the actual instance added to *this or you must first add all of bt's children to it before adding it to *this. The implementations should use m_duplicate() to perform a deep copy of bt.
    -
    Todo:
    We should get rid of the Part parameter and adopt the convention that the first variable is the Array and all subsequent ones are Maps (when dealing with a Grid, the only time Part matters). This would enable several methods to migrate from Structure, Sequence and Grid to Constructor.
    -
    Parameters
    - - - -
    btThe variable to be added to this instance. The caller of this method must free memory it allocates for v. This method will make a deep copy of the object pointed to by v.
    partThe part of the constructor data to be modified. Only meaningful for Grid variables.
    -
    -
    -
    See also
    Part
    - -

    Reimplemented in libdap::Vector, libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 815 of file BaseType.cc.

    - -
    -
    - -

    ◆ attributes()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4Attributes * libdap::BaseType::attributes ()
    -
    -virtualinherited
    -
    -

    DAP4 Attribute methods

    - -

    Definition at line 599 of file BaseType.cc.

    - -
    -
    - -

    ◆ check_semantics()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::check_semantics (string & msg,
    bool all = false 
    )
    -
    -virtualinherited
    -
    - -

    Compare an object's current state with the semantics of its type.

    -

    This function checks the class instance for internal consistency. This is important to check for complex constructor classes. For BaseType, an object is semantically correct if it has both a non-null name and type.

    -

    For example, an Int32 instance would return FALSE if it had no name or no type defined. A Grid instance might return FALSE for more complex reasons, such as having Map arrays of the wrong size or shape.

    -

    This function is used by the DDS class, and will rarely, if ever, be explicitly called by a DODS application program. A variable must pass this test before it is sent, but there may be many other stages in a retrieve operation where it would fail.

    -
    Returns
    Returns FALSE when the current state violates some aspect of the type semantics, TRUE otherwise.
    -
    Parameters
    - - - -
    msgA returned string, containing a message indicating the source of any problem.
    allFor complex constructor types (Grid, Sequence, Structure), this flag indicates whether to check the semantics of the member variables, too.
    -
    -
    -
    See also
    DDS::check_semantics
    - -

    Reimplemented in libdap::Array, libdap::Vector, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1209 of file BaseType.cc.

    - -
    -
    - -

    ◆ clear_local_data()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual void libdap::BaseType::clear_local_data ()
    -
    -inlinevirtualinherited
    -
    -

    Remove any read or set data in the private data of the variable, setting read_p() to false. Used to clear any dynamically allocated storage that holds (potentially large) data. For the simple types, this no-op version is all that's needed. Vector and some other classes define a special version and have serialize() implementations that call it to free data as soon as possible after sending it.

    -
    Note
    Added 7/5/15 jhrg
    -
    -Any specialization of this should make sure to reset the read_p property.
    - -

    Reimplemented in libdap::Sequence, libdap::Vector, libdap::D4Sequence, and libdap::D4Opaque.

    - -

    Definition at line 179 of file BaseType.h.

    - -
    -
    - -

    ◆ compute_checksum()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::UInt64::compute_checksum (Crc32checksum)
    -
    -virtual
    -
    - -

    include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum.

    -
    Parameters
    - - -
    checksumA Crc32 instance that holds the current checksum.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 115 of file UInt64.cc.

    - -
    -
    - -

    ◆ d4_ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::UInt64::d4_ops (BaseTypeb,
    int op 
    )
    -
    -virtual
    -
    - -

    Evaluator a relop for DAP4.

    -

    This method is used by the filter expression evaluation code in DAP4. Each of the 'data type' classes that support relops must overload this method. In an expression of the form arg1 op arg2, this object is arg1, the parameter 'b' is arg2 and op is the relational operator.

    -
    Note
    I used the same relop codes for DAP4 as in the DAP2 parser/scanner which makes for some coupling between them, but cuts way down on the duplication of the evaluator logic, which is somewhat involved.
    -
    Parameters
    - - - -
    bThe second argument in the relational expression
    opThe infix relational operator
    -
    -
    -
    Returns
    True if the expression is true, False otherwise.
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 222 of file UInt64.cc.

    - -
    -
    - -

    ◆ dataset()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::dataset () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the dataset used to create this instance.

    -

    A dataset from which the data is to be read. The meaning of this string will vary among different types of data sources. It may be the name of a data file or an identifier used to read data from a relational database.

    - -

    Definition at line 358 of file BaseType.cc.

    - -
    -
    - -

    ◆ deserialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::UInt64::deserialize (D4StreamUnMarshallerum,
    DMRdmr 
    )
    -
    -virtual
    -
    -

    The DAP4 deserialization method.

    Parameters
    - - - -
    um
    dmr
    -
    -
    -
    Exceptions
    - - -
    Erroror InternalErr
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 138 of file UInt64.cc.

    - -
    -
    - -

    ◆ deserialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::deserialize (UnMarshallerum,
    DDSdds,
    bool reuse = false 
    )
    -
    -virtualinherited
    -
    - -

    Receive data from the net.

    -

    Receives data from the network connection identified by the source parameter. The data is put into the class data buffer according to the input dds.

    -

    This function is only used on the client side of the DODS client/server connection.

    -
    Parameters
    - - - - -
    umAn UnMarshaller that knows how to deserialize data types
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure. This would have been received from the server in an earlier transmission.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect.
    -
    -
    -
    Returns
    Always returns TRUE.
    -
    Exceptions
    - - -
    Errorwhen a problem reading from the UnMarshaller is found.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, libdap::Constructor, libdap::Str, libdap::Int32, libdap::Byte, libdap::Float32, libdap::Float64, libdap::UInt32, libdap::Int16, libdap::UInt16, and libdap::D4Opaque.

    - -

    Definition at line 943 of file BaseType.cc.

    - -
    -
    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::UInt64::dump (ostream & strm) const
    -
    -virtual
    -
    - -

    dumps information about this object

    -

    Displays the pointer value of this instance and information about this instance.

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the information to
    -
    -
    -
    Returns
    void
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 293 of file UInt64.cc.

    - -
    -
    - -

    ◆ element_count()

    - -
    -
    - - - - - -
    - - - - - - - - -
    int libdap::BaseType::element_count (bool leaves = false)
    -
    -virtualinherited
    -
    - -

    Count the members of constructor types.

    -

    Return a count of the total number of variables in this variable. This is used to count the number of variables held by a constructor variable - for simple type and vector variables it always returns 1.

    -

    For compound data types, there are two ways to count members. You can count the members, or you can count the simple members and add that to the count of the compound members. For example, if a Structure contains an Int32 and another Structure that itself contains two Int32 members, the element count of the top-level structure could be two (one Int32 and one Structure) or three (one Int32 by itself and two Int32's in the subsidiary Structure). Use the leaves parameter to control which kind of counting you desire.

    -
    Returns
    Returns 1 for simple types. For compound members, the count depends on the leaves argument.
    -
    Parameters
    - - -
    leavesThis parameter is only relevant if the object contains other compound data types. If FALSE, the function counts only the data variables mentioned in the object's declaration. If TRUE, it counts the simple members, and adds that to the sum of the counts for the compound members. This parameter has no effect for simple type variables.
    -
    -
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 443 of file BaseType.cc.

    - -
    -
    - -

    ◆ FQN()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::FQN () const
    -
    -virtualinherited
    -
    -

    Return the FQN for this variable. This will include the D4 Group component of the name.

    -
    Returns
    The FQN in a string
    - -

    Reimplemented in libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 332 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - -
    AttrTable & libdap::BaseType::get_attr_table ()
    -
    -virtualinherited
    -
    -

    Get this variable's AttrTable. It's generally a bad idea to return a reference to a contained object, but in this case it seems that building an interface inside BaseType is overkill.

    -

    Use the AttrTable methods to manipulate the table.

    - -

    Definition at line 582 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_parent()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::BaseType::get_parent () const
    -
    -virtualinherited
    -
    -

    Return a pointer to the Constructor or Vector which holds (contains) this variable. If this variable is at the top level, this method returns null.

    -
    Returns
    A BaseType pointer to the variable's parent.
    - -

    Definition at line 751 of file BaseType.cc.

    - -
    -
    - -

    ◆ intern_data() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::intern_data (ConstraintEvaluatoreval,
    DDSdds 
    )
    -
    -virtualinherited
    -
    -

    Similar to using serialize() and deserialize() together in one object. Data are read as for serialize and those values are stored in the objects as deserialize() does but does not write and then read data to/from a stream.

    -

    This method is defined by the various data type classes. It calls the read() abstract method. Unlike serialize(), this method does not clear the memory use to hold the data values, so the caller should make sure to delete the DDS or the variable as soon as possible.

    -
    Parameters
    - - - -
    evalUse this as the constraint expression evaluator.
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    -
    -
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 908 of file BaseType.cc.

    - -
    -
    - -

    ◆ intern_data() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::BaseType::intern_data ()
    -
    -virtualinherited
    -
    - -

    Read data into this variable.

    -
    Parameters
    - - - -
    evalEvaluator for a constraint expression
    dmrDMR for the whole dataset
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 927 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_constructor_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_constructor_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable.

    -
    Returns
    True if the instance is a Structure, Sequence or Grid, False otherwise.
    - -

    Definition at line 412 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_in_selection ()
    -
    -virtualinherited
    -
    - -

    Is this variable part of the current selection?

    -

    Does this variable appear in either the selection part or as a function argument in the current constrain expression. If this property is set (true) then implementations of the read() method should read this variable.

    -
    Note
    This method does not check, nor does it know about the semantics of, string arguments passed to functions. Those functions might include variable names in strings; they are responsible for reading those variables. See the grid (func_grid_select()) for an example.
    -
    See also
    BaseType::read()
    - -

    Definition at line 703 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_simple_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_simple_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a numeric, string or URL type variable.

    -
    Returns
    True if the instance is a scalar numeric, String or URL variable, False otherwise. Arrays (even of simple types) return False.
    -
    See also
    is_vector_type()
    - -

    Definition at line 393 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_vector_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_vector_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a vector (i.e., array) type variable.

    -
    Returns
    True if the instance is an Array, False otherwise.
    - -

    Definition at line 402 of file BaseType.cc.

    - -
    -
    - -

    ◆ length()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual int libdap::BaseType::length () const
    -
    -inlinevirtualinherited
    -
    - -

    How many elements are in this variable.

    -
    Todo:
    change the return type to int64_t
    -
    Returns
    The number of elements; 1 for scalars
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, libdap::Str, and libdap::D4Opaque.

    - -

    Definition at line 207 of file BaseType.h.

    - -
    -
    - -

    ◆ m_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::m_duplicate (const BaseTypebt)
    -
    -protectedinherited
    -
    - -

    Perform a deep copy.

    -

    Perform a deep copy. Copies the values of bt into *this. Pointers are dereferenced and their values are copied into a newly allocated instance.

    -
    Parameters
    - - -
    btThe source object.
    -
    -
    - -

    Definition at line 86 of file BaseType.cc.

    - -
    -
    - -

    ◆ name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::name () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the class instance.

    - -

    Definition at line 320 of file BaseType.cc.

    - -
    -
    - -

    ◆ ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::UInt64::ops (BaseTypeb,
    int op 
    )
    -
    -virtual
    -
    - -

    Evaluate relational operators.

    -

    This method contains the relational operators used by the constraint expression evaluator in the DDS class. Each class that wants to be able to evaluate relational expressions must overload this function. The implementation in BaseType throws an InternalErr exception. The DAP library classes Byte, ..., Url provide specializations of this method. It is not meaningful for classes such as Array because relational expressions using Array are not supported.

    -

    The op argument refers to a table generated by bison from the constraint expression parser. Use statements like the following to correctly interpret its value:

    -
    switch (op) {
    -    case EQUAL: return i1 == i2;
    -    case NOT_EQUAL: return i1 != i2;
    -    case GREATER: return i1 > i2;
    -    case GREATER_EQL: return i1 >= i2;
    -    case LESS: return i1 < i2;
    -    case LESS_EQL: return i1 <= i2;
    -    case REGEXP: throw Error("Regular expressions are not supported for integer values");
    -    default: throw Error("Unknown operator");
    -}
    -

    This function is used by the constraint expression evaluator.

    -
    Parameters
    - - - -
    bCompare the value of this instance with b.
    opAn integer index indicating which relational operator is implied. Choose one from the following: EQUAL, NOT_EQUAL, GREATER, GREATER_EQL, LESS, LESS_EQL, and REGEXP.
    -
    -
    -
    Returns
    The boolean value of the comparison.
    -
    See also
    BaseType::d4_ops(BaseType *, int)
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 185 of file UInt64.cc.

    - -
    -
    - -

    ◆ print_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_dap4 (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the DAP4 XML representation for this variable. This method is used to build the DAP4 DMR response object.

    -
    Parameters
    - - - -
    xmlAn XMLWriter that will do the serialization
    constrainedTrue if the response should show the variables subject to the current constraint expression.
    -
    -
    - -

    Reimplemented in libdap::Array, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 1164 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (FILE * out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1003 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (ostream & out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1054 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_val()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::UInt64::print_val (ostream & out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtual
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output ostream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 174 of file UInt64.cc.

    - -
    -
    - -

    ◆ print_xml() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (FILE * out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination.
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1105 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (ostream & out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1120 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml_writer()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml_writer (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    - -

    Reimplemented in libdap::Array, libdap::D4Enum, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1134 of file BaseType.cc.

    - -
    -
    - -

    ◆ ptr_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::UInt64::ptr_duplicate ()
    -
    -virtual
    -
    -

    Clone this instance. Allocate a new instance and copy *this into it. This method must perform a deep copy.

    @note This method should \e not copy data values, but must copy all
    -other fields in the object.
    -
    Returns
    A newly allocated copy of this.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 90 of file UInt64.cc.

    - -
    -
    - -

    ◆ read()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read ()
    -
    -virtualinherited
    -
    - -

    Read data into a local buffer.

    -

    This method should be implemented for each of the data type classes (Byte, ..., Grid) when using the DAP class library to build a server. This method is only for DAP servers. The library provides a default definition here which throws an InternalErr exception unless the read_p property has been set. In that case it returns false, indicating that all the data have been read. The latter case can happen when building a constant value that needs to be passed to a function. The variable/constant is loaded with a value when it is created.

    -

    When implementing a new DAP server, the Byte, ..., Grid data type classes are usually specialized. In each of those specializations read() should be defined to read values from the data source and store them in the object's local buffer. The read() method is called by other methods in this library. When writing read(), follow these rules:

    -
      -
    • -read() should throw Error if it encounters an error. The message should be verbose enough to be understood by someone running a client on a different machine.
    • -
    • -The value(s) should be read if and only if either send_p() or is_in_selection() return true. If neither of these return true, the value(s) should not be read. This is important when writing read() for a Constructor type such as Grid where a client may ask for only the map vectors (and thus reading the much larger Array part is not needed).
    • -
    • -For each specialization of read(), the method should first test the value of the read_p property (using the read_p() method) and read values only if the value of read_p() is false. Once the read() method reads data and stores it in the instance, it must set the value of the read_p property to true using set_read_p(). If your read() methods fail to do this data may not serialize correctly.
    • -
    • -The Array::read() and Grid::read() methods should take into account any restrictions on Array sizes.
    • -
    • -If you are writing Sequence::read(), be sure to check the documentation for Sequence::read_row() and Sequence::serialize() so you understand how Sequence::read() is being called.
    • -
    • -

      For Sequence::read(), your specialization must correctly manage the unsent_data property and row count in addition to the read_p property (handle the read_p property as describe above). For a Sequence to serialize correctly, once all data from the Sequence has been read, unsent_data property must be set to false (use Sequence::set_unsent_data()). Also, at that time the row number counter must be reset (use Sequence::reset_row_counter()). Typically the correct time to set unsent_data to false and reset the row counter is the time when Sequence::read() return false indicating that all the data for the Sequence have been read. Failure to handle these tasks will break serialization of nested Sequences. Note that when Sequence::read() returns with a result of true (indicating there is more data to send, the value of the unsent_data property should be true.

      -

      Also, if you server must handle nested sequences, be sure to read about subclassing set_read_p().

      -
    • -
    -
    Todo:
    Modify the D4 serialize code so that it supports the true/false behavior of read() for arrays.
    -
    Todo:
    Modify all of the stock handlers so they conform to this!
    -
    Returns
    False means more data remains to be read, True indicates that no more data need to be read. For Sequence and D4Sequence, this method will generally read one instance of the Sequence; for other types it will generally read the entire variable modulo any limitations due to a constraint. However, the library should be written so that read can return less than all of the data for a variable - serialize() would then call the function until it returns True.
    -
    See also
    BaseType
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 899 of file BaseType.cc.

    - -
    -
    - -

    ◆ read_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read_p ()
    -
    -virtualinherited
    -
    - -

    Has this variable been read?

    -

    Returns true if the value(s) for this variable have been read from the data source, otherwise returns false. This method is used to determine when values need to be read using the read() method. When read_p() returns true, this library assumes that buf2val() (and other methods such as get_vec()) can be used to access the value(s) of a variable.

    -
    Returns
    True if the variable's value(s) have been read, false otherwise.
    - -

    Definition at line 480 of file BaseType.cc.

    - -
    -
    - -

    ◆ send_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::send_p ()
    -
    -virtualinherited
    -
    - -

    Should this variable be sent?

    -

    Returns the state of the send_p property. If true, this variable should be sent to the client, if false, it should not. If no constraint expression (CE) has been evaluated, this property is true for all variables in a data source (i.e., for all the variables listed in a DDS). If a CE has been evaluated, this property is true only for those variables listed in the projection part of the CE.

    -
    Returns
    True if the variable should be sent to the client, false otherwise.
    - -

    Definition at line 554 of file BaseType.cc.

    - -
    -
    - -

    ◆ serialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::UInt64::serialize (D4StreamMarshallerm,
    DMRdmr,
    bool filter = false 
    )
    -
    -virtual
    -
    - -

    Serialize an Int8.

    -
    Parameters
    - - - - - -
    m
    dmrUnused
    evalUnused
    filterUnused
    -
    -
    -
    Exceptions
    - - -
    Erroris thrown if the value needs to be read and that operation fails.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 129 of file UInt64.cc.

    - -
    -
    - -

    ◆ serialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::serialize (ConstraintEvaluatoreval,
    DDSdds,
    Marshallerm,
    bool ce_eval = true 
    )
    -
    -virtualinherited
    -
    - -

    Move data to the net, then remove them from the object.

    -

    Sends the data from the indicated (local) dataset through the connection identified by the Marshaller parameter. If the data is not already incorporated into the DDS object, read the data from the dataset. Once the data are sent (written to the Marshaller), they are deleted from the object and the object state is reset so that they will be read again if the read() method is called.

    -

    This function is only used on the server side of the client/server connection, and is generally only called from the ResponseBuilder functions. It has no BaseType implementation; each datatype child class supplies its own implementation.

    @param eval Use this as the constraint expression evaluator.
    -
    Parameters
    - - - - -
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    mA marshaller used to serialize data types
    ce_evalA boolean value indicating whether to evaluate the DODS constraint expression that may accompany this dataset. The constraint expression is stored in the dds.
    -
    -
    -
    Returns
    This method always returns true. Older versions used the return value to signal success or failure.
    -
    Note
    We changed the default behavior of this method so that it calls BaseType::clear_local_data() once the values are sent. This, combined with the behavior that read() is called by this method just before data are sent, means that data for any given variable remain in memory for the shortest time possible. Furthermore, since variables are serialized one at a time, no more than one variable's data will be in memory at any given time when using the default behavior. Some code - code that uses intern_data() or server functions - might alter this default behavior. Only Array (i.e. Vector), Sequence, D4Sequence and D4Opaque types actually hold data in dynamically allocated memory, so sonly those types have the new/changed behavior. This change was made on 7/5/15.
    -
    Exceptions
    - - - -
    InternalErr.
    Error.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, libdap::Constructor, libdap::Str, libdap::Int32, libdap::Byte, libdap::Float32, libdap::Float64, libdap::UInt32, libdap::Int16, libdap::UInt16, and libdap::D4Opaque.

    - -

    Definition at line 937 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_attr_table (const AttrTableat)
    -
    -virtualinherited
    -
    -

    Set this variable's attribute table.

    Parameters
    - - -
    atSource of the attributes.
    -
    -
    - -

    Definition at line 590 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_in_selection (bool state)
    -
    -virtualinherited
    -
    -

    Set the in_selection property to state. This property indicates that the variable is used as a parameter to a constraint expression function or that it appears as an argument in a selection sub-expression. If set (true), implementations of the BaseType::read() method should read this variable.

    -
    Parameters
    - - -
    stateSet the in_selection property to this state.
    -
    -
    -
    See also
    BaseType::read()
    -
    -BaseType::is_in_selection() for more information.
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 718 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_length()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::BaseType::set_length (int )
    -
    -inlinevirtualinherited
    -
    - -

    Set the number of elements for this variable.

    -
    Todo:
    change param type to int64_t
    -
    Parameters
    - - -
    lThe number of elements
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, and libdap::Vector.

    - -

    Definition at line 214 of file BaseType.h.

    - -
    -
    - -

    ◆ set_name()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_name (const string & n)
    -
    -virtualinherited
    -
    - -

    Sets the name of the class instance.

    - -

    Reimplemented in libdap::Vector.

    - -

    Definition at line 344 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_parent()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_parent (BaseTypeparent)
    -
    -virtualinherited
    -
    -

    Set the parent property for this variable.

    -
    Note
    Added ability to set parent to null. 10/19/12 jhrg
    -
    Parameters
    - - -
    parentPointer to the Constructor of Vector parent variable or null if the variable has no parent (if it is at the top-level of a DAP2/3 DDS).
    -
    -
    -
    Exceptions
    - - -
    InternalErrthrown if called with anything other than a Constructor, Vector or Null.
    -
    -
    - -

    Definition at line 733 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_read_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_read_p (bool state)
    -
    -virtualinherited
    -
    - -

    Sets the value of the read_p property.

    -

    Sets the value of the read_p property. This indicates that the value(s) of this variable has/have been read. An implementation of the read() method should use this to set the read_p property to true.

    -
    Note
    If the is_synthesized property is true, this method will not alter the is_read property. If you need that behavior, specialize the method in your subclasses if the various types.
    -
    -For most of the types the default implementation of this method is fine. However, if you're building a server which must handle data represented using nested sequences, then you may need to provide a specialization of Sequence::set_read_p(). By default Sequence::set_read_p() recursively sets the read_p property for all child variables to state. For servers where one Sequence reads an outer set of values and another reads an inner set, this is cumbersome. In such a case, it is easier to specialize Sequence::set_read_p() so that it does not recursively set the read_p property for the inner Sequence. Be sure to see the documentation for the read() method!
    -
    Todo:
    Look at making synthesized variables easier to implement and at making them more integrated into the overall CE evaluation process. Maybe the code that computes the synthesized var's value should be in the that variable's read() method? This might provide a way to get rid of the awkward 'projection functions' by replacing them with real children of BaseType. It would also provide a way to clean up the way the synthesized_p prop intrudes on the read_p prop.
    -
    See also
    BaseType::read()
    -
    Parameters
    - - -
    stateSet the read_p property to this state.
    -
    -
    - -

    Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 516 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_send_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_send_p (bool state)
    -
    -virtualinherited
    -
    -

    Sets the value of the send_p flag. This function is meant to be called from within the constraint evaluator of other code which determines that this variable should be returned to the client. Data are ready to be sent when both the d_is_send and d_is_read flags are set to TRUE.

    -
    Parameters
    - - -
    stateThe logical state to set the send_p flag.
    -
    -
    - -

    Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 568 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_synthesized_p (bool state)
    -
    -virtualinherited
    -
    -

    Set the synthesized flag. Before setting this flag be sure to set the read_p() state. Once this flag is set you cannot alter the state of the read_p flag!

    -
    See also
    synthesized_p()
    - -

    Definition at line 463 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_type()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_type (const Typet)
    -
    -virtualinherited
    -
    - -

    Sets the type of the class instance.

    - -

    Definition at line 372 of file BaseType.cc.

    - -
    -
    - -

    ◆ synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::synthesized_p ()
    -
    -virtualinherited
    -
    -

    Returns true if the variable is a synthesized variable. A synthesized variable is one that is added to the dataset by the server (usually with a `projection function'.

    - -

    Definition at line 452 of file BaseType.cc.

    - -
    -
    - -

    ◆ toString()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::toString ()
    -
    -virtualinherited
    -
    -

    Write out the object's internal fields in a string. To be used for debugging when regular inspection w/ddd or gdb isn't enough.

    -
    Returns
    A string which shows the object's internal stuff.
    - -

    Reimplemented in libdap::Sequence.

    - -

    Definition at line 184 of file BaseType.cc.

    - -
    -
    - -

    ◆ transfer_attributes()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::transfer_attributes (AttrTableat_container)
    -
    -virtualinherited
    -
    -

    Transfer attributes from a DAS object into this variable. Because of the rough history of the DAS object and the way that various server code built the DAS, this is necessarily a heuristic process. The intent is that this method will be overridden by handlers that need to look for certain patterns in the DAS (e.g., hdf4's odd variable_dim_n; where n = 0, 1, 2, ...) attribute containers.

    -

    There should be a one-to-one mapping between variables and attribute containers. However, in some cases one variable has attributes spread across several top level containers and in some cases one container is used by several variables

    -
    Note
    This method is technically unnecessary because a server (or client) can easily add attributes directly using the DDS::get_attr_table or BaseType::get_attr_table methods and then poke values in using any of the methods AttrTable provides. This method exists to ease the transition to DDS objects which contain attribute information for the existing servers (Since they all make DAS objects separately from the DDS). They could be modified to use the same AttrTable methods but operate on the AttrTable instances in a DDS/BaseType instead of those in a DAS.
    -
    Parameters
    - - -
    at_containerTransfer attributes from this container.
    -
    -
    -
    Returns
    void
    - -

    Reimplemented in libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 644 of file BaseType.cc.

    - -
    -
    - -

    ◆ transform_to_dap2()

    - -
    -
    - - - - - -
    - - - - - - - - -
    std::vector< BaseType * > * libdap::UInt64::transform_to_dap2 (AttrTableparent_attr_table)
    -
    -virtual
    -
    - -

    DAP4 to DAP2 transform.

    -

    For the current BaseType, return a DAP2 'copy' of the variable.

    -
    Note
    For most DAP4 types, in this implementation of DAP2 the corresponding DAP4 type is the same. The different types are Sequences (which are D4Sequences in the DAP4 implementation), Grids (which are coverages) and Arrays (which use shared dimensions).
    -
    Parameters
    - - - -
    rootThe root group that should hold this new variable. Add Group-level stuff here (e.g., D4Dimensions).
    containerAdd the new variable to this container.
    -
    -
    -
    Returns
    A pointer to the transformed variable
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 268 of file UInt64.cc.

    - -
    -
    - -

    ◆ transform_to_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::transform_to_dap4 (D4Grouproot,
    Constructorcontainer 
    )
    -
    -virtualinherited
    -
    - -

    DAP2 to DAP4 transform.

    -

    For the current BaseType, return a DAP4 'copy' of the variable.

    -
    Note
    For most DAP2 types, in this implementation of DAP4 the corresponding DAP4 type is the same. The different types are Sequences (which are D4Sequences in the DAP4 implementation), Grids (which are coverages) and Arrays (which use shared dimensions).
    -
    Parameters
    - - - -
    rootThe root group that should hold this new variable. Add Group-level stuff here (e.g., D4Dimensions).
    containerAdd the new variable to this container.
    -
    -
    -
    Returns
    A pointer to the transformed variable
    - -

    Reimplemented in libdap::Sequence, libdap::Array, libdap::Grid, libdap::Structure, and libdap::Constructor.

    - -

    Definition at line 216 of file BaseType.cc.

    - -
    -
    - -

    ◆ type()

    - -
    -
    - - - - - -
    - - - - - - - -
    Type libdap::BaseType::type () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance.

    - -

    Definition at line 365 of file BaseType.cc.

    - -
    -
    - -

    ◆ type_name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::type_name () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance as a string.

    - -

    Definition at line 379 of file BaseType.cc.

    - -
    -
    - -

    ◆ var() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::BaseType::var (const string & name = "",
    bool exact_match = true,
    btp_stack * s = 0 
    )
    -
    -virtualinherited
    -
    - -

    Returns a pointer to a member of a constructor class.

    -

    Returns a pointer to the contained variable in a composite class. The composite classes are those made up of aggregated simple data types. Array, Grid, and Structure are composite types, while Int and Float are simple types. This function is only used by composite classes. The BaseType implementation always returns null.

    -

    Several of the subclasses provide alternate access methods that make sense for that particular data type. For example, the Array class defines a *var(int i) method that returns the ith entry in the Array data, and the Structure provides a *var(Vars_iter) function using a pseudo-index to access the different members of the structure.

    -
    Parameters
    - - - - -
    nameThe name of the class member. Defaults to ""
    exact_matchTrue if only interested in variables whose full names match n exactly. If false, returns the first variable whose name matches name. For example, if name is x and point.x is a variable, then var("x", false) would return a BaseType pointer to point.x. If exact_match was true then name would need to be "point.x" for var to return that pointer. This feature simplifies constraint expressions for datasets which have complex, nested, constructor variables. Defaults to true.
    sRecord the path to name. Defaults to null, in which case it is not used.
    -
    -
    -
    Returns
    A pointer to the member named in the n argument. If no name is given, the function returns the first (only) variable. For example, an Array has only one variable, while a Structure can have many.
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 758 of file BaseType.cc.

    - -
    -
    - -

    ◆ var() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::BaseType::var (const string & name,
    btp_stack & s 
    )
    -
    -virtualinherited
    -
    -

    This version of var(...) searches for name and returns a pointer to the BaseType object if found. It uses the same search algorithm as BaseType::var(const string &, bool, btp_stack *) when exact_match is false. In addition to returning a pointer to the variable, it pushes onto s a BaseType pointer to each constructor type that ultimately contains name.

    -
    Note
    The BaseType implementation always returns null. There are no default values for the parameters. If var() is called w/o any params, the three parameter version will be used.
    -
    Deprecated:
    This method is deprecated because it tries first to use exact_match and, if that fails, then tries leaf_match. It's better to use the alternate form of var(...) and specify exactly what you'd like to do.
    -
    Returns
    A pointer to the named variable.
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 780 of file BaseType.cc.

    - -
    -
    - -

    ◆ width()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::UInt64::width (bool constrained = false) const
    -
    -virtual
    -
    - -

    How many bytes does this variable use Return the number of bytes of storage this variable uses. For scalar types, this is pretty simple (an int32 uses 4 bytes, etc.). For arrays and Constructors, it is a bit more complex. Note that a scalar String variable uses sizeof(String*) bytes, not the length of the string value. The width() of a String array returns the number of elements in the array times sizeof(String*).

    -
    Parameters
    - - -
    constrainedShould the current constraint be taken into account?
    -
    -
    -
    Returns
    Bytes of storage
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 109 of file UInt64.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1UInt64.js b/html/classlibdap_1_1UInt64.js deleted file mode 100644 index 52a6f2f60..000000000 --- a/html/classlibdap_1_1UInt64.js +++ /dev/null @@ -1,75 +0,0 @@ -var classlibdap_1_1UInt64 = -[ - [ "btp_stack", "classlibdap_1_1UInt64.html#ae9c6e71855b90a0e552713011c9ab81f", null ], - [ "UInt64", "classlibdap_1_1UInt64.html#ab516d59cb6050179081971ffd3d70a6d", null ], - [ "UInt64", "classlibdap_1_1UInt64.html#a329aa12343f9df0b1b50fca996c85ac1", null ], - [ "~UInt64", "classlibdap_1_1UInt64.html#ae6376ea59d763c022248129c88614b7a", null ], - [ "UInt64", "classlibdap_1_1UInt64.html#afadb6ed18059d5be089be1e8966e52d9", null ], - [ "add_var", "classlibdap_1_1UInt64.html#adca3c2621c4a509537c18362005d7f7f", null ], - [ "add_var_nocopy", "classlibdap_1_1UInt64.html#aa1192360cea4dc516c822cd3e13dc723", null ], - [ "attributes", "classlibdap_1_1UInt64.html#a97452f06d2188eb838399a709246b5e9", null ], - [ "check_semantics", "classlibdap_1_1UInt64.html#aec503abec2fd3090e7738c0a575491f8", null ], - [ "clear_local_data", "classlibdap_1_1UInt64.html#aaddb97a4efbe035f41deaf03c6e8683f", null ], - [ "compute_checksum", "classlibdap_1_1UInt64.html#a23e6785e872f60ab600dbd7ccbf76391", null ], - [ "d4_ops", "classlibdap_1_1UInt64.html#a1c177d21c0eeeb26083a4cf6a01f7873", null ], - [ "dataset", "classlibdap_1_1UInt64.html#a47521ce321a17e6ce217870cb6a1a7aa", null ], - [ "deserialize", "classlibdap_1_1UInt64.html#ad1287870ab52d0aa6c4f60015bcb6e9f", null ], - [ "deserialize", "classlibdap_1_1UInt64.html#a1f27d99250e857efd86ac9db788bbf1b", null ], - [ "dump", "classlibdap_1_1UInt64.html#afc3afdbf38c4097caba0a1db85e3a9a6", null ], - [ "element_count", "classlibdap_1_1UInt64.html#a5c2235737737b482bfa7536b8aeab810", null ], - [ "FQN", "classlibdap_1_1UInt64.html#a977cb954cc8f0d914d6f66ea0f48a9e3", null ], - [ "get_attr_table", "classlibdap_1_1UInt64.html#a1fcd9537c67e3bf88964b2656ff5bac1", null ], - [ "get_parent", "classlibdap_1_1UInt64.html#a3459cdaa239c33ce111ef360d8dc3017", null ], - [ "intern_data", "classlibdap_1_1UInt64.html#a722d33783aa0272d339b0301a4f77e59", null ], - [ "intern_data", "classlibdap_1_1UInt64.html#a1956e6ea90a745516f5372c859173433", null ], - [ "is_constructor_type", "classlibdap_1_1UInt64.html#a8b8490e0047c6da52945699a132008ea", null ], - [ "is_dap4", "classlibdap_1_1UInt64.html#a7f6835cb5e5589ab5dad3fb4813d3bea", null ], - [ "is_in_selection", "classlibdap_1_1UInt64.html#ae302ab2ec26e9fc5b575bf5d3d09aa5c", null ], - [ "is_simple_type", "classlibdap_1_1UInt64.html#aae57e5b270b3a015d40c8db10b9b5549", null ], - [ "is_vector_type", "classlibdap_1_1UInt64.html#a7107c76dbcab71015141142383b6d022", null ], - [ "length", "classlibdap_1_1UInt64.html#aadcda7a659157bc6a832d8a5fb775b3f", null ], - [ "m_duplicate", "classlibdap_1_1UInt64.html#a0c55b826c8c5dfe7a454dc670e859a41", null ], - [ "name", "classlibdap_1_1UInt64.html#a24c5d67823b3cff7f4245a993072a142", null ], - [ "operator=", "classlibdap_1_1UInt64.html#a08ec11387fd1fe67f1e6b76ec17d148b", null ], - [ "ops", "classlibdap_1_1UInt64.html#a4ceb6fa4a9fc731410962dc9e1c787a4", null ], - [ "print_dap4", "classlibdap_1_1UInt64.html#afcddbe441380b95c894510c02980b163", null ], - [ "print_decl", "classlibdap_1_1UInt64.html#a2d799fad93255d7f2b803562ae7a5784", null ], - [ "print_decl", "classlibdap_1_1UInt64.html#afd744b0ddeb04e7b173c9e83423ec572", null ], - [ "print_val", "classlibdap_1_1UInt64.html#ae4eed9eaa057932bd1e817cea8477d79", null ], - [ "print_xml", "classlibdap_1_1UInt64.html#a825820edee179550cfde3dfd4d274f2a", null ], - [ "print_xml", "classlibdap_1_1UInt64.html#a8bd2c7682edd48c64b210bdf247bdef7", null ], - [ "print_xml_writer", "classlibdap_1_1UInt64.html#a11554ff931528b243e9af8173d205b44", null ], - [ "ptr_duplicate", "classlibdap_1_1UInt64.html#ab87b5a08c9627f4813af802d2eb7e8da", null ], - [ "read", "classlibdap_1_1UInt64.html#a1da003c53f2e663223f603ab3fbd7c8e", null ], - [ "read_p", "classlibdap_1_1UInt64.html#a38ff819a432217c55db2e9071928d20c", null ], - [ "send_p", "classlibdap_1_1UInt64.html#a980c0013817836aa77ef74aeec7fb192", null ], - [ "serialize", "classlibdap_1_1UInt64.html#a8f9ff4dfa4f7e93d838c35097b2e3930", null ], - [ "serialize", "classlibdap_1_1UInt64.html#adc24a735977e28acb0e6f78667c1dd21", null ], - [ "set_attr_table", "classlibdap_1_1UInt64.html#a572a1d76a75981abac83a4241e90c0fa", null ], - [ "set_attributes", "classlibdap_1_1UInt64.html#ad4dda4cf43dca838d3de183b8e01cd09", null ], - [ "set_attributes_nocopy", "classlibdap_1_1UInt64.html#afd0e5f87d19020f560d5c1ff8dd4d6a3", null ], - [ "set_in_selection", "classlibdap_1_1UInt64.html#a2bc036248cdaf1affac464170f32ad30", null ], - [ "set_is_dap4", "classlibdap_1_1UInt64.html#abca9ddaa9a1ada8447cbe7193e8e288a", null ], - [ "set_length", "classlibdap_1_1UInt64.html#a4fe343c1eeb6fb1d61ab030433651d90", null ], - [ "set_name", "classlibdap_1_1UInt64.html#a86504564f45a3e6748c6f1cc0ff4e9fa", null ], - [ "set_parent", "classlibdap_1_1UInt64.html#a5b6a39f6ce6594fa74f3fc899ac9a966", null ], - [ "set_read_p", "classlibdap_1_1UInt64.html#a4533905a450d2a7af32e7d5acd557676", null ], - [ "set_send_p", "classlibdap_1_1UInt64.html#aba7b27635c95b74536de18393133628e", null ], - [ "set_synthesized_p", "classlibdap_1_1UInt64.html#a595cb4059cff24f801a1b6da79bd2f9e", null ], - [ "set_type", "classlibdap_1_1UInt64.html#af74f8d1ef57c9fcca46f620f75d175a3", null ], - [ "set_value", "classlibdap_1_1UInt64.html#ad5080488563e2dc7b4c3e06287aa355e", null ], - [ "synthesized_p", "classlibdap_1_1UInt64.html#ae64e677da27249473cdba0b60cdbb90a", null ], - [ "toString", "classlibdap_1_1UInt64.html#a701eb3361f5b5628329ece019cd34519", null ], - [ "transfer_attributes", "classlibdap_1_1UInt64.html#add8e836c622042a339152a6c31e5bdfb", null ], - [ "transform_to_dap2", "classlibdap_1_1UInt64.html#a128cc879ec5b5c5541d0f3b4289d879e", null ], - [ "transform_to_dap4", "classlibdap_1_1UInt64.html#adb03e2e1e40c3c888577c4666831a949", null ], - [ "type", "classlibdap_1_1UInt64.html#af8e803b20a7a7dc5f2ef351d7fac4a56", null ], - [ "type_name", "classlibdap_1_1UInt64.html#a18a42c8ec35cb5b15cd651a4152f8a2c", null ], - [ "value", "classlibdap_1_1UInt64.html#a1f24888d9690bddf56ee7a0f39f19cfb", null ], - [ "var", "classlibdap_1_1UInt64.html#a4dc4fac1bb6083f6db645f37bfd59b85", null ], - [ "var", "classlibdap_1_1UInt64.html#adecfc442b5927c79933c7f71cfe03fd2", null ], - [ "width", "classlibdap_1_1UInt64.html#a924125a6d5bfb10ae1ad42c40ab4dfff", null ], - [ "d_buf", "classlibdap_1_1UInt64.html#aaad9aa337708abc0c52cf7d2c1c73250", null ], - [ "d_in_selection", "classlibdap_1_1UInt64.html#a949a89714965d7afdcd1e3edc8b7f0d4", null ], - [ "d_is_synthesized", "classlibdap_1_1UInt64.html#a629e97e8eb7d285b54c9af8c1ec9a29a", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1UInt64__inherit__graph.map b/html/classlibdap_1_1UInt64__inherit__graph.map deleted file mode 100644 index af5399e98..000000000 --- a/html/classlibdap_1_1UInt64__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1UInt64__inherit__graph.md5 b/html/classlibdap_1_1UInt64__inherit__graph.md5 deleted file mode 100644 index 95a8f3327..000000000 --- a/html/classlibdap_1_1UInt64__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -ca23d002928ae36bbb04aeff3af0f07e \ No newline at end of file diff --git a/html/classlibdap_1_1UInt64__inherit__graph.png b/html/classlibdap_1_1UInt64__inherit__graph.png deleted file mode 100644 index f967968c72c39ba809cc2446cf8adc0a26112b5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63658 zcmd43WmMZi^eu`73(^*f2TGxZ;x3_hvEuFoD=xv^tt}ATiWiD|vEWjqxNETDP~82d ze|h(<`__H;>s@@vu#z>Inctj!_SyTu7ZoKLd|V1#6ciMEIoS_t$kzrG6!ar(Oynp? zACiiEL3L4+kwB>!q1r`35krytAg1ry^%nMdn$Pn zlJ@ z*UZeHvY+x4{i{C})@4hUQ-@tZdyM3%a-*B1-9TPuIzWHakCxMGORw#)(k08de`nxH z_wt$q=ul2cR56zk`WX}7lY@hrh_dVzhN-(h3$hN93f)J3twPbFFE@iby5GBW+=M^M zM~kMqKLzQ=rbK$aE{oMntcejfZYwhcPxYfs+sP+e5`cg5_x4rnK0b5h`_k9J8Fjo8 zltUyJ^_z<=J}8Hq6*IlVd=7oe^K)L=_*ivvi1RmzkZcmGTEb6`pEg?sFGJW?@BMJ+ z+RwCp^m^nPPR;G5i?&pFbUuEZ@8ix6%}y;+Sr}zdF#HWXEc(_F*81EK!JQu+y5AXm z%!turotHK4i>KpHf2|X9;ho4y;XU$QRaZSh+P;Co#$NzrfZZUTTluc1mqzibUn{O}NYTHkbsJAP^Si|6XFro%y7Xv(7pOa@t$o(oglD@y^ zJIJkUtB8`}M#Ga{=mr}W(y`MD&cN|{N%@q`gFs6j$c{~Feo2`&{qm=>*3u&(Xddon zoL8ZT?v8QQ&fZ}QB|gWEBNGf6Ft&^!NpT`{& zw4ly*ADN&DEPGxv@5COOWTVm9k1^9L4ReXGW~`LxE|-Vj1lk8+$&1GV*IA)Xf?Kq! z>T4D%o4p>iOK3k=(XTNwwvC?EKL5h0G9&^r9R;z~8^ILa4nJ;{OWtCS3?2lIG^n(_ z9^{9*j$`ZwN=szgx%l8-EnNFQp=KIC}V&ZSRi0Ne@mfJq~2{^cweDsdY zFlz4sd5tcqY4MkY`Ps@xtCp-JQ$KNFisDeS@P4^e;phKwsJ9YfZ@XkdbZ5JJ5-|1a zX3GAI7`}fwlmA82HfRGet;dlGX&@<@wf`NiGsKP|chHUIzgN~Qwp&>4t)~5UJtZjr z(lUrsVZM?@PKqVRVc;)1u{k@2L^@lm zp(#y2-B*GheoHYt=@fd%5q@-9Qwci~5GyM0;w;o9|BZ4v)wM4^A=h!?COTnfV}%^? z@>uMZw6P!&wCzylnS#JkMSKFIzo&iywUOD!(FtwBQWZ4-?(AMZc# zrJ&$;(}a-7ju=9&=!Ofz|BWQg3M%#nkxSa&_s^f7`adi#|H)Afx#CN3`uP)U@#@GA z@?fNssMs+`r+C{pzOVU#V^LhZSz)Im$@~21sPG7x-{5s-~>5Nrd{XB?9^F!x~_j&ZLYQrPk78P!0*)KozFM1U{vj?#;#girVU zpe5-R4D~hIIqLhA&kP|?1)n_8G8AtqJW+aspK4c7pKVNbwLPRnPoJ%}j;$rwnE#vj zQGf5zw(-YC-bw(LpNtMFN$4{-p}3JJq4&~PtM>)M0UkQfF*|5XY@ttfq04}&`znUU zi=DI|0o~*6ohqf>rP0NLqW9ZX2h7FNBs<6l^F^*ccbpYUNM=78SRiZ3C(({7y|~!n zcXoIDZ0B73Nv6wbs@%AFwWT!9AK!ErQThw;&M*_O(Cl*5z1iFoE4g~i*v`M(!dGal zp>d6C-GJAV7_&i?7oME}%d31!R{ng-Hz;%@FhCLpFeXn$sqT$Gk&D-$18zWEZKmu? z-ME9}f`4X-Ed+2cl?QtJT&~%QioW7!WU_v>#5}m4!Q?)+`McQ=2iIPrZK~R_!WsSa zD)>n+-Nzn;u%fOd#>w+gi)I;HrfX20-Fc_J*2?I}GrI4N>ka@RihRj1;M3P=W!i_? zZXH`T*bKLtA0EgMDKQv*W5tr7-_qqBqn0(U;HeI@gC%&nO)$i%i{6s}fyshX8FGs; z62aX0aNYLoa)>^i1#}?-&4}y>+u)OZ0AlhLY~4fKvod^O!eE0EX6=o_jWVZv7hUH%D?yPY&9Yt7p#ax7&A+|8cU-2ls4w?)VZ8 zZ2=o&k?9#W)LnDd(z@xDlzaMGy2@fW@! z3ztOR%xBb*ynky9JvQYxq{m-gyY-~BH;ZGHX*kG#{GBowV*IA+sL+J_S_mUkva5X9 zHun{Hp&s>-EXiJe;b0W+m{g{r!=RiP-tK=F5&Q7GQ8*T}kxW`#v?xp~Cqc%T-;=BY zwcYXV)EgJ$K&p#$S;Cp^gkhL^!w`=!&_x(P5}psP5wmSkNp3={sO=gFB�FF%siM zceLe@sIQ>Cd@A^RG{&mE{kV7)bY#A{F6e+Ky>6Pc^fZVrW+J>A0Ts_TfE(!PBNH;;2Os-!B^tg0WMwa60-^jaM+0?o9 z3w4RU;}M?Gf3xDjsU_Z1=@itd}yo4+vC2RYJkd|$?VtdX|Im!2~97AZYW z$Qr4`+7Sacu!n)mR(>wEF+vzu92ADRN3E$=LO*pn?i`6%S8o-LJcd-zo+uNIZU)~x86|U{ABy!J zczMP;M}TYnDh$#Q(0TCXfM9q+S|d|rW?xmB;fyMPlZS!?EAyJD-xi2V{T0`&&oygg z5%6*l-U9>e^~Q6QjMmv4jR*$|ZJR+dQNZK67Al`Je!Bd;8q7}6WndnA=Z}VNtPedh zP`FdeHQSGM5LJq}c=cg=F74gpH}nMuqp@l?fjctX_6QvZ8H&}^B4`?8E9S1!v6hC# zMA1R=5NFHds|G9fFa>aZE1-!Bkf&aat!EQXswP;b5rVttFP|O|2%{|xd}xXumzyTw zz-dYo-^x78vKaFu!!e4CI~zqZtxV}I`|iVMw>oLHk=v+aK}io}@aWUlHSje<(fZmY zlD<5NX0P*`dl6>k<@H5&pC+prwyD%#^)J2Px5dtc4T7@pEpjAtA-$E7nLoK<<8Oj_wjLiJ39XM zn`CXS`9WcFZlCB4L!TauFB5SNYz3IF_&{&4<3h ze!j%#w88fz-#GQ5AVHuvn?ce`9;CkE@NTePwcX5lox;S7Jnl!Th1!Wk^*|A#Fy#6B ze)d-@Vf>P)GLVv`TNb>-&ZSdd!Y!L0_HqY~?b+ys(`}2D-shWFpBj%#G%w&~ADOB>`WL^kef(DmNr~>v9u?)53m^mEb8lW=X-VY zmzm(nzDu!G`t@_`57)899&r`oB+ir-SUS8+Pq5&qyYKKhQtairD*}VIa z!pOy(Yh4{0!sr+62NKx>rf|DQE+mnA0Fb8gmL{|lw69&vMznTkk04^2kH-J|T@zB| z4(A-##~y^-_MBTK-45Tg_pvt^c<<)j3&rODSB+R<7;v*$M&sh?bbo#JXxpY;ndQ6n z_q=B)?d-3eNb%-B_OodxG|JYDm?Pg_c3bw^zE9a36%F_r@Xiy

    mR;E(dwA4LMFU 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%0A!;VI7uH* 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 HI`aPj&b4+g diff --git a/html/classlibdap_1_1UnMarshaller-members.html b/html/classlibdap_1_1UnMarshaller-members.html deleted file mode 100644 index dcf9864ce..000000000 --- a/html/classlibdap_1_1UnMarshaller-members.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -

    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::UnMarshaller Member List
    -
    -
    - -

    This is the complete list of members for libdap::UnMarshaller, including all inherited members.

    - - - - - - - - - - - - - - - - -
    dump(std::ostream &strm) const =0libdap::UnMarshallerpure virtual
    get_byte(dods_byte &val)=0 (defined in libdap::UnMarshaller)libdap::UnMarshallerpure virtual
    get_float32(dods_float32 &val)=0 (defined in libdap::UnMarshaller)libdap::UnMarshallerpure virtual
    get_float64(dods_float64 &val)=0 (defined in libdap::UnMarshaller)libdap::UnMarshallerpure virtual
    get_int(int &val)=0 (defined in libdap::UnMarshaller)libdap::UnMarshallerpure virtual
    get_int16(dods_int16 &val)=0 (defined in libdap::UnMarshaller)libdap::UnMarshallerpure virtual
    get_int32(dods_int32 &val)=0 (defined in libdap::UnMarshaller)libdap::UnMarshallerpure virtual
    get_opaque(char *val, unsigned int len)=0 (defined in libdap::UnMarshaller)libdap::UnMarshallerpure virtual
    get_str(string &val)=0 (defined in libdap::UnMarshaller)libdap::UnMarshallerpure virtual
    get_uint16(dods_uint16 &val)=0 (defined in libdap::UnMarshaller)libdap::UnMarshallerpure virtual
    get_uint32(dods_uint32 &val)=0 (defined in libdap::UnMarshaller)libdap::UnMarshallerpure virtual
    get_url(string &val)=0 (defined in libdap::UnMarshaller)libdap::UnMarshallerpure virtual
    get_vector(char **val, unsigned int &num, Vector &vec)=0 (defined in libdap::UnMarshaller)libdap::UnMarshallerpure virtual
    get_vector(char **val, unsigned int &num, int width, Vector &vec)=0 (defined in libdap::UnMarshaller)libdap::UnMarshallerpure virtual
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1UnMarshaller.html b/html/classlibdap_1_1UnMarshaller.html deleted file mode 100644 index dae52bda0..000000000 --- a/html/classlibdap_1_1UnMarshaller.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - - -libdap: libdap::UnMarshaller Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::UnMarshaller Class Referenceabstract
    -
    -
    - -

    abstract base class used to unmarshall/deserialize dap data objects - More...

    - -

    #include <UnMarshaller.h>

    -
    -Inheritance diagram for libdap::UnMarshaller:
    -
    -
    Inheritance graph
    - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual void dump (std::ostream &strm) const =0
     dump the contents of this object to the specified ostream More...
     
    -virtual void get_byte (dods_byte &val)=0
     
    -virtual void get_float32 (dods_float32 &val)=0
     
    -virtual void get_float64 (dods_float64 &val)=0
     
    -virtual void get_int (int &val)=0
     
    -virtual void get_int16 (dods_int16 &val)=0
     
    -virtual void get_int32 (dods_int32 &val)=0
     
    -virtual void get_opaque (char *val, unsigned int len)=0
     
    -virtual void get_str (string &val)=0
     
    -virtual void get_uint16 (dods_uint16 &val)=0
     
    -virtual void get_uint32 (dods_uint32 &val)=0
     
    -virtual void get_url (string &val)=0
     
    -virtual void get_vector (char **val, unsigned int &num, Vector &vec)=0
     
    -virtual void get_vector (char **val, unsigned int &num, int width, Vector &vec)=0
     
    -

    Detailed Description

    -

    abstract base class used to unmarshall/deserialize dap data objects

    - -

    Definition at line 54 of file UnMarshaller.h.

    -

    Member Function Documentation

    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::UnMarshaller::dump (std::ostream & strm) const
    -
    -pure virtual
    -
    - -

    dump the contents of this object to the specified ostream

    -

    This method is implemented by all derived classes to dump their contents, in other words, any state they might have, private variables, etc...

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the object to
    -
    -
    - -

    Implements libdap::DapObj.

    - -

    Implemented in libdap::D4StreamUnMarshaller, libdap::XDRStreamUnMarshaller, and libdap::XDRFileUnMarshaller.

    - -
    -
    -
    The documentation for this class was generated from the following file: -
    -
    - - - - diff --git a/html/classlibdap_1_1UnMarshaller.js b/html/classlibdap_1_1UnMarshaller.js deleted file mode 100644 index a1b54eddb..000000000 --- a/html/classlibdap_1_1UnMarshaller.js +++ /dev/null @@ -1,17 +0,0 @@ -var classlibdap_1_1UnMarshaller = -[ - [ "dump", "classlibdap_1_1UnMarshaller.html#a2aba5bbe9a2990b03668c78817312782", null ], - [ "get_byte", "classlibdap_1_1UnMarshaller.html#a3bd83db8260c855db81eaeaf0078342e", null ], - [ "get_float32", "classlibdap_1_1UnMarshaller.html#a9cc9a16495b80c7f29d1bc7b2f4b29dc", null ], - [ "get_float64", "classlibdap_1_1UnMarshaller.html#a4dc8a9a808e5a4184c9a4ee0e706ec6d", null ], - [ "get_int", "classlibdap_1_1UnMarshaller.html#a6d8fcf5497c6a6f21e44662fceaad48a", null ], - [ "get_int16", "classlibdap_1_1UnMarshaller.html#a399095f74628e9acb3c8aa7a65735fdd", null ], - [ "get_int32", "classlibdap_1_1UnMarshaller.html#a4b1d9aa890831d5e4efd4d8e9a641d53", null ], - [ "get_opaque", "classlibdap_1_1UnMarshaller.html#a6d7751b2b559e872041e1c8e53ad2298", null ], - [ "get_str", "classlibdap_1_1UnMarshaller.html#ac2b025e1bbede8039c8ed3a11ccf794e", null ], - [ "get_uint16", "classlibdap_1_1UnMarshaller.html#a49899ddc472246a6fb528cdc804cb572", null ], - [ "get_uint32", "classlibdap_1_1UnMarshaller.html#ad8593133d4964af5970f0cf33855f2c5", null ], - [ "get_url", "classlibdap_1_1UnMarshaller.html#a8df17d5aef596cf5123a265d508ec600", null ], - [ "get_vector", "classlibdap_1_1UnMarshaller.html#a895d04c43ab9b843e79884e151207a26", null ], - [ "get_vector", "classlibdap_1_1UnMarshaller.html#a9e54eb20f010ddcada6d25c84c88c213", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1UnMarshaller__inherit__graph.map b/html/classlibdap_1_1UnMarshaller__inherit__graph.map deleted file mode 100644 index 69d55f433..000000000 --- a/html/classlibdap_1_1UnMarshaller__inherit__graph.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/html/classlibdap_1_1UnMarshaller__inherit__graph.md5 b/html/classlibdap_1_1UnMarshaller__inherit__graph.md5 deleted file mode 100644 index 0d5bcce71..000000000 --- a/html/classlibdap_1_1UnMarshaller__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -26689fc282d7691fa572ccfa24e2295c \ No newline at end of file diff --git a/html/classlibdap_1_1UnMarshaller__inherit__graph.png b/html/classlibdap_1_1UnMarshaller__inherit__graph.png deleted file mode 100644 index ad3b2e3d4bf6110a38930de214cc2544123035e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74104 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 XGOj5*^4(v+0)7 - - - - - - -libdap: Member List - - - - - - - - - - - -

    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::Url Member List
    -
    -
    - -

    This is the complete list of members for libdap::Url, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    add_var(BaseType *bt, Part part=nil)libdap::BaseTypevirtual
    add_var_nocopy(BaseType *bt, Part part=nil) (defined in libdap::BaseType)libdap::BaseTypevirtual
    attributes()libdap::BaseTypevirtual
    BaseType(const string &n, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const string &n, const string &d, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const BaseType &copy_from)libdap::BaseType
    btp_stack typedef (defined in libdap::BaseType)libdap::BaseType
    buf2val(void **val)libdap::Strvirtual
    check_semantics(string &msg, bool all=false)libdap::BaseTypevirtual
    clear_local_data()libdap::BaseTypeinlinevirtual
    compute_checksum(Crc32 &checksum)libdap::Strvirtual
    d4_ops(BaseType *b, int op)libdap::Strvirtual
    d_buf (defined in libdap::Str)libdap::Strprotected
    d_in_selection (defined in libdap::BaseType)libdap::BaseTypeprotected
    d_is_synthesized (defined in libdap::BaseType)libdap::BaseTypeprotected
    dataset() constlibdap::BaseTypevirtual
    deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)libdap::Strvirtual
    deserialize(D4StreamUnMarshaller &um, DMR &dmr)libdap::Strvirtual
    dump(ostream &strm) constlibdap::Strvirtual
    element_count(bool leaves=false)libdap::BaseTypevirtual
    FQN() constlibdap::BaseTypevirtual
    get_attr_table()libdap::BaseTypevirtual
    get_parent() constlibdap::BaseTypevirtual
    intern_data(ConstraintEvaluator &eval, DDS &dds)libdap::BaseTypevirtual
    intern_data()libdap::BaseTypevirtual
    is_constructor_type() constlibdap::BaseTypevirtual
    is_dap4() const (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    is_in_selection()libdap::BaseTypevirtual
    is_simple_type() constlibdap::BaseTypevirtual
    is_vector_type() constlibdap::BaseTypevirtual
    length() constlibdap::Strvirtual
    m_duplicate(const BaseType &bt)libdap::BaseTypeprotected
    name() constlibdap::BaseTypevirtual
    operator=(const Str &rhs) (defined in libdap::Str)libdap::Str
    operator=(const BaseType &rhs) (defined in libdap::BaseType)libdap::BaseType
    ops(BaseType *b, int op)libdap::Strvirtual
    print_dap4(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
    print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_val(FILE *out, string space="", bool print_decl_p=true)libdap::Strvirtual
    print_val(ostream &out, string space="", bool print_decl_p=true)libdap::Strvirtual
    print_xml(FILE *out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml(ostream &out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml_writer(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
    ptr_duplicate()libdap::Urlvirtual
    read()libdap::BaseTypevirtual
    read_p()libdap::BaseTypevirtual
    send_p()libdap::BaseTypevirtual
    serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)libdap::Strvirtual
    serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)libdap::Strvirtual
    set_attr_table(const AttrTable &at)libdap::BaseTypevirtual
    set_attributes(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_attributes_nocopy(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_in_selection(bool state)libdap::BaseTypevirtual
    set_is_dap4(const bool v) (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    set_length(int)libdap::BaseTypeinlinevirtual
    set_name(const string &n)libdap::BaseTypevirtual
    set_parent(BaseType *parent)libdap::BaseTypevirtual
    set_read_p(bool state)libdap::BaseTypevirtual
    set_send_p(bool state)libdap::BaseTypevirtual
    set_synthesized_p(bool state)libdap::BaseTypevirtual
    set_type(const Type &t)libdap::BaseTypevirtual
    set_value(const string &value)libdap::Strvirtual
    Str(const string &n)libdap::Str
    Str(const string &n, const string &d)libdap::Str
    Str(const Str &copy_from) (defined in libdap::Str)libdap::Str
    synthesized_p()libdap::BaseTypevirtual
    toString()libdap::BaseTypevirtual
    transfer_attributes(AttrTable *at)libdap::BaseTypevirtual
    transform_to_dap2(AttrTable *parent_attr_table)libdap::BaseTypevirtual
    transform_to_dap4(D4Group *root, Constructor *container)libdap::BaseTypevirtual
    type() constlibdap::BaseTypevirtual
    type_name() constlibdap::BaseTypevirtual
    Url(const std::string &n)libdap::Url
    Url(const std::string &n, const std::string &d)libdap::Url
    Url(const std::string &n, Type t) (defined in libdap::Url)libdap::Url
    Url(const std::string &n, const std::string &d, Type t) (defined in libdap::Url)libdap::Url
    val2buf(void *val, bool reuse=false)libdap::Strvirtual
    value() constlibdap::Strvirtual
    var(const string &name="", bool exact_match=true, btp_stack *s=0)libdap::BaseTypevirtual
    var(const string &name, btp_stack &s)libdap::BaseTypevirtual
    width(bool constrained=false) constlibdap::Strvirtual
    ~BaseType() (defined in libdap::BaseType)libdap::BaseTypevirtual
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    ~Str() (defined in libdap::Str)libdap::Strinlinevirtual
    ~Url() (defined in libdap::Url)libdap::Urlinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1Url.html b/html/classlibdap_1_1Url.html deleted file mode 100644 index c491818be..000000000 --- a/html/classlibdap_1_1Url.html +++ /dev/null @@ -1,2989 +0,0 @@ - - - - - - - -libdap: libdap::Url Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    - -

    Holds an Internet address (URL). - More...

    - -

    #include <Url.h>

    -
    -Inheritance diagram for libdap::Url:
    -
    -
    Inheritance graph
    - - - - - -
    - - - - -

    -Public Types

    -typedef stack< BaseType * > btp_stack
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual void add_var (BaseType *bt, Part part=nil)
     Add a variable. More...
     
    -virtual void add_var_nocopy (BaseType *bt, Part part=nil)
     
    virtual unsigned int buf2val (void **val)
     
    virtual bool check_semantics (string &msg, bool all=false)
     Compare an object's current state with the semantics of its type. More...
     
    virtual void clear_local_data ()
     
    virtual void compute_checksum (Crc32 &checksum)
     include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum. More...
     
    virtual bool d4_ops (BaseType *b, int op)
     
    virtual string dataset () const
     Returns the name of the dataset used to create this instance. More...
     
    virtual bool deserialize (UnMarshaller &um, DDS *dds, bool reuse=false)
     Receive data from the net. More...
     
    virtual void deserialize (D4StreamUnMarshaller &um, DMR &dmr)
     
    virtual void dump (ostream &strm) const
     dumps information about this object More...
     
    virtual int element_count (bool leaves=false)
     Count the members of constructor types. More...
     
    virtual std::string FQN () const
     
    virtual AttrTableget_attr_table ()
     
    virtual BaseTypeget_parent () const
     
    virtual bool is_constructor_type () const
     Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable. More...
     
    -virtual bool is_dap4 () const
     
    virtual bool is_in_selection ()
     Is this variable part of the current selection? More...
     
    virtual bool is_simple_type () const
     Returns true if the instance is a numeric, string or URL type variable. More...
     
    virtual bool is_vector_type () const
     Returns true if the instance is a vector (i.e., array) type variable. More...
     
    virtual int length () const
     How many elements are in this variable. More...
     
    virtual string name () const
     Returns the name of the class instance. More...
     
    virtual bool ops (BaseType *b, int op)
     Evaluate relational operators. More...
     
    virtual void print_dap4 (XMLWriter &xml, bool constrained=false)
     
    virtual void print_decl (FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_decl (ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_val (FILE *out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_val (ostream &out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_xml (FILE *out, string space=" ", bool constrained=false)
     
    virtual void print_xml (ostream &out, string space=" ", bool constrained=false)
     
    virtual void print_xml_writer (XMLWriter &xml, bool constrained=false)
     
    virtual BaseTypeptr_duplicate ()
     
    virtual bool read ()
     Read data into a local buffer. More...
     
    virtual bool read_p ()
     Has this variable been read? More...
     
    virtual bool send_p ()
     Should this variable be sent? More...
     
    virtual bool serialize (ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
     Move data to the net, then remove them from the object. More...
     
    virtual void serialize (D4StreamMarshaller &m, DMR &dmr, bool filter=false)
     Serialize an Int8. More...
     
    virtual void set_attr_table (const AttrTable &at)
     
    virtual void set_in_selection (bool state)
     
    -virtual void set_is_dap4 (const bool v)
     
    virtual void set_length (int)
     Set the number of elements for this variable. More...
     
    virtual void set_name (const string &n)
     Sets the name of the class instance. More...
     
    virtual void set_parent (BaseType *parent)
     
    virtual void set_read_p (bool state)
     Sets the value of the read_p property. More...
     
    virtual void set_send_p (bool state)
     
    virtual void set_synthesized_p (bool state)
     
    virtual void set_type (const Type &t)
     Sets the type of the class instance. More...
     
    virtual bool set_value (const string &value)
     
    virtual bool synthesized_p ()
     
    virtual string toString ()
     
    virtual void transfer_attributes (AttrTable *at)
     
    virtual std::vector< BaseType * > * transform_to_dap2 (AttrTable *parent_attr_table)
     DAP4 to DAP2 transform. More...
     
    virtual void transform_to_dap4 (D4Group *root, Constructor *container)
     DAP2 to DAP4 transform. More...
     
    virtual Type type () const
     Returns the type of the class instance. More...
     
    virtual string type_name () const
     Returns the type of the class instance as a string. More...
     
     Url (const std::string &n)
     
     Url (const std::string &n, const std::string &d)
     
    Url (const std::string &n, Type t)
     
    Url (const std::string &n, const std::string &d, Type t)
     
    virtual unsigned int val2buf (void *val, bool reuse=false)
     
    virtual string value () const
     
    virtual BaseTypevar (const string &name="", bool exact_match=true, btp_stack *s=0)
     Returns a pointer to a member of a constructor class. More...
     
    virtual BaseTypevar (const string &name, btp_stack &s)
     
    virtual unsigned int width (bool constrained=false) const
     How many bytes does this variable use Return the number of bytes of storage this variable uses. For scalar types, this is pretty simple (an int32 uses 4 bytes, etc.). For arrays and Constructors, it is a bit more complex. Note that a scalar String variable uses sizeof(String*) bytes, not the length of the string value. The width() of a String array returns the number of elements in the array times sizeof(String*). More...
     
    virtual D4Attributesattributes ()
     
    -virtual void set_attributes (D4Attributes *)
     
    -virtual void set_attributes_nocopy (D4Attributes *)
     
    Abstract Methods
    virtual void intern_data (ConstraintEvaluator &eval, DDS &dds)
     
    virtual void intern_data ()
     Read data into this variable. More...
     
    - - - - -

    -Protected Member Functions

    void m_duplicate (const BaseType &bt)
     Perform a deep copy. More...
     
    - - - - - - - -

    -Protected Attributes

    -string d_buf
     
    -bool d_in_selection
     
    -bool d_is_synthesized
     
    -

    Detailed Description

    -

    Holds an Internet address (URL).

    -
    See also
    BaseType
    -
    -Str
    - -

    Definition at line 68 of file Url.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ Url() [1/2]

    - -
    -
    - - - - - - - - -
    libdap::Url::Url (const std::string & n)
    -
    -

    The URL constructor requires only the name of the variable to be created. The name may be omitted, which will create a nameless variable. This may be adequate for some applications.

    -
    Parameters
    - - -
    nA string containing the name of the variable to be created.
    -
    -
    - -

    Definition at line 50 of file Url.cc.

    - -
    -
    - -

    ◆ Url() [2/2]

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    libdap::Url::Url (const std::string & n,
    const std::string & d 
    )
    -
    -

    The URL server-side constructor requires the name of the variable to be created and the name of the dataset from which this variable is being created.

    -
    Parameters
    - - - -
    nA string containing the name of the variable to be created.
    dA string containing the name of the dataset from which this variable is being created.
    -
    -
    - -

    Definition at line 63 of file Url.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ add_var()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::add_var (BaseTypebt,
    Part part = nil 
    )
    -
    -virtualinherited
    -
    - -

    Add a variable.

    -

    Adds a variable to an instance of a constructor class, such as Array, Structure et cetera. This function is only used by those classes. For constructors with more than one variable, the variables appear in the same order in which they were added (i.e., the order in which add_var() was called). Since this method is only for use by Vectors and Constructors, the BaseType implementation throws InternalErr.

    -
    Note
    For the implementation of this method in Structure, Sequence, et c., first copy bt and then insert the copy. If bt is itself a constructor type you must either use the var() method to get a pointer to the actual instance added to *this or you must first add all of bt's children to it before adding it to *this. The implementations should use m_duplicate() to perform a deep copy of bt.
    -
    Todo:
    We should get rid of the Part parameter and adopt the convention that the first variable is the Array and all subsequent ones are Maps (when dealing with a Grid, the only time Part matters). This would enable several methods to migrate from Structure, Sequence and Grid to Constructor.
    -
    Parameters
    - - - -
    btThe variable to be added to this instance. The caller of this method must free memory it allocates for v. This method will make a deep copy of the object pointed to by v.
    partThe part of the constructor data to be modified. Only meaningful for Grid variables.
    -
    -
    -
    See also
    Part
    - -

    Reimplemented in libdap::Vector, libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 815 of file BaseType.cc.

    - -
    -
    - -

    ◆ attributes()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4Attributes * libdap::BaseType::attributes ()
    -
    -virtualinherited
    -
    -

    DAP4 Attribute methods

    - -

    Definition at line 599 of file BaseType.cc.

    - -
    -
    - -

    ◆ buf2val()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::Str::buf2val (void ** val)
    -
    -virtualinherited
    -
    -

    Read the object's value and put a copy in the C++ string object referenced by **val. If *val is null, this method will allocate a string object using new and store the result there. If *val is not null, it will assume that *val references a string object and put the value there.

    -
    Parameters
    - - -
    valA pointer to null or to a string object.
    -
    -
    -
    Returns
    The sizeof(string*)
    -
    Exceptions
    - - -
    InternalErrThrown if val is null.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 206 of file Str.cc.

    - -
    -
    - -

    ◆ check_semantics()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::check_semantics (string & msg,
    bool all = false 
    )
    -
    -virtualinherited
    -
    - -

    Compare an object's current state with the semantics of its type.

    -

    This function checks the class instance for internal consistency. This is important to check for complex constructor classes. For BaseType, an object is semantically correct if it has both a non-null name and type.

    -

    For example, an Int32 instance would return FALSE if it had no name or no type defined. A Grid instance might return FALSE for more complex reasons, such as having Map arrays of the wrong size or shape.

    -

    This function is used by the DDS class, and will rarely, if ever, be explicitly called by a DODS application program. A variable must pass this test before it is sent, but there may be many other stages in a retrieve operation where it would fail.

    -
    Returns
    Returns FALSE when the current state violates some aspect of the type semantics, TRUE otherwise.
    -
    Parameters
    - - - -
    msgA returned string, containing a message indicating the source of any problem.
    allFor complex constructor types (Grid, Sequence, Structure), this flag indicates whether to check the semantics of the member variables, too.
    -
    -
    -
    See also
    DDS::check_semantics
    - -

    Reimplemented in libdap::Array, libdap::Vector, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1209 of file BaseType.cc.

    - -
    -
    - -

    ◆ clear_local_data()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual void libdap::BaseType::clear_local_data ()
    -
    -inlinevirtualinherited
    -
    -

    Remove any read or set data in the private data of the variable, setting read_p() to false. Used to clear any dynamically allocated storage that holds (potentially large) data. For the simple types, this no-op version is all that's needed. Vector and some other classes define a special version and have serialize() implementations that call it to free data as soon as possible after sending it.

    -
    Note
    Added 7/5/15 jhrg
    -
    -Any specialization of this should make sure to reset the read_p property.
    - -

    Reimplemented in libdap::Sequence, libdap::Vector, libdap::D4Sequence, and libdap::D4Opaque.

    - -

    Definition at line 179 of file BaseType.h.

    - -
    -
    - -

    ◆ compute_checksum()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Str::compute_checksum (Crc32checksum)
    -
    -virtualinherited
    -
    - -

    include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum.

    -
    Parameters
    - - -
    checksumA Crc32 instance that holds the current checksum.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 168 of file Str.cc.

    - -
    -
    - -

    ◆ d4_ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::Str::d4_ops (BaseTypeb,
    int op 
    )
    -
    -virtualinherited
    -
    -
    See also
    BaseType::d4_ops(BaseType *, int)
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 317 of file Str.cc.

    - -
    -
    - -

    ◆ dataset()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::dataset () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the dataset used to create this instance.

    -

    A dataset from which the data is to be read. The meaning of this string will vary among different types of data sources. It may be the name of a data file or an identifier used to read data from a relational database.

    - -

    Definition at line 358 of file BaseType.cc.

    - -
    -
    - -

    ◆ deserialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::Str::deserialize (UnMarshallerum,
    DDSdds,
    bool reuse = false 
    )
    -
    -virtualinherited
    -
    - -

    Receive data from the net.

    -

    Receives data from the network connection identified by the source parameter. The data is put into the class data buffer according to the input dds.

    -

    This function is only used on the client side of the DODS client/server connection.

    -
    Parameters
    - - - - -
    umAn UnMarshaller that knows how to deserialize data types
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure. This would have been received from the server in an earlier transmission.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect.
    -
    -
    -
    Returns
    Always returns TRUE.
    -
    Exceptions
    - - -
    Errorwhen a problem reading from the UnMarshaller is found.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 160 of file Str.cc.

    - -
    -
    - -

    ◆ deserialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Str::deserialize (D4StreamUnMarshallerum,
    DMRdmr 
    )
    -
    -virtualinherited
    -
    -

    The DAP4 deserialization method.

    Parameters
    - - - -
    um
    dmr
    -
    -
    -
    Exceptions
    - - -
    Erroror InternalErr
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 191 of file Str.cc.

    - -
    -
    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Str::dump (ostream & strm) const
    -
    -virtualinherited
    -
    - -

    dumps information about this object

    -

    Displays the pointer value of this instance and information about this instance.

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the information to
    -
    -
    -
    Returns
    void
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 349 of file Str.cc.

    - -
    -
    - -

    ◆ element_count()

    - -
    -
    - - - - - -
    - - - - - - - - -
    int libdap::BaseType::element_count (bool leaves = false)
    -
    -virtualinherited
    -
    - -

    Count the members of constructor types.

    -

    Return a count of the total number of variables in this variable. This is used to count the number of variables held by a constructor variable - for simple type and vector variables it always returns 1.

    -

    For compound data types, there are two ways to count members. You can count the members, or you can count the simple members and add that to the count of the compound members. For example, if a Structure contains an Int32 and another Structure that itself contains two Int32 members, the element count of the top-level structure could be two (one Int32 and one Structure) or three (one Int32 by itself and two Int32's in the subsidiary Structure). Use the leaves parameter to control which kind of counting you desire.

    -
    Returns
    Returns 1 for simple types. For compound members, the count depends on the leaves argument.
    -
    Parameters
    - - -
    leavesThis parameter is only relevant if the object contains other compound data types. If FALSE, the function counts only the data variables mentioned in the object's declaration. If TRUE, it counts the simple members, and adds that to the sum of the counts for the compound members. This parameter has no effect for simple type variables.
    -
    -
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 443 of file BaseType.cc.

    - -
    -
    - -

    ◆ FQN()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::FQN () const
    -
    -virtualinherited
    -
    -

    Return the FQN for this variable. This will include the D4 Group component of the name.

    -
    Returns
    The FQN in a string
    - -

    Reimplemented in libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 332 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - -
    AttrTable & libdap::BaseType::get_attr_table ()
    -
    -virtualinherited
    -
    -

    Get this variable's AttrTable. It's generally a bad idea to return a reference to a contained object, but in this case it seems that building an interface inside BaseType is overkill.

    -

    Use the AttrTable methods to manipulate the table.

    - -

    Definition at line 582 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_parent()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::BaseType::get_parent () const
    -
    -virtualinherited
    -
    -

    Return a pointer to the Constructor or Vector which holds (contains) this variable. If this variable is at the top level, this method returns null.

    -
    Returns
    A BaseType pointer to the variable's parent.
    - -

    Definition at line 751 of file BaseType.cc.

    - -
    -
    - -

    ◆ intern_data() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::intern_data (ConstraintEvaluatoreval,
    DDSdds 
    )
    -
    -virtualinherited
    -
    -

    Similar to using serialize() and deserialize() together in one object. Data are read as for serialize and those values are stored in the objects as deserialize() does but does not write and then read data to/from a stream.

    -

    This method is defined by the various data type classes. It calls the read() abstract method. Unlike serialize(), this method does not clear the memory use to hold the data values, so the caller should make sure to delete the DDS or the variable as soon as possible.

    -
    Parameters
    - - - -
    evalUse this as the constraint expression evaluator.
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    -
    -
    - -

    Reimplemented in libdap::Sequence, libdap::D4Sequence, libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 908 of file BaseType.cc.

    - -
    -
    - -

    ◆ intern_data() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::BaseType::intern_data ()
    -
    -virtualinherited
    -
    - -

    Read data into this variable.

    -
    Parameters
    - - - -
    evalEvaluator for a constraint expression
    dmrDMR for the whole dataset
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 927 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_constructor_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_constructor_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable.

    -
    Returns
    True if the instance is a Structure, Sequence or Grid, False otherwise.
    - -

    Definition at line 412 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_in_selection ()
    -
    -virtualinherited
    -
    - -

    Is this variable part of the current selection?

    -

    Does this variable appear in either the selection part or as a function argument in the current constrain expression. If this property is set (true) then implementations of the read() method should read this variable.

    -
    Note
    This method does not check, nor does it know about the semantics of, string arguments passed to functions. Those functions might include variable names in strings; they are responsible for reading those variables. See the grid (func_grid_select()) for an example.
    -
    See also
    BaseType::read()
    - -

    Definition at line 703 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_simple_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_simple_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a numeric, string or URL type variable.

    -
    Returns
    True if the instance is a scalar numeric, String or URL variable, False otherwise. Arrays (even of simple types) return False.
    -
    See also
    is_vector_type()
    - -

    Definition at line 393 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_vector_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_vector_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a vector (i.e., array) type variable.

    -
    Returns
    True if the instance is an Array, False otherwise.
    - -

    Definition at line 402 of file BaseType.cc.

    - -
    -
    - -

    ◆ length()

    - -
    -
    - - - - - -
    - - - - - - - -
    int libdap::Str::length () const
    -
    -virtualinherited
    -
    - -

    How many elements are in this variable.

    -
    Todo:
    change the return type to int64_t
    -
    Returns
    The number of elements; 1 for scalars
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 123 of file Str.cc.

    - -
    -
    - -

    ◆ m_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::m_duplicate (const BaseTypebt)
    -
    -protectedinherited
    -
    - -

    Perform a deep copy.

    -

    Perform a deep copy. Copies the values of bt into *this. Pointers are dereferenced and their values are copied into a newly allocated instance.

    -
    Parameters
    - - -
    btThe source object.
    -
    -
    - -

    Definition at line 86 of file BaseType.cc.

    - -
    -
    - -

    ◆ name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::name () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the class instance.

    - -

    Definition at line 320 of file BaseType.cc.

    - -
    -
    - -

    ◆ ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::Str::ops (BaseTypeb,
    int op 
    )
    -
    -virtualinherited
    -
    - -

    Evaluate relational operators.

    -

    This method contains the relational operators used by the constraint expression evaluator in the DDS class. Each class that wants to be able to evaluate relational expressions must overload this function. The implementation in BaseType throws an InternalErr exception. The DAP library classes Byte, ..., Url provide specializations of this method. It is not meaningful for classes such as Array because relational expressions using Array are not supported.

    -

    The op argument refers to a table generated by bison from the constraint expression parser. Use statements like the following to correctly interpret its value:

    -
    switch (op) {
    -    case EQUAL: return i1 == i2;
    -    case NOT_EQUAL: return i1 != i2;
    -    case GREATER: return i1 > i2;
    -    case GREATER_EQL: return i1 >= i2;
    -    case LESS: return i1 < i2;
    -    case LESS_EQL: return i1 <= i2;
    -    case REGEXP: throw Error("Regular expressions are not supported for integer values");
    -    default: throw Error("Unknown operator");
    -}
    -

    This function is used by the constraint expression evaluator.

    -
    Parameters
    - - - -
    bCompare the value of this instance with b.
    opAn integer index indicating which relational operator is implied. Choose one from the following: EQUAL, NOT_EQUAL, GREATER, GREATER_EQL, LESS, LESS_EQL, and REGEXP.
    -
    -
    -
    Returns
    The boolean value of the comparison.
    -
    See also
    BaseType::d4_ops(BaseType *, int)
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 289 of file Str.cc.

    - -
    -
    - -

    ◆ print_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_dap4 (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the DAP4 XML representation for this variable. This method is used to build the DAP4 DMR response object.

    -
    Parameters
    - - - -
    xmlAn XMLWriter that will do the serialization
    constrainedTrue if the response should show the variables subject to the current constraint expression.
    -
    -
    - -

    Reimplemented in libdap::Array, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 1164 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (FILE * out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1003 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (ostream & out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1054 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_val() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Str::print_val (FILE * out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtualinherited
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output stream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 270 of file Str.cc.

    - -
    -
    - -

    ◆ print_val() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Str::print_val (ostream & out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtualinherited
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output ostream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 278 of file Str.cc.

    - -
    -
    - -

    ◆ print_xml() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (FILE * out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination.
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1105 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (ostream & out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1120 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml_writer()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml_writer (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    - -

    Reimplemented in libdap::Array, libdap::D4Enum, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1134 of file BaseType.cc.

    - -
    -
    - -

    ◆ ptr_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::Url::ptr_duplicate ()
    -
    -virtual
    -
    -

    Clone this instance. Allocate a new instance and copy *this into it. This method must perform a deep copy.

    @note This method should \e not copy data values, but must copy all
    -other fields in the object.
    -
    Returns
    A newly allocated copy of this.
    - -

    Reimplemented from libdap::Str.

    - -

    Definition at line 69 of file Url.cc.

    - -
    -
    - -

    ◆ read()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read ()
    -
    -virtualinherited
    -
    - -

    Read data into a local buffer.

    -

    This method should be implemented for each of the data type classes (Byte, ..., Grid) when using the DAP class library to build a server. This method is only for DAP servers. The library provides a default definition here which throws an InternalErr exception unless the read_p property has been set. In that case it returns false, indicating that all the data have been read. The latter case can happen when building a constant value that needs to be passed to a function. The variable/constant is loaded with a value when it is created.

    -

    When implementing a new DAP server, the Byte, ..., Grid data type classes are usually specialized. In each of those specializations read() should be defined to read values from the data source and store them in the object's local buffer. The read() method is called by other methods in this library. When writing read(), follow these rules:

    -
      -
    • -read() should throw Error if it encounters an error. The message should be verbose enough to be understood by someone running a client on a different machine.
    • -
    • -The value(s) should be read if and only if either send_p() or is_in_selection() return true. If neither of these return true, the value(s) should not be read. This is important when writing read() for a Constructor type such as Grid where a client may ask for only the map vectors (and thus reading the much larger Array part is not needed).
    • -
    • -For each specialization of read(), the method should first test the value of the read_p property (using the read_p() method) and read values only if the value of read_p() is false. Once the read() method reads data and stores it in the instance, it must set the value of the read_p property to true using set_read_p(). If your read() methods fail to do this data may not serialize correctly.
    • -
    • -The Array::read() and Grid::read() methods should take into account any restrictions on Array sizes.
    • -
    • -If you are writing Sequence::read(), be sure to check the documentation for Sequence::read_row() and Sequence::serialize() so you understand how Sequence::read() is being called.
    • -
    • -

      For Sequence::read(), your specialization must correctly manage the unsent_data property and row count in addition to the read_p property (handle the read_p property as describe above). For a Sequence to serialize correctly, once all data from the Sequence has been read, unsent_data property must be set to false (use Sequence::set_unsent_data()). Also, at that time the row number counter must be reset (use Sequence::reset_row_counter()). Typically the correct time to set unsent_data to false and reset the row counter is the time when Sequence::read() return false indicating that all the data for the Sequence have been read. Failure to handle these tasks will break serialization of nested Sequences. Note that when Sequence::read() returns with a result of true (indicating there is more data to send, the value of the unsent_data property should be true.

      -

      Also, if you server must handle nested sequences, be sure to read about subclassing set_read_p().

      -
    • -
    -
    Todo:
    Modify the D4 serialize code so that it supports the true/false behavior of read() for arrays.
    -
    Todo:
    Modify all of the stock handlers so they conform to this!
    -
    Returns
    False means more data remains to be read, True indicates that no more data need to be read. For Sequence and D4Sequence, this method will generally read one instance of the Sequence; for other types it will generally read the entire variable modulo any limitations due to a constraint. However, the library should be written so that read can return less than all of the data for a variable - serialize() would then call the function until it returns True.
    -
    See also
    BaseType
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 899 of file BaseType.cc.

    - -
    -
    - -

    ◆ read_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read_p ()
    -
    -virtualinherited
    -
    - -

    Has this variable been read?

    -

    Returns true if the value(s) for this variable have been read from the data source, otherwise returns false. This method is used to determine when values need to be read using the read() method. When read_p() returns true, this library assumes that buf2val() (and other methods such as get_vec()) can be used to access the value(s) of a variable.

    -
    Returns
    True if the variable's value(s) have been read, false otherwise.
    - -

    Definition at line 480 of file BaseType.cc.

    - -
    -
    - -

    ◆ send_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::send_p ()
    -
    -virtualinherited
    -
    - -

    Should this variable be sent?

    -

    Returns the state of the send_p property. If true, this variable should be sent to the client, if false, it should not. If no constraint expression (CE) has been evaluated, this property is true for all variables in a data source (i.e., for all the variables listed in a DDS). If a CE has been evaluated, this property is true only for those variables listed in the projection part of the CE.

    -
    Returns
    True if the variable should be sent to the client, false otherwise.
    - -

    Definition at line 554 of file BaseType.cc.

    - -
    -
    - -

    ◆ serialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::Str::serialize (ConstraintEvaluatoreval,
    DDSdds,
    Marshallerm,
    bool ce_eval = true 
    )
    -
    -virtualinherited
    -
    - -

    Move data to the net, then remove them from the object.

    -

    Sends the data from the indicated (local) dataset through the connection identified by the Marshaller parameter. If the data is not already incorporated into the DDS object, read the data from the dataset. Once the data are sent (written to the Marshaller), they are deleted from the object and the object state is reset so that they will be read again if the read() method is called.

    -

    This function is only used on the server side of the client/server connection, and is generally only called from the ResponseBuilder functions. It has no BaseType implementation; each datatype child class supplies its own implementation.

    @param eval Use this as the constraint expression evaluator.
    -
    Parameters
    - - - - -
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure.
    mA marshaller used to serialize data types
    ce_evalA boolean value indicating whether to evaluate the DODS constraint expression that may accompany this dataset. The constraint expression is stored in the dds.
    -
    -
    -
    Returns
    This method always returns true. Older versions used the return value to signal success or failure.
    -
    Note
    We changed the default behavior of this method so that it calls BaseType::clear_local_data() once the values are sent. This, combined with the behavior that read() is called by this method just before data are sent, means that data for any given variable remain in memory for the shortest time possible. Furthermore, since variables are serialized one at a time, no more than one variable's data will be in memory at any given time when using the default behavior. Some code - code that uses intern_data() or server functions - might alter this default behavior. Only Array (i.e. Vector), Sequence, D4Sequence and D4Opaque types actually hold data in dynamically allocated memory, so sonly those types have the new/changed behavior. This change was made on 7/5/15.
    -
    Exceptions
    - - - -
    InternalErr.
    Error.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 135 of file Str.cc.

    - -
    -
    - -

    ◆ serialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Str::serialize (D4StreamMarshallerm,
    DMRdmr,
    bool filter = false 
    )
    -
    -virtualinherited
    -
    - -

    Serialize an Int8.

    -
    Parameters
    - - - - - -
    m
    dmrUnused
    evalUnused
    filterUnused
    -
    -
    -
    Exceptions
    - - -
    Erroris thrown if the value needs to be read and that operation fails.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 182 of file Str.cc.

    - -
    -
    - -

    ◆ set_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_attr_table (const AttrTableat)
    -
    -virtualinherited
    -
    -

    Set this variable's attribute table.

    Parameters
    - - -
    atSource of the attributes.
    -
    -
    - -

    Definition at line 590 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_in_selection (bool state)
    -
    -virtualinherited
    -
    -

    Set the in_selection property to state. This property indicates that the variable is used as a parameter to a constraint expression function or that it appears as an argument in a selection sub-expression. If set (true), implementations of the BaseType::read() method should read this variable.

    -
    Parameters
    - - -
    stateSet the in_selection property to this state.
    -
    -
    -
    See also
    BaseType::read()
    -
    -BaseType::is_in_selection() for more information.
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 718 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_length()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::BaseType::set_length (int )
    -
    -inlinevirtualinherited
    -
    - -

    Set the number of elements for this variable.

    -
    Todo:
    change param type to int64_t
    -
    Parameters
    - - -
    lThe number of elements
    -
    -
    - -

    Reimplemented in libdap::D4Sequence, and libdap::Vector.

    - -

    Definition at line 214 of file BaseType.h.

    - -
    -
    - -

    ◆ set_name()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_name (const string & n)
    -
    -virtualinherited
    -
    - -

    Sets the name of the class instance.

    - -

    Reimplemented in libdap::Vector.

    - -

    Definition at line 344 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_parent()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_parent (BaseTypeparent)
    -
    -virtualinherited
    -
    -

    Set the parent property for this variable.

    -
    Note
    Added ability to set parent to null. 10/19/12 jhrg
    -
    Parameters
    - - -
    parentPointer to the Constructor of Vector parent variable or null if the variable has no parent (if it is at the top-level of a DAP2/3 DDS).
    -
    -
    -
    Exceptions
    - - -
    InternalErrthrown if called with anything other than a Constructor, Vector or Null.
    -
    -
    - -

    Definition at line 733 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_read_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_read_p (bool state)
    -
    -virtualinherited
    -
    - -

    Sets the value of the read_p property.

    -

    Sets the value of the read_p property. This indicates that the value(s) of this variable has/have been read. An implementation of the read() method should use this to set the read_p property to true.

    -
    Note
    If the is_synthesized property is true, this method will not alter the is_read property. If you need that behavior, specialize the method in your subclasses if the various types.
    -
    -For most of the types the default implementation of this method is fine. However, if you're building a server which must handle data represented using nested sequences, then you may need to provide a specialization of Sequence::set_read_p(). By default Sequence::set_read_p() recursively sets the read_p property for all child variables to state. For servers where one Sequence reads an outer set of values and another reads an inner set, this is cumbersome. In such a case, it is easier to specialize Sequence::set_read_p() so that it does not recursively set the read_p property for the inner Sequence. Be sure to see the documentation for the read() method!
    -
    Todo:
    Look at making synthesized variables easier to implement and at making them more integrated into the overall CE evaluation process. Maybe the code that computes the synthesized var's value should be in the that variable's read() method? This might provide a way to get rid of the awkward 'projection functions' by replacing them with real children of BaseType. It would also provide a way to clean up the way the synthesized_p prop intrudes on the read_p prop.
    -
    See also
    BaseType::read()
    -
    Parameters
    - - -
    stateSet the read_p property to this state.
    -
    -
    - -

    Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 516 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_send_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_send_p (bool state)
    -
    -virtualinherited
    -
    -

    Sets the value of the send_p flag. This function is meant to be called from within the constraint evaluator of other code which determines that this variable should be returned to the client. Data are ready to be sent when both the d_is_send and d_is_read flags are set to TRUE.

    -
    Parameters
    - - -
    stateThe logical state to set the send_p flag.
    -
    -
    - -

    Reimplemented in libdap::Vector, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 568 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_synthesized_p (bool state)
    -
    -virtualinherited
    -
    -

    Set the synthesized flag. Before setting this flag be sure to set the read_p() state. Once this flag is set you cannot alter the state of the read_p flag!

    -
    See also
    synthesized_p()
    - -

    Definition at line 463 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_type()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_type (const Typet)
    -
    -virtualinherited
    -
    - -

    Sets the type of the class instance.

    - -

    Definition at line 372 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_value()

    - -
    -
    - - - - - -
    - - - - - - - - -
    bool libdap::Str::set_value (const string & value)
    -
    -virtualinherited
    -
    -

    Set the value of this instance.

    Parameters
    - - -
    valueThe value
    -
    -
    -
    Returns
    Always returns true; the return type of bool is for compatibility with the Passive* subclasses written by HAO.
    - -

    Definition at line 253 of file Str.cc.

    - -
    -
    - -

    ◆ synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::synthesized_p ()
    -
    -virtualinherited
    -
    -

    Returns true if the variable is a synthesized variable. A synthesized variable is one that is added to the dataset by the server (usually with a `projection function'.

    - -

    Definition at line 452 of file BaseType.cc.

    - -
    -
    - -

    ◆ toString()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::toString ()
    -
    -virtualinherited
    -
    -

    Write out the object's internal fields in a string. To be used for debugging when regular inspection w/ddd or gdb isn't enough.

    -
    Returns
    A string which shows the object's internal stuff.
    - -

    Reimplemented in libdap::Sequence.

    - -

    Definition at line 184 of file BaseType.cc.

    - -
    -
    - -

    ◆ transfer_attributes()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::transfer_attributes (AttrTableat_container)
    -
    -virtualinherited
    -
    -

    Transfer attributes from a DAS object into this variable. Because of the rough history of the DAS object and the way that various server code built the DAS, this is necessarily a heuristic process. The intent is that this method will be overridden by handlers that need to look for certain patterns in the DAS (e.g., hdf4's odd variable_dim_n; where n = 0, 1, 2, ...) attribute containers.

    -

    There should be a one-to-one mapping between variables and attribute containers. However, in some cases one variable has attributes spread across several top level containers and in some cases one container is used by several variables

    -
    Note
    This method is technically unnecessary because a server (or client) can easily add attributes directly using the DDS::get_attr_table or BaseType::get_attr_table methods and then poke values in using any of the methods AttrTable provides. This method exists to ease the transition to DDS objects which contain attribute information for the existing servers (Since they all make DAS objects separately from the DDS). They could be modified to use the same AttrTable methods but operate on the AttrTable instances in a DDS/BaseType instead of those in a DAS.
    -
    Parameters
    - - -
    at_containerTransfer attributes from this container.
    -
    -
    -
    Returns
    void
    - -

    Reimplemented in libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 644 of file BaseType.cc.

    - -
    -
    - -

    ◆ transform_to_dap2()

    - -
    -
    - - - - - -
    - - - - - - - - -
    std::vector< BaseType * > * libdap::BaseType::transform_to_dap2 (AttrTableparent_attr_table)
    -
    -virtualinherited
    -
    - -

    DAP4 to DAP2 transform.

    -

    For the current BaseType, return a DAP2 'copy' of the variable.

    -
    Note
    For most DAP4 types, in this implementation of DAP2 the corresponding DAP4 type is the same. These types have a different representations in DAP2 and DAP4: Sequences (which are D4Sequences in the DAP4 implementation),
      -
    • Grids (which are semantically subsumed by coverages in DAP4)
    • -
    • Arrays (which use shared dimensions in DAP4)
    • -
    -
    -

    Additionally DAP4 adds the following types:

      -
    • UInt8, Int8, and Char which map to Byte in DAP2.
    • -
    • Int64, Unit64 which have no natural representation in DAP2.
    • -
    • Opaque Possible Byte stuff[] plus metadata?
    • -
    • Enum's can be represented as Int32.
    • -
    • Groups, with the exception of the root group "disappear" into the names of their member variables. Specifically the Group name is add as a prefix followed by a "/" separator to the names of all of the Group's member groups variables.
    • -
    -
    Parameters
    - - -
    TheAttrTable pointer parent_attr_table is used by Groups, which disappear from the DAP2 representation. Their children are returned in the the BAseType vector their attributes are added to parent_attr_table;
    -
    -
    -
    Returns
    A pointer to a vector of BaseType pointers (right?). In most cases this vector will contain a single pointer but DAP4 types 'disappear' such as Group will return all of their member variables in the vector. DAP4 types with no representation in DAP2 (ex: UInt64) the will return a NULL pointer and so this must be tested!
    - -

    Reimplemented in libdap::Array, libdap::D4Enum, libdap::D4Group, libdap::D4Opaque, libdap::Byte, libdap::Structure, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 259 of file BaseType.cc.

    - -
    -
    - -

    ◆ transform_to_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::transform_to_dap4 (D4Grouproot,
    Constructorcontainer 
    )
    -
    -virtualinherited
    -
    - -

    DAP2 to DAP4 transform.

    -

    For the current BaseType, return a DAP4 'copy' of the variable.

    -
    Note
    For most DAP2 types, in this implementation of DAP4 the corresponding DAP4 type is the same. The different types are Sequences (which are D4Sequences in the DAP4 implementation), Grids (which are coverages) and Arrays (which use shared dimensions).
    -
    Parameters
    - - - -
    rootThe root group that should hold this new variable. Add Group-level stuff here (e.g., D4Dimensions).
    containerAdd the new variable to this container.
    -
    -
    -
    Returns
    A pointer to the transformed variable
    - -

    Reimplemented in libdap::Sequence, libdap::Array, libdap::Grid, libdap::Structure, and libdap::Constructor.

    - -

    Definition at line 216 of file BaseType.cc.

    - -
    -
    - -

    ◆ type()

    - -
    -
    - - - - - -
    - - - - - - - -
    Type libdap::BaseType::type () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance.

    - -

    Definition at line 365 of file BaseType.cc.

    - -
    -
    - -

    ◆ type_name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::type_name () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance as a string.

    - -

    Definition at line 379 of file BaseType.cc.

    - -
    -
    - -

    ◆ val2buf()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    unsigned int libdap::Str::val2buf (void * val,
    bool reuse = false 
    )
    -
    -virtualinherited
    -
    -

    Store the value referenced by val in this object. Even though the type of val is void*, this method assumes the type is string*. Note that the value is copied so the caller if free to throw away/reuse the actual parameter once this call has returned.

    -
    Parameters
    - - - -
    valA pointer to a C++ string object.
    reuseNot used by this version of the method.
    -
    -
    -
    Exceptions
    - - -
    IntenalErrif val is null.
    -
    -
    -
    Returns
    The width of the pointer.
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 234 of file Str.cc.

    - -
    -
    - -

    ◆ value()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::Str::value () const
    -
    -virtualinherited
    -
    -

    Get the value of this instance.

    Returns
    The value.
    - -

    Definition at line 264 of file Str.cc.

    - -
    -
    - -

    ◆ var() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::BaseType::var (const string & name = "",
    bool exact_match = true,
    btp_stack * s = 0 
    )
    -
    -virtualinherited
    -
    - -

    Returns a pointer to a member of a constructor class.

    -

    Returns a pointer to the contained variable in a composite class. The composite classes are those made up of aggregated simple data types. Array, Grid, and Structure are composite types, while Int and Float are simple types. This function is only used by composite classes. The BaseType implementation always returns null.

    -

    Several of the subclasses provide alternate access methods that make sense for that particular data type. For example, the Array class defines a *var(int i) method that returns the ith entry in the Array data, and the Structure provides a *var(Vars_iter) function using a pseudo-index to access the different members of the structure.

    -
    Parameters
    - - - - -
    nameThe name of the class member. Defaults to ""
    exact_matchTrue if only interested in variables whose full names match n exactly. If false, returns the first variable whose name matches name. For example, if name is x and point.x is a variable, then var("x", false) would return a BaseType pointer to point.x. If exact_match was true then name would need to be "point.x" for var to return that pointer. This feature simplifies constraint expressions for datasets which have complex, nested, constructor variables. Defaults to true.
    sRecord the path to name. Defaults to null, in which case it is not used.
    -
    -
    -
    Returns
    A pointer to the member named in the n argument. If no name is given, the function returns the first (only) variable. For example, an Array has only one variable, while a Structure can have many.
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 758 of file BaseType.cc.

    - -
    -
    - -

    ◆ var() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::BaseType::var (const string & name,
    btp_stack & s 
    )
    -
    -virtualinherited
    -
    -

    This version of var(...) searches for name and returns a pointer to the BaseType object if found. It uses the same search algorithm as BaseType::var(const string &, bool, btp_stack *) when exact_match is false. In addition to returning a pointer to the variable, it pushes onto s a BaseType pointer to each constructor type that ultimately contains name.

    -
    Note
    The BaseType implementation always returns null. There are no default values for the parameters. If var() is called w/o any params, the three parameter version will be used.
    -
    Deprecated:
    This method is deprecated because it tries first to use exact_match and, if that fails, then tries leaf_match. It's better to use the alternate form of var(...) and specify exactly what you'd like to do.
    -
    Returns
    A pointer to the named variable.
    - -

    Reimplemented in libdap::Vector, and libdap::Constructor.

    - -

    Definition at line 780 of file BaseType.cc.

    - -
    -
    - -

    ◆ width()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::Str::width (bool constrained = false) const
    -
    -virtualinherited
    -
    - -

    How many bytes does this variable use Return the number of bytes of storage this variable uses. For scalar types, this is pretty simple (an int32 uses 4 bytes, etc.). For arrays and Constructors, it is a bit more complex. Note that a scalar String variable uses sizeof(String*) bytes, not the length of the string value. The width() of a String array returns the number of elements in the array times sizeof(String*).

    -
    Parameters
    - - -
    constrainedShould the current constraint be taken into account?
    -
    -
    -
    Returns
    Bytes of storage
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 129 of file Str.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1Url.js b/html/classlibdap_1_1Url.js deleted file mode 100644 index 3e24063ae..000000000 --- a/html/classlibdap_1_1Url.js +++ /dev/null @@ -1,78 +0,0 @@ -var classlibdap_1_1Url = -[ - [ "btp_stack", "classlibdap_1_1Url.html#ae9c6e71855b90a0e552713011c9ab81f", null ], - [ "Url", "classlibdap_1_1Url.html#a9fb1b73af8ce02df5081945250f64eb8", null ], - [ "Url", "classlibdap_1_1Url.html#a210226151d8473808acbeba12122f1c2", null ], - [ "Url", "classlibdap_1_1Url.html#aad2be543f502c1e95b2b055c6cd80e93", null ], - [ "Url", "classlibdap_1_1Url.html#a85d593f6bb6cd3d5c6ddacbfa61ad930", null ], - [ "~Url", "classlibdap_1_1Url.html#a4ad513e5855df24483f197fb19c88629", null ], - [ "add_var", "classlibdap_1_1Url.html#adca3c2621c4a509537c18362005d7f7f", null ], - [ "add_var_nocopy", "classlibdap_1_1Url.html#aa1192360cea4dc516c822cd3e13dc723", null ], - [ "attributes", "classlibdap_1_1Url.html#a97452f06d2188eb838399a709246b5e9", null ], - [ "buf2val", "classlibdap_1_1Url.html#aa63cf0376fe71ceb030b48e7fdbad863", null ], - [ "check_semantics", "classlibdap_1_1Url.html#aec503abec2fd3090e7738c0a575491f8", null ], - [ "clear_local_data", "classlibdap_1_1Url.html#aaddb97a4efbe035f41deaf03c6e8683f", null ], - [ "compute_checksum", "classlibdap_1_1Url.html#ae98348772288b417561f39b445f48c9e", null ], - [ "d4_ops", "classlibdap_1_1Url.html#a051efecca32b2679bd0b1700453db617", null ], - [ "dataset", "classlibdap_1_1Url.html#a47521ce321a17e6ce217870cb6a1a7aa", null ], - [ "deserialize", "classlibdap_1_1Url.html#a2bafe2f1851b3a4cac6089b0e2282010", null ], - [ "deserialize", "classlibdap_1_1Url.html#afdeab29d40e99baa3d0def2f8f6d8b2e", null ], - [ "dump", "classlibdap_1_1Url.html#a9bae029c10a3824cd95d7e3fb2c11911", null ], - [ "element_count", "classlibdap_1_1Url.html#a5c2235737737b482bfa7536b8aeab810", null ], - [ "FQN", "classlibdap_1_1Url.html#a977cb954cc8f0d914d6f66ea0f48a9e3", null ], - [ "get_attr_table", "classlibdap_1_1Url.html#a1fcd9537c67e3bf88964b2656ff5bac1", null ], - [ "get_parent", "classlibdap_1_1Url.html#a3459cdaa239c33ce111ef360d8dc3017", null ], - [ "intern_data", "classlibdap_1_1Url.html#a722d33783aa0272d339b0301a4f77e59", null ], - [ "intern_data", "classlibdap_1_1Url.html#a1956e6ea90a745516f5372c859173433", null ], - [ "is_constructor_type", "classlibdap_1_1Url.html#a8b8490e0047c6da52945699a132008ea", null ], - [ "is_dap4", "classlibdap_1_1Url.html#a7f6835cb5e5589ab5dad3fb4813d3bea", null ], - [ "is_in_selection", "classlibdap_1_1Url.html#ae302ab2ec26e9fc5b575bf5d3d09aa5c", null ], - [ "is_simple_type", "classlibdap_1_1Url.html#aae57e5b270b3a015d40c8db10b9b5549", null ], - [ "is_vector_type", "classlibdap_1_1Url.html#a7107c76dbcab71015141142383b6d022", null ], - [ "length", "classlibdap_1_1Url.html#a6159e681dd78ac9d7660df1a734fd9d4", null ], - [ "m_duplicate", "classlibdap_1_1Url.html#a0c55b826c8c5dfe7a454dc670e859a41", null ], - [ "name", "classlibdap_1_1Url.html#a24c5d67823b3cff7f4245a993072a142", null ], - [ "ops", "classlibdap_1_1Url.html#a5b74994fb52ceb3248c558015c4520a5", null ], - [ "print_dap4", "classlibdap_1_1Url.html#afcddbe441380b95c894510c02980b163", null ], - [ "print_decl", "classlibdap_1_1Url.html#a2d799fad93255d7f2b803562ae7a5784", null ], - [ "print_decl", "classlibdap_1_1Url.html#afd744b0ddeb04e7b173c9e83423ec572", null ], - [ "print_val", "classlibdap_1_1Url.html#a3fd0df896926273b491fa8b3dc040b20", null ], - [ "print_val", "classlibdap_1_1Url.html#a7984e46de9b21ef554b156dec40cc559", null ], - [ "print_xml", "classlibdap_1_1Url.html#a825820edee179550cfde3dfd4d274f2a", null ], - [ "print_xml", "classlibdap_1_1Url.html#a8bd2c7682edd48c64b210bdf247bdef7", null ], - [ "print_xml_writer", "classlibdap_1_1Url.html#a11554ff931528b243e9af8173d205b44", null ], - [ "ptr_duplicate", "classlibdap_1_1Url.html#a1064f1f9a75dba713a8e676a278f291c", null ], - [ "read", "classlibdap_1_1Url.html#a1da003c53f2e663223f603ab3fbd7c8e", null ], - [ "read_p", "classlibdap_1_1Url.html#a38ff819a432217c55db2e9071928d20c", null ], - [ "send_p", "classlibdap_1_1Url.html#a980c0013817836aa77ef74aeec7fb192", null ], - [ "serialize", "classlibdap_1_1Url.html#a1f71320548c6cf29b85d66de5998144d", null ], - [ "serialize", "classlibdap_1_1Url.html#af341f5722961ea40812d1fde478d1f79", null ], - [ "set_attr_table", "classlibdap_1_1Url.html#a572a1d76a75981abac83a4241e90c0fa", null ], - [ "set_attributes", "classlibdap_1_1Url.html#ad4dda4cf43dca838d3de183b8e01cd09", null ], - [ "set_attributes_nocopy", "classlibdap_1_1Url.html#afd0e5f87d19020f560d5c1ff8dd4d6a3", null ], - [ "set_in_selection", "classlibdap_1_1Url.html#a2bc036248cdaf1affac464170f32ad30", null ], - [ "set_is_dap4", "classlibdap_1_1Url.html#abca9ddaa9a1ada8447cbe7193e8e288a", null ], - [ "set_length", "classlibdap_1_1Url.html#a4fe343c1eeb6fb1d61ab030433651d90", null ], - [ "set_name", "classlibdap_1_1Url.html#a86504564f45a3e6748c6f1cc0ff4e9fa", null ], - [ "set_parent", "classlibdap_1_1Url.html#a5b6a39f6ce6594fa74f3fc899ac9a966", null ], - [ "set_read_p", "classlibdap_1_1Url.html#a4533905a450d2a7af32e7d5acd557676", null ], - [ "set_send_p", "classlibdap_1_1Url.html#aba7b27635c95b74536de18393133628e", null ], - [ "set_synthesized_p", "classlibdap_1_1Url.html#a595cb4059cff24f801a1b6da79bd2f9e", null ], - [ "set_type", "classlibdap_1_1Url.html#af74f8d1ef57c9fcca46f620f75d175a3", null ], - [ "set_value", "classlibdap_1_1Url.html#ac4083a612e46a9ef2d1cddc2d40a955f", null ], - [ "synthesized_p", "classlibdap_1_1Url.html#ae64e677da27249473cdba0b60cdbb90a", null ], - [ "toString", "classlibdap_1_1Url.html#a701eb3361f5b5628329ece019cd34519", null ], - [ "transfer_attributes", "classlibdap_1_1Url.html#add8e836c622042a339152a6c31e5bdfb", null ], - [ "transform_to_dap2", "classlibdap_1_1Url.html#affec8a11e9cc035d4b1e8fb9a87b2072", null ], - [ "transform_to_dap4", "classlibdap_1_1Url.html#adb03e2e1e40c3c888577c4666831a949", null ], - [ "type", "classlibdap_1_1Url.html#af8e803b20a7a7dc5f2ef351d7fac4a56", null ], - [ "type_name", "classlibdap_1_1Url.html#a18a42c8ec35cb5b15cd651a4152f8a2c", null ], - [ "val2buf", "classlibdap_1_1Url.html#add396308f45a14355b60c411ed33bf7a", null ], - [ "value", "classlibdap_1_1Url.html#a6a184f229c17879291dba8f7477db677", null ], - [ "var", "classlibdap_1_1Url.html#a4dc4fac1bb6083f6db645f37bfd59b85", null ], - [ "var", "classlibdap_1_1Url.html#adecfc442b5927c79933c7f71cfe03fd2", null ], - [ "width", "classlibdap_1_1Url.html#a636ebae6c75fb6dc5d929dc6db6f9558", null ], - [ "d_buf", "classlibdap_1_1Url.html#ae743e901dfa00288dace899faa78aafc", null ], - [ "d_in_selection", "classlibdap_1_1Url.html#a949a89714965d7afdcd1e3edc8b7f0d4", null ], - [ "d_is_synthesized", "classlibdap_1_1Url.html#a629e97e8eb7d285b54c9af8c1ec9a29a", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1Url__inherit__graph.map b/html/classlibdap_1_1Url__inherit__graph.map deleted file mode 100644 index 547e37ea6..000000000 --- a/html/classlibdap_1_1Url__inherit__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/html/classlibdap_1_1Url__inherit__graph.md5 b/html/classlibdap_1_1Url__inherit__graph.md5 deleted file mode 100644 index 3dde13276..000000000 --- a/html/classlibdap_1_1Url__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -ed3ea935bfbcde81bb5775d9aeab2ab7 \ No newline at end of file diff --git a/html/classlibdap_1_1Url__inherit__graph.png b/html/classlibdap_1_1Url__inherit__graph.png deleted file mode 100644 index 20be0a556a06c81fbeb37b3017d93ec3aaeb5634..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68952 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 - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::Vector Member List
    -
    -
    - -

    This is the complete list of members for libdap::Vector, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    add_var(BaseType *v, Part p=nil)libdap::Vectorvirtual
    add_var_nocopy(BaseType *v, Part p=nil) (defined in libdap::Vector)libdap::Vectorvirtual
    attributes()libdap::BaseTypevirtual
    BaseType(const string &n, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const string &n, const string &d, const Type &t, bool is_dap4=false)libdap::BaseType
    BaseType(const BaseType &copy_from)libdap::BaseType
    btp_stack typedef (defined in libdap::BaseType)libdap::BaseType
    buf2val(void **val)libdap::Vectorvirtual
    check_semantics(string &msg, bool all=false)libdap::Vectorvirtual
    clear_local_data()libdap::Vectorvirtual
    compute_checksum(Crc32 &checksum)libdap::Vectorvirtual
    d4_ops(BaseType *b, int op)libdap::BaseTypevirtual
    d_in_selection (defined in libdap::BaseType)libdap::BaseTypeprotected
    d_is_synthesized (defined in libdap::BaseType)libdap::BaseTypeprotected
    dataset() constlibdap::BaseTypevirtual
    deserialize(UnMarshaller &um, DDS *dds, bool reuse=false)libdap::Vectorvirtual
    deserialize(D4StreamUnMarshaller &um, DMR &dmr)libdap::Vectorvirtual
    dump(ostream &strm) constlibdap::Vectorvirtual
    element_count(bool leaves)libdap::Vectorvirtual
    FQN() constlibdap::BaseTypevirtual
    get_attr_table()libdap::BaseTypevirtual
    get_buf()libdap::Vectorinline
    get_compound_buf()libdap::Vectorinline
    get_parent() constlibdap::BaseTypevirtual
    get_str()libdap::Vectorinline
    get_value_capacity() constlibdap::Vectorvirtual
    intern_data(ConstraintEvaluator &eval, DDS &dds)libdap::Vectorvirtual
    intern_data()libdap::Vectorvirtual
    is_constructor_type() constlibdap::BaseTypevirtual
    is_dap4() const (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    is_in_selection()libdap::BaseTypevirtual
    is_simple_type() constlibdap::BaseTypevirtual
    is_vector_type() constlibdap::BaseTypevirtual
    length() constlibdap::Vectorvirtual
    m_create_cardinal_data_buffer_for_type(unsigned int numEltsOfType)libdap::Vectorprotected
    m_delete_cardinal_data_buffer()libdap::Vectorprotected
    m_duplicate(const Vector &v) (defined in libdap::Vector)libdap::Vectorprotected
    libdap::BaseType::m_duplicate(const BaseType &bt)libdap::BaseTypeprotected
    m_is_cardinal_type() constlibdap::Vectorprotected
    m_set_cardinal_values_internal(const CardType *fromArray, int numElts)libdap::Vectorprotected
    MarshallerTest (defined in libdap::Vector)libdap::Vectorfriend
    name() constlibdap::BaseTypevirtual
    operator=(const Vector &rhs) (defined in libdap::Vector)libdap::Vector
    operator=(const BaseType &rhs) (defined in libdap::BaseType)libdap::BaseType
    ops(BaseType *b, int op)libdap::BaseTypevirtual
    print_dap4(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
    print_decl(FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_decl(ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)libdap::BaseTypevirtual
    print_val(FILE *out, string space="", bool print_decl_p=true)libdap::BaseTypevirtual
    print_val(ostream &out, string space="", bool print_decl_p=true)=0libdap::BaseTypepure virtual
    print_xml(FILE *out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml(ostream &out, string space=" ", bool constrained=false)libdap::BaseTypevirtual
    print_xml_writer(XMLWriter &xml, bool constrained=false)libdap::BaseTypevirtual
    prototype() const (defined in libdap::Vector)libdap::Vectorinlinevirtual
    ptr_duplicate()=0libdap::Vectorpure virtual
    read()libdap::BaseTypevirtual
    read_p()libdap::BaseTypevirtual
    reserve_value_capacity(unsigned int numElements)libdap::Vectorvirtual
    reserve_value_capacity()libdap::Vectorvirtual
    send_p()libdap::BaseTypevirtual
    serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)libdap::Vectorvirtual
    serialize(D4StreamMarshaller &m, DMR &dmr, bool filter=false)libdap::Vectorvirtual
    set_attr_table(const AttrTable &at)libdap::BaseTypevirtual
    set_attributes(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_attributes_nocopy(D4Attributes *) (defined in libdap::BaseType)libdap::BaseTypevirtual
    set_in_selection(bool state)libdap::BaseTypevirtual
    set_is_dap4(const bool v) (defined in libdap::BaseType)libdap::BaseTypeinlinevirtual
    set_length(int l)libdap::Vectorvirtual
    set_name(const std::string &name)libdap::Vectorvirtual
    set_parent(BaseType *parent)libdap::BaseTypevirtual
    set_read_p(bool state)libdap::Vectorvirtual
    set_send_p(bool state)libdap::Vectorvirtual
    set_synthesized_p(bool state)libdap::BaseTypevirtual
    set_type(const Type &t)libdap::BaseTypevirtual
    set_value(dods_byte *val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
    set_value(dods_int8 *val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
    set_value(dods_int16 *val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
    set_value(dods_uint16 *val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
    set_value(dods_int32 *val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
    set_value(dods_uint32 *val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
    set_value(dods_int64 *val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
    set_value(dods_uint64 *val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
    set_value(dods_float32 *val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
    set_value(dods_float64 *val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
    set_value(string *val, int sz)libdap::Vectorvirtual
    set_value(vector< dods_byte > &val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
    set_value(vector< dods_int8 > &val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
    set_value(vector< dods_int16 > &val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
    set_value(vector< dods_uint16 > &val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
    set_value(vector< dods_int32 > &val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
    set_value(vector< dods_uint32 > &val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
    set_value(vector< dods_int64 > &val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
    set_value(vector< dods_uint64 > &val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
    set_value(vector< dods_float32 > &val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
    set_value(vector< dods_float64 > &val, int sz) (defined in libdap::Vector)libdap::Vectorvirtual
    set_value(vector< string > &val, int sz)libdap::Vectorvirtual
    set_value_slice_from_row_major_vector(const Vector &rowMajorData, unsigned int startElement)libdap::Vectorvirtual
    set_vec(unsigned int i, BaseType *val)libdap::Vector
    set_vec_nocopy(unsigned int i, BaseType *val)libdap::Vector
    synthesized_p()libdap::BaseTypevirtual
    toString()libdap::BaseTypevirtual
    transfer_attributes(AttrTable *at)libdap::BaseTypevirtual
    transform_to_dap2(AttrTable *parent_attr_table)libdap::BaseTypevirtual
    transform_to_dap4(D4Group *root, Constructor *container)libdap::BaseTypevirtual
    type() constlibdap::BaseTypevirtual
    type_name() constlibdap::BaseTypevirtual
    val2buf(void *val, bool reuse=false)libdap::Vectorvirtual
    value(dods_byte *b) const (defined in libdap::Vector)libdap::Vectorvirtual
    value(dods_int8 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
    value(dods_int16 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
    value(dods_uint16 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
    value(dods_int32 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
    value(dods_uint32 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
    value(dods_int64 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
    value(dods_uint64 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
    value(dods_float32 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
    value(dods_float64 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
    value(vector< string > &b) constlibdap::Vectorvirtual
    value(vector< unsigned int > *indices, dods_byte *b) const (defined in libdap::Vector)libdap::Vectorvirtual
    value(vector< unsigned int > *indices, dods_int8 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
    value(vector< unsigned int > *indices, dods_int16 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
    value(vector< unsigned int > *indices, dods_uint16 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
    value(vector< unsigned int > *indices, dods_int32 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
    value(vector< unsigned int > *indices, dods_uint32 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
    value(vector< unsigned int > *indices, dods_int64 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
    value(vector< unsigned int > *indices, dods_uint64 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
    value(vector< unsigned int > *indices, dods_float32 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
    value(vector< unsigned int > *indices, dods_float64 *b) const (defined in libdap::Vector)libdap::Vectorvirtual
    value(vector< unsigned int > *index, vector< string > &b) constlibdap::Vectorvirtual
    value()libdap::Vectorvirtual
    var(const string &name="", bool exact_match=true, btp_stack *s=0)libdap::Vectorvirtual
    var(const string &name, btp_stack &s)libdap::Vectorvirtual
    var(unsigned int i)libdap::Vectorvirtual
    vec_resize(int l)libdap::Vector
    Vector(const string &n, BaseType *v, const Type &t, bool is_dap4=false)libdap::Vector
    Vector(const string &n, const string &d, BaseType *v, const Type &t, bool is_dap4=false)libdap::Vector
    Vector(const Vector &rhs)libdap::Vector
    width(bool constrained=false) constlibdap::Vectorvirtual
    ~BaseType() (defined in libdap::BaseType)libdap::BaseTypevirtual
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    ~Vector() (defined in libdap::Vector)libdap::Vectorvirtual
    -
    - - - - diff --git a/html/classlibdap_1_1Vector.html b/html/classlibdap_1_1Vector.html deleted file mode 100644 index 17d82d9de..000000000 --- a/html/classlibdap_1_1Vector.html +++ /dev/null @@ -1,3862 +0,0 @@ - - - - - - - -libdap: libdap::Vector Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    - -

    Holds a one-dimensional collection of DAP2 data types. - More...

    - -

    #include <Vector.h>

    -
    -Inheritance diagram for libdap::Vector:
    -
    -
    Inheritance graph
    - - - - - -
    - - - - -

    -Public Types

    -typedef stack< BaseType * > btp_stack
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual void add_var (BaseType *v, Part p=nil)
     Add the BaseType pointer to this constructor type instance. More...
     
    -virtual void add_var_nocopy (BaseType *v, Part p=nil)
     
    virtual unsigned int buf2val (void **val)
     Copies data from the Vector buffer. More...
     
    virtual bool check_semantics (string &msg, bool all=false)
     Compare an object's current state with the semantics of its type. More...
     
    virtual void clear_local_data ()
     
    virtual void compute_checksum (Crc32 &checksum)
     include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum. More...
     
    virtual bool d4_ops (BaseType *b, int op)
     Evaluator a relop for DAP4. More...
     
    virtual string dataset () const
     Returns the name of the dataset used to create this instance. More...
     
    virtual bool deserialize (UnMarshaller &um, DDS *dds, bool reuse=false)
     Receive data from the net. More...
     
    virtual void deserialize (D4StreamUnMarshaller &um, DMR &dmr)
     
    virtual void dump (ostream &strm) const
     dumps information about this object More...
     
    virtual int element_count (bool leaves)
     Count the members of constructor types. More...
     
    virtual std::string FQN () const
     
    virtual AttrTableget_attr_table ()
     
    char * get_buf ()
     
    vector< BaseType * > & get_compound_buf ()
     
    virtual BaseTypeget_parent () const
     
    vector< string > & get_str ()
     
    virtual unsigned int get_value_capacity () const
     
    virtual void intern_data (ConstraintEvaluator &eval, DDS &dds)
     read data into a variable for later use More...
     
    virtual void intern_data ()
     Read data into this variable. More...
     
    virtual bool is_constructor_type () const
     Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable. More...
     
    -virtual bool is_dap4 () const
     
    virtual bool is_in_selection ()
     Is this variable part of the current selection? More...
     
    virtual bool is_simple_type () const
     Returns true if the instance is a numeric, string or URL type variable. More...
     
    virtual bool is_vector_type () const
     Returns true if the instance is a vector (i.e., array) type variable. More...
     
    virtual int length () const
     
    virtual string name () const
     Returns the name of the class instance. More...
     
    -Vectoroperator= (const Vector &rhs)
     
    virtual bool ops (BaseType *b, int op)
     Evaluate relational operators. More...
     
    virtual void print_dap4 (XMLWriter &xml, bool constrained=false)
     
    virtual void print_decl (FILE *out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_decl (ostream &out, string space=" ", bool print_semi=true, bool constraint_info=false, bool constrained=false)
     Print an ASCII representation of the variable structure. More...
     
    virtual void print_xml (FILE *out, string space=" ", bool constrained=false)
     
    virtual void print_xml (ostream &out, string space=" ", bool constrained=false)
     
    virtual void print_xml_writer (XMLWriter &xml, bool constrained=false)
     
    -virtual BaseTypeprototype () const
     
    virtual BaseTypeptr_duplicate ()=0
     
    virtual bool read ()
     Read data into a local buffer. More...
     
    virtual bool read_p ()
     Has this variable been read? More...
     
    virtual void reserve_value_capacity (unsigned int numElements)
     
    virtual void reserve_value_capacity ()
     
    virtual bool send_p ()
     Should this variable be sent? More...
     
    virtual bool serialize (ConstraintEvaluator &eval, DDS &dds, Marshaller &m, bool ce_eval=true)
     Serialize a Vector. More...
     
    virtual void serialize (D4StreamMarshaller &m, DMR &dmr, bool filter=false)
     The DAP4 serialization method. Serialize a variable's values for DAP4. This does not write the DMR persistent representation but does write that part of the binary data blob that holds a variable's data. Once a variable's data are serialized, that memory is reclaimed (by calling BaseType::clear_local_data()) More...
     
    virtual void set_attr_table (const AttrTable &at)
     
    virtual void set_in_selection (bool state)
     
    -virtual void set_is_dap4 (const bool v)
     
    virtual void set_length (int l)
     
    virtual void set_name (const std::string &name)
     Sets the name of the class instance. More...
     
    virtual void set_parent (BaseType *parent)
     
    virtual void set_read_p (bool state)
     Indicates that the data is ready to send. More...
     
    virtual void set_send_p (bool state)
     Indicates that the data is ready to send. More...
     
    virtual void set_synthesized_p (bool state)
     
    virtual void set_type (const Type &t)
     Sets the type of the class instance. More...
     
    virtual unsigned int set_value_slice_from_row_major_vector (const Vector &rowMajorData, unsigned int startElement)
     
    void set_vec (unsigned int i, BaseType *val)
     Sets element i to value val. More...
     
    void set_vec_nocopy (unsigned int i, BaseType *val)
     Sets element i to value val. Set the ith element to val. Extend the vector if needed. More...
     
    virtual bool synthesized_p ()
     
    virtual string toString ()
     
    virtual void transfer_attributes (AttrTable *at)
     
    virtual std::vector< BaseType * > * transform_to_dap2 (AttrTable *parent_attr_table)
     DAP4 to DAP2 transform. More...
     
    virtual void transform_to_dap4 (D4Group *root, Constructor *container)
     DAP2 to DAP4 transform. More...
     
    virtual Type type () const
     Returns the type of the class instance. More...
     
    virtual string type_name () const
     Returns the type of the class instance as a string. More...
     
    virtual unsigned int val2buf (void *val, bool reuse=false)
     Reads data into the Vector buffer. More...
     
    virtual BaseTypevar (const string &name="", bool exact_match=true, btp_stack *s=0)
     
    virtual BaseTypevar (const string &name, btp_stack &s)
     
    virtual BaseTypevar (unsigned int i)
     
    void vec_resize (int l)
     
     Vector (const string &n, BaseType *v, const Type &t, bool is_dap4=false)
     The Vector constructor. More...
     
     Vector (const string &n, const string &d, BaseType *v, const Type &t, bool is_dap4=false)
     The Vector constructor. More...
     
     Vector (const Vector &rhs)
     
    virtual unsigned int width (bool constrained=false) const
     Returns the width of the data, in bytes. More...
     
    virtual D4Attributesattributes ()
     
    -virtual void set_attributes (D4Attributes *)
     
    -virtual void set_attributes_nocopy (D4Attributes *)
     
    Abstract Methods
    virtual void print_val (FILE *out, string space="", bool print_decl_p=true)
     Prints the value of the variable. More...
     
    virtual void print_val (ostream &out, string space="", bool print_decl_p=true)=0
     Prints the value of the variable. More...
     
    - - - - - - - - - - - - - - - -

    -Protected Member Functions

    unsigned int m_create_cardinal_data_buffer_for_type (unsigned int numEltsOfType)
     
    void m_delete_cardinal_data_buffer ()
     
    -void m_duplicate (const Vector &v)
     
    void m_duplicate (const BaseType &bt)
     Perform a deep copy. More...
     
    bool m_is_cardinal_type () const
     
    template<class CardType >
    void m_set_cardinal_values_internal (const CardType *fromArray, int numElts)
     
    - - - - - -

    -Protected Attributes

    -bool d_in_selection
     
    -bool d_is_synthesized
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Friends

    -class MarshallerTest
     
    -virtual bool set_value (dods_byte *val, int sz)
     
    -virtual bool set_value (dods_int8 *val, int sz)
     
    -virtual bool set_value (dods_int16 *val, int sz)
     
    -virtual bool set_value (dods_uint16 *val, int sz)
     
    -virtual bool set_value (dods_int32 *val, int sz)
     
    -virtual bool set_value (dods_uint32 *val, int sz)
     
    -virtual bool set_value (dods_int64 *val, int sz)
     
    -virtual bool set_value (dods_uint64 *val, int sz)
     
    -virtual bool set_value (dods_float32 *val, int sz)
     
    -virtual bool set_value (dods_float64 *val, int sz)
     
    virtual bool set_value (string *val, int sz)
     set the value of a string or url array More...
     
    -virtual bool set_value (vector< dods_byte > &val, int sz)
     
    -virtual bool set_value (vector< dods_int8 > &val, int sz)
     
    -virtual bool set_value (vector< dods_int16 > &val, int sz)
     
    -virtual bool set_value (vector< dods_uint16 > &val, int sz)
     
    -virtual bool set_value (vector< dods_int32 > &val, int sz)
     
    -virtual bool set_value (vector< dods_uint32 > &val, int sz)
     
    -virtual bool set_value (vector< dods_int64 > &val, int sz)
     
    -virtual bool set_value (vector< dods_uint64 > &val, int sz)
     
    -virtual bool set_value (vector< dods_float32 > &val, int sz)
     
    -virtual bool set_value (vector< dods_float64 > &val, int sz)
     
    virtual bool set_value (vector< string > &val, int sz)
     set the value of a string or url array More...
     
    -virtual void value (dods_byte *b) const
     
    -virtual void value (dods_int8 *b) const
     
    -virtual void value (dods_int16 *b) const
     
    -virtual void value (dods_uint16 *b) const
     
    -virtual void value (dods_int32 *b) const
     
    -virtual void value (dods_uint32 *b) const
     
    -virtual void value (dods_int64 *b) const
     
    -virtual void value (dods_uint64 *b) const
     
    -virtual void value (dods_float32 *b) const
     
    -virtual void value (dods_float64 *b) const
     
    virtual void value (vector< string > &b) const
     Get a copy of the data held by this variable. More...
     
    -virtual void value (vector< unsigned int > *indices, dods_byte *b) const
     
    -virtual void value (vector< unsigned int > *indices, dods_int8 *b) const
     
    -virtual void value (vector< unsigned int > *indices, dods_int16 *b) const
     
    -virtual void value (vector< unsigned int > *indices, dods_uint16 *b) const
     
    -virtual void value (vector< unsigned int > *indices, dods_int32 *b) const
     
    -virtual void value (vector< unsigned int > *indices, dods_uint32 *b) const
     
    -virtual void value (vector< unsigned int > *indices, dods_int64 *b) const
     
    -virtual void value (vector< unsigned int > *indices, dods_uint64 *b) const
     
    -virtual void value (vector< unsigned int > *indices, dods_float32 *b) const
     
    -virtual void value (vector< unsigned int > *indices, dods_float64 *b) const
     
    virtual void value (vector< unsigned int > *index, vector< string > &b) const
     Get a copy of the data held by this variable using the passed subsetIndex vector to identify which values to return. More...
     
    virtual void * value ()
     
    -

    Detailed Description

    -

    Holds a one-dimensional collection of DAP2 data types.

    -

    Holds a one-dimensional array of DAP2 data types. This class takes two forms, depending on whether the elements of the vector are themselves simple or compound objects. This class contains common functionality for the List and Array classes, and should rarely be used directly.

    -

    When each element of the class is a simple data type, the Vector is implemented as a simple array of C types, rather than as an array of BaseType data types. A single private ``template'' BaseType instance (_var) is used to hold information in common to all the members of the array. The template is also used as a container to pass values back and forth to an application program, as in var().

    -

    If the elements of the vector are themselves compound data types, the array is stored as a vector of BaseType pointers (see the libdap class BaseTypePtrVec). The template is still used to hold information in common to all the members of the array, but is not used to pass information to and from the application program.

    -
    See also
    BaseType
    -
    -Array
    - -

    Definition at line 80 of file Vector.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ Vector() [1/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    libdap::Vector::Vector (const string & n,
    BaseTypev,
    const Typet,
    bool is_dap4 = false 
    )
    -
    - -

    The Vector constructor.

    -

    The Vector constructor requires the name of the variable to be created, and a pointer to an object of the type the Vector is to hold. The name may be omitted, which will create a nameless variable. The template object may not be omitted.

    -
    Parameters
    - - - - -
    nA string containing the name of the variable to be created.
    vA pointer to a prototype for elements.
    tThe type of the resulting Vector object, from the Type enum list. There is no DAP2 Vector object, so all uses of this method will be from the Array class. This defaults to dods_null_c.
    -
    -
    -
    See also
    Type
    - -

    Definition at line 248 of file Vector.cc.

    - -
    -
    - -

    ◆ Vector() [2/3]

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    libdap::Vector::Vector (const string & n,
    const string & d,
    BaseTypev,
    const Typet,
    bool is_dap4 = false 
    )
    -
    - -

    The Vector constructor.

    -

    The Vector server-side constructor requires the name of the variable to be created, the dataset name from which this Vector is created, and a pointer to an object of the type the Vector is to hold. The name may be omitted, which will create a nameless variable. The template object may not be omitted.

    -
    Parameters
    - - - - - -
    nA string containing the name of the variable to be created.
    dA string containing the dataset name from which the variable is being created.
    vA pointer to a prototype for elements.
    tThe type of the resulting Vector object, from the Type enum list. There is no DAP2 Vector object, so all uses of this method will be from the Array class. This defaults to dods_null_c.
    -
    -
    -
    See also
    Type
    - -

    Definition at line 277 of file Vector.cc.

    - -
    -
    - -

    ◆ Vector() [3/3]

    - -
    -
    - - - - - - - - -
    libdap::Vector::Vector (const Vectorrhs)
    -
    -

    The Vector copy constructor.

    - -

    Definition at line 289 of file Vector.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ add_var()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Vector::add_var (BaseTypev,
    Part p = nil 
    )
    -
    -virtual
    -
    - -

    Add the BaseType pointer to this constructor type instance.

    -

    Propagate the name of the BaseType instance to this instance. This ensures that variables at any given level of the DDS table have unique names (i.e., that Arrays do not have their default name ""). If v's name is null, then assume that the array is named and don't overwrite it with v's null name.

    -
    Note
    As is the case with Array, this method can be called with a null BaseType pointer.
    -
    Parameters
    - - - -
    vThe template variable for the array
    pThe Part parameter defaults to nil and is ignored by this method.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Array.

    - -

    Definition at line 1960 of file Vector.cc.

    - -
    -
    - -

    ◆ attributes()

    - -
    -
    - - - - - -
    - - - - - - - -
    D4Attributes * libdap::BaseType::attributes ()
    -
    -virtualinherited
    -
    -

    DAP4 Attribute methods

    - -

    Definition at line 599 of file BaseType.cc.

    - -
    -
    - -

    ◆ buf2val()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::Vector::buf2val (void ** val)
    -
    -virtual
    -
    - -

    Copies data from the Vector buffer.

    -

    Copy data from a numeric or string arry to a buffer. This method will allocate memory if the handle val references NULL, otherwise it assumes the handle references enough storage for the data to be copied.

    -

    Never call this method for constructor types Structure, Sequence or Grid.

    -

    When reading data out of a variable that has been constrained, this method assumes the N values/bytes of constrained data start at the beginning of the object's internal buffer. For example, do not load an entire Vector's data using val2buf(), constrain and then use this method to get the data. Unless your constraint starts with the [0]th element, the result will not be the correct values.

    -

    In the case of a Vector of Str objects, this method will return a pointer to an array of C++ std::string objects.

    -
    Note
    It's best to define the pointer to reference the data as 'char *data' or some other non-void type and then call this method using '..->buf2val((void**)&data)'. You must free the storage once you're done using 'delete[] data'.
    -
    -It's also important to initialize the handle to NULL. That is your code should declare the handle like this: 'char *data = 0' if it expects buf2val() to allocate memory. With most compilers, the pointer may be null the first time the code is run, but often not on subsequent calls.
    -
    Returns
    The number of bytes used to store the array.
    -
    Parameters
    - - -
    valA pointer to a pointer to the memory into which the class data will be copied. If the value pointed to is NULL, memory will be allocated to hold the data, and the pointer value modified accordingly. The calling program is responsible for deallocating the memory indicated by this pointer.
    -
    -
    -
    Exceptions
    - - -
    InternalErrThrown if val is null.
    -
    -
    -
    See also
    Vector::set_vec
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 1248 of file Vector.cc.

    - -
    -
    - -

    ◆ check_semantics()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::Vector::check_semantics (string & msg,
    bool all = false 
    )
    -
    -virtual
    -
    - -

    Compare an object's current state with the semantics of its type.

    -

    This function checks the class instance for internal consistency. This is important to check for complex constructor classes. For BaseType, an object is semantically correct if it has both a non-null name and type.

    -

    For example, an Int32 instance would return FALSE if it had no name or no type defined. A Grid instance might return FALSE for more complex reasons, such as having Map arrays of the wrong size or shape.

    -

    This function is used by the DDS class, and will rarely, if ever, be explicitly called by a DODS application program. A variable must pass this test before it is sent, but there may be many other stages in a retrieve operation where it would fail.

    -
    Returns
    Returns FALSE when the current state violates some aspect of the type semantics, TRUE otherwise.
    -
    Parameters
    - - - -
    msgA returned string, containing a message indicating the source of any problem.
    allFor complex constructor types (Grid, Sequence, Structure), this flag indicates whether to check the semantics of the member variables, too.
    -
    -
    -
    See also
    DDS::check_semantics
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Array.

    - -

    Definition at line 2030 of file Vector.cc.

    - -
    -
    - -

    ◆ clear_local_data()

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::Vector::clear_local_data ()
    -
    -virtual
    -
    -

    Remove any read or set data in the private data of this Vector, setting read_p() to false. Essentially clears the _buf, d_str, and d_compound_buf of any data. Useful for tightening up memory when the data is no longer needed, but the object cannot yet be destroyed.

    -

    On exit: get_value_capacity() == 0 && !read_p()

    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 1379 of file Vector.cc.

    - -
    -
    - -

    ◆ compute_checksum()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Vector::compute_checksum (Crc32checksum)
    -
    -virtual
    -
    - -

    include the data for this variable in the checksum DAP4 includes a checksum with every data response. This method adds the variable's data to that checksum.

    -
    Parameters
    - - -
    checksumA Crc32 instance that holds the current checksum.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 858 of file Vector.cc.

    - -
    -
    - -

    ◆ d4_ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::d4_ops (BaseTypeb,
    int op 
    )
    -
    -virtualinherited
    -
    - -

    Evaluator a relop for DAP4.

    -

    This method is used by the filter expression evaluation code in DAP4. Each of the 'data type' classes that support relops must overload this method. In an expression of the form arg1 op arg2, this object is arg1, the parameter 'b' is arg2 and op is the relational operator.

    -
    Note
    I used the same relop codes for DAP4 as in the DAP2 parser/scanner which makes for some coupling between them, but cuts way down on the duplication of the evaluator logic, which is somewhat involved.
    -
    Parameters
    - - - -
    bThe second argument in the relational expression
    opThe infix relational operator
    -
    -
    -
    Returns
    True if the expression is true, False otherwise.
    - -

    Reimplemented in libdap::Str, libdap::Int32, libdap::Float32, libdap::Byte, libdap::Float64, libdap::Int16, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 1282 of file BaseType.cc.

    - -
    -
    - -

    ◆ dataset()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::dataset () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the dataset used to create this instance.

    -

    A dataset from which the data is to be read. The meaning of this string will vary among different types of data sources. It may be the name of a data file or an identifier used to read data from a relational database.

    - -

    Definition at line 358 of file BaseType.cc.

    - -
    -
    - -

    ◆ deserialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::Vector::deserialize (UnMarshallerum,
    DDSdds,
    bool reuse = false 
    )
    -
    -virtual
    -
    - -

    Receive data from the net.

    -

    Receives data from the network connection identified by the source parameter. The data is put into the class data buffer according to the input dds.

    -

    This function is only used on the client side of the DODS client/server connection.

    -
    Parameters
    - - - - -
    umAn UnMarshaller that knows how to deserialize data types
    ddsThe Data Descriptor Structure object corresponding to this dataset. See The DODS User Manual for information about this structure. This would have been received from the server in an earlier transmission.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect.
    -
    -
    -
    Returns
    Always returns TRUE.
    -
    Exceptions
    - - -
    Errorwhen a problem reading from the UnMarshaller is found.
    -
    -
    -
    See also
    DDS
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 755 of file Vector.cc.

    - -
    -
    - -

    ◆ deserialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Vector::deserialize (D4StreamUnMarshallerum,
    DMRdmr 
    )
    -
    -virtual
    -
    -

    The DAP4 deserialization method.

    Parameters
    - - - -
    um
    dmr
    -
    -
    -
    Exceptions
    - - -
    Erroror InternalErr
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 1033 of file Vector.cc.

    - -
    -
    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Vector::dump (ostream & strm) const
    -
    -virtual
    -
    - -

    dumps information about this object

    -

    Displays the pointer value of this instance and information about this instance.

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the information to
    -
    -
    -
    Returns
    void
    - -

    Reimplemented from libdap::BaseType.

    - -

    Reimplemented in libdap::Array.

    - -

    Definition at line 2043 of file Vector.cc.

    - -
    -
    - -

    ◆ element_count()

    - -
    -
    - - - - - -
    - - - - - - - - -
    int libdap::Vector::element_count (bool leaves)
    -
    -virtual
    -
    - -

    Count the members of constructor types.

    -

    Return a count of the total number of variables in this variable. This is used to count the number of variables held by a constructor variable - for simple type and vector variables it always returns 1.

    -

    For compound data types, there are two ways to count members. You can count the members, or you can count the simple members and add that to the count of the compound members. For example, if a Structure contains an Int32 and another Structure that itself contains two Int32 members, the element count of the top-level structure could be two (one Int32 and one Structure) or three (one Int32 by itself and two Int32's in the subsidiary Structure). Use the leaves parameter to control which kind of counting you desire.

    -
    Returns
    Returns 1 for simple types. For compound members, the count depends on the leaves argument.
    -
    Parameters
    - - -
    leavesThis parameter is only relevant if the object contains other compound data types. If FALSE, the function counts only the data variables mentioned in the object's declaration. If TRUE, it counts the simple members, and adds that to the sum of the counts for the compound members. This parameter has no effect for simple type variables.
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 333 of file Vector.cc.

    - -
    -
    - -

    ◆ FQN()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::FQN () const
    -
    -virtualinherited
    -
    -

    Return the FQN for this variable. This will include the D4 Group component of the name.

    -
    Returns
    The FQN in a string
    - -

    Reimplemented in libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 332 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - -
    AttrTable & libdap::BaseType::get_attr_table ()
    -
    -virtualinherited
    -
    -

    Get this variable's AttrTable. It's generally a bad idea to return a reference to a contained object, but in this case it seems that building an interface inside BaseType is overkill.

    -

    Use the AttrTable methods to manipulate the table.

    - -

    Definition at line 582 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_buf()

    - -
    -
    - - - - - -
    - - - - - - - -
    char* libdap::Vector::get_buf ()
    -
    -inline
    -
    -

    Provide access to internal data by reference. Callers cannot delete this but can pass them to other methods.

    -
    Note
    Added so that the NCML handler can code some optimizations in its specialized versions of Array. jhrg 8/14/15
    -
    Returns
    A pointer to the data buffer for Vectors/Arrays of the cardinal types.
    - -

    Definition at line 138 of file Vector.h.

    - -
    -
    - -

    ◆ get_compound_buf()

    - -
    -
    - - - - - -
    - - - - - - - -
    vector<BaseType*>& libdap::Vector::get_compound_buf ()
    -
    -inline
    -
    -

    Provide access to internal data by reference. Callers cannot delete this but can pass them to other methods.

    -
    Returns
    A reference to a vector of BaseType pointers. Treat with care; never delete these!
    - -

    Definition at line 159 of file Vector.h.

    - -
    -
    - -

    ◆ get_parent()

    - -
    -
    - - - - - -
    - - - - - - - -
    BaseType * libdap::BaseType::get_parent () const
    -
    -virtualinherited
    -
    -

    Return a pointer to the Constructor or Vector which holds (contains) this variable. If this variable is at the top level, this method returns null.

    -
    Returns
    A BaseType pointer to the variable's parent.
    - -

    Definition at line 751 of file BaseType.cc.

    - -
    -
    - -

    ◆ get_str()

    - -
    -
    - - - - - -
    - - - - - - - -
    vector<string>& libdap::Vector::get_str ()
    -
    -inline
    -
    -

    Provide access to internal string data by reference. Callers cannot delete this but can pass them to other methods.

    -
    Returns
    A reference to a vector of strings
    - -

    Definition at line 148 of file Vector.h.

    - -
    -
    - -

    ◆ get_value_capacity()

    - -
    -
    - - - - - -
    - - - - - - - -
    unsigned int libdap::Vector::get_value_capacity () const
    -
    -virtual
    -
    -

    Return the capacity of the Vector in terms of number of elements of its data type that it can currently hold (i.e. not bytes). For example, this could be the size of the _buf array in bytes / sizeof(T) for the cardinal types T, or the capacity of the d_str vector if T is string or url type.

    - -

    Definition at line 1406 of file Vector.cc.

    - -
    -
    - -

    ◆ intern_data() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Vector::intern_data (ConstraintEvaluatoreval,
    DDSdds 
    )
    -
    -virtual
    -
    - -

    read data into a variable for later use

    -

    Most uses of a variable are to either serialize its data to a stream of some sort or to read values from some stream and intern those in the variable for later use. These operations are perform by serialize() and deserialize() which follow. This function performs essentially both of these operations without actually using a stream device. The data are read using the read() method(s) and loaded into the variables directly.

    -

    This method is intended to be used by objects which transform DAP objects like the DataDDS into an ASCII CSV representation.

    -
    Note
    A DAP2-only method
    -
    Parameters
    - - - -
    evalA reference to a constraint evaluator
    ddsThe complete DDS to which this variable belongs
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 597 of file Vector.cc.

    - -
    -
    - -

    ◆ intern_data() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::Vector::intern_data ()
    -
    -virtual
    -
    - -

    Read data into this variable.

    -
    Parameters
    - - - -
    evalEvaluator for a constraint expression
    dmrDMR for the whole dataset
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 900 of file Vector.cc.

    - -
    -
    - -

    ◆ is_constructor_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_constructor_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a constructor (i.e., Structure, Sequence or Grid) type variable.

    -
    Returns
    True if the instance is a Structure, Sequence or Grid, False otherwise.
    - -

    Definition at line 412 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_in_selection ()
    -
    -virtualinherited
    -
    - -

    Is this variable part of the current selection?

    -

    Does this variable appear in either the selection part or as a function argument in the current constrain expression. If this property is set (true) then implementations of the read() method should read this variable.

    -
    Note
    This method does not check, nor does it know about the semantics of, string arguments passed to functions. Those functions might include variable names in strings; they are responsible for reading those variables. See the grid (func_grid_select()) for an example.
    -
    See also
    BaseType::read()
    - -

    Definition at line 703 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_simple_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_simple_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a numeric, string or URL type variable.

    -
    Returns
    True if the instance is a scalar numeric, String or URL variable, False otherwise. Arrays (even of simple types) return False.
    -
    See also
    is_vector_type()
    - -

    Definition at line 393 of file BaseType.cc.

    - -
    -
    - -

    ◆ is_vector_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::is_vector_type () const
    -
    -virtualinherited
    -
    - -

    Returns true if the instance is a vector (i.e., array) type variable.

    -
    Returns
    True if the instance is an Array, False otherwise.
    - -

    Definition at line 402 of file BaseType.cc.

    - -
    -
    - -

    ◆ length()

    - -
    -
    - - - - - -
    - - - - - - - -
    int libdap::Vector::length () const
    -
    -virtual
    -
    -

    Returns the number of elements in the vector. Note that some child classes of Vector use the length of -1 as a flag value.

    -
    See also
    Vector::append_dim
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 548 of file Vector.cc.

    - -
    -
    - -

    ◆ m_create_cardinal_data_buffer_for_type()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::Vector::m_create_cardinal_data_buffer_for_type (unsigned int numEltsOfType)
    -
    -protected
    -
    -

    Create _buf so that it can store numElts of the (assumed) cardinal type. This create storage for width() * numElts bytes. If _buf already exists, this DELETES IT and creates a new one. So don't use this if you want to keep the original _buf data around. This also sets the valueCapacity().

    Parameters
    - - -
    numEltsOfTypethe number of elements of the cardinal type in var() that we want storage for.
    -
    -
    -
    Returns
    the size of the buffer created.
    -
    Exceptions
    - - -
    ifthe Vector's type is not cardinal type.
    -
    -
    - -

    Definition at line 180 of file Vector.cc.

    - -
    -
    - -

    ◆ m_delete_cardinal_data_buffer()

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::Vector::m_delete_cardinal_data_buffer ()
    -
    -protected
    -
    -

    Delete d_buf and zero it and d_capacity out

    - -

    Definition at line 208 of file Vector.cc.

    - -
    -
    - -

    ◆ m_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::m_duplicate (const BaseTypebt)
    -
    -protectedinherited
    -
    - -

    Perform a deep copy.

    -

    Perform a deep copy. Copies the values of bt into *this. Pointers are dereferenced and their values are copied into a newly allocated instance.

    -
    Parameters
    - - -
    btThe source object.
    -
    -
    - -

    Definition at line 86 of file BaseType.cc.

    - -
    -
    - -

    ◆ m_is_cardinal_type()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::Vector::m_is_cardinal_type () const
    -
    -protected
    -
    -
    Returns
    whether the type of this Vector is a cardinal type (i.e., stored in d_buf)
    - -

    Definition at line 125 of file Vector.cc.

    - -
    -
    - -

    ◆ m_set_cardinal_values_internal()

    - -
    -
    -
    -template<class CardType >
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Vector::m_set_cardinal_values_internal (const CardType * fromArray,
    int numElts 
    )
    -
    -protected
    -
    -

    Helper to reduce cut and paste in the virtual's.

    - -

    Definition at line 219 of file Vector.cc.

    - -
    -
    - -

    ◆ name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::name () const
    -
    -virtualinherited
    -
    - -

    Returns the name of the class instance.

    - -

    Definition at line 320 of file BaseType.cc.

    - -
    -
    - -

    ◆ ops()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::BaseType::ops (BaseTypeb,
    int op 
    )
    -
    -virtualinherited
    -
    - -

    Evaluate relational operators.

    -

    This method contains the relational operators used by the constraint expression evaluator in the DDS class. Each class that wants to be able to evaluate relational expressions must overload this function. The implementation in BaseType throws an InternalErr exception. The DAP library classes Byte, ..., Url provide specializations of this method. It is not meaningful for classes such as Array because relational expressions using Array are not supported.

    -

    The op argument refers to a table generated by bison from the constraint expression parser. Use statements like the following to correctly interpret its value:

    -
    switch (op) {
    -    case EQUAL: return i1 == i2;
    -    case NOT_EQUAL: return i1 != i2;
    -    case GREATER: return i1 > i2;
    -    case GREATER_EQL: return i1 >= i2;
    -    case LESS: return i1 < i2;
    -    case LESS_EQL: return i1 <= i2;
    -    case REGEXP: throw Error("Regular expressions are not supported for integer values");
    -    default: throw Error("Unknown operator");
    -}
    -

    This function is used by the constraint expression evaluator.

    -
    Parameters
    - - - -
    bCompare the value of this instance with b.
    opAn integer index indicating which relational operator is implied. Choose one from the following: EQUAL, NOT_EQUAL, GREATER, GREATER_EQL, LESS, LESS_EQL, and REGEXP.
    -
    -
    -
    Returns
    The boolean value of the comparison.
    -
    See also
    BaseType::d4_ops(BaseType *, int)
    - -

    Reimplemented in libdap::D4Enum, libdap::Str, libdap::Int32, libdap::Float32, libdap::Byte, libdap::Float64, libdap::UInt32, libdap::D4Opaque, libdap::Int16, libdap::UInt16, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 1256 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_dap4 (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the DAP4 XML representation for this variable. This method is used to build the DAP4 DMR response object.

    -
    Parameters
    - - - -
    xmlAn XMLWriter that will do the serialization
    constrainedTrue if the response should show the variables subject to the current constraint expression.
    -
    -
    - -

    Reimplemented in libdap::Array, libdap::D4Group, and libdap::Constructor.

    - -

    Definition at line 1164 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (FILE * out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1003 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_decl() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_decl (ostream & out,
    string space = "    ",
    bool print_semi = true,
    bool constraint_info = false,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    - -

    Print an ASCII representation of the variable structure.

    -

    Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The DODS User Manual for information about this structure.

    -

    A simple array declaration might look like this:

    Float64 lat[lat = 180];
    -

    While a more complex declaration (for a Grid, in this case), would look like this:

    Grid {
    -ARRAY:
    -Int32 sst[time = 404][lat = 180][lon = 360];
    -MAPS:
    -Float64 time[time = 404];
    -Float64 lat[lat = 180];
    -Float64 lon[lon = 360];
    -} sst;
    -
    Parameters
    - - - - - - -
    outThe output stream on which to print the declaration.
    spaceEach line of the declaration will begin with the characters in this string. Usually used for leading spaces.
    print_semiA boolean value indicating whether to print a semicolon at the end of the declaration.
    constraint_infoA boolean value indicating whether constraint information is to be printed with the declaration. If the value of this parameter is TRUE, print_decl() prints the value of the variable's send_p() flag after the declaration.
    constrainedIf this boolean value is TRUE, the variable's declaration is only printed if is the send_p() flag is TRUE. If a constraint expression is in place, and this variable is not requested, the send_p() flag is FALSE.
    -
    -
    -
    See also
    DDS
    -
    -DDS::CE
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1054 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_val() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_val (FILE * out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -virtualinherited
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output stream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Reimplemented in libdap::Sequence, libdap::Array, libdap::Grid, libdap::Constructor, libdap::Str, libdap::Int32, libdap::Byte, libdap::Float32, libdap::Float64, libdap::UInt32, libdap::Int16, libdap::UInt16, and libdap::D4Opaque.

    - -

    Definition at line 1090 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_val() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    virtual void libdap::BaseType::print_val (ostream & out,
    string space = "",
    bool print_decl_p = true 
    )
    -
    -pure virtualinherited
    -
    - -

    Prints the value of the variable.

    -

    Prints the value of the variable, with its declaration. This function is primarily intended for debugging DODS applications. However, it can be overloaded and used to do some useful things. Take a look at the asciival and writeval clients, both of which overload this to output the values of variables in different ways.

    -
    Parameters
    - - - - -
    outThe output ostream on which to print the value.
    spaceThis value is passed to the print_decl() function, and controls the leading spaces of the output.
    print_decl_pA boolean value controlling whether the variable declaration is printed as well as the value.
    -
    -
    - -

    Implemented in libdap::D4Sequence, libdap::Sequence, libdap::Array, libdap::D4Enum, libdap::Grid, libdap::Constructor, libdap::Str, libdap::Int32, libdap::Float32, libdap::Byte, libdap::Float64, libdap::UInt32, libdap::Int16, libdap::D4Opaque, libdap::UInt16, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -
    -
    - -

    ◆ print_xml() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (FILE * out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination.
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1105 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml (ostream & out,
    string space = "    ",
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    -
    Deprecated:
    - -

    Reimplemented in libdap::Array, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1120 of file BaseType.cc.

    - -
    -
    - -

    ◆ print_xml_writer()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::print_xml_writer (XMLWriterxml,
    bool constrained = false 
    )
    -
    -virtualinherited
    -
    -

    Write the XML representation of this variable. This method is used to build the DDX XML response.

    Parameters
    - - - - -
    outDestination output stream
    spaceUse this to indent child declarations. Default is "".
    constrainedIf true, only print this if it's part part of the current projection. Default is False.
    -
    -
    - -

    Reimplemented in libdap::Array, libdap::D4Enum, libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 1134 of file BaseType.cc.

    - -
    -
    - -

    ◆ ptr_duplicate()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual BaseType* libdap::Vector::ptr_duplicate ()
    -
    -pure virtual
    -
    -

    Clone this instance. Allocate a new instance and copy *this into it. This method must perform a deep copy.

    @note This method should \e not copy data values, but must copy all
    -other fields in the object.
    -
    Returns
    A newly allocated copy of this.
    - -

    Implements libdap::BaseType.

    - -

    Implemented in libdap::Array.

    - -
    -
    - -

    ◆ read()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read ()
    -
    -virtualinherited
    -
    - -

    Read data into a local buffer.

    -

    This method should be implemented for each of the data type classes (Byte, ..., Grid) when using the DAP class library to build a server. This method is only for DAP servers. The library provides a default definition here which throws an InternalErr exception unless the read_p property has been set. In that case it returns false, indicating that all the data have been read. The latter case can happen when building a constant value that needs to be passed to a function. The variable/constant is loaded with a value when it is created.

    -

    When implementing a new DAP server, the Byte, ..., Grid data type classes are usually specialized. In each of those specializations read() should be defined to read values from the data source and store them in the object's local buffer. The read() method is called by other methods in this library. When writing read(), follow these rules:

    -
      -
    • -read() should throw Error if it encounters an error. The message should be verbose enough to be understood by someone running a client on a different machine.
    • -
    • -The value(s) should be read if and only if either send_p() or is_in_selection() return true. If neither of these return true, the value(s) should not be read. This is important when writing read() for a Constructor type such as Grid where a client may ask for only the map vectors (and thus reading the much larger Array part is not needed).
    • -
    • -For each specialization of read(), the method should first test the value of the read_p property (using the read_p() method) and read values only if the value of read_p() is false. Once the read() method reads data and stores it in the instance, it must set the value of the read_p property to true using set_read_p(). If your read() methods fail to do this data may not serialize correctly.
    • -
    • -The Array::read() and Grid::read() methods should take into account any restrictions on Array sizes.
    • -
    • -If you are writing Sequence::read(), be sure to check the documentation for Sequence::read_row() and Sequence::serialize() so you understand how Sequence::read() is being called.
    • -
    • -

      For Sequence::read(), your specialization must correctly manage the unsent_data property and row count in addition to the read_p property (handle the read_p property as describe above). For a Sequence to serialize correctly, once all data from the Sequence has been read, unsent_data property must be set to false (use Sequence::set_unsent_data()). Also, at that time the row number counter must be reset (use Sequence::reset_row_counter()). Typically the correct time to set unsent_data to false and reset the row counter is the time when Sequence::read() return false indicating that all the data for the Sequence have been read. Failure to handle these tasks will break serialization of nested Sequences. Note that when Sequence::read() returns with a result of true (indicating there is more data to send, the value of the unsent_data property should be true.

      -

      Also, if you server must handle nested sequences, be sure to read about subclassing set_read_p().

      -
    • -
    -
    Todo:
    Modify the D4 serialize code so that it supports the true/false behavior of read() for arrays.
    -
    Todo:
    Modify all of the stock handlers so they conform to this!
    -
    Returns
    False means more data remains to be read, True indicates that no more data need to be read. For Sequence and D4Sequence, this method will generally read one instance of the Sequence; for other types it will generally read the entire variable modulo any limitations due to a constraint. However, the library should be written so that read can return less than all of the data for a variable - serialize() would then call the function until it returns True.
    -
    See also
    BaseType
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 899 of file BaseType.cc.

    - -
    -
    - -

    ◆ read_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::read_p ()
    -
    -virtualinherited
    -
    - -

    Has this variable been read?

    -

    Returns true if the value(s) for this variable have been read from the data source, otherwise returns false. This method is used to determine when values need to be read using the read() method. When read_p() returns true, this library assumes that buf2val() (and other methods such as get_vec()) can be used to access the value(s) of a variable.

    -
    Returns
    True if the variable's value(s) have been read, false otherwise.
    - -

    Definition at line 480 of file BaseType.cc.

    - -
    -
    - -

    ◆ reserve_value_capacity() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Vector::reserve_value_capacity (unsigned int numElements)
    -
    -virtual
    -
    -

    Allocate enough memory for the Vector to contain numElements data elements of the Vector's type. Must be used before set_value_slice_from_row_major_vector to ensure memory exists.

    Parameters
    - - -
    numElementsthe number of elements of the Vector's type to preallocate storage for.
    -
    -
    -
    Exceptions
    - - -
    ifthe memory cannot be allocated
    -
    -
    - -

    Definition at line 1420 of file Vector.cc.

    - -
    -
    - -

    ◆ reserve_value_capacity() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::Vector::reserve_value_capacity ()
    -
    -virtual
    -
    -

    Make sure there's storage allocated for the current length() of the Vector. Same as reserveValueCapacity(length())

    - -

    Definition at line 1476 of file Vector.cc.

    - -
    -
    - -

    ◆ send_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::send_p ()
    -
    -virtualinherited
    -
    - -

    Should this variable be sent?

    -

    Returns the state of the send_p property. If true, this variable should be sent to the client, if false, it should not. If no constraint expression (CE) has been evaluated, this property is true for all variables in a data source (i.e., for all the variables listed in a DDS). If a CE has been evaluated, this property is true only for those variables listed in the projection part of the CE.

    -
    Returns
    True if the variable should be sent to the client, false otherwise.
    - -

    Definition at line 554 of file BaseType.cc.

    - -
    -
    - -

    ◆ serialize() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    bool libdap::Vector::serialize (ConstraintEvaluatoreval,
    DDSdds,
    Marshallerm,
    bool ce_eval = true 
    )
    -
    -virtual
    -
    - -

    Serialize a Vector.

    -

    This uses the Marshaler class to encode each element of a cardinal array. For Arrays of Str and Url types, send the element count over as a prefix to the data so that deserialize will know how many elements to read.

    -

    NB: Arrays of cardinal types must already be in BUF (in the local machine's representation) before this call is made.

    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 661 of file Vector.cc.

    - -
    -
    - -

    ◆ serialize() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::Vector::serialize (D4StreamMarshallerm,
    DMRdmr,
    bool filter = false 
    )
    -
    -virtual
    -
    - -

    The DAP4 serialization method. Serialize a variable's values for DAP4. This does not write the DMR persistent representation but does write that part of the binary data blob that holds a variable's data. Once a variable's data are serialized, that memory is reclaimed (by calling BaseType::clear_local_data())

    -
    Parameters
    - - - - - -
    m
    dmr
    eval
    filterTrue if there is one variable that should be 'filtered'
    -
    -
    -
    Exceptions
    - - -
    Erroror InternalErr
    -
    -
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 948 of file Vector.cc.

    - -
    -
    - -

    ◆ set_attr_table()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_attr_table (const AttrTableat)
    -
    -virtualinherited
    -
    -

    Set this variable's attribute table.

    Parameters
    - - -
    atSource of the attributes.
    -
    -
    - -

    Definition at line 590 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_in_selection()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_in_selection (bool state)
    -
    -virtualinherited
    -
    -

    Set the in_selection property to state. This property indicates that the variable is used as a parameter to a constraint expression function or that it appears as an argument in a selection sub-expression. If set (true), implementations of the BaseType::read() method should read this variable.

    -
    Parameters
    - - -
    stateSet the in_selection property to this state.
    -
    -
    -
    See also
    BaseType::read()
    -
    -BaseType::is_in_selection() for more information.
    - -

    Reimplemented in libdap::Constructor.

    - -

    Definition at line 718 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_length()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Vector::set_length (int l)
    -
    -virtual
    -
    -

    Sets the length of the vector. This function does not allocate any new space.

    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 555 of file Vector.cc.

    - -
    -
    - -

    ◆ set_name()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Vector::set_name (const std::string & n)
    -
    -virtual
    -
    - -

    Sets the name of the class instance.

    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 323 of file Vector.cc.

    - -
    -
    - -

    ◆ set_parent()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_parent (BaseTypeparent)
    -
    -virtualinherited
    -
    -

    Set the parent property for this variable.

    -
    Note
    Added ability to set parent to null. 10/19/12 jhrg
    -
    Parameters
    - - -
    parentPointer to the Constructor of Vector parent variable or null if the variable has no parent (if it is at the top-level of a DAP2/3 DDS).
    -
    -
    -
    Exceptions
    - - -
    InternalErrthrown if called with anything other than a Constructor, Vector or Null.
    -
    -
    - -

    Definition at line 733 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_read_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Vector::set_read_p (bool state)
    -
    -virtual
    -
    - -

    Indicates that the data is ready to send.

    -

    This function sets the read_p flag for both the Vector itself and its element template. This does not matter much when the Vector contains simple data types, but does become significant when the Vector contains compound types.

    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 391 of file Vector.cc.

    - -
    -
    - -

    ◆ set_send_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Vector::set_send_p (bool state)
    -
    -virtual
    -
    - -

    Indicates that the data is ready to send.

    -

    This function sets the send_p flag for both the Vector itself and its element template. This does not matter much when the Vector contains simple data types, but does become significant when the Vector contains compound types.

    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 354 of file Vector.cc.

    - -
    -
    - -

    ◆ set_synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_synthesized_p (bool state)
    -
    -virtualinherited
    -
    -

    Set the synthesized flag. Before setting this flag be sure to set the read_p() state. Once this flag is set you cannot alter the state of the read_p flag!

    -
    See also
    synthesized_p()
    - -

    Definition at line 463 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_type()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::set_type (const Typet)
    -
    -virtualinherited
    -
    - -

    Sets the type of the class instance.

    - -

    Definition at line 372 of file BaseType.cc.

    - -
    -
    - -

    ◆ set_value() [1/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::Vector::set_value (string * val,
    int sz 
    )
    -
    -virtual
    -
    - -

    set the value of a string or url array

    -
    Parameters
    - - - -
    valA pointer to an array of string objects
    szThe number of elements in the string array
    -
    -
    -
    Returns
    false if the type of the array is neither Str nor Url or val is null, otherwise returns true.
    - -

    Definition at line 1720 of file Vector.cc.

    - -
    -
    - -

    ◆ set_value() [2/2]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    bool libdap::Vector::set_value (vector< string > & val,
    int sz 
    )
    -
    -virtual
    -
    - -

    set the value of a string or url array

    - -

    Definition at line 1786 of file Vector.cc.

    - -
    -
    - -

    ◆ set_value_slice_from_row_major_vector()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    unsigned int libdap::Vector::set_value_slice_from_row_major_vector (const VectorrowMajorDataC,
    unsigned int startElement 
    )
    -
    -virtual
    -
    -

    Copy rowMajorData.length() elements currently in a rowMajorData buffer into this value buffer starting at element index startElement and continuing up to startElement+rowMajorData.length()-1

    -

    This is used for aggregating together smaller rowMajor vectors into a larger one.

    -

    Note: unlike the other set_value calls, this does NOT set read_p() since it is assumed to be used as a partial read and the caller is expected to set_read_p() when the data is complete.

    -

    ASSUMES: rowMajorData.read_p() so that the data is valid! ASSUMES: this Vector has enough value_capacity() to contain all the elements such that: startElement + rowMajorData.length() <= this->value_capacity(). ASSUMES: the data type of this->var() and rowMajorData.var() MUST be non-NULL and be the same!

    -
    Parameters
    - - - -
    rowMajorDataCthe vector from which to copy data, assumed already read in or set.
    startElementthe element index (NOT byte, but rather data type element) to place the first data value.
    -
    -
    -
    Returns
    the number of elements added, such that: startElement + the return value is the next "free" element.
    - -

    Definition at line 1511 of file Vector.cc.

    - -
    -
    - -

    ◆ set_vec()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Vector::set_vec (unsigned int i,
    BaseTypeval 
    )
    -
    - -

    Sets element i to value val.

    -

    Sets an element of the vector to a given value. If the type of the input and the type of the Vector do not match, an error condition is returned.

    -

    Use this function only with Vectors containing compound types. See buf2val() or the set_value() methods to access members of Vector containing simple types.

    -
    Note
    This method copies val; the caller is responsible for deleting instance passed as the actual parameter.
    -
    Returns
    void
    -
    Exceptions
    - - -
    InternalErrThrown if i is out of range, val is null or there was a type mismatch between the BaseType referenced by val and the ith element of this Vector.
    -
    -
    -
    Parameters
    - - - -
    iThe index of the element to be changed.
    valA pointer to the value to be inserted into the array.
    -
    -
    -
    See also
    Vector::buf2val
    - -

    Definition at line 1326 of file Vector.cc.

    - -
    -
    - -

    ◆ set_vec_nocopy()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Vector::set_vec_nocopy (unsigned int i,
    BaseTypeval 
    )
    -
    - -

    Sets element i to value val. Set the ith element to val. Extend the vector if needed.

    -
    Note
    It is best to call vec_resize() first and allocate enough elements before calling this method.
    -
    -This method does not copy val; this class will free the instance when the variable is deleted or when clear_local_data() is called.
    -
    See also
    Vector::set_vec()
    - -

    Definition at line 1342 of file Vector.cc.

    - -
    -
    - -

    ◆ synthesized_p()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::BaseType::synthesized_p ()
    -
    -virtualinherited
    -
    -

    Returns true if the variable is a synthesized variable. A synthesized variable is one that is added to the dataset by the server (usually with a `projection function'.

    - -

    Definition at line 452 of file BaseType.cc.

    - -
    -
    - -

    ◆ toString()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::toString ()
    -
    -virtualinherited
    -
    -

    Write out the object's internal fields in a string. To be used for debugging when regular inspection w/ddd or gdb isn't enough.

    -
    Returns
    A string which shows the object's internal stuff.
    - -

    Reimplemented in libdap::Sequence.

    - -

    Definition at line 184 of file BaseType.cc.

    - -
    -
    - -

    ◆ transfer_attributes()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::BaseType::transfer_attributes (AttrTableat_container)
    -
    -virtualinherited
    -
    -

    Transfer attributes from a DAS object into this variable. Because of the rough history of the DAS object and the way that various server code built the DAS, this is necessarily a heuristic process. The intent is that this method will be overridden by handlers that need to look for certain patterns in the DAS (e.g., hdf4's odd variable_dim_n; where n = 0, 1, 2, ...) attribute containers.

    -

    There should be a one-to-one mapping between variables and attribute containers. However, in some cases one variable has attributes spread across several top level containers and in some cases one container is used by several variables

    -
    Note
    This method is technically unnecessary because a server (or client) can easily add attributes directly using the DDS::get_attr_table or BaseType::get_attr_table methods and then poke values in using any of the methods AttrTable provides. This method exists to ease the transition to DDS objects which contain attribute information for the existing servers (Since they all make DAS objects separately from the DDS). They could be modified to use the same AttrTable methods but operate on the AttrTable instances in a DDS/BaseType instead of those in a DAS.
    -
    Parameters
    - - -
    at_containerTransfer attributes from this container.
    -
    -
    -
    Returns
    void
    - -

    Reimplemented in libdap::Grid, and libdap::Constructor.

    - -

    Definition at line 644 of file BaseType.cc.

    - -
    -
    - -

    ◆ transform_to_dap2()

    - -
    -
    - - - - - -
    - - - - - - - - -
    std::vector< BaseType * > * libdap::BaseType::transform_to_dap2 (AttrTableparent_attr_table)
    -
    -virtualinherited
    -
    - -

    DAP4 to DAP2 transform.

    -

    For the current BaseType, return a DAP2 'copy' of the variable.

    -
    Note
    For most DAP4 types, in this implementation of DAP2 the corresponding DAP4 type is the same. These types have a different representations in DAP2 and DAP4: Sequences (which are D4Sequences in the DAP4 implementation),
      -
    • Grids (which are semantically subsumed by coverages in DAP4)
    • -
    • Arrays (which use shared dimensions in DAP4)
    • -
    -
    -

    Additionally DAP4 adds the following types:

      -
    • UInt8, Int8, and Char which map to Byte in DAP2.
    • -
    • Int64, Unit64 which have no natural representation in DAP2.
    • -
    • Opaque Possible Byte stuff[] plus metadata?
    • -
    • Enum's can be represented as Int32.
    • -
    • Groups, with the exception of the root group "disappear" into the names of their member variables. Specifically the Group name is add as a prefix followed by a "/" separator to the names of all of the Group's member groups variables.
    • -
    -
    Parameters
    - - -
    TheAttrTable pointer parent_attr_table is used by Groups, which disappear from the DAP2 representation. Their children are returned in the the BAseType vector their attributes are added to parent_attr_table;
    -
    -
    -
    Returns
    A pointer to a vector of BaseType pointers (right?). In most cases this vector will contain a single pointer but DAP4 types 'disappear' such as Group will return all of their member variables in the vector. DAP4 types with no representation in DAP2 (ex: UInt64) the will return a NULL pointer and so this must be tested!
    - -

    Reimplemented in libdap::Array, libdap::D4Enum, libdap::D4Group, libdap::D4Opaque, libdap::Byte, libdap::Structure, libdap::Int64, libdap::UInt64, and libdap::Int8.

    - -

    Definition at line 259 of file BaseType.cc.

    - -
    -
    - -

    ◆ transform_to_dap4()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::BaseType::transform_to_dap4 (D4Grouproot,
    Constructorcontainer 
    )
    -
    -virtualinherited
    -
    - -

    DAP2 to DAP4 transform.

    -

    For the current BaseType, return a DAP4 'copy' of the variable.

    -
    Note
    For most DAP2 types, in this implementation of DAP4 the corresponding DAP4 type is the same. The different types are Sequences (which are D4Sequences in the DAP4 implementation), Grids (which are coverages) and Arrays (which use shared dimensions).
    -
    Parameters
    - - - -
    rootThe root group that should hold this new variable. Add Group-level stuff here (e.g., D4Dimensions).
    containerAdd the new variable to this container.
    -
    -
    -
    Returns
    A pointer to the transformed variable
    - -

    Reimplemented in libdap::Sequence, libdap::Array, libdap::Grid, libdap::Structure, and libdap::Constructor.

    - -

    Definition at line 216 of file BaseType.cc.

    - -
    -
    - -

    ◆ type()

    - -
    -
    - - - - - -
    - - - - - - - -
    Type libdap::BaseType::type () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance.

    - -

    Definition at line 365 of file BaseType.cc.

    - -
    -
    - -

    ◆ type_name()

    - -
    -
    - - - - - -
    - - - - - - - -
    string libdap::BaseType::type_name () const
    -
    -virtualinherited
    -
    - -

    Returns the type of the class instance as a string.

    - -

    Definition at line 379 of file BaseType.cc.

    - -
    -
    - -

    ◆ val2buf()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    unsigned int libdap::Vector::val2buf (void * val,
    bool reuse = false 
    )
    -
    -virtual
    -
    - -

    Reads data into the Vector buffer.

    -

    Copies data into the class instance buffer. This function assumes that the input val points to memory which contains, in row major order, enough elements of the correct type to fill the array. For an array of a cardinal type the memory is simply copied in whole into the Vector buffer.

    -

    If the variable has already been constrained, this method will load only number of values/bytes specified by that constraint and will load them into the 'front' of the object's internal buffer. This is where serialize() expects to find the data.

    -

    For a Vector of Str (OPeNDAP Strings), this assumes val points to an array of C++ strings.

    -

    This method should not be used for Structure, Sequence or Grid.

    -
    Exceptions
    - - -
    InternalErrThrown if called for Structure, Sequence or Grid.
    -
    -
    -
    Returns
    The number of bytes used by the array.
    -
    Parameters
    - - - -
    valA pointer to the input data.
    reuseA boolean value, indicating whether the class internal data storage can be reused or not. If this argument is TRUE, the class buffer is assumed to be large enough to hold the incoming data, and it is not reallocated. If FALSE, new storage is allocated. If the internal buffer has not been allocated at all, this argument has no effect.
    -
    -
    - -

    Implements libdap::BaseType.

    - -

    Definition at line 1144 of file Vector.cc.

    - -
    -
    - -

    ◆ value() [1/3]

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::Vector::value (vector< string > & b) const
    -
    -virtual
    -
    - -

    Get a copy of the data held by this variable.

    - -

    Definition at line 1927 of file Vector.cc.

    - -
    -
    - -

    ◆ value() [2/3]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    void libdap::Vector::value (vector< unsigned int > * index,
    vector< string > & b 
    ) const
    -
    -virtual
    -
    - -

    Get a copy of the data held by this variable using the passed subsetIndex vector to identify which values to return.

    - -

    Definition at line 1875 of file Vector.cc.

    - -
    -
    - -

    ◆ value() [3/3]

    - -
    -
    - - - - - -
    - - - - - - - -
    void * libdap::Vector::value ()
    -
    -virtual
    -
    -

    Allocate memory and copy data into the new buffer. Return the new buffer's pointer. The caller must delete the storage.

    - -

    Definition at line 1935 of file Vector.cc.

    - -
    -
    - -

    ◆ var() [1/3]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::Vector::var (const string & n = "",
    bool exact = true,
    btp_stack * s = 0 
    )
    -
    -virtual
    -
    -

    Returns a copy of the template array element. If the Vector contains simple data types, the template will contain the value of the last vector element accessed with the Vector::var(int i) function, if any. If no such access has been made, or if the Vector contains compound data types, the value held by the template instance is undefined.

    -

    Note that the parameter exact_match is not used by this mfunc.

    -
    Parameters
    - - - - -
    nThe name of the variable to find.
    exactUnused.
    sPointer to a BaseType Pointer Stack. Use this stack to record the path to the variable. By default this pointer is null, in which case it is not used.
    -
    -
    -
    Returns
    A pointer to the BaseType if found, otherwise null.
    -
    See also
    Vector::var
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 433 of file Vector.cc.

    - -
    -
    - -

    ◆ var() [2/3]

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    BaseType * libdap::Vector::var (const string & n,
    btp_stack & s 
    )
    -
    -virtual
    -
    -

    This version of var(...) searches for name and returns a pointer to the BaseType object if found. It uses the same search algorithm as above when exact_match is false. In addition to returning a pointer to the variable, it pushes onto s a BaseType pointer to each constructor type that ultimately contains name.

    -
    Parameters
    - - - -
    nFind the variable whose name is name.
    sRecord the path to name.
    -
    -
    -
    Returns
    A pointer to the named variable.
    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 467 of file Vector.cc.

    - -
    -
    - -

    ◆ var() [3/3]

    - -
    -
    - - - - - -
    - - - - - - - - -
    BaseType * libdap::Vector::var (unsigned int i)
    -
    -virtual
    -
    -

    Returns a pointer to the specified Vector element. The return pointer will reference the element itself, so multiple calls to this method should save each value before making the next call.

    -
    Parameters
    - - -
    iThe index of the desired Vector element. Zero indicates the first element of the Vector.
    -
    -
    -
    Returns
    A pointer to a BaseType class instance containing the value of the indicated element. The BaseType pointer is locally maintained and should not be deleted or referenced. Extract the value right after the method returns.
    -
    See also
    BaseType::var
    - -

    Definition at line 490 of file Vector.cc.

    - -
    -
    - -

    ◆ vec_resize()

    - -
    -
    - - - - - - - - -
    void libdap::Vector::vec_resize (int l)
    -
    -

    Resizes a Vector. If the input length is greater than the current length of the Vector, new memory is allocated (the Vector moved if necessary), and the new entries are appended to the end of the array and padded with Null values. If the input length is shorter, the tail values are discarded.

    -
    Note
    This method is applicable to the compound types only.
    - -

    Definition at line 568 of file Vector.cc.

    - -
    -
    - -

    ◆ width()

    - -
    -
    - - - - - -
    - - - - - - - - -
    unsigned int libdap::Vector::width (bool constrained = false) const
    -
    -virtual
    -
    - -

    Returns the width of the data, in bytes.

    -

    Returns the number of bytes needed to hold the entire array. This is equal to length() (the number of elements in in the array) times the width of each element.

    - -

    Reimplemented from libdap::BaseType.

    - -

    Definition at line 536 of file Vector.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1Vector.js b/html/classlibdap_1_1Vector.js deleted file mode 100644 index 2be5ff50c..000000000 --- a/html/classlibdap_1_1Vector.js +++ /dev/null @@ -1,138 +0,0 @@ -var classlibdap_1_1Vector = -[ - [ "btp_stack", "classlibdap_1_1Vector.html#ae9c6e71855b90a0e552713011c9ab81f", null ], - [ "Vector", "classlibdap_1_1Vector.html#af6dc3e80b6398ecaa098b5c46df5376c", null ], - [ "Vector", "classlibdap_1_1Vector.html#a90baf84028f16afe1344943400fb79a7", null ], - [ "Vector", "classlibdap_1_1Vector.html#ae3a9cea6f164319908ed5b9cd35af668", null ], - [ "~Vector", "classlibdap_1_1Vector.html#a99efd5981bb8d00fc215a9762103a4d8", null ], - [ "add_var", "classlibdap_1_1Vector.html#a033417b3c3056fa77f1e32f62a0a2f3b", null ], - [ "add_var_nocopy", "classlibdap_1_1Vector.html#a2605aeda39e4e6c6fd5e3bc1636c19e3", null ], - [ "attributes", "classlibdap_1_1Vector.html#a97452f06d2188eb838399a709246b5e9", null ], - [ "buf2val", "classlibdap_1_1Vector.html#af20a56a72c3108b31418ebf01f779253", null ], - [ "check_semantics", "classlibdap_1_1Vector.html#afd220155b44708d85d0bb5aa2f756549", null ], - [ "clear_local_data", "classlibdap_1_1Vector.html#ac12023f8bf9ecc97998c3bb021ba2772", null ], - [ "compute_checksum", "classlibdap_1_1Vector.html#a9c61fcb646f1813e350549b6ddf48204", null ], - [ "d4_ops", "classlibdap_1_1Vector.html#a512a356f31ed6c4c1a368da0b054408a", null ], - [ "dataset", "classlibdap_1_1Vector.html#a47521ce321a17e6ce217870cb6a1a7aa", null ], - [ "deserialize", "classlibdap_1_1Vector.html#aba86cc0f3915d85e37f4b9e00ebfde7e", null ], - [ "deserialize", "classlibdap_1_1Vector.html#ad78d293754a1d78b90c86f8e33c22bec", null ], - [ "dump", "classlibdap_1_1Vector.html#a9dc0a17c575e0f1ffc0571731bb8de78", null ], - [ "element_count", "classlibdap_1_1Vector.html#ab78981c9e05e7d1dc24f913dbd2021d7", null ], - [ "FQN", "classlibdap_1_1Vector.html#a977cb954cc8f0d914d6f66ea0f48a9e3", null ], - [ "get_attr_table", "classlibdap_1_1Vector.html#a1fcd9537c67e3bf88964b2656ff5bac1", null ], - [ "get_buf", "classlibdap_1_1Vector.html#a285ee3b0cc0adf6a54ea388ea71a69fc", null ], - [ "get_compound_buf", "classlibdap_1_1Vector.html#ad6d99474ab74d8b9752e4e77b3350121", null ], - [ "get_parent", "classlibdap_1_1Vector.html#a3459cdaa239c33ce111ef360d8dc3017", null ], - [ "get_str", "classlibdap_1_1Vector.html#ab53f2eb57de3f0f99961f6ab6f470638", null ], - [ "get_value_capacity", "classlibdap_1_1Vector.html#a16b89988deda0413d1eb2cdc615a38df", null ], - [ "intern_data", "classlibdap_1_1Vector.html#a6b5ee8fec4de3700e2564a64ef4f6d76", null ], - [ "intern_data", "classlibdap_1_1Vector.html#abe772a228c62c7960bf2eb92be77732f", null ], - [ "is_constructor_type", "classlibdap_1_1Vector.html#a8b8490e0047c6da52945699a132008ea", null ], - [ "is_dap4", "classlibdap_1_1Vector.html#a7f6835cb5e5589ab5dad3fb4813d3bea", null ], - [ "is_in_selection", "classlibdap_1_1Vector.html#ae302ab2ec26e9fc5b575bf5d3d09aa5c", null ], - [ "is_simple_type", "classlibdap_1_1Vector.html#aae57e5b270b3a015d40c8db10b9b5549", null ], - [ "is_vector_type", "classlibdap_1_1Vector.html#a7107c76dbcab71015141142383b6d022", null ], - [ "length", "classlibdap_1_1Vector.html#a2476a541aad16bedc64d99805fcc9c0c", null ], - [ "m_create_cardinal_data_buffer_for_type", "classlibdap_1_1Vector.html#af175806a557f627a0ee70c5f05ed7c5c", null ], - [ "m_delete_cardinal_data_buffer", "classlibdap_1_1Vector.html#ad2e46d6d52fcb609658baf5ac1f9892e", null ], - [ "m_duplicate", "classlibdap_1_1Vector.html#acffc202435cee93a54af98cd471beb98", null ], - [ "m_duplicate", "classlibdap_1_1Vector.html#a0c55b826c8c5dfe7a454dc670e859a41", null ], - [ "m_is_cardinal_type", "classlibdap_1_1Vector.html#ac00c2a2ebd65c86022b82dfb1a32485c", null ], - [ "m_set_cardinal_values_internal", "classlibdap_1_1Vector.html#a1fb2c5dc539e55203fc61845089c67e8", null ], - [ "name", "classlibdap_1_1Vector.html#a24c5d67823b3cff7f4245a993072a142", null ], - [ "operator=", "classlibdap_1_1Vector.html#a2f1a859dad81b2c10f944e9890225a44", null ], - [ "ops", "classlibdap_1_1Vector.html#a8a0000be2a244e3e07abda3020af8800", null ], - [ "print_dap4", "classlibdap_1_1Vector.html#afcddbe441380b95c894510c02980b163", null ], - [ "print_decl", "classlibdap_1_1Vector.html#a2d799fad93255d7f2b803562ae7a5784", null ], - [ "print_decl", "classlibdap_1_1Vector.html#afd744b0ddeb04e7b173c9e83423ec572", null ], - [ "print_val", "classlibdap_1_1Vector.html#afb5e13838a599ec0efe2adbb2ae18f47", null ], - [ "print_val", "classlibdap_1_1Vector.html#a94edd5b610afb1432144158740710488", null ], - [ "print_xml", "classlibdap_1_1Vector.html#a825820edee179550cfde3dfd4d274f2a", null ], - [ "print_xml", "classlibdap_1_1Vector.html#a8bd2c7682edd48c64b210bdf247bdef7", null ], - [ "print_xml_writer", "classlibdap_1_1Vector.html#a11554ff931528b243e9af8173d205b44", null ], - [ "prototype", "classlibdap_1_1Vector.html#a31fb64d322e4db4892ceffa54a3e427b", null ], - [ "ptr_duplicate", "classlibdap_1_1Vector.html#a08158ed75b297c395e2f665958be0ffe", null ], - [ "read", "classlibdap_1_1Vector.html#a1da003c53f2e663223f603ab3fbd7c8e", null ], - [ "read_p", "classlibdap_1_1Vector.html#a38ff819a432217c55db2e9071928d20c", null ], - [ "reserve_value_capacity", "classlibdap_1_1Vector.html#aaaa7c0f36266ef3df9f4fb90de220867", null ], - [ "reserve_value_capacity", "classlibdap_1_1Vector.html#adade15ffa55c59f6205e1c3c9ea78a35", null ], - [ "send_p", "classlibdap_1_1Vector.html#a980c0013817836aa77ef74aeec7fb192", null ], - [ "serialize", "classlibdap_1_1Vector.html#a993d46232faadb5914cc0519d013e9b2", null ], - [ "serialize", "classlibdap_1_1Vector.html#af478e3d5cbb3235081fe8daa6d6629a9", null ], - [ "set_attr_table", "classlibdap_1_1Vector.html#a572a1d76a75981abac83a4241e90c0fa", null ], - [ "set_attributes", "classlibdap_1_1Vector.html#ad4dda4cf43dca838d3de183b8e01cd09", null ], - [ "set_attributes_nocopy", "classlibdap_1_1Vector.html#afd0e5f87d19020f560d5c1ff8dd4d6a3", null ], - [ "set_in_selection", "classlibdap_1_1Vector.html#a2bc036248cdaf1affac464170f32ad30", null ], - [ "set_is_dap4", "classlibdap_1_1Vector.html#abca9ddaa9a1ada8447cbe7193e8e288a", null ], - [ "set_length", "classlibdap_1_1Vector.html#a05a61e24fd295934dfc3c37c9f55ca57", null ], - [ "set_name", "classlibdap_1_1Vector.html#aacfca48c7db65e3a2c3c94734dee8c36", null ], - [ "set_parent", "classlibdap_1_1Vector.html#a5b6a39f6ce6594fa74f3fc899ac9a966", null ], - [ "set_read_p", "classlibdap_1_1Vector.html#a58712de8871e28a48fdc95e72a09df71", null ], - [ "set_send_p", "classlibdap_1_1Vector.html#a64815467570490a4a6cddc89f09a2413", null ], - [ "set_synthesized_p", "classlibdap_1_1Vector.html#a595cb4059cff24f801a1b6da79bd2f9e", null ], - [ "set_type", "classlibdap_1_1Vector.html#af74f8d1ef57c9fcca46f620f75d175a3", null ], - [ "set_value", "classlibdap_1_1Vector.html#ac6ffab2a00584c2963c0d521ad4028b5", null ], - [ "set_value", "classlibdap_1_1Vector.html#af0c29cba5f93a8571754f2324a6fc170", null ], - [ "set_value", "classlibdap_1_1Vector.html#a040fe60aa43a3beecd078c3c7bb4f42f", null ], - [ "set_value", "classlibdap_1_1Vector.html#ab6d2f9bc8fdbb433ddb3d2ceb995ac7d", null ], - [ "set_value", "classlibdap_1_1Vector.html#a8c122828120daf1ff5e850e8f7b9ce89", null ], - [ "set_value", "classlibdap_1_1Vector.html#a565daf922503ff615dac4c6cdb14c1ea", null ], - [ "set_value", "classlibdap_1_1Vector.html#af264f7a752cc501bfbccee813733bde3", null ], - [ "set_value", "classlibdap_1_1Vector.html#acfe7846fc2aeb383b9b6263f09c92f63", null ], - [ "set_value", "classlibdap_1_1Vector.html#a0ba340343eda47f274185ee7a3e6761e", null ], - [ "set_value", "classlibdap_1_1Vector.html#a5d20f40b94b9d901f8124d7d54ed423f", null ], - [ "set_value", "classlibdap_1_1Vector.html#abd6e429e907214c593b6fb37f97511ee", null ], - [ "set_value", "classlibdap_1_1Vector.html#ac4ba1b5ff3e1283a3ead8e5ef2b3be99", null ], - [ "set_value", "classlibdap_1_1Vector.html#a20e3ce67dddefd2e941833f84d8fb129", null ], - [ "set_value", "classlibdap_1_1Vector.html#a2c1c39cad25264854e751b67478c36ac", null ], - [ "set_value", "classlibdap_1_1Vector.html#ae18e02e571fec26f5ee7e6fe03b9ccf6", null ], - [ "set_value", "classlibdap_1_1Vector.html#a6479561bdefac3ab843d09fe2a8467c0", null ], - [ "set_value", "classlibdap_1_1Vector.html#aa73493691f34dc6a871a5557b147ba4d", null ], - [ "set_value", "classlibdap_1_1Vector.html#abaa596cea00692617d5af9cb89eab60c", null ], - [ "set_value", "classlibdap_1_1Vector.html#a1f18c590ea763d25de3595a7b96cfad2", null ], - [ "set_value", "classlibdap_1_1Vector.html#a8d818139d7bd98c4d6e16494e4414ea9", null ], - [ "set_value", "classlibdap_1_1Vector.html#a9f4bfe3aba7506d5e8d3d5182a518359", null ], - [ "set_value", "classlibdap_1_1Vector.html#a068afd2353ad32f904361253e1b6e807", null ], - [ "set_value_slice_from_row_major_vector", "classlibdap_1_1Vector.html#a559d8ca948ca40f179e4e3da0bfdfdc4", null ], - [ "set_vec", "classlibdap_1_1Vector.html#a8bf6e565dcb2eab1f3f7037518a9acb3", null ], - [ "set_vec_nocopy", "classlibdap_1_1Vector.html#a175f1a51686798061c2147f2eccde33a", null ], - [ "synthesized_p", "classlibdap_1_1Vector.html#ae64e677da27249473cdba0b60cdbb90a", null ], - [ "toString", "classlibdap_1_1Vector.html#a701eb3361f5b5628329ece019cd34519", null ], - [ "transfer_attributes", "classlibdap_1_1Vector.html#add8e836c622042a339152a6c31e5bdfb", null ], - [ "transform_to_dap2", "classlibdap_1_1Vector.html#affec8a11e9cc035d4b1e8fb9a87b2072", null ], - [ "transform_to_dap4", "classlibdap_1_1Vector.html#adb03e2e1e40c3c888577c4666831a949", null ], - [ "type", "classlibdap_1_1Vector.html#af8e803b20a7a7dc5f2ef351d7fac4a56", null ], - [ "type_name", "classlibdap_1_1Vector.html#a18a42c8ec35cb5b15cd651a4152f8a2c", null ], - [ "val2buf", "classlibdap_1_1Vector.html#a96ecf84f2798065878755d9a9014ee69", null ], - [ "value", "classlibdap_1_1Vector.html#a624bc74ea64985cdf4f9980809ff3892", null ], - [ "value", "classlibdap_1_1Vector.html#a66fca662d9754b45b0a386bf08b869d2", null ], - [ "value", "classlibdap_1_1Vector.html#a1a24b162aa214f95b0f82a466573cb3e", null ], - [ "value", "classlibdap_1_1Vector.html#a3ad2e9a815fd5b6809da0d7f09de410b", null ], - [ "value", "classlibdap_1_1Vector.html#ac447641e95e7e000c83aa351f23c3a48", null ], - [ "value", "classlibdap_1_1Vector.html#ab23253ee97cc725ba4d87063464ebfaf", null ], - [ "value", "classlibdap_1_1Vector.html#a335127b963207a457c362fc6a1a73523", null ], - [ "value", "classlibdap_1_1Vector.html#a7f834fcdcaf597e35d732ddb5c7cc5a4", null ], - [ "value", "classlibdap_1_1Vector.html#ab72e65b9578f8743d3c180be7de413c4", null ], - [ "value", "classlibdap_1_1Vector.html#a0e76df3852b26e453ed75e24623f968a", null ], - [ "value", "classlibdap_1_1Vector.html#a0725f0e3304f9ad00bf90a19b5650368", null ], - [ "value", "classlibdap_1_1Vector.html#a279e96b1bac813a30e361d6db1d14932", null ], - [ "value", "classlibdap_1_1Vector.html#a675d1fea0d560bca688809dd4792f414", null ], - [ "value", "classlibdap_1_1Vector.html#a5c5f7e24624d3fdf37c60396c8cb5b8b", null ], - [ "value", "classlibdap_1_1Vector.html#af27644af35f69c4c7920bbc481d87f9f", null ], - [ "value", "classlibdap_1_1Vector.html#abc69c8a1b1eb45f7a91186f247c10f10", null ], - [ "value", "classlibdap_1_1Vector.html#aa599da1cff6457453c2b6cb2ea1b3b7c", null ], - [ "value", "classlibdap_1_1Vector.html#ae15909a6fd5e1b2bedf3cb09de41801c", null ], - [ "value", "classlibdap_1_1Vector.html#a707c5198cef8c3753565301ada3db0e7", null ], - [ "value", "classlibdap_1_1Vector.html#a145e75e2d47b6c918162e2c556ab2faa", null ], - [ "value", "classlibdap_1_1Vector.html#a8470e7dc052e327237457ffb50f4660b", null ], - [ "value", "classlibdap_1_1Vector.html#af9fd1c331a511989ac2bf4a0ad5b27da", null ], - [ "value", "classlibdap_1_1Vector.html#aca5000630369cb4217827c2f136afec0", null ], - [ "var", "classlibdap_1_1Vector.html#aa5ccb30d1f27ae587f35216b859feec7", null ], - [ "var", "classlibdap_1_1Vector.html#ac07a950727d2ac58934ba4cc03206c8d", null ], - [ "var", "classlibdap_1_1Vector.html#adf286762e63295675850c41cedf33370", null ], - [ "vec_resize", "classlibdap_1_1Vector.html#ad180a87244b0b6f32b47711a4ae0330e", null ], - [ "width", "classlibdap_1_1Vector.html#a8fe5d7b06814653b6cf5408b2a8671db", null ], - [ "MarshallerTest", "classlibdap_1_1Vector.html#a1fff161da8726dcea8f5af4428342f73", null ], - [ "d_in_selection", "classlibdap_1_1Vector.html#a949a89714965d7afdcd1e3edc8b7f0d4", null ], - [ "d_is_synthesized", "classlibdap_1_1Vector.html#a629e97e8eb7d285b54c9af8c1ec9a29a", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1Vector__inherit__graph.map b/html/classlibdap_1_1Vector__inherit__graph.map deleted file mode 100644 index 5be4ec3c1..000000000 --- a/html/classlibdap_1_1Vector__inherit__graph.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/html/classlibdap_1_1Vector__inherit__graph.md5 b/html/classlibdap_1_1Vector__inherit__graph.md5 deleted file mode 100644 index 4fe29e853..000000000 --- a/html/classlibdap_1_1Vector__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -b73a72ab1bb6422f58e82beb960fccab \ No newline at end of file diff --git a/html/classlibdap_1_1Vector__inherit__graph.png b/html/classlibdap_1_1Vector__inherit__graph.png deleted file mode 100644 index b3e6349e15ba3d00c31e23157f3fd4ffd4703ce0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99392 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

    Z#z8tZ*Vw3*Iy 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�r;8z|C6zkn(kWpxdkAL}=yhQU;sbp3VEGZ4d= z??5n6-VA62@!vVqoLoQlOAXstRJKBc4A!N?tOI?{*UFwBr#{`)M#f$1p}Hwb;`O~p5#^sPv%=jcZ%C&~1=qd`=Py-r+bN$U zB3$56FF8vYW1Q7QQeq1FYSTDn9!Ipr`H40>{ePUlS{F@eiDZrpZi6%FL1Aq*V)%O* z_;rCXM^s@kJ=T#@=*-aTZ|FuJ&R3GE&A6b&9OhGF+z*bp|D6T!J7EhYlYdyPSSCRD z#%*ZG)sJ7aCq~!&sriTSSIK&Blfuf3oLr>;=;QicKE#$NN0p198>qInn-W$=BcqF3B|~kI z`{6B~I`O$0A5)bjGkjnD49M}+oGpCen=4#OSX?u0lpdN1g1q3`a{C>EAZHd>714gj z84fP2=fb9U6j7xb8jB`87E8QT&Xy3sU4?41?UwSq;A{~J_mkrd*P+!g-f*c>%uV$= zjph1glRpsUbtWQ;?LNTTYY5PK_*^BpAtqJ^$%vLWYP zj&P|%ZU3jZkGLHu`dAf;ipPyVJTxdfv?nLj3; zL##cnkr20?nZwLS9pOOWTpWC$kxy5T;#dZSUznp~A*N{^b@FO283b__$O;vEf6;O7 z<+f`-HCHihHfB}IEZKURpRhNUS5Y{w*N#M-zpLOX%Nqc zcEK#XpdX*t#W$l$3H8nf{&*zrNoIt0Rk zbFe&5#Lg6KSC=;99hL1*&6U*fk$Xvr1H_W9U4Vd# z;?BME5we^~JwBXrZ0uV(ML44!EAyA0iKer_{p`3hd};4)697J!fD6m)7eYoo**}U8 zNgj-fK~e;{KAaYNMj+hGeObZFG1f2H!FZgA{k8i|20@FHYKePw!CiThgoJ2? z=dE7Rh9ldBtjJCBl%&ku6c7*{3~=%0I17qPJmvTn;uC(<4R>(?JQB}>DflhVx$dM< z#3Q+f%DDV*9|bR?Nt%Bp-<7)gy1c&;ad?(c)c6Txe)x@8KWq6-ZSlapbwTG9S6}J8 z&gSuv7t71ctw~D{Al8{3cP5O^fRtc1tQ7U6P@ylBOA=AAuBr_yMTAg+6-7=A-kut` zhw}4)xCG_wu$oQM`na^=QeB*)F?%^6gGb-PKjR0tq|M(gfY;*r6q25+SbM%h9C6KX zo?(b+dpjrl5lE9J%8J!I_p9me*-a&6!h*{YpCE=^uTpDUfnV?g zc+IX}^37XA8d8-S_03o{y}n&ayYz(Woy|ia6s@QjAE?($Dq7uC`(eUEJ7#vQpY|z= zWB8e;oT^Gqf=j65J#repHR@u^I#1Fcf7ADhL7CQROg!4}*nkGfQbYu&fDWaDehC>} z_G{1H6~=jv@v8)J+jDE5HX?4%A?zdKJ(pppl*W+U0inlKB~f-LXLw6t?%U+O2GHC- z62xyp|G2EC{@P#v_rfaoxP0goCo`stMxAJ`1frh_vsNp3*cjO zz-w+hC-AfNCjob?K74-RGo_5y0uMTZ3Ew}Y*x0aD6(?6GfiqV78=5f+pGie|BB>%2 zGEE}JRfa4oEEnHs%{v^7gK@>$+hJJ)z_JEH$N%~2(@4;;}}1p=`w{t4hr z%7bzu^~sVbzZdo_E9{%Bq!_8{{@5L1S-l=qV+i?;g=xX6ro#WxCVRXAxLL3JWjxv+6srvXi&&$~n67e>|F2(1)HdR zdIwHTVP=PY@HYy@p!SM?PP07YXRUtAr+>o{S>y6x)a_sH?d)Kcj}TZ%FMPT7r5Bgv za!O#6Yk!^uuKm{9He7WAvS5vJ7_bh_3O;`3o-`36;9{U;29c_p=QDeoYUq74|&d4<2Hn@&9(a+uZ3H(%_S9^)Qq3so< zDm{;~PYL%nqSb=WG>qT7aQ>sSR5r)F7h&x{F7jFHt6 z6S{!k>YwYY{rKliknw}0_8+!3s@ELYIQ}}IJS5(ZM(eSbl%g^Ij z#QV)`g0I>v=h<;XYvy+0*+0!ku1Y?X_iVVg9>w&0yMqed7VW6^q7?t+i3lHNFX!FyWDLz4L__)~vo@ku}j?qfIZ{>$8{~+4-QD1gEQ% zI#X~60Tab<8CkIVc$-t9x zvCsbhsQaq0ID%$vU~zZXAi>=o!r}yX2@+fvXCb(IAb4A*5L|-01PSi$&OdzL zbFTiYb9pXj>8Y-%neKY4>g^(+qCs#Kp{?O}+L&Y9tHEeD9xW_7^el z=ewPeI|L#l?AD7>5lv2-{XVgqCA_78mnZcABG-WFQuWSmED2Gt!OQbadx+bZn1H5# ziG0t$-Aze)gr^zZ4;Yl*tFW2_0{{GYZZD@)NA8ThmI?fB*CMjRRE2%EGpvPK6f~9$ zUgYv{JkyTbZdO*W7oD-TGws=Lsm9mhKN(=2_w$>V7^RwojbUtZew?XuUuu)dPXfb&0Zjo1GYePOHe z^IXyqu5Qhvavh+7Wow@NbhAw4P&dNgIVy5Oe%QF^Bs*}~4&2Ro+somP$xwYB}vf3t8)qKzbLBj^g>(_U*;vh`_&!KZv>}K9-yg z^Qy@sJ-_z9Q@xed)iVn-&GFer!FKp|v*OF)eb!3^Vup2J_LxI3bZ%=<@SQXE!g#)_ z4zQgL6m|Z&?Ae*)du)3i{{6a-%o#p{%HR8REA0bfmSdy-X)n=-^dE`VIVImDcJo5u zRzOcX5-%wHE8ZKcfc9vfOOSq;nQA*NAE^?AXTba-?TdJ-qBvhaT`$1G)!wehkimWf z7ZFJ86(tWx{C>Va2yy(mJi9wuUo;*kuwny$PW5sdG4W#k6(XCA_%Zr2ps z%Ffz;O0rmDt}bNq7mmhx^G;Ixiq0|`DDknB81#};S{6ZzRK(MP^Pk@Z!VpKh-|22) z0wR&IyShsk%3ETo*Y7N(FhN}S7Wh5(G|8HoS{mAeBL}~e8{p4*R6m9IIwxm0IuG$x ziPySnSke>Koa6ejZ~MaMv)P9wu&3t{<5qdp1w zmfUUF3?7dn$0^|P_6)X5DW)GXr6O>IFFQGJQy8ZlGji7xg$D`^u}-nc2zb88%^LEU z)qlG?Rg!?C;pCD_DPz0Z5!7i{URj(bJ5Hjz8%tR!!p16taPY4^pyu$$5F&R2MaA#? z{m#dWF=u9)6pQ2L9ZddtQxIO-jT#NGDIbLXOm%)Z`iTX-J|wx^pBd8H1-{9~7}C0v z-w&Cs-&;Q7Rt~7@#%mR+L3$;rQ|h(B&R~k&#h=yBmhnTZ7kK0d_9FwIX+u!(7~s)3 zT5E7F^{ulTc*HBesi42{z;^hDCGx>0KP>oLnu)Na3y#Y)Art|5nL?^zhTwQACJ&lO zlvRqK_?`Z%Y9{X=hXet*Yx&L$M<%VXvz8r;oIV;DcrpJGX${ z!!gw6dchiN*1(=^%Ak;nb{>5I+dcA@D&P?!iI$Mq{_^|)^cobU*P-(lZ)_XX`JT_y+S60dYq~LcK#J3tH~J#k2BR6f=B_BPa%zrU<}wL| z(4S9K%mgXO(w{P@EzooNzi*^2`&Vg?ArwEPpzo_DKT0LW(Bku}yo8_ur9sxv;K3hfM=uK5OeO)3VY5e@W{2FPk22A<`j^^I{L2Cfc4 zKmWlWx4aoaYO7hbjB7S%`6q?kf0=^V%uhv|hL@SQdsKFuNFTd)MNV(n?+BN-BHOFz z0Mwv+UUx6u3^==ESD#HzVVDSG!ofCw-q}+xF!odfRz2E;<(u@RG4c$2qQ`Q4-4m8Tf z_Rx}3K>nPWDHh`XO0SA3`Sa)QRRGiH{P!nnSI)nz--J$DFW?%lF&AT_+eAuopmud( z-V1k@O5jG9uTCv{a9<6oey%_*tvlN}KuDRt!R;IIA}xoy&S^&();TEi6^#z&4}ECt zP1JgjUV;$7k%$xX*?n1vu08a-z4^8y*$q!&W~RHrdH?)yGLn;S_5!J<6zP}{u5-4* z|ExR0A@aVu@vmK{GSA3I{*`ZhRANx~>B47!pkSyb_44rV#i?;Eo`ooD5|cuhmzdKu zaAD?lH3aJzpA-J^ux<s%N`>_ z682TiRxU$qKjDiG%7lc}O7rUKxVmuUfEx-ITCzUvIXA5Vja=9W;H48!fL&&_DEU1% z+a>_4Ej{hFB@7_Pv@UZW0@})ukvD+|>rN!~byKIEuK$Y-r<4#JILO{@wRn0lCh>36 zI?dP<<@vHiBEwxFYdICb;Ipgq76}+S2DbDUOTSKj+k0luru_i%LGJu1)Bd%v8)U0Ny%_6q4bfU%gg*N|X*-U%iYd z&I{niIrj&@x{WT}4X(8LBGrwF`{r%!K6dBwVj#I18t=}I3GI+;<~g@N&5}E}>@m2> z{11xVwyW2v4w~-)0iB2in#3Q_zPAfCs4gi!q=YPMmUm!n*xrf}F z<6EdPv@o<%wo(n*y;p;ff;CmeW@O|}eghz5L@ZRy;lTZuw7O7tBXh2Gj*qfERSHr- zdoB3@+b%M8D$?%x5C<0Yau??nbZtW$7p!>Xo}>r_H)45$NB9?6iMh;W#_OzA0Y@P^ zj?ObY{!QEOr0qsoX*gg?RpL|LSyQ-)&lW-9`$unrmtTJvvfxW{{h>AY`{h})x-2Ll zB?EIUrj;{b7P2cQ<_6o6Y<@}bJB&9kic5xo551hE%8CU^d@3X5;RmK9{X`&^asjND z<_iNu3zf`SP17&M^s@3R0BA8CPUp&oUK`j~T2|qRLL&~Ue!Zu{xCO#Dlw$4Tt~_hn zU0d53ZC$>uDE-9fVi`)CS{zrzWMpytZx0-8my-<6*OKY3T>Q0${wn{dvO+-3hL^0p zd3-V_R{bLGMg{?hX{DHY+%?|g1;-6@CbC{8mMPl7z<&R)HJFgt_%0OhJ@PJ-ynQ!@ zfb!G5NgI>|4V6ux@)z#O%aL<{{mK)tq%&z-9#8yley!$(U{2a(_up-2jiDFs8N1`6 zdBiHl?{5GLW1N=G5VX0X4dCYw10Q;q%sXy?Nsy2+LZ32&DC=VDi-7MrRR|03tE%`N z-789iyYvnHi7bt=mVK#Mq~I(~X*{F!FD&|cErQAu^E*fLCNADT$`3Y10jz1DNj-o1 z)cUE-%Kk-X_6G1A(bPT87d5XhHd`C+#)wtI-ZR$e6xu28P8Q@2cXwaZLrKBC>To*P z^qV~kW)T#z6uGF1W5ERdjZ^l*&-0?>Hj#Nm#*db1#B%5o0%+5k#BDQ4iQN`45JE^g0@5KWz9z8f_C>@b zw>jKgHI?Kze~*lYJs=PBK^YGAoRr@o9S7!|q9n^gwSQLC)CndZBn*WD@^Cu|eRBT5z*6`KK;8ikR^ zjCQdr^<#x>aL3#$Acxh<%X0p`Fn@%j5otdi-u`stj0pY%pOMMBky98PSp3nGFsQiJ zXDy6q7>A}f0tOoihp2T7P}aGs%w@Bmfixbn(YNrE8Dau#jcfAdg+x`KiLWGOGuj#>6au@%O z4QB}vFQe;IcDT*qORk}_j$Bq#{U4rWgfVNF_1-R%pubRXU7r}Z2V6_#v7 z7?Tz=a+~oQLEyr!SfEfLY1#MCnyI>R3sVnuxWA^lf^Gly`Y2NuY9S56KT!pYC zj2BL9(?6*yv^t3&UB^GkE^z9(%zSGfCAbWIil7Y?&n**+RO z&Dacz^COEwxnSGU<&bSE-y&C0O3Agk%#dGtxciXp_B|BjfHWQtKD_+Zb5wgr9Jrp{ z!7#Z5!0|ZxaQXnn`t5X+>ZWy6&3xie%1@UQRh`I-*Ia053 zSp5pDJ7P(|t9t2ve}ULby6|ydx1F0!&;nj-h&4uE8qZ-e>svWHtL5TroR?lI-%X|L zGHl9S7@2`?ZcAB72xX@FYC#D%H~JBSCsT1VBSS0o+7ZYPXx7J)j!}_~1u@Rh|D2(> zpEzzgV6PK?d*Ie%4Y^R_Xq&dpvEav9PTupp)Iu~&-#W(zft5WKl_Pj0yC3CZ{DEL` z|HJdVG&!U3c#43soJHM;G%{CRM0#)fX-6`Vy@)Nu)^V?ope~8Qm_fUMQ0hYTW#a0j ze(F7gkg}(q?D&irkbXlYxa4KuGsUW8V1}vWs^U@;%Nt_&%O?u3;~2BYwiwB~-2h#lq=Xfx0^4zIv}mZHpy{-*21&Zgoi zpzc_M3_5_@6+8SBSWZ3p&DBgl@HIez4}m8Owig-QL#Y3eflMJ$zoI-p4^J2xyGVA0--Xv9J@u3WXshBjupJ5}F`YE_V8-9pBRS1IaZ$PAwX`;@ik z;uW6Q8XAAp3^_HGRd+AHRhLzq;+E*`KQiHiAMeREVVWG!rbQSwq&naLF_!c_=)ti2OVG#sxB zY^lHXJb3zRU!Ac?eT*$?SdC~+0WPIwW$*YJ`GLTTK%7muR7w<@KUo?euZ3U1i_X2L zOTX#LL?&3Ys714ET`drACo{SPh@ zJKuTHBNdcl>>$3)$6RiRorz(k;IUyph}t>#WTpV#fXDTJr%X^aH@cxE?OM>we)yK+3eT z(rShsj89!AV12gk&{d_`p{O`kr`a*c&T)0ZL;Kd5_)gNSEZtm46e! zs&rVuD&2P6?uyFrqzc&Q0OK=`t%dX^f=68&7}GrUGiH>}aP0g>8M*cd`HAvhN`$zb z-~_aKpESuBb}OKrJ;buezSB9mqJ{SC%hnk^`PPg{-nw7ooq;?abD?oyi7}v#JJ}w;%sZ{czQ?C_nAt*nyW?C-vR)*cuyze&&SUkO+;F#%!nNooE*BD>~hLU{Zs+1 zkf#pm5J721{V^2Q^i{JV+Zv{WuNlP**!XoWL>Pv-`S(fZ5DW?Y`o1b!IdX{1 zTSJ#X_j$7j1lG~WOtItGrOmftjk~sz#!c3sue}lNmy=3y&#{$;Q48bhg|Z}ug2_C} zbMKJ3E3v7ft+^1+C-Mb3bQyvlSE;rH+V51DY36uq>u6=*4K%-^OF?|{fmTUcbj+;M zp=82Vi8!2rma$~i4(Au}O`OU5WAWWKF>`FJ)cGKugk~aXC9WIPao8n_(9$X{2~bJb$=H z!T-&({ctU3}-XgdEEZw_Qa9DgQhV{q58!K(XHVlG+?Y3h5lqXF$G$^53T8j&eVSz8= zniQ(WjYA_fOWl=4o$uE-RClX-q_^1WCRH{VH1POJaNC_+6iy4gN2RpOx378S8s2(O zK^SSr0^PuZ^R56h%hlgXr8r-LP?#<)VXTk)5N)R>>o>e(O$!x+V9m$lQ(_3SO~MsJ z_Z8?r9v1b8{lb}esPud+li}O`>Xfk{4Y$K-P`%gUSkN16yPLHey1TTS?6)cSMrE4J z-OZ!DFBpZB8yRjNng0V6;nLvB^_#7R`f2`~scu>Ano0uFez5|%x^u3n$NWn{C+t;Ly8Ebrz=Y;JqY6DDD8;C0< zwtZXlOvVoZE3h1;fty*K3}RWBKaQG?g#@8c9xYbpb`A0b+h!7Hn9}YIj#&=Eit)@T z?8F=~#Jsh+t;K#g{&n&`h3^_|WSxD?vmwHfVjfIdXa9Ye*Q_WUMVJtG4w1Z%%0Pw{ z*(?;h_giOO1GX)9H}SQ}adQsrCB>s|Xbs(!U456HszWdld|KD~IV(?LIxo#|jNm6Y zHC=6HEjbRjw$fNDSJ37go-cZD(zkk|754x!C|%W*ZhVrPK8(XW&)&0T#!Sj4Sf*_8YK=EV8Z+Ddq@ zONvQ)IFY-#b6SXsIKMDSs{T7N9U=VHmie>%SvNe6<|#FNXFp6B*rwE>emxI60+WI? z@C0^Lv3wvvfw2d_nqOTK%$<+$Jz0S^Om6o=z3MWMd9@W~fc-A4VEz0;(Ssa zHu9gw#>V$*glxUg08i3l}5&X|y-f)+F(H`)@Y%?mkYYyKPB37-z?#Y>7lYo*( zz9a*$!h9HOAJx(d4~~9Rdz?wtKo_b2soid>y7qo+i7|D-CsFD5--(VEghNx=$py>a ztAjESl;YItb_1PA=h>+Up3+mcSr&+G5W0rA&vW;>+@^*!~| zT3X1)223$5ZADFHfN-q1xF?EBAZD;SSbV1#i<)l(9tHmE=8x8RLi{%JPQ3CcFf$;Bs(qQEyPRaKfd84K`f=wI>UbO;<0cj@OcDc@Slk8R6-|;EaPH zwQx)K@6*z+;Or=35k&9g{b#}&UasG$_IrF-z~d|zSTnW0IT+`|d0#d0Q|f5pJDR*O z;lqzz*iV!*f!^ue<4POX%p*xu0_=O{x=097nbJAL_#t96t5XQ&$SE0$alIkjrk`Ln zU{G=BXyj%ixbu_`kiy+1ExO34`|FSOGJyz#GI@kf7aB`4K(^Mj5zpg>d&)9=WRhOq z#!N%7d@|^fkeKzF0rIrR#eF-+CT(9lo+ShVo;FT)FDEz?u(J^cQ9qxGlna zQ*p_~D(H%P>hAfG&vF^(dDwgu20DYv2cy(;^yjklw33Z1VmX#Dv83?5y&lF#wWXol znm#~VSlqS&q!?+ezf@URcnBkw1gc*ws0_uudySDiAu>rH8IWeG4vi zY~1>;@2#UH?usQFGbrz+7$H@4v|bqbgD2h$js>l(Tr70OL^+2ZLx8=maTC;V0aU!* zUYzC|0P4?`ey95AMj1O7*_%T!uEm!E7FD*pkbsJ6@X<$fZPgB=)JHz$aoZqb(dN*M zM5!+#hIajRbMmednDV_aEJNt@Z0hqxD0`f%!-}GK2ynDOQ(ZH^)%GSY*|UV5f=JiT zR%|_WjVJ=F&gcah%Z~Q;Jk_RFSvq29FZO>7Gp$i)CN2V7Y+zx`YJcPgQFNjChe+WS z3+Vjjbm>}TDds%f9X4OD3SxpBwky-+TXP46^1=CXSHA5E&q&B-s|mA!nD(h7Ij3Wv z2@UkSb*e*Ff6yUX*eAdRsq5>1jLT7e=2Y145IoN2g@dp^@v5$d*r-5S;hj4>LYwD8 zh)!`X*m{%&)Q}O2^_LIM$lY-KI3hC~2E$J`AbFpGttNiCSx1d%%pA165h5A-2f4ws z-&E?>1$|eq2Q5810kFYlSYkZRqNogjr0@(y))6rmdFx8iTWnI~hZw5vsM!UhbyzWt ztV-5$`hz+mWBR!b!~^YCU13}&V(8m=Fc{;bF*#PTtn^oc76@7;U@1#|#n^srQ;F|p z!WgXAA76QkqrVG@O64V02}6ZynBh-@(WLF|eie1Mh6%+J!mdjoxZ1WH+J^37EDBX3 z@TBgBq?4XK6!2vBAf*=#b)^@-HPLAk#55}Qi5BL@!a;!BAUO}21f!llU1d}h3XR%K_`8=G+Im%xwt$ZF#qvy25PjFyC z32xJr;>g0RJ)cwM{~*fs1`YB0Pvdwnp~4ehq2Fw*knA|cTie>+QFge%>9hRgL`vY>oHxCx;eiD>4B!5ve z{!%*79ge|6$TCf26|sh(gJa;0SX{r2{XT}+1rMnq1U1^Dm=KP&Pq3SzPo?yITyZhT z!%Qql$j?Pwk*%ji(SUK*H;M3GSlS%#r1LxWH6{@`*q~m^Y?WJNq{eMJjuTr?&*;Hq zNkpAbjmzlMg8zzGf>J^)EHfe+$2qoWfwVDDUJL(sY12_&o7DU`c9GL$ZHPDxotOXG9efz6_p_)3HeI4EyApKP1LSMoQdrr06`q${6!GcT)3TCMm5SK z0@6VfK|aabYuA)#eI~1oKZng)0jm&dQohoS?Sg1)W;IaczVt$H+w*A~vs5x?e<&y% z1^U%4h!YIkKpY8f2!xC=k=cF=D%vMxgXX#yt|*W*eC3>*peV^NZRIqr3sTkd;VhSB z!&JCnr+S+K3fq4TIHPT&&SiU}p)d-1a5b)`Li#|KSw&&}dLY&plNE(Q=9B~7JqT;H z6v+kXtT9BWgXtMzddBT({aD=;D%_LD!Op>c8pTW8aaJM1b69**ZNDR#9~_VUHm=6e zS*yNkUqAXyAUNN!pO!EN76xLLQvjDQYr5Cr9`@WHN$FhU{s0+M*RLt0%>(kusDJM^g9)j zqPDTkx4lLZMsrGwAAKeZ(&dPhp{W>$@Rgh~p|(;q$FS9woYp6wGcL);*0aJ$-gz|> z&nftRI&W1`_Ob}*e}W(5eu}Sor{IGE5;sfjo*k7&Pz6p49TSS7m9qRHBS=TD!Hxbm z{)Pv;$ec4oP6<=m`7_x6FD=ipkV;6#B-i0!j+!>n zOOp4u{AuGH7s*eW!tHZ_*~!(7-G-#o48kv412v*9ik&#rw_>Zc1ROz`-Ebx?9y-f1 zN1sVEm*1Sq~{s!Ei(?=h)_ zN683;dD%pBegy99OJY$F2Em0PA*1k;gY=hyM{C|)dc4I-R?=^Cm_Xy~ux!ARLLp#e z;!y7>VVqH%y6*QQ-^DriUKaDnC$dnDKbH;53`RhL{n@5%mQ~!a(3NKBU1G8t&c@Pi)K_A4V?NMp|J%Qbsk-dk3- zFoFEcukd?%v<>8nX13&?lyttwo4l;o_mSb>$~YnYp-U~fcgtI26K;V_?Do<%`dpgh zMtr{s=tjtvA|w974J5yZHa*>1%gut1Ct@6B;Y6XeU!&DZaqv3i9wbF(&4g2^Q? zDB6arY{zM$?qhc$QAkH2QJuUp1R@4i_uiX`=|#~h)I8tqP3Kshh~XM88~6Y`SoCTB zw7K`CdD$U92aC2G77Jw_`}I^OiRD5lhvzimto{0+IZ*#*p+^H$M9uouTC~OnrIj>x z3ABXXhILY*#Z<{fVf6^A8XGrla~Q;fFz_w~)pT)*&g`8efL@RA0@3qY9rUxG*5#3J zaGNp;Uzr8)ke>zdofWL9qQsB^hl|n4k~~0`$ql{D8@yrfH?MJdLO!U@{NXkalz>Sn1*XO zv`St^!XGdrdS?M4XVezL-={;+(~BFG{=(9z9UOZ@lu_Scc(`DDB?J!CP= z(D~#ql?L;kY65%a-3Hfh?=Ny+$d}xwRAj|S#QmDi!j%pZ3TX)6u|VGUn%icT>_Y%% zgsQnJZYj&2&$D%}=<(`lE}SD!;j*IPu|vkwKzB-Uu?#u^6Ix6aXfmB{NLxx7*HR!} z9WO8TIEIUH@x46jk-wJeqv1W8dw&?ZJz;f*VcQ`Ga3~(@1UF5onQM!`Os#LYz8M~Z zST1A(AQ~{~}rR^{cAwBbEKufdKE6kMqdN)&!)8Y1j|F ziJ(HiXK5bu3XAi)7|mvAez$2hJntk_jsshbP0*t5~VM z@|d*P;bkbFw;?hYz*rhLyT6=nA&-RfNcmg9@-R)GeWa`YvLRodDK~Ib@1lK#D)cfn z`O0*);{WpJZ6jjB;-As?Q@K9@YhcM{H4J>ZzeM3Ak;Neh#Q2rty^g{o(gLI{RBOp( zr|X{m4}irFpG`<8at*K$va*uRvTU29)-}IH7n$;1>%(<#9CzsUa=%R}qxr6+Rb10l zBc;oO1F|r9vZ5CV&`Za!kge|hEkDvXC42hAEI0?gN5e|yXs+zV8rGY>4UdKqHDr)HiFc?~3CVv!VF$D1I#npG>Wdq!eWy)^N(*2}9O(O3ko-xrWhqd75 zT7YR`HI&L3u&MswVUAivzX$}T7^7h-Rm4Wzcc4=AMWH;7hSHukysyImRnTGrm zjkL6tbUYWedb+mofii!>xDaQ%9)=_EqxwmaTob_L1C7VrQz|FunM=xQ!2bD=l$adQ z=mVQ1*$k7TlFr!)GqS4W>+9<>tuB|Lz!^#;Mv6@;qmM01KiWX_CrQG>0D`%b;!eA9w$JQg~mJwWm73wM;rt^e>AG6mB**_xc80iQ9ODi%pi zMsDRq_h|YMuwPc9JQRC}-$DGqH(_DcQq-lELH+#7_|rTXwY?xh)YleHIwp5hn7JXwp$3@ZCeSPBA&h&qn|fzaIt9WA*F z!@Iq*B{5vZ_5$fr5WS)gy~Y^!sQ%ZGkJAi2S}B@Y9*Z2CnOW$5C;H@40?E%0)~N}} zTiIrNlU>Pkbkbsy=~d0!q@Xtz%7LS!lK3fMGb+1V*aRs-Cx~PYrd6GnoO{VD-{uBy z3MGxd{oLjJoa*-(OsLR1R{A8YDdqqkJb!<{oL>He21TInKrE*Kxa9<_X4h}F8e2XFSU%#da!)fH^~sb3+-;@BmBn8$c2yAF z1Wda<`+EqDy9dWp$@;3-{m7Yl&|}|C?Hn{sF-x7HA9mjzYJAHf5Z`|64|pmMDPj^B zu)aDmb*oCPXoClVrf;Rfp2IdMoK?lz)z{(P*xL)v$ zsvwai98%UJ_YkWEC$n|7N9vvmr%w)~k3_aKh~}&Nq=HpfMC&VCrBCO*xVJ=1(-~>_ zU>HU=-*?-I42aL=3&Bv3v=)(?e+WE38fk(XJdrV}v}ChvQwCoT6c&mFJ?%uoSOG~D zd_!~^k`Cg8OBzysV_FW>yZ8hFibz~L*paKY&beVm$M}&c{9Cu!d5<}K1)~>A4d7hL{~E5ozy@OYYz?m$h+qfnpc)uy{q5m z)!c`F_2J5qH8l&K^sv$pfYZWnhf&%193j5k9`FLg0?Q10z@Lm9N@<7A#?^)ttb^wG zdS(EiUYjvEcQ{nHUH>f>=wQH54sspO45^@dneVR!PnC-T3LE#~0G_Ct33MkPGg?7E z_MGuoDACYE3g-E4EFg21yz`y+(jOGV>fWmIT~R_%Y4kgsj+h=c8wN~*kid?qK}`ia zeKpfxMYQd!Dqk2QMqLUt)EVftvparpt_0%CC53*ef9uIB7Qh+-YDSq<1x|bi>ua9m24jh9K9#4d%N8=N}MmBQLc? zkz9Z7BC~`HXM6trbBGW+6C_2$CK^&Fhzk=>QvX9Ea@Hk9TL;C1Uxu`z79Kdyq}to{ z*L7S92|uXVd5|(hyJKhCT6ft#oYM0Q2G92v_8O+y1 zrdmZD$-N{qFUdidV2uKv!pws1arua;>>1ti3NQ zyysF!;####HK0LhNTs|99M+wdMz4X;Oe$-o=UMQXrGA#8Pep0a;MFv<|1$(8GX4l( zl4?B!4Np-3Xrw=VDB#||OYYkzNNX28hSf)o2Qy({B#~Tk8$A;+>>h51BZTTt^i%q> zc63^jbJf)2g!|hz-YrUwMD3$6H`#!}N-M83$PPkOOCaD%q z7jF-lsowR5d)!d0e!jCOVI7b%dm z&7)~}KopME|BS*-sAMr#q5;Cn6IDnhUI8`k0Gt>eD#8PN7dX$2K=#&C=@684a$nJ* zwNpxLL~@HC6>V+H^Gj!rpmdceA#`e#`Da^r!MB`cNY0!u>)9|oOu<-w@7{LGr*WSL zaNj8WPcMLHR+(m)9-8`LukrHo3F>1CGxnE)+eCT^Gl<*I-42b;D2rf=>!dx`yt*aO z-VW~BWJ{7;ZbNn9Qu~D61tytI%H|3?>X*J*p81or^)MKR32Q783!}Sw3 zpH8%E5APW#!#=Mou)OpA7~h_TI&6e`YR&m6m8bX83T&$83)g1Q?0Akb!@Z<*ii*swIOQ{Z`Nec=5n5i!F#MsFMF_aghtI-sa3peUL!gM`EC zv=u|7%^8gRM40T_&{R_r+EB&HJDY-~c3W};19coT{w@?(TryFftPa0BYGhelMwO|e ztpeN$%`+O?yUCW+cZnHq)jqIaa$m}yMiM4Q(LI-diwR_?)djxPi>9-8BG-x_l`2Aq z1qH}ORSUbnf*`gN1X@TP?0vh_hKgn;D{43^Kb^Nd9UXs7gmamN5b4ZT-a*{WX zcU>BphK-J3hN0z=?#&prpku+gR4H*OVaHo+&oIq-NQ0;(`~Zj;N5B(P7~9&`f>=AFJmx>bnzJ;re-GjQ!~Qgf$9wnk8Pq^__#U z!VSKp*oc)C)&E8o@_{iWx*lz+Ut>FsthMORv@RPqIGbz*J%1l+XZ4F5(wq+fxPvVW zE$_sMt-wDGv3zY;d}D#;$|!#1RTBsko!TC?|8RCzFvSEgzl5_dudJ+)yz*i!EW3Wk z4|e*(*3;vJxJ%j;ffGW-(Fk)}c@jZ?(FWoYMsW;zK`J@5QMXN}g@?#Ql_IHBWC*tX z3Bo&B6J*I$tEBb!o1hsQhY24oVJ-YVtXP3vAq8D2JB5=xfm-AJ-m{>~3$=vA2zxk> zup-SHL%)yHL@xZulDNIiKVv}OCb%aiC)cHS2i)hhoDi4wky#Mf%3?4ISkrBS5Htz< zgwPcopZ@w|`MklZKfYdf5_zBLwj#xWpoh^_+5sbOpAdVO5}m-j=O0t#bt=)i)m-7{ zGDM89Z)YH7ZAu1yO+eKAwJQfdEhj$M8qf04xe1y4wcD~2k{Ua6d@Ni}2dM|=_;P0U zXg0#hBvgl~y-oijg%!~u!&x`rU^byORv$BJuLV_x=Njl8jekDgdy6@3Jg!d}?qr0v z77Q1N3uO_+e=ITGQa5f+ZGQ);inAAYyb^o+ z>ca=Si~0bb+AK;{*Oxwcf@A@8%G#>7YlDyz824V@0CK`GuU+1z;t@CXmF6Es7{y2u ziOB2(gkz2A^tC}OqHvt}TYc3+-lT^|x4AvI!8Jb+2|DTDYx&$Ero$gSfnh@_Jm<|i ztNpLanJTDlf9ubzf0-;Od+i*yO<|9Dt$WZ@6z z*YhNppqE}cuB{FUtmwnBZMNq@14!09oD(%Un?VBkU6LHDfnQ>< ztqbF|$RFJ#uPTG7;`Ish1If>bfrE|@-$>{M3wr_b67i z7=jej_n0GJaHqm9#lS!`6WY{IXNq#7`RWH&dgfaEk8j zwvmJc-y`H$CyTpiPQRn>c7@V;k=ve+4zg%*O4{TR;6Uk%Ur74Lh2QBpq}M7lbDWVh zbu0aHb>l$aEIv7S-+!oLg0TdfEq4=>0(Ss2z~7<`k3wUBmloa;U9?=ys{-{T zKbMhIot@)D9v+RW;SC z2dUA_?1v$jA1|2Z=e>+@^*>{d4qg*r90S zzK^XQk%626v4N6qy1HX240_iOY=Ve{nBL&jAr%2711BSBItodvTl3hjx!u3t13>=f zm5hW0%!2R+IC!kZYPX#o1X)cgkgZ-2=mOu4*|LpAtn{dI{(brP9d+zLpiuRj;^_^&Q$f!v%hsLQGZy3J+(mo*S^uw_jA!QG6EIqrxne<+uU-A3L$KphHKvn?E{ za^}5NxJh_9=vKN4$BjoSJIup*kr6@M1Vsgk96Cg-%<1){Ye|?aVJ((u9Q&$Xf2>oi z&^?@W`e4CLh3|g8rBKe+XBzSv$n?y)4MP!TsF!UivY;+@T1X;>yAEIIp<_n#N&k{i z^a9+Y91Yyl?GmUR>71GJ!w;##aTqgADhvf$Xf#RRAYA_*Xs?e5#vC!158T%!%jBIlc zEyk&^H&xzGbMr`1*i+QStds>K7?=6AGPSRGT}u<6J#mizCH;OkEdpEs?%{DeA4pgL zO7}Kf7M_3epdboEb^jc(s#dUGde(B9WNKg4Pu};&}1nu4+ELHaV9eOmPIHb_4 z9gL-Zyc_NMLU=>5zOvR*NIM4c8|R*Z0vwcKy40g2%#=5yY-C-MU+Lx`rPvCL@|F&% zP4}^s88FeV`4KJ*%{|@Qm`ONpG&Zt+yQXGqq&(*2;O4@O1v&w5$lm#fNw0zPcwRsG zLDi)fAR*5{@9vrOCz%^CFrX`137^}i;ikl8I<35srlKb0pK>^3()=BY#=8&++gzPR zef!xqeMc`6WxBHW%Dp28&un`lAAOLL%@q6sbsIFCq?|*Qgf9&Y0vUfg)YI7-_2Xbg zOH2JN9V%*qP*IPDQQpa{rps#tc>;$=r>xBX^rdS?Ie7HO5BcD;!r`&(v{2?}^S zWkRzrDFA$QW4#u#O>@NcbAJ+eXUY%#&6Y|B!t5vnHndpD>wR3JfJmo#0C&mJ9Zh9g zI?pzV60E%{Mb`#;{(HRpKiHHCeuWOJ~Buj{jj%EF~qW8%0eMk8)_l$Uva{N>pw>*KsE;Z>td<8 zjCS*b^LEOsuqKmNxRtLuW=GNKWCIyt^o+zWCC=XoQ!C;aTzWZNHJVgIHsT@wX!a;t zu?Qk>-s#_BrSqd@2$e>YL;$c+%>pENFc%8oe(6ryCt~0JA@D{ zA;E$M*Wk8r2oT&gSa5fT!0E-i_x|?x-~P{YZq5~JP3G#^U0qePyL!|p2f9R8KI|Qk zpLAV`(IU3xwL?i>(3r_c21{c?^GiaT;-j-{kMWmY!V(G`&d9xyApiZs8}eVmCSTu6 z4KByU6#CCsZ*QghR$*caPK`o*ig=LatVUDXpHr0b9&Fm0#v%O*&fjs##20r!N^~^| z9(slOyJUG}T&;#*`Qy%*C3yP9tEDWnMIWYD_KKa06!(J8`9- zZQqGf`3_TW)o(i1Q8~O@yldPA;U(nk!Gl8dl1q^4>cA%;le)QVJ)29P;alnQmM!(1 z(?yr(V^w%4oOURt4*QGCqN91A@c!Zkl z8*9926pWt|7Ve>Msc0@ROy4+Nh`9Zw%!*O@Oyiy<7G_*!M1IX$HNcS;bAjv6fc}H_ zDz*ZqQHMI`LL}R&$xq6}S^L*sp*z+Zp{qGX%AlGSse8FZn$)F*$+Y!d_)(RWCNa%SEh19T&mLM4ToonDeOzO@ ziX-aX6>Ax_Fws6v;_GO*jM;c5rht1x5Nj%C8QdyFM}Cch;m!9Gx4k+dh{0P>fX|zo zC3!Uy0;%Ee7;*{tyKAJdE>2-07CAH|s1o3rp;^SV*s{`QaUeF!5-F;*0nY2wupNAM zoGElmpQqPd0w2g6O z&JIAbHVY5!mE@~{*BSY47MT%;PJN1H?LT{k$ES; zoDx+B<&6UIG0Ux=y;M0P83PuUK<6*S43mBf#Wr*=;<~Y={!&OzfJSZ7IYMMbA4-aQ zRUBxTD3jE#{?GftZ<7hVT5pP3m^;lfM#uPYav^KAkeTN%@S1-OyyX<6GBqABlvGyn z3TqX6@-2eWdyD3+d6)O(fJ}b}LbL7J(~#W@nsRz5O* zt5D>mWk$z4s~nBwyXiSiP|#M^kBa;oFyW>7Dk}|ZiZG?);x|S=|jR`__?K=F^x2=(sNSUcaqFkI~9GAxUNL+BuD9(=1Gvx83)t*@1 z1-b*KEA72N8pyZ53KGLM;?GPK8UPA(u=af>@vIws8&OrxUU^Vp1ujulra+3-CczAA zqaZZdt$SP8=Sf9BLL0}6L&KE44|cS4Uc6WCFcwKtG$*JTNzyQ8y_rNz*vuS_%Er4E zIP$6Wej3U2d@CPl<-grQ`{NNA6A{aNZz(l%N8m!0-cV0e+mY_+8wHL}xQIb&s7?t+ z<_QftS`WosdUa5uN2xQ~W1i8mQ zRvpq`c%2NVXR5>4eco?U^#>7rd!B8?jW@ILCkHj#Pw8eMpD81|VX~Y#d%OLHf?ki9 zs^Jp92`v1B(zRbKm+YC~R>z~#kb-NKtT$3|m=JAPP0|m73wl_TseOoNgq9Ld*2SNV znW|ObGKHd$2~_2i^DelKzbxN(H%#h6ypuYFIZ<(9SI^85mfm+AOI0HwXc6l_lNgZv_%B6=K)c4P_TZBM=}Q&3JQcyX5b79o5bkaZxWTyka@ zE16eJKOek^a`u!;2DK(A;gg0K3I;QwHS7$bZ)OiJ6(8%< z&u3QLH5yZw%_n_~?Q)EzIf(`_AAjsQtFi3VOm7qw|FHHJW_T7UjpO~C@Ozsi19@mJ z3UP>L_lun8$FO}bS5(K}YQ)DVoEdVGgUr-uG1j>#NlWdsHsq|^_3V?+S1__U2Hrq@ zQ&>X!QG=zVFQu51q!q)v=i$D_fE{nQb#>7^mo`j^^_ zPe&Dyxe=eyHlyhgjm=GR*eQjX1opLLMEN-W$nlAJeU4>sSYLZ7jmQ`x5Pl;u2Tq_p z5~V${hf;~7f=7)2Xh={?u?x)5xwzTbmx{EUC-(Q>aIJJmP+$rq&g69Qq%asxzr@r$ zeX`(+i$9jtu?}mZf~9K+hhMi@kb-^5`KQqC^P6-8d*8M5!Qgn0Has+J5;VS>#J@AWgsdW228=nnj+hp z7SVo}up*Xfu7Q$Kg{($Sm=pXVSS0_Mk z4A|1Szcvc_xWgcFZx#ais^cWaqDwtJppCv87FMZR(TOqo zBZ41$LkFC-z6~4o&-Z2T8e8Bmvp6GTg-$+HxEmvBR2dtN5H%xj{{_@shp8hS2g56l zC*sMS^Scf3#~=fBV1QsNkP3$Q2v#VWy^$0dMY2A*+Iu@Uae#>_Pt9{x*Y~Ta6ggBI z;oPKP8wxy=2B4`FOqlh#Vp46P8*u3>q2wEch&NA}VN`u(+H42rvl1De z4dd1Y+ko>#9pOwNtt+Gu<3*L~=S)^zrMw;@+zDFz@UT(eln+x%Dw(W%3)IBz8=0)* zK1Yh)Z2;K(!2$cMJ&(~!DjF`7eY`J+urU_q5;4T3_jzIxBGtFoqX7H+24J_?_|bkL zT7Qn`*jo4H3smKUfdI-8%tQS)HFC*FI6siAocmz8`-;?k3n z@j=S`miSwCTf+L6-gK%x*yt>6580}t->P=xP~F(EaJmEI+nKEKgqaVduQbndz*ZeR z4(KuitPR&Tp^n7+c-UsVOniJK&yS{#UXlGIo44J~SBgy8-(XpO} zX?T*NpYku7=^}ZEmjQ+^Ax-#&(+Z5qz@F(}QxoK7I&XpFUD>dqs432D6D!)EVCr3! zATlCw8!U;oZC`FPdbPjS6rOjlkNLDm!^sPL}o^JsZ z2^VYGb48NCl9J^D-M-Ne7Dc*0gqj9~i50xPR1Aya7S(niT*o)lee5?wF}5?O0XSPO>}rt^z>7E! zjc5PyMsP8rH}V#Ok0r=T@bmB#)k8ONXE7_A^o4)2rr^LE4dNLFEd0>r+4M@|0QI@M zo~UPdTw4oFFX3YqZ%n@6oBXEYDZYH!xABq!8FbB_C#y+)_Bc*V{HNJB9bvQWDitfd zOF;U=<3kV>Cca>j6`9PR2o`fX%}Nbkm(!zQ7rV34qU(e+Z$YOBjzSEdy!cQrU(Bgs zrv?Jo1QgX3ZyODLo~ad7-R40Z=rYLBZ$9 zC8#pOZ7MrCONx=R!VK6|e#@+1zfInL-593&!aq_YD<5N2N6a(BfQtW>8!zz7k!>t!upNg|NVGwVF*1PB?Qq9jq%r-|edR#KC5EhX1{=i{=!am4hKV%;de}fpPQiC(R z+NYftj#-bcWO$`$k{kO*<<|FoLz{cX`Sf5vz_FPIzPl{aHO`U3A4k&b3JR`liL4I% z3dfqeZf@I_i7ytX02mJhpo|B2Wh6~Xv)8Aa$K(ZMQ@NH$@!pA9d|Uk(0+G~X9TBll zZt5A=?!sSIK+k{3QJaWf6fJG4HB3Qz=0ip~+O*87rVmebczSjpTIPcdAD9vzkj$-h zHW1mXb_>t>m1m64AiF;pQ^~H#Oz5fzP#+j~B8orU`Mfd{Vc8&bwH+$~2uSX{^@1e<(hXk#+~eovbPwRKZDp#H>J0t2+RE{!sP-*s{T63 zShGBF^>7t1JYj{6Ra(zeUR8dhq!*K)mDGO=YZ{I+X7cbxvzi{4&GarwObo_xO>(#J zRf}WN@GHDXHW{kFX&#miA=&;X!4}N67w$T;;T)A-#4+9l)J|TA$+L@#_WHG$i;cI^%h(D|5#n!k%CaO`Tk|g^usoRk;v)dJ*Y@D0#LZ2m()_ z!>fxYU4VmK>@N8TW2+ayNG3hUR4v4s61&C$Q(O|eo%7FuWP)T8B(BpBef4Dm>j7aX zkRLJA*|*`Md zVpoQWSX?rLKQZv8pOHHh%<|dAetBVAjh=*Te-93Xj4H{}+KE|+-evSAMSLJc#!LRy47-ZusUo+C-xY2@! zKMtIIkXyHJdHXVW5&T@1DNDn`f=8Wz+;^oQeCiHBf)3_)(@FG*_N4lUTf|g;V(dbh z9kkewjL)WS;>^hQsH}RFdk{UeLS?*qHp^(g*eJ4!k zz+!fo(^^!1k?6hqyHADa%pE78$!w8SuRO3v%DKkp(fe&CT%bcuKD&IQW-w+^IFmHf zwjYsas>aI79a}Kav)h4`O*t`nE{Tu1qZ*4SugGqE@iiJiXcj^s9V7?h27i35CKl#{ z!6ySz3eJpBu2(|TNGds;xs($GUEj|xL3T2-8)6W$TP{)k>n;#Oem5Ti5h^HFflIw; z1}YTXaJJR*c&R@=qO$A_JFB;HBC=aN^UT4m9Ih+&4ykEsD!9bxzivR31U z+YyNn7=P58mfxN9BWJ&kMmwj%>wXqcb`A}_=pjyYtwc_0>M5jLDijw#yY1LKc|?}i-v<#2O^`9+$tPRV)!?bR%}+R z814Ub;$vTtG4}_lA~b_vEyf-a=*ySi7)JP%lwYd*Vcnfg?&?py4u&{#hD$#6?RZfU z6&)}BqxIF_C92}CARtKXDH&y=6ueA;O)fAZt^78y$-9F zh7CyDe2?F-G~|qn2V4>cS;vc@O=x`EdD5e(tLgKGxP({UEgYBG@v9NuxqlbS@WFco z!M*YjC-mrH=R2kqHdjFBitZEEswIx~70k&u4=8(?V;d}T(gJf5MVD0p#L?b$@$Pna zILMxMt2}Pug^-&P7JeQCK<_W{Gc{j=fF=O>YhF(*2xdG&`y1Ifti!31*ha^7m15o*Wv-WIg#ZdfGZ5uH&5~wK_^b2xRv#L~rEK1+Trf%; z1X#O7uH*|qW2ArLwDTwtj>FN&^P5nS1upWVt*-Wv@uS`zD_ktkGtfZohk_~kl-xp= z^IrcObzyII;j$v)s`7SA#y|)l&uq-pDl;_Sw@lw3EPjEa!Kwy&o%y3EQii)PQEx=J zpqMmR`CJwFXY8FK$OrXoUjRwt0R;2hq2K#*U%VP27|4}QG@+bW2h@(BZ(zcKj$c@u zAG&~$bf%ATV!wNU0S_`7@J{dMLLg&~y*-6Q(5QBA6SCXnF5ZpnxMLgC%ow9ntL4eD zcTO^YB;ZbYzpLh&%%w~oj>|)KGy9`?zCy@De4hDZ2UR*=?(1X6(XItDrr(UDEe&O}VwX1)|=nksm+!F$G zH!H-m6-jJid?7%V*bb%Ti=q(ZVUG1}LUW|9%k()jMa;=0!>4)t$onY{4WIpgUG1ce zHQYmr8(WcL0)nn7kWQorO7K5|Zr1)EL7!#)x1a$t*MA9Gnsw@5f`%rWus;g=F}dV_ z3tF1h{9l5$LsU*&vZ(fkORatNDAuvcxgMKm;4Bn)NbZxUHP0b(kh6F{4bIFRs3HNc^Kwv@L=x_mE0%b;0h>d9G`j}(?7bvNUp)4^Vm&> z2uZj8IK2^*Xk<4HEwLiiN(lsmc71Qxl06E0xHO!Q6lcFO!pm^R>}tko>?U5OVHS*V~NDD^Md{-4KC1+gYEDV2T= z-cLK9ubHg8m9+@%HCXNIa9u^x{w>ci9Rpq1=B-N-1xCWjNT`i@S9nXPbV0ixYgm${ ztzIVo=q`%s@imwLV_Eo1kf$RxTA-N>N(s`KZbY z^jn*09){(AFMcBfSh2&ix+TxmXya}Y3k<*u{$q#_uth5z0Uil=Lzl5ek3$wGko$!0 z1DTW>N4){SbKH{F`tZ%LGm>f7UDnMtpJnu4$iGvjCyBf`lh2){liN&`ZXk1z|g?0dv(3b%z zI;X^WYQsaoW4Ple%o(!&mm5x zNps2sN1`$NK`dQU->D16S74YKoZ7Uv1;K{^NPWM0Ru`cj6O=qNN;v@Fq}yfb)9{-B zyEmOfBx{SOBgk3%MhS?*ua(L{v?hrXDL(QRFs7y!e!>>HG9D?`dZhNu(@M6hot5Zc zcSz_AlAw#iX%Y`XLWFXo;z}S8r3#z@K6MiD*Y#xp|7i^JurPl#oyeV1bvOcfl8KW7 zV%Q_V^Ng4gaNlq}{8#+>EFf8v7rS)d-mhE20tX^wwvGF>?Sy)^xKIvcOp&`IN#1V_ zbV}GlM}ZM8031)Ya1VIpu@!~SCzb*AImSI8J4AZh9mVd{P}c^BjsR9GYL2IayvTsg z*4Pouf67CFa*i8VgOJh~S>?vVF&s!!`Qht>+zh%>uvDPU+)F3zhq@JX`8V$kqve9y z6hPbUfCyahP4}`h6wb{63*g+BK=8}gJW`kslA1+(Nt7e01$r}FqvbI7<~sc z{xxr`vd+wqf*b%U-a;Q?9cax~lcG;Y;1hy^(o*ImKr}q?7HC`~|C}bVU~_@ctW&kd z>*boKO@MKgt`8_Z#ob}RLshm1mbywxppcllb)U@o=>#9vnx=s=uH~#{G>xkfLP!F0 z1aVFlIxPyyt5WomLN+0vQ7NKit+6={EMsHKOFG$Wrw8eJ)Q77cQGu{;;^#ZXWt4LQ zZ%f7Z#fS4x`~c&>`9N^GQkQADqKF&$2^awK<-Cj1rp+PP`z`}={Jo|N`YtE%TBI$} z7KGCBzikk6B;gwCfKnC53>GdwflF8cn-@bUh_k54J`dRhsFEXhU@XEvyDkP^u0`HKynIAl16zvsHMXKEuI2TT z_bzj`b0*f>^MSCL%6*;jCM%ADR5p`f_Gk`I1qQquVR(B$n0hFCe7Z3#`hbU=C1%jz z=IR%QHFhRo3sdkgD;+AfzjX0ecbFZKP+{x(B9QB)AJP_}jgnF2dI*Ssp1OWb(t2PR z4*JHgoRm2&@Tr7<6H)lXY^;s}QcUUV0U4n03t{HB!RRb(A?Dra7(2xh4T#O@>5y_c zwk|`Zj#s~;O6M+iuYY8XzZV^l!k5bFdPS0_V_t3rQv~i5j?8BXWw3sagY(rU(HsZm zSJ4a8Puj1%O}v;HVskoS(%Sv>S@F80d8uT*CS5)06F5pNa6XwI39IKZC?B*J>=&XB zNYDI489<;4w!+fmNcwbf;r=$jBKU)j0ucgY>M}4+UgmxC6gzX>1-7V2e}om&ekzW4 z9~#2C;9Zu*kty&?00TA>DGU;F$D$vgB1Qs~(0L70RD0KL0TKBxUdewgF0Iuq4=GXp z*k|*^7(EK3xf>AegQcnRvEp3z1xI?athBRQ!XA)+gcA=Eg%$tx4(IAK9}RsPCeKV8U<0Y4IodwMLE&6r z-%!;pAp-@i3nZHoeP@1hH-AvjxA~^xRkIqNrl!KCly!Q7WxG2wk!%|RCG1p7PV&fn zLS2qR`^9kP2)19mKug|`<_?;G)zE{Dr;Nhu`7}m7uD(f?l9Z78r#i=nDLspTLCov# ze~ihM5gEXGu(eb=kv$0qRw9~=cL+sDrhUKmH%q1-Ga73^}%)!(;LMhAJM zlAOOwt`UTg4_&(xHL3p4DUgzf3Mm+RrBenYAxexGj5B%NU#-RpS~vrq98Yk@m-F(B z)&Cg1lMSM(P9(AefZ5g}D9rl!C=3d7q~U}Cplk+rsesyp7_KrbwTO@>`2o!yn%0QL zYK(x4ltoN`vEo;$+%VEWNTA&7Yg~VC3R2h~g`b)_HSq3RA1f&r-Cn*Iqn;4kdaf^l znMN%oCC3%aO3nS`BOKg=)<;qVBUl1j6gXUrr=N(J&SXvz;m2siBo4W$*PlG`MoohW zdN{ScSW|podO38kFetnRa$HJA^X-~2rLW)FSDusz7Wky136RI=X3tH zWpd2H&N;N-r6u*whp)I0y=AHvd zl&7awONh5HWNZ2}qjL0hm;x=8n6lT$E!p!|9f>US@6QF|=f0KXYtKwZ3B>I>VF+^E zV*Jt9vCvS|NtFOJf{JhSZ&yyGU(WLHW%|cXL2@|l&j0ZEDp8a7Z>LQ&V!+Te6Vzck zxwe)pr(h5XGz9jCvoC!paE{Epn^~yiQ}olv)Rt{YcC0?*+1sLAJN6TC#7!<6PNn3_ z%4@w|E!bFL&KD9nx+d&xlvHl0eb13w>pln4$v0z*X?KLW!H^?QB56h5-QP^N4(&H= zreBAf8=YR;{ES~y|5+=DiQ!-@$IQa0nK({QHTQ)hJ)PnCsou-^VwtysH3h{o!d1`t zz4=Y~a%EWSor{$1alfA4l(+cS%GrGI#1IU0Al$=QeChhZvpbLnIjay&7C>esx+lAgQNpx^^PBo2zryl@j{!$2;q8GfFM3T$%h%%}Q`O zAXhT1a$sF;Tx!WxaPr zlOO5ll!)wG*$lMbuAP7J*?t&C6%&p7kN)yZ%x9V8;`w1Xus&V&6FkN9jb9(v&(YPL zE`9&7EF33Z2b1K}k;NkI z5-{1%-yq6~yEY6lyB7T>(d?v`f++Aq#_o1f9Rh9DL;Fr8=j@Q^rpkVs>ae8Ov%-;% z(DFm}WvG3rr`_sEwG1(I%*BBcI0-UjqJxS@JF` z$;bjKP|&sbU0;&7=kZK9kH3lc&B;9hS3y^D$$56Wd7z5>x<|@DN4o;xN;zT{84@kQ z{xf}YBI9n2zN&+Lq?z#7o(b0v!&EOCy}$I^kZFotk2C1_nrEDxR(86u^tkj29xd5j ze+<}WC*dIBPGvT*cwjG8{B9K&uCt@1paEc^k^EYmxn@8`CQX5gumQOP@mDKx2`mD| z0JnoSEqfHH%4ndD0{9549vfGoFNJS%UxVi08IxaZOwYnW2kp%c+(i|YR*A@CyNm*| zj0C{4fw^j)Ob`5?gU*>Q1+YSsu5>+Va~G(X^6Mc9Nlde zDyNt?q|lkln*C>{7+H3#dGcAN(pdx{@nFt?nX+$M=YasBFw+Lw?=#eYuFcVtQaJqD z?W!+;{-FA8e(W?3wDpy&AJwbe0_nXIxvJTq^`LlpeBcIx-tz&yARuy^oQ-AFqi=iI$TOy#SebLJstsC+}M-iHG2HM$uR1%x32}=Z#*B> z2@FI|&@g*7S>AwwTYzPURJ->Td+QL?z<{2B2c`Y3H$4Y`^(Qn&WpxY19$Tx4Yc*e- zdM^}ZKDq;hfzEg_FQD5!s<-~6>w$AFRg0l2e6-%%X#+9l!NL{G4a{K0Y6qC%e{4be z@q65VzEcQ4PHW0wVPs8ye~f+Zqi$#qG<j3YrZiN$D;K|0%@w)B=^fLdgT5cDsA1D7&QYm_?T)2Oi+y-5|BJGdYr1t2&_CMuJYcY?6w`}%Fl!RD zL8!Uc;P&pHmym!8Q1#TbLSUsp$Mt7`_5a&Sfj3Iz0`Hk}sVcBQ{O945wu%NN!oVLf zfA=N27goa}1A0 z`}lnh-N%BdXpnn`tnnkeA8a47?UqgjLWfcxwD-Lh80%7NR% z){MsUDZMuvJyGcvL3u7`fXRe~*KV#lPHP1O#RmTFS%~&8fT}vr`=dy?87{*`@4mnD zAK3CD{N=iH0`~H2`bf*t_g!aTm%Tx#Yx$jZeK?7o_7a2y);7``U0p-~N6b8UPo?^R zf`$F=p`c)gz$GZ&Lm=oo$|X1iA_=05!#sp~eaj8A-Tr@X1{qQ?W<)0Ql``(8>Nh9r z9F}~A?zaumzh0D(&aH3VfM^QLdAfL*<%K0i>3Q7Tr5$U$LV8cLS$TUb>;4g!)c&{}vyZ=r8? zsa^KbJ0K9&%~s9~0XJ*=kxcOhP;PKjk$?TGFFh%rqw#%Ardli5hBmy773Kj^km2>; zwE&yA2{P%7)}g!Bc`}El&%eRu{?vmwUq7#`W=i)Oi{GRpRR3_X*#!hL+z$$}WBQnN z*SO7lk-DP>m_PMSNcH>%l@pw`^qr&@QQh=gKYhRJj&@4B1(kG$uP@d>c|d6qC5w8n zOFW5j1p%}TP-%8`9&8X3hu=I@(At9YE-ylD;~-b}18~$eIPLO_CVWj_Kwq(T8^%_oTYg7oR0rUyn3H(Epd_gBZOry5DM^UnS2-O*%;P}U7+XdS@=KxNv$ z$={(j-TLtNu<1(~hzRow9)JV;ctJ4gQ@8WOCDDL`^*OxL9S88vhR~MN&T8t}#ZzJC z%O}UB0PgjZY#YmaMZx{AdVr(vR1HqrPTJ57gn2grNB3!}0|UA6B_R7Re>3n62X;{hnn^ovHP5Tw>6q=k)nIe%tW!Eh(9Sz zxK)`gD0TgN={|vs(_DV&x_Az#jk#coDt7+Rw2|lcx23f)C!lcVK&=BeuC(IjK}=rX zb}V*?V(x{BoW{WDo0^wiO>7LiN8f3MfC*ne1!tn~h7Lc_5eQVPWr5>f-i-CHeJ=Xe zg}HH3Z|mEkBZZdz8;rG$>F#SNi}~|QQ&uELfM^QW^~2D8T%e-=m@NHZN4SFEXDbmr zS51LBeSjFON}UVeiRPIr*xK6rO-dz_wt35AadWnPZ9%ws?ao9sCERmFe)1DfX$^!V z^K=Fq|GX!22CO;X2x5cwm`2Q`r*)7qh(FyfUbZ9#xO`u|8QDTHI*_DL3PR+&9)*T> z2Z8F^H$aP+)`7jWxre(!N$<;O2YG9wh{S($0i?psiYyHXolmG;*D>W5-GgGFpECq7 z$#|GVwV?5Jm)5&=*3+)E(+3d0@5{(XRlN3ngYOCo2(E#`AU|-Te`7E!?}c5m?X<2X z=-C%;vndLuhP?MGC|gWL*8298@1zw}$!Y*)npihoGfCDb3YwdR0}_w^)Qs`-w_XPQ zzT6sGVvKj_cCnx2ne;n1^^`$JI)N=A-9}i%{if40Col3z)4CXY%g)X&{$tl2l5S?d zS|U;{Hzk8^<~ZSpm_@7cE(*O~xY1F)ZR;+u@dcj*?I1&ke111kLx<#-dtVXd{EhLa zyj_c?>eXb?K^zxDL?f+TqB6Od{0(6gNm?aLhS9)%g>SO1Z}V2Z@MnP; z2HAGI#=k>{?|Jr@x)!tZ`+s`ACM4$Bi(AB_o4z_E|!|D z#ipDvi$}kBt$_ON{{1nhEO5A|4wr#YQfG}HZV-`u_-yyo* ztMaJp>LuD6-#m@P<})@Sd~)u+4xD>*w)bCo5xv3DQ43IM>?x>CRG|C!F z&VS;P(5XK#n$-7-y93CI%y?Zxlca%7ap*%j85!1evDRUQyqTtv`z&sVr0)FGFt}&e z;ir)?x9~7KH2xCo+oWm~KoBPUqc$>FT;z`3H_K z*tv}rbfW(0xKSGUcCKdvBs}VkCw<|p5wrnc3egpX8$lUemVDO!vht2$o(y67?#fy* z*RvAlZ$*dMvF5(9IkApsPK8V@VXh~5zQ=1ORO;hi?CGUINESB3PiwB*mCG2f>H{t^ zFp@OJE_WIXc;}A-Hk0G=;gj{KhcG#Lt)#>3?4+v|GVYI0qvm4cZX~3KY`=FU&G|-8 zNB>qx6S&!#bvAv*iT+hTFJ%_j+fgdR|K?as@j<8+X7M{K58VK3`~{@t(*>cPKa=^7 z7$fza7vz$oaHUp3W{H1iGZJ++MvhBoZ>H?rQnTw0Y9g7-+JUfa*fg2uAW+SOOtaKB zA)&vLE^F7Wu-w%Jv%hQDICDbEghSDc^tLOj)FxONiAQG~75%h2N4J;m>7#V?b@Ny_?V z%L9AAf_5xftNylfX*TR*OG*hFf#EZPOHWx1 zYop3Na*6}17=JRY@y|kAJ_w7!M9U<^7~+CBo+OJwf+mP4W9{9Y_~io#+87h4j+FCg zU)ulv#d)^1i4d1@2f$!7UrOB$Q3P%Xj{Ib-g+9~%QMsbMBW4LY{o|#aJ6DI}HEv9X zPQdlGl&4&6pkl`=riEIoQfb8+i{=hf8fFv5&!={s$GPPKF8!rMNAE1((~e(-D-SC4<+3uLzE zP!Dfb#&YW(n9%H2ybUif~0h+|I}{hfx_Y#}Mfsq#l7!A_&_sEo7*g&*pX zy9jRFm`;c$O{R-rk&nrZxT<1E+&77L$L}N}j&^cx+k6n3uvkMp!VV=>7YX9LQ-5tn zggWoLoM}oLzq!J&59HSsUKpjg4xXZ2o>-GQA{0f5o6E$h7|?N~n0d(qFBp~f?AKY2 z>*8h{>hq4 z8pOyp!9$s=wx}WEI{q)~k;$cy1F^nTuj8z=vwP6bQ+0=oZ7ZNVi?p)yO}np&5bfc^ zZk`Tz7%E2>SuKUBSE~h`78h1e_VY>a_Bs!ixHzTBBR{Yz3mmH~|FXD|UjCJjL4}eKVmzQM)ZtfJyJ8fK$ErC((xR5p=^A8Z{%J=9ri zS$o~I3NOOom*ke)aICWSiRYZvruMhDX(1PPFdddDwPo0$s`7`QUWhw{iJ9zHo2xRE zejZibCzGM&3FiJTEw9Jr?dn?ksdTRJheNG~xo*lZg)X3E#C!RNlM5dnMQdVxaDs ze}$v_OTjzfvg4WXPd8DZkE3OID-yZIb z_!;f#kL75dn|$O6u)F1)uQV)zAbj4O@&-TF?kJe0dg}RcjXpT4N=D>J_cVS%EJ6{q zQ^^>dU%OYEfsE?-bZ#!=7gCf2APfZN=nvzaall?4+aCc9UV<0=Nqc03GZ{^2i6kxh z;dH4yFndEJqJC*pen0`vG`q31nFpXfu929I8FvL`T!8@*26UexD)7%)W7R)T3KcK59?knb3q-@ z^RfvgX3e8RXSu4)Q(2&97+v7_9m?sY4a#l#p6dqgkxm=W@2LX*UvLIq#HCXhie$cN zo4$~A>+BQ%2zaJ9Gb#&>Bg&3k9yv<=95!t?pPJBf`n#?YnUxd6M>WYtLv&J~$f%|~ zA^9vX6P9Mp*8{3N6n1R$iX47nwYpXoe3?ePx?mBc>2_vH*ckcqPZ!6|r;XwIX0>qd zxAAV3ZK-QpZX7D3)_!DolM;j<9N=}gOuO>j7on?ZhsJsfbRDpIK{qIwnHbW`G;}#D z8+o=Q^hyfdwHvO^%{<@vcA|gO0GXq5KIpAswHPY;6)B%f>p)Y7#OmLPqp>ISPrhU$ z_USCAy!)a1L(Jl2g}j+lGxD}N6}sA)e;$c>5CuMYbXz-RBvb)gOK5yo(VkWTUc9b} zQ?>DILkBsB`cKQ^zhLJdr?~z>&|fL1t(R~~WSJP}YP>*@zO=FHb%1{!-AaP1CCrme znXjVfR%sG4<8aJysX*0}+e6<`$_D#7*yyR1RZV5~WzR|Ol=tnNYdVKko={*i|A$dl)0! zTeHvo?W{4ca+%n^)zgYwxH1cB+!!R5zFgHka<%sjA!LO?O&MMorcQ~alaKPICGNsL8@g_ z{*>YDBX2i?68(pomwQFbK=`#5xgP^^8CP9X21jEM?RaG-EhbV8qjtEc$)7E6mU?_~ zX%GB5cyidtHtaT`&7*i%YQ(%iMPaH`q|0Ck?mgBbg&R_5UC7v|aCcWZ%obOfn4`ol zF_N|46-)we@ZKkZDpFuxoHQ5+>wCtV*EBCWhdZgYF}mC1alQ%-1wWf>ueSM=Hs*5m zTBhK%mL=w(%j)^;qHx=&g0vwfdF~WU4TV0|bjPkEIRYjP8>S+R^wQ}vZoz9GwJmZ_ zT#@&m9T~Q+mO{tHk*_iKwo-!j(Ql~W1djb2kwY(rs7uCo*RVUYKHU@I$$EK-Aa}l1 z?!~&McoJZ{^yP?9AK}jxg2k7#En1n{_Mo3b#?n?gR^1kN5QRC>J$vC_rgQ}Q(h5cJ@J}`;`x>W98sIxvdk?tLbEao6UCF6 zmIRbt89%gRzgfrw#Sz*Js&J2~ck0hiTD@4?f5&?=cnvafjMD7JdL=7*5y7~10x zEYLXgHXqg59zw?#TX&a`*{Pn*_##JgXYaJlY1zrH$|G8mCdzY(z9d^Q#Ch!6K1`ua zb#;j&g2wV*t9{glNj-Z>&62|NNouY3!)N23iHZl* z#&(}0tUZ|cGj_z1ODs>gy%!$s+?gyPF6~$;n$HDu`V%ARV^=A1DKuGaXV<6-_N(WF z7)*jjL+PKboTJpLShc?D>VJZj4bfwrK#RD0=ZN}LpmhAbZVkR5ljb{m>FaZ9FOQe1 zC6;4jIreBKHwjE@{0U@HbH7;4!ruwUcl56E5vL~1{ITrF2MuDy{DHwzPA*Et|M*2;mLyokLy-dsVTCFiuxn|qs69O~os0UZs+M57PL_PZ zhwP%hAB9vgzM^rEBoc$&1svmY)s)PO3w;Ua-GX?EW>ND4jgAS$USBb$+?HGp2CypD z{>L?H?rzNti{UcM>Ovi31*qR7@Nw2e^r9K^%c+FZuIkLmx7ZDy&(0~vpZ_Y5G`=$M z)Id6TXiL{!x3MEe?~5qvV&F9O^=mPU8$4f>mJLC8Uy6F%0*Ym`D};m4fOc7BS$FbX zx7N#LN)!*cr323v%0s^-6uV5#_a1+6Jke9JwB1dVC6{3xv1}Jw;m&ccNP=T(u^+cN z;>hajdyZrPpY#TtH6n7pYu)~st(40jzmagMX3p#QPM6R%r#;ghad!rZ++Y}Ssbgy^ zX2m^_))@B+HffW*B@Qd64S%F?Gh}?(P?@)5sl73qqT^^k)73TBiJb|?2zIF)fxbG% zBy%bp+t`ct7gix>F|M&RA6|!;@(`ALI#n>ooe)NFmod3Ms(9}zlS~$cd?V8AOW|;b z&`<$~9_0rG9jeaAakU5WKe0OCe8$qR~Zs z0c69_Sd(X|Xae`Ve_ThzMc@T*%#Ck@@52KXeW~VQzc+KD?4Ai+cb30sLg-q%CdY^s z2NrNy=cm-6=ZG7+ikGV3o)t?yi-i0{FoYu4EVmt^r!@u>{j$GpFycxg^vhUss(*Fo z!m><$6$0k-e)PK+hA$_q#i~SPI?ZRW-Cm>c>7b^Ma?U1 z=^eEXhy7E34+FK@6u0;Z$5)@dZ<2GDIm{5bZ`y_nyV|k+qDc8sfo|Dysq#eg_kzF& zqyZz#P(^PPA@vV}Xms33zbeXcg;ale)|R`i-tqIFRO5Pl%Np~_vx8a1R39N*D~o%v zIv1O^OgCbM+z}wgFTg1MaDS~F9zvLPtzdM2@!rIkLULK6p0bHHUJW{Kw;h$}y->w8 zau~^cXVGDgxFF4V`iX^aa`3KCj;BQVag|6@*6Iu1&}I_+u|vs#`Mr%K!CIh^Q5kaT zxX#(>%ho0%-tBfKEh)ihpJMW=tjm7&#sBH-J%gGG+pbX{^e!DCARxVoAVNY13802v zr5EWCX`#1(SSZp&flvgbOOW0PQ4y5hdr*;1LT>_Jc%JjlnKNhJALk_hvS;?py(jnD z>sr@Z*ZuGRjZ&-i$;}R5x)Sh)FqwAhWLu}gn-_T+o6%$JrIM3Tx2I*g7_Q1df+PC>CZ1;x5{bABngd(>L^cWuUs%u zSiFUC49tfXn(6!zMm%I3aYxFJSCmXU)bfJ|G-pGH-y2S}{QJoG(U;V<&tKv`M?z`uwBZF#4zx) zTAgAmd&D;NYU{nz^zQrOon%z>ns=`H@%mm%WRM@S)b3t;dlyGPux&fw!f|n(&rkcz zU#S#$D~h{3J(2uH)5Cv<=VNrBKGBkeh+P;oA;Lk-i;AoJu6;{ECDlI>tzYtCG;%pb z=aF-%wYkZ{`}eT{&JokR$#l^Li?)gCC z-z!j47xiKSV3`axW>MoSMo;0g5Mi%64fuvAYRV@Ob}3yDde4ZNu_~D1?iih!u?7BR z8ZI{jKz{xQDG>1IQ_BjJH#NGCzY0eSoQ2>iO$2_-zErxLw|6}Qm(eW033q!6mZ*Em z$0HA6YNl5q2k**MXz%d*hkdQ&#dos=cjVkW#FVvVKdZ?m zuGw0zR*hCwvfn!nDJTkqjEqc#V=)`b1?ijJn1WmzoS^E$4Ktx_8PvYk1e#<;N(V?k zwIbGQh}gIEJsd(nS6+aq-y)XK;ss-m$V)XGzD#kZ#J)xk9-4E|Ol$;EN0KahD>eEB zsPJ%a^Cm=L+@`sYo;$Y2f0;1i{DuLFWwI6xco0k18@~yyNa{ywkcMo+Zx+sj96#9? zzj%9VfZ)n~um{TdbKq9;W$^V4`mtKAy(%msZi`lZaJlOyzjFAd|KMZGxdP6=Ye>b? zqj9LT;4eGINUEubS0epkk?qT3tD*+tu6MDSy-muvq zVXcWilIo2$%N$Ibfk2=v#T@lpQivbe$^$bpk>=}X zL#wyeE^43FFtHs%@9Do(NDek19?MgTe^xttsxJ9lSZ_RCMp27zV>Wc)@7k1OA)(rE_uPy4x&~OSgi(`*&|EOL z)A*{%N^N|w6g>3zlZyX=y%)@o98=&;6+8$>Fm#n_1cwzPLU+cniugc};O-;3@i>jM zeXr{}i5aT|Gs&Z!3?mYm^9v%Vk}18xoI#?++dt$Lx7%KwL>fGF6*ZX%<>K9v^Kkuh zzWrEiD_HfEQ2XT6um*0R3;wC~f*Oe-pZw8Hcer8%un92I6A+%leo>^X*i!@+`eFEr zX;LxcFoYXoFO64F;K{%pDL+3#A77+@^JSx zG=v+SrdK~gx2Etm8|!PfWfSVc$4Ot`;z3))8{9Ax8mpw}=Tjq1@maUZ6J93j31v{? zpsnZRkPrmkEdDcSQUe=r$MxyCxEdLx=BQ_LEqPKMG)-&4K#y4EEC2ms-bknU^)`;_ z{RI_{tWlpUoGi9#s9vyplXc_PyDV=7?f^I79JFFEwrfRG7RScR($kj|bQaYYcM}u% zEI``&8aS|J64&&hnLZP$V(E;#zK$y6yTa=xz;ZkK^=6vx z{|h-9sMqGDquI-Oix1sEg^%V%9}bt2Dy^yvldm5&rhgnT;ZkxhD7ZgkOC*jKCLAa` zW7cr+b0Evi7|Iv%?1V!KfXnd5K<$zJ#E?>`=Uu9xvyVoy3TNsT&KQ#9!Sma{)^A`$ z`)g6k!Nl-5XHFoDk+k84MKPo9>ic$ezM9d$0@T*jw)kb3lmh<|38ZDyo(eCSY)rBb zsx&(9RFC&87PHB3PA>UrC&-(9+S}I0SMYdS1i<(GV*Iu2eY;S#g^Yt$>JU(4&?Vd2 z$!~S{^cB8sO&&OtT;^!fR`R#UD+O1gc+Mx%)-S->f(`tsP0QsP9|RKF4HAs6VsSBp zJ6{hqD3SzFghSciE-`H>Ol&Aox7NT}fHonXcGThcx@v$u$4@fLO%E|^img8$GSh6A z4x~23JWpKnDUt!+MUowLKx&%UGZkx^vBUyCM$pJk+&L!LpedF<^6uKfa`ybg>HXte zMB?UJ%JVqI5O8*S&Tt>|`1*a(I^6u9Bnn^L5at2C3(w?c&->hmq*S)1J04H#MY=(G zXJ~IImfeTNL;&3D4|`aF3f#Dpf^ot-p=5XH8rNyoC??i)sAnwG&oXq}u9oAH2oub^ zIfjKih?|*y9?$#6xu|*58e<>3B_tHmnKav`Q~jt!sooCczcJ+0;LN|g%J*|=z=|e3 zc>9%-aE-&5ILD_vI`5*r;(dvS)({gPr0Rds(;K*EbGxQa7n)+Gx3%R4j^fXA8Q!1V z1qQzE11I+C|1gYHhGj4`eoma)^m<1#8SNOfI~Xim9LPddD#(;_O?npJ+uLv}Cz2!G z4d6Rtd7x&2fHwj|#(YN3=OFjAaZ3IiA!ep!VM^Zg7wj~kRy~7q!|KZ3+DmtsuYy5p zwSb?D;wU&RYjoB5k)F$uz>XYV7-k_hv{nwgKV6$!$B-adus&XqoY%kyakX)Hd3G}} zmnlIydmies^g&T}bt#G;H+1Kd&U*%(I)E1$bShj*hk^h0!23N%=sQ{c>Ww--sm%wt z#30vFBn=oOEPedbsQi*y6s15LZzIO)llHImkxg#a0~cRnUXtT2=Z2hGyLZ}(-ou7q z0c4nIFn~K)TcfrG+~?nUO^W@oL?e@kpWKMmJ8$XX^(2oP6&0h|_=8Y9p^Cns}72*(G6Kf30HA1Rp z5K7Sy_M#0KjM% zOz$q^CCL&o&Sw$*JjRNBYh3rVFx90q`_Y!@GC_LR3u@{J>lQ3%?N- z`z>B_lL`k}!N4NO;K##?8ObJ(aOq`0;NyG|mgxdib$u-}gC48j(r$S@qvXW%H@uB` zOVNzFUO)vQ!C%TkYa){ie&YeoX+vtg)VqJy^!!Y(?EEQLdQ6_edj{=#5qsfRVBT!S zZTybCa4^l5vuf-xXR`3W`(*?-RTDf_6TM1;biZGw{aeJ@)$bD59{vy|3pYJBiYW>; zf)07j74?0|V>;?-N(-Qc6tgdfaFDyAMezJ$kh4vPyNTpDMt#H{{jPT~al7X{RTSx= zrUk>tXynlPxGh0&7{p^t-|nh}f=m0{nNsinwMP6>3-Wj@gYRCT_qS& zW(sYZjByV0tQN4jRA-Xczs>XbBtxs+65-@F{n+yUV2g`*h4RE&meI3PrIo)QO0@4C z)9i1V5QyfO=&nJ<_{T4h;?cAbz>9W@8g`w(f%n2WSQU`1bm3B*^iR}MOe#U4<*z58 z&)FN^1&FMEN*cG}enhcJzwlEX87WESiFsz9@T&hiNl|&}qH$JY_RUIn4VuKl$M5xR za?`c1afTGA4i;Eq*|whEg*A4PY*#^@A*z}j)NKKcX^IYAYioxsuYMS8=OL>?Wsm%Q zYRF@fXF1pBD|@)Gz@Xa_ zMne=|`#+Ao+HT{G{{&^foflb`9%R3Lm%8T(o2ptXcX;NEz=T(Fq@+2TqSS9T`=>6R zrJZ`&k%{1uy+^V)W{MN*b1kWSG51U_F!J+X>wARyOR8nwZ6i~GClb&ZX3Kk&KwxtR zL!uZQ`o3qm<*onZ0{EMSo+E_6iDuoRm>9xM=u&oIOUZn&zr60d#p% z_}-;+Hg()zgMeR|624)_(GS&nE$BWX=-C3eh;g(V)OZ9llF#jSj6POS0ni9QM)3~M z*a46mavUVDqxXz|`lI37JEcmUE?sm%pInzCn~5q?5A_kuSfBy}PmIxMEiZ{GYb5t4 z(xD-cP%KbQ(OxN?A@E;FRsj-j05KY(QZx!|YPWd8dUKib@A(pE{D~i76m8tXnlrc? z9goL&Y5os-U;xO$gKs|_PrLYPlBTT-0AY#$U*IE3y&cZyAK3W+8$R|X7W^4=r`^#6 zE$!Dm^;H9qkxYmFhoAtthz|z#h@QsLZ%`!>)9(?zrK1}4CR`ek)1i?7joY<>*moH( zj^7m&S-^i7j-~3V0D$6O(u>6Vo*jPBF4H(R`evvsTIvcq`_KOOA&1m_o%}7b_2PhE zK_B>kLjamy_GY`L5?wzyZhxJ%yH2(@iG zbvt2fyqS3ShtuJ$sQIDwSH6-}HEaV9mk-hFhSh$pD*)%u9SxJIQaH_xzc0TOQJn{s z&D?uVzL*gxfPB*UVb(Y)Qj`_mZ|oywh1F5dZN53+!-J*D3`@YJ>7 zN(O*UObE6$LLfY^RpF}w)zMJdK!ce-Klr5I@3sV;;f$p{t*MJj;E02j;ZpHP0;bQv zgS2KUgs$Y5=`tPc3q3;}X;JpXb=7(9Xuu1afV=v3hn6|~y*UsU?bS>PNJF%5Y zCJ%0q2U9%f(p_`xaa9ZcfjzPhrd3)c%viI993wK-6E4a23o4jqh5Y^zM!ME6jp=!l*Lkw;W|YFb3vBUg0}#~J zJ0wrl-V`<6BzY2>A3j@{(W~E87bTN#d8sIcq1rY+FoL9YeRtJ4FM5$jV((b7=zOs z%Vw_I*LeYqK##k{tLWK*mPYzWS|tkg=YiuLSaZJGpFt1y7Rgs9`^)>(bUGti-kh)& z6bY{`9W(Kg>sCMdBAV(_ls!)3f6u+`)x950ysr`doAr;zM$!kfrI>&Hrc~GiuLSc1 z%-7koNKkn2pV)86tq@bT#z*^~6(=TuHSa1vUxg9OT>o-o<=ST5?7OrCkg>PH{ncL> z9{owc5)Qj#xY5}8?Vkrf55lIdnJ+|x8X1V<>QyXMb6mDJar*K4sRFG5vwzip9w z_ME<%bhyoJrSnhzNvS2A?boxhVm7zuilKGyzaVo?IKt4w583l1 z)u0b^JL&dUpy{d5rue!3@r8u;A$0kmuuK2fDxq4nO3>N;+NEXK-2-owWQ2$1Db;w4KlnT)j0uO?THxM(H1)LwHCi0SSHH6%R zM>Xq@i3O4(#aQDvPtCdL9(9@%Zkzr46`|9?X_pYRk@L2UAff1SI6-OTG29(9UN_kT z@6EBgj~>A2zp=CMjKGLYPI@ z^9$?&O?}067>ZTeTjEVUK}ZfGdE{%|62Yq{xypDw2ybY#-M$}>*`eP$wbMMQtYmr z>8cs%sQP57B54qicIp_4#-n7$78j$9>@DeU$qLA$J8Iq(M$@=WbVQl=qy zkH0AMUYRC&QFyonv(pnF?<+8?f!(qI4!-#G^~`R6hGg9CtC?or_21n~aZ!MO#N`jv zLm)QfO4`E{q>(KA{VsR@=b#K-B(XC+y}tjUMDedYU_c4OwurvP=ysv0g!NV1*WhO7tIrHwwN|7oN+u~4fdj!Dkb*V!LH0~a^0;Qv%wK0 zg)0b)O|Be!-pCC(u_E}Cr1uKnNBKDKPig(r=!uf}QthPpj>{}IKW0^lffQnw3L93X zirbf1SzGb)T6}Ha+ms$^ol*jQ?oWIBAh4%VIPvUdRT{cgq4hb=XPp+uhM$E0*HbY2 zLh1dZTU%epPQ(;L9|?a-4MfS~t%ss@$v)YGSp(k6>r8Hbk02%mKI%3+YU3+>wcVMq zn@>7VoLnp%4fMRF;HN@eD5-kO>j@%lbyxHy5BR%Z2TkhfG!IP>_x8y>oy`WV9!OjR zM6n_DeSN$OB1vCBiES{p32TRvD4SR=2`~Gt-z*ih=3^?W(Au<2N7FtSl&>{E7hz;O zY)UXl1@^4axDz;8{A=ahN02B>&c=kkH=p2&qx3PiO69?r$vYCa-_9Hf*1!v^fbKYw zIaGrrsE>%!d-q?1rorgCrd92>zAiUuBiu%TXH?83J)nhAf3D}i-pMnYQ% z$#UdqOAR{4EgPT^CZi0ZD4s{e;3+c{yU1n;Tf0jaxGlOYsq zFM{SNmT#gkTNF-MvS4xv<8tV$aNQ!^Q~HznyPP{Dn_ZM*>sHj^TvEEM60S}uO{#91 zz+g&J@PbD0J)Qm&fxb9J(JC3C@zXf&)Hx7gYQRx8N-8c@#B#t$ODt)!Z!fdwp|QR3 zyDl9xna(-&ba^ZPP+!~pe7xQnimv7{jjrJR{ZuFLtMZH_$u2$?&n9HZzLrZ6wnpgJ z1Sycnr{bf%q)Y5GkC{@={zxr>S?~yBsfK>W3~u6X$a+;&F*DO{7gHy3`=*YJ;zDzc zg?5sAUON24tx~<3c%As|UYEUxGt)s!c8*;bon!hiuHYs-G)Oq0jX*cs7GQGr!Lo86 z`etFW+t2jYfL~L?N#)}I%0b}J=KCkzCXe!J#@Kv+z|ph@4_UrLn4&sw<#J0hTgq7U zkaS5EUo~o7a;ML~Pz)7y@>bUld-?OSSd}!t=Qmb!MWrB_7zr9kc&dGGoFwpl(fO@0 ziO-TNJfvaiOEp?fz(Vo$Tht0TYu3qF0rW`k?@RJ3RqXeudx>#=pRM<%_nD**VXlz< zK|{jmK-tAdQ>7+tPxw15X-~tdRuBa>ea>J5aZDRF;eHJ!=MFI&`AYf~(EhzBN<1SC z*9*}MEA007$^tCCP)IvBV4qGwL8F+8U2;BRuA&*T8`nwk3+Hoq`do5#aYobt4=&`| zpAbo#)qQH8cayfWHH@n2+(P8&`HMegJN40nf8wjnl2IVEUOX`J`;j~T*Mq?4yx_;~e(Eq5eQ<1_9PM)`Wi z`}zx%Q4|!JEi}t>GZiQD-R{Kfq%Imis=OSPL)m`QDAq&jUkn34yoJ4kXxBgJ()gk_aZlsU>wxU@v5|9 z@xsY#Q;&vpkthHCJEM-66tK@8;{Zm8O;e5M;mO^Y!HwJ$QyTh)HrzI=8$JUNKr$H+ zc2^<0^w5eQ9TLPlO&Ji^#`hh6$!Fx~3Aq6ohNug-l4k&S&QYIIsrLpysN}Ttb;(MR z?kCUZyg;g#9wRae*r{VmXy$rnB5f%doHxsS+R{QLIA1Q$N-}Dv%^v^sNy#^wxHa4t zfcni>jiu~6IDR>8X#V)N&l}28#BbecP-@wJy{6x*Uo6W!c*VlBR}G>aLz}m!MFX(~ zhcq$lni`It36V79(Qv>sy&y)dKr{&fhM*6*(JDm1skxSod;Z3IIOab}fP|hNd&mr( z-g@NST(;4RJG$y3|- zu4v?jior#9%K@nXr)d3d+qf&&9NLMS^6Q@v9EDT&-cU56yRV>X)%@B^yMCgRb|s$5 ziwLZbPJU8ZH@%$OsqjJE_qY>XroC_E7GY8Ls%J3AJORz9JuMcr>34%SID!&LnLM8P zr!E2Lc&bOX+8qu)eQcR;4y&r#tZqHuF|b&SFJrJdSGymOjH)o?k{JR@7JB+ zsZci73@a^nXtJo!Aj@{xFsksDQMS4zd!4BGnNj=UX``B~;u$}On3CJ6TB8;D^Eo6a zTy@Fxl=`4DUXR|jP1js}>&vA|0FF}AAq%>-R0MYyf-JofuYJ1gk?6b$Ui;)BD~4ya zHed1l(Lj@VGTa`_F0Pb!5#d&2rlOEf*%ZrgCg33RqGFU};LqC9hk^UuAUsn$9ny4Z zaOZnu=k9JtxM)aI3n;UN<(cZTZ1v5%(9|owP~(Tq$`_)z1{SeLfkZcgSFDT zQ5wUhq+2lmgt%r&-xw=kdAK+7M@QDeB`s*`5-Z-FkGX;M?DZ%yPX3?N1@=w{)wv4z zdjQ0@3G`D8Th^{b8=bTa)A^A)eKD?xr&UO@08GXr)PW3L#B-ljf_*>-GWK(WWZ;j7 z>&-zuUmcXEndymKF4a&1%lZ&1_)fqsTl)7^w+r zQ}>Mvg5StvM2GsEekpZA->3;;wC7VRm`l3IIp3RlNk9DQS`{yMrR3*c1kvx z{- zqqvnPgz(lXCjU|dY6MV+N|qvf0~*<5C?^L2N_eI#6??jW*blJH=cN7>2AV&Fp-sO7 zJfu)#q>_+ZGkqGN^K7-z-!`EUKhaqvzz3y%w*T~Dq%`bEd()c`(NeXxSo&r`+UK`c zn+G$^5g}ONHyMp5IE`2r?$jFbFR#7x_(y`SSOWBhFd@h1DE@Z3w}xP}8p>wF*g}D~ z;vaM1v5}7oN`RDeYGe!^^M|^CDV5(Ure3A| zpoV$sS;pz>znT*l&rrj=uO0*DbZ`{vKbREslEVBQwqJk;&P^mnXe1 zQR+C6-8Iyy7t^2E?zW;X*v>EEtmoh^9;*i}I}*PTyDKo+Dw@{_??ti?VipDO zxfe$In}j@WJIgpqK31;OxEGqM(O5WB;vWX>+|MTxK#M*$;iQpEF9M$}5~=8bvJTm7 zpela`Y(7LYg!&P4+ZHGC*8j}Wo3b2bC@<$H45SejRI-i~O((?}>Ba}e*OO7cGpkmb z6rp7JFgOKViLglWK#^(tw^QBY_NR1_j+^Q>kA_FrOb^BcK$K$Y_pxTd?73|`ME&<~ zjyc!`GdITMqg@Ij>9b;Y8J3w9$j3FYnkC6~3?`$KEbmB@D;mKHJm~pg1ty;OF7?`= z8RBmUq-A{;(3|fad84wMNK8{VREEPgzBt_230MM(`0OPf*E{_E=ThtV?=PN#0n$6> z>b<+b{cS9T1Qa~_d54pc+X2!8+OooS+C@W)1O_QUxkw17e3UN=aKTblDP5L@zNi?v zV40=kb_jF^BcWwmWuPl{6e)}6)Q#eNnnlZi;b$$j0>-LqQ;=h3TK<2_nR zHNLl*pD0+fL-bSLEjZ*KE39S1018Ys^yX-BgGWuN!QOnosT&z$d1p!2ho{iJe0;SX z2`Ku%YZ2Of5e+?!vq|!EfB+rf%ta~YCS!mM@n)3rZPeq&hrP?s-n zFOZ9J4fMfH5Bs4{g@GB55|?Kr3;5cMEB)|J_L}d=uPAH}_Pfi!vFM0L6iWW)dU30i zw&cKy|F>}uC_G=w>Yn=X3^6@9hJj$HD(2DEre1b#GvnKC!Xnpn@q>(@2h9LFzJW7U z00r^NErY6^zTz`WCi$;pJJ+zJ$@O_olBj7HW3kmj1$`pGwLZc{uZ^I4D7|d)X-( zd39rDL+ZT~h3Qj0#!qHJ2vLtjvx3G&yfEDUSj9(q z2mt>BFb2@XOlTCNY~ELosmw7?sL=$E2#v1?PZHW->ep?sw;K=_e{)L*t`!O1dWjeh zNZ_$0so7nFVMni3g7DYW6Z0~dQbng5dLuwC##qCdemZ%X+o%6bsiLFIlDDbyFak<; z_%0npeM-T3(TNSVdxyuViRK57U7e-<>zx+Sn)W_G#Sv1{}2L& zbiO-gSY?Nr#e4ig6neV_(UrvHjd5M)O7_po?y|WFLEr}+#DqT7>8Bcee;)<9P-{IN%`JrRWjRq};+9re? z*0Y{|A|e8O*40usIVtcc<)E$6FtX!w{NK?;`G9~Xg4bx`qw2$uj1q7F21&w}q}57C zZma@;gM&r1IbHXsV9QpnF8)KD0Az~g3O?w95X zl~`7hk8?Whjc=Zj%~329A{t!4GtkMjj@~ij6q>tZNaRno*|b^P$kVWB`f`D`s{ji? ztdx-bMNI-}V_(pEa{|lW{1B)irj=-`JBX-uEa&4SF)m1Vrf;hlk@iwXsf|p|`G3gF z81}0BbtI3%#5)rA66tyuHhmVqegnN4!MiGgRhVPlVpHaTd?42T&c8dst~wj3&c%$- zMo-q!NSei$d89bnLgP5_Fym;|l`M?WfS%;*M&6@VctRNy+i-cSv9uoy7;4BtPf)30 z9FO81{a7A*81wI#C$)ctn?enff${5@0)TnZsmLEiaMBrffHe>lBAGjDQIpG{e#`_j(eFPCIQRn; zc+ZQmxaB^-bN73bB0i}ABSn>>sTi`^$s>eugMB)e3oy+xM7N+^<6nJC#jUL`tc48g z0t+EA^ya$B{k@nHY|AB=Qp$jXuL1M2G76(gq~646A*n?@mpKF4u2VLotB+>))<7n^ zF1R9qVYCZ0NqC_?R| - - - - - - -libdap: Member List - - - - - - - - - - - -

    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::XDRFileMarshaller Member List
    -
    -
    - -

    This is the complete list of members for libdap::XDRFileMarshaller, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - -
    dump(ostream &strm) constlibdap::XDRFileMarshallervirtual
    put_byte(dods_byte val) (defined in libdap::XDRFileMarshaller)libdap::XDRFileMarshallervirtual
    put_float32(dods_float32 val) (defined in libdap::XDRFileMarshaller)libdap::XDRFileMarshallervirtual
    put_float64(dods_float64 val) (defined in libdap::XDRFileMarshaller)libdap::XDRFileMarshallervirtual
    put_int(int val) (defined in libdap::XDRFileMarshaller)libdap::XDRFileMarshallervirtual
    put_int16(dods_int16 val) (defined in libdap::XDRFileMarshaller)libdap::XDRFileMarshallervirtual
    put_int32(dods_int32 val) (defined in libdap::XDRFileMarshaller)libdap::XDRFileMarshallervirtual
    put_opaque(char *val, unsigned int len) (defined in libdap::XDRFileMarshaller)libdap::XDRFileMarshallervirtual
    put_str(const string &val) (defined in libdap::XDRFileMarshaller)libdap::XDRFileMarshallervirtual
    put_uint16(dods_uint16 val) (defined in libdap::XDRFileMarshaller)libdap::XDRFileMarshallervirtual
    put_uint32(dods_uint32 val) (defined in libdap::XDRFileMarshaller)libdap::XDRFileMarshallervirtual
    put_url(const string &val) (defined in libdap::XDRFileMarshaller)libdap::XDRFileMarshallervirtual
    put_vector(char *val, int num, Vector &vec) (defined in libdap::XDRFileMarshaller)libdap::XDRFileMarshallervirtual
    put_vector(char *val, int num, int width, Vector &vec) (defined in libdap::XDRFileMarshaller)libdap::XDRFileMarshallervirtual
    put_vector_end()libdap::Marshallerinlinevirtual
    put_vector_part(char *, unsigned int, int, Type)libdap::Marshallerinlinevirtual
    put_vector_start(int)libdap::Marshallerinlinevirtual
    XDRFileMarshaller(FILE *out) (defined in libdap::XDRFileMarshaller)libdap::XDRFileMarshaller
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    ~XDRFileMarshaller() (defined in libdap::XDRFileMarshaller)libdap::XDRFileMarshallervirtual
    -
    - - - - diff --git a/html/classlibdap_1_1XDRFileMarshaller.html b/html/classlibdap_1_1XDRFileMarshaller.html deleted file mode 100644 index 120f40a6f..000000000 --- a/html/classlibdap_1_1XDRFileMarshaller.html +++ /dev/null @@ -1,328 +0,0 @@ - - - - - - - -libdap: libdap::XDRFileMarshaller Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::XDRFileMarshaller Class Reference
    -
    -
    - -

    marshaller that knows how to marshall/serialize dap data objects to a file using XDR - More...

    - -

    #include <XDRFileMarshaller.h>

    -
    -Inheritance diagram for libdap::XDRFileMarshaller:
    -
    -
    Inheritance graph
    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual void dump (ostream &strm) const
     dump the contents of this object to the specified ostream More...
     
    -virtual void put_byte (dods_byte val)
     
    -virtual void put_float32 (dods_float32 val)
     
    -virtual void put_float64 (dods_float64 val)
     
    -virtual void put_int (int val)
     
    -virtual void put_int16 (dods_int16 val)
     
    -virtual void put_int32 (dods_int32 val)
     
    -virtual void put_opaque (char *val, unsigned int len)
     
    -virtual void put_str (const string &val)
     
    -virtual void put_uint16 (dods_uint16 val)
     
    -virtual void put_uint32 (dods_uint32 val)
     
    -virtual void put_url (const string &val)
     
    -virtual void put_vector (char *val, int num, Vector &vec)
     
    -virtual void put_vector (char *val, int num, int width, Vector &vec)
     
    virtual void put_vector_end ()
     
    virtual void put_vector_part (char *, unsigned int, int, Type)
     
    virtual void put_vector_start (int)
     
    XDRFileMarshaller (FILE *out)
     
    -

    Detailed Description

    -

    marshaller that knows how to marshall/serialize dap data objects to a file using XDR

    - -

    Definition at line 48 of file XDRFileMarshaller.h.

    -

    Member Function Documentation

    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::XDRFileMarshaller::dump (ostream & strm) const
    -
    -virtual
    -
    - -

    dump the contents of this object to the specified ostream

    -

    This method is implemented by all derived classes to dump their contents, in other words, any state they might have, private variables, etc...

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the object to
    -
    -
    - -

    Implements libdap::Marshaller.

    - -

    Definition at line 182 of file XDRFileMarshaller.cc.

    - -
    -
    - -

    ◆ put_vector_end()

    - -
    -
    - - - - - -
    - - - - - - - -
    virtual void libdap::Marshaller::put_vector_end ()
    -
    -inlinevirtualinherited
    -
    -

    Close a vector written using put_vector_part()

    - -

    Reimplemented in libdap::D4StreamMarshaller, and libdap::XDRStreamMarshaller.

    - -

    Definition at line 98 of file Marshaller.h.

    - -
    -
    - -

    ◆ put_vector_part()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    virtual void libdap::Marshaller::put_vector_part (char * ,
    unsigned int ,
    int ,
    Type  
    )
    -
    -inlinevirtualinherited
    -
    -

    Write one part of a vector's contents.

    -
    Parameters
    - - - - - -
    valPointer to the part's values
    numThe number of values in this part
    widthThe number of bytes per value
    typeThe DAP2 data type for each value
    -
    -
    - -

    Reimplemented in libdap::D4StreamMarshaller, and libdap::XDRStreamMarshaller.

    - -

    Definition at line 91 of file Marshaller.h.

    - -
    -
    - -

    ◆ put_vector_start()

    - -
    -
    - - - - - -
    - - - - - - - - -
    virtual void libdap::Marshaller::put_vector_start (int )
    -
    -inlinevirtualinherited
    -
    -

    Write the prefix bytes for a vector and reset the state/counter for a vector/array that will be written using put_vector_part() and put_vector_end().

    -
    Parameters
    - - -
    numThe number of elements to write
    -
    -
    - -

    Reimplemented in libdap::D4StreamMarshaller, and libdap::XDRStreamMarshaller.

    - -

    Definition at line 79 of file Marshaller.h.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1XDRFileMarshaller.js b/html/classlibdap_1_1XDRFileMarshaller.js deleted file mode 100644 index f13aa8c9c..000000000 --- a/html/classlibdap_1_1XDRFileMarshaller.js +++ /dev/null @@ -1,22 +0,0 @@ -var classlibdap_1_1XDRFileMarshaller = -[ - [ "XDRFileMarshaller", "classlibdap_1_1XDRFileMarshaller.html#ac492a403b2021e54beb6117a16777a85", null ], - [ "~XDRFileMarshaller", "classlibdap_1_1XDRFileMarshaller.html#a0e9c48d5dac7c7e23ad73041250e42e5", null ], - [ "dump", "classlibdap_1_1XDRFileMarshaller.html#ac18c437e979e0689411fe0327660fe21", null ], - [ "put_byte", "classlibdap_1_1XDRFileMarshaller.html#ae59b2ed13e57db21dfee45048647b5dc", null ], - [ "put_float32", "classlibdap_1_1XDRFileMarshaller.html#afef2b5f926f316108940ada99dcbbe52", null ], - [ "put_float64", "classlibdap_1_1XDRFileMarshaller.html#a30a90f2a1c1621a6aea60d7529195a17", null ], - [ "put_int", "classlibdap_1_1XDRFileMarshaller.html#ae8471d29021141ff723ba00ebfed199b", null ], - [ "put_int16", "classlibdap_1_1XDRFileMarshaller.html#a31b0b5e3a20a62fc78bc7b5de73b5432", null ], - [ "put_int32", "classlibdap_1_1XDRFileMarshaller.html#a43ff6ab7c5899c6ed5d00fabfe7378d5", null ], - [ "put_opaque", "classlibdap_1_1XDRFileMarshaller.html#a3e982b1af7e682aa54b88143a2d94264", null ], - [ "put_str", "classlibdap_1_1XDRFileMarshaller.html#a631ed426774e48c51c84c11ae0b19670", null ], - [ "put_uint16", "classlibdap_1_1XDRFileMarshaller.html#a8aa245cea6b01fe61abe430d42ed87d1", null ], - [ "put_uint32", "classlibdap_1_1XDRFileMarshaller.html#a77192c7e8103b7417c7327b2c768622d", null ], - [ "put_url", "classlibdap_1_1XDRFileMarshaller.html#a6c489d731cb385ab535c8be961a47551", null ], - [ "put_vector", "classlibdap_1_1XDRFileMarshaller.html#a7bbe202d8e4942230a1c27615d23abbb", null ], - [ "put_vector", "classlibdap_1_1XDRFileMarshaller.html#a34f2e689f1363a2ce4052c5a04a7619d", null ], - [ "put_vector_end", "classlibdap_1_1XDRFileMarshaller.html#a3409a138c4a67bc9dd24a3a2ad6f97db", null ], - [ "put_vector_part", "classlibdap_1_1XDRFileMarshaller.html#a8b303c96939749f6aca62d0e582909b0", null ], - [ "put_vector_start", "classlibdap_1_1XDRFileMarshaller.html#ae0cd4b847386e89eace23e6b2fc08826", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1XDRFileMarshaller__inherit__graph.map b/html/classlibdap_1_1XDRFileMarshaller__inherit__graph.map deleted file mode 100644 index a38f1addc..000000000 --- a/html/classlibdap_1_1XDRFileMarshaller__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1XDRFileMarshaller__inherit__graph.md5 b/html/classlibdap_1_1XDRFileMarshaller__inherit__graph.md5 deleted file mode 100644 index 56beae958..000000000 --- a/html/classlibdap_1_1XDRFileMarshaller__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -99fdafa9d8601aef5e485012133908f3 \ No newline at end of file diff --git a/html/classlibdap_1_1XDRFileMarshaller__inherit__graph.png b/html/classlibdap_1_1XDRFileMarshaller__inherit__graph.png deleted file mode 100644 index f456569969a31b313a341d2b6934d399ea3ff04d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29184 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 - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::XDRFileUnMarshaller Member List
    -
    -
    - -

    This is the complete list of members for libdap::XDRFileUnMarshaller, including all inherited members.

    - - - - - - - - - - - - - - - - - - -
    dump(ostream &strm) constlibdap::XDRFileUnMarshallervirtual
    get_byte(dods_byte &val) (defined in libdap::XDRFileUnMarshaller)libdap::XDRFileUnMarshallervirtual
    get_float32(dods_float32 &val) (defined in libdap::XDRFileUnMarshaller)libdap::XDRFileUnMarshallervirtual
    get_float64(dods_float64 &val) (defined in libdap::XDRFileUnMarshaller)libdap::XDRFileUnMarshallervirtual
    get_int(int &val) (defined in libdap::XDRFileUnMarshaller)libdap::XDRFileUnMarshallervirtual
    get_int16(dods_int16 &val) (defined in libdap::XDRFileUnMarshaller)libdap::XDRFileUnMarshallervirtual
    get_int32(dods_int32 &val) (defined in libdap::XDRFileUnMarshaller)libdap::XDRFileUnMarshallervirtual
    get_opaque(char *val, unsigned int len) (defined in libdap::XDRFileUnMarshaller)libdap::XDRFileUnMarshallervirtual
    get_str(string &val) (defined in libdap::XDRFileUnMarshaller)libdap::XDRFileUnMarshallervirtual
    get_uint16(dods_uint16 &val) (defined in libdap::XDRFileUnMarshaller)libdap::XDRFileUnMarshallervirtual
    get_uint32(dods_uint32 &val) (defined in libdap::XDRFileUnMarshaller)libdap::XDRFileUnMarshallervirtual
    get_url(string &val) (defined in libdap::XDRFileUnMarshaller)libdap::XDRFileUnMarshallervirtual
    get_vector(char **val, unsigned int &num, Vector &vec) (defined in libdap::XDRFileUnMarshaller)libdap::XDRFileUnMarshallervirtual
    get_vector(char **val, unsigned int &num, int width, Vector &vec) (defined in libdap::XDRFileUnMarshaller)libdap::XDRFileUnMarshallervirtual
    XDRFileUnMarshaller(FILE *out) (defined in libdap::XDRFileUnMarshaller)libdap::XDRFileUnMarshaller
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    ~XDRFileUnMarshaller() (defined in libdap::XDRFileUnMarshaller)libdap::XDRFileUnMarshallervirtual
    -
    - - - - diff --git a/html/classlibdap_1_1XDRFileUnMarshaller.html b/html/classlibdap_1_1XDRFileUnMarshaller.html deleted file mode 100644 index 7a2ab3852..000000000 --- a/html/classlibdap_1_1XDRFileUnMarshaller.html +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - -libdap: libdap::XDRFileUnMarshaller Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::XDRFileUnMarshaller Class Reference
    -
    -
    - -

    unmarshaller that knows how to unmarshall/deserialize dap objects using XDR from a file - More...

    - -

    #include <XDRFileUnMarshaller.h>

    -
    -Inheritance diagram for libdap::XDRFileUnMarshaller:
    -
    -
    Inheritance graph
    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual void dump (ostream &strm) const
     dump the contents of this object to the specified ostream More...
     
    -virtual void get_byte (dods_byte &val)
     
    -virtual void get_float32 (dods_float32 &val)
     
    -virtual void get_float64 (dods_float64 &val)
     
    -virtual void get_int (int &val)
     
    -virtual void get_int16 (dods_int16 &val)
     
    -virtual void get_int32 (dods_int32 &val)
     
    -virtual void get_opaque (char *val, unsigned int len)
     
    -virtual void get_str (string &val)
     
    -virtual void get_uint16 (dods_uint16 &val)
     
    -virtual void get_uint32 (dods_uint32 &val)
     
    -virtual void get_url (string &val)
     
    -virtual void get_vector (char **val, unsigned int &num, Vector &vec)
     
    -virtual void get_vector (char **val, unsigned int &num, int width, Vector &vec)
     
    XDRFileUnMarshaller (FILE *out)
     
    -

    Detailed Description

    -

    unmarshaller that knows how to unmarshall/deserialize dap objects using XDR from a file

    - -

    Definition at line 45 of file XDRFileUnMarshaller.h.

    -

    Member Function Documentation

    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::XDRFileUnMarshaller::dump (ostream & strm) const
    -
    -virtual
    -
    - -

    dump the contents of this object to the specified ostream

    -

    This method is implemented by all derived classes to dump their contents, in other words, any state they might have, private variables, etc...

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the object to
    -
    -
    - -

    Implements libdap::UnMarshaller.

    - -

    Definition at line 191 of file XDRFileUnMarshaller.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1XDRFileUnMarshaller.js b/html/classlibdap_1_1XDRFileUnMarshaller.js deleted file mode 100644 index ff3221ace..000000000 --- a/html/classlibdap_1_1XDRFileUnMarshaller.js +++ /dev/null @@ -1,19 +0,0 @@ -var classlibdap_1_1XDRFileUnMarshaller = -[ - [ "XDRFileUnMarshaller", "classlibdap_1_1XDRFileUnMarshaller.html#a094838fb44e7f33e351bcb010ac1cd9f", null ], - [ "~XDRFileUnMarshaller", "classlibdap_1_1XDRFileUnMarshaller.html#a655034ba162aa33888fb0fde2565fe46", null ], - [ "dump", "classlibdap_1_1XDRFileUnMarshaller.html#ae77f16074759c9d855f6155a93380635", null ], - [ "get_byte", "classlibdap_1_1XDRFileUnMarshaller.html#a93670ac3bf26e9ae1fda68670afd0094", null ], - [ "get_float32", "classlibdap_1_1XDRFileUnMarshaller.html#a51f8aebded24bd4a5fcb246aded341c1", null ], - [ "get_float64", "classlibdap_1_1XDRFileUnMarshaller.html#af5ecc08a045dc82fa262ff411cf25f08", null ], - [ "get_int", "classlibdap_1_1XDRFileUnMarshaller.html#a0e23e1a7153099f155746d34d6975782", null ], - [ "get_int16", "classlibdap_1_1XDRFileUnMarshaller.html#afbbcc6a95207b4f2eced695d31b89ccd", null ], - [ "get_int32", "classlibdap_1_1XDRFileUnMarshaller.html#a19156324e5936f82b378c412994e79b2", null ], - [ "get_opaque", "classlibdap_1_1XDRFileUnMarshaller.html#a243b48a28f702f80455691bbbf403ee5", null ], - [ "get_str", "classlibdap_1_1XDRFileUnMarshaller.html#a81e70905e5187223a987e41f356769c7", null ], - [ "get_uint16", "classlibdap_1_1XDRFileUnMarshaller.html#a14b3dbbb1bc6bff52f51a3471caf5fc6", null ], - [ "get_uint32", "classlibdap_1_1XDRFileUnMarshaller.html#a5d22491e5703e481c0f8bb272483f288", null ], - [ "get_url", "classlibdap_1_1XDRFileUnMarshaller.html#af98228fb5d1e56e6a6969c65ec57be04", null ], - [ "get_vector", "classlibdap_1_1XDRFileUnMarshaller.html#a8337fdb7575006038ae324110f9f44ce", null ], - [ "get_vector", "classlibdap_1_1XDRFileUnMarshaller.html#a072ecad7d0f66f91454d0afae6276eec", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1XDRFileUnMarshaller__inherit__graph.map b/html/classlibdap_1_1XDRFileUnMarshaller__inherit__graph.map deleted file mode 100644 index 086ffdc84..000000000 --- a/html/classlibdap_1_1XDRFileUnMarshaller__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1XDRFileUnMarshaller__inherit__graph.md5 b/html/classlibdap_1_1XDRFileUnMarshaller__inherit__graph.md5 deleted file mode 100644 index 5f5f2745e..000000000 --- a/html/classlibdap_1_1XDRFileUnMarshaller__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -3381f0ca4d46f08a2ea3d253df6b349f \ No newline at end of file diff --git a/html/classlibdap_1_1XDRFileUnMarshaller__inherit__graph.png b/html/classlibdap_1_1XDRFileUnMarshaller__inherit__graph.png deleted file mode 100644 index 23e11157383e76af5c7abe9d7f181c09c7974d84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33551 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 I-XP$A0HNB8^Z)<= diff --git a/html/classlibdap_1_1XDRStreamMarshaller-members.html b/html/classlibdap_1_1XDRStreamMarshaller-members.html deleted file mode 100644 index bd4f9c0d4..000000000 --- a/html/classlibdap_1_1XDRStreamMarshaller-members.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::XDRStreamMarshaller Member List
    -
    -
    - -

    This is the complete list of members for libdap::XDRStreamMarshaller, including all inherited members.

    - - - - - - - - - - - - - - - - - - - - - - -
    dump(ostream &strm) constlibdap::XDRStreamMarshallervirtual
    MarshallerTest (defined in libdap::XDRStreamMarshaller)libdap::XDRStreamMarshallerfriend
    put_byte(dods_byte val) (defined in libdap::XDRStreamMarshaller)libdap::XDRStreamMarshallervirtual
    put_float32(dods_float32 val) (defined in libdap::XDRStreamMarshaller)libdap::XDRStreamMarshallervirtual
    put_float64(dods_float64 val) (defined in libdap::XDRStreamMarshaller)libdap::XDRStreamMarshallervirtual
    put_int(int val) (defined in libdap::XDRStreamMarshaller)libdap::XDRStreamMarshallervirtual
    put_int16(dods_int16 val) (defined in libdap::XDRStreamMarshaller)libdap::XDRStreamMarshallervirtual
    put_int32(dods_int32 val) (defined in libdap::XDRStreamMarshaller)libdap::XDRStreamMarshallervirtual
    put_opaque(char *val, unsigned int len) (defined in libdap::XDRStreamMarshaller)libdap::XDRStreamMarshallervirtual
    put_str(const string &val) (defined in libdap::XDRStreamMarshaller)libdap::XDRStreamMarshallervirtual
    put_uint16(dods_uint16 val) (defined in libdap::XDRStreamMarshaller)libdap::XDRStreamMarshallervirtual
    put_uint32(dods_uint32 val) (defined in libdap::XDRStreamMarshaller)libdap::XDRStreamMarshallervirtual
    put_url(const string &val) (defined in libdap::XDRStreamMarshaller)libdap::XDRStreamMarshallervirtual
    put_vector(char *val, int num, Vector &vec) (defined in libdap::XDRStreamMarshaller)libdap::XDRStreamMarshallervirtual
    put_vector(char *val, int num, int width, Vector &vec) (defined in libdap::XDRStreamMarshaller)libdap::XDRStreamMarshallervirtual
    put_vector_end()libdap::XDRStreamMarshallervirtual
    put_vector_part(char *val, unsigned int num, int width, Type type)libdap::XDRStreamMarshallervirtual
    put_vector_start(int num)libdap::XDRStreamMarshallervirtual
    XDRStreamMarshaller(ostream &out)libdap::XDRStreamMarshaller
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    ~XDRStreamMarshaller() (defined in libdap::XDRStreamMarshaller)libdap::XDRStreamMarshallervirtual
    -
    - - - - diff --git a/html/classlibdap_1_1XDRStreamMarshaller.html b/html/classlibdap_1_1XDRStreamMarshaller.html deleted file mode 100644 index 2ea0cb5da..000000000 --- a/html/classlibdap_1_1XDRStreamMarshaller.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - - - -libdap: libdap::XDRStreamMarshaller Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::XDRStreamMarshaller Class Reference
    -
    -
    - -

    Marshaller that knows how serialize dap data objects to a C++ iostream using XDR. - More...

    - -

    #include <XDRStreamMarshaller.h>

    -
    -Inheritance diagram for libdap::XDRStreamMarshaller:
    -
    -
    Inheritance graph
    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual void dump (ostream &strm) const
     dump the contents of this object to the specified ostream More...
     
    -virtual void put_byte (dods_byte val)
     
    -virtual void put_float32 (dods_float32 val)
     
    -virtual void put_float64 (dods_float64 val)
     
    -virtual void put_int (int val)
     
    -virtual void put_int16 (dods_int16 val)
     
    -virtual void put_int32 (dods_int32 val)
     
    -virtual void put_opaque (char *val, unsigned int len)
     
    -virtual void put_str (const string &val)
     
    -virtual void put_uint16 (dods_uint16 val)
     
    -virtual void put_uint32 (dods_uint32 val)
     
    -virtual void put_url (const string &val)
     
    -virtual void put_vector (char *val, int num, Vector &vec)
     
    -virtual void put_vector (char *val, int num, int width, Vector &vec)
     
    virtual void put_vector_end ()
     
    virtual void put_vector_part (char *val, unsigned int num, int width, Type type)
     
    virtual void put_vector_start (int num)
     
     XDRStreamMarshaller (ostream &out)
     
    - - - -

    -Friends

    -class MarshallerTest
     
    -

    Detailed Description

    -

    Marshaller that knows how serialize dap data objects to a C++ iostream using XDR.

    - -

    Definition at line 54 of file XDRStreamMarshaller.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ XDRStreamMarshaller()

    - -
    -
    - - - - - - - - -
    libdap::XDRStreamMarshaller::XDRStreamMarshaller (ostream & out)
    -
    -

    Build an instance of XDRStreamMarshaller. Bind the C++ stream out to this instance. If the checksum parameter is true, initialize a checksum buffer and enable the use of the reset_checksum() and get_checksum() methods.

    -
    Parameters
    - - - - -
    outWrite to this stream object.
    checksumIf true, compute checksums. False by default
    write_dataIf true, write data values. True by default
    -
    -
    - -

    Definition at line 80 of file XDRStreamMarshaller.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::XDRStreamMarshaller::dump (ostream & strm) const
    -
    -virtual
    -
    - -

    dump the contents of this object to the specified ostream

    -

    This method is implemented by all derived classes to dump their contents, in other words, any state they might have, private variables, etc...

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the object to
    -
    -
    - -

    Implements libdap::Marshaller.

    - -

    Definition at line 619 of file XDRStreamMarshaller.cc.

    - -
    -
    - -

    ◆ put_vector_end()

    - -
    -
    - - - - - -
    - - - - - - - -
    void libdap::XDRStreamMarshaller::put_vector_end ()
    -
    -virtual
    -
    -

    Close a vector when its values are written using put_vector_part().

    -
    See also
    put_vector_start()
    -
    -put_vector_part()
    - -

    Reimplemented from libdap::Marshaller.

    - -

    Definition at line 373 of file XDRStreamMarshaller.cc.

    - -
    -
    - -

    ◆ put_vector_part()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void libdap::XDRStreamMarshaller::put_vector_part (char * val,
    unsigned int num,
    int width,
    Type type 
    )
    -
    -virtual
    -
    -

    Write num values for an Array/Vector.

    -
    Parameters
    - - - - - -
    valThe values to write
    numthe number of values to write
    widthThe width of the values
    typeThe DAP2 type of the values.
    -
    -
    -
    See also
    put_vector_start()
    -
    -put_vector_end()
    - -

    Reimplemented from libdap::Marshaller.

    - -

    Definition at line 517 of file XDRStreamMarshaller.cc.

    - -
    -
    - -

    ◆ put_vector_start()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::XDRStreamMarshaller::put_vector_start (int num)
    -
    -virtual
    -
    -

    Prepare to send a single array/vector using a series of 'put' calls.

    -
    Parameters
    - - -
    numThe number of elements in the Array/Vector
    -
    -
    -
    See also
    put_vector_part()
    -
    -put_vector_end()
    - -

    Reimplemented from libdap::Marshaller.

    - -

    Definition at line 359 of file XDRStreamMarshaller.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1XDRStreamMarshaller.js b/html/classlibdap_1_1XDRStreamMarshaller.js deleted file mode 100644 index bebda3095..000000000 --- a/html/classlibdap_1_1XDRStreamMarshaller.js +++ /dev/null @@ -1,23 +0,0 @@ -var classlibdap_1_1XDRStreamMarshaller = -[ - [ "XDRStreamMarshaller", "classlibdap_1_1XDRStreamMarshaller.html#a172f3cad856e8d1528fb97e0d34b5163", null ], - [ "~XDRStreamMarshaller", "classlibdap_1_1XDRStreamMarshaller.html#a316682ad41aa9452a2943d184ac40fb2", null ], - [ "dump", "classlibdap_1_1XDRStreamMarshaller.html#a3601923f45d9182c92eb684e64d20d47", null ], - [ "put_byte", "classlibdap_1_1XDRStreamMarshaller.html#aefd9b5209bd7a7f0ef4f09839ec7d946", null ], - [ "put_float32", "classlibdap_1_1XDRStreamMarshaller.html#a9c4ba2e1d9426099ad05f6f37d74e944", null ], - [ "put_float64", "classlibdap_1_1XDRStreamMarshaller.html#a40b7e93f5a7836ebb887af167e1966ac", null ], - [ "put_int", "classlibdap_1_1XDRStreamMarshaller.html#ab95d8967294368ac7ac0cca15994a2f6", null ], - [ "put_int16", "classlibdap_1_1XDRStreamMarshaller.html#a5fca4ee0c826201f18580d7993d7110f", null ], - [ "put_int32", "classlibdap_1_1XDRStreamMarshaller.html#abff85411e7d070689e763c2fbf36c352", null ], - [ "put_opaque", "classlibdap_1_1XDRStreamMarshaller.html#abd3f852b1de706a5df7e87d8168ad3dd", null ], - [ "put_str", "classlibdap_1_1XDRStreamMarshaller.html#a49439f41adb1cbe99085270e034be860", null ], - [ "put_uint16", "classlibdap_1_1XDRStreamMarshaller.html#a9d3d3fd47e7c5d91dc78a6e1fc91fa42", null ], - [ "put_uint32", "classlibdap_1_1XDRStreamMarshaller.html#ac82fab79aaf18be87c28cd8293780f96", null ], - [ "put_url", "classlibdap_1_1XDRStreamMarshaller.html#a98a25c0e971ecd5c4c2217671986373a", null ], - [ "put_vector", "classlibdap_1_1XDRStreamMarshaller.html#a7bc1ab8d516f9ef24b1ceb27814c5307", null ], - [ "put_vector", "classlibdap_1_1XDRStreamMarshaller.html#ae2afb4cff43b5836838bd5261c81ed7c", null ], - [ "put_vector_end", "classlibdap_1_1XDRStreamMarshaller.html#a4ffeb114ca4cf161366d82e6abc68acf", null ], - [ "put_vector_part", "classlibdap_1_1XDRStreamMarshaller.html#af1ce1f82a6e78f649e124bded447026b", null ], - [ "put_vector_start", "classlibdap_1_1XDRStreamMarshaller.html#ac29944748706b36e48cb7428752cf467", null ], - [ "MarshallerTest", "classlibdap_1_1XDRStreamMarshaller.html#a1fff161da8726dcea8f5af4428342f73", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1XDRStreamMarshaller__inherit__graph.map b/html/classlibdap_1_1XDRStreamMarshaller__inherit__graph.map deleted file mode 100644 index a44806321..000000000 --- a/html/classlibdap_1_1XDRStreamMarshaller__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1XDRStreamMarshaller__inherit__graph.md5 b/html/classlibdap_1_1XDRStreamMarshaller__inherit__graph.md5 deleted file mode 100644 index a054765e3..000000000 --- a/html/classlibdap_1_1XDRStreamMarshaller__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -3e8287e8554fea3e096aebe9d37bc343 \ No newline at end of file diff --git a/html/classlibdap_1_1XDRStreamMarshaller__inherit__graph.png b/html/classlibdap_1_1XDRStreamMarshaller__inherit__graph.png deleted file mode 100644 index b92f820619fce6c2fd8e792882ee5585928b0641..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30348 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 - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::XDRStreamUnMarshaller Member List
    -
    -
    - -

    This is the complete list of members for libdap::XDRStreamUnMarshaller, including all inherited members.

    - - - - - - - - - - - - - - - - - - - -
    dump(ostream &strm) constlibdap::XDRStreamUnMarshallervirtual
    get_byte(dods_byte &val) (defined in libdap::XDRStreamUnMarshaller)libdap::XDRStreamUnMarshallervirtual
    get_float32(dods_float32 &val) (defined in libdap::XDRStreamUnMarshaller)libdap::XDRStreamUnMarshallervirtual
    get_float64(dods_float64 &val) (defined in libdap::XDRStreamUnMarshaller)libdap::XDRStreamUnMarshallervirtual
    get_int(int &val) (defined in libdap::XDRStreamUnMarshaller)libdap::XDRStreamUnMarshallervirtual
    get_int16(dods_int16 &val) (defined in libdap::XDRStreamUnMarshaller)libdap::XDRStreamUnMarshallervirtual
    get_int32(dods_int32 &val) (defined in libdap::XDRStreamUnMarshaller)libdap::XDRStreamUnMarshallervirtual
    get_opaque(char *val, unsigned int len) (defined in libdap::XDRStreamUnMarshaller)libdap::XDRStreamUnMarshallervirtual
    get_str(string &val) (defined in libdap::XDRStreamUnMarshaller)libdap::XDRStreamUnMarshallervirtual
    get_uint16(dods_uint16 &val) (defined in libdap::XDRStreamUnMarshaller)libdap::XDRStreamUnMarshallervirtual
    get_uint32(dods_uint32 &val) (defined in libdap::XDRStreamUnMarshaller)libdap::XDRStreamUnMarshallervirtual
    get_url(string &val) (defined in libdap::XDRStreamUnMarshaller)libdap::XDRStreamUnMarshallervirtual
    get_vector(char **val, unsigned int &num, Vector &vec) (defined in libdap::XDRStreamUnMarshaller)libdap::XDRStreamUnMarshallervirtual
    get_vector(char **val, unsigned int &num, int width, Vector &vec) (defined in libdap::XDRStreamUnMarshaller)libdap::XDRStreamUnMarshallervirtual
    get_vector(char **val, unsigned int &num, int width, Type type) (defined in libdap::XDRStreamUnMarshaller)libdap::XDRStreamUnMarshallervirtual
    XDRStreamUnMarshaller(istream &in) (defined in libdap::XDRStreamUnMarshaller)libdap::XDRStreamUnMarshaller
    ~DapObj() (defined in libdap::DapObj)libdap::DapObjinlinevirtual
    ~XDRStreamUnMarshaller() (defined in libdap::XDRStreamUnMarshaller)libdap::XDRStreamUnMarshallervirtual
    -
    - - - - diff --git a/html/classlibdap_1_1XDRStreamUnMarshaller.html b/html/classlibdap_1_1XDRStreamUnMarshaller.html deleted file mode 100644 index b20bd206a..000000000 --- a/html/classlibdap_1_1XDRStreamUnMarshaller.html +++ /dev/null @@ -1,196 +0,0 @@ - - - - - - - -libdap: libdap::XDRStreamUnMarshaller Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::XDRStreamUnMarshaller Class Reference
    -
    -
    - -

    unmarshaller that knows how to unmarshall/deserialize dap objects using XDR from a file - More...

    - -

    #include <XDRStreamUnMarshaller.h>

    -
    -Inheritance diagram for libdap::XDRStreamUnMarshaller:
    -
    -
    Inheritance graph
    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Public Member Functions

    virtual void dump (ostream &strm) const
     dump the contents of this object to the specified ostream More...
     
    -virtual void get_byte (dods_byte &val)
     
    -virtual void get_float32 (dods_float32 &val)
     
    -virtual void get_float64 (dods_float64 &val)
     
    -virtual void get_int (int &val)
     
    -virtual void get_int16 (dods_int16 &val)
     
    -virtual void get_int32 (dods_int32 &val)
     
    -virtual void get_opaque (char *val, unsigned int len)
     
    -virtual void get_str (string &val)
     
    -virtual void get_uint16 (dods_uint16 &val)
     
    -virtual void get_uint32 (dods_uint32 &val)
     
    -virtual void get_url (string &val)
     
    -virtual void get_vector (char **val, unsigned int &num, Vector &vec)
     
    -virtual void get_vector (char **val, unsigned int &num, int width, Vector &vec)
     
    -virtual void get_vector (char **val, unsigned int &num, int width, Type type)
     
    XDRStreamUnMarshaller (istream &in)
     
    -

    Detailed Description

    -

    unmarshaller that knows how to unmarshall/deserialize dap objects using XDR from a file

    - -

    Definition at line 52 of file XDRStreamUnMarshaller.h.

    -

    Member Function Documentation

    - -

    ◆ dump()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::XDRStreamUnMarshaller::dump (ostream & strm) const
    -
    -virtual
    -
    - -

    dump the contents of this object to the specified ostream

    -

    This method is implemented by all derived classes to dump their contents, in other words, any state they might have, private variables, etc...

    -
    Parameters
    - - -
    strmC++ i/o stream to dump the object to
    -
    -
    - -

    Implements libdap::UnMarshaller.

    - -

    Definition at line 334 of file XDRStreamUnMarshaller.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1XDRStreamUnMarshaller.js b/html/classlibdap_1_1XDRStreamUnMarshaller.js deleted file mode 100644 index bc5f1d938..000000000 --- a/html/classlibdap_1_1XDRStreamUnMarshaller.js +++ /dev/null @@ -1,20 +0,0 @@ -var classlibdap_1_1XDRStreamUnMarshaller = -[ - [ "XDRStreamUnMarshaller", "classlibdap_1_1XDRStreamUnMarshaller.html#a2f198611509f1c92d833a59019d3aef2", null ], - [ "~XDRStreamUnMarshaller", "classlibdap_1_1XDRStreamUnMarshaller.html#a8eaf54024dd92c94cccdcc9912fa869c", null ], - [ "dump", "classlibdap_1_1XDRStreamUnMarshaller.html#a9ae38967a1c736b5ad7d851e2bc746fa", null ], - [ "get_byte", "classlibdap_1_1XDRStreamUnMarshaller.html#a340f2532faac2192394beeb33c2f768f", null ], - [ "get_float32", "classlibdap_1_1XDRStreamUnMarshaller.html#ad4201be4b41fcecc7dea8accd2fd5944", null ], - [ "get_float64", "classlibdap_1_1XDRStreamUnMarshaller.html#a7e598c6c7462c92483203626b5ab728c", null ], - [ "get_int", "classlibdap_1_1XDRStreamUnMarshaller.html#a1014ada10f5712e4a5bc26e9ebca3c69", null ], - [ "get_int16", "classlibdap_1_1XDRStreamUnMarshaller.html#a464d4586233c9275474f31ecc7eb5367", null ], - [ "get_int32", "classlibdap_1_1XDRStreamUnMarshaller.html#a25eabe5ab065866e285efc9c8d352830", null ], - [ "get_opaque", "classlibdap_1_1XDRStreamUnMarshaller.html#ac06867d030af3b9b0309f4a17a88642c", null ], - [ "get_str", "classlibdap_1_1XDRStreamUnMarshaller.html#a2545622a8a1ad1e70adcb592c53aab23", null ], - [ "get_uint16", "classlibdap_1_1XDRStreamUnMarshaller.html#a63cc7ff3acfcfdef0b867bb9477741cd", null ], - [ "get_uint32", "classlibdap_1_1XDRStreamUnMarshaller.html#a7646829dc1610ea0b47f58a283148c2c", null ], - [ "get_url", "classlibdap_1_1XDRStreamUnMarshaller.html#a6ae6a6c0d3bdf4548836ef97ca997d7a", null ], - [ "get_vector", "classlibdap_1_1XDRStreamUnMarshaller.html#ae0bbd240a30d298592f80e88dc282fa6", null ], - [ "get_vector", "classlibdap_1_1XDRStreamUnMarshaller.html#aba4e6e35c50b0a574a1c48f8a74fe522", null ], - [ "get_vector", "classlibdap_1_1XDRStreamUnMarshaller.html#a18d475a8812cc64402feb59e2dc3bc92", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1XDRStreamUnMarshaller__inherit__graph.map b/html/classlibdap_1_1XDRStreamUnMarshaller__inherit__graph.map deleted file mode 100644 index 660fce804..000000000 --- a/html/classlibdap_1_1XDRStreamUnMarshaller__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/classlibdap_1_1XDRStreamUnMarshaller__inherit__graph.md5 b/html/classlibdap_1_1XDRStreamUnMarshaller__inherit__graph.md5 deleted file mode 100644 index 4be18157f..000000000 --- a/html/classlibdap_1_1XDRStreamUnMarshaller__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -4c1c282617276a3b8ad5fb1a7419bf99 \ No newline at end of file diff --git a/html/classlibdap_1_1XDRStreamUnMarshaller__inherit__graph.png b/html/classlibdap_1_1XDRStreamUnMarshaller__inherit__graph.png deleted file mode 100644 index b7f4867fe431cbc4a9809f9e7c96250307f64b92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34941 zcmdSBWmH>T7cPngEdh#4kOIYuwP-tU}y#<=6$dw<@+7-TUvYwfw$-t(FBdFI^tsG+7vOh`wFfq_A+tn^$9{ke>R zffa#|iynCd@l&8bFkQ72XE}UMjqjHB#Y+d$z6kFRNbKv|i)3qj_(b*L|M;W#gleNsZ)ol> z$3nbz#oXV*Xln;NqF;T2Rt?DacBiD#ze7FV%D{cw?ybwy8d->1}&( zo>uPhlESO@oZq)~>Nm>5y2d;<*h(6eMf_r6rECGfV%4?JTat9Am38mw=RrOGtlHP1 z*SA${b%n22Obe0GP$om1*`c@ATC`cYJ2=rE}w`e8EWYl>iRI*(> zj(%N{xBRG%wyWc+b0_pR?^_^VHh*2j)H1WVTikkjqdL&U{O-H&FxUTH5XT!Kn>5U()uA=*ehG`0ub&-%1CP~Y5Alzy5jM%s8bNt_J zs0huEfjhzu3_FHj`U8V^uFrbMi(QI$q;%Ya-4df&m4{UQAL zmHjuM%g!u{f$37(y+_!GI4= zzJbn^K!VA%i1AElZaVRuRy=0js&vRo`j1drsLXOW#M=JEvi)Nz^5Y#Xkz`znDBT70 z(sZ8?635JRex?uv12qABn*y-gnRz1`Y}@6`@?kG{jzVl?=)ZSd zQx?Q|Fb&^vml1*uxOO3y-b*g0T=mXnNc4kka7R-XKW8c672!a>jIGBMe3>ZtiF4kN z5F!L}_c<_orAWO!?!s7rU8k#9oeMlC5Zk#X*dew@bO?}-sbmHaiJUul-d3XoI|$y2 zKiDOiE)+?sRWDHwP3T7{8uvH@J_?boN1;|P*oG8M(~#bf9{8$Ci-2W}QjL5uHCEJA=v*!x zd;haj!}Gz!(lVRCJ9kFX+?ymOnNW|)z~ z{@wtz`?WUhEj9e9=O3)bl?NwydiIAfOR?2T7jb;4mk)vg4$P)l0`S0rWIyqm=(dLC zqET{wJu}uO4_bpYp%_VtH**-ivoQYY50_e}7c3_+RNRwRLKDr?6|ji5hRFCTM~@+! z-}Ev(Olblu{Z6$z@~^zBf9iJEF_cJWR@kgxpAYMRfqb{0k7-jVL*^A57kwv5TV!QpDU8mAeNn`&fBa6tEQtb?)Ck#kqhw+1vpFBTU%ju(PY?MU|{Kr8tw6lQ}>A4+10oyN5et z5Q!fPIe;7h)hO0`Gb=LUCK~rxqGyqajlW5wSj4tLO#-RaEAYd)}I)KmIBsJ?~ zZP6AyaZJ&p=N&P-H^HnRhT{_zrz6_f{N0+O`Usc68|o8g$6t30rv?N=!IR7-KkqjL zENbHeY;|)3F6?M}SZ=o*0HeZ)SpIX&&v_&v653=rGi`E;bMi=g?-pi0?~-kn(6a9Z zmDB2g!^~&6xw`Wpyc&Ctr)@kW+6+R(|L{^~xN$lbbY2|@lwr!L$B93oP>Kz`N;o`I zmbyJLJ@&>1h6|c{fp;)fti1__@aEg`-Y7t?U-h1atmgU(wk9^1i_xbUEZEQyT(XzoDO2F0w0I) zF8gFfd4p~B`88%(jmVDbtM>8~CR#b=!w?o{#wM1`oFIMcNZKRCyG8KR0ZZ^Fiv z*SFS81tcQeeS!`x|GEfHAFq4W@C`j#(xG&%w?Z#Kv_!W44jg)(uAQsKNuOQgBDj+M za+URqOAAeoX^|@py-@mqr-1GeGw6kzOGL4pbKHA&9bzodv+|G1h!2dqxm3^(<%(PmbuG#lv2|ncWm4VT%zkbIi$Q|ZV9C5Mlu!PZpJB0lW2kabo>f+(;Z`CO4+Ln6C)=~k3oN}1TOO_D0;o~|zUKi3tBI{ow|*;m zZ_ujEetzj*MAM*~=A@`V9hj6UtHRqLDR&biqI4{@DUuymJ24tc_RGe2`cr(>jnn=- zLtliy+D8R{$U^AD6UTCwRLS!1Lxox%E?UmteF>tHHH96}wh8;XJ~g@utU2mfgOSj~ zu`943oo1xEf9`$yhQ5xkkmgI5NgD%kIp{06ah@`5Ty%DZ+6gD(y^n%7;F`G)Pl2oa zdH&7IMw9r%=BfuX`$gP(Xg{WmN)yjJYE10>to=qmCD>Rii{ zcqp({&RT0e*tK8lFh$HsU54CR+x_bWix}PlNlp%6&LXIFrgVUI@W~Gy}HW z-7Cnt3(I5PSXZFfweZ7I%ma$^FXp&SmHI>l3LZo~*}H?JRB2z?muL+SKH4b~*-R82 zQVDQh%x2She-7Ew2uTQGQZF$V^F49x7CL9-Wc@R}>@f0v@QyG_?X+6vyuBugF?UP^ z^5R7ITxMibs$=xM`N7*NzMhsc?QgORU$f<2&Ud4MZ@xR`%9Vy`15u2;kR?(7tZEs} zx9pJ<@c3>aFJ3`ze-KxBcE!I*ifc*f5@&-H@qSUc!7`CO@smKAZ^mK$0l`MkA2W}h zzLeqqFDh_>g~EX~J%>m%2=h7A8|#R_Ol&nh(Yf$Gd@Js7CA@=0g8bGAi2oL((7z@W z7Y*UA2mZo>AeRDflz6sD8GYDOv2K&=WRk`zbo>dk`AMwkqH}lNkLiC3Ci8M>Nw~%l zD1p@H{>1VQMIbzd$|O zh6ub)0GxSyd@e0mL4W=ik)k{o?P^rUvR;SI*j!TAceLZaMHy-+zAPmHESm+ClpByCJ-Ksp|Ox_|*;tKT_Fz2JGdy z89Xv8RT~3F8(F;Nam%3Wk&qcjry+2J%?zNgn1sFo`;3<(Hw#Eb<>=4|+_+|W*y4v3 zN_}#<0=f-sUc3dB}zxF$wt+kq5 z4V$`n@uT^6onm=CR#b-I#+jgHn5p575OGNGc^3 z1g(dDiLnhX-$bdUBGVxg5=l-n0$zsza_xon?n$`&?)dt|j*M=+-NV{?8#Ex-d%j8A z9REol;B1=#%^ZSD`0ahO(X-9x6Rp+<69FBp&YFsG@6!rgXBAf?@2lO}p{w)C-#+Ii z%lsov@7J&7t{#UMLwbuC?(?@8r(`3`7sn%BN8klv+p*bwzF#M5x$nDnua3ppuSkS= ze+f-Z+>_g>fpVK>R==y;xPb4ri%uGbl!JStt!LhifAYp>{FU4do=jH&z*|d1#YRLc zCDxh#(fc7r7oT75clfDG^Ua?WYu{LGd@}$K>uO2=R$N73{cX(kYEo5Zx;mzH$9{XK zTc5O6tufvkK)vRAciR6@6*lM66-rckq5dxKlC&0`c{&71`>EZ2xGOlICw2(_W#XMd zzIIFXlc=W^ZQj}q@aOINA{rE31Bm_rR_>Yqkw2dKovSl?&zir5{lz+TLXW(@g;d`) z-_!kHOI@CrUiYK6CB)3#F9Y;$>^YmY1-9Lf7WYke0`3I@fwM*dW7);~(Y}Yksm$5^ zqkLsR!_T~bKRT13xytlGr%D4iyiwF~9`~awP}I%vz2NZw6Y~xa?#k{6AdE>K3U5m9 zYOP+urCrw&6Vtd7g$nW~?F_PCZ+e}@aJjld)yYDlVY4x2h#||Dd_+N`> zjn}fw!OJ}i$IslWPoGpV8l~aUPZ>|Ac~h*1zH0c;Y!me39eVR4f9(9t8^wBs-nbcy z$ka$GwCM9etx0cyQJs!=#3INW)|J@Q=9r**&A9nm`IceKEy0()*Gp*2L>c+Qrk4N8 zzw!HRx|WCk$4f0;Ma|8w$%TX=D0Zp86dg%cHl>AYoUoUI_ zM)9sUj3Lo*z%tL|)nTHNhtlC^Hs?{BNEJFh`E;V$vyO*XOfMHW*tb-5jnwmb0%drr z|4v!VZ?ZS=s!Y!HzHe<@X7)?;^NBAwaum~vZ2dktO7%+T2G{?42fJ$;Uy_gYmi(xw z&$I?-e1(#c>(Xn#s=0?Cm5dUL&wghNZ>5xf$bIRfY|cB_aQwdOZ<=bobMv3Do2V?eTyKV$0_UL{3ZS~~c~-~0N>fG4$+Q<~ira>r z66hx9f8fVx94NYsg?~x=g{Sj_2BnBG4w5^8#2)v;P>s{5g>lt#Z&bRCz|C*;UM3IWg;3pJ@`4PBhIpDFL`c7VKol+ z%9F4H$FYiu0pkh@M$t>&j6`MmJ}!HZ-q~pSOrvA-8&LWeIQ+r{K`k2{Vi4JU5#aQg zixRH&imLAtI=?U6DPH0C3om#r;etmjiuh>&Z{GgjmZb9Ox9!QUD6Ea7tn!#}r0IjE zh3%U1s|}n|g^@W6kw8S;-uT}n6TGYK4si0((OMlIy;RB>;_B3I#Hlp6#+d_Ixs0bF zsT(p+T4w?f#kNznm!d&0!bM3Ear@^{y??m`BC3?iK*JtD1vjrdT_h_j&n({D2R z0B6S*a{*I^A1x4x$F5Z5?HE>Q!6C>m2mI$8dBf_}P-3(eG@(*O?)fS?q)i0w^{5Qc zF57L06$}%)+R1{N_`+_9p^>vTRc;FB6maEVK6YbUnnv$HMl7zVoYLg z##Kd98F==%$G#1xEv6;@r!AXQT#FtP16;Oyj*>Ani@LWhlOpP=f|;Zw7P2$q*?&|c zIYk>~rV-OG52KR{h8%6%KXd!O>@X;CaDM=ca5R%S@E*I;cmmnYjO)M_4RWj<NZgBet78wvMk5qF$eIE&xZF>7r4={Kue&ShyrgP_p^rxBJNbJs)g>o7$*yd6BSi|UmZ z$teJ&E)Mo0d|j zB?WRgSy$kw4pupiQ$suF^MD_}u4Swfe1*BLux5yT&#l;IiFmIQuZ?>@g#Y z2Nl$xl#-W}w~7WGd7*-IGGD>^vgqI%H7r-x`L02haV?bZA^>3675jXIBu77lSUd zY-s%Rr^2Ao8;(e{a%HqINaWbzWQLhOG1E(FZ4f$ z3ewvwv>PUyEoXAI?JA8|`e&ycXPK0n&@vTf(Y%@YOrN}tpF!5I5G|57QmK(m`N2fA zD(PGY(vlDCWk<*@fJA^X*5!`8Yd@{n04bXG#lR4=2YO$DK7p6ChM0R2n3B_iq;*_h z77t8|m``T9^ZNu13aN^$ISkW$8Z?Q{1~)|M{4sfum1fQYPm7&UcNG#nZEk%w4IIDl zO9O#0;f!>1Yz-+Cy0-8nWhLOnB|rnxp7N==K!!hVA-9;u^~5g7+r3L=ZesKH_K9DPu}!h{c2i36KWwar_a`-fV)rh3j3^cs8fnUmi)$PMTg6 zl%$p_62U5JBe#B>Y>>K8mwn~_KZ{hgYHJ6RpEZQ>A5*)&3V8hZEvvT<$e@!&S4w$( zUa~oBP>DYjo^YtBoTet7Rps9j+;&tesJvh}R>w-Lw55=ftIHkHdXK+0#ZehI_gCWA z9PDH&zFC5Q(2k~ySGVQ2kobgfvyelx_e;?FQ^sA6o#RF z6&5uLKdQ>dCT{P53|=(Es_^cxG!V;%?bG>C`Iqw+n2x(j?~o$93vv>Z^U%6-E1z_b z-^O~9Sf};GD^AU&WbTOm3h!j_aPdTD1_MlVECsck$B+nakj*7gl-QbzS%0qD0Il(v zxwSk<&n1J>Jbytn5efjm6VoTBrjr=mqxygxbr-euC)rS0Zw5{Hy)lxSehT%+gFpLf zMfQYrJ=9V3>(YgBIrMDO<}8|U-YQ*6H4HhS;wD0Dv~oduT|ekgs*Aiw4w!3NdhLZW z!a2;g+0Jglw)}e6X883^9hPIO<=oY)@yjv>|K=iB$C_m$(cOmmsE{_tyuy* z^Irzs0teD{U$DjzKjJl^bete7p*9kK#batdzKo`oT~V3F;g?zoR;!O@_7Q(xhHN8P za%C{8)Cz%@#9vBL%6gPep{%lSj6E4L;~+T8M!Lmy1?_8-=$u7!&@*oRtU)T9?XH1_ zjQ8?H)*NYqAOUuz9H4 zMiU+<`~*Z}hj|e^)1I2XWQFSm8n$VY@g)S89Ok=f-HWpBHPphC^xV|cRxZ$1lDt@T zq;A$TV?zGGElkDEumdWZV!m*e5%RelvYlhT^LNd-FiF7J5Y6fe)jB6H-mvJPsR(-;H;KVL6?jZKAtEJP2uojAR`qfC zQt{zpu12<9JR8{P_3rneQuI3sc1u>H*SA_$-7i+ddAQ6@mu`RxX?zPsy(k}|xNju{-VuJPWnY}6%3gOt`-{hnd5idXNW%CsX zTLcXWPo$h~d?MS<5B-=YJ(KN#)4!$0ErJ{2Y8F%PIJO}*hKJawdqShD*vXlSCw&ag z*DQK?(M6vu#PHHirvuEjEx8r|9C~&~AP3%cQC@b=y9$mebPp?(#XHk?>o{R9cjJsw zee>P7PS&3HfK(#NVOOng`ip#?trFib=$k*!c19JuOQjfT?Lx{^ol zgs{peb%Mx3l_p=4{`Bl?jv{Y1)7NJZJ} z+~3*)gC*3IU{ej}rv|c97kHZMksNhKnb)PoPiMom_%Z~3m4&xFD~>!l3RI}iU6zAt zT4;OX1V@1(i7rp+h(pTzg`i8z#g2(u7jX+w1An2!G+eb$=L%M>iF*5b9O|U-D}uE< zd$u%$|9Q}htk~+b@d6bz*5ewxUXP4k;&B`wDHe0i%yk@F;6>!CB3_g)G!Mj$xbGH_?zk|P^23}dYI6rdlqE~{8)&xD-ecQ4|o66ZkVJTp^I%5tn}Xx;v@1p92x z&{`!=8B^C`6%!hNC<2TU{6|VGALc$6ce4&T>aKIoLY3I&dw&hTdK~>t!P~@2ak%<% zl8+!=ehrZVczj=uI5^gfny5#~dRF(18+P6swE&fix1wxg%H3$u`Wi6yMr$<>{6?AY zks0HYxvAw1Q@)`WpOWiHhzkOF63;q0#fT?d1n8tObCIAbLI-?l6kotF&b%-OXy`{g zEtD`1J`%B*o!RZf!vYF&FI2F^dypa<$N#w(YNI9iaY95cJ+b<( zl%3K#@%CwN#P^~WYt9vcXtfzN(eiS&jbGOCM1Fc9yG#hPDhdW7=~Sc~t@zJQ{Sjim zh*r5>jPmGEg-9R&MS^dy;0j38gND&+P)kYovZ(+e-2!Z7P}T^CSaa>toM9DiA&Jd3h3N4=5pXCjWBj5pg2+TTc4#Qp^u>827q22AQ;vJxJ#X*w*a z>~go5)Y-`+$ugiS*g`eBwUxWjebRVqg)@W(6&zQ#5O4> zsqRxOgXhiWS~bnJ{lwLbGYW71L5TQB25im9%u9g#mL?dcR{29|JMPjglBuIH;Zi|~N$C)%9R0v) zKV^c~?zbU7{VcAw2d^iwOc1XrL(z_^x&Q99R~b?lq`TSKh&ZJh;eyinQZfeDS!s?m zyM5=-qL(zLq0K8XZ;;|erFVQ?30ddB_<~=nZON+l+C!^aa0f8dd>Y{>*N#Wh^&Um) ztW1NM+v$}{QlU1BP4z;wwl=22$t6xoDOwt+8a*-2EY{_}f*0tg%Qp}zzI3xf5@IBG z@$_%g*;`p~Hc*Q3vf$uF864KJ({Bpe3O-7Vw$mXxpJJR1kDUGzrN_I8LwBB~9wBIY zECx!7`TL-a1e_nq29eJ{+GIduQUhB=kU}D4iG_G*x#R1&(n|AAKV}vzPVj)L4fhSg z+3e|t5;$XB)NU&^0M~@n`SB)ko+?6LdDihQu2$htSpR*xGaSE=U!2;S!B1H^o$WF4 zNH42gO|O?LC3|!WgwB~cvb7ib@Ux>1=36h_Mwsnjw3tN1F;E*c|0n2R*{#VZs%JcI$F5=<42Q1;J_(h0yDS4$L0!f=c#seA0vw`$E048Hcq2T9WV$?eJjUjqO)}z~hNm6> zjv#K4x2Lk4%D%}zph!wshrTcPCH2?POz`o}epdo#;|-=iHl*wJfa#oHssCc%ee)CB z{)nS!lL(iIY{@eZ=8=(v)9fH3+RQE~0YWwGdWI-mYMCgYM<;g` zi|>Q~U{T@K%m!A3f&#T<2lf;flM9o3?AdF1FxIZx!qI_R&8u~d|G*It>uQ`ScxPHA zTh=c9FO;SY&ldiQMMBa)xhFP0Ba@QeTa5uVb?%x~4q8gmtnO3jVeB@k=BvD`Z1f#xp7WZbXf#4(J}C{yaHYJ~cC@SQr=rU$*qh zoiZEIF^JF=7s^3HZ+b{Du1XA3-&Uli%e;Zh-BMJU?D>dY6So0l>CYLxax+(}v(O;* zzmg|&{Z3KOO9Q?9*CY2Z)oX(aal)a+ZbWQm!J@1?Kjdgj10nL0*f8MPxU#|6kq}Lq z&?RuwPkGT#sxZFCbv6ZCR$Pk~+ZkaGrM#wk9D?TAh$DL8Nzzn8$Q#f$e-(vAJvODW zy8gOW(-R}PTk#oo?UceCeoB*6`nBTm`kCnluo?Sw&4cLIc&w3X`B5>5w@)PWXD~#< zNrQU$Mm`a_L?#QmIASfRG8FvpF!ko?X}w2LkpSqqgo!@5L!ZewOrwF%xi5@-ZMJjw zuk85&_!pRt5$BDnXqX~%4@(7EcE+M5QedX#CH5J}*vg>g(v46{<hL^KkdkoBYY;;amxXmiph7h)7tgWld_vOCa!`hK))IMp(m^vop9sKX~fg%l|ow;W*S|Rwe9=Z|w z>a@qLVl*Nb&*khZE~vi<#&sT8$_T~T_~0Cb9F8=@$BB3}|5&Qe7(8d##3tU=$u{`7 zL&Br#meIaVCP;O%|wl>O*4--|^XDREuvDf?ef(cmIp|1TkO;TK^Q{j|HGE`BqNkYy_EqK2pBzpLqXJ23vo zi=V&0Wg|yq8iv)7Jt>tah7Q$J!?0La8?qL$1Nz(<&ROkqxA18I;CNt;HrT;Yot73U zAA2)>G1Z@83hMjw@1>=aH=K${_5nG%J`3>nZl`7jg9&kw^jYKqv_QNQ3L3J)V6{2p z7C81U?(}24wiK8~0!eR+MGiTx{r9>pD$ftkEM$xur z1-mu+f(D~N%d6idrDK?Grvh$z|6wFWPpP0d%SD#Rr}OqX;9oOo8w2k)LP=W4R&6{< z4S5$R7=xH2nuf#VKOP%xg$I4h;$la;k)6UbH~*9eE_)tC3^;EPTu`u>PV^_L4N@YV zXAiwG@j4w*=m0-MX!lBLbELV7!cfN^Ub=j{^624I)eRM_d`_(i^;~zL?0Ypx%flqp z)ia7ec{YG|>kM&|L8Z}shQS4nTI3{l@W+Knh%>;>B@hsF3x!_cw) zBUMokmLn(zxVFJ(Q^ywZUb}Pn;r}EWhMa;4zc8hb>4Sl*ee*A?j9gt(#XvAV_zL)( z$QQ@onE|-<;6Nh#7ml5}7_L*uJPR-N=P|W)d4q2{At}B4N!;mv#FAF5oIpkDBcpql zlV`eS@4I(7oqt_!gBX%VDQoQ(c1U|*u=wCWvS6^6OmR3bDCSW3Tmq*MR`04jLK{FF z5SpC@>sUf0QfX~H_utLC=GTJrNEx2YV58WT`X{F#@4JrOrX3a|a^u~Ysqcg~^dM-8 z7@>0#$SSMoOT^%B{6K+OjAB+~Q}c9ebghfMmkjr@ZN4%SU5oxDFAZil;uOl`X(Eb~ zdt#x~zdg^4Zf%R4#_IUIt=!&}O3(`s-xq8N<#ZFhxJh(md7C)ElO305o>(VSOj4_s zQ;Q@1?MO265ggo;UD&-(#m)V4oo&}w&@gjFYVVsF#)IH8Y%Sfo;bf~EJLG?(v8^cD zKf}aF6_x$KUg=#in}mnJzpxb)XGB~8MpDc>iuXP;Hl=IzZrv09&IxxEFGChdXti=t zTc}93n}>qI;Wp|bcJB>3>2=f(&0K+O-szxYnGDti-RjbkZVb{#2j#w6qU&toN;&ah(hTbMy0Gf zCdXu6MGd->Y}37AlHjHestWL%i4f85H2eKOQ+L*Z2q<0|Rz<@m1ElDSY3tg`)+%gd zvx8(BVS-|XexRXp8e+bC+x03>0?AIg64|x9maQD7Ir5KmppKRfAl>i;UnOJKT5HY; zFFJS?+zDy`hZ+pYWQR$YA>2XB0?_5(dIu~(HM1mIY_O(i6T=>EJ+=-V!E`}+_as3; z>dH6eEy-QBRBV=qg{&--FKEL^uuSmzWyK3UmagQyDw<7?Uv9e-M%TzD5^)@}*jRvi ze#rbMB|ne553q*#&T?;>Xu@UH^(dM<4;4q0<@4xg1~6{~I|UCYQ*rr@^DI|daXWDN zZi|Q!Hd1KfZoGtB>@vV-MKqC4-Xbr?y398=slB@0YhC}CveJUP`|;{+-kc(bm-I4Z zOc~`x^#be`hg64;DjBG0&sOm~A%Xm0QivO}y*nqEiMs0;$#KfQ2 zmenre&U374D>)wNdU6&MebgLDiQ|8GMs(=OG8fU3$_F9x4B1kacHn1!$p(jW(<5qH z5^)T;#S)3&n&K z`Z9F+_Tl~d@Y^43>pJEIGo)7a#}5dpgSGJ{5Q2uxjfpyFZXfJjStTsWwosIPPFhH| zWOmyUMvKkpIts(AQQ9XrxIt{`xCn4OmkNR9=+>p8R;(>%ab!k9wySoCj_ISpG1lMf zj9&9t@yumAm?W!#3Pmrf;L`l` zE>_YN(&-INwf!118V93-perDMZMoqI#}{I4PF4F8BKHIR*BGo9T&77Lsf?7o8r6Uj zT7up0m?%=%qhExO4DSS_X5}c$&c6tNmf!%>)idcj^90mafS*8}L9Aw|{JI3XD{k;D zib3S^PhhR7@CQ5V`!Zmw92~o)M{{`YbEETQ!iG0aC+2LM_kpL8Cko#rSM`D;r^tl&x!fDy`bn_?9C0ubycMZ z_O}o<+&5mkAwz{C0GW@T1I)W#hMeE)-ai?c3j3lWJyjV*D-(?DoJ5)}Rj^^auHk&8q!2ZCYvu~*SGwk79;t8@iciHWja4svCoRf{h>21|oE8XGvs)xBu zO1Xv0+#||-0Jt1FxOaMu7@!pV1s?=W0dIh2OsunmS-$6rNPnt_(QNgDg(%fdr3!PJ zRoMB*ELJdVLNEm*)*k0i^&zpvORD;e9yHY(u9Opv7IdkYUhqDb!6%L>#vzcy!a# zlOjq4{CQLb?>JxlLDG$IO8{9gYuXZSa9!AtG^u2RYd3S{g4yac!h93j7|aj)r+@ws zV43$oEq#&d$ju=rqNyR?u}K=v1+wh}{l*bFuR=?XQ2Gp@ozX$I>py@L6{@oCdb@!J zB-KksVrlI4w~YIuq>x96JxdtQ$kqcKnwyDa6wwdYSK<4er3cg+GFTC1;EaleNOoVbVROtHGzZ~S{+roq8p}k!4J;GCK3=2ypSRbkm{7IpknKezb z-~CNzbKDdiMX+oB_8>p8Nhm6H3UKjsMvy`&x@SJGum0;`7-)pXN5PM92=^BBajBziL78 zgd?IE(ys;n+?TlQKSLbVK%$@{p`SI1MhOS62Mk2iLC%-$rrdQ9R)g`T=ko#DDWJ>G zHm@~5BaI@4cC&rNdQuQY_Bh9u>Ok$mQ8+9bU}5n%vZSQ0KH9p{f3aI zfQP%set+`mZkmMJaNe$Ro=4D;^tYuON`D+Qtb*PJH9)!$$9u_y-c2Nq1%dt7LqY!% z{sV$0Qx`ljnK@DzZpt^KnJObya0qT?i0e1yDyby!5Y1KqK1AXwCu4nA2mMOnAG-qJ z?1t-QlCp}GD;a_6Y1>ck`K{1-7ZACA6IIF{8p2Guph1vsI^fn*8f<&H|7IpFsWl>w zMo%^gjF$0GZpAzAZ7)6>?@k>Z@eszU!n#LF=F!|no;ljHt9qRv78k?BqwS|TgQodS7w$(&SvQU zQ=B+M;OS&2lz-(mQI{?iF7{;C78l_<`Mje$X?1Si?W z`>aDHVNvL?8{mlY#UD|Wf#wqi>W3^RZ$MAUtP1-e zS!H{9@62b27@qEt%m=#w3;!_S^#_+0vYJweF{J|*I?e1=4}Tnp>S4mJ4OnJ6^8ZLe z42I*~z5Bu03Y+Nlm?iPWzeS07+-aUll2wG-DjRoSQ%qDg)Ft=2B5N+PyvzL35hy z6sw5$P$98n*nh|a!*6M7LiRC_V*39&7#>sj+8UIxFvA~#d$j_c+VH~P`S%G$%V+#3 z3~1BF$WZg#YmLY`xZ3PA%fX5Mjw$ge7j=9U?rwudO37|05xTia$2ZoMujFXIORyzr zqxDFa`m3aWvDtz6#MSQM6FuTB<^N<9jd`SH34L&Fj#i@NJ_eLT zlF`g)FH_)X+*Ad{RG5e9lXGPbbkT{02&Thk=#u?RR2RmveJxnNGdwspKgYArAOLEw zS^t%=+t~R4I`qXj--x5wLr(c5BGwFpGxmzj!I@>WHZPJc9$9V25*-f}Tms1Oo(DGM z`Pm2n3XuPD0~)Et2+?JwC^!-%Nhu_bkucLcQ17R*&Wr1YL2Orm69-HKb44ssE5R? zBE7iInM?lF;)dR%6NRrDuWmkt+~F-^Uo|k+y#^{qSAhR6nm!lycE;+Xp6Exv2a>to zTY=jVmjmv>QiY9pfwzR(#YRI{EFfRlS)LcS_U>mo5cQ^6a9?0HE)j;@cP&JgkY1>O z6bngQ7^kHu^yBBOK?iLXnE~;1tEZtHW~5Oeb&nqdaMOFsc&+8oCLU!~|+)B@ST0$Iy=K9gTasnw6K0G+oav*R>zI-~it0;+Mi92n6bP zr1yiUaNCP_P{vtC{-ERc<{h;697@Esm|av#W%nbLUF`a4rMW-h7Uu!N4;%KIAGw_M z6^r$^&WLjQIETZv_(mthB-Tfw?sd6%VfR_a9nO^}t1q==cndWy6*>oc5^K->)3C17 zmq_yY(;AhZP+b>vPeS;I0&-v&vxyE+E;`kWle*zcMJiui+&WYUXQmu^CraDVi$^3bXYoX=!^&|z(x4DSyLge>X%VhX2AFd41 zFTF42JE6(KyL8<>3CY=0{{%j}-{L%zFgoeC1%J_>iO&|1RAMENl61;MU)U&$}dN+UC?!@#w!xH~g0@L@r@1bP{{>QkX!oB&AQ5%;kA#w9?< z7)YHhQ?v(VZ3183b-qZIk<)M0(z_=aP!@C#!V`<27`m8Cw6yMJ`9tZIf6BEmwIr@7irsu0b7Q>s?pNa(@N{2TKFh)73Sho-_qN!)obZ2(y9EEpC zY1hAyP$yd@YrwkPz+fsbru1dPq}&$=5}l9I6VQL~e{E;#gXCY-=ignzNB;%5gRCTaSp&dg9p5VU|nN!LGeEqe8`- z67j~m?|B0)KY%q3-OUtul-HQWWB34)@LxEHdUrY)Q7pcT{JG!xL{DTKO3(+sDu?2} z#HuH2Gep-AyuOx2KI<3N{b5+oiy|)JIQjif{&-v7UpY12FpJFLj*TfnxVP;gp)y!R z`6|&pT(vXXIF6)x{jCn|+kRy|3*yGnTY_6j$+}+(>LU4C?4NeHbp>TJ1cL;952~t3iK!OH$DBRuM`taTR_x(qY z?uYK@&P!laacZA^_Fikwx#nI)P`*Wzu)?;3_xtVBs=59a9jyi1G=lET-*7<6#5Bb+ z(OU2^)WCmYMd1Xu;QUvG11xKQRQ|e&xy=>SYORNy;kwJ$?tPQh7>Ir^1yJx6>h3H% zC!FbEuLHCNGd=-HyG2506dQmuTqJ6>d68|+{HDjJ%u?pX4)Rg6dq*TuvA!8qUg$ z)8~>55E+2LK_TQ11Pxg9GwZ%DJb3dmXWJL%kq=b}5ao!J z&ZPE4?MJx{wR0VR)V#G9lCd0MGhgpjuSsN&>9x{Fb-J zSK7ip7(qE$pxREm!t?WK)lNN%pKYV3Is@f1P~RRqMJwI^B||@D>gbszi~Fk^tMm66 zz-LMJT{8b@NOUyF{D4|0d>l}aIY&V0RvvAI3b<;O%Ypp{34ikuvfeTQK0@hS63$c` zjhpv84-EdWH=-Oo{<8bE7XL94QfH=r`tPjVOkI@Ub#NY<;74#(@+2q;fbx}juOzez zXS)Ao(qXN!MfMIvH7$nVPJ5q`zd`8#+E>=N_#?#4&Bb$;CdR1pg#5^E!g`UUMTxtz z0v+bL;{`67qi-XdUtBt;7XXWU(kLoi@b8r6#|8a9gWdaM9M&r)1cPP5xK})~kH!5$ z>|#<>+uuRLn20J!N}L8uAZ0jmErkW>U9L!ie+ZnRG0#s|45k70d0c*_afT($y*Uk zt$m8&ksrF#D4L||x9~PlM9W{sJy37T1r=a%tA0D8MmWoR}K>@mJ+Q*c=rJ1)adSctTUY$)&4Z5_E*1`RIcNi1)7`)1$6FS}{F;KZ|%8DFt zbbmZY*6j>FuzPv0TC*}5WGtauGq8caBQvF$>Qs2R?BF5?&@^V3+v*^x7B;(sYmq)`oR0-gMZZjJs&nex$$Rc ziVwn7_-paOKcl>qN4kp0#6{WLkWk55x_xW82WBfUYEkEIP7VOZ|4?s6o9LCtSh=z! z_;G6ADv~(6khvA562oX{nD0uxRlpyB3V8B`zTAQ8IGi@5nMW~T_5jgs{GM2Su~tUR z^E(qoPOpmv7;z=gmAo2@{*EcH@fT|N@CWtOZ0h^SinfFq)7^kw`L|XPZ+sN)bG|cN zZdsA?X7)=7G+E~Y(8LJtP`TLw*;_0l-cG@&1CG_@|J>-|w!#C#chXhzU#VwTcDuLH zuXsK__H-A2(U~kW!2u)q$RWd+3xt>RJ3c%aT}FdGGJiPeT64>=r=U9iGHt-7(Z#)O z(R~il%8k@dx66V6|1S#K9LlE}KK&ztnDC|zZV8eqa)o24yO(pN&WhFnpA}GHf z!`lM6Yk*h}q9y3~NqY=H`1gn1=|K{bBuaEc-;K-KNl{@RFNC3YY1$J`O1`O<&f@(B zD;hFOBVng6%4iRw3ZGR5qrN563_p)pBckp;llCg@f7*@pknHE?cSZKv((5k^L&Z75 z{yGP+z3=E}=DwzXDg5w&Dc2Q|SNcoI(Z=_QW0Giwr)qmxZZ$yf#G>h;`4imDh(F-F zg9}pIe?#Mk*5-U2!>~m&v*v{0)3c9DKuv~TmcdtX`%ayx{PIaGFOfrBo09671%z$@ z(;nEn7*4^cx8@9(1Js)+3+VXY*?$NRdNT^s9}I?m&o(&9EPg&X>H*ZBOOs1$0U*z! zKhAUicT(l5fyq$`ll8#8pCO#Xjy@eK!fIZ=8GUbT_jnTh%fdV7)z<4=ax%HT7?0Jd zcH_O?+W{aYT4$JsoVK68rE(e#A{A>DOIw;~POWzk&E2kq?+K`@opxJPn97L0U34Th zNO0kq)hG?MB)369WSuv*Ch;89$CUTfJ1YHItjGuz|2K5~+ri$U2e9)3#{CfL!HE$)az3eAv4f(A@`rr-2Y*(r#N6%T?RF^FLme%G_3g$1`E|8GWKehV7@ zC~1B#kNy3x{Dx@rAHD^+O7}jmYv|&LzoJsqx`ns0ziZfSG4_8qwq8bei55Tz`*Up$ zy)$zk1UTkoH0tuMDT_L8ISrgU40OVcWw>(Buxn_amBypJNyCCsKf;9tNvJIly99kt zaE1CYG!#+s^E9LJj-&#$z&>Oc*mBe5WfJ(;Pv6tilz%vvjyWuZA4j8q%7}4g3RdPt z=urr;J%_p0;$*OsS@BI%nc3#cMxv`~iNEgf_(DsqqJ*cu>nTlOUVQdm*+vPmwwP%k zUTFw0%UH6#Ct({1U$|_PzFCI_-QBa##|w#}yvwz;Kw`MZ+(Ubno5}1DX1G;R$D(RV zJV8K;G*X$INxJ$x2_lj99pmF$z)gyj>%;rqs7f$(phy1vt?DF`e`gQS;FA?K|9#+)- zy_yjr(4Ev_K@GVQnz_8bezmt!yaZ|QuZ=+hiY*C=ZXDJ%=@rJ=7o2O?QmzRw2X?%R zdOrzbl|z`s=zK6wpz)-q)j%J9y_b%gTLY=`4?&Mp#L$z8Iy=3J{AO6Y4)~$In2TPO0^E|H; z0C<9zF8PlIt}=D|ij^ov`+vN;Dh1>vR~)IE3U>LUmvFw)eejFF&#Jr*qly-H|6+n#phb`*X6)t(G6&of%|QC+sp7%O&>SKqcy}b*n+s3)+fYiPu|4mH=|Px&KGPb9Ey!EPia)iM{Kw!v z!m{hZ>yl5P-M3a3JGZC)+H5%v@t&86uTvEo>%pzg7LO8_<-~6-woo0i48L>Pw7q_w zhLohA41!!%jCV(K-7S^bO4i#+a@kwrMav{2gLt~0EVVP@=c$Nt6Nj;r4*RfOFwEehwy(?nxQ!0g3Oc)`xMU-;JPoi(`79$5fKvND< zq1h|A`Ow1}0ZY_vo5-;6&v8R61&B^De6n1_|8tKBw(Z zRlF&mw}YF)CsRR2zyJmhRp$#;_cr|f8buv`ISRktYnAET$KP%yxCCllBt|M{#6LFX zr(f>i=!mUC?AxnPKC8BpbH?*+KqM@&{6p%yX`AvQm31F)_nd`t1X@6rWy-m=uB3OZ zDA;XoEU0oir*o&?0$*GHIvu~w)A34nsMl=E=`BxzlP|8RFb_5g3Z3HJy|XP5kM~Uu zSQINJDfknrz7r@}91m!xac>ZowQ6y4%j^2G#P9>@P6dQL%xmi3kn448)OEWV@4w`K zLJ4&JN=Sc=D(oAX=U6tocE;?&5n^+0Hl1D#y%bu~T&-X?A3~~ByU9EHPe;x2QkaN1 zvg>2-A)X(eaUMrN{24{4v|07IvJAw1JEAIu^%r&mYUb^*=fNTmsgPbiur%pxCnW2| z8bw{--qCgwD-(}v`PLy$|C5?6I*Y2|+Y#9s-_4047`?a7Zn#R=M3P9FbHF?P|4aWr zO^E8j>t}y*Z^NaH@AYCzy7}I>Tu47Hy7V(RcYCw;RE{Jsao7Ca{Z4@fFk!{|sn7ni zd7e9&`)(X$Z>O9iaKZOG*+?ov*P7`IKP~)EWX*HW6pSAxcM1E%8$}zt3qP-|zP_|5 zgU7`-azGTxf1)e{L-C-U|sdAx)2)1q&n@QqQmJBRs3j5Rc7R zq~?Vh<1W8YHox=eP%RxpSFz`!cwxPSMr{MfzdhZ7ACR&gIz8Lk&f@)_ia@Krw>XV6 zrP=m+^G?GoNWriu4+hzK^d4l#kJ3bTSFI-yw93|>x0x~$WFtp>BZJysPFA^%S?Zr%3*Dn-#U`< zoj66V!*w98X}DBe2$}zr<9eNxdzCe9*1uo)mtUV(Uva!{jy~@#HrcFKx2!N4#j~N4oF%IWGk_bbf`y;XdXa7( z$NXP3z`NhQqwH+yYJXkGulv93`XhEdA3NYRwqFb}A>kSOIGUzvX)_$v_mfJ=Je|0A zJ@UzjY(!8YstBI{3G&6&*-6v4XZZDWF^rV!cQjv*)B(b^mJH>-{5;;t_Uo)?H_PYj zH(coI(+0?IwH?}!l+ko+{pvR0KKJA9OPQ~mr}@(L?OQjN zJ}s|2mF4;A`8a<&WO@9?mn@zK&kI)7?PT&N*vE&7WZ6;)V z_I%LG{VrY+&>ii8D3q39!TV~jK7V6UfsN(qs!W8%!1sD4)I8m=S+@(gJG?lNmpd4{ zfAe#1clv32Bj~X<9w>?ScHx_U?-z_?tc-1S{8PWBe`C99L7{ zZFMvk&(HngTZ_%f+eW) zNx750OilhYuEz%t0_T@me~bZuPUfyrI=}jQ_Ao0}Omtv^N34uSkbq=h6?Vp&w9r^XnGAW#b$Y`>AAeSD$T?y@EkQ z3}x8D4|_#DV8_iUw4}s2`lpR(Hr!F+$D@seVatwHzek+#>BZ^rZeIy#eVgj0sGEsz z$|x}ns9jCLYRk@tf94F`4JR0K`Ey(*hf-Ty?38c z2|2$ho(uEo!CwF^w$i(p_lS+6+0L+(c?-Y`>6){s{!g1^NG&T~Hs@Kso_E1X>@KtR z!XM)3U8Y|jYF`$O*o z|AFlK`u+2%zwxhn>CfSn!lIqjJ_E#k)?;KZXW^kF?vQ%RXrOCZ6|e0aU#i+%>yPGf zZRt@Hq!yxQVtXr#TnJv|^GxO_-)_!Eoi1Iu<|44lPT4xqbD0h-{U4_CqNuV!F-qJE z#q$ov8AF>Q_gl%KN71u3w>0a-kY8hwY{aQe!ED%Nm_}W5`@@1lN4Hd95%vkz-Y^s< zquL_o8Hi^Tiu}{Lr!#cfrj6O|;|f*kv3}&TzSc~Qa)!{)Xl&z`i}Yv->eUtDqj;ek z-Sgjfb6qc5cMo%2Mte&w4vvYGLNTtBeiKr7IAmT$6%O7GL1>~0JY(UWC8^qssE0j1 zN@l)~ORGlg296k8Yr$x!?Km1_)9n8am)mc5o4IuM#z6ABhz%;8zT3c7V3O9^ZT3EC zwXjt88E|<=CR)@v@oHoIsCVASYMC5W6N!hRR05;vv!zmfuKHby-qYbTHkS(Yx1Y2V@lci4#BP7`57pY~{w3tSAZg%Jd55R9r5>6Q$}C zppcM#!uv$5U22|kS%BzdKbzIkiqR+g6UZodMS%`;=zP5#3MIny?WdiOK}w^(lMZH& z$4_H8;^80DI+Pzz$7KOO?mC)3eGD;Q!`iRubZKpV?~L1f%nN*ebv^#_3#qkp;;`D* zoh&K3tM_tDf=}x(z}6nHJP!WR7`Zz%)ON)&<*B126ozK47bh(pgRe$xbP&U@uV<83 z1XYy(C=i48jC4HdRyP(0pL4-m2+Hm~B5|89m>0C`XD4e^NzI|lVJog#d-!-sy3j&y zeD@n+$`@&ADNB0>A@{aqJ7I(d=MTEkKGE~n7D$JJLqj)T_x!kDk4IzD%e zDi7-n+yhVNf$kBu}oLAO%>iOs*pT^abr0si* z*1LS9>lTg~eINW}Ycf6ko+RiXWhk7rcm;Ypp_j)ROd$P-$R1pP?+B?0e#lk!d;wN$ zt;bKpR_ALCx(No?(Z&_e-P|u-E`qyWK)Ur>CtAIeu3z1ETlj^sm>zOLoEDo#q3$8X zpFf9Nm^ndxlq|G@t8c4j;B#>qJ6CJxV~TGW)5u?31W$7I+Tu>T<`%0%=D#Gf|MmN> zszg&5`M1>kFc})L5_qm+u40ZpgDQFp01pZ0A?$J{Nn-WWvX+$>meWT+RfQE$cMRts6Y4 zZU}SYPLuicrN$H_rwARBGTK#E(EK^zFxvRt8*|yc$xkUb9fKhIu?B3Pt%N7Oe&L@d#*L&pQn3O86-?rH|A2TLtv}3by)}^dF>Jb=;PDbEUO(y) z{*2K8>$lVf#jZ}4qb$w3X|Ft%(58;dp9qYP+SIziHY4%ST~9s*)J+(q+J$-0&Emg% zI9Ik_0Kh>dLLKt~;f_6w^6W1!mQExbG;tmK(_UzA;2C7yo1IdH-{%gbW}T8S*4uH< zYU^Pz>0N~@!V3V2{RX5>jY%FK)J~P8ZOQ!l7$5h7Gb)9b#64D#aX}U6cI;k|zpwGJ z>lN?!CDY!pLERiO>`u7v3wi?v;qE63av8C=EK?Ar8MgD`u%@1v@PKoLxWf=FO?Rc* zfGuS1J}i%L`~1FZ+>Trz-hhpK=$b%XPu?a^+i*i?qM(UQ<~U&mL7u0C zzsH+-OU5-j{9eSo0eq`uQN|#QgG8C0f>M7-6WG%)H<`3g&tPoS3Vxa}uv9}Fg5D=X8zx#w zKJFqv&)B`R%MOkGUPD}}#|R~mpTb05mu~I2AuND00iOiLO4=)+gAgiA^cG_;BE@~8 zm6hr0YSvvdu}()KA0K+a&RsM4AL>|Ic?j^p5N?}p!vZK0J_Pdl%Dm=z@8|aSg^=Pm zTf$F&c(2jpm2W@y30e?Z5kZLEb^^T|4yrWdT6DR_3f==g1Jlc7zK}u{4S4l1u+4A^ z{S2L*=Bm3+N+O>Wcy;!JYkMih8Zf%OK-1_jQ6b>fD!2nTC5di{?v(Kly|^fWUgW^o z(WZ~H!UDnr7z*IRSO}r6MY~h#NXwVFP~M{f_lSn9{|WjaFo3~SNVUa=5Q-ES!vEU= zVzyU*UY+prA#oegmg#Y5D*)>)uGxY5o|a6d3^XE$hPO zXSO{JaAW%WOO0cbDZuS;Z_j<>S(b;VE~OuONT}_4X=?}g3j`oCmkq20h8Do$KZ$1R z1R1|R%q{nm`5$@Ro{-r6gptT+hCZ-ISoJ;?azE|3O}q9iI(z~!onzPihyw(GubZ=a zHZ1Ocadg1IrSc}+^x2_@#PjXt@7~DlQl8_@(ZZ<6i~s9mo_!6L-5^2DVd9?tz4D9#((7O6^(_#-$s~U&Z zPWyfmcNaVZkeJKSiudVpUo6qC8^Hfsmh9X4R=Tbx6((+g^u6@F1}74+;?OWidon6; z>Ov2Wq)?@W3T31ix;SY+EnRutn<)DGVBk8V^#=c)*$x;*e;GF>|`|zF^ z#?J>jan4`3Ry{URT7W4*YA1mHTVe1F#_ihnOB=j)bKTvL*nZW4(@1^^%H+$K1JK_!nzL%X`iL>mJ6d< z59Z@ae2$yuwtO2MM|%KfpUK~heA{vxCW-;Sr7hm4C5e}4Q`0I<>cUJC6ne1@B+@YY zL16i~&lSm_EnESFOr||VK4cgl@$oB;2zf8syBhkaK~KkAITfGlO6T17v(mu3RPIB*3`PJ z>_4G`>mgW>U^HQRjA5V;alc*NZ`cV2?nO%~M=U^JFmCB5^^W+cV|HJN1soKSS??El zsW*rY7(@^0Ep)jMV=jewF&1uKNYS(7ZNGlmY(Fz1s)=8o`woRjE}3Z8(^2 zMn8a09XWY1W7izbb>1|wE;ZDU(+5xbzCNzHllhzl8Vrlz&Jh&8+tl6~Vybm{1y&i2 z@5ZUcaG0nXd=7xfYpB9Lmh=i7N{%qjU><~1=(P?pR{mime>91`pwBl7*Xb+p3y^Lx zr6BV@;xHXdxa$INEVXsz((w#BJyIYfFtfqFaq+OK?chg}n=C)-HnE^b-Q%J0E92%L zfZ7hTG>(hQwJ&)|z&N!H`92^82^xwjs7&0P2n)SD8}kAB=xk+R z_pjEcI%S0S>l|{Y1w9x6gN((T8v|?5b^}ZgJ-$X>`z0rIBKMJ1+?3$>I2H@3d{vr% z;%l@Qo&yx&@PXOI!qB!Wl@PDPYVm=c-=w@ClRqpaD+%CI-mh*8qDe48`}2<}bp6K_4q4@OP;)cbha#Wp0r2sL>Ntg5_y z&W$!BkM+J#y55z;aZ;6cOW5gdpvF#{_xsy z>O1E9uwRxmK-VGa)Fsex+`JTZ@tf!`rugU%DSf=xS|D7pErNTh`D|#97d}slf$1~+ z6{t(2OgYt1O+2rCNS-PvoPP099)2q>PFrHFH0b?o%$R&&ceOTxGM)TJI?wrg*%Nn} zSs;qm$% zmDSBrKR&wn8?~~g-fs5Cr$6iVgRz-nMfuNaDVPLa2rvv1>*ko@x7=hLnF!#{`<(~_ ziT?I>6gNR*$dYQOX_aIAftk({g`$m_@;Jjt3GbHIrWgpup=lU&RRytxKD@Ctdzu;= z`%1()^11MCn`eML(`<@D)R_4+dFQ#{B|&-qL;O@h!9j9d@LSCxGX}^lr(4M?Ze1_e zwIxz8@(SUcdu9X50>{)CGJ0xj4Ta^J<2Ifck50^1QD6=O54K^pu3wT|ax5n16`eX1 zg$NF*91!cu>e5OQgeMJUKAH!CoeVPwARth^r-G8CuPvpX1@s$+)hN^xU3OrVhp||Q z<-0)foX{bL>B}3%I#Cs76q9PgKUON>Vg9PORvlH{V-BL!C=4k2`o@Tj5`; zJ}N26sa*Gc;B38jlY5vyOV%nMMyiMMp$F}~ROg!lN~fcFYg)C7w40A3lk>EJ*Ol-f zo1z-I=GR*RHnYv8Sff&H!z2YH&A1wCT{LE-+^HvA{FjjumPf;d$(!gUY0)rEgs7@n zR{JjILtym^)o(rJtNyfcdjLSTOZk zvA`V;eqG3qij{Had7DcrRUVouR~(qMNE3vKFpq}%XRk0gr|O2sSQSU?iCNS`jv*@XB#4DM6Dj_ibC?tQR6&eU;Yu5 z-z`HzNiiZf^JXO_l-e;2lhZ-#Jw4CGEL7%7#gcc9foxuY{vXX%G>srnbgCwKkyETk ztCWSkO}t)xz}L!}<~o$ZAfCSIYXAdVf!*~d>RC~b>@6T+8k{i?R~1IIll4W_S(HCY zScabJNOwo59m)lfw$!WJJXuYZM)pkRFve-${=rfKKi{qzr|3^{IO5>52g7fPrgB=5 zK|Adt5Vb~8p4faPmPP-A2a&D9?$Nyf@Kw6xOB7QLy}WLusPaj&2xX2%u4~$o&*ezy zM6h@g*nh7eyqF#TTU>)1FaeEiA?MUJRdU|s3HtwaJ*MKMO$Yx+{W2w&XX*EKUf_(F z`%#fsAA((uXFb`;9h1HYY%-0#N^JfrrbaGx6mSLj7dFOER?RIiBJ!Ts(W#2&)V}nw zk^*JI5{dc0>2fV>$5s5OAf^Fcbc(&863Qs~PuT7WgfdVpno6pN5l)nvx}u~OB5kdv z`+(laPjIT{DMlE=h;df}1hp80@RN7My}BtPqw#;VOiV%vyni&MkQ^HiQza~6Y6q(> z0GGdog}dthfaU_|f611#YRY{fF*9HhCtqm$I%)b36Dk)z&}OQdLEMr`k)5QV?)Mvh zm|!uE`cnC_-o?UV^k2RO@c4%WI)P$eQ@M$0k3&WG8=D#`>61E@)iDIG{wV}TA0REk z$JL?y*4q%?V5DR>xWX^|4zApKS08kcH57;Q5{iSbd6o=Y;Myg3NRc3^&oqMxWdjUN z&X~sj6RT-XU93oIU1S|2`O*|4^VMCkP8ZZ>q6{fU%L+C-LiMbnaT_MLIF3}2Pp%&f z?37DzEU+non1J~wQ0B9ZX-uCkN(&}Wyd!?~$BQ)9zso!*1@JfQD;jv*ka$uaXiM=! zBphWrMiy(#oU_H7&U%ai5)zinO)kQ~>}G;uia6d4csU95>4_IkVb)@1{6hu@%@%?{ z{Y1;txi$tKxrvfpl-()S3 zY@6E1K=J%iw?FscJ_LxMc+7h_!|~4s{ZXGu zS*So3Vim4898m6Oh8xo1*dLce?Vc)%F~AFSkv~fN={kU^L&&_*GyWlf*eJdB{V{+b z(3=(a_?KoIW}4JmSV!-b#j<(cI8zF=Ao6#BE+TlB;i4fHJ3$)(p@K3&fM1W+RnrU0_MEGeX1RJHbZ%!(9HhUjnb*6VgVTMhyy2nN4!{+3w z<(L~#NlXe@GK;F zZuuPyH@wCEFIaZT>l<{~7hJcQ($5-%^=*?}cI_17B>#!t6rc~#9mb7E2sUv2Sgdp* z)_svKE2!<(y&fE2T-`~j1ZdIT;Aja^1zlivE1l(zLfiXN1p_vZ@hiAEBosW+*6cI%feg*7J=5WMNls^XEWM#L4XiJrHtY`4a;y@$RW+ z(U$XzYeYgvEf-WPizye+JUsNtnV-&Q^Hk-xJ13$1dTJ9Zx`YXqFnO+7l&(UZsK1pW zH-SDuq<>(ckI^-J&%9(n4^`4u1o7lV2gm9f?s0yjs|*m`m)FG&Z135v0WU<%;7~M> zAc~W_yENuM(m#Dt-6OZy#h`coX)$)sj7Lg@Yf%k=dF)iwDR`giuN) zA?8|Y@9^cN+j|l$l~po@ZssNU?Rr&866@Kt1J{d8hd-m!FO$q-Ob&a^2T*Rv{a zVQM$(Ou^>+@m*Y=V#yg4v@!z&O1}b@$qwx_ zVhm6#Q;b^%^`b2Q#WQBc{n_psYiQr2-AD`-s@J1kUKsGF1E}*WG)djraV`u4xr%J0 zRDsApVy*E|rV5Hm^4|&o+f-?6Lm8uRv~_7&-zXotw1 z+JP99-%fwNEhgJK4jgKZRwpwES7o5zp6jPsz3lV~mo|FR^PujQQkZt4|D7!eshc z3)^#XZPR`EEPKZp3b%MYqUX8 z=t`kdMGPpPtzMA>-@O5#1q2B21PT)B-IrZ;D$cq~{%nVEMyZ+xez9_etD#?VO(LWM z=wW)tNC+V9%pXD9JNaAW`8Ly2M!7y;&$Y`X)3&}mKO$v-%Ot{4V*^Sc2*OoK9kJac zVrEEM|FtUYIWfRxO4&R1?Z@0QCZY0P#^ucx8`);@LbE7@p9WYu?=~71;32~D%{e%M z0A$vt0VT_?$K&F>p`~g3p1XoCK_|=FW1SQKJa zep~7104^wZ+>}LUGAfYH-HI<1Pb!Ayh`UTo_cF=!;$w#TvRXbjl)JYG=w`p25*j{t_@VnhEg|-vSpHLGd9mE^rLeXwyn9jKZgAp(oD z8exC9tju2lowDuo&u?;bw#}T{CHrjRAIbo2MK&dYJN%PJp$~$XX+yvgb zQ)GG)dr=qw_+)X>|Zo*zEI z(HOZ*NG)5H<f}jm& z=3B8Q*rCB^$2{;K)twA-i~7H~hc5g(o%u7Ja))nV-%b+h7KjM@JDC>Wm8xvnuS;Ibm7254<()?|%oMjm03m7yw7g7&=m}zizEJD5j-=m9J zxTV{tYI3C7Z#miamUgA7L6s$9rvJHIP&lF3x{qm0+izH+h$YVj^Ym5)wvJC(zE*49 zffF^<*96%=K%^)ifkOt5gTmkpda~OP(ZF6rDtdbDH~S2>RA2SB?y*X*Fi6u;PDu~% zEs0ZMg4G0H%I~M>x5!@aWYj*M;QdC?#7pim)U&ucTF?mM`ez(L6v6%?k*P)M2=hdd&BWkW=~*|G`fBLewj5G0br$hx3qE^pr#@>n zL%#e+3Rw%(cfS~<8;+4yWC;_$I$2%<^0ApyR<7HkTw!VoqG`PA|@Sn^fc5oPgNzNRJUTK^cB8M_~ds`4?;txIWwgQ@&W(PKn@1o z%tlry7Ns@XyK_J%jljG}sBD*gcn?GO{99u5Zk+7)+?6wIQ%0PHjsd05)(f?YO1{6% zu4Q@F5D@9UjPPm$YCl=(HT(%}l=P1eNM*ZbOThM^Iw>2yimvp6IQ9=doW0Di7Pq2X zDnPm8=OA=_tV+~d0A)MG&f`k6s2xzN{f%83fIJB- zO3u$$6GDYjCTzv+#KqxyrK7lfR7Zn0OJL&960-8E544}KFOfpGWTXj^FO7A(T+7=Q zbeRj23PyiVlVSD+ei|weU`LA?F+hhQ?mI->$m@i$%xUGka$4~#%t;qOCD`g{`iX~s zWE_i5|A~D{RtuYYb8sf{snjd*iBxc`jxhKSUvA@ixG>;$62A%Cl&h2wVH`}Er(Ud& z0185@jAH z9hOAC<$pFckB&AD%xxe}Hm_qLNZPbtbrM@9;hV8XZaA4Ac>45QSQ%lEZevmX*!~MV zcH~fMMNxC9uK+JClORU!Fa za5nJm0UiaCnvNptj+kHNu=>L2skQZsijGvcJ{U}@@=cAJFChp1M@THNw3>k$9&7oNMnu~Y@(wGOj%LsYfCQ?bJM!1Fdl-O^x=O0BQII!v15rg& z2H){kMZo)+V*D7rgFrtEA4-Z!mESIwQm0Qx6Qet}*dOVHl7&VSH~}0)5wq(< zkuF0$r9yVM^lYxnswtsb9l*4&u;^JANA&~$-8*`twVbN46$R#749++?IFO>@eIQv>Y7`P z0TUbqhh&Dpk$7S6oxUX!w7k0vj+T?BTs0I0s8^9QW;LuM2}Yg=%I~(MIuXNWEt4C|Q`|-A1V%A? z@H*`09ifqIFk1$+|ESyWhLW$1q4flw8gpXwm?` zEw7`Q`;FgGVF0edOP^3Mpst}C0dhMc;2OuS$P!gUjRprFN6}g<8Y(UjLdq znP)aT266U^n>3e1(q8XlwEe}^AE-%DOgtdhLwrxpdMj6})-+_b+hSK8Eox6=D+$G8 zj2BgGpte#3FNYa-oOGk0AK&v^W5#N9e$M?f0o_K8vx;8*Z{aEh>-GV+y;K{un2j>+<4NTRUx3v~p`P$3_-7xjZ3HcK+S_1mi%bJcQof z04mpNa5ANB^4hkYLe&8XwBkDsf4qqED6y=#5qyvZ~PL6z<{b>I&r{_7{==YKGnX=*f*ZRmd4|9ug-@P(Jdu z3d^T{8_i+hgvHvY5sQEP*VIFne%5)^L4h7Fdh%6>E_Cmogi2wS`CYPLIXs%+shVJE zLFqbXDiVBdErm)vK8LuxmuedGh-)kAquO}_wE+EFbEzU4(kI{sQtMGdddQZ^XOo6nHI6h#WQ&lK$Yucur&z6*EVV zuPD>uOl7(*UtdNsg09SG4Dl~{k$k{06~@#1ev9Dw5uuCTz#z_3LEOwS>=QB)OQbMS z*f;tP22GVJVGReWkN?yd{O9GHM?T`AP?U3pqt%k?n|baOS@7Kl| z&eE!QiBOMefpz>uL5aO`M(~KH1zJzq;nW-TVf0`&NBjD&HLlpBh%u>C|ZsJj#bbY=wV_@LB*bc=rk}Xa;4;BYS_LvBXj6^z? z0L=V^9Kg;rg#!|iI1-@EI$W@IDm0HHfGZ0lbY-xamB6?)Rc+~3kKdNVh~zbB`vTzu zGs8)}=&j{2zK4^eY^wDI5~=}5QV}*>p1%W!8eH&`Cj|i$sjx=DwFJpE?N2`bDj$JLzb3sAKHw ziU39?;#P!*im@Ts1mK=qeYoSXSsb6V*9dzy8xB^C^ZgTi4WEC`2Z|=~#*6_*sgd!U zy|WRt^hk<#P@xmEAezAfE7Dj&Qp6%weN2ch78Er-NT?EF;2uL$d=R9@gs>@I^>K6b z+m|EF2ZQDgH~8tCX55bk4WmXON!;RUOd_PZl~v*mWK7loe3k;V9QIR``SUQ*b}AG3 z`4g1@-XY+GwYe4in;Gdk7 LvSf|8NznfRd0U|B diff --git a/html/classlibdap_1_1XDRUtils-members.html b/html/classlibdap_1_1XDRUtils-members.html deleted file mode 100644 index 2580787bd..000000000 --- a/html/classlibdap_1_1XDRUtils-members.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::XDRUtils Member List
    -
    -
    - -

    This is the complete list of members for libdap::XDRUtils, including all inherited members.

    - - -
    xdr_coder(const Type &t)libdap::XDRUtilsstatic
    -
    - - - - diff --git a/html/classlibdap_1_1XDRUtils.html b/html/classlibdap_1_1XDRUtils.html deleted file mode 100644 index ea502113b..000000000 --- a/html/classlibdap_1_1XDRUtils.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - -libdap: libdap::XDRUtils Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::XDRUtils Class Reference
    -
    -
    - - - - - -

    -Static Public Member Functions

    static xdrproc_t xdr_coder (const Type &t)
     Returns a function used to encode elements of an array. More...
     
    -

    Detailed Description

    -
    -

    Definition at line 58 of file XDRUtils.h.

    -

    Member Function Documentation

    - -

    ◆ xdr_coder()

    - -
    -
    - - - - - -
    - - - - - - - - -
    xdrproc_t libdap::XDRUtils::xdr_coder (const Typet)
    -
    -static
    -
    - -

    Returns a function used to encode elements of an array.

    -

    The xdr_coder function (also "filter primitive") is used to encode and decode each element in a multiple element data structure. These functions are used to convert data to and from its local representation to the XDR representation, which is used to transmit and receive the data. See man xdr for more information about the available XDR filter primitives.

    -
    Note
    This class data is only used for multiple element data types. The simple data types (Int, Float, and so on), are translated directly.
    -
    -Even though Byte is a cardinal type, xdr_char is not used to transport Byte arrays over the network. Instead, Byte is a special case handled in Array.
    -
    Returns
    A C function used to encode data in the XDR format.
    - -

    Definition at line 145 of file XDRUtils.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1XMLWriter-members.html b/html/classlibdap_1_1XMLWriter-members.html deleted file mode 100644 index 280734283..000000000 --- a/html/classlibdap_1_1XMLWriter-members.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::XMLWriter Member List
    -
    -
    - -

    This is the complete list of members for libdap::XMLWriter, including all inherited members.

    - - - - - - -
    get_doc() (defined in libdap::XMLWriter)libdap::XMLWriter
    get_doc_size() (defined in libdap::XMLWriter)libdap::XMLWriter
    get_writer() const (defined in libdap::XMLWriter)libdap::XMLWriterinline
    XMLWriter(const std::string &pad=" ") (defined in libdap::XMLWriter)libdap::XMLWriter
    ~XMLWriter() (defined in libdap::XMLWriter)libdap::XMLWritervirtual
    -
    - - - - diff --git a/html/classlibdap_1_1XMLWriter.html b/html/classlibdap_1_1XMLWriter.html deleted file mode 100644 index 8747aa708..000000000 --- a/html/classlibdap_1_1XMLWriter.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - -libdap: libdap::XMLWriter Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::XMLWriter Class Reference
    -
    -
    - - - - - - - - - - -

    -Public Member Functions

    -const char * get_doc ()
     
    -unsigned int get_doc_size ()
     
    -xmlTextWriterPtr get_writer () const
     
    XMLWriter (const std::string &pad=" ")
     
    -

    Detailed Description

    -
    -

    Definition at line 39 of file XMLWriter.h.

    -

    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1XMLWriter.js b/html/classlibdap_1_1XMLWriter.js deleted file mode 100644 index 5f0c3a2c5..000000000 --- a/html/classlibdap_1_1XMLWriter.js +++ /dev/null @@ -1,8 +0,0 @@ -var classlibdap_1_1XMLWriter = -[ - [ "XMLWriter", "classlibdap_1_1XMLWriter.html#a9a78b602c06cf6e37eb2c9d787a5451f", null ], - [ "~XMLWriter", "classlibdap_1_1XMLWriter.html#a9c6bf07349c5764a9f7805d83fa4bc6c", null ], - [ "get_doc", "classlibdap_1_1XMLWriter.html#a6e7d1d7a70398ca2e89612885b8e97a5", null ], - [ "get_doc_size", "classlibdap_1_1XMLWriter.html#a20aa97be3f0c6f29dad2adc34f370d17", null ], - [ "get_writer", "classlibdap_1_1XMLWriter.html#ae78a49c5f17e5bee6e32c3a6820a9ba9", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1chunked__inbuf-members.html b/html/classlibdap_1_1chunked__inbuf-members.html deleted file mode 100644 index 8d667f1be..000000000 --- a/html/classlibdap_1_1chunked__inbuf-members.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::chunked_inbuf Member List
    -
    -
    - -

    This is the complete list of members for libdap::chunked_inbuf, including all inherited members.

    - - - - - - - - - - -
    bytes_in_buffer() const (defined in libdap::chunked_inbuf)libdap::chunked_inbufinline
    chunked_inbuf(std::istream &is, int size)libdap::chunked_inbufinline
    error() const (defined in libdap::chunked_inbuf)libdap::chunked_inbufinline
    error_message() const (defined in libdap::chunked_inbuf)libdap::chunked_inbufinline
    read_next_chunk()libdap::chunked_inbuf
    twiddle_bytes() const (defined in libdap::chunked_inbuf)libdap::chunked_inbufinline
    underflow()libdap::chunked_inbufprotectedvirtual
    xsgetn(char *s, std::streamsize num)libdap::chunked_inbufprotectedvirtual
    ~chunked_inbuf() (defined in libdap::chunked_inbuf)libdap::chunked_inbufinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1chunked__inbuf.html b/html/classlibdap_1_1chunked__inbuf.html deleted file mode 100644 index b3e9375fe..000000000 --- a/html/classlibdap_1_1chunked__inbuf.html +++ /dev/null @@ -1,280 +0,0 @@ - - - - - - - -libdap: libdap::chunked_inbuf Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::chunked_inbuf Class Reference
    -
    -
    -
    -Inheritance diagram for libdap::chunked_inbuf:
    -
    -
    Inheritance graph
    - - -
    - - - - - - - - - - - - - - - - -

    -Public Member Functions

    -int bytes_in_buffer () const
     
     chunked_inbuf (std::istream &is, int size)
     Build a chunked input buffer. More...
     
    -bool error () const
     
    -std::string error_message () const
     
    int_type read_next_chunk ()
     Read a chunk Normally the chunked nature of a chunked_istream/chunked_inbuf is hidden from the caller. This method provides a way to get one chunk from the stream by forcing its read and returning the size. A subsequent call to read() for that number of bytes will return all of the data in the chunk. If there is any data in the chunk_inbuf object's buffer, it is lost. More...
     
    -bool twiddle_bytes () const
     
    - - - - - - - -

    -Protected Member Functions

    virtual int_type underflow ()
     Insert new characters into the buffer This specialization of underflow is called when the gptr() is advanced to the end of the input buffer. At that point it calls the underlying I/O stream to read the next chunk of data and transfers the data read to the internal buffer. If an error is found, EOF is returned. If an END chunk with zero bytes is found, an EOF is returned. More...
     
    virtual std::streamsize xsgetn (char *s, std::streamsize num)
     Read a block of data This specialization of xsgetn() reads num bytes and puts them in s first reading from the internal beffer and then from the stream. Any characters read from the last chunk that won't fit in to s are put in the buffer, otherwise all data are read directly into s, bypassing the internal buffer (and the extra copy operation that would imply). If the END chunk is found EOF is not returned and the final read of the underlying stream is not made; the next call to read(), get(), ..., will return EOF. More...
     
    -

    Detailed Description

    -
    -

    Definition at line 42 of file chunked_istream.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ chunked_inbuf()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    libdap::chunked_inbuf::chunked_inbuf (std::istream & is,
    int size 
    )
    -
    -inline
    -
    - -

    Build a chunked input buffer.

    -

    This reads from a chunked stream, extracting an entire chunk and storing it in a buffer in one operation. If the chunked_inbuf reads a chunk header that indicates the next chunk is going be bigger than its current buffer size, the object will make the buffer larger. This object support 128 characters of 'put back' space. Since DAP4 uses receiver makes right, the buffer must be told if it should 'twiddle' the header size information. In DAP4 the byte order is sent using a one-byte code before the chunked transmission starts.

    -
    Note
    In the current implementation, the byte order of the sender is read from the first chunk header. The method twiddle_bytes() returns false until the first chunk is read, then it returns the correct value. Only the first chunk_header is tested for the byte order flag; all subsequent chunks are assumed to use the same byte order.
    -
    Parameters
    - - - - -
    isUse this as a data source
    sizeThe size of the input buffer. This should match the likely chunk size. If it is smaller than a chunk, it will be resized.
    twiddle_bytesShould the header bytes be twiddled? True if this host and the send use a different byte-order. The sender's byte order must be sent out-of-band.
    -
    -
    - -

    Definition at line 98 of file chunked_istream.h.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ read_next_chunk()

    - -
    -
    - - - - - - - -
    std::streambuf::int_type libdap::chunked_inbuf::read_next_chunk ()
    -
    - -

    Read a chunk Normally the chunked nature of a chunked_istream/chunked_inbuf is hidden from the caller. This method provides a way to get one chunk from the stream by forcing its read and returning the size. A subsequent call to read() for that number of bytes will return all of the data in the chunk. If there is any data in the chunk_inbuf object's buffer, it is lost.

    -
    Returns
    The number of bytes read, which is exactly the size of the next chunk in the stream. Returns EOF on error.
    - -

    Definition at line 333 of file chunked_istream.cc.

    - -
    -
    - -

    ◆ underflow()

    - -
    -
    - - - - - -
    - - - - - - - -
    std::streambuf::int_type libdap::chunked_inbuf::underflow ()
    -
    -protectedvirtual
    -
    - -

    Insert new characters into the buffer This specialization of underflow is called when the gptr() is advanced to the end of the input buffer. At that point it calls the underlying I/O stream to read the next chunk of data and transfers the data read to the internal buffer. If an error is found, EOF is returned. If an END chunk with zero bytes is found, an EOF is returned.

    -
    Returns
    The character at the gptr() or EOF
    - -

    Definition at line 84 of file chunked_istream.cc.

    - -
    -
    - -

    ◆ xsgetn()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    std::streamsize libdap::chunked_inbuf::xsgetn (char * s,
    std::streamsize num 
    )
    -
    -protectedvirtual
    -
    - -

    Read a block of data This specialization of xsgetn() reads num bytes and puts them in s first reading from the internal beffer and then from the stream. Any characters read from the last chunk that won't fit in to s are put in the buffer, otherwise all data are read directly into s, bypassing the internal buffer (and the extra copy operation that would imply). If the END chunk is found EOF is not returned and the final read of the underlying stream is not made; the next call to read(), get(), ..., will return EOF.

    -
    Parameters
    - - - -
    sAddress of a buffer to hold the data
    numNumber of bytes to read
    -
    -
    -
    Returns
    NUmber of bytes actually transferred into s. Note that this number does not include the bytes read from the last chunk that won't fit into s so this will never return a number greater than num.
    - -

    Definition at line 179 of file chunked_istream.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1chunked__inbuf.js b/html/classlibdap_1_1chunked__inbuf.js deleted file mode 100644 index 61575f789..000000000 --- a/html/classlibdap_1_1chunked__inbuf.js +++ /dev/null @@ -1,12 +0,0 @@ -var classlibdap_1_1chunked__inbuf = -[ - [ "chunked_inbuf", "classlibdap_1_1chunked__inbuf.html#a26d2bc25f975262555a73e42ae13cf98", null ], - [ "~chunked_inbuf", "classlibdap_1_1chunked__inbuf.html#a2d52e70d5ecf155154c8892dd4b793b0", null ], - [ "bytes_in_buffer", "classlibdap_1_1chunked__inbuf.html#acd20e632036de43146af89d7ae0a84d0", null ], - [ "error", "classlibdap_1_1chunked__inbuf.html#a6ec5097a1065a74033a60e84cc075195", null ], - [ "error_message", "classlibdap_1_1chunked__inbuf.html#a1af04415cf582c4c5f07acf5c89a1f7a", null ], - [ "read_next_chunk", "classlibdap_1_1chunked__inbuf.html#a70b29d2d6f5c4772e7950e8930ed71cb", null ], - [ "twiddle_bytes", "classlibdap_1_1chunked__inbuf.html#a454ecd7945ac2d361552aa39d905cca8", null ], - [ "underflow", "classlibdap_1_1chunked__inbuf.html#a45c0f6e2f7bfc6bd4f953e5de8dbd241", null ], - [ "xsgetn", "classlibdap_1_1chunked__inbuf.html#ac98a38a08d371dfb97c32c9235bbc129", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1chunked__inbuf__inherit__graph.map b/html/classlibdap_1_1chunked__inbuf__inherit__graph.map deleted file mode 100644 index d2a692d79..000000000 --- a/html/classlibdap_1_1chunked__inbuf__inherit__graph.map +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/html/classlibdap_1_1chunked__inbuf__inherit__graph.md5 b/html/classlibdap_1_1chunked__inbuf__inherit__graph.md5 deleted file mode 100644 index 157f93854..000000000 --- a/html/classlibdap_1_1chunked__inbuf__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -0a55f651c1db66b9768ccc6502982006 \ No newline at end of file diff --git a/html/classlibdap_1_1chunked__inbuf__inherit__graph.png b/html/classlibdap_1_1chunked__inbuf__inherit__graph.png deleted file mode 100644 index c4ec979702abd8de04fcc20d5b4af69d5141ffee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14804 zcmdUWRa9I-vo01SxVsEa2u@&d88m3n5Zqk`cL@Xr2(G~$f(CbYcXxM(;BY4YUH9$0 z+=si)I%_}dy=M2Ws_v>T`Kl*WSy3AOJ;{3*7#MU}83`5WJqHE`7Kn@peOhp541?Za zom8a7VamtI4q;&UB4s7S)ZAfDSCQ`NBx7JMw7wf?$kUoCFd|-bKmvLZ)(pE4AYt!w zw!qX5^fT&s@Q@5o_mGURB1R%*j`W;kCbBSCY& zH0>e_N$5Z|P-yi{mGtIqKv_x9;PzlYTGS^Jo7 z2>~a7g51;iaOGCU=Z8Ke>w5O9#(2p*DqjXMj`zsN5iURm<)0>NRI^Niv(=nk-z076 zAM*BRvEUJpzv#R692)`|I2m51GV4Sa521oQY(ehB{t*$(M2jDv+ZA_7T+}}4)5&eG zlLiU!man)d6n7PDe#bM6b8vjQFWhslb|@QlcjzACTGBuw4Gw?7*_qq?RW1IgtQ%16 zXgh~;*$Mk){XNRvlaq{e5W*PBp#~tGWXczCm{lL-EGd)p!&yhBT(Ut9_+TlsT;Ay5 z4$NrVd#2yKAB^@TiZvIZoKgUJddQ5UpqRh7%V-DR%tvQXOwj>YP!FX5>3CC=;*Tye znW%%(xQ6u(j$$%|!8@;&0LlArKo5}2nLfo7F+hkuPyffwa&!&H?tv28n;&7U>oa2> zIS9_-D(32BiPA-7yiD9vOeQ4wW+1waY-*&d6nEc3rBo~C$Bx&c|W=hA4k-EKi+)a@g+0( z+P>n!PYSpO9&POQ0$stvBD_XK+ntV!!|2a^?4AbgmSY@_M5Ad{prUN5Z5nQNX~u=~ zzhMr()v5M4smSz)m>fJwKvg+|u&(Q5YzgdI2Lp)p@>M}iw6rVoLg1-z(Bn6mam>Mx zgzuQNUF%(;n5t%^}z8>k+F92~E)$=mIho1IgGg=Y(a1hYS54G%|XkUUU0)Q@_3c|{nEuay@p)4uE zeEtaK4s*X9dGHz&}PccoS`nV;=Sc1~nPlf`*AdqaoboOpALeWgaXD?zG#> z%$ImzxGh+Wx}@zX0`fr%DcVAq^O$_D?@>B6UdJR5}2-r)UL!zg0an>taIl4+4ac` zG*&`V-ap(hez%pGvfZ0t-LRCEl>yWv-)M0{ZQDa5hF9%}ddS~yV&yPsCgLN`?6^b& zK|tKqXyzCcj_D401B0CEy*~xNmW-0{nKif%cg^6K!dr2&Q|%h8W=+&%e$lYH7N^Gi zRf?wx?!9&P(O+|!*S&-Oux~YE;4j|1clDLcG!m$Bv)9#ZM1^alDZlG&+zVw{nZrxC zh7bP>tJ&zoJ}EOICm<5Pweg}H%6Gn!^kDRd+rQD}$wLo)VFB_GV@Z3~ zmVcvNd)3BxHJ~z+F?%{~>Ox0XG8Z_uRYI9;eVt52J^wdamm}di;vbX#ur(cbP3Y*8 zu-|F+rT^ym{~%KG!H2e%@9>{E0!3rHu*?gX4N&%8?#7wH~XL}#oAo9_glEttkAnEqLbqRwlOAp z^W#;I`%CWj!$FmgA%mEtTle^7b5a40BcsY>@CXxO(|0~!4s+eRV+%_C7ZwtIfVvl9 z@6ouv=OHQEvio*w8bQNWf~J1!RVX}R{Q%`i5D*5|ru7z(`i^?VClEa>PSE$VcevvH zn}`Np$<>7*jIdBF3K*uROh-#l*rCJP&LQwP?eVUk7p>a~oVmQR7rp%Q@=f^o{}@`W zV%x0YS60R5i!R=04!ySNbUSxX;M?g?g51jR1Ors)zoCEFKicCrYzB52Tm{@r;xi}e zW>L9JFxUP>6VaK}mspEO`6+-&>CVjJRtDeW*b^335 zZBxNe)3#ms-AD+`KpB+wyU7iF`_}3+NN3N_09x@;iX9Gy(bl8E4jSq zGGg4?kIodw4n)$AS}|+k`z0FqY$$PwNYK@(tVegfoxSuFt}`|uS>rwZl(N~}nWw2J z0hirsygTGdvTRiXa>Y>KGY(GWQdJ)gT99_LshNz$)hu5**gm8&B=Yq$@YdI^GRdun zO6#>6!7BT>PFQJdnbsj|%k8!v-_IXo+FKRfgn)_!&pffzX#fc3j# zMhLx`cv^_wHw2fFpax`q4~mpz6flLSCH4#l?iTgIj)#R2eUHaMzNB)$Jmh~pfhKa} zdW_Syb!v+znG~oO)wgSM+}(A1|3k=-_8n`aIKt;g?WLKf(G|eW4!5eXeP4$ZsjWt- zo{vkV<8EdO*RFs%S`e0F@9tqQf8^J-x2dGI_`TtMVtA18M(X;r8F;}kWHvF*wC7vR zPIz1&)Tm^Q1=}kKpl;B5GL}t|1p2@barxZ#4eAd|CFRN7Uq%kcE&>+8(77WaLD^+mq7BCZVgtx$t&pW) zy<54~gNQXf`v+q6ky=xZV?s(YG)K7C;^Uys~-g{_&duoqy`MRG(PyDv;_gZ-0 z%jO%SLp;i~_1eeV#u3{keAhUR-~RS;?vu}_ zcfL@&Ab2`&_tVNe*4gJbT_bG2@9h;j_ZZ&-M|tTyT%NXEkI}ht=;)q%&NJ)19BC4| zwLh)STgF9djOWWG5rj~9TF83advBA5|FewVU{brUE2nmD%z9U`NqD@ihYIs^_!vA( z7P(v5m_8Pp-6wFCA{K9VP^Df~R*&(Qe00n7`OB1X`O`dpegnb$>3Ls7-*@3rjJ(`y z^*GUX&AOs>$Zh!f*SL4V{fW7V_VaT4i}oek+ZEgH0n&JquB+B%4});!NBfD)7)Ob2 zr$;!M$GVPis}v1D~+bVoc<(hWkZcFOAMy?^scg z3j-SD*jj6ztCaY5= z$7M9KvC!2ZLw zezk4^nyaDe>{Lei*i=63r4pKF`nWFs-YH-Zc^EV`K65SC>t8Dy>^xO zt~@L*S_tr|%lGM2bHj?a{b4k`UvQ73_wDukEwSEtF93<+tD_d-na{Zwp_1oR+>jTr zC|jcODDUULwcHgF@j9uL&Sq@@jQQibzB>h(H1M98;z6>iu_?#=?l(h{BrG63x-I%% zE=`&vVIIh- z_G&g8#qF`1@>Ln5AIK1i*XcnP<}%g1c3U3n1t0<0yl)`yk!F+o?72H zYCE^4f#~r8jylp`d3&C+BESDgs0Swi61^s^=GJe#LM*Bat52fyW=+4{}!Ra4{Iv1m-(|R__ z>B)wRGCP+Nl`(lf&MtBjqk@gPrU!N`I=FX_15W|_Q#_>UeeaCPQ!4K%-|qWOLx_V1 zK*54N^}C7M1jy))*b+yl*T?#AO&6xr;@uow2$kF9P@7OnoJZp@PXkNw1vUC_`<@t6 zY6~n&a5g|LCZuxgUJCp4$k~4+J*N?jDO%XJ@s5oVh4PZL zOF{8KcRNHf>hW>Dy=}z$YFh|`9bh#LgvpkCrWWU{*(6pT-q@33JGI@4&n=q&%13=> zo(M@sW?!l%r6h$n@LkV69QWe}~QeqMqyo5SMJEno=`on_M#4396 z0xORVc*+Kixj=TEeTusV>BU9!3=gx=l@P%lz>mco%woL&SulVb{u%Dv z@^M_)DEXXxS9*6%n&bP$#NPfx9AqVwD=jCcY|I%KK@9OhksF)uEUIHR4wd{o2Zh{L z!2MU-Wr=(zek(U8Bg)f5oNtyziqK#4k&O{Ln*PAg3{V2i)z-<1{odcZeO z@svi>DB>xYg_bJ8B=1MXX_5gT6{{Db8mAFGB-rZ1FM+OG@h%fV0wAWCT#StqOC_&w zt7UW6;JjjJN|sC2Wz{(Q2DOtCHqu_dwCRb4SP>sSf|HtDBlu^)7bE|pQWTO|UIomZV`6xk4pFz;(V`m&O_4LJ zQGfx}Bu)8z&PST^kXUa+l7Dp>dg;Dfc?dMaJageYe z0Qzpa!_#-)6FR(s;`7xHO9SXT?mrppjTF$~|5Kz|$~{QF>gS!09H$Uk_K!PMUpMU$ zpQXLiuZ6zpbh~`!WmnSJYsVy%K;;CmLhRDsq)f!q-h_3qSfKNuY68EKa)8C3$KRgE zUA~`<;JhC_GHN+AJo+S0+Pi`qAV-9L0ZlQQ-MdNGlo9pFY7~!XUPrvvt}{62MzeN* zUN?r~<}fCA(cPe)yY~wWWyQV-&nx*FvP})By$Gi6k=H~FVTllTF8ramM8=_&|Ft0< z=&x)=&4D}!_?q95R*j6y&;vmLOFjZ*CZnbX3MhJRQ+e;?SxXUE*U&htU8 z1s8$lG47&TbRv@*BlDiyrGb$vBy+(G{7u3=ViNRjz+~0peFS!9W?$uG53h`AP%%EQ z1Z_UgAC#gjq3^-ro0nmlEjef>@P^ciVni38!e2h-6gV`BI@4aJNSb<{TI*{Ev*QLz z?tI{Y^wLjaUqNDnN+4G?-VaxtL3Ua)-AW?hNYb#cUXA4uIko@tP}7x8&DJAzQ$4^& zjnaYMcu^px9B`RPRcbj>;H-fYPF>Y|Kg#zex3_UWLtDxQzfNA1_7dIa#L__#3>!+x zA$7a-Ug^Okk8EaJwyn|*sz6E?~@^Ux`EM! zn564x zfNMvF*O?aeGJC;_-+hQ5BL?42G^c|{O8dMAnkjRpvH`N7V};&0Pi^I+&is{Uubal% z6xL_-HEM_{(Isg`?;o(){!1VGPt%{21lOLg?-1ZZcbFdhE65xJChE5)W2$|x;xgl}W>FZ@l%?QVxSXFu zP2EP?6zd9jK5(V$xS&jzY}|k0?se1K-?e^)xFpYYn{v`rO4dwjeQ);@hM)VKCE*C! zSz#xBE97deajy(P|3r@uN0uVrBN~C}a{w9!%&}X$hx^MIZ`c5=&{=lGLDlzTY@UUQywONpjRj z7JIdQkW-J?2XO-eR3h_^PrYK1{>|^7A&^l{nq*lvOs@6h*IWI!+Mk2c?K1w-9bXgx z7F&iP#&TN;oLsf{W?S@-YQ*_S z>*G1Ayvvk%mdEqA0e7@Pk&SKJe?pJFKAr17UyHmsRd!d)!`Dnn;bF{_nk9Ed~a@*R6T9G2wwgeXZ-Dw@(p~7P*NVjp`XUx^QIeR zdzpSbEU0R~;Y5M`>^ey0Kg?3k9{XsE1*JZ27Pz@ZZ zK(zPH6&i7;^lUlZULW=e$Dt0;tm+7)q#-r?fdJQv`28{P=g(rBI6@uQuk4-wDOjtC zKG5*!=18z*)x2#Hwl6SipS~0a2Fb6DmLe^b4vwS2^}skD(&kJiv7KL=n;}pBOn!|) z16pm!h+^`7RQ5^!eFujy&|)FAj_SZPbSFmT5)BzoZJEUJ*K&1)+(z{O#?E1@4K=3f zV=ix?o~x|LMG;qRw0-x5F8{HWn=RE{#9&Keuzip|we&jKRWc;V#jf-LokGq55P;S%dw7mN#@utvDMR(7dR#bvF`^rOEA-;^uD#vafZdqK ztLQ99j1R-cinQIXu+)7NUMFAb!q*gi4)AA31xAc=71cbhNQEv`d;ag4|#Z$m4ytb}5W003QeHx&<9loPlqSr#O#W4a-liU75q?-Qr)MVpHLsHzl*6~!DKB$k zk2;>~XiE^aT7b0AZYdvMo{O6>H{kE~O^4oltPY-K8`X^dO$IiT)F@oJ+{{?<3(kYWOR@j9#0%uC zZBr?E8DA)v?>zL0+1@Eb)LYxG(Uk9j`rLydeI4kZTWp9Q@XMhC^-|0SI|&mBs1aJ% zg6-?hw7QAm_SJmAZCr*cToI#k?Gnf>{qvm*pZFZMG}#w=ncK{2I3G>2l++=Pl24Te zh^Ts$HSMlDs$hJC=f{PoXq!r)7p05 zY${D$-fv;NAxhGtCSzQbk4%~g-GdE7N5wDFUk$z42y_sU0{+vc@#NiWbuPB z-FEP~Sv%0NW9rmzqnx84@eE%`ix@(Jp=Glri(cX3j&j-Y2%ivW;EU~pLAw07TMOd&8{%2cX z@q!@t$fqVB`2`YF#cUVV5%%74J3D5OCuuuqvr&%H;HRuJ3aOM_Y%I0TPBaYCSrgucAejl`25d)(v^i5laKD2vg=(_C*54TX zLpN*(XUNsqZbHnKe&2pK_BS6;eHmFYFI*DBk~g8+Zj1g{MJIvcIu*G^GJsow=wrMCUyF&KR=i}a4jU`w&`xOU7E z40+huZzfhMrs02`jzSBfZvr25Tqj_1DU-o=eMWz_LSOZ{rY8C?0}Ej{Y=)VgM|H&0oi;; z?VnEE>c3k(2>xo66}tVc#G*Usz%z#R{Bk6ydgLmwVXz4w*5*0uw(}O(-!YR$fmVU` z(4dl9p@;iBP{qpW_kC)xgMVR3hfk} zE}gXRlyPZnU_lIiRwsK!hms~EaT8!~=?|U0$lu423J3@thU6CAP?>%$N13Xn35<`+ zB*sJ}cqdJUd1Tf;)9`}qWBGHLv!r$`2v{P-_1&}gR2ulYw7`AFA^bf@TCZmYIfk`j zvjz$oD8FAcplG6lF#;d=Nd*A~Zuh-Boi)hdaZjBl41P z4DvLqrR#*G4j9ky3+K&yNYC0h^Kx;|fXi{35LRV0Wi>K1*y*8juP7`%6=FO4M+^8HJ=sAx%sU6h z9GkMhT%H<>Mm&^C1+MEe?4;y|U#N9oI_H*)DYg7cgWXfix!>Cp$FV$l2z?Kf!{PT+ zR(h$G5~jNFK?I{u@{T*Tn{lh%4ooXCf)*CF%&dx`G_ktqi$FY&_!Ak#-5b=F@nChP zjl@aeNMomGq5F-%d9%(&q4~O(fl^O0bRq8Xrn}K4J(4SgFQ0l{#RllP=LBfra1jxp zh}OIu6a#iNJ5CAxehf3u1%-dQ!8*(eQnUm_dg!&UG!rwqX+&Z=qTU^}K~rm`WqI)cahUp03Ml1LQHmsIgf@h-a7X%lA0mV#4h`9w2pf**II zjMx?3hX+S>3>?P!%MuRsMA#18Y2nXiMT(NJE0aRU77m;s0i)X%8ou#Q6jF2hR2>cN zxmPS`G?>&K4ap-eF7YCEBH{?_B?K^xLtR%2I0R*P5!vNTGCX6F^Yd&(QntZrNDwYX z@2MwbHpk+dCMW*k2Fc7fAjJdbm(-b!E))4`3o`cfKLhq=6z2P{(id&cPuOvEXAaZU zU0*8-wtGVM3c`MFKNf8j|ID>(9g>&;rVOIvW3n@F>*Hi&W?07&*;Ty}YNNj>LQ z)Glhu!_|}&I9V3hlF@$K2g8CKngm^wtES8s^QI%Nr@h7o+e?LA=jbq6%)e__%O_x= zY-1zexb!`_Q^q1cxrp9=*|$(msy|D)^YkMxGFGdfS*_4hO&pZeRCZnc(0wmhJ~MNc zTzI$;T-{_oFk`lNlOMO1VhRl%bYo$?*C&5I;++)xUuK}l4Io}>s#wE{U!a|17bAU$ zkokig{Y)DfnohNLQ^4y&Pcr$g$GLzr`x^(EO1gwaSi8|*rW)Iy4@P|?Zn2+;v-+!N zQB=*?vXE}{;^Gk}8rGFYi2vG?>5%&Kb16$~cz1H6jBf|W z;N&3QE;%C9%hY2Xnzop$))K98k--lLRdzemN}m72<8gSW3G$r?JH!CL#>O(%%yRj$ zH)s_wFw7bfNgy935e(?C%ey2*(}cP7OwXWghqBp@ceBgVeezb#M)aap00VU`XdDDX zdj<&}K+``P8!PH(=YBg&5JW|+FV4YPRll2JFCRH@MIH}whizkP7n`R~wdfl^4a=ZZ z;$IJrI-|zu^?C6u9|TMC7SK4n>p1GT7}x2u3J`sST|qPiw_j20!XuPBftk*oD6=K| zRi3`7MkT{6^e>;(>2J7zut#r@Y65VU%Ns;ZU<`o=n3S&e*76}gY-gk#2771GKjQ5$%c(P^&=?*Z5Diq7u_7zB zhQfBlL{=nqHDxX^yPRv<`v>(HajDQaADU`G65H8TyEzLIK)5UI(&jVO{Up zc29?_`0_v&Brth$7{NUGjN$KR8`ax`ZVfkzjbQUV(e6K!^mclpA5|(2JT+L19<>3)PQE);QQRRNkGk80}Wv9p$OZI{lpT#^c?1X)^>jvMG zXDcm*x7Kd7#XtNX*qi4t!H&SAGA*;Q!)y$&LZ6q1Pl5^p87&;E7DM;f^GSpoN4)yh ztkKTwQ!STMlJFlkb8Oh2ZedY%O*c+a!uTOK*(LL|^=7|_BNs5c9M>)l{q^Q$461?! z>Ou)$=5iuvFod)Y>p25==3yTD=r;}w`gD+t_9gGU=u2mY8(IC5tWPR;3N6J~dd0{W zg0_!Z4UZ)NDgAxD{CT?JDH)Rryb63({#!?o6NL>lf-1j(g~+YW1|1GR{}I1CE&x3Xw-tvjk#6m~`q0R#Rixn{l=slhILq8VIth!dYVAPh zv;yrrekOdfYDMdBc>g^gnfGQ>DuY+v6*dwXIeKaEy|4z328vNo)Vuw}w0V@5axeQh z;~%cPr(|EGAq{PYEhTqfl6Vw3$0tD7REn6D0j{zJ*7VDNnn_|6SZO6<_+fj@m&nMm zDn`Rp*l#pD(Ma!X!|tXerR!h*E?2Pdl;iWn-GX6n&09s4UHFIfBJmXjq-##MHd@bA zTSrKt#~`}-g${tQ<>&x|MNZ>F^*56x)HS1%0dV~M5SAGRO5Hpfh%%#w24^oTVvQ4fgPuG4ivJNlvtFD1AWsiUlgK=|-Zug_EN8_uh>>o3aU4D6%tt{^k?DO6O)$b+BKdnK-QL|v#eh*(xl62H|4fRXf@eTi~!N{7 zYWX0`m*cTQafl24uLSFxM0$=uxQF-;VRz$MWbMPv+pHMKF&K&V+k)L{!FwK3U(261 zh%87`LNY#K>Xp4_n0&HW&d+L}dd)~BGgDt?q`JMaWR7Z!iG%Z~Bt+Xj1hv(;^3~o* zRFGFORpe_0Gy-}oZM!Fxr1LX`ZN~wk!^#Rxo}F14!b7zMeO?1m*g5kUl>zwltT7RH zg)V8b;@qhU_JqLOsPy(h;=JSPa z2xiN_=P|CS%ZpAdyJb*f;Qb{fx?xCd+Ls;NGf#!Lc&J{vg!*a;yKTC~z^gUnVNF*A zRcZ0zKFj^NirC3_&?+QqDkd;9KOc21cXg|2L4!{HF_pa8ZW6DVr-IyIINsT4m)O-7 zq3Cp|j%@x&RQYyE*0>^`xZs{kMf_yfXSyVv-!a-27(W~U!w|8NW<++sg|rx)Yb$`K z^QWXxsZ>?4So^cZ&L?^Wgg_90YPnmo==$bMuxox>7|`vR4ebvE@$dOw3Svqcof+Wo zkPHe3b@}N)fsK--9`|81)I(0*eS|Jy9r35?ipE13!;dLokQGn zH=#LfY9WgzS+V&lsdRe_AtRABUbCXV;f7&P2ht+n9N978+U&k0BhLofbbkqnA3)!3 zRqGtxlVghX0`{*S)oofVW8_1H_4cbUw$fw}D7dx1y7`?*+-P{)^k%CkP>tnfY9W5o z|Aa`mbEQNt?u}sn-e3-%Vk`{_aWNP^2Ro6ICc0atC}m^H3o^Nr-Gq*`Wf5j-M5NG| zcy%P`Gj&&!UO&s0Af&34X_e{&ROrag8?-JQ{XDC-R#bs0#C^Bz11gdZf>8m&E<{G$ zRXHNA27^2rn8X?EW7NwAPv4(RuGv>b+x_2lD0i_Kp5Hml9ThKMG=Smd9^w{Domadm zwDEMsnGe~62-yC9)E*$*XWff z+tPs7zJ|lNxnY>C5!E~%rz7Gg3BR~6V;29-O*6~7I@vNlOI~LVE3uFBGO|2FxO)z% z5V}Ad&bTya?Y2;h;E?@ga+1JcQY||~-%2S29nC=1mR_hNLLpc=+8XJS zA$<9(-0M}X)zx8IE3}m}E{F(Qu%h2k$h~jz?4TCpZ0STsVNQNDMB!N#OJFr;jZBkz z%cUhVe6ZhQTN0zUOO(jyGrF`0Q9zbLkDn@KtKKm%P@x|SyJfL7nf_AWx_%`k1-a3y z`^2U8B~bLWA^YD~=aHm^)xyf5c@!U7Gfo}#pNvOhwVc=wRNiFwiHQM@V?R-|+|jgc zdC(j?)ar_>goZ!Avz#g-_9GvnsjIlxlZ#NaJf-2l5p5Rt#Ol!~# zSuKl8JY?`nRAtTZA@n@Dx8GeXY(lInqfWng>*&_YT!M!(A7MYNm%0#;p&4nLA41!1 zQwzA>==mdtI`L;v9H2tiX3gF>)hKhrM1eyct-rMn3()+i>`=g?JO*uF&ar;uY|f+F z4-JfSS)~49971gAQu$O0B&wvx<&jjx3Q^ks1ocCp=v)CIt^TFLj`Grb?P&r{za1-g*%()b0_ zOEkYyLJwHv6OTl`2Iqk=`0{F2HI|7+mB5Uy`mfF^IM-^KbQSq$pONVwZzQ+K%}`_R zg;R4i(}_olJx~Hzwe#-%iz;il=zIxMv>ezWw(0rC_5_o;b#31IjfQdUske2(wB0WF z!J*hjIH2C|MBquabKWo(2_xN80U4wr7W9n^ogxTn)-VB+3x}Mb^>=Pm48$W&Yj$qw zARRLQ$@HbZNO%PUBQA@d(RF1~E%po0Z_~l<6f9)q_flInW`8I3|3E($26pp}rKEho zzWWFy>Zu!>0?R6x_Or(uxS|8mqwBN3la9pIQ6F_1s41C?C{Vb9 zpEiGW_>t*=#hcm~M?b}tK6RcavT6;Qq{#{h{lvkx)UxSum2e-AzLay%QZ*b+2^3qJ z)8eBf1}JtPW~1W#x^T!Z7uB~^5%b+0`*eOO*Hq`V^Z?yyxsIL&6ycF5>N|f-c>_Y_ zSMAWs)f4uHE;5eRxP~?oaOYvSE!0%-7Kr=81F~m%Uw}e?)^V2jB$V&i3;Fg<49tcK zhLa}$4CpjKJNk~sR}B{wV#yN9tjmuPt3(q_OE!>C(v4|&?r#o%{_Jc(Xd)Tsa~zJN z5+nYd1WaoT7p1C0`6K*e>esY*P!VqrIoD52cxe3ut(zvn5Eeq2% zhE%A#@PH=k@hl}6gE5FyR5@GSZP-0Sebtn_pp5FUEsgvU`gtXFhyK}Jr zr`tlsCcYKWg=TS3JxQCD!UyfE4|xT73213ahLCRgHjvgvDJ)DcnlIa-xfB`SipHx6 z4Iw$lW!W(x9OZaK>Z|bBVE95e!;_0=hhg$?^5njD**ay8Zz2LEEvA*{H()ybf_AK@4d zGA6HtvUnbGapRXp2G{j9uXA0D-)Bz8NMkfao~f?J5RWP2IMpA5J!lf?aKEra%A1_? zJ+2-uh=@Eb&Y+Yu0q2#xPQ=F3beM3YT#IHAWc{n3*-0I#x3*_N(w0U+ApWR{I?_PF zhK#QtbUXg&-nJOZX=d`kovFBvP5%e@hT`OEG{IUJXbn;517L}&9C8wOP^#?o=B79q z@eXfL_?G28J%b8PzmTKnX&+UE`LP;MeFh6@0iv3vTI!incz69^!Oo6f7*bHY?GB99 zs?k-aAqpF`YM@gkcJuvgW%Uc$wwYr>j1~x{y7>k9jHQS!=0rR?jDd zCd3_86$9xtDv3u*v?D)9w0iyrzB4R^)rBuS0`wI$+`wjh@CXB44qC~m4!T0|HjyChW diff --git a/html/classlibdap_1_1chunked__istream-members.html b/html/classlibdap_1_1chunked__istream-members.html deleted file mode 100644 index 9efe8dd31..000000000 --- a/html/classlibdap_1_1chunked__istream-members.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::chunked_istream Member List
    -
    -
    - -

    This is the complete list of members for libdap::chunked_istream, including all inherited members.

    - - - - - - - - -
    bytes_in_buffer() constlibdap::chunked_istreaminline
    chunked_istream(std::istream &is, int size) (defined in libdap::chunked_istream)libdap::chunked_istreaminline
    d_cbuf (defined in libdap::chunked_istream)libdap::chunked_istreamprotected
    error() const (defined in libdap::chunked_istream)libdap::chunked_istreaminline
    error_message() const (defined in libdap::chunked_istream)libdap::chunked_istreaminline
    read_next_chunk() (defined in libdap::chunked_istream)libdap::chunked_istreaminline
    twiddle_bytes() constlibdap::chunked_istreaminline
    -
    - - - - diff --git a/html/classlibdap_1_1chunked__istream.html b/html/classlibdap_1_1chunked__istream.html deleted file mode 100644 index 26ebf7f0c..000000000 --- a/html/classlibdap_1_1chunked__istream.html +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - - -libdap: libdap::chunked_istream Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::chunked_istream Class Reference
    -
    -
    -
    -Inheritance diagram for libdap::chunked_istream:
    -
    -
    Inheritance graph
    - - - - - - -
    - - - - - - - - - - - - - - -

    -Public Member Functions

    int bytes_in_buffer () const
     
    chunked_istream (std::istream &is, int size)
     
    -bool error () const
     
    -std::string error_message () const
     
    -int read_next_chunk ()
     
    bool twiddle_bytes () const
     
    - - - -

    -Protected Attributes

    -chunked_inbuf d_cbuf
     
    -

    Detailed Description

    -
    -

    Definition at line 127 of file chunked_istream.h.

    -

    Member Function Documentation

    - -

    ◆ bytes_in_buffer()

    - -
    -
    - - - - - -
    - - - - - - - -
    int libdap::chunked_istream::bytes_in_buffer () const
    -
    -inline
    -
    -

    How many bytes have been read from the stream and are now in the internal buffer?

    Returns
    Number of buffered bytes.
    - -

    Definition at line 139 of file chunked_istream.h.

    - -
    -
    - -

    ◆ twiddle_bytes()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::chunked_istream::twiddle_bytes () const
    -
    -inline
    -
    -

    Should the receiver twiddle the bytes to match the local machine's byte order? Since DAP4 uses 'receiver makes right' encoding, the onus is on the client to reorder the bytes if it is, e.g., a big endian machine reading data from a little endian server.

    -
    Returns
    True if the client (caller) should swap bytes in multi-byte integers, etc., and false if not. This does not directly tell the endian nature of the remote server, although that can be inferred.
    - -

    Definition at line 151 of file chunked_istream.h.

    - -
    -
    -
    The documentation for this class was generated from the following file: -
    -
    - - - - diff --git a/html/classlibdap_1_1chunked__istream.js b/html/classlibdap_1_1chunked__istream.js deleted file mode 100644 index 7fc87932d..000000000 --- a/html/classlibdap_1_1chunked__istream.js +++ /dev/null @@ -1,10 +0,0 @@ -var classlibdap_1_1chunked__istream = -[ - [ "chunked_istream", "classlibdap_1_1chunked__istream.html#a4d8d4b915fafa1727232a28d20030591", null ], - [ "bytes_in_buffer", "classlibdap_1_1chunked__istream.html#af6d129dcc1a429bfdf8162500713bd1a", null ], - [ "error", "classlibdap_1_1chunked__istream.html#a16334134851952c3f8c4f2da09e7ba1d", null ], - [ "error_message", "classlibdap_1_1chunked__istream.html#a92063f50f4749527fd31d09ffaf83747", null ], - [ "read_next_chunk", "classlibdap_1_1chunked__istream.html#a62dc7cf5331c2e78772d391e0c59f94a", null ], - [ "twiddle_bytes", "classlibdap_1_1chunked__istream.html#adb26664f72dbcd5a9563b73196e781b6", null ], - [ "d_cbuf", "classlibdap_1_1chunked__istream.html#ad03a90f167e749639e0b886815ecea08", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1chunked__istream__inherit__graph.map b/html/classlibdap_1_1chunked__istream__inherit__graph.map deleted file mode 100644 index d61febabe..000000000 --- a/html/classlibdap_1_1chunked__istream__inherit__graph.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/html/classlibdap_1_1chunked__istream__inherit__graph.md5 b/html/classlibdap_1_1chunked__istream__inherit__graph.md5 deleted file mode 100644 index da878481a..000000000 --- a/html/classlibdap_1_1chunked__istream__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -da0ff1521e913f7e544e4bb82f5b6bd8 \ No newline at end of file diff --git a/html/classlibdap_1_1chunked__istream__inherit__graph.png b/html/classlibdap_1_1chunked__istream__inherit__graph.png deleted file mode 100644 index 029cbe0ad82530ef4cc2e8c7c36ad05423943388..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22277 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 - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::chunked_ostream Member List
    -
    -
    - -

    This is the complete list of members for libdap::chunked_ostream, including all inherited members.

    - - - - - - -
    chunked_ostream(std::ostream &os, unsigned int buf_size)libdap::chunked_ostreaminline
    d_cbuf (defined in libdap::chunked_ostream)libdap::chunked_ostreamprotected
    write_data_chunk()libdap::chunked_ostreaminline
    write_end_chunk()libdap::chunked_ostreaminline
    write_err_chunk(const std::string &msg)libdap::chunked_ostreaminline
    -
    - - - - diff --git a/html/classlibdap_1_1chunked__ostream.html b/html/classlibdap_1_1chunked__ostream.html deleted file mode 100644 index c5af7f3cb..000000000 --- a/html/classlibdap_1_1chunked__ostream.html +++ /dev/null @@ -1,276 +0,0 @@ - - - - - - - -libdap: libdap::chunked_ostream Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::chunked_ostream Class Reference
    -
    -
    - -

    A C++ stream class for chunked data. This class uses the chunked_outbuf class to provide for chunked binary serialization of data as specified by DAP4. Information to be serialized is broken into 'chunks' that are no more than 2^24 bytes in length. Each chunk is prefixed by a 4 byte header that indicates the type of chunk and size (number of bytes in the chunk body). There are three types of chunk: Data; End; and Error. In normal operation, a DAP4 data document/response is serialized as a sequence of DATA chunks followed by one END chunk (which may be zero bytes in length). If, during serialization, an error is detected, the currently buffered (but not sent) data are discarded and an ERROR chunk is sent with an error message. - More...

    - -

    #include <chunked_ostream.h>

    -
    -Inheritance diagram for libdap::chunked_ostream:
    -
    -
    Inheritance graph
    - - - - - - -
    - - - - - - - - - - - - - -

    -Public Member Functions

     chunked_ostream (std::ostream &os, unsigned int buf_size)
     
    int_type write_data_chunk ()
     Send the current contents of the buffer as a data chunk. Normally, the chunked_ostream object waits until the buffer is full before sending the next data chunk. This will force a send with whatever is in the buffer (e.g., the DMR text). Data added after this call will be sent in subsequent chunks. More...
     
    int_type write_end_chunk ()
     Send an end chunk. Normally, an end chunk is sent by closing the chunked_ostream, but this method can be used to force sending it without closing the stream. Subsequent calls to send data will send data chunks. More...
     
    int_type write_err_chunk (const std::string &msg)
     Send an error message down the stream. When called, this method dumps all the data currently in the buffer and sends the error message text instead, using a chunk type of CHUNK_ERR. The write buffer is maintained, however, so the stream ibject can still be used. More...
     
    - - - -

    -Protected Attributes

    -chunked_outbuf d_cbuf
     
    -

    Detailed Description

    -

    A C++ stream class for chunked data. This class uses the chunked_outbuf class to provide for chunked binary serialization of data as specified by DAP4. Information to be serialized is broken into 'chunks' that are no more than 2^24 bytes in length. Each chunk is prefixed by a 4 byte header that indicates the type of chunk and size (number of bytes in the chunk body). There are three types of chunk: Data; End; and Error. In normal operation, a DAP4 data document/response is serialized as a sequence of DATA chunks followed by one END chunk (which may be zero bytes in length). If, during serialization, an error is detected, the currently buffered (but not sent) data are discarded and an ERROR chunk is sent with an error message.

    -

    This class sends the END chunk when its destructor is called.

    -

    Calling flush() on the ostream object will force a DATA chunk to be sent with the currently buffered data. Normal operation is to wait for the buffer to fill before sending a DATA chunk.

    -
    See also
    chunked_outbuf
    - -

    Definition at line 120 of file chunked_ostream.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ chunked_ostream()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    libdap::chunked_ostream::chunked_ostream (std::ostream & os,
    unsigned int buf_size 
    )
    -
    -inline
    -
    -

    Get a chunked_ostream with a buffer.

    Note
    The buffer size must not be more than 2^24 bytes (0x00ffffff)
    -
    Parameters
    - - -
    buf_sizeThe size of the buffer in bytes.
    -
    -
    - -

    Definition at line 129 of file chunked_ostream.h.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ write_data_chunk()

    - -
    -
    - - - - - -
    - - - - - - - -
    int_type libdap::chunked_ostream::write_data_chunk ()
    -
    -inline
    -
    - -

    Send the current contents of the buffer as a data chunk. Normally, the chunked_ostream object waits until the buffer is full before sending the next data chunk. This will force a send with whatever is in the buffer (e.g., the DMR text). Data added after this call will be sent in subsequent chunks.

    -
    Note
    Calling flush() on the stream forces a data chunk to be sent.
    -
    Returns
    EOF on error, otherwise the number of bytes sent in the chunk body.
    - -

    Definition at line 149 of file chunked_ostream.h.

    - -
    -
    - -

    ◆ write_end_chunk()

    - -
    -
    - - - - - -
    - - - - - - - -
    int_type libdap::chunked_ostream::write_end_chunk ()
    -
    -inline
    -
    - -

    Send an end chunk. Normally, an end chunk is sent by closing the chunked_ostream, but this method can be used to force sending it without closing the stream. Subsequent calls to send data will send data chunks.

    -
    Note
    An end chunk is sent when the stream is closed.
    -
    Returns
    EOF on error or the number of bytes sent in the chunk body.
    - -

    Definition at line 139 of file chunked_ostream.h.

    - -
    -
    - -

    ◆ write_err_chunk()

    - -
    -
    - - - - - -
    - - - - - - - - -
    int_type libdap::chunked_ostream::write_err_chunk (const std::string & msg)
    -
    -inline
    -
    - -

    Send an error message down the stream. When called, this method dumps all the data currently in the buffer and sends the error message text instead, using a chunk type of CHUNK_ERR. The write buffer is maintained, however, so the stream ibject can still be used.

    -
    Parameters
    - - -
    msgThe error message text
    -
    -
    -
    Returns
    The number of bytes 'dumped' from the write buffer.
    - -

    Definition at line 159 of file chunked_ostream.h.

    - -
    -
    -
    The documentation for this class was generated from the following file: -
    -
    - - - - diff --git a/html/classlibdap_1_1chunked__ostream.js b/html/classlibdap_1_1chunked__ostream.js deleted file mode 100644 index 9828d8de6..000000000 --- a/html/classlibdap_1_1chunked__ostream.js +++ /dev/null @@ -1,8 +0,0 @@ -var classlibdap_1_1chunked__ostream = -[ - [ "chunked_ostream", "classlibdap_1_1chunked__ostream.html#a4f41bc4f32e8d08cb68d8b71620aa0de", null ], - [ "write_data_chunk", "classlibdap_1_1chunked__ostream.html#a823bbbcdabed51009b401abb3a45122c", null ], - [ "write_end_chunk", "classlibdap_1_1chunked__ostream.html#ab8c65417a57f00ab08c69b00facd802d", null ], - [ "write_err_chunk", "classlibdap_1_1chunked__ostream.html#aea5b6730d0194747d98b43a9f2a83d8f", null ], - [ "d_cbuf", "classlibdap_1_1chunked__ostream.html#a3bc7d71e811abf20973ecaa9302cc442", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1chunked__ostream__inherit__graph.map b/html/classlibdap_1_1chunked__ostream__inherit__graph.map deleted file mode 100644 index 0e33980c2..000000000 --- a/html/classlibdap_1_1chunked__ostream__inherit__graph.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/html/classlibdap_1_1chunked__ostream__inherit__graph.md5 b/html/classlibdap_1_1chunked__ostream__inherit__graph.md5 deleted file mode 100644 index 852b230d7..000000000 --- a/html/classlibdap_1_1chunked__ostream__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -19fd782aa4ace520ea71a6053037ef37 \ No newline at end of file diff --git a/html/classlibdap_1_1chunked__ostream__inherit__graph.png b/html/classlibdap_1_1chunked__ostream__inherit__graph.png deleted file mode 100644 index 84fdf1284216f6daf9afc658ebaf2ce7e04a9bcd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20167 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 AnE(I) diff --git a/html/classlibdap_1_1chunked__outbuf-members.html b/html/classlibdap_1_1chunked__outbuf-members.html deleted file mode 100644 index 51180c45a..000000000 --- a/html/classlibdap_1_1chunked__outbuf-members.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::chunked_outbuf Member List
    -
    -
    - -

    This is the complete list of members for libdap::chunked_outbuf, including all inherited members.

    - - - - - - - - - - - - - - -
    chunked_ostream (defined in libdap::chunked_outbuf)libdap::chunked_outbuffriend
    chunked_outbuf(std::ostream &os, unsigned int buf_size) (defined in libdap::chunked_outbuf)libdap::chunked_outbufinline
    d_big_endian (defined in libdap::chunked_outbuf)libdap::chunked_outbufprotected
    d_buf_size (defined in libdap::chunked_outbuf)libdap::chunked_outbufprotected
    d_buffer (defined in libdap::chunked_outbuf)libdap::chunked_outbufprotected
    d_os (defined in libdap::chunked_outbuf)libdap::chunked_outbufprotected
    data_chunk()libdap::chunked_outbufprotected
    end_chunk()libdap::chunked_outbufprotected
    err_chunk(const std::string &msg)libdap::chunked_outbufprotected
    overflow(int c)libdap::chunked_outbufprotectedvirtual
    sync()libdap::chunked_outbufprotectedvirtual
    xsputn(const char *s, std::streamsize num)libdap::chunked_outbufprotectedvirtual
    ~chunked_outbuf() (defined in libdap::chunked_outbuf)libdap::chunked_outbufinlinevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1chunked__outbuf.html b/html/classlibdap_1_1chunked__outbuf.html deleted file mode 100644 index b11b194c1..000000000 --- a/html/classlibdap_1_1chunked__outbuf.html +++ /dev/null @@ -1,370 +0,0 @@ - - - - - - - -libdap: libdap::chunked_outbuf Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::chunked_outbuf Class Reference
    -
    -
    - -

    output buffer for a chunked stream This performs buffered output encoding the data in the stream using the simple chunking protocol defined for DAP4's binary data transmission. Each block of data is prefixed by four bytes: A CHUNK TYPE byte followed by three bytes that are the CHUNK SIZE. There are three CHUNK TYPES: data, end and error, indicated by the code values 0x00, 0x01 and 0x02. The size of a chunk is limited to 2^24 data bytes + 4 bytes for the chunk header. - More...

    - -

    #include <chunked_ostream.h>

    -
    -Inheritance diagram for libdap::chunked_outbuf:
    -
    -
    Inheritance graph
    - - -
    - - - - -

    -Public Member Functions

    chunked_outbuf (std::ostream &os, unsigned int buf_size)
     
    - - - - - - - - - - - - - - - - - - - -

    -Protected Member Functions

    int_type data_chunk ()
     Write out the contents of the buffer as a chunk. More...
     
    int_type end_chunk ()
     Send an end chunk. More...
     
    int_type err_chunk (const std::string &msg)
     Send an error chunk While building up the next chunk, send an error chunk, ignoring the data currently write buffer. The buffer is left in a consistent state. More...
     
    virtual int_type overflow (int c)
     Virtual method called when the internal buffer would overflow. When the internal buffer fills, this method is called by the byte that would cause that overflow. The buffer pointers have been set so that there is actually space for one more character, so c can really be sent. Put c into the buffer and send it, prefixing the buffer contents with a chunk header. More...
     
    virtual int_type sync ()
     Synchronize the stream with its data sink. More...
     
    virtual std::streamsize xsputn (const char *s, std::streamsize num)
     Write bytes to the chunked stream Write the bytes in s to the chunked stream. More...
     
    - - - - - - - - - -

    -Protected Attributes

    -bool d_big_endian
     
    -unsigned int d_buf_size
     
    -char * d_buffer
     
    -std::ostream & d_os
     
    - - - -

    -Friends

    -class chunked_ostream
     
    -

    Detailed Description

    -

    output buffer for a chunked stream This performs buffered output encoding the data in the stream using the simple chunking protocol defined for DAP4's binary data transmission. Each block of data is prefixed by four bytes: A CHUNK TYPE byte followed by three bytes that are the CHUNK SIZE. There are three CHUNK TYPES: data, end and error, indicated by the code values 0x00, 0x01 and 0x02. The size of a chunk is limited to 2^24 data bytes + 4 bytes for the chunk header.

    - -

    Definition at line 53 of file chunked_ostream.h.

    -

    Member Function Documentation

    - -

    ◆ data_chunk()

    - -
    -
    - - - - - -
    - - - - - - - -
    std::streambuf::int_type libdap::chunked_outbuf::data_chunk ()
    -
    -protected
    -
    - -

    Write out the contents of the buffer as a chunk.

    -
    Returns
    EOF on error, otherwise the number of bytes in the chunk body.
    - -

    Definition at line 54 of file chunked_ostream.cc.

    - -
    -
    - -

    ◆ end_chunk()

    - -
    -
    - - - - - -
    - - - - - - - -
    std::streambuf::int_type libdap::chunked_outbuf::end_chunk ()
    -
    -protected
    -
    - -

    Send an end chunk.

    -

    This is like calling flush_chunk(), but it sends a chunk header with a type of CHUNK_END (instead of CHUNK_DATA). Whatever is in the buffer is written out, but the stream is can be used to send more chunks.

    Note
    This is called by the chunked_outbuf destructor, so closing a stream using chunked_outbuf always sends a CHUNK_END type chunk, even if it will have zero bytes
    -
    Returns
    EOF on error, otherwise the number of bytes sent in the chunk.
    - -

    Definition at line 108 of file chunked_ostream.cc.

    - -
    -
    - -

    ◆ err_chunk()

    - -
    -
    - - - - - -
    - - - - - - - - -
    std::streambuf::int_type libdap::chunked_outbuf::err_chunk (const std::string & m)
    -
    -protected
    -
    - -

    Send an error chunk While building up the next chunk, send an error chunk, ignoring the data currently write buffer. The buffer is left in a consistent state.

    -
    Parameters
    - - -
    msgThe error message to include in the error chunk
    -
    -
    -
    Returns
    The number of characters ignored.
    - -

    Definition at line 150 of file chunked_ostream.cc.

    - -
    -
    - -

    ◆ overflow()

    - -
    -
    - - - - - -
    - - - - - - - - -
    std::streambuf::int_type libdap::chunked_outbuf::overflow (int c)
    -
    -protectedvirtual
    -
    - -

    Virtual method called when the internal buffer would overflow. When the internal buffer fills, this method is called by the byte that would cause that overflow. The buffer pointers have been set so that there is actually space for one more character, so c can really be sent. Put c into the buffer and send it, prefixing the buffer contents with a chunk header.

    -
    Note
    This method is called by the std::ostream code.
    -
    Parameters
    - - -
    cThe last character to add to the buffer before sending the next chunk.
    -
    -
    -
    Returns
    EOF on error, otherwise the value of c.
    - -

    Definition at line 205 of file chunked_ostream.cc.

    - -
    -
    - -

    ◆ sync()

    - -
    -
    - - - - - -
    - - - - - - - -
    std::streambuf::int_type libdap::chunked_outbuf::sync ()
    -
    -protectedvirtual
    -
    - -

    Synchronize the stream with its data sink.

    -
    Note
    This method is called by flush() among others
    -
    Returns
    -1 on error, 0 otherwise.
    - -

    Definition at line 329 of file chunked_ostream.cc.

    - -
    -
    - -

    ◆ xsputn()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    std::streamsize libdap::chunked_outbuf::xsputn (const char * s,
    std::streamsize num 
    )
    -
    -protectedvirtual
    -
    - -

    Write bytes to the chunked stream Write the bytes in s to the chunked stream.

    -
    Parameters
    - - - -
    s
    num
    -
    -
    -
    Returns
    The number of bytes written
    - -

    Definition at line 247 of file chunked_ostream.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1chunked__outbuf.js b/html/classlibdap_1_1chunked__outbuf.js deleted file mode 100644 index aff666867..000000000 --- a/html/classlibdap_1_1chunked__outbuf.js +++ /dev/null @@ -1,16 +0,0 @@ -var classlibdap_1_1chunked__outbuf = -[ - [ "chunked_outbuf", "classlibdap_1_1chunked__outbuf.html#a7b5484aefc52663318e90a6d3dabc395", null ], - [ "~chunked_outbuf", "classlibdap_1_1chunked__outbuf.html#a32789f8d172991b17e7fc9ff948c5423", null ], - [ "data_chunk", "classlibdap_1_1chunked__outbuf.html#a2eb3a61bf3e82204a8ffca358558dead", null ], - [ "end_chunk", "classlibdap_1_1chunked__outbuf.html#a1c6c9891d360d5d9b7085ec8cf543610", null ], - [ "err_chunk", "classlibdap_1_1chunked__outbuf.html#abefa71794597aa2b9edcfc9d7101bba1", null ], - [ "overflow", "classlibdap_1_1chunked__outbuf.html#ade3250bbda968c561cfb390ba77504db", null ], - [ "sync", "classlibdap_1_1chunked__outbuf.html#ad31279e06619ddbe49382adf03cf5803", null ], - [ "xsputn", "classlibdap_1_1chunked__outbuf.html#a07bcec83a5f20ac5a8f76e3c490d0768", null ], - [ "chunked_ostream", "classlibdap_1_1chunked__outbuf.html#ae2a1ee739728da6bb7001bebd357b036", null ], - [ "d_big_endian", "classlibdap_1_1chunked__outbuf.html#af880ffbdbba0d1431be7b216889a9978", null ], - [ "d_buf_size", "classlibdap_1_1chunked__outbuf.html#a74ec24aa5c42f065fe4e562a05932755", null ], - [ "d_buffer", "classlibdap_1_1chunked__outbuf.html#a35bb0a16e9f3a1b1818598738721a6cd", null ], - [ "d_os", "classlibdap_1_1chunked__outbuf.html#a113c91bdcef81b9f954065de58d6690f", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1chunked__outbuf__inherit__graph.map b/html/classlibdap_1_1chunked__outbuf__inherit__graph.map deleted file mode 100644 index 60533ceb6..000000000 --- a/html/classlibdap_1_1chunked__outbuf__inherit__graph.map +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/html/classlibdap_1_1chunked__outbuf__inherit__graph.md5 b/html/classlibdap_1_1chunked__outbuf__inherit__graph.md5 deleted file mode 100644 index 32754b27c..000000000 --- a/html/classlibdap_1_1chunked__outbuf__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -b5a1ea1983a5479824074ea10f394052 \ No newline at end of file diff --git a/html/classlibdap_1_1chunked__outbuf__inherit__graph.png b/html/classlibdap_1_1chunked__outbuf__inherit__graph.png deleted file mode 100644 index 13a3eebede322e8225acd208a7e321020b0175a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15136 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 diff --git a/html/classlibdap_1_1fdinbuf-members.html b/html/classlibdap_1_1fdinbuf-members.html deleted file mode 100644 index 87ee301d1..000000000 --- a/html/classlibdap_1_1fdinbuf-members.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::fdinbuf Member List
    -
    -
    - -

    This is the complete list of members for libdap::fdinbuf, including all inherited members.

    - - - - - - - - - -
    buffer (defined in libdap::fdinbuf)libdap::fdinbufprotected
    bufferSize (defined in libdap::fdinbuf)libdap::fdinbufprotectedstatic
    close (defined in libdap::fdinbuf)libdap::fdinbufprotected
    fd (defined in libdap::fdinbuf)libdap::fdinbufprotected
    fdinbuf(int _fd, bool close)libdap::fdinbuf
    putBack (defined in libdap::fdinbuf)libdap::fdinbufprotectedstatic
    underflow()libdap::fdinbufprotectedvirtual
    ~fdinbuf()libdap::fdinbufvirtual
    -
    - - - - diff --git a/html/classlibdap_1_1fdinbuf.html b/html/classlibdap_1_1fdinbuf.html deleted file mode 100644 index 6a923d5e1..000000000 --- a/html/classlibdap_1_1fdinbuf.html +++ /dev/null @@ -1,234 +0,0 @@ - - - - - - - -libdap: libdap::fdinbuf Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    - -

    #include <fdiostream.h>

    -
    -Inheritance diagram for libdap::fdinbuf:
    -
    -
    Inheritance graph
    - - -
    - - - - - - -

    -Public Member Functions

     fdinbuf (int _fd, bool close)
     
    virtual ~fdinbuf ()
     
    - - - -

    -Protected Member Functions

    virtual int underflow ()
     
    - - - - - - - -

    -Protected Attributes

    -char buffer [bufferSize]
     
    -bool close
     
    -int fd
     
    - - - - - -

    -Static Protected Attributes

    -static const int bufferSize = 4096
     
    -static const int putBack = 128
     
    -

    Detailed Description

    -

    fdintbuf is a stream buffer specialization designed specifically for files that are referenced using a file descriptor. This class implements a 4k buffer for data and optionally closes the file when the buffer is deleted. The stream buffer has 128 characters of 'put back' space.

    -
    Note
    Instead of using this class, use fdistream.
    -
    See also
    fdistream
    - -

    Definition at line 101 of file fdiostream.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ fdinbuf()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    libdap::fdinbuf::fdinbuf (int _fd,
    bool _close 
    )
    -
    -

    Make a stream buffer for reading from an open file using its file descriptor.

    Parameters
    - - - -
    _fdThe open file descriptor
    _closeIf true, close the open file when deleting the stream buffer. False by default.
    -
    -
    -
    See also
    fdistream
    - -

    Definition at line 157 of file fdiostream.cc.

    - -
    -
    - -

    ◆ ~fdinbuf()

    - -
    -
    - - - - - -
    - - - - - - - -
    libdap::fdinbuf::~fdinbuf ()
    -
    -virtual
    -
    -

    Close the file if specified.

    - -

    Definition at line 166 of file fdiostream.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ underflow()

    - -
    -
    - - - - - -
    - - - - - - - -
    int libdap::fdinbuf::underflow ()
    -
    -protectedvirtual
    -
    -

    Insert new characters into the buffer

    - -

    Definition at line 172 of file fdiostream.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1fdinbuf.js b/html/classlibdap_1_1fdinbuf.js deleted file mode 100644 index 98df6fccf..000000000 --- a/html/classlibdap_1_1fdinbuf.js +++ /dev/null @@ -1,9 +0,0 @@ -var classlibdap_1_1fdinbuf = -[ - [ "fdinbuf", "classlibdap_1_1fdinbuf.html#aa776f5ddbe7e5d03dee835bbcd5f44b7", null ], - [ "~fdinbuf", "classlibdap_1_1fdinbuf.html#afa35aa6df7d9c0bd0fdd9e096fa65225", null ], - [ "underflow", "classlibdap_1_1fdinbuf.html#ac9990736a27a4538332f1b30b331a45b", null ], - [ "buffer", "classlibdap_1_1fdinbuf.html#ac050ce3ac598636683c6fce5675f25fa", null ], - [ "close", "classlibdap_1_1fdinbuf.html#a8df7e5fa426bf8cb0ccc9d4d6706259d", null ], - [ "fd", "classlibdap_1_1fdinbuf.html#a919a264c977ad3fe7c7680d42f405211", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1fdinbuf__inherit__graph.map b/html/classlibdap_1_1fdinbuf__inherit__graph.map deleted file mode 100644 index ef1e35b9d..000000000 --- a/html/classlibdap_1_1fdinbuf__inherit__graph.map +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/html/classlibdap_1_1fdinbuf__inherit__graph.md5 b/html/classlibdap_1_1fdinbuf__inherit__graph.md5 deleted file mode 100644 index 18fd88720..000000000 --- a/html/classlibdap_1_1fdinbuf__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -c1e7bbe25789f6dd4bd26f5c94d799dc \ No newline at end of file diff --git a/html/classlibdap_1_1fdinbuf__inherit__graph.png b/html/classlibdap_1_1fdinbuf__inherit__graph.png deleted file mode 100644 index 4de2bad5f7fc9d73e53a968e347401bcc54db8a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9716 zcmdUVRa9I-w`SusPUGIVJ0uX?CAe$oZh{j$1cJL;a0w9HgL|Nn0KwgzV8Me0zx~g{ zojYsI+dR!W4|S^6sl990{%YH)C@l>oTr5f~004liqAah2Xx#w-BpOU~#GBNxkr$#t za@SFk1=NgF9|8c(H7fEldR|B;UxAP2eb?~)^nM)~n6tkutaKSr8 zCB=lZjKTJ9u}Q`5C#XP~z@eI3MOdE7RQ{*IRH%`TjQv}N?w30a_uOA&KhA!1Jg#?~ zJ@5HSUap&4?~UgO?vIXU3fjb8Z1VrlXL6ixGNrj|XE1?od3pJ>_OkD?&wWWrNrS10 z$+%`ngoYi+!GwJX!_BX1{o!Siyj8$6IuSLKK=<#Hp2^$^{oR9-K4kM^kWR{iydXMb zx6p&_Wx4wU6OI?`6{v|LWsax;IhgXWiPf4>yHeIzg1?WjU(ey`+>j)Xhm}7*#YN?3 z28GfP6+ds{y_JBPW>je(lV3}yH#N`Ucq*SL^uGVsAC=MF;#qTK=6wo!%#mS~VC0>D zsn;yO14z6LoT|EI!RmVNXqexb6?mo#B{RhWeGA8&k7Pz`bSfX1I$5C2p-RkEOk0jX zIi|=lMG1GqWns|I6!CR15O#}r?w21EfV0FN~>9L?~I#k9qM|r ze?jOIQzz#Z3UK1Bk$P}1pzWVluPNwVdTkgggb0}8K;cB%^Yk~MGc=hwhXG0lBx0H+ z{v$J5SQMV85@>`v3_zMlc4-QwV!leAWP;iOucT0zW7BIRLa~{t!AN+L`n@Qi`9uJ? zWFiTm{VJW$C>R7~Z(FzM?E$??tgQ)kU_NF?(kMx~PS3AxFmvSn77(V}#j(YY*vr60KCdZn%-2DaUE_j0>8a9;L4|~UW_{`wDlX78cR`C9 z!fUK*H>6MOwkX@V0_VAk!Fs^n=^l*hRwc(-%K2pcT-KnVUIUQyrYNW)=$3if7D%8c zXVKQBfV_R>3%oKsQeM>TEd`kcg6EL$I2~EYloKdGLJ9HrI?oHq@P~F;iAeAE*?($4 z<*;%PK~OYitCa#!+vR&_pmL-Z#1QDR`3Lk_IfD_QQ@|5rPL=m17alch(w5i#G!e5n z&z1zxS=9&(4MffFMomAzflB!Qp|}2?5-rKFg$Zn6hD(^C;HyB+`3!nhK*27l;s?w@ zgzRSZov89csJ?Q&K#-S4uBM7~iUk9-GqhED;~^eZgn;3c8R?%aa!Ae*bK+}1_FX4m zh^q;5wJ@GX+K{QL^ej4()25&30Sj+STCJ>dQSM(HCmq|gn4(n`(L`kEVaJgB{o^e7 zEo25Y!lrnvj5bFlb1TP&0ZVh_J1Wlm)t*?YfOa3o1s6k|{2Uisa$oA3+T4jhQ#SJr zU1877tkyw8M^T4S#$X)cGLBq9Z28eD#fG)_UTY@c&e?X3gG609gZ>=GlHkEo9`%PY z0JFUPP;`ccSI5%t#&gexU#^CWDgFRG@bqWcXBa6a3R*?(YHr*INgfaVq3D+gE|XXu2J%lwdaZcFO&bDR#L|YE}e@I9d)i! z)ze<~?8#i~$n$k0X|?^wmbo~lI&zk27|`IpKQ1^(b6eYXRD;2LvYe{>DjK^yYN=ee z)Q6PIh~U;NISYE#e)Mkf!}DWUh*G>SbawLF54y6Y2upwE$7{EH9S$~Mi|JM0ZKCSx zk_3p|-zsB6r(`TsQBAW0$%eMO#wPmry1EgBvJurCpQP-ba%LFyFR;|rL?tgFgcj~^ zJZvS@Yp-&zP9lnW4aSMcax&CW!UWGUL@%Q!!o&u7%xuN^-Pgf#F$;x*lj@;Fua6d| za;xpKvW{O^9BRD(?0o}bo!8dph&r!71~I@kXvJGch$atDT6puAB2IoREw@7;NC%`Q zVZES+@?SRzEx1&#Vi{w&Jq{pFsWBm8me``vyiEL7v+Z$LsYgxCo`GJ>2b14+s%3|o zva&VTYp!ag$-%Na?eO!Xsc#LPb9_o3ILpQ^So5C1NBIocJ6!5=1yYkoQ zp{IOm8HOCd)6$^jO%_=;@1C)hMw1w&mQ+LU-#j zYd$_}_Gcyh?zV8h{9=a?Q~^IUe^8+}_E z`jdUQq4zpdfnM#)XD=8_kBP>N7i=$uPbGRcDihT~RDCBZQ@59iJ&n~GRJAJ<$7-zs zOfE9Y%}}XLn-R**5M@^T0`va=XJXh%&M7wq$$-0CsRk$aO7RF!cEIDsjxH%z#*;CK zX;)~>g+2XRvSb(AU8^pw^SFB_Ud%oR`LUb#<6_EZ66ELmh3@E=xOtyq0g@;?POfJU zEbR*h16aDbr`^+^$}ivJbV&U2jAa#eED+vb68Ej}c|X^;f(u@8eyY6iV#*?xy?~bo z3qe>v=H+fW0t~s{1FJr~AzYTfbBHb%EfZ2D^$uYJu@rmD4&SSZxvwAgbA86md@p`l z-yAP}^EUUpp4(gdv>{9v@K{&9(CK|CyVHjMavmWS>Au~vrlfCiS$$N~F&;}N)%8b6 zn^2eN@^V7z^`~|3(oCsgodX_BO~d`4?lU=ST6-r00mEIl>poOW_^#|P=AYKAZdRP7 z9>(&Xj%@}$D0^_GgthB*8Cv+w?FoLqvUR^%vRQHPSC%U*eNKt!Il)d&)Ads*3dwwBL^jZ3}wUJgn-P7p8;~>R=;XjcJh(bX1h3~rmS~U4V$%FmaM5pxUz*1Y1B7U@ej?u%II=)+l|ViipzJAe1(*E22y zqSjEEp+>tIE)3`TUo6G9r@|o#N8h{G!T00hmuh{GVYK@W9`p7T+Ntg&XR~~nHY+oS z>LyicnzRK~&T75SY8KHC|v3jGr^8P30QjTw(KcKHnc%k8rm% zR#WkZi<~Sql*auK2Ai-K%aR zOJ}yoCBPcnx&3=yyohVJsDO0rCeCk3Ns13p(3Ce?)x!g0Ml37Ppgf_)Fy@ zo+}@0fQzfEj$qQEkOLer@w(5M#7a9olOJ9`nnxD=#qV~_CXatIQ^d7^Bvm|+ioEQA zja>F+mp7o!HAHH~siXSq20ds?V44|innC*j#CEoq?d+r=p^Hb!zZ=TACIgvvRw#DR z9S_CU6gz30c6pxF)f8?t09@RSSUgY1!|d8(`A7~iXua}jkOaPjVc!KHP;??4^=X8s zqw2)R4rdhDvf=O3=N=f|BaQmLrgb~oGx2Xfk!D7h-^23lDgIsWwVM8cV9O#5TaNK9 za^wLDo(SBHe*0fR3{U+M-#=K9DxId(a|qod+|A*Ovz{su%j^5M1$8{7dc#GlKCO`k zZ3C1JT>LhL%z}}Cph$5tFyEo=QmphAwTVQ*U98|Z-|a>~Hw^^-BNmbzoR)yz8_0>v zw{6AqHZz2Qf*&V|qOlmw7}=B!bo9cMm%Y}xoFaHfkZR&{(zNEBRztC?sGcS^WUMLi z`HJl)8W4;E<0w*)yi4KC^DkWvpd_WHL^nuBPrNHn(TWDe8zELML}m0{8SlUh#m}`e;R&^n61_cnG$4XIr8F?ffkTk3&tE` zcuJ`BG?;0bzhwbbOzoTpu= z=v~|qGCCR=^%bv@f=eIT__NnT6y6ISeiq^~pWGt>o>x2jjhJk=UHlTX*HP~j+3>jh z5PB3(AGWHOdu?OYNePij)Bjk7x=A}qSob~x+c!}($nsT(++N#S^)?&o14(*w5_y>{2#(HJE=bzFO{18 z_WSXb(wU zY1C?o9(;oTN^0?$4bmMW{H9q_Af3Hvy2T>k%$751<ajV+r z&Qf$W>K^!_KJCQ4&O+EUcug)}@Xx*|CmUAWXwMQ6HEm@>JJIncPezNo~it)&nd z0=N`)$@Z*d3f-u(5&snTS)^ed;PM?e_$=th&XRL!nSA6mA6d zww^BlLE`DD*Midn1-!$h!4G2$W(!txq3k%T!4FMt(i^}!FnXai+Fp_iogY0ZYCE|4 zjPR!rVES-Yaf4(_$`GM9ZD!fvt1^*P@lfzR@B~-qHuD4*>Rsbp(qE-G6@S3BKVY(E zzfWQ3&24JkUu7`$?pIt>``kEZ?_aZ;(MaR!g0Dd;lX1fBMjqv~(@^mBEK_{J+DFT= zbwZrh^Yd69(o|YSqc=8chSfKjZ-i|Iv>P$jj0AfU+$z^3e+kNJA^IERT;I#NHc^U6)J1?hEG$-N>wohYd=dl#u{8I zPxefIADOW)o68&OWOcYcef0hh^WBD9XNRaDwJ2kiDUFvbGAZfUEa%oObO-v#auyS| zYg=Tb)dpz?l|-S9;n<8hwq^dI;Sf6T72F7%-?+&|R7JLUC1yLB|D_zus`x?}RFrFD zZxs^liIYEql+&}xYTx0@SM7$&Xc7NQ8cMf|5qZby+6x##Q`2#w4|z(W^r_oQ?=)`e zaf-Ag1kNEF;B%2fQp|ak)kj65JvmgujL~<5j9Mued2t%0k^KYt>g2cZAZ&5C+#LmL z4ZNZYprm-6+?gyM@udN7I9(2dB=E#*dD-Nn6LUtIqE_e1jtC;uHS z`f|lV#H5hc@n^!m(~Ic-ux$R(5^dO2LN3MJUQ74W2h+Sw7T9#7a1l!h$MOX|U|Pf{ z#tyw&yh^qmL;kBk5WyoL$g4k(AvxL|cX|$=K+@NvlsqS5AkwnTR*T$M=6!4de|!lS z`Nxxn3CUOZT@mCT?Ck1xcSMx&gcL@dnwPBSI5QK&7$WGFX~jjm;w z8my4zK46Y`=Ux$TdPFKltS#jvB|Z_RHJ~K0yKDxV2o86Gs8Q zf~ppsECHBF2OwtNN+&Had1m3gn;K(`+57EkY%U%nctiDb9>O?~oOqw3^y3MlYyCUZ zg(DH~tIimrBL&OYR$(pam*hWj+o&Ev%OWjF@xR<#O?DTn&q9t{LW;J*DV&1p*EibK)3i@Uc( zdRs0kSY~Upsf%Y@cYT8rTGo%18-%sT5h;h$K!L;Wf`u&Bi&T_|j6RR^nVkA7!kv2Z zauj6qpcX8k{3)?j8VwrSj7*o2uYLsdK#y&{Q6ICs9adMSx~3aSiz>R)TLHM0+D;%K zyw^Gy`RZpD}Y7uSU zrcGIyNHd1Y=1+kI$74I}kuS6(J|faBjvW4B{U0?f(&^Fm>Otjb!)};cP8jcJqnD@F zcFOHCctLtd`4dzZQo=UDY*hcRCKd3|Cn_0@o-Ac z#iaZnz5H^HUJzy)q0uj{{iuN+CXy`V(rx-gSEX-|o0E1UddTF#waEV|`hp4R_Bn3gEX=Uh=llfQZ^DBN z4g=+b-cr18V=z4oQwQCsjzSORE^&m-g`pYv^%O;$JMq6HBSu;Q=_#hd-vZF?=8$KS z+uZll98G@soBoNq5pffNSkFi z%6@G#%A>|iU3l@LZ*)20aU1e&a^FF>M?o*{x0<7}#BU-LfeA+id>YgZoBx^hNbrY{ z+im)2j-s=?t3AlgkckyK_Zy3fVy4cO-~(WzRH3?D!xiMxGF{h$YEFBtA>2B)PjZ_8MyQbTV2gyan87!1v{{&WVEmUkZ$4H$l>Kq| zI|zwU@J#y+Xnv^s7D+;>rfYQNgjy!bUx$Tx2`bo2+!q<*RoI)qe1J}#q*fVTfzM+Ae}@@jOU+S_@_Dt@^`2vzmW&g~jnReKy5G-0 zI(RLvA#k|X(IULUWtA}#qZS2RuzQPN$y@z(a(Wu}L2pYjwuEmVeo$f2?LU94(}qVy z*EAWja^S$<+J&fiaes2}D(Nj!Nj|nV+Lrc`XN>4UD*A}~vz5i-8Wv1X-rTU-7q-aI z7MPk#dwU=`vGTE`Kh{*V(+z?aD1rCVan{uVZLlYXOE}{7ngFtmZkeRadLTn#Dwr3G zxq;Q%W`P+5b7)+6{CItjOcMm<+11UHj`Z+YLMIW6T z+9jdBieduKC&C2D7(u?i{M8#b`A+PNcNL}?A~&rr%`48ytbT0h5Tng~3Y{3^envl> zAP4#U^`qQGHq=@Skc0cN;UTN584`aoz>kvQi!WdCd%emBIW~M#@a%Z=Y7X%y#~$R!D$MfMPOx|Xr%a6zkNLK$kxtM;GQ#8lyi6y0B5ZAxT z@cTQ@yz++}QP!Kc-Vs^LV~X@BmbM~MJ-Cb`MF7L;eQ1SBpUbx|5;aum)nSe=eWkQ; z>J;uUsATY}M^k%zeYQHcbwe2dg$kX<4pT*xAS6~iB=omAvya&}8{fvS^*e73M*kZlj?n$ht6v2>)gE0e(O%*b4LcNmT$ctSK<%+E(yP{rNi7BOen@_( z92W7T%j-fzk9Ia3fM-*u%RN|9V4y^jg znC%9dFyG=!;RdaK!LLA`%yO7yE1&dTpGS+gcE644sA~VVgcIcaJV8alm)AYAF zc>F(AK?RB#vIT`QD$VaJ9So998F7WSO8kMg@|S&|8Mk9n@t&vZ!Ib9t&e86OUE$o; zZe;WeezV-kwv9-@;tOar3Y{%4$dP5auIe4Vc3Y#s(qKu+y;_u6<3P5bJ|iKc=d)cgeIY!fq} zFV42_pwV9Kk*c9g_`|)OI-h;-%T3!eXW`2U(# zl#tOy`lP8MTKr1&+HKe^G0+`CylsRFd40stzABn#n_Z%o3G-VmXocruz}!g5VLBwo z;G{Db19F(5uujfPm|LhmWusy2yD9W^dHyoU_o=DU|b8{B%OE<%Qh6nizLo*LseNTtf7ewoFH zf?G)b7ODPn`5Vw5;sJa&xVGYFfnAKTw&Mr6)K$s}UG z+-Nud#Lm;bq#+Y9f{cVf4;36E)assScB{U9yMlEjmGM`{zePOXFoSV<%8Ss*;%S`l zO@VQda#We4zid|CqQzoiarOvHALL>C_~%SZ;3Go`p{bOpZEZu3fKZ4_%f{XF$||!9q53D1slb=2Yw`4LyYz- zSY6LLy}bPwsBtz{`u3NiB`DgeClFV?!}yHg>@{zCgDc~&mQf@~q-O`FNKCjPH2PJQ z`ba2Z2HFQoqEC^}+AWsS?}y1(_u%=QtqIIV6GDg_BN=%bWIRytQ(!s<8U3wm%CeIr zLVf=sR3y_8Qq;qiJrGV21;SDgEA)IuI<}*ymN&?sV#wNZxviz9#4Oxs4lYTIb!~ZN z@G*h@OjoMHpq%EBU^|0dD`lFduH@-8H34&d$X)o_%qJa<{sOU&z!<6<95gJL{_9Hy zZ5Qlucm2tT;>tbalmZE18-vRWNKWmu5IO7dJCa@KnO8WbO@1<3D|IT9)ZUoUfZ%W` z6`T*JudXqa%P?)$&$?}N(WFf)-1!f^tTL1t6 diff --git a/html/classlibdap_1_1fdistream-members.html b/html/classlibdap_1_1fdistream-members.html deleted file mode 100644 index cb8a30fa0..000000000 --- a/html/classlibdap_1_1fdistream-members.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::fdistream Member List
    -
    -
    - -

    This is the complete list of members for libdap::fdistream, including all inherited members.

    - - - -
    buf (defined in libdap::fdistream)libdap::fdistreamprotected
    fdistream(int fd, bool close=false) (defined in libdap::fdistream)libdap::fdistreaminline
    -
    - - - - diff --git a/html/classlibdap_1_1fdistream.html b/html/classlibdap_1_1fdistream.html deleted file mode 100644 index 8dbb12742..000000000 --- a/html/classlibdap_1_1fdistream.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - -libdap: libdap::fdistream Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::fdistream Class Reference
    -
    -
    - -

    #include <fdiostream.h>

    -
    -Inheritance diagram for libdap::fdistream:
    -
    -
    Inheritance graph
    - - - - - - -
    - - - - -

    -Public Member Functions

    fdistream (int fd, bool close=false)
     
    - - - -

    -Protected Attributes

    -fdinbuf buf
     
    -

    Detailed Description

    -

    This specialization of istream builds a fdinbuf instance and binds it to an istream. Thus it is possible to build an istream from an open file, using its open file descriptor, and read from it using C++ stream I/O methods.

    -
    Note
    : unget() works for these streams, but only for characters read using the stream. You cannot 'unget' characters that were read using the file descriptor with functions like read(2).
    -
    See also
    fpistream
    - -

    Definition at line 126 of file fdiostream.h.

    -

    The documentation for this class was generated from the following file: -
    -
    - - - - diff --git a/html/classlibdap_1_1fdistream.js b/html/classlibdap_1_1fdistream.js deleted file mode 100644 index 018ba8fab..000000000 --- a/html/classlibdap_1_1fdistream.js +++ /dev/null @@ -1,5 +0,0 @@ -var classlibdap_1_1fdistream = -[ - [ "fdistream", "classlibdap_1_1fdistream.html#a30f09221e96f9dd1bf49ba698ccc545d", null ], - [ "buf", "classlibdap_1_1fdistream.html#af9602392d0c9dea765f2559a08dbbef5", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1fdistream__inherit__graph.map b/html/classlibdap_1_1fdistream__inherit__graph.map deleted file mode 100644 index 44ee7aac4..000000000 --- a/html/classlibdap_1_1fdistream__inherit__graph.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/html/classlibdap_1_1fdistream__inherit__graph.md5 b/html/classlibdap_1_1fdistream__inherit__graph.md5 deleted file mode 100644 index 88108b5fa..000000000 --- a/html/classlibdap_1_1fdistream__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -826bbc3f0a6a9731e3ae56faf1efc4c8 \ No newline at end of file diff --git a/html/classlibdap_1_1fdistream__inherit__graph.png b/html/classlibdap_1_1fdistream__inherit__graph.png deleted file mode 100644 index 7f88aca1036febf4b23f630cd65b0d1ab58fde79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15464 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 a5SZvCk{ln;0&fn3K&r|bN?#P - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::fdostream Member List
    -
    -
    - -

    This is the complete list of members for libdap::fdostream, including all inherited members.

    - - - -
    buf (defined in libdap::fdostream)libdap::fdostreamprotected
    fdostream(int _fd, bool _close=false)libdap::fdostreaminline
    -
    - - - - diff --git a/html/classlibdap_1_1fdostream.html b/html/classlibdap_1_1fdostream.html deleted file mode 100644 index 4e45a92e9..000000000 --- a/html/classlibdap_1_1fdostream.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - - -libdap: libdap::fdostream Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::fdostream Class Reference
    -
    -
    - -

    #include <fdiostream.h>

    -
    -Inheritance diagram for libdap::fdostream:
    -
    -
    Inheritance graph
    - - - - - - -
    - - - - -

    -Public Member Functions

     fdostream (int _fd, bool _close=false)
     
    - - - -

    -Protected Attributes

    -fdoutbuf buf
     
    -

    Detailed Description

    -

    This specialization of ostream builds a fdoutbuf instance and binds it to an ostream. Thus it is possible to build an ostream from an open file, using its file descriptor, and write to it using C++ stream I/O methods.

    -
    Todo:
    Generalize this so that it can take a FILE * as well and then make two classes file_istream and file_ostream that can be initialized with either a file descriptor or a FILE pointer.
    - -

    Definition at line 77 of file fdiostream.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ fdostream()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    libdap::fdostream::fdostream (int _fd,
    bool _close = false 
    )
    -
    -inline
    -
    -

    Make a new fdostream and initialize it to use a specific file descriptor. If the file descriptor does not reference an open file, the first attempt to write data will fail.

    Parameters
    - - - -
    _fdThe file descriptor of an open file, socket, et cetera.
    _closeIf true, close the file when the output stream buffer is deleted. Default: false.
    -
    -
    - -

    Definition at line 87 of file fdiostream.h.

    - -
    -
    -
    The documentation for this class was generated from the following file: -
    -
    - - - - diff --git a/html/classlibdap_1_1fdostream.js b/html/classlibdap_1_1fdostream.js deleted file mode 100644 index 7bfb00139..000000000 --- a/html/classlibdap_1_1fdostream.js +++ /dev/null @@ -1,5 +0,0 @@ -var classlibdap_1_1fdostream = -[ - [ "fdostream", "classlibdap_1_1fdostream.html#aa9d9a229c670a71c18645ed782d8dabc", null ], - [ "buf", "classlibdap_1_1fdostream.html#a436cda58fc810e9058f09b8dbacc98f2", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1fdostream__inherit__graph.map b/html/classlibdap_1_1fdostream__inherit__graph.map deleted file mode 100644 index aa8ec30ee..000000000 --- a/html/classlibdap_1_1fdostream__inherit__graph.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/html/classlibdap_1_1fdostream__inherit__graph.md5 b/html/classlibdap_1_1fdostream__inherit__graph.md5 deleted file mode 100644 index 38abcd8a6..000000000 --- a/html/classlibdap_1_1fdostream__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -bdc26e2bb656924d22f41e9e166e0531 \ No newline at end of file diff --git a/html/classlibdap_1_1fdostream__inherit__graph.png b/html/classlibdap_1_1fdostream__inherit__graph.png deleted file mode 100644 index 6a8a4bc6a725c1f72ec3e3072b6f985fe05bb2da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15621 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 ZM@dVk*pWT(0N*u( - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::fdoutbuf Member List
    -
    -
    - -

    This is the complete list of members for libdap::fdoutbuf, including all inherited members.

    - - - - - - - - - - - -
    buffer (defined in libdap::fdoutbuf)libdap::fdoutbufprotected
    bufferSize (defined in libdap::fdoutbuf)libdap::fdoutbufprotectedstatic
    close (defined in libdap::fdoutbuf)libdap::fdoutbufprotected
    fd (defined in libdap::fdoutbuf)libdap::fdoutbufprotected
    fdoutbuf(int _fd, bool _close)libdap::fdoutbuf
    flushBuffer() (defined in libdap::fdoutbuf)libdap::fdoutbufprotected
    overflow(int c)libdap::fdoutbufprotectedvirtual
    sync()libdap::fdoutbufprotectedvirtual
    xsputn(const char *s, std::streamsize num)libdap::fdoutbufprotectedvirtual
    ~fdoutbuf()libdap::fdoutbufvirtual
    -
    - - - - diff --git a/html/classlibdap_1_1fdoutbuf.html b/html/classlibdap_1_1fdoutbuf.html deleted file mode 100644 index f8c01f96a..000000000 --- a/html/classlibdap_1_1fdoutbuf.html +++ /dev/null @@ -1,306 +0,0 @@ - - - - - - - -libdap: libdap::fdoutbuf Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    - -

    #include <fdiostream.h>

    -
    -Inheritance diagram for libdap::fdoutbuf:
    -
    -
    Inheritance graph
    - - -
    - - - - - - -

    -Public Member Functions

     fdoutbuf (int _fd, bool _close)
     
    virtual ~fdoutbuf ()
     
    - - - - - - - - - -

    -Protected Member Functions

    -int flushBuffer ()
     
    virtual int overflow (int c)
     
    virtual int sync ()
     
    virtual std::streamsize xsputn (const char *s, std::streamsize num)
     
    - - - - - - - -

    -Protected Attributes

    -char buffer [bufferSize]
     
    -bool close
     
    -int fd
     
    - - - -

    -Static Protected Attributes

    -static const int bufferSize = 4096
     
    -

    Detailed Description

    -

    fdoutbuf is a stream buffer specialization designed specifically for files that are referenced using a file descriptor. This class implements a 4k buffer for data and optionally closes the file when the buffer is deleted.

    -
    Note
    Instead of using this class, use fdostream.
    -
    See also
    fdostream
    - -

    Definition at line 50 of file fdiostream.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ fdoutbuf()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    libdap::fdoutbuf::fdoutbuf (int _fd,
    bool _close 
    )
    -
    -

    Make an instance of fdoutbuf. To write to a file using an open file descriptor, use fdostream instead.

    Parameters
    - - - -
    _fdThe open file descriptor
    _closeIf true, close the file when the stream buffer is deleted. False by default.
    -
    -
    -
    See also
    fdostream
    - -

    Definition at line 43 of file fdiostream.cc.

    - -
    -
    - -

    ◆ ~fdoutbuf()

    - -
    -
    - - - - - -
    - - - - - - - -
    libdap::fdoutbuf::~fdoutbuf ()
    -
    -virtual
    -
    -

    When deleting the stream buffer, be sure to call sync(). Close the associated file if specified.

    - -

    Definition at line 51 of file fdiostream.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ overflow()

    - -
    -
    - - - - - -
    - - - - - - - - -
    int libdap::fdoutbuf::overflow (int c)
    -
    -protectedvirtual
    -
    -

    Buffer full, write c and all previous characters

    - -

    Definition at line 69 of file fdiostream.cc.

    - -
    -
    - -

    ◆ sync()

    - -
    -
    - - - - - -
    - - - - - - - -
    int libdap::fdoutbuf::sync ()
    -
    -protectedvirtual
    -
    -

    synchronize with file/destination

    - -

    Definition at line 85 of file fdiostream.cc.

    - -
    -
    - -

    ◆ xsputn()

    - -
    -
    - - - - - -
    - - - - - - - - - - - - - - - - - - -
    std::streamsize libdap::fdoutbuf::xsputn (const char * s,
    std::streamsize num 
    )
    -
    -protectedvirtual
    -
    -

    write multiple characters

    - -

    Definition at line 95 of file fdiostream.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1fdoutbuf.js b/html/classlibdap_1_1fdoutbuf.js deleted file mode 100644 index 869fd96ed..000000000 --- a/html/classlibdap_1_1fdoutbuf.js +++ /dev/null @@ -1,12 +0,0 @@ -var classlibdap_1_1fdoutbuf = -[ - [ "fdoutbuf", "classlibdap_1_1fdoutbuf.html#ad9660035f6a20e351be2d90dc8614ff4", null ], - [ "~fdoutbuf", "classlibdap_1_1fdoutbuf.html#ac4ea28a81df0a1104ccf80a207a335ca", null ], - [ "flushBuffer", "classlibdap_1_1fdoutbuf.html#a156a3e9861ec7b0414483a6e19304c5e", null ], - [ "overflow", "classlibdap_1_1fdoutbuf.html#a4b9aa160b729361664b1db56be71989e", null ], - [ "sync", "classlibdap_1_1fdoutbuf.html#a12720ae836a467f70edd5abcac5551e7", null ], - [ "xsputn", "classlibdap_1_1fdoutbuf.html#a753ce8a08038d4a697fcd25a7be9e31d", null ], - [ "buffer", "classlibdap_1_1fdoutbuf.html#aa6ec061b3fc94fee10921e539a60fff1", null ], - [ "close", "classlibdap_1_1fdoutbuf.html#a47531c330de1ed94a915d8343e76f287", null ], - [ "fd", "classlibdap_1_1fdoutbuf.html#ad1d1f9e4f9e943671e2d8c5f9d05335b", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1fdoutbuf__inherit__graph.map b/html/classlibdap_1_1fdoutbuf__inherit__graph.map deleted file mode 100644 index 2e74db924..000000000 --- a/html/classlibdap_1_1fdoutbuf__inherit__graph.map +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/html/classlibdap_1_1fdoutbuf__inherit__graph.md5 b/html/classlibdap_1_1fdoutbuf__inherit__graph.md5 deleted file mode 100644 index e4d318540..000000000 --- a/html/classlibdap_1_1fdoutbuf__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -dd0d6bc4557467709547e0944fcb1773 \ No newline at end of file diff --git a/html/classlibdap_1_1fdoutbuf__inherit__graph.png b/html/classlibdap_1_1fdoutbuf__inherit__graph.png deleted file mode 100644 index 87f5980d825fa1f3de3d033e681da8b4736deaad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11562 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 diff --git a/html/classlibdap_1_1fpinbuf-members.html b/html/classlibdap_1_1fpinbuf-members.html deleted file mode 100644 index 14d62726a..000000000 --- a/html/classlibdap_1_1fpinbuf-members.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::fpinbuf Member List
    -
    -
    - -

    This is the complete list of members for libdap::fpinbuf, including all inherited members.

    - - - - - - - - - -
    buffer (defined in libdap::fpinbuf)libdap::fpinbufprotected
    bufferSize (defined in libdap::fpinbuf)libdap::fpinbufprotectedstatic
    close (defined in libdap::fpinbuf)libdap::fpinbufprotected
    fp (defined in libdap::fpinbuf)libdap::fpinbufprotected
    fpinbuf(FILE *_fp, bool _close)libdap::fpinbuf
    putBack (defined in libdap::fpinbuf)libdap::fpinbufprotectedstatic
    underflow()libdap::fpinbufprotectedvirtual
    ~fpinbuf()libdap::fpinbufvirtual
    -
    - - - - diff --git a/html/classlibdap_1_1fpinbuf.html b/html/classlibdap_1_1fpinbuf.html deleted file mode 100644 index a11e38d12..000000000 --- a/html/classlibdap_1_1fpinbuf.html +++ /dev/null @@ -1,235 +0,0 @@ - - - - - - - -libdap: libdap::fpinbuf Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    - -

    #include <fdiostream.h>

    -
    -Inheritance diagram for libdap::fpinbuf:
    -
    -
    Inheritance graph
    - - -
    - - - - - - -

    -Public Member Functions

     fpinbuf (FILE *_fp, bool _close)
     
    virtual ~fpinbuf ()
     
    - - - -

    -Protected Member Functions

    virtual int underflow ()
     
    - - - - - - - -

    -Protected Attributes

    -char buffer [bufferSize]
     
    -bool close
     
    -FILE * fp
     
    - - - - - -

    -Static Protected Attributes

    -static const int bufferSize = 4096
     
    -static const int putBack = 128
     
    -

    Detailed Description

    -

    fpintbuf is a stream buffer specialization designed specifically for files that are referenced using an open FILE pointer. This class implements a 4k buffer for data and optionally closes the file when the buffer is deleted. The stream buffer has 128 characters of 'put back' space.

    -
    Note
    Instead of using this class, use fpistream.
    -
    See also
    fpistream
    - -

    Definition at line 144 of file fdiostream.h.

    -

    Constructor & Destructor Documentation

    - -

    ◆ fpinbuf()

    - -
    -
    - - - - - - - - - - - - - - - - - - -
    libdap::fpinbuf::fpinbuf (FILE * _fp,
    bool _close 
    )
    -
    -

    Make a stream buffer for reading from an open file using a FILE pointer.

    -
    Parameters
    - - - -
    _fpThe open FILE pointer
    _closeIf true, close the open file when deleting the stream buffer. False by default.
    -
    -
    -
    See also
    fpistream
    - -

    Definition at line 219 of file fdiostream.cc.

    - -
    -
    - -

    ◆ ~fpinbuf()

    - -
    -
    - - - - - -
    - - - - - - - -
    libdap::fpinbuf::~fpinbuf ()
    -
    -virtual
    -
    -

    Close the file if specified.

    - -

    Definition at line 228 of file fdiostream.cc.

    - -
    -
    -

    Member Function Documentation

    - -

    ◆ underflow()

    - -
    -
    - - - - - -
    - - - - - - - -
    int libdap::fpinbuf::underflow ()
    -
    -protectedvirtual
    -
    -

    Insert new characters into the buffer

    - -

    Definition at line 234 of file fdiostream.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1fpinbuf.js b/html/classlibdap_1_1fpinbuf.js deleted file mode 100644 index 92eef1359..000000000 --- a/html/classlibdap_1_1fpinbuf.js +++ /dev/null @@ -1,9 +0,0 @@ -var classlibdap_1_1fpinbuf = -[ - [ "fpinbuf", "classlibdap_1_1fpinbuf.html#afdd1f4682dc010db945a586b593a795a", null ], - [ "~fpinbuf", "classlibdap_1_1fpinbuf.html#a3c047833a58a99cf540248c68f211cd3", null ], - [ "underflow", "classlibdap_1_1fpinbuf.html#aaa3e9e18fb090cc4b12849eed3406382", null ], - [ "buffer", "classlibdap_1_1fpinbuf.html#a351356fca7ed1e3ea96666643ee45a3d", null ], - [ "close", "classlibdap_1_1fpinbuf.html#a1a774d76c5f79ea6a2a659f559a2dba4", null ], - [ "fp", "classlibdap_1_1fpinbuf.html#acb3897665c697610847729e86d9dd613", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1fpinbuf__inherit__graph.map b/html/classlibdap_1_1fpinbuf__inherit__graph.map deleted file mode 100644 index 71e93762d..000000000 --- a/html/classlibdap_1_1fpinbuf__inherit__graph.map +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/html/classlibdap_1_1fpinbuf__inherit__graph.md5 b/html/classlibdap_1_1fpinbuf__inherit__graph.md5 deleted file mode 100644 index 75303b764..000000000 --- a/html/classlibdap_1_1fpinbuf__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -eee5487ca1f3517ab726944418e91733 \ No newline at end of file diff --git a/html/classlibdap_1_1fpinbuf__inherit__graph.png b/html/classlibdap_1_1fpinbuf__inherit__graph.png deleted file mode 100644 index e0a8a1763e6ca57373d705e755da3dc47f7ac5d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9711 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 AbN~PV diff --git a/html/classlibdap_1_1fpistream-members.html b/html/classlibdap_1_1fpistream-members.html deleted file mode 100644 index c590640c4..000000000 --- a/html/classlibdap_1_1fpistream-members.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::fpistream Member List
    -
    -
    - -

    This is the complete list of members for libdap::fpistream, including all inherited members.

    - - - -
    buf (defined in libdap::fpistream)libdap::fpistreamprotected
    fpistream(FILE *fp, bool close=false) (defined in libdap::fpistream)libdap::fpistreaminline
    -
    - - - - diff --git a/html/classlibdap_1_1fpistream.html b/html/classlibdap_1_1fpistream.html deleted file mode 100644 index 40e2400b9..000000000 --- a/html/classlibdap_1_1fpistream.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - -libdap: libdap::fpistream Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::fpistream Class Reference
    -
    -
    - -

    #include <fdiostream.h>

    -
    -Inheritance diagram for libdap::fpistream:
    -
    -
    Inheritance graph
    - - - - - - -
    - - - - -

    -Public Member Functions

    fpistream (FILE *fp, bool close=false)
     
    - - - -

    -Protected Attributes

    -fpinbuf buf
     
    -

    Detailed Description

    -

    This specialization of istream builds a fpinbuf instance and binds it to an istream. Thus it is possible to build an istream from an open file, pipe, et c., using its open FILE pointer, and read from it using C++ stream I/O methods.

    -
    Note
    : unget() works for these streams, but only for characters read using the stream. You cannot 'unget' characters that were read using the file pointer with functions like fread(3).
    -
    See also
    fdistream
    - -

    Definition at line 170 of file fdiostream.h.

    -

    The documentation for this class was generated from the following file: -
    -
    - - - - diff --git a/html/classlibdap_1_1fpistream.js b/html/classlibdap_1_1fpistream.js deleted file mode 100644 index c6b2073a2..000000000 --- a/html/classlibdap_1_1fpistream.js +++ /dev/null @@ -1,5 +0,0 @@ -var classlibdap_1_1fpistream = -[ - [ "fpistream", "classlibdap_1_1fpistream.html#a87b68645511cb36236ba1dc7d552f733", null ], - [ "buf", "classlibdap_1_1fpistream.html#ab7d4682d3d7715028e3d770e5a13657f", null ] -]; \ No newline at end of file diff --git a/html/classlibdap_1_1fpistream__inherit__graph.map b/html/classlibdap_1_1fpistream__inherit__graph.map deleted file mode 100644 index 0d570abcd..000000000 --- a/html/classlibdap_1_1fpistream__inherit__graph.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/html/classlibdap_1_1fpistream__inherit__graph.md5 b/html/classlibdap_1_1fpistream__inherit__graph.md5 deleted file mode 100644 index c93aeccda..000000000 --- a/html/classlibdap_1_1fpistream__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -f8c97f1da9748cf568f7156f26600a74 \ No newline at end of file diff --git a/html/classlibdap_1_1fpistream__inherit__graph.png b/html/classlibdap_1_1fpistream__inherit__graph.png deleted file mode 100644 index 1985f9dcd0b55738afc00b548f8d872618b2ae26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15386 zcmds;WmHsAxc4V$knRRWhVGP-5Co*V5$T~37^wm2l13#(Lg^epYN$aP>1F^aX^@ie z9q(Q1jqmThAMO_pYwff5nX~74_Wu3<`Wj)Nb7ytmN;^AQa zJCV$MgSh~G^i&lARili%0Kk)}=gLnF0)PjWxH(hGH=`>*o|fqyLR86gDRp@vUu-<^ zs7Y&@#q7&~Wf@bI|HR_!7yZ1bzmdK&k;iP#yJbwPlL^7ad(Q?heAk(bt*5 z_(lM58mD##X<}~;L9_1%jjiR357>&iHXo{npZhxID%Oc2H_&bcE2+y95 zR5x=|=^_ZJ@LqYII%stherA~xrCngiRP;jPIZIA}!#7UcyEfL?I+2`nWAbRRuG;!k zM&oD*N=pIe?E^VID&&VO))A$1p4eCaJYXJLp3Ahi-o650fejuhus26o$HXK6)bTe7qz?G1 z<(7!`7w{T@;GYHS1L@5r;-1lUb}-@|Gy3)WdXp9Gcj7TpEZWY>Q95A>22Gym9eF1E}$$x5NivG&5*4G!G#H$*+yJ}vy;H& zAY?y?G2SGB4|~*Tz$Li0r}@$@#rKaIdTLHC(pOyJY29==u3#dC-G_h;C@2pQ2j2kv zDUwIpwF2G3MiidFGj~49dQ}h{3o7Kz>D5(~0?j_S7v^C5je+O7d9gxpw6OO5SlJ;f z)qJ=Wwi><@Ho&BXF&;%mbE5@pBsH4Q2H#Ua2P9d`g;1^_^bpO{4x<9LT>#*U2AGj6 zli`({0)Rm5bqhFOozYen%PUEa#Fqsksz9g;KXx9D999K__({d$A=0B3eA9<;7avNw z5?sWGQf&jL!z>CUkkr4_&|)?q8v&9+KjA=$vC|h=7r0S?wpxh6!u~;a(d;dQvt)xa zF@#NA`MpG`QHi<6KpD+902oLA3&Tl z|M8P!GMmQ5TBWcbb1t&PU)(=|y%YQ8T@?3uN}6(U1J-m-WxQueHgr5+9=Mg>er z_jKFVA6|oH>`33%FEOG`uf3RC^<7uE%Tai~I4)oCXv{N1N#GJG%LJrdd)z}x3eytv zVy^7VK!As+@m5x;$1*DYkrctOTK5IPQ0)lb-&gb663qmhb@oY)&=2_KiFJo_-D7rt zH%u7!geUzh4yeB>KwH1pu^fH;b^HcvuG`gBI!+I_?&g<{T4$zilTfiWEZrOS9Ue2G zB+S9%K})Lprswm|bvAGZt^P~1?XLmkt3PeqAC-&JA~jK9z*P-yo88yPkfyZ0`XI9|hvlP*JDCR;iw~Tg)91eSe#@DofdY8Vga{@$ED= zRo?X{iL41?A0(AtJ~E`%{j;pZ#+x4_9HDg?n4yv$a;bwi#92u6Y4Xm>o~-!)cUSdy zIV&Y2pABUPxqr`pZ}T8|RO7XQSo);YDdTf>+)c*($~eW8(Ikb&c=jR^@;d+W?&fGH z0h@4!*1U=OvdrN5>L_lApx{wpC3!Sd%z;(l=%aDAC>?3v1!ZFST6W=Hp!rQicUxPR zSmBS*9Dmcj2%aDCIsN{`7wM!{vu+-CwiS zH^g;4;IS-$*Fz+*n341Pmgf9n&uH1M+uGn7L$c)nYujzYI zk|*VbKlp+xPssg7F*ivW7jtEcGtJ>VxyqBoB@wrOV0lF?6WNLXJ^pvyl;jG9u5^iu zs-ld2eTKzC@laR(Vazg_Vv`)m`C@3O)%_h)ExGp~Tp%QQt)V95IZfinN^}&Len$Xk z6?SC6D+AbM7mmaALS!}_r7N(f3bPh!s*jE0{&>Bel}=0egT9-6A9WHk@#WpvvQXyj z$D65#-T8%$(1u`ZxyUeHk>vc)7asTOkfE#x`cXSX!2UOC-URQQd zQRx2KYei;SDF2UZJkw6C>=WSS-B0XPVRlPQ^Yq3ss$PLoQdNpyEH~MnMtJ*j;(YTz z>PW+(xZjq#uWudGl2TK)!1*;(>EOE`Go8`5BmS~W54I8% zgq{AxQ>K&Pq0>hdtFZH=Vq#XMPGB}^2p%KM&qr>Wf`K!h)Zi9B3mk55BYKlSEJIl z03u-W-gyd7M7hGZ5`*Bd7y1Ie_jTGur|(0kw71ZIHePjyuZSlNRi&V?6^` z1AdoJo7qO^oCH<>wi{VZ)0A4-_|we*)TgmdHcIu z>z8Dj5(Fkpi`z_0*pU4mfS>j(uwe*5&`ejufb_uyHYjgy2qBo&0|eM*2)~fj1o_@m zDR9?sc?pr{<1}E=V_2^m zHa_hh0jMB_USbt|cB)7wH?)tK5BJ4RUk+DDS$JM|5N^jykz2WMh1C&zkeqG_K;#61 zH{eY`v%1sem`0u`Nb}Up(?^N5b&GIBhMWv42MnP00_fg@v)7`g0AG@a?B*h zQAPRs^c_ET)6^UX_&*A7n1q|o<>CGYnxy21Q2<++Vq!ibXEVVwH5}6Jo@6h#O_GkK z+lHKdB_kzi0_eXGLVWZ(K#!6@`=jZ1a3p2phNn5)_d>c>lhKuvyZ=z~f@z$LRaF&O z4Pt-?h*P9c?z4FjBUG070N6_AZNYXS?kLVZ6KoreMG6SW#44_awr0V1U(k}>&MGa8 z5FP|S52R?O|Ngy=)Se<8KKcaD39F4*hjtoRUd!_ZYaD;@LLZ2`7^P;{PPp3(127%) z9+N4g_+iW8s?m=;zcylJI&~-T@coXXNu|jZ&t8> zf%icuF!w4S-q~mc&MnTdJ3XFfMQ`h#CekHHR@rOP54#HRULZ02@vf-!A5l1#pvMZ) zD!^CKr$C}$Fu5W~&0#?^=$`nP-_dpS)(RBxu%-4grCFfBy={ZcA>;@UJ6KEA9|g|E z#P~`;KCoiUUV#beLOJ#txe1W6dE*@f^du7`QnTkvw&6g&nbg8I1GWk2(ZOW#1HkWb zk5TPRXwn@A8z8!}Sg2%J1wSC#1E&KU(xw5R$L@)%2KfQiZpq;h6~F*TD&XL~0y=3< zOBD+1Z^HeCiB?JYc6~XFszAv}0?>x?MH{2l;j@w?YDOIlUbkR4$|#T@X_Qtus|2U0 z-|CVUmd|{*X+x)l>ohP}E8CZ(eTq6+eq=MAv@=24=fhJ2WIf6TWSUwMK7G6SCJPvU zQX)(G1&b0C3ig4MAw`hvtSqzuO~AUTx$-EEJLq(s!;?GKGr`Xr%O=<#WWse2UfWUa&~yXr_Nit>&jyv58uUt+(I% zoZx?#< zF3Yu%^NRP-c%ORnR~o~a!WmSh>dCua)yf~7rEY^ltmSF=W9;qxIUW;T#R18RtC!d! z*}&}TKf;bMi2i4kL$4r$L^`%3i*hgmC_oG0T8mG*%G600K6)Z&OTI^kVev%~ZjOiA zw8^m5ym82fSMeAaAE2J}X6namT1@&J`1O65UCdl_=ryAVYoV`Z#-m|sF#8}>h;PaVl5p0Zy5x?bZ)Ti2-?D$Gn)ciUHjd->dJ?q z_QOv#8QNRH(IXolXN{SCMg46^;{^(d3XR38(_-{|aB*s{*aunP7@kSTLd5t+5on;*|wmnZZy-;B}62dZ`lVc^m8o$v(Y8i`{*NTgGLoDE9%zv7>W|you%5vay-x#XsC2q-Z?2AC zM{h)psU8W_Uk0*PtvqX_yGk5Q2Jst;D2WDKd8Igpt&+lJoB?*y(WZQ#p zx(tQCi~lZ-gNP(6h?-5X@NG`1#7B+ViQ~PCd-kx=xXL0}5obQ?-hj;hBl*s_t&Eu(PUk30SG)UwS>Z+InU1HdO4M%7l6L-Yc++n7kq^)dWd=R6s9&epckBtMt_ zEF0*%_SeSuTGz`f)_2YRt5+K*CXlC-BKrD*9#GC3l^bO=`S+SBF*-g=8W?KzGj^?r z$Q4RH#-$t8B5~#Jh)=k!bzjchI6cGdW&2b_U`4h0jQz)oKV4RBqasSh)fQHE{MWlZAu_GcB1f-pJ8o6MW#*^kLFChJsb!hboYP-oH2gqb7% zpy$7MF$Ui-XuuoaAJejY!tu2piAhw#M?)M-|I-FR4}|7v=gC|<-1;1J9P%^eOr<>@ zaT9*o`#Ui*GV=3VeV$9PE|xyI;9fG-pkMdHb&dh->UgPt_u8KvTh8zI)XugC#`hs_ z*1ouPo8`qlWZ{tcwGQVjOtAEL+2p>=@8#w8oSqeDT%+QmOj@|)cii)Vei4k1ny1S} z2g59X6FiSOSjPT&9?yzj{iFg*$DM{4bRdDi;N&e$+}))|Yi991@G^I;xHLb~b>bun z0bLv9yTY6#@7LPvxo4ixrhm|`M7C4tC$pfJkPFv@EmFXW%rqNBCT_7KMuj;f^tixnx2af(l^s+)Wx_BmE!}X;I+DyWTmcl@QtDjI9ZN9|g0(hddz;qeE)i za2;a|R^4ke_AYLCQqegm6W9qn3v&f>UeJ-}GHC=bAbbFsZwrqI_8({hT);o0%`5G@E2HvP1j)C9nbQvx^#(!=O+6R^MYOnQFN$Mej8EyFxMd%XVp zAzF$??26hsuz$k8H?vnF@gPlsAj%I%K{cgd8J-2Gf(5WDxPpkVA+PAi^t)-J1Sc`0r0&3_1>=Et)=T<>7*g6fo;JyG{9k3H|P3vD8g;pS|wPt_bmMq#G?)MN`mq$2- zV})x{T@L>Rs20Naga*NqsWgA`LEq@E{bY_r9^<-^7v$gE&i2tV)>W?#XQ!k7FAl5hsYrKv*Da@cKEt&`wdv;S#1-xIQRhYG3``$|13;b28eP! zd%Q5n6pdmieC&yj6xs?#rYNvK#5D#$nF2wE@Mz#xJ%|=R2WQ+0d~X+pn2mqE!h;xl z;E|98TuGn^%Rr_fpTS?VaZ;%ayYE zUW?|Lh{E=nnXe1ku^7@QM$uraCW=Tl`6e?ncqPXdnOn9*x3u@`_aL14x#^ti$zN}&665@+otE@=Bu4$-AN>#VtM4e zg+D{?0kC_8i|RU4&@2T~OZFX(l!&dUIKVPxlv=pG6RNFKykEz!$)sM+EQ zQ5577)NI;*GuTujpIqtU9O|RadS+`)ShMNxLP@sw{WR_E34A?lsb+K8e>tJA>Qc5Ve#(q;s9K`K`b>~W@`~5}11~c69QUIBce22sZ96UgCz+bK6j}I^^ zjezIshH=ts4c{=@$RzTuRysJ{^eaPmAby5p02<)_<5jQ&04lZ(@TE1+ya~fms5@P& zah6~60SMyQ(7{F(Y#7i}Cfg4HLzjGl^v(Elc$#1n$E|ik8;Q*9a~S=5!eP+&?YDrj zP6nI#67WwOT2Dz&X40UZw5-KakJJg;9il08(#WruoqD`Ul}Khl>la_mT$XALUWKT( z%sLsY_j#EWL5up(zppy5XYjIYt*SA?OJ^40(3Sn@!*p*K7_d^{SN=98GgA%m{p1R> zWC`qSPBwW5z2O+x=S2XNWz6kkU-_4PGu3F=u&FzXhqmz6?Q`k8xbk`Nt`ZG($ToK~+b&wayE}qS&$-!)snj?A-AAQYa zr8Cz!Pnyb$(C&*JwKLn(@4Q>mIf}MS54s+?d_#lMeM;CH{NVPV^^nUFS(0!>kp;SS za1<_B;W!o3WUB$7Z~D35!o0rqu_{Ee9DhNyRxK4B>^xhfhy4B)nD zq9N;|nV>XyQXuPzT~Hwg3IyJO+~E2EdKEDmbf969yfNr4fWGzC3Mq{iM7kfb6-pp! zZUsP=VdJL7q|?n5zupKTXT{_JK_+yB#|%`hx;o47B%}lUNMH;H;$+{%hRjSw2X@N> z7hI9tB9wn;rG`8c*7;+LYu#6RiFE-vxHT%vSVXv1I05cxKHkD5ro1B0IbmkJ8f;Am zY)PlkuP@jp=M*RA#CSe?mi7A0xvT&ia6@p};f9)%wJh4nG5n3}5%2r|Vtj*Jf(8;# zLDB$1jZ0aYyf&-?g%SV>fbs>qc^Fu8aWEAPiFk+D@28+1`vjK*`GM!|LWp(H?g@$5 z(O~F6KCT>KiWJagV{W3{g6;l_W{yr0=L=B~P7v6W$SJf2J^K;5S%u>QO2jPgN!V$0 z`G^mh*Ln>jK!mRrY>PHSVi<(xFCcXS{su!1b>8dOg)5^3z7X|gk`RIC`0A({&4m1} zc#0|DFyt803BDXEycqM=A8ZHkn{*G&?J>%fP}8=h_4bPVmB_rigy zazlbGKVtDEzJuM6`+|$3nctzx6&GClz~|*jwe8T}$)`98MfSZY@Gt4u2`o9e;lc)K z|MJ)UP_yuShP`G=?Y9Po!!|h2ekO$0BiLzP1<_4)bwwNs)7`H!;6ldxfl*z_p6?W;je; zJ5{}1GkEAaGM`{IZG}p=65_fJKw)6ypI)o}2P1t&KR4(wG&uGpJ)!NTg7Pj^TIxGT zOh(9l))PMcCkKr+)#dUqH26C~ec(F}hG_nK2MG|%*4+vY+#;71!5o&n`NOwUoC#Zf zdRgOso(5a}2Gbnei^IrGFO{rEqd5OWWexAF=Re+}vP_j^_y@dQbrwBTm{&CReZCI; z2fR2#-Vcm1EtWqxV(Ysw6VAXpBxdmsc>ik$k$u^MQ8|tOq1yt)juw$^tK(Id?JmYG;x_bdKTY(z4rs({ z_oKSB3&WhL96u%<8Dp92f44bVsVQ7CJZ|TTb-1MF z!x0_$-=`|NGIPo+RyF9g#NiUX;sqzJ&wB{yfRxB*s8UE>jPMH}CFPP1+~_2EX(@+{ zJHD{6D|_4}DN?YQ(733mmP)teDZTc58%#q!fg`KQxqhhMzCI=)0z%?4v)@@cgc{1z z$Hb)8hXpQ6{BMUl@4LIZ?C-k}8d*w@3pM_>7QM=D$b90p#jB{in@}qJ^`jU=g9JN# zX`;%UgI1(OTj<;I4-O7SkGSF<%e`$P0$n$NA9c)4ly+Aj}-oJBU4_dD!FdlXvihUl#yUQ(evH;Yny)u zMpQH&cXj(IPH&w=C#V$@`&5Y{u8|ac*;*G7VZ1_c>UxP#j`ZRo?0aG15~8;F^YVfi zJ^6g>j$ZabWUEOhK^)}#%oMG`Tlhb%k@au(qOrL1MA1{o_+1CLL0mVl<+qjh;%;BP z_G>Hkihi%I4QB8(?JP9z$;f96XZ?kZs-!7QY=*FNo0`%~RN0e$oIf<-Li5XK&Sw>3 zneJigVB}EmBCv}!^F!~iyA}~{XT=bEO*+a9>@Uphg8(TJh#{FSPG1_ZEILM5VU$SS zu$y1KN;L2z*zpi!ZNSTjC)87k=3L zadB$fWslfqLpZtQSsr*83u1z34g^!c7m$DE5TuI?Vb&OkU!X#&+sFwrND}DyF@i(@ zTdkASSX+!aK;Dd`B(=djW(Y!kFSKY4r-tyA1GK6RZv7;$)mY282R$mo+Nny z*4zVhEi>H33zDu2z}Bcg6d99tsIYB7`2og(Xp=Kt8^|$_CvOeT7rI5GEOOeq;D&g_IWeu(3aYtoT~>_grI60Lo60BsLMu}T2E0xI7KkLi)FP99H5?eW_@ zAqvrzxN{3Kz_|l8Iv*ef))aLd6@);aV^}C01MMIEp5Tz_yQNq!UgYkNDzYPbgW-{Y$YA#5?-ku1k;<|_zaIq9%`#wH zOF#vlP0JiT4cKTSu@K4tQUNqIK$2afME~N2L*{euNt_560pmjZpaTRoS>OWuW&OdE zdAD%oeQ6TV+(8{j5d9b8|Iimy1s||g*cAM#GEF|nFVAANSd5m zUcsudHz)99M7dkjnJ@H*DZ(+D_5Sfb&kX>$g14_8it`INoOP{h^B-nf8_Lw>IhT`WVL9b}@XxXs zQ3SMo0mu{DuZo0^ z>!q?Gcvm?K1{Vf}2I^?ZANf;`)H0d3DkIo`gqg^go3iIo&9l?YUw}KyQHo*JUkr3u zFzf7}D{fH^D%~j5^dAEQ<*)Cm74`MV?42wswN>u^{9b-v&GY+{ZfEMt$Dch24~%uI zx|fc4f``li1es}RlO@f~SMKsgebt3aQ)x2^jQyZaBTMC7Wu%= zt|7Vqs!E1TF%JBqY}da(j#Z-=@4aeAm}02S<1(j3T4^h|wNQgRIv0aR_^qHIlTfl^ zl3el&_E<NT6tHgG@@ONeXxcH8GVj1mx}}PTVG9dZ_&k28oi_+uB@-6Y;$n5y78-d|BF|^Trf>BrEj9Tqsd@Zf|X^0G^7! zRcm#~vHvde&!L8|w5x7E`}{0FC+B<2^%=_*)$*l4N(|Qok#~l^N;;jB&95necZwSG zf}EujY7TGn7#7uz+?R1~&MTkcG>)u%Wgi@FJ|rOv5edD&tN-v~y3FudA>r!lnTp2# zSD9|jW7N7OyMM#OyQW!@`d)wVGE{Vbw5z1VoY;GL;rDW9@?&sK^aExC8+q=;;cEDm zoXJu=9#5J6V7g%!`OAL8evAtPw56K!6I3*+H=hi1MEwtI`eu}-%eVE4rcVGuM)HB9;Hn-rWp<3P9q?Z46?o7o2hh_-rTm<-=g(bS1)uGtg2|UANn;} zdvmLW|A-y)$p(vl?+4Yq-h28$0y-CUnTBJPqbffyrSgF`&RE$rDs}1!``{E~#`7N) zrj?-%BWBCv^rm_*e@7@-e;-K{tw9-=8I<;Z6R@>qbtNhwJW8}CP^tIpf?KOG`+^Q_ zn94Z|r+&Bs1?ppj(Zn;gZ`jqD+NqC)<00VxDUDg%^4G+;{*B<#eA9L+o|Q7=&!`Ry zt9e9;R)OnZHkV69*i_Aua;%}Hw#R&({qpVY?J1;*qUHZyk0Ev^OS8-~UTK=TPpPAJ|J4FzNl8^N zVT55OLu0DfH;hP{wAUKtk-!OhI4H3a(4+Hqd)7L1`Rbr)by!{gY*+-<9ZASUaXh83 zO{bB`>y;yy8<8#UCX7mCa6C5qI&79@;JkU|_pdvqaGB0$>)0^gb~yLRtV#QuM!Nf} zjdzJuJVx(rIayeOf2Y*COmlNSpVShu?Z(>Zqp=pfn6rDA4l~(HS zv1QWIL9U+Fw^!BbUaB7-AOE6O%t^_t}h zsykPFI~w@|cA}B`C=o$YHCN;F z1|cC~B4>WkM8Hw|WkT@9eE)D3AAjPy%oY0Wh@kwA4eES%vR@f0u) zeT9dvFfWpAp66Ie*x&D%`#SSv^vMyew)|a#sRQC0uX+2M^MofyZIhCiFF|7uMZI6! z&n$9=egV5$i_YGb`+Iwa!aVe4T*ju-JB$eL^<=ZHct&h{NebB@0buKC z`nGFG#Y%f%wxXRzz?7~k9Y!#S)rd~(xz)WLI*^r67C-l2FyDygMJ zE7t`9+W)rL;B1#_{gDg=gTabhDRC!-Rxt}i7U~JUC(-k0o<+B&Wp$P*1IDKP3G0A0 z?D}Cw8t>*$Q4}-2L^PC?=}8P+qKIb7%xQ=Ty}9$2MvC71pIz>4*G`nIBY(27W)`LQ zg(wWr(bR>n%D*I3(j_L9+ReLgZ_YsU_fMVgZZ0L7e)arGm$O3=)l=0G z7-BTrrVf0=@*L1LYx?4&D3=fYyU7#(C9h~H(Y54=TkwBNpyU+aFHB!7|8 z)z3lS!MO*MDP_|(Jl)i)iS_T3>@@x2p^=i*m_;fVM*L3Kgo0D+)wrk}saFN<*n7^_ zm-MYq5##&!mCtmKZNsnYvX7>|rp>FAQ^%3GQ2NV!_LMT(l1!a_x$NG&hO;rLEiabl zlP`;hJ;0yM_@m;r*hA6l@xtPwnyX$lTyMtSE~!NADk#-lWv$peCi68~UlCl4NUVyo zsFxX*J2ZH#u1H@0OdH8eD=axNBs?oVn>$#3vsdXLBj0hgPFVls=Un2&goeO}jb=>p zPcAiu2>$ixyqkf3o%_S=H)o5}Uv9L~oUvhh+l_MiQ5Xq(c-)x!=KXp$K+dv1kgwM$ zt2&c8==kYI%XXf~{q;6W{ob|`P2%jg1H_`H90dAr+30-FchY%(F5oKEfah^UIQZ!c zZEHnuz}G5cc}qK2M9{VOXXnY1VoTci7f)+n7YagnTWd8+uclh%wz^Ipve3^h=v3?z zOzt9JeA4;as35lE^LF3AWxyT(Kk)si0bV50g`c zkN~;9k=p=@K)2>v1bVT_G36-3YJ23i!HLUMM_S``-;y!Py%u)1<>FsjdG{$&yWhyJ zBZ7wdsHA3F}eazh_>%pb|k)nXf=*c4%SdYjgH=6tC1&8JArx@PsK zDDU}w(46|Cbj{NTXDtg2=~ho-HzWiSv@aOY zN_2#eKZbcT=&u{T7`-~#NW@G6%+g_?I-Cx9`D?MWoVV0lO~X{HR~@k{qT|lTvBHx1 zz3u2X)5f;Q$!Xi%pH^V?5I0}(Y=U|S9mZ20ey=!ybp7Yzif~`s|8tw|2spsibjP`n z&_BDJKHR`in(r+HTr0d{nNKkAubIrBUoAhjoWh z#JLQ<<2#^rY-(rX&!LOEi^Z|qAJDp3v!a;Fui5h4XsOsO=-K=C^0dc^5bNM`!?W4R z96J%{oZ!Y=5;?(+KflU_^%*PDz0|q3d3;c8p+721MmtUic^u@p`OY?iJmOM(Eb#8j zmbA}u3{CA@bHls?VTYME9ZuT;?>Yh7OO9Ggox3I3~&j*tOlKpaK}P}QE(44^?UkkJGIfuHSK$;+Bo@Z?cc8Z%06AesA@{i z2RK1L^iI1XLwPZp^`rREeDJMt{SbdEuX`i;2zC>vQDu>=)y3TqTtIog#mCV{n6^LE z*a}uG^)%n7Fl_|(T$Coq$8V~^aALI6fNU}zXzjb2bJs6VhxXM+KyxNF>!7yT|1 z*}X-%a5g5tdi$C4CVk1^dhjI9Q6U?)dh$gb^H}HkcAq$|(vNYlA^7l(R<~ne3tEO_ zK0x$&ruTPTqN|dd3m}aiR{pLEQ>1 z!Ji+Vbp)@kc|)RxZ}@TbI5a~4#aHq0%|+9O2v_d#&1i(Il(7cR&!?&yP1vpD?1MHp z#zPCSkVaqg8p6s-h?MGf$IYRLae~?wdlf56MX7~5OA9sNW^tb+znd)stJ6{$YpyVh zOI6%(slHu)RhGd7c{X~thE?|pb?ywYlBW$#?U%Qh^Ir`fiPW_2U0AnxBgI=%3~8Yz zPK=i}ot<&WxfA#$d7Z%1RmSn_eU#QVy@-(=BiUGmGuPoO(AtBveVm$VZfXI6Dq0ka z%o)u!uLMoVI(NIR&}wX|K3(&U9{a|x3YSrFnxu6((D!UhpytI z=85;@>@+XeWlr*B1L{^))vzZo1Ow*KZcv zCm6nv*tqU$?1EW_Z|ZFy({grtC8{xRTnCIf`i+$4`h9F!=bODjtZ4G$8uRI+>~mXQ zv6PZTcLi~(kKP%D$87_uItF1Y7KZVP>vHBSRX=Dw4&1fa_2Xl_4FyO4uAK&8nTzr> zj`g9r^hPDN!%s!4=K8QD>Bb_rxTO6~ERNGc(~plr|1P${n!{=N<`>p;czPSzS`3)} z`i7;=A9nr?@saApOzSMP(KLkKgPD0-l-QoAp4enlLk0WI-V@!DA-}rDR>QoU-75?= z(qpEhkxPrnJNeyPGw_7>u18e1_65qX%pC+IEoIO*;xUj>Xytl8YrWS07Y#&NF? zCO^ZUeG-)HU5AhyDoUtqYvgFqBHUsTGMOy%p%-&W_Z%*tz_Q;X)IBA^%L~rj({{Hm z&E635`ysjqj-yLK_eejkuUd8sPA;gKGpygUkMBLq+j!1ToIfaupIE+X^?KT{__B+qmh8=l}K{3d^nFb06U` zeeas&Bjb8kkBvYDZ6Gr|dN3;;S3B#+W#2-~7jn<&?;RqU?|!X{8?>Wa`G_WwMJB+L zYf8#xsCE;>aL#g1&roY%{MC%Q^YtF1vc^6`xvvODpSp4fi7F%XCIill0I!H>?m5@j z_X$3XmAR#R!Tl}D&Xj#yz6b7cTt7a}LsRDB9tX0G{p~TZOGzZ2rW8wA=a(30Xr{J)nlCZbz;s`P|> Va3Ww8^J8DYa}_P+Dn*;{{{`xeDN6tV diff --git a/html/classlibdap_1_1rvalue-members.html b/html/classlibdap_1_1rvalue-members.html deleted file mode 100644 index ea43c2769..000000000 --- a/html/classlibdap_1_1rvalue-members.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - -libdap: Member List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap::rvalue Member List
    -
    -
    - -

    This is the complete list of members for libdap::rvalue, including all inherited members.

    - - - - - - - - - -
    Args_citer typedef (defined in libdap::rvalue)libdap::rvalue
    Args_iter typedef (defined in libdap::rvalue)libdap::rvalue
    bvalue(DDS &dds)libdap::rvalue
    rvalue(BaseType *bt) (defined in libdap::rvalue)libdap::rvalue
    rvalue(btp_func f, std::vector< rvalue *> *a) (defined in libdap::rvalue)libdap::rvalue
    rvalue() (defined in libdap::rvalue)libdap::rvalue
    value_name() (defined in libdap::rvalue)libdap::rvalue
    ~rvalue() (defined in libdap::rvalue)libdap::rvaluevirtual
    -
    - - - - diff --git a/html/classlibdap_1_1rvalue.html b/html/classlibdap_1_1rvalue.html deleted file mode 100644 index 2fd6255ac..000000000 --- a/html/classlibdap_1_1rvalue.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - -libdap: libdap::rvalue Class Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    libdap::rvalue Class Reference
    -
    -
    - -

    #include <RValue.h>

    - - - - - - -

    -Public Types

    -typedef std::vector< rvalue * >::const_iterator Args_citer
     
    -typedef std::vector< rvalue * >::iterator Args_iter
     
    - - - - - - - - - -

    -Public Member Functions

    BaseTypebvalue (DDS &dds)
     
    rvalue (BaseType *bt)
     
    rvalue (btp_func f, std::vector< rvalue *> *a)
     
    -std::string value_name ()
     
    -

    Detailed Description

    -

    Holds the rvalues for the parser, Clause objects and evaluator.

    -
    See also
    Clause.h
    -
    -DDS.h
    -
    -expr.y
    - -

    Definition at line 46 of file RValue.h.

    -

    Member Function Documentation

    - -

    ◆ bvalue()

    - -
    -
    - - - - - - - - -
    BaseType * libdap::rvalue::bvalue (DDSdds)
    -
    -

    Return the BaseType * for a given rvalue. If the rvalue is a func_rvalue, evaluates the func_rvalue and returns the result. The functions referenced by func_rvalues must encapsulate their return values in BaseType *s.

    -
    Parameters
    - - -
    ddsThe dds to pass to a function.
    -
    -
    - -

    Definition at line 163 of file RValue.cc.

    - -
    -
    -
    The documentation for this class was generated from the following files: -
    -
    - - - - diff --git a/html/classlibdap_1_1rvalue.js b/html/classlibdap_1_1rvalue.js deleted file mode 100644 index 0a8653a30..000000000 --- a/html/classlibdap_1_1rvalue.js +++ /dev/null @@ -1,11 +0,0 @@ -var classlibdap_1_1rvalue = -[ - [ "Args_citer", "classlibdap_1_1rvalue.html#aa546ba3e34b52de03a2ad226201042eb", null ], - [ "Args_iter", "classlibdap_1_1rvalue.html#a3ba3fb841b7b8a1a02e369268d116f78", null ], - [ "rvalue", "classlibdap_1_1rvalue.html#a1f7ffe31e84d0d159cc600c258de3ec2", null ], - [ "rvalue", "classlibdap_1_1rvalue.html#a0ece0ca2136a788b4ce1c8c6e4261553", null ], - [ "rvalue", "classlibdap_1_1rvalue.html#a3acc265c79602bb7e146df157d9f48aa", null ], - [ "~rvalue", "classlibdap_1_1rvalue.html#ad5accfe3e920e31b930e2598db0cbfbf", null ], - [ "bvalue", "classlibdap_1_1rvalue.html#a5ec1d2d66b162aa9ad82b658e70ce7de", null ], - [ "value_name", "classlibdap_1_1rvalue.html#aed22027f3256cd2595761cc8e1f8588f", null ] -]; \ No newline at end of file diff --git a/html/closed.png b/html/closed.png deleted file mode 100644 index 98cc2c909da37a6df914fbf67780eebd99c597f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT diff --git a/html/config_8h_source.html b/html/config_8h_source.html deleted file mode 100644 index c1338de19..000000000 --- a/html/config_8h_source.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -libdap: config.h Source File - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    config.h
    -
    -
    -
    1 /* config.h. Generated from config.h.in by configure. */
    2 /* config.h.in. Generated from configure.ac by autoheader. */
    3 
    4 #ifndef _config_h
    5 #define _config_h
    6 
    7 /* Define if building universal (internal helper macro) */
    8 /* #undef AC_APPLE_UNIVERSAL_BUILD */
    9 
    10 /* Define to the number of bits in type 'ptrdiff_t'. */
    11 /* #undef BITSIZEOF_PTRDIFF_T */
    12 
    13 /* Define to the number of bits in type 'sig_atomic_t'. */
    14 /* #undef BITSIZEOF_SIG_ATOMIC_T */
    15 
    16 /* Define to the number of bits in type 'size_t'. */
    17 /* #undef BITSIZEOF_SIZE_T */
    18 
    19 /* Define to the number of bits in type 'wchar_t'. */
    20 /* #undef BITSIZEOF_WCHAR_T */
    21 
    22 /* Define to the number of bits in type 'wint_t'. */
    23 /* #undef BITSIZEOF_WINT_T */
    24 
    25 /* What sort of HTTP client is this? */
    26 #define CNAME "libdap"
    27 
    28 /* Should a function (run-time) be used to determine the byte order? */
    29 /* #undef COMPUTE_ENDIAN_AT_RUNTIME */
    30 
    31 /* Define to one of '_getb67', 'GETB67', 'getb67' for Cray-2 and Cray-YMP
    32  systems. This function is required for 'alloca.c' support on those systems.
    33  */
    34 /* #undef CRAY_STACKSEG_END */
    35 
    36 /* Client version number */
    37 #define CVER "3.20.6"
    38 
    39 /* Define to 1 if using 'alloca.c'. */
    40 /* #undef C_ALLOCA */
    41 
    42 /* Define to 1 if the C locale may have encoding errors. */
    43 /* #undef C_LOCALE_MAYBE_EILSEQ */
    44 
    45 /* Build the DAP 3.2 version of the DDX */
    46 #define DAP3_2_DDX 1
    47 
    48 /* Should DAP4 support be enabled? */
    49 #define DAP4 1
    50 
    51 /* Highest DAP version implemented? */
    52 #define DAP_PROTOCOL_VERSION "4.0"
    53 
    54 /* unsigned bytes/chars */
    55 #define DBYTE uint8_t
    56 
    57 /* 32-bit real type */
    58 #define DFLOAT32 float
    59 
    60 /* 64-bit real type */
    61 #define DFLOAT64 double
    62 
    63 /* 16-bit integer type */
    64 #define DINT16 int16_t
    65 
    66 /* 32-bit integer type */
    67 #define DINT32 int32_t
    68 
    69 /* 64-bit integer type */
    70 #define DINT64 int64_t
    71 
    72 /* 8-bit integer type */
    73 #define DINT8 int8_t
    74 
    75 /* Set instrumentation to level 1 (see debug.h) */
    76 /* #undef DODS_DEBUG */
    77 
    78 /* Set instrumentation to level 2 */
    79 /* #undef DODS_DEBUG2 */
    80 
    81 /* 16-bit unsigned integer type */
    82 #define DUINT16 uint16_t
    83 
    84 /* 32-bit unsigned integer type */
    85 #define DUINT32 uint32_t
    86 
    87 /* 64-bit unsigned integer type */
    88 #define DUINT64 uint64_t
    89 
    90 /* Client name and version combined */
    91 #define DVR "libdap/3.20.6"
    92 
    93 /* Define to 1 if nl_langinfo (YESEXPR) returns a non-empty string. */
    94 #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1
    95 
    96 /* Define if gettimeofday clobbers the localtime buffer. */
    97 /* #undef GETTIMEOFDAY_CLOBBERS_LOCALTIME */
    98 
    99 /* Define this to 'void' or 'struct timezone' to match the system's
    100  declaration of the second argument to gettimeofday. */
    101 #define GETTIMEOFDAY_TIMEZONE void
    102 
    103 /* Define to a C preprocessor expression that evaluates to 1 or 0, depending
    104  whether the gnulib module lock shall be considered present. */
    105 #define GNULIB_LOCK 1
    106 
    107 /* Define to a C preprocessor expression that evaluates to 1 or 0, depending
    108  whether the gnulib module mkstemps shall be considered present. */
    109 #define GNULIB_MKSTEMPS 1
    110 
    111 /* Define to 1 when the gnulib module btowc should be tested. */
    112 #define GNULIB_TEST_BTOWC 1
    113 
    114 /* Define to 1 when the gnulib module gettimeofday should be tested. */
    115 #define GNULIB_TEST_GETTIMEOFDAY 1
    116 
    117 /* Define to 1 when the gnulib module localeconv should be tested. */
    118 #define GNULIB_TEST_LOCALECONV 1
    119 
    120 /* Define to 1 when the gnulib module lstat should be tested. */
    121 #define GNULIB_TEST_LSTAT 1
    122 
    123 /* Define to 1 when the gnulib module mbrtowc should be tested. */
    124 #define GNULIB_TEST_MBRTOWC 1
    125 
    126 /* Define to 1 when the gnulib module mbsinit should be tested. */
    127 #define GNULIB_TEST_MBSINIT 1
    128 
    129 /* Define to 1 when the gnulib module mbtowc should be tested. */
    130 #define GNULIB_TEST_MBTOWC 1
    131 
    132 /* Define to 1 when the gnulib module mkstemps should be tested. */
    133 #define GNULIB_TEST_MKSTEMPS 1
    134 
    135 /* Define to 1 when the gnulib module nl_langinfo should be tested. */
    136 #define GNULIB_TEST_NL_LANGINFO 1
    137 
    138 /* Define to 1 when the gnulib module stat should be tested. */
    139 #define GNULIB_TEST_STAT 1
    140 
    141 /* Define to 1 when the gnulib module wcrtomb should be tested. */
    142 #define GNULIB_TEST_WCRTOMB 1
    143 
    144 /* Define to 1 if you have the `alarm' function. */
    145 #define HAVE_ALARM 1
    146 
    147 /* Define to 1 if you have 'alloca' after including <alloca.h>, a header that
    148  may be supplied by this distribution. */
    149 #define HAVE_ALLOCA 1
    150 
    151 /* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
    152  */
    153 #define HAVE_ALLOCA_H 1
    154 
    155 /* Define to 1 if you have the `atexit' function. */
    156 #define HAVE_ATEXIT 1
    157 
    158 /* Define to 1 if you have the `btowc' function. */
    159 #define HAVE_BTOWC 1
    160 
    161 /* Define to 1 if you have the <byteswap.h> header file. */
    162 /* #undef HAVE_BYTESWAP_H */
    163 
    164 /* Define to 1 if you have the `bzero' function. */
    165 #define HAVE_BZERO 1
    166 
    167 /* Define to 1 if you have the <crtdefs.h> header file. */
    168 /* #undef HAVE_CRTDEFS_H */
    169 
    170 /* Define to 1 if you have the declaration of `alarm', and to 0 if you don't.
    171  */
    172 #define HAVE_DECL_ALARM 1
    173 
    174 /* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you
    175  don't. */
    176 #define HAVE_DECL_GETC_UNLOCKED 1
    177 
    178 /* Define to 1 if you have the declaration of `isblank', and to 0 if you
    179  don't. */
    180 #define HAVE_DECL_ISBLANK 1
    181 
    182 /* Define to 1 if you have the declaration of `mbrtowc', and to 0 if you
    183  don't. */
    184 /* #undef HAVE_DECL_MBRTOWC */
    185 
    186 /* Define to 1 if you have the declaration of `mbsinit', and to 0 if you
    187  don't. */
    188 /* #undef HAVE_DECL_MBSINIT */
    189 
    190 /* Define to 1 if you have the declaration of `towlower', and to 0 if you
    191  don't. */
    192 /* #undef HAVE_DECL_TOWLOWER */
    193 
    194 /* Define to 1 if you have the declaration of `wcrtomb', and to 0 if you
    195  don't. */
    196 /* #undef HAVE_DECL_WCRTOMB */
    197 
    198 /* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
    199  */
    200 #define HAVE_DIRENT_H 1
    201 
    202 /* Define to 1 if you have the <dlfcn.h> header file. */
    203 #define HAVE_DLFCN_H 1
    204 
    205 /* Define to 1 if you have the `dup2' function. */
    206 #define HAVE_DUP2 1
    207 
    208 /* Define to 1 if you have the <fcntl.h> header file. */
    209 #define HAVE_FCNTL_H 1
    210 
    211 /* Define to 1 if you have the <features.h> header file. */
    212 /* #undef HAVE_FEATURES_H */
    213 
    214 /* Define to 1 if you have the `getcwd' function. */
    215 #define HAVE_GETCWD 1
    216 
    217 /* Define to 1 if you have the `getpagesize' function. */
    218 #define HAVE_GETPAGESIZE 1
    219 
    220 /* Define to 1 if you have the `gettimeofday' function. */
    221 #define HAVE_GETTIMEOFDAY 1
    222 
    223 /* Define to 1 if you have the <inttypes.h> header file. */
    224 #define HAVE_INTTYPES_H 1
    225 
    226 /* Define to 1 if you have the `isblank' function. */
    227 #define HAVE_ISBLANK 1
    228 
    229 /* Define to 1 if you have the `iswcntrl' function. */
    230 #define HAVE_ISWCNTRL 1
    231 
    232 /* Define to 1 if you have the `iswctype' function. */
    233 #define HAVE_ISWCTYPE 1
    234 
    235 /* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
    236 #define HAVE_LANGINFO_CODESET 1
    237 
    238 /* Define to 1 if you have the <langinfo.h> header file. */
    239 #define HAVE_LANGINFO_H 1
    240 
    241 /* Define to 1 if you have the <libintl.h> header file. */
    242 /* #undef HAVE_LIBINTL_H */
    243 
    244 /* Define to 1 to use libtirpc. */
    245 /* #undef HAVE_LIBTIRPC */
    246 
    247 /* Define to 1 if you have the <limits.h> header file. */
    248 #define HAVE_LIMITS_H 1
    249 
    250 /* Define to 1 if you have the `localtime_r' function. */
    251 #define HAVE_LOCALTIME_R 1
    252 
    253 /* Define to 1 if the system has the type 'long long int'. */
    254 #define HAVE_LONG_LONG_INT 1
    255 
    256 /* Define to 1 if you have the `lstat' function. */
    257 #define HAVE_LSTAT 1
    258 
    259 /* Define to 1 if you have the <malloc.h> header file. */
    260 /* #undef HAVE_MALLOC_H */
    261 
    262 /* Define to 1 if you have the `mbrtowc' function. */
    263 #define HAVE_MBRTOWC 1
    264 
    265 /* Define to 1 if you have the `mbsinit' function. */
    266 #define HAVE_MBSINIT 1
    267 
    268 /* Define to 1 if <wchar.h> declares mbstate_t. */
    269 #define HAVE_MBSTATE_T 1
    270 
    271 /* Define to 1 if you have the `memmove' function. */
    272 #define HAVE_MEMMOVE 1
    273 
    274 /* Define to 1 if you have the <memory.h> header file. */
    275 #define HAVE_MEMORY_H 1
    276 
    277 /* Define to 1 if you have the `memset' function. */
    278 #define HAVE_MEMSET 1
    279 
    280 /* Define to 1 if you have the `mkstemps' function. */
    281 #define HAVE_MKSTEMPS 1
    282 
    283 /* Define to 1 if you have the `mktime' function. */
    284 #define HAVE_MKTIME 1
    285 
    286 /* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
    287 /* #undef HAVE_NDIR_H */
    288 
    289 /* Define to 1 if you have the <netinet/in.h> header file. */
    290 #define HAVE_NETINET_IN_H 1
    291 
    292 /* Define to 1 if you have the `nl_langinfo' function. */
    293 #define HAVE_NL_LANGINFO 1
    294 
    295 /* Define to 1 if you have the `pow' function. */
    296 #define HAVE_POW 1
    297 
    298 /* Define to 1 if you have the <pthread.h> header file. */
    299 #define HAVE_PTHREAD_H 1
    300 
    301 /* Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE. */
    302 #define HAVE_PTHREAD_MUTEX_RECURSIVE 1
    303 
    304 /* Define if the POSIX multithreading library has read/write locks. */
    305 #define HAVE_PTHREAD_RWLOCK 1
    306 
    307 /* Define if the 'pthread_rwlock_rdlock' function prefers a writer to a
    308  reader. */
    309 #define HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER 1
    310 
    311 /* Define to 1 if you have the `putenv' function. */
    312 #define HAVE_PUTENV 1
    313 
    314 /* Define to 1 if atoll is declared even after undefining macros. */
    315 #define HAVE_RAW_DECL_ATOLL 1
    316 
    317 /* Define to 1 if btowc is declared even after undefining macros. */
    318 #define HAVE_RAW_DECL_BTOWC 1
    319 
    320 /* Define to 1 if canonicalize_file_name is declared even after undefining
    321  macros. */
    322 /* #undef HAVE_RAW_DECL_CANONICALIZE_FILE_NAME */
    323 
    324 /* Define to 1 if chdir is declared even after undefining macros. */
    325 #define HAVE_RAW_DECL_CHDIR 1
    326 
    327 /* Define to 1 if chown is declared even after undefining macros. */
    328 #define HAVE_RAW_DECL_CHOWN 1
    329 
    330 /* Define to 1 if dup is declared even after undefining macros. */
    331 #define HAVE_RAW_DECL_DUP 1
    332 
    333 /* Define to 1 if dup2 is declared even after undefining macros. */
    334 #define HAVE_RAW_DECL_DUP2 1
    335 
    336 /* Define to 1 if dup3 is declared even after undefining macros. */
    337 /* #undef HAVE_RAW_DECL_DUP3 */
    338 
    339 /* Define to 1 if duplocale is declared even after undefining macros. */
    340 #define HAVE_RAW_DECL_DUPLOCALE 1
    341 
    342 /* Define to 1 if endusershell is declared even after undefining macros. */
    343 #define HAVE_RAW_DECL_ENDUSERSHELL 1
    344 
    345 /* Define to 1 if environ is declared even after undefining macros. */
    346 /* #undef HAVE_RAW_DECL_ENVIRON */
    347 
    348 /* Define to 1 if euidaccess is declared even after undefining macros. */
    349 /* #undef HAVE_RAW_DECL_EUIDACCESS */
    350 
    351 /* Define to 1 if faccessat is declared even after undefining macros. */
    352 #define HAVE_RAW_DECL_FACCESSAT 1
    353 
    354 /* Define to 1 if fchdir is declared even after undefining macros. */
    355 #define HAVE_RAW_DECL_FCHDIR 1
    356 
    357 /* Define to 1 if fchmodat is declared even after undefining macros. */
    358 #define HAVE_RAW_DECL_FCHMODAT 1
    359 
    360 /* Define to 1 if fchownat is declared even after undefining macros. */
    361 #define HAVE_RAW_DECL_FCHOWNAT 1
    362 
    363 /* Define to 1 if fcntl is declared even after undefining macros. */
    364 #define HAVE_RAW_DECL_FCNTL 1
    365 
    366 /* Define to 1 if fdatasync is declared even after undefining macros. */
    367 /* #undef HAVE_RAW_DECL_FDATASYNC */
    368 
    369 /* Define to 1 if fstat is declared even after undefining macros. */
    370 #define HAVE_RAW_DECL_FSTAT 1
    371 
    372 /* Define to 1 if fstatat is declared even after undefining macros. */
    373 #define HAVE_RAW_DECL_FSTATAT 1
    374 
    375 /* Define to 1 if fsync is declared even after undefining macros. */
    376 #define HAVE_RAW_DECL_FSYNC 1
    377 
    378 /* Define to 1 if ftruncate is declared even after undefining macros. */
    379 #define HAVE_RAW_DECL_FTRUNCATE 1
    380 
    381 /* Define to 1 if futimens is declared even after undefining macros. */
    382 #define HAVE_RAW_DECL_FUTIMENS 1
    383 
    384 /* Define to 1 if getcwd is declared even after undefining macros. */
    385 #define HAVE_RAW_DECL_GETCWD 1
    386 
    387 /* Define to 1 if getdomainname is declared even after undefining macros. */
    388 #define HAVE_RAW_DECL_GETDOMAINNAME 1
    389 
    390 /* Define to 1 if getdtablesize is declared even after undefining macros. */
    391 #define HAVE_RAW_DECL_GETDTABLESIZE 1
    392 
    393 /* Define to 1 if getgroups is declared even after undefining macros. */
    394 #define HAVE_RAW_DECL_GETGROUPS 1
    395 
    396 /* Define to 1 if gethostname is declared even after undefining macros. */
    397 #define HAVE_RAW_DECL_GETHOSTNAME 1
    398 
    399 /* Define to 1 if getloadavg is declared even after undefining macros. */
    400 #define HAVE_RAW_DECL_GETLOADAVG 1
    401 
    402 /* Define to 1 if getlogin is declared even after undefining macros. */
    403 #define HAVE_RAW_DECL_GETLOGIN 1
    404 
    405 /* Define to 1 if getlogin_r is declared even after undefining macros. */
    406 #define HAVE_RAW_DECL_GETLOGIN_R 1
    407 
    408 /* Define to 1 if getpagesize is declared even after undefining macros. */
    409 #define HAVE_RAW_DECL_GETPAGESIZE 1
    410 
    411 /* Define to 1 if getsubopt is declared even after undefining macros. */
    412 #define HAVE_RAW_DECL_GETSUBOPT 1
    413 
    414 /* Define to 1 if gettimeofday is declared even after undefining macros. */
    415 #define HAVE_RAW_DECL_GETTIMEOFDAY 1
    416 
    417 /* Define to 1 if getusershell is declared even after undefining macros. */
    418 #define HAVE_RAW_DECL_GETUSERSHELL 1
    419 
    420 /* Define to 1 if grantpt is declared even after undefining macros. */
    421 #define HAVE_RAW_DECL_GRANTPT 1
    422 
    423 /* Define to 1 if group_member is declared even after undefining macros. */
    424 /* #undef HAVE_RAW_DECL_GROUP_MEMBER */
    425 
    426 /* Define to 1 if initstate is declared even after undefining macros. */
    427 #define HAVE_RAW_DECL_INITSTATE 1
    428 
    429 /* Define to 1 if initstate_r is declared even after undefining macros. */
    430 /* #undef HAVE_RAW_DECL_INITSTATE_R */
    431 
    432 /* Define to 1 if isatty is declared even after undefining macros. */
    433 #define HAVE_RAW_DECL_ISATTY 1
    434 
    435 /* Define to 1 if iswctype is declared even after undefining macros. */
    436 #define HAVE_RAW_DECL_ISWCTYPE 1
    437 
    438 /* Define to 1 if lchmod is declared even after undefining macros. */
    439 #define HAVE_RAW_DECL_LCHMOD 1
    440 
    441 /* Define to 1 if lchown is declared even after undefining macros. */
    442 #define HAVE_RAW_DECL_LCHOWN 1
    443 
    444 /* Define to 1 if link is declared even after undefining macros. */
    445 #define HAVE_RAW_DECL_LINK 1
    446 
    447 /* Define to 1 if linkat is declared even after undefining macros. */
    448 #define HAVE_RAW_DECL_LINKAT 1
    449 
    450 /* Define to 1 if lseek is declared even after undefining macros. */
    451 #define HAVE_RAW_DECL_LSEEK 1
    452 
    453 /* Define to 1 if lstat is declared even after undefining macros. */
    454 #define HAVE_RAW_DECL_LSTAT 1
    455 
    456 /* Define to 1 if mbrlen is declared even after undefining macros. */
    457 #define HAVE_RAW_DECL_MBRLEN 1
    458 
    459 /* Define to 1 if mbrtowc is declared even after undefining macros. */
    460 #define HAVE_RAW_DECL_MBRTOWC 1
    461 
    462 /* Define to 1 if mbsinit is declared even after undefining macros. */
    463 #define HAVE_RAW_DECL_MBSINIT 1
    464 
    465 /* Define to 1 if mbsnrtowcs is declared even after undefining macros. */
    466 #define HAVE_RAW_DECL_MBSNRTOWCS 1
    467 
    468 /* Define to 1 if mbsrtowcs is declared even after undefining macros. */
    469 #define HAVE_RAW_DECL_MBSRTOWCS 1
    470 
    471 /* Define to 1 if mkdirat is declared even after undefining macros. */
    472 #define HAVE_RAW_DECL_MKDIRAT 1
    473 
    474 /* Define to 1 if mkdtemp is declared even after undefining macros. */
    475 /* #undef HAVE_RAW_DECL_MKDTEMP */
    476 
    477 /* Define to 1 if mkfifo is declared even after undefining macros. */
    478 #define HAVE_RAW_DECL_MKFIFO 1
    479 
    480 /* Define to 1 if mkfifoat is declared even after undefining macros. */
    481 /* #undef HAVE_RAW_DECL_MKFIFOAT */
    482 
    483 /* Define to 1 if mknod is declared even after undefining macros. */
    484 #define HAVE_RAW_DECL_MKNOD 1
    485 
    486 /* Define to 1 if mknodat is declared even after undefining macros. */
    487 /* #undef HAVE_RAW_DECL_MKNODAT */
    488 
    489 /* Define to 1 if mkostemp is declared even after undefining macros. */
    490 /* #undef HAVE_RAW_DECL_MKOSTEMP */
    491 
    492 /* Define to 1 if mkostemps is declared even after undefining macros. */
    493 /* #undef HAVE_RAW_DECL_MKOSTEMPS */
    494 
    495 /* Define to 1 if mkstemp is declared even after undefining macros. */
    496 #define HAVE_RAW_DECL_MKSTEMP 1
    497 
    498 /* Define to 1 if mkstemps is declared even after undefining macros. */
    499 /* #undef HAVE_RAW_DECL_MKSTEMPS */
    500 
    501 /* Define to 1 if nl_langinfo is declared even after undefining macros. */
    502 #define HAVE_RAW_DECL_NL_LANGINFO 1
    503 
    504 /* Define to 1 if openat is declared even after undefining macros. */
    505 #define HAVE_RAW_DECL_OPENAT 1
    506 
    507 /* Define to 1 if pipe is declared even after undefining macros. */
    508 #define HAVE_RAW_DECL_PIPE 1
    509 
    510 /* Define to 1 if pipe2 is declared even after undefining macros. */
    511 /* #undef HAVE_RAW_DECL_PIPE2 */
    512 
    513 /* Define to 1 if posix_openpt is declared even after undefining macros. */
    514 #define HAVE_RAW_DECL_POSIX_OPENPT 1
    515 
    516 /* Define to 1 if pread is declared even after undefining macros. */
    517 #define HAVE_RAW_DECL_PREAD 1
    518 
    519 /* Define to 1 if ptsname is declared even after undefining macros. */
    520 #define HAVE_RAW_DECL_PTSNAME 1
    521 
    522 /* Define to 1 if ptsname_r is declared even after undefining macros. */
    523 #define HAVE_RAW_DECL_PTSNAME_R 1
    524 
    525 /* Define to 1 if pwrite is declared even after undefining macros. */
    526 #define HAVE_RAW_DECL_PWRITE 1
    527 
    528 /* Define to 1 if qsort_r is declared even after undefining macros. */
    529 #define HAVE_RAW_DECL_QSORT_R 1
    530 
    531 /* Define to 1 if random is declared even after undefining macros. */
    532 #define HAVE_RAW_DECL_RANDOM 1
    533 
    534 /* Define to 1 if random_r is declared even after undefining macros. */
    535 /* #undef HAVE_RAW_DECL_RANDOM_R */
    536 
    537 /* Define to 1 if readlink is declared even after undefining macros. */
    538 #define HAVE_RAW_DECL_READLINK 1
    539 
    540 /* Define to 1 if readlinkat is declared even after undefining macros. */
    541 #define HAVE_RAW_DECL_READLINKAT 1
    542 
    543 /* Define to 1 if reallocarray is declared even after undefining macros. */
    544 /* #undef HAVE_RAW_DECL_REALLOCARRAY */
    545 
    546 /* Define to 1 if realpath is declared even after undefining macros. */
    547 #define HAVE_RAW_DECL_REALPATH 1
    548 
    549 /* Define to 1 if rmdir is declared even after undefining macros. */
    550 #define HAVE_RAW_DECL_RMDIR 1
    551 
    552 /* Define to 1 if rpmatch is declared even after undefining macros. */
    553 /* #undef HAVE_RAW_DECL_RPMATCH */
    554 
    555 /* Define to 1 if secure_getenv is declared even after undefining macros. */
    556 /* #undef HAVE_RAW_DECL_SECURE_GETENV */
    557 
    558 /* Define to 1 if setenv is declared even after undefining macros. */
    559 #define HAVE_RAW_DECL_SETENV 1
    560 
    561 /* Define to 1 if sethostname is declared even after undefining macros. */
    562 #define HAVE_RAW_DECL_SETHOSTNAME 1
    563 
    564 /* Define to 1 if setlocale is declared even after undefining macros. */
    565 #define HAVE_RAW_DECL_SETLOCALE 1
    566 
    567 /* Define to 1 if setstate is declared even after undefining macros. */
    568 #define HAVE_RAW_DECL_SETSTATE 1
    569 
    570 /* Define to 1 if setstate_r is declared even after undefining macros. */
    571 /* #undef HAVE_RAW_DECL_SETSTATE_R */
    572 
    573 /* Define to 1 if setusershell is declared even after undefining macros. */
    574 #define HAVE_RAW_DECL_SETUSERSHELL 1
    575 
    576 /* Define to 1 if sleep is declared even after undefining macros. */
    577 #define HAVE_RAW_DECL_SLEEP 1
    578 
    579 /* Define to 1 if srandom is declared even after undefining macros. */
    580 #define HAVE_RAW_DECL_SRANDOM 1
    581 
    582 /* Define to 1 if srandom_r is declared even after undefining macros. */
    583 /* #undef HAVE_RAW_DECL_SRANDOM_R */
    584 
    585 /* Define to 1 if stat is declared even after undefining macros. */
    586 #define HAVE_RAW_DECL_STAT 1
    587 
    588 /* Define to 1 if strtod is declared even after undefining macros. */
    589 #define HAVE_RAW_DECL_STRTOD 1
    590 
    591 /* Define to 1 if strtoll is declared even after undefining macros. */
    592 #define HAVE_RAW_DECL_STRTOLL 1
    593 
    594 /* Define to 1 if strtoull is declared even after undefining macros. */
    595 #define HAVE_RAW_DECL_STRTOULL 1
    596 
    597 /* Define to 1 if symlink is declared even after undefining macros. */
    598 #define HAVE_RAW_DECL_SYMLINK 1
    599 
    600 /* Define to 1 if symlinkat is declared even after undefining macros. */
    601 #define HAVE_RAW_DECL_SYMLINKAT 1
    602 
    603 /* Define to 1 if towctrans is declared even after undefining macros. */
    604 #define HAVE_RAW_DECL_TOWCTRANS 1
    605 
    606 /* Define to 1 if truncate is declared even after undefining macros. */
    607 #define HAVE_RAW_DECL_TRUNCATE 1
    608 
    609 /* Define to 1 if ttyname_r is declared even after undefining macros. */
    610 #define HAVE_RAW_DECL_TTYNAME_R 1
    611 
    612 /* Define to 1 if unlink is declared even after undefining macros. */
    613 #define HAVE_RAW_DECL_UNLINK 1
    614 
    615 /* Define to 1 if unlinkat is declared even after undefining macros. */
    616 #define HAVE_RAW_DECL_UNLINKAT 1
    617 
    618 /* Define to 1 if unlockpt is declared even after undefining macros. */
    619 #define HAVE_RAW_DECL_UNLOCKPT 1
    620 
    621 /* Define to 1 if unsetenv is declared even after undefining macros. */
    622 #define HAVE_RAW_DECL_UNSETENV 1
    623 
    624 /* Define to 1 if usleep is declared even after undefining macros. */
    625 #define HAVE_RAW_DECL_USLEEP 1
    626 
    627 /* Define to 1 if utimensat is declared even after undefining macros. */
    628 #define HAVE_RAW_DECL_UTIMENSAT 1
    629 
    630 /* Define to 1 if wcpcpy is declared even after undefining macros. */
    631 #define HAVE_RAW_DECL_WCPCPY 1
    632 
    633 /* Define to 1 if wcpncpy is declared even after undefining macros. */
    634 #define HAVE_RAW_DECL_WCPNCPY 1
    635 
    636 /* Define to 1 if wcrtomb is declared even after undefining macros. */
    637 #define HAVE_RAW_DECL_WCRTOMB 1
    638 
    639 /* Define to 1 if wcscasecmp is declared even after undefining macros. */
    640 #define HAVE_RAW_DECL_WCSCASECMP 1
    641 
    642 /* Define to 1 if wcscat is declared even after undefining macros. */
    643 #define HAVE_RAW_DECL_WCSCAT 1
    644 
    645 /* Define to 1 if wcschr is declared even after undefining macros. */
    646 #define HAVE_RAW_DECL_WCSCHR 1
    647 
    648 /* Define to 1 if wcscmp is declared even after undefining macros. */
    649 #define HAVE_RAW_DECL_WCSCMP 1
    650 
    651 /* Define to 1 if wcscoll is declared even after undefining macros. */
    652 #define HAVE_RAW_DECL_WCSCOLL 1
    653 
    654 /* Define to 1 if wcscpy is declared even after undefining macros. */
    655 #define HAVE_RAW_DECL_WCSCPY 1
    656 
    657 /* Define to 1 if wcscspn is declared even after undefining macros. */
    658 #define HAVE_RAW_DECL_WCSCSPN 1
    659 
    660 /* Define to 1 if wcsdup is declared even after undefining macros. */
    661 #define HAVE_RAW_DECL_WCSDUP 1
    662 
    663 /* Define to 1 if wcsftime is declared even after undefining macros. */
    664 #define HAVE_RAW_DECL_WCSFTIME 1
    665 
    666 /* Define to 1 if wcslen is declared even after undefining macros. */
    667 #define HAVE_RAW_DECL_WCSLEN 1
    668 
    669 /* Define to 1 if wcsncasecmp is declared even after undefining macros. */
    670 #define HAVE_RAW_DECL_WCSNCASECMP 1
    671 
    672 /* Define to 1 if wcsncat is declared even after undefining macros. */
    673 #define HAVE_RAW_DECL_WCSNCAT 1
    674 
    675 /* Define to 1 if wcsncmp is declared even after undefining macros. */
    676 #define HAVE_RAW_DECL_WCSNCMP 1
    677 
    678 /* Define to 1 if wcsncpy is declared even after undefining macros. */
    679 #define HAVE_RAW_DECL_WCSNCPY 1
    680 
    681 /* Define to 1 if wcsnlen is declared even after undefining macros. */
    682 #define HAVE_RAW_DECL_WCSNLEN 1
    683 
    684 /* Define to 1 if wcsnrtombs is declared even after undefining macros. */
    685 #define HAVE_RAW_DECL_WCSNRTOMBS 1
    686 
    687 /* Define to 1 if wcspbrk is declared even after undefining macros. */
    688 #define HAVE_RAW_DECL_WCSPBRK 1
    689 
    690 /* Define to 1 if wcsrchr is declared even after undefining macros. */
    691 #define HAVE_RAW_DECL_WCSRCHR 1
    692 
    693 /* Define to 1 if wcsrtombs is declared even after undefining macros. */
    694 #define HAVE_RAW_DECL_WCSRTOMBS 1
    695 
    696 /* Define to 1 if wcsspn is declared even after undefining macros. */
    697 #define HAVE_RAW_DECL_WCSSPN 1
    698 
    699 /* Define to 1 if wcsstr is declared even after undefining macros. */
    700 #define HAVE_RAW_DECL_WCSSTR 1
    701 
    702 /* Define to 1 if wcstok is declared even after undefining macros. */
    703 #define HAVE_RAW_DECL_WCSTOK 1
    704 
    705 /* Define to 1 if wcswidth is declared even after undefining macros. */
    706 #define HAVE_RAW_DECL_WCSWIDTH 1
    707 
    708 /* Define to 1 if wcsxfrm is declared even after undefining macros. */
    709 #define HAVE_RAW_DECL_WCSXFRM 1
    710 
    711 /* Define to 1 if wctob is declared even after undefining macros. */
    712 #define HAVE_RAW_DECL_WCTOB 1
    713 
    714 /* Define to 1 if wctrans is declared even after undefining macros. */
    715 #define HAVE_RAW_DECL_WCTRANS 1
    716 
    717 /* Define to 1 if wctype is declared even after undefining macros. */
    718 #define HAVE_RAW_DECL_WCTYPE 1
    719 
    720 /* Define to 1 if wcwidth is declared even after undefining macros. */
    721 #define HAVE_RAW_DECL_WCWIDTH 1
    722 
    723 /* Define to 1 if wmemchr is declared even after undefining macros. */
    724 #define HAVE_RAW_DECL_WMEMCHR 1
    725 
    726 /* Define to 1 if wmemcmp is declared even after undefining macros. */
    727 #define HAVE_RAW_DECL_WMEMCMP 1
    728 
    729 /* Define to 1 if wmemcpy is declared even after undefining macros. */
    730 #define HAVE_RAW_DECL_WMEMCPY 1
    731 
    732 /* Define to 1 if wmemmove is declared even after undefining macros. */
    733 #define HAVE_RAW_DECL_WMEMMOVE 1
    734 
    735 /* Define to 1 if wmemset is declared even after undefining macros. */
    736 #define HAVE_RAW_DECL_WMEMSET 1
    737 
    738 /* Define to 1 if _Exit is declared even after undefining macros. */
    739 #define HAVE_RAW_DECL__EXIT 1
    740 
    741 /* Define to 1 if you have the `setenv' function. */
    742 #define HAVE_SETENV 1
    743 
    744 /* Define to 1 if 'sig_atomic_t' is a signed integer type. */
    745 /* #undef HAVE_SIGNED_SIG_ATOMIC_T */
    746 
    747 /* Define to 1 if 'wchar_t' is a signed integer type. */
    748 /* #undef HAVE_SIGNED_WCHAR_T */
    749 
    750 /* Define to 1 if 'wint_t' is a signed integer type. */
    751 /* #undef HAVE_SIGNED_WINT_T */
    752 
    753 /* Define to 1 if you have the <stddef.h> header file. */
    754 #define HAVE_STDDEF_H 1
    755 
    756 /* Define to 1 if you have the <stdint.h> header file. */
    757 #define HAVE_STDINT_H 1
    758 
    759 /* Define to 1 if you have the <stdlib.h> header file. */
    760 #define HAVE_STDLIB_H 1
    761 
    762 /* Define to 1 if you have the `strchr' function. */
    763 #define HAVE_STRCHR 1
    764 
    765 /* Define to 1 if you have the `strerror' function. */
    766 #define HAVE_STRERROR 1
    767 
    768 /* Define to 1 if you have the <strings.h> header file. */
    769 #define HAVE_STRINGS_H 1
    770 
    771 /* Define to 1 if you have the <string.h> header file. */
    772 #define HAVE_STRING_H 1
    773 
    774 /* Define to 1 if you have the `strtol' function. */
    775 #define HAVE_STRTOL 1
    776 
    777 /* Define to 1 if you have the `strtoul' function. */
    778 #define HAVE_STRTOUL 1
    779 
    780 /* Define to 1 if `decimal_point' is a member of `struct lconv'. */
    781 /* #undef HAVE_STRUCT_LCONV_DECIMAL_POINT */
    782 
    783 /* Define to 1 if `st_blksize' is a member of `struct stat'. */
    784 #define HAVE_STRUCT_STAT_ST_BLKSIZE 1
    785 
    786 /* Define to 1 if you have the `symlink' function. */
    787 #define HAVE_SYMLINK 1
    788 
    789 /* Define to 1 if you have the <sys/bitypes.h> header file. */
    790 /* #undef HAVE_SYS_BITYPES_H */
    791 
    792 /* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
    793  */
    794 /* #undef HAVE_SYS_DIR_H */
    795 
    796 /* Define to 1 if you have the <sys/inttypes.h> header file. */
    797 /* #undef HAVE_SYS_INTTYPES_H */
    798 
    799 /* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
    800  */
    801 /* #undef HAVE_SYS_NDIR_H */
    802 
    803 /* Define to 1 if you have the <sys/param.h> header file. */
    804 #define HAVE_SYS_PARAM_H 1
    805 
    806 /* Define to 1 if you have the <sys/socket.h> header file. */
    807 #define HAVE_SYS_SOCKET_H 1
    808 
    809 /* Define to 1 if you have the <sys/stat.h> header file. */
    810 #define HAVE_SYS_STAT_H 1
    811 
    812 /* Define to 1 if you have the <sys/time.h> header file. */
    813 #define HAVE_SYS_TIME_H 1
    814 
    815 /* Define to 1 if you have the <sys/types.h> header file. */
    816 #define HAVE_SYS_TYPES_H 1
    817 
    818 /* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */
    819 #define HAVE_SYS_WAIT_H 1
    820 
    821 /* Define to 1 if you have the `timegm' function. */
    822 #define HAVE_TIMEGM 1
    823 
    824 /* Define to 1 if you have the `towlower' function. */
    825 #define HAVE_TOWLOWER 1
    826 
    827 /* Define to 1 if you have the <unistd.h> header file. */
    828 #define HAVE_UNISTD_H 1
    829 
    830 /* Define to 1 if the system has the type 'unsigned long long int'. */
    831 #define HAVE_UNSIGNED_LONG_LONG_INT 1
    832 
    833 /* Define to 1 if you have the <uuid.h> header file. */
    834 /* #undef HAVE_UUID_H */
    835 
    836 /* Define to 1 if you have the <uuid/uuid.h> header file. */
    837 #define HAVE_UUID_UUID_H 1
    838 
    839 /* Define to 1 if you have the <wchar.h> header file. */
    840 #define HAVE_WCHAR_H 1
    841 
    842 /* Define if you have the 'wchar_t' type. */
    843 #define HAVE_WCHAR_T 1
    844 
    845 /* Define to 1 if you have the `wcrtomb' function. */
    846 #define HAVE_WCRTOMB 1
    847 
    848 /* Define to 1 if you have the <wctype.h> header file. */
    849 #define HAVE_WCTYPE_H 1
    850 
    851 /* Define to 1 if you have the <winsock2.h> header file. */
    852 /* #undef HAVE_WINSOCK2_H */
    853 
    854 /* Define if you have the 'wint_t' type. */
    855 #define HAVE_WINT_T 1
    856 
    857 /* Define to 1 if O_NOATIME works. */
    858 #define HAVE_WORKING_O_NOATIME 1
    859 
    860 /* Define to 1 if O_NOFOLLOW works. */
    861 #define HAVE_WORKING_O_NOFOLLOW 1
    862 
    863 /* Define to 1 if you have the <xlocale.h> header file. */
    864 #define HAVE_XLOCALE_H 1
    865 
    866 /* Define to 1 if the system has the type `_Bool'. */
    867 #define HAVE__BOOL 1
    868 
    869 /* Define to 1 if the compiler supports __builtin_expect,
    870  and to 2 if <builtins.h> does. */
    871 #define HAVE___BUILTIN_EXPECT 1
    872 #ifndef HAVE___BUILTIN_EXPECT
    873 # define __builtin_expect(e, c) (e)
    874 #elif HAVE___BUILTIN_EXPECT == 2
    875 # include <builtins.h>
    876 #endif
    877 
    878 
    879 /* Set to the prefix directory */
    880 #define LIBDAP_ROOT "/Users/jimg/src/opendap/hyrax_git/build"
    881 
    882 /* Define to 1 if 'lstat' dereferences a symlink specified with a trailing
    883  slash. */
    884 /* #undef LSTAT_FOLLOWS_SLASHED_SYMLINK */
    885 
    886 /* Define to the sub-directory where libtool stores uninstalled libraries. */
    887 #define LT_OBJDIR ".libs/"
    888 
    889 /* If malloc(0) is != NULL, define this to 1. Otherwise define this to 0. */
    890 #define MALLOC_0_IS_NONNULL 1
    891 
    892 /* Define if the mbrtowc function does not return (size_t) -2 for empty input.
    893  */
    894 /* #undef MBRTOWC_EMPTY_INPUT_BUG */
    895 
    896 /* Define if the mbrtowc function has the NULL pwc argument bug. */
    897 /* #undef MBRTOWC_NULL_ARG1_BUG */
    898 
    899 /* Define if the mbrtowc function has the NULL string argument bug. */
    900 /* #undef MBRTOWC_NULL_ARG2_BUG */
    901 
    902 /* Define if the mbrtowc function does not return 0 for a NUL character. */
    903 /* #undef MBRTOWC_NUL_RETVAL_BUG */
    904 
    905 /* Define if the mbrtowc function returns a wrong return value. */
    906 /* #undef MBRTOWC_RETVAL_BUG */
    907 
    908 /* Define this to suppres assert() calls. */
    909 /* #undef NDEBUG */
    910 
    911 /* Name of package */
    912 #define PACKAGE "libdap"
    913 
    914 /* Define to the address where bug reports for this package should be sent. */
    915 #define PACKAGE_BUGREPORT "opendap-tech@opendap.org"
    916 
    917 /* Define to the full name of this package. */
    918 #define PACKAGE_NAME "libdap"
    919 
    920 /* Define to the full name and version of this package. */
    921 #define PACKAGE_STRING "libdap 3.20.6"
    922 
    923 /* Define to the one symbol short name of this package. */
    924 #define PACKAGE_TARNAME "libdap"
    925 
    926 /* Define to the home page for this package. */
    927 #define PACKAGE_URL ""
    928 
    929 /* Define to the version of this package. */
    930 #define PACKAGE_VERSION "3.20.6"
    931 
    932 /* Define if the pthread_in_use() detection is hard. */
    933 /* #undef PTHREAD_IN_USE_DETECTION_HARD */
    934 
    935 /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
    936  'ptrdiff_t'. */
    937 /* #undef PTRDIFF_T_SUFFIX */
    938 
    939 /* Define to 1 if stat needs help when passed a file name with a trailing
    940  slash */
    941 #define REPLACE_FUNC_STAT_FILE 1
    942 
    943 /* Define if nl_langinfo exists but is overridden by gnulib. */
    944 /* #undef REPLACE_NL_LANGINFO */
    945 
    946 /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
    947  'sig_atomic_t'. */
    948 /* #undef SIG_ATOMIC_T_SUFFIX */
    949 
    950 /* The size of `char', as computed by sizeof. */
    951 #define SIZEOF_CHAR 1
    952 
    953 /* The size of `double', as computed by sizeof. */
    954 #define SIZEOF_DOUBLE 8
    955 
    956 /* The size of `float', as computed by sizeof. */
    957 #define SIZEOF_FLOAT 4
    958 
    959 /* The size of `int', as computed by sizeof. */
    960 #define SIZEOF_INT 4
    961 
    962 /* The size of `int16_t', as computed by sizeof. */
    963 #define SIZEOF_INT16_T 2
    964 
    965 /* The size of `int32_t', as computed by sizeof. */
    966 #define SIZEOF_INT32_T 4
    967 
    968 /* The size of `long', as computed by sizeof. */
    969 #define SIZEOF_LONG 8
    970 
    971 /* The size of `uint16_t', as computed by sizeof. */
    972 #define SIZEOF_UINT16_T 2
    973 
    974 /* The size of `uint32_t', as computed by sizeof. */
    975 #define SIZEOF_UINT32_T 4
    976 
    977 /* The size of `uint8_t', as computed by sizeof. */
    978 #define SIZEOF_UINT8_T 1
    979 
    980 /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
    981  'size_t'. */
    982 /* #undef SIZE_T_SUFFIX */
    983 
    984 /* If using the C implementation of alloca, define if you know the
    985  direction of stack growth for your system; otherwise it will be
    986  automatically deduced at runtime.
    987  STACK_DIRECTION > 0 => grows toward higher addresses
    988  STACK_DIRECTION < 0 => grows toward lower addresses
    989  STACK_DIRECTION = 0 => direction of growth unknown */
    990 /* #undef STACK_DIRECTION */
    991 
    992 /* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
    993 /* #undef STAT_MACROS_BROKEN */
    994 
    995 /* Define to 1 if you have the ANSI C header files. */
    996 #define STDC_HEADERS 1
    997 
    998 /* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
    999 #define TIME_WITH_SYS_TIME 1
    1000 
    1001 /* Define to 1 if your <sys/time.h> declares `struct tm'. */
    1002 /* #undef TM_IN_SYS_TIME */
    1003 
    1004 /* Define if the POSIX multithreading library can be used. */
    1005 #define USE_POSIX_THREADS 1
    1006 
    1007 /* Define if references to the POSIX multithreading library should be made
    1008  weak. */
    1009 /* #undef USE_POSIX_THREADS_WEAK */
    1010 
    1011 /* Define if the GNU Pth multithreading library can be used. */
    1012 /* #undef USE_PTH_THREADS */
    1013 
    1014 /* Define if references to the GNU Pth multithreading library should be made
    1015  weak. */
    1016 /* #undef USE_PTH_THREADS_WEAK */
    1017 
    1018 /* Define if the old Solaris multithreading library can be used. */
    1019 /* #undef USE_SOLARIS_THREADS */
    1020 
    1021 /* Define if references to the old Solaris multithreading library should be
    1022  made weak. */
    1023 /* #undef USE_SOLARIS_THREADS_WEAK */
    1024 
    1025 /* Enable extensions on AIX 3, Interix. */
    1026 #ifndef _ALL_SOURCE
    1027 # define _ALL_SOURCE 1
    1028 #endif
    1029 /* Enable general extensions on macOS. */
    1030 #ifndef _DARWIN_C_SOURCE
    1031 # define _DARWIN_C_SOURCE 1
    1032 #endif
    1033 /* Enable GNU extensions on systems that have them. */
    1034 #ifndef _GNU_SOURCE
    1035 # define _GNU_SOURCE 1
    1036 #endif
    1037 /* Enable NetBSD extensions on NetBSD. */
    1038 #ifndef _NETBSD_SOURCE
    1039 # define _NETBSD_SOURCE 1
    1040 #endif
    1041 /* Enable OpenBSD extensions on NetBSD. */
    1042 #ifndef _OPENBSD_SOURCE
    1043 # define _OPENBSD_SOURCE 1
    1044 #endif
    1045 /* Enable threading extensions on Solaris. */
    1046 #ifndef _POSIX_PTHREAD_SEMANTICS
    1047 # define _POSIX_PTHREAD_SEMANTICS 1
    1048 #endif
    1049 /* Enable extensions specified by ISO/IEC TS 18661-5:2014. */
    1050 #ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
    1051 # define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1
    1052 #endif
    1053 /* Enable extensions specified by ISO/IEC TS 18661-1:2014. */
    1054 #ifndef __STDC_WANT_IEC_60559_BFP_EXT__
    1055 # define __STDC_WANT_IEC_60559_BFP_EXT__ 1
    1056 #endif
    1057 /* Enable extensions specified by ISO/IEC TS 18661-2:2015. */
    1058 #ifndef __STDC_WANT_IEC_60559_DFP_EXT__
    1059 # define __STDC_WANT_IEC_60559_DFP_EXT__ 1
    1060 #endif
    1061 /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */
    1062 #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__
    1063 # define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1
    1064 #endif
    1065 /* Enable extensions specified by ISO/IEC TS 18661-3:2015. */
    1066 #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__
    1067 # define __STDC_WANT_IEC_60559_TYPES_EXT__ 1
    1068 #endif
    1069 /* Enable extensions specified by ISO/IEC TR 24731-2:2010. */
    1070 #ifndef __STDC_WANT_LIB_EXT2__
    1071 # define __STDC_WANT_LIB_EXT2__ 1
    1072 #endif
    1073 /* Enable extensions specified by ISO/IEC 24747:2009. */
    1074 #ifndef __STDC_WANT_MATH_SPEC_FUNCS__
    1075 # define __STDC_WANT_MATH_SPEC_FUNCS__ 1
    1076 #endif
    1077 /* Enable extensions on HP NonStop. */
    1078 #ifndef _TANDEM_SOURCE
    1079 # define _TANDEM_SOURCE 1
    1080 #endif
    1081 /* Enable X/Open extensions if necessary. HP-UX 11.11 defines
    1082  mbstate_t only if _XOPEN_SOURCE is defined to 500, regardless of
    1083  whether compiling with -Ae or -D_HPUX_SOURCE=1. */
    1084 #ifndef _XOPEN_SOURCE
    1085 /* # undef _XOPEN_SOURCE */
    1086 #endif
    1087 /* Enable general extensions on Solaris. */
    1088 #ifndef __EXTENSIONS__
    1089 # define __EXTENSIONS__ 1
    1090 #endif
    1091 
    1092 
    1093 /* Define if the native Windows multithreading API can be used. */
    1094 /* #undef USE_WINDOWS_THREADS */
    1095 
    1096 /* Version number of package */
    1097 #define VERSION "3.20.6"
    1098 
    1099 /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
    1100  'wchar_t'. */
    1101 /* #undef WCHAR_T_SUFFIX */
    1102 
    1103 /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
    1104  'wint_t'. */
    1105 /* #undef WINT_T_SUFFIX */
    1106 
    1107 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    1108  significant byte first (like Motorola and SPARC, unlike Intel). */
    1109 #if defined AC_APPLE_UNIVERSAL_BUILD
    1110 # if defined __BIG_ENDIAN__
    1111 # define WORDS_BIGENDIAN 1
    1112 # endif
    1113 #else
    1114 # ifndef WORDS_BIGENDIAN
    1115 /* # undef WORDS_BIGENDIAN */
    1116 # endif
    1117 #endif
    1118 
    1119 /* xdr float32 */
    1120 #define XDR_FLOAT32 xdr_float
    1121 
    1122 /* xdr float64 */
    1123 #define XDR_FLOAT64 xdr_double
    1124 
    1125 /* xdr int16 */
    1126 #define XDR_INT16 xdr_int16_t
    1127 
    1128 /* xdr int32 */
    1129 #define XDR_INT32 xdr_int32_t
    1130 
    1131 /* xdr uint16 */
    1132 #define XDR_UINT16 xdr_u_int16_t
    1133 
    1134 /* xdr uint32 */
    1135 #define XDR_UINT32 xdr_u_int32_t
    1136 
    1137 /* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a
    1138  `char[]'. */
    1139 #define YYTEXT_POINTER 1
    1140 
    1141 /* Enable large inode numbers on Mac OS X 10.5. */
    1142 #define _DARWIN_USE_64_BIT_INODE 1
    1143 
    1144 /* Number of bits in a file offset, on hosts where this is settable. */
    1145 /* #undef _FILE_OFFSET_BITS */
    1146 
    1147 /* Define for large files, on AIX-style hosts. */
    1148 /* #undef _LARGE_FILES */
    1149 
    1150 /* Define to 1 on Solaris. */
    1151 /* #undef _LCONV_C99 */
    1152 
    1153 /* Define to 1 if on MINIX. */
    1154 /* #undef _MINIX */
    1155 
    1156 /* Define to 1 to make NetBSD features available. MINIX 3 needs this. */
    1157 #define _NETBSD_SOURCE 1
    1158 
    1159 /* The _Noreturn keyword of C11. */
    1160 #if ! (defined _Noreturn \
    1161  || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__))
    1162 # if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \
    1163  || 0x5110 <= __SUNPRO_C)
    1164 # define _Noreturn __attribute__ ((__noreturn__))
    1165 # elif defined _MSC_VER && 1200 <= _MSC_VER
    1166 # define _Noreturn __declspec (noreturn)
    1167 # else
    1168 # define _Noreturn
    1169 # endif
    1170 #endif
    1171 
    1172 
    1173 /* Define to 2 if the system does not provide POSIX.1 features except with
    1174  this defined. */
    1175 /* #undef _POSIX_1_SOURCE */
    1176 
    1177 /* Define to 1 if you need to in order for 'stat' and other things to work. */
    1178 /* #undef _POSIX_SOURCE */
    1179 
    1180 /* Define if you want <regex.h> to include <limits.h>, so that it consistently
    1181  overrides <limits.h>'s RE_DUP_MAX. */
    1182 #define _REGEX_INCLUDE_LIMITS_H 1
    1183 
    1184 /* Define if you want regoff_t to be at least as wide POSIX requires. */
    1185 #define _REGEX_LARGE_OFFSETS 1
    1186 
    1187 /* For standard stat data types on VMS. */
    1188 #define _USE_STD_STAT 1
    1189 
    1190 /* Define to 1 if the system <stdint.h> predates C++11. */
    1191 /* #undef __STDC_CONSTANT_MACROS */
    1192 
    1193 /* Define to 1 if the system <stdint.h> predates C++11. */
    1194 /* #undef __STDC_LIMIT_MACROS */
    1195 
    1196 /* Define to empty if `const' does not conform to ANSI C. */
    1197 /* #undef const */
    1198 
    1199 /* Please see the Gnulib manual for how to use these macros.
    1200 
    1201  Suppress extern inline with HP-UX cc, as it appears to be broken; see
    1202  <http://lists.gnu.org/archive/html/bug-texinfo/2013-02/msg00030.html>.
    1203 
    1204  Suppress extern inline with Sun C in standards-conformance mode, as it
    1205  mishandles inline functions that call each other. E.g., for 'inline void f
    1206  (void) { } inline void g (void) { f (); }', c99 incorrectly complains
    1207  'reference to static identifier "f" in extern inline function'.
    1208  This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16.
    1209 
    1210  Suppress extern inline (with or without __attribute__ ((__gnu_inline__)))
    1211  on configurations that mistakenly use 'static inline' to implement
    1212  functions or macros in standard C headers like <ctype.h>. For example,
    1213  if isdigit is mistakenly implemented via a static inline function,
    1214  a program containing an extern inline function that calls isdigit
    1215  may not work since the C standard prohibits extern inline functions
    1216  from calling static functions. This bug is known to occur on:
    1217 
    1218  OS X 10.8 and earlier; see:
    1219  http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html
    1220 
    1221  DragonFly; see
    1222  http://muscles.dragonflybsd.org/bulk/bleeding-edge-potential/latest-per-pkg/ah-tty-0.3.12.log
    1223 
    1224  FreeBSD; see:
    1225  http://lists.gnu.org/archive/html/bug-gnulib/2014-07/msg00104.html
    1226 
    1227  OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and
    1228  for clang but remains for g++; see <http://trac.macports.org/ticket/41033>.
    1229  Assume DragonFly and FreeBSD will be similar. */
    1230 #if (((defined __APPLE__ && defined __MACH__) \
    1231  || defined __DragonFly__ || defined __FreeBSD__) \
    1232  && (defined __header_inline \
    1233  ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \
    1234  && ! defined __clang__) \
    1235  : ((! defined _DONT_USE_CTYPE_INLINE_ \
    1236  && (defined __GNUC__ || defined __cplusplus)) \
    1237  || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \
    1238  && defined __GNUC__ && ! defined __cplusplus))))
    1239 # define _GL_EXTERN_INLINE_STDHEADER_BUG
    1240 #endif
    1241 #if ((__GNUC__ \
    1242  ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
    1243  : (199901L <= __STDC_VERSION__ \
    1244  && !defined __HP_cc \
    1245  && !defined __PGI \
    1246  && !(defined __SUNPRO_C && __STDC__))) \
    1247  && !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
    1248 # define _GL_INLINE inline
    1249 # define _GL_EXTERN_INLINE extern inline
    1250 # define _GL_EXTERN_INLINE_IN_USE
    1251 #elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \
    1252  && !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
    1253 # if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__
    1254  /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */
    1255 # define _GL_INLINE extern inline __attribute__ ((__gnu_inline__))
    1256 # else
    1257 # define _GL_INLINE extern inline
    1258 # endif
    1259 # define _GL_EXTERN_INLINE extern
    1260 # define _GL_EXTERN_INLINE_IN_USE
    1261 #else
    1262 # define _GL_INLINE static _GL_UNUSED
    1263 # define _GL_EXTERN_INLINE static _GL_UNUSED
    1264 #endif
    1265 
    1266 /* In GCC 4.6 (inclusive) to 5.1 (exclusive),
    1267  suppress bogus "no previous prototype for 'FOO'"
    1268  and "no previous declaration for 'FOO'" diagnostics,
    1269  when FOO is an inline function in the header; see
    1270  <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113> and
    1271  <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63877>. */
    1272 #if __GNUC__ == 4 && 6 <= __GNUC_MINOR__
    1273 # if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__
    1274 # define _GL_INLINE_HEADER_CONST_PRAGMA
    1275 # else
    1276 # define _GL_INLINE_HEADER_CONST_PRAGMA \
    1277  _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"")
    1278 # endif
    1279 # define _GL_INLINE_HEADER_BEGIN \
    1280  _Pragma ("GCC diagnostic push") \
    1281  _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \
    1282  _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \
    1283  _GL_INLINE_HEADER_CONST_PRAGMA
    1284 # define _GL_INLINE_HEADER_END \
    1285  _Pragma ("GCC diagnostic pop")
    1286 #else
    1287 # define _GL_INLINE_HEADER_BEGIN
    1288 # define _GL_INLINE_HEADER_END
    1289 #endif
    1290 
    1291 /* Define to `__inline__' or `__inline' if that's what the C compiler
    1292  calls it, or to nothing if 'inline' is not supported under any name. */
    1293 #ifndef __cplusplus
    1294 /* #undef inline */
    1295 #endif
    1296 
    1297 /* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports
    1298  the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of
    1299  earlier versions), but does not display it by setting __GNUC_STDC_INLINE__.
    1300  __APPLE__ && __MACH__ test for Mac OS X.
    1301  __APPLE_CC__ tests for the Apple compiler and its version.
    1302  __STDC_VERSION__ tests for the C99 mode. */
    1303 #if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__
    1304 # define __GNUC_STDC_INLINE__ 1
    1305 #endif
    1306 
    1307 /* Define to a type if <wchar.h> does not define. */
    1308 /* #undef mbstate_t */
    1309 
    1310 /* Define to `int' if <sys/types.h> does not define. */
    1311 /* #undef mode_t */
    1312 
    1313 /* Define to the type of st_nlink in struct stat, or a supertype. */
    1314 /* #undef nlink_t */
    1315 
    1316 /* Define to `int' if <sys/types.h> does not define. */
    1317 /* #undef pid_t */
    1318 
    1319 /* Define to rpl_re_comp if the replacement should be used. */
    1320 #define re_comp rpl_re_comp
    1321 
    1322 /* Define to rpl_re_compile_fastmap if the replacement should be used. */
    1323 #define re_compile_fastmap rpl_re_compile_fastmap
    1324 
    1325 /* Define to rpl_re_compile_pattern if the replacement should be used. */
    1326 #define re_compile_pattern rpl_re_compile_pattern
    1327 
    1328 /* Define to rpl_re_exec if the replacement should be used. */
    1329 #define re_exec rpl_re_exec
    1330 
    1331 /* Define to rpl_re_match if the replacement should be used. */
    1332 #define re_match rpl_re_match
    1333 
    1334 /* Define to rpl_re_match_2 if the replacement should be used. */
    1335 #define re_match_2 rpl_re_match_2
    1336 
    1337 /* Define to rpl_re_search if the replacement should be used. */
    1338 #define re_search rpl_re_search
    1339 
    1340 /* Define to rpl_re_search_2 if the replacement should be used. */
    1341 #define re_search_2 rpl_re_search_2
    1342 
    1343 /* Define to rpl_re_set_registers if the replacement should be used. */
    1344 #define re_set_registers rpl_re_set_registers
    1345 
    1346 /* Define to rpl_re_set_syntax if the replacement should be used. */
    1347 #define re_set_syntax rpl_re_set_syntax
    1348 
    1349 /* Define to rpl_re_syntax_options if the replacement should be used. */
    1350 #define re_syntax_options rpl_re_syntax_options
    1351 
    1352 /* Define to rpl_regcomp if the replacement should be used. */
    1353 #define regcomp rpl_regcomp
    1354 
    1355 /* Define to rpl_regerror if the replacement should be used. */
    1356 #define regerror rpl_regerror
    1357 
    1358 /* Define to rpl_regexec if the replacement should be used. */
    1359 #define regexec rpl_regexec
    1360 
    1361 /* Define to rpl_regfree if the replacement should be used. */
    1362 #define regfree rpl_regfree
    1363 
    1364 /* Define to the equivalent of the C99 'restrict' keyword, or to
    1365  nothing if this is not supported. Do not define if restrict is
    1366  supported directly. */
    1367 #define restrict __restrict
    1368 /* Work around a bug in Sun C++: it does not support _Restrict or
    1369  __restrict__, even though the corresponding Sun C compiler ends up with
    1370  "#define restrict _Restrict" or "#define restrict __restrict__" in the
    1371  previous line. Perhaps some future version of Sun C++ will work with
    1372  restrict; if so, hopefully it defines __RESTRICT like Sun C does. */
    1373 #if defined __SUNPRO_CC && !defined __RESTRICT
    1374 # define _Restrict
    1375 # define __restrict__
    1376 #endif
    1377 
    1378 /* Define to `unsigned int' if <sys/types.h> does not define. */
    1379 /* #undef size_t */
    1380 
    1381 /* Define as a signed type of the same size as size_t. */
    1382 /* #undef ssize_t */
    1383 
    1384 /* Define as a marker that can be attached to declarations that might not
    1385  be used. This helps to reduce warnings, such as from
    1386  GCC -Wunused-parameter. */
    1387 #if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
    1388 # define _GL_UNUSED __attribute__ ((__unused__))
    1389 #else
    1390 # define _GL_UNUSED
    1391 #endif
    1392 /* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name
    1393  is a misnomer outside of parameter lists. */
    1394 #define _UNUSED_PARAMETER_ _GL_UNUSED
    1395 
    1396 /* gcc supports the "unused" attribute on possibly unused labels, and
    1397  g++ has since version 4.5. Note to support C++ as well as C,
    1398  _GL_UNUSED_LABEL should be used with a trailing ; */
    1399 #if !defined __cplusplus || __GNUC__ > 4 \
    1400  || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
    1401 # define _GL_UNUSED_LABEL _GL_UNUSED
    1402 #else
    1403 # define _GL_UNUSED_LABEL
    1404 #endif
    1405 
    1406 /* The __pure__ attribute was added in gcc 2.96. */
    1407 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
    1408 # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
    1409 #else
    1410 # define _GL_ATTRIBUTE_PURE /* empty */
    1411 #endif
    1412 
    1413 /* The __const__ attribute was added in gcc 2.95. */
    1414 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
    1415 # define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
    1416 #else
    1417 # define _GL_ATTRIBUTE_CONST /* empty */
    1418 #endif
    1419 
    1420 
    1421 /* Define to empty if the keyword `volatile' does not work. Warning: valid
    1422  code using `volatile' can become incorrect without. Disable with care. */
    1423 /* #undef volatile */
    1424 
    1425 #endif /* _config_h */
    -
    - - - - diff --git a/html/config__dap_8h_source.html b/html/config__dap_8h_source.html deleted file mode 100644 index aa92f5b26..000000000 --- a/html/config__dap_8h_source.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -libdap: config_dap.h Source File - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    config_dap.h
    -
    -
    -
    1 /* config.h. Generated by configure. */
    2 /* config.h.in. Generated from configure.ac by autoheader. */
    3 
    4 #ifndef _config_dap_h
    5 #define _config_dap_h
    6 
    7 #ifdef HAVE_CONFIG_H
    8 
    9 #include "config.h"
    10 
    11 #endif /* HAVE_CONFIG_H */
    12 
    13 /* Shorthand for gcc's unused attribute feature */
    14 #if defined(__GNUG__) || defined(__GNUC__)
    15 #define not_used __attribute__ ((unused))
    16 #else
    17 #define not_used
    18 #endif /* __GNUG__ || __GNUC__ */
    19 
    20 #endif /* _config_dap_h */
    -
    - - - - diff --git a/html/crc_8h_source.html b/html/crc_8h_source.html deleted file mode 100644 index 35a4b7c93..000000000 --- a/html/crc_8h_source.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - -libdap: crc.h Source File - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    crc.h
    -
    -
    -
    1 /*
    2  * From Tom Distler
    3  * See http://tdistler.com/2011/06/22/crc32-a-simple-c-class
    4  */
    5 
    6 #ifndef CRC_H_
    7 #define CRC_H_
    8 
    9 static const uint32_t kCrc32Table[256] = {
    10  0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
    11  0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
    12  0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
    13  0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
    14  0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
    15  0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
    16  0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
    17  0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
    18  0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
    19  0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
    20  0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
    21  0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
    22  0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
    23  0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
    24  0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
    25  0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
    26  0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
    27  0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
    28  0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
    29  0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
    30  0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
    31  0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
    32  0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
    33  0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
    34  0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
    35  0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
    36  0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
    37  0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
    38  0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
    39  0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
    40  0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
    41  0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
    42  0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
    43  0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
    44  0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
    45  0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
    46  0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
    47  0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
    48  0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
    49  0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
    50  0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
    51  0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
    52  0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
    53  0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
    54  0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
    55  0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
    56  0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
    57  0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
    58  0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
    59  0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
    60  0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
    61  0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
    62  0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
    63  0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
    64  0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
    65  0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
    66  0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
    67  0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
    68  0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
    69  0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
    70  0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
    71  0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
    72  0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
    73  0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
    74 }; // kCrc32Table
    75 
    76 class Crc32
    77 {
    78 public:
    79  typedef uint32_t checksum;
    80 
    84  Crc32() { Reset(); }
    85 
    86  ~Crc32() throw() {}
    87 
    92  void Reset() { _crc = (uint32_t)~0; }
    93 
    98  void AddData(const uint8_t* pData, const uint32_t length)
    99  {
    100  uint8_t* pCur = (uint8_t*)pData;
    101  uint32_t remaining = length;
    102  for (; remaining--; ++pCur)
    103  _crc = ( _crc >> 8 ) ^ kCrc32Table[(_crc ^ *pCur) & 0xff];
    104  }
    105 
    110  checksum GetCrc32() const { return ~_crc; }
    111 
    112 private:
    113  uint32_t _crc;
    114 };
    115 
    116 #endif /* CRC_H_ */
    Definition: crc.h:76
    -
    checksum GetCrc32() const
    Definition: crc.h:110
    -
    Crc32()
    Definition: crc.h:84
    -
    void AddData(const uint8_t *pData, const uint32_t length)
    Definition: crc.h:98
    -
    void Reset()
    Definition: crc.h:92
    -
    -
    - - - - diff --git a/html/debug_8h_source.html b/html/debug_8h_source.html deleted file mode 100644 index d4af25387..000000000 --- a/html/debug_8h_source.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -libdap: debug.h Source File - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    debug.h
    -
    -
    -
    1 /*
    2 // -*- mode: c++; c-basic-offset:4 -*-
    3 
    4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
    5 // Access Protocol.
    6 
    7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
    8 // Author: James Gallagher <jgallagher@opendap.org>
    9 //
    10 // This library is free software; you can redistribute it and/or
    11 // modify it under the terms of the GNU Lesser General Public
    12 // License as published by the Free Software Foundation; either
    13 // version 2.1 of the License, or (at your option) any later version.
    14 //
    15 // This library is distributed in the hope that it will be useful,
    16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
    17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    18 // Lesser General Public License for more details.
    19 //
    20 // You should have received a copy of the GNU Lesser General Public
    21 // License along with this library; if not, write to the Free Software
    22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    23 //
    24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
    25 */
    26 
    27 /*
    28  This header defines macros which enable compile-time program
    29  instrumentation. These macros work for both C and C++. Enclose the entire
    30  statement to be debugged within the DBG() macro *and* put the semicolon
    31  after the macro. (e.g., DBG(cerr << "Bad program" << endl); ). Statements
    32  should not span lines unless they include `\'s to escape the newlines.
    33 
    34  jhrg 10/13/94
    35 */
    36 
    37 #ifndef _debug_h
    38 #define _debug_h
    39 
    40 #ifdef __cplusplus
    41 
    42 #include <iostream>
    43 using std::cerr;
    44 using std::string;
    45 using std::endl;
    46 #define FILE_N_LINE std::cerr << __FILE__ << ":" << __LINE__ << ": "
    47 
    48 #else
    49 
    50 #define FILE_N_LINE fprintf(stderr, "%s:%d: ", __FILE__, __LINE__);
    51 
    52 #endif /* cplusplus */
    53 
    54 #ifdef DODS_DEBUG
    55 #define DBG(x) FILE_N_LINE, x
    56 #define DBGN(x) x
    57 #else
    58 #define DBG(x) /* x */
    59 #define DBGN(x) /* x */
    60 #endif
    61 
    64 #ifdef DODS_DEBUG1
    65 #define DBG1(x) FILE_N_LINE, x
    66 #else
    67 #define DBG1(x) /* x */
    68 #endif
    69 
    70 #ifdef DODS_DEBUG2
    71 #define DBG2(x) FILE_N_LINE, x
    72 #define DBG2N(x) x
    73 #else
    74 #define DBG2(x) /* x */
    75 #define DBG2n(x) /* x */
    76 #endif
    77 
    78 #ifdef DODS_PERF
    79 #error "Deprecated macro!"
    80 #endif
    81 
    82 #endif /* _debug_h */
    -
    - - - - diff --git a/html/deprecated.html b/html/deprecated.html deleted file mode 100644 index 826f3136b..000000000 --- a/html/deprecated.html +++ /dev/null @@ -1,230 +0,0 @@ - - - - - - - -libdap: Deprecated List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    Deprecated List
    -
    -
    -
    -
    Module DDS_timeout
    -
    -
    Module DDS_timeout
    -
    -
    Member libdap::AlarmHandler::AlarmHandler (ostream &)
    -
    The stream param is ignored. Use the default constructor instead.
    -
    Member libdap::Array::clear_constraint ()
    -
    This should never be used.
    -
    Member libdap::Array::print_as_map_xml (ostream &out, string space=" ", bool constrained=false)
    -
    -
    Member libdap::Array::print_as_map_xml (FILE *out, string space=" ", bool constrained=false)
    -
    -
    Member libdap::Array::print_xml (ostream &out, string space=" ", bool constrained=false)
    -
    -
    Member libdap::Array::print_xml (FILE *out, string space=" ", bool constrained=false)
    -
    -
    Member libdap::Array::print_xml_core (FILE *out, string space, bool constrained, string tag)
    -
    -
    Member libdap::Array::print_xml_core (ostream &out, string space, bool constrained, string tag)
    -
    -
    Member libdap::Array::update_length (int size=0)
    -
    Calling this method should never be necessary. It is used internally called whenever the size of the Array is changed, e.g., by a constraint.
    -
    Member libdap::AttrTable::attr_alias (const string &alias, AttrTable *at, const string &name)
    -
    The current alias design is flawed. It is impossible to map this onto the XML implementation where the DAS and DDS information are combined in one object.
    -
    Member libdap::AttrTable::attr_alias (const string &alias, const string &name)
    -
    The current alias design is flawed. It is impossible to map this onto the XML implementation where the DAS and DDS information are combined in one object.
    -
    Member libdap::AttrTable::print_xml (FILE *out, string pad=" ", bool constrained=false)
    -
    -
    Member libdap::AttrTable::print_xml (ostream &out, string pad=" ", bool constrained=false)
    -
    -
    Member libdap::BaseType::buf2val (void **val)=0
    -
    Use value() in the leaf classes.
    -
    Member libdap::BaseType::print_xml (FILE *out, string space=" ", bool constrained=false)
    -
    -
    Member libdap::BaseType::print_xml (ostream &out, string space=" ", bool constrained=false)
    -
    -
    Member libdap::BaseType::val2buf (void *val, bool reuse=false)=0
    -
    Use set_value() in the leaf classes.
    -
    Member libdap::BaseType::var (const string &name, btp_stack &s)
    -
    This method is deprecated because it tries first to use exact_match and, if that fails, then tries leaf_match. It's better to use the alternate form of var(...) and specify exactly what you'd like to do.
    -
    Member libdap::Connect::get_version ()
    -
    -
    Member libdap::ConstraintEvaluator::eval_function (DDS &dds, const std::string &dataset)
    -
    -
    Member libdap::ConstraintEvaluator::functional_expression ()
    -
    -
    Member libdap::Constructor::print_xml (ostream &out, string space=" ", bool constrained=false)
    -
    -
    Member libdap::Constructor::print_xml (FILE *out, string space=" ", bool constrained=false)
    -
    -
    Member libdap::Constructor::var (const string &n, btp_stack &s)
    -

    -

    See comment in BaseType

    -

    See comment in BaseType

    -

    See comment in BaseType

    -

    See comment in BaseType

    -

    See comment in BaseType

    -

    See comment in BaseType

    -
    -
    Member libdap::D4Connect::get_version ()
    -
    -
    Member libdap::dap_version ()
    -
    -
    Member libdap::DDS::print_xml (ostream &out, bool constrained, const string &blob="")
    -
    -
    Member libdap::DDS::print_xml (FILE *out, bool constrained, const string &blob="")
    -
    -
    Member libdap::DDS::set_dap_major (int p)
    -

    -

    -

    -
    -
    Member libdap::DDS::set_dap_minor (int p)
    -

    -

    -

    -
    -
    Member libdap::DDS::set_dap_version (double d)
    -

    -

    -

    -
    -
    Member libdap::ErrMsgT (const string &Msgt)
    -
    -
    Member libdap::get_next_mime_header (FILE *in)
    -
    -
    Member libdap::get_type (const string &value)
    -
    -
    Member libdap::Grid::array_var ()
    -
    -
    Member libdap::Grid::print_xml (ostream &out, string space=" ", bool constrained=false)
    -
    -
    Member libdap::Grid::print_xml (FILE *out, string space=" ", bool constrained=false)
    -
    -
    Member libdap::RCReader::get_no_proxy_for_port () const
    -
    -
    Member libdap::RCReader::get_proxy_for_proxy_host_url () const
    -
    -
    Member libdap::RCReader::get_proxy_for_regexp () const
    -
    -
    Member libdap::RCReader::get_proxy_for_regexp_flags () const
    -
    -
    Member libdap::RCReader::get_proxy_server_host_url () const
    -
    -
    Member libdap::RCReader::is_proxy_for_used ()
    -
    -
    Member libdap::RCReader::set_no_proxy_for_port (int i)
    -
    -
    Member libdap::RCReader::set_proxy_for_proxy_host_url (const string &s)
    -
    -
    Member libdap::RCReader::set_proxy_for_regexp (const string &s)
    -
    -
    Member libdap::RCReader::set_proxy_for_regexp_flags (int i)
    -
    -
    Member libdap::RCReader::set_proxy_server_host_url (const string &s)
    -
    -
    Member libdap::remove_mime_header (FILE *in)
    -
    -
    Member libdap::set_mime_binary (FILE *out, ObjectType type, const string &ver, EncodingType enc, const time_t last_modified)
    -
    -
    Member libdap::set_mime_binary (ostream &strm, ObjectType type, const string &ver, EncodingType enc, const time_t last_modified)
    -
    -
    Member libdap::set_mime_error (ostream &strm, int code, const string &reason, const string &version)
    -
    -
    Member libdap::set_mime_error (FILE *out, int code, const string &reason, const string &version)
    -
    -
    Member libdap::set_mime_html (FILE *out, ObjectType type, const string &ver, EncodingType enc, const time_t last_modified)
    -
    -
    Member libdap::set_mime_html (ostream &strm, ObjectType type, const string &ver, EncodingType enc, const time_t last_modified)
    -
    -
    Member libdap::set_mime_not_modified (ostream &strm)
    -
    -
    Member libdap::set_mime_not_modified (FILE *out)
    -
    -
    Member libdap::set_mime_text (ostream &strm, ObjectType type, const string &ver, EncodingType enc, const time_t last_modified)
    -
    -
    Member libdap::set_mime_text (FILE *out, ObjectType type, const string &ver, EncodingType enc, const time_t last_modified)
    -
    -
    Module MIME utility functions
    -

    Use ResponseBuilder instead.

    -

    -
    -
    Module MIME utility functions
    -

    Use ResponseBuilder instead.

    -

    -
    -
    Module MIME utility functions
    -

    Use ResponseBuilder instead.

    -

    -
    -
    -
    -
    - - - - diff --git a/html/dir_030199a96d3a4056a0e2bc332dfd6de8.html b/html/dir_030199a96d3a4056a0e2bc332dfd6de8.html deleted file mode 100644 index 4f2662c49..000000000 --- a/html/dir_030199a96d3a4056a0e2bc332dfd6de8.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -libdap: d4_function Directory Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    d4_function Directory Reference
    -
    -
    -
    -
    - - - - diff --git a/html/dir_2bcd72cd0b092dad44d5d2bb06eea6c2.html b/html/dir_2bcd72cd0b092dad44d5d2bb06eea6c2.html deleted file mode 100644 index 0db2b3930..000000000 --- a/html/dir_2bcd72cd0b092dad44d5d2bb06eea6c2.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - -libdap: geo Directory Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    geo Directory Reference
    -
    -
    - - -

    -Directories

    -
    -
    - - - - diff --git a/html/dir_2d5e420d32f68fbdcd72803e1c025222.html b/html/dir_2d5e420d32f68fbdcd72803e1c025222.html deleted file mode 100644 index e4dc4de3b..000000000 --- a/html/dir_2d5e420d32f68fbdcd72803e1c025222.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -libdap: not_used Directory Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    not_used Directory Reference
    -
    -
    -
    -
    - - - - diff --git a/html/dir_60c1e009daff386049faf4e676bb6db8.html b/html/dir_60c1e009daff386049faf4e676bb6db8.html deleted file mode 100644 index 437b239b9..000000000 --- a/html/dir_60c1e009daff386049faf4e676bb6db8.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -libdap: conf Directory Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    conf Directory Reference
    -
    -
    -
    -
    - - - - diff --git a/html/dir_873b92a1b74e92f35ff36fce7b7e35b8.html b/html/dir_873b92a1b74e92f35ff36fce7b7e35b8.html deleted file mode 100644 index 370ab5ea2..000000000 --- a/html/dir_873b92a1b74e92f35ff36fce7b7e35b8.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -libdap: d4_ce Directory Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    d4_ce Directory Reference
    -
    -
    -
    -
    - - - - diff --git a/html/dir_ace0027695ef4a6e4945b7441cbb707a.html b/html/dir_ace0027695ef4a6e4945b7441cbb707a.html deleted file mode 100644 index c9aabb2ee..000000000 --- a/html/dir_ace0027695ef4a6e4945b7441cbb707a.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -libdap: GNU Directory Reference - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    GNU Directory Reference
    -
    -
    -
    -
    - - - - diff --git a/html/doc.png b/html/doc.png deleted file mode 100644 index 17edabff95f7b8da13c9516a04efe05493c29501..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t diff --git a/html/dods-datatypes-config_8h_source.html b/html/dods-datatypes-config_8h_source.html deleted file mode 100644 index d26b2303f..000000000 --- a/html/dods-datatypes-config_8h_source.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -libdap: dods-datatypes-config.h Source File - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    dods-datatypes-config.h
    -
    -
    -
    1 /* dods-datatypes-config.h. Generated from dods-datatypes-config.h.in by configure. */
    2 
    3 /*
    4  Determine at compile-time the sizes of various datatypes. This uses symbols
    5  defined by configure (See configure.in).
    6  jhrg 10/24/94
    7 
    8  This header is included by all of the DODS DAP library header files which
    9  make use of the dods_* typedefs. C or C++ files can either include
    10  config_dap.h, use their own configure script which defines SIZEOF_LONG,
    11  _INT, _CHAR and _DOUBLE or set these preprocessor symbols themselves in a
    12  Makefile, etc.
    13 
    14  This used to be part of the config_dap.h header, but including that in the
    15  DAP library headers introduced problems when the DAP was used in conjunction
    16  with other libraries. 8/1/2000 jhrg
    17 */
    18 
    19 #ifndef __DODS_DATATYPES__
    20 #define __DODS_DATATYPES__
    21 
    22 /* The typedefs are done using a preprocessor symbol so that autoconf's
    23  `CONFIG_HEADER' can be used. The configure script will then only modify
    24  the dods-datatypes.h header when its contents change. This saves on
    25  compilation since the header is used by many files in the dap++ library.
    26  The downside is that the typedefs are so ugly... 2/14/2001 jhrg */
    27 
    28 #define DINT32 int32_t
    29 typedef DINT32 dods_int32;
    30 
    31 #define DUINT32 uint32_t
    32 typedef DUINT32 dods_uint32;
    33 
    34 #define DINT16 int16_t
    35 typedef DINT16 dods_int16;
    36 
    37 #define DUINT16 uint16_t
    38 typedef DUINT16 dods_uint16;
    39 
    40 #define DBYTE uint8_t
    41 typedef DBYTE dods_byte;
    42 
    43 #define DFLOAT64 double
    44 typedef DFLOAT64 dods_float64;
    45 
    46 #define DFLOAT32 float
    47 typedef DFLOAT32 dods_float32;
    48 
    49 #define DINT8 int8_t
    50 typedef DINT8 dods_int8;
    51 
    52 #define DINT64 int64_t
    53 typedef DINT64 dods_int64;
    54 
    55 #define DUINT64 uint64_t
    56 typedef DUINT64 dods_uint64;
    57 
    58 /* Enums in DAP4 are 64-bit signed integers */
    59 typedef DINT64 dods_enum;
    60 
    61 #endif /* __DODS_DATATYPES__ */
    62 
    -
    - - - - diff --git a/html/dods-datatypes-static_8h_source.html b/html/dods-datatypes-static_8h_source.html deleted file mode 100644 index 1d4150962..000000000 --- a/html/dods-datatypes-static_8h_source.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - -libdap: dods-datatypes-static.h Source File - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    dods-datatypes-static.h
    -
    -
    -
    1 /*
    2  This header is used when the compile-time definitions won't work.
    3 */
    4 
    5 #ifndef __DODS_DATATYPES__
    6 #define __DODS_DATATYPES__
    7 
    8 #include <inttypes.h>
    9 
    10 namespace libdap
    11 {
    12 
    13 typedef int32_t dods_int32;
    14 
    15 typedef uint32_t dods_uint32;
    16 
    17 typedef int16_t dods_int16;
    18 
    19 typedef uint16_t dods_uint16;
    20 
    21 typedef uint8_t dods_byte;
    22 
    23 typedef double dods_float64;
    24 
    25 typedef float dods_float32;
    26 
    27 // Added for DAP4
    28 typedef int8_t dods_int8;
    29 
    30 typedef int64_t dods_int64;
    31 
    32 typedef uint64_t dods_uint64;
    33 
    34 typedef int64_t dods_enum;
    35 
    36 } // namespace libdap
    37 
    38 #endif /* __DODS_DATATYPES__ */
    top level DAP object to house generic methods
    Definition: AISConnect.cc:30
    -
    -
    - - - - diff --git a/html/dods-datatypes_8h_source.html b/html/dods-datatypes_8h_source.html deleted file mode 100644 index 371e52895..000000000 --- a/html/dods-datatypes_8h_source.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - -libdap: dods-datatypes.h Source File - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    dods-datatypes.h
    -
    -
    -
    1 /*
    2  This header is used when the compile-time definitions won't work.
    3 */
    4 
    5 #ifndef __DODS_DATATYPES__
    6 #define __DODS_DATATYPES__
    7 
    8 #include <inttypes.h>
    9 
    10 namespace libdap
    11 {
    12 
    13 typedef int32_t dods_int32;
    14 
    15 typedef uint32_t dods_uint32;
    16 
    17 typedef int16_t dods_int16;
    18 
    19 typedef uint16_t dods_uint16;
    20 
    21 typedef uint8_t dods_byte;
    22 
    23 typedef double dods_float64;
    24 
    25 typedef float dods_float32;
    26 
    27 // Added for DAP4
    28 typedef int8_t dods_int8;
    29 
    30 typedef int64_t dods_int64;
    31 
    32 typedef uint64_t dods_uint64;
    33 
    34 typedef int64_t dods_enum;
    35 
    36 } // namespace libdap
    37 
    38 #endif /* __DODS_DATATYPES__ */
    top level DAP object to house generic methods
    Definition: AISConnect.cc:30
    -
    -
    - - - - diff --git a/html/dods-limits_8h_source.html b/html/dods-limits_8h_source.html deleted file mode 100644 index 47d9f11cd..000000000 --- a/html/dods-limits_8h_source.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - -libdap: dods-limits.h Source File - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    dods-limits.h
    -
    -
    -
    1 
    2 // -*- mode: c++; c-basic-offset:4 -*-
    3 
    4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
    5 // Access Protocol.
    6 
    7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
    8 // Author: James Gallagher <jgallagher@opendap.org>
    9 //
    10 // This library is free software; you can redistribute it and/or
    11 // modify it under the terms of the GNU Lesser General Public
    12 // License as published by the Free Software Foundation; either
    13 // version 2.1 of the License, or (at your option) any later version.
    14 //
    15 // This library is distributed in the hope that it will be useful,
    16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
    17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    18 // Lesser General Public License for more details.
    19 //
    20 // You should have received a copy of the GNU Lesser General Public
    21 // License along with this library; if not, write to the Free Software
    22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    23 //
    24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
    25 
    26 // (c) COPYRIGHT URI/MIT 1996,1998,1999
    27 // Please read the full copyright statement in the file COPYRIGHT_URI.
    28 //
    29 // Authors:
    30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
    31 
    32 // Limits for DAP2. Use these *instead* of <limits.h> since DAP2 needs to see
    33 // the same values on all machines.
    34 
    35 #ifndef _dods_limits_h
    36 #define _dods_limits_h
    37 
    38 #if 0
    39 // The old values. I switched to hex notation when 64-bit ints were added
    40 // to DAP4.
    41 #define DODS_CHAR_BIT 8
    42 #define DODS_SCHAR_MIN -128
    43 #define DODS_SCHAR_MAX 127
    44 #define DODS_UCHAR_MAX 255U
    45 #define DODS_UCHAR_MIN 0
    46 
    47 #define DODS_SHRT_MIN -32768
    48 #define DODS_SHRT_MAX 32767
    49 #define DODS_USHRT_MAX 65535U
    50 
    51 #define DODS_INT_MIN -2147483648
    52 // was (-2147483647 - 1)
    53 #define DODS_INT_MAX 2147483647
    54 #define DODS_UINT_MAX 4294967295U
    55 
    56 #define DODS_LONG_MIN -2147483648
    57 // was (-2147483647 - 1)
    58 #define DODS_LONG_MAX 2147483647
    59 #define DODS_ULONG_MAX 4294967295UL
    60 #endif
    61 
    62 #define DODS_CHAR_BIT 8
    63 #define DODS_SCHAR_MIN (-0x7f-1)
    64 #define DODS_SCHAR_MAX 0x7f
    65 #define DODS_UCHAR_MAX 0xffU
    66 #define DODS_UCHAR_MIN 0
    67 
    68 #define DODS_SHRT_MIN (-0x7fff-1)
    69 #define DODS_SHRT_MAX 0x7fff
    70 #define DODS_USHRT_MAX 0xffffU
    71 
    72 #define DODS_INT_MIN (-0x7fffffff-1)
    73 #define DODS_INT_MAX 0x7fffffff
    74 #define DODS_UINT_MAX 0xffffffffUL
    75 
    76 #define DODS_LONG_MIN DODS_INT_MIN
    77 #define DODS_LONG_MAX DODS_INT_MAX
    78 #define DODS_ULONG_MAX DODS_UINT_MAX
    79 
    80 #define DODS_LLONG_MIN (-0x7fffffffffffffffLL-1)
    81 #define DODS_LLONG_MAX 0x7fffffffffffffffLL
    82 #define DODS_ULLONG_MAX 0xffffffffffffffffULL
    83 
    84 #define DODS_MAX_ARRAY_INDEX 0x1fffffffffffffffULL
    85 
    86 #define DODS_DBL_DIG 15 /* digits of precision of a "double" */
    87 #define DODS_DBL_MAX 1.7976931348623157E+308 /* max decimal value of a */
    88 /* "double" */
    89 #define DODS_DBL_MIN 2.2250738585072014E-308 /* min decimal value of a */
    90 /* "double" */
    91 #define DODS_FLT_DIG 6 /* digits of precision of a "float" */
    92 #define DODS_FLT_MAX 3.402823466E+38F /* max decimal value of a "float" */
    93 #define DODS_FLT_MIN 1.175494351E-38F /* min decimal value of a "float" */
    94 
    95 /* This constant should not be used. */
    96 #define DODS_MB_LEN_MAX 4
    97 
    98 #endif // _dods_limits_h
    -
    - - - - diff --git a/html/doxygen.css b/html/doxygen.css deleted file mode 100644 index 4f1ab9195..000000000 --- a/html/doxygen.css +++ /dev/null @@ -1,1596 +0,0 @@ -/* The standard CSS for doxygen 1.8.13 */ - -body, table, div, p, dl { - font: 400 14px/22px Roboto,sans-serif; -} - -p.reference, p.definition { - font: 400 14px/22px Roboto,sans-serif; -} - -/* @group Heading Levels */ - -h1.groupheader { - font-size: 150%; -} - -.title { - font: 400 14px/28px Roboto,sans-serif; - font-size: 150%; - font-weight: bold; - margin: 10px 2px; -} - -h2.groupheader { - border-bottom: 1px solid #879ECB; - color: #354C7B; - font-size: 150%; - font-weight: normal; - margin-top: 1.75em; - padding-top: 8px; - padding-bottom: 4px; - width: 100%; -} - -h3.groupheader { - font-size: 100%; -} - -h1, h2, h3, h4, h5, h6 { - -webkit-transition: text-shadow 0.5s linear; - -moz-transition: text-shadow 0.5s linear; - -ms-transition: text-shadow 0.5s linear; - -o-transition: text-shadow 0.5s linear; - transition: text-shadow 0.5s linear; - margin-right: 15px; -} - -h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { - text-shadow: 0 0 15px cyan; -} - -dt { - font-weight: bold; -} - -div.multicol { - -moz-column-gap: 1em; - -webkit-column-gap: 1em; - -moz-column-count: 3; - -webkit-column-count: 3; -} - -p.startli, p.startdd { - margin-top: 2px; -} - -p.starttd { - margin-top: 0px; -} - -p.endli { - margin-bottom: 0px; -} - -p.enddd { - margin-bottom: 4px; -} - -p.endtd { - margin-bottom: 2px; -} - -/* @end */ - -caption { - font-weight: bold; -} - -span.legend { - font-size: 70%; - text-align: center; -} - -h3.version { - font-size: 90%; - text-align: center; -} - -div.qindex, div.navtab{ - background-color: #EBEFF6; - border: 1px solid #A3B4D7; - text-align: center; -} - -div.qindex, div.navpath { - width: 100%; - line-height: 140%; -} - -div.navtab { - margin-right: 15px; -} - -/* @group Link Styling */ - -a { - color: #3D578C; - font-weight: normal; - text-decoration: none; -} - -.contents a:visited { - color: #4665A2; -} - -a:hover { - text-decoration: underline; -} - -a.qindex { - font-weight: bold; -} - -a.qindexHL { - font-weight: bold; - background-color: #9CAFD4; - color: #ffffff; - border: 1px double #869DCA; -} - -.contents a.qindexHL:visited { - color: #ffffff; -} - -a.el { - font-weight: bold; -} - -a.elRef { -} - -a.code, a.code:visited, a.line, a.line:visited { - color: #4665A2; -} - -a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { - color: #4665A2; -} - -/* @end */ - -dl.el { - margin-left: -1cm; -} - -pre.fragment { - border: 1px solid #C4CFE5; - background-color: #FBFCFD; - padding: 4px 6px; - margin: 4px 8px 4px 2px; - overflow: auto; - word-wrap: break-word; - font-size: 9pt; - line-height: 125%; - font-family: monospace, fixed; - font-size: 105%; -} - -div.fragment { - padding: 0px; - margin: 4px 8px 4px 2px; - background-color: #FBFCFD; - border: 1px solid #C4CFE5; -} - -div.line { - font-family: monospace, fixed; - font-size: 13px; - min-height: 13px; - line-height: 1.0; - text-wrap: unrestricted; - white-space: -moz-pre-wrap; /* Moz */ - white-space: -pre-wrap; /* Opera 4-6 */ - white-space: -o-pre-wrap; /* Opera 7 */ - white-space: pre-wrap; /* CSS3 */ - word-wrap: break-word; /* IE 5.5+ */ - text-indent: -53px; - padding-left: 53px; - padding-bottom: 0px; - margin: 0px; - -webkit-transition-property: background-color, box-shadow; - -webkit-transition-duration: 0.5s; - -moz-transition-property: background-color, box-shadow; - -moz-transition-duration: 0.5s; - -ms-transition-property: background-color, box-shadow; - -ms-transition-duration: 0.5s; - -o-transition-property: background-color, box-shadow; - -o-transition-duration: 0.5s; - transition-property: background-color, box-shadow; - transition-duration: 0.5s; -} - -div.line:after { - content:"\000A"; - white-space: pre; -} - -div.line.glow { - background-color: cyan; - box-shadow: 0 0 10px cyan; -} - - -span.lineno { - padding-right: 4px; - text-align: right; - border-right: 2px solid #0F0; - background-color: #E8E8E8; - white-space: pre; -} -span.lineno a { - background-color: #D8D8D8; -} - -span.lineno a:hover { - background-color: #C8C8C8; -} - -.lineno { - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -div.ah, span.ah { - background-color: black; - font-weight: bold; - color: #ffffff; - margin-bottom: 3px; - margin-top: 3px; - padding: 0.2em; - border: solid thin #333; - border-radius: 0.5em; - -webkit-border-radius: .5em; - -moz-border-radius: .5em; - box-shadow: 2px 2px 3px #999; - -webkit-box-shadow: 2px 2px 3px #999; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); - background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); -} - -div.classindex ul { - list-style: none; - padding-left: 0; -} - -div.classindex span.ai { - display: inline-block; -} - -div.groupHeader { - margin-left: 16px; - margin-top: 12px; - font-weight: bold; -} - -div.groupText { - margin-left: 16px; - font-style: italic; -} - -body { - background-color: white; - color: black; - margin: 0; -} - -div.contents { - margin-top: 10px; - margin-left: 12px; - margin-right: 8px; -} - -td.indexkey { - background-color: #EBEFF6; - font-weight: bold; - border: 1px solid #C4CFE5; - margin: 2px 0px 2px 0; - padding: 2px 10px; - white-space: nowrap; - vertical-align: top; -} - -td.indexvalue { - background-color: #EBEFF6; - border: 1px solid #C4CFE5; - padding: 2px 10px; - margin: 2px 0px; -} - -tr.memlist { - background-color: #EEF1F7; -} - -p.formulaDsp { - text-align: center; -} - -img.formulaDsp { - -} - -img.formulaInl { - vertical-align: middle; -} - -div.center { - text-align: center; - margin-top: 0px; - margin-bottom: 0px; - padding: 0px; -} - -div.center img { - border: 0px; -} - -address.footer { - text-align: right; - padding-right: 12px; -} - -img.footer { - border: 0px; - vertical-align: middle; -} - -/* @group Code Colorization */ - -span.keyword { - color: #008000 -} - -span.keywordtype { - color: #604020 -} - -span.keywordflow { - color: #e08000 -} - -span.comment { - color: #800000 -} - -span.preprocessor { - color: #806020 -} - -span.stringliteral { - color: #002080 -} - -span.charliteral { - color: #008080 -} - -span.vhdldigit { - color: #ff00ff -} - -span.vhdlchar { - color: #000000 -} - -span.vhdlkeyword { - color: #700070 -} - -span.vhdllogic { - color: #ff0000 -} - -blockquote { - background-color: #F7F8FB; - border-left: 2px solid #9CAFD4; - margin: 0 24px 0 4px; - padding: 0 12px 0 16px; -} - -/* @end */ - -/* -.search { - color: #003399; - font-weight: bold; -} - -form.search { - margin-bottom: 0px; - margin-top: 0px; -} - -input.search { - font-size: 75%; - color: #000080; - font-weight: normal; - background-color: #e8eef2; -} -*/ - -td.tiny { - font-size: 75%; -} - -.dirtab { - padding: 4px; - border-collapse: collapse; - border: 1px solid #A3B4D7; -} - -th.dirtab { - background: #EBEFF6; - font-weight: bold; -} - -hr { - height: 0px; - border: none; - border-top: 1px solid #4A6AAA; -} - -hr.footer { - height: 1px; -} - -/* @group Member Descriptions */ - -table.memberdecls { - border-spacing: 0px; - padding: 0px; -} - -.memberdecls td, .fieldtable tr { - -webkit-transition-property: background-color, box-shadow; - -webkit-transition-duration: 0.5s; - -moz-transition-property: background-color, box-shadow; - -moz-transition-duration: 0.5s; - -ms-transition-property: background-color, box-shadow; - -ms-transition-duration: 0.5s; - -o-transition-property: background-color, box-shadow; - -o-transition-duration: 0.5s; - transition-property: background-color, box-shadow; - transition-duration: 0.5s; -} - -.memberdecls td.glow, .fieldtable tr.glow { - background-color: cyan; - box-shadow: 0 0 15px cyan; -} - -.mdescLeft, .mdescRight, -.memItemLeft, .memItemRight, -.memTemplItemLeft, .memTemplItemRight, .memTemplParams { - background-color: #F9FAFC; - border: none; - margin: 4px; - padding: 1px 0 0 8px; -} - -.mdescLeft, .mdescRight { - padding: 0px 8px 4px 8px; - color: #555; -} - -.memSeparator { - border-bottom: 1px solid #DEE4F0; - line-height: 1px; - margin: 0px; - padding: 0px; -} - -.memItemLeft, .memTemplItemLeft { - white-space: nowrap; -} - -.memItemRight { - width: 100%; -} - -.memTemplParams { - color: #4665A2; - white-space: nowrap; - font-size: 80%; -} - -/* @end */ - -/* @group Member Details */ - -/* Styles for detailed member documentation */ - -.memtitle { - padding: 8px; - border-top: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - border-top-right-radius: 4px; - border-top-left-radius: 4px; - margin-bottom: -1px; - background-image: url('nav_f.png'); - background-repeat: repeat-x; - background-color: #E2E8F2; - line-height: 1.25; - font-weight: 300; - float:left; -} - -.permalink -{ - font-size: 65%; - display: inline-block; - vertical-align: middle; -} - -.memtemplate { - font-size: 80%; - color: #4665A2; - font-weight: normal; - margin-left: 9px; -} - -.memnav { - background-color: #EBEFF6; - border: 1px solid #A3B4D7; - text-align: center; - margin: 2px; - margin-right: 15px; - padding: 2px; -} - -.mempage { - width: 100%; -} - -.memitem { - padding: 0; - margin-bottom: 10px; - margin-right: 5px; - -webkit-transition: box-shadow 0.5s linear; - -moz-transition: box-shadow 0.5s linear; - -ms-transition: box-shadow 0.5s linear; - -o-transition: box-shadow 0.5s linear; - transition: box-shadow 0.5s linear; - display: table !important; - width: 100%; -} - -.memitem.glow { - box-shadow: 0 0 15px cyan; -} - -.memname { - font-weight: 400; - margin-left: 6px; -} - -.memname td { - vertical-align: bottom; -} - -.memproto, dl.reflist dt { - border-top: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - padding: 6px 0px 6px 0px; - color: #253555; - font-weight: bold; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - background-color: #DFE5F1; - /* opera specific markup */ - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - border-top-right-radius: 4px; - /* firefox specific markup */ - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - -moz-border-radius-topright: 4px; - /* webkit specific markup */ - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - -webkit-border-top-right-radius: 4px; - -} - -.overload { - font-family: "courier new",courier,monospace; - font-size: 65%; -} - -.memdoc, dl.reflist dd { - border-bottom: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - padding: 6px 10px 2px 10px; - background-color: #FBFCFD; - border-top-width: 0; - background-image:url('nav_g.png'); - background-repeat:repeat-x; - background-color: #FFFFFF; - /* opera specific markup */ - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - /* firefox specific markup */ - -moz-border-radius-bottomleft: 4px; - -moz-border-radius-bottomright: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - /* webkit specific markup */ - -webkit-border-bottom-left-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -} - -dl.reflist dt { - padding: 5px; -} - -dl.reflist dd { - margin: 0px 0px 10px 0px; - padding: 5px; -} - -.paramkey { - text-align: right; -} - -.paramtype { - white-space: nowrap; -} - -.paramname { - color: #602020; - white-space: nowrap; -} -.paramname em { - font-style: normal; -} -.paramname code { - line-height: 14px; -} - -.params, .retval, .exception, .tparams { - margin-left: 0px; - padding-left: 0px; -} - -.params .paramname, .retval .paramname { - font-weight: bold; - vertical-align: top; -} - -.params .paramtype { - font-style: italic; - vertical-align: top; -} - -.params .paramdir { - font-family: "courier new",courier,monospace; - vertical-align: top; -} - -table.mlabels { - border-spacing: 0px; -} - -td.mlabels-left { - width: 100%; - padding: 0px; -} - -td.mlabels-right { - vertical-align: bottom; - padding: 0px; - white-space: nowrap; -} - -span.mlabels { - margin-left: 8px; -} - -span.mlabel { - background-color: #728DC1; - border-top:1px solid #5373B4; - border-left:1px solid #5373B4; - border-right:1px solid #C4CFE5; - border-bottom:1px solid #C4CFE5; - text-shadow: none; - color: white; - margin-right: 4px; - padding: 2px 3px; - border-radius: 3px; - font-size: 7pt; - white-space: nowrap; - vertical-align: middle; -} - - - -/* @end */ - -/* these are for tree view inside a (index) page */ - -div.directory { - margin: 10px 0px; - border-top: 1px solid #9CAFD4; - border-bottom: 1px solid #9CAFD4; - width: 100%; -} - -.directory table { - border-collapse:collapse; -} - -.directory td { - margin: 0px; - padding: 0px; - vertical-align: top; -} - -.directory td.entry { - white-space: nowrap; - padding-right: 6px; - padding-top: 3px; -} - -.directory td.entry a { - outline:none; -} - -.directory td.entry a img { - border: none; -} - -.directory td.desc { - width: 100%; - padding-left: 6px; - padding-right: 6px; - padding-top: 3px; - border-left: 1px solid rgba(0,0,0,0.05); -} - -.directory tr.even { - padding-left: 6px; - background-color: #F7F8FB; -} - -.directory img { - vertical-align: -30%; -} - -.directory .levels { - white-space: nowrap; - width: 100%; - text-align: right; - font-size: 9pt; -} - -.directory .levels span { - cursor: pointer; - padding-left: 2px; - padding-right: 2px; - color: #3D578C; -} - -.arrow { - color: #9CAFD4; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - cursor: pointer; - font-size: 80%; - display: inline-block; - width: 16px; - height: 22px; -} - -.icon { - font-family: Arial, Helvetica; - font-weight: bold; - font-size: 12px; - height: 14px; - width: 16px; - display: inline-block; - background-color: #728DC1; - color: white; - text-align: center; - border-radius: 4px; - margin-left: 2px; - margin-right: 2px; -} - -.icona { - width: 24px; - height: 22px; - display: inline-block; -} - -.iconfopen { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('folderopen.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -.iconfclosed { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('folderclosed.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -.icondoc { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('doc.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -table.directory { - font: 400 14px Roboto,sans-serif; -} - -/* @end */ - -div.dynheader { - margin-top: 8px; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -address { - font-style: normal; - color: #2A3D61; -} - -table.doxtable caption { - caption-side: top; -} - -table.doxtable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.doxtable td, table.doxtable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -table.doxtable th { - background-color: #374F7F; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -table.fieldtable { - /*width: 100%;*/ - margin-bottom: 10px; - border: 1px solid #A8B8D9; - border-spacing: 0px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); - box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); -} - -.fieldtable td, .fieldtable th { - padding: 3px 7px 2px; -} - -.fieldtable td.fieldtype, .fieldtable td.fieldname { - white-space: nowrap; - border-right: 1px solid #A8B8D9; - border-bottom: 1px solid #A8B8D9; - vertical-align: top; -} - -.fieldtable td.fieldname { - padding-top: 3px; -} - -.fieldtable td.fielddoc { - border-bottom: 1px solid #A8B8D9; - /*width: 100%;*/ -} - -.fieldtable td.fielddoc p:first-child { - margin-top: 0px; -} - -.fieldtable td.fielddoc p:last-child { - margin-bottom: 2px; -} - -.fieldtable tr:last-child td { - border-bottom: none; -} - -.fieldtable th { - background-image:url('nav_f.png'); - background-repeat:repeat-x; - background-color: #E2E8F2; - font-size: 90%; - color: #253555; - padding-bottom: 4px; - padding-top: 5px; - text-align:left; - font-weight: 400; - -moz-border-radius-topleft: 4px; - -moz-border-radius-topright: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - border-bottom: 1px solid #A8B8D9; -} - - -.tabsearch { - top: 0px; - left: 10px; - height: 36px; - background-image: url('tab_b.png'); - z-index: 101; - overflow: hidden; - font-size: 13px; -} - -.navpath ul -{ - font-size: 11px; - background-image:url('tab_b.png'); - background-repeat:repeat-x; - background-position: 0 -5px; - height:30px; - line-height:30px; - color:#8AA0CC; - border:solid 1px #C2CDE4; - overflow:hidden; - margin:0px; - padding:0px; -} - -.navpath li -{ - list-style-type:none; - float:left; - padding-left:10px; - padding-right:15px; - background-image:url('bc_s.png'); - background-repeat:no-repeat; - background-position:right; - color:#364D7C; -} - -.navpath li.navelem a -{ - height:32px; - display:block; - text-decoration: none; - outline: none; - color: #283A5D; - font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - text-decoration: none; -} - -.navpath li.navelem a:hover -{ - color:#6884BD; -} - -.navpath li.footer -{ - list-style-type:none; - float:right; - padding-left:10px; - padding-right:15px; - background-image:none; - background-repeat:no-repeat; - background-position:right; - color:#364D7C; - font-size: 8pt; -} - - -div.summary -{ - float: right; - font-size: 8pt; - padding-right: 5px; - width: 50%; - text-align: right; -} - -div.summary a -{ - white-space: nowrap; -} - -table.classindex -{ - margin: 10px; - white-space: nowrap; - margin-left: 3%; - margin-right: 3%; - width: 94%; - border: 0; - border-spacing: 0; - padding: 0; -} - -div.ingroups -{ - font-size: 8pt; - width: 50%; - text-align: left; -} - -div.ingroups a -{ - white-space: nowrap; -} - -div.header -{ - background-image:url('nav_h.png'); - background-repeat:repeat-x; - background-color: #F9FAFC; - margin: 0px; - border-bottom: 1px solid #C4CFE5; -} - -div.headertitle -{ - padding: 5px 5px 5px 10px; -} - -dl -{ - padding: 0 0 0 10px; -} - -/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ -dl.section -{ - margin-left: 0px; - padding-left: 0px; -} - -dl.note -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #D0C000; -} - -dl.warning, dl.attention -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #FF0000; -} - -dl.pre, dl.post, dl.invariant -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #00D000; -} - -dl.deprecated -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #505050; -} - -dl.todo -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #00C0E0; -} - -dl.test -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #3030E0; -} - -dl.bug -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #C08050; -} - -dl.section dd { - margin-bottom: 6px; -} - - -#projectlogo -{ - text-align: center; - vertical-align: bottom; - border-collapse: separate; -} - -#projectlogo img -{ - border: 0px none; -} - -#projectalign -{ - vertical-align: middle; -} - -#projectname -{ - font: 300% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 2px 0px; -} - -#projectbrief -{ - font: 120% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#projectnumber -{ - font: 50% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#titlearea -{ - padding: 0px; - margin: 0px; - width: 100%; - border-bottom: 1px solid #5373B4; -} - -.image -{ - text-align: center; -} - -.dotgraph -{ - text-align: center; -} - -.mscgraph -{ - text-align: center; -} - -.plantumlgraph -{ - text-align: center; -} - -.diagraph -{ - text-align: center; -} - -.caption -{ - font-weight: bold; -} - -div.zoom -{ - border: 1px solid #90A5CE; -} - -dl.citelist { - margin-bottom:50px; -} - -dl.citelist dt { - color:#334975; - float:left; - font-weight:bold; - margin-right:10px; - padding:5px; -} - -dl.citelist dd { - margin:2px 0; - padding:5px 0; -} - -div.toc { - padding: 14px 25px; - background-color: #F4F6FA; - border: 1px solid #D8DFEE; - border-radius: 7px 7px 7px 7px; - float: right; - height: auto; - margin: 0 8px 10px 10px; - width: 200px; -} - -div.toc li { - background: url("bdwn.png") no-repeat scroll 0 5px transparent; - font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; - margin-top: 5px; - padding-left: 10px; - padding-top: 2px; -} - -div.toc h3 { - font: bold 12px/1.2 Arial,FreeSans,sans-serif; - color: #4665A2; - border-bottom: 0 none; - margin: 0; -} - -div.toc ul { - list-style: none outside none; - border: medium none; - padding: 0px; -} - -div.toc li.level1 { - margin-left: 0px; -} - -div.toc li.level2 { - margin-left: 15px; -} - -div.toc li.level3 { - margin-left: 30px; -} - -div.toc li.level4 { - margin-left: 45px; -} - -.inherit_header { - font-weight: bold; - color: gray; - cursor: pointer; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.inherit_header td { - padding: 6px 0px 2px 5px; -} - -.inherit { - display: none; -} - -tr.heading h2 { - margin-top: 12px; - margin-bottom: 4px; -} - -/* tooltip related style info */ - -.ttc { - position: absolute; - display: none; -} - -#powerTip { - cursor: default; - white-space: nowrap; - background-color: white; - border: 1px solid gray; - border-radius: 4px 4px 4px 4px; - box-shadow: 1px 1px 7px gray; - display: none; - font-size: smaller; - max-width: 80%; - opacity: 0.9; - padding: 1ex 1em 1em; - position: absolute; - z-index: 2147483647; -} - -#powerTip div.ttdoc { - color: grey; - font-style: italic; -} - -#powerTip div.ttname a { - font-weight: bold; -} - -#powerTip div.ttname { - font-weight: bold; -} - -#powerTip div.ttdeci { - color: #006318; -} - -#powerTip div { - margin: 0px; - padding: 0px; - font: 12px/16px Roboto,sans-serif; -} - -#powerTip:before, #powerTip:after { - content: ""; - position: absolute; - margin: 0px; -} - -#powerTip.n:after, #powerTip.n:before, -#powerTip.s:after, #powerTip.s:before, -#powerTip.w:after, #powerTip.w:before, -#powerTip.e:after, #powerTip.e:before, -#powerTip.ne:after, #powerTip.ne:before, -#powerTip.se:after, #powerTip.se:before, -#powerTip.nw:after, #powerTip.nw:before, -#powerTip.sw:after, #powerTip.sw:before { - border: solid transparent; - content: " "; - height: 0; - width: 0; - position: absolute; -} - -#powerTip.n:after, #powerTip.s:after, -#powerTip.w:after, #powerTip.e:after, -#powerTip.nw:after, #powerTip.ne:after, -#powerTip.sw:after, #powerTip.se:after { - border-color: rgba(255, 255, 255, 0); -} - -#powerTip.n:before, #powerTip.s:before, -#powerTip.w:before, #powerTip.e:before, -#powerTip.nw:before, #powerTip.ne:before, -#powerTip.sw:before, #powerTip.se:before { - border-color: rgba(128, 128, 128, 0); -} - -#powerTip.n:after, #powerTip.n:before, -#powerTip.ne:after, #powerTip.ne:before, -#powerTip.nw:after, #powerTip.nw:before { - top: 100%; -} - -#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { - border-top-color: #ffffff; - border-width: 10px; - margin: 0px -10px; -} -#powerTip.n:before { - border-top-color: #808080; - border-width: 11px; - margin: 0px -11px; -} -#powerTip.n:after, #powerTip.n:before { - left: 50%; -} - -#powerTip.nw:after, #powerTip.nw:before { - right: 14px; -} - -#powerTip.ne:after, #powerTip.ne:before { - left: 14px; -} - -#powerTip.s:after, #powerTip.s:before, -#powerTip.se:after, #powerTip.se:before, -#powerTip.sw:after, #powerTip.sw:before { - bottom: 100%; -} - -#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { - border-bottom-color: #ffffff; - border-width: 10px; - margin: 0px -10px; -} - -#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { - border-bottom-color: #808080; - border-width: 11px; - margin: 0px -11px; -} - -#powerTip.s:after, #powerTip.s:before { - left: 50%; -} - -#powerTip.sw:after, #powerTip.sw:before { - right: 14px; -} - -#powerTip.se:after, #powerTip.se:before { - left: 14px; -} - -#powerTip.e:after, #powerTip.e:before { - left: 100%; -} -#powerTip.e:after { - border-left-color: #ffffff; - border-width: 10px; - top: 50%; - margin-top: -10px; -} -#powerTip.e:before { - border-left-color: #808080; - border-width: 11px; - top: 50%; - margin-top: -11px; -} - -#powerTip.w:after, #powerTip.w:before { - right: 100%; -} -#powerTip.w:after { - border-right-color: #ffffff; - border-width: 10px; - top: 50%; - margin-top: -10px; -} -#powerTip.w:before { - border-right-color: #808080; - border-width: 11px; - top: 50%; - margin-top: -11px; -} - -@media print -{ - #top { display: none; } - #side-nav { display: none; } - #nav-path { display: none; } - body { overflow:visible; } - h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } - .summary { display: none; } - .memitem { page-break-inside: avoid; } - #doc-content - { - margin-left:0 !important; - height:auto !important; - width:auto !important; - overflow:inherit; - display:inline; - } -} - -/* @group Markdown */ - -/* -table.markdownTable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.markdownTable td, table.markdownTable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -table.markdownTableHead tr { -} - -table.markdownTableBodyLeft td, table.markdownTable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone { - background-color: #374F7F; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -th.markdownTableHeadLeft { - text-align: left -} - -th.markdownTableHeadRight { - text-align: right -} - -th.markdownTableHeadCenter { - text-align: center -} -*/ - -table.markdownTable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.markdownTable td, table.markdownTable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -table.markdownTable tr { -} - -th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { - background-color: #374F7F; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -th.markdownTableHeadLeft, td.markdownTableBodyLeft { - text-align: left -} - -th.markdownTableHeadRight, td.markdownTableBodyRight { - text-align: right -} - -th.markdownTableHeadCenter, td.markdownTableBodyCenter { - text-align: center -} - - -/* @end */ diff --git a/html/doxygen.png b/html/doxygen.png deleted file mode 100644 index 3ff17d807fd8aa003bed8bb2a69e8f0909592fd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3779 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 diff --git a/html/dynsections.js b/html/dynsections.js deleted file mode 100644 index 1e6bf07f9..000000000 --- a/html/dynsections.js +++ /dev/null @@ -1,104 +0,0 @@ -function toggleVisibility(linkObj) -{ - var base = $(linkObj).attr('id'); - var summary = $('#'+base+'-summary'); - var content = $('#'+base+'-content'); - var trigger = $('#'+base+'-trigger'); - var src=$(trigger).attr('src'); - if (content.is(':visible')===true) { - content.hide(); - summary.show(); - $(linkObj).addClass('closed').removeClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); - } else { - content.show(); - summary.hide(); - $(linkObj).removeClass('closed').addClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); - } - return false; -} - -function updateStripes() -{ - $('table.directory tr'). - removeClass('even').filter(':visible:even').addClass('even'); -} - -function toggleLevel(level) -{ - $('table.directory tr').each(function() { - var l = this.id.split('_').length-1; - var i = $('#img'+this.id.substring(3)); - var a = $('#arr'+this.id.substring(3)); - if (l - - - - - - -libdap: error-test.cc Source File - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    error-test.cc
    -
    -
    -
    1 
    2 // -*- mode: c++; c-basic-offset:4 -*-
    3 
    4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
    5 // Access Protocol.
    6 
    7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
    8 // Author: James Gallagher <jgallagher@opendap.org>
    9 //
    10 // This library is free software; you can redistribute it and/or
    11 // modify it under the terms of the GNU Lesser General Public
    12 // License as published by the Free Software Foundation; either
    13 // version 2.1 of the License, or (at your option) any later version.
    14 //
    15 // This library is distributed in the hope that it will be useful,
    16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
    17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    18 // Lesser General Public License for more details.
    19 //
    20 // You should have received a copy of the GNU Lesser General Public
    21 // License along with this library; if not, write to the Free Software
    22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    23 //
    24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
    25 
    26 // (c) COPYRIGHT URI/MIT 1996
    27 // Please read the full copyright statement in the file COPYRIGHT_URI.
    28 //
    29 // Authors:
    30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
    31 
    32 // Test the Error object scanner, parser and class.
    33 //
    34 // jhrg 4/25/96
    35 
    36 #include "config.h"
    37 
    38 static char rcsid[] not_used =
    39  {"$Id$"
    40  };
    41 
    42 #include <GetOpt.h>
    43 
    44 #include "Error.h"
    45 #include "parser.h"
    46 #include "Error.tab.hh"
    47 
    48 void test_scanner();
    49 void test_parser(Error &err);
    50 #ifdef GUI
    51 void test_object(Error &err);
    52 #endif
    53 void usage();
    54 
    55 int Errorlex();
    56 //int Errorparse(parser_arg *);
    57 
    58 extern YYSTYPE Errorlval;
    59 extern int Errordebug;
    60 const char *prompt = "error-test: ";
    61 
    62 #ifdef WIN32
    63 void
    64 #else
    65 int
    66 #endif
    67 main(int argc, char *argv[])
    68 {
    69 #ifdef WIN32
    70  GetOpt getopt(argc, argv, "spd");
    71 #else
    72  GetOpt getopt(argc, argv, "spdo");
    73 #endif
    74  int option_char;
    75  bool scanner_test = false, parser_test = false, object_test = false;
    76 
    77  // process options
    78 
    79  while ((option_char = getopt()) != EOF)
    80  switch (option_char) {
    81  case 'd':
    82  Errordebug = 1;
    83  break;
    84  case 's':
    85  scanner_test = true;
    86  break;
    87  case 'p':
    88  parser_test = true;
    89  break;
    90 #ifndef WIN32
    91  case 'o':
    92  parser_test = object_test = true;
    93  break;
    94 #endif
    95  case '?':
    96  default:
    97  usage();
    98  }
    99 
    100 #ifdef WIN32
    101  if (!(scanner_test || parser_test))
    102 #else
    103  if (!(scanner_test || parser_test || object_test))
    104 #endif
    105  usage();
    106 
    107  if (scanner_test)
    108  test_scanner();
    109 
    110  Error err;
    111  if (parser_test)
    112  test_parser(err);
    113 
    114 #ifdef GUI
    115  if (object_test)
    116  test_object(err);
    117 #endif
    118 
    119 #ifdef WIN32
    120  exit(0); // Cygwin/Dejagu test suites require this to succeed.
    121  return; // Visual C++ requires this.
    122 #endif
    123 }
    124 
    125 void
    126 usage()
    127 {
    128 #ifdef WIN32
    129  fprintf(stderr, "usage: error-test: [d][sp] < filename ...\n") ;
    130 #else
    131  fprintf(stderr, "usage: error-test: [d][spo] < filename ...\n") ;
    132 #endif
    133  fprintf(stderr, " d: extra parser debugging information\n") ;
    134  fprintf(stderr, " s: run the scanner\n") ;
    135  fprintf(stderr, " p: run the parser\n") ;
    136 #ifdef WIN32
    137  fprintf(stderr, " o: evaluate the object, runs the parser\n") ;
    138 #endif
    139 }
    140 
    141 void
    142 test_scanner()
    143 {
    144  int tok;
    145 
    146  fprintf(stdout, "%s", prompt) ; // first prompt
    147  fflush(stdout) ;
    148  while ((tok = Errorlex())) {
    149  switch (tok) {
    150  case SCAN_ERROR:
    151  fprintf(stdout, "ERROR\n") ;
    152  break;
    153  case SCAN_CODE:
    154  fprintf(stdout, "CODE\n") ;
    155  break;
    156  case SCAN_PTYPE:
    157  fprintf(stdout, "PTYPE\n") ;
    158  break;
    159  case SCAN_MSG:
    160  fprintf(stdout, "MSG\n") ;
    161  break;
    162  case SCAN_PROGRAM:
    163  fprintf(stdout, "PROGRAM\n") ;
    164  break;
    165  case SCAN_STR:
    166  fprintf(stdout, "%s\n", Errorlval.string) ;
    167  break;
    168  case SCAN_INT:
    169  fprintf(stdout, "%d\n", Errorlval.integer) ;
    170  break;
    171  case '{':
    172  fprintf(stdout, "Left Brace\n") ;
    173  break;
    174  case '}':
    175  fprintf(stdout, "Right Brace\n") ;
    176  break;
    177  case ';':
    178  fprintf(stdout, "Semicolon\n") ;
    179  break;
    180  case '=':
    181  fprintf(stdout, "Assignment\n") ;
    182  break;
    183  default:
    184  fprintf(stdout, "Error: Unrecognized input\n") ;
    185  }
    186  fprintf(stdout, "%s", prompt) ; // print prompt after output
    187  fflush(stdout) ;
    188  }
    189 }
    190 
    191 void
    192 test_parser(Error &err)
    193 {
    194  int status = err.parse(stdin);
    195  fprintf(stdout, "Status from parser: %d\n", status) ;
    196 
    197  if (err.OK())
    198  fprintf(stdout, "Error passed OK check\n") ;
    199  else
    200  fprintf(stdout, "Error failed OK check\n") ;
    201 
    202  err.print(stdout);
    203 }
    Definition: GetOpt.h:38
    -
    -
    - - - - diff --git a/html/escaping_8cc_source.html b/html/escaping_8cc_source.html deleted file mode 100644 index 70bfcb134..000000000 --- a/html/escaping_8cc_source.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - -libdap: escaping.cc Source File - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    escaping.cc
    -
    -
    -
    1 
    2 // -*- mode: c++; c-basic-offset:4 -*-
    3 
    4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
    5 // Access Protocol.
    6 
    7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
    8 // Author: James Gallagher <jgallagher@opendap.org>
    9 //
    10 // This library is free software; you can redistribute it and/or
    11 // modify it under the terms of the GNU Lesser General Public
    12 // License as published by the Free Software Foundation; either
    13 // version 2.1 of the License, or (at your option) any later version.
    14 //
    15 // This library is distributed in the hope that it will be useful,
    16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
    17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    18 // Lesser General Public License for more details.
    19 //
    20 // You should have received a copy of the GNU Lesser General Public
    21 // License along with this library; if not, write to the Free Software
    22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    23 //
    24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
    25 
    26 // Copyright (c) 1996, California Institute of Technology.
    27 // ALL RIGHTS RESERVED. U.S. Government Sponsorship acknowledged.
    28 //
    29 // Please read the full copyright notice in the file COPYRIGHT_URI
    30 // in this directory.
    31 //
    32 // Author: Todd Karakashian, NASA/Jet Propulsion Laboratory
    33 // Todd.K.Karakashian@jpl.nasa.gov
    34 //
    35 // $RCSfile: escaping.cc,v $ - Miscellaneous routines for OPeNDAP HDF server
    36 //
    37 // These two routines are for escaping/unescaping strings that are identifiers
    38 // in DAP2
    39 // id2www() -- escape (using WWW hex codes) non-allowable characters in a
    40 // DAP2 identifier
    41 // www2id() -- given an WWW hexcode escaped identifier, restore it
    42 //
    43 // These two routines are for escaping/unescaping strings storing attribute
    44 // values. They use traditional octal escapes (\nnn) because they are
    45 // intended to be viewed by a user
    46 // escattr() -- escape (using traditional octal backslash) non-allowable
    47 // characters in the value of a DAP2 attribute
    48 // unescattr() -- given an octally escaped string, restore it
    49 //
    50 // These are routines used by the above, not intended to be called directly:
    51 //
    52 // hexstring()
    53 // unhexstring()
    54 // octstring()
    55 // unoctstring()
    56 //
    57 // -Todd
    58 
    59 #include "config.h"
    60 
    61 #include <ctype.h>
    62 
    63 #include <iomanip>
    64 #include <string>
    65 #include <sstream>
    66 
    67 #include "GNURegex.h"
    68 #include "Error.h"
    69 #include "InternalErr.h"
    70 //#define DODS_DEBUG
    71 #include "debug.h"
    72 
    73 using namespace std;
    74 
    75 namespace libdap {
    76 
    77 // The next four functions were originally defined static, but I removed that
    78 // to make testing them (see generalUtilTest.cc) easier to write. 5/7/2001
    79 // jhrg
    80 
    81 string
    82 hexstring(unsigned char val)
    83 {
    84  ostringstream buf;
    85  buf << hex << setw(2) << setfill('0') << static_cast<unsigned int>(val);
    86 
    87  return buf.str();
    88 }
    89 
    90 string
    91 unhexstring(string s)
    92 {
    93  int val;
    94  istringstream ss(s);
    95  ss >> hex >> val;
    96  char tmp_str[2];
    97  tmp_str[0] = static_cast<char>(val);
    98  tmp_str[1] = '\0';
    99  return string(tmp_str);
    100 }
    101 
    102 string
    103 octstring(unsigned char val)
    104 {
    105  ostringstream buf;
    106  buf << oct << setw(3) << setfill('0')
    107  << static_cast<unsigned int>(val);
    108 
    109  return buf.str();
    110 }
    111 
    112 string
    113 unoctstring(string s)
    114 {
    115  int val;
    116 
    117  istringstream ss(s);
    118  ss >> oct >> val;
    119 
    120  DBG(cerr << "unoctstring: " << val << endl);
    121 
    122  char tmp_str[2];
    123  tmp_str[0] = static_cast<char>(val);
    124  tmp_str[1] = '\0';
    125  return string(tmp_str);
    126 }
    127 
    152 string
    153 id2www(string in, const string &allowable)
    154 {
    155  string::size_type i = 0;
    156  DBG(cerr<<"Input string: [" << in << "]" << endl);
    157  while ((i = in.find_first_not_of(allowable, i)) != string::npos) {
    158  DBG(cerr<<"Found escapee: [" << in[i] << "]");
    159  in.replace(i, 1, "%" + hexstring(in[i]));
    160  DBGN(cerr<<" now the string is: " << in << endl);
    161  i += 3;//i++;
    162  }
    163 
    164  return in;
    165 }
    166 
    177 string
    178 id2www_ce(string in, const string &allowable)
    179 {
    180  return id2www(in, allowable);
    181 
    182 
    183 }
    184 
    219 string
    220 www2id(const string &in, const string &escape, const string &except)
    221 {
    222  string::size_type i = 0;
    223  string res = in;
    224  while ((i = res.find_first_of(escape, i)) != string::npos) {
    225  if (except.find(res.substr(i, 3)) != string::npos) {
    226  i += 3;
    227  continue;
    228  }
    229  res.replace(i, 3, unhexstring(res.substr(i + 1, 2)));
    230  ++i;
    231  }
    232 
    233  return res;
    234 }
    235 
    236 static string
    237 entity(char c)
    238 {
    239  switch (c) {
    240  case '>': return "&gt;";
    241  case '<': return "&lt;";
    242  case '&': return "&amp;";
    243  case '\'': return "&apos;";
    244  case '\"': return "&quot;";
    245  default:
    246  throw InternalErr(__FILE__, __LINE__, "Unrecognized character.");
    247  }
    248 }
    249 
    250 // Assumption: There are always exactly two octal digits in the input
    251 // and two hex digits in the result.
    252 string
    253 octal_to_hex(const string &octal_digits)
    254 {
    255  int val;
    256 
    257  istringstream ss(octal_digits);
    258  ss >> oct >> val;
    259 
    260  ostringstream ds;
    261  ds << hex << setw(2) << setfill('0') << val;
    262  return ds.str();
    263 }
    264 
    271 string
    272 id2xml(string in, const string &not_allowed)
    273 {
    274  string::size_type i = 0;
    275 
    276  while ((i = in.find_first_of(not_allowed, i)) != string::npos) {
    277  in.replace(i, 1, entity(in[i]));
    278  ++i;
    279  }
    280 #if 0
    281  // Removed the encoding of octal escapes. This function is used by
    282  // AttrTable to encode the stuff that is the value of the <value>
    283  // element in the DDX. The problem is that some of the values are not
    284  // valid UTF-8 and that makes a XML parser gag.; ticket 1512.
    285  // jhrg 3/19/10
    286 
    287  // OK, now scan for octal escape sequences like \\012 (where the '\'
    288  // is itself escaped). This type of attribute value comes from the netCDF
    289  // handler and maybe others. Assumption: The '\' will always appear as
    290  // in its escaped form: '\\'. NB: Both backslashes must be escaped in the
    291  // C++ string.
    292  string octal_escape = "\\\\";
    293  i = 0;
    294  string::size_type length = in.length();
    295  while ((i = in.find(octal_escape, i)) != string::npos) {
    296  // Get the three octal digits following the '\\0'
    297  string::size_type j = i + 2;
    298  if (j + 1 >= length) // Check that we're not past the end
    299  break;
    300  string octal_digits = in.substr(j, 3);
    301  // convert to a &#xdd; XML escape
    302  string hex_escape = string("&#x");
    303  hex_escape.append(octal_to_hex(octal_digits));
    304  hex_escape.append(string(";"));
    305 
    306  // replace the octal escape with an XML/hex escape
    307  in.replace(i, 5, hex_escape);
    308 
    309  // increment i
    310  i += 6;
    311  }
    312 #endif
    313  return in;
    314 }
    315 
    321 string
    322 xml2id(string in)
    323 {
    324  string::size_type i = 0;
    325 
    326  while ((i = in.find("&gt;", i)) != string::npos)
    327  in.replace(i, 4, ">");
    328 
    329  i = 0;
    330  while ((i = in.find("&lt;", i)) != string::npos)
    331  in.replace(i, 4, "<");
    332 
    333  i = 0;
    334  while ((i = in.find("&amp;", i)) != string::npos)
    335  in.replace(i, 5, "&");
    336 
    337  i = 0;
    338  while ((i = in.find("&apos;", i)) != string::npos)
    339  in.replace(i, 6, "'");
    340 
    341  i = 0;
    342  while ((i = in.find("&quot;", i)) != string::npos)
    343  in.replace(i, 6, "\"");
    344 
    345  return in;
    346 }
    347 
    353 string
    354 esc2underscore(string s)
    355 {
    356  string::size_type pos;
    357  while ((pos = s.find('%')) != string::npos)
    358  s.replace(pos, 3, "_");
    359 
    360  return s;
    361 }
    362 
    363 
    367 string
    368 escattr(string s)
    369 {
    370  const string printable = " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789~`!@#$%^&*()_-+={[}]|\\:;<,>.?/'\"";
    371  const string ESC = "\\";
    372  const string DOUBLE_ESC = ESC + ESC;
    373  const string QUOTE = "\"";
    374  const string ESCQUOTE = ESC + QUOTE;
    375 
    376  // escape \ with a second backslash
    377  string::size_type ind = 0;
    378  while ((ind = s.find(ESC, ind)) != s.npos) {
    379  s.replace(ind, 1, DOUBLE_ESC);
    380  ind += DOUBLE_ESC.length();
    381  }
    382 
    383  // escape non-printing characters with octal escape
    384  ind = 0;
    385  while ((ind = s.find_first_not_of(printable, ind)) != s.npos)
    386  s.replace(ind, 1, ESC + octstring(s[ind]));
    387 
    388  // escape " with backslash
    389  ind = 0;
    390  while ((ind = s.find(QUOTE, ind)) != s.npos) {
    391  s.replace(ind, 1, ESCQUOTE);
    392  ind += ESCQUOTE.length();
    393  }
    394 
    395  return s;
    396 }
    397 
    406 string
    407 unescattr(string s)
    408 {
    409  Regex octal("\\\\[0-3][0-7][0-7]"); // matches 4 characters
    410  Regex esc_quote("\\\\\""); // matches 3 characters
    411  Regex esc_esc("\\\\\\\\"); // matches 2 characters
    412  const string ESC = "\\";
    413  const string QUOTE = "\"";
    414  int matchlen;
    415  unsigned int index;
    416 
    417  DBG(cerr << "0XX" << s << "XXX" << endl);
    418  // unescape any escaped backslashes
    419  index = esc_esc.search(s.c_str(), s.length(), matchlen, 0);
    420  while (index < s.length()) {
    421  DBG(cerr << "1aXX" << s << "XXX index: " << index << endl);
    422  s.replace(index, 2, ESC);
    423  DBG(cerr << "1bXX" << s << "XXX index: " << index << endl);
    424  index = esc_esc.search(s.c_str(), s.length(), matchlen, 0);
    425  }
    426 
    427  // unescape any escaped double quote characters
    428  index = esc_quote.search(s.c_str(), s.length(), matchlen, 0);
    429  while (index < s.length()) {
    430  s.replace(index, 2, QUOTE);
    431  DBG(cerr << "2XX" << s << "XXX index: " << index << endl);
    432  index = esc_quote.search(s.c_str(), s.length(), matchlen, 0);
    433  }
    434 
    435  // unescape octal characters
    436  index = octal.search(s.c_str(), s.length(), matchlen, 0);
    437  while (index < s.length()) {
    438  s.replace(index, 4, unoctstring(s.substr(index + 1, 3)));
    439  DBG(cerr << "3XX" << s << "XXX index: " << index << endl);
    440  index = octal.search(s.c_str(), s.length(), matchlen, 0);
    441  }
    442 
    443  DBG(cerr << "4XX" << s << "XXX" << endl);
    444  return s;
    445 }
    446 
    447 string
    448 munge_error_message(string msg)
    449 {
    450  // First, add enclosing quotes if needed.
    451  if (*msg.begin() != '"')
    452  msg.insert(msg.begin(), '"');
    453  if (*(msg.end() - 1) != '"')
    454  msg += "\"";
    455 
    456  // Now escape any internal double quotes that aren't escaped.
    457  string::iterator miter;
    458  for (miter = msg.begin() + 1; miter != msg.end() - 1; miter++)
    459  if (*miter == '"' && *(miter - 1) != '\\')
    460  miter = msg.insert(miter, '\\');
    461 
    462  return msg;
    463 }
    464 
    469 string
    470 escape_double_quotes(string source)
    471 {
    472  string::size_type idx = 0;
    473  while((idx = source.find('\"', idx)) != string::npos) {
    474  source.replace(idx, 1, "\\\""); // a backslash and a double quote
    475  idx += 2;
    476  }
    477 
    478  return source;
    479 }
    480 
    486 string
    488 {
    489  string::size_type idx = 0;
    490  while((idx = source.find("\\\"", idx)) != string::npos) {
    491  source.replace(idx, 2, "\""); // a backslash and a double quote
    492  ++idx;
    493  }
    494 
    495  return source;
    496 }
    497 
    498 } // namespace libdap
    499 
    string id2www_ce(string in, const string &allowable)
    Definition: escaping.cc:178
    -
    string id2xml(string in, const string &not_allowed)
    Definition: escaping.cc:272
    -
    int search(const char *s, int len, int &matchlen, int pos=0)
    How much of the string does the pattern match.
    Definition: GNURegex.cc:147
    -
    STL namespace.
    -
    string escape_double_quotes(string source)
    Definition: escaping.cc:470
    - -
    top level DAP object to house generic methods
    Definition: AISConnect.cc:30
    -
    A class for software fault reporting.
    Definition: InternalErr.h:64
    -
    string xml2id(string in)
    Definition: escaping.cc:322
    -
    string www2id(const string &in, const string &escape, const string &except)
    Definition: escaping.cc:220
    -
    string esc2underscore(string s)
    Definition: escaping.cc:354
    -
    string unescattr(string s)
    Definition: escaping.cc:407
    -
    string id2www(string in, const string &allowable)
    Definition: escaping.cc:153
    -
    string unescape_double_quotes(string source)
    Definition: escaping.cc:487
    -
    string escattr(string s)
    Definition: escaping.cc:368
    -
    -
    - - - - diff --git a/html/escaping_8h_source.html b/html/escaping_8h_source.html deleted file mode 100644 index f737df48f..000000000 --- a/html/escaping_8h_source.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - -libdap: escaping.h Source File - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    escaping.h
    -
    -
    -
    1 
    2 // -*- mode: c++; c-basic-offset:4 -*-
    3 
    4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
    5 // Access Protocol.
    6 
    7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
    8 // Author: James Gallagher <jgallagher@opendap.org>
    9 //
    10 // This library is free software; you can redistribute it and/or
    11 // modify it under the terms of the GNU Lesser General Public
    12 // License as published by the Free Software Foundation; either
    13 // version 2.1 of the License, or (at your option) any later version.
    14 //
    15 // This library is distributed in the hope that it will be useful,
    16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
    17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    18 // Lesser General Public License for more details.
    19 //
    20 // You should have received a copy of the GNU Lesser General Public
    21 // License along with this library; if not, write to the Free Software
    22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    23 //
    24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
    25 
    26 // (c) COPYRIGHT URI/MIT 1999
    27 // Please read the full copyright statement in the file COPYRIGHT_URI.
    28 //
    29 // Authors:
    30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
    31 
    32 // Declarations for identifier escaping and un-escaping functions.
    33 
    34 #ifndef _escaping_h
    35 #define _escaping_h
    36 
    37 #include <string>
    38 
    39 using std::string;
    40 
    41 namespace libdap
    42 {
    43 
    44 string hexstring(unsigned char val);
    45 string unhexstring(string s);
    46 string octstring(unsigned char val);
    47 string unoctstring(string s);
    48 
    49 // The original set of allowed characters was: [0-9a-zA-Z_%]
    50 // The characters accepted in DAP2 ids: [-+a-zA-Z0-9_/%.\\#*]; everything
    51 // else must be escaped. Note that for some inscrutable reason, we've been
    52 // escaping '*'.
    53 
    54 // The characters allowable in an id in a URI (see RFC 2396):
    55 // [-A-Za-z0-9_.!~*'()].
    56 
    57 string id2www(string s, const string &allowable = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-+_/.\\*");
    58 
    59 // This is what DAP2 allows in a ce: [-+a-zA-Z0-9_/%.\\#]
    60 string id2www_ce(string s, const string &allowable = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-+_/.\\");
    61 
    62 string www2id(const string &in, const string &escape = "%",
    63  const string &except = "");
    64 
    65 // Include these for compatibility with the old names. 7/19/2001 jhrg
    66 #define id2dods id2www
    67 #define dods2id www2id
    68 
    69 string octal_to_hex(const string &octal_digits);
    70 
    71 string id2xml(string in, const string &not_allowed = "><&'\"");
    72 string xml2id(string in);
    73 
    74 string esc2underscore(string s);
    75 string char2ASCII(string s, const string escape = "%[0-7][0-9a-fA-F]");
    76 string escattr(string s);
    77 string unescattr(string s);
    78 
    79 string munge_error_message(string msg);
    80 
    81 string unescape_double_quotes(string source);
    82 string escape_double_quotes(string source);
    83 
    84 } // namespace libdap
    85 
    86 #endif // _escaping_h
    87 
    string id2www_ce(string in, const string &allowable)
    Definition: escaping.cc:178
    -
    string id2xml(string in, const string &not_allowed)
    Definition: escaping.cc:272
    -
    string escape_double_quotes(string source)
    Definition: escaping.cc:470
    -
    top level DAP object to house generic methods
    Definition: AISConnect.cc:30
    -
    string xml2id(string in)
    Definition: escaping.cc:322
    -
    string www2id(const string &in, const string &escape, const string &except)
    Definition: escaping.cc:220
    -
    string esc2underscore(string s)
    Definition: escaping.cc:354
    -
    string unescattr(string s)
    Definition: escaping.cc:407
    -
    string id2www(string in, const string &allowable)
    Definition: escaping.cc:153
    -
    string unescape_double_quotes(string source)
    Definition: escaping.cc:487
    -
    string escattr(string s)
    Definition: escaping.cc:368
    -
    -
    - - - - diff --git a/html/fdiostream_8cc_source.html b/html/fdiostream_8cc_source.html deleted file mode 100644 index 6e897bd7a..000000000 --- a/html/fdiostream_8cc_source.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -libdap: fdiostream.cc Source File - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    fdiostream.cc
    -
    -
    -
    1 // -*- mode: c++; c-basic-offset:4 -*-
    2 
    3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
    4 // Access Protocol.
    5 
    6 // Copyright (c) 2009 OPeNDAP, Inc.
    7 // Author: James Gallagher <jgallagher@opendap.org>
    8 //
    9 // This library is free software; you can redistribute it and/or
    10 // modify it under the terms of the GNU Lesser General Public
    11 // License as published by the Free Software Foundation; either
    12 // version 2.1 of the License, or (at your option) any later version.
    13 //
    14 // This library is distributed in the hope that it will be useful,
    15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
    16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    17 // Lesser General Public License for more details.
    18 //
    19 // You should have received a copy of the GNU Lesser General Public
    20 // License along with this library; if not, write to the Free Software
    21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    22 //
    23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
    24 //
    25 // Portions of this code were taken verbatim from Josuttis,
    26 // "The C++ Standard Library," p.672
    27 
    28 #include "config.h"
    29 
    30 #include "fdiostream.h"
    31 #include <cstring> // for memcpy
    32 //#define DODS_DEBUG
    33 #include "debug.h"
    34 
    35 namespace libdap {
    36 
    43 fdoutbuf::fdoutbuf(int _fd, bool _close) :
    44  fd(_fd), close(_close)
    45 {
    46  setp(buffer, buffer + (bufferSize - 1));
    47 }
    48 
    52 {
    53  sync();
    54  if (close) ::close(fd);
    55 }
    56 
    57 // flush the characters in the buffer
    58 int fdoutbuf::flushBuffer()
    59 {
    60  int num = pptr() - pbase();
    61  if (write(1, buffer, num) != num) {
    62  return EOF;
    63  }
    64  pbump(-num);
    65  return num;
    66 }
    67 
    70 {
    71  if (c != EOF) {
    72  *pptr() = c;
    73  pbump(1);
    74  }
    75  // flush the buffer
    76  if (flushBuffer() == EOF) {
    77  //Error
    78  return EOF;
    79  }
    80 
    81  return c;
    82 }
    83 
    86 {
    87  if (flushBuffer() == EOF) {
    88  // Error
    89  return -1;
    90  }
    91  return 0;
    92 }
    93 
    95 std::streamsize fdoutbuf::xsputn(const char *s, std::streamsize num)
    96 {
    97  return write(fd, s, num);
    98 }
    99 
    100 /*
    101  How the buffer works for input streams:
    102 
    103  Initialized:
    104  eback() --\
    105  gptr() --|
    106  egptr() --|
    107  |
    108  ---------------------------
    109  | | | | | | | | | | | | | |
    110  ---------------------------
    111 
    112  After the first call to read, the buffer is filled:
    113  eback() --\
    114  gptr() --|
    115  | egptr() --|
    116  | |
    117  ---------------------------
    118  | | | | | | |h|a|l|l|o|w|e|
    119  ---------------------------
    120 
    121  After 'hallowe' is read from the stream, gptr() reaches egptr() and that
    122  triggers the second read, which first must shuffle the characters 'hallowe'
    123  to the 'put back' area of the buffer and then read more characters from the
    124  underlying input source (fle descriptor or FILE*).
    125 
    126  eback() --\
    127  | gptr() --|
    128  | |
    129  | |
    130  ---------------------------
    131  | | | | | | |h|a|l|l|o|w|e|
    132  ---------------------------
    133  |
    134  egptr() --|
    135 
    136  After each read, gptr() is advanced until it hits egptr, which triggers a
    137  read. However, before the read takes place, characters are moved into the
    138  put back part of the buffer. IE when a character is 'read' using the stream
    139  all the really happens is the gptr is advanced, the character is still in the
    140  buffer
    141 
    142  gptr() --|
    143  | egptr()
    144  /-eback() | |
    145  ---------------------------
    146  |h|a|l|l|o|w|e|e|n| |c|o|s|
    147  ---------------------------
    148 
    149  */
    150 
    157 fdinbuf::fdinbuf(int _fd, bool _close) :
    158  fd(_fd), close(_close)
    159 {
    160  setg(buffer + putBack, // beginning of put back area
    161  buffer + putBack, // read position
    162  buffer + putBack); // end position
    163 }
    164 
    167 {
    168  if (close) ::close(fd);
    169 }
    170 
    173 {
    174  if (gptr() < egptr()) {
    175  DBG(std::cerr << "underflow, no read" << std::endl);
    176  return *gptr();
    177  }
    178 
    179  // How many characters are in the 'put back' part of the buffer? Cap
    180  // this number at putBack, which is nominally 128.
    181  int numPutBack = gptr() - eback();
    182  if (numPutBack > putBack) numPutBack = putBack;
    183 
    184  // copy characters previously read into the put back area of the
    185  // buffer. In a typical call, putBack is 128 and numPutBack is 128 too.
    186  // In this case the destination of memcpy is the start of the buffer and
    187  // gptr() - numPutBack (the source of the copy) points to the last 128
    188  // characters in the buffer.
    189  memcpy(buffer + (putBack - numPutBack), gptr() - numPutBack, numPutBack);
    190 
    191  // read new characters
    192  int num = read(fd, buffer + putBack, bufferSize - putBack);
    193  DBG(std::cerr << "underflow, read returns: " << num << std::endl);
    194  if (num <= 0) {
    195  // Error or EOF; error < 0; EOF == 0
    196  return EOF;
    197  }
    198 
    199  setg(buffer + (putBack - numPutBack), // beginning of put back area
    200  buffer + putBack, // read position
    201  buffer + putBack + num); // end of buffer
    202 
    203  // return next character
    204 #ifdef DODS_DEBUG
    205  char c = *gptr();
    206  DBG(std::cerr << "returning :" << c << std::endl);
    207  return c;
    208 #else
    209  return *gptr();
    210 #endif
    211 }
    212 
    219 fpinbuf::fpinbuf(FILE *_fp, bool _close) :
    220  fp(_fp), close(_close)
    221 {
    222  setg(buffer + putBack, // beginning of put back area
    223  buffer + putBack, // read position
    224  buffer + putBack); // end position
    225 }
    226 
    229 {
    230  if (close) fclose(fp);
    231 }
    232 
    235 {
    236  if (gptr() < egptr()) {
    237  DBG(std::cerr << "underflow, no read" << std::endl);
    238  return *gptr();
    239  }
    240 
    241  // process size of putBack area
    242  // use the number of characters read, but a maximum of putBack
    243  int numPutBack = gptr() - eback();
    244  if (numPutBack > putBack) numPutBack = putBack;
    245 
    246  // copy characters previously read into the put back area of the
    247  // buffer.
    248  memcpy(buffer + (putBack - numPutBack), gptr() - numPutBack, numPutBack);
    249 
    250  // read new characters
    251  int num = fread(buffer + putBack, 1, bufferSize - putBack, fp);
    252  DBG(std::cerr << "underflow, read returns: " << num << std::endl);
    253  if (num == 0) {
    254  // Error or EOF; use feof() or ferror() to test
    255  return EOF;
    256  }
    257 
    258  setg(buffer + (putBack - numPutBack), // beginning of put back area
    259  buffer + putBack, // read position
    260  buffer + putBack + num); // end of buffer
    261 
    262  // return next character
    263  return *gptr();
    264 }
    265 
    266 }
    virtual ~fdinbuf()
    Definition: fdiostream.cc:166
    -
    virtual std::streamsize xsputn(const char *s, std::streamsize num)
    Definition: fdiostream.cc:95
    -
    virtual int overflow(int c)
    Definition: fdiostream.cc:69
    -
    virtual int underflow()
    Definition: fdiostream.cc:172
    -
    top level DAP object to house generic methods
    Definition: AISConnect.cc:30
    -
    virtual int sync()
    Definition: fdiostream.cc:85
    -
    fdoutbuf(int _fd, bool _close)
    Definition: fdiostream.cc:43
    -
    virtual int underflow()
    Definition: fdiostream.cc:234
    -
    virtual ~fpinbuf()
    Definition: fdiostream.cc:228
    -
    fpinbuf(FILE *_fp, bool _close)
    Definition: fdiostream.cc:219
    -
    virtual ~fdoutbuf()
    Definition: fdiostream.cc:51
    -
    fdinbuf(int _fd, bool close)
    Definition: fdiostream.cc:157
    -
    -
    - - - - diff --git a/html/fdiostream_8h_source.html b/html/fdiostream_8h_source.html deleted file mode 100644 index f58febf7c..000000000 --- a/html/fdiostream_8h_source.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - -libdap: fdiostream.h Source File - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    fdiostream.h
    -
    -
    -
    1 // -*- mode: c++; c-basic-offset:4 -*-
    2 
    3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
    4 // Access Protocol.
    5 
    6 // Copyright (c) 2009 OPeNDAP, Inc.
    7 // Author: James Gallagher <jgallagher@opendap.org>
    8 //
    9 // This library is free software; you can redistribute it and/or
    10 // modify it under the terms of the GNU Lesser General Public
    11 // License as published by the Free Software Foundation; either
    12 // version 2.1 of the License, or (at your option) any later version.
    13 //
    14 // This library is distributed in the hope that it will be useful,
    15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
    16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    17 // Lesser General Public License for more details.
    18 //
    19 // You should have received a copy of the GNU Lesser General Public
    20 // License along with this library; if not, write to the Free Software
    21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    22 //
    23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
    24 //
    25 // Portions of this code were taken verbatim from Josuttis,
    26 // "The C++ Standard Library," p.672
    27 
    28 #ifndef _fdiostream_h
    29 #define _fdiostream_h
    30 
    31 #ifdef HAVE_UNISTD_H
    32 #include <unistd.h>
    33 #endif
    34 
    35 #include <iostream>
    36 #include <streambuf>
    37 #include <algorithm>
    38 #include <cstdio>
    39 
    40 namespace libdap {
    41 
    50 class fdoutbuf: public std::streambuf {
    51 protected:
    52  int fd; // file descriptor
    53  bool close;
    54  static const int bufferSize = 4096; // Size of the data buffer
    55  char buffer[bufferSize]; // data buffer
    56 
    57 public:
    58  fdoutbuf(int _fd, bool _close);
    59  virtual ~fdoutbuf();
    60 
    61 protected:
    62  int flushBuffer();
    63 
    64  virtual int overflow(int c);
    65  virtual int sync();
    66  virtual std::streamsize xsputn(const char *s, std::streamsize num);
    67 };
    68 
    77 class fdostream: public std::ostream {
    78 protected:
    79  fdoutbuf buf;
    80 public:
    87  fdostream(int _fd, bool _close = false) :
    88  std::ostream(&buf), buf(_fd, _close)
    89  {
    90  }
    91 };
    92 
    101 class fdinbuf: public std::streambuf {
    102 protected:
    103  int fd; // file descriptor
    104  bool close;
    105  static const int bufferSize = 4096; // Size of the data buffer
    106  static const int putBack = 128;
    107  char buffer[bufferSize]; // data buffer
    108 
    109 public:
    110  fdinbuf(int _fd, bool close);
    111  virtual ~fdinbuf();
    112 
    113 protected:
    114  virtual int underflow();
    115 };
    116 
    126 class fdistream: public std::istream {
    127 protected:
    128  fdinbuf buf;
    129 public:
    130  fdistream(int fd, bool close = false) :
    131  std::istream(&buf), buf(fd, close)
    132  {
    133  }
    134 };
    135 
    144 class fpinbuf: public std::streambuf {
    145 protected:
    146  FILE *fp; // FILE *
    147  bool close;
    148  static const int bufferSize = 4096; // Size of the data buffer
    149  static const int putBack = 128;
    150  char buffer[bufferSize]; // data buffer
    151 
    152 public:
    153  fpinbuf(FILE *_fp, bool _close);
    154  virtual ~fpinbuf();
    155 
    156 protected:
    157  virtual int underflow();
    158 };
    159 
    170 class fpistream: public std::istream {
    171 protected:
    172  fpinbuf buf;
    173 public:
    174  fpistream(FILE *fp, bool close = false) :
    175  std::istream(&buf), buf(fp, close)
    176  {
    177  }
    178 };
    179 
    180 }
    181 
    182 #endif
    -
    virtual std::streamsize xsputn(const char *s, std::streamsize num)
    Definition: fdiostream.cc:95
    - -
    virtual int overflow(int c)
    Definition: fdiostream.cc:69
    -
    STL namespace.
    - -
    top level DAP object to house generic methods
    Definition: AISConnect.cc:30
    - - -
    virtual int sync()
    Definition: fdiostream.cc:85
    -
    fdostream(int _fd, bool _close=false)
    Definition: fdiostream.h:87
    -
    fdoutbuf(int _fd, bool _close)
    Definition: fdiostream.cc:43
    - -
    virtual ~fdoutbuf()
    Definition: fdiostream.cc:51
    -
    -
    - - - - diff --git a/html/files.html b/html/files.html deleted file mode 100644 index 971db145c..000000000 --- a/html/files.html +++ /dev/null @@ -1,315 +0,0 @@ - - - - - - - -libdap: File List - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    File List
    -
    -
    -
    Here is a list of all documented files with brief descriptions:
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     AISConnect.cc
     AISConnect.h
     AISDatabaseParser.cc
     AISDatabaseParser.h
     AISExceptions.h
     AISMerge.cc
     AISMerge.h
     AISResources.cc
     AISResources.h
     AlarmHandler.h
     Ancillary.cc
     Ancillary.h
     arg-nonnull.h
     Array.cc
     Array.h
     AttrTable.cc
     AttrTable.h
     BaseType.cc
     BaseType.h
     BaseTypeFactory.cc
     BaseTypeFactory.h
     Byte.cc
     Byte.h
     c++defs.h
     ce_parser.h
     cgi_util.h
     chunked_istream.cc
     chunked_istream.h
     chunked_ostream.cc
     chunked_ostream.h
     chunked_stream.h
     Clause.cc
     Clause.h
     config.h
     config_dap.h
     Connect.cc
     Connect.h
     ConstraintEvaluator.cc
     ConstraintEvaluator.h
     Constructor.cc
     Constructor.h
     crc.h
     D4AsyncUtil.cc
     D4AsyncUtil.h
     D4Attributes.cc
     D4Attributes.h
     D4AttributeType.h
     D4BaseTypeFactory.cc
     D4BaseTypeFactory.h
     D4CEScanner.h
     D4Connect.cc
     D4Connect.h
     D4ConstraintEvaluator.cc
     D4ConstraintEvaluator.h
     D4Dimensions.cc
     D4Dimensions.h
     D4Enum.cc
     D4Enum.h
     D4EnumDefs.cc
     D4EnumDefs.h
     D4FilterClause.cc
     D4FilterClause.h
     D4Function.h
     D4FunctionEvaluator.cc
     D4FunctionEvaluator.h
     D4FunctionScanner.h
     D4Group.cc
     D4Group.h
     D4Maps.cc
     D4Maps.h
     D4Opaque.cc
     D4Opaque.h
     D4ParseError.h
     D4ParserSax2.cc
     D4ParserSax2.h
     D4RValue.cc
     D4RValue.h
     D4Sequence.cc
     D4Sequence.h
     D4StreamMarshaller.cc
     D4StreamMarshaller.h
     D4StreamUnMarshaller.cc
     D4StreamUnMarshaller.h
     DAPCache3.cc
     DAPCache3.h
     DapIndent.cc
     DapIndent.h
     DapObj.h
     DapXmlNamespaces.cc
     DapXmlNamespaces.h
     DAS.cc
     DAS.h
     DataDDS.cc
     DataDDS.h
     DDS.cc
     DDS.h
     DDXExceptions.h
     DDXParserSAX2.cc
     DDXParserSAX2.h
     debug.h
     DMR.cc
     DMR.h
     dods-datatypes-config.h
     dods-datatypes-static.h
     dods-datatypes.h
     dods-limits.h
     DODSFilter.cc
     DODSFilter.h
     EncodingType.h
     error-test.cc
     Error.cc
     Error.h
     escaping.cc
     escaping.h
     EventHandler.h
     fdiostream.cc
     fdiostream.h
     Float32.cc
     Float32.h
     Float64.cc
     Float64.h
     GeoConstraint.cc
     GeoConstraint.h
     GeoGridFunction.cc
     GeoGridFunction.h
     getdap.cc
     getdap4.cc
     GetOpt.cc
     GetOpt.h
     GNURegex.cc
     GNURegex.h
     Grid.cc
     Grid.h
     grid_utils.cc
     grid_utils.h
     GridFunction.cc
     GridFunction.h
     GridGeoConstraint.cc
     GridGeoConstraint.h
     gse_parser.h
     GSEClause.cc
     GSEClause.h
     HTTPCache.cc
     HTTPCache.h
     HTTPCacheDisconnectedMode.h
     HTTPCacheInterruptHandler.h
     HTTPCacheMacros.h
     HTTPCacheResponse.h
     HTTPCacheTable.cc
     HTTPCacheTable.h
     HTTPConnect.cc
     HTTPConnect.h
     HTTPResponse.h
     Int16.cc
     Int16.h
     Int32.cc
     Int32.h
     Int64.cc
     Int64.h
     Int8.cc
     Int8.h
     InternalErr.cc
     InternalErr.h
     Keywords2.cc
     Keywords2.h
     main_page.doxygen
     Marshaller.h
     MarshallerThread.cc
     MarshallerThread.h
     media_types.h
     mime_util.cc
     mime_util.h
     ObjectType.h
     Operators.h
     parser-util.cc
     parser-util.h
     parser.h
     PipeResponse.h
     RCReader.cc
     RCReader.h
     regex_test.cc
     Resource.h
     Response.h
     ResponseTooBigErr.cc
     ResponseTooBigErr.h
     RValue.cc
     RValue.h
     Sequence.cc
     Sequence.h
     ServerFunction.cc
     ServerFunction.h
     ServerFunctionsList.cc
     ServerFunctionsList.h
     SignalHandler.cc
     SignalHandler.h
     SignalHandlerRegisteredErr.h
     StdinResponse.h
     Str.cc
     Str.h
     Structure.cc
     Structure.h
     Type.h
     UInt16.cc
     UInt16.h
     UInt32.cc
     UInt32.h
     UInt64.cc
     UInt64.h
     UnMarshaller.h
     Url.cc
     Url.h
     util.cc
     util.h
     util_mit.cc
     util_mit.h
     Vector.cc
     Vector.h
     warn-on-use.h
     xdr-datatypes-config.h
     xdr-datatypes-static.h
     xdr-datatypes.h
     XDRFileMarshaller.cc
     XDRFileMarshaller.h
     XDRFileUnMarshaller.cc
     XDRFileUnMarshaller.h
     XDRStreamMarshaller.cc
     XDRStreamMarshaller.h
     XDRStreamUnMarshaller.cc
     XDRStreamUnMarshaller.h
     XDRUtils.cc
     XDRUtils.h
     XMLWriter.cc
     XMLWriter.h
    -
    -
    -
    - - - - diff --git a/html/files.js b/html/files.js deleted file mode 100644 index 1e65628c6..000000000 --- a/html/files.js +++ /dev/null @@ -1,236 +0,0 @@ -var files = -[ - [ "AISConnect.cc", "AISConnect_8cc_source.html", null ], - [ "AISConnect.h", "AISConnect_8h_source.html", null ], - [ "AISDatabaseParser.cc", "AISDatabaseParser_8cc_source.html", null ], - [ "AISDatabaseParser.h", "AISDatabaseParser_8h_source.html", null ], - [ "AISExceptions.h", "AISExceptions_8h_source.html", null ], - [ "AISMerge.cc", "AISMerge_8cc_source.html", null ], - [ "AISMerge.h", "AISMerge_8h_source.html", null ], - [ "AISResources.cc", "AISResources_8cc_source.html", null ], - [ "AISResources.h", "AISResources_8h_source.html", null ], - [ "AlarmHandler.h", "AlarmHandler_8h_source.html", null ], - [ "Ancillary.cc", "Ancillary_8cc_source.html", null ], - [ "Ancillary.h", "Ancillary_8h_source.html", null ], - [ "arg-nonnull.h", "arg-nonnull_8h_source.html", null ], - [ "Array.cc", "Array_8cc_source.html", null ], - [ "Array.h", "Array_8h_source.html", null ], - [ "AttrTable.cc", "AttrTable_8cc_source.html", null ], - [ "AttrTable.h", "AttrTable_8h_source.html", null ], - [ "BaseType.cc", "BaseType_8cc_source.html", null ], - [ "BaseType.h", "BaseType_8h_source.html", null ], - [ "BaseTypeFactory.cc", "BaseTypeFactory_8cc_source.html", null ], - [ "BaseTypeFactory.h", "BaseTypeFactory_8h_source.html", null ], - [ "Byte.cc", "Byte_8cc_source.html", null ], - [ "Byte.h", "Byte_8h_source.html", null ], - [ "c++defs.h", "c_09_09defs_8h_source.html", null ], - [ "ce_parser.h", "ce__parser_8h_source.html", null ], - [ "cgi_util.h", "cgi__util_8h_source.html", null ], - [ "chunked_istream.cc", "chunked__istream_8cc_source.html", null ], - [ "chunked_istream.h", "chunked__istream_8h_source.html", null ], - [ "chunked_ostream.cc", "chunked__ostream_8cc_source.html", null ], - [ "chunked_ostream.h", "chunked__ostream_8h_source.html", null ], - [ "chunked_stream.h", "chunked__stream_8h_source.html", null ], - [ "Clause.cc", "Clause_8cc_source.html", null ], - [ "Clause.h", "Clause_8h_source.html", null ], - [ "config.h", "config_8h_source.html", null ], - [ "config_dap.h", "config__dap_8h_source.html", null ], - [ "Connect.cc", "Connect_8cc_source.html", null ], - [ "Connect.h", "Connect_8h_source.html", null ], - [ "ConstraintEvaluator.cc", "ConstraintEvaluator_8cc_source.html", null ], - [ "ConstraintEvaluator.h", "ConstraintEvaluator_8h_source.html", null ], - [ "Constructor.cc", "Constructor_8cc_source.html", null ], - [ "Constructor.h", "Constructor_8h_source.html", null ], - [ "crc.h", "crc_8h_source.html", null ], - [ "D4AsyncUtil.cc", "D4AsyncUtil_8cc_source.html", null ], - [ "D4AsyncUtil.h", "D4AsyncUtil_8h_source.html", null ], - [ "D4Attributes.cc", "D4Attributes_8cc_source.html", null ], - [ "D4Attributes.h", "D4Attributes_8h_source.html", null ], - [ "D4AttributeType.h", "D4AttributeType_8h_source.html", null ], - [ "D4BaseTypeFactory.cc", "D4BaseTypeFactory_8cc_source.html", null ], - [ "D4BaseTypeFactory.h", "D4BaseTypeFactory_8h_source.html", null ], - [ "D4CEScanner.h", "D4CEScanner_8h_source.html", null ], - [ "D4Connect.cc", "D4Connect_8cc_source.html", null ], - [ "D4Connect.h", "D4Connect_8h_source.html", null ], - [ "D4ConstraintEvaluator.cc", "D4ConstraintEvaluator_8cc_source.html", null ], - [ "D4ConstraintEvaluator.h", "D4ConstraintEvaluator_8h_source.html", null ], - [ "D4Dimensions.cc", "D4Dimensions_8cc_source.html", null ], - [ "D4Dimensions.h", "D4Dimensions_8h_source.html", null ], - [ "D4Enum.cc", "D4Enum_8cc_source.html", null ], - [ "D4Enum.h", "D4Enum_8h_source.html", null ], - [ "D4EnumDefs.cc", "D4EnumDefs_8cc_source.html", null ], - [ "D4EnumDefs.h", "D4EnumDefs_8h_source.html", null ], - [ "D4FilterClause.cc", "D4FilterClause_8cc_source.html", null ], - [ "D4FilterClause.h", "D4FilterClause_8h_source.html", null ], - [ "D4Function.h", "D4Function_8h_source.html", null ], - [ "D4FunctionEvaluator.cc", "D4FunctionEvaluator_8cc_source.html", null ], - [ "D4FunctionEvaluator.h", "D4FunctionEvaluator_8h_source.html", null ], - [ "D4FunctionScanner.h", "D4FunctionScanner_8h_source.html", null ], - [ "D4Group.cc", "D4Group_8cc_source.html", null ], - [ "D4Group.h", "D4Group_8h_source.html", null ], - [ "D4Maps.cc", "D4Maps_8cc_source.html", null ], - [ "D4Maps.h", "D4Maps_8h_source.html", null ], - [ "D4Opaque.cc", "D4Opaque_8cc_source.html", null ], - [ "D4Opaque.h", "D4Opaque_8h_source.html", null ], - [ "D4ParseError.h", "D4ParseError_8h_source.html", null ], - [ "D4ParserSax2.cc", "D4ParserSax2_8cc_source.html", null ], - [ "D4ParserSax2.h", "D4ParserSax2_8h_source.html", null ], - [ "D4RValue.cc", "D4RValue_8cc_source.html", null ], - [ "D4RValue.h", "D4RValue_8h_source.html", null ], - [ "D4Sequence.cc", "D4Sequence_8cc_source.html", null ], - [ "D4Sequence.h", "D4Sequence_8h_source.html", null ], - [ "D4StreamMarshaller.cc", "D4StreamMarshaller_8cc_source.html", null ], - [ "D4StreamMarshaller.h", "D4StreamMarshaller_8h_source.html", null ], - [ "D4StreamUnMarshaller.cc", "D4StreamUnMarshaller_8cc_source.html", null ], - [ "D4StreamUnMarshaller.h", "D4StreamUnMarshaller_8h_source.html", null ], - [ "DAPCache3.cc", "DAPCache3_8cc_source.html", null ], - [ "DAPCache3.h", "DAPCache3_8h_source.html", null ], - [ "DapIndent.cc", "DapIndent_8cc_source.html", null ], - [ "DapIndent.h", "DapIndent_8h_source.html", null ], - [ "DapObj.h", "DapObj_8h_source.html", null ], - [ "DapXmlNamespaces.cc", "DapXmlNamespaces_8cc_source.html", null ], - [ "DapXmlNamespaces.h", "DapXmlNamespaces_8h_source.html", null ], - [ "DAS.cc", "DAS_8cc_source.html", null ], - [ "DAS.h", "DAS_8h_source.html", null ], - [ "DataDDS.cc", "DataDDS_8cc_source.html", null ], - [ "DataDDS.h", "DataDDS_8h_source.html", null ], - [ "DDS.cc", "DDS_8cc_source.html", null ], - [ "DDS.h", "DDS_8h_source.html", null ], - [ "DDXExceptions.h", "DDXExceptions_8h_source.html", null ], - [ "DDXParserSAX2.cc", "DDXParserSAX2_8cc_source.html", null ], - [ "DDXParserSAX2.h", "DDXParserSAX2_8h_source.html", null ], - [ "debug.h", "debug_8h_source.html", null ], - [ "DMR.cc", "DMR_8cc_source.html", null ], - [ "DMR.h", "DMR_8h_source.html", null ], - [ "dods-datatypes-config.h", "dods-datatypes-config_8h_source.html", null ], - [ "dods-datatypes-static.h", "dods-datatypes-static_8h_source.html", null ], - [ "dods-datatypes.h", "dods-datatypes_8h_source.html", null ], - [ "dods-limits.h", "dods-limits_8h_source.html", null ], - [ "DODSFilter.cc", "DODSFilter_8cc_source.html", null ], - [ "DODSFilter.h", "DODSFilter_8h_source.html", null ], - [ "EncodingType.h", "EncodingType_8h_source.html", null ], - [ "error-test.cc", "error-test_8cc_source.html", null ], - [ "Error.cc", "Error_8cc_source.html", null ], - [ "Error.h", "Error_8h_source.html", null ], - [ "escaping.cc", "escaping_8cc_source.html", null ], - [ "escaping.h", "escaping_8h_source.html", null ], - [ "EventHandler.h", "EventHandler_8h_source.html", null ], - [ "fdiostream.cc", "fdiostream_8cc_source.html", null ], - [ "fdiostream.h", "fdiostream_8h_source.html", null ], - [ "Float32.cc", "Float32_8cc_source.html", null ], - [ "Float32.h", "Float32_8h_source.html", null ], - [ "Float64.cc", "Float64_8cc_source.html", null ], - [ "Float64.h", "Float64_8h_source.html", null ], - [ "GeoConstraint.cc", "GeoConstraint_8cc_source.html", null ], - [ "GeoConstraint.h", "GeoConstraint_8h_source.html", null ], - [ "GeoGridFunction.cc", "GeoGridFunction_8cc_source.html", null ], - [ "GeoGridFunction.h", "GeoGridFunction_8h_source.html", null ], - [ "getdap.cc", "getdap_8cc_source.html", null ], - [ "getdap4.cc", "getdap4_8cc_source.html", null ], - [ "GetOpt.cc", "GetOpt_8cc_source.html", null ], - [ "GetOpt.h", "GetOpt_8h_source.html", null ], - [ "GNURegex.cc", "GNURegex_8cc_source.html", null ], - [ "GNURegex.h", "GNURegex_8h_source.html", null ], - [ "Grid.cc", "Grid_8cc_source.html", null ], - [ "Grid.h", "Grid_8h_source.html", null ], - [ "grid_utils.cc", "grid__utils_8cc_source.html", null ], - [ "grid_utils.h", "grid__utils_8h_source.html", null ], - [ "GridFunction.cc", "GridFunction_8cc_source.html", null ], - [ "GridFunction.h", "GridFunction_8h_source.html", null ], - [ "GridGeoConstraint.cc", "GridGeoConstraint_8cc_source.html", null ], - [ "GridGeoConstraint.h", "GridGeoConstraint_8h_source.html", null ], - [ "gse_parser.h", "gse__parser_8h_source.html", null ], - [ "GSEClause.cc", "GSEClause_8cc_source.html", null ], - [ "GSEClause.h", "GSEClause_8h_source.html", null ], - [ "HTTPCache.cc", "HTTPCache_8cc_source.html", null ], - [ "HTTPCache.h", "HTTPCache_8h_source.html", null ], - [ "HTTPCacheDisconnectedMode.h", "HTTPCacheDisconnectedMode_8h_source.html", null ], - [ "HTTPCacheInterruptHandler.h", "HTTPCacheInterruptHandler_8h_source.html", null ], - [ "HTTPCacheMacros.h", "HTTPCacheMacros_8h_source.html", null ], - [ "HTTPCacheResponse.h", "HTTPCacheResponse_8h_source.html", null ], - [ "HTTPCacheTable.cc", "HTTPCacheTable_8cc_source.html", null ], - [ "HTTPCacheTable.h", "HTTPCacheTable_8h_source.html", null ], - [ "HTTPConnect.cc", "HTTPConnect_8cc_source.html", null ], - [ "HTTPConnect.h", "HTTPConnect_8h_source.html", null ], - [ "HTTPResponse.h", "HTTPResponse_8h_source.html", null ], - [ "Int16.cc", "Int16_8cc_source.html", null ], - [ "Int16.h", "Int16_8h_source.html", null ], - [ "Int32.cc", "Int32_8cc_source.html", null ], - [ "Int32.h", "Int32_8h_source.html", null ], - [ "Int64.cc", "Int64_8cc_source.html", null ], - [ "Int64.h", "Int64_8h_source.html", null ], - [ "Int8.cc", "Int8_8cc_source.html", null ], - [ "Int8.h", "Int8_8h_source.html", null ], - [ "InternalErr.cc", "InternalErr_8cc_source.html", null ], - [ "InternalErr.h", "InternalErr_8h_source.html", null ], - [ "Keywords2.cc", "Keywords2_8cc_source.html", null ], - [ "Keywords2.h", "Keywords2_8h_source.html", null ], - [ "main_page.doxygen", "main__page_8doxygen_source.html", null ], - [ "Marshaller.h", "Marshaller_8h_source.html", null ], - [ "MarshallerThread.cc", "MarshallerThread_8cc_source.html", null ], - [ "MarshallerThread.h", "MarshallerThread_8h_source.html", null ], - [ "media_types.h", "media__types_8h_source.html", null ], - [ "mime_util.cc", "mime__util_8cc_source.html", null ], - [ "mime_util.h", "mime__util_8h_source.html", null ], - [ "ObjectType.h", "ObjectType_8h_source.html", null ], - [ "Operators.h", "Operators_8h_source.html", null ], - [ "parser-util.cc", "parser-util_8cc_source.html", null ], - [ "parser-util.h", "parser-util_8h_source.html", null ], - [ "parser.h", "parser_8h_source.html", null ], - [ "PipeResponse.h", "PipeResponse_8h_source.html", null ], - [ "RCReader.cc", "RCReader_8cc_source.html", null ], - [ "RCReader.h", "RCReader_8h_source.html", null ], - [ "regex_test.cc", "regex__test_8cc_source.html", null ], - [ "Resource.h", "Resource_8h_source.html", null ], - [ "Response.h", "Response_8h_source.html", null ], - [ "ResponseTooBigErr.cc", "ResponseTooBigErr_8cc_source.html", null ], - [ "ResponseTooBigErr.h", "ResponseTooBigErr_8h_source.html", null ], - [ "RValue.cc", "RValue_8cc_source.html", null ], - [ "RValue.h", "RValue_8h_source.html", null ], - [ "Sequence.cc", "Sequence_8cc_source.html", null ], - [ "Sequence.h", "Sequence_8h_source.html", null ], - [ "ServerFunction.cc", "ServerFunction_8cc_source.html", null ], - [ "ServerFunction.h", "ServerFunction_8h_source.html", null ], - [ "ServerFunctionsList.cc", "ServerFunctionsList_8cc_source.html", null ], - [ "ServerFunctionsList.h", "ServerFunctionsList_8h_source.html", null ], - [ "SignalHandler.cc", "SignalHandler_8cc_source.html", null ], - [ "SignalHandler.h", "SignalHandler_8h_source.html", null ], - [ "SignalHandlerRegisteredErr.h", "SignalHandlerRegisteredErr_8h_source.html", null ], - [ "StdinResponse.h", "StdinResponse_8h_source.html", null ], - [ "Str.cc", "Str_8cc_source.html", null ], - [ "Str.h", "Str_8h_source.html", null ], - [ "Structure.cc", "Structure_8cc_source.html", null ], - [ "Structure.h", "Structure_8h_source.html", null ], - [ "Type.h", "Type_8h_source.html", null ], - [ "UInt16.cc", "UInt16_8cc_source.html", null ], - [ "UInt16.h", "UInt16_8h_source.html", null ], - [ "UInt32.cc", "UInt32_8cc_source.html", null ], - [ "UInt32.h", "UInt32_8h_source.html", null ], - [ "UInt64.cc", "UInt64_8cc_source.html", null ], - [ "UInt64.h", "UInt64_8h_source.html", null ], - [ "UnMarshaller.h", "UnMarshaller_8h_source.html", null ], - [ "Url.cc", "Url_8cc_source.html", null ], - [ "Url.h", "Url_8h_source.html", null ], - [ "util.cc", "util_8cc_source.html", null ], - [ "util.h", "util_8h_source.html", null ], - [ "util_mit.cc", "util__mit_8cc_source.html", null ], - [ "util_mit.h", "util__mit_8h_source.html", null ], - [ "Vector.cc", "Vector_8cc_source.html", null ], - [ "Vector.h", "Vector_8h_source.html", null ], - [ "warn-on-use.h", "warn-on-use_8h_source.html", null ], - [ "xdr-datatypes-config.h", "xdr-datatypes-config_8h_source.html", null ], - [ "xdr-datatypes-static.h", "xdr-datatypes-static_8h_source.html", null ], - [ "xdr-datatypes.h", "xdr-datatypes_8h_source.html", null ], - [ "XDRFileMarshaller.cc", "XDRFileMarshaller_8cc_source.html", null ], - [ "XDRFileMarshaller.h", "XDRFileMarshaller_8h_source.html", null ], - [ "XDRFileUnMarshaller.cc", "XDRFileUnMarshaller_8cc_source.html", null ], - [ "XDRFileUnMarshaller.h", "XDRFileUnMarshaller_8h_source.html", null ], - [ "XDRStreamMarshaller.cc", "XDRStreamMarshaller_8cc_source.html", null ], - [ "XDRStreamMarshaller.h", "XDRStreamMarshaller_8h_source.html", null ], - [ "XDRStreamUnMarshaller.cc", "XDRStreamUnMarshaller_8cc_source.html", null ], - [ "XDRStreamUnMarshaller.h", "XDRStreamUnMarshaller_8h_source.html", null ], - [ "XDRUtils.cc", "XDRUtils_8cc_source.html", null ], - [ "XDRUtils.h", "XDRUtils_8h_source.html", null ], - [ "XMLWriter.cc", "XMLWriter_8cc_source.html", null ], - [ "XMLWriter.h", "XMLWriter_8h_source.html", null ] -]; \ No newline at end of file diff --git a/html/folderclosed.png b/html/folderclosed.png deleted file mode 100644 index bb8ab35edce8e97554e360005ee9fc5bffb36e66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 616 zcmV-u0+;=XP)a9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA diff --git a/html/functions.html b/html/functions.html deleted file mode 100644 index 5df0a271d..000000000 --- a/html/functions.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - - -libdap: Class Members - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - a -

    -
    -
    - - - - diff --git a/html/functions_0x7e.html b/html/functions_0x7e.html deleted file mode 100644 index 1c43482d8..000000000 --- a/html/functions_0x7e.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - -libdap: Class Members - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - ~ -

    -
    -
    - - - - diff --git a/html/functions_b.html b/html/functions_b.html deleted file mode 100644 index 2b6dfca1e..000000000 --- a/html/functions_b.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - -libdap: Class Members - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - b -

    -
    -
    - - - - diff --git a/html/functions_c.html b/html/functions_c.html deleted file mode 100644 index a959a5ede..000000000 --- a/html/functions_c.html +++ /dev/null @@ -1,212 +0,0 @@ - - - - - - - -libdap: Class Members - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - c -

    -
    -
    - - - - diff --git a/html/functions_d.html b/html/functions_d.html deleted file mode 100644 index c1bc17832..000000000 --- a/html/functions_d.html +++ /dev/null @@ -1,283 +0,0 @@ - - - - - - - -libdap: Class Members - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - d -

    -
    -
    - - - - diff --git a/html/functions_dup.js b/html/functions_dup.js deleted file mode 100644 index 45701afa5..000000000 --- a/html/functions_dup.js +++ /dev/null @@ -1,25 +0,0 @@ -var functions_dup = -[ - [ "a", "functions.html", null ], - [ "b", "functions_b.html", null ], - [ "c", "functions_c.html", null ], - [ "d", "functions_d.html", null ], - [ "e", "functions_e.html", null ], - [ "f", "functions_f.html", null ], - [ "g", "functions_g.html", null ], - [ "h", "functions_h.html", null ], - [ "i", "functions_i.html", null ], - [ "l", "functions_l.html", null ], - [ "m", "functions_m.html", null ], - [ "n", "functions_n.html", null ], - [ "o", "functions_o.html", null ], - [ "p", "functions_p.html", null ], - [ "r", "functions_r.html", null ], - [ "s", "functions_s.html", null ], - [ "t", "functions_t.html", null ], - [ "u", "functions_u.html", null ], - [ "v", "functions_v.html", null ], - [ "w", "functions_w.html", null ], - [ "x", "functions_x.html", null ], - [ "~", "functions_0x7e.html", null ] -]; \ No newline at end of file diff --git a/html/functions_e.html b/html/functions_e.html deleted file mode 100644 index da0af674c..000000000 --- a/html/functions_e.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - -libdap: Class Members - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - e -

    -
    -
    - - - - diff --git a/html/functions_enum.html b/html/functions_enum.html deleted file mode 100644 index ecd199543..000000000 --- a/html/functions_enum.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -libdap: Class Members - Enumerations - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    - - - - diff --git a/html/functions_f.html b/html/functions_f.html deleted file mode 100644 index 675964c06..000000000 --- a/html/functions_f.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - -libdap: Class Members - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - f -

    -
    -
    - - - - diff --git a/html/functions_func.html b/html/functions_func.html deleted file mode 100644 index 51f062ec7..000000000 --- a/html/functions_func.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - - -libdap: Class Members - Functions - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -  - -

    - a -

    -
    -
    - - - - diff --git a/html/functions_func.js b/html/functions_func.js deleted file mode 100644 index 9f0d001fc..000000000 --- a/html/functions_func.js +++ /dev/null @@ -1,25 +0,0 @@ -var functions_func = -[ - [ "a", "functions_func.html", null ], - [ "b", "functions_func_b.html", null ], - [ "c", "functions_func_c.html", null ], - [ "d", "functions_func_d.html", null ], - [ "e", "functions_func_e.html", null ], - [ "f", "functions_func_f.html", null ], - [ "g", "functions_func_g.html", null ], - [ "h", "functions_func_h.html", null ], - [ "i", "functions_func_i.html", null ], - [ "l", "functions_func_l.html", null ], - [ "m", "functions_func_m.html", null ], - [ "n", "functions_func_n.html", null ], - [ "o", "functions_func_o.html", null ], - [ "p", "functions_func_p.html", null ], - [ "r", "functions_func_r.html", null ], - [ "s", "functions_func_s.html", null ], - [ "t", "functions_func_t.html", null ], - [ "u", "functions_func_u.html", null ], - [ "v", "functions_func_v.html", null ], - [ "w", "functions_func_w.html", null ], - [ "x", "functions_func_x.html", null ], - [ "~", "functions_func_0x7e.html", null ] -]; \ No newline at end of file diff --git a/html/functions_func_0x7e.html b/html/functions_func_0x7e.html deleted file mode 100644 index 713383423..000000000 --- a/html/functions_func_0x7e.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - -libdap: Class Members - Functions - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -  - -

    - ~ -

    -
    -
    - - - - diff --git a/html/functions_func_b.html b/html/functions_func_b.html deleted file mode 100644 index c03b3edc6..000000000 --- a/html/functions_func_b.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - -libdap: Class Members - Functions - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -  - -

    - b -

    -
    -
    - - - - diff --git a/html/functions_func_c.html b/html/functions_func_c.html deleted file mode 100644 index 3d482f8dd..000000000 --- a/html/functions_func_c.html +++ /dev/null @@ -1,209 +0,0 @@ - - - - - - - -libdap: Class Members - Functions - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -  - -

    - c -

    -
    -
    - - - - diff --git a/html/functions_func_d.html b/html/functions_func_d.html deleted file mode 100644 index a4510cff5..000000000 --- a/html/functions_func_d.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - - - -libdap: Class Members - Functions - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -  - -

    - d -

    -
    -
    - - - - diff --git a/html/functions_func_e.html b/html/functions_func_e.html deleted file mode 100644 index ef1952a7e..000000000 --- a/html/functions_func_e.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - -libdap: Class Members - Functions - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -  - -

    - e -

    -
    -
    - - - - diff --git a/html/functions_func_f.html b/html/functions_func_f.html deleted file mode 100644 index c2c1c1785..000000000 --- a/html/functions_func_f.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - -libdap: Class Members - Functions - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -  - -

    - f -

    -
    -
    - - - - diff --git a/html/functions_func_g.html b/html/functions_func_g.html deleted file mode 100644 index 691b62ee3..000000000 --- a/html/functions_func_g.html +++ /dev/null @@ -1,414 +0,0 @@ - - - - - - - -libdap: Class Members - Functions - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -  - -

    - g -

    -
    -
    - - - - diff --git a/html/functions_func_h.html b/html/functions_func_h.html deleted file mode 100644 index 1f5b87676..000000000 --- a/html/functions_func_h.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - -libdap: Class Members - Functions - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -  - -

    - h -

    -
    -
    - - - - diff --git a/html/functions_func_i.html b/html/functions_func_i.html deleted file mode 100644 index 0f6b8f125..000000000 --- a/html/functions_func_i.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - -libdap: Class Members - Functions - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -  - -

    - i -

    -
    -
    - - - - diff --git a/html/functions_func_l.html b/html/functions_func_l.html deleted file mode 100644 index 2caf1f280..000000000 --- a/html/functions_func_l.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - -libdap: Class Members - Functions - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -  - -

    - l -

    -
    -
    - - - - diff --git a/html/functions_func_m.html b/html/functions_func_m.html deleted file mode 100644 index 2ffb54c36..000000000 --- a/html/functions_func_m.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - -libdap: Class Members - Functions - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -  - -

    - m -

    -
    -
    - - - - diff --git a/html/functions_func_n.html b/html/functions_func_n.html deleted file mode 100644 index a4a7b5356..000000000 --- a/html/functions_func_n.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - -libdap: Class Members - Functions - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -  - -

    - n -

    -
    -
    - - - - diff --git a/html/functions_func_o.html b/html/functions_func_o.html deleted file mode 100644 index aa0651ae8..000000000 --- a/html/functions_func_o.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - -libdap: Class Members - Functions - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - - - - - - diff --git a/html/functions_func_p.html b/html/functions_func_p.html deleted file mode 100644 index fddbae7f4..000000000 --- a/html/functions_func_p.html +++ /dev/null @@ -1,253 +0,0 @@ - - - - - - - -libdap: Class Members - Functions - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -  - -

    - p -

    -
    -
    - - - - diff --git a/html/functions_func_r.html b/html/functions_func_r.html deleted file mode 100644 index dacd013a9..000000000 --- a/html/functions_func_r.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - - -libdap: Class Members - Functions - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -  - -

    - r -

    -
    -
    - - - - diff --git a/html/functions_func_s.html b/html/functions_func_s.html deleted file mode 100644 index 5cd3e2f4f..000000000 --- a/html/functions_func_s.html +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - - -libdap: Class Members - Functions - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -  - -

    - s -

    -
    -
    - - - - diff --git a/html/functions_func_t.html b/html/functions_func_t.html deleted file mode 100644 index 06f467994..000000000 --- a/html/functions_func_t.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - - -libdap: Class Members - Functions - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -  - -

    - t -

    -
    -
    - - - - diff --git a/html/functions_func_u.html b/html/functions_func_u.html deleted file mode 100644 index 37390cbd3..000000000 --- a/html/functions_func_u.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - -libdap: Class Members - Functions - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -  - -

    - u -

    -
    -
    - - - - diff --git a/html/functions_func_v.html b/html/functions_func_v.html deleted file mode 100644 index c45358ce4..000000000 --- a/html/functions_func_v.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - - -libdap: Class Members - Functions - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - - - - - - diff --git a/html/functions_func_w.html b/html/functions_func_w.html deleted file mode 100644 index f5cbc2260..000000000 --- a/html/functions_func_w.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - -libdap: Class Members - Functions - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -  - -

    - w -

    -
    -
    - - - - diff --git a/html/functions_func_x.html b/html/functions_func_x.html deleted file mode 100644 index 5cc4f114f..000000000 --- a/html/functions_func_x.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -libdap: Class Members - Functions - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -  - -

    - x -

    -
    -
    - - - - diff --git a/html/functions_g.html b/html/functions_g.html deleted file mode 100644 index 09b3e684d..000000000 --- a/html/functions_g.html +++ /dev/null @@ -1,414 +0,0 @@ - - - - - - - -libdap: Class Members - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - g -

    -
    -
    - - - - diff --git a/html/functions_h.html b/html/functions_h.html deleted file mode 100644 index 042357bea..000000000 --- a/html/functions_h.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - -libdap: Class Members - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - h -

    -
    -
    - - - - diff --git a/html/functions_i.html b/html/functions_i.html deleted file mode 100644 index f0e024722..000000000 --- a/html/functions_i.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - -libdap: Class Members - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - i -

    -
    -
    - - - - diff --git a/html/functions_l.html b/html/functions_l.html deleted file mode 100644 index 2cd0c7cf9..000000000 --- a/html/functions_l.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - -libdap: Class Members - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - l -

    -
    -
    - - - - diff --git a/html/functions_m.html b/html/functions_m.html deleted file mode 100644 index 3a6ec4f65..000000000 --- a/html/functions_m.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - -libdap: Class Members - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - m -

    -
    -
    - - - - diff --git a/html/functions_n.html b/html/functions_n.html deleted file mode 100644 index ff45e4a66..000000000 --- a/html/functions_n.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - -libdap: Class Members - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - n -

    -
    -
    - - - - diff --git a/html/functions_o.html b/html/functions_o.html deleted file mode 100644 index 6fb603aea..000000000 --- a/html/functions_o.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - -libdap: Class Members - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - o -

    -
    -
    - - - - diff --git a/html/functions_p.html b/html/functions_p.html deleted file mode 100644 index 7aa1b2279..000000000 --- a/html/functions_p.html +++ /dev/null @@ -1,253 +0,0 @@ - - - - - - - -libdap: Class Members - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - p -

    -
    -
    - - - - diff --git a/html/functions_r.html b/html/functions_r.html deleted file mode 100644 index 39fc58e05..000000000 --- a/html/functions_r.html +++ /dev/null @@ -1,212 +0,0 @@ - - - - - - - -libdap: Class Members - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - r -

    -
    -
    - - - - diff --git a/html/functions_rela.html b/html/functions_rela.html deleted file mode 100644 index 0012ad4f1..000000000 --- a/html/functions_rela.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - -libdap: Class Members - Related Functions - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    - - - - diff --git a/html/functions_s.html b/html/functions_s.html deleted file mode 100644 index aa0628764..000000000 --- a/html/functions_s.html +++ /dev/null @@ -1,368 +0,0 @@ - - - - - - - -libdap: Class Members - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - s -

    -
    -
    - - - - diff --git a/html/functions_t.html b/html/functions_t.html deleted file mode 100644 index 283f81424..000000000 --- a/html/functions_t.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - - -libdap: Class Members - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - t -

    -
    -
    - - - - diff --git a/html/functions_type.html b/html/functions_type.html deleted file mode 100644 index e7fe51147..000000000 --- a/html/functions_type.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - -libdap: Class Members - Typedefs - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    - - - - diff --git a/html/functions_u.html b/html/functions_u.html deleted file mode 100644 index cb1819963..000000000 --- a/html/functions_u.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - -libdap: Class Members - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - u -

    -
    -
    - - - - diff --git a/html/functions_v.html b/html/functions_v.html deleted file mode 100644 index 6e9f9cba2..000000000 --- a/html/functions_v.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - - -libdap: Class Members - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    - - - - diff --git a/html/functions_vars.html b/html/functions_vars.html deleted file mode 100644 index b729b9d53..000000000 --- a/html/functions_vars.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - -libdap: Class Members - Variables - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - - - - - - diff --git a/html/functions_w.html b/html/functions_w.html deleted file mode 100644 index b46e69a78..000000000 --- a/html/functions_w.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - -libdap: Class Members - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - w -

    -
    -
    - - - - diff --git a/html/functions_x.html b/html/functions_x.html deleted file mode 100644 index 8f56932fc..000000000 --- a/html/functions_x.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - -libdap: Class Members - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    Here is a list of all documented class members with links to the class documentation for each member:
    - -

    - x -

    -
    -
    - - - - diff --git a/html/getdap4_8cc_source.html b/html/getdap4_8cc_source.html deleted file mode 100644 index 08ea6cd05..000000000 --- a/html/getdap4_8cc_source.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - -libdap: getdap4.cc Source File - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    getdap4.cc
    -
    -
    -
    1 
    2 // -*- mode: c++; c-basic-offset:4 -*-
    3 
    4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
    5 // Access Protocol.
    6 
    7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
    8 // Author: James Gallagher <jgallagher@opendap.org>
    9 //
    10 // This library is free software; you can redistribute it and/or
    11 // modify it under the terms of the GNU Lesser General Public
    12 // License as published by the Free Software Foundation; either
    13 // version 2.1 of the License, or (at your option) any later version.
    14 //
    15 // This library is distributed in the hope that it will be useful,
    16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
    17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    18 // Lesser General Public License for more details.
    19 //
    20 // You should have received a copy of the GNU Lesser General Public
    21 // License along with this library; if not, write to the Free Software
    22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    23 //
    24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
    25 
    26 // (c) COPYRIGHT URI/MIT 1997-1999
    27 // Please read the full copyright statement in the file COPYRIGHT_URI.
    28 //
    29 // Authors:
    30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
    31 
    32 // This is the source to `getdap'; a simple tool to exercise the Connect
    33 // class. It can be used to get naked URLs as well as the DAP2 DAS and DDS
    34 // objects. jhrg.
    35 
    36 #include "config.h"
    37 
    38 #ifdef WIN32
    39 #include <io.h>
    40 #include <fcntl.h>
    41 #endif
    42 
    43 #include <cstring>
    44 #include <string>
    45 #include <sstream>
    46 
    47 #include <cstdio> //SBL 12.3.19
    48 
    49 #include "GetOpt.h"
    50 
    51 #include "DMR.h"
    52 #include "XMLWriter.h"
    53 #include "D4BaseTypeFactory.h"
    54 #include "D4Group.h"
    55 #include "D4Sequence.h"
    56 #include "D4Connect.h"
    57 #include "StdinResponse.h"
    58 #include "HTTPConnect.h"
    59 #include "RCReader.h"
    60 
    61 using namespace std;
    62 using namespace libdap ;
    63 
    64 const char *version = CVER " (" DVR " DAP/" DAP_PROTOCOL_VERSION ")";
    65 #if 0
    66 extern int libdap::dods_keep_temps; // defined in HTTPResponse.h
    67 extern int libdap::www_trace;
    68 #endif
    69 static void usage(const string &name)
    70 {
    71  cerr << "Usage: " << name << endl;
    72  cerr << " [dD vVikmzstM][-c <expr>][-m <num>] <url> [<url> ...] | <file> [<file> ...]" << endl;
    73  cerr << endl;
    74  cerr << "In the first form of the command, dereference the URL and" << endl;
    75  cerr << "perform the requested operations. This includes routing" << endl;
    76  cerr << "the returned information through the DAP processing" << endl;
    77  cerr << "library (parsing the returned objects, et c.). If none" << endl;
    78  cerr << "of a, d, or D are used with a URL, then the DAP library" << endl;
    79  cerr << "routines are NOT used and the URLs contents are dumped" << endl;
    80  cerr << "to standard output." << endl;
    81  cerr << "Note: If the URL contains a query string the query string" << endl;
    82  cerr << "will be preserved in the request. However, if the query " << endl;
    83  cerr << "string contains DAP4 keys they may interfere with the" << endl;
    84  cerr << "operation of " << name << ". A warning will be" << endl;
    85  cerr << "written to stderr when "<< name << " identifies" << endl;
    86  cerr << "the presence of a DAP4 query key in the submitted" << endl;
    87  cerr << "URL's query string." << endl;
    88  cerr << endl;
    89  cerr << "In the second form of the command, assume the files are" << endl;
    90  cerr << "DataDDS objects (stored in files or read from pipes)" << endl;
    91  cerr << "and process them as if -D were given. In this case the" << endl;
    92  cerr << "information *must* contain valid MIME header in order" << endl;
    93  cerr << "to be processed." << endl;
    94  cerr << endl;
    95  cerr << "Options:" << endl;
    96  cerr << " d: For each URL, get the (DAP4) DMR object. Does not get data." << endl;
    97  cerr << " D: For each URL, get the DAP4 Data response." << endl;
    98  cerr << endl;
    99  cerr << " v: Verbose output." << endl;
    100  cerr << " V: Version of this client; see 'i' for server version." << endl;
    101  cerr << " i: For each URL, get the server version." << endl;
    102  cerr << " k: Keep temporary files created by libdap." << endl;
    103  cerr << " m: Request the same URL <num> times." << endl;
    104  cerr << " z: Ask the server to compress data." << endl;
    105  cerr << " s: Print Sequences using numbered rows." << endl;
    106  cerr << " t: Trace www accesses." << endl;
    107  cerr << " M: Assume data read from a file has no MIME headers; use only with files" << endl;
    108  cerr << endl;
    109  cerr << " c: <expr> is a constraint expression. Used with -d/D" << endl;
    110  cerr << " NB: You can use a `?' for the CE also." << endl;
    111 }
    112 
    113 // Used for raw http access/transfer
    114 bool read_data(FILE * fp)
    115 {
    116  if (!fp) {
    117  fprintf(stderr, "getdap4: Whoa!!! Null stream pointer.\n");
    118  return false;
    119  }
    120  // Changed from a loop that used getc() to one that uses fread(). getc()
    121  // worked fine for transfers of text information, but *not* for binary
    122  // transfers. fread() will handle both.
    123  char c = 0;
    124  while (fp && !feof(fp) && fread(&c, 1, 1, fp))
    125  printf("%c", c); // stick with stdio
    126 
    127  return true;
    128 }
    129 
    130 static void read_response_from_file(D4Connect *url, DMR &dmr, Response &r, bool mime_headers, bool get_dap4_data, bool get_dmr)
    131 {
    132  if (mime_headers) {
    133  if (get_dap4_data)
    134  url->read_data(dmr, r);
    135  else if (get_dmr)
    136  url->read_dmr(dmr, r);
    137  else
    138  throw Error("Only supports Data or DMR responses");
    139  }
    140  else {
    141  if (get_dap4_data)
    142  url->read_data_no_mime(dmr, r);
    143  else if (get_dmr)
    144  url->read_dmr_no_mime(dmr, r);
    145  else
    146  throw Error("Only supports Data or DMR responses");
    147  }
    148 }
    149 
    150 static void print_group_data(D4Group *g, bool print_rows = false)
    151 {
    152  for (Constructor::Vars_iter i = g->var_begin(), e = g->var_end(); i != e; i++) {
    153  if (print_rows && (*i)->type() == dods_sequence_c)
    154  dynamic_cast<D4Sequence &>(**i).print_val_by_rows(cout);
    155  else
    156  (*i)->print_val(cout);
    157  }
    158 
    159  for (D4Group::groupsIter gi = g->grp_begin(), ge = g->grp_end(); gi != ge; ++gi) {
    160  print_group_data(*gi, print_rows);
    161  }
    162 }
    163 
    164 static void print_data(DMR &dmr, bool print_rows = false)
    165 {
    166  cout << "The data:" << endl;
    167 
    168  D4Group *g = dmr.root();
    169 
    170  print_group_data(g, print_rows);
    171 
    172  cout << endl << flush;
    173 }
    174 
    175 int main(int argc, char *argv[])
    176 {
    177  GetOpt getopt(argc, argv, "[dDvVikrm:Mzstc:]");
    178  int option_char;
    179 
    180  bool get_dmr = false;
    181  bool get_dap4_data = false;
    182  bool get_version = false;
    183  bool cexpr = false;
    184  bool verbose = false;
    185  bool multi = false;
    186  bool accept_deflate = false;
    187  bool print_rows = false;
    188  bool mime_headers = true;
    189  bool report_errors = false;
    190  int times = 1;
    191  int dap_client_major = 4;
    192  int dap_client_minor = 0;
    193  string expr = "";
    194 
    195 #ifdef WIN32
    196  _setmode(_fileno(stdout), _O_BINARY);
    197 #endif
    198 
    199  while ((option_char = getopt()) != -1)
    200  switch (option_char) {
    201  case 'd':
    202  get_dmr = true;
    203  break;
    204  case 'D':
    205  get_dap4_data = true;
    206  break;
    207  case 'v':
    208  verbose = true;
    209  break;
    210  case 'V':
    211  cerr << "getdap4 version: " << version << endl;
    212  exit(0);
    213  case 'i':
    214  get_version = true;
    215  break;
    216 #if 0
    217  case 'k':
    218  dods_keep_temps = 1;
    219  break; // keep_temp is in Connect.cc
    220 #endif
    221  case 'r':
    222  report_errors = true;
    223  break;
    224  case 'm':
    225  multi = true;
    226  times = atoi(getopt.optarg);
    227  break;
    228  case 'z':
    229  accept_deflate = true;
    230  break;
    231  case 's':
    232  print_rows = true;
    233  break;
    234  case 'M':
    235  mime_headers = false;
    236  break;
    237 #if 0
    238  case 't':
    239  www_trace = 1;
    240  break;
    241 #endif
    242  case 'c':
    243  cexpr = true;
    244  expr = getopt.optarg;
    245  break;
    246  case 'h':
    247  case '?':
    248  default:
    249  usage(argv[0]);
    250  exit(1);
    251  }
    252 
    253  try {
    254  // If after processing all the command line options there is nothing
    255  // left (no URL or file) assume that we should read from stdin.
    256  for (int i = getopt.optind; i < argc; ++i) {
    257  if (verbose)
    258  cerr << "Fetching: " << argv[i] << endl;
    259 
    260  string name = argv[i];
    261  D4Connect *url = 0;
    262  // auto_ptr? jhrg 10/19/15
    263  url = new D4Connect(name);
    264 
    265  // This overrides the value set in the .dodsrc file.
    266  if (accept_deflate)
    267  url->set_accept_deflate(accept_deflate);
    268 
    269  if (dap_client_major > 2)
    270  url->set_xdap_protocol(dap_client_major, dap_client_minor);
    271 
    272  if (url->is_local()) {
    273  if (verbose)
    274  cerr << "Assuming " << argv[i] << " is a file that contains a response object; decoding." << endl;
    275 
    276  try {
    277  D4BaseTypeFactory factory;
    278  DMR dmr(&factory);
    279 
    280  if (strcmp(argv[i], "-") == 0) {
    281  StdinResponse r(cin);
    282 
    283  if (!r.get_cpp_stream())
    284  throw Error("Could not open standard input.");
    285 
    286  read_response_from_file(url, dmr, r, mime_headers, get_dap4_data, get_dmr);
    287  }
    288  else {
    289  fstream f(argv[i], std::ios_base::in);
    290  if (!f.is_open() || f.bad() || f.eof())
    291  throw Error((string)"Could not open: " + argv[i]);
    292 
    293  Response r(&f, 0);
    294 
    295  read_response_from_file(url, dmr, r, mime_headers, get_dap4_data, get_dmr);
    296  }
    297 
    298  if (verbose)
    299  cerr << "DAP version: " << url->get_protocol().c_str() << " Server version: "
    300  << url->get_version().c_str() << endl;
    301 
    302  // Always write the DMR
    303  XMLWriter xml;
    304  dmr.print_dap4(xml);
    305  cout << xml.get_doc() << endl;
    306 
    307  if (get_dap4_data)
    308  print_data(dmr, print_rows);
    309  }
    310  catch (Error & e) {
    311  cerr << "Error: " << e.get_error_message() << endl;
    312  delete url; url = 0;
    313  if (report_errors)
    314  return EXIT_FAILURE;
    315  }
    316  }
    317  else if (get_dmr) {
    318  for (int j = 0; j < times; ++j) {
    319  D4BaseTypeFactory factory;
    320  DMR dmr(&factory);
    321  try {
    322  url->request_dmr(dmr, expr);
    323 
    324  if (verbose) {
    325  cout << "DAP version: " << url->get_protocol() << ", Server version: " << url->get_version() << endl;
    326  cout << "DMR:" << endl;
    327  }
    328 
    329  XMLWriter xml;
    330  dmr.print_dap4(xml);
    331  cout << xml.get_doc() << endl;
    332  }
    333  catch (Error & e) {
    334  cerr << e.get_error_message() << endl;
    335  if (report_errors)
    336  return EXIT_FAILURE;
    337  continue; // Goto the next URL or exit the loop.
    338  }
    339  }
    340  }
    341  else if (get_dap4_data) {
    342  for (int j = 0; j < times; ++j) {
    343  D4BaseTypeFactory factory;
    344  DMR dmr(&factory);
    345  try {
    346  url->request_dap4_data(dmr, expr);
    347 
    348  if (verbose) {
    349  cout << "DAP version: " << url->get_protocol() << ", Server version: " << url->get_version() << endl;
    350  cout << "DMR:" << endl;
    351  }
    352 
    353  XMLWriter xml;
    354  dmr.print_dap4(xml);
    355  cout << xml.get_doc() << endl;
    356 
    357  print_data(dmr, print_rows);
    358  }
    359  catch (Error & e) {
    360  cerr << e.get_error_message() << endl;
    361  if (report_errors)
    362  return EXIT_FAILURE;
    363  continue; // Goto the next URL or exit the loop.
    364  }
    365  }
    366  }
    367  else {
    368  HTTPConnect http(RCReader::instance());
    369 
    370  // This overrides the value set in the .dodsrc file.
    371  if (accept_deflate)
    372  http.set_accept_deflate(accept_deflate);
    373 
    374  if (dap_client_major > 2)
    375  url->set_xdap_protocol(dap_client_major, dap_client_minor);
    376 
    377  string url_string = argv[i];
    378  for (int j = 0; j < times; ++j) {
    379  try {
    380  HTTPResponse *r = http.fetch_url(url_string);
    381  if (verbose) {
    382  vector<string> *headers = r->get_headers();
    383  copy(headers->begin(), headers->end(), ostream_iterator<string>(cout, "\n"));
    384  }
    385  if (!read_data(r->get_stream())) {
    386  continue;
    387  }
    388  delete r;
    389  r = 0;
    390  }
    391  catch (Error & e) {
    392  cerr << e.get_error_message() << endl;
    393  if (report_errors)
    394  return EXIT_FAILURE;
    395  continue;
    396  }
    397  }
    398  }
    399 
    400 #if 0
    401  else if (get_version) {
    402  fprintf(stderr, "DAP version: %s, Server version: %s\n",
    403  url->request_protocol().c_str(),
    404  url->get_version().c_str());
    405  }
    406 #endif
    407 
    408  delete url; url = 0;
    409  }
    410  }
    411  catch (Error &e) {
    412 
    413  if(e.get_error_code() == malformed_expr){
    414  cerr << e.get_error_message() << endl;
    415  usage(argv[0]);
    416  }
    417  else {
    418  cerr << e.get_error_message() << endl;
    419 
    420  }
    421 
    422  cerr << "Exiting." << endl;
    423  //return 1;
    424  return EXIT_FAILURE;
    425  }
    426  catch (exception &e) {
    427  cerr << "C++ library exception: " << e.what() << endl;
    428  cerr << "Exiting." << endl;
    429  //return 1;
    430  return EXIT_FAILURE;
    431  }
    432 
    433  //return 0;
    434  return EXIT_SUCCESS;
    435 }
    -
    void print_dap4(XMLWriter &xml, bool constrained=false)
    Definition: DMR.cc:478
    -
    D4Group * root()
    Definition: DMR.cc:407
    -
    std::string get_version()
    Definition: D4Connect.h:94
    -
    void set_xdap_protocol(int major, int minor)
    Definition: D4Connect.cc:493
    -
    STL namespace.
    -
    Definition: GetOpt.h:38
    -
    std::string get_protocol()
    Definition: D4Connect.h:99
    -
    top level DAP object to house generic methods
    Definition: AISConnect.cc:30
    -
    void set_accept_deflate(bool deflate)
    Definition: D4Connect.cc:483
    - - -
    ErrorCode get_error_code() const
    Definition: Error.cc:249
    -
    groupsIter grp_end()
    Get an iterator to the end of the values.
    Definition: D4Group.h:114
    - - -
    std::string get_error_message() const
    Definition: Error.cc:278
    -
    groupsIter grp_begin()
    Get an iterator to the start of the values.
    Definition: D4Group.h:111
    - -
    Encapsulate a response read from stdin.
    Definition: StdinResponse.h:44
    -
    Vars_iter var_begin()
    Definition: Constructor.cc:356
    -
    Vars_iter var_end()
    Definition: Constructor.cc:364
    - - -
    A class for error processing.
    Definition: Error.h:92
    -
    -
    - - - - diff --git a/html/getdap_8cc_source.html b/html/getdap_8cc_source.html deleted file mode 100644 index ec1db92f4..000000000 --- a/html/getdap_8cc_source.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - -libdap: getdap.cc Source File - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    getdap.cc
    -
    -
    -
    1 
    2 // -*- mode: c++; c-basic-offset:4 -*-
    3 
    4 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
    5 // Access Protocol.
    6 
    7 // Copyright (c) 2002,2003 OPeNDAP, Inc.
    8 // Author: James Gallagher <jgallagher@opendap.org>
    9 //
    10 // This library is free software; you can redistribute it and/or
    11 // modify it under the terms of the GNU Lesser General Public
    12 // License as published by the Free Software Foundation; either
    13 // version 2.1 of the License, or (at your option) any later version.
    14 //
    15 // This library is distributed in the hope that it will be useful,
    16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
    17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    18 // Lesser General Public License for more details.
    19 //
    20 // You should have received a copy of the GNU Lesser General Public
    21 // License along with this library; if not, write to the Free Software
    22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    23 //
    24 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
    25 
    26 // (c) COPYRIGHT URI/MIT 1997-1999
    27 // Please read the full copyright statement in the file COPYRIGHT_URI.
    28 //
    29 // Authors:
    30 // jhrg,jimg James Gallagher <jgallagher@gso.uri.edu>
    31 
    32 // This is the source to `getdap'; a simple tool to exercise the Connect
    33 // class. It can be used to get naked URLs as well as the DAP2 DAS and DDS
    34 // objects. jhrg.
    35 
    36 #include "config.h"
    37 
    38 #ifdef WIN32
    39 #include <io.h>
    40 #include <fcntl.h>
    41 #endif
    42 
    43 #include <cstring>
    44 #include <string>
    45 #include <sstream>
    46 
    47 #include <cstdio> //SBL 12.3.19
    48 
    49 #include "GetOpt.h"
    50 
    51 #include "Sequence.h"
    52 #include "Connect.h"
    53 #include "Response.h"
    54 #include "StdinResponse.h"
    55 
    56 using std::cerr;
    57 using std::endl;
    58 using std::flush;
    59 
    60 using namespace libdap ;
    61 
    62 const char *version = CVER " (" DVR " DAP/" DAP_PROTOCOL_VERSION ")";
    63 
    64 extern int libdap::dods_keep_temps; // defined in HTTPResponse.h
    65 extern int libdap::www_trace;
    66 extern int libdap::www_trace_extensive;
    67 
    68 void usage(string name)
    69 {
    70  cerr << "Usage: " << name << endl;
    71  cerr << " [idaDxBzp vVkms][-c <expr>][-m <num>] <url> [<url> ...]" << endl;
    72  cerr << " [M vVkms] <file> [<file> ...]" << endl;
    73  cerr << endl;
    74  cerr << "In the first form of the command, dereference the URL and" << endl;
    75  cerr << "perform the requested operations. This includes routing" << endl;
    76  cerr << "the returned information through the DAP processing" << endl;
    77  cerr << "library (parsing the returned objects, et c.). If none" << endl;
    78  cerr << "of a, d, or D are used with a URL, then the DAP library" << endl;
    79  cerr << "routines are NOT used and the URLs contents are dumped" << endl;
    80  cerr << "to standard output." << endl;
    81  cerr << endl;
    82  cerr << "In the second form of the command, assume the files are" << endl;
    83  cerr << "DataDDS objects (stored in files or read from pipes)" << endl;
    84  cerr << "and process them as if -D were given. In this case the" << endl;
    85  cerr << "information *must* contain valid MIME header in order" << endl;
    86  cerr << "to be processed." << endl;
    87  cerr << endl;
    88  cerr << "Options:" << endl;
    89  cerr << " i: For each URL, get the server version." << endl;
    90  cerr << " d: For each URL, get the the DDS." << endl;
    91  cerr << " a: For each URL, get the the DAS." << endl;
    92  cerr << " D: For each URL, get the the DataDDS." << endl;
    93  cerr << " x: For each URL, get the (DAP2) DDX object. Does not get data." << endl;
    94  cerr << " B: Build a DDX in getdap using the DDS and DAS." << endl;
    95  cerr << " v: Verbose output." << endl;
    96  cerr << " e: Extensive (or very) verbose." << endl;
    97  cerr << " V: Version of this client; see 'i' for server version." << endl;
    98  cerr << " c: <expr> is a constraint expression. Used with -D/X and -d/r" << endl;
    99  cerr << " NB: You can use a `?' for the CE also." << endl;
    100  cerr << " k: Keep temporary files created by libdap." << endl;
    101  cerr << " m: Request the same URL <num> times." << endl;
    102  cerr << " z: Ask the server to compress data." << endl;
    103  cerr << " s: Print Sequences using numbered rows." << endl;
    104  cerr << " M: Assume data read from a file has no MIME headers" << endl;
    105  cerr << " (the default is to assume the headers are present)." << endl;
    106  cerr << " p: Set DAP protocol to x.y" << endl;
    107 }
    108 
    109 bool read_data(FILE * fp)
    110 {
    111  if (!fp) {
    112  fprintf(stderr, "getdap: Whoa!!! Null stream pointer.\n");
    113  return false;
    114  }
    115  // Changed from a loop that used getc() to one that uses fread(). getc()
    116  // worked fine for transfers of text information, but *not* for binary
    117  // transfers. fread() will handle both.
    118  char c = 0;
    119  while (fp && !feof(fp) && fread(&c, 1, 1, fp))
    120  printf("%c", c); // stick with stdio
    121 
    122  return true;
    123 }
    124 
    125 static void print_data(DDS & dds, bool print_rows = false)
    126 {
    127  cout << "The data:" << endl;
    128 
    129  for (DDS::Vars_iter i = dds.var_begin(); i != dds.var_end(); i++) {
    130  BaseType *v = *i;
    131  if (print_rows && (*i)->type() == dods_sequence_c)
    132  dynamic_cast < Sequence * >(*i)->print_val_by_rows(cout);
    133  else
    134  v->print_val(cout);
    135  }
    136 
    137  cout << endl << flush;
    138 }
    139 
    140 int main(int argc, char *argv[])
    141 {
    142  GetOpt getopt(argc, argv, "idaDxrXBVvekc:m:zshM?Hp:t");
    143  int option_char;
    144 
    145  bool get_das = false;
    146  bool get_dds = false;
    147  bool get_data = false;
    148  bool get_ddx = false;
    149  bool build_ddx = false;
    150  bool get_version = false;
    151  bool cexpr = false;
    152  bool verbose = false;
    153  bool multi = false;
    154  bool accept_deflate = false;
    155  bool print_rows = false;
    156  bool mime_headers = true;
    157  int times = 1;
    158  int dap_client_major = 2;
    159  int dap_client_minor = 0;
    160  string expr = "";
    161 
    162 #ifdef WIN32
    163  _setmode(_fileno(stdout), _O_BINARY);
    164 #endif
    165 
    166  while ((option_char = getopt()) != -1)
    167  switch (option_char) {
    168  case 'd':
    169  get_dds = true;
    170  break;
    171  case 'a':
    172  get_das = true;
    173  break;
    174  case 'D':
    175  get_data = true;
    176  break;
    177  case 'x':
    178  get_ddx = true;
    179  break;
    180  case 'V':
    181  fprintf(stderr, "getdap version: %s\n", version);
    182  exit(0);
    183  case 'i':
    184  get_version = true;
    185  break;
    186  case 'v':
    187  verbose = true;
    188  www_trace = 1;
    189  break;
    190  case 'e':
    191  verbose = true;
    192  www_trace = 1;
    193  www_trace_extensive = 1;
    194  break;
    195  case 'k':
    196  dods_keep_temps = 1;
    197  break; // keep_temp is in Connect.cc
    198  case 'c':
    199  cexpr = true;
    200  expr = getopt.optarg;
    201  break;
    202  case 'm':
    203  multi = true;
    204  times = atoi(getopt.optarg);
    205  break;
    206  case 'B':
    207  build_ddx = true;
    208  break;
    209  case 'z':
    210  accept_deflate = true;
    211  break;
    212  case 's':
    213  print_rows = true;
    214  break;
    215  case 'M':
    216  mime_headers = false;
    217  break;
    218  case 'p': {
    219  istringstream iss(getopt.optarg);
    220  char dot;
    221  iss >> dap_client_major;
    222  iss >> dot;
    223  iss >> dap_client_minor;
    224  break;
    225  }
    226  case 't':
    227  www_trace = 1;
    228  break;
    229  case 'h':
    230  case '?':
    231  default:
    232  usage(argv[0]);
    233  exit(1);
    234  }
    235 
    236  try {
    237  // If after processing all the command line options there is nothing
    238  // left (no URL or file) assume that we should read from stdin.
    239  for (int i = getopt.optind; i < argc; ++i) {
    240  if (verbose)
    241  fprintf(stderr, "Fetching: %s\n", argv[i]);
    242 
    243  string name = argv[i];
    244  Connect *url = 0;
    245 
    246  url = new Connect(name);
    247 
    248  // This overrides the value set in the .dodsrc file.
    249  if (accept_deflate)
    250  url->set_accept_deflate(accept_deflate);
    251 
    252  if (dap_client_major > 2)
    253  url->set_xdap_protocol(dap_client_major, dap_client_minor);
    254 
    255  if (url->is_local()) {
    256  if (verbose) {
    257  fprintf(stderr, "Assuming that the argument %s is a file that contains a response object; decoding.\n", argv[i]);
    258  }
    259 
    260  Response *r = 0;
    261 
    262  BaseTypeFactory factory;
    263  DataDDS dds(&factory);
    264 
    265  try {
    266  if (strcmp(argv[i], "-") == 0) {
    267  r = new StdinResponse(stdin);
    268 
    269  if (!r->get_stream())
    270  throw Error("Could not open standard input.");
    271 
    272  if (mime_headers)
    273  url->read_data(dds, r); // The default case
    274  else
    275  url->read_data_no_mime(dds, r);
    276  }
    277  else {
    278  r = new Response(fopen(argv[i], "r"), 0);
    279 
    280  if (!r->get_stream())
    281  throw Error(string("The input source: ")
    282  + string(argv[i])
    283  + string(" could not be opened"));
    284 
    285  url->read_data_no_mime(dds, r);
    286  }
    287  }
    288  catch (Error & e) {
    289  cerr << e.get_error_message() << endl;
    290  delete r;
    291  r = 0;
    292  delete url;
    293  url = 0;
    294  break;
    295  }
    296 
    297  if (verbose)
    298  fprintf(stderr, "DAP version: %s, Server version: %s\n",
    299  url->get_protocol().c_str(),
    300  url->get_version().c_str());
    301 
    302  print_data(dds, print_rows);
    303 
    304  }
    305 
    306  else if (get_version) {
    307  fprintf(stderr, "DAP version: %s, Server version: %s\n",
    308  url->request_protocol().c_str(),
    309  url->get_version().c_str());
    310  }
    311 
    312  else if (get_das) {
    313  for (int j = 0; j < times; ++j) {
    314  DAS das;
    315  try {
    316  url->request_das(das);
    317  }
    318  catch (Error & e) {
    319  cerr << e.get_error_message() << endl;
    320  delete url;
    321  url = 0;
    322  continue;
    323  }
    324 
    325  if (verbose) {
    326  fprintf(stderr, "DAP version: %s, Server version: %s\n",
    327  url->get_protocol().c_str(),
    328  url->get_version().c_str());
    329 
    330  fprintf(stderr, "DAS:\n");
    331  }
    332 
    333  das.print(stdout);
    334  }
    335  }
    336 
    337  else if (get_dds) {
    338  for (int j = 0; j < times; ++j) {
    339  BaseTypeFactory factory;
    340  DDS dds(&factory);
    341  try {
    342  url->request_dds(dds, expr);
    343  }
    344  catch (Error & e) {
    345  cerr << e.get_error_message() << endl;
    346  delete url;
    347  url = 0;
    348  continue; // Goto the next URL or exit the loop.
    349  }
    350 
    351  if (verbose) {
    352  fprintf(stderr, "DAP version: %s, Server version: %s\n",
    353  url->get_protocol().c_str(),
    354  url->get_version().c_str());
    355 
    356  fprintf(stderr, "DDS:\n");
    357  }
    358 
    359  dds.print(cout);
    360  }
    361  }
    362 
    363  else if (get_ddx) {
    364  for (int j = 0; j < times; ++j) {
    365  BaseTypeFactory factory;
    366  DDS dds(&factory);
    367  try {
    368  url->request_ddx(dds, expr);
    369  }
    370  catch (Error & e) {
    371  cerr << e.get_error_message() << endl;
    372  continue; // Goto the next URL or exit the loop.
    373  }
    374 
    375  if (verbose) {
    376  fprintf(stderr, "DAP version: %s, Server version: %s\n",
    377  url->get_protocol().c_str(),
    378  url->get_version().c_str());
    379 
    380  fprintf(stderr, "DDX:\n");
    381  }
    382 
    383  dds.print_xml(cout, false);
    384  }
    385  }
    386 
    387  else if (build_ddx) {
    388  for (int j = 0; j < times; ++j) {
    389  BaseTypeFactory factory;
    390  DDS dds(&factory);
    391  try {
    392  url->request_dds(dds, expr);
    393  DAS das;
    394  url->request_das(das);
    395  dds.transfer_attributes(&das);
    396  }
    397  catch (Error & e) {
    398  cerr << e.get_error_message() << endl;
    399  continue; // Goto the next URL or exit the loop.
    400  }
    401 
    402  if (verbose) {
    403  fprintf(stderr, "DAP version: %s, Server version: %s\n",
    404  url->get_protocol().c_str(),
    405  url->get_version().c_str());
    406 
    407  fprintf(stderr, "Client-built DDX:\n");
    408  }
    409 
    410  dds.print_xml(cout, false);
    411  }
    412  }
    413 
    414  else if (get_data) {
    415  for (int j = 0; j < times; ++j) {
    416  BaseTypeFactory factory;
    417  DataDDS dds(&factory);
    418  try {
    419  DBG(cerr << "URL: " << url->URL(false) << endl);
    420  DBG(cerr << "CE: " << expr << endl);
    421  url->request_data(dds, expr);
    422 
    423  if (verbose)
    424  fprintf(stderr, "DAP version: %s, Server version: %s\n",
    425  url->get_protocol().c_str(),
    426  url->get_version().c_str());
    427 
    428  print_data(dds, print_rows);
    429  }
    430  catch (Error & e) {
    431  cerr << e.get_error_message() << endl;
    432  delete url;
    433  url = 0;
    434  continue;
    435  }
    436  }
    437  }
    438  else {
    439  // if (!get_das && !get_dds && !get_data ...) This code uses
    440  // HTTPConnect::fetch_url which cannot be accessed using an
    441  // instance of Connect. So some of the options supported by
    442  // other URLs won't work here (e.g., the verbose option
    443  // doesn't show the server version number).
    444  HTTPConnect http(RCReader::instance());
    445 
    446  // This overrides the value set in the .dodsrc file.
    447  if (accept_deflate)
    448  http.set_accept_deflate(accept_deflate);
    449 
    450  if (dap_client_major > 2)
    451  url->set_xdap_protocol(dap_client_major, dap_client_minor);
    452 
    453  string url_string = argv[i];
    454  for (int j = 0; j < times; ++j) {
    455  try {
    456  Response *r = http.fetch_url(url_string);
    457  if (!read_data(r->get_stream())) {
    458  continue;
    459  }
    460  delete r;
    461  r = 0;
    462  }
    463  catch (Error & e) {
    464  cerr << e.get_error_message() << endl;
    465  continue;
    466  }
    467  }
    468  }
    469 
    470  delete url;
    471  url = 0;
    472  }
    473  }
    474  catch (Error &e) {
    475  cerr << e.get_error_message() << endl;
    476  //return 1;
    477  return EXIT_FAILURE;
    478  }
    479  catch (exception &e) {
    480  cerr << "C++ library exception: " << e.what() << endl;
    481  //return 1;
    482  return EXIT_FAILURE;
    483  }
    484 
    485  //return 0;
    486  return EXIT_SUCCESS;
    487 }
    -
    virtual void request_ddx(DDS &dds, string expr="")
    Get the DDX from a server.
    Definition: Connect.cc:705
    -
    void print(FILE *out)
    Print the entire DDS to the specified file.
    Definition: DDS.cc:1023
    -
    virtual string URL(bool CE=true)
    Get the object&#39;s URL.
    Definition: Connect.cc:1127
    -
    void set_xdap_protocol(int major, int minor)
    Definition: Connect.cc:1179
    -
    Vars_iter var_begin()
    Return an iterator to the first variable.
    Definition: DDS.cc:799
    -
    virtual void transfer_attributes(DAS *das)
    Definition: DDS.cc:286
    -
    void print_xml(FILE *out, bool constrained, const string &blob="")
    Definition: DDS.cc:1378
    -
    Holds information about the link from a DAP2 client to a dataset.
    Definition: Connect.h:129
    -
    Definition: GetOpt.h:38
    -
    virtual void print(FILE *out, bool dereference=false)
    Definition: DAS.cc:331
    -
    top level DAP object to house generic methods
    Definition: AISConnect.cc:30
    -
    virtual void read_data(DataDDS &data, Response *rs)
    Read data which is preceded by MIME headers. This method works for both data dds and data ddx respons...
    Definition: Connect.cc:989
    -
    virtual void print_val(FILE *out, string space="", bool print_decl_p=true)
    Prints the value of the variable.
    Definition: BaseType.cc:1090
    - - -
    virtual void request_dds(DDS &dds, string expr="")
    Get the DDS from a server.
    Definition: Connect.cc:562
    -
    void set_accept_deflate(bool deflate)
    Definition: Connect.cc:1168
    - -
    virtual void request_data(DataDDS &data, string expr="")
    Get the DAS from a server.
    Definition: Connect.cc:845
    -
    string get_protocol()
    Definition: Connect.h:193
    -
    virtual void read_data_no_mime(DataDDS &data, Response *rs)
    Read data from a file which does not have response MIME headers. This method is a companion to read_d...
    Definition: Connect.cc:1062
    -
    std::string get_error_message() const
    Definition: Error.cc:278
    -
    virtual void request_das(DAS &das)
    Get the DAS from a server.
    Definition: Connect.cc:430
    -
    Vars_iter var_end()
    Return an iterator.
    Definition: DDS.cc:811
    -
    Encapsulate a response read from stdin.
    Definition: StdinResponse.h:44
    -
    The basic data type for the DODS DAP types.
    Definition: BaseType.h:117
    -
    virtual string request_protocol()
    Definition: Connect.cc:398
    -
    Hold attribute data for a DAP2 dataset.
    Definition: DAS.h:121
    -
    A class for error processing.
    Definition: Error.h:92
    -
    Holds a DAP2 DDS.
    Definition: DataDDS.h:77
    -
    string get_version()
    Definition: Connect.h:185
    -
    -
    - - - - diff --git a/html/graph_legend.html b/html/graph_legend.html deleted file mode 100644 index 652d5491d..000000000 --- a/html/graph_legend.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - -libdap: Graph Legend - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    Graph Legend
    -
    -
    -

    This page explains how to interpret the graphs that are generated by doxygen.

    -

    Consider the following example:

    /*! Invisible class because of truncation */
    class Invisible { };
    /*! Truncated class, inheritance relation is hidden */
    class Truncated : public Invisible { };
    /* Class not documented with doxygen comments */
    class Undocumented { };
    /*! Class that is inherited using public inheritance */
    class PublicBase : public Truncated { };
    /*! A template class */
    template<class T> class Templ { };
    /*! Class that is inherited using protected inheritance */
    class ProtectedBase { };
    /*! Class that is inherited using private inheritance */
    class PrivateBase { };
    /*! Class that is used by the Inherited class */
    class Used { };
    /*! Super class that inherits a number of other classes */
    class Inherited : public PublicBase,
    protected ProtectedBase,
    private PrivateBase,
    public Undocumented,
    public Templ<int>
    {
    private:
    Used *m_usedClass;
    };

    This will result in the following graph:

    -
    - -
    -

    The boxes in the above graph have the following meaning:

    -
      -
    • -A filled gray box represents the struct or class for which the graph is generated.
    • -
    • -A box with a black border denotes a documented struct or class.
    • -
    • -A box with a gray border denotes an undocumented struct or class.
    • -
    • -A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
    • -
    -

    The arrows have the following meaning:

    -
      -
    • -A dark blue arrow is used to visualize a public inheritance relation between two classes.
    • -
    • -A dark green arrow is used for protected inheritance.
    • -
    • -A dark red arrow is used for private inheritance.
    • -
    • -A purple dashed arrow is used if a class is contained or used by another class. The arrow is labelled with the variable(s) through which the pointed class or struct is accessible.
    • -
    • -A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labelled with the template parameters of the instance.
    • -
    -
    -
    - - - - diff --git a/html/graph_legend.md5 b/html/graph_legend.md5 deleted file mode 100644 index 7bd995703..000000000 --- a/html/graph_legend.md5 +++ /dev/null @@ -1 +0,0 @@ -1bffc4ef6cd06b95fb6c5ee5c51e8968 \ No newline at end of file diff --git a/html/graph_legend.png b/html/graph_legend.png deleted file mode 100644 index 9721b6312dce4fca2a368dcb4b9e5cab8e245fcd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24222 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 diff --git a/html/grid__utils_8cc_source.html b/html/grid__utils_8cc_source.html deleted file mode 100644 index ade3b72bc..000000000 --- a/html/grid__utils_8cc_source.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - -libdap: grid_utils.cc Source File - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    grid_utils.cc
    -
    -
    -
    1 // -*- mode: c++; c-basic-offset:4 -*-
    2 
    3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
    4 // Access Protocol.
    5 
    6 // Copyright (c) 2002,2003 OPeNDAP, Inc.
    7 // Author: Nathan Potter <npotter@opendap.org>
    8 //
    9 // This library is free software; you can redistribute it and/or
    10 // modify it under the terms of the GNU Lesser General Public
    11 // License as published by the Free Software Foundation; either
    12 // version 2.1 of the License, or (at your option) any later version.
    13 //
    14 // This library is distributed in the hope that it will be useful,
    15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
    16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    17 // Lesser General Public License for more details.
    18 //
    19 // You should have received a copy of the GNU Lesser General Public
    20 // License along with this library; if not, write to the Free Software
    21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    22 //
    23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
    24 
    25 #include "config.h"
    26 
    27 #include <BaseType.h>
    28 #include <Structure.h>
    29 #include <Grid.h>
    30 #include <util.h>
    31 
    32 #include <debug.h>
    33 
    34 #include "grid_utils.h"
    35 #include "gse_parser.h"
    36 #include "GSEClause.h"
    37 
    38 #if 0
    39 #include "GridGeoConstraint.h"
    40 #endif
    41 
    42 using namespace libdap;
    43 
    44 int gse_parse(functions::gse_arg *arg);
    45 void gse_restart(FILE * in);
    46 
    47 // Glue routines declared in gse.lex
    48 void gse_delete_buffer(void *buffer);
    49 void *gse_string(const char *yy_str);
    50 
    51 namespace functions {
    52 
    59 void get_grids(BaseType *bt, vector<Grid *> *grids)
    60 {
    61  switch (bt->type()) {
    62 
    63  case dods_grid_c: {
    64  // Yay! It's a Grid!
    65  grids->push_back(static_cast<Grid*>(bt));
    66  break;
    67  }
    68  case dods_structure_c: {
    69  // It's an Structure - but of what? Check each variable in the Structure.
    70  Structure &s = static_cast<Structure&>(*bt);
    71  for (Structure::Vars_iter i = s.var_begin(); i != s.var_begin(); i++) {
    72  get_grids(*i, grids);
    73  }
    74  break;
    75  }
    76  // Grids cannot be members of Array or Sequence in DAP2. jhrg 6/10/13
    77  case dods_array_c:
    78  case dods_sequence_c:
    79  default:
    80  break;
    81  }
    82 }
    83 
    90 void get_grids(DDS &dds, vector<Grid *> *grids)
    91 {
    92  for (DDS::Vars_iter i = dds.var_begin(); i != dds.var_end(); i++) {
    93  get_grids(*i, grids);
    94  }
    95 }
    96 
    97 #if 0
    98 
    99 // Hacked this out of the code to get prototype value-based subsetting
    100 // into the code. We might add it back later (or maybe there is a better
    101 // place? jhrg 4/18/19
    102 
    112 bool is_geo_grid(Grid *grid)
    113 {
    114  try {
    115  GridGeoConstraint gc(grid);
    116  }
    117  catch (Error *e) {
    118  return false;
    119  }
    120 
    121  return true;
    122 }
    123 #endif
    124 
    125 void parse_gse_expression(gse_arg *arg, BaseType *expr)
    126 {
    127  gse_restart(0); // Restart the scanner.
    128  void *cls = gse_string(extract_string_argument(expr).c_str());
    129  // gse_switch_to_buffer(cls); // Get set to scan the string.
    130  bool status = gse_parse(arg) == 0;
    131  gse_delete_buffer(cls);
    132  if (!status)
    133  throw Error(malformed_expr, "Error parsing grid selection.");
    134 }
    135 
    136 static void apply_grid_selection_expr(Grid *grid, GSEClause *clause)
    137 {
    138  // Basic plan: For each map, look at each clause and set start and stop
    139  // to be the intersection of the ranges in those clauses.
    140  Grid::Map_iter map_i = grid->map_begin();
    141  while (map_i != grid->map_end() && (*map_i)->name() != clause->get_map_name())
    142  ++map_i;
    143 
    144  if (map_i == grid->map_end())
    145  throw Error(malformed_expr,"The map vector '" + clause->get_map_name()
    146  + "' is not in the grid '" + grid->name() + "'.");
    147 
    148  // Use pointer arith & the rule that map order must match array dim order
    149  Array::Dim_iter grid_dim = (grid->get_array()->dim_begin() + (map_i - grid->map_begin()));
    150 
    151  Array *map = dynamic_cast < Array * >((*map_i));
    152  if (!map)
    153  throw InternalErr(__FILE__, __LINE__, "Expected an Array");
    154  int start = max(map->dimension_start(map->dim_begin()), clause->get_start());
    155  int stop = min(map->dimension_stop(map->dim_begin()), clause->get_stop());
    156 
    157  if (start > stop) {
    158  ostringstream msg;
    159  msg
    160  << "The expressions passed to grid() do not result in an inclusive \n"
    161  << "subset of '" << clause->get_map_name()
    162  << "'. The map's values range " << "from "
    163  << clause->get_map_min_value() << " to "
    164  << clause->get_map_max_value() << ".";
    165  throw Error(malformed_expr,msg.str());
    166  }
    167 
    168  DBG(cerr << "Setting constraint on " << map->name() << "[" << start << ":" << stop << "]" << endl);
    169 
    170  // Stride is always one.
    171  map->add_constraint(map->dim_begin(), start, 1, stop);
    172  grid->get_array()->add_constraint(grid_dim, start, 1, stop);
    173 }
    174 
    175 void apply_grid_selection_expressions(Grid * grid, vector < GSEClause * >clauses)
    176 {
    177  vector < GSEClause * >::iterator clause_i = clauses.begin();
    178  while (clause_i != clauses.end())
    179  apply_grid_selection_expr(grid, *clause_i++);
    180 
    181  grid->set_read_p(false);
    182 }
    183 
    184 } //namespace libdap
    virtual void add_constraint(Dim_iter i, int start, int stride, int stop)
    Adds a constraint to an Array dimension.
    Definition: Array.cc:647
    -
    virtual string name() const
    Returns the name of the class instance.
    Definition: BaseType.cc:320
    - -
    Vars_iter var_begin()
    Return an iterator to the first variable.
    Definition: DDS.cc:799
    -
    string extract_string_argument(BaseType *arg)
    Definition: util.cc:119
    -
    Map_iter map_end()
    Definition: Grid.cc:537
    -
    Holds a structure (aggregate) type.
    Definition: Structure.h:83
    -
    top level DAP object to house generic methods
    Definition: AISConnect.cc:30
    - -
    A class for software fault reporting.
    Definition: InternalErr.h:64
    -
    Map_iter map_begin()
    Returns an iterator referencing the first Map vector.
    Definition: Grid.cc:525
    - -
    virtual Type type() const
    Returns the type of the class instance.
    Definition: BaseType.cc:365
    -
    std::vector< dimension >::iterator Dim_iter
    Definition: Array.h:206
    -
    Holds the Grid data type.
    Definition: Grid.h:122
    -
    Array * get_array()
    Returns the Grid Array. This method returns the array using an Array*, so no cast is required...
    Definition: Grid.cc:518
    -
    virtual int dimension_stop(Dim_iter i, bool constrained=false)
    Return the stop index of the constraint.
    Definition: Array.cc:788
    -
    Vars_iter var_end()
    Return an iterator.
    Definition: DDS.cc:811
    -
    virtual int dimension_start(Dim_iter i, bool constrained=false)
    Return the start index of a dimension.
    Definition: Array.cc:765
    -
    The basic data type for the DODS DAP types.
    Definition: BaseType.h:117
    -
    Dim_iter dim_begin()
    Definition: Array.cc:690
    -
    Vars_iter var_begin()
    Definition: Constructor.cc:356
    -
    A class for error processing.
    Definition: Error.h:92
    -
    A multidimensional array of identical data types.
    Definition: Array.h:112
    -
    virtual void set_read_p(bool state)
    Sets the value of the read_p property.
    Definition: Constructor.cc:218
    -
    -
    - - - - diff --git a/html/grid__utils_8h_source.html b/html/grid__utils_8h_source.html deleted file mode 100644 index 362adfcdb..000000000 --- a/html/grid__utils_8h_source.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - -libdap: grid_utils.h Source File - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    grid_utils.h
    -
    -
    -
    1 // -*- mode: c++; c-basic-offset:4 -*-
    2 
    3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
    4 // Access Protocol.
    5 
    6 // Copyright (c) 2002,2003 OPeNDAP, Inc.
    7 // Author: Nathan Potter <npotter@opendap.org>
    8 //
    9 // This library is free software; you can redistribute it and/or
    10 // modify it under the terms of the GNU Lesser General Public
    11 // License as published by the Free Software Foundation; either
    12 // version 2.1 of the License, or (at your option) any later version.
    13 //
    14 // This library is distributed in the hope that it will be useful,
    15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
    16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    17 // Lesser General Public License for more details.
    18 //
    19 // You should have received a copy of the GNU Lesser General Public
    20 // License along with this library; if not, write to the Free Software
    21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    22 //
    23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
    24 
    25 #ifndef GRID_UTILS_H_
    26 #define GRID_UTILS_H_
    27 
    28 namespace libdap {
    29 class DDS;
    30 class BaseType;
    31 class Grid;
    32 }
    33 
    34 namespace functions {
    35 
    36 class GSEClause;
    37 struct gse_arg; // in gse_parser.h
    38 
    39 void get_grids(libdap::BaseType *bt, std::vector<libdap::Grid *> *grids);
    40 void get_grids(libdap::DDS &dds, std::vector<libdap::Grid *> *grids);
    41 
    42 #if 0
    43 bool is_geo_grid(libdap::Grid *d_grid);
    44 #endif
    45 
    46 void parse_gse_expression(gse_arg *arg, libdap::BaseType * expr);
    47 void apply_grid_selection_expressions(libdap::Grid * grid, std::vector <GSEClause *>clauses);
    48 
    49 }
    50 
    51 #endif /* GRID_UTILS_H_ */
    -
    top level DAP object to house generic methods
    Definition: AISConnect.cc:30
    - -
    Holds the Grid data type.
    Definition: Grid.h:122
    -
    The basic data type for the DODS DAP types.
    Definition: BaseType.h:117
    -
    -
    - - - - diff --git a/html/group__check.html b/html/group__check.html deleted file mode 100644 index 8d5ca45a6..000000000 --- a/html/group__check.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - -libdap: type and set value - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    type and set value
    -
    -
    - -

    Like 'test and set,' check a type and set a value in one go. -More...

    - - - - - - - - -

    -Functions

    -int libdap::check_float64 (const char *val, double &v)
     
    -int libdap::check_int32 (const char *val, int &v)
     
    -int libdap::check_uint32 (const char *val, unsigned int &v)
     
    -

    Detailed Description

    -

    Like 'test and set,' check a type and set a value in one go.

    -
    -
    - - - - diff --git a/html/group__check__type.html b/html/group__check__type.html deleted file mode 100644 index df7a27329..000000000 --- a/html/group__check__type.html +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - - -libdap: Check_type - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    Check_type
    -
    -
    - -

    Can the given string be converted into a byte, ...? -More...

    - - - - - - - - - - - - - - - - - - - - - - - - -

    -Functions

    int libdap::check_byte (const char *val)
     Is the value a valid byte? More...
     
    -int libdap::check_float32 (const char *val)
     
    -int libdap::check_float64 (const char *val)
     
    -int libdap::check_int16 (const char *val)
     
    -int libdap::check_int32 (const char *val)
     
    -int libdap::check_int64 (const char *val)
     
    -int libdap::check_uint16 (const char *val)
     
    -int libdap::check_uint32 (const char *val)
     
    -int libdap::check_uint64 (const char *val)
     
    int libdap::check_url (const char *val)
     Is the value a valid URL? More...
     
    -

    Detailed Description

    -

    Can the given string be converted into a byte, ...?

    -

    Function Documentation

    - -

    ◆ check_byte()

    - -
    -
    - - - - - - - - -
    int libdap::check_byte (const char * val)
    -
    - -

    Is the value a valid byte?

    -

    Check to see if val is a valid byte value. If not, generate an error message using parser_error(). There are two versions of check_byte(), one which calls parser_error() and prints an error message to stderr an one which calls parser_error() and generates and Error object.

    -
    Returns
    Returns: TRUE (1) if val is a byte value, FALSE (0) otherwise.
    - -

    Definition at line 190 of file parser-util.cc.

    - -
    -
    - -

    ◆ check_url()

    - -
    -
    - - - - - - - - -
    int libdap::check_url (const char * val)
    -
    - -

    Is the value a valid URL?

    -

    Currently this function always returns true.

    - -

    Definition at line 696 of file parser-util.cc.

    - -
    -
    -
    -
    - - - - diff --git a/html/group__check__type.js b/html/group__check__type.js deleted file mode 100644 index 9892d887b..000000000 --- a/html/group__check__type.js +++ /dev/null @@ -1,5 +0,0 @@ -var group__check__type = -[ - [ "check_byte", "group__check__type.html#ga6159f969729b3625cfb42b97b76a29b6", null ], - [ "check_url", "group__check__type.html#ga0e96bac2251d066910b2647830b6959c", null ] -]; \ No newline at end of file diff --git a/html/group__get__type.html b/html/group__get__type.html deleted file mode 100644 index 1bf1b8ea9..000000000 --- a/html/group__get__type.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - -libdap: Get_type - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    Get_type
    -
    -
    - -

    Convert the string to a value; throw if the conversion fails. -More...

    - - - - - - - - - - - - -

    -Functions

    -double libdap::get_float64 (const char *val)
     
    -int libdap::get_int32 (const char *val)
     
    -long long libdap::get_int64 (const char *val)
     
    -unsigned int libdap::get_uint32 (const char *val)
     
    -unsigned long long libdap::get_uint64 (const char *val)
     
    -

    Detailed Description

    -

    Convert the string to a value; throw if the conversion fails.

    -
    -
    - - - - diff --git a/html/group__strict.html b/html/group__strict.html deleted file mode 100644 index f11b16e06..000000000 --- a/html/group__strict.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - -libdap: The 'strict' mode - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    The 'strict' mode
    -
    -
    - - - - - - - - -

    -Functions

    bool libdap::D4ParserSax2::get_strict () const
     Get the setting of the 'strict' mode. More...
     
    void libdap::D4ParserSax2::set_strict (bool s)
     Set the 'strict' mode to true or false. More...
     
    -

    Detailed Description

    -

    The strict mode of the parser is the default. In this mode any error will result in an exception and parsing will stop. When strict mode is set to false (forgiving mode?), some errors will be silently ignored. The list of allowed errors is: The Array named by a Map element is not required to be in the DMR. There are no other allowed errors at this time (4/13/16)

    -

    Function Documentation

    - -

    ◆ get_strict()

    - -
    -
    - - - - - -
    - - - - - - - -
    bool libdap::D4ParserSax2::get_strict () const
    -
    -inline
    -
    - -

    Get the setting of the 'strict' mode.

    -
    Returns
    True or False.
    - -

    Definition at line 306 of file D4ParserSax2.h.

    - -
    -
    - -

    ◆ set_strict()

    - -
    -
    - - - - - -
    - - - - - - - - -
    void libdap::D4ParserSax2::set_strict (bool s)
    -
    -inline
    -
    - -

    Set the 'strict' mode to true or false.

    - -

    Definition at line 302 of file D4ParserSax2.h.

    - -
    -
    -
    -
    - - - - diff --git a/html/group__strict.js b/html/group__strict.js deleted file mode 100644 index 0028135ae..000000000 --- a/html/group__strict.js +++ /dev/null @@ -1,5 +0,0 @@ -var group__strict = -[ - [ "get_strict", "group__strict.html#ga030fddcb0529be0999faffd9c0fb7e16", null ], - [ "set_strict", "group__strict.html#gad0fb36451a4348afb0a294f709c905f2", null ] -]; \ No newline at end of file diff --git a/html/gse__parser_8h_source.html b/html/gse__parser_8h_source.html deleted file mode 100644 index dc803be9a..000000000 --- a/html/gse__parser_8h_source.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - -libdap: gse_parser.h Source File - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    gse_parser.h
    -
    -
    -
    1 // -*- mode: c++; c-basic-offset:4 -*-
    2 
    3 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
    4 // Access Protocol.
    5 
    6 // Copyright (c) 2006 OPeNDAP, Inc.
    7 // Author: James Gallagher <jgallagher@opendap.org>
    8 //
    9 // This library is free software; you can redistribute it and/or
    10 // modify it under the terms of the GNU Lesser General Public
    11 // License as published by the Free Software Foundation; either
    12 // version 2.1 of the License, or (at your option) any later version.
    13 //
    14 // This library is distributed in the hope that it will be useful,
    15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
    16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    17 // Lesser General Public License for more details.
    18 //
    19 // You should have received a copy of the GNU Lesser General Public
    20 // License along with this library; if not, write to the Free Software
    21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    22 //
    23 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
    24 
    25 #define YYDEBUG 1
    26 #undef YYERROR_VERBOSE
    27 #define YY_NO_UNPUT 1
    28 
    29 #define ID_MAX 256
    30 
    31 #ifndef TRUE
    32 #define TRUE 1
    33 #define FALSE 0
    34 #endif
    35 
    36 namespace libdap {
    37 class Grid;
    38 }
    39 
    40 namespace functions
    41 {
    42 
    43 class GSEClause;
    44 
    47 struct gse_arg
    48 {
    49  GSEClause *_gsec; // The gse parsed.
    50  libdap::Grid *_grid; // The Grid being constrained.
    51  int _status; // The parser's status.
    52 
    53  gse_arg(): _gsec(0), _grid(0), _status(1)
    54  {}
    55  gse_arg(libdap::Grid *g): _gsec(0), _grid(g), _status(1)
    56  {}
    57  virtual ~gse_arg()
    58  {}
    59 
    60  void set_gsec(GSEClause *gsec)
    61  {
    62  _gsec = gsec;
    63  }
    64  GSEClause *get_gsec()
    65  {
    66  return _gsec;
    67  }
    68  void set_grid(libdap::Grid *g)
    69  {
    70  _grid = g;
    71  }
    72  libdap::Grid *get_grid()
    73  {
    74  return _grid;
    75  }
    76  void set_status(int stat)
    77  {
    78  _status = stat;
    79  }
    80  int get_status()
    81  {
    82  return _status;
    83  }
    84 };
    85 
    86 } // namespace libdap
    -
    top level DAP object to house generic methods
    Definition: AISConnect.cc:30
    - -
    Holds the Grid data type.
    Definition: Grid.h:122
    - -
    -
    - - - - diff --git a/html/hierarchy.html b/html/hierarchy.html deleted file mode 100644 index eb8cea418..000000000 --- a/html/hierarchy.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - - - - -libdap: Class Hierarchy - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    Class Hierarchy
    -
    -
    -
    -

    Go to the graphical class hierarchy

    -This inheritance list is sorted roughly, but not completely, alphabetically:
    -
    [detail level 12345]
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     Clibdap::AISDatabaseParser
     Clibdap::AISMergeMerge AIS resources
     Clibdap::AISResourcesManage AIS resources
     Clibdap::Ancillary
     Clibdap::BaseTypeFactory
     Clibdap::D4BaseTypeFactory
     Cbinary_function
     Clibdap::cache_entry
     Clibdap::HTTPCacheTable::CacheEntry
     Clibdap::ce_parser_arg
     Clibdap::ChildLocker
     Clibdap::ClauseHolds a fragment of a constraint expression
     Clibdap::ConnectHolds information about the link from a DAP2 client to a dataset
     Clibdap::AISConnect
     Clibdap::ConstraintEvaluatorEvaluate a constraint expression
     CCrc32
     Cd4_ceFlexLexer
     Clibdap::D4CEScanner
     Cd4_functionFlexLexer
     Clibdap::D4FunctionScanner
     Clibdap::D4AsyncUtil
     Clibdap::D4Connect
     Clibdap::D4ConstraintEvaluator
     Clibdap::D4Dimension
     Clibdap::D4Dimensions
     Clibdap::D4EnumDef
     Clibdap::D4EnumDefs
     Clibdap::D4FilterClauseDAP4 filter clauses
     Clibdap::D4FilterClauseListList of DAP4 Filter Clauses
     Clibdap::D4FunctionEvaluator
     Clibdap::D4Map
     Clibdap::D4Maps
     Clibdap::D4ParserSax2
     Clibdap::D4RValue
     Clibdap::D4RValueList
     Clibdap::DapIndentClass with static methods to help with indentation of debug information
     Clibdap::DapObjLibdap base object for common functionality of libdap objects
     Clibdap::AttrTableContains the attributes for a dataset
     Clibdap::BaseTypeThe basic data type for the DODS DAP types
     Clibdap::D4Attribute
     Clibdap::D4Attributes
     Clibdap::DAPCache3Implementation of a caching mechanism for compressed data. This cache uses simple advisory locking found on most modern unix file systems. Compressed files are decompressed and stored in a cache where they can be used over and over until removed from the cache. Several processes can share the cache with each reading from files. At the same time, new files can be added and the cache can be purged, without disrupting the existing read operations
     Clibdap::DASHold attribute data for a DAP2 dataset
     Clibdap::DDS
     Clibdap::DMR
     Clibdap::MarshallerAbstract base class used to marshal/serialize dap data objects
     Clibdap::UnMarshallerAbstract base class used to unmarshall/deserialize dap data objects
     Clibdap::DapXmlNamspaces
     Clibdap::DDXParser
     Clibdap::Array::dimension
     Clibdap::DODSFilterCommon functions for DODS server filter programs
     Clibdap::AttrTable::entry
     Clibdap::EventHandler
     Clibdap::AlarmHandler
     Clibdap::HTTPCacheInterruptHandler
     Cstd::exceptionSTL class
     Clibdap::ErrorA class for error processing
     Cfunctions::GeoConstraint
     Cfunctions::GridGeoConstraint
     CGetOpt
     Cfunctions::gse_arg
     Cfunctions::GSEClause
     Clibdap::HTTPCache
     Clibdap::HTTPCacheTable
     Clibdap::HTTPConnect
     Cstd::ios_baseSTL class
     Cstd::basic_ios< Char >STL class
     Clibdap::Keywords
     Clibdap::Locker
     Clibdap::MarshallerThread
     Clibdap::parser_argPass parameters by reference to a parser
     Clibdap::RCReader
     Clibdap::Regex
     Clibdap::ResourceAssociate a rule with an ancillary resource
     Clibdap::Response
     Clibdap::HTTPResponse
     Clibdap::PipeResponseEncapsulate a response. This class provides special treatment for 'stream pipes.' It arranges to close them using pclose() instead of fclose()
     Clibdap::StdinResponseEncapsulate a response read from stdin
     Clibdap::rvalue
     Clibdap::ServerFunction
     Cfunctions::GeoGridFunction
     Cfunctions::GridFunction
     Clibdap::ServerFunctionsList
     Clibdap::SignalHandler
     Cstreambuf
     Clibdap::chunked_inbuf
     Clibdap::chunked_outbufOutput buffer for a chunked stream This performs buffered output encoding the data in the stream using the simple chunking protocol defined for DAP4's binary data transmission. Each block of data is prefixed by four bytes: A CHUNK TYPE byte followed by three bytes that are the CHUNK SIZE. There are three CHUNK TYPES: data, end and error, indicated by the code values 0x00, 0x01 and 0x02. The size of a chunk is limited to 2^24 data bytes + 4 bytes for the chunk header
     Clibdap::fdinbuf
     Clibdap::fdoutbuf
     Clibdap::fpinbuf
     Clibdap::XDRUtils
     Clibdap::XMLWriter
    -
    -
    -
    - - - - diff --git a/html/hierarchy.js b/html/hierarchy.js deleted file mode 100644 index 1a8031211..000000000 --- a/html/hierarchy.js +++ /dev/null @@ -1,168 +0,0 @@ -var hierarchy = -[ - [ "libdap::AISDatabaseParser", "classlibdap_1_1AISDatabaseParser.html", null ], - [ "libdap::AISMerge", "classlibdap_1_1AISMerge.html", null ], - [ "libdap::AISResources", "classlibdap_1_1AISResources.html", null ], - [ "libdap::Ancillary", "classlibdap_1_1Ancillary.html", null ], - [ "libdap::BaseTypeFactory", "classlibdap_1_1BaseTypeFactory.html", [ - [ "libdap::D4BaseTypeFactory", "classlibdap_1_1D4BaseTypeFactory.html", null ] - ] ], - [ "binary_function", "classbinary__function.html", null ], - [ "libdap::cache_entry", "structlibdap_1_1cache__entry.html", null ], - [ "libdap::HTTPCacheTable::CacheEntry", "structlibdap_1_1HTTPCacheTable_1_1CacheEntry.html", null ], - [ "libdap::ce_parser_arg", "structlibdap_1_1ce__parser__arg.html", null ], - [ "libdap::ChildLocker", "classlibdap_1_1ChildLocker.html", null ], - [ "libdap::Clause", "structlibdap_1_1Clause.html", null ], - [ "libdap::Connect", "classlibdap_1_1Connect.html", [ - [ "libdap::AISConnect", "classlibdap_1_1AISConnect.html", null ] - ] ], - [ "libdap::ConstraintEvaluator", "classlibdap_1_1ConstraintEvaluator.html", null ], - [ "Crc32", "classCrc32.html", null ], - [ "d4_ceFlexLexer", "classd4__ceFlexLexer.html", [ - [ "libdap::D4CEScanner", "classlibdap_1_1D4CEScanner.html", null ] - ] ], - [ "d4_functionFlexLexer", "classd4__functionFlexLexer.html", [ - [ "libdap::D4FunctionScanner", "classlibdap_1_1D4FunctionScanner.html", null ] - ] ], - [ "libdap::D4AsyncUtil", "classlibdap_1_1D4AsyncUtil.html", null ], - [ "libdap::D4Connect", "classlibdap_1_1D4Connect.html", null ], - [ "libdap::D4ConstraintEvaluator", "classlibdap_1_1D4ConstraintEvaluator.html", null ], - [ "libdap::D4Dimension", "classlibdap_1_1D4Dimension.html", null ], - [ "libdap::D4Dimensions", "classlibdap_1_1D4Dimensions.html", null ], - [ "libdap::D4EnumDef", "classlibdap_1_1D4EnumDef.html", null ], - [ "libdap::D4EnumDefs", "classlibdap_1_1D4EnumDefs.html", null ], - [ "libdap::D4FilterClause", "classlibdap_1_1D4FilterClause.html", null ], - [ "libdap::D4FilterClauseList", "classlibdap_1_1D4FilterClauseList.html", null ], - [ "libdap::D4FunctionEvaluator", "classlibdap_1_1D4FunctionEvaluator.html", null ], - [ "libdap::D4Map", "classlibdap_1_1D4Map.html", null ], - [ "libdap::D4Maps", "classlibdap_1_1D4Maps.html", null ], - [ "libdap::D4ParserSax2", "classlibdap_1_1D4ParserSax2.html", null ], - [ "libdap::D4RValue", "classlibdap_1_1D4RValue.html", null ], - [ "libdap::D4RValueList", "classlibdap_1_1D4RValueList.html", null ], - [ "libdap::DapIndent", "classlibdap_1_1DapIndent.html", null ], - [ "libdap::DapObj", "classlibdap_1_1DapObj.html", [ - [ "libdap::AttrTable", "classlibdap_1_1AttrTable.html", null ], - [ "libdap::BaseType", "classlibdap_1_1BaseType.html", [ - [ "libdap::Byte", "classlibdap_1_1Byte.html", null ], - [ "libdap::Constructor", "classlibdap_1_1Constructor.html", [ - [ "libdap::D4Group", "classlibdap_1_1D4Group.html", null ], - [ "libdap::D4Sequence", "classlibdap_1_1D4Sequence.html", null ], - [ "libdap::Grid", "classlibdap_1_1Grid.html", null ], - [ "libdap::Sequence", "classlibdap_1_1Sequence.html", null ], - [ "libdap::Structure", "classlibdap_1_1Structure.html", null ] - ] ], - [ "libdap::D4Enum", "classlibdap_1_1D4Enum.html", null ], - [ "libdap::D4Opaque", "classlibdap_1_1D4Opaque.html", null ], - [ "libdap::Float32", "classlibdap_1_1Float32.html", null ], - [ "libdap::Float64", "classlibdap_1_1Float64.html", null ], - [ "libdap::Int16", "classlibdap_1_1Int16.html", null ], - [ "libdap::Int32", "classlibdap_1_1Int32.html", null ], - [ "libdap::Int64", "classlibdap_1_1Int64.html", null ], - [ "libdap::Int8", "classlibdap_1_1Int8.html", null ], - [ "libdap::Str", "classlibdap_1_1Str.html", [ - [ "libdap::Url", "classlibdap_1_1Url.html", null ] - ] ], - [ "libdap::UInt16", "classlibdap_1_1UInt16.html", null ], - [ "libdap::UInt32", "classlibdap_1_1UInt32.html", null ], - [ "libdap::UInt64", "classlibdap_1_1UInt64.html", null ], - [ "libdap::Vector", "classlibdap_1_1Vector.html", [ - [ "libdap::Array", "classlibdap_1_1Array.html", null ] - ] ] - ] ], - [ "libdap::D4Attribute", "classlibdap_1_1D4Attribute.html", null ], - [ "libdap::D4Attributes", "classlibdap_1_1D4Attributes.html", null ], - [ "libdap::DAPCache3", "classlibdap_1_1DAPCache3.html", null ], - [ "libdap::DAS", "classlibdap_1_1DAS.html", null ], - [ "libdap::DDS", "classlibdap_1_1DDS.html", [ - [ "libdap::DataDDS", "classlibdap_1_1DataDDS.html", null ] - ] ], - [ "libdap::DMR", "classlibdap_1_1DMR.html", null ], - [ "libdap::Marshaller", "classlibdap_1_1Marshaller.html", [ - [ "libdap::D4StreamMarshaller", "classlibdap_1_1D4StreamMarshaller.html", null ], - [ "libdap::XDRFileMarshaller", "classlibdap_1_1XDRFileMarshaller.html", null ], - [ "libdap::XDRStreamMarshaller", "classlibdap_1_1XDRStreamMarshaller.html", null ] - ] ], - [ "libdap::UnMarshaller", "classlibdap_1_1UnMarshaller.html", [ - [ "libdap::D4StreamUnMarshaller", "classlibdap_1_1D4StreamUnMarshaller.html", null ], - [ "libdap::XDRFileUnMarshaller", "classlibdap_1_1XDRFileUnMarshaller.html", null ], - [ "libdap::XDRStreamUnMarshaller", "classlibdap_1_1XDRStreamUnMarshaller.html", null ] - ] ] - ] ], - [ "libdap::DapXmlNamspaces", "classlibdap_1_1DapXmlNamspaces.html", null ], - [ "libdap::DDXParser", "classlibdap_1_1DDXParser.html", null ], - [ "libdap::Array::dimension", "structlibdap_1_1Array_1_1dimension.html", null ], - [ "libdap::DODSFilter", "classlibdap_1_1DODSFilter.html", null ], - [ "libdap::AttrTable::entry", "structlibdap_1_1AttrTable_1_1entry.html", null ], - [ "libdap::EventHandler", "classlibdap_1_1EventHandler.html", [ - [ "libdap::AlarmHandler", "classlibdap_1_1AlarmHandler.html", null ], - [ "libdap::HTTPCacheInterruptHandler", "classlibdap_1_1HTTPCacheInterruptHandler.html", null ] - ] ], - [ "std::exception", null, [ - [ "libdap::Error", "classlibdap_1_1Error.html", [ - [ "libdap::AISDatabaseReadFailed", "classlibdap_1_1AISDatabaseReadFailed.html", null ], - [ "libdap::AISDatabaseWriteFailed", "classlibdap_1_1AISDatabaseWriteFailed.html", null ], - [ "libdap::D4ParseError", "classlibdap_1_1D4ParseError.html", null ], - [ "libdap::DDXParseFailed", "classlibdap_1_1DDXParseFailed.html", null ], - [ "libdap::InternalErr", "classlibdap_1_1InternalErr.html", null ], - [ "libdap::NoSuchPrimaryResource", "classlibdap_1_1NoSuchPrimaryResource.html", null ], - [ "libdap::ResponseTooBigErr", "classlibdap_1_1ResponseTooBigErr.html", null ], - [ "libdap::SignalHandlerRegisteredErr", "classlibdap_1_1SignalHandlerRegisteredErr.html", null ] - ] ] - ] ], - [ "functions::GeoConstraint", "classfunctions_1_1GeoConstraint.html", [ - [ "functions::GridGeoConstraint", "classfunctions_1_1GridGeoConstraint.html", null ] - ] ], - [ "GetOpt", "classGetOpt.html", null ], - [ "functions::gse_arg", "structfunctions_1_1gse__arg.html", null ], - [ "functions::GSEClause", "classfunctions_1_1GSEClause.html", null ], - [ "libdap::HTTPCache", "classlibdap_1_1HTTPCache.html", null ], - [ "libdap::HTTPCacheTable", "classlibdap_1_1HTTPCacheTable.html", null ], - [ "libdap::HTTPConnect", "classlibdap_1_1HTTPConnect.html", null ], - [ "std::ios_base", null, [ - [ "std::basic_ios< Char >", null, [ - [ "std::basic_istream< Char >", null, [ - [ "std::istream", null, [ - [ "libdap::chunked_istream", "classlibdap_1_1chunked__istream.html", null ], - [ "libdap::fdistream", "classlibdap_1_1fdistream.html", null ], - [ "libdap::fpistream", "classlibdap_1_1fpistream.html", null ] - ] ] - ] ], - [ "std::basic_ostream< Char >", null, [ - [ "std::ostream", null, [ - [ "libdap::chunked_ostream", "classlibdap_1_1chunked__ostream.html", null ], - [ "libdap::fdostream", "classlibdap_1_1fdostream.html", null ] - ] ] - ] ] - ] ] - ] ], - [ "libdap::Keywords", "classlibdap_1_1Keywords.html", null ], - [ "libdap::Locker", "classlibdap_1_1Locker.html", null ], - [ "libdap::MarshallerThread", "classlibdap_1_1MarshallerThread.html", null ], - [ "libdap::parser_arg", "structlibdap_1_1parser__arg.html", null ], - [ "libdap::RCReader", "classlibdap_1_1RCReader.html", null ], - [ "libdap::Regex", "classlibdap_1_1Regex.html", null ], - [ "libdap::Resource", "classlibdap_1_1Resource.html", null ], - [ "libdap::Response", "classlibdap_1_1Response.html", [ - [ "libdap::HTTPResponse", "classlibdap_1_1HTTPResponse.html", [ - [ "libdap::HTTPCacheResponse", "classlibdap_1_1HTTPCacheResponse.html", null ] - ] ], - [ "libdap::PipeResponse", "classlibdap_1_1PipeResponse.html", null ], - [ "libdap::StdinResponse", "classlibdap_1_1StdinResponse.html", null ] - ] ], - [ "libdap::rvalue", "classlibdap_1_1rvalue.html", null ], - [ "libdap::ServerFunction", "classlibdap_1_1ServerFunction.html", [ - [ "functions::GeoGridFunction", "classfunctions_1_1GeoGridFunction.html", null ], - [ "functions::GridFunction", "classfunctions_1_1GridFunction.html", null ] - ] ], - [ "libdap::ServerFunctionsList", "classlibdap_1_1ServerFunctionsList.html", null ], - [ "libdap::SignalHandler", "classlibdap_1_1SignalHandler.html", null ], - [ "streambuf", null, [ - [ "libdap::chunked_inbuf", "classlibdap_1_1chunked__inbuf.html", null ], - [ "libdap::chunked_outbuf", "classlibdap_1_1chunked__outbuf.html", null ], - [ "libdap::fdinbuf", "classlibdap_1_1fdinbuf.html", null ], - [ "libdap::fdoutbuf", "classlibdap_1_1fdoutbuf.html", null ], - [ "libdap::fpinbuf", "classlibdap_1_1fpinbuf.html", null ] - ] ], - [ "libdap::XDRUtils", "classlibdap_1_1XDRUtils.html", null ], - [ "libdap::XMLWriter", "classlibdap_1_1XMLWriter.html", null ] -]; \ No newline at end of file diff --git a/html/index.html b/html/index.html deleted file mode 100644 index ce92ec863..000000000 --- a/html/index.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - -libdap: Main Page - - - - - - - - - - - -
    -
    - - - - - - -
    -
    libdap -  Updated for version 3.20.6 -
    -
    libdap4 is an implementation of OPeNDAP's DAP protocol.
    -
    -
    - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    libdap Documentation
    -
    -
    -

    -Introduction

    -

    This reference documentation corresponds to version 3.20.6 of libdap, a C++ implementation of DAP2, with some extensions. The libdap library includes classes and functions which implement DAP 2.0 as well as utilities which simpify building clients and servers for DAP 2.0 and DAP4.0.

    -

    -Doxygen Conventions

    -

    This section lists some conventions used by the Doxygen comments which are used to generate this Reference Guide. Follow these conventions when adding to or modifying the reference documentation.

    -

    -General

    -
      -
    • -When using the name of a parameter, use italics (the e command or em tag).
    • -
    • -Use the c command or code tag when talking about literal text.
    • -
    • -When talking about functions or methods, using func() or func(arg0, ..., agrN) will get Doxygen to insert a link to its documentation.
    • -
    • -Typos: If you're using emacs, the command ispell-comments-and-strings may help in removing typos in the comments (and strings ...)
    • -
    -

    -Classes

    -

    Classes should be documented in the header (.h) file where they are defined.

    -

    Commands that should be used for the documentation of classes:

    -
    -
    author
    -
    Use this to attribute authorship. Include this for all the classes except internal ones which are not visible to users of the library.
    -
    -

    -Methods and Functions

    -

    Methods should be documented in the implementation (.cc) files where they are defined. You can put the brief documentation in the header file, but that may be more confusing than keeping all the method documentation in one place.

    -

    Functions should be documented in their implementation files.

    -

    Commands that should be used for the documentation of public methods and non-static functions:

    -
    -
    param
    -

    Include for all parameters. Doxygen complains if an overloaded method changes a parameter name, so scan the warnings and try to keep the names in sync..

    -

    -
    -
    return
    -

    Include for all methods that return something unless the method is so simple its full description starts off with "Returns..."

    -

    -
    -
    brief
    -

    Include for all methods. In doxy.conf I have turned off the option that generates the brief entry from the first sentence of the detailed doc and the option that includes the brief documentation in the detailed documentation. So, the brief doc will appear only with the summary information and not with the detailed documentation for the method.

    -

    -
    -
    exception
    -

    Document the exceptions using the exception command.

    -

    -
    -
    -
    -
    - - - - diff --git a/html/inherit_graph_0.map b/html/inherit_graph_0.map deleted file mode 100644 index 3c4dc6d5a..000000000 --- a/html/inherit_graph_0.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/inherit_graph_0.md5 b/html/inherit_graph_0.md5 deleted file mode 100644 index 66e454079..000000000 --- a/html/inherit_graph_0.md5 +++ /dev/null @@ -1 +0,0 @@ -b4d90b917dc73f11bc4f2e77ece83706 \ No newline at end of file diff --git a/html/inherit_graph_0.png b/html/inherit_graph_0.png deleted file mode 100644 index b6c0ce7069b353cc08c6ef826eed1c2b3806a577..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1393 zcmV-%1&;cOP)Px)D@jB_RCodHnR$qnRTzh7oHRwV#fr)nw<04dBP!ZRCc-GpA}ykVuz#W;%Mzju z3XGD%grYwb31x5zGy0>Ah&Ee@RttpL{`-pAp%~Y#a|PV5$at50yI6dsIl7=I}rYbaTY9 z;wn<0E4rvTDx^R+M;t4zq8@=B&nOR<8R>SOol)j_e?0Q5bP*iUM}zmf59$%vS?t^kaucCQYZH}a-e}vf{wU`;%v3U@g zpWxrP5Zldn0Bp^bhwRYI_#+hbFda>O=Xf9d(}T7nsJjbx=Gr)4`|OO$2V=XTf=c!(?}l~o4YrhXy@~(GfBQ>3GVWkNO_We+XAYkYl`-W$qwd2~UIde}VfU zXc~rVSPPvn8%~6mz)im+OJg7S2dOu~6aN*w1!F)tpP%7ou-_lSy7tv84eC|v{~NnI zJ()+sx!@1>IiNr@(9eiLCGANN0d^U6z$OFX!VXDw4r# z2Yq0Ff5Ch>2i)92b1-(m`>+Ork1%Ufy#n3E@LoefpJ2oj59Ov_fkD4x?3-nVl0E=G zz_V}`R;Y1h>C&64OrRNaKwwc*ms#l=Be$EFM`2oBG3!x{PPvwhX9c%*o@O97uMOw;(6JT*s zg(}J)qs|oQ0&j_Dpc;KdrCG2NT(`d%44}8n$KV<)_v0$aX9jjE=(CM*8r%qdF5h=W z*Hxv-cp|*UYn2<%Q{stMo{Dn)`Ci)z@%xQzkL7FU=pMJ)-C!8Wn1Z&W3d$YNn{ONx z-B<-pD;6)H#vA!s!J+x`TJxK0ZJ4$5-4uV|cm>8ECUN(tlJO)g2TxAWvS5@*7g6S^ z&1)A0p1@k<$I`}vhW-jECCBsB_nGP)=sue`1I>fAa8GW~YTvQBX3d>#_0_ - - diff --git a/html/inherit_graph_1.md5 b/html/inherit_graph_1.md5 deleted file mode 100644 index 3d7c202af..000000000 --- a/html/inherit_graph_1.md5 +++ /dev/null @@ -1 +0,0 @@ -302774078c185b3cb62ad206226e62dd \ No newline at end of file diff --git a/html/inherit_graph_1.png b/html/inherit_graph_1.png deleted file mode 100644 index a21fdec8373d6f209b5a08bfc348102ae2c5ed65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 851 zcmV-Z1FZasP)Px&4M{{nRA>e5mRpETQ5eT(#&sCxK_-QoFfNfW9;7_Vr9|%DP#X7ZDP>CDC@+*p z@$kaR*a<7d*w|7g2y zjQfRe?7j@~wfk>k!4UJRgCW5XeLT$xsbfp&O#A zqoQYZ!gc6^OjOJ%Gm()zgI3r8+Ql!zC(xwQO6J~#?{E*=VKq3dqwoc;!AE!uBOs|_ zPZ?ha#Taslj?RGHlN7(;c}Q&}rvK>MC#q&DSD-!@)CZI%t+vWO88sIqWsuC<2T7Hw zA<7PYw@menMiZTvi??vy19#vUNQ>Ydbii}i1=4<4@w@crXEqmQL=DV>*AUeKDy`8# zfpVsXEaBnZ(5Jv4E^}WK*$6{HW@+881ZfWZfKjUCG?wdHxDSVOF?$(E;1O)LH}ceD z4XMiWr=+*~(NJ$M$=B^k+8u>AupE>XCqOz6OF_%QX%Yn)I0n?eHC@?q1GI4;hfI`q z4{2l+8mtCqr8m46DnS{d&Cuxxh10H5;3{ME47dCSQI-L3L58XSG|DtX9x##)nC}_U zc4ArrzUO!aeOh3qjHb`vmm;aR{`8WTuw&D$xEi9cF@_rGAG;sH2=zu^Hm)pcq4x zvdz#1GC_OFE6|4PWDQY#3w(o@ppDa+Gn%q8Pljo~>4dEy?FMCp<(6(HROW`barCF4 zH>Wq7bX`}|wjQjsG{(U+sIfPDSdTSC=~+rCGj6Bs@H6e(JpWO4JoLmf4QYJ_MH~o* zM9fez7!nLI4w!1l5MxNbQ|6RuTTa!6xXI|Ow;D{K)&|S0-p+jVA$PXS<`t$B90(2s d2mUSxegU+SmV%(1k+=W=002ovPDHLkV1oFWiueEk diff --git a/html/inherit_graph_10.map b/html/inherit_graph_10.map deleted file mode 100644 index 46709ca7b..000000000 --- a/html/inherit_graph_10.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/inherit_graph_10.md5 b/html/inherit_graph_10.md5 deleted file mode 100644 index 2536ab758..000000000 --- a/html/inherit_graph_10.md5 +++ /dev/null @@ -1 +0,0 @@ -e74f97071d051649e258432341fa6a26 \ No newline at end of file diff --git a/html/inherit_graph_10.png b/html/inherit_graph_10.png deleted file mode 100644 index 3a7f13f4ab29ebaf8f0841e1b384e710f6ce1125..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1953 zcmV;S2VVGzP)001Ni1^@s64(>7I00001b5ch_0Itp) z=>Px+TS-JgRCodHnQ3fQMHq%#Kv6-#C5Q^Og2ffZ1tAurkr+@k{%{4{W7KHe!HA;K z7`FrwBR??yAc{ml6LG}_7t{bo+)!}WqJsOrfPm=pv}fYv=G=OE+hUr`n>?LwzFE$k z?|d`o-rK6Gq!fV^ffRuhffRuhffRuhffRuhffRv_7=h}XYYoMBS&l!sQUqEXfk&BO zMm$NUxRTj@DNo4pCs&F2$LnDN)I)!`3;Yt}&pflC zhz8K$sCzkgO? zz6Q_!>q=H>1lr;R?9QYYLs#exb)XIg6SAmwpySx0om<&&6ULilm%vdabD4nNPi^KO zNVx>M!M*SaOohk5zG?`Z4C^EO$>9mO6_UzCpe;_ocA=vU?oSJ;@b><$!TlOHHt=0y;^Yu*s~g4qk>M<|VzZ<8AM2Fk^Yrm`|lYE4s7wLRs}Q9W}v7L}|o9$(mQ zixV)un6Ie^BS$~%w_pVr@CzZR55_{!@54JDV%<#TYj{87=&W%F<%ci{9A|QxNG7t{ z6TIF4D`-5Fz6Q_4H#5Uz+#1Tsd27K_Gw5B6dhq(q=}j7|qYnFHzXPklEPhGdPbYxyk$hbOTlC`kF?! z(O>@y@^=g7+9~Vru9*PyvawS#zn=x&eHVbIz&@bnz~juJQd0aP6rpk1t>v)}`$ z1|PiZn+ltPLALKTpnR3z3hr>_=d;Tjt)@SoFzaA%FsV%7b0Ek$oquHJIEeB$FlnZP zYjN|$x|Ygv@ZMw)oB}55?V!4Yb6gKwKn=L=aP3#IjlFWbN$7Qq?;j90V7T9l@Tp~R zYNOTk=WL2aSv@?Pm#G^EpTqMo6S{(Px$Y~V()BU4kQUQxQjwkp!3R)O;U@DEa7oD| zA5$L>KKP$t7z9nkXviwg<-A?MB)kko;Y$NJPFDN^e_wpH=1*I0yod6 z5X*5Uk}8sbhctDq>Pu-H_s!}So_aoqO4sKcMU-e7ymofm5<6%%JL_yFRhiEVeP zuO}av59MHp<%6{?=nITEA%j1!JOk(M@NLFuN|V||&r>g)zr%Dm0X#L1hvOieUYL!a z1$UwpPhs!Rbxj7<54ywK;Atli+#O4k?Wsi^Ey(Wv5s`jm9tkNUIl8+h$H@D-qJ3%VF%5Ab37@ZF_8@SrU* zHiy-jV+f_Mv;UIw><#w+A?o}L_9Pqw*WqSR!*yy8!scfxg9qbH}= zbWBJ(liNh~UOIybZUP++GvR4)qlFU;vr(RspJld5>ewI?shs@WSq=8_z2IgfJP=QdhR zUp9`#ek!Yb5?%n?Wc8txqci&q%I9DSd=fDS+XT$hBRI!{i4!yo!wq8+HYbzE&7w@E ztzj&9AI|p#oD3%90&rt^3eE>lXz%lJFowr~^1epFEGy_ku-*-fqw|&1`!tw%ZgBf= z5BGovLZ$0tXxqwN7=RgG>zlKf*6?6EuK22png? zR>ApT!aNA|V8DEME8q|CvCS}mI7$$Y84#nYI;RG9l?b<&B6Ky(pJv9#g0yo~La6g!+%C>djru`YFL3n$4 zjbAgr>+;lH1S)#znsh1_J8~i|5F*|F;CpTTE+waRRnxo-}sjMj$r<-3c8{zHVOa zXp2tk&5uAwOu(hw$`Sdule`@*0v#~{J6ep>dYg$rO2B4xH{00000NkvXXu0mjf>T#b! diff --git a/html/inherit_graph_11.map b/html/inherit_graph_11.map deleted file mode 100644 index 436eda13d..000000000 --- a/html/inherit_graph_11.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/inherit_graph_11.md5 b/html/inherit_graph_11.md5 deleted file mode 100644 index 85c1d2a42..000000000 --- a/html/inherit_graph_11.md5 +++ /dev/null @@ -1 +0,0 @@ -18532268fda024fbc2f681110b3102de \ No newline at end of file diff --git a/html/inherit_graph_11.png b/html/inherit_graph_11.png deleted file mode 100644 index ff31e8d45d75683e9dd01013ac553dfd7190682f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1459 zcmV;k1x)&hP)Px)ZAnByRCodHm|KWdRT#&$G@F_|&`wSNr|W?5%6|>~rQgXODKq^@rcy z-&%X^Z?E-zYpuP{>Cq!9Mj%EYMj%EYMj%EYMj%F@E+f!0r`KbtyFI5qR@G+&*3j*R zVb>1{3yD31^R+qkv8w(e&_tKVWxL%gTM?9}1$H#+GXgDi`?ze^^HzGcO)Ph_2*jj! zvxHVNoS5`#qSVdW#H4q#gjO@0B9h*Z2Q7vMxCrKe@EuES|4U816s?mv0Y2R$8z{V{BW-{4kA zH5lVvuzm|ng;4&B^gXOkxFWeYhV$p}2zcMmVDi$*a|X80^L3%_f)yoe@8M?5r3p@e z{(CQ#+ApWrd^gxxWrA0iti6XX zF%4pGa28(xsqV%2Iw|N&zb4=ma244n?`ux%V>qWW;j7X@2j|yo%#bU>xK}m;lwPg@)mTFWsl3 zuGGqmb61_oY65qJFu2;YLAi<_00X)SK7&xMVgrzB3r08z()zsfOe)>_w%iBKM zQ`ihU!3pPfm&$9Y=3$%;&i+yGAcS&jHCd^~V0@JpDxA;d+L_>L@*dH@$-WU%xvS*K zi8efQ!L2?!&PtH-CH73tZ^CMDlB7I` z9VVS(u3n{UcWN^#>&O#OHXk2+NmQpz-VM$(teXZ;2q_3buzEi%1CtwzA1!wCF zxDqzPI!Kd-S^6HBzx#64BJ5sf&L|H{~jF6&`v(G+_);ady9*6D>W!{t%dq_A98tZ zi%xppGis>|lU|FTdboEOo%FTmM`vRvI-HyIbQN{N-vPVDt?q*Z_VoSxU_ao-!!@w8 zD~V}hj6jS)j6jS)j6jS)j6k~x{09d# - - diff --git a/html/inherit_graph_12.md5 b/html/inherit_graph_12.md5 deleted file mode 100644 index 5ca216fd5..000000000 --- a/html/inherit_graph_12.md5 +++ /dev/null @@ -1 +0,0 @@ -190f17b27d4f6ec811dd754da1cea8e4 \ No newline at end of file diff --git a/html/inherit_graph_12.png b/html/inherit_graph_12.png deleted file mode 100644 index c418f84a1ef48461274deaa3a602b248f08e49e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1979 zcmV;s2SoUZP)Px+bxA})RCodHnR%>TLmbCjMb%bowWwNBRFK+BNd&c(s6F;AA@(X#g!se0mk6OL zqSg{?tg$b(1|?{0GNQJli$KxaBIr|9BEJ8x0H)Rr7*IR{emw%n4W z36*sqC2v`$QoojSASG|hElHYCSqGYtygj+tDChy(z!9MQgKzIjRPJMSx}8(5Yg2k1 zz$ll(f=wB%eFoWwVRy@hj=gQ4tCb&h8M?aW-OHcS{GQE7-bI<#@!5^^rtF_hb2G}p zSzM;*L#O@9bZkPO1sLNJ7!Er&VZ8PlVsi%ecXt(g+t$)~pC;`F(2V@~*LTtEi{Hdd zPAZs<#+xuja>uSF=eJa~gS5MAE?(n!wL?QW@C)1q?!eWwMDD;s)Fr6i{6fD*%OX#z zdAnF{@M?bf520PJGcquWVjeS?;9`)gK29Kdp*B~ zsFUIGN;LQ55W<@?Oyni!9;(c79QCm<6_$se!E;=+EkRYA-yIwqUFp&GF+as;;1BKU zY0xK?pX)BP+4nnm0s2Bv?Cnc5UI-K6TX-IZ!3_8k-hgEx=x74_eGKoz)}U4c{XYgg z?`wDt!iKOF@oVrl%!boJtpYP)Q7dRDxK_@~xnB<5K-uPbuA}$nbsBji)4ja*r0bvM zyLVY3>+e&0Dm;{(J1T4UyRW;I2L2A~f-*rK01fmNR8@Ot@-Jn zV>-6l7F+cqrQ(3kBRCx6JM6q@1eW_OwPbN#D_sh!hXa-cM+VORbHet(FTHv z?`EMd;XISqjltxMbqG>b2(g6aDUl zJ-~-=SGWo4X$T#j&vlAD$sMZfwxR7;g2|ym>4V-atFKDA3;1RW_&wQs2>K!flqQNv zsty6)LgQfuoDX?lR;DdK&uO&vfuQ{O-NS)-Dcd`FeZ|CDkIKjJ1GupLA;@Dv#}fS-1oyysZ4 zCvm&630g)b&RFOhu{H565R^|y+x6E6z&EjPnu9X7r;Oz$vS!>s>`whr)K+$`(JA%A z_D)`3o$G+F9B;li+zr0AroaiXIGCh+Lr^~gce>eNk`D*vILdh+QHk3AFmq>lB&)jv z9}RxLQiH(VRUHgZz^h=g2gVUMlDzfi_cY^~w3mR194E(q)Hend&-H%lYk@nq_qiqb zu+6LPV*nqd)w6-z;U_?^tX{1!;k*wYaChIwz_(RCXC9!06>r5&xu8QaSGWFBocF?0Sa4XEK zu3`Y!VIt_4Np&RXZ7uomod@H=jl{1dufszS%Z*?p+yzs>b$S?XgbtUli9efo)vk=S z2J|Qxvpa1AVX=Z^K3D_5omZKB?iPb#CaAu!WF_kOk81M^GdYIfiBM^vT$aA;fUoRk z%7=L)DDt}2b$WAf5G-7)6UUYS$6vZmzkhRh4ksO0=EPdrIPkyOd0WKK zG>y)7;J^5_p|d?p*KZLAQu4OQLZoRl?m+k%s_0CA`%Fp>w1NZvO!^NM{g&u|yn6nl zXKF|ebe;q6a_L9Gf3hSc2a*HHf#g7PAUTj6NDd?ik^{+s - - diff --git a/html/inherit_graph_13.md5 b/html/inherit_graph_13.md5 deleted file mode 100644 index e4aa440f8..000000000 --- a/html/inherit_graph_13.md5 +++ /dev/null @@ -1 +0,0 @@ -21e1affa8335a8db373d14a637067a3d \ No newline at end of file diff --git a/html/inherit_graph_13.png b/html/inherit_graph_13.png deleted file mode 100644 index 70344321d5d1d1eaa158aed206aeaeb26e38bb78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2014 zcmV<42O;>0P)Px+m`OxIRCodHnhC63Lm00P*(m1%RGnE@q=Xl!K9>&9O-E40S&bzAM+^HO!SmSt+ ze`25hTI2kt7dK+&7{pzk2g}2HFcj2oV6b#n>r?UA&Q|`9^#*YM&2T;(m}zTQ@}ERy z*I~Cs`K;NGg1{-*Bcptge~bJR`!svK|1IB$nIpbgpOU;M#i02Xmc*5-_KKvno(`S6 zI(%2Hn@t8%umb#;Jy0iq5XYS@9s*~Ob_gERIT zdNT81W|f1h2X`U;5N-m`GjJSagG>zvujewQE`b*-);~WdVft+^28zpr8Ud4GRagku z!WrOl_XKPJi^221fIXo|E)Oq*_xTmP3WFi2$UmWu=_r^EUxE+WHP9DSXZqVwvjM+h z`@FMFZAeA8+l}f8@GPh{u-vuPr|c~7>Ddm{Bk(l%jfX+5_WH=s{kp5$714jQH0;L!QaluuZ! zX=EJKoxo1U1FC%rD4$5D&M`0tK7d$0**YxfbBs7xLU~?#B89_Xe)Zsrq&|@b;iuKI zddWNWDpZeeLFyB~4ZH_^AzT-;vdowU1^e|kx!$88svM3Q*AwsqQVI9$@d(weS_jSXrv5;yWn|P z8=NJbp_~DOYWXJ|H~ku1`dm(&iDU;j6Pl`K2Z!tOwxFZNfp6uH!wmQcoZ?pngWxC# z+7!blWg!?u=Yz5x<$a%4u{vgfL$DnL%tqb6gGh)Aoh7J|4{93O~zUSTwd(I?K}fVgDUE8M~w#l+JQK_ z>ox7bTHiHs0z3=KHMJd_Ddxf=u!BJkn&scakKpVu3)Ifwc{AZl@F{U1C&6fN=Fvg3 z;TO0c`hgk=-j7qca($iw4)`~40%YZ^%%JfY zw(~AbhjYOGj)OL6hdlpeuQQf<_IVB%y!V3rQ6nL*zm?F9y3*!Z)oGzuF`rRh+$Bb$-BK^B&h(7zReLHc!M|B4-U9HZjDO}FxcCSr&I z=q&5bsZU<%RMy~d;9rJwqY)d1Js(^e)Y6Wm%fByh#_zBX90omoNudk*D(kZHB;7p} z3<%}E$lKuddp-F=>dR>@`2zb8+zda!6ey+28XUJXS}(%;FdH1qGhimv({ohV4_q#4 z$z^3Y_y@3Fr80c2gaKP0V<*V_!(OP9m-=qvmrO0K$AQIQS_b8Qt(5hhBMjJA7}8ZO zDmY;j$DD=y6rNj9ug4!M>$1|!fw_^!4IV#*ORcic9L*TK?B{VauF(>0rkSH9hM_fY zA_Yflj!R42RSJ%l7>3roiK2IoqVN3H>`l6>?s_0M4*KP^=I)^X6r0q0JTQZ - - - diff --git a/html/inherit_graph_14.md5 b/html/inherit_graph_14.md5 deleted file mode 100644 index f10e3ff6e..000000000 --- a/html/inherit_graph_14.md5 +++ /dev/null @@ -1 +0,0 @@ -4c46c892996024177865ae27472afa7b \ No newline at end of file diff --git a/html/inherit_graph_14.png b/html/inherit_graph_14.png deleted file mode 100644 index 042a3a57ebb8cae404aee4579e4d8ebed1feac38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4116 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 - - diff --git a/html/inherit_graph_15.md5 b/html/inherit_graph_15.md5 deleted file mode 100644 index 427b440a8..000000000 --- a/html/inherit_graph_15.md5 +++ /dev/null @@ -1 +0,0 @@ -9863c0131a90c104df8a44b3b2806a21 \ No newline at end of file diff --git a/html/inherit_graph_15.png b/html/inherit_graph_15.png deleted file mode 100644 index c2c045d907c63a412425b9e9144a58862c9a2509..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1838 zcmV+}2hsS6P)Px*=t)FDRCodHn0xG(Qyj;C(naZ}6jA(&v@WPzGMBjzn^7tu$}LSsDK<82F1c*} zXyPAc7!9qZ7`e4&vxd?{N+`c#LQ*6t*VpUYbJnx(p6B;{`t{8(ocH$np3gbwbIx;~ z&+|Fw`R=KyiHZ@35r`3p5r`3p5r`3p5r`3p5opv1?2&Qx<7k_h(H@&(1kw@MO6AgY zgLaeh2I}2lct(3{iV+AAsKpo>DwRr;>90yovHyP^fl=K3=Bx;0olseRu`NcRPy}K^ z6$(>yDjI>9P(>pZ{R%}OCRCv?MW><>s76Ay<6={wC7c0cL0t$VN>;I-!*H8i%yqZ& zI-Avu+pSjAh>NL4LbYc7+UMKC%p=~|=d0nmO=#SywObxlg`WE9C_8BRM9@vXv75oI(Lr_7XfVcFSPEalBnUE*UIEv;5$=GXff!5RYgh+&L;B%U&DC}EtOu{R z0#1jZcQI}Qci=rh@mMK2^`8ZXDfARo9Mw*gTLG_#xCC z=%VLU3We|eC!bm4rXfH2o zX;_wOG^o!c^+PE=N&135o(gM0)k1olZ8QBzv?dsoTfl^B4xV7G;Uh?ENxG6_JJy8t zgi6cU1bONNd1AB(m5kEZ2hB;0(zvbO(R zhdDc`>YpVa_z!Rpm}IImxS1-+vGd@Dl;dI8A<1nHbEaGhnZM!nJPZTpcos~momP{b zo}vB;&Z7HpaJP?!{ow^Li9UxLp)L4eM?lcQ818D5$;6ug%6XLQ9$T`u{rNs0`?aL* zN#(=tkkpT(^mU+ojSL5qsu@g%9^kIu58eZl!vxST#K*)j!M%C>!y%rqK?Bs^W-Sy*T8T4-t zx56AyQ(zW+2?qXGFt9;BXxrDrPjD~PfjSl(w;aBPaj+6*zzN_9=Yv@VzktEn6I6e2 zJ$jDd0)(+|oU3)Dy9 zv$=p@$z?|qs?xmf%wFIts$4B-=nvj>xjY>_6%4HMA#?^4%0MaqV|W7Ws636r36>t) zj!O4bgFdZNb?>1zRWEA#iaQ$0{{j>lZ^E0LSuv_KzGDT4x9GpNf=^a=ZbF5Jl{KhZ zZJrkHmMm?dF>i;sGd&4{+}-}K=ouO)J;fTLZ*vCyNV^32|0gYXWnH?VpuGvdg=M}I zsC!Ch$rJUiq+<=GG(?_iS?WQfN!kaV&T?pI+dq*|4P9H_xQ%oy$m{$UwNGipwGQLj zC&N(ib-YVe?N{C|U2L4ZQ6iB0%JY9pRE$8?A`la*YN3o18G)EkF%PO5f%^WGPp|5g z;$;7&2-N1?O!yd>?)S^J-(#X;1o9%_cfchuGtVKm#|Xp-#0bO)#0bO)#0bO)#0bO) cG*Sfq29oPMgO6;;UH||907*qoM6N<$f@fiEZU6uP diff --git a/html/inherit_graph_16.map b/html/inherit_graph_16.map deleted file mode 100644 index c39746a2b..000000000 --- a/html/inherit_graph_16.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/inherit_graph_16.md5 b/html/inherit_graph_16.md5 deleted file mode 100644 index f379a4683..000000000 --- a/html/inherit_graph_16.md5 +++ /dev/null @@ -1 +0,0 @@ -de2bfcbb3abf341b8c065caad8503d41 \ No newline at end of file diff --git a/html/inherit_graph_16.png b/html/inherit_graph_16.png deleted file mode 100644 index 503178f43c1f07a0f19f4314a7682e503a9b2c26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1751 zcmV;|1}OQ7P)Px*kx4{BRCodHnS01oMHq+Iyrr49(zMh{`?^?4WvOUEe-uHKLSz;OQ5a?>nq5dL z0xw0EKP00dGK!Q;gbXP&wSpwntn6x*c}cCbG?fZ3Xg$y8j-1v#yJvNm??dJX&z_k% zGjrZ~=bf3eySZFc^g#4L^g#4L^g#4L^g#4L^g#4L^gsi9ph=PE52S2Dk@8p+Jx~n~ zJWVGnlO3Iq%;eMExehB*9*d#}j>Q8_X>44bUf4;q!h%Hp=0rLsqX&-F11;%bPq9vl z?S#eZ#j@yunt31wVa;3{JI?BX7=&3p73s74Sb z{V|iw1IdDX+Td(nq}(ER&@^dZ$F!T2w}7@K?x)>q&5ceeH(g98rQFL>oYrr-v7AWf z66E6clqsfiHnuO;D5b1YyGqSh$|Fh_S33y(r)6&9kv&O&2^(QIjD?_XBt8MlH^WVk z)RSbk!kRqS=Wh<+`Xf9Gw%Y--AvmWuX`kout{#LX^{HI08Q14vC#-`N;6FslV15I3 zfzMqCogs_9r_yBD06yD%9|%eti$C1%g*#viTm=Tud~l3^z#`}Xs+5iTb`HD_>miFO zvCBU(J_hGY+kACe3N?|xYX4h7&u8T8>%57uAm4UczT9_1SNIq>0DVE}uy>#r^aCeu z11OJlgXC;8=uY?nn!sStzURT6(22C}W1zaiQ*fFYbS>OppUUM%b2V^vs5VW9PeILq zkHBZz@2jvFvd92h13t4QybP;AdrOTa_|D1HPHl40ya~4L1WRB%s8TjsXCJ%>7eP5y zYS)K!Xn?yr4}!JeoMn}Mao&bxX;94|Tv_nIpUCUv=CBj4fS^Z7Y{+NYb9I8;xeSU4 z-~enFg78$*LB0Yk51A6zW!#&RxPJ=i+rY^`07Jo}SX>wfA?--y)?sZSWq=3uAfdfy zLaDKYAiOd(DzU3O{W>1U6*P%NRf5m~)>2CgI{%8i z!E-q{(aFFuJra}-pA0v`&)_bYlt-pVRnTS<$)F77h1atvSe+=`PI@Ms4^G|-VBiHg zsZN&9D<>CN(61!yN1HruOO1uwxv%}mYdTkV)R(~aAAkYg3QF0??cBGJwBNEcmGiOf zf?YjG?*|u0kn`m!cg%87wN$r)&MzVFK>mVePzOQY3mQk_0&u7B_K+_(RGVOzfJ7Ot*(=><1{iy(_SB`Ued^sP3P8%v^DebVPn0)2NGG=;~Z z8aC3+VO3(6esee0wxDD>lpWQz)lwnorN;It&a%ojMhI!VXvpcS8tp1OFB9 z7|No%sAQjQU^J|NKcU=MsPaEOOzshI+~2_G;JB+{Bi$TUC3d;XJ73O&CzuN)%n8Zr z%Sp=Wc%NJPSC1HZsM;I1+k27^24 zyRZ@dfmzTL)Wx7Z7n(r^nnAC0;M=eteD-4K3aSpA^j+YDe+IoFi?&e7#q~REhcCdL zT$LJ2(szey=W?D1_M?5;vmAmQrEDBez4sxjDz)oUI(B2w_s)&;y9%TG$(J+I?-KS9Qc21-_f@%Ss!64iT%44%beX6n#-?_q0nQZAZo$$U8 zcHQLtw6sBZ4Y&)svlc3CEQR$#-o?@n+;IwZv^Ey@W4;o*99MG)^Ei_9EXbGgDUEz)*foLQ{N-`8E`Xr2&OA=RM`54o` zF&R_?TU`9F!FpH*W1$kI?u5lUY3xB*%;s3u_&tysguW9*MGrKn2VxL5sQcr?^*{{5 z7zYjRfl}X&=QOx=(SYO01L1evBgRzhMq6sNJECSRh#ojL5BO7^KYzUk{s9pcJrF$* tJrF$*JrF$*JrF$*JrF$*J$eU+p@`fdc>l002ovPDHLkV1mz2J0}1D diff --git a/html/inherit_graph_17.map b/html/inherit_graph_17.map deleted file mode 100644 index dc7407911..000000000 --- a/html/inherit_graph_17.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/inherit_graph_17.md5 b/html/inherit_graph_17.md5 deleted file mode 100644 index 243394f0a..000000000 --- a/html/inherit_graph_17.md5 +++ /dev/null @@ -1 +0,0 @@ -d06acee175ef73f1729913064e2b2983 \ No newline at end of file diff --git a/html/inherit_graph_17.png b/html/inherit_graph_17.png deleted file mode 100644 index 26ff8be14f2cd3afc5070036031a714ca551ef72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1741 zcmV;;1~U1HP)Px*hevNlR){!d|a(n+MmN{Hm$U#Ww#o_ z2(w^0EQXt)4FuhaF*sy$X(#gT*Y@$=bIoeA)A?JSRZJk2N@^5?U0BHhcV({)3RC_HD-lHTLgtdWF)qk#gR6BxxkbKUb;58H@GQ)Muc0hCStXT^`coNv8n{7Us2R{7)cx=a^no!j9D;gbjDw@Wm*8Hoy)S|{ zy(jDi2I8S$yYK=!<~-1Oss@(ST2)oON&WcxJIlw(J7f&_pivlOLB}rxUo551+)rK} zx*vmQgX{D5cZ5=OIgRXRfI8n5Fc-Rmug}wPHS7zvoetIob-;KPK7&c{7d!xdMd%Bz zV-q-zGH4CV?cl3gap|}sC)YL6L0S9uq_@CJSwjQnz03~DR~WtwtziocgP_|mzR5C< z<+!at$KC+0$$mpKyAx@U0b~#~r1>=Pa2nDFGzdXs+wtIwsCs~F@g<7){sj4%5adf} zyQ8uK53sJeS5W6giS;>|tH4($%pK|tID_jBSP1XKBJh$aFW8?j1`K8y2nLrI;5zsY zybz6%zgWML@6gym^8FjiFV8ioA@AYqST`0Qd~EB4JHd~I1>l$TSih37E@%Tr98{q^ zpL!T4LvVIn@4-mW#$b@{fHqOS$Q({#ykCRBb(W%P8pZp!&pPM=)!+*g>jg63W(B8{ z{tiRHS4>rdXFCg4XS_&i;CMmRCty&Ot)>p5gL5l9lDwPW4y~XU1X&j}1*0!`)BD5S z5X)!1ZB#HAdu^1j%Unr?2NTa_Ti5ak7%V})B8|~D8oTD8Y7B3EDe^+}$u%56USC<) zGgo&t`QY2d*u%h}cnH*wJCmyONqw=T2N-bcp`vQ)AR5VP4+n4lCEx+hhfm>4xE|Vp z!7>hlx?-$?-@pU*`BjdiT=%3}Yv&i}G1yD9yf2bY?wI9|A-y28y}_@;Z0Mbp+3rdB z1zyg|b|qOzr}Mx-+7qsUybOL1Go}OiMc{#lOEn7HmwG{lW4cFmCQOCz%^-u!fS(N3 z*={o|2g|~R^CCVDjlCRnsb5VUM6WUZ64(SD+-2aC`Ugw^Z^k!Lv`9YjTQlv5T5Q90wJzK!=lVGtRq z%}v`_@XF@4=$5?R<`_gZ9LVsNd??LrZ_P1?nwyVX{CZOmwfG}$`VFQaYI+~H_!+`K zpNls7Y*Aq<`(Jy&pG5M%eHH#!g?2Rb$Eu{{fxHJcQt&P;%U7g)@<8%H@<8%H@<8%H j@<8%H@<8%HnI8BD&}tPKrSZJ%00000NkvXXu0mjfShG6Z diff --git a/html/inherit_graph_18.map b/html/inherit_graph_18.map deleted file mode 100644 index 88ce55c7f..000000000 --- a/html/inherit_graph_18.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/html/inherit_graph_18.md5 b/html/inherit_graph_18.md5 deleted file mode 100644 index 5b368a7c5..000000000 --- a/html/inherit_graph_18.md5 +++ /dev/null @@ -1 +0,0 @@ -1516f9ee0f80503000f628f178c11fb8 \ No newline at end of file diff --git a/html/inherit_graph_18.png b/html/inherit_graph_18.png deleted file mode 100644 index 222d0aab2d89bea3210847b7471fdc1762568757..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16391 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

    +iV zKGOYfaUT7VDqCuO9Dk>-&V#3{Z7Z6{!AjHRpGdbuBW>dt6)0{BMZ45DGU$g%P#QoT z8uH7-`i@4dYbceK;!*~^rXCy>NN586O{DU&7s7u9z6}~u9l?_8T;8!p zCAg7<3EIX~dPbWPdMQ3IZ0Vr&RG~3 ziTQ_6A=w#+Zl!+R@@_ z2PI6xS*12y;V6{59AeTHCD5lE6lT^|ToYq-T6pOH;pUU!{=$W(pW*Vdi>1)yYyasz zF8n!+7XLdh(tR`z;fd_~Qb-4R2izNoOgnrp7mO(>r@+7K&%1uo6O3^gqPV zp|qn8wwS_V)ycoR@&vulugmdV*d1!=ftm-eP0FU{lhn(uOv(RsW`bT9wO{4sx?eH3 zdr&=A?VtvOB?HnJll_!h4kc*s15-0DwK>$DiJT)=6+bBux1Kj^9&JkfB9RdmoAxDg z9{tT%65QeG(}+p?@;Twwk9*{jHEyc2)d!z13^E`nX6wgVk)H%S=vJ&6RU`?<8dR?3_8-Y_Ur_DK@1F~5KV_GddY+3$E$?5KP2~XlB9qy0w*+t6>uVH}jih!wMZS!H&;g#0-eceC6+m z5F?->Mis1z(qDbx-1!UeADiSy@cu<6fz_6Iw|Cqh@8DCifv)A0ulZi1bU{%0lK+Qz zeSl(mLIckfG(P#8ilZG)rLTxcf%2b8TzgjO7>3UWsnO`0D4V_uN_!B_mjzztDG=b^ zv7Jeb4=CI%ACh;~_DBl#V0;iDs+d&qH4iBMVwTnqHRa$ox`XYbImUyL%L8k^meboa zhDaE)G@$b3XQ=6LFlDBeUZ;-{a>A`Tu?q&604#2|`Q9|YVvWFT_?XFmDD{I=)hZh| z?a>BZwc&>B4FEYfR0H(cfXILXB!@)^z<%aZrW($Y=hbBmltg+{#`@8lbskUZ1vR?@ z>gZ*VM__;{>%w**SE7)Mf=bk=h!1$Y=@NNO`}hX4q4w7F$9DlbypB2!2qm!1a063@ zs7j<56zu@CzyjVhtO9o0T>!?vmNl4M&J$P&_#$xQ1w+boVF{%!6Er}^h zTx90QQ47inY-WkknN{>Y)2T+!#DF4GbJ$w>ZE60299VlqHaJP{zTyX2Em?bn*x5$v zS1svjS(?~)Ice6J;T&-v(S2mZ3X(nrdv|_u;I;(Bz(KNiV0)Zbt0DTBaIyjTDfoH# znsg2Y@IUZn`5UnKQsz{a=3uqV5)A!)_t@G`*D^`ZM8?jY*{RmBM9^sr0eA2%SZ?r8 z)$9C&l4n;Sa}#wO#CY(dS@S0rvZA~M9T%=c#(yh7!oeRMIQ7jefe=2^&n+-FNcIyB z^1I}WJ$XJE)TEHc!n_tg2Z`wx-ISr%%Aschdo9I(O@GOY1*7p&k|d#>D+_j@eRgy{ zF^b)*cYLNS6-bZ-Qx^Vw=a{{HW6|9AMWG;w+R`MBVhj`TQj-+*lSB}~pr0u&Yt+lC!O zoJk`ANSOCuEhi1&h6FY5wrd0@VM9#{6VbC_Fo16kJ}8#&EZ`bok^-$AF!?Z<;a1@! z7uLWTckenJ-vC_z!kQyhJgy)r!?D~MEHM%-Wak9d^Mb1L;J=&=WX-B_NK=AH)Xi{C=PAFR3ubkD5Y{RFTwjh@DSItE%gCY-l2K7k((YLO<8NT zhl)naXB`aDoZ&&7iIOLTX6LS7+X+qR;9pjheI=e~1N2EfM8A$$$e`Rmj2`g&9b#`y z<$k*R7jyuR8}zCAHjVW++;XO8O27^M2yGV{tOP)RErp6`8zjuw#K`iIKOAH&oFu)$ zfo)wX894`OJQUJy`3o`} - - - - - - - - - - - - diff --git a/html/inherit_graph_19.md5 b/html/inherit_graph_19.md5 deleted file mode 100644 index 17b18ae7c..000000000 --- a/html/inherit_graph_19.md5 +++ /dev/null @@ -1 +0,0 @@ -1ee151ff89900c16f120978a14b9a515 \ No newline at end of file diff --git a/html/inherit_graph_19.png b/html/inherit_graph_19.png deleted file mode 100644 index 2536f5774f18857fae0f936e07362ca76c3447c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30752 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 - - - diff --git a/html/inherit_graph_2.md5 b/html/inherit_graph_2.md5 deleted file mode 100644 index 19dc70a66..000000000 --- a/html/inherit_graph_2.md5 +++ /dev/null @@ -1 +0,0 @@ -745c57cbbff9164101b90749dd9a4734 \ No newline at end of file diff --git a/html/inherit_graph_2.png b/html/inherit_graph_2.png deleted file mode 100644 index 574470233eecd01f9226e9466192cb5b31dd58c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3525 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 diff --git a/html/inherit_graph_20.map b/html/inherit_graph_20.map deleted file mode 100644 index ad2f70089..000000000 --- a/html/inherit_graph_20.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/inherit_graph_20.md5 b/html/inherit_graph_20.md5 deleted file mode 100644 index fcaa0ed32..000000000 --- a/html/inherit_graph_20.md5 +++ /dev/null @@ -1 +0,0 @@ -be66a385e8b7401340e2904b4056297b \ No newline at end of file diff --git a/html/inherit_graph_20.png b/html/inherit_graph_20.png deleted file mode 100644 index 432340ad6b482ab433758fdcbece08e8f77b769c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1482 zcmV;*1vUDKP)Px)gh@m}RCodHn0ts-RTPJ>kDN@)G&Lnlv`I62*vl*nqB4VmAX0mg7>HPzB}NJT zF%YIf5Bnp@{t3fS#9pA5(ZgtvN-8q7q*6x*%}Pznw1?XF-8mah*Hd$*J2TFW{e$nG zwb$9_oVC~5d!Ku6p%4`_5Hk=n5Hk=n5Hk=n5HnC{myv@J_@-s}qpR&@puV(L?K5IL z72lW)e{{923=Acl(Ro6$n1}OpjD3!325NZvy3z=;R%mIT*sh=q#DZ2(vGRl(3z{cO z71Spdw1SG2C)DOBXg3}-2Rg$wFbULH7+19NeGH=8%zRzT?sX}5mloRpnqE%rZ z9h*7c1>8?cWubS%AEhT~yR!FZ_;s1|6JeK)3|W9&^MykTrhCXZ(ktY&FLUO$XsWOiNOZf!Loz9T@Z!2_yEH!sQON03Y$6|1sdKNarXmHTif`k1Q?6&}de!#c_w!#2# zTe8R&GpGjRcW{Q!g|LFRV?P8tK&^l$i&n!*+Mn2Y4=>U2-lVgW&z!jn+>T@^uT+tue5^dr0ue!)s>4-L-+ z)njO?!$@OotP(c$goOG+;JD3f=D+fYXaJTp>;ZBZO zI|uIkYUzTyy`*(M4OiVS;A(T#1$i!LD#j2v1>B+^gS3vP(K+Sty}B{g{wH%aC;CA8 zS@ty+caYN6YvG>UVn7sB08 zmRh=?Zm;Kn19U(p^Ho?6-@pTK0$8|l5Y!*T*}D%+_Whu|k23B_MXTYIU@N%Y8~_IpWTN$( z$i3hy+ze_sc-;or2F~1#umnbeE8GOs!LQ(Z&efoXf$N}63) zjj0N6cPMdvbIC<0k!}%^4#?UV~nsBV4?@=je6JpHOHC@nL7yM5< z)iACj3L4%8l{Ds`33hcQ1>BmkR$@Wdkf2emnWRd3RwWj+lJeW?vBrY7ddge&fw7=1 zo8MNyd-zF^_29)>&gg4183@0#{}xdAF`jn%&yByUqS|%_{3GKtSkbn_jM2pm#0 - - - diff --git a/html/inherit_graph_21.md5 b/html/inherit_graph_21.md5 deleted file mode 100644 index a290d544e..000000000 --- a/html/inherit_graph_21.md5 +++ /dev/null @@ -1 +0,0 @@ -8ec138a171fdeec00cefec582aec010f \ No newline at end of file diff --git a/html/inherit_graph_21.png b/html/inherit_graph_21.png deleted file mode 100644 index ae88730efb33caeaa0e571719ef99aa10b95b505..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3219 zcma)<=Q|q;8^&YAOeCtcNsWWH1SPdqjcRL_Y6)uZBKAy4h*0A_jy-C$r?o0lYAXq9 zgi=mxs~9OYQ=zE!_WTFu`d!!aJonf8!+qUPilwWURP|DgcfTyzTcA5!? z%sQudFWN~GZfKb{h>16HFinH%1F89tqnSzLAjXDGpY|Gu6l%1fDT z8IZN(S55S8>lbSG+RQyDWthz$tnb&@H*dG^BWLRC%b=M5PP!y>m3&028v14Z9-c6s zN)mPuM@9!!=$x^|8E04SkhhvrNbemy@9kRA25-9`tVHVPo_(@G@~+t|jlTVSs#yEv zicTQp1MT_sdBVWvop)V1#00x&UX)k3#rM|tCH>n<2I2&Pzdj{PD&4e~uHX7ppU#bz zVEz{)7{>C`vol^Gy8){{YoW+*RVY%W1UI~FShgkwaJupz<8E-5F&kVq>~KHBoU_g~IPKlD;7**kkF)9X@BC7U=6+o>pTv z7k8U6b&W}~jg5^oooENuWc_e^^yyrLh=@qVYby_UvDH7~>anIPp}J8miXnnKO_nk6 z-4Oag_!&sz3U}c~waohFXpl@OF2z~b_Om#!|LSTH*CT8c`dTa~Ytc&Xp<}um|4xTZ z<^gEK0;Og)n9cc9T-Cj#Y-=RIBll^$yk=3)@s0Wc<`ofNquh|`wx*X1He%&`fgs&v zvlYc=yW;APD~Ig#iU}F>`B>ZLj=|KLdu_SWgN#G>6xx99?TU4ez=3-5d^S#8uPKzV zn4Fwi-Kg$FTE)`ih-djJf!e24hE+9F45f@67s0-H$84>}D}S1-2D=J_%s_`aKU1mP z-Z%0m`Q2yt%Z3?VWbEQLe8eM!D9{0Jop2(Y(4;&9+#N>G8!{!-)FyHvD!=^0F$Czb zOKHe-X|sbi?z5Z>!yj4$>Ek9sACe*@9zxP8$Y&o=+R}*JK6@p_CHmTmUPc`$jJhh% zC6kD|zs3Bxt`591IVd~+&~6%)k?QRFIRnD2#6|{L>bPhg^2dsmV1+Gb6Lg&bx)-?{ z-PBn2BMv3j4lbaEb)g%vpwwcZpDrlL*4Rz`tMvYf_td2`){#JL?u&OHf>6NP;UDpD)J)yxHz{*h1y_Ijo4KxIR~Z1 zNb)SNnZWagcZBIQ{-Hc#D^1gK0b?%#_xyR~I0JV$9j!2#+q#Zk0Bq?Ya=Hkw*j=u7 zfMFyWbZD-ab>#a=Tw>_cpf~X%OKb3$D zK=B^tPJut~Q@g)%npR6d{fyK27X65b6Od>rGfM+YD08Z-BC42iZS@^V=mA1R+``_& z<5YbFb4b2D|2+Y+i>qAb$>9H};2aVuw2ighru<~dio3ivnptMrqC#GJz&T11v}EtG zRp+_E#AmqB#I)KbFv7lilbe7$@5T_B(`x%YYuchs|F^!L`SR$VM*G_z%Xx?QqJ)|k zW;uyksxdFdg{S7UH;4Vrup%VwkVP2Nw*ucWX1veRNwt{mXN1j zQx|gMHEKta++1RmCJ4<=@xZZ`1;kXV`Ta5v7+r`@p*Z%=Y>VFoSz0Uc^itjwUh%ur7I{}uwVIGZKn4x^@o zUDL@ZLIGXXHs5VNZBgec%)6FNQ$QRm^a;2(bgahnby)-jlN&A22H!xwSYID%Lbe8v zP#;vA_pTLi>;7eLWx$x4*y%TS)w3FgQy$2E8I^kccU+Lt*(Qn?AFFw~deSQss zo*1H5j2X!Ui;7K)cSQQFl!ufupFbm>+6%HZPY*~&sPaptVsVzGVj^*H+&qsi_O)tu z7NN%Y|XFmBzR^WMWnp)}VPW}RK$IqR^`lfVY?E(EhhLoJH67v#<$A-zmTpcEuI4~_x!_$)&29{&!$L-14wQS_h8tfw5QTMQ#DIM656&zX;aJ6Os-SEm z`dIcCViZ5TGAvl{(m)7!Gw523XXJ!vb^7wqy7JIPb@`{$RS2S+U)N%V?)NK-itSZ| zfH}v~y;yjzR!R(4D9s_N1PZF;Frcxm2bn+{haRS^@?R9ik12 zn@s!&1e^T$q=A~H6UK>LOXt;Q>s#Wm{C4hwDoxjRcPZgn?S4&7TJ}9e*s@lTIGyh^ zaM73cn7#mh2f>#a;77;qWg@G*q?f+fVffoSf}e3p0!!G$g0p^>1yzPK?{NI&;$utx zHWu=zE@YIXZmC16cJg6~N{79wZNwm4_7?xJW$M&0os%My`a7q?&wz9rb;#})1yg6! zj;4?z!;uYiG)#(mE0V7dYh)8AAKgcOnnhEo>O3oqy4X}IZ+E>j!pO)Mpmk$;FC*)% zUuvrTx{BH3IT$4eKf3huVDYJvYykc))KB|%IfKX&QUdy6eyuatm>cON=q+XN4I5Q| zc}XFonM_jxW^070=C==#PD+6MJvF!N3>7hWstwBVsJ?{b$XA`uR!<<|#~jQdkP=%0 zA?&M_u{&^6Hrh+xpJRuvu6M(;9WI}ih2(N-jW=t#+y715+W~EV%1)u0d&1~0RV75D z8Q&vVmnO1O+tWHm6RnOe`;94wb)c zi|!?^#kRRrUX?nkXcc+eiz@mrowQlw;NBZD@IN!-A0#JTzGZIt>nFp1pBB~|8`Af!^;=nxkhr4@&C4H z?7s?|sBC&c5-Mp4;`LsK0g*H{i4UlML{cDwFz4KLh2w5;lx?*|UD)Z*RhWp}>`uT9 zw+GGO+esN#sia`hGc{8 - - diff --git a/html/inherit_graph_22.md5 b/html/inherit_graph_22.md5 deleted file mode 100644 index 65124df0d..000000000 --- a/html/inherit_graph_22.md5 +++ /dev/null @@ -1 +0,0 @@ -9a83b4b9d501f2f040cdc3fb8fa5e210 \ No newline at end of file diff --git a/html/inherit_graph_22.png b/html/inherit_graph_22.png deleted file mode 100644 index cc888a1602178a7f0457e55d0dd13e32f9a2205f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2237 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 diff --git a/html/inherit_graph_23.map b/html/inherit_graph_23.map deleted file mode 100644 index 0bb0437b5..000000000 --- a/html/inherit_graph_23.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/inherit_graph_23.md5 b/html/inherit_graph_23.md5 deleted file mode 100644 index db2fe21b6..000000000 --- a/html/inherit_graph_23.md5 +++ /dev/null @@ -1 +0,0 @@ -1e089ba660aef3bd03f32970ccb29e82 \ No newline at end of file diff --git a/html/inherit_graph_23.png b/html/inherit_graph_23.png deleted file mode 100644 index 26fbc2c69fb5487c301aa819c2852b4ddfb4d99c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1800 zcmV+j2lx1iP)Px*!bwCyRCodHnR~3)V;sj(sZ^3{MWm}s?kUwUl*@$VnigSYBT`Fg)-;wvSs1e# zLm{n=TxxFfPjU&Hgqh2vmP@+of{@qi^m};v?R(Dop3~`c&hfmr*YEpzKF{<0exK*_ ze4gj~-S@ZKZb>NuDFP`1DFP`1DFP`1DFP`1DFVAR0=sA2{S62jw;z8(&R(zFj1my}Z31;5woT1tI&x%+XWVHr0&0iR>cQao3~Y0x99QAK@K zkx)&!sU2zvEx}1sJ)u{LmG7q&%?9RcTIp7P60xs-fBO^mf}yYk`a+hbQuMETP0TMKhvn%8wNy8 zI%AK6QIRh;`%`d{*yaz2AB!%6m%)Di0&hSIxDp(blNGAVukv0a#WuW5pXU12fyJSa;}(Dz^xDR;i-U^x5; zS-KYI4EP;hfI$#61Y;AlE?}Im0h7%5oCV6UxR9Q=fZUZ%g*M>Aahw-|@|yj@#4{%E z!^4nAOK5a9tOxJ!v3RavS}*ky1y zxZ+JRCm?7%hC9Owcoh1A`T@p(JArx)rj%G^|9nQZ?^VivErPigGGr2;0Vb3(fh`|w z0sRd<;XK#~j@j{RzX&Fg@|@jazJ-EDbF|%uun>*_WkNm)#>9AzhX+B`n142Qc0w)K zHr{`K-7WTqlfjkZDhrD3MmX<=U%*Lqa$>prSQoS$!|U#dI&rc|)D4Eh+i(H&02hGv zL7=V%6X9Jj`JV%0c@-#k4t>*LHM|6^LCu7IP#-P>7u+8Z^m8ycZiYPz<+dEZDA*oW zf!9*MLemm!`yXR$UA1XvCzOw*SSL_$g>3)>>aG)HU67BOBf%AaEZhUJno(#RIl5!} z*s82f@;b_X-%w(0d-=Wy+ee#nr*iW5wSata9Z+KZ_v8Jf9Sj6_5EH

    ir$x5zd?m_i>R+43GZO4w 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

    e>naV;@Q{H=-!;D} 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

    ~%VSp2gQ_8PNL<%{98w3REh*qo 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 diff --git a/html/inherit_graph_4.map b/html/inherit_graph_4.map deleted file mode 100644 index 6fbed6420..000000000 --- a/html/inherit_graph_4.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/html/inherit_graph_4.md5 b/html/inherit_graph_4.md5 deleted file mode 100644 index b81d487db..000000000 --- a/html/inherit_graph_4.md5 +++ /dev/null @@ -1 +0,0 @@ -b6abb64550000d75a78e3babb41559e8 \ No newline at end of file diff --git a/html/inherit_graph_4.png b/html/inherit_graph_4.png deleted file mode 100644 index a3a01c5d26ca00c77f0c91a6e31bab421f98ffb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3799 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 d{e(XUq - - diff --git a/html/inherit_graph_40.md5 b/html/inherit_graph_40.md5 deleted file mode 100644 index a77581f35..000000000 --- a/html/inherit_graph_40.md5 +++ /dev/null @@ -1 +0,0 @@ -9e0a2da98d7fae7081841f9259e28460 \ No newline at end of file diff --git a/html/inherit_graph_40.png b/html/inherit_graph_40.png deleted file mode 100644 index e3ab6b2fbbc90cfed612c53ccfcaf4181de4626d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2197 zcmV;G2x|9Px-Pf0{URCodHnF)+l)d7YFK@eO(tq7u)!GdBHP~%cDZG&x4qj8CdYpDyaF}Ap2 z(l%A2)y4%(N!*vHSdDRw8WT-0B2g(utD=a?5L9p}q7?&f^!tW;($kwe@7@P9KIirP z$v0=YXZ_D|-@Mn-l9U`s4kQPX1IdBpKyn~CkQ_)3BnOfM$$|f42YM9DeIN3s6y&F@ zpR$qz-PwTw4BmacNtH=ha7~qhsZ4U98#yqVvAVB^ z=f_<1Cdijb>Eu9DJCF`RQ!j6tTonh>A*kX~D$~>sq(jiu%bO-w#evQ^1pVn~8uW!< z!D*n5f{E?1YJWyh?6PV_*SVDc6gk$wRm4w*?V&TYA&p!C#}zd8C-Qz%kYASNS9(9o z3Y|cBHT28UAs9*IFCme_`W)ztL*Q3VE>s^F1mVB$eTk2Ssv1neqRmsaewA{5{p(o$ zedHT(Go1>r!NIV;`kDqlf?HwNs4@GP3NJ)?Rij=cyJUqAB=k3&KWFI>v=TWZBvQEk z4%GV<=@7c~t0%vQjpc27U6$eD@Rlr6-z@VNgl)M39?~sxd2zBgiOu4SlK42DJJ$S7 z>h1j*Y!0zDCb3bRk&74g?*W?y^Pm@a@ND~RDAK06%=~=k@O*MsW+tHr_A3~b2307qY72H-U@(L{@Pcq3!s;fw!rX`xZulx(^t_F-9gpU_gu=mACzNV30_`h9@O$rFTRAMLAgHq zGz<;^$Lhv+>_@@%fSP-AzTR0K~;^Wplk2mDwUJAa8(VVpyge>{2};9u90_0 zpASyLMT<|ew@e!-+p=9Zpqpe0*oXDP0{n=0(0N3>;mTC&5Ij!htFs1NC_gHA2zG(T z;2}^|`wx9BqK@svawEEkK~E96B_s&%hHJBQ(IN2B@t}u;AU*^eklqp8L<8ZM;DI?7 zR6Tt^Px*&o4A`ERj_sFuP|H6rqy-Sm&2Ak%z8yA>m{0s<@XhLhaIFV}qm%=CDBJ2yXJ|p3?p!bNxha%+H6ON#;H=ojQH~wO{ z9tJ?Hvi>c9J4}af;2OwlX_WCb@r6;^1K%@B7e((P^F^4Jd+4otD71l|{tmu{SXKKz zkxE~I2XPr(0k*Gdc~Hy0q11iD1|mH`dy7~}o zn;YS7q@C;+&*oPOU@Wz^L}_#4pYATL}+?l@O~+-}>7VCV+?9 z4JZeI>d1pK|Gd0BB(csS;a>R&?gZZof&Gck1aJS@uor9%_ktHxybnm$udY4>;~CPf zpfMWgtNTIl73azRJ!}SU_K6VmVunEigxITE{U1$PZ!72PE&2?&ST{o$6VXnQ z=kXML48ezvJSg+;VcHl8u9@j_=On1rzqi?PxENx2YdThMFZB|f&>ma+N6+jt=q@7HWr;b2 zle73t!WmgS1YQy^gX2}EXMwlsBCyU4@Bz41_4Iun<^3q-g=AazfIijofXD4~>Bv8y z>!;qk{%=4y5RUye@bb~Gf5C4-xxTYuHOvJs(clZwQjMm>8W>($k^=P}g0eO>ZAU12 zZS^6447f@1@|1gHXpHI&1HlCd3+^j(bLa~7r_t7^VQ-**@O||kb-hl}q0|}>)!c@- zYf-NTQNat#xd&D8pd1n!x7=hDzaz<4`V@d9*e!xbBA zbpI8H*`>w0qX!)xf-d_^)rCv&Z`$^C*eEr+|3=L_?zibZ=X|CUu}YejIAjrAX6ilmqDyG|KtZ?+?a-@bzQSfbJ{GOnJ$HZt6h%b@Bg9A^gA; zXZj1S-|;3T2b#%&RZPYoO& - - diff --git a/html/inherit_graph_41.md5 b/html/inherit_graph_41.md5 deleted file mode 100644 index fdabc1465..000000000 --- a/html/inherit_graph_41.md5 +++ /dev/null @@ -1 +0,0 @@ -70b76e5ade9ddfcb0b0d7ca8471139b8 \ No newline at end of file diff --git a/html/inherit_graph_41.png b/html/inherit_graph_41.png deleted file mode 100644 index 463435e5a4a09adcafbb45a8c33dad15bd993196..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1795 zcmV+e2mJVnP)Px*y-7qtRCodHn0csGMI6U1OIzJ4Gg~xGD?>3em2ATj!!`}gmOm8JR>CFAB%_U1 zD%(tqFeuu@GAb35;t>|KX?~jK}xxyYKZL@!p#+eD3__cV^C+ z`ORHw-!f-c%1hue@aJmKVHp0MF$0#u zWY`~qHet*L?^kD46DQ6-%zg|sg*M>gs1qO#e!*Gf;~=hGT;zI9T=K65$7({GG<(6N z@G+bPLH#h!0ozD>cn}uC!Jw8wPk0LA4fr_q@Iw`+-Sak>d7l*tj0|aTD(y zJ92h@t#X%ls7|F;wu6UCO`JIKJ;zg-6*)R!FM+SXBl>CxIt1fw(7zUjK&(5d`~WL5 z!imtE`sZ*j*l!&?2O$BwVEeqzpsodXcrm&AO^geRG;*9XVKB7L+I>NJ4crI=;l8Y{ zznGl2$?Jwv1K?9|uFm;>2r9#v1Ruc^aM51@WAHO9fROOc;aS)S-e*39u^M~F?+N)O z{3q3P;^Z^^Oh$J*xHBezr%*Rg24_7S1?NJ42=a9|40^!`ab!!;ZZY6=_#M?)+44xRzk7zV*+I0s6FY9QMyq~*?JJAzhch~?YLeON4)mfzlrS~;S4u|pJnC#a#vt5j!2^jB$ zN|CZ3*SwFrJuj2X6GOR3a|+guA0Geq@3W)3(W9B)GOv|5eg_v!*1?+)62pZzVNJ-^ za4P%+7lHD0dbnWy^Wh2iH4FsjVT_E68|hDQ6FN>g4*r7XFc!W6pH~%4rEyulgAc7u zEzI3~DRme8cyMCzVr!2AWe{$I^I#2p2C+O%Jf?%zVtC*GqRw=FvXUFPz}w)%sNEUZ zqrv3%^*I}SeZ;zs%7d{ZvRzmg`zp|00wzE#;}&ER9SFW&owKLl6|g6m6eh3t2{KvS zh-w+c*9y++d{j02s``vWavhGP?rw4CnY5iC$ZJ7kFpdUK9bavCK&*YK7^tA$7^_01 z8s*9K=?L#u(sv}+O`5G)yZtDifO}vHxM(vVEEHy?>Ol)P$=TrPItaEvMRJ_Cg0bxh zjo~Kv5!3~6XohXQ?;5C4)pp_xV6w$Muw+NRMRoQVQp~9#&+H2U9w(FxSleZ{ag;0ORs8ECSp53S0=6L)chuI1_n0 z)VhZ9gsMEq;M(3@HVNi|dH`O6ui<;x3NBKR3##9sZ2~8`8dNW^pTYbVTr3xL7W9S9 zFc-dpU*TzR=c(@Cc#g4xZU+-p^#iX3{=hca6CqxxX;B;7x+pI~e+U|ZVgLA~^xElQ zpCML|8)QtuD*wX-C<9N7FX0)O4$j-yz73-x$mf}?#?Hif2TW|$3G{6Q$NT|=Yh$rr zgQ{vO9m-1SRMo_(?4B-&-wondOX$-S!-aN-Ykbu5aV5i;1(8MToy^)VDRM6Z5HyiBl&6Ti*wn5~seea4pR*B~C2`w!Yss z{M0RPo-@mHCSQY#Ko4fTHb3j|r&;W8Mx}Y|NOpscz<12vU$JEkItpp>DFP`1DFP`1 lDFP`1DFP`1DFPKm;BS5HHaf&}b{7Bu002ovPDHLkV1jrsQc?f_ diff --git a/html/inherit_graph_42.map b/html/inherit_graph_42.map deleted file mode 100644 index 85d000ff4..000000000 --- a/html/inherit_graph_42.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/inherit_graph_42.md5 b/html/inherit_graph_42.md5 deleted file mode 100644 index 6e1052005..000000000 --- a/html/inherit_graph_42.md5 +++ /dev/null @@ -1 +0,0 @@ -3f13b335718549821bd62c120dbd5d6c \ No newline at end of file diff --git a/html/inherit_graph_42.png b/html/inherit_graph_42.png deleted file mode 100644 index ed3a48c136236db39b8002b6cb5d6d75d076c5fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1733 zcmV;$20HnPP)Px*e@R3^RCodHnF)whRT#%dowUU=HAGWu(weeTS}n2#B9ka6qD3>1c1og!MAFJK zDuebcS`kb!EvUq@tgv!2TA{MVB^ymNGb^>l7PQ~*bq}20yf^dSEDh6~Km6YL?z!JN z_nhy1_uM;oDk_pv1X2W21X2W21X2W21X2W21X2WwMxaB1Ge=W*ZGrk!)xIMzi|IcX zhoED8klFny&n{4(s@iV^PGRbU@~2;!UlARj6WPgZ-w{|=X!?bAoKHJYN>v{mN0;i{NIySAI98L| z1lSoag(cwP1$D-l0T03kcnrRVo4^I{398io2IKny>;ltaB}|2R&8V9fEtl~fJ zEGFTo%*AoKC|)O)iE}4h1nvgKl;59YtAh9j@^Lu~oI@#k3#aq*9Nh^ohcWO%cJ46B zC9oDY!mSX->b&N_Q}8u3NtI1%UAJ);s@!sePQ`GGoeKus1$h%bfqURb@O{F&U?v24 z$J=fwILQk^{};hA?+ZJE3FuZ{1J{9pvQLv~6DY5>EoT+~@iDR*_6Nsb1@A#2y-%e+ z?n1>B_ovSz;5*00`TUEQJQoK^qNXPo{Ex@B(P7jbtNQ7%M%3jOJ0BKC!e-~vy9 zT9^%SLYM@D@-P8P)#*6e-@VWQHo`186M~HGSXdG&8e7JT(bzufYgdzZ(p|t{90}gN z??RCF#o2+o%B|p}-4T{SEO(W7ao2EMPLSiif?bU<9ZbI8pbFlGd=01Kckr4fbTNhg zJl_j^yiUugq%_%|g+(wG)KWMvXEp9;0L@HJ|C);xCyGhk&`un;Eo!&)&f{Yx)}b7@ zoBRw0Fb=-wg08~w4)ksv0=Gk~T{+k(syGVUM@3_GJPikeJH&Qa2p2#hjiB;*(65-{ z{`C1AMn%r-}jR1VLqt)z`M(x=3DT+$4LdbsMh}oo59_s7SvF%-BMT!-Z?I;+x#$a z=Q1d(;8&Oloj@G|j^`i`&~5N}&Z?+5k&1NKo1>%lRZP(jY$u@sZnzA!tvnDUa$9!~ia%*l>@>=~cc;QXdRXHZvz30AI_ z(O^O;jmk})hWd0-_J{Z}6WVmaaIt+1<*OqVKDyj_lmX}kCXc~VZq43lEvY@}+-vq| zhKuyh`m$_J`Htv2WRUg|&@WUpv23;EY2vu+G>?;~&dF5KA`vKB$N5l9h85l9h85l9h85l9h85l9he bAOe2_UIaBU67mY{00000NkvXXu0mjfZiqix diff --git a/html/inherit_graph_43.map b/html/inherit_graph_43.map deleted file mode 100644 index ff98ea17e..000000000 --- a/html/inherit_graph_43.map +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/html/inherit_graph_43.md5 b/html/inherit_graph_43.md5 deleted file mode 100644 index c63c4f5fc..000000000 --- a/html/inherit_graph_43.md5 +++ /dev/null @@ -1 +0,0 @@ -de0689389b94699ec24b1ec7b2f0f5fc \ No newline at end of file diff --git a/html/inherit_graph_43.png b/html/inherit_graph_43.png deleted file mode 100644 index 6d05107196753ef67342306e0f32bebb0ad64aa4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41116 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 YYS)(tyAG0gLI?aATr|-syMTT8AKd{zF8}}l diff --git a/html/inherit_graph_44.map b/html/inherit_graph_44.map deleted file mode 100644 index a743f192a..000000000 --- a/html/inherit_graph_44.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/html/inherit_graph_44.md5 b/html/inherit_graph_44.md5 deleted file mode 100644 index 4c57f0289..000000000 --- a/html/inherit_graph_44.md5 +++ /dev/null @@ -1 +0,0 @@ -6c40b0a962da9217fdcf8402da3d2208 \ No newline at end of file diff --git a/html/inherit_graph_44.png b/html/inherit_graph_44.png deleted file mode 100644 index 5f71149ec726829413ac2cb620104f6cf29a7d6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8181 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 - - diff --git a/html/inherit_graph_45.md5 b/html/inherit_graph_45.md5 deleted file mode 100644 index a3c87bfbf..000000000 --- a/html/inherit_graph_45.md5 +++ /dev/null @@ -1 +0,0 @@ -418d93ffd5b02d0d38800ed8851fd40f \ No newline at end of file diff --git a/html/inherit_graph_45.png b/html/inherit_graph_45.png deleted file mode 100644 index 0a79eb2fd1b02e11a4f1510725c204390aecace3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1696 zcmV;R24DG!P)Px*T1iAfRCodHntRNaV;sjTol!)prK65at4)fWw$^DVLt3M?k)_2V8b({qs+mR$ zZIR6(-jtR3!!n}LI*BPGQFPRDOjr(u&*$-6y4)V``@B8R%iDH+x6gb3uHSXt*K^%e*vv*TpF zxRHKr&5eWJQNMFrl%CfZ4#96Q6!zqg9CEU_-vG~X5xx%-U?nt! zQgjt3cPnLra-HjMP`_7WvbOp0CuPoY#kFh(>^IRmcUZt@tpXk8xCm5S=heJn#gJ7}6 zI-Z6FT1ZVvX0P#Ga_)S}J{Lk(<|^|yJ3ek#&{!HLjQzsOsmVv;0^VF5ikgXx)O|nbHUYhKRDhMrHNg@)oM|; z2gikX7U#6Ud>>Jp;N@I&zzjX7x*0JfyUhjd*Mz9dWAq@eL>@J zl(0~1LMxcm_b25pvK;h5HG&^=QRRQ0rQ35=4{#H37gjzlpM+hYrok|SydLN1cc5N` zskx|5otro=g|*NW^k*CReLMk2t@sN%>Pad&aaE?z-QrZ}3+`mDs37BU`9@=o7Kf{E zCwvUC+xF=uxv?_2q$cY*0}7Pt@{ z?}Aeu!CcVS1Peohql+!*Ab~}!Izu}cXd{xomn5sbCgme3Rv#L!rXQd_xa$Pj7c_~W zC$xoLFcV^(NTW%V=tu0k!m*^cx!Bea-?!JVFYaO%fW_nE*&U=MTmWxDC_opL1s9}W zH-`qtFfK~vLU-tAz@iFRT+cyCs_B9n!quG(8slozz-90uY=zsP8EC{P2R3KmpN zKk~|W{eMmMJ&`Z8Nwv^{W3iw%;iE5+Nwv^{W3ixWp^fR1f&;0bf)nXj76(#6mBq$1 zNpK+ilRUKJ*wkjdr#(^xj=FW3I=k(3;$%z@o>`h)Z8$_Ayr - - diff --git a/html/inherit_graph_46.md5 b/html/inherit_graph_46.md5 deleted file mode 100644 index 99472859a..000000000 --- a/html/inherit_graph_46.md5 +++ /dev/null @@ -1 +0,0 @@ -a7ccbe3fb7e44ec094a91a70bdd0d61a \ No newline at end of file diff --git a/html/inherit_graph_46.png b/html/inherit_graph_46.png deleted file mode 100644 index 031fd0f2c3e68cb8ae80b3a382b640065e4928dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2023 zcmVPx+p-DtRRCodHnR%>TLmbDei_)UCE2^885>;ZUeQC56w6+pknovuF*n=QQLnF4@ zQ~W_|EkO{ml?Ksj5o)PYx}mAPMQo)$pX-cHPtUvW_P+a)cbRYUx#u^(nKLuzH@}&C z-hHiFC8Y?Y2&4$42&4$42&4$42&4$42&4$42>fp&uv)>B55RYBfj_xY1X@}Io@PSh z<4LuS3z^-O>+k}9a-|5gqzDXTGX3)tYMXaN<)b1ynJEG-Edo=DCRB7n7qv^i6oI;k zKuYMkSf(_|N+XaGy3$Ccc6AYfl+bmtOlgvpMxfjug_ZWviH29g#jpqTf^py*Nyv}YteJ-?+I?gHW{09)$cO~UtF(mB>3}D zsJCx7h4-xiOW`jV0$*fTE+x6SUIy>+5O@zp!DLt+nxZ4Pxla`x#Lw5z^EcG(@l?2u zMcM)9VMP_q?ejP2WvejAW?B2rxqCeEJZY4P-mYY={IO={atF`NRlCsZ<$Q6`MPDa& zG-8`nK3maT^bgJ5@21pmf;J?R^z>Y%i|2j$#eD(a<5}BoTz`cTSvg#~WBdXpd#sKW z+#p5jfHObGxAA%ME9*?uy!4feZ@K4RpL_Ft8jHQa&7FVtv++F-u^JmcZkxBK;J6|0 zG+}C~bLs5SsKcJv@4`G-0%t;yyZ?32|2Z59vBpqX1hX;@&MJ51`UzYI-uE3m1Yu+N zwdQ!?bh-e060`)l2)(k2oXB-PjL*v9G8bcCmy4YtvseB!COTd=ij#JK z%AV4G1NjUSAfIPV8K3SNR(_y{TUJ-|7Pn1=U*R^G3xlB@3<87d>0rD2An0ohgR%g6 zKxZ(?+d|M47{9}pa65z(d?EIQun5$1aDB;I{_z!NjN>(jCef*j`Zin(&w_DK?ctY_ zRsQ3Cs?W%pY|Yg*+a@dfx^fQ~Cu4jC+yp^)VHjIa@F$=zsMFvvm|_o`fYkTXuDbe zgjlaeh42kz^2e%n{J4)oyLF+rc1~XjV(ma-0sI7Q!BaQLx}dW#JWV!(e&9}zwKjz{ zBgd}TzAM&~rZd@1AbxJ=Z(KaZO+b^^*CS6*lVVRWVZsJ*Q=9NX#w(oW`a-)%NlhFJC&v^|E;upl_HYqjI&x>>o{+zCCHA-4k`%G1aN zd>lT6*>Dc511`kT5Y!FB-EFX3;Il#5k8<9pmaKoi_B=IQbmd9y39_CAGysk%SuN|s z)AuD92U}%RbI$j|_wX!uVr~r6z!Px`7!G0Ge2uVdQn!PvpeHn@Cuv|Z_Q@I^!1Z15 zUAvrI7w0xBYjhY_#|!JC+YRNsJA>=?GAx2v)s7$cQD}$26js*2If*{}V`Cw>a3{eR zuoO-Jcltb-3C}^$Sd0U~z|DuLFbBd3VxkWM?|lcRz>T2%R=5?qSU`?(S;=ZyAIq4| z@nAeYf+gUIYtjq_>pi8fhDYE7FqXz->V81)VDUesS0aRC5w`A4#$NEfvC-7RNPB?o+6`tfBqOzyBzEzc*-lQvv zf4RQ8Q`tFcuqn3d9Mln`55&Gu7hkI#-#$FVZiqW;$gXulH#APQ{y3ql?IYb+{}Cum z=;nUqXpXS`NT<`AqvO%_{(nBOiia>}!O6U-Ybp206 zASLvFVj0szgb0M6#6mf~PK*o5P7!Ef5%6b0f9Y63ZB{7#Q}91`{_dHSBG8f};6HX= z0sq69lp>HKkRp&GkRp&GkRp&GkRp&GkRp&GkRs5k)!)SnShe*VwK4zz002ovPDHLk FV1n7r-gy83 diff --git a/html/inherit_graph_47.map b/html/inherit_graph_47.map deleted file mode 100644 index 6ccd81e16..000000000 --- a/html/inherit_graph_47.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/inherit_graph_47.md5 b/html/inherit_graph_47.md5 deleted file mode 100644 index 73e64bbee..000000000 --- a/html/inherit_graph_47.md5 +++ /dev/null @@ -1 +0,0 @@ -658a1274310c0cdbcc5298ac3854302b \ No newline at end of file diff --git a/html/inherit_graph_47.png b/html/inherit_graph_47.png deleted file mode 100644 index a091e9d6e347576026de58bcb3b1ed45adb42c64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3038 zcmZ{mdpHve8^-6bjh(DFY=%)@r7&wq&PF-BLJoyO6QbsrvoN-pN>)zkAS6YERpeBR zM9MM8n6o0xVkYO$_x}BT*L^+D{anw#&wc%_=jIt}GdKhT0RRAS3-gn9d;WH>j){Qw zdT=?-dCvrb?aYh;r5!SJ001=0;v~@_LSXTs=v|3ssTK)sadB>@lHl!9s;EHzzA_(; zTSe%Ax+6zFDMX~3dK5`mJyXd|+S^mJ2$OeiVqOujwp#z(G&8QtI4M9>j1cTr!XBs} z3&!Y9)xBf9yIrv~wEJ?5KcKI#&%Q`ue+wXGoJ~yy|34iROaADVX>L$RLuZLM`+Z(` ztd_J4HVY%9fps2&KS_iZ+8K?xgqR$)#LmiNPgE4jW#59>J1-l(kCF$5yzg-N6`lvS zGeXrUO7s`+4FmIE3t~}Gxjl@=MrjD-y6thv4yvrX{Ao~qY6(P(sCo5ykI$bgni=F0 z^`y-d+PCpE7irYJ`oH?=F~I|q3mSxs4}k5Ac~$QIq}78`6d$!@DDxfN7B4Jm0(B9z z%v0@QP!i1?%kKr)*Z2Hc?N;~t{@8q7Jg_8k(U?X06S`x3{l~Be-7O7~4P%oO24#8? zq&UZ70|&jQ-`h0%=UZa<6+R=GTJg67E0V3uRl}3>R6h6*b>lT^{D*Onr3C=-@fVvi|@hfN{)h>zePlc+hs}n(!zcZvM)t4F5)D@>^?&6$_A?{xH6DUqa zd~Ip_ASqr4dpzZ*bv}%TQ=DI+^taw}VFd@@&z=pv<`vX$u_T3hdr8`XUs0%*xs+Br zcIryCznCe7hu7TN{M&!=6}ADU-s^XHEfI1szLS1ymC>!q?_V|q#Z z`Dt8&N_?7pYu_&3X$K-B%sh10S>z3Y-+}Wt+pzhg7%?^+sBj};g53Tyfjt+pu$imS zYJtuQomT3J#A|+`d*VKoazzT=x&%`~1y0kEH?o;(@u%?8SlR^gnO}AMbG0clt}&cs zP$yh#qKP3Epc*2X?a^l}_K&#>-&aVwN zgMmLXv<+&%$DX4+B*eM8&{^GqLWQag3W>UrZVbC|)7(#StZo!9VG8P@584E9rQB9N zSRUBR)4g&5JrQr}>uA9UmER{qb!PM7d75`#G-DqD9 zEQ~|TJL3{^If>AJ`n@S`Ey=$ll}*;V3)6J=chGB%3=93av7cXV{nWwbWSt#K?bVik zJfmN_h2W(b7@%;8xku0&{jyuf(ZavX0-<_>Y@(dD7>k~juslR>(!l4s7Fx1mfmY3d z`-8Bs*v;>#OMM$#RddRq4<%-kCIm;6F|=bvc0MyDHo(d9JR*;FkMVNqla$8=mt_Mjc zguQ6&;VbjZk!19PbuKOh6wa0}17;^r_`f~|6L5?wsc0?PC*ez9bY?!`oyca3Oa={8 zwkL7^08Aa0F+zmj%5I1gg*Ke>YXHxcl|Q;5`72@mK#c4Z245&t>v2&mUcrf#@b z)r4m5kA^4>+wwQ7Qdj55ovuw5j+|bO{CpO%X`(!}kGWH|IVzUse!GOsU%wgw<_Ly= zg-;v{G#e2&HO|sv?E3-#g~KBr=4!I7fi$LeaTRzjZQQvw^)YJmxN`AZ!=g^;$|WYW zEp`p`b5X!agn2b4cEmJKR>nSpDGOQ3hf{o20Eanr?$KyienZ9%K~F5)r0W!V3@EE5 zhK<)oh9QMwY`CL`Ngx-Iws(zXxeTdk^^POXvh$sUn&7`@87Puy)f7f!Gj4!g(9+b- zRhhMnSy4s9_m3-fQ8?6;?PwpX`}VBr-_;vjQ?$@VZ7OH{>Dr$X?eR;?@JV%cdU{LK zKttHO1djt{=W}ubUc9W!?tQRWaP~^8tdhaO8vNFNkzQO1X%` zMWdT&>`qA%z6`+UenR@f6-6iLIx zMY6Pc?=J7)T1<-|kC_ENV)j~RQH362_WZEg(u^GPBqiIP>qnZ_61qO`Q)y+2CyjgD}$30iE^NXrN0q7%zT z`kXG?H8O!QRSIrk+9bYU$({Tc-|i#6X9k|iR(+m&^0QOV^`%eXiO|cAwq<$6y;BHw zrs!NtJBmh(3GM9)DBrf@3gKI6uo9bb+8Ja4PJ}Y_v!0oFRR7q>@7rN9lryRVhRw~d z#accBC44Eu8=|UPaayy=+l4%>$bgvWWj2DQ(2urnwHyU&6cGX3`W2U4c;G@))+zK@T2j@~VW=Enk zseXZGm|726i|dS4v%Fy5DL7_yzwuzw7#2G`3PSmr6z5ZBeA?Gz3i124(hE$DM5?5j zyCipIowRw*IGGy2)FtUD8A|Mc5t=mLvFu7wn7m*3MjwmK_iz&O{bGcL#$Fp1zud&k z_1#rG@gfe%Q?EV_2E{|a#%}NH?LaOyiltFxQ|PPim@P@_bCL^+5SrDI+nKh!%}H1D ziL28ckSfPZe_=mEd4_5Atf|-9O`hCC+hD4LA-rQ5oK~Y;dm?>NPFU^%kwPzS@Mv>z zfI152h1%4r7gk%6j&`zA7vC)Mk0@r7f6Qw^`f34;w^gc~@y<+@PGw|pp%?qvw z=6m(1fOIjiyMcVzlvsQy6!+z`bCEZI+(VTDa`VE3N1i~Ci*as{4YwrMmaX=2BISPY$R5Q_6?u`pqA;q zK?pLCZ3BO_vv{OS(o^b-tq;&mI`R>fLZCie#i+!nG zeui#j1xHYpg)(`w6Oa*lS*ECLIoAOFF5bgM5VRPQ6wX%vtVZ=_DX=U^4GfUiD1eZZ zLr0EyyN@B5zLepT@xY#NcWlJ&SrYQ)Z&J>!KM4|Dr_pC$8*EQqdiZDtKE0Q_0V;h0 z-AXvd7Kc=@9thnKK3Y^zPP^{eez2VV6= zlHFoVUq9JTYZnT?Q&h=BxTpa`z)v2lJtbS|O(P?Owt~(t9fkQ&V2Ux?dV$EM5gK(!O@fMrQm58J#tGy`g)$4>mIO?*314fl=d> Yp7x=9@cq|Gdk;In;*|BtQezVJKSP?g5&!@I diff --git a/html/inherit_graph_48.map b/html/inherit_graph_48.map deleted file mode 100644 index 1146cb947..000000000 --- a/html/inherit_graph_48.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/inherit_graph_48.md5 b/html/inherit_graph_48.md5 deleted file mode 100644 index 4f39897c7..000000000 --- a/html/inherit_graph_48.md5 +++ /dev/null @@ -1 +0,0 @@ -987be7cb92e7b50d4e5f610f11438c7a \ No newline at end of file diff --git a/html/inherit_graph_48.png b/html/inherit_graph_48.png deleted file mode 100644 index 2a728867ea8a7ece6f230583e1fc79bd50d9fbe7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1768 zcmVP)Px*qDe$SRCodHn0>5Qa~#L@T%=S&OS*cv$w+NdG-GQelWK@HS{rR?u~Htg*gT9F z!%S^in0JHpy}w_&_I+=!-}m8s&-Z@M z`+Pp%bM86rxTxqrbRaqq9f%G@2ciSff#^VVAUaSc2kPa_+n2tHIsLIKI#3%2)^qaY zaDw__BdK?w9G=r3yP^X%b)W|)4k+ei1Mjb52F5Ybfg&AvgmJ5~WAk>t?3mb&4wS`# z7<^^1HBMTL12OoDaVd@|ivuzE%3^Drv=|2(7BlDwV_I_jez+U@L1&l&*MgsNUV>s& z$)Hg%rI^7r9Mhfi#=s;vkeTBt+B2ao49y%1oAYRRZB=O{2bRF?nE_wXo)6nI{TI?6 z3I0d;6D)zJ;WzkSs}wt5a~v8EP2e=>3hE*-7>iXq23}w6;2MtW$a$_c@4D^p1SU*_ zgwrYQ_Zri_@VI@Wp=WU1xeZ{?YYO|}PZ$K-l9Hkz6X9L(9253a7z<0FF&vBXJFwsE z%A)FiYH80Z{4{e?W;O04X0S3S8x?AY|1?XwE}`6*IqXeoo#_jk-k=s?#}VoVfNRZL zi~U0~=bJ$G8%$NnfEt%M*o(I3nNXqLqOl<9=t%i1j7r*RQ9)%N7?`2j(D=7?m>_Nd zc``||_a_}^GF9cV{`=iG)WtO1p{t{#@~LGaD|$ItRVV5n!zS1bw?Zm+m8D?+R=5U2 zO{L)@YHh;c-~mwn9lgB;cEAtdJYlk$G&^Antb_iLY8VyI zTLT{VRplIb6P#mjQc~1R^=o!om1miGCj>{Yp#BiF1mA(&4SRrk0=)3EU?>cLR9&fD z2N!_Z{wO%!ENuu~peY!@XMp38<8N%bGs#h?PL0}?`fYIT+l?lls1=cEKXh2h{}j z7HU=hbl^~b=nc*zCh%%#3+h9dRj3{G!6dDOpOd~jDg8SuVJVpG>SlNamc#L&N9(|Q zqTgF!E+~%~P5qhGAj*yce7L; zOEsQKcW4hi;9&^mqo7&P(TDo_pj{WLD_Eof6kfOM)|Y8up!ftZkPMVmJ(G$)s%+pM z?EUB0V9b+2IU5YXl>XG`fI;5{LXD%5y`SOnYS+shd_H2&1+&{M*X#wb2EKyZpamFY z*Fma|RD2)uapBFF0Lpok>mF069el(LrJg=o-2pYKb#lBf<%pzyEEVn~@4yV`mMqLQ z&w`z>2)+b&eSK;UY9x4UmyKHJHO?IdmB}2wbAJq{z^h>L>#K6yB={EGiA@NfPPJ0G zgKsgbTL?aSH2Egj2Kzx1uY^tD7M}(W)xvwt<&mi5b${FlWnhcBb*Oop|+aN1l}M2wsX$~=hbsP zodEN}fSU>?fa@_py(jkj1S+Y9Gn*G)D%E46ZqO`e!Y1_fguII|F}j00pEBFb%6_m5 zR0n8PsMYPCHZ0$uvdmK>I?sbnpr56bN!lCo?t%BL0`gSVTJy#}Lg%Wy1KGY(2VZvn z+P1^stL5pB} zftot7ofG}e_jXMui04HIq65)^=s - - diff --git a/html/inherit_graph_49.md5 b/html/inherit_graph_49.md5 deleted file mode 100644 index 7df0c7af3..000000000 --- a/html/inherit_graph_49.md5 +++ /dev/null @@ -1 +0,0 @@ -0822cea0f9de629360cace9b12544144 \ No newline at end of file diff --git a/html/inherit_graph_49.png b/html/inherit_graph_49.png deleted file mode 100644 index bcbbf3096efc38da23a23d5e2f43392895db9f27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1661 zcmV-@27>vCP)Px*H%UZ6RCodHn0ts-MI6W1O3i$mnwpjQN)2E6Ov@~l!X74SQc@}rQd*Xk6a{6X zW>`e|M--%>Jy0>ru!m&^7DQ2L5vgS>+RJ=bS`pgkbG?Jd+ugfo-Me~s_k7`V&TnRZ zXU@!Telz!Sii#2?5lAACL?DSk5`iQFNd%GzBoR145vY;nJ^iVhmZd(as+tkl!L+7i zPVJP;3d-lem@M^4Rn?0?C#Ez!?zBvb!*QJxze*i}>5P6$wi#qQF|zq3b=52aNn%v9 z1&=%3Br)Pfs+##FiBZiKJnnS!kr)km+0#%5hQcIJH^A7G74Om!w^{LAkK3y&Pd=XI z>50_MgEO}c++OW@^7f3U@2C76 zdh{Wa2g{sge3x&>%;9X-y`@Oc({r zGo1bSm+Rdb?qx1|IyKAj)akTIP_8(+IX$`arhJ?j(ZTq|bXlaLE%tiY3j5(s2x^Vt zF13C;jE1P@Q1}%#rnx5F*pK^WmHtls}<=LoW+x5EO&S<_E-e;P-Bn}356W@k+dBG-#sI359c1$3JMFs1P^?J?P8gXCft>vo`)Ax zR#DNT+?S^9Z@HVy?q;yBz6C?8-1|%wXuM64-40?1iqqYk$6FeSYhXD|ki(^~Rb`1NCBX_bp{SjCQ3&7JL zs4a#kn2Q^zkL{TLf@R<$y9g%QVo;tcgP;X8fcfA8H-w8|HJIf8z!wm-HEsA@kf)C- zEl$tk^9q=tyWtIJ1?5&nCr0ax5%#2PhW`NuwgUv&7Bm&3Gq{7g!EA`ig{l*&=!cy( z^CLdNJc#jmy5M{M1e2pix^4&eMd0oZ48eXGl!?Ky`!>@Qwx46edFx3#dQbn6mzV`JJj;z;WJ{Zg$tX@b;^Q z!Fp(J0euK2#FJo>90KLtF_;J+fO-$6fv1Vu44c4t*8_DkybXITWT><_J%Im1V2r*7 z6F$TUGrt-`cZbW+rHiV6Bgp)Zv4T2x!Y^Pj$3akk4D0v6ewYo#p!$N(ZG@lT4)8?q z7#|4kB!j&b4!}#`Zc#nJ@my#D%>o0gM#8?7b?jvhMaS0-4DteSq3wScOn|87Qt%xi zc|w~BXnnhM#i(>SjKyl_wjJ!Z7)-i0prWxnQgbA+ONvuZoIHhWH!(b!x37PRSTMfiLn=yM}6azmH$giy6gkl#x{le zHRX6^O`h!zZNd1Ird)BV%fr1O^JlxXK5aj#i4kXjW$}q7Mp>TAhi@Y~xfuL8xHcah zp5#7COpJ>Dk5Lix_J6^r7142wKF`JH8JG_%WB6BEmvBs1rU`6du>K)D8S>r!yi|Er z#uKB;FG?XyFiDI;ScL){Ly{N;xG04%q+I_omK4GOlQC3i1Ui+}d-y06ZTCxL!)Qff zSJ?>cWM*H&swz9fWMWAKk_aRbNFtC#Ac;T{fg}QjAA$b>l7}EQ0h4c500000NkvXX Hu0mjfhdl`I diff --git a/html/inherit_graph_5.map b/html/inherit_graph_5.map deleted file mode 100644 index 393eeb3e8..000000000 --- a/html/inherit_graph_5.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/inherit_graph_5.md5 b/html/inherit_graph_5.md5 deleted file mode 100644 index de3725129..000000000 --- a/html/inherit_graph_5.md5 +++ /dev/null @@ -1 +0,0 @@ -1a9c8d068307171210c99d189e972007 \ No newline at end of file diff --git a/html/inherit_graph_5.png b/html/inherit_graph_5.png deleted file mode 100644 index e09cd433b6156385ef74246bfea618baaeec2da0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1688 zcmV;J250$+P)Px*Qb|NXRCodHn0csGRTPJ>a}GICnnP)tqDEzwB2jX_W6x2$rEGd#4 zn+yCWq9_qF%c3lj5Q)e@sm!t*G7S^cEX%?nGp+Bt@0`c!a_+n5$h#H2{e$oAwfEU) z4{NWz?tQmV2nrqu9ta)?9ta)?9ta)?9ta+2gdS*;vghHnO-*SJO^wq7^Vs&M$*ng{ zRwDaU$}uVJp{a3spm`Jr-AcFZgK`>M?m=j86dq{9E)S&bG%eGl^$Tsm19ctKU1&`?419BUs6UsZ7r zUo!T^(fFrO_N(GtVd$J5FkAeY^PNrfAD8o;X7uk^=AEvzpHT8_7xj@PZOLjYD!riG zMW}DScD&aiIao%!1^pa1O|HY>PLn^Xc20Ycq0MpYdsn|Deb+j}m}y=7m)kfPo%XP_ zEpO1g&j5eGui!7q55Q{>t3AeH=mCAfev{!RI0~!4KFUL10|&rc`2gl$Lj0fjg z3d%!!9DKGX;z~+YX+DGYEifRDzzXODY7lIP{#MXEu(D{?&iNF!bN&cVzOt_` zUtlL(2(cz%>;w0>6>1=>=F#zoh|QFjMK5-z)W+nGOK&AN%1lQ68P6mTw3aD=I2z0fAocpe#RVYlP{1*Cw{T74!It!fB3*o+7 zz`gJxC=b)iPy^0+6?oY39GGS0T<-JqsK-r|ejRX}9^m{2h3hoa=*xxRIxc{(!E?&0 z|6I`YO04{K?AhSWaO3AdtRWcjE!~B!LsT+oR#W$IlhT0$zw%r9O(=bC=Z!8V|l%VkJ7NRL4pisP6@DWwL(_^$}2?bmD-L4rZ&Q z!_wySmA)_&dV(L7u6qVllHV%^COR3QW-4WNG0=yBA3ICn8E6d#??NyW#MEHF1eJ6r z9h}pwayHC`a?&SeAomw5X~%8HRaPTtwy=`H&>vj*9gszv>9i4aj;ULRFM$1^ygBWQ z*5CiUP4yb+7d4Nf^nGt*CEZ7d`@xj|1*`=FSDgftptBV;9Ih=|g~Gd(np8Jp1SiFGbuR zv*9&{A7S7QgsDs)5dh?O@jV9-f3)+6Un} zm=4Q9nclUX!-M}Bt_GE5J`Z*``0g4Q1Zpt2)-$aj17kzcDiqpLz6^)J_aBDez`$(= zW}3tB5qNmFg7UCm05e~_&+*tlIAb2EGg6JZ-Hg&yEq^?j@%7zWvX@V%#D9b{D- zIy&a)EH4~S(4>uP`fZu^phBCs(!a6NY$4=n> zT(9dgpbZ%1?H>THCoL0nqkSkC@Ok81eniDSaQ-f32Ixb33uqlZzlCy9WM?VL22DJ9 zmO=9NF}jaO-a^xBn)anNMs40)$t%U?9HZapX1S`R8r@WzN-*Vc;14+uv zRZh?IUI)rrh^B92Z9HJ2Z9HJ i2Z9HJ2Z9HZ9{3B%FgDMe6t_wM0000 - - diff --git a/html/inherit_graph_50.md5 b/html/inherit_graph_50.md5 deleted file mode 100644 index e508d34f1..000000000 --- a/html/inherit_graph_50.md5 +++ /dev/null @@ -1 +0,0 @@ -04746d2d2fa058aa6879ad7a0cefa420 \ No newline at end of file diff --git a/html/inherit_graph_50.png b/html/inherit_graph_50.png deleted file mode 100644 index fdc6fa7d4353e59509700c494b35a1008bfba931..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1389 zcmV-z1(N!SP)Px)CrLy>RCodHm|KWdRTzM0YDP27TUW_ys+q2sR+iF4Pf1XbC{0#o(Sz6(Q;G_D zON;1U4?X&jL4;98ltn=gHgto~(lRS&Y7o2WXcwY{`o81du-NQ9=Q3wbb8`Lg?ftLo z{`dc{f30(NOG}jKf#`wgf#`wgf#`wgfrHEgtvT;Im%5cX^|5MndEjZxc|SDikg$;G zCvfk{sgG5o#{*Ym%86NX+Oicv`Ige*o{ycN?GBdAVtZM=f#9%f-kSaAX2D4I6 zH9@}^%q9p@r6$%Rn3H(eQ!oxLg=L`l18Px8tL$T(zh$3Yh;7eRMPtL!q3Zi_4HT63>XM&4QT=;DD(XzD0#ZcIx(f*D%6 zmcrd(MWP$z_MCdF%;+M~zNtlx)Q^FQL$uf0bR+|hE*O0H5N!oRO4XCO4&`rmxM9gq zlh-n_UyjxV15ZKU1pTlN!mOB1xi_gF;O-ycP#&i618hsUGHIN{eLFk`j@u0{Lb@p2 z?tGrxwsH@=Thhv3{9v*XzJ(p&7nTlC+Ta-&1lvCXzm{di-DnrgPa4kS{yFS~U*JJ# z1?4@sA3lR8VOUb{V7k?g4=lO@-E+`YXU2NAo&(Agum{cnUwj^<(uLxAdm)%1kAVGk zf==y(!@vdMmk|4+`XV|hBr!D`O6x*xKO5mne-Jr56V(l2&aNJeF)D&D3?%p z4Q_$;;1TpXybMRdOz>TGjKnH@8cqu)vy7SUdS$pQbU=`e%i0g_NjMfX6N6SsW3|n z!Uf=qg#ie4v(D{EN4UcMF%`;Q3bv&(fa1Kv5f_bt{xq1RKhZt&JK&3??9DB6ZBV`) zeLGwg)OpNI0JqUE6K>=lCW}6)i;Q$Ir)R7@m-6@E3T}fgNX52PmZO{rW~bZoLlDXl z6vhP=bI?7_EkGU!R_f8@R!JPOQwIUjC= zy30rh(-)fot#A{#!e4={@HMP}iJ)T^K`JMqxSD?lgMJq%&ZB7evXXY-ht7QTx013M zYL-k*%5%AgTat5l?uF=Nv&u74o6II<32cBtcohti0d>1~y9@*GV%Pzzz^&8gzYSAh zG5B1A>iK;wG(nf6zE?8|(yE zvYEFIy1~rWDgE#Vya0!SG7GflYzv4^-&)dIS{87(Ez9Pl-RBN~TWB9_f(}r|!+Q7| zwEG>H2Fez=yrdlnw9i|Ul&|Nmz2AY`xb^M;N-r!eY1LhF&&<3jstsn|9ATX+@^lEd z#k74aiq3c2%!=9PR%>P|I^Y;En1i60QLg-YN;{Ly1hY=tvvMpIY1U`kipnm8*^oVU ziu#wU|IdP1&ai6R!(diB_W#m9H<+&eW|Lnr_~T|Xx)Js^V=z76<~71O&Gw9D3}&*CZd7<6Hwn`}+M$Jhk(m@$M19nGz>gAs vUGl?9l<0xzf#`wgf#`wgf#`vQ*8~3oLjlt=6)3I_00000NkvXXu0mjf>@cX4 diff --git a/html/inherit_graph_51.map b/html/inherit_graph_51.map deleted file mode 100644 index 4b7d8bee6..000000000 --- a/html/inherit_graph_51.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/inherit_graph_51.md5 b/html/inherit_graph_51.md5 deleted file mode 100644 index f91fcf9a2..000000000 --- a/html/inherit_graph_51.md5 +++ /dev/null @@ -1 +0,0 @@ -fc9036f465cfbd8dde6a9e92849d8430 \ No newline at end of file diff --git a/html/inherit_graph_51.png b/html/inherit_graph_51.png deleted file mode 100644 index ac18ac9537ac1bb3f126c3199d9cbdafd98eb4bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2088 zcmV+@2-o+CP)Px+;z>k7RCodHnR$#=)g8yRAczZ_1;rI`!3|Wz6*XvrORW(ri`0cgY20EI_cd-o zW6)w_Q?*I`$3_ZnO>A*14M7z5;0|?VM2$O&ipB*$pT|9N=H|Yc`)20hJbS*$=iT2q z_bk8rJHK=8n>TB%m6RfoB9J1GB9J1GB9J1GB9J1GB9J1GBJh6^fwc>sa&PL+E~rmc zDFU4-0&n5W`LRR4iVK;&1=n!}^{FaFptD3^D2^Ol#u*cNWtoPlO^U$J6oIMCyD&d@ z(aD@|lgcRq4H1Eq%nh+j$;mPiNXc9#N~ujlL?9(|Lo8ErvP=ZJmTA;Vn_k?%5-x&~ zur=HYp`O%2&WUFbz6VKGT2Ti8c&+CVifS z1rXb{3^j$uTUF`s9rfozdwi@ibm{7ewEPC{Dcz%>VMmtZ++JgRLvU~OL;b_Kov$jPO=(KazF}7Dar$8Btx{Y{^H*TNZV&Z2W(S>VmmG#`o}bsK{MgTKinn){7l+GRL#{ zpToPNiow_>$P(~@;{a|>+1I`GOJOX;^7MQk7H9l6ySW$FSK)fFpGo!)FfeLIaK3O7 zo`*dLf(*K^Gm|%{FUEmzFT_c92<1hf5Bl;)2%3v=5xf8Ln3=$pye{W2PUh}-DeK^0D-3Y@#nHZnK_Ta;fh9JMH zm~4B3r^Iz&dxO;#wgFFMH^i1;JI7a!X>uDV^*qe3SgSrfHD|(j2*E!J+l}=B#JYyU z<)9C{!enp}RX3OdH^T++2lxs$%`mo;Am~txanK*;!G#di(mbI}{yLqC0k8v@C?>}p zpnS$L@CED-WmV0`{CFEM;J@H*_%-YT$AU3Xr@|62NsXOr64s{&_6+zFc+dD90bwmL zJ5B~XKAl<{d9$p&CzB`D{aFVS_vy?Im)9}QgLPmT_+2UJQjE8KGWyMu3?UT_w?1CE{7bSmcND=D|+ zV}3jn*SC-B6y~3b{QxMFctbGhcZPq%KS3Q1?^dkUAJ1VRtCJDnx7lo zQ_>{d0}Mi(fZCHmxmZ`j@1P0(2eCe*U@(K0V#LWE>Z@H%1W%O-@G2YtF3?yAGBHe+ z(?Q#S+b@>S6J%m<41WcE`7gLRJfT#)fGa3>uhgy@yR~_;raxT#|vMFj=}a66zA91CTOdw`IsNi z`9FazA!SY+ph&`JMd&Pc*;}J)3mPzv^PwwSj|7?QFOe^VOH~7 zm6ASu3gPR(QP_ha_<-3=7gD+e^w$&0*LJnG-1))s5jv_yN4V3%f;8r*Z zd=-8N$Ac%y67W?Nk`c4=hvH#eO{6Ax9NvUGK$+wRgMIz(v;d}q@?`uo46uNliQZX5pg2{Xk*tRv*I!_qyM2ua)`Hbm- za2%`&84uU;7H|zbm^^%LfED1zGPW;)>u+ohfJtDIUktt(_4{uy1L`6dZDj|Jyf$ME zfgS~8cBgJv@N~(`jppm9Yj&d>*ZwdPmSuHYaP@?!rv@^3?`VQev3;f@txx6d;D)MI z1L;t9o-npC@{}6})qDzV>v8pYM?lf@_M(1JG^vNidQrI__E6{&)s;1;(r{s!#vPr^ zW#+7K}oW%=M3Pnqdt^ApGoAG~KMC%2byk&9`39TCcjbyQUp>2QUp>2QUp>2QUp>2QUp>2QUvN4fgb_r=yeH^ SbMV~&0000 - - diff --git a/html/inherit_graph_52.md5 b/html/inherit_graph_52.md5 deleted file mode 100644 index 9d348b70f..000000000 --- a/html/inherit_graph_52.md5 +++ /dev/null @@ -1 +0,0 @@ -d93289c89e83897b393398a890b6cf34 \ No newline at end of file diff --git a/html/inherit_graph_52.png b/html/inherit_graph_52.png deleted file mode 100644 index df9e91493fc48223933c1931ac5316f68c018863..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1725 zcmV;u215CXP)Px*cS%G+RCodHm}#h0RTzfV%z3zFnp#$BYGpz6lOn84vdJGtra~f`WhMZ8 z*ZS7C);jD)jiRClq6eY}q6eY}q6eY}q6eY}jvx;-&X~&}@}_0v$E>5v0~?s`jO3J? zBojru8_&@h`7!J0@jySOIy}#G4U~WLRE%|wSP#r$X3NvF%Q{)obz(Ytpx}WREHMyr zdmsi&Zdb*MF<4>@(8wNfF znnP#k1!^!1DOmY_x=?LQzN)d-;qX8?f+acbmq^^6%qZFh(Xko%W_co&lH)tRR3Z7z zpj|EHwG~xR*tA52*5tP+QD(MngB+vt%aR{GYa739Jel*V0~NDAq=xqCzH0MrXp{R{ z?qKoD?}EhJdtk4Cjqoc>hMF`0pYSicfo-e}3unG3ScnH$jRbao{U=f7HcI@+EF8Fm*-3!`|@dp?RL6b0c z!Dd(w!yu>%VH-hKi6)SazO7)@jL9)vT1=1RxgYu#(|7WG0lZq9!doy0)KswU6L2;-ZUfZ-^VFOH zpMtV~H-Q1-m`A}r2xD4|{Uh809ic8Qqr$adU(VOQ&j*$6s~dTH;Ra|06F`662YKb3 zm*=Tm&S3c>^}_X}r-RPj4auE&H|c6n6<`p$VBKLFIAPm`U^xLh$g6K@NYwJIr0k7qU4h+dL0mXMr`?<3PEVeQA^ZdegG%?MuhPD7BOY|Hgo*poLm`jxq*jt}kq3ZIOin6kdlJoppWzJ{3`u!? zSQfMe!+!JVyHurQTLZuV*$7WU1thha#6QIh`xy(KoCc9|y9`thxDs5XfI;ZIf~=oM zzR$j@K_3~ko{mW+`#O~ZH)T>wl8J`ehdNkJP7Ull(wpITXbQa`$g-d*7-xc~i`SON zVp2N3Wg=rBwpURebxc(nMB29Q+^6APu+C8U1U%8QtTwXDA!ILU5 z40|5bSLf4U7F-V9VI=$krR1rj?~>}7Of=L!)WLEI1M3GaguAdayapc0?#x@E9T*he z$wBUpRiIN0DtD8zALY0w7Oa{-vhF+=S$V=tg5ymfgW>vuRr7NZk28vC^E*Hlxa(c? z&%oV$3XFzQKI%`|o8Ws~pm!kDHQz<;4Qe>7fKDdrDSfdE))m`b#j^(lUlg+sJl?}{ zgN*>|jDqyZOjdcMgG%kDtT(vO)~|q>un<%wybhaTJNyM>Ajm~DUq}23o*vbp+^x3L zL0jP#aQ82OA>hg6;%tPy@G=|&>RfO^Ay{5de_9OEx=BLpqR2z5hVsi%Eafv435mMumz* zrLNdn?`%W9*S}>gKpEs$7OZ?fnZXhkB3~B`tK}~DgvgS+^2@9O^4yhQC(8C?ySsWN z@-`>z`k3~;wnT$H-JZ zOz6+_q_Vy<_(j!k4N*t02mC~_4BkI_T@Ys;JrF$*JrF$*JrF$*JrF%`#CzaBC=@YG T3$ai+00000NkvXXu0mjftw$@U diff --git a/html/inherit_graph_53.map b/html/inherit_graph_53.map deleted file mode 100644 index 7ad44e813..000000000 --- a/html/inherit_graph_53.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/inherit_graph_53.md5 b/html/inherit_graph_53.md5 deleted file mode 100644 index 7f8fab8cf..000000000 --- a/html/inherit_graph_53.md5 +++ /dev/null @@ -1 +0,0 @@ -fa10920cd63351cff8049cd2b52c4631 \ No newline at end of file diff --git a/html/inherit_graph_53.png b/html/inherit_graph_53.png deleted file mode 100644 index 807978a6b6276713865d9797024f9207ff8afdef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1769 zcmVr001Ni1^@s6R*|Cm00001b5ch_0Itp) z=>Px*qe(ZW5`E6=`k;S>mBYn)lOimXN#v;# zmm4MnWe}GqR7G=XNxOZL9W#T+!g!ee)?#p_98V z$OYL9yWki+4MCkSHh}ee;9iL9bqf1oTg07FV}GtYU>KRq1;M|sv3-_p&c(hafO7Nf1;=O& z?}PsL1AR3?X2K=V1&qU!pfVK zVZ&JNddFG|E~HupWzZysC)i`)iQWrLk~S~|4#I<=%AiyuQctdq-w(!t&ofqG?Ah3> zK$$3Sm0S7$$(blRTANy*HTV|FF0d1Ia`DBD+nzwPz(9No10k;8DA*RX2P2+1p+493 zCK^mcaY5gJInWZ^?YrPM$d(K0$>o9txj130Ft@?fxsa+Gm~@_4flINS<2kS`1J3_h zFiC@kW5i>)ow9RRj;rq`YZ&)oY!fNSc-M#;*2pNi2k|>3uInhQffL}fdw{!3*%mYz zqc^w!?)biN4+I(L#_&f}(VwfwZgpf}=fZU817E;KxC62^go~2_ zEX6PhfA_rrgpF+9bfWR&U%=oxsUR27dINO~ zUV{v%8^QYw;6Ct!%oAfN3<6IigR%=w!Uxa*)U}{LVMou#-U`Zq+vZ|q%N<%8s~m=H zGTUGO&Vq^KDq6|Gz`iE>dvFf)_Ygb+%C>djv+e&OEC%OnTunAlU|&bZ z%6aOOCy?@6##sCer@`kGgW3R3lw0}#(Vz2R!d9xPCQ4-kn(e)yaYDyN)VZ)>C&#;Z zYPhgEuM9vNFj0J09x+LFGPfIh|(q&m-Q&rL3H(p*H}O=d|_Wm;FKBarjp2tQKAXYY?Z;n&D` zeQMYJ2>4^0KTfWOy>)-O=?v2dq!CCXkVYVlKpKHG0%-*5MFjo^?o&hW`i13e00000 LNkvXXu0mjfRee$> diff --git a/html/inherit_graph_54.map b/html/inherit_graph_54.map deleted file mode 100644 index 0f8e0a31e..000000000 --- a/html/inherit_graph_54.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/inherit_graph_54.md5 b/html/inherit_graph_54.md5 deleted file mode 100644 index d7e7d8cc6..000000000 --- a/html/inherit_graph_54.md5 +++ /dev/null @@ -1 +0,0 @@ -f19e28a52b043ad25c2ad5510a7a745c \ No newline at end of file diff --git a/html/inherit_graph_54.png b/html/inherit_graph_54.png deleted file mode 100644 index 0fda848b2ac6a9e63ad99355a19b2f01632a1a84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1414 zcmV;11$p|3P)Px)KuJVFRCodHm}`iXRT#&&EH7khN@`JdF)cNUA~MVDTLfh-MQeqG1=&4Ks|B$y z8Wu}Y5ft^sPu(*Np^bu~Vv(W?Wg^){wCu8JYNi!*{r$%G;Nfj%_T6>Hossj0-@NDg zzRx_*bIy5ZT3V8l2a*Sp2a*Sp2a*Sp2M%Bl98~7JO`~mLnfBDw7#{cuGj7kDa&W$Z z`Z#DW)1I0J-UE{`;o_oZ7{q^z4o>6ts|PxG+JFF+BU%%C~2xX9psjv325?TodH z%3638evLbtsa%T{Ih-#%ABMnDFcH*wU|@^tXa>$MI=G+XMlnxYwfV1%Be`}$H`v~k zs>Or0`sFV|WJ(kwhIGUyV@%fNH=Zg><<2lX&)2mh^T zg9{WFskHaQXKIIB1dqc8cn8!Y z;8s5wMu9Q3r!fxc^B< z)l=QMo3Ej60L}&-6g$N74WM+$ec%`U2EKq;uC}dF!)D5HV56?G#dB#54sn%xW_H4I z7!B@JPk_M-GVmtY@nAy6dM~S-z_r?3?S2xLfUA5Z)I>hCo^tDpbtaW>VHcQ06CudH zp!pOggR9c*Pe;c(oXW7M!E-YNCTcEJbcH?$2GsM_)uOJ3aT)%kx)e;REud|&>{q?b zb<9%O1SZ}sP!rWVke)xMflitOzP*}->){^&w$?v%KIqozNu8& z^HS4B*%uO}gKmRSR?sxKrc|o@v7IghYJ#}sb;HeB-GnibT&<3I15B=&pgryyo^`6X zxic7Jl3oY%zyz8Abx}Ka)!?Es2#$B#$)Az0(B=yK5&nSL5Tt``*NHnpXKe&E6`Z#o zzK2`E6}JMWgDbiV%=edDd<YjdYq3vPu5=OdT` zK_-fJ?|`?#_kzWsD$N~EpWngY1+Aj68iMViz0$RVj>0=nUjtd`p`qQZJq66{yoS)A z<6Q}Px$1PhD^d-HF<>BdpmOUQSt`~3!{-}3S6|o(e2M|_$gpiFC|7A)skG;#(%fiB zzlsAI$bMN|Wl|i-D#Pm5HI_TON-qarjIM<(;IUC}RScw=(`@qp&<_UC=pLRu7jA@) z!SmPi(qp2bRO_v^p}t&`8*@Od$R>|Peavsht+hU$X!5(JKsI>*gZbgrKGfsui*Y5D z8^QyVDp^tPhiEH~9bJ2a(qM U5A2BemH+?%07*qoM6N<$f;OS3O8@`> diff --git a/html/inherit_graph_55.map b/html/inherit_graph_55.map deleted file mode 100644 index 24398eb61..000000000 --- a/html/inherit_graph_55.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/inherit_graph_55.md5 b/html/inherit_graph_55.md5 deleted file mode 100644 index db1a877a3..000000000 --- a/html/inherit_graph_55.md5 +++ /dev/null @@ -1 +0,0 @@ -8ff853777dd02db59e1f10715e7b74cc \ No newline at end of file diff --git a/html/inherit_graph_55.png b/html/inherit_graph_55.png deleted file mode 100644 index 7add31b4ed5025f39a2304dd9a49020583116519..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1612 zcmV-S2DABzP)Px*21!IgRCodHm|Lh-MHt65?`CRdnxuI$Ej6-2Qp@U1j4p_kS{V4E6n61K5>f^TDV-+4qm^{7XP=%t z=R9K_p|TO)g~M?}bF`~*Lv$i=)1Vz(00Tf>2PR0R>P5$im3FRYzivF|T%GfYjP8{4 zVGZbS)~d!05eIMy70Js)`3;We8>n}HKMMT1OxUil&q{&X;%g6w3ffA!=F<2>)Zqr~ zPvAya8Tn0eV{|m~1=G3pfZf3nmEmygz;`n8S896ehM$EUvCoFR1rL{+UqScsu4>#6 z@mu^4=d#Gr5Bn?F4sP0m5Y!uEE$H6~cS5YEsqBF*8MkJQ!zsUoXTj%8mN&q}QiH+w z`6o!tf)8q~Q-5rt$z=6Uoazj(gPY!wX>0 zKL)h`dV!nR4St5#K=~bMI{0jNaMPThnhdwY#b5$WfhFL{&Pei_8wi_ZYLlKpcQ@vM^gb z2HP}{V>zyyZ*XUVbMm>7neAo-nG6Q3oZMi?*#o;Wj%GgRrA)NHz$7)fWhk74E?_cx z(tW2%<3@WB)Tc1N*82D38_cQT&E>m8U(DK@$0Sf|A#AvH$9hU5(|MHlK)Lya{^d#! z%;bEhYTpp~@z>-W>#4hu*MNbJH!-$d^po%_EC;`!#&R*X1?|L$6D0UgRbESj2`8Ok z9=MSPy#|cSi?BK4ZAuf!MEwpX!FbT;nr;SF1MxcaZ3n+Y6)AsXI95;%#@C@j>36Ut zPy?mrM|1tv&uF8U{d+Z9&s827w#q)jStsokOKV3Uf7D@Ny|5BO99LkQ zNFmX0!uBRy4qM>_c(bT+V8WeB-b(f{DcZms=m+KIN0;i#Nx1MzvT4(0<{oa zl&51i{0S2w$c@tPW*h>8z73S8&*!$lPcRj{0hYl?@P=_Cw!`o6Duk1F6}I!a9F&3F zRBP4UI<^_uygYe}GUouwjc^d$fG=S%DBokk9D{XWVow2OLb-mwgZR8_y90veVfbCd zM6#dE1hp2zIMzcV9mh6K??W$8rRG=Hqx`39n_RwIT~?k>LX;cRQ+*l4SA2M;9flid zAoKFn4T9ELLtDxoU_u7mCK)9L0JFE``=bmq~Pv5M~_2tzCNB6w5 zM7<|%-bQ(qnqR(eQT=~Qh@#1yi7!rwGa0A3KU2QUp>2QUp>2QUw0<2>b)N{u|`PXbNEf0000< KMNUMnLSTZ~(hPF| diff --git a/html/inherit_graph_56.map b/html/inherit_graph_56.map deleted file mode 100644 index f8df3905a..000000000 --- a/html/inherit_graph_56.map +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/html/inherit_graph_56.md5 b/html/inherit_graph_56.md5 deleted file mode 100644 index 0f33e8868..000000000 --- a/html/inherit_graph_56.md5 +++ /dev/null @@ -1 +0,0 @@ -1e763a3d002d796e7118f6c100544e5b \ No newline at end of file diff --git a/html/inherit_graph_56.png b/html/inherit_graph_56.png deleted file mode 100644 index c0f471894c964f9b4e2f3f0325c3b6f09739a9ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13000 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 - - diff --git a/html/inherit_graph_57.md5 b/html/inherit_graph_57.md5 deleted file mode 100644 index bf5f5de07..000000000 --- a/html/inherit_graph_57.md5 +++ /dev/null @@ -1 +0,0 @@ -e1f97f2f1b32b10ef6801c892a358abc \ No newline at end of file diff --git a/html/inherit_graph_57.png b/html/inherit_graph_57.png deleted file mode 100644 index 028274ee7dce5c10e88e2f44bc11060c20ce880a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1336 zcmV-81;_e{P)Px(@<~KNRA>e5n0ts-RTPKE*Nmn)W@TDxC1oiU7MPX=foXuHAdN_u~G+chB07 zv-dh{?Y-yBX=_VL5l9h85l9h85l9h85oq!V^eOOfDs|Tv)TgS(M&MPZe=v5TZ(JzZ zW4O*Ms83ami@-Fdo|2!wf4(9rpBLH5Y-|Kp7ENEY^NRYVx+aW3N?sEtrBatt@+yr~ z6ZT8VYr>>d>QXI|*U4n}!yq^n=7aKu=lsm7>}NdPZm+CsQ}kMh7bi5*lUgKi2oK^i8D%#{G3bN7+zUl|m&%KxhRd*DiOLJGcYt$!2GgNx#ZFf}7z1>`;Ao)P*!~^s z1b3u=8;=2HAbg-B;VhT|K_0yxOUJ|ha3|Qm5A=t_U?8{v#)AFAj(1Fx`6HHtr_uLB^c*` zyV_m16n24qJP|g7zFiA{K_v>i&c5ToaXfwldt>{IRViM{RSne3%^qv9j-{{$c7k)e zn?3|(ThKy`32+en0v=T!J3&7DAo#UZF@@{rC3|--tGMAYI0a1NNuZq51>{0o56T@= zBoo~)YA|6zUt_!s*MthL?qW}Xs?@ityZ`%UkI19JRedRpgr~uTeG1pXP%ufZ`k;d` z-UkzBl3n%6ag=_~&#az6xUxNtlsnL4akvFE6)w!I;-5dMUJeg|FG3qY>BA1#XaSuK zCMEb_U6A+922T^8QT3U`4CiuC}6S+EUW1Q%$~VhrQpSo*sHt^%K}=F-W3YB;JZ^$75o%d3NmN#HS< zmkVnGgrmJ3+toS^egHKF_Q|aJ{T#y3!=m92#P*r;8bHO^d}UO2F-?Y|XN|fQnk%X8 zDs0JB);f8);j1pj$*X#>78#&0dG$Uv>k*ru8T9RX4BTpCwqo*p^Yf4X9HkRp&GkRp&GkRniN1pWo+oyC$C@nO>d0000 - - - - diff --git a/html/inherit_graph_58.md5 b/html/inherit_graph_58.md5 deleted file mode 100644 index c7451a92c..000000000 --- a/html/inherit_graph_58.md5 +++ /dev/null @@ -1 +0,0 @@ -53464037987b95e17a0d633e7d66029c \ No newline at end of file diff --git a/html/inherit_graph_58.png b/html/inherit_graph_58.png deleted file mode 100644 index bf812f7e6f2bc99ba1956a61e5c6c6929ec09c1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7719 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 - - diff --git a/html/inherit_graph_59.md5 b/html/inherit_graph_59.md5 deleted file mode 100644 index 3fa39027f..000000000 --- a/html/inherit_graph_59.md5 +++ /dev/null @@ -1 +0,0 @@ -266b014e0f973f296aa826f2a7368c8c \ No newline at end of file diff --git a/html/inherit_graph_59.png b/html/inherit_graph_59.png deleted file mode 100644 index 25bbc1a7b708d045cbb0dcd2b587651784433b20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2248 zcmZ`*3p*1E0G-j8Fd=3#RObB%nOw@!#q!u9%zIjSMCMhd$YvLDO?8)$*KoTLLk}AA zm{lv4QHjuubyHp=nau0@1NS@MIp_P%4>;%KV!d1y-}fB=kjq4$K%FK@&6lL+`wnSyQB~E39wEvNw-O9hkk4wP%2ZmS zEWbz4Sb9>-To(d#muJ2hayYQmCcCv&F@sgL_sQehx*(gl+QT1r1(@bp$xSt~7$e}R zY3n46U8v}a=xFiHlBF~{ucJF@p)GQ)d_pviBuajwPr}{)2fyG~7)16corsQ;? z!+@5<=4Zw6jdb}LAKxEN7_pNy9od*-_()DG&hWiu3mX0n1&4BiX|scC zM>IOYKQ4G5NoDw7(bY#a@%fKgR&X~o_Jw<$XOr0JWM*h*XLQ0jhk+)K8rTI;(zZ8C z?oRl@H`%H^m3Si6YLxEcGdX2NL)N_2ttgk;Qrj>ZhphG@uiDl;)lUXf7lJJp6KA$g zV<-0dT7UluCjDb#&yzg8GkdYQ7N0LVvq4lC(}Qx@F1 zglL`RB|$hA59`5;S~!JpesPe;d+3@nw3rao7orcL4%hUr_L`r3R{JWVbow1N=iJS{ z0#Su_zz0<1hoN=V@7JLpDl0a$Z9kgIXY?C;C`mWFg;OEZ5iyMvbUUHZ+cXr z$P0~T_XSGUEeqbzntHvh7_i{3nd$@`DO5{)k`IC#mYP5i+&AtSk_-k;Xq2|kUv1>K zQ$?!*;|=dft(w5KPGZf%FyFMU`Y3(zTT<@}i!13K-(Q=r!YwJ!uQhti8vr=4tb!tDW8&#^{+VMfQ>Prx!sV=F7^sU?$@rTyCT^2>Nwayw#Bm~DTVHX)<2G@kzH(W8e~y#zD4(RgOgA%+4u zgX3nWyd}$IxKIivI6!;tP)gT;Lca*M=!wUVic=WbY#k?qx?DlF30)9?lPyTs%ctVF zSj$5OWMPResB1H;1qKz*wg-#C^rCEElr_Yg4ZE^0+6`+7^sr`&8NYsm=AYNJvlv!+ z?-XE`Z8Y!4Z3OHZ3B4Wbzjn$<5oA&)ZNmFmK~19galIkSc)La*(7^JTK?lZ1e*p7@&Nd{k8g zJ7bJV(`gD11#E^ZZm4CNv!mY1i_dl2^8xlcWpv)*$V(fY7ZDeEPMU31pkEXCJtLws zBajacEGdwSDSON8j~196%7D<2t!yYF=ztL~FULP}4nuUXkdfwO}#A-PeQKjx4fKYL9cUCj~ z!bgZ^iq-7aMawe9^$3>HF!?+X`4Z`amyMlPdu#~}_Jj>j?Yo|dnLHIGvl;U+>uPL_ z07|~+NYT+Jiz|_9nnH#gEEm}R37-SVD{NB%}J|y1PsFv(4akT01 zgYm}hQFzC85jnm$!c2U9hcweqYxk6fl*>%6Xdn^+*#+AQ61Jh-kI;eS{LUWw@bE~X z@@s}oF;$68a#Xt?{P|j2+d62f#d3dr3V{g3^!CWi1u@*hu&J{9AO>ujAX*dntbKsz zHW${b)of&St+fCin-}ZJHTz5U1tt;MUsX0y$;!=*1U@H_?$;M;7v%}tko`$2#fv`H z1(Sh(<%6zu58Ca)2&+Fg85ZB-f%c;xRl%Em)eDrGNq==K#mSkG3fxSbox1ojIkp=R>yJ)ig{#;> z=uYW!%af*Z=qvi-i&!IEo3C$E;_9@e^3M{mpG(T%OXufnM#D&HJ_r*-O$R(nZ1C@K z96j1`C~J1J8DZkz&g$a!a9(Zc0O`gBPr`3Gs-2PeDBT}&)l#IDo8SBt#6z@cwh{r| z27KA`>TjemishY32pUbZr2tMBg)xWmQyZRui=acGRICpR+8T)g5Ioa-pB&gKe8 zJT{*ZC}3ZT5$4Epe$t*319E(XFPo7ZNp6 zoCe|4T9Wg=-X;by=j;{IkX7$+LlwMCfoICMu@y_r zV@kHZLy{=Qdu5##$wW088A0 zvf$9Z-fr`@;a)1k0D;0RC)^<-S9i8Dt_u}?IYdOcB@-eN+8p1>S}Kd;L|>CI@7>|G zTpZOoYP&`}! diff --git a/html/inherit_graph_6.map b/html/inherit_graph_6.map deleted file mode 100644 index b40c5271e..000000000 --- a/html/inherit_graph_6.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/inherit_graph_6.md5 b/html/inherit_graph_6.md5 deleted file mode 100644 index 363bfa86d..000000000 --- a/html/inherit_graph_6.md5 +++ /dev/null @@ -1 +0,0 @@ -da662742e72b4912415eba73a502520e \ No newline at end of file diff --git a/html/inherit_graph_6.png b/html/inherit_graph_6.png deleted file mode 100644 index 368e090490fa2700a3ffa2ff383109744c93a72f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1957 zcmV;W2U_@vP)Px+Ur9tkRCodHnF+90Qyj-jBqAcp)}pc$iXvGiVPu)H?=fXbL&z9QWGjqeOtQ_$ zn2{N&5r$#x>P1DgSc=3TMyaS!_VD@q-#zAb=f3~{|6cF^Z09@k`QLNS{oQl!{hr@B z_y7K{QKP8nKy)BF5FLmPL(POV zI}j7G;ugmN%5fkjVmU6wn2I|P6S3kJ#{tT5px7TPzWXNqx8c~if@77_^^pY40e|iq4 z&~OTO!sjp+OvdSO0R#=C&;y$15Ps_&%sG?TIdcKN2j@c-GzE1E>{clK2R{4_@sC7p*Ctlu#=Lf)-*QDoLEe~U#2Zx-H=Kyvh2s>Fpm%}TC zQuSo}`Zf8p^18#4Mt3ux?nFeQ3}~zq^bA6C=Hfyve2z zZgx}32f_}ZiGI&I8q`>@FAduTy223X4o>{BFcwSz6I7iG$3q8j1rLIUVMkEK#xqt! zw@uKGuMZ-QsQjiwcJ zgZ`k8>m&{QJ9Gtuu7;W5DmLjf>>x1doTx=`25bz)bQUKk!dFSqQyjm9!{LRbEpI$e zxy$YcM?e+y0~1IshARuD>JR%0{k5j-t1_qqg*i#ZWZno|04C)P@Ccj=ePJm0>{r8m z5ah(#Pg={9%7z@hrZyT!@XF)@{q?@wt;^9Gg7p3)Fv(lOZ*Uqkg*!l>zJc-JMsPpW zSq+hh-gs6^Qw={-Hl{te;^#wP5=T6-ivb&;5pq{8c z{Po$1lH+uR55Q}eL7uX6bQVG0?{xScOzKNvNAP*vozt3|uGFQxUR^FKag9c~^#^(L zS-BHsR(fL#i!Mc$``4IyzxBU5k|uH&=b7x>!Fn1B)}c7S59D` zRNH=(O*CVJ+~sZpy?5Ml^cF!btUWWqE(8Wm|F+;8OnSftuujs9`j)$cuh*Sm1GpHrT@gTEj!I3e>OAqEK4< z;~A=_Lg%De!@S+c00`6dHU+~qWo`xxK7ld)QrR=V82?Wig z;6k|-^g=nw_UlgLm_b`p=$M1A5M| zlhkMH1;4<{unfHRMesGP8Z7e&66YIpB0IHnvH2Ev=+8NLVl#9uG z?P>+x4DT08)gRk%cpQxJetq6qushh_CZJ5<58x+Q0L!5Y+@*p(reHsL?41NT-jhkp zcN|Tysn7|6e3cGLD#JLggn8hzT?BeF0E*2Krwf17=;wRzDU1gbPn`~{;BzohAB3h* zu0|6$t(@SxBw}8_ZrioF!O({*&jfOp%1Q(C+Kp=m-65UiwwF?K0(yW8r7m)Z=m{-~ zT-=0nouN1Q>RT6W$;FQ6v6MC=phGIiU3BAAz1SSJA - - diff --git a/html/inherit_graph_60.md5 b/html/inherit_graph_60.md5 deleted file mode 100644 index 0eea32671..000000000 --- a/html/inherit_graph_60.md5 +++ /dev/null @@ -1 +0,0 @@ -e79e060213de64d3b701b635ef262d40 \ No newline at end of file diff --git a/html/inherit_graph_60.png b/html/inherit_graph_60.png deleted file mode 100644 index a1d83c95cf0e144b7f783eff8b3757a3483b2255..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1713 zcmV;i22S~jP)Px*Ye_^wRCodHnS00-RTzg?O--#d$<)duCDXFV%9JDwEG_IRnRK@jOf9+>1wt3h zj6{PH0_%^=ydVWd7XzU`#0(3v(ljgYSy^_mEF-h$*>4Aq%k0j4-?!@*a(?jaoO9;P zIcI+J&O5Wag+f$xAUY5ohz>*tq65)^=s^fILLTvpXXpZ?$6UP_K6PUa9}unj3Q|jo9RF;g0C~P%!UqdAxs2y4U8+6@_qE9 z+q8ULo7L+mj(!Z5!V>T&fa4%hcn(Qht+%0Pjy(g;PMKspZ8xN}H@7MD+Ajo?nmb@q zj;}@V9l^wRfnTM2z{#M_gJH!|zK@=CyFOpnCiiN~k;~xH()L}pSHT)c)*YS$&2>@e znG;Ng{wXt!rfpP8dvlvYuLm)h9vpPlBKX2Zze45yu%T4;f_mZ8WX7x{*VnbuPTJdn znJlloAqK+5@HET?FYq?F2~^rSxb`;1z3CtB>yo~!kaZ3f4y)LlHD0x~RP#EV&_5rl z`F=S2rCF+V@cGZkl3+!BD6fXi;IG?vLZTBWtN`1+_*X-y=~TXl^(D+!Y6xtAXTalj z!9qxkJ(aTa`DjrOfZ0xU1T%DRD}lyPHt1A%4qnJv;2K@aO!y22Kwq%^4%i7l!Ey+1 zhDzr^wT%R`?o5fb!L3FWds#;R2|+8v7&j@vOif5xw&thIc^u z9%#Goe%>XX)IK-^)M9uGG|u;(b+8GPkHBx>BrE7v_!3%yk8;O-4$OR-V&AEte5A~P z?pDw!xUX1h2)<{H)Fq7oT1@~;0-kb^m+{J1-(qx>Xjr4KLq4`t|EqCDfJttHFrWPG=`!)ve-I)dJLeG+de788u^;o59(w8D$o=!0_{ z;9U~xQ!2;6U@%*F;S*V&P^x%WJptZ%W*)O%s9&l47&L67?6_I-k+=_*m9YP5FdxjM z-ld^Vq+(W0vGsEO*G`Fz(1HHeDY>~}EmLv!7i$ZyXBz*O&Jx;*0?Nm~a?#tv(6#tnyZ*+ytK7sc^yt}@XiARFu_246>6?} z2j3`G?BmS$hnvBR_d2YFuizdq8yRHdAd!LK9p>ZAAoaaOIgWDO6N{yWFBVr&_EDhB zfK#BW6*LsCEtU#}H`!hUmzU~pjs@rTky$RsbYEX+57Qv8vd$szI7z>zj+fY|7*E}@I=a8s!Ix*w#`Fn;uQA6prSEtS@>}d#V4%MQ zKDwjwJ5VwBlB|+{sFv@!nmaI54*cIUU!6`n4qGP&DrP?4 zA)=xKE#g27z80}PPO1Yj_+lKim;=?ma4c@IRmF)9B?l`0#FF-VmH#+&K9tTro=b~5 z;P0Yq!GE^=fj%la5FLmPL - - diff --git a/html/inherit_graph_61.md5 b/html/inherit_graph_61.md5 deleted file mode 100644 index 305186bcc..000000000 --- a/html/inherit_graph_61.md5 +++ /dev/null @@ -1 +0,0 @@ -b22be29c9a90ebb012b09857c85f173d \ No newline at end of file diff --git a/html/inherit_graph_61.png b/html/inherit_graph_61.png deleted file mode 100644 index 10e7366cc63e8db32f347cea7abb61065d2aa0b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1612 zcmV-S2DABzP)Px*21!IgRCodHm}zWPMHI&?7ARU!Cz5{Us( zK-3tNppdv=42C5}V<0LaDkhew_(5%I03jlqxKWlA2+F3QB8tEN>z(9qbG`4Dz8Bwn znSb)@oH;Y^cIM2P^Om9_FCPIP0UrS$0UrS$0UrS$0UrS(a7IKFuEsYd!tY&$5rIW) zW0l=XE87X|?zGhre(%cv2#jJ2y~5il4m(W$He-9UFd}duY8z3NAZniX6>tQ65)|;^ zCf%A(f~1iu;CVg?3ixo7ZY}PEVbW)mGx2Gd0fRxGJ{N*MSn4b2JCH<`Od1DIB$<4g zbMEAIRqzy?FweLJdr;u-NjuSuY2H@&1a=z#Fzn%`FS8NW!Kdm3nn|m#WOYH`H4`xY zf+fyj+DEa!fYmSw*1(sL6=k9ll(I4{v@LXnJ|HQmN{XcF#>BBnC!gj#1$8n!W?tU| zTL-Zpj)T4;Yd=b0CBRv5A8dk~!D%4I?Vvf1{@ArJ7o2J^7ox>}yaJNh;m)k3r8q8njy9 z9T3(K97@>Dpt(;%i`A;dPdN1fdP_LlxK#3HLpkWi%!A88dJ&Y(7sE&x3Qm16R0gkt z&M+4=U%@Sg-cSNcB$ac`b2n1YR8kxU=^Lm`SxtXV(oBE~cop>a&;aSAa=jD!nu&U= z(0;@K(7{cG*C1&X*u>l$L6+VXg0Nuhc65M!F<{& zFbuYWHm=+KBS=f2CS^6fKVOTjN^lXh2PKAG?@ao~p%HYL)i4Y8z;tl>2t!yMq9gR& z?RFrIy_xY7W=?PHl|f$@N{4e4UJrbkZj@L`G*v=X*bZRVL$~?LbR`I{pf2Rlt?UF> zg0g-!I9Xe_TnG9ytbjparCY8sr`;HOZc@F>L><-w(1Ddf5>+y3t(mC(oFCAQR(sM~ zRJELb#W=@xOslyXYmQXGl=$_q7v?~^w=t%~E89sBE>%~soL%r66oYQJlg6ATVN`(v ztWx_dSShIOjAJ0S%5@TrV$xkO9v%VRE+s`eUB`r8uqI~WpNzc%{mh&OY?bb?`r~K_ zJ7fCV@0m~ys$k;+ZlZ0GvYiAf{g;8>%e82IOLz~qzz^^+=oad*M}t#OjE$h%s$`iA zlAa@J-S?-grVoH4v0cemMVJWZ2IKnrH72mnqg@QTL0`c!r~$1_&#-bgyaMM~_yC@P zbjhX)WpDnQ^oPR;(E9Z`VisuM?}DV;-3Ch3`464M{~0LZHGdWC2gM@eQl{x2CY6Gv z`O3~2uo9$s@ILHMpm`*wz`47So&~0x3NjFEY+XjvBASn3DVKAtY)WQzXK`sT| z5@`TvJ(sG3X2X`0RaEpL?FMKa^j)(6V;^*eA)wbg6!1Ej4lW5XQ$IKG;l z<|aYx!x+>e`+_as?lo;ObZGYGxG`mT6{r$Ox+z^iNuXd!-JwIu%Kbmuj}o&-%u+kX zjJct%7`i~JD9zRXmITdRXuA0}3DV8=gku-}M}fRBKWfRBKWfRBKWfR8{kBJeNuvJhJiJm;+d0000< KMNUMnLSTY0y6@Bg diff --git a/html/inherit_graph_62.map b/html/inherit_graph_62.map deleted file mode 100644 index 5ccbd5a97..000000000 --- a/html/inherit_graph_62.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/inherit_graph_62.md5 b/html/inherit_graph_62.md5 deleted file mode 100644 index 8c770068b..000000000 --- a/html/inherit_graph_62.md5 +++ /dev/null @@ -1 +0,0 @@ -30cdc551a233a2dfba80fe079f0f0a2c \ No newline at end of file diff --git a/html/inherit_graph_62.png b/html/inherit_graph_62.png deleted file mode 100644 index 15dda24fb93eef7353ba4d4b63ec3b3a2119c2b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1710 zcmV;f22uHmP)Px*Xh}ptRCodHnR$qoMI6Uh%`3|*HOme(&qA}vBkfYtf~1nt&UBHN$Pk4eIk)_NRjLar}j9NrQd2XB|B$r)PFtgnPt)DI9@=*PazSV&4d33)-x<0sR|W z`M;^Mf8BIo0{%5*0Iz_DKsmuj%dC7KXXCaupX+{mnTR{#uILWOVQ+(5v$oNc&Sy3ZNW6IZ-bjpt$;ygR?U12=C+Qx zb>Z!+<0OgiIhRVY3Ad-cVeA;$AqY{^-=^dH*P#FIE#LXgqx!zg&vCc|?gmc*H5)#L zhpl8(DPg znQZnxdy7vK`lU*$?j)JSXy!#D>V$1j*TFWp34)Hnco%Hn2$w>v2dHd@RT;yx&VH0G zf+v>O{RGcKNVXHPeV(U=^3@P8!sFDJz>_c@PKQ$113}vJA%0!D7=z$NaL4USKC>`M z?xW4ka%y(5{hlPAOvdJUcnZFPj<6LD1N)DJm!K5X1lR%_U=0ibbu|12SA&Um4pd3? zt913hFZTV}ENZ?0dkXly#S>;G^a3>loMd;n2!=vX7YrAuFSLaRLH~N-_leHn4l&Vu zUFa81Fz;#7{0wS2EGVl3F6wc0M#4ZF!nzQ=YyN*67arm1m|cXIbKhkYhet$1yxdY zCrRO8KBB?hu?yV6Yrz0Dgkj)B-39v1g`n>-4Achb2ra?HF+qav#n=s-z{MU8>KnKd z461q^rk7d&d~C%O1M03VCKsct89AFT((c z*tHJu~|s3&-=kA?Q|BCG_1a|^hOO$K*t(D4}V1b4g1G!c~dQI30D znN|J;)m;^Ks=MAJ+b^1`Ka4K3%HP?uv8Ta@uoJEW$L2i>Wn%cud%)LbG1-4Y0WO|0 zN&Mch4&o$stYcsic^(V|Pof22@LlMqp#iAg;CN25f~LUA zGOMKIRZ4@|Fsp}R7RF|13nr91JjheV?-C*DuE$=Qb&jC)S%oam`dd-{0gq+%Pz=NH z8WSaGB8IP`AQMlY!?K1Ml+M){x^d>f9xw(!LMfF0a1;h9hf9rLAhgHh`OSdOf7U7N>S8ujML!;e{!|`Z5%A}Qq6$Ai#hw1D*CK96cAbd8 z4rb|(j`P7E50g>^QUp>2QUp>2QUp>2QUp>2YF7mQ0!@u3{;{rhH2?qr07*qoM6N<$ Eg1VbEzW@LL diff --git a/html/inherit_graph_7.map b/html/inherit_graph_7.map deleted file mode 100644 index 734223af9..000000000 --- a/html/inherit_graph_7.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/inherit_graph_7.md5 b/html/inherit_graph_7.md5 deleted file mode 100644 index 0f551561d..000000000 --- a/html/inherit_graph_7.md5 +++ /dev/null @@ -1 +0,0 @@ -04e400b3e65dbb0de46cd40f3efcc1f3 \ No newline at end of file diff --git a/html/inherit_graph_7.png b/html/inherit_graph_7.png deleted file mode 100644 index 6cd2b7d11170b96b011f17de1278ea583c044e79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1022 zcmV001Ni1^@s6!R*In00001b5ch_0Itp) z=>Px&xJg7oRA>e5mq}<8K@^4)m$+dZ>7%uXVN`OkV*aUO}(mqRbBP^ zRdr8Zo|B7!i-3!Oi$G3BAU|MLQ)$~A(B9dacCg^<_M*Gk70)iFTo%yYS(+3Rt$&1n z!QK1~R=v`)JCmuH{0LfbP-X@Bxi%u;f)ybRT(DfQB19m9YqA4A!Z2;FJ^0-S)1fz9 zfirLo($Q)<&xA5~2v^}C{Dclwrncc=X02}$Evya{q=`@qDZeb;C?7GNKTeefC% z!DHA8=U@PY(OsNohjC2BN8cEKB6d82zn*w6U%vy?o1v?(U0K-2*EWOt2dhmV#w}24 zwaFX?&tZ=$KEaX=LPUd8;MGaOF9e=|-Gk{h0#nyN#r9wCft?&uX zg0gY~d<9MNGssU_v<-r^iAMF;KalNk3@*Y)Q2%ux)r01yv8y1AvKp*u%s`8@x5ZHE zBP~o8DFZLSD9|=L3ffYVomukNn2U5FK;^XQ`f#X*UoameWyE(FuL{aoW@X~c8p4D$ z@o$=$r_+=T9!->$&=aa)H@t%Gpz~-B^aER_{>E;!Y_r|X_P)fm8t=O9eG3+N^^6t% z{hi9dkLaZBFbj0BOFFELUU)_cr5=vXF>MW_XBaV4@k(WbwoVCL2EXRgpojC+yP&tE zEwvA{8!};Q^6BaU1L$DZ0{j|FgECK2Hc88&*kd&1LU;nUl&R-ojooP371+uk`ALKR z74cs^tj2gPi-rzlGl{Ub*?^-C*Cn8>p)I!*>fsBRMb~1V03G<+N;}~uNK-)Bq`uN* z&>!0UV9vw-*n8nU=s`%;pnI38f>uB)j8O&YL1;~3mDK}YlTe0k0lkT|;1+0x^`OO? zV3lIu0cGMlxB=rpQjqS00%6{s$`EC)9^PBf_Em6AATZm4RY$3yh?lSyjCNt@fvqwP z?UY#$mbrfc#w5_2Fp(5k1xSAR0Zt~1>`Qvn4A4X$^C^)+_wZeE zAz0dm9U|>>r;rhF!3r5Dxw&9P2v)K)>r{ksa>+Ge0tJ1O6tZ&jM>dy&5Oyv40M@5X s4Yc>U5_U}I=OW-D;3D86@IOc3FSqfj?Ncaf;Q#;t07*qoM6N<$g6_ZEU;qFB diff --git a/html/inherit_graph_8.map b/html/inherit_graph_8.map deleted file mode 100644 index 3101bc7c2..000000000 --- a/html/inherit_graph_8.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/inherit_graph_8.md5 b/html/inherit_graph_8.md5 deleted file mode 100644 index 051580683..000000000 --- a/html/inherit_graph_8.md5 +++ /dev/null @@ -1 +0,0 @@ -ac68db0d06505322881dc13a9f8c4466 \ No newline at end of file diff --git a/html/inherit_graph_8.png b/html/inherit_graph_8.png deleted file mode 100644 index 8fc3962f310414467d0999276664f7fae588396b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2398 zcmZ{mYd8~%AICSF&9X~!oy#Z@iZimgv$@M{6@^?Tr$Z5I$k4Ej936C#T4 zE>So`=sN47;kayP?$;5ix&8fL{9m5u`+R@j=kxCO=J))*IV2x9#2)oM0002t;qH85 zH#>HHP!6&?v2R0bb^{oH!p#xD;c3nQ05CNVXQCesxKNT>=kKr8t31ObGf|<}Qiz0Z zH+EU>_iPrO-+W1${@OB+t4Xz4;-Ck%ENNdL87LHEMKlMDZLiiVPedZY< zZ>#C%^iOYA%Q@o=o)8$3>fd_9=jkn&>C)(% zaeVoLs&JKD21}%(hS~!)%S!>@s$Kwk0;mrs@h@IFxB5h)$k~fd9hw%{u7`!NY=m>0iy@X%RX>{8|9rG|8kA-lAs#>*5zZ!i%G>H|L`Ge$9L@86? z<-l#X?l9th?GD@tGboQtluy4Nn>i=)`n3^-5Gd^^Erfs6#lM-Ih+&m@45)^pwDit3 zrnW6<89X~A4StX^)SFW1+UlyfSxbQo%Mvka+C>E_ z)UlCpqa()5Fdh0WxhsZ^mbgbRjA<8Cj+TTwPEQ}B4yQ;K6n^Gj2R;b%;6!8YA!DCf zqeH=h@u7Cq>|KeTWKLL1^nW^%mbfAC7Ayu8b$t-Y?C#%7-9iWKxhpi1qvooT5wxff z&UrOkY7tWqx95 zoRwHDB1q5;M$;Go2jFC-;coz!`@al*LxHIBnm|YsBS8Ud^+f#OR-&fo4@@F@C%f+Dqll_EGT7$f=7DGlgyUrPp;TN^5}iN~@3Owp_j}I#&KMvSBV5iNML= z8FPc6U~xYmgamJ?U-?9!D>R3h?Q56i#K~2ZNE9j69LX7pJx=+`#_VDGlA3h%|Al#lW|TFvq-+r11*?!BsWoP--aF8;=_grFlwQy|ULYkMQN{Tt2@ z)*!w8H(6wL%R@^?+0{$(#7~vBXmzWJ!r*lL)0RA``1p(b=i=;xl3N-$^rGzVJNt)0 zLq-;tiP1F+ZoZ}YICVJRiR+D1@XfRk*^(~p8z1EKjIv=XdzY=C#L>3&&Yov^Fkx^o zYuzj38DY#Ot^^@Z#ARd`Lzyv|=g2w`Ey9GDyiaXf`m=pSrLdKL$Ltb3W}WAJ*<^%} z+_$iIGJK}KUG5Kb+Cb3Z?c=7f&dh75e*3pi_I>ScSkF2x?EHtDH#gF98PRMQJFvVr z8ic5ot$FxQvx_jByU4fkk~jnIzOAxu0n_J#_yjOA-rM(ILcFcNja=mB}M z-Y~pv|CbZ$_MXPsIarJrGD7S};<u1vbMq%H4%`I8^}Se(LU?^N5MDytCaKO!BI<9mec!0(2}(+(P=U{d7oNvDzhUE57u(-R(uV{2HN5Z#RgL~pKkM(KhwC7l{^Z1 z{vs$3;+u+tVX|E64xGg#7O?N7IZeT_mP{Y^*^l^ahg)wgd1z>T8LUxz{Jc^J4-a zi4v7yz+*FZTd$DMlNz#9I@*LiO&N?yn!YRF+pqPIFh}Z1`O5T~bPa&kc7{;otAX^2 zg_L4wa#PixKTN;hLrBcvz`~@Zgcy4n6nbhoUM`1*Nu+OBU_B<8+av`4b5PZ$X@Msv z+^`i;#M-b?c*4w48Bensg-Xn62BC6qaNlF-i6PhYBh{vn(%U3=npe@`|8c|6uN3=2zWSUJon7vz)DG5^#X@2K|2$1g=?Y*l3I zteP*NL#oO{U!OX9F`L*t*3M2bDqKuNJSv0Ueq-tY19|?W6q6bSzZPRR^VZHyaf)t` z`)XF{qIt#_0|Qmo#r+^(|p)dY@2&7z~a|Jr*K05g7XF6S95B2#a zNXrzaQcwNM;n4r-!c&R4`wBs_`^1Ggev1tlcaOSHvGgFCgz)``X@i&=I_$nS&Ok0Q zByQvBM|3wkl*0G}V<`o - - diff --git a/html/inherit_graph_9.md5 b/html/inherit_graph_9.md5 deleted file mode 100644 index 1dc314660..000000000 --- a/html/inherit_graph_9.md5 +++ /dev/null @@ -1 +0,0 @@ -eac16ffb70a34eeaf7fd8f3848013ac5 \ No newline at end of file diff --git a/html/inherit_graph_9.png b/html/inherit_graph_9.png deleted file mode 100644 index 80bc5779bec5cd35deb29b4abd974dfc2d8855c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1749 zcmV;`1}gc9P)Px*k4Z#9RCodHn0w6EQyj;;C#Bm+Q6x$iHKNNZ)}#qp4P6LbwAC~#4O`1!EX^h| zt+k1)6kVhlU2G~VnaNZvl2R%}x}oJ#dA**#XFL1$d!BxIeow0B``%v9`Fzef-}61^ zb3W(%e$TH$g-lrlvIt}m$RdzMAd5g2fh+=91Wr=~D&}}kXX?i0sL!g--3TmaY1886 zRf?U&ZbI2FM}1axZbslHmUTmVX;sn{k>5YEGxOYyz|vex%XMSq>X+4(vj}8~QO-6z z-{oeBk#D5RS-&hX%GrkJyWBz~Mjc)@8EU{SFanfcUI!Fe`Tc1@w+Z=mEl95i80C4W zmKv=xzUyfj)wjWZ1wMo+&>PN!pkWw3;~LWHPK9kf(+y{`Ux>u0#R5k|b!Z69L3M$y zMOJ=)8qsY~eqBr5t12T*f-!J=YBUqW^)yZD+fuHDnlKZ#g30kN*jJe-K4XHU^#m2R zbxb#$$$lXcBVOO@IFH2@iEYBT8M)+5Q=FV%{o)#__q5k8p}n}KJ81X|-UM%sk~EUW zl`s&zHN0hRgC5{b60{B@{V%?AzZt#=oubl%WU>_}Z>0EEDk)C>P+3x(ihD<~^@UCh ze=%JUy{#Gcde{yJ;SmUGjIjo+-wF3Xtcf_gVN-&qQgwpO@ErKuUT}j$;96t*zHqHS zj{O0|8j3SJ!6c~{H>PaIZ3=N>e}(UD==+0KV$^~7X6TFmG5iccCh{9_09@ZPXaMRG z_!FGpF6a(TU=cfvP2bAlp1`ok~uo7m%HnCjIMDj)Nu1vnIjX#14fS?c}S%e&_~4PhxCK z9LI88li&&%3(m>sJgM3tIG9CA@rgzrdXzq&NBv&LUKROnjN=>hpgI^sVLo{J|ADz+ zU$qeY&f;nP9^7E(cNk2>6)+x5<|EJtY9?GyX;S$P*X+A*1Z6_%oBTmfVSJr9izr`% zFqY*;FtPI0QaVmgcQ){4snw~$J-r631GtEIGqs04&j%CmyQD5I+*ogh841R$H!J`XY6=9c#HbEkpf$LD6Dg=EMkSaE zCPUCJ3=e||r^0s<6XI{!VPzuY)IYJCQJOqG5V&a1I3<+rX}bnIkv=1iZ$jJ;x#S7FH)?S6JgI9SKFM}D z0w&CWgt?TlLXr%m(hZd>;ZE=Xq_u|%Z%O+E#kS+kf-sh4510d`QduX)t<0`1c(o3O zhVV8R>~Fzqy*8Kt1~ce#3{TA;U;>Q+96C!opPJUVLwnkr0yGq<#-XoenE?VjFxMX#l6H$wSQe02TMRrhDERgeuBd=2!h-& z>-WJyFhJWtbp)T=1V6yT;3j$+4Y)VXV%QFcU^Y|+buBobHachmY=mmy349RJa+7_= z8^nIvy+GB0`EV4r!ESIolO@Omn3Oms?=D!H_!cW*eBw8!{1Og;iSik=1{KHhcuj>0 z?J+zguGyFv*L9#gG&8`t8H-4ECB_LeDP={R7^NKQta$uAX89ucG2-pv7x7%T9@YOzITORoJ=^pf6aMsUn{+AW zJBDZL!YY^wFTqSGQ-y1~OkYyq!8b5o&jOEmCJ(on$qhc;6FeJljME*Xa{0b2G0Nq( zpM23-Vw^li<+4Xf-!c5rC)2qf0e>#onOSp>2O rWD&?BkVPPiKo)^40$Bu3e+2#o0lp%u>&71400000NkvXXu0mjf6j3t? diff --git a/html/inherits.html b/html/inherits.html deleted file mode 100644 index 92ab60b53..000000000 --- a/html/inherits.html +++ /dev/null @@ -1,472 +0,0 @@ - - - - - - - -libdap: Class Hierarchy - - - - - - - - - - - -

    -
    - -
    -
    -
    - -
    -
    -
    -
    Class Hierarchy
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - -
    - - - - -
    - - - - -
    - - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - - -
    - - - -
    - - - -
    - - - -
    - - - - - - - -
    - - - - - - - - - - - - - -
    - - - -
    - - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - - -
    - - - -
    - - - - - - - - - - - - -
    - - - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - - - - - - -
    - - - -
    - - - - - -
    - - - -
    - - - -
    - - - -
    - - - -
    -
    -
    - - - - diff --git a/html/jquery.js b/html/jquery.js deleted file mode 100644 index f5343eda9..000000000 --- a/html/jquery.js +++ /dev/null @@ -1,87 +0,0 @@ -/*! - * jQuery JavaScript Library v1.7.1 - * http://jquery.com/ - * - * Copyright 2011, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Mon Nov 21 21:11:03 2011 -0500 - */ -(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
    a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
    ";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
    t
    ";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
    ";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); -/*! - * Sizzle CSS Selector Engine - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

    ";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
    ";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
    ","
    "]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
    ").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*! - * jQuery UI 1.8.18 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI - */ -(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*! - * jQuery UI Widget 1.8.18 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Widget - */ -(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*! - * jQuery UI Mouse 1.8.18 - * - * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Mouse - * - * Depends: - * jquery.ui.widget.js - */ -(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('
    ').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g
    ');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(hl.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*! - * jQuery hashchange event - v1.3 - 7/21/2010 - * http://benalman.com/projects/jquery-hashchange-plugin/ - * - * Copyright (c) 2010 "Cowboy" Ben Alman - * Dual licensed under the MIT and GPL licenses. - * http://benalman.com/about/license/ - */ -(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('

    w6D;6x%;{AKM3>z;>+1!R>Gd*!LyyF@(PVg*^+Vz&cn6dE}$g9nGY2 z$D9E6U%d+UaS}8FuXsadV&-Y=C*N6gI&#;4Yw!2m5oh1!Uk&V09)~7cj^s z&=?34j=7yopw*G*aqL&3a%_G@VKTVet^~(tLisp93WB;~*oQlUgJb)GuVLhKT=x~q zO*qblE#P(EgjNuA5{B_`OvcB!OoX6D7{+rgG=q4qOzI(!SGM&!xm3}FD(|9BRA(sO zjy=!dnE(#3Sgx`o!BwtYT?c{*6$aA=y9LxlnE+0*kG*2G#PK_Ltf&s+gs}T&o!c6x zkGc@I;x_vgJ1SA$r3qDu{+4-4oKR&ptf7@B(y!_8bPerao^F+zQ0@Y?O};BEs%@Q) z`g=dNkN?q;ug;jIZHqN|fQ#u|pPJmka{6{wIrX)=x;E}mwL0K+z4Ixd>iP^<^Y~Ii zRdc}W`t8bkhnij22cO1Q=?Jtd?ac5oFs}E@b@SMf>=c2b2>3DjQ+Tn+pNc60DFP`1 qDFP`1DFP`1DFP`1DFVAX0{;LkwlJb{pig)J0000 - - diff --git a/html/inherit_graph_24.md5 b/html/inherit_graph_24.md5 deleted file mode 100644 index b4a5b8bda..000000000 --- a/html/inherit_graph_24.md5 +++ /dev/null @@ -1 +0,0 @@ -8bb3838b4ad4243e0597584a10bfd7e9 \ No newline at end of file diff --git a/html/inherit_graph_24.png b/html/inherit_graph_24.png deleted file mode 100644 index 8df0e977dba887279f37afbfcfc6da988eb0a7b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1758 zcmV<41|j*0P)Px*m`OxIRCodHnSHF5V;skiLT~hH(c6kt646L0Wz$S7M2iwD+G;B;rC6gsyoJV= zmw(J3Y{t}*N@|9g4T~%*DIrd3EmV4;B;oUUy05u<&hvDhbL#AC9 zD!3$7l;VLDIHh26gU-Jk}68^z{#a_s-#ad+8=@$&>uR(3vdhgb$>3DqONor z4G)ykxte{taNoq}-oLQd!MpHdR3DqoDGY));!5mRFa<7w#;^uv!$vsabu2Q@X?STe zG=Q_f%~AcpKq^&j=s2p>&eiPaPYur1fHr8{@NwX#`wgOyUZhfD^`P(t41~q70M3W6 zpeOtvi`gOb=lkw}jCo|R@3eRR02Gl8WV`MkV>?^sJNA;QpcFVlFxOggs zrg23j_EoeyR|6*26BKqqi?|YdENp=tdG#MsUIh6E&-(ZB`g))`7U&zg`5Q^T??Rhb z*KeTb%erE|ab6yhSOX}y#;U03*YQGw98KU%Wx)B_pa#woSOxoGA54Ov_86bQ0oV-B zK{*6Hj`2&zdafZO^uhiXo`Rpj%<(#e0QBT296K)vyKmT zu{x+HsCn=<=tMs!d=2HGeBGH=&$fW>f^Wc6rUM=Kc`)Pn>!y8Yf@%X#!kHG(HK6lU zvB0s-V0%UbIqpih5xi#y1P#M*9mO(e=rK@WZ>oGZl2S_l3YY13PFMhNrYL9Vu{@a`V&K0A63n?EJtn0~r97eX&?h z9|Jg+!EaUzfzvT+T!8&(RyJ^4Q_x6^^;uyd*O$S73#`Q+3m%Zr4>KnN%YZtjfm83$ z*fsXo^c!n61vk7mxafGZW7`b%2y6pST0e;8$+0bHGe#Upp}s0tUu`SkG8hLR!1ZuB z7_i!&YB#1aSf4M)@Bo+zIzhZ9in**7GLU6oUqSmY%ydEdZ4I&pvxnKs3>`QfTc34; zbr8#d+!R+F3%jNRr+wZedu5CGjjJcNOVn;#&}5A6VAkmgvmlm^Y7|xU!S=OKT@B<$ zv%qKI=6wufU?SWAZi=?q&&}Ec*FnDSp~8(dI~v&ML9B}?#GB}Aq?jC|kPN6-z$_9N zg#8-$%yS`@^UmLgxV>6-O$Uze*bBiEI2t@{Z-S}yJD37Z!2r1xf;wV+3E`FChA78T z&U<{$I`kpf6ZlS6HuLDLmRY$k*O8eWE^*EJYi1!4{(!$+)(R(h21a<%0c7Vzbw2b5 zGuBer2z%jGs1NF5a6UaOpvPcs&ie1evF)NW4V3#K1SRHS^0UE?!)gxook^X~-Vd(r zCm04nW<`B*5Y~X}4DFqOJKHg{o7#-1Wm$l zUHWz%gdj3t^yf}+Zl!1lot&rlR;sE7PGtkSA>AN;wS;?goEu$eA!Zd%kB(BFmeye4 zxOmk8TI8(S`J+R7f|;vW;B}4CPzRvmsci`)Grw^>|~>^kcKzrp(BsXx3P z>E9!D)R07*qoM6N<$f=j - - diff --git a/html/inherit_graph_25.md5 b/html/inherit_graph_25.md5 deleted file mode 100644 index 0efa01b8f..000000000 --- a/html/inherit_graph_25.md5 +++ /dev/null @@ -1 +0,0 @@ -65cc484667b56881efcefcc76c8859ac \ No newline at end of file diff --git a/html/inherit_graph_25.png b/html/inherit_graph_25.png deleted file mode 100644 index c2b53a9430454f3cf52708e5ba6e5203985a51b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2516 zcmV;_2`l!AP)Px;j!8s8RCodHnG3L0RUL;94*|j8f+jV zd>VccSCZcs&V!FacX$-8f(@{z>SzWQ)~7jR97N;URcBm$`tWgyH z0!P9!_$9az*1%|JPx*{bweSJ)`ZU!={G9!0tZ#jwM~=NIw?<>Rd2(wy$nKp>+L~Z) zgCXqfVhY*+?kqN$8<@5C#E#{JuE{D~yuIR!Q9dk!CsH}8H*1i)aMjd>3q7k{ET}(< zI_GBa#JZBgR_Gm9l0O4B!t=TM`zbGl{2^rhJ-N0XE`tl&hGw0}?vp;p?OAUdCp7iXQ%BfSG2hHdZ~%!DAnBCLY#@HG4Y$`Et~ znJpP>NyD4sF!Jl*yRaF2qud6;DBlPhU^u9+!M&ASsZ=e9hH>3Za(33vWCWDq6o`Y! zw~%e!Sb6!T`&?FOa5zTi?KovJD8Ev@2R)Av^ z=h_F0+V znT^9B(s=(i^7NSjZkExYT>RzWhVt(U7rqS2uY^y)Pz&gE_y>5hOaS}67P`Oyu~<5P8|a(`aSC55ecb4ee$KI+2X?$iE@N^^l%L#&P);R`%sa8wSqV zIou9C;A7xop9*Rj?CHG#45-fVYp^dB2hpXJmsM&T zKYEck#xVCRfh_=C!Asw88Q^XmA0~lB?K+reIxPdmp4Si|Kv zvnGzqjT}z3th$nP<V5yA>Q?Q0!Z%Yf5WD+R9wJx#`bTO&8mYWO&u3HQMX@Ch*J&G&`1&>gJL%RVlK4lo4b zIZ>>(Am%}*lz*6fQlfuuY-ll~&RjG6>7Qq+6AXxzR-vNFEKZS|loIMmq zKwh?Y?m@#shO{|z)B7W$d(Do4Cv$aeQta3!y;SdH5|=&%8aWL-g?|MG&OhNi=m`eP zNf0!cjGNT}GT7Xl%6^pNKC6;z{QBYPdskNWjpT;!laS?Wndt# zgkvIRlQ(Fr`y)7}3*c<{0_+8D_UUj2%mZ}?oD2tBK;GX2mRhJGH`4v!!SDv$0|swc ztL^0VtVsIy0<6t0P9}AZ!MCisuB7NWL%H*y96mGXCNc(*>#-oK>_*xbJfIAq1Hl6# z%!lm%wT_&deK_cA_#1|7^bBo8joc8X!6TA_*7mkD5EW90Zf-Ype8c0LiH^3aY z6O@~22|NXx;B}Y^L2hpAHReT_3uRD#rSd*E!$xq!y1^I21b7*K0~_E~xEVTuauFQQ zC=2M@@K`0c^M?hmi<{J-xe%&tG*7hWA(m|~0iV4MoZGW-A_V!i)QcVPC^*k>-Hqt; zyF!q2xGF2mCiOlKl7GRi5XN^kd7rD7v%oi0kO$5R*bLrx3(N;Sbe-b$G4J6KYdeK; zSw;MuvD7)6_1^w54hthd4qU>_=eW@Al#pX+JnT$)sKgQ%$vHFgB}H6<@M(HL;U<>g6r2!x4u zA-_LN0L@YdK<`TKo%!&T9SyZk`@vjyj&Z7WG=xgq1Pve) zf-uz8lQ#97din@$dXX6#3Z%Xrisoh$*VXkd(hw@E&CT`jZ69Pi4~2b0MJv;HEQne; z?%i&WgJ`#lsUkVhjt&$CQPKC(b{s>Sbo~;&tZtK@QYXoQHgMqG7(|aSZ@>R0B?tBh z2i}cAv_}}129X>H4x}IoPNXzB&_V}N5Vg>_bX#&DI8f_n((rqGXq(dHzR|7pCN z!apeE3q2|Ln|@MqAUUwB1M4XIkL1U9txl!nKyn~CkQ_)3BnOfM$${iRav(X797ql% e2a*FVbl`v9|L&_njYMMr0000 - - diff --git a/html/inherit_graph_26.md5 b/html/inherit_graph_26.md5 deleted file mode 100644 index fd37e230f..000000000 --- a/html/inherit_graph_26.md5 +++ /dev/null @@ -1 +0,0 @@ -a8ef3832690c86c2683a320a6e389f20 \ No newline at end of file diff --git a/html/inherit_graph_26.png b/html/inherit_graph_26.png deleted file mode 100644 index 14e8a903bd5f31a80f3e069b97e2a7bdd4094edd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1850 zcmV-A2gUe_P)Px*^hrcPRCodHnP-euMHq$`L=X`KL}e9%LPRmq*bs!Ei6~&~1rbX`P3&Ei7$vd9 zfX0FfCYB$@D3(}auS5-s1q;{^8%vR*h@hf?Sf1x{1}DeMa_`=~5Om(;+4IeunK^Ub z`DV_t)YK#;2a*HHf#g7PAUTj6NDd?ik^{+s%z-9Foajy6#YO5_AGkiY-h7lG+`u+F(C?h6?@Hon@G{Jb>f^92h5qnZRCyh7tEfDOcv42FK7b&25$e|0wF3{n z5=KDLU*6Zn#2Vvd+l+}`04<;+xS*;Jn0%$GmWC&k+PH!3{Iia8brYCqo5Jbv2^<2& zbT^d}>kJAzfn)py`@#gc4T7h!7gVoTxi))3nA>`tO#E>F#-@R#YFirG-V-3!7z&!N zG=Aek^zR=nv#R~L*5z(%PWxP4Tx?FEOTZC~;YWBAj)3{_ zJ=kwc2=Y^JyV>wH^as@q^y^%(-w*Hxgbn9r`T#zKrEn#v?O`!&W&s@xdh5L0WVeFJ ztE{u1zRv@n(-*3u!HnweFIDl$b~&A%&pM9b>Nx)Hwh3sUJAYSDkHE8_fgbTLL>(wU z#ovG?sZ-$#Xac^ttSmPXdqlth-zwF4EyF!HgB7tnywtzMLQhq zvj}1>q%bV5$YM9Z+$@g0a4a{-Zs0q)h>o#4w1ql28`K~$q56aGdlW1O-$$>U|HIG< z_5u?&oFbEnT|ecsOgJ}n=x4IIUcbU2pn`wruPPSadj@e2Xb(@rlTePFZ1ASPfl2)c@31-Q6(Krn9}@d#J| z>P5Jz5Y_+VQ*N)!nm8{Pu3VEH!wpqT_fRJU@5!@lVB%MKHEh$(WXK>2+2=a&~g0Kn`c%P3-=!+J~AtN83)tAO*S6F_=F8t zwUf;wKGsJRIzUfwXTAeLal8qY*TO<@QTjlvB^10DG>5=(D^Yhkn_zpx>F_EX3j2VY z!#JFlghds`D0b6L5cE5NCtZ-I)kayND_2icPx?S>Vm%4^E(BbEgXUTJ6s~T-NiZKq z!=DgqI|{Ma-m8OJgG~AHTZ9{xT;r3Xl5y75w^Q!M?vy9MFW|G?&7XntUeE;uJ-{R1 z9lQq|4MCdU5;R)%0zah<)xLD}Q}ZtPS@EP92C5yn(C5JSumFn51vwr(6^hA(Dn%~z zYY;wb_A!Zlwx2bXPax~`!-O3SCZC`G2jC@$6WdMN4`O)|&Wb8Zoom!(?P0Y~wt-Ax z7w~tFlc6I#0Vdd2a1pctlWGVAbs_i|Of-}7LQsyQoc9@pXw^b^68O1Mo^U2cSeV|# zLm`&WldfEp>0EfY^P>JrKv%Wbu-_Im)j(Sm_mT}Yfm;`RrFX2OY9%A`>-UxUcz5;!H z0q%o!E{|b%Nn@!A1MLVN^Le$PVmD}=zd_lJ&;y!f_nLEcclU+GSzTwYo-qGKxmkKb zF>mU7-;Uhu4V%{2hDbuGR?0KWX%i<~IsH=Gb>~3QWUKaP zv>LDH?@yDfF>o5Qx(;lJ$@USJ_)Bxr2Ijzqm~0!E#c8_1fs|~)iFB>H11Z_6ZgF}* za3K6yA(Z3mBXJ?c$$>H)D4JLP_eNfAsMtJTnaat5G92)a^!_*5tTOtfrpbZiKyn~C okQ_)3BnOfM$${j+|H*;B0WN?_%dZI{=>Px#07*qoM6N<$g5TI|)&Kwi diff --git a/html/inherit_graph_27.map b/html/inherit_graph_27.map deleted file mode 100644 index 328ba015b..000000000 --- a/html/inherit_graph_27.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/inherit_graph_27.md5 b/html/inherit_graph_27.md5 deleted file mode 100644 index 81077a3bb..000000000 --- a/html/inherit_graph_27.md5 +++ /dev/null @@ -1 +0,0 @@ -1bf92388cb734f11727317adf6164421 \ No newline at end of file diff --git a/html/inherit_graph_27.png b/html/inherit_graph_27.png deleted file mode 100644 index fe66c18267a1220a3ed6a6d56ce85cdd716cdd8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1946 zcmV;L2W9w)P)Px+R7pfZRCodHnR(EaQyj-jo28YcQiB>PGYmsSmKmW?wvjESFxKp%u}&DmSYl#q ze;5ohma#K5#vqZUY+0gLMJSX#vV1Qhy6ps5b@qyuxSRV5wS@UKc5rZ&leDjnFD_U2Z*{B^~4#C)4nP7c)F zfs}}Kw>aIP5(iQuR^n1>Q+EeaBG%pFbc0G9XkAI8M%r}Z{KarC42HgN3mgpoJTwI= zQ9l}uhVv_Fyozl$<+`!awf=-K8=i%EQGFbCrZ5B^j4Cf9UMDIqAfA>Hs&^*{UWB^l zI(Fs87r=N})?9-qci&psd~_GRHcnqv7J9nIaU{lNw_u~ z2k*jgD5l$}lvu}8=nwYcUxB;8RJZ|xr?D4QH>;eRZ6J)TSqD?;&8z+SWk0}>p-Wszd<=X6 z-{$HUQy!D68%X&NI3!n}FLuaPlzKiFOQ~~q(F*dOTd%r7DZdL1_^|(tAow5ZVt zU0%+Mb6TzbwV!X!WMmISqw7OF3qFJI;S>n!Md0hqdS7h^L9B@szJd=k!j82)<&WWN z@H&&^J_v?xPVD{qfjS%9t;*?EPMXk%MU6Hiz7WPmb>+etoSX?KW{qMmUZw6T_yE3x zmtlYS5*C5itq(zdeX!kp_ymT4>I?dHGI-rL@Dez7V9|vG}qULlhgoeQ}`4#P#p~)K}*mS`<)E#i2hn{Ta!lhfGc4G3uq{uRftwh zl-K5WL{FQ%PKdH!Cv-n>a=(RGiz$qWE3(+d@kJKLUf7q5XDjfToM8Ld8ahJ*oCInZ zm~2D9=RFXXfzP8?j(-ZQ1KWbhd<3W&;QT4?Wis}HaGi~ z1i1=#hWX&cIawxWYY3V^@EbVsH$gCVA+ZL11?m~NrVy3?c#qS|vnGzqNevT_RX2LD z4;Nc8-A?69aFT6j-*3SZa58;9bpkvD)4>Jf`1L3}A7P7g;3s$;ra^yD-rJ-!31>kU z2n&O-phNl8o5xoa3+L}8J|HW5xDjT9Np}x~{#_U@fMcO6Tm>%FCad0w=xZa^+Z23& zf#3tZ3PEwaCY6`MVsOHCgjh={crIuGf&Df`{kYiV+YXL{=V1iw0By3^U8$TxAH~|Z zK!ScJaEAFVHqCAH~tdISsyqE8tIvwK0X*YtJ=6 z4}(nk{@Z2sb2yHMgW+>uTeDZ9)42<~oS7a%OWraY?CU;y|U*%B^? zSWe7ZQN{MezMfZAyKrG&cnzG?mthQy1z#s7fw8-DDLGk(!}JmjOtwm765Iv7BZd&) z13~%ZvR*%0!AS58V#3HUh~)zAA6F2&gU*ZUN{!WIb#rmCx+tf>%@EH8#p+e>L>$VH zwg9(uP3aB~!~5XsIs-a_33mttZA9=6`1&znPX}c`%5fiGh*tbj;tt{~Ot~|fG=9HP zgW#}2wDQCINgo&mkHRHjGHbMx7Z^wULsp*7F{lfHeYn`%v0sEmFd3R6$Fe{4%R1SE z<1FZwl}jB=o)^GH>8|)3IG+3*KS7;yG6Ix7?F08&Xhhp^-tl>jeLo5L{;8^7HR+_x zZKrb1!7hYb;23aAUk*otW_$*-AtVxEi%GB-d{M1h1V5ufTPnObnBu zhXv$4E-XYVKRzN{0KWQ8go!W#s?oJHwvYL62fPXHoW)k-btXfr6b zeYc~2E9d}uxkv^;>+D2Zj@@7|EXnG6b984~9pyqA2*tc9_q^RXISAG+*NAhS!T#54 zq+R~B^VuJqH{)vLLN&LX_eNFgL~QhiRW^tdvC2zR^JaFSWFpr4)m)F~_WPQzg{0NU zf&XJ7zK#EWflpeE9QZ#b;%a1ndX(TmO2ptqIyS2VDG{61{&e%;K=^4Sl;fkn5hW!D zYUx1FQl0rPp}aa$(J5b<%E^HmIN&cH@52L7?BA3%xJBwBIglJk4kQPX1IdBpKyn~C gkQ_)3)X;&y0XErPf6-(flK=n!07*qoM6N<$g5p@3&j0`b diff --git a/html/inherit_graph_28.map b/html/inherit_graph_28.map deleted file mode 100644 index 20375532e..000000000 --- a/html/inherit_graph_28.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/inherit_graph_28.md5 b/html/inherit_graph_28.md5 deleted file mode 100644 index 3ffae2fab..000000000 --- a/html/inherit_graph_28.md5 +++ /dev/null @@ -1 +0,0 @@ -8e873c130735b4bed6ac2fbd74031f49 \ No newline at end of file diff --git a/html/inherit_graph_28.png b/html/inherit_graph_28.png deleted file mode 100644 index 07089403ebc78cdf7baa627bc0a5fa0df240acbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1644 zcmV-y29x=TP)Px*CP_p=RCodHnG1+kMHq&?n`xS6l9`s8nnHFXlO!XEC`CSva%ZqAwn0sN;k92G*dIp3bQndit2gRe{edS-95Yeud(dB@cieS@64Gq z^UXJN&Yo@3Bq>E8MIc2WMIc2WMIc2WMIc2WMc{vpK+~MN55{+Gjz76l1mXz%PT}I% zq1`O&pxhnC=lGK=MIc0=C&t;KP~FjF`lq@|>3pM(z%)j`J1+uxJ5*l1rAkF3(4uI?D(ZFM+|6(U41wOT2+jvTOFRul)R#(A z;Km}AYgwlc*UgNs{R?|7EQc+TKQ<4ha3(w#Id8)59F=2pE`?pOqaN+rj3=)`?8v*(_)chk=7sr-BJqR9&e!sc7X|*7K8yeKpZdrUPLHtbs9*r-yM$ ztf>@Eg0?x>_Wn|B#*^*aAvjimiL@tsvK-}_em3aFP5sQ^N{)3mg?md56Rl-@GP2v0 z?9(}Jiu{@;e5Z^rF1Di3K6X@N597RjHIZW7M&W1Z7(212gMr?e@o%7PA{LPg&c#+6 zd2O7a#yH*tYC0bK;Ub7Nkb*IZ+l|lX+0$_Dm(K=%VShI2K`-o2U^DyzS3%Gb7;l6A zt#BU1T0mh3tSb?AkW(nHhdaRQob0C{B<28Y@7EX9b>IrDN)K_;#GDva>W4iCW=FoF zruTdXjK%k0@aI9$M;I4|0!Jt4^-|euUxB6YBRIwh@ETb5aXJ#JQg%F!?MZOa7}Hmw z3;25S1}OV!xlXD{Ru;KYb_I;)qFccCEGNcYYapn*;3qf+#=&q1^08?U2f?9mJ6OLd z_}+Ik8~`R|53pXCc-u6=44zsI%POqOe>QSz3z$Tz6*vL2;5*2ZV>97m#+NGEM;FM; z&<;$J8zCgU?Kg)YZGFmXN5Ko=q^|_WvlI@3C*XRhO4;!&q_VFR{hcl=U8mpdT&xwF+LeP>GxX`xavY1ig>(DEtlfPxak^5YDwtI6LdO0+7zQ1ntcoY7tPPhMb9KdXw{Rj(hPLn? z1ZiJdDj06@uX8kUTAd`F(gk<-9#~rOYh4CCk#b#ha+J~TTF9P;kZV z0q@-hJ_qHwpjjCGp&R@PC&IZ9bPz@xaK)-qU}J?!MXyZ7s;0mnB>wh24{T&%~Id}TS9x%H_LG;W8R z!W8hYz30Is+5p!;doXb(K+usGpMuF`;$02Oc9i|Tyu#YM{g1=;QJ~zZocvA}&|sKY zVeR|ze&R$EKrD_I(kIh0U-QLPB6xyu6R%xDK{} z6ZthP24$k11z!6xyaNkCxhvieT`eH*F{i@X_v0gUD|`W0!UC8JHPL)3yC|~wh^$Wc zP{E|#2Ft-kRu@$_o=a%_IB?9y{|uN6`$glqOF1*wU8NuRh{~!pj^n|Vlale%ac7rSd0Qn?eV&`oPlDNd*wT$ZYq zF#?q)lv&%*2 qQUp>2QUp>2QUp>2QUuBsfqwxn^cy`1y<7wU0000 - - diff --git a/html/inherit_graph_29.md5 b/html/inherit_graph_29.md5 deleted file mode 100644 index f60e9bdb7..000000000 --- a/html/inherit_graph_29.md5 +++ /dev/null @@ -1 +0,0 @@ -0d61ce7d2d1eb53e7f148971aa13a51a \ No newline at end of file diff --git a/html/inherit_graph_29.png b/html/inherit_graph_29.png deleted file mode 100644 index 27dee5265bb7a10b84103f5e61993f71541c9d0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1760 zcmV<61|Ru}P)Px*nn^@KRCodHnG0+cMHGfd++vcX>w)$ zD1FOOU!*;Z=IPdcr zh?N0fXtC1gFOHf4UuaP?<>O*yz!zGq^!baUW+2rc15xi$K;RuP7luG@SPc4OLO-88 z4^dQ1&{UWgB{;*FBCeZhU3(OJE3Ae(%Ws>f(YOp=vYhj=J6mnrtfXZ=xjimVOHfUjU2 zgy~6~!d5wri=k}@x_5IalkvEHI~~UwP=OtEPoBuOenb1G5fA7d#B1f-dVt15fkOq@ z%06k?tpoc~jU@Q$9{06sxQ4fq7kiQ=4ot!J!`AbPL7D?v zv8nU~CsnYMte`&F3t+b8i)!kbFMx9KBm53kV6+M28q?r74b}#2UHb;CfS*BQoCxoM z+IlUIhE#ILqp>{;T1?96TcASH*PQo3Qa{x$g^jQU4#9kgt=!mm`0owe6*HF8cY?mh zX~MM2^#|#G_yx{`2`~bTiZGPiL2w4#1B%Z9eXl$hP6ZWfFHoE*2;EbKr=&`oVP(Qf z{;`Wwb)e#s@<0<)0Y5;PG&U8YO<54AK5F5-4((tL%mcF+bpKPpNVa^Et{nrffQn%q zXgn*RJuHRWA(hxnyuB$emK%HE4$&G%@O%jS9o)6O5qXRBYO{l>3LF6biuAUpS_~0MOg0BPhqQWKUeI8zs3|tI?Kr7fsMWXbT^M zk?iY(hLW=oE(h&2+rgH0E4@aH>M?ZRIMU>4atFZ-xB#e#Yn|p3uY1M`;>OTbTZ>Po4{O9p{fr?doZ+sT}{JL1vQ{o{!*9) zv2>yft%uXQ3u$YG9t1tR2)+hM=Zq>a`a*X&1Q)>-VALL?HE4xPgJD;~%Isqpm-Pk} z(wVRx%0beKR^iVC?X;%QFjGnekxZI!yI2aHz*N^dp`lHCJO_e^t2urU*edLPPzUD+ zJ{^=(^{WgNQwl1yx8Y65Sh*Qr8STPRglQl-FctLI=gXkt+6lKo2T(yx1f#Psz62GS z3i4KvbRS9mzA<4PdyP!M)+`hAgKUHg0B4> zK7>UeX%~G2x~YNmj0Fkn_{Vn4diVxzhH9vU#%LkIS}ZPl)uz*f1gLQL!fMdsi=%Yo zxsID(02;IMKOCljtHU^yiyF{E-vOIo6*RfDZMu~n=OH;<+y}HRyUNEg0JPFvX%X~= zmcfZUj@m_rfO#GC#MY}V8`X+V_iDzDE1!B@Y9VM&QmHE^OQ21vpd{y1l-e!Rs;LVt z?E@PbU>8~=FZJQgkb%%bQ>px&Ita_e@-V0O`3$7VfPSuOaAWlE23Pu}zQA?*w$DJs4Ac>~ z9zKm2@56isd - - - diff --git a/html/inherit_graph_3.md5 b/html/inherit_graph_3.md5 deleted file mode 100644 index 65b76c113..000000000 --- a/html/inherit_graph_3.md5 +++ /dev/null @@ -1 +0,0 @@ -d0a63f2e18bebafd78031a3ca3592efe \ No newline at end of file diff --git a/html/inherit_graph_3.png b/html/inherit_graph_3.png deleted file mode 100644 index ae50a9e0f46c117136d5fc26f14a73e71ee13bdf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3688 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 HUd;ai)#LtP diff --git a/html/inherit_graph_30.map b/html/inherit_graph_30.map deleted file mode 100644 index 6eb28d3bc..000000000 --- a/html/inherit_graph_30.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/inherit_graph_30.md5 b/html/inherit_graph_30.md5 deleted file mode 100644 index b8f18216d..000000000 --- a/html/inherit_graph_30.md5 +++ /dev/null @@ -1 +0,0 @@ -c85e9cc20c2638aaa3c0b1233b996301 \ No newline at end of file diff --git a/html/inherit_graph_30.png b/html/inherit_graph_30.png deleted file mode 100644 index 38e8162faf26e7924e710276b461ae88d3d492ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1966 zcmV;f2T}NmP)Px+Xh}ptRCodHntQNSQyj;yP$88Ng`uLvXowWaqlWs!d!)gb@_sZ#n5IEVqc9i@ z#^Vnok13Pq3^4|o!Q?qYDAMhr5Xm#4_)1x?r$$?5b@M)>eO6`oL+NHYWK!ZDw zlCi-pPB+NwKuX5EPNjAY?m$Y$2DdofAg=?p{ea2aM>`r$fU(dYy1@hB4ysdmZfC1^)?L z0yCi{Wba2+)0Tf@{I`rp*sa*!9VFJB6kM^&B;C3YZT#T`s-vLVAd;qch|1Z}322+G ztff4Vb3U6%80%&V?lL>XmBi=4Qdp6x|BA9nU6-=nEaQT~nTuQ)wLPP|tLzDX!f=SS z7X^1g6E%B3stVeXPw!K%^xwHFrMkvl>Y7mJ;-3%-;pojOsnK*cJ?gM4@oZQKzrbY> zv^&AuVEqy}4Ps5E@Ey!85_T?kq%Yw%@H!J^DukrokJ$Tl2Xzg+T8K9N@gS#6>NBDy zJ&3P|tE0L+VHX;$1b3-eA5qu^o`n&h{L1hXEQa~u*8$ZTR>L{)4IB;U!XlUgv8pK? z4YMFC6aNd)L%qBMg8V8GfA#SBy{8GS#=!#cTE}n%1Z`^E;e5r8o3k^HWfU`tBXMVR z7xKHKE87QH1HC}`PeCt0H}JKlY1N>7)qf36ta2je!4}XT?DrmUXLRChYvQO*a0@u` z$_cru5LHzTL$!(`0vRLiJyJZcEI z5KTaz>r^lq9Cx_xO=8>Y-&BZ`hvG&G*EtUL0Sp8C*C+4S8`OAsz7W-XwBz8o-6VVl zpV>O!Xk*|lP_>P_rbXSKjj}UlhoKoJov)XBp&B&T2RsfY!+fyaV-U2QU;r$JE}*$4 z=vEMP1HoUg6z+qtb1oy+Ja+>1GTdH>YX6wS>3@n%9M^mBT(Mm0;Onbr2A?ahE~eqr zFbiB9j#Dqfa}XAO6k4x;tzZ@8RSO!P3HrY?bO)1tU#Lqa?{;tj>;$)hi&EtocTLMO zKjXfdrr^W%0U!1q2r@puSZK|0BAg0~U>?N!nZgfI#S&us-5fbtQ{Ygz z5S)k;pcj~A#_vK%a@&TTlyIHeu8V39x^j9CaA%C=vj_PDC1@_ea4=Ea!D8u?iv3(m z*`0kP7|(_^uqm~SPPp@XuhC#4x=_c#GmvN8G%H^%%D<$nE8Oy99Yn$1?l*8D>;plb z3mQex6MXHM43i+%_7t{>D*6)ps;;k&6(`ksy+1rstb zi1-O8rT3_GH;#R>oj%?R*N8l%TsaO{ddT9OJV#O&Oecs^Vm&6Bx_jl*N9D)ue zaD4W^99{%HSLKeo=Bj#r4&^#mOw(VFsu>;aOM=-@>2Z#0Qxq)@#@=FbS$b zxgxzzBbUOZV4_Ti{@~84K?~szcpSni*I>u9Kd77FvqH4~2aM;%@0=#z7zmR@xPb;x zTCqV*%|aTLsSCw!1oqtqVsAWu2RL4RaFIO>Yr*IE5k`Q@URP6F^W#iU?O)Hl*75HR zD!$JCXM#J~0(b&UWc{>Vdw3uI2E85+zQ%o<>81Uy26tpPjtfB9@219GXprOMQ`$_( z(XQ}+8GYDF$w_u4$FJ4UcPj#u$JcIFuEd_;!>g9i5&FYQP`=)FC`3)?!z2jLNDrTz zK2tx9>p;n54BrD9cPN{8H^0C6>PTv44m8DN{Fpg7wwcXCdK?^RipiKJu9-TJlChai zY*T!!l#ESr)|%;<<3BNEAMwd-MJgu;D&&BFPTENRaWkv7RJ6-hrgCzif)325uQy;$ z1^Y~0B?poN$${iRav(X797ql%2a*HHfyQ&-KSlvyaptAd<^TWy07*qoM6N<$f-+sa Ah5!Hn diff --git a/html/inherit_graph_31.map b/html/inherit_graph_31.map deleted file mode 100644 index 2c8ef516e..000000000 --- a/html/inherit_graph_31.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/inherit_graph_31.md5 b/html/inherit_graph_31.md5 deleted file mode 100644 index 3c48b2b46..000000000 --- a/html/inherit_graph_31.md5 +++ /dev/null @@ -1 +0,0 @@ -ea96b670a3487f3638639c6e30e79c28 \ No newline at end of file diff --git a/html/inherit_graph_31.png b/html/inherit_graph_31.png deleted file mode 100644 index f3b786a41c90daf662eac60356356321b0f5b6aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2179 zcmV-}2z>X6P)Px-JxN4CRCodHnFowiMI48*ft6xG&k_{`MI*5{tPsT*E3rh;fEare3x*K8#u_DP z)QBb;dx-^2Y_VYt*4RK%ltUB?iUm;-+xPA6#NplBy~o|6w`P9Hx9>mmX5O3koBzz) z+w0URDLIfFNDd?ik^{+siJa?fN8M>T^{Fa3(9s<@p8-ye z2f1WisKo1VJSe9=RV4>HssmjZm^s@sJHVy06;b)%C{AH=pd&l5DubJyH^96dJg;4< zOAa)o11Z59a@x|Mi#m`Jyr@&DT|+vM61*X&Ee*P;1GWChEP9P@H1y}0F)#pn!+7wI zRDXuN2a2dKjfTOQMH;uUO&|K581?;~_?{6bt0ZO=uHfd23UOoXdpKE!iTulsS?MbcPW-vsaF^cqFo3-C(Lxy4ddj~#qP zMm7@ssb&o@iPR2Y!WUH&4TlzO+{SkP1nO8_cqaGqa11yZdqbXXq*7uHr?4%okYPE> z`miPFZR`!j(r>i88MINy((hUD+HNB6!tpQ>Iz#q;RQ>BZi95Q<<*6T)c^gBvt-ocr z$EWP|7ApID;$I8Z)Gn-5Y41)KYa9i47G>fuQ;J%Cm=tOkXf}xCM6Mi_v!RpPHCtJu zJdkrfn~5FkQVQ;dJ>p8@qhJ=y$<$Ay>_TZxS#Q3e!{AIO7hA1o^erIk!mlt4Vy#EP z-P+{O-jAx1R^ik8EUNV1xyw_vaWA0pet8|L)cMkQ6u0(SONxs*S!YZ!A%C+nvALmE(4QEImxG&qE4MO)xOys+|x7Q zDg)$oHQ$}cK64<}GzyO0d&YF9?DKdJ6WnAmwqAV!jz{eYE^d?B=NbYgnBxxpUL>}? z{@o36LQ-s@&@bHY4O$!mUSFTQ-xi?Gg@;Q~`J)>L$GSH73_i1U?yjTZB~Z1-?fC_u zZ+X&F=Tf}}=9=0J=7INCu}|fi+Moa04xSx`2AjyfTCas>aKbcg54Z$A2HV{ZL9+>V zf|;;BIAJFJ(hzhW!EZ1Nu7j|{YmO7*j-{S}D@#%BkI9_=z0$;SIROt<%6SK0-TgB7 zTt#&p4Ih9>;DU3UdJ&$3u=Iz!_4?NZeu1J|l7@$Y{;vjo!3DGtv?dqC3UD--JePwD zT@@L3xn=FoKRA6jnB2bQdw_FUS82lHlsizYcPMDs)}Vo}Ku{bnOXY>|4VYv*K&&4q zcrNHO0x za49(Ex@vJJczET6L2pjruKW|Y8~1@A&jpPnaCh{T+aE55SSG@9QN^~zeobkscBW%* zcom%JmtZ)Y2>XIbXYAXgUiz8~-3IGK3?jZ0^5o+4tr7cVJAL%+nBCpCpzcC&VLI;p zVIBneb!4ef;Ar9oH4(Tux!7IQ_rUd_=ZiXSy0nnj@!ki4Z)X>i>(7QqLC;l@aW~Pf zcLwhf^cTT%;Kt-G{uFqhaF5t0s_QFPl>;cMwP$O*e*c;D}1;?uoF5H{pPw+Xuh2fyG{mQlFKcMy0 z>+6|)9sdTP;(lI#BDmvDhdW_B=%?+v!|SjB^!i-zD~xYlz4W^C;WcnGIvSMMtu}7Y zdp*aO#YOohi~!}v;r-mmro&wj<{Q?2Z=KXeSwIvM}HNjiEri1q3;;$5;PZt6c z(yts@xtjZdhN{lc69&NdpnSdeC`FC)VPb`6a@0+*HRO5V`8=&cr-^9Mfjg4c#F}rvm#FLc3vuV z|DQNeHNnGoo<@4kxeV6VW>RvXRR - - diff --git a/html/inherit_graph_32.md5 b/html/inherit_graph_32.md5 deleted file mode 100644 index 87a7784c7..000000000 --- a/html/inherit_graph_32.md5 +++ /dev/null @@ -1 +0,0 @@ -2250ad7c5f26c8f326b257593df54ec2 \ No newline at end of file diff --git a/html/inherit_graph_32.png b/html/inherit_graph_32.png deleted file mode 100644 index 5e025f80c4d1f4f4aa49252e8b652b1bd9a2c087..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2207 zcmZ`*XE+;-8jTULg0|WyO0}QF=#3~P^--f#5wX?YdzT_1grHR|+KWC##JUH=)4%vvTE0UDfx&DuEN=wwJB3O%}rW%0j zCDJ-hAt`OL$Z+&*`@goqqphrTo=G#aq_$<@*yf8nF zW2uNZ!94?iX;!t{tkRkhi=Sb|We=`PJ{)^k6#f6J0;92%JBQ%qNp}PrrDG%LCJJzt zjDwgDNvRmdzbJjO;g2y>?`Is%05ILgL6@uAD=ke6+LGE!`V0S!qUn$CF838nc^0C3#gFJeTLnnv2-- zRmL;6A^Q_UU|lD59@%z7+!gk9!j@-s)Ey#cP3607j$6H)uqGIDhanq8?4f&ri|f=6 z_f=azm+;WGl**3DKWe~4(a@{OCkl)*lYX5kEf}bc{#jM+ z;Jzvd_AY^>wLghwwKH;kCnqMR6HVRT>wPKzd+ymIT9DU6TSdh~Jg8Ax6-a1FcnlN* zC{Ln(f<^<|Mna5`Vkz+juZ3XkvDIvLY`-^wQBM4fctlSa@F*d9P0cWisi_7EnJVAr zS03+0sH`sJ{2h(}I}A*2cbX_>X~?&%6W`Na_lg!Mrjx~S&#M(wfe=FQ)@FQ3^&Qkx z#||3?Rt!p^1`EXhnkK9l%Ci&6!S&bDw}KVa0V(p%Z~}|KqDp79SLy&<*r4lKb1<@& zi52jvxRiPJK0^L(TAr-tnSCI2aL--yQ_+TC!B1=6x1R35-bp+c26MWPCk+#-H{N=0qCL2aAC zDi>t$H=<{9uXF7BItf4tu^FQS)gv$y37v8 z3X+xwd*U?lqevwGbb1~Us)bM7Q_Wa%x&?BFwCElPl=rOcakrx1e#0KRvx&b~T&A{F z2$%=vYPH(P59Q0n>ix>`e}wS3XVe)To=~+O?oS)(@n37hC}*G4C0u2|j1}fntGVrH zp)?QPVEW{#7!J@PX&JNan?irnUdFf?wA25zh9=?#FOUC<;E9NvW{_w-c z`v6)*W#yQQ&*GCfK%5yoGv%q;2x?!<#-w)gi4`Kr)ldUeuq_`?A2N3Y?)#YNd#xUs>R$RVYdC{>FLA0b zNZBO^-EX8}u>?%^A%{s`-k$_67eoeZ=arK0$dOQAIxZ*l0j2b-8!b$7J<59y@<7A- zb0)9mJ2YFtM*_f^2(MI)iM^dN!&1EPW z%a9wr0oj22pw7E9$C>@N%#QSN{S`-MrvDi%H~q$-*$o;$X`qd));YiEnWXVg7}24H YXab5`Nsj!(?M%jYB>@93z-);qyPW_ diff --git a/html/inherit_graph_33.map b/html/inherit_graph_33.map deleted file mode 100644 index 0cca99cee..000000000 --- a/html/inherit_graph_33.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/inherit_graph_33.md5 b/html/inherit_graph_33.md5 deleted file mode 100644 index 6a9baa859..000000000 --- a/html/inherit_graph_33.md5 +++ /dev/null @@ -1 +0,0 @@ -abc18efbfee27dfe1260ec0fd1150d76 \ No newline at end of file diff --git a/html/inherit_graph_33.png b/html/inherit_graph_33.png deleted file mode 100644 index eb5656a62be0dc0b14dde47f14e0902e12057a51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1540 zcmV+f2K)JmP)Px)zDYzuRCodHn18I*V;skCxk{s7h=xd1ek_GiB&^A`VRv_27B;rfFcZsKe;CWU zVHh@T{HsuYgg>G`niwXDFqh`nO-ZD3L%DvG*XwkiyT^Cu+|If8-0ht0d2g?KKF{ZQ zzTfZjd_K?T`JQv@>XK3fQUp>2QUp>2QUp>2QUpqlK%W95C*ixRfIqpaHv$hawGZRz z^^F^Odjy}&1^mfXeGxE!=IZF|)atX2sC`vrC$l;u(2r?#6q;J0iY+uQ`D!czDX}${ zuu`X+5?gAdYHVCeY>g$X)ah0tv4eToV=w?Nf|;QF@^y92D(%l0hRrW+Xtzg==1S)p zco=&I91F!XgpMnsPGjcvEs-xaXXX2c#m;K5{rbGOjEVSF+wlhAIxtwu#Xpg=O8avG z!`ez4+U-$Oxzf2l4$gBStcIO%85GhBIJZX~{*v$>a%SY$914GdeQwm=mfwnfR%7-- zUH#n2jxD9Vh(VIoa2(so84HE}ee~=412uw^ln#H_h!fu7}kuR8sVYm(xQAk$!)89sscsJ6kB$oo@SY~R9n`0= zJZBaE^DSN9gUM8$1kb@8umuWf6;9VWDc@;DUI@$b?eNipaWA-z32-Bv0cs$)8QiQM z)VX$=#~A zE4G2Bj01P{^)MWK2bs*T;Z7I?CeR%pbR5QKU{c)x?sVmSl=GgMv-TZtR>g{Z+ud#w z4$ZfH2WA8A^JElU3$MXEFrc0?mqg6Q{w?2rpU+r(X!vExSHas5pCUBtT*nSrZv(jj zd}dgOzMH@k;Sjh5++1E$aW!+ty=C0h06E_G;9Phel<$sLU?Xe+-?IiW$bjp25j&v; z+CX_6dYu8;47Y+oH;9wLieC;JU>7U~D@RQL=X0tJG#^@XR$bjxKJ5$mjy92VAPzRo zPEEnu-r3r>(Y)UID=XFZ3>(OeW!t0OO}PqwhVS56cnVyTar*(5K{yFM#`dHtRs9&~ zvl>gepxngn@16#1EO>Ng)gOn6@Mz7dFAf)JaFmNU0!-|$phkd4WwmQ06C4sv(&OH^ znAmAxwOYyLs%T*D%HJ!fVlke(V@zUa#rJgE@K+(bsKkDOo`k$b|u_M`48v%bx`p=g)Ao~-lYA2m0 qmLiZMkRp&GkRp&GkRniZ5%>=xAqnMTg~Vn60000 - - diff --git a/html/inherit_graph_34.md5 b/html/inherit_graph_34.md5 deleted file mode 100644 index cc2a2f111..000000000 --- a/html/inherit_graph_34.md5 +++ /dev/null @@ -1 +0,0 @@ -ea30f0bc32fec0fdc08daaab05fbef85 \ No newline at end of file diff --git a/html/inherit_graph_34.png b/html/inherit_graph_34.png deleted file mode 100644 index a41c66c42ea8843052737e74c9d0c5d73aeee14c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1595 zcmV-B2E_S^P)Px)^+`lQRCodHn0ts-RTPJPrJ3(a6U{VBEkm;`v+N;~7`;r&LJbVe#3C{?N-Bgz zE3mQxLH{kYhh`5@A|eZm%-)40y~fnC%x7lNL;Jq*>|t{~SMQ87I(OPX_~xv=_CDwC zz1H6A+_{Y!C8Y?Y2&4$42&4$42&4$42$W?68t2Sip8#}-bzNuh&w zHyEAcPpl9FC( zq#Dq;l=KFa%u<(98%b}+hs}kSa4Adzbv@irX_fY;H^XL?Hnhg0dU2<74a~uw04G5) zwWs6SsMDBv|Ln*Yn^Us>jEJ~#1^RMBtmE}%B`3=fk+b;hv; z{x0mGZH4$F$FIv%8P;ZmlXxEOuVD^&pMiW1+&ro;_<7-^-HrVw97qf3Yzt$eL4B|v zfN7C0HkZ)w6&A~Oyng#ez*pcpT+d?=q<EIb_v#(pxa2 zR?)1k!1g`ud*9$$^815w@t&&FU?dEOAm6>7qCwyZcmy2Z7@EPU;0br*_&#=ANRH2R z6NHoTIrcI*kiMhy2Qbmf3bF|9fK8C66*yh%;H=Y=JQS8@?QofmF#}x30Js^>2Gs`K zC~jmEx)PoS*Etb(LzfJ5H6H3jqj_qv5|sCWU9<7-Ov~o-Y>)~5FtfwuTMSR$QLr5@ zgrNH|Dzb*p^0_AXWS9!h$@_+6_VHYUO!%tMIKXuneLm-yoH1^UM>D_I`I+rKTQl2> zbMhG`+cA%WGMQEs=ViZ@#zeW1OkyV(3YPG(pfJ=bdtA#?um~1_o9$;%y}Q7j+Y5s13$m=94xaY@V2O;?hDOWCVR^Jf*HjmC<03QL zCb$i*1~;L$RVUWlG@8OFuxh;ou`J^=!42cR*TC-(t7FvgFqjk9;(Q(iV|WhuIWypp zRo6)$!3_I>Ct*Bv2H$yW;2XFT+JedTqy$;sz5oN{=J13lpQD`jq)KaF8TB;1p0zzC zCg|9#Z5bYu+2P{nNlzFDo+1Nmu&qv)MNGr~Eo;BeHP#*)i(wwT19A1CSy`sHab0Tz zxjFpIunv6_!AjB^CW9N#d+vq%!1aF#A47Z}&Dzsw9<{d`k283V_dPrvmV=rLFT;A+ z1b>174l)_~UEogeG*^JK#Co5>`Vnpg6Jmgez%Ez@>tHu51W$q*0M6$O8)z1+sk9n3 z8phSWfbTq$d=C^0=tcBxg&>pQ{mx%`!fj8mf!uVqdxK+Fz%TGUJPY%|H5s>!uoO1K z7Wf3LaLUT3-x!(nRnQkom9chxC8@eeKiESJW*>;lak!@ihDowq7pe&k17P4(bLa#n zeLJXb(4o?*-+y{Az4p-*eK#8ylRg|g7F7JnR^6A5>BG8~tdey3uQL_k?V|lOH zO4D6c5lBg|3dR4&2>%Y{t@wpJXY!Rz1iBZSY4|}S?)Mk6cCjPbWf=kgEAU61C1pAL tH0cz96oC|h6oC|h6oC|h6oLIC@E_2K5*DJna&-Uz002ovPDHLkV1lfU3{n69 diff --git a/html/inherit_graph_35.map b/html/inherit_graph_35.map deleted file mode 100644 index f5a070257..000000000 --- a/html/inherit_graph_35.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/inherit_graph_35.md5 b/html/inherit_graph_35.md5 deleted file mode 100644 index 76ae80fcd..000000000 --- a/html/inherit_graph_35.md5 +++ /dev/null @@ -1 +0,0 @@ -e36c1b1eb64397c15635535e2b856f1c \ No newline at end of file diff --git a/html/inherit_graph_35.png b/html/inherit_graph_35.png deleted file mode 100644 index ac8ad3fe694451cac0ba1ab769046bab28d814a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2028 zcmV-P)Px+rb$FWRCodHnP;pOMHq%bDPjQ>ML`WB0fOa5#f}|Y45B7tz;G>mJ_(iyvcL-o3gXB?|w6T&bb{r zBqaxu1IdBpKyn~CkQ_)3BnOfM$$=%%fsO@p+MK%M3hGl;a-gjo7|lS7;=z`R3t7A- z$593KsVX_pS_k?vfVs7FnSt#1SDB8fPjaA{4ve6`xwTCGyrLa3-zSxm19f*GC1Twz zP8TTSKuW|iE~P$ocOWHV-7QWRDC0n}(}VUiVFC<;0Wbyj0e>F470PH3oeqSF zWjeR8&p^&QGCKEn;y2+@_&BPM!=4m|!yQrODa0#Bx_7cEshG#aQSHtAP(&Z3!l3S@ogg=(3$#*w3G)oU04OBwQ8_ zgV(@sbVa(3N{Mw4g$8g8=?635T3Fng$OJ9}7uGZ|8J~qQ&{`eJ0FFBe?t@oh4XBHn z`}57}%)+na-f*l-DO{dan4q2G#whNV#oKahjOq$(_uE_LUYi znBY_xA1azSdM_rpi%wOWzil&N0=T1G0w&SD;C(HCMhaBEYgcV)RUl&!-E(9i~-a6*RpoW0gIluy19c zR3A7WR<(dM{rF1sk7=H3!sKQ0UY1ol?u)PoX!O?*%N=ntICmKi4}j;WTJyKvq@53A zU=?t&+zQ^GWf#skP*Y(h=!Nr|29JTV&u?%ItOx20@E)DZ1uzo2K`cKn?h9T||J)2V z0(ByM1r*cU9*Tadz&6_bF?7 zXZRMjf}m3f8nc39Ic_KL0UQTj!}CHSu1p-{uJwE<)Hs?{j#HF~CelUOxgMuvakWJJ zmG&PpOw^|!Jj`12r&}cvuQ15uLiq%C1Lx*_d#^sQKfndygBKU=pU?xw!Dp}(#2Q4w z*YOkJJe}VWpzJ#sOv2u<9hi6rfU^B*aAWuaOvt>prs5r#0W0JiYm}=dV*UndjM1Vd zZz$GW3MSAdps8{4#IX-xGAw|*VM~bR>%+F7PYL404E4=9`tWAKrf?Ye5O;?yz@#t^ zyDVX4=UASjtOVPDyO3&X{`S#}Ad~WDxE4&Bd!R3@1wNyz!Nicez~nR8)$3qls;_N6)2qx=PFiC?A5)vMp#V!4Pm)Y=CnhmWFhTDmEkjASyRE+=dedzzfg?o`HklNEitwmT`Y5 zqo(GcAH!>#IQq3QEDfi_d{Fzrni=+WQG5(}xnMsB{RuL$&jO#d<8K6$!7;p_J>f?P z(${n0NjL_=Jv%4g8mocN#>L^=rA<`tMBIg0t`8mIK=3A9O>e+^a4d8O6VA^pLH!6` z1r0J`UA4+_l=D8k68-a~WDnwpv$8v*N#ic1Hi!Ky(Z7GZo~#X{!5wH4n9NVZt`Xyj zUG>&I2W8aM{PSa+OvOa-USES3!Fx4{oX-(pa+xG9%Il#h31(Bj0M3WbpiChB@E#o7 zxqSm~gW3!9A$V&Nx^kHd7(Zx?$5oB%G?;9+m#x@Z)m7TsjEi#Z|t_k;=XASk!) zyWkV}0)7D>dXNcXy{3Ez8r%qKQ}8^^ng?URB)J`i!4L2Nd;~v%uO1Co8-Vj!*8(~l z-l#B@-f+i)d_Ik&A21->%QXq0u?M4ZZ^XFj=05bwCXS z>lT9Zm;<409PuL%OJCmv{q_~@IWu7^P$v6KaJT&sZh|Q=4}A8Ez%f)G@ci*`A_U*! z<15sc)d)Iz?lNUgXl^1lHKq@EFu0oY>Pm%)<7&^#RX7ARPIZCaU?P4C%GcG3m1xQP zQ*Hj$X1W{=L&4W)UXEq*H9)lm6QARvG=aB(BH!)17W6d8)R$wKu|xls92aXMwq(M! z&WRJTR=?D?s} zASGf6lTw%ZJCG8w{vM|*lyD&YG*Z;{wxY^ZmmFw?1O7x*sPH3j+}NE$kGLYm$$>U< zz+XK4=Ys#3__K}1Ov5Axk^{+s - - diff --git a/html/inherit_graph_36.md5 b/html/inherit_graph_36.md5 deleted file mode 100644 index ea714c36b..000000000 --- a/html/inherit_graph_36.md5 +++ /dev/null @@ -1 +0,0 @@ -2e582dc3e2af75df0d8fc7267511350e \ No newline at end of file diff --git a/html/inherit_graph_36.png b/html/inherit_graph_36.png deleted file mode 100644 index 18d0f9f955ae4a20a0380441c5783e6f5de95fa4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1684 zcmV;F25b3=P)Px*PDw;TRCodHn0v5RQy7QS{if28Lia1irBJC6!z449#-&mjnT$-5(qxj$xJ?S7 zKivJns6>--8P#B-Atqud6-_R6N*AdJm6ANq>8vc+p;~JEnDUu2VBHcIVnT>zDTt@GVi0HjA{%k=8HsRlo>j$x#6pJ=ZB` z$&qWMDqz1XIV#|y=Q`!8xppj}UwzKq3uB=>w1#J(FZfgW705+?YaRr5-?qb}{S z-Q}YrUrFYloct#0Fd6#{XdU^Sqho#_d>zjP+iPJSG=!w?#1X&J9H-AZzNlj-j#j=k z;0C-Otc+z=c_)Xv$DI)5KX2o}Kp5mna4M)r!Cl$`dP7eLYKzei+-1jrJJkM8x+=7R znqY!iqU{$J(R-RKzk*r>vkI-^KfdQw0hkb~I!uERunyAH1gCS6uHf@~z>Ag8?QQLef#Wk4b>S^Ad5(tDU?5x%Wmb77M{+=) zZrHj zkwUBFk0qS;`-5^^3*ZeK#b_}8*+sZO55s&gDS{?rgyd+B-5EmiOvSzlR0nV^ta|&S z-gGum9s`qQBTR$Kq0Bna$uTc6LU*wleiqb$Par6^YvQy#{tPZqH;83b@LbSp4DVYO zwc}zF!UY@xmi|lOY%rO%kA;0DM= zCPPpwjJog@_)3#&U^kRm@lGuB%~Eb)*^kwc#vJ$^e0Ez{3d(aqBQQ<`1OEs3UcCZ> zj>M=1+lm}rIQnWRt$ZD{26z2&@DW@K>L@T-hrtF|4{7=g=Ug~BI=KS-L$G?7T%l^X z%l)470-OiFW+p&;NXmt-5;;wXpr0@{K{E&m(FnT^lv$O_e20>6(2LWjfWa69jo~#g zA-;uMpdOe6{UE40hP%PUFo{Nj@;=IO-%x1n*_FMqeSIi*u?yMI2I>m^3$1@Ye4ZHS zf$%2W2PW7&xF}*Y_HRY)`5a4<)y(aB=%U+IlRzxw zs=>_=^bUr}>l}=Y_n8G(!2ywj3|W}V0}QhLEsJAeHmFJPI;?_qupOL4kc*~&Gi-qe zUVh@e3@0#V{O<#UL07F1%_0R;8U_OzwtV5UTP3 zY~xV?&gXfk4!LR+9lbUu?Qe4I>!t?1J@^_(ss;`h)7L~&?jm0;Ru1Ka8-dATP*qcK z=j5wQoR-nx8)Dav+Og?ei(7PGBWFTLnE1MV*@rYa_BFWuJs&5>{$88)|9=FEO%8Ww zzRCChf_xivK8`mZlVcHq?wOCl&bKk=V{+tMjPrK9S#sp<(jEALXUTEkW1P272tO0k zCNMqCnfVU82(&A1M&Xa6_`Lt{`TILl#fZR0rnwMiR*dOpv&2O eWD&@l2>b(kK^>Aoc+{Z)0000 - - diff --git a/html/inherit_graph_37.md5 b/html/inherit_graph_37.md5 deleted file mode 100644 index d7f49238c..000000000 --- a/html/inherit_graph_37.md5 +++ /dev/null @@ -1 +0,0 @@ -8da6832a8fe22d6396e3d9066090900b \ No newline at end of file diff --git a/html/inherit_graph_37.png b/html/inherit_graph_37.png deleted file mode 100644 index fd59e325e6c0e379d9e6c355c3b9998760c55936..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1897 zcmV-v2bTDWP)Px+BS}O-RCodHnRkp;MHGio1ZftG1w{~D!4?%!0RbUV5s8Ip?5G%x8ViC%g9Sw~ z*b9l+@DC$ciN+4G8%1KTfD$Z#h+@G4f(`KdmNz)wT$cNG->PfomwbEAoI7*h+%sp+ zJRXf2C8Y?Y2&4$42&4$42&4$42&4$42&4#-i@C?k2{IR(qjeX&v$T=K)^Qi4}X2J8NYX`1F;X0THu@0iq z4K9wI8M_bd9pToDzue~Wr2!Li2JVM1tX0nK%DXC2*;+BJA+RpA0T)#D0F$q%T)crr zJJ+(GKkGPGH-QP#0#1c#U=rl%4xAF}I2v8RXGmjk?(afx_@dN4mTOifS^KOr)838t zp&4Ion*ABnZ#4tswOUP=YWEfV9aB?>qW3CM+2YT-n}%fNi+u;bXK&DM4oh?Vy4(y_ zmW4KQ)D&Mc_$lXJO)jhOlBmN~*!MsO_#T2z#^@Ound_6Zua10fwwZ7eyae}y)%_X> z>VVM|E({K?Enyk_68UOl8Yknhyx`!xwX$%yaej=Rq0dcOXH}xI#gp)V9v+Mw+hD&3 zbHG3hhM+Amrh@)?a5%)elEwmX0VPx(kDys_9XQTJbYV?ejKQs5ja&Qsd6z#xwbl%|| zFjvV+(_~d^Wel93v1kQPfXTQq>J$NZ}=Rx26tXZFwuf8#rO^8!!2+Ss4rnSEUS~dREEao~vtN zRW3&+fQfe_n0(*CeQ+3*Ba^=e^oO6JAGlr>RedMhl+0|cGVZ`Vp(VTqL9yKor^kUM z-32!gv8-C&3z~=FbL*l`3^u_`h*QC%?qJvp+#K4QLC|Onk1`4G)Cb$j5@bSIZG83- z@D5A|wJkgebKo{`Llu$96|@aTEBF9B!sP^50p;i>I-8{9U?DsPTR=rs-^u1N7i%{f zR;$HemFfsV-U}Lnu>-h}9#dC9to3L#j~v~wKaJYun!OoN1y&^&^A$J|&V)n2M$GoWw5%LY~w*$g>bCmNw zt=d{yH3ne2aLOuUVr*msb%$fBt-t>GdE&wi1b4E*Hesj00TJh7FDkWPuK;dgjoNMoqZ=hwL6ig(wAy_qCbYn6SmO(f* zj>R?}bHVqy6Pkj$7gppj0$;pVo+{sf>)~AdO0y%VzTiA3+9;^U={LSe-*S^}P0w@@ zw}bfD3uD&B=nU?@tlZ@urS3Lm05=7b&6igm8`)i2eWQW=F%h?p=4v%=5w&B}cMVAt z`?Xub9uN{xU%B!b9>ICfaPxS-sQ$HND>}iV{o-URIwtk|XCsiCY*vqkrbSHnjfOVq zG~fI$r2qA}yw3#v9+A|*BG3>kTLTMmnr?_dO12P*bglOYq-3l25T_3a5ePpkgm!!_ z=XaHOT(VOH{0ZgRY#721p|Rgzi~ap4DMg^R5tz%ssqlJjACShS2&4$42&4$42&4$4 j2&4$42&4%7&m-_BAyh;1_t{h+00000NkvXXu0mjfT2g<9 diff --git a/html/inherit_graph_38.map b/html/inherit_graph_38.map deleted file mode 100644 index d9c91194a..000000000 --- a/html/inherit_graph_38.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/html/inherit_graph_38.md5 b/html/inherit_graph_38.md5 deleted file mode 100644 index 9ffe6fc68..000000000 --- a/html/inherit_graph_38.md5 +++ /dev/null @@ -1 +0,0 @@ -3aff41404e8310511dd0dfbe833381b5 \ No newline at end of file diff --git a/html/inherit_graph_38.png b/html/inherit_graph_38.png deleted file mode 100644 index 8c8cf833e04cf573fb5b911aaa81bda1f1350952..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1559 zcmV+y2I%>TP)Px)(Md!>RCodHnQN#ORTzd(dGe&0re!9krFqFHDZ-L0e`H$HO{kN|A^IUCW@SkQ z2MVH66Ri9ZQT+_(*7#q6qvc0XOrD9fH_pS^I}&e=12J9_Z!^};i= zX3e^O>s#N0?>iHJf&J=H~ zoaUjG8C(yC)|C91)w3-yp6SiVJ4GF2cizIWT#vCpJ2TmoHk-6al2$I}HLwMulQi(+ z=bd_VlDw8`;BwJP8hG*ZPQ3^x89-;tp$}XDb3t7Nvr4Iahp`k}l&@&rrN&Uxu?Cir zo&zJGD4j_|OY3axK-i$>p%vjI{pfW8w7_xTLa1|Kaw(PXFqC3#`HI$E%Afa+)$c>Q zpf6kt8{iTsLMPM6b#*pWlnwmW^+lay*sEIeUOD@g@dVYSQaaC%@OR}6u8lxDQ}WHy ziI0Mxyhu@R@(zbzQ|?vE^5@EtNUwvh!G*j5f{rKg2AIDUu7sqP zaPci{EE9J6*L#I61%T;d^kS*p_{%EE~+HjElboK8L9g^cIQRLHjsH+c$Eb3a^5F>?of( z)vuzR#7B<1FX&c2 z+2A7XFM%tdAL#7PV+bgt#T=LkLt!o41{+{H=$x*F=fc%Wiy>^~X?$3@ypM%;SXHj1 zL%dr~hm*U($vVLfI2VH46N)!P4eiOM@k_l7JRjG~MY_LBrUuC@uPY_}!c zDDu3&oy5mMQfF|n1%8KS7z07x3tB*8JPd;guo#lkSbY*1hVgxQo1a2`cm3PoBh7b| zS70z0?Oq2XLQt*!{~IbM&RI6l0UigVT3{;arywXfrjS?od4D^}g^c(#(D2uQzjB@j z!{%pjGxP_YVHN}#o<^7{VfxEWO~);Jgtw!<+CWgk7ZbOb6?}4{PB8 zP)4r@VW=0#KJF-`_8dMX=_ATeJ`a|_ouGEYVt58V1joM|rhtyFs`cMlBKw$SgNJBB z`#DDExdI%kHp!CCq}{fIQLk{hYjzjds=I$2Bp(l<`4$qVL)t`i;PGH2QSJ+(QpFzz(B#NOvqq-AP;~#*Y+&~~`$R~yk@u^qmTx8PG_k^^p}M(;2>Nuzr}j`>F?$zh~MFA{!UrrF`?w9J^-V=dt4hE(-R$@L4U z-w2`_%L4uv=7-5ujWz8!+h~DkfoOqffoOqffoOqffgWRl{{Vk|L~002ov JPDHLkV1i1Z_cQ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/html/inherit_graph_39.md5 b/html/inherit_graph_39.md5 deleted file mode 100644 index 552fc14fb..000000000 --- a/html/inherit_graph_39.md5 +++ /dev/null @@ -1 +0,0 @@ -ecd8011330e456ca9dfc399f5ea8b281 \ No newline at end of file diff --git a/html/inherit_graph_39.png b/html/inherit_graph_39.png deleted file mode 100644 index a97bd4e4e3a9afac1f106a0208e9f5f337d2f6e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 148676 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

    -
    -
    -
    libdap::ServerFunctionsList Member List
    -
    -
    - -

    This is the complete list of members for libdap::ServerFunctionsList, including all inherited members.

    - - - - - - - - - - - - - - - -
    add_function(ServerFunction *func)libdap::ServerFunctionsListvirtual
    begin()libdap::ServerFunctionsList
    end()libdap::ServerFunctionsList
    find_function(const std::string &name, bool_func *f) constlibdap::ServerFunctionsListvirtual
    find_function(const std::string &name, btp_func *f) constlibdap::ServerFunctionsListvirtual
    find_function(const std::string &name, proj_func *f) constlibdap::ServerFunctionsListvirtual
    find_function(const std::string &name, D4Function *f) constlibdap::ServerFunctionsListvirtual
    getFunction(SFLIter it)libdap::ServerFunctionsList
    getFunctionNames(std::vector< std::string > *names) (defined in libdap::ServerFunctionsList)libdap::ServerFunctionsListvirtual
    ServerFunctionsList() (defined in libdap::ServerFunctionsList)libdap::ServerFunctionsListinlineprotected
    ServerFunctionsListUnitTest (defined in libdap::ServerFunctionsList)libdap::ServerFunctionsListfriend
    SFLCIter typedef (defined in libdap::ServerFunctionsList)libdap::ServerFunctionsList
    SFLIter typedef (defined in libdap::ServerFunctionsList)libdap::ServerFunctionsList
    TheList() (defined in libdap::ServerFunctionsList)libdap::ServerFunctionsListstatic
    -

    `VPGy6R_#avx0~NvGBR|i)t&#qI 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Ԁ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 *ch;CDsgccW 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�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