#ifndef PROTON_ENDPOINT_HPP #define PROTON_ENDPOINT_HPP /* * * 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 "./fwd.hpp" #include "./error_condition.hpp" #include "./internal/config.hpp" #include "./internal/export.hpp" /// @file /// @copybrief proton::endpoint namespace proton { /// The base class for session, connection, and link. class PN_CPP_CLASS_EXTERN endpoint { public: PN_CPP_EXTERN virtual ~endpoint(); // XXX Add the container accessor here. /// True if the local end is uninitialized. virtual bool uninitialized() const = 0; /// True if the local end is active. virtual bool active() const = 0; /// True if the local and remote ends are closed. virtual bool closed() const = 0; /// Get the error condition of the remote endpoint. virtual class error_condition error() const = 0; // XXX Add virtual open() and open(endpoint_options) /// Close the endpoint. virtual void close() = 0; /// Close the endpoint with an error condition. virtual void close(const error_condition&) = 0; #if PN_CPP_HAS_DEFAULTED_FUNCTIONS && PN_CPP_HAS_DEFAULTED_MOVE_INITIALIZERS // Make everything explicit for C++11 compilers /// @cond INTERNAL endpoint() = default; endpoint& operator=(const endpoint&) = default; endpoint(const endpoint&) = default; endpoint& operator=(endpoint&&) = default; endpoint(endpoint&&) = default; /// @endcond #endif }; namespace internal { template class iter_base { public: typedef T value_type; T operator*() const { return obj_; } T* operator->() const { return const_cast(&obj_); } D operator++(int) { D x(*this); ++(*this); return x; } bool operator==(const iter_base& x) const { return obj_ == x.obj_; } bool operator!=(const iter_base& x) const { return obj_ != x.obj_; } protected: explicit iter_base(T p = 0) : obj_(p) {} T obj_; }; template class iter_range { public: typedef I iterator; explicit iter_range(I begin = I(), I end = I()) : begin_(begin), end_(end) {} I begin() const { return begin_; } I end() const { return end_; } bool empty() const { return begin_ == end_; } private: I begin_, end_; }; } // internal } // proton #endif // PROTON_ENDPOINT_HPP