38 #include "DDSLoader.h"
39 #include "Dimension.h"
40 #include "NCMLDebug.h"
43 #include "GridAggregateOnOuterDimension.h"
45 #include "AggregationException.h"
46 #include "AggregationUtil.h"
48 #include "ArrayAggregateOnOuterDimension.h"
51 using libdap::DataDDS;
61 static const string DEBUG_CHANNEL(
"ncml:2");
64 void GridAggregateOnOuterDimension::duplicate(
const GridAggregateOnOuterDimension& rhs)
66 _newDim = rhs._newDim;
70 const AMDList& memberDatasets,
const DDSLoader& loaderProto)
75 BESDEBUG(DEBUG_CHANNEL,
"GridAggregateOnOuterDimension() ctor called!" << endl);
77 createRep(memberDatasets);
83 BESDEBUG(DEBUG_CHANNEL,
"GridAggregateOnOuterDimension() copy ctor called!" << endl);
87 GridAggregateOnOuterDimension*
88 GridAggregateOnOuterDimension::ptr_duplicate()
93 GridAggregateOnOuterDimension&
94 GridAggregateOnOuterDimension::operator=(
const GridAggregateOnOuterDimension& rhs)
98 GridAggregationBase::operator=(rhs);
104 GridAggregateOnOuterDimension::~GridAggregateOnOuterDimension()
106 BESDEBUG(DEBUG_CHANNEL,
"~GridAggregateOnOuterDimension() dtor called!" << endl);
113 void GridAggregateOnOuterDimension::createRep(
const AMDList& memberDatasets)
115 BESDEBUG_FUNC(DEBUG_CHANNEL,
"Replacing the Grid's data Array with an ArrayAggregateOnOuterDimension..." << endl);
118 Array* pArr =
static_cast<Array*
>(array_var());
119 NCML_ASSERT_MSG(pArr,
"Expected to find a contained data Array but we did not!");
122 std::auto_ptr<ArrayGetterInterface> arrayGetter(
new TopLevelGridDataArrayGetter());
126 std::auto_ptr<ArrayAggregateOnOuterDimension> aggDataArray(
new ArrayAggregateOnOuterDimension(*pArr,
127 memberDatasets, arrayGetter, _newDim));
131 NCML_ASSERT(!(arrayGetter.get()));
134 set_array(aggDataArray.get());
138 aggDataArray.release();
141 void GridAggregateOnOuterDimension::cleanup() throw ()
149 transferConstraintsToSubGridMaps(pSubGrid);
150 transferConstraintsToSubGridArray(pSubGrid);
160 void GridAggregateOnOuterDimension::transferConstraintsToSubGridMaps(Grid* pSubGrid)
162 BESDEBUG(DEBUG_CHANNEL,
"Transferring constraints to the subgrid maps..." << endl);
163 Map_iter subGridMapIt = pSubGrid->map_begin();
164 for (Map_iter it = map_begin(); it != map_end(); ++it) {
166 if (it == map_begin()) {
170 Array* subGridMap =
static_cast<Array*
>(*subGridMapIt);
171 Array* superGridMap =
static_cast<Array*
>(*it);
180 void GridAggregateOnOuterDimension::transferConstraintsToSubGridArray(Grid* pSubGrid)
182 BESDEBUG(DEBUG_CHANNEL,
"Transferring constraints to the subgrid array..." << endl);
184 Array* pSubGridArray =
static_cast<Array*
>(pSubGrid->get_array());
185 VALID_PTR(pSubGridArray);
186 Array* pThisArray =
static_cast<Array*
>(array_var());
187 VALID_PTR(pThisArray);