55 #include <InternalErr.h>
64 template <
class T,
class U >
71 *carray =
new T[nelts];
74 for (
int i = 0; i < nelts; ++i) {
75 *(*carray + i) = static_cast < T > (*(array + i));
93 if ((eltsize = DFKNTsize(nt)) <= 0)
95 bool zerovec = (data == 0 && begin == 0 && end == 0 && stride == 0);
100 if (begin < 0 || end < 0 || stride <= 0 || end < begin)
106 int nelts = (int) ((end - begin) / stride + 1);
107 _data =
new char[nelts * eltsize];
111 (void) memcpy(_data, (
void *) ((
char *) data + begin),
114 for (
int i = 0, j = begin; i < nelts; ++i, j += stride)
115 memcpy((
void *) ((
char *) _data + i * eltsize),
116 (
void *) ((
char *) data + j * eltsize), eltsize);
138 _init(gv.
_nt, 0, 0, 0, 0);
168 _init(nt, data, begin, end, stride);
174 _init(nt, data, 0, nelts - 1, 1);
205 if ((eltsize = DFKNTsize(nt)) <= 0)
208 if (new_data == 0 && nelts == 0) {
218 char *d =
new char[(_nelts + nelts) * eltsize];
219 memcpy(d, _data, _nelts);
220 memcpy(d + _nelts, new_data, nelts);
240 _init(nt, data, begin, end, stride);
249 int eltsize = DFKNTsize(nt);
252 if (sv.size() == 0) {
257 char *obuf =
new char[DFKNTsize(nt) * sv.size()];
261 for (
int i = 0; i < (int) sv.size(); ++i) {
263 istringstream(strbuf) >> val;
264 *((float32 *) obuf + i) = val;
270 for (
int i = 0; i < (int) sv.size(); ++i) {
272 istringstream(strbuf) >> val;
273 *((float64 *) obuf + i) = val;
279 for (
int i = 0; i < (int) sv.size(); ++i) {
281 istringstream iss(strbuf);
283 *((int8 *) obuf + i) = val;
289 for (
int i = 0; i < (int) sv.size(); ++i) {
290 istringstream(strbuf) >> val;
291 *((int16 *) obuf + i) = val;
297 for (
int i = 0; i < (int) sv.size(); ++i) {
299 istringstream(strbuf) >> val;
300 *((int32 *) obuf + i) = val;
306 for (
int i = 0; i < (int) sv.size(); ++i) {
308 istringstream iss(strbuf);
310 *((uint8 *) obuf + i) = val;
316 for (
int i = 0; i < (int) sv.size(); ++i) {
318 istringstream(strbuf) >> val;
319 *((uint16 *) obuf + i) = val;
325 for (
int i = 0; i < (int) sv.size(); ++i) {
327 istringstream(strbuf) >> val;
328 *((uint32 *) obuf + i) = val;
334 for (
int i = 0; i < (int) sv.size(); ++i) {
336 istringstream iss(strbuf);
338 *((uchar8 *) obuf + i) = val;
344 for (
int i = 0; i < (int) sv.size(); ++i) {
346 istringstream iss(strbuf);
348 *((char8 *) obuf + i) = val;
357 this->
import(nt, obuf, (int) sv.size());
371 if (_nt == DFNT_UINT8)
373 else if (_nt == DFNT_UCHAR8)
377 else if (_nt == DFNT_INT8)
389 if (i < 0 || i > _nelts)
391 if (_nt == DFNT_UINT8)
392 rv = (uchar8) * ((uint8 *) _data + i);
393 else if (_nt == DFNT_UCHAR8)
394 rv = *((uchar8 *) _data + i);
397 else if (_nt == DFNT_INT8)
398 rv = *((int8 *) _data + i);
408 vector < uchar8 > rv = vector < uchar8 > (0);
410 if (_nt == DFNT_UINT8)
412 else if (_nt == DFNT_UCHAR8)
413 dtmp = (uchar8 *) _data;
416 else if (_nt == DFNT_INT8)
421 rv = vector < uchar8 > (dtmp, dtmp + _nelts);
422 if (dtmp != (uchar8 *) _data)
431 if (_nt == DFNT_INT8)
433 else if (_nt == DFNT_CHAR8)
444 if (i < 0 || i > _nelts)
446 if (_nt == DFNT_INT8)
447 rv = (char8) * ((int8 *) _data + i);
448 else if (_nt == DFNT_CHAR8 || _nt == DFNT_UCHAR8)
449 rv = *((char8 *) _data + i);
458 vector < char8 > rv = vector < char8 > (0);
460 if (_nt == DFNT_INT8)
462 else if (_nt == DFNT_CHAR8)
468 throw InternalErr(__FILE__, __LINE__,
"No data returned for the character array.");
469 rv = vector < char8 > (dtmp, dtmp + _nelts);
470 if (dtmp != (char8 *) _data)
479 if (_nt == DFNT_UCHAR8 || _nt == DFNT_CHAR8)
481 else if (_nt == DFNT_UINT8)
492 if (i < 0 || i > _nelts)
494 if (_nt == DFNT_UCHAR8 || _nt == DFNT_CHAR8)
495 rv = (uint8) * ((uchar8 *) _data + i);
496 else if (_nt == DFNT_UINT8)
497 rv = *((uint8 *) _data + i);
506 vector < uint8 > rv = vector < uint8 > (0);
508 if (_nt == DFNT_UCHAR8 || _nt == DFNT_CHAR8)
510 else if (_nt == DFNT_UINT8)
511 dtmp = (uint8 *) _data;
515 rv = vector < uint8 > (dtmp, dtmp + _nelts);
516 if (dtmp != (uint8 *) _data)
525 if (_nt == DFNT_CHAR8)
527 else if (_nt == DFNT_INT8)
538 if (i < 0 || i > _nelts)
540 if (_nt == DFNT_CHAR8)
541 rv = (int8) * ((char8 *) _data + i);
542 else if (_nt == DFNT_INT8)
543 rv = *((int8 *) _data + i);
552 vector < int8 > rv = vector < int8 > (0);
554 if (_nt == DFNT_CHAR8)
556 else if (_nt == DFNT_INT8)
557 dtmp = (int8 *) _data;
560 rv = vector < int8 > (dtmp, dtmp + _nelts);
561 if (dtmp != (int8 *) _data)
570 if (_nt == DFNT_UCHAR8)
572 else if (_nt == DFNT_UINT8)
574 else if (_nt == DFNT_UINT16)
584 if (i < 0 || i > _nelts)
586 if (_nt == DFNT_UCHAR8)
587 return (uint16) * ((uchar8 *) _data + i);
588 else if (_nt == DFNT_UINT8)
589 return (uint16) * ((uint8 *) _data + i);
590 else if (_nt == DFNT_UINT16)
591 return *((uint16 *) _data + i);
600 vector < uint16 > rv = vector < uint16 > (0);
602 if (_nt == DFNT_UCHAR8)
604 else if (_nt == DFNT_UINT8)
606 else if (_nt == DFNT_UINT16)
607 dtmp = (uint16 *) _data;
610 rv = vector < uint16 > (dtmp, dtmp + _nelts);
611 if (dtmp != (uint16 *) _data)
621 if (_nt == DFNT_UCHAR8)
623 else if (_nt == DFNT_CHAR8)
625 else if (_nt == DFNT_UINT8)
627 else if (_nt == DFNT_INT8)
629 else if (_nt == DFNT_INT16)
639 if (i < 0 || i > _nelts)
641 if (_nt == DFNT_UCHAR8)
642 return (int16) (*((uchar8 *) _data + i));
643 else if (_nt == DFNT_CHAR8)
644 return (int16) (*((char8 *) _data + i));
645 else if (_nt == DFNT_UINT8)
646 return (int16) (*((uint8 *) _data + i));
647 else if (_nt == DFNT_INT8)
648 return (int16) (*((int8 *) _data + i));
649 else if (_nt == DFNT_INT16)
650 return *((int16 *) _data + i);
659 vector < int16 > rv = vector < int16 > (0);
661 if (_nt == DFNT_UCHAR8)
663 else if (_nt == DFNT_CHAR8)
665 else if (_nt == DFNT_UINT8)
667 else if (_nt == DFNT_INT8)
669 else if (_nt == DFNT_INT16)
670 dtmp = (int16 *) _data;
673 rv = vector < int16 > (dtmp, dtmp + _nelts);
674 if (dtmp != (int16 *) _data)
684 if (_nt == DFNT_UCHAR8)
686 else if (_nt == DFNT_UINT8)
688 else if (_nt == DFNT_UINT16)
690 else if (_nt == DFNT_UINT32)
700 if (i < 0 || i > _nelts)
702 if (_nt == DFNT_UCHAR8)
703 return (uint32) (*((uchar8 *) _data + i));
704 else if (_nt == DFNT_UINT8)
705 return (uint32) (*((uint8 *) _data + i));
706 else if (_nt == DFNT_UINT16)
707 return (uint32) (*((uint16 *) _data + i));
708 else if (_nt == DFNT_UINT32)
709 return *((uint32 *) _data + i);
719 vector < uint32 > rv = vector < uint32 > (0);
721 if (_nt == DFNT_UCHAR8)
723 else if (_nt == DFNT_UINT8)
725 else if (_nt == DFNT_UINT16)
727 else if (_nt == DFNT_UINT32)
728 dtmp = (uint32 *) _data;
731 rv = vector < uint32 > (dtmp, dtmp + _nelts);
732 if (dtmp != (uint32 *) _data)
742 if (_nt == DFNT_UCHAR8)
744 else if (_nt == DFNT_CHAR8)
746 else if (_nt == DFNT_UINT8)
748 else if (_nt == DFNT_INT8)
750 else if (_nt == DFNT_UINT16)
752 else if (_nt == DFNT_INT16)
754 else if (_nt == DFNT_INT32)
764 if (i < 0 || i > _nelts)
766 if (_nt == DFNT_UCHAR8)
767 return (int32) (*((uchar8 *) _data + i));
768 else if (_nt == DFNT_CHAR8)
769 return (int32) (*((char8 *) _data + i));
770 else if (_nt == DFNT_UINT8)
771 return (int32) (*((uint8 *) _data + i));
772 else if (_nt == DFNT_INT8)
773 return (int32) (*((int8 *) _data + i));
774 else if (_nt == DFNT_UINT16)
775 return (int32) (*((uint16 *) _data + i));
776 else if (_nt == DFNT_INT16)
777 return (int32) (*((int16 *) _data + i));
778 else if (_nt == DFNT_INT32)
779 return *((int32 *) _data + i);
789 vector < int32 > rv = vector < int32 > (0);
791 if (_nt == DFNT_UCHAR8)
793 else if (_nt == DFNT_CHAR8)
795 else if (_nt == DFNT_UINT8)
797 else if (_nt == DFNT_INT8)
799 else if (_nt == DFNT_UINT16)
801 else if (_nt == DFNT_INT16)
803 else if (_nt == DFNT_INT32)
804 dtmp = (int32 *) _data;
807 rv = vector < int32 > (dtmp, dtmp + _nelts);
808 if (dtmp != (int32 *) _data)
817 if (_nt != DFNT_FLOAT32)
827 if (i < 0 || i > _nelts)
829 if (_nt != DFNT_FLOAT32)
831 return *((float32 *) _data + i);
837 if (_nt != DFNT_FLOAT32) {
839 return vector < float32 > (0);
841 return vector < float32 > ((float32 *) _data,
842 (float32 *) _data + _nelts);
849 if (_nt == DFNT_FLOAT64)
851 else if (_nt == DFNT_FLOAT32)
861 if (i < 0 || i > _nelts)
863 if (_nt == DFNT_FLOAT64)
864 return *((float64 *) _data + i);
865 else if (_nt == DFNT_FLOAT32)
866 return (float64) (*((float32 *) _data + i));
875 vector < float64 > rv = vector < float64 > (0);
877 if (_nt == DFNT_FLOAT32)
879 else if (_nt == DFNT_FLOAT64)
880 dtmp = (float64 *) _data;
883 rv = vector < float64 > (dtmp, dtmp + _nelts);
884 if (dtmp != (float64 *) _data)
892 if (_nt != DFNT_CHAR8 && _nt != DFNT_UCHAR8) {
899 return string((
char *) _data, _nelts);
907 print(sv, 0, _nelts - 1, 1);
916 if (begin < 0 || begin > _nelts || stride < 1 || end < 0 || end < begin
917 || stride <= 0 || end > _nelts - 1)
919 if (_nt == DFNT_CHAR8 || _nt == DFNT_UCHAR8) {
921 sub = string((
char *) _data + begin, (end - begin + 1));
924 for (
int i = 0; i < (end - begin + 1); i += stride)
937 for (i = begin; i <= end; i += stride) {
939 (int) *((uchar8 *) _data + i) << ends;
940 sv.push_back(
string(buf));
945 for (i = begin; i <= end; i += stride) {
947 buf << (
unsigned int) *((uint8 *) _data + i);
948 sv.push_back(buf.str());
952 for (i = begin; i <= end; i += stride) {
954 buf << (int) *((int8 *) _data + i);
955 sv.push_back(buf.str());
959 for (i = begin; i <= end; i += stride) {
961 buf << *((uint16 *) _data + i);
962 sv.push_back(buf.str());
966 for (i = begin; i <= end; i += stride) {
968 buf << *((int16 *) _data + i);
969 sv.push_back(buf.str());
973 for (i = begin; i <= end; i += stride) {
975 buf << *((uint32 *) _data + i);
976 sv.push_back(buf.str());
980 for (i = begin; i <= end; i += stride) {
982 buf << *((int32 *) _data + i);
983 sv.push_back(buf.str());
987 for (i = begin; i <= end; i += stride) {
989 buf << *((float32 *) _data + i);
990 sv.push_back(buf.str());
994 for (i = begin; i <= end; i += stride) {
996 buf << *((float64 *) _data + i);
997 sv.push_back(buf.str());
uint16 elt_uint16(int i) const
float64 * export_float64(void) const
hdf_genvec & operator=(const hdf_genvec &gv)
int16 * export_int16(void) const
uint16 * export_uint16(void) const
void import(int32 nt, void *data, int nelts)
char8 * export_char8(void) const
uint8 elt_uint8(int i) const
int32 elt_int32(int i) const
int32 * export_int32(void) const
vector< float64 > exportv_float64(void) const
void ConvertArrayByCast(U *array, int nelts, T **carray)
char8 elt_char8(int i) const
float64 elt_float64(int i) const
vector< uint8 > exportv_uint8(void) const
uint8 * export_uint8(void) const
uchar8 * export_uchar8(void) const
vector< uint32 > exportv_uint32(void) const
void print(vector< string > &strv) const
vector< int32 > exportv_int32(void) const
void append(int32 nt, const char *new_data, int32 nelts)
int16 elt_int16(int i) const
vector< uint16 > exportv_uint16(void) const
int8 * export_int8(void) const
vector< int8 > exportv_int8(void) const
int8 elt_int8(int i) const
vector< float32 > exportv_float32(void) const
uchar8 elt_uchar8(int i) const
uint32 * export_uint32(void) const
vector< char8 > exportv_char8(void) const
vector< uchar8 > exportv_uchar8(void) const
virtual ~hdf_genvec(void)
vector< int16 > exportv_int16(void) const
float32 * export_float32(void) const
void _init(const hdf_genvec &gv)
string export_string(void) const
uint32 elt_uint32(int i) const
float32 elt_float32(int i) const