1: /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1984. */
2: /* $Header: b1obj.h,v 1.1 84/06/28 00:48:43 timo Exp $ */
3:
4: /* B values, locations, environments: the B abstract machine */
5:
6: /****************************** general ******************************/
7:
8: typedef intlet relation; /* < 0, == 0, > 0 */
9: relation compare();
10:
11: #define Is_text(v) (Type(v) == Tex)
12: #define Is_number(v) (Type(v) == Num)
13: #define Is_compound(v) (Type(v) == Com)
14: #define Is_list(v) (Type(v) == Lis || Type(v) == ELT)
15: #define Is_table(v) (Type(v) == Tab || Type(v) == ELT)
16: #define Is_tlt(v) (Type(v)==Tex || Type(v)==Lis || Type(v)==Tab || Type(v)==ELT)
17: #define Is_ELT(v) (Type(v) == ELT)
18:
19: #define Is_simploc(v) (Type(v) == Sim)
20: #define Is_tbseloc(v) (Type(v) == Tse)
21: #define Is_trimloc(v) (Type(v) == Tri)
22: #define Is_refinement(v) (Type(v) == Ref)
23: #define Is_formal(v) (Type(v) == For)
24: #define Is_shared(v) (Type(v) == Glo)
25: #define Is_filed(v) (Type(v) == Per)
26: #define Is_function(v) (Type(v) == Fun)
27: #define Is_predicate(v) (Type(v) == Prd)
28: #define Is_howto(v) (Type(v) == How)
29:
30: value grab_num();
31: value regrab_num();
32: value grab_rat();
33: value grab_approx();
34: value grab_tex();
35: value grab_com();
36: value grab_elt();
37: value grab_lis();
38: value grab_tab();
39: value grab_sim();
40: value grab_tri();
41: value grab_tse();
42: value grab_how();
43: value grab_for();
44: value grab_glo();
45: value grab_per();
46: value grab_fun();
47: value grab_prd();
48: value grab_ref();
49:
50: value copy();
51: /* Procedure release(); */
52: /* Procedure uniql(); */
53: /* Procedure uniq_assoc(); */
54: double hash();
55:
56: /****************************** Texts ******************************/
57: string strcpy(), strncpy(), strcat(), sprintf(), index();
58:
59: bool character();
60:
61: value mk_text();
62: char charval();
63: string strval();
64:
65: value concat();
66: value behead();
67: value curtail();
68: value trim();
69: value repeat();
70:
71: value adjleft();
72: value centre();
73: value adjright();
74:
75: value convert();
76:
77: /****************************** Numbers ******************************/
78:
79: /* Predicates */
80: bool integral(); /* is the value an integer? */
81: bool large(); /* can a number be represented by a C int? */
82:
83: /* Constants */
84: extern value zero, one;
85:
86: /* Conversion of abstract values to concrete objects */
87: double numval(); /* numeric value of any number */
88: int intval(); /* numeric value of integral number */
89: intlet propintlet(); /* converts int to intlet */
90: string convnum(); /* character string approximation of any number */
91: int numcomp(); /* Comparison of two numbers: yields -1, 0 or 1 */
92: double numhash(); /* Hashes any abstract number to a 'double' */
93:
94: /* Conversion of concrete objects to abstract numbers */
95: value numconst(); /* string argument */
96: value mk_integer(); /* int argument */
97:
98: /* Functions on numbers */
99: value sum();
100: value diff();
101: value negated();
102: value prod();
103: value quot();
104: value modulo();
105: value floorf();
106: value ceilf();
107: value round1();
108: value round2();
109: value mod();
110: value power();
111: value absval();
112: value signum();
113: value numerator();
114: value denominator();
115: value approximate();
116: value random();
117: value root1();
118: value sin1();
119: value cos1();
120: value tan1();
121: value atn1();
122: value exp1();
123: value log1();
124: value root2();
125: value atn2();
126: value log2();
127: value pi();
128: value e();
129:
130: /****************************** Compounds ******************************/
131: #define Nfields(c) Length(c)
132: #define Field(c, i) ((Ats(c)+(i)))
133: #define k_Overfields for (k= 0; k < len; k++)
134: #define Lastfield(k) ((k) == len-1)
135:
136: #define mk_compound(len) grab_com(len)
137:
138: value* field();
139: /* Procedure put_in_field(); */
140:
141: /****************************** Lists ******************************/
142: value mk_numrange();
143: value mk_charrange();
144:
145: /* Procedurre insert(); */
146: /* Procedure remove(); */
147:
148: /****************************** Tables ******************************/
149:
150: value keys();
151: bool in_keys();
152: value associate();
153:
154: /* Procedure replace(); */
155: /* Procedure delete(); */
156:
157: value* adrassoc();
158: value* key();
159: value* assoc();
160:
161: /****************************** Texts, Lists, and Tables *******************/
162: value mk_elt();
163:
164: bool in();
165:
166: value size();
167: value size2();
168: value min1();
169: value min2();
170: value max1();
171: value max2();
172: value th_of();
173: value thof();
174:
175: int length(); /* The same as size, temporary until part2 is written in B */
176: bool empty(); /* whether #v=0: also temporary */
177:
178: /****************************** Other kinds of value ************************/
179:
180: #define Simploc(l) ((simploc *)Ats(l))
181: #define Tbseloc(l) ((tbseloc *)Ats(l))
182: #define Trimloc(l) ((trimloc *)Ats(l))
183: #define Funprd(f) ((funprd *)Ats(f))
184: #define How_to(u) ((how *)Ats(u))
185: #define Formal(p) ((formal *)Ats(f))
186: #define Refinement(r) ((ref *)Ats(r))
187:
188: loc mk_simploc();
189: loc mk_trimloc();
190: loc mk_tbseloc();
191:
192: value mk_per();
193: fun mk_fun();
194: prd mk_prd();
195: value mk_how();
196: value mk_ref();
Defined macros
Is_tlt
defined in line
16; used 10 times
Usage of this include