0
0
mirror of https://github.com/zeromq/libzmq.git synced 2024-12-26 23:01:04 +08:00

C++ binding removed from the core

Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
This commit is contained in:
Martin Sustrik 2011-03-24 10:18:06 +01:00
parent 7d87db0529
commit d4e83d2601
5 changed files with 3 additions and 505 deletions

View File

@ -96,7 +96,6 @@ This package contains ZeroMQ related development libraries and header files.
%files devel
%defattr(-,root,root,-)
%{_includedir}/zmq.h
%{_includedir}/zmq.hpp
%{_includedir}/zmq_utils.h
%{_libdir}/libzmq.la

View File

@ -3,8 +3,8 @@ MAN3 = zmq_bind.3 zmq_close.3 zmq_connect.3 zmq_init.3 \
zmq_msg_init_data.3 zmq_msg_init_size.3 zmq_msg_move.3 zmq_msg_size.3 \
zmq_poll.3 zmq_recv.3 zmq_send.3 zmq_setsockopt.3 zmq_socket.3 \
zmq_strerror.3 zmq_term.3 zmq_version.3 zmq_getsockopt.3 zmq_errno.3
MAN7 = zmq.7 zmq_tcp.7 zmq_pgm.7 zmq_epgm.7 zmq_inproc.7 zmq_ipc.7 \
zmq_cpp.7
MAN7 = zmq.7 zmq_tcp.7 zmq_pgm.7 zmq_epgm.7 zmq_inproc.7 zmq_ipc.7
MAN_DOC = $(MAN1) $(MAN3) $(MAN7)
MAN_TXT = $(MAN3:%.3=%.txt)

View File

