source: git/Singular/silink.h @ 79ea48

spielwiese
Last change on this file since 79ea48 was b5f5444, checked in by Burcin Erocal <burcin@…>, 13 years ago
Fix includes in Singular/
  • Property mode set to 100644
File size: 3.2 KB
Line 
1#ifndef SILINK_H
2#define SILINK_H
3/****************************************
4*  Computer Algebra System SINGULAR     *
5****************************************/
6/* $Id$ */
7/*
8* ABSTRACT: general interface to links
9*/
10
11#include <kernel/structs.h>
12#include <Singular/sing_dbm.h>
13#include <Singular/lists.h>
14#include <Singular/attrib.h>
15
16typedef struct sip_link    ip_link;
17typedef ip_link *          si_link;
18
19
20// extension links:
21typedef BOOLEAN    (*slOpenProc)(si_link l, short flag, leftv h);
22typedef BOOLEAN    (*slWriteProc)(si_link l, leftv lv);
23typedef BOOLEAN    (*slCloseProc)(si_link l);
24typedef BOOLEAN    (*slKillProc)(si_link l);
25typedef leftv      (*slReadProc)(si_link l);
26typedef leftv      (*slRead2Proc)(si_link l, leftv a);
27typedef BOOLEAN    (*slDumpProc)(si_link l);
28typedef BOOLEAN    (*slGetDumpProc)(si_link l);
29typedef const char* (*slStatusProc)(si_link l, const char *request);
30
31struct s_si_link_extension
32{
33  si_link_extension next;
34  slOpenProc       Open;
35  slCloseProc      Close;
36  slKillProc       Kill;
37  slReadProc       Read;
38  slRead2Proc      Read2;
39  slWriteProc      Write;
40  slDumpProc       Dump;
41  slGetDumpProc    GetDump;
42  slStatusProc     Status;
43  const char       *type;
44};
45
46struct sip_link
47{
48  si_link_extension m; // methods
49  char *mode;
50  char *name;          // used for filename and/or further specs
51  void *data;          // the link itself
52  BITSET flags;        // 0=close open = 1: read = 2: write = 3
53  short ref;           // reference counter
54};
55
56// flags:
57#define SI_LINK_CLOSE   0
58#define SI_LINK_OPEN    1
59#define SI_LINK_READ    2
60#define SI_LINK_WRITE   4
61
62// tests:
63#define SI_LINK_CLOSE_P(l)  (!(l)->flags)
64#define SI_LINK_OPEN_P(l)   ((l)->flags & SI_LINK_OPEN)
65#define SI_LINK_W_OPEN_P(l) ((l)->flags &  SI_LINK_WRITE)
66#define SI_LINK_R_OPEN_P(l) ((l)->flags &  SI_LINK_READ)
67#define SI_LINK_RW_OPEN_P(l) (SI_LINK_W_OPEN_P(l) && SI_LINK_R_OPEN_P(l))
68
69#define SI_LINK_SET_CLOSE_P(l)  ((l)->flags = SI_LINK_CLOSE)
70#define SI_LINK_SET_OPEN_P(l, flag)   ((l)->flags |= SI_LINK_OPEN |flag)
71#define SI_LINK_SET_W_OPEN_P(l) ((l)->flags |= (SI_LINK_OPEN | SI_LINK_WRITE))
72#define SI_LINK_SET_R_OPEN_P(l) ((l)->flags |= (SI_LINK_OPEN | SI_LINK_READ))
73#define SI_LINK_SET_RW_OPEN_P(l) ((l)->flags |= (SI_LINK_OPEN | SI_LINK_READ | SI_LINK_WRITE))
74
75BOOLEAN slOpen(si_link l, short flag, leftv h);
76BOOLEAN slClose(si_link l);
77leftv   slRead(si_link l,leftv a=NULL);
78BOOLEAN slWrite(si_link l, leftv v);
79BOOLEAN slDump(si_link l);
80BOOLEAN slGetDump(si_link l);
81const char* slStatus(si_link l, const char *request);
82const char* slStatusAscii(si_link l,const  char* request);
83BOOLEAN slInit(si_link l, char *str);
84void slKill(si_link l);
85void slCleanUp(si_link l);
86void slStandardInit();
87inline si_link slCopy(si_link l)
88{
89  l->ref++;
90  return l;
91}
92
93#include <omalloc/omalloc.h>
94inline char* slString(si_link l)
95{
96  if (l->name != NULL)
97  {
98    return omStrDup(l->name);
99  }
100  else
101  {
102    return omStrDup("");
103  }
104}
105
106extern omBin s_si_link_extension_bin;
107extern omBin sip_link_bin;
108extern omBin ip_link_bin;
109
110int slStatusSsiL(lists L, int timeout);
111
112typedef struct
113{
114  leftv u;
115  si_link l;
116  void * next;
117} link_struct;
118
119typedef link_struct* link_list;
120
121extern link_list ssiToBeClosed;
122#endif // SILINK_H
Note: See TracBrowser for help on using the repository browser.