source: git/Singular/links/silink.h @ 97c955

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