Charj: Construct Range when a range is given.
[charm.git] / src / langs / jade / jade.h
1 // emacs mode line -*- mode: c++; tab-width: 4 -*-
2
3 /** Naming conventions:
4
5   JADE_ is the prefix for any Jade calls exposed to the Jade user as
6   part of the Jade API.
7
8   Jade packages, such as MSA, which are part of the Jade language,
9   should follow the above convention, but for now let it be.
10
11   _JADEIDENT_ is the prefix for any compiler generated symbols not
12   exposed to the user as part of the API.
13
14 */
15
16 #ifndef JADE_H
17 #define JADE_H
18
19 // This part of the .h file is for Jade users to read too.
20
21 // The Jade user needs to know the MSA API.  But, strictly speaking,
22 // there should be a java file with the MSA API.
23 #include "msa/msa.h"
24
25 // This part is the .h file used by the compiler generated code.  The
26 // Jade user should never see it.  I will put it into a separate file
27 // when I have the time.
28
29 #include "JArray.h"
30
31 #define _JADE_MIN(a,b) (((a)<(b))?(a):(b))
32
33 /// Fast, fixed-size bitvector class, by Orion.
34 template <unsigned int NUM_BITS>
35 class _jade_fixedlength_bitvector {
36 public:
37         /// Data type used to store actual bits in the vector.
38         typedef unsigned long store_t;
39         enum { store_bits=8*sizeof(store_t) };
40         
41         /// Number of store_t's in our vector.
42         enum { len=(NUM_BITS+(store_bits-1))/store_bits };
43         store_t store[len];
44         
45         /// Fill the entire vector with this value.
46         void fill(store_t s) {
47                 for (int i=0;i<len;i++) store[i]=s;
48         }
49         void clear(void) {fill(0);}
50         _jade_fixedlength_bitvector() {clear();}
51         
52         /// Set-to-1 bit i of the vector.
53         void set(unsigned int i) { store[i/store_bits] |= (1lu<<(i%store_bits)); }
54         /// Clear-to-0 bit i of the vector.
55         void clear(unsigned int i) { store[i/store_bits] &= ~(1lu<<(i%store_bits)); }
56         
57         /// Return the i'th bit of the vector.
58         bool get(unsigned int i) { return (store[i/store_bits] & (1lu<<(i%store_bits))); }
59
60 //     virtual void pup(PUP::er &p){p(store,len);};
61 };
62
63 #endif