Introduce class 'Inject' 12/269412/3
authorjh9216.park <jh9216.park@samsung.com>
Fri, 14 Jan 2022 02:59:50 +0000 (21:59 -0500)
committerjh9216.park <jh9216.park@samsung.com>
Fri, 14 Jan 2022 04:08:18 +0000 (23:08 -0500)
- It changes lamda function to string
- example
  stream << ReplaceAll(ctor, {
      { "<CLS_NAME>", st.GetID() },
      { "<PARAMS>", Inject([&]() {
            std::string str;
            for (auto& i : v) {
              str += i.first + " " + i.second;
              if (i != v.back())
                str += ", ";
            }
            return str;
          })
      },
      { "<INIT>", Inject([&]() {
            std::string str;
            for (auto& i : v) {
              str += i.second + "_(std::move(" + i.second + "))";
              if (i != v.back())
                str += ", ";
            }
            return str;
          })
      }
  });

Change-Id: I97f065d14a77255ad233b4d7dc7c30298e85e20e
Signed-off-by: jh9216.park <jh9216.park@samsung.com>
idlc/gen/cpp_gen_base.cc
idlc/gen/generator.h

index 7f83b86..ff15437 100644 (file)
@@ -202,9 +202,9 @@ void CppGeneratorBase::GenStructuresForBody(std::ofstream& stream) {
 void CppGeneratorBase::GenStructureForBody(std::ofstream& stream,
     const Structure& st) {
   std::vector<std::pair<std::string, std::string>> v;
-  const char ctor[] = "##::##() {}\n\n" \
-                      "##::##($$)\n" \
-                      "    : $$ {}";
+  const char ctor[] = "<CLS_NAME>::<CLS_NAME>() {}\n\n" \
+                      "<CLS_NAME>::<CLS_NAME>(<PARAMS>)\n" \
+                      "    : <INIT> {}";
 
   for (const auto& i : st.GetElements()) {
     std::pair<std::string, std::string> p;
@@ -214,27 +214,29 @@ void CppGeneratorBase::GenStructureForBody(std::ofstream& stream,
     v.push_back(p);
   }
 
-  GenTemplate(ReplaceAll(ctor, "##", st.GetID()), stream,
-    [&]()->std::string {
-      std::string str;
-      for (auto& i : v) {
-        str += i.first + " " + i.second;
-
-        if (i != v.back())
-          str += ", ";
-      }
-      return str;
-    },
-    [&]()->std::string {
-      std::string str;
-      for (auto& i : v) {
-        str += i.second + "_(std::move(" + i.second + "))";
-
-        if (i != v.back())
-          str += ", ";
+  stream << ReplaceAll(ctor, {
+      { "<CLS_NAME>", st.GetID() },
+      { "<PARAMS>", Inject([&]() {
+            std::string str;
+            for (auto& i : v) {
+              str += i.first + " " + i.second;
+              if (i != v.back())
+                str += ", ";
+            }
+            return str;
+          })
+      },
+      { "<INIT>", Inject([&]() {
+            std::string str;
+            for (auto& i : v) {
+              str += i.second + "_(std::move(" + i.second + "))";
+              if (i != v.back())
+                str += ", ";
+            }
+            return str;
+          })
       }
-      return str;
-    });
+  });
   stream <<  NLine(2);
 }
 
index a7beed2..cfdab3d 100755 (executable)
@@ -135,6 +135,21 @@ class Generator {
   int type_ = 0;
 };
 
+class Inject {
+ public:
+  template <class T>
+  explicit Inject(T t) {
+    str_ = t();
+  }
+
+  operator std::string() const {
+    return str_;
+  }
+
+ private:
+  std::string str_;
+};
+
 }  // namespace tidl
 
 #endif  // IDLC_GENERATOR_H_