MCPcopy Create free account
hub / github.com/Singular/Singular / PythonCastDynamic

Class PythonCastDynamic

Singular/dyn_modules/pyobject/pyobject.cc:339–375  ·  view source on GitHub ↗

@class PythonCastDynamic * This class does conversion of Singular objects to python objects on runtime. * **/

Source from the content-addressed store, hash-verified

337 *
338 **/
339class PythonCastDynamic:
340 public PythonObject {
341 typedef PythonCastDynamic self;
342
343public:
344 PythonCastDynamic(leftv value): PythonObject(get(value, value->Typ())) {}
345
346private:
347 PythonObject get(leftv value, int typeId)
348 {
349 if (typeId == PythonInterpreter::id()) return PythonCastStatic<>(value);
350
351 switch (typeId)
352 {
353 case INT_CMD: return PythonCastStatic<long>(value);
354 case STRING_CMD: return PythonCastStatic<const char*>(value);
355 case LIST_CMD: return PythonCastStatic<lists>(value);
356 case INTVEC_CMD: return PythonCastStatic<intvec*>(value);
357 }
358
359 sleftv tmp;
360 BOOLEAN newstruct_Assign_user(int, leftv, leftv); // declaring overloaded '='
361 if (!newstruct_Assign_user(PythonInterpreter::id(), &tmp, value))
362 return PythonCastStatic<>(&tmp);
363
364 if (typeId > MAX_TOK) // custom types
365 {
366 blackbox *bbx = getBlackboxStuff(typeId);
367 assume(bbx != NULL);
368 if (! bbx->blackbox_Op1(PythonInterpreter::id(), &tmp, value))
369 return PythonCastStatic<>(&tmp);
370 }
371
372 Werror("type '%s` incompatible with 'pyobject`", iiTwoOps(typeId));
373 return PythonObject();
374 }
375};
376
377template <class CastType>
378inline PythonObject::ptr_type

Callers 4

getMethod · 0.85
append_toMethod · 0.85
pyobject_AssignFunction · 0.85
pyobject_Op2Function · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected