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 2013/07/31 03:11:14 UTC

[lucy-commits] [2/6] git commit: refs/heads/move-dumpable - Remove VTable_Load_Obj.

Remove VTable_Load_Obj.

VTable_Load_Obj is an inefficiently implemented convenience method.  Zap
it.


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

Branch: refs/heads/move-dumpable
Commit: 2b10863c9536771b22305a231affcd0abf79b529
Parents: e3e1661
Author: Marvin Humphrey <ma...@rectangular.com>
Authored: Sun Jul 28 12:25:28 2013 -0700
Committer: Marvin Humphrey <ma...@rectangular.com>
Committed: Tue Jul 30 17:57:23 2013 -0700

----------------------------------------------------------------------
 clownfish/runtime/core/Clownfish/Hash.c     |  5 ++++-
 clownfish/runtime/core/Clownfish/VTable.c   | 12 ----------
 clownfish/runtime/core/Clownfish/VTable.cfh |  6 -----
 core/Lucy/Index/BackgroundMerger.c          |  6 ++---
 core/Lucy/Index/Indexer.c                   |  7 +++---
 core/Lucy/Index/PolyReader.c                |  6 ++---
 core/Lucy/Plan/Schema.c                     | 28 ++++++++++++++----------
 7 files changed, 30 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/2b10863c/clownfish/runtime/core/Clownfish/Hash.c
