library of assembled shared sources

http://lass.cocamware.com

bit_manip.h

Go to the documentation of this file.
00001 /** @file
00002  *  @author Bram de Greve (bramz@users.sourceforge.net)
00003  *  @author Tom De Muer (tomdemuer@users.sourceforge.net)
00004  *
00005  *  *** BEGIN LICENSE INFORMATION ***
00006  *  
00007  *  The contents of this file are subject to the Common Public Attribution License 
00008  *  Version 1.0 (the "License"); you may not use this file except in compliance with 
00009  *  the License. You may obtain a copy of the License at 
00010  *  http://lass.sourceforge.net/cpal-license. The License is based on the 
00011  *  Mozilla Public License Version 1.1 but Sections 14 and 15 have been added to cover 
00012  *  use of software over a computer network and provide for limited attribution for 
00013  *  the Original Developer. In addition, Exhibit A has been modified to be consistent 
00014  *  with Exhibit B.
00015  *  
00016  *  Software distributed under the License is distributed on an "AS IS" basis, WITHOUT 
00017  *  WARRANTY OF ANY KIND, either express or implied. See the License for the specific 
00018  *  language governing rights and limitations under the License.
00019  *  
00020  *  The Original Code is LASS - Library of Assembled Shared Sources.
00021  *  
00022  *  The Initial Developer of the Original Code is Bram de Greve and Tom De Muer.
00023  *  The Original Developer is the Initial Developer.
00024  *  
00025  *  All portions of the code written by the Initial Developer are:
00026  *  Copyright (C) 2004-2007 the Initial Developer.
00027  *  All Rights Reserved.
00028  *  
00029  *  Contributor(s):
00030  *
00031  *  Alternatively, the contents of this file may be used under the terms of the 
00032  *  GNU General Public License Version 2 or later (the GPL), in which case the 
00033  *  provisions of GPL are applicable instead of those above.  If you wish to allow use
00034  *  of your version of this file only under the terms of the GPL and not to allow 
00035  *  others to use your version of this file under the CPAL, indicate your decision by 
00036  *  deleting the provisions above and replace them with the notice and other 
00037  *  provisions required by the GPL License. If you do not delete the provisions above,
00038  *  a recipient may use your version of this file under either the CPAL or the GPL.
00039  *  
00040  *  *** END LICENSE INFORMATION ***
00041  */
00042 
00043 /** @defgroup BitManip BitManip
00044  *  @brief A set of simple bit manipulation functions.
00045  *  @author Bram de Greve
00046  *  @date 2003
00047  *
00048  *  This module groups simple bit manipulation functions you can use on bitfields.  These bitfields
00049  *  can be of any type for which the bit operators like &=, |=, ... are defined.  Typically, you'll
00050  *  use @c int, @c char, @c unsigned, ...
00051  *
00052  *  The functions are split in two groups.  The @e bit routines (with the word @c Bit in their
00053  *  names :) and the @e mask routines (with the word @c Mask).  The groups are very alike, except in
00054  *  the way you address the bits to affect.  With the @e bit group you will address one single bit
00055  *  at one time, and you will indicate it by its index in the bit field (i.e. bit 0 is 0x01, bit 1
00056  *  is 0x02, bit 2 is 0x04, ...).  With the @e mask group, you can address multiple bits at once by
00057  *  setting these bits in the mask (e.g. to address bits 0 and 2, you'll use 0x05 as mask).  These
00058  *  mask must be of the same type of the bitfield.
00059  *
00060  *  With the routines you can set bits to 1; clear bits to 0; flip bits (0 becomes 1, 1 becomes 0);
00061  *  set, clear or flip bits if a condition is fullfilled; set a bit to a given value (0 or 1);
00062  *  check if a bit is set.  For all these operations you'll find a function in both the @c bit group
00063  *  as in the @c mask group, except for the last operation: to check if a bit is set.  In the @c bit
00064  *  group you'll find one function checkBit which will return true if the addressed bit is set.
00065  *  In the @c mask group you'll find two: checkMaskedAll and checkMaskedSome.  the former only
00066  *  returns true if @e all bits addressed by the mask are set (an @e and operation), the latter
00067  *  already returns true if at least @e some of the addressed bits are set (an @e or operation).
00068  */
00069 
00070 
00071 #ifndef LASS_GUARDIAN_OF_INCLUSION_UTIL_BIT_MANIP_H
00072 #define LASS_GUARDIAN_OF_INCLUSION_UTIL_BIT_MANIP_H
00073 
00074 
00075 #include "util_common.h"
00076 #include "../num/basic_types.h"
00077 
00078 namespace lass
00079 {
00080 
00081 namespace util
00082 {
00083 
00084 template<typename T> inline void setBit(T& a_bits, unsigned a_bit);
00085 template<typename T> inline void clearBit(T& a_bits, unsigned a_bit);
00086 template<typename T> inline void flipBit(T& a_bits, unsigned a_bit);
00087 template<typename T> inline void setBitIf(T& a_bits, unsigned a_bit, bool a_condition);
00088 template<typename T> inline void clearBitIf(T& a_bits, unsigned a_bit, bool a_condition);
00089 template<typename T> inline void flipBitIf(T& a_bits, unsigned a_bit, bool a_condition);
00090 template<typename T> inline void setBitTo(T& a_bits, unsigned a_bit, bool a_state);
00091 template<typename T> inline bool checkBit(T a_bits, unsigned a_bit);
00092 
00093 template<typename T> inline void setMasked(T& a_bits, const T& a_mask);
00094 template<typename T> inline void clearMasked(T& a_bits, const T& a_mask);
00095 template<typename T> inline void flipMasked(T& a_bits, const T& a_mask);
00096 template<typename T> inline void setMaskedIf(T& a_bits, const T& a_mask, bool a_condition);
00097 template<typename T> inline void clearMaskedIf(T& a_bits, const T& a_mask, bool a_condition);
00098 template<typename T> inline void flipMaskedIf(T& a_bits, const T& a_mask, bool a_condition);
00099 template<typename T> inline void setMaskedTo(T& a_bits, const T& a_mask, bool a_state);
00100 template<typename T> inline bool checkMaskedAll(T a_bits, const T& a_mask);
00101 template<typename T> inline bool checkMaskedSome(T a_bits, const T& a_mask);
00102 
00103 template<typename T> inline const size_t countBits(T bits);
00104 
00105 /*
00106 inline const unsigned countBits(num::Tuint8 x);
00107 inline const unsigned countBits(num::Tint8 x);
00108 inline const unsigned countBits(num::Tuint16 x);
00109 inline const unsigned countBits(num::Tint16 x);
00110 inline const unsigned countBits(num::Tuint32 x);
00111 inline const unsigned countBits(num::Tint32 x);
00112 inline const unsigned countBits(num::Tuint64 x);
00113 inline const unsigned countBits(num::Tint64 x);
00114 */
00115 
00116 }
00117 
00118 }
00119 
00120 #include "bit_manip.inl"
00121 
00122 #endif

Generated on Mon Nov 10 14:20:00 2008 for Library of Assembled Shared Sources by doxygen 1.5.7.1
SourceForge.net Logo