16b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry#ifndef _DEMETA_HPP 26b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry#define _DEMETA_HPP 36b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry/*------------------------------------------------------------------------- 46b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry * drawElements C++ Base Library 56b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry * ----------------------------- 66b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry * 76b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry * Copyright 2015 The Android Open Source Project 86b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry * 96b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry * Licensed under the Apache License, Version 2.0 (the "License"); 106b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry * you may not use this file except in compliance with the License. 116b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry * You may obtain a copy of the License at 126b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry * 136b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry * http://www.apache.org/licenses/LICENSE-2.0 146b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry * 156b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry * Unless required by applicable law or agreed to in writing, software 166b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry * distributed under the License is distributed on an "AS IS" BASIS, 176b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 186b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry * See the License for the specific language governing permissions and 196b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry * limitations under the License. 206b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry * 216b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry *//*! 226b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry * \file 236b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry * \brief Metaprogramming tools 246b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry *//*--------------------------------------------------------------------*/ 256b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry 266b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry#include "deDefs.hpp" 276b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry 286b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyrynamespace de 296b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry{ 306b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyrynamespace meta 316b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry{ 326b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry 336b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyrytemplate <typename T, bool Cond> 346b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyrystruct EnableIf { }; 356b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry 366b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyrytemplate <typename T> 376b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyrystruct EnableIf<T, true> 386b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry{ 396b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry typedef T Type; 406b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry}; 416b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry 426b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyrytemplate <bool Cond> 436b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyrystruct Not 446b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry{ 456b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry enum 466b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry { 476b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry Value = !Cond 486b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry }; 496b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry}; 506b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry 513ce9e3645bf21c58bc08f6d09cd6890f0f33afbaJarkko Pöyrytemplate <typename A, typename B> 523ce9e3645bf21c58bc08f6d09cd6890f0f33afbaJarkko Pöyrystruct TypesSame 533ce9e3645bf21c58bc08f6d09cd6890f0f33afbaJarkko Pöyry{ 543ce9e3645bf21c58bc08f6d09cd6890f0f33afbaJarkko Pöyry enum 553ce9e3645bf21c58bc08f6d09cd6890f0f33afbaJarkko Pöyry { 563ce9e3645bf21c58bc08f6d09cd6890f0f33afbaJarkko Pöyry Value = false 573ce9e3645bf21c58bc08f6d09cd6890f0f33afbaJarkko Pöyry }; 583ce9e3645bf21c58bc08f6d09cd6890f0f33afbaJarkko Pöyry}; 593ce9e3645bf21c58bc08f6d09cd6890f0f33afbaJarkko Pöyry 603ce9e3645bf21c58bc08f6d09cd6890f0f33afbaJarkko Pöyrytemplate <typename A> 613ce9e3645bf21c58bc08f6d09cd6890f0f33afbaJarkko Pöyrystruct TypesSame<A, A> 623ce9e3645bf21c58bc08f6d09cd6890f0f33afbaJarkko Pöyry{ 633ce9e3645bf21c58bc08f6d09cd6890f0f33afbaJarkko Pöyry enum 643ce9e3645bf21c58bc08f6d09cd6890f0f33afbaJarkko Pöyry { 653ce9e3645bf21c58bc08f6d09cd6890f0f33afbaJarkko Pöyry Value = true 663ce9e3645bf21c58bc08f6d09cd6890f0f33afbaJarkko Pöyry }; 673ce9e3645bf21c58bc08f6d09cd6890f0f33afbaJarkko Pöyry}; 683ce9e3645bf21c58bc08f6d09cd6890f0f33afbaJarkko Pöyry 696b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry} // meta 706b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry} // de 716b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry 726b66fa81a4085f9d660393fc8c43653fb7f14990Jarkko Pöyry#endif // _DEMETA_HPP 73