Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/ElmerGUI/netgen/libsrc/general/bitarray.cpp
3206 views
1
/**************************************************************************/
2
/* File: bitarray.cc */
3
/* Autho: Joachim Schoeberl */
4
/* Date: 01. Jun. 95 */
5
/**************************************************************************/
6
7
/*
8
data type BitArray
9
*/
10
11
#include <mystdlib.h>
12
#include <myadt.hpp>
13
14
15
namespace netgen
16
{
17
//using namespace netgen;
18
19
BitArray :: BitArray ()
20
{
21
size = 0;
22
data = NULL;
23
}
24
25
BitArray :: BitArray (int asize)
26
{
27
size = 0;
28
data = NULL;
29
SetSize (asize);
30
}
31
32
BitArray :: ~BitArray ()
33
{
34
delete [] data;
35
}
36
37
void BitArray :: SetSize (int asize)
38
{
39
if (size == asize) return;
40
delete [] data;
41
42
size = asize;
43
data = new unsigned char [Addr (size)+1];
44
}
45
46
void BitArray :: Set ()
47
{
48
if (!size) return;
49
for (int i = 0; i <= Addr (size); i++)
50
data[i] = UCHAR_MAX;
51
}
52
53
void BitArray :: Clear ()
54
{
55
if (!size) return;
56
for (int i = 0; i <= Addr (size); i++)
57
data[i] = 0;
58
}
59
60
61
62
void BitArray :: Invert ()
63
{
64
if (!size) return;
65
for (int i = 0; i <= Addr (size); i++)
66
data[i] ^= 255;
67
}
68
69
void BitArray :: And (const BitArray & ba2)
70
{
71
if (!size) return;
72
for (int i = 0; i <= Addr (size); i++)
73
data[i] &= ba2.data[i];
74
}
75
76
77
void BitArray :: Or (const BitArray & ba2)
78
{
79
if (!size) return;
80
for (int i = 0; i <= Addr (size); i++)
81
data[i] |= ba2.data[i];
82
}
83
84
85
86
87
88
89
90
91
92
93
94
template <int BASE>
95
void BitArrayChar<BASE> :: Set ()
96
{
97
data = 1;
98
}
99
100
template <int BASE>
101
void BitArrayChar<BASE> :: Clear ()
102
{
103
data = 0;
104
}
105
106
107
template <int BASE>
108
void BitArrayChar<BASE> :: Invert ()
109
{
110
for (int i = BASE; i < data.Size()+BASE; i++)
111
data[i] = 1 - data[i];
112
}
113
114
template <int BASE>
115
void BitArrayChar<BASE> :: And (const BitArrayChar & ba2)
116
{
117
for (int i = BASE; i < data.Size()+BASE; i++)
118
data[i] &= ba2.data[i];
119
}
120
121
122
template <int BASE>
123
void BitArrayChar<BASE> :: Or (const BitArrayChar & ba2)
124
{
125
for (int i = BASE; i < data.Size()+BASE; i++)
126
data[i] |= ba2.data[i];
127
}
128
129
130
template class BitArrayChar<0>;
131
template class BitArrayChar<1>;
132
}
133
134