Bit manipulation routines
This commit is contained in:
		
							parent
							
								
									fa94fb7f0b
								
							
						
					
					
						commit
						efcd5218a4
					
				
					 1 changed files with 54 additions and 0 deletions
				
			
		|  | @ -13,6 +13,60 @@ | |||
| 
 | ||||
| namespace kstd { | ||||
| 
 | ||||
| namespace Bit { | ||||
| 
 | ||||
| template<typename T> | ||||
| inline bool | ||||
| get(T field, | ||||
|     u8 bit) | ||||
| { | ||||
|     return (field & (1 << bit)) > 0; | ||||
| } | ||||
| 
 | ||||
| template<typename T> | ||||
| inline void | ||||
| set(T& field, | ||||
|     u8 bit) | ||||
| { | ||||
|     field |= T(1 << bit); | ||||
| } | ||||
| 
 | ||||
| template<typename T> | ||||
| inline void | ||||
| clear(T& field, | ||||
|       u8 bit) | ||||
| { | ||||
|     field &= ~T(1 << bit); | ||||
| } | ||||
| 
 | ||||
| template<typename T> | ||||
| inline T | ||||
| getMask(T field, | ||||
|         T mask) | ||||
| { | ||||
|     return field & mask; | ||||
| } | ||||
| 
 | ||||
| template<typename T> | ||||
| inline void | ||||
| setMask(T& field, | ||||
|         T value, | ||||
|         T mask) | ||||
| { | ||||
|     // Keep everything the same (~mask), but OR in the new value
 | ||||
|     field = (field & ~mask) | value; | ||||
| } | ||||
| 
 | ||||
| template<typename T> | ||||
| inline void | ||||
| clearMask(T& field, | ||||
|           T mask) | ||||
| { | ||||
|     field &= ~mask; | ||||
| } | ||||
| 
 | ||||
| } /* namespace Bit */ | ||||
| 
 | ||||
| /** An array-like object of N bits, where N is the size of the type T given as a template parameter. */ | ||||
| template <typename T> | ||||
| struct Bitmap | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue