.. _concepts: ========== Concepts ========== The |project| architecture and associated libraries and tools support a number of different use-cases related to enabling interoperation (w.r.t. :term:`data type` s and serialization :term:`mechanism` s) of systems. The following sections briefly explain these use-cases. Bridging ======== TODO Code Generation =============== An important use-case of the |project| toolchain consists in generating code to be used by given system components to enable interoperation (w.r.t. data types and serialization mechanisms) with other system. More concretely, the |project| system contains a compiler component which reads data type definitions (specified in some `IDL`_), has knowledge regarding serialization mechanisms and generates code in several programming languages for components to use. For example, a C++ component which uses `Google Protocol Buffers`_ data types to communicate with other components could be enabled to interoperate with a `ROS`_-based system by generating code with the following characteristics: programming language C++ :term:`data holder` s Look like generated by the protocol buffer compiler. serialization Supports the ROS serialization :term:`mechanism` Mapping ------- As a special case of the code-generation use-case, the generated code can implement mapping between different :term:`data type` s and/or serializatin :term:`mechanism` s. In the context of the |project| project, a :term:`mapping` connects a :term:`data holder` and a :term:`wire-schema`.