From 38ba5249c350be5a4aa34193adcf016ef1f0571f Mon Sep 17 00:00:00 2001 From: Jason Paryani Date: Mon, 26 Aug 2013 14:45:15 -0700 Subject: [PATCH] Add DynamicOrphan --- capnp/capnp.pyx | 14 +++++++++++++- capnp/capnp_cpp.pxd | 5 +++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/capnp/capnp.pyx b/capnp/capnp.pyx index 870b147..7eb3769 100644 --- a/capnp/capnp.pyx +++ b/capnp/capnp.pyx @@ -9,7 +9,7 @@ cimport cython cimport capnp_cpp as capnp cimport schema_cpp -from capnp_cpp cimport SchemaLoader as C_SchemaLoader, Schema as C_Schema, StructSchema as C_StructSchema, DynamicStruct as C_DynamicStruct, DynamicValue as C_DynamicValue, Type as C_Type, DynamicList as C_DynamicList, fixMaybe, SchemaParser as C_SchemaParser, ParsedSchema as C_ParsedSchema, VOID, ArrayPtr, StringPtr +from capnp_cpp cimport SchemaLoader as C_SchemaLoader, Schema as C_Schema, StructSchema as C_StructSchema, DynamicStruct as C_DynamicStruct, DynamicValue as C_DynamicValue, Type as C_Type, DynamicList as C_DynamicList, fixMaybe, SchemaParser as C_SchemaParser, ParsedSchema as C_ParsedSchema, VOID, ArrayPtr, StringPtr, DynamicOrphan as C_DynamicOrphan from schema_cpp cimport Node as C_Node, EnumNode as C_EnumNode from cython.operator cimport dereference as deref @@ -60,6 +60,7 @@ _Type = _make_enum('DynamicValue.Type', INTERFACE = capnp.TYPE_INTERFACE, OBJECT = capnp.TYPE_OBJECT) +# Templated classes are weird in cython. I couldn't put it in a pxd header for some reason cdef extern from "capnp/list.h" namespace " ::capnp": cdef cppclass List[T]: cppclass Reader: @@ -69,6 +70,9 @@ cdef extern from "capnp/list.h" namespace " ::capnp": T operator[](uint) except +ValueError uint size() +cdef extern from "" namespace "std": + C_DynamicOrphan moveOrphan"std::move"(C_DynamicOrphan &) + cdef class _NodeReader: cdef C_Node.Reader thisptr cdef init(self, C_Node.Reader other): @@ -364,6 +368,14 @@ cdef class _DynamicStructBuilder: # return getWhichBuilder(self.thisptr.getByUnion(union)) +cdef class _DynamicOrphan: + cdef C_DynamicOrphan thisptr + cdef public object _parent + cdef _init(self, C_DynamicOrphan other, object parent): + self.thisptr = moveOrphan(other) + self._parent = parent + return self + cdef class Schema: cdef C_Schema thisptr cdef _init(self, C_Schema other): diff --git a/capnp/capnp_cpp.pxd b/capnp/capnp_cpp.pxd index efa3f3a..b8b30a0 100644 --- a/capnp/capnp_cpp.pxd +++ b/capnp/capnp_cpp.pxd @@ -179,3 +179,8 @@ cdef extern from "capnp/schema-parser.h" namespace " ::capnp": cdef cppclass SchemaParser: SchemaParser() ParsedSchema parseDiskFile(char * displayName, char * diskPath, ArrayPtr[StringPtr] importPath) except + + +cdef extern from "capnp/orphan.h" namespace " ::capnp": + cdef cppclass DynamicOrphan" ::capnp::Orphan< ::capnp::DynamicValue>": + DynamicValue.Builder get() + DynamicValue.Reader getReader()