|
|
|
@ -26,17 +26,27 @@ class client(object):
|
|
|
|
|
holder[idx] = c_ptr
|
|
|
|
|
lib.paddle_set_dataset(self.c, holder, len(paths))
|
|
|
|
|
|
|
|
|
|
# return format: (record, errno)
|
|
|
|
|
# errno = 0: ok
|
|
|
|
|
# = -1: EOF
|
|
|
|
|
# < -1: error
|
|
|
|
|
def next_record(self):
|
|
|
|
|
p = ctypes.c_char_p()
|
|
|
|
|
ret = ctypes.pointer(p)
|
|
|
|
|
size = lib.paddle_next_record(self.c, ret)
|
|
|
|
|
if size < 0:
|
|
|
|
|
if size == -1:
|
|
|
|
|
# EOF
|
|
|
|
|
return None
|
|
|
|
|
return None, -1
|
|
|
|
|
|
|
|
|
|
if size < -1:
|
|
|
|
|
# Error
|
|
|
|
|
return None, size
|
|
|
|
|
|
|
|
|
|
if size == 0:
|
|
|
|
|
# Empty record
|
|
|
|
|
return ""
|
|
|
|
|
return "", 0
|
|
|
|
|
|
|
|
|
|
record = ret.contents.value[:size]
|
|
|
|
|
# Memory created from C should be freed.
|
|
|
|
|
lib.mem_free(ret.contents)
|
|
|
|
|
return record
|
|
|
|
|
return record, 0
|
|
|
|
|