def to_str(fname, ty, v): c = c_char_p() n = c_size_t() call(fname, ty(v), REF(c), REF(n)) s = c.value.decode() free_buffer(c) return s
def deep_copy(self): """Return new instance containing a (deep)copy of underlying C object""" copy = self.__new__(self.__class__) copy._obj = self._cproxy_type()() call(self._abi("Copy"), REF(self._obj), REF(copy._obj)) copy._alive = True return copy
def get_val(fname, ty, obj=None): w = ty() if obj: call(fname, REF(obj), REF(w)) else: call(fname, REF(w)) return w.value
def _is_same(self, other, abicall_name=None): """ Returns if underlying C objects are logically equal. """ if type(self) != type(other): return False i = c_int() name = self._abi('IsSame') if abicall_name is None else abicall_name call(name, REF(self._obj), REF(other._obj), REF(i)) return bool(i)
def get_str(fname, obj=None): c = c_char_p() n = c_size_t() if obj: call(fname, REF(obj), REF(c), REF(n)) else: call(fname, REF(c), REF(n)) s = c.value.decode() free_buffer(c) return s
def get_strs(fname, obj=None): p = POINTER(c_char_p)() n = c_size_t() if obj: call(fname, REF(obj), REF(p), REF(n)) else: call(fname, REF(p), REF(n)) symbols = [p[i].decode() for i in range(n.value)] free_buffers(p, n) return symbols
def get_vals(fname, ty, obj=None, free=None): ptr = POINTER(ty)() n = c_size_t() if obj: call(fname, REF(obj), REF(ptr), REF(n)) else: call(fname, REF(ptr), REF(n)) vals = [ptr[i] for i in range(n.value)] if free: free(ptr) return vals
def __del__(self): if hasattr(self, '_alive') and self._alive: self._alive = False try: try: call(self._abi('Destroy'), REF(self._obj)) except CLibException as e: print("CLibException in", self.__del__, ":", str(e)) except: pass
def set_str(fname, s, obj=None): if obj: call(fname, REF(obj), PCHAR(s)) else: call(fname, PCHAR(s))
def set_val(fname, ty, val, obj=None): if obj: call(fname, REF(obj), ty(val)) else: call(fname, ty(val))
def set_strs(fname, strs, obj=None): if obj: call(fname, REF(obj), PCHAR_BUFFER(strs), len(strs)) else: call(fname, PCHAR_BUFFER(strs), len(strs))
def __init__(self, *cargs): self._obj = self._cproxy_type()() call(self._abi('Create'), *(cargs + (REF(self._obj), ))) self._alive = True