source: tags/ms_r16q2/MULTI_PROBE/MP_permute.cxx

Last change on this file was 8313, checked in by westram, 12 years ago
  • removed dead code

(partly reverted by [8316])

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.4 KB
Line 
1#include <MultiProbe.hxx>
2#include <cmath>
3
4enum Bitpos {
5    bit1 = 1,
6    bit2 = 2,
7    bit3 = 4,
8    bit4 = 8,
9    bit5 = 16,
10    bit6 = 32,
11    bit7 = 64,
12    bit8 = 128
13};
14
15Bitvector::Bitvector(int bits)
16{
17    int i;
18
19    num_of_bits = bits;
20    len =  (bits%8) ? (bits/8+1) : (bits/8);
21    vector = new char[len];
22
23    for (i=0; i<len; i++)
24        vector[i] = vector[i] & 0;
25}
26
27Bitvector::~Bitvector()
28{
29    delete [] vector;
30}
31
32
33int Bitvector::gen_id()
34{
35    // generiere eine int Nummer fuer die Farbe aus dem Bitvector
36    long num=0;
37    for (int i=0; i<num_of_bits; i++)
38        num += (int)(.5 + pow(2, i)*readbit(i));
39    return num;
40}
41Bitvector* Bitvector::merge(Bitvector* x)
42{
43    int lthis, lx, lback;
44    int i;                              // Zaehler
45
46    lthis = num_of_bits;
47    lx    = x->get_num_of_bits();
48    lback = (lthis>lx) ? lthis : lx;
49    Bitvector* back = new Bitvector(lback);
50
51    for (i=0; i<lback; i++)
52        if (this->readbit(i) || x->readbit(i))
53            back->setbit (i);
54
55    return back;
56}
57
58int Bitvector::subset(Bitvector* Obermenge)
59{
60    char* vector2 = Obermenge->get_vector();
61
62    for (int i=0; i<len; i++)
63    {
64        if ((vector[i] & vector2[i]) != vector[i])
65            return 0;
66    }
67    return 1;
68}
69
70
71void Bitvector::rshift()
72{
73    long gemerkt=0;
74
75    if (readbit(num_of_bits-1))
76        gemerkt=1;
77
78    for (int i=len-1; i>-1;  i--)
79    {
80        vector[i] = vector[i] << 1;
81        if (readbit(8*i-1))
82            setbit(8*i);
83    }
84    if (gemerkt == 1)
85        setbit(0);
86}
87
88void Bitvector::print()
89{
90    int i;
91    printf("Bitvektor:   (");
92    for (i=0; i<num_of_bits; i++)
93        printf("%d", readbit(i));
94    printf(")\n");
95}
96
97int Bitvector::setbit(int pos)
98{
99    int byte, idx, bitcode;
100    if (pos > num_of_bits)
101        return -1;
102    byte = pos/8;
103    idx = pos - byte*8;
104    bitcode = (int) pow(2, idx);
105    vector[byte] = vector[byte] | bitcode;
106    return 0;
107}
108
109int Bitvector::delbit(int pos)
110{
111    int byte, idx, bitcode;
112    if (pos > num_of_bits)
113        return -1;
114    byte = pos/8;
115    idx = pos - byte*8;
116    bitcode = (int) pow(2, idx);
117    if (readbit(pos))
118        vector[byte] = vector[byte] ^ bitcode;
119    return 0;
120}
121
122int Bitvector::readbit(int pos)
123{
124    int byte, idx, bitcode;
125    if (pos > num_of_bits)
126        return 0;
127    byte = pos/8;
128    idx = pos - byte*8;
129    bitcode = (int) pow(2, idx);
130    if (vector[byte] & bitcode)
131        return 1;
132    else
133        return 0;
134}
135
Note: See TracBrowser for help on using the repository browser.