#include "conversion/convertor.hh" #include "conversion/hdf.hh" #include "raslib/minterval.hh" #include "raslib/primitivetype.hh" #ifdef EARLY_TEMPLATE #define __EXECUTABLE__ #include "raslib/template_inst.hh" #endif char *TypeIDToName(int tpid) { switch (tpid) { case r_Primitive_Type::BOOL: return "bool"; break; case r_Primitive_Type::CHAR: return "char"; break; case r_Primitive_Type::OCTET: return "octet"; break; case r_Primitive_Type::SHORT: return "short"; break; case r_Primitive_Type::USHORT: return "ushort"; break; case r_Primitive_Type::LONG: return "long"; break; case r_Primitive_Type::ULONG: return "ulong"; break; case r_Primitive_Type::FLOAT: return "float"; break; case r_Primitive_Type::DOUBLE: return "double"; break; default: return"?"; break; } } int TestHDF(r_Minterval &domain, r_Type *tp, const char *params=NULL) { r_Primitive_Type *prim; char *src, *dest; r_Minterval destInterv; r_Conv_HDF *hdf; r_Type *destType; r_convDesc desc; int i, j, k; int rank, array_size, datasize; int *dimsizes, *dimsteps, *dimidx; char **srcPtrs; int ptid, retid; if (tp->isStructType()) { cerr << "No structured types allowed!" << endl; return -1; } prim = (r_Primitive_Type*)tp; ptid = prim->type_id(); cout << "Source domain = " << domain << ", type = " << TypeIDToName(ptid) << endl; switch (ptid) { case r_Primitive_Type::BOOL: case r_Primitive_Type::CHAR: case r_Primitive_Type::OCTET: datasize = 1; break; case r_Primitive_Type::SHORT: case r_Primitive_Type::USHORT: datasize = 2; break; case r_Primitive_Type::LONG: case r_Primitive_Type::ULONG: case r_Primitive_Type::FLOAT: datasize = 4; break; case r_Primitive_Type::DOUBLE: datasize = 8; break; default: cerr << "Unrecognized base type" << endl; return -1; } rank = domain.dimension(); dimsizes = new int[rank]; dimsteps = new int[rank]; dimidx = new int[rank]; srcPtrs = new char*[rank]; for (i=0; i=0; i--) { dimsteps[i] = array_size; array_size *= dimsizes[i]; } src = new char[array_size]; for (i=0; i 0) { // Init the array with the value x_0 + x_1 + ... + x_(n-1) k = dimidx[0]; for (j=1; j0; j--) {srcPtrs[j-1] = srcPtrs[j];;} } } } while (i < rank); hdf = new r_Conv_HDF(src, domain, tp); dest = NULL; try { desc = hdf->convertTo(params); dest = desc.dest; destInterv = desc.destInterv; destType = desc.destType; } catch(r_Error &err) { cerr << "Exception! " << err.what() << endl; } cout << "Encoded interval " << desc.destInterv << endl; delete hdf; if (dest != NULL) { try { hdf = new r_Conv_HDF(dest, destInterv, destType); desc = hdf->convertFrom(); cout << "retrieved type = "; desc.destType->print_status(); retid = ((r_Primitive_Type*)(desc.destType))->type_id(); cout << ", (" << ((retid == ptid) ? "OK" : "Differs") << ')' << endl; cout << "retrieved domain " << desc.destInterv << ' '; i = 0; if (desc.destInterv.dimension() == rank) { for (i=0; i