CHDK_DE Vorschauversion  Trunk Rev. 6014
 Alle Datenstrukturen Dateien Funktionen Variablen Typdefinitionen Aufzählungen Aufzählungswerte Makrodefinitionen
bitvector.c-Dateireferenz
#include "bitvector.h"
#include "stdlib.h"
#include "stddef.h"
+ Include-Abhängigkeitsdiagramm für bitvector.c:

gehe zum Quellcode dieser Datei

Funktionen

bit_vector_tbv_create (int len, int nbits)
 
static void bv_setbit (const bit_vector_t *bm, int pos, int val)
 
static int bv_getbit (const bit_vector_t *bm, int pos)
 
void bv_set (const bit_vector_t *bm, int pos, int val)
 
void bv_set2 (const bit_vector_t *bm, int pos, int val)
 
void bv_set4 (const bit_vector_t *bm, int pos, int val)
 
int bv_get (const bit_vector_t *bm, int pos)
 
void bv_free (bit_vector_t *bm)
 

Dokumentation der Funktionen

bit_vector_t* bv_create ( int  len,
int  nbits 
)

Definiert in Zeile 5 der Datei bitvector.c.

6 {
8  if (bm == NULL)
9  return NULL;
10 
11  bm->ptrLen = len * nbits / 8 + 1;
12  bm->nElem = len;
13  bm->nBits = nbits;
14  bm->ptr = malloc(bm->ptrLen);
15  if (bm->ptr == NULL)
16  {
17  free(bm);
18  return NULL;
19  }
20 
21  return bm;
22 }
void bv_free ( bit_vector_t bm)

Definiert in Zeile 100 der Datei bitvector.c.

101 {
102  if (bm)
103  {
104  if (bm->ptr)
105  {
106  free(bm->ptr);
107  bm->ptr = NULL;
108  }
109 
110  free(bm);
111  }
112 }
int bv_get ( const bit_vector_t bm,
int  pos 
)

Definiert in Zeile 86 der Datei bitvector.c.

87 {
88  int ret = 0;
89  int i = bm->nBits - 1;
90  int bitpos = pos * bm->nBits;
91  do
92  {
93  ret |= (bv_getbit(bm, bitpos + i) << i);
94  }while(--i >= 0);
95 
96  return ret;
97 }
static int bv_getbit ( const bit_vector_t bm,
int  pos 
)
inlinestatic

Definiert in Zeile 35 der Datei bitvector.c.

36 {
37  // Note: bv_get() and other code rely on this
38  // method returning '1' if the bit is set.
39  // If you are interested only in the truth value,
40  // you can use bv_testbit().
41 
42  int bp = pos - ((pos >> 3) << 3);
43  return (bm->ptr[pos >> 3] & (1 << bp)) >> bp;
44 }
void bv_set ( const bit_vector_t bm,
int  pos,
int  val 
)

Definiert in Zeile 46 der Datei bitvector.c.

47 {
48  int i = bm->nBits - 1;
49  int bitpos = pos * bm->nBits;
50  do
51  {
52  bv_setbit(bm, bitpos + i, val & (1<<i));
53  }while(--i >= 0);
54 }
void bv_set2 ( const bit_vector_t bm,
int  pos,
int  val 
)

Definiert in Zeile 58 der Datei bitvector.c.

59 {
60  int i;
61  int bitpos = pos * bm->nBits;
62  for (i = 0; i < bm->nBits; ++i)
63  {
64  int t = val & (1<<i);
65  bv_setbit(bm, bitpos + i, t);
66  bv_setbit(bm, bitpos + i + bm->nBits, t);
67  }
68 }
void bv_set4 ( const bit_vector_t bm,
int  pos,
int  val 
)

Definiert in Zeile 72 der Datei bitvector.c.

73 {
74  int i;
75  int bitpos = pos * bm->nBits;
76  for (i = 0; i < bm->nBits; ++i)
77  {
78  int t = val & (1 << i);
79  bv_setbit(bm, bitpos + i, t);
80  bv_setbit(bm, bitpos + i + bm->nBits, t);
81  bv_setbit(bm, bitpos + i + bm->nBits * 2, t);
82  bv_setbit(bm, bitpos + i + bm->nBits * 3, t);
83  }
84 }
static void bv_setbit ( const bit_vector_t bm,
int  pos,
int  val 
)
inlinestatic

Definiert in Zeile 25 der Datei bitvector.c.

26 {
27  int bp = pos - ((pos >> 3) << 3);
28  if (val == 0)
29  bm->ptr[pos >> 3] &= ~(1 << bp);
30  else
31  bm->ptr[pos >> 3] |= (1 << bp);
32 }