//* Copyright 2017 The NXT Authors //* //* Licensed under the Apache License, Version 2.0 (the "License"); //* you may not use this file except in compliance with the License. //* You may obtain a copy of the License at //* //* http://www.apache.org/licenses/LICENSE-2.0 //* //* Unless required by applicable law or agreed to in writing, software //* distributed under the License is distributed on an "AS IS" BASIS, //* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. //* See the License for the specific language governing permissions and //* limitations under the License. #include "wire/WireCmd_autogen.h" namespace nxt { namespace wire { {% for type in by_category["object"] %} {% for method in type.methods %} {% set Suffix = as_MethodSuffix(type.name, method.name) %} size_t {{Suffix}}Cmd::GetRequiredSize() const { size_t result = sizeof(*this); {% for arg in method.arguments if arg.annotation != "value" %} {% if arg.length == "strlen" %} result += {{as_varName(arg.name)}}Strlen + 1; {% elif arg.type.category == "object" %} result += {{as_varName(arg.length.name)}} * sizeof(uint32_t); {% else %} result += {{as_varName(arg.length.name)}} * sizeof({{as_cType(arg.type.name)}}); {% endif %} {% endfor %} return result; } {% for const in ["", "const"] %} {% for get_arg in method.arguments if get_arg.annotation != "value" %} {{const}} uint8_t* {{Suffix}}Cmd::GetPtr_{{as_varName(get_arg.name)}}() {{const}} { //* Start counting after the current structure {{const}} uint8_t* ptr = reinterpret_cast<{{const}} uint8_t*>(this + 1); //* Increment the pointer until we find the 'arg' then return early. //* This will mean some of the code will be unreachable but there is no //* "break" in Jinja2. {% for arg in method.arguments if arg.annotation != "value" %} {% if get_arg == arg %} return ptr; {% endif %} {% if arg.length == "strlen" %} ptr += {{as_varName(arg.name)}}Strlen + 1; {% elif arg.type.category == "object" %} ptr += {{as_varName(arg.length.name)}} * sizeof(uint32_t); {% else %} ptr += {{as_varName(arg.length.name)}} * sizeof({{as_cType(arg.type.name)}}); {% endif %} {% endfor %} } {% endfor %} {% endfor %} {% endfor %} {% set Suffix = as_MethodSuffix(type.name, Name("destroy")) %} size_t {{Suffix}}Cmd::GetRequiredSize() const { return sizeof(*this); } {% endfor %} } }