浏览代码

implement delete

Willi Zschiebsch 4 年之前
父节点
当前提交
23a7eb28e8
共有 3 个文件被更改,包括 38 次插入8 次删除
  1. 2 0
      lib/include/ProcessorBase.h
  2. 27 7
      lib/src/Connector.cpp
  3. 9 1
      lib/src/ProcessorBase.cpp

+ 2 - 0
lib/include/ProcessorBase.h

@@ -16,6 +16,8 @@ namespace mdd {
         std::string _name = "";
         int _appendix = 0;
 
+        unsigned int module_counter = 0;
+
     protected:
         json _base_config;
         ProcessorBase(const std::string& base_config);

+ 27 - 7
lib/src/Connector.cpp

@@ -86,10 +86,7 @@ namespace mdd {
 					in_ptr->connect(out_ptr);
 					jargs["object"] = obj;
 				}
-				
 			}
-			
-			
 		}
 		else if (obj["type"] == "input")
 		{
@@ -111,8 +108,32 @@ namespace mdd {
 	}
 
 	json Connector::remove(const json& args) {
-
-		return args;
+		json ret;
+		if (!contains_subj_obj_structure(args))
+		{
+			return ret;
+		}
+		json sub = args["subject"];
+		if (!sub.contains("type"))
+		{
+			return ret;
+		}
+		json obj = args["object"];
+		ret["operation"] = "remove";
+		json jargs;
+		if (sub["type"] == "processor")
+		{
+			if (sub == _root->getIdentifier())
+			{
+				jargs["subject"] = _root->getIdentifier();
+				json jobj = obj["object"];
+				auto module_ptr = _root->getModule(obj["name"].get<std::string>() + std::to_string(obj["appendix"].get<int>()));
+				jargs["object"] = module_ptr->getIdentifier();
+				_root->removeModule(module_ptr);
+			}
+		}
+		ret["args"] = jargs;
+		return ret;
 	}
 
 	json Connector::change(const json& args) {
@@ -131,7 +152,7 @@ namespace mdd {
 		json jargs;
 		if (sub["type"] == "processor")
 		{
-			if (jargs["subject"] == _root->getIdentifier())
+			if (sub["subject"] == _root->getIdentifier())
 			{
 				jargs["subject"] = _root->getIdentifier();
 				if (_root->configure(obj.dump()))
@@ -155,7 +176,6 @@ namespace mdd {
 				else {
 					jargs["object"] = obj;
 				}
-				
 			}
 		}
 		else if (sub["type"] == "module")

+ 9 - 1
lib/src/ProcessorBase.cpp

@@ -152,7 +152,7 @@ namespace mdd{
         if (auto module_ptr = modules.back())
         {
             module_ptr->setParent(shared_from_this());
-            module_ptr->setAppendix(modules.size() - 1);
+            module_ptr->setAppendix(module_counter++);
             return module_ptr->getID();
         }
         return "";
@@ -163,7 +163,9 @@ namespace mdd{
         for (auto it = modules.begin(); it != modules.end(); ++it) {
             if ((*it) == module)
             {
+                (*it)->disconnect();
                 modules.erase(it);
+                return;
             }
         }
     }
@@ -369,6 +371,12 @@ namespace mdd{
                 }
             }
         }
+
+        //update appendix
+        for (int i = 0; i < modules.size(); ++i)
+        {
+            modules[i]->setAppendix(i);
+        }
     }
 
     json ProcessorBase::dump() {