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