@ -1,212 +0,0 @@
zmq_cpp(7)
==========
NAME
----
zmq_cpp - interface between 0MQ and C++ applications
SYNOPSIS
--------
*#include <zmq.hpp>*
*c$$++$$* ['flags'] 'files' *-lzmq* ['libraries']
DESCRIPTION
-----------
This manual page describes how the 0MQ C++ language binding maps to the
underlying 0MQ C library functions.
All 0MQ constants defined by _zmq.h_ are also available to the C++ language
binding.
The following classes are provided in the 'zmq' namespace:
Context
~~~~~~~
The 'context_t' class encapsulates functionality dealing with the
initialisation and termination of a 0MQ _context_.
Constructor
^^^^^^^^^^^
[verse]
*context_t::context_t(int 'io_threads')*
Maps to the _zmq_init()_ function, as described in linkzmq:zmq_init[3].
Destructor
^^^^^^^^^^
[verse]
*context_t::~context_t(void)*
Maps to the _zmq_term()_ function, as described in linkzmq:zmq_term[3].
Methods
^^^^^^^
None.
Socket
~~~~~~
The 'socket_t' class encapsulates a 0MQ socket.
Constructor
^^^^^^^^^^^
[verse]
*socket_t::socket_t(context_t '&context', int 'type')*
Maps to the _zmq_socket()_ function, as described in linkzmq:zmq_socket[3].
Destructor
^^^^^^^^^^
[verse]
*socket_t::~socket_t(void)*
Calls the _zmq_close()_ function, as described in linkzmq:zmq_close[3].
Methods
^^^^^^^
[verse]
*void socket_t::getsockopt(int 'option_name', void '*option_value', size_t
'*option_len')*
Maps to the _zmq_getsockopt()_ function, as described in
linkzmq:zmq_getsockopt[3].
[verse]
*void socket_t::setsockopt(int 'option_name', const void '*option_value', size_t
'option_len')*
Maps to the _zmq_setsockopt()_ function, as described in
linkzmq:zmq_setsockopt[3].
[verse]
*void socket_t::bind(const char '*endpoint')*
Maps to the _zmq_bind()_ function, as described in linkzmq:zmq_bind[3].
[verse]
*void socket_t::connect(const char '*endpoint')*
Maps to the _zmq_connect()_ function, as described in linkzmq:zmq_connect[3].
[verse]
*bool socket_t::send(message_t '&msg', int 'flags' = 0)*
Maps to the _zmq_send()_ function, as described in linkzmq:zmq_send[3].
Returns true if message is successfully sent, false if it is not.
[verse]
*bool socket_t::recv(message_t '*msg', int 'flags' = 0)*
Maps to the _zmq_recv()_ function, as described in linkzmq:zmq_recv[3].
Returns true if message is successfully received, false if it is not.
Message
~~~~~~~
The 'zmq::message_t' class encapsulates the 'zmq_msg_t' structure and
functions to construct, destruct and manipulate 0MQ messages.
Constructor
^^^^^^^^^^^
[verse]
*message_t::message_t(void)*
*message_t::message_t(size_t 'size')*
*message_t::message_t(void '*data', size_t 'size', free_fn '*ffn')*
These map to the _zmq_msg_init()_, _zmq_msg_init_size()_ and
_zmq_msg_init_data()_ functions, described in linkzmq:zmq_msg_init[3],
linkzmq:zmq_msg_init_size[3] and linkzmq:zmq_msg_init_data[3] respectively.
Destructor
^^^^^^^^^^
[verse]
*message_t::~message_t(void)*
Calls the _zmq_msg_close()_ function, as described in linkzmq:zmq_msg_close[3].
Methods
^^^^^^^
[verse]
*void *message_t::data (void)*
Maps to the _zmq_msg_data()_ function, as described in linkzmq:zmq_msg_data[3].
[verse]
*size_t message_t::size (void)*
Maps to the _zmq_msg_size()_ function, as described in linkzmq:zmq_msg_size[3].
[verse]
*void message_t::copy (message_t '*src')*
Maps to the _zmq_msg_copy()_ function, as described in linkzmq:zmq_msg_copy[3].
[verse]
*void message_t::move (message_t '*src')*
Maps to the _zmq_msg_move()_ function, as described in linkzmq:zmq_msg_move[3].
[verse]
*message_t::rebuild(void)*
*message_t::rebuild(size_t 'size')*
*message_t::rebuild(void '*data', size_t 'size', free_fn '*ffn')*
Equivalent to calling the _zmq_msg_close()_ function followed by the
corresponding _zmq_msg_init()_ function.
Input/output multiplexing
~~~~~~~~~~~~~~~~~~~~~~~~~
[verse]
*int poll (zmq_pollitem_t *items, int nitems, long timeout = -1)*
The _poll()_ function is a namespaced equivalent of the _zmq_poll()_ function,
as described in linkzmq:zmq_poll[3].
NOTE: To obtain a 0MQ _socket_ for use in a _zmq_pollitem_t_ structure, you
should cast an instance of the _socket_t_ class to `(void *)`.
ERROR HANDLING
--------------
All errors reported by the underlying 0MQ C library functions are automatically
converted to exceptions by the C++ language binding. The 'zmq::error_t' class
is derived from the 'std::exception' class and uses the _zmq_strerror()_
function to convert the error code to human-readable string.
EXAMPLE
-------
----
zmq::context_t ctx (1);
zmq::socket_t s (ctx, ZMQ_PUB);
s.connect ("tcp://192.168.0.115:5555");
zmq::message_t msg (100);
memset (msg.data (), 0, 100);
s.send (msg);
----
SEE ALSO
--------
linkzmq:zmq[7]
AUTHORS
-------
The 0MQ documentation was written by Martin Sustrik <sustrik@250bpm.com> and
Martin Lucina <mato@kotelna.sk>.

View File

