static PyObject *PyView_modify(PyView *o, PyObject *_args) { try { PWOSequence args(_args); if (!PyProperty_Check((PyObject *)args[0])) Fail(PyExc_TypeError, "First arg must be a property"); c4_BytesProp& prop = *(c4_BytesProp*)(c4_Property*)(PyProperty*)(PyObject*)args[0]; int index = PWONumber(args[1]); if (index < 0 || index >= o->GetSize()) Fail(PyExc_IndexError, "Index out of range"); c4_RowRef row = o->GetAt(index); PWOString buffer (args[2]); c4_Bytes data ((void*)(const char*)buffer, buffer.len()); long offset = PWONumber(args[3]); int diff = args.len() == 4 ? 0 : (int) PWONumber(args[4]); if (!prop(row).Modify(data, offset, diff)) Fail(PyExc_TypeError, "Failed to modify memo field"); Py_INCREF(Py_None); return Py_None; } catch (...) { return 0; } }
static PyObject *PyView_relocrows(PyView *o, PyObject *_args) { try { PWOSequence args(_args); if (!PyView_Check((PyObject *)args[2])) Fail(PyExc_TypeError, "Third arg must be a view object"); PyView& dest = *(PyView *)(PyObject *)args[2]; int from = PWONumber(args[0]); if (from < 0) from += o->GetSize(); int count = PWONumber(args[1]); if (from < 0 || count < 0 || from + count > o->GetSize()) Fail(PyExc_IndexError, "Source index out of range"); int pos = PWONumber(args[3]); if (pos < 0) pos += dest.GetSize(); if (pos < 0 || pos > dest.GetSize()) Fail(PyExc_IndexError, "Destination index out of range"); if (!o->IsCompatibleWith(dest)) Fail(PyExc_TypeError, "Views are not compatible"); o->RelocateRows(from, count, dest, pos); Py_INCREF(Py_None); return Py_None; } catch (...) { return 0; } }
static PyObject* PyView_insert(PyView *o, PyObject* _args, PyObject* kwargs) { try { PWOSequence args(_args); if (args.len() == 1) o->insertAt(PWONumber(args[0]), kwargs); else o->insertAt(PWONumber (args[0]), args[1]); Py_INCREF(Py_None); return Py_None; } catch (...) { return 0; } }
static PyObject *PyView_itemsize(PyView *o, PyObject *_args) { try { PWOSequence args(_args); if (!PyProperty_Check((PyObject *)args[0])) Fail(PyExc_TypeError, "First arg must be a property"); c4_BytesProp& prop = *(c4_BytesProp*)(c4_Property*)(PyProperty*)(PyObject*)args[0]; int index = args.len() == 1 ? 0 : (int) PWONumber(args[1]); if (index < 0 || index >= o->GetSize()) Fail(PyExc_IndexError, "Index out of range"); return PWONumber(prop(o->GetAt(index)).GetSize()).disOwn(); } catch (...) { return 0; } }
static PyObject *PyView_find(PyView *o, PyObject *_args, PyObject* _kwargs) { PWONumber start(0); PWOMapping crit; try { PWOSequence args(_args); if (_kwargs) { PWOMapping kwargs(_kwargs); if (kwargs.hasKey("start")) { start = kwargs["start"]; kwargs.delItem("start"); } crit = kwargs; } int numargs = args.len(); for (int i=0; i<numargs; ++i) { if (PyNumber_Check((PyObject*)args[i])) start = args[i]; else crit = args[i]; } c4_Row temp; o->makeRow(temp, crit, false); return PWONumber(o->Find(temp, start)).disOwn(); } catch (...) { return 0; } }
static PyObject* PyView_join(PyView *o, PyObject* _args, PyObject *_kwargs) { PWOMapping kwargs; try { PWOSequence args(_args); if (_kwargs) kwargs = PWOBase(_kwargs); MustBeView(args[0]); PyView *other = (PyView *)(PyObject* )args[0]; bool outer = false; int last = args.len(); if (PyInt_Check((PyObject*)args[last-1])) { PWONumber flag(args[--last]); if ((int)flag > 0) outer = true; } if (kwargs.hasKey("outer")) { if (int(PWONumber(kwargs["outer"]))) outer = true; } PyView crit; crit.addProperties(args.getSlice(1,last)); return new PyView (o->Join(crit, *other, outer), 0, o->computeState(ROVIEWER)); } catch (...) { return 0; } }
static PyObject *PyView_ordered(PyView *o, PyObject *_args) { try { PWOSequence args(_args); int numkeys = args.len() <= 0 ? 1 : (int) PWONumber(args[0]); return new PyView(o->Ordered(numkeys), 0, o->computeState(MVIEWER)); } catch (...) { return 0; } }
static PyObject *PyStorage_new(PyObject *o, PyObject *_args) { try { PWOSequence args(_args); PyStorage *ps = 0; switch (args.len()) { case 0: ps = new PyStorage; break; case 1: if (!PyFile_Check((PyObject*)args[0])) { if (PyString_Check((PyObject*)args[0])) Fail(PyExc_TypeError, "rw parameter missing"); else Fail(PyExc_TypeError, "argument not an open file"); break; } ps = new PyStorage(*new c4_FileStrategy(PyFile_AsFile(args[0])), true); break; case 4: { // Rrrrrr... if (!PyStorage_Check((PyObject*)args[0])) Fail(PyExc_TypeError, "First arg must be a storage object"); c4_Storage &storage = *(PyStorage*)(PyObject*)args[0]; if (!PyView_Check((PyObject*)args[1])) Fail(PyExc_TypeError, "Second arg must be a view object"); c4_View &view = *(PyView*)(PyObject*)args[1]; if (!PyProperty_Check((PyObject*)args[2])) Fail(PyExc_TypeError, "Third arg must be a property object"); c4_BytesProp &prop = *(c4_BytesProp*)(c4_Property*)(PyProperty*) (PyObject*)args[2]; int row = PWONumber(args[3]); ps = new PyStorage(*new SiasStrategy(storage, view, prop, row), true); break; } case 2: { char *fnm; int mode; if (!PyArg_ParseTuple(args, "esi", "utf_8", &fnm, &mode)) Fail(PyExc_TypeError, "bad argument type"); ps = new PyStorage(fnm, mode); PyMem_Free(fnm); if (!ps->Strategy().IsValid()) { delete ps; ps = 0; Fail(PyExc_IOError, "can't open storage file"); } break; } default: Fail(PyExc_ValueError, "storage() takes at most 4 arguments"); } return ps; } catch (...) { return 0; } }
static PyObject *PyView_setsize(PyView *o, PyObject *_args) { try { PWOSequence args(_args); PWONumber nrows = PWONumber(args[0]); o->SetSize((int) nrows); return nrows.disOwn(); } catch (...) { return 0; } }
static PyObject* PyView_delete(PyView *o, PyObject* _args) { try { PWOSequence args(_args); int ndx = PWONumber (args[0]); PWOTuple seq; o->setSlice(ndx, ndx+1, seq); Py_INCREF(Py_None); return Py_None; } catch (...) { return 0; } }
static PyObject *PyView_search(PyView *o, PyObject *_args, PyObject* kwargs) { try { PWOSequence args(_args); if (args.len() != 0) kwargs = args[0]; c4_Row temp; o->makeRow(temp, kwargs, false); return PWONumber(o->Search(temp)).disOwn(); } catch (...) { return 0; } }
void test_scxx() { double a_ = 3.4; PWONumber a = a_; PWONumber b = 7; PWONumber c; c = a + b; PWOList list; list.append(a).append(c).append(b); PWOTuple tp(list); for (int i=0; i<tp.len(); i++) { std::cout << "tp[" << i << "]=" << double(PWONumber(tp[i])) << " "; } std::cout << std::endl; PyObject* py_a = (PyObject*) a; // convert to Python C struct }
static PyObject *PyView_hash(PyView *o, PyObject *_args) { try { PWOSequence args(_args); c4_View map; if (args.len() > 0) { MustBeView(args[0]); map = *(PyView*)(PyObject*)args[0]; } int numkeys = args.len() <= 1 ? 1 : (int) PWONumber(args[1]); return new PyView(o->Hash(map, numkeys), 0, o->computeState(MVIEWER)); } catch (...) { return 0; } }
static PyObject* PyView_flatten(PyView *o, PyObject *_args, PyObject *_kwargs) { try { PWOSequence args(_args); PWOMapping kwargs; if (_kwargs) kwargs = PWOBase(_kwargs); if (!PyProperty_Check((PyObject*)args[0])) Fail(PyExc_TypeError, "First arg must be a property object identifying the subview"); const c4_Property& subview = *(PyProperty *)(PyObject* )args[0]; bool outer = false; if (args.len() > 1) { PWONumber flag(args[1]); if ((int)flag > 0) outer = true; } if (kwargs.hasKey("outer")) { if (int(PWONumber(kwargs["outer"]))) outer = true; } return new PyView (o->JoinProp((const c4_ViewProp&) subview, outer), 0, o->computeState(ROVIEWER)); } catch (...) { return 0; } }