Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef __SGSTRING_H__
00014 #define __SGSTRING_H__
00015
00016 #include <shogun/lib/config.h>
00017 #include <shogun/lib/DataType.h>
00018 #include <shogun/lib/SGVector.h>
00019
00020 namespace shogun
00021 {
00022
00024 template<class T> class SGString
00025 {
00026 public:
00028 SGString() : string(NULL), slen(0), do_free(false) { }
00029
00031 SGString(T* s, index_t l, bool free_s=false)
00032 : string(s), slen(l), do_free(free_s) { }
00033
00035 SGString(SGVector<T> v)
00036 : string(v.vector), slen(v.vlen), do_free(v.do_free) { }
00037
00039 SGString(index_t len, bool free_s=false) :
00040 slen(len), do_free(free_s)
00041 {
00042 string=SG_CALLOC(T, len);
00043 }
00044
00046 SGString(const SGString &orig)
00047 : string(orig.string), slen(orig.slen), do_free(orig.do_free) { }
00048
00050 bool operator==(const SGString & other) const
00051 {
00052 if (other.slen != slen)
00053 return false;
00054
00055 for (int i = 0; i < slen; i++)
00056 {
00057 if (other.string[i] != string[i])
00058 return false;
00059 }
00060
00061 return true;
00062 }
00063
00065 void free_string()
00066 {
00067 if (do_free)
00068 SG_FREE(string);
00069
00070 string=NULL;
00071 do_free=false;
00072 slen=0;
00073 }
00074
00076 void destroy_string()
00077 {
00078 do_free=true;
00079 free_string();
00080 }
00081
00082 public:
00084 T* string;
00086 index_t slen;
00088 bool do_free;
00089 };
00090 }
00091 #endif // __SGSTRING_H__