VirtualBox

source: vbox/trunk/include/iprt/cpp/meta.h@ 104212

Last change on this file since 104212 was 98103, checked in by vboxsync, 23 months ago

Copyright year updates by scm.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.7 KB
Line 
1/** @file
2 * IPRT - C++ Meta programming.
3 */
4
5/*
6 * Copyright (C) 2011-2023 Oracle and/or its affiliates.
7 *
8 * This file is part of VirtualBox base platform packages, as
9 * available from https://www.virtualbox.org.
10 *
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation, in version 3 of the
14 * License.
15 *
16 * This program is distributed in the hope that it will be useful, but
17 * WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, see <https://www.gnu.org/licenses>.
23 *
24 * The contents of this file may alternatively be used under the terms
25 * of the Common Development and Distribution License Version 1.0
26 * (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
27 * in the VirtualBox distribution, in which case the provisions of the
28 * CDDL are applicable instead of those of the GPL.
29 *
30 * You may elect to license modified versions of this file under the
31 * terms and conditions of either the GPL or the CDDL or both.
32 *
33 * SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
34 */
35
36#ifndef IPRT_INCLUDED_cpp_meta_h
37#define IPRT_INCLUDED_cpp_meta_h
38#ifndef RT_WITHOUT_PRAGMA_ONCE
39# pragma once
40#endif
41
42#include <iprt/types.h>
43
44/** @defgroup grp_rt_cpp_meta C++ Meta programming utilities
45 * @ingroup grp_rt_cpp
46 * @{
47 */
48
49/**
50 * Check for a condition on compile time and dependent of the result TrueResult
51 * or FalseResult will be defined.
52 *
53 * @param Condition Condition to check.
54 * @param TrueResult Result when condition is true.
55 * @param FalseResult Result when condition is false
56 */
57template <bool Condition, typename TrueResult, typename FalseResult>
58struct RTCIf;
59
60/**
61 * Check for a condition on compile time and dependent of the result TrueResult
62 * or FalseResult will be defined.
63 *
64 * True specialization of RTCIf.
65 *
66 * @param TrueResult Result when condition is true.
67 * @param FalseResult Result when condition is false
68 */
69template <typename TrueResult, typename FalseResult>
70struct RTCIf<true, TrueResult, FalseResult>
71{
72 typedef TrueResult result;
73};
74
75/**
76 * Check for a condition on compile time and dependent of the result TrueResult
77 * or FalseResult will be defined.
78 *
79 * False specialization of RTCIf.
80 *
81 * @param TrueResult Result when condition is true.
82 * @param FalseResult Result when condition is false
83 */
84template <typename TrueResult, typename FalseResult>
85struct RTCIf<false, TrueResult, FalseResult>
86{
87 typedef FalseResult result;
88};
89
90/**
91 * Check if @a T is a pointer or not at compile time and dependent of the
92 * result TrueResult or FalseResult will be defined.
93 *
94 * False version of RTCIfPtr.
95 *
96 * @param Condition Condition to check.
97 * @param TrueResult Result when condition is true.
98 * @param FalseResult Result when condition is false
99 */
100template <class T, typename TrueResult, typename FalseResult>
101struct RTCIfPtr
102{
103 typedef FalseResult result;
104};
105
106/**
107 * Check if @a T is a pointer or not at compile time and dependent of the
108 * result TrueResult or FalseResult will be defined.
109 *
110 * True specialization of RTCIfPtr.
111 *
112 * @param Condition Condition to check.
113 * @param TrueResult Result when condition is true.
114 * @param FalseResult Result when condition is false
115 */
116template <class T, typename TrueResult, typename FalseResult>
117struct RTCIfPtr<T*, TrueResult, FalseResult>
118{
119 typedef TrueResult result;
120};
121
122/** @} */
123
124#endif /* !IPRT_INCLUDED_cpp_meta_h */
125
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette