Changeset 965 for trunk/psLib/src/collections
- Timestamp:
- Jun 9, 2004, 2:29:09 PM (22 years ago)
- Location:
- trunk/psLib/src/collections
- Files:
-
- 2 edited
-
psBitSet.c (modified) (6 diffs)
-
psBitSet.h (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/collections/psBitSet.c
r952 r965 10 10 * @author Ross Harman, MHPCC 11 11 * 12 * @version $Revision: 1. 5$ $Name: not supported by cvs2svn $13 * @date $Date: 2004-06- 09 21:18:24$12 * @version $Revision: 1.6 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2004-06-10 00:29:09 $ 14 14 * 15 15 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 22 22 #include <stdio.h> 23 23 #include <ctype.h> 24 #include <math.h> 24 25 25 26 #include "psBitSet.h" … … 77 78 psBitSet* psBitSetAlloc(int n) 78 79 { 80 int numBytes = 0; 79 81 psBitSet *newObj = NULL; 80 82 … … 84 86 } 85 87 88 numBytes = ceil(n/8.0); 86 89 newObj = psAlloc(sizeof(psBitSet)); 87 newObj->n = n ;90 newObj->n = numBytes; 88 91 89 92 // Ignore splint warning about releasing pointer members, since they've not been allocated yet 90 93 /*@i@*/ 91 newObj->bits = psAlloc(sizeof(char)*n );92 memset(newObj->bits, n , 0);94 newObj->bits = psAlloc(sizeof(char)*numBytes); 95 memset(newObj->bits, numBytes, 0); 93 96 94 97 return newObj; … … 113 116 return inBitSet; 114 117 } else if(bit < 0) { 115 psError(__func__, " : Line %d - Negative bit position not allowed: %d\n", __LINE__, bit); 118 psError(__func__, " : Line %d - Bit position too small: %d\n", __LINE__, bit); 119 return inBitSet; 120 } else if(bit > inBitSet->n*8-1) { 121 psError(__func__, " : Line %d - Bit position too large: %d\n", __LINE__, bit); 116 122 return inBitSet; 117 123 } … … 132 138 return 0; 133 139 } else if(bit < 0) { 134 psError(__func__, " : Line %d - Negative bit position not allowed: %d\n", __LINE__, bit); 140 psError(__func__, " : Line %d - Bit position too small: %d\n", __LINE__, bit); 141 return 0; 142 } else if(bit > inBitSet->n*8-1) { 143 psError(__func__, " : Line %d - Bit position too large: %d\n", __LINE__, bit); 135 144 return 0; 136 145 } -
trunk/psLib/src/collections/psBitSet.h
r614 r965 4 4 * 5 5 * Bit masks are useful tools for toggling various flags and options. This set of functions module provides 6 * a mechanism to create an array of bits of arbitrary length and manipulate them with basic binary 6 * a mechanism to create an array of bits of arbitrary length and manipulate them with basic binary 7 7 * operations. A print function is also provided to display the entire set of bits in binary format as a 8 8 * string. 9 9 * 10 10 * @author Ross Harman, MHPCC 11 * 12 * @version $Revision: 1. 3$ $Name: not supported by cvs2svn $13 * @date $Date: 2004-0 5-08 00:08:27$11 * 12 * @version $Revision: 1.4 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2004-06-10 00:28:58 $ 14 14 * 15 15 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 25 25 /** Struct containing array of bytes to hold bit data and corresponding array length. 26 26 * 27 * The bits in the struct are assembled in as an array of bytes with eight bits per byte. The bits are 27 * The bits in the struct are assembled in as an array of bytes with eight bits per byte. The bits are 28 28 * arranged with the LSB in first (right most) position of the first array element. 29 29 */ … … 41 41 /** Allocate a psBitSet. 42 42 * 43 * Create a psBitSet with the number of bytes specified by the user. All bits are set to zero upon 43 * Create a psBitSet with the number of bytes specified by the user. All bits are set to zero upon 44 44 * allocation. 45 45 * … … 48 48 /*@null@*/ 49 49 psBitSet* psBitSetAlloc( 50 int n /**< Number of b ytes in psBitSet array */50 int n /**< Number of bits in psBitSet array */ 51 51 ); 52 52 … … 61 61 /** Set a bit. 62 62 * 63 * Sets a bit at a given bit location, either one or zero. The bit is set based on a zero index with the 63 * Sets a bit at a given bit location, either one or zero. The bit is set based on a zero index with the 64 64 * first bit set in the zero bit slot of the zero element of the byte array. As an example, setting bit 3 in 65 65 * an array with two elements would result in an psBitSet that looks like 00000000 00001000. … … 74 74 /** Test the value of a bit. 75 75 * 76 * Prints the value of a bit at a given bit location, either one or zero. The resulting bit is based on a 77 * zero index format with the first bit set in the zero bit slot of the zero element of the byte array 76 * Prints the value of a bit at a given bit location, either one or zero. The resulting bit is based on a 77 * zero index format with the first bit set in the zero bit slot of the zero element of the byte array 78 78 * As an example, testing bit 3 in a psBitSet with two bytes that looks like 00000000 00001000 would return a 79 79 * value of one, since that is the value that was set.
Note:
See TracChangeset
for help on using the changeset viewer.
