Rcpp Version 0.12.12
one_type.h
Go to the documentation of this file.
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>
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 
T op(false_type) const
Definition: one_type.h:64
Rcomplex op(true_type) const
Definition: one_type.h:57
T op(false_type) const
Definition: one_type.h:44
Rcpp API.
Definition: algo.h:28
Rcomplex op(true_type) const
Definition: one_type.h:37