2004-05-17 10:09:01 -05:00
|
|
|
/*************************************************************************
|
|
|
|
*
|
2005-09-08 19:29:08 -05:00
|
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
2004-05-17 10:09:01 -05:00
|
|
|
*
|
2005-09-08 19:29:08 -05:00
|
|
|
* $RCSfile: SwBitArray.hxx,v $
|
2004-05-17 10:09:01 -05:00
|
|
|
*
|
2005-09-08 19:29:08 -05:00
|
|
|
* $Revision: 1.4 $
|
2004-05-17 10:09:01 -05:00
|
|
|
*
|
2005-09-08 19:29:08 -05:00
|
|
|
* last change: $Author: rt $ $Date: 2005-09-09 01:29:08 $
|
2004-05-17 10:09:01 -05:00
|
|
|
*
|
2005-09-08 19:29:08 -05:00
|
|
|
* The Contents of this file are made available subject to
|
|
|
|
* the terms of GNU Lesser General Public License Version 2.1.
|
2004-05-17 10:09:01 -05:00
|
|
|
*
|
|
|
|
*
|
2005-09-08 19:29:08 -05:00
|
|
|
* GNU Lesser General Public License Version 2.1
|
|
|
|
* =============================================
|
|
|
|
* Copyright 2005 by Sun Microsystems, Inc.
|
|
|
|
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
2004-05-17 10:09:01 -05:00
|
|
|
*
|
2005-09-08 19:29:08 -05:00
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License version 2.1, as published by the Free Software Foundation.
|
2004-05-17 10:09:01 -05:00
|
|
|
*
|
2005-09-08 19:29:08 -05:00
|
|
|
* 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 GNU
|
|
|
|
* Lesser General Public License for more details.
|
2004-05-17 10:09:01 -05:00
|
|
|
*
|
2005-09-08 19:29:08 -05:00
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with this library; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
|
|
* MA 02111-1307 USA
|
2004-05-17 10:09:01 -05:00
|
|
|
*
|
|
|
|
************************************************************************/
|
|
|
|
#ifndef _SW_BIT_ARRAY_HXX
|
|
|
|
#define _SW_BIT_ARRAY_HXX
|
|
|
|
|
|
|
|
#include <swtypes.hxx>
|
|
|
|
#include <iostream>
|
|
|
|
|
|
|
|
/**
|
|
|
|
a bit array
|
|
|
|
*/
|
|
|
|
class SwBitArray
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
size of a group of bits
|
|
|
|
*/
|
2004-05-26 07:48:24 -05:00
|
|
|
static const size_t mGroupSize = sizeof(sal_uInt32);
|
2004-05-17 10:09:01 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Returns number of groups.
|
|
|
|
|
|
|
|
@return number of groups
|
|
|
|
*/
|
|
|
|
size_t calcSize() const { return (nSize - 1)/ mGroupSize + 1; }
|
|
|
|
|
|
|
|
/**
|
|
|
|
array of group of bits
|
|
|
|
*/
|
2004-05-26 07:48:24 -05:00
|
|
|
sal_uInt32 * mArray;
|
2004-05-17 10:09:01 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
number of groups
|
|
|
|
*/
|
2004-05-26 07:48:24 -05:00
|
|
|
sal_uInt32 nSize;
|
2004-05-17 10:09:01 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Returns group of bits according to an index.
|
|
|
|
|
|
|
|
@param n index to search for
|
|
|
|
|
|
|
|
@return group of bits according to given index
|
|
|
|
*/
|
2004-05-26 07:48:24 -05:00
|
|
|
sal_uInt32 * GetGroup(sal_uInt32 n) const { return &mArray[n/mGroupSize]; }
|
2004-05-17 10:09:01 -05:00
|
|
|
|
|
|
|
public:
|
2004-05-26 07:48:24 -05:00
|
|
|
SwBitArray(sal_uInt32 _nSize);
|
2004-05-17 10:09:01 -05:00
|
|
|
SwBitArray(const SwBitArray & rArray);
|
|
|
|
~SwBitArray();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Returns if an index is valid.
|
|
|
|
|
|
|
|
@retval TRUE the index is valid
|
|
|
|
@retval FALSE else
|
|
|
|
*/
|
2004-05-26 07:48:24 -05:00
|
|
|
BOOL IsValid(sal_uInt32 n) const;
|
2004-05-17 10:09:01 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Returns the number of bits stored in the array.
|
|
|
|
|
|
|
|
@return number of bits in the array
|
|
|
|
*/
|
2004-05-26 07:48:24 -05:00
|
|
|
sal_uInt32 Size() const { return nSize; }
|
2004-05-17 10:09:01 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Sets/unsets a bit.
|
|
|
|
|
|
|
|
@param n index of bit to set/unset
|
|
|
|
@param nValue -TRUE set the bit
|
|
|
|
-FALSE unset the bit
|
|
|
|
*/
|
2004-05-26 07:48:24 -05:00
|
|
|
void Set(sal_uInt32 n, BOOL nValue);
|
2004-05-17 10:09:01 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Unsets all bits of the array.
|
|
|
|
*/
|
|
|
|
void Reset();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Returns if a certain bit in the array is set.
|
|
|
|
|
|
|
|
@param n index of the bit in question
|
|
|
|
|
|
|
|
@retval TRUE the bit is set
|
|
|
|
@retval FALSE else
|
|
|
|
*/
|
2004-05-26 07:48:24 -05:00
|
|
|
BOOL Get(sal_uInt32 n) const;
|
2004-05-17 10:09:01 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Assigns a bit array to this bit array.
|
|
|
|
|
|
|
|
@param rArray array to assign
|
|
|
|
|
|
|
|
rArray must have the same size as this array. Otherwise this
|
|
|
|
array will not be altered.
|
|
|
|
*/
|
|
|
|
SwBitArray & operator = (const SwBitArray & rArray);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Returns the bitwise AND of two bit arrays.
|
|
|
|
|
|
|
|
@param rA
|
|
|
|
@param rB the arrays to combine
|
|
|
|
|
|
|
|
@return bitwise AND of rA and rB
|
|
|
|
*/
|
|
|
|
friend SwBitArray operator & (const SwBitArray & rA,
|
|
|
|
const SwBitArray & rB);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Returns the bitwise OR of two bit arrays.
|
|
|
|
|
|
|
|
@param rA
|
|
|
|
@param rB the arrays to combine
|
|
|
|
|
|
|
|
@return bitwise OR of rA and rB
|
|
|
|
*/
|
|
|
|
friend SwBitArray operator | (const SwBitArray & rA,
|
|
|
|
const SwBitArray & rB);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Returns the bitwise XOR of two bit arrays.
|
|
|
|
|
|
|
|
@param rA
|
|
|
|
@param rB the arrays to combine
|
|
|
|
|
|
|
|
@return bitwise XOR of rA and rB
|
|
|
|
*/
|
|
|
|
friend SwBitArray operator ^ (const SwBitArray & rA,
|
|
|
|
const SwBitArray & rB);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Returns the bitwise NOT of an arrays.
|
|
|
|
|
|
|
|
@param rA the array to negate
|
|
|
|
|
|
|
|
@return bitwise NOT of rA
|
|
|
|
*/
|
|
|
|
friend SwBitArray operator ~ (const SwBitArray & rA);
|
|
|
|
|
|
|
|
/**
|
|
|
|
output operator
|
|
|
|
|
|
|
|
@param o output stream
|
|
|
|
@param rBitArray bit array to output
|
|
|
|
|
|
|
|
@return o after the output
|
|
|
|
*/
|
|
|
|
friend std::ostream & operator <<
|
|
|
|
(std::ostream & o, const SwBitArray & rBitArray);
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#endif // _SW_BIT_ARRAY_HXX
|