File: saml.h

package info (click to toggle)
saml 970418-3
  • links: PTS
  • area: main
  • in suites: slink
  • size: 1,204 kB
  • ctags: 1,701
  • sloc: ansic: 17,182; sh: 2,583; yacc: 497; perl: 264; makefile: 250; python: 242
file content (85 lines) | stat: -rw-r--r-- 2,909 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/*
 * Copyright 1995,96 Thierry Bousch
 * Licensed under the Gnu Public License, Version 2
 *
 * $Id: saml.h,v 3.3 1996/09/13 16:20:19 bousch Exp $
 *
 * Public interface of SAML (Simple Algebraic Math Library).
 */

#ifndef _SAML_H
#define _SAML_H

#include <stddef.h>
#include "saml-mtypes.h"

/* Operations on mrefs */

typedef int mref_t;

void saml_init (void);
mref_t mref_new (void);
void mref_free (mref_t mr);
char* mref_string (mref_t mr);
int mref_type (mref_t mr);
const char* mref_stype (mref_t mr);

int mref_length (mref_t arr);
int mref_array (mref_t arr, int type, mref_t length);
int mref_getitem (mref_t mr, mref_t arr, mref_t i);	/* mr = arr[i]  */
int mref_setitem (mref_t arr, mref_t i, mref_t mr);	/* arr[i] = mr	*/
int mref_build (mref_t mr, int t, const char*);		/* mr = string  */
int mref_cast (mref_t mr, int t);
int mref_promote (mref_t mr, mref_t mr1);

void mref_copy (mref_t mr, mref_t mr1);			/* mr = mr1     */
void mref_swap (mref_t mr1, mref_t mr2);
int mref_add (mref_t mr, mref_t mr1, mref_t mr2);	/* mr = mr1+mr2 */
int mref_sub (mref_t mr, mref_t mr1, mref_t mr2);	/* mr = mr1-mr2 */
int mref_mul (mref_t mr, mref_t mr1, mref_t mr2);	/* mr = mr1*mr2 */
int mref_div (mref_t mr, mref_t mr1, mref_t mr2);	/* mr = mr1/mr2 */
int mref_mod (mref_t mr, mref_t mr1, mref_t mr2);	/* mr = mr1%mr2 */
int mref_gcd (mref_t mr, mref_t mr1, mref_t mr2);	/* mr = mr1&mr2 */
int mref_invert (mref_t mr, mref_t mr1);		/* mr = 1/mr1   */
int mref_negate (mref_t mr, mref_t mr1);		/* mr = -mr1    */
int mref_zero (mref_t mr, mref_t mr1);			/* mr = 0       */
int mref_one  (mref_t mr, mref_t mr1);			/* mr = 1       */
int mref_notzero (mref_t mr);
int mref_isneg (mref_t mr);
int mref_differ (mref_t mr1, mref_t mr2);
int mref_lessthan (mref_t mr1, mref_t mr2);
int mref_power (mref_t mr, mref_t mr1, int power);
int mref_sqrt (mref_t mr, mref_t mr1);

/* Type-specific operations */

int mref_error (mref_t result, int reason, const char *where);
/*int mref_error (mref_t result, int errno, const char *where); */
int mref_subs (mref_t result, mref_t expr, mref_t e1, mref_t e2);
int mref_det (mref_t result, mref_t matrix);
int mref_elim (mref_t result, mref_t lit, mref_t e1, mref_t e2);
int mref_diff (mref_t result, mref_t expr, mref_t lit);
int parse_poly (mref_t result, int type, const char* start, size_t len);
int mref_move_lit (mref_t result, mref_t expr, mref_t lit1, mref_t lit2);

/* Parsing */

int saml_parse (mref_t result, mref_t model);

/* Debugging */

extern long nb_mnodes_allocated;
extern long nb_mnodes_freed;
extern long nb_mnodes_reserved;

/* Error handling */

extern void (*saml_error_handler)(int reason, const char *where);
extern int saml_errors;
const char *saml_strerror (int reason);

void saml_default_ehandler (int, const char *);
void saml_fatal_ehandler (int, const char *);
void saml_silent_ehandler (int, const char *);

#endif	/* _SAML_H */