aboutsummaryrefslogtreecommitdiffstats
path: root/src/engine/Loader.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-02-25 04:11:07 +0000
committerDavid Robillard <d@drobilla.net>2007-02-25 04:11:07 +0000
commit9d657891ea68ab979bb8c1877bfea656db0bdb1e (patch)
tree7fb3f9b9c825adfca34b25c8068a71d2c8940ed2 /src/engine/Loader.cpp
parent2f3580a8d7b743811e1bc78487e56210d564e4aa (diff)
downloadmachina-9d657891ea68ab979bb8c1877bfea656db0bdb1e.tar.gz
machina-9d657891ea68ab979bb8c1877bfea656db0bdb1e.tar.bz2
machina-9d657891ea68ab979bb8c1877bfea656db0bdb1e.zip
More serialization work (loading, saving works from GUI).
git-svn-id: http://svn.drobilla.net/lad/machina@338 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/engine/Loader.cpp')
-rw-r--r--src/engine/Loader.cpp66
1 files changed, 40 insertions, 26 deletions
diff --git a/src/engine/Loader.cpp b/src/engine/Loader.cpp
index ec884eb..078d783 100644
--- a/src/engine/Loader.cpp
+++ b/src/engine/Loader.cpp
@@ -17,6 +17,7 @@
#include <iostream>
#include <map>
+#include <cmath>
#include <raptor.h>
#include <rasqal.h>
#include <glibmm/ustring.h>
@@ -45,30 +46,33 @@ Loader::Loader(SharedPtr<Namespaces> namespaces)
/** Load (create) all objects from an RDF into the engine.
*
- * @param filename Filename to load objects from.
- * @param parent Path of parent under which to load objects.
- * @return whether or not load was successful.
+ * @param uri URI of machine (e.g. resolvable URI to an RDF document).
+ * @return Loaded Machine.
*/
SharedPtr<Machine>
-Loader::load(const Glib::ustring& filename)
+Loader::load(const Glib::ustring& uri)
{
using Raul::RDFQuery;
SharedPtr<Machine> machine;
rasqal_init();
- unsigned char* document_uri_str = raptor_uri_filename_to_uri_string(filename.c_str());
- assert(document_uri_str);
- raptor_uri* document_raptor_uri = raptor_new_uri(document_uri_str);
+ //unsigned char* document_uri_str = raptor_uri_filename_to_uri_string(filename.c_str());
+ //assert(document_uri_str);
+ //raptor_uri* document_raptor_uri = raptor_new_uri(document_uri_str);
+ raptor_uri* document_raptor_uri = raptor_new_uri((const unsigned char*)uri.c_str());
- if (!document_uri_str)
- return machine;
+ if (!document_raptor_uri)
+ return machine; // NULL
machine = SharedPtr<Machine>(new Machine());
- Glib::ustring document_uri = (const char*)document_uri_str;
+ //Glib::ustring document_uri = (const char*)document_uri_str;
+ const Glib::ustring& document_uri = uri;
- string machine_uri = "<> ";
+ //string machine_uri = "<> ";
+ //string machine_uri = string("<") + document_uri + "> ";
+ string machine_uri = "?foo ";
cout << "[Loader] Loading " << machine_uri << " from " << document_uri << endl;
@@ -79,18 +83,16 @@ Loader::load(const Glib::ustring& filename)
/* Get initial nodes */
Raul::RDFQuery query = Raul::RDFQuery(*_namespaces, Glib::ustring(
- "SELECT DISTINCT ?initialNode ?midiNote ?duration FROM <")
+ "SELECT DISTINCT ?initialNode ?duration FROM <")
+ document_uri + "> WHERE {\n" +
machine_uri + " :initialNode ?initialNode .\n"
- "?initialNode :midiNote ?midiNote ;\n"
- " :duration ?duration .\n"
+ "?initialNode :duration ?duration .\n"
"}\n");
RDFQuery::Results results = query.run(document_uri);
for (RDFQuery::Results::iterator i = results.begin(); i != results.end(); ++i) {
const Glib::ustring& node_uri = (*i)["initialNode"];
- const Glib::ustring& midi_note = (*i)["midiNote"];
const Glib::ustring& duration = (*i)["duration"];
raptor_uri* node_raptor_uri
@@ -99,7 +101,7 @@ Loader::load(const Glib::ustring& filename)
char* node_name = (char*)
raptor_uri_to_relative_uri_string(document_raptor_uri, node_raptor_uri);
- //cout << "Initial: " << node_name << ": " << midi_note << " - " << duration << endl;
+ cout << "Initial: " << node_name << " - " << duration << endl;
cerr << "FIXME: load\n";
/*
@@ -114,6 +116,10 @@ Loader::load(const Glib::ustring& filename)
created.insert(std::make_pair(node_uri.collate_key(), node));
*/
+
+ SharedPtr<Node> node(new Node(strtod(duration.c_str(), NULL), true));
+ machine->add_node(node);
+ created.insert(std::make_pair(node_uri.collate_key(), node));
raptor_free_uri(node_raptor_uri);
free(node_name);
@@ -123,18 +129,16 @@ Loader::load(const Glib::ustring& filename)
/* Get remaining nodes */
query = Raul::RDFQuery(*_namespaces, Glib::ustring(
- "SELECT DISTINCT ?node ?midiNote ?duration FROM <")
+ "SELECT DISTINCT ?node ?duration FROM <")
+ document_uri + "> WHERE {\n" +
machine_uri + " :node ?node .\n"
- "?node :midiNote ?midiNote ;\n"
- " :duration ?duration .\n"
+ "?node :duration ?duration .\n"
"}\n");
results = query.run(document_uri);
for (RDFQuery::Results::iterator i = results.begin(); i != results.end(); ++i) {
const Glib::ustring& node_uri = (*i)["node"];
- const Glib::ustring& midi_note = (*i)["midiNote"];
const Glib::ustring& duration = (*i)["duration"];
raptor_uri* node_raptor_uri
@@ -143,6 +147,7 @@ Loader::load(const Glib::ustring& filename)
char* node_name = (char*)
raptor_uri_to_relative_uri_string(document_raptor_uri, node_raptor_uri);
+ cout << "Node: " << node_name << " - " << duration << endl;
cerr << "FIXME: load (2)\n";
/*
@@ -159,6 +164,10 @@ Loader::load(const Glib::ustring& filename)
created.insert(std::make_pair(node_uri.collate_key(), node));
}
*/
+ SharedPtr<Node> node(new Node(strtod(duration.c_str(), NULL), true));
+ machine->add_node(node);
+ created.insert(std::make_pair(node_uri.collate_key(), node));
+
raptor_free_uri(node_raptor_uri);
free(node_name);
}
@@ -167,16 +176,19 @@ Loader::load(const Glib::ustring& filename)
/* Get edges */
query = Raul::RDFQuery(*_namespaces, Glib::ustring(
- "SELECT DISTINCT ?src ?edge ?dst FROM <")
+ "SELECT DISTINCT ?edge ?src ?dst ?prob FROM <")
+ document_uri + "> WHERE {\n" +
machine_uri + " :edge ?edge .\n"
- "?edge :tail ?src ;\n"
- " :head ?dst .\n }");
+ "?edge :tail ?src ;\n"
+ " :head ?dst ;\n"
+ " :probability ?prob .\n }");
+
results = query.run(document_uri);
for (RDFQuery::Results::iterator i = results.begin(); i != results.end(); ++i) {
const Glib::ustring& src_uri = (*i)["src"];
- const Glib::ustring& dst_uri = (*i)["dst"];
+ const Glib::ustring& dst_uri = (*i)["dst"];
+ double prob = strtod((*i)["prob"].c_str(), NULL);
Created::iterator src_i = created.find(src_uri.collate_key());
Created::iterator dst_i = created.find(dst_uri.collate_key());
@@ -185,7 +197,9 @@ Loader::load(const Glib::ustring& filename)
const SharedPtr<Node> src = src_i->second;
const SharedPtr<Node> dst = dst_i->second;
- src->add_outgoing_edge(SharedPtr<Edge>(new Edge(src, dst)));
+ SharedPtr<Edge> edge(new Edge(src, dst));
+ edge->set_probability(prob);
+ src->add_outgoing_edge(edge);
} else {
cerr << "[Loader] WARNING: Ignored edge between unknown nodes "
@@ -194,7 +208,7 @@ Loader::load(const Glib::ustring& filename)
}
- free(document_uri_str);
+ //free(document_uri_str);
raptor_free_uri(document_raptor_uri);
return machine;