#
# 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.
#

# Address
qpid::messaging::Address::Address()
qpid::messaging::Address::Address(std::string const&)
qpid::messaging::Address::Address(std::string const&, std::string const&, qpid::types::Variant::Map const&, std::string const&)
qpid::messaging::Address::Address(qpid::messaging::Address const&)
qpid::messaging::Address::~Address()
qpid::messaging::Address::operator=(qpid::messaging::Address const&)
qpid::messaging::Address::getName() const
qpid::messaging::Address::setName(std::string const&)
qpid::messaging::Address::getSubject() const
qpid::messaging::Address::setSubject(std::string const&)
qpid::messaging::Address::getOptions() const
qpid::messaging::Address::getOptions()
qpid::messaging::Address::setOptions(qpid::types::Variant::Map const&)
qpid::messaging::Address::getType() const
qpid::messaging::Address::setType(std::string const&)
qpid::messaging::Address::str() const
qpid::messaging::Address::operator bool() const
qpid::messaging::Address::operator!() const

qpid::messaging::operator<<(std::ostream&, qpid::messaging::Address const&)

# Connection
qpid::messaging::Connection::Connection(qpid::messaging::ConnectionImpl*)
qpid::messaging::Connection::Connection(qpid::messaging::Connection const&)
qpid::messaging::Connection::Connection()
qpid::messaging::Connection::Connection(std::string const&, qpid::types::Variant::Map const&)
qpid::messaging::Connection::Connection(std::string const&, std::string const&)
qpid::messaging::Connection::~Connection()
qpid::messaging::Connection::operator=(qpid::messaging::Connection const&)
qpid::messaging::Connection::setOption(std::string const&, qpid::types::Variant const&)
qpid::messaging::Connection::open()
qpid::messaging::Connection::isOpen()
qpid::messaging::Connection::isOpen() const
qpid::messaging::Connection::close()
qpid::messaging::Connection::createTransactionalSession(std::string const&)
qpid::messaging::Connection::createSession(std::string const&)
qpid::messaging::Connection::getSession(std::string const&) const
qpid::messaging::Connection::getAuthenticatedUsername()

# Duration
qpid::messaging::Duration::Duration(uint64_t)
qpid::messaging::Duration::getMilliseconds() const
qpid::messaging::Duration::FOREVER
qpid::messaging::Duration::IMMEDIATE
qpid::messaging::Duration::SECOND
qpid::messaging::Duration::MINUTE

qpid::messaging::operator*(qpid::messaging::Duration const&, uint64_t)
qpid::messaging::operator*(uint64_t, qpid::messaging::Duration const&)
qpid::messaging::operator==(qpid::messaging::Duration const&, qpid::messaging::Duration const&)
qpid::messaging::operator!=(qpid::messaging::Duration const&, qpid::messaging::Duration const&)

# FailoverUpdates (this is a very strange class - more like a property of a Connection)
qpid::messaging::FailoverUpdates::FailoverUpdates(qpid::messaging::Connection&)
qpid::messaging::FailoverUpdates::~FailoverUpdates()

# Message
qpid::messaging::Message::Message(std::string const&)
qpid::messaging::Message::Message(char const*, size_t)
qpid::messaging::Message::Message(qpid::messaging::Message const&)
qpid::messaging::Message::Message(qpid::types::Variant&)
qpid::messaging::Message::~Message()
qpid::messaging::Message::operator=(qpid::messaging::Message const&)
qpid::messaging::Message::setReplyTo(qpid::messaging::Address const&)
qpid::messaging::Message::getReplyTo() const
qpid::messaging::Message::setSubject(std::string const&)
qpid::messaging::Message::getSubject() const
qpid::messaging::Message::setContentType(std::string const&)
qpid::messaging::Message::getContentType() const
qpid::messaging::Message::setMessageId(std::string const&)
qpid::messaging::Message::getMessageId() const
qpid::messaging::Message::setUserId(std::string const&)
qpid::messaging::Message::getUserId() const
qpid::messaging::Message::setCorrelationId(std::string const&)
qpid::messaging::Message::getCorrelationId() const
qpid::messaging::Message::setPriority(uint8_t)
qpid::messaging::Message::getPriority() const
qpid::messaging::Message::setTtl(qpid::messaging::Duration)
qpid::messaging::Message::getTtl() const
qpid::messaging::Message::setDurable(bool)
qpid::messaging::Message::getDurable() const
qpid::messaging::Message::getRedelivered() const
qpid::messaging::Message::setRedelivered(bool)
qpid::messaging::Message::getProperties() const
qpid::messaging::Message::getProperties()
qpid::messaging::Message::setContent(std::string const&)
qpid::messaging::Message::setContent(char const*, size_t)
qpid::messaging::Message::getContent() const
qpid::messaging::Message::setContentBytes(std::string const&)
qpid::messaging::Message::getContentBytes() const
qpid::messaging::Message::setContentObject(qpid::types::Variant const&)
qpid::messaging::Message::getContentObject()
qpid::messaging::Message::getContentObject() const
qpid::messaging::Message::getContentPtr() const
qpid::messaging::Message::getContentSize() const
qpid::messaging::Message::setProperty(std::string const&, qpid::types::Variant const&)

