summaryrefslogtreecommitdiff
path: root/Ianimal
diff options
context:
space:
mode:
authorTim Redfern <tim@herge.(none)>2013-03-08 18:04:09 +0000
committerTim Redfern <tim@herge.(none)>2013-03-08 18:04:09 +0000
commit55a63ac09264a38fafdf4a218e86b598030fb47c (patch)
tree8e0769f83d3dc55177ef091b7551e61477c5c74e /Ianimal
parentc09a3c040b43731196f59bac8046823f1f692e3e (diff)
REST api working
Diffstat (limited to 'Ianimal')
-rw-r--r--Ianimal/Ianimal.cpp67
-rwxr-xr-xIanimal/make1
2 files changed, 68 insertions, 0 deletions
diff --git a/Ianimal/Ianimal.cpp b/Ianimal/Ianimal.cpp
new file mode 100644
index 0000000..5aa70cd
--- /dev/null
+++ b/Ianimal/Ianimal.cpp
@@ -0,0 +1,67 @@
+#include <string>
+#include <iostream>
+#include <map>
+#include <vector>
+
+using namespace std;
+
+class Node { //abstract base class
+ public:
+ virtual string get_name() = 0; //signal output
+};
+
+class A_node: public Node {
+ public:
+ string get_name(){ return "A"; };
+ string get_occupation(){ return "an A"; };
+};
+
+class B_node: public Node {
+ public:
+ string get_name(){ return "B"; };
+ string get_occupation(){ return "a B"; };
+};
+
+class C_node: public Node {
+ public:
+ string get_name(){ return "C"; };
+ string get_occupation(){ return "a C"; };
+};
+
+class Node_factory {
+ public:
+ template <typename T>
+ T* clone(T* proto) {
+ return new T();
+ };
+ Node_factory() {
+ add_type("A",new A_node());
+ add_type("B",new B_node());
+ add_type("C",new C_node());
+ }
+ Node *get_node(string type) {
+ if (type=="A") return new A_node();
+ if (type=="B") return new B_node();
+ if (type=="C") return new C_node();
+ };
+ map<string,Node*> type_map;
+ void add_type(string type,Node *proto){
+ type_map[type]=proto;
+ };
+ Node *create(string type) {
+ if (type_map.find(type)!=type_map.end()) {
+ return (Node*)clone(type_map[type]);
+ }
+ }
+};
+
+int main() {
+ Node_factory f=Node_factory();
+ vector<Node*> nodes;
+ nodes.push_back(f.get_node("A"));
+ nodes.push_back(f.get_node("B"));
+ nodes.push_back(f.get_node("C"));
+ for (auto &i: nodes) {
+ cout << i->get_name() << endl;
+ }
+} \ No newline at end of file
diff --git a/Ianimal/make b/Ianimal/make
new file mode 100755
index 0000000..7c1cc2e
--- /dev/null
+++ b/Ianimal/make
@@ -0,0 +1 @@
+g++ Ianimal.cpp -std=c++11 -o Ianimal