📄 value.h
字号:
#define matsize(n) (sizeof(MATRIX) - sizeof(VALUE) + ((n) * sizeof(VALUE)))extern DLL MATRIX *matadd(MATRIX *m1, MATRIX *m2);extern DLL MATRIX *matsub(MATRIX *m1, MATRIX *m2);extern DLL MATRIX *matmul(MATRIX *m1, MATRIX *m2);extern DLL MATRIX *matneg(MATRIX *m);extern DLL MATRIX *matalloc(long size);extern DLL MATRIX *matcopy(MATRIX *m);extern DLL MATRIX *matinit(MATRIX *m, VALUE *v1, VALUE *v2);extern DLL MATRIX *matsquare(MATRIX *m);extern DLL MATRIX *matinv(MATRIX *m);extern DLL MATRIX *matscale(MATRIX *m, long n);extern DLL MATRIX *matshift(MATRIX *m, long n);extern DLL MATRIX *matmulval(MATRIX *m, VALUE *vp);extern DLL MATRIX *matpowi(MATRIX *m, NUMBER *q);extern DLL MATRIX *matconj(MATRIX *m);extern DLL MATRIX *matquoval(MATRIX *m, VALUE *vp, VALUE *v3);extern DLL MATRIX *matmodval(MATRIX *m, VALUE *vp, VALUE *v3);extern DLL MATRIX *matint(MATRIX *m);extern DLL MATRIX *matfrac(MATRIX *m);extern DLL MATRIX *matappr(MATRIX *m, VALUE *v2, VALUE *v3);extern DLL VALUE mattrace(MATRIX *m);extern DLL MATRIX *mattrans(MATRIX *m);extern DLL MATRIX *matcross(MATRIX *m1, MATRIX *m2);extern DLL BOOL mattest(MATRIX *m);extern DLL void matsum(MATRIX *m, VALUE *vres);extern DLL BOOL matcmp(MATRIX *m1, MATRIX *m2);extern DLL int matsearch(MATRIX *m, VALUE *vp, long start, long end, ZVALUE *index);extern DLL int matrsearch(MATRIX *m, VALUE *vp, long start, long end, ZVALUE *index);extern DLL VALUE matdet(MATRIX *m);extern DLL VALUE matdot(MATRIX *m1, MATRIX *m2);extern DLL void matfill(MATRIX *m, VALUE *v1, VALUE *v2);extern DLL void matfree(MATRIX *m);extern DLL void matprint(MATRIX *m, long max_print);extern DLL VALUE *matindex(MATRIX *mp, BOOL create, long dim, VALUE *indices);extern DLL void matreverse(MATRIX *m);extern DLL void matsort(MATRIX *m);extern DLL BOOL matisident(MATRIX *m);extern DLL MATRIX *matround(MATRIX *m, VALUE *v2, VALUE *v3);extern DLL MATRIX *matbround(MATRIX *m, VALUE *v2, VALUE *v3);/* * List definitions. * An individual list element. */typedef struct listelem LISTELEM;struct listelem { LISTELEM *e_next; /* next element in list (or NULL) */ LISTELEM *e_prev; /* previous element in list (or NULL) */ VALUE e_value; /* value of this element */};/* * Structure for a list of elements. */struct list { LISTELEM *l_first; /* first list element (or NULL) */ LISTELEM *l_last; /* last list element (or NULL) */ LISTELEM *l_cache; /* cached list element (or NULL) */ long l_cacheindex; /* index of cached element (or undefined) */ long l_count; /* total number of elements in the list */};extern DLL void insertlistfirst(LIST *lp, VALUE *vp);extern DLL void insertlistlast(LIST *lp, VALUE *vp);extern DLL void insertlistmiddle(LIST *lp, long index, VALUE *vp);extern DLL void removelistfirst(LIST *lp, VALUE *vp);extern DLL void removelistlast(LIST *lp, VALUE *vp);extern DLL void removelistmiddle(LIST *lp, long index, VALUE *vp);extern DLL void listfree(LIST *lp);extern DLL void listprint(LIST *lp, long max_print);extern DLL int listsearch(LIST *lp, VALUE *vp, long start, long end, ZVALUE *index);extern DLL int listrsearch(LIST *lp, VALUE *vp, long start, long end, ZVALUE *index);extern DLL BOOL listcmp(LIST *lp1, LIST *lp2);extern DLL VALUE *listfindex(LIST *lp, long index);extern DLL LIST *listalloc(void);extern DLL LIST *listcopy(LIST *lp);extern DLL void listreverse(LIST *lp);extern DLL void listsort(LIST *lp);extern DLL LIST *listappr(LIST *lp, VALUE *v2, VALUE *v3);extern DLL LIST *listround(LIST *m, VALUE *v2, VALUE *v3);extern DLL LIST *listbround(LIST *m, VALUE *v2, VALUE *v3);extern DLL LIST *listquo(LIST *lp, VALUE *v2, VALUE *v3);extern DLL LIST *listmod(LIST *lp, VALUE *v2, VALUE *v3);extern DLL BOOL evp(LISTELEM *cp, LISTELEM *x, VALUE *vres);extern DLL BOOL evalpoly(LIST *clist, LISTELEM *x, VALUE *vres);extern DLL void insertitems(LIST *lp1, LIST *lp2);extern DLL LISTELEM *listelement(LIST *, long);extern DLL LIST *listsegment(LIST *, long, long);/* * Structures for associations. * Associations are "indexed" by one or more arbitrary values, and are * stored in a hash table with their hash values for quick indexing. */typedef struct assocelem ASSOCELEM;struct assocelem { ASSOCELEM *e_next; /* next element in list (or NULL) */ long e_dim; /* dimension of indexing for this element */ QCKHASH e_hash; /* hash value for this element */ VALUE e_value; /* value of association */ VALUE e_indices[1]; /* index values (variable length) */};struct assoc { long a_count; /* number of elements in the association */ long a_size; /* current size of association hash table */ ASSOCELEM **a_table; /* current hash table for elements */};extern DLL ASSOC *assocalloc(long initsize);extern DLL ASSOC *assoccopy(ASSOC *ap);extern DLL void assocfree(ASSOC *ap);extern DLL void assocprint(ASSOC *ap, long max_print);extern DLL int assocsearch(ASSOC *ap, VALUE *vp, long start, long end, ZVALUE *index);extern DLL int assocrsearch(ASSOC *ap, VALUE *vp, long start, long end, ZVALUE *index);extern DLL BOOL assoccmp(ASSOC *ap1, ASSOC *ap2);extern DLL VALUE *assocfindex(ASSOC *ap, long index);extern DLL VALUE *associndex(ASSOC *ap, BOOL create, long dim, VALUE *indices);/* * Object actions. */#define OBJ_PRINT 0 /* print the value */#define OBJ_ONE 1 /* create the multiplicative identity */#define OBJ_TEST 2 /* test a value for "zero" */#define OBJ_ADD 3 /* add two values */#define OBJ_SUB 4 /* subtrace one value from another */#define OBJ_NEG 5 /* negate a value */#define OBJ_MUL 6 /* multiply two values */#define OBJ_DIV 7 /* divide one value by another */#define OBJ_INV 8 /* invert a value */#define OBJ_ABS 9 /* take absolute value of value */#define OBJ_NORM 10 /* take the norm of a value */#define OBJ_CONJ 11 /* take the conjugate of a value */#define OBJ_POW 12 /* take the power function */#define OBJ_SGN 13 /* return the sign of a value */#define OBJ_CMP 14 /* compare two values for equality */#define OBJ_REL 15 /* compare two values for inequality */#define OBJ_QUO 16 /* integer quotient of values */#define OBJ_MOD 17 /* remainder of division of values */#define OBJ_INT 18 /* integer part of */#define OBJ_FRAC 19 /* fractional part of */#define OBJ_INC 20 /* increment by one */#define OBJ_DEC 21 /* decrement by one */#define OBJ_SQUARE 22 /* square value */#define OBJ_SCALE 23 /* scale by power of two */#define OBJ_SHIFT 24 /* shift left (or right) by number of bits */#define OBJ_ROUND 25 /* round to specified decimal places */#define OBJ_BROUND 26 /* round to specified binary places */#define OBJ_ROOT 27 /* take nth root of value */#define OBJ_SQRT 28 /* take square root of value */#define OBJ_OR 29 /* take bitwise or of values */#define OBJ_AND 30 /* take bitwise and of values */#define OBJ_NOT 31 /* take logical not of value */#define OBJ_FACT 32 /* factorial or postfix ! */#define OBJ_MIN 33 /* minimum value */#define OBJ_MAX 34 /* maximum value */#define OBJ_SUM 35 /* sum value */#define OBJ_ASSIGN 36 /* assign value */#define OBJ_XOR 37 /* ~ difference of values */#define OBJ_COMP 38 /* ~ complement of value */#define OBJ_CONTENT 39 /* unary hash op */#define OBJ_HASHOP 40 /* binary hash op */#define OBJ_BACKSLASH 41 /* unary backslash op */#define OBJ_SETMINUS 42 /* binary backslash op */#define OBJ_PLUS 43 /* unary + op */#define OBJ_MAXFUNC 43 /* highest function *//* * Definition of an object type. * This is actually a varying sized structure. */typedef struct { int oa_index; /* index of object type */ int oa_count; /* number of elements defined */ long oa_indices[OBJ_MAXFUNC+1]; /* function indices for actions */ int oa_elements[1]; /* element indices (MUST BE LAST) */} OBJECTACTIONS;#define objectactionsize(elements) \ (sizeof(OBJECTACTIONS) + ((elements) - 1) * sizeof(int))/* * Structure of an object. * This is actually a varying sized structure. * However, there are always at least USUAL_ELEMENTS values in the object. */struct object { OBJECTACTIONS *o_actions; /* action table for this object */ VALUE o_table[USUAL_ELEMENTS]; /* object values (MUST BE LAST) */};#define objectsize(elements) \ (sizeof(OBJECT) + ((elements) - USUAL_ELEMENTS) * sizeof(VALUE))extern DLL OBJECT *objcopy(OBJECT *op);extern DLL OBJECT *objalloc(long index);extern DLL VALUE objcall(int action, VALUE *v1, VALUE *v2, VALUE *v3);extern DLL void objfree(OBJECT *op);extern DLL int addelement(char *name);extern DLL int defineobject(char *name, int indices[], int count);extern DLL int checkobject(char *name);extern DLL void showobjfuncs(void);extern DLL void showobjtypes(void);extern DLL int findelement(char *name);extern DLL char *objtypename(unsigned long index);extern DLL int objoffset(OBJECT *op, long index);/* * Configuration parameter name and type. */extern NAMETYPE configs[];extern DLL void config_value(CONFIG *cfg, int type, VALUE *ret);extern DLL void setconfig(int type, VALUE *vp);extern DLL void config_print(CONFIG *cfg); /* the CONFIG to print *//* * size, memsize and sizeof support */extern DLL long elm_count(VALUE *vp);extern DLL size_t lsizeof(VALUE *vp);extern DLL size_t memsize(VALUE *vp);/* * String functions */extern DLL STRING *stringadd(STRING *, STRING *);extern DLL STRING *stringcopy(STRING *);extern DLL STRING *stringsub(STRING *, STRING *);extern DLL STRING *stringmul(NUMBER *, STRING *);extern DLL STRING *stringand(STRING *, STRING *);extern DLL STRING *stringor(STRING *, STRING *);extern DLL STRING *stringxor(STRING *, STRING *);extern DLL STRING *stringdiff(STRING *, STRING *);extern DLL STRING *stringsegment(STRING *, long, long);extern DLL STRING *stringshift(STRING *, long);extern DLL STRING *stringcomp(STRING *);extern DLL STRING *stringneg(STRING *);extern DLL STRING *stringcpy(STRING *, STRING *);extern DLL STRING *stringncpy(STRING *, STRING *, size_t);extern DLL long stringcontent(STRING *s);extern DLL long stringlowbit(STRING *s);extern DLL long stringhighbit(STRING *s);extern DLL BOOL stringcmp(STRING *, STRING *);extern DLL BOOL stringrel(STRING *, STRING *);extern DLL int stringbit(STRING *, long);extern DLL BOOL stringtest(STRING *);extern DLL int stringsetbit(STRING *, long, BOOL);extern DLL int stringsearch(STRING *, STRING *, long, long, ZVALUE *);extern DLL int stringrsearch(STRING *, STRING *, long, long, ZVALUE *);#endif /* !__VALUE_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -