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