source: git/Singular/silink.h @ e8c8d5

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