Home | History | Annotate | Download | only in cpp_templates
      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_H_"|format(
     12         variant_path|upper|replace("/","_")|replace(".","_")|
     13             replace("-", "_")) %}
     14 
     15 {%- macro namespace_begin() %}
     16 {%-   for namespace in namespaces_as_array %}
     17 namespace {{namespace}} {
     18 {%-   endfor %}
     19 {%-   if variant %}
     20 namespace {{variant}} {
     21 {%-   endif %}
     22 {%- endmacro %}
     23 
     24 {%- macro namespace_end() %}
     25 {%-   if variant %}
     26 }  // namespace {{variant}}
     27 {%-   endif %}
     28 {%-   for namespace in namespaces_as_array|reverse %}
     29 }  // namespace {{namespace}}
     30 {%-   endfor %}
     31 {%- endmacro %}
     32 
     33 #ifndef {{header_guard}}
     34 #define {{header_guard}}
     35 
     36 #include <stdint.h>
     37 
     38 #include <limits>
     39 #include <type_traits>
     40 #include <utility>
     41 
     42 #include "base/callback.h"
     43 #include "base/optional.h"
     44 #include "mojo/public/cpp/bindings/associated_interface_ptr.h"
     45 #include "mojo/public/cpp/bindings/associated_interface_ptr_info.h"
     46 #include "mojo/public/cpp/bindings/associated_interface_request.h"
     47 #include "mojo/public/cpp/bindings/clone_traits.h"
     48 #include "mojo/public/cpp/bindings/interface_ptr.h"
     49 #include "mojo/public/cpp/bindings/interface_request.h"
     50 #include "mojo/public/cpp/bindings/lib/equals_traits.h"
     51 #include "mojo/public/cpp/bindings/lib/control_message_handler.h"
     52 #include "mojo/public/cpp/bindings/lib/control_message_proxy.h"
     53 #include "mojo/public/cpp/bindings/lib/serialization.h"
     54 #include "mojo/public/cpp/bindings/lib/union_accessor.h"
     55 #include "mojo/public/cpp/bindings/native_struct.h"
     56 #include "mojo/public/cpp/bindings/raw_ptr_impl_ref_traits.h"
     57 #include "mojo/public/cpp/bindings/struct_ptr.h"
     58 #include "mojo/public/cpp/bindings/struct_traits.h"
     59 #include "mojo/public/cpp/bindings/thread_safe_interface_ptr.h"
     60 #include "mojo/public/cpp/bindings/union_traits.h"
     61 #include "{{module.path}}-shared.h"
     62 {%- for import in imports %}
     63 {%-   if variant %}
     64 #include "{{"%s-%s.h"|format(import.module.path, variant)}}"
     65 {%-   else %}
     66 #include "{{import.module.path}}.h"
     67 {%-   endif %}
     68 {%- endfor %}
     69 {%- if not for_blink %}
     70 #include <string>
     71 #include <vector>
     72 {%- else %}
     73 {# hash_util.h includes template specializations that should be present for
     74    every use of {Inlined}StructPtr. #}
     75 #include "mojo/public/cpp/bindings/lib/wtf_hash_util.h"
     76 #include "third_party/WebKit/Source/wtf/HashFunctions.h"
     77 #include "third_party/WebKit/Source/wtf/Optional.h"
     78 #include "third_party/WebKit/Source/wtf/text/WTFString.h"
     79 {%- endif %}
     80 
     81 {%- for header in extra_public_headers %}
     82 #include "{{header}}"
     83 {%- endfor %}
     84 
     85 {%- if export_header %}
     86 #include "{{export_header}}"
     87 {%- endif %}
     88 
     89 {#--- WTF enum hashing #}
     90 {%- from "enum_macros.tmpl" import enum_hash_blink%}
     91 {%- if for_blink %}
     92 {%-   for enum in all_enums %}
     93 {%-     if not enum|is_native_only_kind %}
     94 {{enum_hash_blink(enum)}}
     95 {%-     endif %}
     96 {%-   endfor %}
     97 {%- endif %}
     98 
     99 {{namespace_begin()}}
    100 
    101 {#--- Enums #}
    102 {%- if variant %}
    103 {%-   for enum in enums %}
    104 using {{enum.name}} = {{enum.name}};  // Alias for definition in the parent namespace.
    105 {%-   endfor %}
    106 {%- endif %}
    107 
    108 {#--- Constants #}
    109 {%- for constant in module.constants %}
    110 {{constant|format_constant_declaration}};
    111 {%- endfor %}
    112 
    113 {#--- Interface Forward Declarations -#}
    114 {%  for interface in interfaces %}
    115 class {{interface.name}};
    116 using {{interface.name}}Ptr = mojo::InterfacePtr<{{interface.name}}>;
    117 using {{interface.name}}PtrInfo = mojo::InterfacePtrInfo<{{interface.name}}>;
    118 using ThreadSafe{{interface.name}}Ptr =
    119     mojo::ThreadSafeInterfacePtr<{{interface.name}}>;
    120 using {{interface.name}}Request = mojo::InterfaceRequest<{{interface.name}}>;
    121 using {{interface.name}}AssociatedPtr =
    122     mojo::AssociatedInterfacePtr<{{interface.name}}>;
    123 using ThreadSafe{{interface.name}}AssociatedPtr =
    124     mojo::ThreadSafeAssociatedInterfacePtr<{{interface.name}}>;
    125 using {{interface.name}}AssociatedPtrInfo =
    126     mojo::AssociatedInterfacePtrInfo<{{interface.name}}>;
    127 using {{interface.name}}AssociatedRequest =
    128     mojo::AssociatedInterfaceRequest<{{interface.name}}>;
    129 {%  endfor %}
    130 
    131 {#--- Struct Forward Declarations -#}
    132 {%  for struct in structs %}
    133 {%-   if struct|is_native_only_kind %}
    134 using {{struct.name}} = mojo::NativeStruct;
    135 using {{struct.name}}Ptr = mojo::NativeStructPtr;
    136 {%-   else %}
    137 class {{struct.name}};
    138 {%-     if struct|should_inline %}
    139 using {{struct.name}}Ptr = mojo::InlinedStructPtr<{{struct.name}}>;
    140 {%-     else %}
    141 using {{struct.name}}Ptr = mojo::StructPtr<{{struct.name}}>;
    142 {%-     endif %}
    143 {%-   endif %}
    144 {%  endfor %}
    145 
    146 {#--- Union Forward Declarations -#}
    147 {%  for union in unions %}
    148 class {{union.name}};
    149 {%    if union|should_inline_union %}
    150 typedef mojo::InlinedStructPtr<{{union.name}}> {{union.name}}Ptr;
    151 {%    else %}
    152 typedef mojo::StructPtr<{{union.name}}> {{union.name}}Ptr;
    153 {%    endif %}
    154 {%- endfor %}
    155 
    156 {#--- Interfaces -#}
    157 {%  for interface in interfaces %}
    158 {%    include "interface_declaration.tmpl" %}
    159 {%- endfor %}
    160 
    161 {#--- Interface Proxies -#}
    162 {%  for interface in interfaces %}
    163 {%    include "interface_proxy_declaration.tmpl" %}
    164 {%- endfor %}
    165 
    166 {#--- Interface Stubs -#}
    167 {%  for interface in interfaces %}
    168 {%    include "interface_stub_declaration.tmpl" %}
    169 {%- endfor %}
    170 
    171 {#--- Interface Request Validators -#}
    172 {%  for interface in interfaces %}
    173 {%    include "interface_request_validator_declaration.tmpl" %}
    174 {%- endfor %}
    175 
    176 {#--- Interface Response Validators -#}
    177 {%  for interface in interfaces if interface|has_callbacks %}
    178 {%    include "interface_response_validator_declaration.tmpl" %}
    179 {%- endfor %}
    180 
    181 {#--- NOTE: Unions and non-inlined structs may have pointers to inlined structs,
    182       so we need to fully define inlined structs ahead of the others. #}
    183 
    184 {#--- Inlined structs #}
    185 {%  for struct in structs %}
    186 {%    if struct|should_inline and not struct|is_native_only_kind %}
    187 {%      include "wrapper_class_declaration.tmpl" %}
    188 {%    endif %}
    189 {%- endfor %}
    190 
    191 {#--- Unions must be declared before non-inlined structs because they can be
    192       members of structs. #}
    193 {#--- Unions #}
    194 {%  for union in unions %}
    195 {%    include "wrapper_union_class_declaration.tmpl" %}
    196 {%- endfor %}
    197 
    198 {#--- Non-inlined structs #}
    199 {%  for struct in structs %}
    200 {%    if not struct|should_inline and not struct|is_native_only_kind %}
    201 {%      include "wrapper_class_declaration.tmpl" %}
    202 {%    endif %}
    203 {%- endfor %}
    204 
    205 {%- for union in unions %}
    206 {%    include "wrapper_union_class_template_definition.tmpl" %}
    207 {%- endfor %}
    208 
    209 {%- for struct in structs %}
    210 {%-   if not struct|is_native_only_kind %}
    211 {%      include "wrapper_class_template_definition.tmpl" %}
    212 {%-   endif %}
    213 {%- endfor %}
    214 
    215 {{namespace_end()}}
    216 
    217 namespace mojo {
    218 
    219 {#--- Struct Serialization Helpers -#}
    220 {%  for struct in structs %}
    221 {%-   if not struct|is_native_only_kind %}
    222 {%      include "struct_traits_declaration.tmpl" %}
    223 {%-   endif %}
    224 {%- endfor %}
    225 
    226 {#--- Union Serialization Helpers -#}
    227 {%  if unions %}
    228 {%-   for union in unions %}
    229 {%      include "union_traits_declaration.tmpl" %}
    230 {%-   endfor %}
    231 {%- endif %}
    232 
    233 }  // namespace mojo
    234 
    235 #endif  // {{header_guard}}
    236