Index: tools/json_schema_compiler/cpp_bundle_generator.py |
diff --git a/tools/json_schema_compiler/cpp_bundle_generator.py b/tools/json_schema_compiler/cpp_bundle_generator.py |
index 453e4466cc03a240007ce3f26c959897c03770a8..6cb1b8e375f9d5220424f3798e583b4c67794c4a 100644 |
--- a/tools/json_schema_compiler/cpp_bundle_generator.py |
+++ b/tools/json_schema_compiler/cpp_bundle_generator.py |
@@ -207,6 +207,7 @@ class _SchemasHGenerator(object): |
def Generate(self, namespace): |
c = code.Code() |
c.Append('#include <map>') |
+ c.Append('#include <set>') |
c.Append('#include <string>') |
c.Append(); |
c.Append('#include "base/strings/string_piece.h"') |
@@ -215,9 +216,12 @@ class _SchemasHGenerator(object): |
c.Append() |
c.Append('class GeneratedSchemas {') |
c.Sblock(' public:') |
- c.Append('// Puts all API schemas in |schemas|.') |
- c.Append('static void Get(' |
- 'std::map<std::string, base::StringPiece>* schemas);') |
+ c.Append('// Puts names for all the schemas in |schemas|.') |
+ c.Append('static void GetNames(std::set<std::string>* names);') |
+ c.Append('// Determines if schema named |name| is generated.') |
+ c.Append('static bool IsGenerated(std::string name);') |
+ c.Append('// Gets the API schema named |name|.') |
+ c.Append('static base::StringPiece Get(const std::string& name);') |
c.Eblock('};'); |
c.Append() |
c.Concat(cpp_util.CloseNamespace(self._bundle._cpp_namespace)) |
@@ -239,8 +243,24 @@ class _SchemasCCGenerator(object): |
c.Concat(cpp_util.OpenNamespace(self._bundle._cpp_namespace)) |
c.Append() |
c.Append('// static') |
- c.Sblock('void GeneratedSchemas::Get(' |
- 'std::map<std::string, base::StringPiece>* schemas) {') |
+ c.Sblock('void GeneratedSchemas::GetNames(std::set<std::string>* names) {') |
+ for api in self._bundle._api_defs: |
+ namespace = self._bundle._model.namespaces[api.get('namespace')] |
+ c.Append('names->insert("%s");' % namespace.name) |
+ c.Eblock('}') |
+ c.Append() |
+ c.Append('// static') |
+ c.Sblock('bool GeneratedSchemas::IsGenerated(std::string name) {') |
+ for api in self._bundle._api_defs: |
+ namespace = self._bundle._model.namespaces[api.get('namespace')] |
+ c.Append('if (name == "%s")' % namespace.name) |
+ c.Append(' return true;') |
+ c.Append('return false;') |
+ c.Eblock('}') |
+ c.Append() |
+ c.Append('// static') |
+ c.Sblock('base::StringPiece GeneratedSchemas::Get(' |
+ 'const std::string& name) {') |
not at google - send to devlin
2013/05/20 17:19:04
This is all a bit inefficient:
1 - GetNames return
cduvall
2013/05/22 03:19:56
I made a lazily initialized map of name -> schema
|
for api in self._bundle._api_defs: |
namespace = self._bundle._model.namespaces[api.get('namespace')] |
# JSON parsing code expects lists of schemas, so dump a singleton list. |
@@ -249,7 +269,10 @@ class _SchemasCCGenerator(object): |
# Escape all double-quotes and backslashes. For this to output a valid |
# JSON C string, we need to escape \ and ". |
json_content = json_content.replace('\\', '\\\\').replace('"', '\\"') |
- c.Append('(*schemas)["%s"] = "%s";' % (namespace.name, json_content)) |
+ c.Sblock('if (name == "%s") {' % namespace.name) |
+ c.Append('return "%s";' % json_content) |
+ c.Eblock('}') |
+ c.Append('return "";'); |
c.Eblock('}') |
c.Append() |
c.Concat(cpp_util.CloseNamespace(self._bundle._cpp_namespace)) |