Rcpp Version 1.0.14
Loading...
Searching...
No Matches
sets.h
Go to the documentation of this file.
1// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*-
2//
3// sets.h: Rcpp R/C++ interface class library --
4//
5// Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois
6//
7// This file is part of Rcpp.
8//
9// Rcpp is free software: you can redistribute it and/or modify it
10// under the terms of the GNU General Public License as published by
11// the Free Software Foundation, either version 2 of the License, or
12// (at your option) any later version.
13//
14// Rcpp is distributed in the hope that it will be useful, but
15// WITHOUT ANY WARRANTY; without even the implied warranty of
16// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17// GNU General Public License for more details.
18//
19// You should have received a copy of the GNU General Public License
20// along with Rcpp. If not, see <http://www.gnu.org/licenses/>.
21
22#ifndef Rcpp__sugar__sets_h
23#define Rcpp__sugar__sets_h
24
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
42
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 };
52 }
53 }
54
55
56#else
57 #define RCPP_UNORDERED_SET std::set
58 #define RCPP_UNORDERED_MAP std::map
59#endif
60
61#endif
SEXP get_sexp() const
Definition String.h:557
Rcpp API.
Definition algo.h:28
Definition swap.h:25