00001 #ifndef _FBXSDK_PROPERTYMAP_H_
00002 #define _FBXSDK_PROPERTYMAP_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 <kaydaradef.h>
00040 #ifndef KFBX_DLL
00041 #define KFBX_DLL K_DLLIMPORT
00042 #endif
00043
00044 #include <klib/kmap.h>
00045 #include <kfbxplugins/kfbxproperty.h>
00046 #include <kfbxplugins/kfbxobject.h>
00047
00048 #include <fbxfilesdk_nsbegin.h>
00049
00050 template <class K,class T,class Compare> class KFBX_DLL KFbxMap
00051 {
00052 public:
00053 inline KFbxMap()
00054 {
00055 }
00056
00057 private:
00058 typedef KMap<K,T,Compare> KMapDef;
00059 KMapDef mMap;
00060 public:
00061 typedef typename KMapDef::RecordType* kIterator;
00062
00063 public:
00064 inline void Add (K const &pKey,T const &pType)
00065 {
00066 mMap.Insert( pKey,pType );
00067 }
00068
00069 inline kIterator Find (K const &pKey) const
00070 {
00071 return (kIterator)mMap.Find( pKey );
00072 }
00073
00074 inline kIterator Find (T const &pType) const
00075 {
00076 kIterator lIterator = GetFirst();
00077 while (lIterator) {
00078 if (lIterator->GetValue()==pType) {
00079 return lIterator;
00080 }
00081 lIterator = GetNext(lIterator);
00082 }
00083 return 0;
00084 }
00085
00086 inline void Remove (kIterator pIterator)
00087 {
00088 if (pIterator) mMap.Remove( pIterator->GetKey() );
00089 }
00090
00091 inline kIterator GetFirst() const
00092 {
00093 return (kIterator)mMap.Minimum();
00094 }
00095
00096 inline kIterator GetNext(kIterator pIterator) const
00097 {
00098 return (kIterator)pIterator ? pIterator->Successor() : 0;
00099 }
00100
00101 inline void Clear()
00102 {
00103 mMap.Clear();
00104 }
00105
00106 inline void Reserve(int pSize)
00107 {
00108 mMap.Reserve( pSize );
00109 }
00110
00111 inline int GetCount() const
00112 {
00113 return mMap.GetSize();
00114 }
00115 };
00116
00120 template <class T,class Compare> class KFBX_DLL KFbxPropertyMap : public KFbxMap<T,KFbxProperty,Compare>
00121 {
00122 public:
00123 inline KFbxPropertyMap()
00124 {
00125 }
00126
00127 inline KFbxProperty Get(typename KFbxMap<T,KFbxProperty,Compare>::kIterator pIterator)
00128 {
00129 return pIterator ? pIterator->GetValue() : KFbxProperty();
00130 }
00131 };
00132
00137 class KFbxMapKStringCompare {
00138 public:
00139 inline int operator()(KString const &pKeyA, KString const &pKeyB) const
00140 {
00141 return (pKeyA < pKeyB) ? -1 : ((pKeyB < pKeyA) ? 1 : 0);
00142 }
00143 };
00144
00149 class KFBX_DLL KFbxPropertyStringMap : public KFbxPropertyMap<KString,KFbxMapKStringCompare>
00150 {
00151 public:
00152 inline KFbxPropertyStringMap()
00153 {
00154 }
00155 };
00156
00161 template <class T,class Compare> class KFBX_DLL KFbxObjectMap : public KFbxMap<T,KFbxObject*,Compare>
00162 {
00163 public:
00164 inline KFbxObjectMap()
00165 {
00166 }
00167 inline KFbxObject* Get(typename KFbxMap<T,KFbxObject*,Compare>::kIterator pIterator)
00168 {
00169 return pIterator ? pIterator->GetValue() : 0;
00170 }
00171 };
00172
00177 class KFBX_DLL KFbxObjectStringMap : public KFbxObjectMap<class KString,class KFbxMapKStringCompare>
00178 {
00179 public:
00180 inline KFbxObjectStringMap()
00181 {
00182 }
00183 };
00184
00185 #include <fbxfilesdk_nsend.h>
00186
00187 #endif // #ifndef _FBXSDK_PROPERTYMAP_H_
00188
00189