// $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.3a at // http://zoom.z3950.org/bind/cplusplus/zoom-1.3a.hh #include // for size_t #include */* * * This is a bit stupid. The fact that our ZOOM-C++ implementation is * * based on the ZOOM-C implementation is our Dirty Little Secret, and * * there is in principle no reason why client code need be bothered * * with it. Except of course that the public class declarations in * * C++ have to lay their private parts out for the world to see * * (oo-er). Hence the inclusion of * */ *#include * namespace ZOOM { // Forward declarations for type names. class YAZ_EXPORT query; class YAZ_EXPORT resultSet; class YAZ_EXPORT record; 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 (); connection (const std::string &hostname, int portnum); ~connection (); 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 { // 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 (); }; class YAZ_EXPORT prefixQuery : public query { public: prefixQuery (const std::string &pqn); ~prefixQuery (); }; class YAZ_EXPORT CCLQuery : public query { public: CCLQuery (const std::string &ccl, void *qualset); ~CCLQuery (); }; 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 (); std::string option (const std::string &key) const; bool option (const std::string &key, const std::string &val); size_t size () const; }; class YAZ_EXPORT record { * const resultSet &owner; * ZOOM_record r; public: 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 (resultSet &rs, size_t num); ~record (); syntax recsyn () const; std::string render () const; std::string rawdata () const; }; // 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); virtual ~exception (); virtual int errcode () const; virtual std::string errmsg () const; }; // systemException could be thrown for timeouts, protocol errors, // network outages. class YAZ_EXPORT systemException : public exception { public: systemException (); // Uses value of system `errno' systemException (int code); * virtual std::string errmsg () const; // Why do I have to repeat this? }; // bib1Exception::errcode() returns a code from the // Bib-1 Diagnostic Set. class YAZ_EXPORT bib1Exception: public exception { * std::string info; public: * ~bib1Exception (); bib1Exception (int code, const std::string &addinfo); * virtual std::string errmsg () const; // Why do I have to repeat this? std::string addinfo () const; }; class YAZ_EXPORT queryException : public exception { * std::string q; public: * ~queryException (); 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; }; }