Skip to content

Commit 3c89b5b

Browse files
committed
Further cleanup
1 parent 68c9ddf commit 3c89b5b

File tree

5 files changed

+82
-162
lines changed

5 files changed

+82
-162
lines changed

inst/include/Rcpp/String.h

+3-13
Original file line numberDiff line numberDiff line change
@@ -734,24 +734,14 @@ namespace Rcpp {
734734

735735
} // Rcpp
736736

737-
/** hash can be in std or std::tr1 */
738-
#if defined(RCPP_USING_CXX11) || defined(HAS_TR1)
739-
namespace std
740-
{
741-
#ifndef RCPP_USING_CXX11
742-
namespace tr1 {
743-
#endif
737+
/** hash via std */
738+
namespace std {
744739
template <>
745-
struct hash<Rcpp::String>
746-
{
740+
struct hash<Rcpp::String> {
747741
size_t operator()(const Rcpp::String & s) const{
748742
return hash<string>()(s.get_cstring());
749743
}
750744
};
751-
#ifndef RCPP_USING_CXX11
752-
}
753-
#endif
754745
}
755-
#endif
756746

757747
#endif

inst/include/Rcpp/platform/compiler.h

+46-58
Original file line numberDiff line numberDiff line change
@@ -76,86 +76,74 @@
7676
#define HAS_STATIC_ASSERT
7777
#endif
7878

79-
// Check C++0x headers (TODO remove when no longer needed below)
79+
// C++11 features -- that used to be carefully tested for or worked around via CXX0X / TR1
8080
#include <cmath>
81-
#if defined(__INTEL_COMPILER) || (defined(__GNUC__) && !defined(__clang__))
82-
#define HAS_CXX0X_UNORDERED_MAP
83-
#define HAS_CXX0X_UNORDERED_SET
84-
#define HAS_CXX0X_INITIALIZER_LIST
85-
#elif defined(__clang__)
86-
#if __has_include(<unordered_map>)
87-
#define HAS_CXX0X_UNORDERED_MAP
88-
#endif
89-
#if __has_include(<unordered_set>)
90-
#define HAS_CXX0X_UNORDERED_SET
91-
#endif
92-
#if __has_include(<initializer_list>)
93-
#define HAS_CXX0X_INITIALIZER_LIST
94-
#endif
95-
#endif
96-
97-
// Check TR1 Headers (TODO remove when no longer needed below)
98-
#if defined(__INTEL_COMPILER) || (defined(__GNUC__) && !defined(__clang__))
99-
#define HAS_TR1_UNORDERED_MAP
100-
#define HAS_TR1_UNORDERED_SET
101-
#elif defined(__clang__)
102-
#if __has_include(<tr1/unordered_map>)
103-
#define HAS_TR1_UNORDERED_MAP
104-
#endif
105-
#if __has_include(<tr1/unordered_set>)
106-
#define HAS_TR1_UNORDERED_SET
107-
#endif
108-
#endif
81+
#define HAS_CXX0X_UNORDERED_MAP
82+
#define HAS_CXX0X_UNORDERED_SET
83+
#define HAS_CXX0X_INITIALIZER_LIST
84+
85+
// // Check TR1 Headers (TODO remove when no longer needed below)
86+
// #if defined(__INTEL_COMPILER) || (defined(__GNUC__) && !defined(__clang__))
87+
// #define HAS_TR1_UNORDERED_MAP
88+
// #define HAS_TR1_UNORDERED_SET
89+
// #elif defined(__clang__)
90+
// #if __has_include(<tr1/unordered_map>)
91+
// #define HAS_TR1_UNORDERED_MAP
92+
// #endif
93+
// #if __has_include(<tr1/unordered_set>)
94+
// #define HAS_TR1_UNORDERED_SET
95+
// #endif
96+
// #endif
10997

110-
#if defined(HAS_TR1_UNORDERED_MAP) && defined(HAS_TR1_UNORDERED_SET)
111-
#define HAS_TR1
112-
#endif
98+
// #if defined(HAS_TR1_UNORDERED_MAP) && defined(HAS_TR1_UNORDERED_SET)
99+
// #define HAS_TR1
100+
// #endif
113101

114102
// Conditionally include headers
115103
// #ifdef HAS_CXX0X_INITIALIZER_LIST
116104
#include <initializer_list>
117105
// #endif
118106

119-
// TODO: Simplify further: First case should work generally
120-
#ifdef RCPP_USING_CXX11
121-
#if defined(HAS_CXX0X_UNORDERED_MAP)
107+
// // TODO: Simplify further: First case should work generally
108+
// #ifdef RCPP_USING_CXX11
109+
// #if defined(HAS_CXX0X_UNORDERED_MAP)
122110
#include <unordered_map>
123111
#define RCPP_USING_UNORDERED_MAP
124112
#define RCPP_UNORDERED_MAP std::unordered_map
125113
// #else
126114
// #include <map>
127115
// #define RCPP_USING_MAP
128116
// #define RCPP_UNORDERED_MAP std::map
129-
#endif
130-
#if defined(HAS_CXX0X_UNORDERED_SET)
117+
// #endif
118+
// #if defined(HAS_CXX0X_UNORDERED_SET)
131119
#include <unordered_set>
132120
#define RCPP_USING_UNORDERED_SET
133121
#define RCPP_UNORDERED_SET std::unordered_set
134122
// #else
135123
// #include <set>
136124
// #define RCPP_USING_SET
137125
// #define RCPP_UNORDERED_SET std::set
138-
#endif
139-
#else
140-
#if defined(HAS_TR1_UNORDERED_MAP)
141-
#include <tr1/unordered_map>
142-
#define RCPP_USING_TR1_UNORDERED_MAP
143-
#define RCPP_UNORDERED_MAP std::tr1::unordered_map
144-
// #else
145-
// #include <map>
146-
// #define RCPP_USING_MAP
147-
// #define RCPP_UNORDERED_MAP std::map
148-
#endif
149-
#if defined(HAS_TR1_UNORDERED_SET)
150-
#include <tr1/unordered_set>
151-
#define RCPP_USING_TR1_UNORDERED_SET
152-
#define RCPP_UNORDERED_SET std::tr1::unordered_set
153-
// #else
154-
// #include <set>
155-
// #define RCPP_USING_SET
156-
// #define RCPP_UNORDERED_SET std::set
157-
#endif
158-
#endif
126+
// #endif
127+
// #else
128+
// #if defined(HAS_TR1_UNORDERED_MAP)
129+
// #include <tr1/unordered_map>
130+
// #define RCPP_USING_TR1_UNORDERED_MAP
131+
// #define RCPP_UNORDERED_MAP std::tr1::unordered_map
132+
// // #else
133+
// // #include <map>
134+
// // #define RCPP_USING_MAP
135+
// // #define RCPP_UNORDERED_MAP std::map
136+
// #endif
137+
// #if defined(HAS_TR1_UNORDERED_SET)
138+
// #include <tr1/unordered_set>
139+
// #define RCPP_USING_TR1_UNORDERED_SET
140+
// #define RCPP_UNORDERED_SET std::tr1::unordered_set
141+
// // #else
142+
// // #include <set>
143+
// // #define RCPP_USING_SET
144+
// // #define RCPP_UNORDERED_SET std::set
145+
// #endif
146+
// #endif
159147

160148
#ifdef __GNUC__
161149
#define RCPP_HAS_DEMANGLING

inst/include/Rcpp/sugar/sets.h

+11-36
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*-
2-
//
31
// sets.h: Rcpp R/C++ interface class library --
42
//
5-
// Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois
3+
// Copyright (C) 2012 - 2025 Dirk Eddelbuettel and Romain Francois
64
//
75
// This file is part of Rcpp.
86
//
@@ -22,40 +20,17 @@
2220
#ifndef Rcpp__sugar__sets_h
2321
#define Rcpp__sugar__sets_h
2422

25-
#if __cplusplus >= 201103L
26-
#define RCPP_UNORDERED_SET std::unordered_set
27-
#define RCPP_UNORDERED_MAP std::unordered_map
28-
29-
namespace std {
30-
template<>
31-
struct hash<Rcpp::String> {
32-
std::size_t operator()(const Rcpp::String& key) const {
33-
return pointer_hasher( key.get_sexp() ) ;
34-
}
35-
hash<SEXP> pointer_hasher ;
36-
};
37-
}
38-
39-
#elif defined(HAS_TR1_UNORDERED_SET)
40-
#define RCPP_UNORDERED_SET std::tr1::unordered_set
41-
#define RCPP_UNORDERED_MAP std::tr1::unordered_map
23+
#define RCPP_UNORDERED_SET std::unordered_set
24+
#define RCPP_UNORDERED_MAP std::unordered_map
4225

43-
namespace std {
44-
namespace tr1 {
45-
template<>
46-
struct hash<Rcpp::String> {
47-
std::size_t operator()(const Rcpp::String& key) const {
48-
return pointer_hasher( key.get_sexp() ) ;
49-
}
50-
hash<SEXP> pointer_hasher ;
51-
};
26+
namespace std {
27+
template<>
28+
struct hash<Rcpp::String> {
29+
std::size_t operator()(const Rcpp::String& key) const {
30+
return pointer_hasher( key.get_sexp() ) ;
5231
}
53-
}
54-
55-
56-
#else
57-
#define RCPP_UNORDERED_SET std::set
58-
#define RCPP_UNORDERED_MAP std::map
59-
#endif
32+
hash<SEXP> pointer_hasher ;
33+
};
34+
}
6035

6136
#endif

man/evalCpp.Rd

+12-11
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,16 @@
55
Evaluate a C++ Expression
66
}
77
\description{
8-
Evaluates a C++ expression. This creates a C++ function using
9-
\code{\link{cppFunction}} and calls it to get the result.
8+
Evaluates a C++ expression. This creates a C++ function using
9+
\code{\link{cppFunction}} and calls it to get the result.
1010
}
1111
\usage{
12-
evalCpp(code, depends = character(), plugins = character(), includes = character(),
12+
evalCpp(code, depends = character(), plugins = character(), includes = character(),
1313
rebuild = FALSE, cacheDir = getOption("rcpp.cache.dir", tempdir()),
1414
showOutput = verbose, verbose = getOption("verbose"))
1515

16-
areMacrosDefined(names, depends = character(), includes = character(),
17-
rebuild = FALSE, showOutput = verbose,
16+
areMacrosDefined(names, depends = character(), includes = character(),
17+
rebuild = FALSE, showOutput = verbose,
1818
verbose = getOption("verbose"))
1919
}
2020
\arguments{
@@ -47,21 +47,22 @@ see \code{\link{cppFunction}}
4747
}
4848
}
4949
\note{
50-
The result type of the C++ expression must be compatible with \code{Rcpp::wrap}.
50+
The result type of the C++ expression must be compatible with \code{Rcpp::wrap}.
5151
}
5252
\value{
53-
The result of the evaluated C++ expression.
53+
The result of the evaluated C++ expression.
5454
}
5555
\seealso{
5656
\code{\link{sourceCpp}}, \code{\link{cppFunction}}
5757
}
5858
\examples{
5959
\dontrun{
6060

61-
evalCpp( "__cplusplus" )
62-
evalCpp( "std::numeric_limits<double>::max()" )
63-
64-
areMacrosDefined( c("__cplusplus", "HAS_TR1" ) )
61+
evalCpp("__cplusplus")
62+
evalCpp("std::numeric_limits<double>::max()")
63+
64+
# areMacrosDefined is no longer exported by accessible via ':::'
65+
Rcpp:::areMacrosDefined(c("__cplusplus", "GCC_VERSION"))
6566

6667
}
6768
}

src/api.cpp

+10-44
Original file line numberDiff line numberDiff line change
@@ -171,64 +171,30 @@ SEXP as_character_externalptr(SEXP xp) {
171171
SEXP rcpp_capabilities() {
172172
Shield<SEXP> cap(Rf_allocVector(LGLSXP, 13));
173173
Shield<SEXP> names(Rf_allocVector(STRSXP, 13));
174-
#ifdef HAS_VARIADIC_TEMPLATES
175-
LOGICAL(cap)[0] = TRUE;
176-
#else
177-
LOGICAL(cap)[0] = FALSE;
178-
#endif
179-
#ifdef HAS_CXX0X_INITIALIZER_LIST
180-
LOGICAL(cap)[1] = TRUE;
181-
#else
182-
LOGICAL(cap)[1] = FALSE;
183-
#endif
184-
/* exceptions are always supported */
185-
LOGICAL(cap)[2] = TRUE;
186-
187-
#ifdef HAS_TR1_UNORDERED_MAP
188-
LOGICAL(cap)[3] = TRUE;
189-
#else
190-
LOGICAL(cap)[3] = FALSE;
191-
#endif
192-
193-
#ifdef HAS_TR1_UNORDERED_SET
194-
LOGICAL(cap)[4] = TRUE;
195-
#else
196-
LOGICAL(cap)[4] = FALSE;
197-
#endif
198-
199-
LOGICAL(cap)[5] = TRUE;
174+
LOGICAL(cap)[0] = TRUE; // HAS_VARIADIC_TEMPLATES
175+
LOGICAL(cap)[1] = TRUE; // HAS_CXX0X_INITIALIZER_LIST
176+
LOGICAL(cap)[2] = TRUE; /* exceptions are always supported */
177+
LOGICAL(cap)[3] = TRUE; // HAS_TR1_UNORDERED_MAP
178+
LOGICAL(cap)[4] = TRUE; // HAS_TR1_UNORDERED_SET
179+
LOGICAL(cap)[5] = TRUE; // Modules (TODO respect header choice ?)
200180

201181
#ifdef RCPP_HAS_DEMANGLING
202182
LOGICAL(cap)[6] = TRUE;
203183
#else
204184
LOGICAL(cap)[6] = FALSE;
205185
#endif
206186

207-
LOGICAL(cap)[7] = FALSE;
187+
LOGICAL(cap)[7] = FALSE; // Classic API
208188

209189
#ifdef RCPP_HAS_LONG_LONG_TYPES
210190
LOGICAL(cap)[8] = TRUE;
211191
#else
212192
LOGICAL(cap)[8] = FALSE;
213193
#endif
214194

215-
#ifdef HAS_CXX0X_UNORDERED_MAP
216-
LOGICAL(cap)[9] = TRUE;
217-
#else
218-
LOGICAL(cap)[9] = FALSE;
219-
#endif
220-
221-
#ifdef HAS_CXX0X_UNORDERED_SET
222-
LOGICAL(cap)[10] = TRUE;
223-
#else
224-
LOGICAL(cap)[10] = FALSE;
225-
#endif
226-
227-
#ifdef RCPP_USING_CXX11
228-
LOGICAL(cap)[11] = TRUE;
229-
#else
230-
LOGICAL(cap)[11] = FALSE;
231-
#endif
195+
LOGICAL(cap)[9] = TRUE; // HAS_CXX0X_UNORDERED_MAP
196+
LOGICAL(cap)[10] = TRUE; // HAS_CXX0X_UNORDERED_SET
197+
LOGICAL(cap)[11] = TRUE; // RCPP_USING_CXX11
232198

233199
#ifdef RCPP_NEW_DATE_DATETIME_VECTORS
234200
LOGICAL(cap)[12] = TRUE;

0 commit comments

Comments
 (0)