From 4df58a007e58e558571bb5af2f1a9aaa4b92dd69 Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Fri, 2 Jun 2017 00:15:30 +0200 Subject: Use forward declarations to reduce included footprint --- .../com/yahoo/config/codegen/CppClassBuilder.java | 41 +++++++++++++--------- 1 file changed, 24 insertions(+), 17 deletions(-) (limited to 'configgen') diff --git a/configgen/src/main/java/com/yahoo/config/codegen/CppClassBuilder.java b/configgen/src/main/java/com/yahoo/config/codegen/CppClassBuilder.java index 997416e5bfc..ef14f997e8b 100644 --- a/configgen/src/main/java/com/yahoo/config/codegen/CppClassBuilder.java +++ b/configgen/src/main/java/com/yahoo/config/codegen/CppClassBuilder.java @@ -8,10 +8,12 @@ import java.io.IOException; import java.io.FileReader; import java.io.StringWriter; import java.io.Writer; -import java.util.Collections; -import java.util.HashMap; import java.util.Map; +import java.util.HashMap; +import java.util.Collections; +import java.util.Arrays; import java.util.StringTokenizer; +import java.util.stream.Collectors; /** @@ -189,15 +191,19 @@ public class CppClassBuilder implements ClassBuilder { } void writeNameSpaceBegin(Writer w, String [] namespaceList) throws IOException { - for (int i = 0; i < namespaceList.length; i++) { - w.write("namespace " + namespaceList[i] + " {\n\n"); - } + w.write("namespace "); + w.write(getNestedNameSpace(namespaceList)); + w.write(" {\n"); + } + + String getNestedNameSpace(String [] namespaceList) { + return Arrays.stream(namespaceList).map(String::toString).collect(Collectors.joining("::")); } void writeNameSpaceEnd(Writer w, String [] namespaceList) throws IOException { - for (int i = 0; i < namespaceList.length; i++) { - w.write("} // namespace " + namespaceList[i] + "\n\n"); - } + w.write("} // namespace "); + w.write(getNestedNameSpace(namespaceList)); + w.write("\n"); } void writeHeaderHeader(Writer w, CNode root) throws IOException { @@ -229,17 +235,17 @@ public class CppClassBuilder implements ClassBuilder { + "#ifndef CLOUD_CONFIG_" + defineName + "_H\n" + "#define CLOUD_CONFIG_" + defineName + "_H\n" + "\n" - + "#include \n" - + "#include \n" + "#include \n" - + "#include \n" + "#include \n" + "#include \n" + "#include \n" + "\n"); + w.write("namespace config {\n"); + w.write(" class ConfigValue;\n"); + w.write(" class ConfigPayload;\n"); + w.write("}\n\n"); writeNameSpaceBegin(w, namespaceList); - w.write("\n"); - w.write("namespace internal {\n\n"); + w.write("\nnamespace internal {\n\n"); w.write("" + "/**\n" + " * This class contains the config. DO NOT USE THIS CLASS DIRECTLY. Use the typedeffed\n" @@ -551,17 +557,18 @@ public class CppClassBuilder implements ClassBuilder { w.write("#include <" + subdir + "/" + getFileName(root, "h") + ">"); } w.write("\n"); + w.write("#include \n"); + w.write("#include \n"); + w.write("#include \n"); w.write("#include \n"); w.write("#include \n"); w.write("#include \n"); w.write("#include \n"); w.write("#include \n"); w.write("#include \n"); - w.write("#include \n"); - w.write("\n\n"); - writeNameSpaceBegin(w, generateCppNameSpace(root)); w.write("\n"); - w.write("namespace internal {\n\n"); + writeNameSpaceBegin(w, generateCppNameSpace(root)); + w.write("\nnamespace internal {\n\n"); w.write("using ::config::ConfigParser;\n"); w.write("using ::config::InvalidConfigException;\n"); w.write("using ::config::ConfigInstance;\n"); -- cgit v1.2.3