Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef __DATATYPE_H__
00012 #define __DATATYPE_H__
00013
00014 #include "lib/common.h"
00015
00016 #define PT_NOT_GENERIC PT_SGOBJECT
00017 #define PT_LONGEST floatmax_t
00018
00019 namespace shogun
00020 {
00021
00022 typedef int32_t index_t;
00023
00024 template<class T> struct TString {
00026 T* string;
00028 index_t length;
00029 };
00030
00032 template <class T> struct TSparseEntry {
00034 index_t feat_index;
00036 T entry;
00037 };
00038
00040 template <class T> struct TSparse {
00042 index_t vec_index;
00044 index_t num_feat_entries;
00046 TSparseEntry<T>* features;
00047 };
00048
00049 enum EContainerType {
00050 CT_SCALAR, CT_VECTOR, CT_MATRIX
00051 };
00052
00053 enum EStructType {
00054 ST_NONE, ST_STRING, ST_SPARSE
00055 };
00056
00057 enum EPrimitiveType {
00058 PT_BOOL, PT_CHAR, PT_INT8, PT_UINT8, PT_INT16, PT_UINT16, PT_INT32,
00059 PT_UINT32, PT_INT64, PT_UINT64, PT_FLOAT32, PT_FLOAT64, PT_FLOATMAX,
00060 PT_SGOBJECT
00061 };
00062
00063
00064 struct TSGDataType
00065 {
00066 EContainerType m_ctype;
00067 EStructType m_stype;
00068 EPrimitiveType m_ptype;
00069 index_t *m_length_y, *m_length_x;
00070
00071 explicit TSGDataType(EContainerType ctype, EStructType stype,
00072 EPrimitiveType ptype);
00073 explicit TSGDataType(EContainerType ctype, EStructType stype,
00074 EPrimitiveType ptype, index_t* length);
00075 explicit TSGDataType(EContainerType ctype, EStructType stype,
00076 EPrimitiveType ptype, index_t* length_y,
00077 index_t* length_x);
00078
00079 bool operator==(const TSGDataType& a);
00080 inline bool operator!=(const TSGDataType& a) {
00081 return !(*this == a);
00082 }
00083
00084 void to_string(char* dest, size_t n) const;
00085 size_t sizeof_stype(void) const;
00086 size_t sizeof_ptype(void) const;
00087
00088 static size_t sizeof_sparseentry(EPrimitiveType ptype);
00089 static size_t offset_sparseentry(EPrimitiveType ptype);
00090
00091 static void stype_to_string(char* dest, EStructType stype,
00092 EPrimitiveType ptype, size_t n);
00093 static void ptype_to_string(char* dest, EPrimitiveType ptype,
00094 size_t n);
00095 static bool string_to_ptype(EPrimitiveType* result,
00096 const char* str);
00097 };
00098 }
00099 #endif