00001 #ifndef CSStringlist_h
00002 #define CSStringlist_h
00003
00004 #ifdef WIN32
00005 #pragma warning(disable : 4786 )
00006 #endif
00007
00008 #include <vector>
00009 #include <string>
00010 #include <map>
00011
00012 #include "CSTypes.h"
00013
00014 typedef std::map<int, std::string> StringMap;
00015 typedef std::map<int, void *> ObjectMap;
00016
00017
00018 class CSStringlist
00019 {
00020 private:
00021 StringMap mMap;
00022 ObjectMap mObjectMap;
00023 public:
00024 std::string getString(int i)
00025 {
00026 StringMap::iterator iter = mMap.find(i);
00027 if (iter != mMap.end())
00028 {
00029 return iter->second;
00030 }
00031 return "";
00032 }
00033 void clear()
00034 {
00035 mMap.clear();
00036 mObjectMap.clear();
00037 }
00038 void *getObject(int i)
00039 {
00040 ObjectMap::iterator iter = mObjectMap.find(i);
00041 if (iter != mObjectMap.end())
00042 {
00043 if ((iter->second) == ((void *) 1))
00044 {
00045 return 0;
00046 }
00047 return iter->second;
00048 }
00049 return 0;
00050 }
00051
00052 void set(int i, const std::string & text, void *object = ((void *) 1))
00053 {
00054 mMap.erase(i);
00055 mMap.insert(StringMap::value_type(i, text));
00056 mObjectMap.erase(i);
00057 mObjectMap.insert(ObjectMap::value_type(i, object));
00058 }
00059
00060 void add(const std::string & text, void *object = ((void *) 1))
00061 {
00062 mMap.insert(StringMap::value_type(mMap.size(), text));
00063 mObjectMap.insert(ObjectMap::value_type(mObjectMap.size(), object));
00064 }
00065
00066
00067 void insert(int i, const std::string & text, void *object = ((void *) 1))
00068 {
00069 for (int t=mMap.size(); t>=i;t--)
00070 {
00071 set(t, getString(t-1), getObject(t-1));
00072 }
00073 set(i, text, object);
00074 }
00075
00076 void remove(int i)
00077 {
00078 for (int t=i; t<mMap.size();t++)
00079 {
00080 set(t, getString(t+1), getObject(t+1));
00081 }
00082 mMap.erase(mMap.size()-1);
00083 mObjectMap.erase(mObjectMap.size()-1);
00084 }
00085
00086 int getSize()
00087 {
00088 return mMap.size();
00089 }
00090 };
00091
00092 #endif // CSStringlist_h