[gxml] Ported SerializableTreeMap to post-serialization
- From: Daniel Espinosa Ortiz <despinosa src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gxml] Ported SerializableTreeMap to post-serialization
- Date: Wed, 24 Feb 2016 20:57:36 +0000 (UTC)
commit e10eec3d9f98bf835f889f966e8ec6ee2b30a427
Author: Daniel Espinosa <esodan gmail com>
Date: Wed Feb 24 14:01:07 2016 -0600
Ported SerializableTreeMap to post-serialization
gxml/SerializableGeeTreeMap.vala | 61 +++++++++++++--------
test/SerializableGeeHashMapTest.vala | 100 ---------------------------------
test/SerializableGeeTreeMapTest.vala | 100 +++++++++++++++++++++++++++++++++
test/TwDocumentTest.vala | 12 ++--
test/gxml-performance.vala | 102 ++++++++++++++++++++++++++++++++++
5 files changed, 246 insertions(+), 129 deletions(-)
---
diff --git a/gxml/SerializableGeeTreeMap.vala b/gxml/SerializableGeeTreeMap.vala
index 36d931b..3a88f4a 100644
--- a/gxml/SerializableGeeTreeMap.vala
+++ b/gxml/SerializableGeeTreeMap.vala
@@ -29,13 +29,43 @@ using GXml;
public class GXml.SerializableTreeMap<K,V> : Gee.TreeMap<K,V>, Serializable, SerializableCollection
{
GXml.Node _node;
+ bool _deserialized = false;
// SerializableCollection interface
public virtual bool deserialize_proceed () { return true; }
public virtual bool deserialized () { return true; }
public virtual bool is_prepared () { return (_node is GXml.Node); }
- public virtual bool deserialize_node (GXml.Node node) throws GLib.Error { return false; }
- public virtual bool deserialize_children () throws GLib.Error { return false; }
+ public virtual bool deserialize_node (GXml.Node node) throws GLib.Error {
+ if (!(value_type.is_a (typeof (GXml.Serializable)) &&
+ value_type.is_a (typeof (SerializableMapKey)))) {
+ throw new SerializableError.UNSUPPORTED_TYPE_ERROR (_("%s: Value type '%s' is unsupported"),
+ this.get_type ().name (), value_type.name ());
+ }
+ if (node is Element) {
+ var obj = Object.new (value_type);
+ if (node.name.down () == ((Serializable) obj).node_name ().down ()) {
+ ((Serializable) obj).deserialize (node);
+ @set (((SerializableMapKey<K>) obj).get_map_key (), obj);
+ }
+ }
+ return true;
+ }
+ public virtual bool deserialize_children () throws GLib.Error {
+ if (_deserialized) return false;
+ if (_node == null) return false;
+ if (!(value_type.is_a (typeof (GXml.Serializable)) &&
+ value_type.is_a (typeof (SerializableMapKey)))) {
+ throw new SerializableError.UNSUPPORTED_TYPE_ERROR (_("%s: Value type '%s' is unsupported"),
+ this.get_type ().name (), value_type.name ());
+ }
+ if (_node is Element) {
+ foreach (GXml.Node n in _node.children) {
+ deserialize_node (n);
+ }
+ }
+ _deserialized = true;
+ return true;
+ }
construct { Init.init (); }
@@ -116,26 +146,11 @@ public class GXml.SerializableTreeMap<K,V> : Gee.TreeMap<K,V>, Serializable, Ser
public bool default_deserialize (GXml.Node node)
throws GLib.Error
{
- if (!(value_type.is_a (typeof (GXml.Serializable)) &&
- value_type.is_a (typeof (SerializableMapKey)))) {
- throw new SerializableError.UNSUPPORTED_TYPE_ERROR (_("%s: Value type '%s' is unsupported"),
- this.get_type ().name (), value_type.name ());
- }
- if (node is Element) {
- foreach (GXml.Node n in node.children) {
- if (n is Element) {
-#if DEBUG
- stdout.printf (@"Node $(node.name) for type '$(get_type ().name ())'\n");
-#endif
- var obj = Object.new (value_type);
- if (n.name.down () == ((Serializable) obj).node_name ().down ()) {
- ((Serializable) obj).deserialize (n);
- @set (((SerializableMapKey<K>) obj).get_map_key (), obj);
- }
- }
- }
- }
- return true;
+ _node = node;
+ _deserialized = false;
+ if (deserialize_proceed ())
+ return deserialize_children ();
+ return false;
}
public virtual bool deserialize_property (GXml.Node property_node)
throws GLib.Error
@@ -145,6 +160,6 @@ public class GXml.SerializableTreeMap<K,V> : Gee.TreeMap<K,V>, Serializable, Ser
public bool default_deserialize_property (GXml.Node property_node)
throws GLib.Error
{
- return true;
+ return deserialize_node (property_node);
}
}
diff --git a/test/SerializableGeeHashMapTest.vala b/test/SerializableGeeHashMapTest.vala
index 0afa4d0..3ccff5d 100644
--- a/test/SerializableGeeHashMapTest.vala
+++ b/test/SerializableGeeHashMapTest.vala
@@ -28,24 +28,6 @@ using Gee;
class SerializableGeeHashMapTest : GXmlTest
{
- class HElement : SerializableObjectModel, SerializableMapKey<string>
- {
- public string name { get; set; }
- public string get_map_key () { return name; }
- public override string node_name () { return "HElement"; }
- public override string to_string () { return "HElement"; }
- public class HashMap : SerializableHashMap<string,HElement> {
- public bool enable_deserialize { get; set; default = false; }
- public override bool deserialize_proceed () { return enable_deserialize; }
- }
- }
- class HCElement : SerializableObjectModel {
- public HElement.HashMap elements1 { get; set; default = new HElement.HashMap (); }
- public HElement.HashMap elements2 { get; set; default = new HElement.HashMap (); }
- public override string node_name () { return "HCElement"; }
- public override string to_string () { return "HCElement"; }
- }
-
class Space : SerializableObjectModel, SerializableMapKey<string>
{
public string get_map_key () { return name; }
@@ -342,87 +324,5 @@ class SerializableGeeHashMapTest : GXmlTest
assert_not_reached ();
}
});
- Test.add_func ("/gxml/performance/hashmap/post-deserialization/disable",
- () => {
- try {
- double time;
- Test.message ("Starting generating document...");
- Test.timer_start ();
- var d = new TwDocument ();
- var ce = new HCElement ();
- for (int i = 0; i < 125000; i++) {
- var e1 = new HElement ();
- e1.name = "1E"+i.to_string ();
- ce.elements1.set (e1.name, e1);
- var e2 = new HElement ();
- e2.name = "2E"+i.to_string ();
- ce.elements2.set (e2.name, e2);
- }
- ce.serialize (d);
- time = Test.timer_elapsed ();
- Test.minimized_result (time, "Created document: %g seconds", time);
- Test.message ("Starting deserializing document: Disable collection deserialization...");
- Test.timer_start ();
- var cep = new HCElement ();
- cep.elements1.enable_deserialize = false;
- cep.elements2.enable_deserialize = false;
- cep.deserialize (d);
- time = Test.timer_elapsed ();
- Test.minimized_result (time, "Disable Deserialize Collection. Deserialized from doc: %g seconds",
time);
- assert (cep.elements1.is_prepared ());
- assert (cep.elements2.is_prepared ());
- Test.message ("Calling C1 deserialize_children()...");
- Test.timer_start ();
- cep.elements1.deserialize_children ();
- assert (!cep.elements1.deserialize_children ());
- time = Test.timer_elapsed ();
- Test.minimized_result (time, "C1: Disable Deserialize Collection. Deserialized from NODE: %g
seconds", time);
- Test.message ("Calling C2 deserialize_children()...");
- Test.timer_start ();
- cep.elements2.deserialize_children ();
- assert (!cep.elements2.deserialize_children ());
- time = Test.timer_elapsed ();
- Test.minimized_result (time, "C2: Disable Deserialize Collection. Deserialized from NODE: %g
seconds", time);
- } catch (GLib.Error e) {
- GLib.message ("ERROR: "+e.message);
- assert_not_reached ();
- }
- });
- Test.add_func ("/gxml/performance/hashmap/post-deserialization/enable",
- () => {
- try {
- double time;
- Test.message ("Starting generating document...");
- Test.timer_start ();
- var d = new TwDocument ();
- var ce = new HCElement ();
- for (int i = 0; i < 125000; i++) {
- var e1 = new HElement ();
- e1.name = "1E"+i.to_string ();
- ce.elements1.set (e1.name, e1);
- var e2 = new HElement ();
- e2.name = "2E"+i.to_string ();
- ce.elements2.set (e2.name, e2);
- }
- ce.serialize (d);
- time = Test.timer_elapsed ();
- Test.minimized_result (time, "Created document: %g seconds", time);
- Test.message ("Starting deserializing document: Enable collection deserialization...");
- Test.timer_start ();
- var cep = new HCElement ();
- cep.elements1.enable_deserialize = true;
- cep.elements2.enable_deserialize = true;
- cep.deserialize (d);
- time = Test.timer_elapsed ();
- Test.minimized_result (time, "Disable Deserialize Collection. Deserialized from doc: %g seconds",
time);
- assert (cep.elements1.is_prepared ());
- assert (cep.elements2.is_prepared ());
- assert (!cep.elements1.deserialize_children ());
- assert (!cep.elements2.deserialize_children ());
- } catch (GLib.Error e) {
- GLib.message ("ERROR: "+e.message);
- assert_not_reached ();
- }
- });
}
}
diff --git a/test/SerializableGeeTreeMapTest.vala b/test/SerializableGeeTreeMapTest.vala
index 7c70d59..e50aa01 100644
--- a/test/SerializableGeeTreeMapTest.vala
+++ b/test/SerializableGeeTreeMapTest.vala
@@ -28,6 +28,24 @@ using Gee;
class SerializableGeeTreeMapTest : GXmlTest
{
+ class HTElement : SerializableObjectModel, SerializableMapKey<string>
+ {
+ public string name { get; set; }
+ public string get_map_key () { return name; }
+ public override string node_name () { return "HElement"; }
+ public override string to_string () { return "HElement"; }
+ public class TreeMap : SerializableTreeMap<string,HTElement> {
+ public bool enable_deserialize { get; set; default = false; }
+ public override bool deserialize_proceed () { return enable_deserialize; }
+ }
+ }
+ class HTCElement : SerializableObjectModel {
+ public HTElement.TreeMap elements1 { get; set; default = new HTElement.TreeMap (); }
+ public HTElement.TreeMap elements2 { get; set; default = new HTElement.TreeMap (); }
+ public override string node_name () { return "HCElement"; }
+ public override string to_string () { return "HCElement"; }
+ }
+
class Space : SerializableObjectModel, SerializableMapKey<string>
{
public string get_map_key () { return name; }
@@ -271,5 +289,87 @@ class SerializableGeeTreeMapTest : GXmlTest
assert_not_reached ();
}
});
+ Test.add_func ("/gxml/performance/treemap/post-deserialization/disable",
+ () => {
+ try {
+ double time;
+ Test.message ("Starting generating document...");
+ Test.timer_start ();
+ var d = new TwDocument ();
+ var ce = new HTCElement ();
+ for (int i = 0; i < 125000; i++) {
+ var e1 = new HTElement ();
+ e1.name = "1E"+i.to_string ();
+ ce.elements1.set (e1.name, e1);
+ var e2 = new HTElement ();
+ e2.name = "2E"+i.to_string ();
+ ce.elements2.set (e2.name, e2);
+ }
+ ce.serialize (d);
+ time = Test.timer_elapsed ();
+ Test.minimized_result (time, "Created document: %g seconds", time);
+ Test.message ("Starting deserializing document: Disable collection deserialization...");
+ Test.timer_start ();
+ var cep = new HTCElement ();
+ cep.elements1.enable_deserialize = false;
+ cep.elements2.enable_deserialize = false;
+ cep.deserialize (d);
+ time = Test.timer_elapsed ();
+ Test.minimized_result (time, "Disable Deserialize Collection. Deserialized from doc: %g seconds",
time);
+ assert (cep.elements1.is_prepared ());
+ assert (cep.elements2.is_prepared ());
+ Test.message ("Calling C1 deserialize_children()...");
+ Test.timer_start ();
+ cep.elements1.deserialize_children ();
+ assert (!cep.elements1.deserialize_children ());
+ time = Test.timer_elapsed ();
+ Test.minimized_result (time, "C1: Disable Deserialize Collection. Deserialized from NODE: %g
seconds", time);
+ Test.message ("Calling C2 deserialize_children()...");
+ Test.timer_start ();
+ cep.elements2.deserialize_children ();
+ assert (!cep.elements2.deserialize_children ());
+ time = Test.timer_elapsed ();
+ Test.minimized_result (time, "C2: Disable Deserialize Collection. Deserialized from NODE: %g
seconds", time);
+ } catch (GLib.Error e) {
+ GLib.message ("ERROR: "+e.message);
+ assert_not_reached ();
+ }
+ });
+ Test.add_func ("/gxml/performance/treemap/post-deserialization/enable",
+ () => {
+ try {
+ double time;
+ Test.message ("Starting generating document...");
+ Test.timer_start ();
+ var d = new TwDocument ();
+ var ce = new HTCElement ();
+ for (int i = 0; i < 125000; i++) {
+ var e1 = new HTElement ();
+ e1.name = "1E"+i.to_string ();
+ ce.elements1.set (e1.name, e1);
+ var e2 = new HTElement ();
+ e2.name = "2E"+i.to_string ();
+ ce.elements2.set (e2.name, e2);
+ }
+ ce.serialize (d);
+ time = Test.timer_elapsed ();
+ Test.minimized_result (time, "Created document: %g seconds", time);
+ Test.message ("Starting deserializing document: Enable collection deserialization...");
+ Test.timer_start ();
+ var cep = new HTCElement ();
+ cep.elements1.enable_deserialize = true;
+ cep.elements2.enable_deserialize = true;
+ cep.deserialize (d);
+ time = Test.timer_elapsed ();
+ Test.minimized_result (time, "Disable Deserialize Collection. Deserialized from doc: %g seconds",
time);
+ assert (cep.elements1.is_prepared ());
+ assert (cep.elements2.is_prepared ());
+ assert (!cep.elements1.deserialize_children ());
+ assert (!cep.elements2.deserialize_children ());
+ } catch (GLib.Error e) {
+ GLib.message ("ERROR: "+e.message);
+ assert_not_reached ();
+ }
+ });
}
}
diff --git a/test/TwDocumentTest.vala b/test/TwDocumentTest.vala
index f64674d..1a41e47 100644
--- a/test/TwDocumentTest.vala
+++ b/test/TwDocumentTest.vala
@@ -166,7 +166,7 @@ class TwDocumentTest : GXmlTest {
assert_not_reached ();
}
});
- Test.add_func ("/gxml/tw-document/save/root/childs", () => {
+ Test.add_func ("/gxml/tw-document/save/root/children", () => {
try {
var f = GLib.File.new_for_path
(GXmlTestConfig.TEST_SAVE_DIR+"/tw-test.xml");
if (f.query_exists ()) f.delete ();
@@ -205,9 +205,9 @@ class TwDocumentTest : GXmlTest {
assert_not_reached ();
}
});
- Test.add_func ("/gxml/tw-document/root/childs-childs", () => {
+ Test.add_func ("/gxml/tw-document/root/children-children", () => {
#if DEBUG
- GLib.message (@"TwDocument root childs/childs...");
+ GLib.message (@"TwDocument root children/children...");
#endif
try {
#if DEBUG
@@ -268,9 +268,9 @@ class TwDocumentTest : GXmlTest {
assert_not_reached ();
}
});
- Test.add_func ("/gxml/tw-document/save/childs-childs", () => {
+ Test.add_func ("/gxml/tw-document/save/children-children", () => {
#if DEBUG
- GLib.message (@"TwDocument root childs/childs...");
+ GLib.message (@"TwDocument root children/children...");
#endif
try {
#if DEBUG
@@ -291,7 +291,7 @@ class TwDocumentTest : GXmlTest {
var r = (GXml.Element) d.root;
r.set_attr ("name","The Great Book");
#if DEBUG
- GLib.message (@"Creating childs...");
+ GLib.message (@"Creating children...");
#endif
for (int i = 0; i < 30000; i++){
var b = (GXml.Element) d.create_element ("book");
diff --git a/test/gxml-performance.vala b/test/gxml-performance.vala
index e8c2c55..2d9f65b 100644
--- a/test/gxml-performance.vala
+++ b/test/gxml-performance.vala
@@ -136,6 +136,26 @@ public class Performance
public override string node_name () { return "CElement"; }
public override string to_string () { return "CElement"; }
}
+ // HashMap
+
+ class HElement : SerializableObjectModel, SerializableMapKey<string>
+ {
+ public string name { get; set; }
+ public string get_map_key () { return name; }
+ public override string node_name () { return "HElement"; }
+ public override string to_string () { return "HElement"; }
+ public class HashMap : SerializableHashMap<string,HElement> {
+ public bool enable_deserialize { get; set; default = false; }
+ public override bool deserialize_proceed () { return enable_deserialize; }
+ }
+ }
+ class HCElement : SerializableObjectModel {
+ public HElement.HashMap elements1 { get; set; default = new HElement.HashMap (); }
+ public HElement.HashMap elements2 { get; set; default = new HElement.HashMap (); }
+ public override string node_name () { return "HCElement"; }
+ public override string to_string () { return "HCElement"; }
+ }
+
/**
* Iterate recursively through all node and children nodes in document.
*/
@@ -375,6 +395,88 @@ public class Performance
assert_not_reached ();
}
});
+ Test.add_func ("/gxml/performance/hashmap/post-deserialization/disable",
+ () => {
+ try {
+ double time;
+ Test.message ("Starting generating document...");
+ Test.timer_start ();
+ var d = new TwDocument ();
+ var ce = new HCElement ();
+ for (int i = 0; i < 125000; i++) {
+ var e1 = new HElement ();
+ e1.name = "1E"+i.to_string ();
+ ce.elements1.set (e1.name, e1);
+ var e2 = new HElement ();
+ e2.name = "2E"+i.to_string ();
+ ce.elements2.set (e2.name, e2);
+ }
+ ce.serialize (d);
+ time = Test.timer_elapsed ();
+ Test.minimized_result (time, "Created document: %g seconds", time);
+ Test.message ("Starting deserializing document: Disable collection deserialization...");
+ Test.timer_start ();
+ var cep = new HCElement ();
+ cep.elements1.enable_deserialize = false;
+ cep.elements2.enable_deserialize = false;
+ cep.deserialize (d);
+ time = Test.timer_elapsed ();
+ Test.minimized_result (time, "Disable Deserialize Collection. Deserialized from doc: %g seconds",
time);
+ assert (cep.elements1.is_prepared ());
+ assert (cep.elements2.is_prepared ());
+ Test.message ("Calling C1 deserialize_children()...");
+ Test.timer_start ();
+ cep.elements1.deserialize_children ();
+ assert (!cep.elements1.deserialize_children ());
+ time = Test.timer_elapsed ();
+ Test.minimized_result (time, "C1: Disable Deserialize Collection. Deserialized from NODE: %g
seconds", time);
+ Test.message ("Calling C2 deserialize_children()...");
+ Test.timer_start ();
+ cep.elements2.deserialize_children ();
+ assert (!cep.elements2.deserialize_children ());
+ time = Test.timer_elapsed ();
+ Test.minimized_result (time, "C2: Disable Deserialize Collection. Deserialized from NODE: %g
seconds", time);
+ } catch (GLib.Error e) {
+ GLib.message ("ERROR: "+e.message);
+ assert_not_reached ();
+ }
+ });
+ Test.add_func ("/gxml/performance/hashmap/post-deserialization/enable",
+ () => {
+ try {
+ double time;
+ Test.message ("Starting generating document...");
+ Test.timer_start ();
+ var d = new TwDocument ();
+ var ce = new HCElement ();
+ for (int i = 0; i < 125000; i++) {
+ var e1 = new HElement ();
+ e1.name = "1E"+i.to_string ();
+ ce.elements1.set (e1.name, e1);
+ var e2 = new HElement ();
+ e2.name = "2E"+i.to_string ();
+ ce.elements2.set (e2.name, e2);
+ }
+ ce.serialize (d);
+ time = Test.timer_elapsed ();
+ Test.minimized_result (time, "Created document: %g seconds", time);
+ Test.message ("Starting deserializing document: Enable collection deserialization...");
+ Test.timer_start ();
+ var cep = new HCElement ();
+ cep.elements1.enable_deserialize = true;
+ cep.elements2.enable_deserialize = true;
+ cep.deserialize (d);
+ time = Test.timer_elapsed ();
+ Test.minimized_result (time, "Disable Deserialize Collection. Deserialized from doc: %g seconds",
time);
+ assert (cep.elements1.is_prepared ());
+ assert (cep.elements2.is_prepared ());
+ assert (!cep.elements1.deserialize_children ());
+ assert (!cep.elements2.deserialize_children ());
+ } catch (GLib.Error e) {
+ GLib.message ("ERROR: "+e.message);
+ assert_not_reached ();
+ }
+ });
#endif
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]