FBX SDK Reference Guide: kset.h Source File
00001 /**************************************************************************************
00002 
00003  Copyright © 1998 - 2008 Autodesk, Inc. and/or its licensors.
00004  All Rights Reserved.
00005 
00006  The coded instructions, statements, computer programs, and/or related material 
00007  (collectively the "Data") in these files contain unpublished information 
00008  proprietary to Autodesk, Inc. and/or its licensors, which is protected by 
00009  Canada and United States of America federal copyright law and by international 
00010  treaties. 
00011  
00012  The Data may not be disclosed or distributed to third parties, in whole or in
00013  part, without the prior written consent of Autodesk, Inc. ("Autodesk").
00014 
00015  THE DATA IS PROVIDED "AS IS" AND WITHOUT WARRANTY.
00016  ALL WARRANTIES ARE EXPRESSLY EXCLUDED AND DISCLAIMED. AUTODESK MAKES NO
00017  WARRANTY OF ANY KIND WITH RESPECT TO THE DATA, EXPRESS, IMPLIED OR ARISING
00018  BY CUSTOM OR TRADE USAGE, AND DISCLAIMS ANY IMPLIED WARRANTIES OF TITLE, 
00019  NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE OR USE. 
00020  WITHOUT LIMITING THE FOREGOING, AUTODESK DOES NOT WARRANT THAT THE OPERATION
00021  OF THE DATA WILL BE UNINTERRUPTED OR ERROR FREE. 
00022  
00023  IN NO EVENT SHALL AUTODESK, ITS AFFILIATES, PARENT COMPANIES, LICENSORS
00024  OR SUPPLIERS ("AUTODESK GROUP") BE LIABLE FOR ANY LOSSES, DAMAGES OR EXPENSES
00025  OF ANY KIND (INCLUDING WITHOUT LIMITATION PUNITIVE OR MULTIPLE DAMAGES OR OTHER
00026  SPECIAL, DIRECT, INDIRECT, EXEMPLARY, INCIDENTAL, LOSS OF PROFITS, REVENUE
00027  OR DATA, COST OF COVER OR CONSEQUENTIAL LOSSES OR DAMAGES OF ANY KIND),
00028  HOWEVER CAUSED, AND REGARDLESS OF THE THEORY OF LIABILITY, WHETHER DERIVED
00029  FROM CONTRACT, TORT (INCLUDING, BUT NOT LIMITED TO, NEGLIGENCE), OR OTHERWISE,
00030  ARISING OUT OF OR RELATING TO THE DATA OR ITS USE OR ANY OTHER PERFORMANCE,
00031  WHETHER OR NOT AUTODESK HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSS
00032  OR DAMAGE. 
00033 
00034 **************************************************************************************/
00035 
00036 #ifndef FBXFILESDK_COMPONENTS_KBASELIB_KLIB_KSET_H
00037 #define FBXFILESDK_COMPONENTS_KBASELIB_KLIB_KSET_H
00038 
00039 #include <fbxfilesdk/components/kbaselib/kbaselib_h.h>
00040 
00041 #include <fbxfilesdk/fbxfilesdk_nsbegin.h>
00042 
00043     struct SSet;
00044 
00045     // *************************************************************************
00046     //
00047     //  class KSet
00048     //
00049     // ************************************************************************* 
00050 
00054     class KFBX_DLL KSet {
00055     public:
00056         enum
00057         {
00058             KFBX_NOT_FOUND        = 0x0L,
00059             KFBX_ITEM_PER_BLOCK   = 20
00060         };
00061 
00066 
00067         
00071         KSet( int pItemPerBlock = KFBX_ITEM_PER_BLOCK );
00072 
00076         KSet(const KSet& other);
00077 
00079         ~KSet();
00081 
00082         // Add and remove
00089         bool  Add       ( kReference pReference, kReference pItem );
00090 
00091         
00096         bool  Remove        ( kReference pReference );
00097         
00102         bool  RemoveItem    ( kReference pItem );
00103 
00109         bool  SetItem   ( kReference pReference, kReference pItem ); // Change Item Reference, don't Create if doesn't Exist
00110 
00116         kReference Get ( kReference pReference, int* pIndex = NULL ) const;
00117 
00119         void     Clear();
00120 
00121         // Index manipulation
00127         kReference GetFromIndex ( int pIndex, kReference* pReference = NULL )const;
00128 
00133         bool  RemoveFromIndex( int pIndex );
00134 
00135         // Get The Count
00139         int  GetCount ()const       { return mSetCount; }
00140 
00141         // Sorting
00146         bool  Swap()const;
00147 
00148         //The array can be sorted only if the private member:mIsChanged be true.
00152         bool  Sort()const;
00153 
00155         const KSet& operator=(const KSet&);
00156 
00157     private:
00158         // internal functions for Sets manipulation
00159         SSet*   FindEqual( kReference pReference)const;
00160 
00161     private:
00162         SSet*   mSetArray;
00163         int     mSetCount;
00164         int     mBlockCount;
00165         int     mItemPerBlock;
00166         mutable bool    mIsChanged;
00167     };
00168 
00169 #include <fbxfilesdk/fbxfilesdk_nsend.h>
00170 
00171 #endif // FBXFILESDK_COMPONENTS_KBASELIB_KLIB_KSET_H
00172