-// $Header: /home/cvsroot/yaz++/zoom/master-header,v 1.2 2002-08-08 16:06:08 mike Exp $
+// $Id: master-header,v 1.17 2003-09-24 18:07:31 adam Exp $
//
// ZOOM C++ Binding.
// The ZOOM homepage is at http://zoom.z3950.org/
//
-// Derived from version 1.0g at
-// http://zoom.z3950.org/bind/cplusplus/zoom-1.0g.hh
+// Derived from version 1.3a at
+// http://zoom.z3950.org/bind/cplusplus/zoom-1.3a.hh
#include <stddef.h> // for size_t
+#include <string>
+
*/*
* * This is a bit stupid. The fact that our ZOOM-C++ implementation is
*
namespace ZOOM {
// Forward declarations for type names.
- class query;
- class resultSet;
- class record;
-
- const char *option (const char *key);
- const char *option (const char *key, const char *val);
- int errcode ();
- char *errmsg ();
- char *addinfo ();
+ class YAZ_EXPORT query;
+ class YAZ_EXPORT resultSet;
+ class YAZ_EXPORT record;
- class connection {
+ class YAZ_EXPORT connection {
* ZOOM_connection c;
+* friend class resultSet; // so it can use _getYazConnection()
+* ZOOM_connection _getYazConnection () const { return c; }
+ // connections are non-copyable.
+ connection (const connection &);
+ connection &operator= (const connection &);
public:
- connection (const char *hostname, int portnum);
- // ### I would like to add a ``throw (ZOOM::exception)'' clause
- // here, but it looks like G++ 2.95.2 doesn't recognise it.
+ connection ();
+ connection (const std::string &hostname, int portnum);
~connection ();
- const char *option (const char *key) const;
- const char *option (const char *key, const char *val);
-* ZOOM_connection _getYazConnection () const { return c; } // package-private
+ void connect (const std::string &hostname, int portnum);
+ std::string option (const std::string &key) const;
+ bool option (const std::string &key, const std::string &val);
};
class query {
- // pure virtual class: derive concrete subclasses from it.
+ // base class for all query types
+* friend class resultSet; // so it can use _getYazQuery()
+* ZOOM_query _getYazQuery () const { return q; }
* protected:
* ZOOM_query q;
public:
+ query ();
virtual ~query ();
-* ZOOM_query _getYazQuery () const { return q; } // package-private
};
- class prefixQuery : public query {
+ class YAZ_EXPORT prefixQuery : public query {
public:
- prefixQuery (const char *pqn);
+ prefixQuery (const std::string &pqn);
~prefixQuery ();
};
- class CCLQuery : public query {
+ class YAZ_EXPORT CCLQuery : public query {
public:
- CCLQuery (const char *ccl, void *qualset);
+ CCLQuery (const std::string &ccl, void *qualset);
~CCLQuery ();
};
- class resultSet {
+ class YAZ_EXPORT resultSet {
* connection &owner;
* ZOOM_resultset rs;
+* friend class record; // for _getYazResultSet() & _getYazConnection()
+* ZOOM_resultset _getYazResultSet () const { return rs; }
+* ZOOM_connection _getYazConnection () const {
+* return owner._getYazConnection(); }
+ // resultSets are non-copyable.
+ resultSet (const resultSet &);
+ resultSet &operator= (const resultSet &);
public:
resultSet (connection &c, const query &q);
~resultSet ();
- const char *option (const char *key) const;
- const char *option (const char *key, const char *val);
+ std::string option (const std::string &key) const;
+ bool option (const std::string &key, const std::string &val);
size_t size () const;
- const record *getRecord (size_t i) const;
};
- class record {
-* const resultSet *owner;
+ class YAZ_EXPORT record {
+* const resultSet &owner;
* ZOOM_record r;
public:
-* record::record (const resultSet *rs, ZOOM_record rec):
-* owner (rs), r (rec) {}
- ~record ();
- enum syntax {
- UNKNOWN, GRS1, SUTRS, USMARC, UKMARC, XML
+ class YAZ_EXPORT syntax {
+ public:
+ enum value {
+ UNKNOWN, GRS1, SUTRS, USMARC, UKMARC, XML
+ };
+* private:
+* enum value val;
+* public:
+ syntax (value rs);
+ operator std::string () const;
+ bool operator== (const syntax &s) const;
+ bool operator== (value rs) const;
+ operator value () const;
};
- record *clone () const;
+
+ record (resultSet &rs, size_t num);
+ ~record ();
syntax recsyn () const;
- const char *render () const;
- const char *rawdata () const;
+ std::string render () const;
+ std::string rawdata () const;
};
- class exception {
+ // Base exception class; from which all other ZOOM exceptions
+ // are derived. Other classes that use this as their base
+ // class may want to provide their own errcode() and errmsg()
+ // functions -- hence they are made virtual.
+ class YAZ_EXPORT exception {
* protected:
* int code;
public:
exception (int code);
- int errcode () const;
- const char *errmsg () const;
+ virtual ~exception ();
+ virtual int errcode () const;
+ virtual std::string errmsg () const;
};
- class systemException: public exception {
+ // systemException could be thrown for timeouts, protocol errors,
+ // network outages.
+ class YAZ_EXPORT systemException : public exception {
public:
- systemException ();
- int errcode () const;
- const char *errmsg () const;
+ systemException (); // Uses value of system `errno'
+ systemException (int code);
+* virtual std::string errmsg () const; // Why do I have to repeat this?
};
- class bib1Exception: public exception {
-* const char *info;
+ // bib1Exception::errcode() returns a code from the
+ // Bib-1 Diagnostic Set.
+ class YAZ_EXPORT bib1Exception: public exception {
+* std::string info;
public:
* ~bib1Exception ();
- bib1Exception (int errcode, const char *addinfo);
- int errcode () const;
- const char *errmsg () const;
- const char *addinfo () const;
+ bib1Exception (int code, const std::string &addinfo);
+* virtual std::string errmsg () const; // Why do I have to repeat this?
+ std::string addinfo () const;
};
- class queryException: public exception {
-* const char *q;
+ class YAZ_EXPORT queryException : public exception {
+* std::string q;
public:
* ~queryException ();
- static const int PREFIX = 1;
- static const int CCL = 2;
- queryException (int qtype, const char *source);
- int errcode () const;
- const char *errmsg () const;
- const char *addinfo () const;
+ enum { PREFIX, CCL };
+ queryException (int qtype, const std::string &source);
+* virtual std::string errmsg () const; // Why do I have to repeat this?
+ std::string addinfo () const;
};
}