stl.h
00001 #ifndef VVELIB_STORAGE_STL_H
00002 #define VVELIB_STORAGE_STL_H
00003
00004 #include <config.h>
00005 #include <vector>
00006 #include <list>
00007 #include <set>
00008
00009 namespace std
00010 {
00011
00012 template <typename T>
00013 bool serialization(storage::VVEStorage& store, vector<T>& vec)
00014 {
00015 size_t size = vec.size();
00016 if(!store.field("Size", size))
00017 return false;
00018 if(store.reader())
00019 vec.resize(size, T());
00020 for(size_t i = 0 ; i < size ; ++i)
00021 {
00022 if(!store.field("V", vec[i]))
00023 return false;
00024 }
00025 return true;
00026 }
00027
00028 template <typename T, typename Sort>
00029 bool serialization(storage::VVEStorage& store, multiset<T, Sort>& vec)
00030 {
00031 size_t size = vec.size();
00032 if(!store.field("Size", size))
00033 return false;
00034 if(store.reader())
00035 {
00036 vec.clear();
00037 for(size_t i = 0 ; i < size ; ++i)
00038 {
00039 T value;
00040 if(!store.field("V", value))
00041 return false;
00042 vec.insert(value);
00043 }
00044 }
00045 else
00046 {
00047 for(typename multiset<T, Sort>::iterator it = vec.begin() ; it != vec.end() ; ++it)
00048 {
00049 if(!store.field("V", const_cast<T&>(*it)))
00050 return false;
00051 }
00052 }
00053 return true;
00054 }
00055
00056 template <typename T, typename Sort>
00057 bool serialization(storage::VVEStorage& store, set<T, Sort>& vec)
00058 {
00059 size_t size = vec.size();
00060 if(!store.field("Size", size))
00061 return false;
00062 if(store.reader())
00063 {
00064 vec.clear();
00065 for(size_t i = 0 ; i < size ; ++i)
00066 {
00067 T value;
00068 if(!store.field("V", value))
00069 return false;
00070 vec.insert(value);
00071 }
00072 }
00073 else
00074 {
00075 for(typename set<T, Sort>::iterator it = vec.begin() ; it != vec.end() ; ++it)
00076 {
00077 if(!store.field("V", const_cast<T&>(*it)))
00078 return false;
00079 }
00080 }
00081 return true;
00082 }
00083
00084 template <typename T>
00085 bool serialization(storage::VVEStorage& store, list<T>& vec)
00086 {
00087 size_t size = vec.size();
00088 if(!store.field("Size", size))
00089 return false;
00090 if(store.reader())
00091 vec.resize(size, T());
00092 for(typename list<T>::iterator it = vec.begin() ; it != vec.end() ; ++it)
00093 {
00094 if(!store.field("V", *it))
00095 return false;
00096 }
00097 return true;
00098 }
00099
00100 }
00101
00102 #endif // VVELIB_STORAGE_STL_H
00103