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_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