----------------------------------------------------------------------
diff --git a/clownfish/runtime/core/Clownfish/Hash.c b/clownfish/runtime/core/Clownfish/Hash.c
index e18f512..a95485b 100644
--- a/clownfish/runtime/core/Clownfish/Hash.c
+++ b/clownfish/runtime/core/Clownfish/Hash.c
@@ -147,7 +147,10 @@ Hash_load(Hash *self, Obj *dump) {
                       VTable_Get_Name(vtable));
             }
             else if (load != (Obj_Load_t)Hash_load) { // stop inf loop
-                return VTable_Load_Obj(vtable, dump);
+                Obj *dummy = VTable_Make_Obj(vtable);
+                Obj *loaded = Obj_Load(dummy, dump);
+                DECREF(dummy);
+                return loaded;
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/lucy/blob/2b10863c/clownfish/runtime/core/Clownfish/VTable.c
----------------------------------------------------------------------
diff --git a/clownfish/runtime/core/Clownfish/VTable.c b/clownfish/runtime/core/Clownfish/VTable.c
index 58391b2..0c9aedc 100644
--- a/clownfish/runtime/core/Clownfish/VTable.c
+++ b/clownfish/runtime/core/Clownfish/VTable.c
@@ -322,18 +322,6 @@ VTable_singleton(const CharBuf *class_name, VTable *parent) {
     return singleton;
 }
 
-Obj*
-VTable_load_obj(VTable *self, Obj *dump) {
-    Obj_Load_t load = METHOD_PTR(self, Cfish_Obj_Load);
-    if (load == Obj_load) {
-        THROW(ERR, "Abstract method Load() not defined for %o", self->name);
-    }
-    Obj *invoker = VTable_Make_Obj(self);
-    Obj *loaded = load(invoker, dump);
-    DECREF(invoker);
-    return loaded;
-}
-
 static void
 S_scrunch_charbuf(CharBuf *source, CharBuf *target) {
     ZombieCharBuf *iterator = ZCB_WRAP(source);

http://git-wip-us.apache.org/repos/asf/lucy/blob/2b10863c/clownfish/runtime/core/Clownfish/VTable.cfh
----------------------------------------------------------------------
diff --git a/clownfish/runtime/core/Clownfish/VTable.cfh b/clownfish/runtime/core/Clownfish/VTable.cfh
index c065495..b1b0e97 100644
--- a/clownfish/runtime/core/Clownfish/VTable.cfh
+++ b/clownfish/runtime/core/Clownfish/VTable.cfh
@@ -108,12 +108,6 @@ class Clownfish::VTable inherits Clownfish::Obj {
     Obj*
     Init_Obj(VTable *self, void *allocation);
 
-    /** Create a new object using the supplied dump, assuming that Load() has
-     * been defined for the class.
-     */
-    Obj*
-    Load_Obj(VTable *self, Obj *dump);
-
     /** Create a new object to go with the supplied host object.
      */
     Obj*

http://git-wip-us.apache.org/repos/asf/lucy/blob/2b10863c/core/Lucy/Index/BackgroundMerger.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Index/BackgroundMerger.c b/core/Lucy/Index/BackgroundMerger.c
index a32f215..5f219ce 100644
--- a/core/Lucy/Index/BackgroundMerger.c
+++ b/core/Lucy/Index/BackgroundMerger.c
@@ -33,6 +33,7 @@
 #include "Lucy/Store/Folder.h"
 #include "Lucy/Store/FSFolder.h"
 #include "Lucy/Store/Lock.h"
+#include "Lucy/Util/Freezer.h"
 #include "Lucy/Util/IndexFileNames.h"
 #include "Lucy/Util/Json.h"
 
@@ -116,9 +117,8 @@ BGMerger_init(BackgroundMerger *self, Obj *index, IndexManager *manager) {
     ivars->polyreader = PolyReader_open((Obj*)folder, NULL, ivars->manager);
 
     // Clone the PolyReader's schema.
-    Hash *dump = Schema_Dump(PolyReader_Get_Schema(ivars->polyreader));
-    ivars->schema = (Schema*)CERTIFY(VTable_Load_Obj(SCHEMA, (Obj*)dump),
-                                    SCHEMA);
+    Obj *dump = (Obj*)Schema_Dump(PolyReader_Get_Schema(ivars->polyreader));
+    ivars->schema = (Schema*)CERTIFY(Freezer_load(dump), SCHEMA);
     DECREF(dump);
 
     // Create new Segment.

http://git-wip-us.apache.org/repos/asf/lucy/blob/2b10863c/core/Lucy/Index/Indexer.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Index/Indexer.c b/core/Lucy/Index/Indexer.c
index 803b7db..ab61d02 100644
--- a/core/Lucy/Index/Indexer.c
+++ b/core/Lucy/Index/Indexer.c
@@ -38,6 +38,7 @@
 #include "Lucy/Store/Folder.h"
 #include "Lucy/Store/FSFolder.h"
 #include "Lucy/Store/Lock.h"
+#include "Lucy/Util/Freezer.h"
 #include "Lucy/Util/IndexFileNames.h"
 #include "Lucy/Util/Json.h"
 
@@ -122,11 +123,9 @@ Indexer_init(Indexer *self, Schema *schema, Obj *index,
         }
         else {
             CharBuf *schema_file = S_find_schema_file(latest_snapshot);
-            Hash *dump = (Hash*)Json_slurp_json(folder, schema_file);
+            Obj *dump = Json_slurp_json(folder, schema_file);
             if (dump) { // read file successfully
-                ivars->schema = (Schema*)CERTIFY(
-                                   VTable_Load_Obj(SCHEMA, (Obj*)dump),
-                                   SCHEMA);
+                ivars->schema = (Schema*)CERTIFY(Freezer_load(dump), SCHEMA);
                 schema = ivars->schema;
                 DECREF(dump);
                 schema_file = NULL;

http://git-wip-us.apache.org/repos/asf/lucy/blob/2b10863c/core/Lucy/Index/PolyReader.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Index/PolyReader.c b/core/Lucy/Index/PolyReader.c
index 92f198b..d672fe9 100644
--- a/core/Lucy/Index/PolyReader.c
+++ b/core/Lucy/Index/PolyReader.c
@@ -30,6 +30,7 @@
 #include "Lucy/Store/FSFolder.h"
 #include "Lucy/Store/Lock.h"
 #include "Lucy/Util/Json.h"
+#include "Lucy/Util/Freezer.h"
 #include "Lucy/Util/IndexFileNames.h"
 #include "Clownfish/Util/StringHelper.h"
 
@@ -254,11 +255,10 @@ S_try_open_elements(void *context) {
         THROW(ERR, "Can't find a schema file.");
     }
     else {
-        Hash *dump = (Hash*)Json_slurp_json(folder, schema_file);
+        Obj *dump = Json_slurp_json(folder, schema_file);
         if (dump) { // read file successfully
             DECREF(ivars->schema);
-            ivars->schema = (Schema*)CERTIFY(
-                               VTable_Load_Obj(SCHEMA, (Obj*)dump), SCHEMA);
+            ivars->schema = (Schema*)CERTIFY(Freezer_load(dump), SCHEMA);
             DECREF(dump);
             DECREF(schema_file);
             schema_file = NULL;

http://git-wip-us.apache.org/repos/asf/lucy/blob/2b10863c/core/Lucy/Plan/Schema.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Plan/Schema.c b/core/Lucy/Plan/Schema.c
index 4203543..9ddb230 100644
--- a/core/Lucy/Plan/Schema.c
+++ b/core/Lucy/Plan/Schema.c
@@ -29,6 +29,7 @@
 #include "Lucy/Plan/FullTextType.h"
 #include "Lucy/Plan/Architecture.h"
 #include "Lucy/Store/Folder.h"
+#include "Lucy/Util/Freezer.h"
 #include "Lucy/Util/Json.h"
 
 // Scan the array to see if an object testing as Equal is present.  If not,
@@ -292,6 +293,14 @@ Schema_dump(Schema *self) {
     return dump;
 }
 
+static FieldType*
+S_load_type(VTable *vtable, Obj *type_dump) {
+    FieldType *dummy = (FieldType*)VTable_Make_Obj(vtable);
+    FieldType *loaded = (FieldType*)FType_Load(dummy, type_dump);
+    DECREF(dummy);
+    return loaded;
+}
+
 Schema*
 Schema_load(Schema *self, Obj *dump) {
     Hash *source = (Hash*)CERTIFY(dump, HASH);
@@ -332,47 +341,44 @@ Schema_load(Schema *self, Obj *dump) {
                 }
                 Hash_Store_Str(type_dump, "analyzer", 8, INCREF(analyzer));
                 FullTextType *type
-                    = (FullTextType*)VTable_Load_Obj(FULLTEXTTYPE,
-                                                     (Obj*)type_dump);
+                    = (FullTextType*)S_load_type(FULLTEXTTYPE,
+                                                 (Obj*)type_dump);
                 Schema_Spec_Field(loaded, field, (FieldType*)type);
                 DECREF(type);
             }
             else if (CB_Equals_Str(type_str, "string", 6)) {
                 StringType *type
-                    = (StringType*)VTable_Load_Obj(STRINGTYPE,
-                                                   (Obj*)type_dump);
+                    = (StringType*)S_load_type(STRINGTYPE, (Obj*)type_dump);
                 Schema_Spec_Field(loaded, field, (FieldType*)type);
                 DECREF(type);
             }
             else if (CB_Equals_Str(type_str, "blob", 4)) {
                 BlobType *type
-                    = (BlobType*)VTable_Load_Obj(BLOBTYPE, (Obj*)type_dump);
+                    = (BlobType*)S_load_type(BLOBTYPE, (Obj*)type_dump);
                 Schema_Spec_Field(loaded, field, (FieldType*)type);
                 DECREF(type);
             }
             else if (CB_Equals_Str(type_str, "i32_t", 5)) {
                 Int32Type *type
-                    = (Int32Type*)VTable_Load_Obj(INT32TYPE, (Obj*)type_dump);
+                    = (Int32Type*)S_load_type(INT32TYPE, (Obj*)type_dump);
                 Schema_Spec_Field(loaded, field, (FieldType*)type);
                 DECREF(type);
             }
             else if (CB_Equals_Str(type_str, "i64_t", 5)) {
                 Int64Type *type
-                    = (Int64Type*)VTable_Load_Obj(INT64TYPE, (Obj*)type_dump);
+                    = (Int64Type*)S_load_type(INT64TYPE, (Obj*)type_dump);
                 Schema_Spec_Field(loaded, field, (FieldType*)type);
                 DECREF(type);
             }
             else if (CB_Equals_Str(type_str, "f32_t", 5)) {
                 Float32Type *type
-                    = (Float32Type*)VTable_Load_Obj(FLOAT32TYPE,
-                                                    (Obj*)type_dump);
+                    = (Float32Type*)S_load_type(FLOAT32TYPE, (Obj*)type_dump);
                 Schema_Spec_Field(loaded, field, (FieldType*)type);
                 DECREF(type);
             }
             else if (CB_Equals_Str(type_str, "f64_t", 5)) {
                 Float64Type *type
-                    = (Float64Type*)VTable_Load_Obj(FLOAT64TYPE,
-                                                    (Obj*)type_dump);
+                    = (Float64Type*)S_load_type(FLOAT64TYPE, (Obj*)type_dump);
                 Schema_Spec_Field(loaded, field, (FieldType*)type);
                 DECREF(type);
             }