home
about
news
download
doc
source
systems
tests
bugs
contact
IMP Reference Guide
develop.d97d4ead1f,2024/11/21
The Integrative Modeling Platform
IMP Manual
Reference Guide
Tutorial Index
Modules
Classes
Examples
include
IMP
version 20241121.develop.d97d4ead1f
swap_macros.h
Go to the documentation of this file.
1
/**
2
* \file IMP/swap_macros.h
3
* \brief Macros to help with swapping two objects.
4
*
5
* Copyright 2007-2022 IMP Inventors. All rights reserved.
6
*
7
*/
8
9
#ifndef IMPKERNEL_SWAP_MACROS_H
10
#define IMPKERNEL_SWAP_MACROS_H
11
#include <IMP/kernel_config.h>
12
13
#if !defined(SWIG)
14
/** \name Swap helpers
15
16
Use the swap_with member function to swap two objects. The two
17
objects must be of the same type (Name) and define
18
the method \c swap_with(). The number suffix is the number of template
19
arguments, all of which must be of class type.
20
@{
21
*/
22
#define IMP_SWAP(Name) \
23
inline void swap(Name& a, Name& b) { a.swap_with(b); } \
24
IMP_REQUIRE_SEMICOLON_NAMESPACE
25
26
#define IMP_SWAP_1(Name) \
27
template <class A> \
28
inline void swap(Name<A>& a, Name<A>& b) { \
29
a.swap_with(b); \
30
} \
31
IMP_REQUIRE_SEMICOLON_NAMESPACE
32
33
#define IMP_SWAP_2(Name) \
34
template <class A, class B> \
35
inline void swap(Name<A, B>& a, Name<A, B>& b) { \
36
a.swap_with(b); \
37
} \
38
IMP_REQUIRE_SEMICOLON_NAMESPACE
39
40
#define IMP_SWAP_3(Name) \
41
template <class A, class B, class C> \
42
inline void swap(Name<A, B, C>& a, Name<A, B, C>& b) { \
43
a.swap_with(b); \
44
} \
45
IMP_REQUIRE_SEMICOLON_NAMESPACE
46
47
/** @} */
48
#else
49
#define IMP_SWAP(Name)
50
51
#define IMP_SWAP_1(Name)
52
53
#define IMP_SWAP_2(Name)
54
55
#define IMP_SWAP_3(Name)
56
#endif
57
58
//! Swap two member variables assuming the other object is called o
59
/** Swap the member \c var_name of the two objects (this and o).
60
*/
61
#define IMP_SWAP_MEMBER(var_name) swap(var_name, o.var_name)
62
63
#endif
/* IMPKERNEL_SWAP_MACROS_H */