root/tags/rel-5-0-2/mapserver/mapbits.c

Revision 6428, 2.3 kB (checked in by dmorissette, 1 year ago)

Added missing line at end of license text

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1 /******************************************************************************
2  *
3  * Project:  MapServer
4  * Purpose:  Implementation of bit array functions.
5  * Author:   Steve Lime and the MapServer team.
6  *
7  ******************************************************************************
8  * Copyright (c) 1996-2005 Regents of the University of Minnesota.
9  *
10  * Permission is hereby granted, free of charge, to any person obtaining a
11  * copy of this software and associated documentation files (the "Software"),
12  * to deal in the Software without restriction, including without limitation
13  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
14  * and/or sell copies of the Software, and to permit persons to whom the
15  * Software is furnished to do so, subject to the following conditions:
16  *
17  * The above copyright notice and this permission notice shall be included in
18  * all copies of this Software or works derived from this Software.
19  *
20  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
21  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
25  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
26  * DEALINGS IN THE SOFTWARE.
27  ****************************************************************************/
28
29 #include "mapserver.h"
30
31 MS_CVSID("$Id$")
32
33 #include <limits.h>
34
35 /* originally found at http://www.snippets.org/ */
36
37 size_t msGetBitArraySize(int numbits)
38 {
39   return((numbits + CHAR_BIT - 1) / CHAR_BIT);
40 }
41
42 char *msAllocBitArray(int numbits)
43 {
44   char *array = calloc((numbits + CHAR_BIT - 1) / CHAR_BIT, sizeof(char));
45  
46   return(array);
47 }
48
49 int msGetBit(char *array, int index)
50 {
51   array += index / CHAR_BIT;
52   return (*array & (1 << (index % CHAR_BIT))) != 0;    /* 0 or 1 */
53 }
54
55 void msSetBit(char *array, int index, int value)
56 {
57   array += index / CHAR_BIT;
58   if (value)
59     *array |= 1 << (index % CHAR_BIT);           /* set bit */
60   else   
61     *array &= ~(1 << (index % CHAR_BIT));        /* clear bit */
62 }
63
64 void msFlipBit(char *array, int index)
65 {
66   array += index / CHAR_BIT;
67   *array ^= 1 << (index % CHAR_BIT);                   /* flip bit */
68 }
Note: See TracBrowser for help on using the browser.