# Logger
qpid::messaging::Logger::configure(int, char const**, std::string const&)
qpid::messaging::Logger::log(qpid::messaging::Level, char const*, int, char const*, std::string const&)
qpid::messaging::Logger::setOutput(qpid::messaging::LoggerOutput&)
qpid::messaging::Logger::usage()

qpid::messaging::LoggerOutput::~LoggerOutput()

# Receiver
qpid::messaging::Receiver::Receiver(qpid::messaging::ReceiverImpl*)
qpid::messaging::Receiver::Receiver(qpid::messaging::Receiver const&)
qpid::messaging::Receiver::~Receiver()
qpid::messaging::Receiver::operator=(qpid::messaging::Receiver const&)
qpid::messaging::Receiver::get(qpid::messaging::Message&, qpid::messaging::Duration)
qpid::messaging::Receiver::get(qpid::messaging::Duration)
qpid::messaging::Receiver::fetch(qpid::messaging::Message&, qpid::messaging::Duration)
qpid::messaging::Receiver::fetch(qpid::messaging::Duration)
qpid::messaging::Receiver::setCapacity(uint32_t)
qpid::messaging::Receiver::getCapacity()
qpid::messaging::Receiver::getAvailable()
qpid::messaging::Receiver::getUnsettled()
qpid::messaging::Receiver::close()
qpid::messaging::Receiver::isClosed() const
qpid::messaging::Receiver::getName() const
qpid::messaging::Receiver::getSession() const
qpid::messaging::Receiver::getAddress() const

# Sender
qpid::messaging::Sender::Sender(qpid::messaging::SenderImpl*)
qpid::messaging::Sender::Sender(qpid::messaging::Sender const&)
qpid::messaging::Sender::~Sender()
qpid::messaging::Sender::operator=(qpid::messaging::Sender const&)
qpid::messaging::Sender::send(qpid::messaging::Message const&, bool)
qpid::messaging::Sender::close()
qpid::messaging::Sender::setCapacity(uint32_t)
qpid::messaging::Sender::getCapacity()
qpid::messaging::Sender::getUnsettled()
qpid::messaging::Sender::getAvailable()
qpid::messaging::Sender::getName() const
qpid::messaging::Sender::getSession() const
qpid::messaging::Sender::getAddress() const

# Session
qpid::messaging::Session::Session(qpid::messaging::SessionImpl*)
qpid::messaging::Session::Session(qpid::messaging::Session const&)
qpid::messaging::Session::~Session()
qpid::messaging::Session::operator=(qpid::messaging::Session const&)
qpid::messaging::Session::close()
qpid::messaging::Session::commit()
qpid::messaging::Session::rollback()
qpid::messaging::Session::acknowledge(bool)
qpid::messaging::Session::acknowledge(qpid::messaging::Message&, bool)
qpid::messaging::Session::acknowledgeUpTo(qpid::messaging::Message&, bool)
qpid::messaging::Session::reject(qpid::messaging::Message&)
qpid::messaging::Session::release(qpid::messaging::Message&)
qpid::messaging::Session::sync(bool)
qpid::messaging::Session::getReceivable()
qpid::messaging::Session::getUnsettledAcks()
qpid::messaging::Session::nextReceiver(qpid::messaging::Receiver&, qpid::messaging::Duration)
qpid::messaging::Session::nextReceiver(qpid::messaging::Duration)
qpid::messaging::Session::createSender(qpid::messaging::Address const&)
qpid::messaging::Session::createSender(std::string const&)
qpid::messaging::Session::createReceiver(qpid::messaging::Address const&)
qpid::messaging::Session::createReceiver(std::string const&)
qpid::messaging::Session::getSender(std::string const&) const
qpid::messaging::Session::getReceiver(std::string const&) const
qpid::messaging::Session::getConnection() const
qpid::messaging::Session::hasError()
qpid::messaging::Session::checkError()

