00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef NODEMAP_HPP_
00031 #define NODEMAP_HPP_
00032
00033 #include <vector>
00034 #include "Exception.hpp"
00035
00036 class NodeMap
00037 {
00038 private:
00039 std::vector<unsigned> mMap;
00040
00041 public:
00042 NodeMap(unsigned size)
00043 {
00044
00045
00046
00047 mMap.resize(size);
00048 }
00049
00050 void Resize(unsigned size)
00051 {
00052 mMap.resize(size);
00053 }
00054
00055 void ResetToIdentity()
00056 {
00057 for (unsigned oldIndex=0; oldIndex<mMap.size(); oldIndex++)
00058 {
00059 mMap[oldIndex] = oldIndex;
00060 }
00061 }
00062 void SetNewIndex(unsigned oldIndex, unsigned newIndex)
00063 {
00064 mMap[oldIndex] = newIndex;
00065 }
00066
00067 void SetDeleted(unsigned index)
00068 {
00069 mMap[index] = UINT_MAX;
00070 }
00071
00072 bool IsDeleted(unsigned index)
00073 {
00074 return (mMap[index]==UINT_MAX);
00075 }
00076
00077 unsigned GetNewIndex(unsigned oldIndex) const
00078 {
00079 if (mMap[oldIndex] == UINT_MAX)
00080 {
00081 EXCEPTION("Node has been deleted");
00082 }
00083 return (unsigned) mMap[oldIndex];
00084 }
00085
00086 bool IsIdentityMap()
00087 {
00088 for(unsigned i=0; i<mMap.size(); i++)
00089 {
00090 if(mMap[i]!=i)
00091 {
00092 return false;
00093 }
00094 }
00095 return true;
00096 }
00097
00098 unsigned Size()
00099 {
00100 return mMap.size();
00101 }
00102
00103 };
00104
00105
00106 #endif