You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by ma...@apache.org on 2015/05/07 00:10:56 UTC
[1/2] lucy git commit: Adapt for v4 of Go proof-of-concept bindings.
Repository: lucy
Updated Branches:
refs/heads/master d460538f2 -> 45c870ba2
Adapt for v4 of Go proof-of-concept bindings.
See CLOWNFISH-28-Go-POC-v4.
* Make structs public: `FooIMP` instead of `implFoo`.
* Embed parent structs.
* Make `ref` a `uintptr` instead of a pointer to a C type.
* Add the INITOBJ method to ObjIMP.
* Eliminate all downstream finalizers and TOPTR() implementations.
Project: http://git-wip-us.apache.org/repos/asf/lucy/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/9330b149
Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/9330b149
Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/9330b149
Branch: refs/heads/master
Commit: 9330b149f936c9431e1c8f4055b4b6366a552d91
Parents: be1b383
Author: Marvin Humphrey <ma...@rectangular.com>
Authored: Fri May 1 19:16:04 2015 -0700
Committer: Marvin Humphrey <ma...@rectangular.com>
Committed: Fri May 1 19:16:40 2015 -0700
----------------------------------------------------------------------
go/lucy/analysis.go | 22 +++++------------
go/lucy/index.go | 48 +++++++++++++-----------------------
go/lucy/plan.go | 45 ++++++++++------------------------
go/lucy/search.go | 64 ++++++++++++++++++++----------------------------
4 files changed, 62 insertions(+), 117 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucy/blob/9330b149/go/lucy/analysis.go
----------------------------------------------------------------------
diff --git a/go/lucy/analysis.go b/go/lucy/analysis.go
index 1da55d6..6fbd522 100644
--- a/go/lucy/analysis.go
+++ b/go/lucy/analysis.go
@@ -21,7 +21,6 @@ package lucy
#include "Lucy/Analysis/EasyAnalyzer.h"
*/
import "C"
-import "runtime"
import "unsafe"
import "git-wip-us.apache.org/repos/asf/lucy-clownfish.git/runtime/go/clownfish"
@@ -30,16 +29,16 @@ type Analyzer interface {
clownfish.Obj
}
-type implAnalyzer struct {
- ref *C.lucy_Analyzer
+type AnalyzerIMP struct {
+ clownfish.ObjIMP
}
type EasyAnalyzer interface {
Analyzer
}
-type implEasyAnalyzer struct {
- ref *C.lucy_EasyAnalyzer
+type EasyAnalyzerIMP struct {
+ AnalyzerIMP
}
func NewEasyAnalyzer(language string) EasyAnalyzer {
@@ -49,16 +48,7 @@ func NewEasyAnalyzer(language string) EasyAnalyzer {
}
func WRAPEasyAnalyzer(ptr unsafe.Pointer) EasyAnalyzer {
- obj := &implEasyAnalyzer{(*C.lucy_EasyAnalyzer)(ptr)}
- runtime.SetFinalizer(obj, (*implEasyAnalyzer).finalize)
+ obj := &EasyAnalyzerIMP{}
+ obj.INITOBJ(ptr);
return obj
}
-
-func (obj *implEasyAnalyzer) finalize() {
- C.cfish_dec_refcount(unsafe.Pointer(obj.ref))
- obj.ref = nil
-}
-
-func (obj *implEasyAnalyzer) TOPTR() uintptr {
- return uintptr(unsafe.Pointer(obj.ref))
-}
http://git-wip-us.apache.org/repos/asf/lucy/blob/9330b149/go/lucy/index.go
----------------------------------------------------------------------
diff --git a/go/lucy/index.go b/go/lucy/index.go
index 3a14281..9ccce23 100644
--- a/go/lucy/index.go
+++ b/go/lucy/index.go
@@ -29,7 +29,6 @@ package lucy
import "C"
import "fmt"
import "reflect"
-import "runtime"
import "strings"
import "unsafe"
import "git-wip-us.apache.org/repos/asf/lucy-clownfish.git/runtime/go/clownfish"
@@ -41,8 +40,8 @@ type Indexer interface {
Commit() error
}
-type implIndexer struct {
- ref *C.lucy_Indexer
+type IndexerIMP struct {
+ clownfish.ObjIMP
fieldNames map[string]clownfish.String
}
@@ -50,8 +49,8 @@ type IndexManager interface {
clownfish.Obj
}
-type implIndexManager struct {
- ref *C.lucy_IndexManager
+type IndexManagerIMP struct {
+ clownfish.ObjIMP
}
type OpenIndexerArgs struct {
@@ -94,26 +93,19 @@ func OpenIndexer(args *OpenIndexerArgs) (obj Indexer, err error) {
}
func WRAPIndexer(ptr unsafe.Pointer) Indexer {
- obj := &implIndexer{(*C.lucy_Indexer)(ptr), nil}
- runtime.SetFinalizer(obj, (*implIndexer).finalize)
+ obj := &IndexerIMP{}
+ obj.INITOBJ(ptr);
return obj
}
-func (obj *implIndexer) finalize() {
- obj.Close()
-}
-
-func (obj *implIndexer) Close() error {
+func (obj *IndexerIMP) Close() error {
// TODO: implement Close in core Lucy rather than bindings.
- if obj.ref != nil {
- C.cfish_dec_refcount(unsafe.Pointer(obj.ref))
- obj.ref = nil
- }
return nil // TODO catch errors
}
-func (obj *implIndexer) AddDoc(doc interface{}) error {
- stockDoc := C.LUCY_Indexer_Get_Stock_Doc(obj.ref)
+func (obj *IndexerIMP) AddDoc(doc interface{}) error {
+ self := ((*C.lucy_Indexer)(unsafe.Pointer(obj.TOPTR())))
+ stockDoc := C.LUCY_Indexer_Get_Stock_Doc(self)
docFields := (*C.cfish_Hash)(C.LUCY_Doc_Get_Fields(stockDoc))
C.CFISH_Hash_Clear(docFields)
@@ -148,19 +140,20 @@ func (obj *implIndexer) AddDoc(doc interface{}) error {
// client to supply `boost`.
boost := 1.0
err := clownfish.TrapErr(func() {
- C.LUCY_Indexer_Add_Doc(obj.ref, stockDoc, C.float(boost))
+ C.LUCY_Indexer_Add_Doc(self, stockDoc, C.float(boost))
})
return err
}
-func (obj *implIndexer) findFieldC(name string) *C.cfish_String {
+func (obj *IndexerIMP) findFieldC(name string) *C.cfish_String {
+ self := ((*C.lucy_Indexer)(unsafe.Pointer(obj.TOPTR())))
if obj.fieldNames == nil {
obj.fieldNames = make(map[string]clownfish.String)
}
f, ok := obj.fieldNames[name]
if !ok {
- schema := C.LUCY_Indexer_Get_Schema(obj.ref)
+ schema := C.LUCY_Indexer_Get_Schema(self)
fieldList := C.LUCY_Schema_All_Fields(schema)
defer C.cfish_dec_refcount(unsafe.Pointer(fieldList))
for i := 0; i < int(C.CFISH_Vec_Get_Size(fieldList)); i++ {
@@ -176,16 +169,9 @@ func (obj *implIndexer) findFieldC(name string) *C.cfish_String {
return (*C.cfish_String)(unsafe.Pointer(f.TOPTR()))
}
-func (obj *implIndexer) Commit() error {
+func (obj *IndexerIMP) Commit() error {
+ self := ((*C.lucy_Indexer)(unsafe.Pointer(obj.TOPTR())))
return clownfish.TrapErr(func() {
- C.LUCY_Indexer_Commit(obj.ref)
+ C.LUCY_Indexer_Commit(self)
})
}
-
-func (obj *implIndexer) TOPTR() uintptr {
- return uintptr(unsafe.Pointer(obj.ref))
-}
-
-func (obj *implIndexManager) TOPTR() uintptr {
- return uintptr(unsafe.Pointer(obj.ref))
-}
http://git-wip-us.apache.org/repos/asf/lucy/blob/9330b149/go/lucy/plan.go
----------------------------------------------------------------------
diff --git a/go/lucy/plan.go b/go/lucy/plan.go
index a2f4146..aa644b1 100644
--- a/go/lucy/plan.go
+++ b/go/lucy/plan.go
@@ -21,7 +21,6 @@ package lucy
#include "Lucy/Plan/FullTextType.h"
*/
import "C"
-import "runtime"
import "unsafe"
import "git-wip-us.apache.org/repos/asf/lucy-clownfish.git/runtime/go/clownfish"
@@ -31,24 +30,24 @@ type Schema interface {
SpecField(field string, fieldType FieldType)
}
-type implSchema struct {
- ref *C.lucy_Schema
+type SchemaIMP struct {
+ clownfish.ObjIMP
}
type FieldType interface {
clownfish.Obj
}
-type implFieldType struct {
- ref *C.lucy_FieldType
+type FieldTypeIMP struct {
+ clownfish.ObjIMP
}
type FullTextType interface {
FieldType
}
-type implFullTextType struct {
- ref *C.lucy_FullTextType
+type FullTextTypeIMP struct {
+ FieldTypeIMP
}
func NewSchema() Schema {
@@ -57,27 +56,19 @@ func NewSchema() Schema {
}
func WRAPSchema(ptr unsafe.Pointer) Schema {
- obj := &implSchema{(*C.lucy_Schema)(ptr)}
- runtime.SetFinalizer(obj, (*implSchema).finalize)
+ obj := &SchemaIMP{}
+ obj.INITOBJ(ptr);
return obj
}
-func (obj *implSchema) finalize() {
- C.cfish_dec_refcount(unsafe.Pointer(obj.ref))
- obj.ref = nil
-}
-
-func (obj *implSchema) SpecField(field string, fieldType FieldType) {
+func (obj *SchemaIMP) SpecField(field string, fieldType FieldType) {
+ self := ((*C.lucy_Schema)(unsafe.Pointer(obj.TOPTR())))
fieldCF := clownfish.NewString(field)
- C.LUCY_Schema_Spec_Field(obj.ref,
+ C.LUCY_Schema_Spec_Field(self,
(*C.cfish_String)(unsafe.Pointer(fieldCF.TOPTR())),
(*C.lucy_FieldType)(unsafe.Pointer(fieldType.TOPTR())))
}
-func (obj *implSchema) TOPTR() uintptr {
- return uintptr(unsafe.Pointer(obj.ref))
-}
-
func NewFullTextType(analyzer Analyzer) FullTextType {
cfObj := C.lucy_FullTextType_new(
(*C.lucy_Analyzer)(unsafe.Pointer(analyzer.TOPTR())))
@@ -85,17 +76,7 @@ func NewFullTextType(analyzer Analyzer) FullTextType {
}
func WRAPFullTextType(ptr unsafe.Pointer) FullTextType {
- obj := &implFullTextType{(*C.lucy_FullTextType)(ptr)}
- runtime.SetFinalizer(obj, (*implFullTextType).finalize)
+ obj := &FullTextTypeIMP{}
+ obj.INITOBJ(ptr);
return obj
}
-
-func (obj *implFullTextType) finalize() {
- C.cfish_dec_refcount(unsafe.Pointer(obj.ref))
- obj.ref = nil
-}
-
-func (obj *implFullTextType) TOPTR() uintptr {
- return uintptr(unsafe.Pointer(obj.ref))
-}
-
http://git-wip-us.apache.org/repos/asf/lucy/blob/9330b149/go/lucy/search.go
----------------------------------------------------------------------
diff --git a/go/lucy/search.go b/go/lucy/search.go
index cc80272..fc2a841 100644
--- a/go/lucy/search.go
+++ b/go/lucy/search.go
@@ -29,7 +29,6 @@ package lucy
import "C"
import "fmt"
import "reflect"
-import "runtime"
import "strings"
import "unsafe"
@@ -39,8 +38,8 @@ type Query interface {
clownfish.Obj
}
-type implQuery struct {
- ref *C.lucy_Query
+type QueryIMP struct {
+ clownfish.ObjIMP
}
type Searcher interface {
@@ -49,14 +48,18 @@ type Searcher interface {
Close() error
}
+type SearcherIMP struct {
+ clownfish.ObjIMP
+}
+
type Hits interface {
clownfish.Obj
Next(hit interface{}) bool
Error() error
}
-type implHits struct {
- ref *C.lucy_Hits
+type HitsIMP struct {
+ clownfish.ObjIMP
err error
}
@@ -64,16 +67,16 @@ type SortSpec interface {
clownfish.Obj
}
-type implSortSpec struct {
- ref *C.lucy_SortSpec
+type SortSpecIMP struct {
+ clownfish.ObjIMP
}
type IndexSearcher interface {
Searcher
}
-type implIndexSearcher struct {
- ref *C.lucy_IndexSearcher
+type IndexSearcherIMP struct {
+ SearcherIMP
}
func OpenIndexSearcher(index interface{}) (obj IndexSearcher, err error) {
@@ -93,28 +96,21 @@ func OpenIndexSearcher(index interface{}) (obj IndexSearcher, err error) {
}
func WRAPIndexSearcher(ptr unsafe.Pointer) IndexSearcher {
- obj := &implIndexSearcher{(*C.lucy_IndexSearcher)(ptr)}
- runtime.SetFinalizer(obj, (*implIndexSearcher).finalize)
+ obj := &IndexSearcherIMP{}
+ obj.INITOBJ(ptr);
return obj
}
-func (obj *implIndexSearcher) finalize() {
- C.cfish_dec_refcount(unsafe.Pointer(obj.ref))
- obj.ref = nil
-}
-
-func (obj *implIndexSearcher) Close() error {
+func (obj *IndexSearcherIMP) Close() error {
+ self := ((*C.lucy_IndexSearcher)(unsafe.Pointer(obj.TOPTR())))
return clownfish.TrapErr(func() {
- C.LUCY_IxSearcher_Close(obj.ref)
+ C.LUCY_IxSearcher_Close(self)
})
}
-func (obj *implIndexSearcher) TOPTR() uintptr {
- return uintptr(unsafe.Pointer(obj.ref))
-}
-
-func (obj *implIndexSearcher) Hits(query interface{}, offset uint32, numWanted uint32,
+func (obj *IndexSearcherIMP) Hits(query interface{}, offset uint32, numWanted uint32,
sortSpec SortSpec) (hits Hits, err error) {
+ self := ((*C.lucy_IndexSearcher)(unsafe.Pointer(obj.TOPTR())))
var sortSpecC *C.lucy_SortSpec
if sortSpec != nil {
sortSpecC = (*C.lucy_SortSpec)(unsafe.Pointer(sortSpec.TOPTR()))
@@ -123,7 +119,7 @@ func (obj *implIndexSearcher) Hits(query interface{}, offset uint32, numWanted u
case string:
queryStringC := clownfish.NewString(query.(string))
err = clownfish.TrapErr(func() {
- hitsC := C.LUCY_IxSearcher_Hits(obj.ref,
+ hitsC := C.LUCY_IxSearcher_Hits(self,
(*C.cfish_Obj)(unsafe.Pointer(queryStringC.TOPTR())),
C.uint32_t(offset), C.uint32_t(numWanted), sortSpecC)
hits = WRAPHits(unsafe.Pointer(hitsC))
@@ -135,16 +131,13 @@ func (obj *implIndexSearcher) Hits(query interface{}, offset uint32, numWanted u
}
func WRAPHits(ptr unsafe.Pointer) Hits {
- obj := &implHits{(*C.lucy_Hits)(ptr), nil}
- runtime.SetFinalizer(obj, (*implHits).finalize)
+ obj := &HitsIMP{}
+ obj.INITOBJ(ptr);
return obj
}
-func (obj *implHits) TOPTR() uintptr {
- return uintptr(unsafe.Pointer(obj.ref))
-}
-
-func (obj *implHits) Next(hit interface{}) bool {
+func (obj *HitsIMP) Next(hit interface{}) bool {
+ self := ((*C.lucy_Hits)(unsafe.Pointer(obj.TOPTR())))
// TODO: accept a HitDoc object and populate score.
// Get reflection value and type for the supplied struct.
@@ -166,7 +159,7 @@ func (obj *implHits) Next(hit interface{}) bool {
var docC *C.lucy_HitDoc
errCallingNext := clownfish.TrapErr(func() {
- docC = C.LUCY_Hits_Next(obj.ref)
+ docC = C.LUCY_Hits_Next(self)
})
if errCallingNext != nil {
obj.err = errCallingNext
@@ -196,11 +189,6 @@ func (obj *implHits) Next(hit interface{}) bool {
return true
}
-func (obj *implHits) finalize() {
- C.cfish_dec_refcount(unsafe.Pointer(obj.ref))
- obj.ref = nil
-}
-
-func (obj *implHits) Error() error {
+func (obj *HitsIMP) Error() error {
return obj.err
}
[2/2] lucy git commit: Merge branch 'LUCY-275-Go-POC-v4'
Posted by ma...@apache.org.
Merge branch 'LUCY-275-Go-POC-v4'
Adapt Lucy for v4 of Go proof-of-concept bindings.
This closes #12.
Project: http://git-wip-us.apache.org/repos/asf/lucy/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/45c870ba
Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/45c870ba
Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/45c870ba
Branch: refs/heads/master
Commit: 45c870ba22a301f08d8ec98f3e2f5100ed16a59d
Parents: d460538 9330b14
Author: Marvin Humphrey <ma...@rectangular.com>
Authored: Wed May 6 15:07:57 2015 -0700
Committer: Marvin Humphrey <ma...@rectangular.com>
Committed: Wed May 6 15:10:14 2015 -0700
----------------------------------------------------------------------
go/lucy/analysis.go | 22 +++++------------
go/lucy/index.go | 48 +++++++++++++-----------------------
go/lucy/plan.go | 45 ++++++++++------------------------
go/lucy/search.go | 64 ++++++++++++++++++++----------------------------
4 files changed, 62 insertions(+), 117 deletions(-)
----------------------------------------------------------------------