lucy-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mar...@apache.org
Subject [12/13] lucy git commit: Trap errors in Go bindings for Matcher_Next.
Date Tue, 24 Nov 2015 23:38:34 GMT
Trap errors in Go bindings for Matcher_Next.

Use the same design pattern as Hits_Next: trap errors in a Go struct
member and expect the user to check after iteration finishes.


Project: http://git-wip-us.apache.org/repos/asf/lucy/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/8208210b
Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/8208210b
Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/8208210b

Branch: refs/heads/master
Commit: 8208210b3f5877b2056fecd4fa19f4de94ccdd6e
Parents: 6612082
Author: Marvin Humphrey <marvin@rectangular.com>
Authored: Mon Nov 16 18:33:40 2015 -0800
Committer: Marvin Humphrey <marvin@rectangular.com>
Committed: Fri Nov 20 19:00:31 2015 -0800

----------------------------------------------------------------------
 go/build.go            |  6 ++++++
 go/lucy/search.go      | 21 +++++++++++++++++++++
 go/lucy/search_test.go |  3 +++
 3 files changed, 30 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/8208210b/go/build.go
----------------------------------------------------------------------
diff --git a/go/build.go b/go/build.go
index 8db2109..e1fef50 100644
--- a/go/build.go
+++ b/go/build.go
@@ -250,6 +250,12 @@ func specClasses(parcel *cfc.Parcel) {
 	orQueryBinding.SetSuppressCtor(true)
 	orQueryBinding.Register()
 
+	matcherBinding := cfc.NewGoClass(parcel, "Lucy::Search::Matcher")
+	matcherBinding.SpecMethod("Next", "Next() int32")
+	matcherBinding.SpecMethod("", "Error() error")
+	matcherBinding.SetSuppressStruct(true)
+	matcherBinding.Register()
+
 	andMatcherBinding := cfc.NewGoClass(parcel, "Lucy::Search::ANDMatcher")
 	andMatcherBinding.SetSuppressCtor(true)
 	andMatcherBinding.Register()

http://git-wip-us.apache.org/repos/asf/lucy/blob/8208210b/go/lucy/search.go
----------------------------------------------------------------------
diff --git a/go/lucy/search.go b/go/lucy/search.go
index 2db169b..e202b9d 100644
--- a/go/lucy/search.go
+++ b/go/lucy/search.go
@@ -60,6 +60,11 @@ type HitsIMP struct {
 	err error
 }
 
+type MatcherIMP struct {
+	clownfish.ObjIMP
+	err error
+}
+
 func OpenIndexSearcher(index interface{}) (obj IndexSearcher, err error) {
 	indexC := (*C.cfish_Obj)(clownfish.GoToClownfish(index, unsafe.Pointer(C.CFISH_OBJ), false))
 	defer C.cfish_decref(unsafe.Pointer(indexC))
@@ -293,6 +298,22 @@ func NewORQuery(children []Query) ORQuery {
 	return WRAPORQuery(unsafe.Pointer(cfObj))
 }
 
+func (m *MatcherIMP) Next() int32 {
+	var retval int32
+	m.err = clownfish.TrapErr(func() {
+		self := (*C.lucy_Matcher)(clownfish.Unwrap(m, "m"))
+		retval = int32(C.LUCY_Matcher_Next(self))
+	})
+	if m.err != nil {
+		return 0
+	}
+	return retval
+}
+
+func (m *MatcherIMP) Error() error {
+	return m.err
+}
+
 func NewANDMatcher(children []Matcher, sim Similarity) ANDMatcher {
 	simC := (*C.lucy_Similarity)(clownfish.UnwrapNullable(sim))
 	vec := clownfish.NewVector(len(children))

http://git-wip-us.apache.org/repos/asf/lucy/blob/8208210b/go/lucy/search_test.go
----------------------------------------------------------------------
diff --git a/go/lucy/search_test.go b/go/lucy/search_test.go
index 1127f72..3d4fc50 100644
--- a/go/lucy/search_test.go
+++ b/go/lucy/search_test.go
@@ -273,6 +273,9 @@ func checkMatcher(t *testing.T, matcher Matcher, supportsScore bool) {
 	if got := matcher.Next(); got != 0 {
 		t.Error("Next (iteration finished): %d", got)
 	}
+	if got := matcher.Error(); got != nil {
+		t.Error("Error after iteration finished: %v", got)
+	}
 }
 
 func TestMockMatcherBasics(t *testing.T) {


Mime
View raw message