Skip to content

Commit e006552

Browse files
committed
Reformat, add note, fix header
1 parent 85250ec commit e006552

File tree

1 file changed

+179
-180
lines changed

1 file changed

+179
-180
lines changed

inst/include/Rcpp/api/meat/proxy.h

Lines changed: 179 additions & 180 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*-
22
//
3-
// meat.h: Rcpp R/C++ interface class library --
3+
// proxy.h: Rcpp R/C++ interface class library -- proxy meat
44
//
55
// Copyright (C) 2014 Dirk Eddelbuettel, Romain Francois, and Kevin Ushey
66
//
@@ -21,187 +21,186 @@
2121
#ifndef RCPP_API_MEAT_PROXY_H
2222
#define RCPP_API_MEAT_PROXY_H
2323

24+
// NOTE: Implementing this as 'meat' is necessary as it allows user-defined
25+
// classes writing their own overloads of 'wrap', 'as' to function correctly!
2426
namespace Rcpp {
2527

26-
// Attribute Proxies
27-
template <typename CLASS>
28-
template <typename T>
29-
typename AttributeProxyPolicy<CLASS>::AttributeProxy&
30-
AttributeProxyPolicy<CLASS>::AttributeProxy::operator=(const T& rhs) {
31-
set( wrap(rhs) );
32-
return *this;
33-
}
34-
35-
template <typename CLASS>
36-
template <typename T>
37-
AttributeProxyPolicy<CLASS>::AttributeProxy::operator T() const {
38-
return as<T>(get());
39-
}
40-
41-
template <typename CLASS>
42-
AttributeProxyPolicy<CLASS>::AttributeProxy::operator SEXP() const {
43-
return get();
44-
}
45-
46-
template <typename CLASS>
47-
template <typename T>
48-
AttributeProxyPolicy<CLASS>::const_AttributeProxy::operator T() const {
49-
return as<T>(get());
50-
}
51-
52-
template <typename CLASS>
53-
AttributeProxyPolicy<CLASS>::const_AttributeProxy::operator SEXP() const {
54-
return get();
55-
}
56-
57-
// Names proxy
58-
59-
template <typename CLASS>
60-
template <typename T>
61-
typename NamesProxyPolicy<CLASS>::NamesProxy&
62-
NamesProxyPolicy<CLASS>::NamesProxy::operator=(const T& rhs) {
63-
set( wrap(rhs) );
64-
return *this;
65-
}
66-
67-
template <typename CLASS>
68-
template <typename T>
69-
NamesProxyPolicy<CLASS>::NamesProxy::operator T() const {
70-
return as<T>( get() );
71-
}
72-
73-
template <typename CLASS>
74-
template <typename T>
75-
NamesProxyPolicy<CLASS>::const_NamesProxy::operator T() const {
76-
return as<T>( get() );
77-
}
78-
79-
// Slot proxy
80-
81-
template <typename CLASS>
82-
template <typename T>
83-
typename SlotProxyPolicy<CLASS>::SlotProxy&
84-
SlotProxyPolicy<CLASS>::SlotProxy::operator=(const T& rhs) {
85-
set(wrap(rhs));
86-
return *this;
87-
}
88-
89-
template <typename CLASS>
90-
template <typename T>
91-
SlotProxyPolicy<CLASS>::SlotProxy::operator T() const {
92-
return as<T>(get());
93-
}
94-
95-
// Tag proxy
96-
97-
template <typename CLASS>
98-
template <typename T>
99-
typename TagProxyPolicy<CLASS>::TagProxy&
100-
TagProxyPolicy<CLASS>::TagProxy::operator=(const T& rhs) {
101-
set( wrap(rhs) );
102-
return *this;
103-
}
104-
105-
template <typename CLASS>
106-
template <typename T>
107-
TagProxyPolicy<CLASS>::TagProxy::operator T() const {
108-
return as<T>(get());
109-
}
110-
111-
template <typename CLASS>
112-
TagProxyPolicy<CLASS>::TagProxy::operator SEXP() const {
113-
return get();
114-
}
115-
116-
template <typename CLASS>
117-
template <typename T>
118-
TagProxyPolicy<CLASS>::const_TagProxy::operator T() const {
119-
return as<T>(get());
120-
}
121-
122-
template <typename CLASS>
123-
TagProxyPolicy<CLASS>::const_TagProxy::operator SEXP() const {
124-
return get();
125-
}
126-
127-
// Environment Binding
128-
template <typename CLASS>
129-
template <typename T>
130-
typename BindingPolicy<CLASS>::Binding&
131-
BindingPolicy<CLASS>::Binding::operator=(const T& rhs) {
132-
set(wrap(rhs));
133-
return *this;
134-
}
135-
136-
template <typename CLASS>
137-
template <typename T>
138-
BindingPolicy<CLASS>::Binding::operator T() const {
139-
return as<T>(get());
140-
}
141-
142-
template <typename CLASS>
143-
template <typename T>
144-
BindingPolicy<CLASS>::const_Binding::operator T() const {
145-
return as<T>(get());
146-
}
147-
148-
// Dotted pair proxies
149-
template <typename CLASS>
150-
template <typename T>
151-
typename DottedPairProxyPolicy<CLASS>::DottedPairProxy&
152-
DottedPairProxyPolicy<CLASS>::DottedPairProxy::operator=(const T& rhs) {
153-
set(wrap(rhs));
154-
return *this;
155-
}
156-
157-
template <typename CLASS>
158-
template <typename T>
159-
typename DottedPairProxyPolicy<CLASS>::DottedPairProxy&
160-
DottedPairProxyPolicy<CLASS>::DottedPairProxy::operator=(const traits::named_object<T>& rhs) {
161-
return set(wrap(rhs.object), rhs.name);
162-
}
163-
164-
template <typename CLASS>
165-
template <typename T>
166-
DottedPairProxyPolicy<CLASS>::DottedPairProxy::operator T() const {
167-
return as<T>(get());
168-
}
169-
170-
template <typename CLASS>
171-
template <typename T>
172-
DottedPairProxyPolicy<CLASS>::const_DottedPairProxy::operator T() const {
173-
return as<T>(get());
174-
}
175-
176-
// Field proxies
177-
template <typename CLASS>
178-
typename FieldProxyPolicy<CLASS>::FieldProxy&
179-
FieldProxyPolicy<CLASS>::FieldProxy::operator=(const FieldProxyPolicy<CLASS>::FieldProxy& rhs) {
180-
if (this != &rhs) set(rhs.get());
181-
return *this;
182-
}
183-
184-
template <typename CLASS>
185-
template <typename T>
186-
typename FieldProxyPolicy<CLASS>::FieldProxy&
187-
FieldProxyPolicy<CLASS>::FieldProxy::operator=(const T& rhs) {
188-
SEXP tmp = PROTECT(wrap(rhs));
189-
set(tmp);
190-
UNPROTECT(1);
191-
return *this;
192-
}
193-
194-
template <typename CLASS>
195-
template <typename T>
196-
FieldProxyPolicy<CLASS>::FieldProxy::operator T() const {
197-
return as<T>(get());
198-
}
199-
200-
template <typename CLASS>
201-
template <typename T>
202-
FieldProxyPolicy<CLASS>::const_FieldProxy::operator T() const {
203-
return as<T>(get());
204-
}
28+
// AttributeProxy
29+
template <typename CLASS>
30+
template <typename T>
31+
typename AttributeProxyPolicy<CLASS>::AttributeProxy&
32+
AttributeProxyPolicy<CLASS>::AttributeProxy::operator=(const T& rhs) {
33+
set( wrap(rhs) );
34+
return *this;
35+
}
36+
37+
template <typename CLASS>
38+
template <typename T>
39+
AttributeProxyPolicy<CLASS>::AttributeProxy::operator T() const {
40+
return as<T>(get());
41+
}
42+
43+
template <typename CLASS>
44+
AttributeProxyPolicy<CLASS>::AttributeProxy::operator SEXP() const {
45+
return get();
46+
}
47+
48+
template <typename CLASS>
49+
template <typename T>
50+
AttributeProxyPolicy<CLASS>::const_AttributeProxy::operator T() const {
51+
return as<T>(get());
52+
}
53+
54+
template <typename CLASS>
55+
AttributeProxyPolicy<CLASS>::const_AttributeProxy::operator SEXP() const {
56+
return get();
57+
}
58+
59+
// NamesProxy
60+
template <typename CLASS>
61+
template <typename T>
62+
typename NamesProxyPolicy<CLASS>::NamesProxy&
63+
NamesProxyPolicy<CLASS>::NamesProxy::operator=(const T& rhs) {
64+
set( wrap(rhs) );
65+
return *this;
66+
}
67+
68+
template <typename CLASS>
69+
template <typename T>
70+
NamesProxyPolicy<CLASS>::NamesProxy::operator T() const {
71+
return as<T>( get() );
72+
}
73+
74+
template <typename CLASS>
75+
template <typename T>
76+
NamesProxyPolicy<CLASS>::const_NamesProxy::operator T() const {
77+
return as<T>( get() );
78+
}
79+
80+
// SlotProxy
81+
template <typename CLASS>
82+
template <typename T>
83+
typename SlotProxyPolicy<CLASS>::SlotProxy&
84+
SlotProxyPolicy<CLASS>::SlotProxy::operator=(const T& rhs) {
85+
set(wrap(rhs));
86+
return *this;
87+
}
88+
89+
template <typename CLASS>
90+
template <typename T>
91+
SlotProxyPolicy<CLASS>::SlotProxy::operator T() const {
92+
return as<T>(get());
93+
}
94+
95+
// TagProxy
96+
template <typename CLASS>
97+
template <typename T>
98+
typename TagProxyPolicy<CLASS>::TagProxy&
99+
TagProxyPolicy<CLASS>::TagProxy::operator=(const T& rhs) {
100+
set( wrap(rhs) );
101+
return *this;
102+
}
103+
104+
template <typename CLASS>
105+
template <typename T>
106+
TagProxyPolicy<CLASS>::TagProxy::operator T() const {
107+
return as<T>(get());
108+
}
109+
110+
template <typename CLASS>
111+
TagProxyPolicy<CLASS>::TagProxy::operator SEXP() const {
112+
return get();
113+
}
114+
115+
template <typename CLASS>
116+
template <typename T>
117+
TagProxyPolicy<CLASS>::const_TagProxy::operator T() const {
118+
return as<T>(get());
119+
}
120+
121+
template <typename CLASS>
122+
TagProxyPolicy<CLASS>::const_TagProxy::operator SEXP() const {
123+
return get();
124+
}
125+
126+
// Binding
127+
template <typename CLASS>
128+
template <typename T>
129+
typename BindingPolicy<CLASS>::Binding&
130+
BindingPolicy<CLASS>::Binding::operator=(const T& rhs) {
131+
set(wrap(rhs));
132+
return *this;
133+
}
134+
135+
template <typename CLASS>
136+
template <typename T>
137+
BindingPolicy<CLASS>::Binding::operator T() const {
138+
return as<T>(get());
139+
}
140+
141+
template <typename CLASS>
142+
template <typename T>
143+
BindingPolicy<CLASS>::const_Binding::operator T() const {
144+
return as<T>(get());
145+
}
146+
147+
// DottedPairProxy
148+
template <typename CLASS>
149+
template <typename T>
150+
typename DottedPairProxyPolicy<CLASS>::DottedPairProxy&
151+
DottedPairProxyPolicy<CLASS>::DottedPairProxy::operator=(const T& rhs) {
152+
set(wrap(rhs));
153+
return *this;
154+
}
155+
156+
template <typename CLASS>
157+
template <typename T>
158+
typename DottedPairProxyPolicy<CLASS>::DottedPairProxy&
159+
DottedPairProxyPolicy<CLASS>::DottedPairProxy::operator=(const traits::named_object<T>& rhs) {
160+
return set(wrap(rhs.object), rhs.name);
161+
}
162+
163+
template <typename CLASS>
164+
template <typename T>
165+
DottedPairProxyPolicy<CLASS>::DottedPairProxy::operator T() const {
166+
return as<T>(get());
167+
}
168+
169+
template <typename CLASS>
170+
template <typename T>
171+
DottedPairProxyPolicy<CLASS>::const_DottedPairProxy::operator T() const {
172+
return as<T>(get());
173+
}
174+
175+
// FieldProxy
176+
template <typename CLASS>
177+
typename FieldProxyPolicy<CLASS>::FieldProxy&
178+
FieldProxyPolicy<CLASS>::FieldProxy::operator=(const FieldProxyPolicy<CLASS>::FieldProxy& rhs) {
179+
if (this != &rhs) set(rhs.get());
180+
return *this;
181+
}
182+
183+
template <typename CLASS>
184+
template <typename T>
185+
typename FieldProxyPolicy<CLASS>::FieldProxy&
186+
FieldProxyPolicy<CLASS>::FieldProxy::operator=(const T& rhs) {
187+
SEXP tmp = PROTECT(wrap(rhs));
188+
set(tmp);
189+
UNPROTECT(1);
190+
return *this;
191+
}
192+
193+
template <typename CLASS>
194+
template <typename T>
195+
FieldProxyPolicy<CLASS>::FieldProxy::operator T() const {
196+
return as<T>(get());
197+
}
198+
199+
template <typename CLASS>
200+
template <typename T>
201+
FieldProxyPolicy<CLASS>::const_FieldProxy::operator T() const {
202+
return as<T>(get());
203+
}
205204

206205
}
207206

0 commit comments

Comments
 (0)