FBX SDK Reference Guide: kfbxpropertymap.h Source File
00001 #ifndef FBXFILESDK_FBXCORE_FBXCOLLECTION_KFBXPROPERTYMAP_H
00002 #define FBXFILESDK_FBXCORE_FBXCOLLECTION_KFBXPROPERTYMAP_H
00003 
00004 /**************************************************************************************
00005 
00006  Copyright © 2001 - 2008 Autodesk, Inc. and/or its licensors.
00007  All Rights Reserved.
00008 
00009  The coded instructions, statements, computer programs, and/or related material 
00010  (collectively the "Data") in these files contain unpublished information 
00011  proprietary to Autodesk, Inc. and/or its licensors, which is protected by 
00012  Canada and United States of America federal copyright law and by international 
00013  treaties. 
00014  
00015  The Data may not be disclosed or distributed to third parties, in whole or in
00016  part, without the prior written consent of Autodesk, Inc. ("Autodesk").
00017 
00018  THE DATA IS PROVIDED "AS IS" AND WITHOUT WARRANTY.
00019  ALL WARRANTIES ARE EXPRESSLY EXCLUDED AND DISCLAIMED. AUTODESK MAKES NO
00020  WARRANTY OF ANY KIND WITH RESPECT TO THE DATA, EXPRESS, IMPLIED OR ARISING
00021  BY CUSTOM OR TRADE USAGE, AND DISCLAIMS ANY IMPLIED WARRANTIES OF TITLE, 
00022  NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE OR USE. 
00023  WITHOUT LIMITING THE FOREGOING, AUTODESK DOES NOT WARRANT THAT THE OPERATION
00024  OF THE DATA WILL BE UNINTERRUPTED OR ERROR FREE. 
00025  
00026  IN NO EVENT SHALL AUTODESK, ITS AFFILIATES, PARENT COMPANIES, LICENSORS
00027  OR SUPPLIERS ("AUTODESK GROUP") BE LIABLE FOR ANY LOSSES, DAMAGES OR EXPENSES
00028  OF ANY KIND (INCLUDING WITHOUT LIMITATION PUNITIVE OR MULTIPLE DAMAGES OR OTHER
00029  SPECIAL, DIRECT, INDIRECT, EXEMPLARY, INCIDENTAL, LOSS OF PROFITS, REVENUE
00030  OR DATA, COST OF COVER OR CONSEQUENTIAL LOSSES OR DAMAGES OF ANY KIND),
00031  HOWEVER CAUSED, AND REGARDLESS OF THE THEORY OF LIABILITY, WHETHER DERIVED
00032  FROM CONTRACT, TORT (INCLUDING, BUT NOT LIMITED TO, NEGLIGENCE), OR OTHERWISE,
00033  ARISING OUT OF OR RELATING TO THE DATA OR ITS USE OR ANY OTHER PERFORMANCE,
00034  WHETHER OR NOT AUTODESK HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSS
00035  OR DAMAGE. 
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