예제 #1
0
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
예제 #2
0
 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
예제 #3
0
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
예제 #4
0
 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)
예제 #5
0
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
예제 #6
0
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 
예제 #7
0
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
예제 #8
0
 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
예제 #9
0
def set_str(fname, s, obj=None):
    if obj:
        call(fname, REF(obj), PCHAR(s))
    else:
        call(fname, PCHAR(s))
예제 #10
0
def set_val(fname, ty, val, obj=None):
    if obj:
        call(fname, REF(obj), ty(val))
    else:
        call(fname, ty(val))
예제 #11
0
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))
예제 #12
0
 def __init__(self, *cargs):
     self._obj = self._cproxy_type()()
     call(self._abi('Create'), *(cargs + (REF(self._obj), )))
     self._alive = True