42#include <libdap/InternalErr.h>
49#include "AsciiArray.h"
50#include <libdap/debug.h>
53using namespace dap_asciival;
56AsciiGrid::ptr_duplicate()
58 return new AsciiGrid(*
this);
61AsciiGrid::AsciiGrid(
const string &n) :
66AsciiGrid::AsciiGrid(Grid *grid) :
69 BaseType *bt = basetype_to_asciitype(grid->array_var());
74 add_var(bt, libdap::array);
79 Grid::Map_iter i = grid->map_begin();
80 Grid::Map_iter e = grid->map_end();
82 bt = basetype_to_asciitype(*i);
89 BaseType::set_send_p(grid->send_p());
92AsciiGrid::~AsciiGrid()
99 BESDEBUG(
"ascii",
"In AsciiGrid::print_ascii" << endl);
101 Grid *g =
dynamic_cast<Grid *
> (_redirect);
112 if (projection_yields_grid()) {
113 if (
dynamic_cast<Array &
> (*g->array_var()).dimensions(
true) > 1)
114 print_grid(strm, print_name);
116 print_vector(strm, print_name);
119 Map_iter m = map_begin();
120 while (m != map_end()) {
121 if ((*m)->send_p()) {
128 if (array_var()->send_p()) {
143void AsciiGrid::print_vector(ostream &strm,
bool print_name)
145 BESDEBUG(
"ascii",
"In AsciiGrid::print_vector" << endl);
154void AsciiGrid::print_grid(ostream &strm,
bool print_name)
156 BESDEBUG(
"ascii",
"In AsciiGrid::print_grid" << endl);
158 Grid *g =
dynamic_cast<Grid *
> (_redirect);
163 Array *grid_array =
dynamic_cast<Array *
> (g->array_var());
164 if (!grid_array)
throw InternalErr(__FILE__, __LINE__,
"Expected an Array");
166 AsciiArray *a_grid_array =
dynamic_cast<AsciiArray *
> (array_var());
167 if (!a_grid_array)
throw InternalErr(__FILE__, __LINE__,
"Expected an AsciiArray");
169 AsciiOutput *ao_grid_array =
dynamic_cast<AsciiOutput *
> (a_grid_array);
170 if (!ao_grid_array)
throw InternalErr(__FILE__, __LINE__,
"Expected an AsciiOutput");
174 int dims = grid_array->dimensions(
true);
176 throw InternalErr(__FILE__, __LINE__,
177 "Dimension count is <= 1 while printing multidimensional array.");
188 vector<int> state(dims - 1, 0);
194 dynamic_cast<AsciiArray &
> (**(map_begin() + dims - 1)) .
print_ascii(
209 vector<int>::iterator state_iter = state.begin();
210 Grid::Map_iter p = g->map_begin();
211 Grid::Map_iter ap = map_begin();
212 while (state_iter != state.end()) {
213 Array *map =
dynamic_cast<Array *
> (*p);
214 if (!map)
throw InternalErr(__FILE__, __LINE__,
"Expected an Array");
216 AsciiArray *amap =
dynamic_cast<AsciiArray *
> (*ap);
217 if (!amap)
throw InternalErr(__FILE__, __LINE__,
"Expected an AsciiArray");
219 AsciiOutput *aomap =
dynamic_cast<AsciiOutput *
> (amap);
220 if (!aomap)
throw InternalErr(__FILE__, __LINE__,
"Expected an AsciiOutput");
223 BaseType *avar = basetype_to_asciitype(map->var(*state_iter));
224 AsciiOutput &aovar =
dynamic_cast<AsciiOutput &
> (*avar);
236 index = a_grid_array->
print_row(strm, index, rightmost_dim_size - 1);
242 }
while (more_indices);
virtual void print_ascii(ostream &strm, bool print_name=true)
int get_nth_dim_size(size_t n)
vector< int > get_shape_vector(size_t n)
int print_row(ostream &strm, int index, int number)
virtual void print_ascii(ostream &strm, bool print_name=true)
virtual void print_ascii(ostream &strm, bool print_name=true)
bool increment_state(vector< int > *state, const vector< int > &shape)