# Codec routines (properly superceded now by Messsage::setContentObject()
qpid::messaging::decode(qpid::messaging::Message const&, qpid::types::Variant::Map&, std::string const&)
qpid::messaging::decode(qpid::messaging::Message const&, qpid::types::Variant::List&, std::string const&)
qpid::messaging::encode(qpid::types::Variant::Map const&, qpid::messaging::Message&, std::string const&)
qpid::messaging::encode(qpid::types::Variant::List const&, qpid::messaging::Message&, std::string const&)

# Exceptions
qpid::messaging::EncodingException::EncodingException(std::string const&)
qpid::messaging::EncodingException::~EncodingException()

qpid::messaging::MessagingException::MessagingException(std::string const&)
qpid::messaging::MessagingException::~MessagingException()

qpid::messaging::InvalidOptionString::InvalidOptionString(std::string const&)
qpid::messaging::InvalidOptionString::~InvalidOptionString()
qpid::messaging::KeyError::KeyError(std::string const&)
qpid::messaging::KeyError::~KeyError()
qpid::messaging::LinkError::LinkError(std::string const&)
qpid::messaging::LinkError::~LinkError()
qpid::messaging::AddressError::AddressError(std::string const&)
qpid::messaging::AddressError::~AddressError()
qpid::messaging::ResolutionError::ResolutionError(std::string const&)
qpid::messaging::ResolutionError::~ResolutionError()
qpid::messaging::AssertionFailed::AssertionFailed(std::string const&)
qpid::messaging::AssertionFailed::~AssertionFailed()
qpid::messaging::NotFound::NotFound(std::string const&)
qpid::messaging::NotFound::~NotFound()
qpid::messaging::MalformedAddress::MalformedAddress(std::string const&)
qpid::messaging::MalformedAddress::~MalformedAddress()
qpid::messaging::ReceiverError::ReceiverError(std::string const&)
qpid::messaging::ReceiverError::~ReceiverError()
qpid::messaging::FetchError::FetchError(std::string const&)
qpid::messaging::FetchError::~FetchError()
qpid::messaging::NoMessageAvailable::NoMessageAvailable()
qpid::messaging::NoMessageAvailable::~NoMessageAvailable()
qpid::messaging::SenderError::SenderError(std::string const&)
qpid::messaging::SenderError::~SenderError()
qpid::messaging::SendError::SendError(std::string const&)
qpid::messaging::SendError::~SendError()
qpid::messaging::TargetCapacityExceeded::TargetCapacityExceeded(std::string const&)
qpid::messaging::TargetCapacityExceeded::~TargetCapacityExceeded()
qpid::messaging::SessionError::SessionError(std::string const&)
qpid::messaging::SessionError::~SessionError()
qpid::messaging::TransactionError::TransactionError(std::string const&)
qpid::messaging::TransactionError::~TransactionError()
qpid::messaging::TransactionAborted::TransactionAborted(std::string const&)
qpid::messaging::TransactionAborted::~TransactionAborted()
qpid::messaging::TransactionUnknown::TransactionUnknown(std::string const&)
qpid::messaging::TransactionUnknown::~TransactionUnknown()
qpid::messaging::UnauthorizedAccess::UnauthorizedAccess(std::string const&)
qpid::messaging::UnauthorizedAccess::~UnauthorizedAccess()
qpid::messaging::ConnectionError::ConnectionError(std::string const&)
qpid::messaging::ConnectionError::~ConnectionError()
qpid::messaging::TransportFailure::TransportFailure(std::string const&)
qpid::messaging::TransportFailure::~TransportFailure()

