/* * Copyright 2019 by its authors. See 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. */ #ifndef _EINA_TYPE_TRAITS_HH #define _EINA_TYPE_TRAITS_HH #include #include #include /** * @addtogroup Eina_Cxx_Data_Types_Group * * @{ */ namespace efl { namespace eina { /** * @internal * * @{ */ using std::enable_if; using std::is_integral; using std::is_pod; using std::is_const; using std::remove_cv; using std::true_type; using std::false_type; using std::remove_pointer; using std::remove_reference; template struct indirect_is_contiguous_iterator : false_type {}; template <> struct indirect_is_contiguous_iterator::iterator> : std::true_type {}; template <> struct indirect_is_contiguous_iterator::const_iterator> : std::true_type {}; template struct is_contiguous_iterator : indirect_is_contiguous_iterator {}; template <> struct is_contiguous_iterator : true_type {}; template <> struct is_contiguous_iterator : true_type {}; template struct if_c { typedef T type; }; template struct if_c { typedef F type; }; template struct if_ : if_c { }; template struct container_value_type { typedef typename std::conditional< std::is_void::value , std::add_pointer, std::remove_reference>::type::type type; }; template struct nonconst_container_value_type { typedef typename std::conditional< std::is_void::value , std::add_pointer, std::remove_cv::type>>::type::type type; }; /** * @} */ } } /** * @} */ #endif