Index: mojo/public/tools/bindings/generators/mojom_cpp_generator.py |
diff --git a/mojo/public/tools/bindings/generators/mojom_cpp_generator.py b/mojo/public/tools/bindings/generators/mojom_cpp_generator.py |
index e5f5e9de9dff0059181dedfbf5699552aa2461e0..fc02a013558722186cb173976dcaad37ac371ae9 100644 |
--- a/mojo/public/tools/bindings/generators/mojom_cpp_generator.py |
+++ b/mojo/public/tools/bindings/generators/mojom_cpp_generator.py |
@@ -72,6 +72,9 @@ def GetCppType(kind): |
return "%s_Data*" % GetNameForKind(kind, internal=True) |
if mojom.IsAnyArrayKind(kind): |
return "mojo::internal::Array_Data<%s>*" % GetCppType(kind.kind) |
+ if mojom.IsMapKind(kind): |
+ return ("mojo::internal::Map_Data<%s, %s>*" % |
+ (GetCppType(kind.key_kind), GetCppType(kind.value_kind))) |
if mojom.IsInterfaceKind(kind) or mojom.IsInterfaceRequestKind(kind): |
return "mojo::MessagePipeHandle" |
if mojom.IsEnumKind(kind): |
@@ -92,6 +95,9 @@ def GetCppArrayArgWrapperType(kind): |
return "%sPtr" % GetNameForKind(kind) |
if mojom.IsAnyArrayKind(kind): |
return "mojo::Array<%s> " % GetCppArrayArgWrapperType(kind.kind) |
+ if mojom.IsMapKind(kind): |
+ return "mojo::Map<%s, %s> " % (GetCppArrayArgWrapperType(kind.key_kind), |
+ GetCppArrayArgWrapperType(kind.value_kind)) |
if mojom.IsInterfaceKind(kind): |
raise Exception("Arrays of interfaces not yet supported!") |
if mojom.IsInterfaceRequestKind(kind): |
@@ -117,6 +123,9 @@ def GetCppResultWrapperType(kind): |
return "%sPtr" % GetNameForKind(kind) |
if mojom.IsAnyArrayKind(kind): |
return "mojo::Array<%s>" % GetCppArrayArgWrapperType(kind.kind) |
+ if mojom.IsMapKind(kind): |
+ return "mojo::Map<%s, %s>" % (GetCppArrayArgWrapperType(kind.key_kind), |
+ GetCppArrayArgWrapperType(kind.value_kind)) |
if mojom.IsInterfaceKind(kind): |
return "%sPtr" % GetNameForKind(kind) |
if mojom.IsInterfaceRequestKind(kind): |
@@ -142,6 +151,9 @@ def GetCppWrapperType(kind): |
return "%sPtr" % GetNameForKind(kind) |
if mojom.IsAnyArrayKind(kind): |
return "mojo::Array<%s>" % GetCppArrayArgWrapperType(kind.kind) |
+ if mojom.IsMapKind(kind): |
+ return "mojo::Map<%s, %s>" % (GetCppArrayArgWrapperType(kind.key_kind), |
+ GetCppArrayArgWrapperType(kind.value_kind)) |
if mojom.IsInterfaceKind(kind): |
return "%sPtr" % GetNameForKind(kind) |
if mojom.IsInterfaceRequestKind(kind): |
@@ -165,6 +177,9 @@ def GetCppConstWrapperType(kind): |
return "%sPtr" % GetNameForKind(kind) |
if mojom.IsAnyArrayKind(kind): |
return "mojo::Array<%s>" % GetCppArrayArgWrapperType(kind.kind) |
+ if mojom.IsMapKind(kind): |
+ return "mojo::Map<%s, %s>" % (GetCppArrayArgWrapperType(kind.key_kind), |
+ GetCppArrayArgWrapperType(kind.value_kind)) |
if mojom.IsInterfaceKind(kind): |
return "%sPtr" % GetNameForKind(kind) |
if mojom.IsInterfaceRequestKind(kind): |
@@ -268,6 +283,14 @@ def GetArrayValidateParams(kind): |
'true' if element_is_nullable else 'false', |
element_validate_params) |
+def GetMapValidateParams(kind): |
+ # Unlike GetArrayValidateParams, we are given the wrapped kind, instead of |
+ # the raw array kind. So we wrap the return value of GetArrayValidateParams. |
+ element_is_nullable = mojom.IsNullableKind(kind) |
+ return "mojo::internal::ArrayValidateParams<0, %s,\n%s> " % ( |
+ 'true' if element_is_nullable else 'false', |
+ GetArrayValidateParams(kind)) |
+ |
_HEADER_SIZE = 8 |
class Generator(generator.Generator): |
@@ -284,6 +307,7 @@ class Generator(generator.Generator): |
"expected_array_size": generator.ExpectedArraySize, |
"expression_to_text": ExpressionToText, |
"get_array_validate_params": GetArrayValidateParams, |
+ "get_map_validate_params": GetMapValidateParams, |
"get_name_for_kind": GetNameForKind, |
"get_pad": pack.GetPad, |
"has_callbacks": mojom.HasCallbacks, |
@@ -294,6 +318,7 @@ class Generator(generator.Generator): |
"is_any_handle_kind": mojom.IsAnyHandleKind, |
"is_interface_kind": mojom.IsInterfaceKind, |
"is_interface_request_kind": mojom.IsInterfaceRequestKind, |
+ "is_map_kind": mojom.IsMapKind, |
"is_nullable_kind": mojom.IsNullableKind, |
"is_object_kind": mojom.IsObjectKind, |
"is_string_kind": mojom.IsStringKind, |