CXXR (C++ R) API
S4Object.h
Go to the documentation of this file.
1 /*CXXR $Id: S4Object.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  *
22  * This program is free software; you can redistribute it and/or modify
23  * it under the terms of the GNU General Public License as published by
24  * the Free Software Foundation; either version 2.1 of the License, or
25  * (at your option) any later version.
26  *
27  * This program is distributed in the hope that it will be useful,
28  * but WITHOUT ANY WARRANTY; without even the implied warranty of
29  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30  * GNU Lesser General Public License for more details.
31  *
32  * You should have received a copy of the GNU General Public License
33  * along with this program; if not, a copy is available at
34  * http://www.r-project.org/Licenses/
35  */
36 
44 #ifndef S4OBJECT_H
45 #define S4OBJECT_H
46 
47 #include "CXXR/RObject.h"
48 
49 #ifdef __cplusplus
50 
51 #include <boost/serialization/access.hpp>
52 #include <boost/serialization/base_object.hpp>
53 #include <boost/serialization/nvp.hpp>
54 
55 #include "CXXR/SEXP_downcast.hpp"
56 
57 namespace CXXR {
67  class S4Object : public RObject {
68  public:
72  : RObject(S4SXP)
73  {
74  setS4Object(true);
75  }
76 
81  S4Object(const S4Object& pattern)
82  : RObject(pattern)
83  {}
84 
89  static const char* staticTypeName()
90  {
91  return "S4";
92  }
93 
94  // Virtual functions of RObject:
95  S4Object* clone() const;
96  const char* typeName() const;
97  private:
98  friend class boost::serialization::access;
99 
100  // Declared private to ensure that S4Objects are allocated
101  // only using 'new':
102  ~S4Object() {}
103 
104  // Not implemented. Declared to prevent compiler-generated version:
105  S4Object& operator=(const S4Object&);
106 
107  template<class Archive>
108  void serialize(Archive & ar, const unsigned int version) {
109  ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(RObject);
110  }
111  };
112 } // namespace CXXR
113 
114 BOOST_CLASS_EXPORT_KEY(CXXR::S4Object)
115 
116 extern "C" {
117 #endif /* __cplusplus */
118 
124 
125 #ifdef __cplusplus
126 }
127 #endif
128 
129 #endif /* S4OBJECT_H */