Annotation of 43BSD/contrib/B/src/bint/b1obj.h, revision 1.1.1.1

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: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.