meta.h revision a3bbbe5c597341d9b6041560b790596ee41c2cfa
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync/** @file
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync * IPRT - C++ Meta programming.
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync */
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync/*
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync * Copyright (C) 2011 Oracle Corporation
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync *
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync * available from http://www.virtualbox.org. This file is free software;
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync * you can redistribute it and/or modify it under the terms of the GNU
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync * General Public License (GPL) as published by the Free Software
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync *
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync * The contents of this file may alternatively be used under the terms
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync * of the Common Development and Distribution License Version 1.0
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync * VirtualBox OSE distribution, in which case the provisions of the
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync * CDDL are applicable instead of those of the GPL.
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync *
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync * You may elect to license modified versions of this file under the
b6013430932520fe58eba109db1dfce66a7cad88vboxsync * terms and conditions of either the GPL or the CDDL or both.
b6013430932520fe58eba109db1dfce66a7cad88vboxsync */
b6013430932520fe58eba109db1dfce66a7cad88vboxsync
b6013430932520fe58eba109db1dfce66a7cad88vboxsync#ifndef ___iprt_cpp_meta_h
b6013430932520fe58eba109db1dfce66a7cad88vboxsync#define ___iprt_cpp_meta_h
b6013430932520fe58eba109db1dfce66a7cad88vboxsync
b6013430932520fe58eba109db1dfce66a7cad88vboxsyncnamespace iprt
1bb6533bfb0d3d111161e0fb45b04b5e8f2c7c85vboxsync{
b6013430932520fe58eba109db1dfce66a7cad88vboxsync
b6013430932520fe58eba109db1dfce66a7cad88vboxsync/** @defgroup grp_rt_cpp_meta C++ Meta programming utilities
b6013430932520fe58eba109db1dfce66a7cad88vboxsync * @ingroup grp_rt_cpp
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync * @{
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync */
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync/**
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync * Check for a condition on compile time and dependent of the result TrueResult
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync * or FalseResult will be defined.
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync *
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync * @param Condition Condition to check.
b6013430932520fe58eba109db1dfce66a7cad88vboxsync * @param TrueResult Result when condition is true.
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync * @param FalseResult Result when condition is false
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync */
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsynctemplate <bool Condition, typename TrueResult, typename FalseResult>
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsyncstruct if_;
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync/**
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync * True specialization of if_.
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync *
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync * @param TrueResult Result when condition is true.
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync * @param FalseResult Result when condition is false
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync */
b6013430932520fe58eba109db1dfce66a7cad88vboxsynctemplate <typename TrueResult, typename FalseResult>
b6013430932520fe58eba109db1dfce66a7cad88vboxsyncstruct if_<true, TrueResult, FalseResult>
b6013430932520fe58eba109db1dfce66a7cad88vboxsync{
b6013430932520fe58eba109db1dfce66a7cad88vboxsync typedef TrueResult result;
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync};
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync/**
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync * False specialization of if_.
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync *
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync * @param TrueResult Result when condition is true.
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync * @param FalseResult Result when condition is false
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync */
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsynctemplate <typename TrueResult, typename FalseResult>
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsyncstruct if_<false, TrueResult, FalseResult>
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync{
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync typedef FalseResult result;
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync};
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync/** @} */
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync
2e3ce94efec87c786a0c87a6f7739faccb3a7e66vboxsync} /* namespace iprt */
b6013430932520fe58eba109db1dfce66a7cad88vboxsync
b6013430932520fe58eba109db1dfce66a7cad88vboxsync#endif /* !___iprt_cpp_meta_h */
b6013430932520fe58eba109db1dfce66a7cad88vboxsync
b6013430932520fe58eba109db1dfce66a7cad88vboxsync