minor
[charm.git] / src / conv-ccs / ccs-builtins.h
1 /**
2   A PUP_fmt inserts a 1-byte data format code 
3   before each pup'd data item.  This makes it possible
4   to unpack items without using PUP.
5 */
6 class PUP_fmt : public PUP::wrap_er {
7     typedef PUP::er parent;
8     
9     typedef unsigned char byte;
10     /**
11       The introductory byte for each field is bit-coded as:
12            | unused(2) | lengthLen(2) | typeCode(4) |
13     */
14     typedef enum {
15         lengthLen_single=0, // field is a single item
16         lengthLen_byte=1, // following 8 bits gives length of array
17         lengthLen_int=2, // following 32 bits gives length of array
18         lengthLen_long=3 // following 64 bits gives length of array (unimpl)
19     } lengthLen_t;
20     typedef enum { 
21         typeCode_byte=0, // unknown data type: nItems bytes
22         typeCode_int=2, // 32-bit integer array: nItems ints
23         typeCode_long=3, // 64-bit integer array: nItems ints
24         typeCode_float=5, // 32-bit floating-point array: nItems floats
25         typeCode_double=6, // 64-bit floating-point array: nItems floats
26         typeCode_comment=10, // comment/label: nItems byte characters
27         typeCode_sync=11, // synchronization code
28         typeCode_pointer=12 // 32 or 64 bit pointer, depending on the machine architecture
29     } typeCode_t;
30     void fieldHeader(typeCode_t typeCode,int nItems);
31 public:
32     PUP_fmt(PUP::er &parent_) 
33         :PUP::wrap_er(parent_,PUP::er::IS_COMMENTS) {}
34     
35     virtual void comment(const char *message);
36     virtual void synchronize(unsigned int m);
37     virtual void bytes(void *p,int n,size_t itemSize,PUP::dataType t);
38 };
39