34#include <libdap/DataDDS.h>
35#include <libdap/DDS.h>
36#include <libdap/Grid.h>
43#include "GridAggregateOnOuterDimension.h"
45#include "AggregationException.h"
46#include "AggregationUtil.h"
47#include <libdap/Array.h>
48#include "ArrayAggregateOnOuterDimension.h"
57#define DEBUG_CHANNEL "ncml:2"
62 _newDim = rhs._newDim;
66 const AMDList& memberDatasets,
const DDSLoader& loaderProto)
69 GridAggregationBase(proto, memberDatasets, loaderProto), _newDim(newDim)
71 BESDEBUG(DEBUG_CHANNEL,
"GridAggregateOnOuterDimension() ctor called!" << endl);
73 createRep(memberDatasets);
79 BESDEBUG(DEBUG_CHANNEL,
"GridAggregateOnOuterDimension() copy ctor called!" << endl);
83GridAggregateOnOuterDimension*
84GridAggregateOnOuterDimension::ptr_duplicate()
94 GridAggregationBase::operator=(rhs);
100GridAggregateOnOuterDimension::~GridAggregateOnOuterDimension()
102 BESDEBUG(DEBUG_CHANNEL,
"~GridAggregateOnOuterDimension() dtor called!" << endl);
109void GridAggregateOnOuterDimension::createRep(
const AMDList& memberDatasets)
111 BESDEBUG_FUNC(DEBUG_CHANNEL,
"Replacing the Grid's data Array with an ArrayAggregateOnOuterDimension..." << endl);
114 const auto pArr =
dynamic_cast<Array*
>(array_var());
115 NCML_ASSERT_MSG(pArr,
"Expected to find a contained data Array but we did not!");
118 unique_ptr<ArrayGetterInterface> arrayGetter(
new TopLevelGridDataArrayGetter());
124 unique_ptr<ArrayAggregateOnOuterDimension> aggDataArray(
new ArrayAggregateOnOuterDimension(*pArr,
125 memberDatasets, std::move(arrayGetter), _newDim));
129 NCML_ASSERT(!(arrayGetter.get()));
132 set_array(aggDataArray.get());
136 aggDataArray.release();
139void GridAggregateOnOuterDimension::cleanup() const noexcept
147 transferConstraintsToSubGridMaps(pSubGrid);
148 transferConstraintsToSubGridArray(pSubGrid);
158void GridAggregateOnOuterDimension::transferConstraintsToSubGridMaps(Grid* pSubGrid)
160 BESDEBUG(DEBUG_CHANNEL,
"Transferring constraints to the subgrid maps..." << endl);
161 Map_iter subGridMapIt = pSubGrid->map_begin();
162 for (Map_iter it = map_begin(); it != map_end(); ++it) {
164 if (it == map_begin()) {
168 Array* subGridMap =
static_cast<Array*
>(*subGridMapIt);
169 Array* superGridMap =
static_cast<Array*
>(*it);
178void GridAggregateOnOuterDimension::transferConstraintsToSubGridArray(Grid* pSubGrid)
180 BESDEBUG(DEBUG_CHANNEL,
"Transferring constraints to the subgrid array..." << endl);
182 Array* pSubGridArray =
static_cast<Array*
>(pSubGrid->get_array());
183 VALID_PTR(pSubGridArray);
184 Array* pThisArray =
static_cast<Array*
>(array_var());
185 VALID_PTR(pThisArray);
static void transferArrayConstraints(libdap::Array *pToArray, const libdap::Array &fromArray, bool skipFirstFromDim, bool skipFirstToDim, bool printDebug=false, const std::string &debugChannel="agg_util")
virtual void transferConstraintsToSubGridHook(Grid *pSubGrid)
virtual const Dimension & getAggregationDimension() const
GridAggregateOnOuterDimension(const Grid &proto, const Dimension &newDim, const AMDList &memberDatasets, const DDSLoader &loaderProto)
Helper class for temporarily hijacking an existing dhi to load a DDX response for one particular file...