@ -1,289 +0,0 @@
/*
Copyright (c) 2007-2011 iMatix Corporation
Copyright (c) 2007-2011 Other contributors as noted in the AUTHORS file
This file is part of 0MQ.
0MQ is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
0MQ is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __ZMQ_HPP_INCLUDED__
#define __ZMQ_HPP_INCLUDED__
#include "zmq.h"
#include <cassert>
#include <cstring>
#include <exception>
namespace zmq
{
typedef zmq_free_fn free_fn;
typedef zmq_pollitem_t pollitem_t;
class error_t : public std::exception
{
public:
error_t () : errnum (zmq_errno ()) {}
virtual const char *what () const throw ()
{
return zmq_strerror (errnum);
}
int num () const
{
return errnum;
}
private:
int errnum;
};
inline int poll (zmq_pollitem_t *items_, int nitems_, long timeout_ = -1)
{
int rc = zmq_poll (items_, nitems_, timeout_);
if (rc < 0)
throw error_t ();
return rc;
}
class message_t : private zmq_msg_t
{
friend class socket_t;
public:
inline message_t ()
{
int rc = zmq_msg_init (this);
if (rc != 0)
throw error_t ();
}
inline message_t (size_t size_)
{
int rc = zmq_msg_init_size (this, size_);
if (rc != 0)
throw error_t ();
}
inline message_t (void *data_, size_t size_, free_fn *ffn_,
void *hint_ = NULL)
{
int rc = zmq_msg_init_data (this, data_, size_, ffn_, hint_);
if (rc != 0)
throw error_t ();
}
inline ~message_t ()
{
int rc = zmq_msg_close (this);
assert (rc == 0);
}
inline void rebuild ()
{
int rc = zmq_msg_close (this);
if (rc != 0)
throw error_t ();
rc = zmq_msg_init (this);
if (rc != 0)
throw error_t ();
}
inline void rebuild (size_t size_)
{
int rc = zmq_msg_close (this);
if (rc != 0)
throw error_t ();
rc = zmq_msg_init_size (this, size_);
if (rc != 0)
throw error_t ();
}
inline void rebuild (void *data_, size_t size_, free_fn *ffn_,
void *hint_ = NULL)
{
int rc = zmq_msg_close (this);
if (rc != 0)
throw error_t ();
rc = zmq_msg_init_data (this, data_, size_, ffn_, hint_);
if (rc != 0)
throw error_t ();
}
inline void move (message_t *msg_)
{
int rc = zmq_msg_move (this, (zmq_msg_t*) msg_);
if (rc != 0)
throw error_t ();
}
inline void copy (message_t *msg_)
{
int rc = zmq_msg_copy (this, (zmq_msg_t*) msg_);
if (rc != 0)
throw error_t ();
}
inline void *data ()
{
return zmq_msg_data (this);
}
inline size_t size ()
{
return zmq_msg_size (this);
}
private:
// Disable implicit message copying, so that users won't use shared
// messages (less efficient) without being aware of the fact.
message_t (const message_t&);
void operator = (const message_t&);
};
class context_t
{
friend class socket_t;
public:
inline context_t (int io_threads_)
{
ptr = zmq_init (io_threads_);
if (ptr == NULL)
throw error_t ();
}
inline ~context_t ()
{
int rc = zmq_term (ptr);
assert (rc == 0);
}
// Be careful with this, it's probably only useful for
// using the C api together with an existing C++ api.
// Normally you should never need to use this.
inline operator void* ()
{
return ptr;
}
private:
void *ptr;
context_t (const context_t&);
void operator = (const context_t&);
};
class socket_t
{
public:
inline socket_t (context_t &context_, int type_)
{
ptr = zmq_socket (context_.ptr, type_);
if (ptr == NULL)
throw error_t ();
}
inline ~socket_t ()
{
close();
}
inline operator void* ()
{
return ptr;
}
inline void close()
{
if(ptr == NULL)
// already closed
return ;
int rc = zmq_close (ptr);
if (rc != 0)
throw error_t ();
ptr = 0 ;
}
inline void setsockopt (int option_, const void *optval_,
size_t optvallen_)
{
int rc = zmq_setsockopt (ptr, option_, optval_, optvallen_);
if (rc != 0)
throw error_t ();
}
inline void getsockopt (int option_, void *optval_,
size_t *optvallen_)
{
int rc = zmq_getsockopt (ptr, option_, optval_, optvallen_);
if (rc != 0)
throw error_t ();
}
inline void bind (const char *addr_)
{
int rc = zmq_bind (ptr, addr_);
if (rc != 0)
throw error_t ();
}
inline void connect (const char *addr_)
{
int rc = zmq_connect (ptr, addr_);
if (rc != 0)
throw error_t ();
}
inline bool send (message_t &msg_, int flags_ = 0)
{
int rc = zmq_send (ptr, &msg_, flags_);
if (rc == 0)
return true;
if (rc == -1 && zmq_errno () == EAGAIN)
return false;
throw error_t ();
}
inline bool recv (message_t *msg_, int flags_ = 0)
{
int rc = zmq_recv (ptr, msg_, flags_);
if (rc == 0)
return true;
if (rc == -1 && zmq_errno () == EAGAIN)
return false;
throw error_t ();
}
private:
void *ptr;
socket_t (const socket_t&);
void operator = (const socket_t&);
};
}
#endif

View File

@ -3,7 +3,7 @@ lib_LTLIBRARIES = libzmq.la
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libzmq.pc
include_HEADERS = ../include/zmq.h ../include/zmq.hpp ../include/zmq_utils.h
include_HEADERS = ../include/zmq.h ../include/zmq_utils.h
if BUILD_PGM
noinst_LTLIBRARIES = libpgm.la