CXXR (C++ R)
RealVector.h
Go to the documentation of this file.
1 /*CXXR $Id: RealVector.h 1351 2013-03-08 15:12:28Z arr $
2  *CXXR
3  *CXXR This file is part of CXXR, a project to refactor the R interpreter
4  *CXXR into C++. It may consist in whole or in part of program code and
5  *CXXR documentation taken from the R project itself, incorporated into
6  *CXXR CXXR (and possibly MODIFIED) under the terms of the GNU General Public
7  *CXXR Licence.
8  *CXXR
9  *CXXR CXXR is Copyright (C) 2008-13 Andrew R. Runnalls, subject to such other
10  *CXXR copyrights and copyright restrictions as may be stated below.
11  *CXXR
12  *CXXR CXXR is not part of the R project, and bugs and other issues should
13  *CXXR not be reported via r-bugs or other R project channels; instead refer
14  *CXXR to the CXXR website.
15  *CXXR */
16 
17 /*
18  * R : A Computer Language for Statistical Data Analysis
19  * Copyright (C) 1995, 1996 Robert Gentleman and Ross Ihaka
20  * Copyright (C) 1999-2006 The R Development Core Team.
21  * Andrew Runnalls (C) 2008
22  *
23  * This program is free software; you can redistribute it and/or modify
24  * it under the terms of the GNU General Public License as published by
25  * the Free Software Foundation; either version 2.1 of the License, or
26  * (at your option) any later version.
27  *
28  * This program is distributed in the hope that it will be useful,
29  * but WITHOUT ANY WARRANTY; without even the implied warranty of
30  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
31  * GNU Lesser General Public License for more details.
32  *
33  * You should have received a copy of the GNU General Public License
34  * along with this program; if not, a copy is available at
35  * http://www.r-project.org/Licenses/
36  */
37 
42 #ifndef REALVECTOR_H
43 #define REALVECTOR_H
44 
45 #include "CXXR/VectorBase.h"
46 
47 #ifdef __cplusplus
48 
49 #include "R_ext/Arith.h"
50 #include "CXXR/FixedVector.hpp"
51 #include "CXXR/SEXP_downcast.hpp"
52 
53 namespace CXXR {
54  // Template specializations:
55  namespace ElementTraits {
56  template <>
57  struct NAFunc<double> {
58  const double& operator()() const
59  {
60  static double na = NA_REAL;
61  return na;
62  }
63  };
64 
65  template <>
66  struct IsNA<double> {
67  bool operator()(const double& t)
68  {
69  return R_IsNA(t);
70  }
71  };
72  }
73 
74  template <>
76  {
77  return "numeric";
78  }
79 
83 } // namespace CXXR
84 
85 BOOST_CLASS_EXPORT_KEY(CXXR::RealVector)
86 
87 extern "C" {
88 #endif /* __cplusplus */
89 
94 #ifndef __cplusplus
95  Rboolean Rf_isReal(SEXP s);
96 #else
97  inline Rboolean Rf_isReal(SEXP s)
98  {
99  return Rboolean(s && TYPEOF(s) == REALSXP);
100  }
101 #endif
102 
109 #ifndef __cplusplus
110 double *REAL(SEXP x);
111 #else
112 inline double *REAL(SEXP x)
113 {
114  using namespace CXXR;
115  return &(*SEXP_downcast<RealVector*>(x, false))[0];
116 }
117 #endif
118 
119 #ifdef __cplusplus
120 }
121 #endif
122 
123 #endif /* REALVECTOR_H */