buildconf.sh --disable-shared --enable-static
[yazpp-moved-to-github.git] / zoom / master-header
index 1424db8..4880937 100644 (file)
@@ -1,12 +1,14 @@
-// $Id: master-header,v 1.9 2002-11-12 22:43:56 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
@@ -24,108 +26,130 @@ namespace ZOOM {
   class YAZ_EXPORT resultSet;
   class YAZ_EXPORT 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 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);
+    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);
+    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 ();
   };
 
   class YAZ_EXPORT prefixQuery : public query {
   public:
-    prefixQuery (const char *pqn);
+    prefixQuery (const std::string &pqn);
     ~prefixQuery ();
   };
 
   class YAZ_EXPORT CCLQuery : public query {
   public:
-    CCLQuery (const char *ccl, void *qualset);
+    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 ();
-    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 YAZ_EXPORT record {
-*   const resultSet *owner;
+*   const resultSet &owner;
 *   ZOOM_record r;
-*   friend class resultSet; // so it can use this constructor
-*   record::record (const resultSet *rs, ZOOM_record rec):
-*      owner (rs), r (rec) {}
   public:
-    ~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;
   };
 
+  // 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 YAZ_EXPORT systemException: public exception {
+  // systemException could be thrown for timeouts, protocol errors,
+  // network outages.
+  class YAZ_EXPORT systemException : public exception {
   public:
-    systemException ();
-    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?
   };
 
+  // bib1Exception::errcode() returns a code from the
+  // Bib-1 Diagnostic Set.
   class YAZ_EXPORT bib1Exception: public exception {
-*   const char *info;
+*   std::string info;
   public:
 *   ~bib1Exception ();
-    bib1Exception (int errcode, const char *addinfo);
-    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 YAZ_EXPORT queryException: public exception {
-*   const char *q;
+  class YAZ_EXPORT queryException : public exception {
+*   std::string q;
   public:
 *   ~queryException ();
-    enum {
-     PREFIX = 1,
-     CCL = 2
-    };
-    queryException (int qtype, const char *source);
-    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;
   };
 }