29#include "RenamedArrayWrapper.h"
31#include <libdap/AttrTable.h>
32#include <libdap/BaseType.h>
33#include <libdap/DDS.h>
34#include <libdap/dods-datatypes.h>
35#include <libdap/Marshaller.h>
36#include <libdap/UnMarshaller.h>
43using std::ostringstream;
47RenamedArrayWrapper::RenamedArrayWrapper() :
48 Array(
"", 0), _pArray(0), _orgName(
"")
52RenamedArrayWrapper::RenamedArrayWrapper(
const RenamedArrayWrapper& proto) :
54 , _pArray(0), _orgName(proto._orgName)
56 copyLocalRepFrom(proto);
59RenamedArrayWrapper::RenamedArrayWrapper(libdap::Array* toBeWrapped) :
61 , _pArray(toBeWrapped), _orgName(
"")
63 NCML_ASSERT_MSG(_pArray,
"RenamedArrayWrapper(): expected non-null Array to wrap!!");
64 _orgName = toBeWrapped->name();
68RenamedArrayWrapper::~RenamedArrayWrapper()
74RenamedArrayWrapper::ptr_duplicate()
76 return new RenamedArrayWrapper(*
this);
86 copyLocalRepFrom(rhs);
97 Array::add_constraint(i, start, stride, stop);
101void RenamedArrayWrapper::reset_constraint()
103 Array::reset_constraint();
104 _pArray->reset_constraint();
109 Array::clear_constraint();
110 _pArray->clear_constraint();
114string RenamedArrayWrapper::toString()
119string RenamedArrayWrapper::toString()
const
122 oss <<
"RenamedArrayWrapper(" <<
this <<
"): " << endl;
123 oss <<
"\t_pArray=" << ((_pArray) ? (_pArray->toString()) : (
"NULL")) << endl;
127void RenamedArrayWrapper::dump(std::ostream &strm)
const
134RenamedArrayWrapper::is_simple_type()
const
136 return _pArray->is_simple_type();
140RenamedArrayWrapper::is_vector_type()
const
142 return _pArray->is_vector_type();
146RenamedArrayWrapper::is_constructor_type()
const
148 return _pArray->is_constructor_type();
152RenamedArrayWrapper::synthesized_p()
154 return _pArray->synthesized_p();
158RenamedArrayWrapper::set_synthesized_p(
bool state)
161 BaseType::set_synthesized_p(state);
162 _pArray->set_synthesized_p(state);
166RenamedArrayWrapper::element_count(
bool leaves )
168 return _pArray->element_count(leaves);
172bool RenamedArrayWrapper::read_p()
174 return _pArray->read_p();
177void RenamedArrayWrapper::set_read_p(
bool state)
180 _pArray->set_read_p(state);
183bool RenamedArrayWrapper::send_p()
185 return _pArray->send_p();
188void RenamedArrayWrapper::set_send_p(
bool state)
191 _pArray->set_send_p(state);
197RenamedArrayWrapper::get_attr_table()
199 return _pArray->get_attr_table();
203RenamedArrayWrapper::set_attr_table(
const AttrTable &at)
205 _pArray->set_attr_table(at);
209RenamedArrayWrapper::is_in_selection()
211 return _pArray->is_in_selection();
215RenamedArrayWrapper::set_in_selection(
bool state)
217 BaseType::set_in_selection(state);
218 _pArray->set_in_selection(state);
223RenamedArrayWrapper::set_parent(BaseType *parent)
225 BaseType::set_parent(parent);
226 _pArray->set_parent(parent);
230RenamedArrayWrapper::get_parent()
const
232 return _pArray->get_parent();
237RenamedArrayWrapper::var(
const string &name ,
bool exact_match , btp_stack *s )
239 return _pArray->var(name, exact_match, s);
243RenamedArrayWrapper::var(
const string &name, btp_stack &s)
245 return _pArray->var(name, s);
248void RenamedArrayWrapper::add_var(BaseType *bt, Part part )
250 _pArray->add_var(bt, part);
253void RenamedArrayWrapper::add_var_nocopy(BaseType *bt, Part part )
255 _pArray->add_var_nocopy(bt, part);
260RenamedArrayWrapper::check_semantics(
string &msg,
bool all )
262 return _pArray->check_semantics(msg, all);
266RenamedArrayWrapper::ops(BaseType *b,
int op)
268 return _pArray->ops(b, op);
274RenamedArrayWrapper::print_decl(FILE *out,
277 bool constraint_info ,
282 _pArray->print_decl(out, space, print_semi, constraint_info, constrained);
287RenamedArrayWrapper::print_xml(FILE *out,
293 _pArray->print_xml(out, space, constrained);
298RenamedArrayWrapper::print_val(FILE *out,
304 print_val(out, space, print_decl_p);
311RenamedArrayWrapper::print_decl(ostream &out,
314 bool constraint_info ,
319 _pArray->print_decl(out, space, print_semi, constraint_info, constrained);
324RenamedArrayWrapper::print_xml(ostream &out,
330 _pArray->print_xml(out, space, constrained);
335RenamedArrayWrapper::print_val(ostream &out,
341 print_val(out, space, print_decl_p);
346RenamedArrayWrapper::width(
bool constrained)
349 return _pArray->width(constrained);
353unsigned int RenamedArrayWrapper::buf2val(
void **val)
356 return _pArray->buf2val(val);
359unsigned int RenamedArrayWrapper::val2buf(
void *val,
bool reuse )
362 return _pArray->val2buf(val, reuse);
366bool RenamedArrayWrapper::set_value_worker(T *v,
int sz)
369 return _pArray->set_value(v, sz);
371bool RenamedArrayWrapper::set_value(dods_byte *val,
int sz) {
return set_value_worker(val,sz); }
372bool RenamedArrayWrapper::set_value(dods_int8 *val,
int sz) {
return set_value_worker(val,sz); }
373bool RenamedArrayWrapper::set_value(dods_int16 *val,
int sz) {
return set_value_worker(val,sz); }
374bool RenamedArrayWrapper::set_value(dods_uint16 *val,
int sz) {
return set_value_worker(val,sz); }
375bool RenamedArrayWrapper::set_value(dods_int32 *val,
int sz) {
return set_value_worker(val,sz); }
376bool RenamedArrayWrapper::set_value(dods_uint32 *val,
int sz) {
return set_value_worker(val,sz); }
377bool RenamedArrayWrapper::set_value(dods_int64 *val,
int sz) {
return set_value_worker(val,sz); }
378bool RenamedArrayWrapper::set_value(dods_uint64 *val,
int sz) {
return set_value_worker(val,sz); }
379bool RenamedArrayWrapper::set_value(dods_float32 *val,
int sz) {
return set_value_worker(val,sz); }
380bool RenamedArrayWrapper::set_value(dods_float64 *val,
int sz) {
return set_value_worker(val,sz); }
381bool RenamedArrayWrapper::set_value(
string *val,
int sz) {
return set_value_worker(val,sz); }
384bool RenamedArrayWrapper::set_value_worker(vector<T> &v,
int sz)
387 return _pArray->set_value(v, sz);
389bool RenamedArrayWrapper::set_value(vector<dods_byte> &val,
int sz) {
return set_value_worker(val,sz); }
390bool RenamedArrayWrapper::set_value(vector<dods_int8> &val,
int sz) {
return set_value_worker(val,sz); }
391bool RenamedArrayWrapper::set_value(vector<dods_int16> &val,
int sz) {
return set_value_worker(val,sz); }
392bool RenamedArrayWrapper::set_value(vector<dods_uint16> &val,
int sz) {
return set_value_worker(val,sz); }
393bool RenamedArrayWrapper::set_value(vector<dods_int32> &val,
int sz) {
return set_value_worker(val,sz); }
394bool RenamedArrayWrapper::set_value(vector<dods_uint32> &val,
int sz) {
return set_value_worker(val,sz); }
395bool RenamedArrayWrapper::set_value(vector<dods_int64> &val,
int sz) {
return set_value_worker(val,sz); }
396bool RenamedArrayWrapper::set_value(vector<dods_uint64> &val,
int sz) {
return set_value_worker(val,sz); }
397bool RenamedArrayWrapper::set_value(vector<dods_float32> &val,
int sz) {
return set_value_worker(val,sz); }
398bool RenamedArrayWrapper::set_value(vector<dods_float64> &val,
int sz) {
return set_value_worker(val,sz); }
399bool RenamedArrayWrapper::set_value(vector<string> &val,
int sz) {
return set_value_worker(val,sz); }
403bool RenamedArrayWrapper::set_value(dods_byte *val,
int sz)
406 return _pArray->set_value(val, sz);
409bool RenamedArrayWrapper::set_value(vector<dods_byte> &val,
int sz)
412 return _pArray->set_value(val, sz);
415bool RenamedArrayWrapper::set_value(dods_int16 *val,
int sz)
418 return _pArray->set_value(val, sz);
421bool RenamedArrayWrapper::set_value(vector<dods_int16> &val,
int sz)
424 return _pArray->set_value(val, sz);
427bool RenamedArrayWrapper::set_value(dods_uint16 *val,
int sz)
430 return _pArray->set_value(val, sz);
433bool RenamedArrayWrapper::set_value(vector<dods_uint16> &val,
int sz)
436 return _pArray->set_value(val, sz);
439bool RenamedArrayWrapper::set_value(dods_int32 *val,
int sz)
442 return _pArray->set_value(val, sz);
445bool RenamedArrayWrapper::set_value(vector<dods_int32> &val,
int sz)
448 return _pArray->set_value(val, sz);
451bool RenamedArrayWrapper::set_value(dods_uint32 *val,
int sz)
454 return _pArray->set_value(val, sz);
457bool RenamedArrayWrapper::set_value(vector<dods_uint32> &val,
int sz)
460 return _pArray->set_value(val, sz);
463bool RenamedArrayWrapper::set_value(dods_float32 *val,
int sz)
466 return _pArray->set_value(val, sz);
469bool RenamedArrayWrapper::set_value(vector<dods_float32> &val,
int sz)
472 return _pArray->set_value(val, sz);
475bool RenamedArrayWrapper::set_value(dods_float64 *val,
int sz)
478 return _pArray->set_value(val, sz);
481bool RenamedArrayWrapper::set_value(vector<dods_float64> &val,
int sz)
484 return _pArray->set_value(val, sz);
487bool RenamedArrayWrapper::set_value(
string *val,
int sz)
490 return _pArray->set_value(val, sz);
493bool RenamedArrayWrapper::set_value(vector<string> &val,
int sz)
496 return _pArray->set_value(val, sz);
502void RenamedArrayWrapper::value_worker(T *v)
const
507void RenamedArrayWrapper::value(dods_byte *b)
const { value_worker(b); }
508void RenamedArrayWrapper::value(dods_int8 *b)
const { value_worker(b); }
509void RenamedArrayWrapper::value(dods_int16 *b)
const { value_worker(b); }
510void RenamedArrayWrapper::value(dods_uint16 *b)
const { value_worker(b); }
511void RenamedArrayWrapper::value(dods_int32 *b)
const { value_worker(b); }
512void RenamedArrayWrapper::value(dods_uint32 *b)
const { value_worker(b); }
513void RenamedArrayWrapper::value(dods_int64 *b)
const { value_worker(b); }
514void RenamedArrayWrapper::value(dods_uint64 *b)
const { value_worker(b); }
515void RenamedArrayWrapper::value(dods_float32 *b)
const { value_worker(b); }
516void RenamedArrayWrapper::value(dods_float64 *b)
const { value_worker(b); }
517void RenamedArrayWrapper::value(vector<string> &b)
const {
return _pArray->value(b); }
521void RenamedArrayWrapper::value(dods_byte *b)
const
527void RenamedArrayWrapper::value(dods_int16 *b)
const
533void RenamedArrayWrapper::value(dods_uint16 *b)
const
539void RenamedArrayWrapper::value(dods_int32 *b)
const
545void RenamedArrayWrapper::value(dods_uint32 *b)
const
551void RenamedArrayWrapper::value(dods_float32 *b)
const
557void RenamedArrayWrapper::value(dods_float64 *b)
const
563void RenamedArrayWrapper::value(vector<string> &b)
const
571void RenamedArrayWrapper::value_worker(vector<unsigned int> *indices, T *b)
const
573 return _pArray->value(indices,b);
576void RenamedArrayWrapper::value(vector<unsigned int> *indices, dods_byte *b)
const { value_worker(indices,b); }
577void RenamedArrayWrapper::value(vector<unsigned int> *indices, dods_int8 *b)
const { value_worker(indices,b); }
578void RenamedArrayWrapper::value(vector<unsigned int> *indices, dods_int16 *b)
const { value_worker(indices,b); }
579void RenamedArrayWrapper::value(vector<unsigned int> *indices, dods_uint16 *b)
const { value_worker(indices,b); }
580void RenamedArrayWrapper::value(vector<unsigned int> *indices, dods_int32 *b)
const { value_worker(indices,b); }
581void RenamedArrayWrapper::value(vector<unsigned int> *indices, dods_uint32 *b)
const { value_worker(indices,b); }
582void RenamedArrayWrapper::value(vector<unsigned int> *indices, dods_int64 *b)
const { value_worker(indices,b); }
583void RenamedArrayWrapper::value(vector<unsigned int> *indices, dods_uint64 *b)
const { value_worker(indices,b); }
584void RenamedArrayWrapper::value(vector<unsigned int> *indices, dods_float32 *b)
const { value_worker(indices,b); }
585void RenamedArrayWrapper::value(vector<unsigned int> *indices, dods_float64 *b)
const { value_worker(indices,b); }
586void RenamedArrayWrapper::value(vector<unsigned int> *indices, vector<string> &b)
const {
return _pArray->value(indices,b); }
591RenamedArrayWrapper::value()
594 return _pArray->value();
600RenamedArrayWrapper::read()
604 bool ret = _pArray->read();
612bool RenamedArrayWrapper::read()
615 return _pArray->read();
620RenamedArrayWrapper::intern_data(ConstraintEvaluator &eval, DDS &dds)
626 if (!_pArray->read_p())
635 _pArray->intern_data(eval, dds);
638void RenamedArrayWrapper::intern_data(ConstraintEvaluator &eval, DDS &dds)
640 _pArray->intern_data(eval, dds);
645RenamedArrayWrapper::serialize(ConstraintEvaluator &eval, DDS &dds,
646 Marshaller &m,
bool ce_eval )
653 if (BESISDEBUG(
"no_preload_for_renamed_arrays" ) || 1) {
655 BESDEBUG(
"ncml_rename",
"RenamedArrayWrapper::serialize() - !!!!! SKIPPING preload of renamed array orgName: '" << _orgName <<
"' newName: '" << name() <<
"'" << endl);
659 BESDEBUG(
"ncml_rename",
"RenamedArrayWrapper::serialize() - Preloading renamed array orgName: '" << _orgName <<
"' newName: '" << name() <<
"'" << endl);
662 if (!_pArray->read_p())
673 return _pArray->serialize(eval, dds, m, ce_eval);
677bool RenamedArrayWrapper::serialize(ConstraintEvaluator &eval, DDS &dds, Marshaller &m,
bool ce_eval )
679 BESDEBUG(
"ncml_rename",
"RenamedArrayWrapper::serialize(): Doing the magic for renamed read()!!" << endl);
681 return _pArray->serialize(eval, dds, m, ce_eval);
684bool RenamedArrayWrapper::deserialize(UnMarshaller &um, DDS *dds,
bool reuse )
688 return _pArray->deserialize(um, dds, reuse);
696 if (&proto ==
this) {
701 _pArray =
dynamic_cast<libdap::Array*
>(proto._pArray->ptr_duplicate());
703 _orgName = proto._orgName;
706void RenamedArrayWrapper::destroy()
708 SAFE_DELETE(_pArray);
714RenamedArrayWrapper::withNewName()
720RenamedArrayWrapper::withOrgName()
726void RenamedArrayWrapper::syncConstraints()
730 if (_pArray->dimensions() != dimensions()) {
731 THROW_NCML_INTERNAL_ERROR(
732 "RenamedArrayWrapper::syncConstraints(): dimensions() of this and wrapped array do not match!");
736 Array::Dim_iter thisEndIt = dim_end();
737 Array::Dim_iter thisIt, wrapIt;
738 for (thisIt = dim_begin(), wrapIt = _pArray->dim_begin(); thisIt != thisEndIt; ++thisIt, ++wrapIt) {
739 Array::dimension& thisDim = *thisIt;
740 Array::dimension& wrapDim = *wrapIt;
745 update_length(this->length());
746 _pArray->set_length(this->length());
747 NCML_ASSERT_MSG(this->length() == _pArray->length(),
748 "RenamedArrayWrapper::syncConstraints(): size() of this and wrapped do not match!!");
static void setVariableNameProperly(libdap::BaseType *pVar, const std::string &name)
A Decorator Pattern for wrapping a libdap::Array in order to change its name efficiently in the face ...
virtual void add_constraint(Dim_iter i, int start, int stride, int stop)
Wrappers.
virtual void clear_constraint()
NcML Parser for adding/modifying/removing metadata (attributes) to existing local datasets using NcML...