42#include <libdap/InternalErr.h>
43#include "AsciiSequence.h"
44#include "AsciiStructure.h"
46#include <libdap/debug.h>
49using namespace dap_asciival;
52AsciiSequence::ptr_duplicate()
54 return new AsciiSequence(*
this);
57AsciiSequence::AsciiSequence(
const string &n) :
62AsciiSequence::AsciiSequence(
Sequence * bt) :
67 Vars_iter p = bt->var_begin();
68 while (p != bt->var_end()) {
69 BaseType *new_bt = basetype_to_asciitype(*p);
75 BaseType::set_send_p(bt->send_p());
78AsciiSequence::~AsciiSequence()
82int AsciiSequence::size()
const
90int AsciiSequence::element_count(
bool leaves)
96 for (Vars_iter iter = d_vars.begin(); iter != d_vars.end(); iter++) {
97 if ((*iter)->send_p()) i += (*iter)->element_count(
true);
103void AsciiSequence::print_ascii_row(ostream &strm,
int row, BaseTypeRow outer_vars)
105 BESDEBUG(
"ascii",
" In AsciiSequence::print_ascii_row" << endl);
107 Sequence *seq =
dynamic_cast<Sequence *
>(_redirect);
108 if (!seq) seq =
this;
112 const int elements = element_count();
113 bool first_var =
true;
116 BaseType *bt_ptr = seq->var_value(row, j);
118 BaseType *abt_ptr = basetype_to_asciitype(bt_ptr);
119 if (abt_ptr->type() == dods_sequence_c) {
120 if (abt_ptr->send_p()) {
126 dynamic_cast<AsciiSequence&
>(*abt_ptr).print_ascii_rows(strm, outer_vars);
132 outer_vars.push_back(bt_ptr);
133 if (abt_ptr->send_p()) {
139 dynamic_cast<AsciiOutput&
>(*abt_ptr).print_ascii(strm,
false);
148 }
while (j < elements);
151void AsciiSequence::print_leading_vars(ostream &strm, BaseTypeRow & outer_vars)
153 BESDEBUG(
"ascii",
" In AsciiSequence::print_leading_vars" << endl);
155 bool first_var =
true;
156 BaseTypeRow::iterator BTR_iter = outer_vars.begin();
157 while (BTR_iter != outer_vars.end()) {
158 BaseType *abt_ptr = basetype_to_asciitype(*BTR_iter);
163 dynamic_cast<AsciiOutput&
>(*abt_ptr).print_ascii(strm,
false);
169 BESDEBUG(
"ascii",
" Out AsciiSequence::print_leading_vars" << endl);
172void AsciiSequence::print_ascii_rows(ostream &strm, BaseTypeRow outer_vars)
174 Sequence *seq =
dynamic_cast<Sequence *
>(_redirect);
175 if (!seq) seq =
this;
177 const int rows = seq->number_of_rows() - 1;
181 if (i > 0 && !outer_vars.empty()) print_leading_vars(strm, outer_vars);
183 print_ascii_row(strm, i++, outer_vars);
191 BESDEBUG(
"ascii",
" Out AsciiSequence::print_ascii_rows" << endl);
194void AsciiSequence::print_header(ostream &strm)
196 bool first_var =
true;
197 Vars_iter p = var_begin();
198 while (p != var_end()) {
199 if ((*p)->send_p()) {
205 if ((*p)->is_simple_type())
206 strm << dynamic_cast<AsciiOutput *>(*p)->get_full_name();
207 else if ((*p)->type() == dods_sequence_c)
208 dynamic_cast<AsciiSequence *
>(*p)->print_header(strm);
209 else if ((*p)->type() == dods_structure_c)
210 dynamic_cast<AsciiStructure *
>(*p)->print_header(strm);
215 "This method should only be called by instances for which `is_simple_sequence' returns true.");
224 BESDEBUG(
"ascii",
"In AsciiSequence::print_ascii" << endl);
225 Sequence *seq =
dynamic_cast<Sequence *
>(_redirect);
226 if (!seq) seq =
this;
228 if (seq->is_linear()) {
234 BaseTypeRow outer_vars(0);
235 print_ascii_rows(strm, outer_vars);
238 const int rows = seq->number_of_rows() - 1;
239 const int elements = seq->element_count() - 1;
242 bool rows_done =
false;
246 bool vars_done =
false;
249 BaseType *bt_ptr = seq->var_value(i, j++);
250 BaseType *abt_ptr = basetype_to_asciitype(bt_ptr);
251 dynamic_cast<AsciiOutput&
>(*abt_ptr).print_ascii(strm,
true);
259 }
while (!vars_done);
266 }
while (!rows_done);
virtual void print_ascii(ostream &strm, bool print_name)