source: git/Singular/links/silink.h @ 094ceb

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