Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(328)

Unified Diff: tools/json_schema_compiler/cpp_util.py

Issue 9309044: Supporting more APIs with json_schema_compiler (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: support for choices Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/json_schema_compiler/cpp_util.py
diff --git a/tools/json_schema_compiler/cpp_util.py b/tools/json_schema_compiler/cpp_util.py
index 760f01da194fc19d30ea2090075a7524f22643d8..38e4bed7723c5db4ebe6461011ce24397b75aba7 100644
--- a/tools/json_schema_compiler/cpp_util.py
+++ b/tools/json_schema_compiler/cpp_util.py
@@ -17,8 +17,7 @@ GENERATED_FILE_MESSAGE = """// GENERATED FROM THE API DEFINITION IN
// DO NOT EDIT.
"""
-
-def CppName(s):
+def Classname(s):
"""Translates a namespace name or function name into something more
suited to C++.
@@ -30,7 +29,11 @@ def CppName(s):
def CreateFundamentalValue(prop, var):
"""Returns the C++ code for creating a value of the given property type
using the given variable.
+
+ var: Fundamental or Fundamental*
"""
+ if prop.optional:
+ var = '*' + var
return {
PropertyType.STRING: 'Value::CreateStringValue(%s)',
PropertyType.BOOLEAN: 'Value::CreateBooleanValue(%s)',
@@ -38,14 +41,64 @@ def CreateFundamentalValue(prop, var):
PropertyType.DOUBLE: 'Value::CreateDoubleValue(%s)',
}[prop.type_] % var
+def GetAsFundamentalValue(prop, src, dst):
+ """Returns the C++ code for retrieving a fundamental type from a
+ Value into a variable.
-def GetFundamentalValue(prop, var):
- """Returns the C++ code for retrieving a fundamental type from a Value
- into a variable.
+ src: Value*
+ dst: Property*
"""
return {
- PropertyType.STRING: 'GetAsString(%s)',
- PropertyType.BOOLEAN: 'GetAsBoolean(%s)',
- PropertyType.INTEGER: 'GetAsInteger(%s)',
- PropertyType.DOUBLE: 'GetAsDouble(%s)',
- }[prop.type_] % var
+ PropertyType.STRING: '%s->GetAsString(%s)',
+ PropertyType.BOOLEAN: '%s->GetAsBoolean(%s)',
+ PropertyType.INTEGER: '%s->GetAsInteger(%s)',
+ PropertyType.DOUBLE: '%s->GetAsDouble(%s)',
+ }[prop.type_] % (src, dst)
+
+def GetFundamentalValue(prop, src, name, dst):
+ """Returns the C++ code for retrieving a fundamental type from a
+ DictionaryValue into a variable.
+
+ src: DictionaryValue*
+ name: key
+ dst: Property*
+ """
+ return {
+ PropertyType.STRING: '%s->GetString("%s", %s)',
+ PropertyType.BOOLEAN: '%s->GetBoolean("%s", %s)',
+ PropertyType.INTEGER: '%s->GetInteger("%s", %s)',
+ PropertyType.DOUBLE: '%s->GetDouble("%s", %s)',
+ }[prop.type_] % (src, name, dst)
+
+def CreateValueFromSingleProperty(prop, var):
+ """Creates a Value given a single property. Use for everything except
+ PropertyType.ARRAY.
+
+ var: raw value
+ """
+ if prop.type_ == PropertyType.REF or prop.type_ == PropertyType.OBJECT:
+ if prop.optional:
+ return '%s->ToValue()' % var
+ else:
+ return '%s.ToValue()' % var
+ elif prop.type_.is_fundamental:
+ return CreateFundamentalValue(prop, var)
+ else:
+ raise NotImplementedError('Conversion of single %s to Value not implemented'
+ % repr(prop.type_))
+
+def GetValueFromList(prop, src, index, dst):
+ """Returns the C++ code for retrieving a fundamental type from a
+ DictionaryValue into a variable.
+
+ src: ListValue&
+ index: int
+ dst: Property*
+ """
+ return {
+ PropertyType.REF: '%s.GetDictionary(%d, %s)',
+ PropertyType.STRING: '%s.GetString(%d, %s)',
+ PropertyType.BOOLEAN: '%s.GetBoolean(%d, %s)',
+ PropertyType.INTEGER: '%s.GetInteger(%d, %s)',
+ PropertyType.DOUBLE: '%s.GetDouble(%d, %s)',
+ }[prop.type_] % (src, index, dst)

Powered by Google App Engine
This is Rietveld 408576698