1 // -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*-
2 //
3 // one_type.h: Rcpp R/C++ interface class library -- traits functions for eye, ones, zeros
4 //
5 // Copyright (C) 2016 Nathan Russell
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__traits__one_type__h
23 #define Rcpp__traits__one_type__h
24 
25 namespace Rcpp {
26 namespace traits {
27 
28 template <bool>
29 struct allowed_matrix_type;
30 
31 template <>
32 struct allowed_matrix_type<true> {};
33 
34 template <typename T>
35 class one_type {
36 private:
37     Rcomplex op(true_type) const {
38         Rcomplex res;
39         res.i = 0.0;
40         res.r = 1.0;
41         return res;
42     }
43 
44     T op(false_type) const {
45         return static_cast<T>(1);
46     }
47 
48 public:
49     operator T() const {
50         return op(typename same_type<T, Rcomplex>::type());
51     }
52 };
53 
54 template <typename T>
55 class zero_type {
56 private:
57     Rcomplex op(true_type) const {
58         Rcomplex res;
59         res.i = 0.0;
60         res.r = 0.0;
61         return res;
62     }
63 
64     T op(false_type) const {
65         return static_cast<T>(0);
66     }
67 
68 public:
69     operator T() const {
70         return op(typename same_type<T, Rcomplex>::type());
71     }
72 };
73 
74 } // traits
75 } // Rcpp
76 
77 #endif // Rcpp__traits__one_type__h
78 
79