Main Page | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

CSStringlist.h

Go to the documentation of this file.
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 // objects are NOT freed by CSStringList
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         // inserts at index i
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

Generated on Wed Jul 14 00:43:42 2004 for CSLib by doxygen 1.3.6