1 ///////////////////////////////////////////////////////////////////////////////
3 // This file describe the collection datatypes in Prop.
5 ///////////////////////////////////////////////////////////////////////////////
6 #ifndef collection_datatypes_h
7 #define collection_datatypes_h
11 ///////////////////////////////////////////////////////////////////////////////
13 // CollectionAttrib describes the set of extension properties that
14 // a collection may have.
16 ///////////////////////////////////////////////////////////////////////////////
17 enum { COLLECTION_NONE = 0,
18 COLLECTION_ORDERED = 1, // is it ordered?
19 COLLECTION_IDEMPOTENT = 2, // no duplicates?
20 COLLECTION_SINGLE_VALUED = 4, // single valued map?
21 COLLECTION_EXTERNAL_KEYED = 8 // external ordering function?
24 ///////////////////////////////////////////////////////////////////////////////
26 // Operations that can be performed on a collection.
28 ///////////////////////////////////////////////////////////////////////////////
29 enum { OP_size = 1<<1, // cardinality
30 OP_capacity = 1<<2, // maximum capacity
31 OP_growth = 1<<3, // dynamic expansion
32 OP_copy = 1<<4, // copy
33 OP_move = 1<<5, // destructive copy
34 OP_merge = 1<<6, // destructive merge
35 OP_with = 1<<7, // insert an element by key
36 OP_less = 1<<8, // delete an element by key
37 OP_union = 1<<9, // union
38 OP_intersect = 1<<10, // intersection
39 OP_arb = 1<<11, // choose an arbitrary element
40 OP_delete = 1<<12, // self deletion
41 OP_forall = 1<<13, // iteration
42 OP_minkey = 1<<14, // find min element by key
43 OP_maxkey = 1<<15, // find max element by key
44 OP_deletemin = 1<<16, // delete min element by key
45 OP_deletemax = 1<<17, // delete max element by key
46 OP_count = 1<<18, // count element by key
47 OP_map = 1<<19, // f(x)
48 OP_mapall = 1<<20, // f{x}
49 OP_inverse = 1<<21, // f^{-1}{x}
50 OP_dom = 1<<22, // dom f
51 OP_ran = 1<<23 // ran f
54 ///////////////////////////////////////////////////////////////////////////////
56 // Intensional properties are described by CollectionRep.
58 ///////////////////////////////////////////////////////////////////////////////
61 REP_unbased = 1<<1, // linked list representation
62 REP_weakly_based = 1<<2, // linked list representation
63 REP_strongly_based = 1<<3, // linked list representation
64 REP_array = 1<<4, // array representation
65 REP_based = 1<<5, // based set representation
66 REP_bitmap = 1<<6, // bitmap representation
67 REP_hash = 1<<7, // hash table representation
68 REP_heap = 1<<8 // binary heap representation
71 ///////////////////////////////////////////////////////////////////////////////
73 // The collection type descriptor is described as follows. All collection
74 // types are generative.
76 ///////////////////////////////////////////////////////////////////////////////
77 datatype CollectionDesc : MEM =
79 attrib : CollectionAttrib = COLLECTION_NONE,
80 rep : CollectionRep = REP_none
82 where type CollectionOp = int
83 and CollectionAttrib = int
84 and CollectionDescs = List<CollectionDesc>