32#include <libdap/Marshaller.h>
33#include <libdap/ConstraintEvaluator.h>
35#include "ArrayAggregationBase.h"
38#include "BESStopWatch.h"
41#define DEBUG_CHANNEL "agg_util"
45static const bool PRINT_CONSTRAINTS =
false;
51#define MODULE "agg_util"
52#define prolog string("ArrayAggregationBase::").append(__func__).append("() - ")
57 Array(proto), _pSubArrayProto(dynamic_cast<Array*>(const_cast<Array&>(proto).
ptr_duplicate())),
58 _pArrayGetter(std::move(arrayGetter)), _datasetDescs(std::move(aggMembers))
67 BESDEBUG(DEBUG_CHANNEL,
"ArrayAggregationBase() copy ctor called!" << endl);
72ArrayAggregationBase::~ArrayAggregationBase()
82 Array::operator=(rhs);
103 BES_STOPWATCH_START(MODULE, prolog +
"Timing");
105 BESDEBUG_FUNC(DEBUG_CHANNEL,
" function entered..." << endl);
109 BESDEBUG_FUNC(DEBUG_CHANNEL,
"read_p() set, early exit!");
114 if (!(send_p() || is_in_selection())) {
115 BESDEBUG_FUNC(DEBUG_CHANNEL,
"Object not in output, skipping... name=" << name() << endl);
120 if (PRINT_CONSTRAINTS) {
121 BESDEBUG_FUNC(DEBUG_CHANNEL,
"Constraints on this Array are:" << endl);
130 if (PRINT_CONSTRAINTS) {
131 BESDEBUG_FUNC(DEBUG_CHANNEL,
"After transfer, constraints on the member template Array are: " << endl);
148 return _datasetDescs;
157 BESDEBUG(DEBUG_CHANNEL,
"Constraints for Array: " << name() <<
": " << oss.str() << endl);
163 VALID_PTR(_pSubArrayProto.get());
164 return *(_pSubArrayProto.get());
170 VALID_PTR(_pArrayGetter.get());
171 return *(_pArrayGetter.get());
177 _pSubArrayProto.reset(((rhs._pSubArrayProto.get()) ? (
static_cast<Array*
>(rhs._pSubArrayProto->ptr_duplicate())) : (
nullptr)));
180 _pArrayGetter.reset(((rhs._pArrayGetter.get()) ? (rhs._pArrayGetter->clone()) : (
nullptr)));
183 _datasetDescs = rhs._datasetDescs;
186void ArrayAggregationBase::cleanup() noexcept
188 _datasetDescs.clear();
189 _datasetDescs.resize(0);
195 NCML_ASSERT_MSG(
false,
"** Unimplemented function: "
196 "ArrayAggregationBase::transferOutputConstraintsIntoGranuleTemplateHook(): "
197 "needs to be overridden and implemented in a base class.");
203 NCML_ASSERT_MSG(
false,
"** Unimplemented function: "
204 "ArrayAggregationBase::readConstrainedGranuleArraysAndAggregateData(): "
205 "needs to be overridden and implemented in a base class.");
static void printConstraints(std::ostream &os, const libdap::Array &fromArray)
const AMDList & getDatasetList() const
virtual void transferOutputConstraintsIntoGranuleTemplateHook()
virtual void readConstrainedGranuleArraysAndAggregateDataHook()
libdap::Array & getGranuleTemplateArray()
void printConstraints(const Array &fromArray)
ArrayAggregationBase * ptr_duplicate() override
const ArrayGetterInterface & getArrayGetterInterface() const
ArrayAggregationBase(const libdap::Array &granuleProto, AMDList memberDatasets, std::unique_ptr< ArrayGetterInterface > arrayGetter)
Helper class for temporarily hijacking an existing dhi to load a DDX response for one particular file...