WvStreams
Main Page
Modules
Classes
Files
File List
File Members
include
xplc
delete.h
Go to the documentation of this file.
1
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2
*
3
* XPLC - Cross-Platform Lightweight Components
4
* Copyright (C) 2004, Net Integration Technologies, Inc.
5
*
6
* This library is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Lesser General Public License
8
* as published by the Free Software Foundation; either version 2.1 of
9
* the License, or (at your option) any later version.
10
*
11
* This library is distributed in the hope that it will be useful, but
12
* WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* Lesser General Public License for more details.
15
*
16
* You should have received a copy of the GNU Lesser General Public
17
* License along with this library; if not, write to the Free Software
18
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
19
* USA
20
*
21
* As a special exception, you may use this file as part of a free
22
* software library without restriction. Specifically, if other files
23
* instantiate templates or use macros or inline functions from this
24
* file, or you compile this file and link it with other files to
25
* produce an executable, this file does not by itself cause the
26
* resulting executable to be covered by the GNU Lesser General Public
27
* License. This exception does not however invalidate any other
28
* reasons why the executable file might be covered by the GNU Lesser
29
* General Public License.
30
*/
31
32
#ifndef __XPLC_DELETE_H__
33
#define __XPLC_DELETE_H__
34
35
#if defined(__GNUC__) && __GNUC__ > 3
36
# pragma GCC system_header
37
#endif
38
46
#include <new>
47
#include <memory>
48
49
#ifdef __XPLC_IOBJECT_H__
50
#error "<xplc/delete.h> has to be included before <xplc/IObject.h>."
51
#endif
52
53
#include <
xplc/IObject.h
>
54
59
60
class
CheckIObject
{};
61
class
CheckIObjectOk
{};
63
class
CheckIObjectOkVector
{};
64
65
template
<
class
T>
66
class
ConversionIObject
67
{
68
public
:
70
typedef
char
Yes;
72
struct
No
{
char
dummy[2]; };
73
static
T* from;
74
static
Yes test(
const
IObject
*);
75
static
No
test(...);
77
};
78
79
template
<
bool
>
80
struct
XPLC_CTAssert;
81
template
<>
83
struct
XPLC_CTAssert<true> {};
84
85
template
<
class
T>
86
inline
void
operator&&(
CheckIObject
,
const
T* obj) {
87
static_cast<
void
>
(
sizeof
(XPLC_CTAssert<(sizeof(ConversionIObject<T>::test(
ConversionIObject<T>::from
)) !=
sizeof
(
typename
ConversionIObject<T>::Yes))>));
88
delete
obj;
89
}
90
91
template
<
class
T>
92
inline
void
operator&&(
CheckIObjectOk
,
const
T* obj) {
93
delete
obj;
94
}
95
96
template
<
class
T>
97
inline
void
operator&&(
CheckIObjectOkVector
,
const
T* obj) {
98
delete
[] obj;
99
}
100
101
106
#undef xplcdelete
107
114
#define xplcdelete CheckIObjectOk() &&
115
122
#define delete CheckIObject() &&
123
129
#define deletev CheckIObjectOkVector() &&
130
131
#endif
/* __XPLC_DELETE_H__ */
Generated on Thu Jul 12 2012 23:23:55 for WvStreams by
1.8.1.1