/usr/lib/R/site-library/dplyr/include/dplyr/Order.h is in r-cran-dplyr 0.7.4-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | #ifndef dplyr_Order_H
#define dplyr_Order_H
#include <tools/pointer_vector.h>
#include <dplyr/OrderVisitorImpl.h>
namespace dplyr {
class OrderVisitors_Compare;
class OrderVisitors {
public:
OrderVisitors(List args, LogicalVector ascending, int n_) :
visitors(n_), n(n_), nrows(0) {
nrows = Rf_length(args[0]);
for (int i = 0; i < n; i++) {
visitors[i] = order_visitor(args[i], ascending[i], i);
}
}
OrderVisitors(DataFrame data) :
visitors(data.size()), n(data.size()), nrows(data.nrows())
{
for (int i = 0; i < n; i++)
visitors[i] = order_visitor(data[i], true, i);
}
Rcpp::IntegerVector apply() const;
pointer_vector<OrderVisitor> visitors;
int n;
int nrows;
};
class OrderVisitors_Compare {
public:
OrderVisitors_Compare(const OrderVisitors& obj_) : obj(obj_), n(obj.n) {}
inline bool operator()(int i, int j) const {
if (i == j) return false;
for (int k = 0; k < n; k++)
if (! obj.visitors[k]->equal(i, j))
return obj.visitors[k]->before(i, j);
return i < j;
}
private:
const OrderVisitors& obj;
int n;
};
template <typename OrderVisitorClass>
class Compare_Single_OrderVisitor {
public:
Compare_Single_OrderVisitor(const OrderVisitorClass& obj_) : obj(obj_) {}
inline bool operator()(int i, int j) const {
if (i == j) return false;
if (obj.equal(i, j)) return i < j;
return obj.before(i, j);
}
private:
const OrderVisitorClass& obj;
};
inline Rcpp::IntegerVector OrderVisitors::apply() const {
if (nrows == 0) return IntegerVector(0);
IntegerVector x = seq(0, nrows - 1);
std::sort(x.begin(), x.end(), OrderVisitors_Compare(*this));
return x;
}
} // namespace dplyr
#endif
|