Repository: qpid-proton
Updated Branches:
  refs/heads/master aa226be31 -> 645fe09e4


http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/645fe09e/proton-c/bindings/cpp/src/message.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/message.cpp 
b/proton-c/bindings/cpp/src/message.cpp
index 285771b..7c032f0 100644
--- a/proton-c/bindings/cpp/src/message.cpp
+++ b/proton-c/bindings/cpp/src/message.cpp
@@ -66,9 +66,28 @@ void check(int err) {
 }
 } // namespace
 
-void message::id(const message_id& id) { *data::cast(pn_message_id(message_)) 
= id.value_; }
+void message::id(const message_id& id) { data(pn_message_id(message_)) = 
id.value_; }
 
-message_id message::id() const { return 
message_id(*data::cast(pn_message_id(message_))); }
+namespace {
+inline message_id from_pn_atom(const pn_atom_t& v) {
+  switch (v.type) {
+    case PN_ULONG:
+      return message_id(amqp_ulong(v.u.as_ulong));
+    case PN_UUID:
+      return message_id(amqp_uuid(v.u.as_uuid));
+    case PN_BINARY:
+      return message_id(amqp_binary(v.u.as_bytes));
+    case PN_STRING:
+      return message_id(amqp_string(v.u.as_bytes));
+    default:
+      return message_id();
+  }
+}
+}
+
+message_id message::id() const {
+    return from_pn_atom(pn_message_get_id(message_));
+}
 
 void message::user_id(const std::string &id) {
     check(pn_message_set_user_id(message_, pn_bytes(id)));
@@ -106,11 +125,11 @@ std::string message::reply_to() const {
 }
 
 void message::correlation_id(const message_id& id) {
-    *data::cast(pn_message_correlation_id(message_)) = id.value_;
+    data(pn_message_correlation_id(message_)) = id.value_;
 }
 
 message_id message::correlation_id() const {
-    return message_id(*data::cast(pn_message_correlation_id(message_)));
+    return from_pn_atom(pn_message_get_correlation_id(message_));
 }
 
 void message::content_type(const std::string &s) {
@@ -169,24 +188,24 @@ void message::inferred(bool b) { 
pn_message_set_inferred(message_, b); }
 
 void message::body(const value& v) { body() = v; }
 
-const data& message::body() const {
-    return *data::cast(pn_message_body(message_));
+const data message::body() const {
+    return pn_message_body(message_);
 }
 
-data& message::body() {
-    return *data::cast(pn_message_body(message_));
+data message::body() {
+    return pn_message_body(message_);
 }
 
 void message::properties(const value& v) {
     properties() = v;
 }
 
-const data& message::properties() const {
-    return *data::cast(pn_message_properties(message_));
+const data message::properties() const {
+    return pn_message_properties(message_);
 }
 
-data& message::properties() {
-    return *data::cast(pn_message_properties(message_));
+data message::properties() {
+    return pn_message_properties(message_);
 }
 
 namespace {
@@ -256,14 +275,14 @@ void message::decode(const std::string &s) {
     check(pn_message_decode(message_, s.data(), s.size()));
 }
 
-void message::decode(proton::link &link, proton::delivery &delivery) {
+void message::decode(proton::link link, proton::delivery delivery) {
     std::string buf;
-    buf.resize(pn_delivery_pending(pn_cast(&delivery)));
-    ssize_t n = pn_link_recv(pn_cast(&link), (char *) buf.data(), buf.size());
+    buf.resize(delivery.pending());
+    ssize_t n = link.recv((char *) buf.data(), buf.size());
     if (n != (ssize_t) buf.size()) throw error(MSG("link read failure"));
     clear();
     decode(buf);
-    pn_link_advance(pn_cast(&link));
+    link.advance();
 }
 
 }

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/645fe09e/proton-c/bindings/cpp/src/messaging_adapter.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/messaging_adapter.cpp 
b/proton-c/bindings/cpp/src/messaging_adapter.cpp
index f155a8d..e3bced8 100644
--- a/proton-c/bindings/cpp/src/messaging_adapter.cpp
+++ b/proton-c/bindings/cpp/src/messaging_adapter.cpp
@@ -68,7 +68,7 @@ void messaging_adapter::on_delivery(event &e) {
     if (pe) {
         pn_event_t *cevent = pe->pn_event();
         pn_link_t *lnk = pn_event_link(cevent);
-        delivery &dlv = pe->delivery();
+        delivery dlv = pe->delivery();
 
         if (pn_link_is_receiver(lnk)) {
             if (!dlv.partial() && dlv.readable()) {
@@ -81,7 +81,7 @@ void messaging_adapter::on_delivery(event &e) {
                 // See PROTON-998
                 class message &msg(ctx.event_message);
                 mevent.message_ = &msg;
-                mevent.message_->decode(*link::cast(lnk), dlv);
+                mevent.message_->decode(lnk, dlv);
                 if (pn_link_state(lnk) & PN_LOCAL_CLOSED) {
                     if (auto_accept_)
                         dlv.release();

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/645fe09e/proton-c/bindings/cpp/src/messaging_event.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/messaging_event.cpp 
b/proton-c/bindings/cpp/src/messaging_event.cpp
index 3a0514d..b1fedc3 100644
--- a/proton-c/bindings/cpp/src/messaging_event.cpp
+++ b/proton-c/bindings/cpp/src/messaging_event.cpp
@@ -55,7 +55,7 @@ messaging_event::~messaging_event() {}
 
 messaging_event::event_type messaging_event::type() const { return type_; }
 
-connection &messaging_event::connection() const {
+connection messaging_event::connection() const {
     if (type_ == messaging_event::PROTON)
         return proton_event::connection();
     if (parent_event_)
@@ -63,7 +63,7 @@ connection &messaging_event::connection() const {
     throw error(MSG("No connection context for event"));
 }
 
-sender& messaging_event::sender() const {
+sender messaging_event::sender() const {
     if (type_ == messaging_event::PROTON)
         return proton_event::sender();
     if (parent_event_)
@@ -71,7 +71,7 @@ sender& messaging_event::sender() const {
     throw error(MSG("No sender context for event"));
 }
 
-receiver& messaging_event::receiver() const {
+receiver messaging_event::receiver() const {
     if (type_ == messaging_event::PROTON)
         return proton_event::receiver();
     if (parent_event_)
@@ -79,7 +79,7 @@ receiver& messaging_event::receiver() const {
     throw error(MSG("No receiver context for event"));
 }
 
-link& messaging_event::link() const {
+link messaging_event::link() const {
     if (type_ == messaging_event::PROTON)
         return proton_event::link();
     if (parent_event_)
@@ -87,7 +87,7 @@ link& messaging_event::link() const {
     throw error(MSG("No link context for event"));
 }
 
-delivery& messaging_event::delivery() const {
+delivery messaging_event::delivery() const {
     if (type_ == messaging_event::PROTON)
         return proton_event::delivery();
     if (parent_event_)

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/645fe09e/proton-c/bindings/cpp/src/messaging_event.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/messaging_event.hpp 
b/proton-c/bindings/cpp/src/messaging_event.hpp
index f97d1a5..7d85d2b 100644
--- a/proton-c/bindings/cpp/src/messaging_event.hpp
+++ b/proton-c/bindings/cpp/src/messaging_event.hpp
@@ -88,11 +88,11 @@ class messaging_event : public proton_event
     ~messaging_event();
 
     virtual PN_CPP_EXTERN void dispatch(handler &h);
-    virtual PN_CPP_EXTERN class connection &connection() const;
-    virtual PN_CPP_EXTERN class sender& sender() const;
-    virtual PN_CPP_EXTERN class receiver& receiver() const;
-    virtual PN_CPP_EXTERN class link& link() const;
-    virtual PN_CPP_EXTERN class delivery& delivery() const;
+    virtual PN_CPP_EXTERN class connection connection() const;
+    virtual PN_CPP_EXTERN class sender sender() const;
+    virtual PN_CPP_EXTERN class receiver receiver() const;
+    virtual PN_CPP_EXTERN class link link() const;
+    virtual PN_CPP_EXTERN class delivery delivery() const;
     virtual PN_CPP_EXTERN class message& message() const;
 
     PN_CPP_EXTERN event_type type() const;

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/645fe09e/proton-c/bindings/cpp/src/object.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/object.cpp 
b/proton-c/bindings/cpp/src/object.cpp
new file mode 100644
index 0000000..d5fb7ef
--- /dev/null
+++ b/proton-c/bindings/cpp/src/object.cpp
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include "proton/object.hpp"
+#include <proton/object.h>
+
+namespace proton {
+
+void object_base::incref() const {
+    if (object_) ::pn_incref(const_cast<void*>(object_));
+}
+
+void object_base::decref() const {
+    if (object_) ::pn_decref(const_cast<void*>(object_));
+}
+
+}

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/645fe09e/proton-c/bindings/cpp/src/proton_event.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/proton_event.cpp 
b/proton-c/bindings/cpp/src/proton_event.cpp
index 068d245..c324985 100644
--- a/proton-c/bindings/cpp/src/proton_event.cpp
+++ b/proton-c/bindings/cpp/src/proton_event.cpp
@@ -49,53 +49,53 @@ std::string proton_event::name() const { return 
pn_event_type_name(pn_event_type
 
 pn_event_t *proton_event::pn_event() const { return pn_event_; }
 
-event_loop &proton_event::event_loop() const {
+event_loop& proton_event::event_loop() const {
     if (!event_loop_)
         throw error(MSG("No event_loop context for this event"));
     return *event_loop_;
 }
 
-container &proton_event::container() const {
+container& proton_event::container() const {
     class container *c = dynamic_cast<class container*>(event_loop_);
     if (!c)
         throw error(MSG("No container context for this event"));
     return *c;
 }
 
-engine &proton_event::engine() const {
+engine& proton_event::engine() const {
     class engine *e = dynamic_cast<class engine*>(event_loop_);
     if (!e)
         throw error(MSG("No engine context for this event"));
     return *e;
 }
 
-connection &proton_event::connection() const {
+connection proton_event::connection() const {
     pn_connection_t *conn = pn_event_connection(pn_event());
     if (!conn)
         throw error(MSG("No connection context for this event"));
-    return *connection::cast(conn);
+    return conn;
 }
 
-link& proton_event::link() const {
-    class link *lnk = link::cast(pn_event_link(pn_event()));
+link proton_event::link() const {
+    class link lnk = pn_event_link(pn_event());
     if (!lnk) throw error(MSG("No link context for this event"));
-    return *lnk;
+    return lnk;
 }
 
-sender& proton_event::sender() const {
+sender proton_event::sender() const {
     if (!link().sender()) throw error(MSG("No sender context for this event"));
-    return *link().sender();
+    return link().sender();
 }
 
-receiver& proton_event::receiver() const {
+receiver proton_event::receiver() const {
     if (!link().receiver()) throw error(MSG("No receiver context for this 
event"));
-    return *link().receiver();
+    return link().receiver();
 }
 
-delivery& proton_event::delivery() const {
-    class delivery *dlv = delivery::cast(pn_event_delivery(pn_event()));
+delivery proton_event::delivery() const {
+    pn_delivery_t* dlv = pn_event_delivery(pn_event());
     if (!dlv) throw error(MSG("No delivery context for this event"));
-    return *dlv;
+    return dlv;
 }
 
 void proton_event::dispatch(handler &h) {

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/645fe09e/proton-c/bindings/cpp/src/proton_event.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/proton_event.hpp 
b/proton-c/bindings/cpp/src/proton_event.hpp
index e382d8c..04a3e54 100644
--- a/proton-c/bindings/cpp/src/proton_event.hpp
+++ b/proton-c/bindings/cpp/src/proton_event.hpp
@@ -273,14 +273,14 @@ class proton_event : public event
     ///@}
 
     virtual void dispatch(handler &h);
-    virtual class event_loop &event_loop() const;
-    virtual class container &container() const;
-    virtual class engine &engine() const;
-    virtual class connection &connection() const;
-    virtual class sender& sender() const;
-    virtual class receiver& receiver() const;
-    virtual class link& link() const;
-    virtual class delivery& delivery() const;
+    virtual class event_loop& event_loop() const;
+    virtual class container& container() const;
+    virtual class engine& engine() const;
+    virtual class connection connection() const;
+    virtual class sender sender() const;
+    virtual class receiver receiver() const;
+    virtual class link link() const;
+    virtual class delivery delivery() const;
 
     /** Get type of event */
     event_type type() const;

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/645fe09e/proton-c/bindings/cpp/src/reactor.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/reactor.cpp 
b/proton-c/bindings/cpp/src/reactor.cpp
index fcef673..31d3275 100644
--- a/proton-c/bindings/cpp/src/reactor.cpp
+++ b/proton-c/bindings/cpp/src/reactor.cpp
@@ -18,25 +18,65 @@
  */
 
 #include "proton/reactor.hpp"
+#include "proton/acceptor.hpp"
+#include "proton/connection.hpp"
+#include "proton/task.hpp"
+#include "proton/url.hpp"
+
+#include "contexts.hpp"
 
 #include <proton/reactor.h>
 
 namespace proton {
 
-pn_unique_ptr<reactor> reactor::create() {
-    return pn_unique_ptr<reactor>(reactor::cast(pn_reactor()));
+reactor reactor::create() {
+    return reactor(pn_reactor());
+}
+
+void reactor::run() { pn_reactor_run(pn_object()); }
+void reactor::start() { pn_reactor_start(pn_object()); }
+bool reactor::process() { return pn_reactor_process(pn_object()); }
+void reactor::stop() { pn_reactor_stop(pn_object()); }
+void reactor::wakeup() { pn_reactor_wakeup(pn_object()); }
+bool reactor::quiesced() { return pn_reactor_quiesced(pn_object()); }
+void reactor::yield() { pn_reactor_yield(pn_object()); }
+amqp_timestamp reactor::mark() { return pn_reactor_mark(pn_object()); }
+amqp_timestamp reactor::now() { return pn_reactor_now(pn_object()); }
+
+acceptor reactor::listen(const url& url){
+    return pn_reactor_acceptor(pn_object(), url.host().c_str(), 
url.port().c_str(), 0);
+}
+
+task reactor::schedule(int delay, pn_handler_t* handler) {
+    return pn_reactor_schedule(pn_object(), delay, handler);
+}
+
+connection reactor::connection(pn_handler_t* h) const {
+    return pn_reactor_connection(pn_object(), h);
+}
+
+pn_io_t* reactor::pn_io() const {
+    return pn_reactor_io(pn_object());
 }
 
-void reactor::run() { pn_reactor_run(pn_cast(this)); }
-void reactor::start() { pn_reactor_start(pn_cast(this)); }
-bool reactor::process() { return pn_reactor_process(pn_cast(this)); }
-void reactor::stop() { pn_reactor_stop(pn_cast(this)); }
-void reactor::wakeup() { pn_reactor_wakeup(pn_cast(this)); }
-bool reactor::quiesced() { return pn_reactor_quiesced(pn_cast(this)); }
-void reactor::yield() { pn_reactor_yield(pn_cast(this)); }
+void reactor::pn_handler(pn_handler_t* h) {
+    pn_reactor_set_handler(pn_object(), h);
+}
+
+pn_handler_t* reactor::pn_handler() const {
+    return pn_reactor_get_handler(pn_object());
+}
+
+void reactor::pn_global_handler(pn_handler_t* h) {
+    pn_reactor_set_global_handler(pn_object(), h);
+}
+
+pn_handler_t* reactor::pn_global_handler() const {
+    return pn_reactor_get_global_handler(pn_object());
+}
 
 duration reactor::timeout() {
-    pn_millis_t tmo = pn_reactor_get_timeout(pn_cast(this));
+    pn_millis_t tmo = pn_reactor_get_timeout(pn_object());
     if (tmo == PN_MILLIS_MAX)
         return duration::FOREVER;
     return duration(tmo);
@@ -44,11 +84,14 @@ duration reactor::timeout() {
 
 void reactor::timeout(duration timeout) {
     if (timeout == duration::FOREVER || timeout.milliseconds > PN_MILLIS_MAX)
-        pn_reactor_set_timeout(pn_cast(this), PN_MILLIS_MAX);
+        pn_reactor_set_timeout(pn_object(), PN_MILLIS_MAX);
     else
-        pn_reactor_set_timeout(pn_cast(this), timeout.milliseconds);
+        pn_reactor_set_timeout(pn_object(), timeout.milliseconds);
 }
 
+void reactor::container_context(container& c) {
+    proton::container_context(pn_object(), c);
+}
 
 void reactor::operator delete(void* p) {
     pn_reactor_free(reinterpret_cast<pn_reactor_t*>(p));

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/645fe09e/proton-c/bindings/cpp/src/receiver.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/receiver.cpp 
b/proton-c/bindings/cpp/src/receiver.cpp
index d997c23..dec9fa6 100644
--- a/proton-c/bindings/cpp/src/receiver.cpp
+++ b/proton-c/bindings/cpp/src/receiver.cpp
@@ -30,9 +30,7 @@
 namespace proton {
 
 void receiver::flow(int count) {
-    pn_link_flow(pn_cast(this), count);
+    pn_link_flow(pn_object(), count);
 }
 
-receiver* receiver::cast(pn_type* p) { return link::cast(p)->receiver(); }
-
 }

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/645fe09e/proton-c/bindings/cpp/src/sender.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/sender.cpp 
b/proton-c/bindings/cpp/src/sender.cpp
index cd1b0ae..177e6f0 100644
--- a/proton-c/bindings/cpp/src/sender.cpp
+++ b/proton-c/bindings/cpp/src/sender.cpp
@@ -41,19 +41,17 @@ namespace {
 amqp_ulong tag_counter = 0;
 }
 
-delivery& sender::send(const message &message) {
+delivery sender::send(const message &message) {
     amqp_ulong id = ++tag_counter;
     pn_delivery_t *dlv =
-        pn_delivery(pn_cast(this), pn_dtag(reinterpret_cast<const char*>(&id), 
sizeof(id)));
+        pn_delivery(pn_object(), pn_dtag(reinterpret_cast<const char*>(&id), 
sizeof(id)));
     std::string buf;
     message.encode(buf);
-    pn_link_send(pn_cast(this), buf.data(), buf.size());
-    pn_link_advance(pn_cast(this));
-    if (pn_link_snd_settle_mode(pn_cast(this)) == PN_SND_SETTLED)
+    pn_link_send(pn_object(), buf.data(), buf.size());
+    pn_link_advance(pn_object());
+    if (pn_link_snd_settle_mode(pn_object()) == PN_SND_SETTLED)
         pn_delivery_settle(dlv);
-    return *delivery::cast(dlv);
+    return dlv;
 }
 
-sender* sender::cast(pn_type* p) { return link::cast(p)->sender(); }
-
 }

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/645fe09e/proton-c/bindings/cpp/src/session.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/session.cpp 
b/proton-c/bindings/cpp/src/session.cpp
index 6d0d955..e903080 100644
--- a/proton-c/bindings/cpp/src/session.cpp
+++ b/proton-c/bindings/cpp/src/session.cpp
@@ -30,43 +30,40 @@
 namespace proton {
 
 void session::open() {
-    pn_session_open(pn_cast(this));
+    pn_session_open(pn_object());
 }
 
-connection &session::connection() const {
-    return *proton::connection::cast(pn_session_connection(pn_cast(this)));
+connection session::connection() const {
+    return pn_session_connection(pn_object());
 }
 
 namespace {
 std::string set_name(const std::string& name, session* s) {
     if (name.empty())
-        return connection_context::get(
-            pn_cast(&s->connection())).container_impl->next_link_name();
+        return s->connection().context().container_impl->next_link_name();
     return name;
 }
 }
 
-receiver& session::create_receiver(const std::string& name) {
-    return *reinterpret_cast<receiver*>(
-        pn_receiver(pn_cast(this), set_name(name, this).c_str()));
+receiver session::create_receiver(const std::string& name) {
+    return pn_receiver(pn_object(), set_name(name, this).c_str());
 }
 
-sender& session::create_sender(const std::string& name) {
-    return *reinterpret_cast<sender*>(
-        pn_sender(pn_cast(this), set_name(name, this).c_str()));
+sender session::create_sender(const std::string& name) {
+    return pn_sender(pn_object(), set_name(name, this).c_str());
 }
 
-sender& session::open_sender(const std::string &addr, handler *h) {
-    sender& snd = create_sender();
+sender session::open_sender(const std::string &addr, handler *h) {
+    sender snd = create_sender();
     snd.target().address(addr);
     if (h) snd.handler(*h);
     snd.open();
     return snd;
 }
 
-receiver& session::open_receiver(const std::string &addr, bool dynamic, 
handler *h)
+receiver session::open_receiver(const std::string &addr, bool dynamic, handler 
*h)
 {
-    receiver& rcv = create_receiver();
+    receiver rcv = create_receiver();
     rcv.source().address(addr);
     if (dynamic) rcv.source().dynamic(true);
     if (h) rcv.handler(*h);
@@ -74,12 +71,17 @@ receiver& session::open_receiver(const std::string &addr, 
bool dynamic, handler
     return rcv;
 }
 
-endpoint::state session::state() const { return 
pn_session_state(pn_cast(this)); }
+session session::next(endpoint::state s) const
+{
+    return pn_session_next(pn_object(), s);
+}
+
+endpoint::state session::state() const { return pn_session_state(pn_object()); 
}
 
 link_range session::find_links(endpoint::state mask)  const {
     link_range r(connection().find_links(mask));
-    link_iterator i(r.begin(), this);
-    if (i && this != &i->session())
+    link_iterator i(r.begin(), *this);
+    if (i && *this != i->session())
         ++i;
     return link_range(i);
 }

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/645fe09e/proton-c/bindings/cpp/src/task.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/task.cpp 
b/proton-c/bindings/cpp/src/task.cpp
index 6e6b4a6..7c0a683 100644
--- a/proton-c/bindings/cpp/src/task.cpp
+++ b/proton-c/bindings/cpp/src/task.cpp
@@ -24,6 +24,6 @@
 
 namespace proton {
 
-void task::cancel() { pn_task_cancel(pn_cast(this)); }
+void task::cancel() { pn_task_cancel(pn_object()); }
 
 }

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/645fe09e/proton-c/bindings/cpp/src/terminus.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/terminus.cpp 
b/proton-c/bindings/cpp/src/terminus.cpp
index 8948eb5..def6aa9 100644
--- a/proton-c/bindings/cpp/src/terminus.cpp
+++ b/proton-c/bindings/cpp/src/terminus.cpp
@@ -25,44 +25,44 @@
 namespace proton {
 
 terminus::type_t terminus::type() const {
-    return (type_t) pn_terminus_get_type(pn_cast(this));
+    return (type_t) pn_terminus_get_type(object_);
 }
 
 void terminus::type(type_t type) {
-    pn_terminus_set_type(pn_cast(this), (pn_terminus_type_t) type);
+    pn_terminus_set_type(object_, (pn_terminus_type_t) type);
 }
 
 terminus::expiry_policy_t terminus::expiry_policy() const {
-    return (expiry_policy_t) pn_terminus_get_type(pn_cast(this));
+    return (expiry_policy_t) pn_terminus_get_type(object_);
 }
 
 void terminus::expiry_policy(expiry_policy_t policy) {
-    pn_terminus_set_expiry_policy(pn_cast(this), (pn_expiry_policy_t) policy);
+    pn_terminus_set_expiry_policy(object_, (pn_expiry_policy_t) policy);
 }
 
 terminus::distribution_mode_t terminus::distribution_mode() const {
-    return (distribution_mode_t) pn_terminus_get_type(pn_cast(this));
+    return (distribution_mode_t) pn_terminus_get_type(object_);
 }
 
 void terminus::distribution_mode(distribution_mode_t mode) {
-    pn_terminus_set_distribution_mode(pn_cast(this), (pn_distribution_mode_t) 
mode);
+    pn_terminus_set_distribution_mode(object_, (pn_distribution_mode_t) mode);
 }
 
 std::string terminus::address() const {
-    const char *addr = pn_terminus_get_address(pn_cast(this));
+    const char *addr = pn_terminus_get_address(object_);
     return addr ? std::string(addr) : std::string();
 }
 
 void terminus::address(const std::string &addr) {
-    pn_terminus_set_address(pn_cast(this), addr.c_str());
+    pn_terminus_set_address(object_, addr.c_str());
 }
 
 bool terminus::dynamic() const {
-    return (type_t) pn_terminus_is_dynamic(pn_cast(this));
+    return (type_t) pn_terminus_is_dynamic(object_);
 }
 
 void terminus::dynamic(bool d) {
-    pn_terminus_set_dynamic(pn_cast(this), d);
+    pn_terminus_set_dynamic(object_, d);
 }
 
 }

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/645fe09e/proton-c/bindings/cpp/src/transport.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/transport.cpp 
b/proton-c/bindings/cpp/src/transport.cpp
index 58114ae..6e6e612 100644
--- a/proton-c/bindings/cpp/src/transport.cpp
+++ b/proton-c/bindings/cpp/src/transport.cpp
@@ -24,8 +24,8 @@
 
 namespace proton {
 
-connection* transport::connection() const {
-    return connection::cast(pn_transport_connection(pn_cast(this)));
+connection transport::connection() const {
+    return pn_transport_connection(pn_object());
 }
 
 }

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/645fe09e/proton-c/bindings/cpp/src/value.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/value.cpp 
b/proton-c/bindings/cpp/src/value.cpp
index 7059d69..be5ca5e 100644
--- a/proton-c/bindings/cpp/src/value.cpp
+++ b/proton-c/bindings/cpp/src/value.cpp
@@ -28,27 +28,23 @@ namespace proton {
 
 value::value() : data_(data::create()) {}
 
-value::value(const value& x) : data_(data::create()) { *data_ = *x.data_; }
+value::value(const value& x) : data_(data::create()) { data_ = x.data_; }
 
-value::value(const data& x) : data_(data::create()) { *data_ = x; }
+value& value::operator=(const value& x) { data_ = x.data_; return *this; }
 
-value& value::operator=(const value& x) { *data_ = *x.data_; return *this; }
+void value::clear() { data_.clear(); }
 
-value& value::operator=(const data& x) { *data_ = x; return *this; }
+bool value::empty() const { return data_.empty(); }
 
-void value::clear() { data_->clear(); }
+class encoder value::encoder() { clear(); return data_.encoder(); }
 
-bool value::empty() const { return data_->empty(); }
-
-class encoder& value::encoder() { clear(); return data_->encoder(); }
-
-class decoder& value::decoder() const { data_->decoder().rewind(); return 
data_->decoder(); }
+class decoder value::decoder() const { data_.decoder().rewind(); return 
data_.decoder(); }
 
 type_id value::type() const { return decoder().type(); }
 
-bool value::operator==(const value& x) const { return *data_ == *x.data_; }
+bool value::operator==(const value& x) const { return data_ == x.data_; }
 
-bool value::operator<(const value& x) const { return *data_ < *x.data_; }
+bool value::operator<(const value& x) const { return data_ < x.data_; }
 
 std::ostream& operator<<(std::ostream& o, const value& v) {
     // pn_inspect prints strings with quotes which is not normal in C++.
@@ -57,7 +53,7 @@ std::ostream& operator<<(std::ostream& o, const value& v) {
       case SYMBOL:
         return o << v.get<std::string>();
       default:
-        return o << *v.data_;
+        return o << v.data_;
     }
 }
 

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/645fe09e/tests/tools/apps/cpp/reactor_send.cpp
----------------------------------------------------------------------
diff --git a/tests/tools/apps/cpp/reactor_send.cpp 
b/tests/tools/apps/cpp/reactor_send.cpp
index 6bdab23..86406f6 100644
--- a/tests/tools/apps/cpp/reactor_send.cpp
+++ b/tests/tools/apps/cpp/reactor_send.cpp
@@ -49,7 +49,7 @@ class reactor_send : public proton::messaging_handler {
     proton::amqp_binary received_content_;
     bool replying_;
     proton::message_id id_value_;
-    pn_reactor_t *reactor_;
+    proton::reactor reactor_;
   public:
 
     reactor_send(const std::string &url, int c, int size, bool replying)
@@ -65,16 +65,16 @@ class reactor_send : public proton::messaging_handler {
 
     void on_start(proton::event &e) {
         e.container().open_sender(url_);
-        reactor_ = pn_cast(&e.container().reactor());
+        reactor_ = e.container().reactor();
     }
 
     void on_sendable(proton::event &e) {
-        proton::sender& sender = e.sender();
+        proton::sender sender = e.sender();
 
         while (sender.credit() && sent_ < total_) {
             id_value_ = sent_ + 1;
             message_.correlation_id(id_value_);
-            proton::amqp_timestamp reactor_now(pn_reactor_now(reactor_));
+            proton::amqp_timestamp reactor_now(reactor_.now());
             message_.creation_time(reactor_now);
             sender.send(message_);
             sent_++;


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to