Rcpp Version 1.0.14
Loading...
Searching...
No Matches
unique.h
Go to the documentation of this file.
1// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*-
2//
3// unique.h: Rcpp R/C++ interface class library -- unique
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__unique_h
23#define Rcpp__sugar__unique_h
24
25namespace Rcpp{
26namespace sugar{
27
28template <typename HASH>
29class InSet {
30 typedef typename HASH::STORAGE STORAGE ;
31
32public:
33 InSet( const HASH& hash_ ) : hash(hash_){}
34
35 inline int operator()(STORAGE value){
36 return hash.contains(value) ;
37 }
38
39private:
40 const HASH& hash ;
41} ;
42
43template <int RTYPE, typename TABLE_T>
44class In {
48
49public:
50 In( const TABLE_T& table) : vec(table), hash(vec){
51 hash.fill() ;
52 }
53
54 template <typename T>
55 LogicalVector get( const T& x) const {
56 return LogicalVector( x.begin(), x.end(), InSet<HASH>(hash) ) ;
57 }
58
59} ;
60
61
62} // sugar
63
64template <int RTYPE, bool NA, typename T>
66 Vector<RTYPE> vec(t) ;
67 sugar::IndexHash<RTYPE> hash(vec) ;
68 hash.fill() ;
69 return hash.keys() ;
70}
71template <int RTYPE, bool NA, typename T>
74}
75
76template <int RTYPE, bool NA, typename T, bool RHS_NA, typename RHS_T>
81
82
83} // Rcpp
84#endif
85
VECTOR & get_ref()
Definition VectorBase.h:37
Vector & sort(bool decreasing=false)
Definition Vector.h:401
HASH::STORAGE STORAGE
Definition unique.h:30
const HASH & hash
Definition unique.h:40
int operator()(STORAGE value)
Definition unique.h:35
InSet(const HASH &hash_)
Definition unique.h:33
Vector< RTYPE > vec
Definition unique.h:45
In(const TABLE_T &table)
Definition unique.h:50
sugar::IndexHash< RTYPE > HASH
Definition unique.h:46
LogicalVector get(const T &x) const
Definition unique.h:55
IndexHash & fill()
Definition IndexHash.h:73
Vector< RTYPE > keys() const
Definition IndexHash.h:110
Rcpp API.
Definition algo.h:28
LogicalVector in(const VectorBase< RTYPE, NA, T > &x, const VectorBase< RTYPE, RHS_NA, RHS_T > &table)
Definition unique.h:77
Vector< LGLSXP > LogicalVector
T as(SEXP x)
Definition as.h:151
IntegerVector table(const VectorBase< RTYPE, NA, T > &x)
Definition table.h:126
Vector< RTYPE > unique(const VectorBase< RTYPE, NA, T > &t)
Definition unique.h:65
Vector< RTYPE > sort_unique(const VectorBase< RTYPE, NA, T > &t, bool decreasing=false)
Definition unique.h:72