.. _file_mesh_handle_competences.hxx: File competences.hxx ==================== |exhale_lsh| :ref:`Parent directory ` (``mesh_handle``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS Definition of the additional competences/functionalities that can be used for :ref:`exhale_class_classt8__mesh__handle_1_1mesh`. .. contents:: Contents :local: :backlinks: none Definition (``mesh_handle/competences.hxx``) -------------------------------------------- .. toctree:: :maxdepth: 1 program_listing_file_mesh_handle_competences.hxx.rst Detailed Description -------------------- Especially, competences to cache functionalities of elements instead of calculating them each time a function is called are provided. for developers or users that want to provide their own competence: All competences have the same inheritance pattern: We use the CRTP pattern as we may need to access members of the derived classes like :ref:`exhale_class_classt8__mesh__handle_1_1element`. The :ref:`exhale_struct_structt8__crtp__operator` is used for convenience/clear code (avoid to type a static cast explicitly each time we need functionality of TUnderlying). Especially for the competences to cache functionality, the access of members is not necessary, such that it is not obvious why we use the crtp. For competences that extend the functionality of the element, this is required. We use it for all competences for consistency and compatibility with :ref:`exhale_class_classt8__mesh__handle_1_1element`. We use :ref:`exhale_struct_structt8__crtp__operator` instead of :ref:`exhale_struct_structt8__crtp__basic` to circumvent diamond shaped inheritance pattern in the case that multiple competences are used together. The distinction of the classes is made by the second template parameter of :ref:`exhale_struct_structt8__crtp__operator`. Includes -------- - ``optional`` - ``t8.h`` (:ref:`file_src_t8.h`) - ``t8_types/t8_operators.hxx`` (:ref:`file_src_t8_types_t8_operators.hxx`) - ``t8_types/t8_vec.hxx`` (:ref:`file_src_t8_types_t8_vec.hxx`) - ``vector`` (:ref:`file_src_t8_helper_functions_t8_vector_algorithms.hxx`) Included By ----------- - :ref:`file_mesh_handle_competence_pack.hxx` Namespaces ---------- - :ref:`namespace_t8_mesh_handle` Classes ------- - :ref:`exhale_struct_structt8__mesh__handle_1_1cache__centroid` - :ref:`exhale_struct_structt8__mesh__handle_1_1cache__diameter` - :ref:`exhale_struct_structt8__mesh__handle_1_1cache__face__areas` - :ref:`exhale_struct_structt8__mesh__handle_1_1cache__face__centroids` - :ref:`exhale_struct_structt8__mesh__handle_1_1cache__face__normals` - :ref:`exhale_struct_structt8__mesh__handle_1_1cache__neighbors` - :ref:`exhale_struct_structt8__mesh__handle_1_1cache__vertex__coordinates` - :ref:`exhale_struct_structt8__mesh__handle_1_1cache__volume`