.. _manipulating-object-and-value-types: Manipulating Object and Value Types ----------------------------------- .. _inject-code: inject-code ^^^^^^^^^^^ The inject-code node inserts the given code into the generated code for the given type or function, and it is a child of the :ref:`object-type`, :ref:`value-type`, :ref:`modify-function` and :ref:`add-function` nodes. .. code-block:: xml // the code The ``class`` attribute specifies which module of the generated code that will be affected by the code injection. The ``class`` attribute accepts the following values: * native: The c++ code * target: The binding code * target-declaration: The code will be injected into the generated header file containing the c++ wrapper class definition. If the ``position`` attribute is set to *beginning* (the default), the code is inserted at the beginning of the function. If it is set to *end*, the code is inserted at the end of the function. modify-field ^^^^^^^^^^^^ The modify-field node allows you to alter the access privileges for a given C++ field when mapping it onto the target language, and it is a child of an :ref:`object-type` or a :ref:`value-type` node. .. code-block:: xml The ``name`` attribute is the name of the field, the *optional* ``write`` and ``read`` attributes specify the field's access privileges in the target language API (both are set to true by default). .. _modify-function: modify-function ^^^^^^^^^^^^^^^ The modify-function node allows you to modify a given C++ function when mapping it onto the target language, and it is a child of an :ref:`object-type` or a :ref:`value-type` node. Use the :ref:`modify-argument` node to specify which argument the modification affects. .. code-block:: xml The ``signature`` attribute is a normalized C++ signature, excluding return values but including potential const declarations. The ``remove``, ``access`` and ``rename`` attributes are *optional* attributes for added convenience; they serve the same purpose as the deprecated tags :ref:`remove`, :ref:`access` and :ref:`rename`. .. _add-function: add-function ^^^^^^^^^^^^ The add-function node allows you to add a given function onto the target language, and it is a child of an :ref:`object-type` or :ref:`value-type` nodes if the function is suposed to be a method, or :ref:`namespace` and :ref:`typesystem` if the function is suposed to be a function inside a namespace or a global function. Typically when adding a function some code must be injected to provide the function logic. This can be done using the :ref:`inject-code` node. .. code-block:: xml The ``return-type`` attribute defaults to *void*, the ``access`` to *public* and the ``static`` one to *no*. .. _conversion-rule-on-types: conversion-rule ^^^^^^^^^^^^^^^ The conversion-rule node allows you to write customized code to convert the given argument between the target language and C++, and is a child of the :ref:`value-type`, :ref:`object-type`, :ref:`primitive-type` and :ref:`container-type` nodes. The code pointed by the file attribute is very tied to the generator using APIExtractor, so it don't follow any rules, but the generator rules.. .. code-block:: xml .. note:: You can also use the conversion-rule node to specify :ref:`how the conversion of a single function argument should be done in a function `.