Muscle C/C++ API: complex_data.hpp Source File

complex_data.hpp

Go to the documentation of this file.
00001 #ifndef MUSCLE_COMPLEX_DATA_HPP
00002 #define MUSCLE_COMPLEX_DATA_HPP
00003 
00004 #include <vector>
00005 #include <cstring>
00006 #include "muscle_types.h"
00007
00008 // For 
00009 // Keep in sync with muscle.util.data.SerializableDatatype!
00010 typedef enum {
00011         COMPLEX_NULL, COMPLEX_MAP, COMPLEX_COLLECTION,
00012         COMPLEX_STRING, COMPLEX_BOOLEAN, COMPLEX_BYTE, COMPLEX_SHORT, COMPLEX_INT, COMPLEX_LONG, COMPLEX_FLOAT, COMPLEX_DOUBLE,
00013         COMPLEX_STRING_ARR, COMPLEX_BOOLEAN_ARR, COMPLEX_BYTE_ARR, COMPLEX_SHORT_ARR, COMPLEX_INT_ARR, COMPLEX_LONG_ARR, COMPLEX_FLOAT_ARR, COMPLEX_DOUBLE_ARR,
00014         COMPLEX_BOOLEAN_MATRIX_2D, COMPLEX_BYTE_MATRIX_2D, COMPLEX_SHORT_MATRIX_2D, COMPLEX_INT_MATRIX_2D, COMPLEX_LONG_MATRIX_2D, COMPLEX_FLOAT_MATRIX_2D, COMPLEX_DOUBLE_MATRIX_2D,
00015         COMPLEX_BOOLEAN_MATRIX_3D, COMPLEX_BYTE_MATRIX_3D, COMPLEX_SHORT_MATRIX_3D, COMPLEX_INT_MATRIX_3D, COMPLEX_LONG_MATRIX_3D, COMPLEX_FLOAT_MATRIX_3D, COMPLEX_DOUBLE_MATRIX_3D,
00016         COMPLEX_BOOLEAN_MATRIX_4D, COMPLEX_BYTE_MATRIX_4D, COMPLEX_SHORT_MATRIX_4D, COMPLEX_INT_MATRIX_4D, COMPLEX_LONG_MATRIX_4D, COMPLEX_FLOAT_MATRIX_4D, COMPLEX_DOUBLE_MATRIX_4D,
00017         COMPLEX_JAVA_BYTE_OBJECT } muscle_complex_t;
00018
00019 namespace muscle {
00020
00021 class ComplexData {
00022         public:
00024                 ComplexData(muscle_complex_t type, std::vector<int>* dimensions);
00028                 ComplexData(void *data, muscle_complex_t type, std::vector<int>* dimensions);
00030                 ComplexData(void *data, muscle_datatype_t type, size_t len);
00031                 ~ComplexData();
00033                 void *getData();
00035                 const void *getData() const;
00037                 muscle_complex_t getType() const;
00039                 std::vector<int> getDimensions() const;
00041                 size_t length() const;
00043                 size_t sizeOfPrimitive() const;
00045                 int index(int x, int y) const;
00046                 int index(int x, int y, int z) const;
00047                 int index(int x, int y, int z, int zz) const;
00049                 int fidx(int x, int y) const { return x*dims[1]+y; }
00050                 int fidx(int x, int y, int z) const { return (x*dims[1] + y)*dims[2]+z; }
00051                 int fidx(int x, int y, int z, int zz) const { return ((x*dims[1] + y)*dims[2]+z)*dims[3]+zz; }
00052                 // properties of muscle_complex_t
00054                 static size_t sizeOfPrimitive(muscle_complex_t type);
00056                 static int dimensions(muscle_complex_t type);
00058                 static muscle_complex_t getType(muscle_datatype_t type);
00059         private:
00060                 static void checkDimensions(muscle_complex_t type, std::vector<int>* dimensions);
00061                 muscle_complex_t type;
00062                 void *value;
00063                 std::vector<int> dims;
00064 };
00065
00066 }
00067
00068 #endif

Generated on Thu Oct 18 14:28:28 2012 for Muscle C/C++ API by  doxygen 1.5.6