From 3ca8077334e373d0b9a01827af393c3ed914613d Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Wed, 6 Mar 2013 17:15:28 +0100 Subject: [PATCH] Properly wrap ODB objects --- odb.go | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/odb.go b/odb.go index 6370999..bf17171 100644 --- a/odb.go +++ b/odb.go @@ -62,11 +62,25 @@ func (v *OdbObject) Free() { C.git_odb_object_free(v.ptr) } -func (v *OdbObject) Type() int { - return int(C.git_odb_object_type(v.ptr)) +func (object *OdbObject) Id() (oid *Oid) { + return newOidFromC(C.git_odb_object_id(object.ptr)) } -func (v *OdbObject) Size() int64 { - return int64(C.git_odb_object_size(v.ptr)) +func (object *OdbObject) Len() (len uint64) { + return uint64(C.git_odb_object_size(object.ptr)) +} + +func (object *OdbObject) Data() (data []byte) { + var c_blob unsafe.Pointer = C.git_odb_object_data(object.ptr) + var blob []byte + + len := int(C.git_odb_object_size(object.ptr)) + + sliceHeader := (*reflect.SliceHeader)((unsafe.Pointer(&blob))) + sliceHeader.Cap = len + sliceHeader.Len = len + sliceHeader.Data = uintptr(c_blob) + + return blob }