1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 {%- if variant -%} 6 {%- set variant_path = "%s-%s"|format(module.path, variant) -%} 7 {%- else -%} 8 {%- set variant_path = module.path -%} 9 {%- endif -%} 10 11 {%- set header_guard = "%s_INTERNAL_H_"|format( 12 variant_path|upper|replace("/","_")|replace(".","_")| 13 replace("-", "_")) %} 14 15 #ifndef {{header_guard}} 16 #define {{header_guard}} 17 18 #include "mojo/public/cpp/bindings/lib/bindings_internal.h" 19 #include "mojo/public/cpp/bindings/lib/buffer.h" 20 #include "mojo/public/cpp/bindings/lib/serialization.h" 21 #include "mojo/public/cpp/bindings/lib/union_accessor.h" 22 #include "mojo/public/cpp/bindings/struct_ptr.h" 23 24 {%- for import in imports %} 25 {%- if variant %} 26 #include "{{"%s-%s-internal.h"|format(import.module.path, variant)}}" 27 {%- else %} 28 #include "{{import.module.path}}-internal.h" 29 {%- endif %} 30 {%- endfor %} 31 32 namespace mojo { 33 namespace internal { 34 class ValidationContext; 35 } 36 } 37 38 {%- for namespace in namespaces_as_array %} 39 namespace {{namespace}} { 40 {%- endfor %} 41 {%- if variant %} 42 namespace {{variant}} { 43 {%- endif %} 44 45 {#--- Wrapper forward declarations #} 46 {% for struct in structs %} 47 {%- if struct|is_native_only_kind %} 48 using {{struct.name}} = mojo::NativeStruct; 49 {%- else %} 50 class {{struct.name}}; 51 {%- endif %} 52 {%- endfor %} 53 54 {#--- Wrapper forward declarations for unions #} 55 {% for union in unions %} 56 class {{union.name}}; 57 {%- endfor %} 58 59 namespace internal { 60 61 {#--- Internal forward declarations #} 62 {% for struct in structs %} 63 {%- if struct|is_native_only_kind %} 64 using {{struct.name}}_Data = mojo::internal::NativeStruct_Data; 65 {%- else %} 66 class {{struct.name}}_Data; 67 {%- endif %} 68 {%- endfor %} 69 70 {% for union in unions %} 71 class {{union.name}}_Data; 72 {%- endfor %} 73 74 {#--- Enums #} 75 {% from "enum_macros.tmpl" import enum_data_decl -%} 76 {%- for enum in enums %} 77 {%- if enum|is_native_only_kind %} 78 using {{enum.name}}_Data = mojo::internal::NativeEnum_Data; 79 {%- else %} 80 {{enum_data_decl(enum)}} 81 {%- endif %} 82 {%- endfor %} 83 84 #pragma pack(push, 1) 85 86 {#--- Unions must be declared first because they can be members of structs #} 87 {#--- Union class declarations #} 88 {% for union in unions %} 89 {% include "union_declaration.tmpl" %} 90 {%- endfor %} 91 92 {#--- Struct class declarations #} 93 {% for struct in structs %} 94 {%- if not struct|is_native_only_kind %} 95 {% include "struct_declaration.tmpl" %} 96 {%- endif %} 97 {%- endfor %} 98 99 {#--- Interface class declarations. They are needed only when they contain 100 enums. #} 101 {%- for interface in interfaces %} 102 {%- if interface.enums %} 103 class {{interface.name}}_Data { 104 public: 105 {%- for enum in interface.enums %} 106 {%- if enum|is_native_only_kind %} 107 using {{enum.name}}_Data = mojo::internal::NativeEnum_Data; 108 {%- else %} 109 {{enum_data_decl(enum)|indent(2)}} 110 {%- endif %} 111 {%- endfor %} 112 }; 113 {%- endif %} 114 {%- endfor %} 115 116 #pragma pack(pop) 117 118 } // namespace internal 119 {%- if variant %} 120 } // namespace {{variant}} 121 {%- endif %} 122 {%- for namespace in namespaces_as_array|reverse %} 123 } // namespace {{namespace}} 124 {%- endfor %} 125 126 #endif // {{header_guard}} 127