forked from LeenkxTeam/LNXSDK
		
	
		
			
				
	
	
		
			124 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #ifndef GIM_BITSET_H_INCLUDED
 | |
| #define GIM_BITSET_H_INCLUDED
 | |
| /*! \file gim_bitset.h
 | |
| \author Francisco Leon Najera
 | |
| */
 | |
| /*
 | |
| -----------------------------------------------------------------------------
 | |
| This source file is part of GIMPACT Library.
 | |
| 
 | |
| For the latest info, see http://gimpact.sourceforge.net/
 | |
| 
 | |
| Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371.
 | |
| email: projectileman@yahoo.com
 | |
| 
 | |
|  This library is free software; you can redistribute it and/or
 | |
|  modify it under the terms of EITHER:
 | |
|    (1) The GNU Lesser General Public License as published by the Free
 | |
|        Software Foundation; either version 2.1 of the License, or (at
 | |
|        your option) any later version. The text of the GNU Lesser
 | |
|        General Public License is included with this library in the
 | |
|        file GIMPACT-LICENSE-LGPL.TXT.
 | |
|    (2) The BSD-style license that is included with this library in
 | |
|        the file GIMPACT-LICENSE-BSD.TXT.
 | |
|    (3) The zlib/libpng license that is included with this library in
 | |
|        the file GIMPACT-LICENSE-ZLIB.TXT.
 | |
| 
 | |
|  This library is distributed in the hope that it will be useful,
 | |
|  but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files
 | |
|  GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details.
 | |
| 
 | |
| -----------------------------------------------------------------------------
 | |
| */
 | |
| 
 | |
| #include "gim_array.h"
 | |
| 
 | |
| 
 | |
| #define GUINT_BIT_COUNT 32
 | |
| #define GUINT_EXPONENT 5
 | |
| 
 | |
| class gim_bitset
 | |
| {
 | |
| public:
 | |
|     gim_array<GUINT> m_container;
 | |
| 
 | |
|     gim_bitset()
 | |
|     {
 | |
| 
 | |
|     }
 | |
| 
 | |
|     gim_bitset(GUINT bits_count)
 | |
|     {
 | |
|         resize(bits_count);
 | |
|     }
 | |
| 
 | |
|     ~gim_bitset()
 | |
|     {
 | |
|     }
 | |
| 
 | |
| 	inline bool resize(GUINT newsize)
 | |
| 	{
 | |
| 		GUINT oldsize = m_container.size();
 | |
| 		m_container.resize(newsize/GUINT_BIT_COUNT + 1,false);
 | |
| 		while(oldsize<m_container.size())
 | |
| 		{
 | |
| 			m_container[oldsize] = 0;
 | |
| 		}
 | |
| 		return true;
 | |
| 	}
 | |
| 
 | |
| 	inline GUINT size()
 | |
| 	{
 | |
| 		return m_container.size()*GUINT_BIT_COUNT;
 | |
| 	}
 | |
| 
 | |
| 	inline void set_all()
 | |
| 	{
 | |
| 		for(GUINT i = 0;i<m_container.size();++i)
 | |
| 		{
 | |
| 			m_container[i] = 0xffffffff;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	inline void clear_all()
 | |
| 	{
 | |
| 	    for(GUINT i = 0;i<m_container.size();++i)
 | |
| 		{
 | |
| 			m_container[i] = 0;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	inline void set(GUINT bit_index)
 | |
| 	{
 | |
| 		if(bit_index>=size())
 | |
| 		{
 | |
| 			resize(bit_index);
 | |
| 		}
 | |
| 		m_container[bit_index >> GUINT_EXPONENT] |= (1 << (bit_index & (GUINT_BIT_COUNT-1)));
 | |
| 	}
 | |
| 
 | |
| 	///Return 0 or 1
 | |
| 	inline char get(GUINT bit_index)
 | |
| 	{
 | |
| 		if(bit_index>=size())
 | |
| 		{
 | |
| 			return 0;
 | |
| 		}
 | |
| 		char value = m_container[bit_index >> GUINT_EXPONENT] &
 | |
| 					 (1 << (bit_index & (GUINT_BIT_COUNT-1)));
 | |
| 		return value;
 | |
| 	}
 | |
| 
 | |
| 	inline void clear(GUINT bit_index)
 | |
| 	{
 | |
| 	    m_container[bit_index >> GUINT_EXPONENT] &= ~(1 << (bit_index & (GUINT_BIT_COUNT-1)));
 | |
| 	}
 | |
| };
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| #endif // GIM_CONTAINERS_H_INCLUDED
 |