00001 #ifndef FBXFILESDK_FBXCORE_FBXCOLLECTION_KFBXPROPERTYMAP_H
00002 #define FBXFILESDK_FBXCORE_FBXCOLLECTION_KFBXPROPERTYMAP_H
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
00031
00032
00033
00034
00035
00036
00037
00038
00039 #include <fbxfilesdk/components/kbaselib/kaydaradef_h.h>
00040 #include <fbxfilesdk/components/kbaselib/klib/kmap.h>
00041 #include <fbxfilesdk/kfbxplugins/kfbxproperty.h>
00042 #include <fbxfilesdk/kfbxplugins/kfbxobject.h>
00043
00044 #include <fbxfilesdk/fbxfilesdk_nsbegin.h>
00045
00046 template <class K,class T,class Compare> class KFBX_DLL KFbxMap
00047 {
00048 public:
00049 inline KFbxMap()
00050 {
00051 }
00052
00053 private:
00054 typedef KMap<K,T,Compare> KMapDef;
00055 KMapDef mMap;
00056 public:
00057 typedef typename KMapDef::RecordType* kIterator;
00058
00059 public:
00060 inline void Add (K const &pKey,T const &pType)
00061 {
00062 mMap.Insert( pKey,pType );
00063 }
00064
00065 inline kIterator Find (K const &pKey) const
00066 {
00067 return (kIterator)mMap.Find( pKey );
00068 }
00069
00070 inline kIterator Find (T const &pType) const
00071 {
00072 kIterator lIterator = GetFirst();
00073 while (lIterator) {
00074 if (lIterator->GetValue()==pType) {
00075 return lIterator;
00076 }
00077 lIterator = GetNext(lIterator);
00078 }
00079 return 0;
00080 }
00081
00082 inline void Remove (kIterator pIterator)
00083 {
00084 if (pIterator) mMap.Remove( pIterator->GetKey() );
00085 }
00086
00087 inline kIterator GetFirst() const
00088 {
00089 return (kIterator)mMap.Minimum();
00090 }
00091
00092 inline kIterator GetNext(kIterator pIterator) const
00093 {
00094 return (kIterator)pIterator ? pIterator->Successor() : 0;
00095 }
00096
00097 inline void Clear()
00098 {
00099 mMap.Clear();
00100 }
00101
00102 inline void Reserve(int pSize)
00103 {
00104 mMap.Reserve( pSize );
00105 }
00106
00107 inline int GetCount() const
00108 {
00109 return mMap.GetSize();
00110 }
00111 };
00112
00116 template <class T,class Compare> class KFBX_DLL KFbxPropertyMap : public KFbxMap<T,KFbxProperty,Compare>
00117 {
00118 public:
00119 inline KFbxPropertyMap()
00120 {
00121 }
00122
00123 inline KFbxProperty Get(typename KFbxMap<T,KFbxProperty,Compare>::kIterator pIterator)
00124 {
00125 return pIterator ? pIterator->GetValue() : KFbxProperty();
00126 }
00127 };
00128
00133 class KFbxMapKStringCompare {
00134 public:
00135 inline int operator()(KString const &pKeyA, KString const &pKeyB) const
00136 {
00137 return (pKeyA < pKeyB) ? -1 : ((pKeyB < pKeyA) ? 1 : 0);
00138 }
00139 };
00140
00145 class KFBX_DLL KFbxPropertyStringMap : public KFbxPropertyMap<KString,KFbxMapKStringCompare>
00146 {
00147 public:
00148 inline KFbxPropertyStringMap()
00149 {
00150 }
00151 };
00152
00157 template <class T,class Compare> class KFBX_DLL KFbxObjectMap : public KFbxMap<T,KFbxObject*,Compare>
00158 {
00159 public:
00160 inline KFbxObjectMap()
00161 {
00162 }
00163 inline KFbxObject* Get(typename KFbxMap<T,KFbxObject*,Compare>::kIterator pIterator)
00164 {
00165 return pIterator ? pIterator->GetValue() : 0;
00166 }
00167 };
00168
00173 class KFBX_DLL KFbxObjectStringMap : public KFbxObjectMap<class KString,class KFbxMapKStringCompare>
00174 {
00175 public:
00176 inline KFbxObjectStringMap()
00177 {
00178 }
00179 };
00180
00181 #include <fbxfilesdk/fbxfilesdk_nsend.h>
00182
00183 #endif // FBXFILESDK_FBXCORE_FBXCOLLECTION_KFBXPROPERTYMAP_H
00184