home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 July & August / PCWorld_2006-07-08_cd.bin / temacd / planearcade / planearcade.exe / Tank3.bmp / q3bitset.h < prev    next >
C/C++ Source or Header  |  2004-04-12  |  3KB  |  104 lines

  1. ///////////////////////////////////////////////
  2. //original zdrojak: Jan Koci (koci.opengl.cz)//
  3. //upravil:          Peter AdamΦφk            // 
  4. ///////////////////////////////////////////////
  5.  
  6. // This is our bitset class for storing which face has already been drawn.
  7. // The bitset functionality isn't really taken advantage of in this version
  8. // since we aren't rendering by leafs and nodes.
  9. // T°φda pro uklßdßnφ ploÜek, kterΘ byly vykresleny.
  10.  
  11. class K_CBitset 
  12. {
  13. public:        // Ve°ejnΘ
  14.  
  15.     // Initialize all the data members
  16.     // V konstruktoru nastav bit a jeho velikost na 0
  17.     K_CBitset() : m_puiBits(0), m_iSize(0) {}
  18.  
  19.     // This is our deconstructor
  20.     // Destruktor
  21.     ~K_CBitset() 
  22.     {
  23.         // If we have valid memory, get rid of it
  24.         // Jestli₧e je zapln∞na pam∞¥ bitov²ch dat, tak
  25.         if(m_puiBits) 
  26.         {
  27.             delete m_puiBits;    // Vyma₧ bitovΘ data
  28.             m_puiBits = NULL;    // Nastav je na NULL
  29.         }
  30.     }
  31.  
  32.  
  33.     ////////////////////////////////////////
  34.     ////////////// Funkce //////////////////
  35.     ////////////////////////////////////////
  36.  
  37.     // This resizes our bitset to a size so each face has a bit associated with it
  38.     // Alokuj dostateΦnΘ mno₧stvφ bit∙ pro vÜechny ploÜky pro bitovΘ nastavenφ klastr∙
  39.     void Resize(int i_count) 
  40.     { 
  41.         // Get the size of integers we need
  42.         // Zφskej velikost v hodnot∞ integer
  43.         m_iSize = i_count / 32 + 1;
  44.  
  45.         // Make sure we haven't already allocated memory for the bits
  46.         // Vyma₧ alokovanou pam∞¥ bitu
  47.         // Jestli₧e je zapln∞na pam∞¥ bitov²ch dat, tak
  48.         if(m_puiBits) 
  49.         {
  50.             delete m_puiBits;    // Vyma₧ bit
  51.             m_puiBits = 0;        // Nastav ho na NULL
  52.         }
  53.  
  54.         // Allocate the bits and initialize them
  55.         // Alokuj pam∞¥ pro novß bitovß data a nastav jejich velikost podle hodnoty m_isize
  56.         m_puiBits = new unsigned int[m_iSize];
  57.         ClearAll();        // Nastav vÜechny bity na 0
  58.     }
  59.  
  60.     // This does the binary math to set the desired bit
  61.     // Nastavφ, ploÜku jako vykreslenou
  62.     // Nastav bit na 1
  63.     void Set(int i) 
  64.     {
  65.         // Pou₧ij bitovΘ posuny
  66.         m_puiBits[i >> 5] |= (1 << (i & 31));
  67.     }
  68.  
  69.     // This returns if the desired bit slot is a 1 or a 0
  70.     // Funkce zjiÜ¥uje jestli ploÜka, kterß mß b²t vykreslena,
  71.     // nebyla ji₧ vykreslena
  72.     // Vra¥ funkci bit 0, nebo 1
  73.     int On(int i) 
  74.     {
  75.         return m_puiBits[i >> 5] & (1 << (i & 31 ));
  76.     }
  77.  
  78.     // This clears a bit to 0
  79.     // Nastav bit na 0
  80.     void Clear(int i) 
  81.     {
  82.         // Pou₧ij bitovΘ posuny
  83.         m_puiBits[i >> 5] &= ~(1 << (i & 31));
  84.     }
  85.  
  86.     // This initializes the bits to 0
  87.     // Nastav vÜechny bity na 0
  88.     void ClearAll() 
  89.     {
  90.         memset(m_puiBits, 0, sizeof(unsigned int) * m_iSize);
  91.     }
  92.  
  93. private:    // SoukromΘ
  94.  
  95.     ////////////////////////////////////////
  96.     ////////////// Prom∞nnΘ ////////////////
  97.     ////////////////////////////////////////
  98.  
  99.  
  100.     // Our private bit data that holds the bits and size
  101.     unsigned int *m_puiBits;    // Bitovß data 
  102.     int m_iSize;                // Bitovß velikost
  103.  
  104. };