source: git/Singular/mpsr_Put.h @ f69c6c

spielwiese
Last change on this file since f69c6c was 7716999, checked in by Frank Seelisch <seelisch@…>, 14 years ago
missing subfolders in includes (to make it compile under Windows) git-svn-id: file:///usr/local/Singular/svn/trunk@13150 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 8.0 KB
Line 
1/****************************************
2*  Computer Algebra System SINGULAR     *
3****************************************/
4/* $Id$ */
5/***************************************************************
6 *
7 * File:       mpsr_Put.h
8 * Purpose:    declarations for put routines for MP connection to Singular
9 * Author:     Olaf Bachmann (10/95)
10 *
11 * Change History (most recent first):
12 *  o 1/97 obachman
13 *    Updated putting routines to MP and MPP v1.1
14 *
15 ***************************************************************/
16
17#ifndef __MPSR_PUT__
18#define __MPSR_PUT__
19
20#include"mpsr.h"
21
22#include <kernel/structs.h>
23#include"kernel/febase.h"
24#include"tok.h"
25#include"ipid.h"
26
27/***************************************************************
28 * 1.) Some handy macros
29 *
30 ***************************************************************/
31// some often used flags settings for annotations
32#define MP_AnnotReqValTree                                  \
33(MP_AnnotRequired | MP_AnnotValuated | MP_AnnotTreeScope)
34
35#define MP_AnnotReqValNode                      \
36(MP_AnnotRequired | MP_AnnotValuated)
37
38
39/***************************************************************
40 *
41 * There are 4 different layers on which things are put:
42 * 1.) Singular Top-level Data (chains of leftv's)
43 * 2.) Leftv Data
44 * 3.) Plain Singular data
45 * 4.) MP primitive polynomial data
46 *
47 ***************************************************************/
48
49/***************************************************************
50 * 4.) Low-level polynomial data -- they should only be used internally
51 *
52 ***************************************************************/
53extern mpsr_Status_t mpsr_PutPolyData(MP_Link_pt link, poly p, ring cring);
54extern mpsr_Status_t mpsr_PutPolyVectorData(MP_Link_pt link, poly p,ring cring);
55extern int          mpsr_GetNumOfRingAnnots(ring cring, BOOLEAN mv);
56extern mpsr_Status_t mpsr_PutRingAnnots(MP_Link_pt link, ring cring,BOOLEAN mv);
57
58/***************************************************************
59 * 3.) Routines for Putting Plain Singular data
60 *
61 ***************************************************************/
62// First, ring-independent data
63inline mpsr_Status_t mpsr_PutInt(MP_Link_pt link, int i)
64{
65  mp_return(MP_PutSint32Packet(link, (MP_Sint32_t) i, 0));
66}
67extern mpsr_Status_t mpsr_PutIntVec(MP_Link_pt link, intvec *iv);
68extern mpsr_Status_t mpsr_PutIntMat(MP_Link_pt link, intvec *iv);
69inline mpsr_Status_t mpsr_PutString(MP_Link_pt link, char *str)
70{
71  if (strcmp(str, MPSR_QUIT_STRING) == 0)
72    mp_return(MP_PutCommonOperatorPacket(link,
73                                         MP_MpDict,
74                                         MP_CopMpEndSession,
75                                         0, 0));
76  else
77    mp_return(MP_PutStringPacket(link, str, 0));
78}
79extern mpsr_Status_t mpsr_PutRing(MP_Link_pt link, ring r);
80extern mpsr_Status_t mpsr_PutProc(MP_Link_pt link, const char *pname,procinfov proc);
81extern mpsr_Status_t mpsr_PutPackage(MP_Link_pt link, package pack);
82inline mpsr_Status_t mpsr_PutDef(MP_Link_pt link, char *name)
83{
84  mp_return(MP_PutIdentifierPacket(link, MP_SingularDict, name, 0));
85}
86// next, ring-dependent data
87extern mpsr_Status_t mpsr_PutList(MP_Link_pt link, lists l, ring cring);
88extern mpsr_Status_t mpsr_PutCopCommand(MP_Link_pt link, command c, ring cring);
89extern mpsr_Status_t mpsr_PutOpCommand(MP_Link_pt link, command c, ring cring);
90extern mpsr_Status_t mpsr_PutNumber(MP_Link_pt link,number n,ring cring);
91extern mpsr_Status_t mpsr_PutPoly(MP_Link_pt link,poly p,ring cring);
92extern mpsr_Status_t mpsr_PutPolyVector(MP_Link_pt link,poly p,ring cring);
93extern mpsr_Status_t mpsr_PutIdeal(MP_Link_pt link, ideal id, ring cring);
94extern mpsr_Status_t mpsr_PutModule(MP_Link_pt link, ideal id, ring cring);
95extern mpsr_Status_t mpsr_PutMatrix(MP_Link_pt link, ideal id, ring cring);
96extern mpsr_Status_t mpsr_PutMap(MP_Link_pt link, map m, ring cring);
97
98
99
100/***************************************************************
101 * 2.) Routines for Putting Singular Leftv's
102 *
103 *
104 ***************************************************************/
105// The "Master routine, which takes any leftv, and calls the respective
106// Put routine
107extern mpsr_Status_t mpsr_PutLeftv(MP_Link_pt link, leftv v, ring cring);
108
109// A handy macro which checks for the type of leftvs
110#ifdef MPSR_DEBUG
111#define typecheck(v,type)                           \
112do if ((v)->Typ() != (type))                        \
113{                                                   \
114  return mpsr_SetError(mpsr_WrongLeftvType);        \
115}                                                   \
116while (0)
117#else
118#define typecheck(v,type)   ((void) 0)
119#endif
120
121// First, ring-independent data
122inline mpsr_Status_t mpsr_PutIntLeftv(MP_Link_pt link, leftv v)
123{
124  typecheck(v, INT_CMD);
125  mp_return(MP_PutSint32Packet(link, (MP_Sint32_t) v->Data(), 0));
126}
127inline mpsr_Status_t mpsr_PutIntVecLeftv(MP_Link_pt link, leftv v)
128{
129  typecheck(v, INTVEC_CMD);
130  return mpsr_PutIntVec(link, (intvec *) v->Data());
131}
132inline mpsr_Status_t mpsr_PutIntMatLeftv(MP_Link_pt link, leftv v)
133{
134  typecheck(v, INTMAT_CMD);
135  return mpsr_PutIntMat(link, (intvec *) v->Data());
136}
137inline mpsr_Status_t mpsr_PutStringLeftv(MP_Link_pt link, leftv v)
138{
139  typecheck(v, STRING_CMD);
140  return   mpsr_PutString(link, (char *) v->Data());
141}
142inline mpsr_Status_t mpsr_PutRingLeftv(MP_Link_pt link, leftv v)
143{
144  typecheck(v, RING_CMD);
145  return mpsr_PutRing(link, (ring) v->Data());
146}
147inline mpsr_Status_t mpsr_PutQRingLeftv(MP_Link_pt link, leftv v)
148{
149  typecheck(v, QRING_CMD);
150  return mpsr_PutRing(link, (ring) v->Data());
151}
152inline mpsr_Status_t mpsr_PutProcLeftv(MP_Link_pt link, leftv v)
153{
154  typecheck(v, PROC_CMD);
155  return mpsr_PutProc(link, v->name, (procinfov) v->Data());
156}
157inline mpsr_Status_t mpsr_PutDefLeftv(MP_Link_pt link, leftv v)
158{
159  typecheck(v, DEF_CMD);
160  return mpsr_PutDef(link, (char *) v->name);
161}
162// now the ring-dependent leftv's
163inline mpsr_Status_t mpsr_PutListLeftv(MP_Link_pt link, leftv v, ring cring)
164{
165  typecheck(v, LIST_CMD);
166  return mpsr_PutList(link, (lists) v->Data(), cring);
167}
168inline mpsr_Status_t mpsr_PutCommandLeftv(MP_Link_pt link, leftv v, ring cring)
169{
170  command cmd = (command) v->Data();
171
172  typecheck(v, COMMAND);
173  if (cmd->op == PROC_CMD)
174    return mpsr_PutOpCommand(link, cmd, cring);
175  else
176    return mpsr_PutCopCommand(link, cmd , cring);
177}
178inline mpsr_Status_t mpsr_PutNumberLeftv(MP_Link_pt link, leftv v, ring cring)
179{
180  typecheck(v, NUMBER_CMD);
181  return mpsr_PutNumber(link, (number) v->Data(), cring);
182}
183inline mpsr_Status_t mpsr_PutPolyLeftv(MP_Link_pt link, leftv v, ring cring)
184{
185  typecheck(v, POLY_CMD);
186  return mpsr_PutPoly(link, (poly) v->Data(), cring);
187}
188inline mpsr_Status_t mpsr_PutIdealLeftv(MP_Link_pt link, leftv v, ring cring)
189{
190  typecheck(v, IDEAL_CMD);
191  return mpsr_PutIdeal(link, (ideal) v->Data(), cring);
192}
193inline mpsr_Status_t mpsr_PutVectorLeftv(MP_Link_pt link, leftv v, ring cring)
194{
195  typecheck(v, VECTOR_CMD);
196  return mpsr_PutPolyVector(link, (poly) v->Data(), cring);
197}
198inline mpsr_Status_t mpsr_PutMatrixLeftv(MP_Link_pt link, leftv v, ring cring)
199{
200  typecheck(v, MATRIX_CMD);
201  return mpsr_PutMatrix(link, (ideal) v->Data(), cring);
202}
203inline mpsr_Status_t mpsr_PutModuleLeftv(MP_Link_pt link, leftv v, ring cring)
204{
205  typecheck(v, MODUL_CMD);
206  return mpsr_PutModule(link, (ideal) v->Data(), cring);
207}
208inline mpsr_Status_t mpsr_PutMapLeftv(MP_Link_pt link, leftv v, ring cring)
209{
210  typecheck(v, MAP_CMD);
211  return mpsr_PutMap(link, (map) v->Data(), cring);
212}
213/* inline mpsr_Status_t mpsr_PutAliasLeftv(MP_Link_pt link, leftv v) */
214/* { */
215/*   typecheck(v, ALIAS_CMD); */
216/*   return mpsr_PutAlias(link, v->name, (idhdl) v->Data()); */
217/* } */
218inline mpsr_Status_t mpsr_PutPackageLeftv(MP_Link_pt link, leftv v)
219{
220  typecheck(v, PACKAGE_CMD);
221  return mpsr_PutPackage(link, (package) v->Data());
222}
223
224/***************************************************************
225 * 1.)  Singular Top-level Data (chains of leftv's)
226 *      They are send as on MP mesg
227 *
228 ***************************************************************/
229extern mpsr_Status_t mpsr_PutMsg(MP_Link_pt l, leftv v);
230
231#endif
Note: See TracBrowser for help on using the repository browser.