source: git/Singular/mpsr_Put.h @ 4e654a2

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