otypeset.h

Go to the documentation of this file.
00001 /**
00002  * \file rvc/otypeset.h 
00003  * \brief Define RVC::OBJTYPESET class.
00004  *
00005  * \if NODOC
00006  * $Id: otypeset.h_v 1.11 2003/10/22 16:16:49 scowan Exp $
00007  *
00008  * $Log: otypeset.h_v $
00009  * Revision 1.11  2003/10/22 16:16:49  scowan
00010  * Added operator append for another obj type set.
00011  *
00012  * Revision 1.10  2003/10/08 22:20:58  scowan
00013  * Doxygen adjustments.
00014  *
00015  * Revision 1.9  2003/09/30 16:52:06  dwilliss
00016  * Doxygen
00017  *
00018  * Revision 1.8  2003/09/25 21:56:58  dwilliss
00019  * doxygen
00020  *
00021  * Revision 1.7  2003/09/15 13:49:45  fileserver!dwilliss
00022  * Doxygen
00023  *
00024  * Revision 1.6  2001/07/11 14:38:40  scowan
00025  * MAC does not like ';' after namespace endings.
00026  *
00027  * Revision 1.5  2001/06/18 14:16:16  mju
00028  * Array was 1 entry too small.
00029  *
00030  * Revision 1.4  2001/06/14 21:52:25  mju
00031  * Add GetFirst/GetNext methods.
00032  *
00033  * Revision 1.2  2001/06/13 17:51:49  mju
00034  * Add namespace specifiers to parameters.
00035  *
00036  * Revision 1.1  2001/06/13 16:19:21  mju
00037  * Initial revision
00038  *
00039  * \endif
00040 **/
00041 
00042 #ifndef  INC_RVC_OTYPESET_H
00043 #define  INC_RVC_OTYPESET_H
00044 
00045 #ifndef  INC_MI32_STDDEFNS_H
00046 #include <mi32/stddefns.h>
00047 #endif
00048 
00049 #ifndef  INC_RVC_OBJTYPE_H
00050 #include <rvc/objtype.h>
00051 #endif
00052 
00053 #ifndef  INC_STRING_H
00054 #include <string.h>     // Includes defn for memset()
00055 #define  INC_STRING_H
00056 #endif
00057 
00058 namespace RVC {
00059 
00060 //! \class OBJTYPESET rvc/otypeset.h
00061 //! \brief Class to represent "set" of RVC object types.
00062 class OBJTYPESET {
00063    public:
00064 
00065       //! Default constructor, creates empty set.
00066       OBJTYPESET (
00067          ) { Clear(); }
00068 
00069       //! Implicit constructor from OBJTYPE.
00070       //! Allows a single OBJTYPE value to be passed wherever OBJTYPESET is specified.
00071       OBJTYPESET (
00072          RVC::OBJTYPE objtype
00073          ) { Clear(); operator+=(objtype); }
00074 
00075       //! Convenience constructor for specifying two object types.
00076       OBJTYPESET (
00077          RVC::OBJTYPE objtype1,
00078          RVC::OBJTYPE objtype2
00079          ) { Clear(); operator+=(objtype1); operator+=(objtype2); }
00080 
00081       //! Convenience constructor for specifying three object types.
00082       OBJTYPESET (
00083          RVC::OBJTYPE objtype1,
00084          RVC::OBJTYPE objtype2,
00085          RVC::OBJTYPE objtype3
00086          ) { Clear(); operator+=(objtype1); operator+=(objtype2); operator+=(objtype3); }
00087 
00088       //! Add type to set.
00089       OBJTYPESET& operator+= (
00090          RVC::OBJTYPE rhs
00091          ) { if (rhs == OBJTYPE_All) SetAll(); else m_objtypebits[rhs/32] |= 1 << (rhs % 32); return (*this); }
00092 
00093       //! Add type set to set.
00094       OBJTYPESET& operator+= (
00095          const RVC::OBJTYPESET& rhs
00096          ) { for (INT32 i = 0;(i < (OBJTYPE_LAST+31)/32);++i) m_objtypebits[i] |= rhs.m_objtypebits[i]; return (*this); }
00097 
00098       //! Remove type from set.
00099       OBJTYPESET& operator-= (
00100          RVC::OBJTYPE rhs
00101          ) { if (rhs == OBJTYPE_All) Clear(); else m_objtypebits[rhs/32] &= ~(1 << (rhs % 32)); return (*this); }
00102 
00103       //! Clear set.
00104       void Clear (
00105          ) { memset(m_objtypebits,0,sizeof(m_objtypebits)); return; }
00106 
00107       //! Determine if set contains specified object type.
00108       bool Contains (
00109          RVC::OBJTYPE objtype
00110          ) const { return ((m_objtypebits[objtype/32] & (1 << (objtype % 32))) != 0); }
00111 
00112       //! Get first object type in set.
00113       //! @return First object type or OBJTYPE_LAST if no more in set.
00114       RVC::OBJTYPE GetFirst (
00115          ) const { return (GetNext(OBJTYPE_All)); }
00116 
00117       //! Get next object type in set.
00118       RVC::OBJTYPE GetNext (
00119          OBJTYPE objtype
00120          ) const {
00121          do {
00122             ++objtype;
00123             if (Contains(objtype)) break;
00124             } while (objtype < OBJTYPE_LAST);
00125          return (objtype);
00126          }
00127 
00128       void SetAll (
00129          ) { memset(m_objtypebits,255,sizeof(m_objtypebits)); return; }
00130 
00131    private:
00132       #ifndef GENERATING_DOXYGEN_OUTPUT
00133       UINT32 m_objtypebits[(OBJTYPE_LAST+31)/32];
00134       #endif // GENERATING_DOXYGEN_OUTPUT
00135    };
00136 
00137 }  //! End of RVC namespace
00138 
00139 
00140 #endif   //!< INC_RVC_OTYPESET_H

Generated on Tue Dec 14 13:18:52 2004 for TNTsdk by  doxygen 1.3.8-20040913