SWIinputStream.hpp
上传用户:xqtpzdz
上传日期:2022-05-21
资源大小:1764k
文件大小:7k
源码类别:

xml/soap/webservice

开发平台:

Visual C++

  1. /****************License************************************************
  2.  * Vocalocity OpenVXI
  3.  * Copyright (C) 2004-2005 by Vocalocity, Inc. All Rights Reserved.
  4.  * This program is free software; you can redistribute it and/or
  5.  * modify it under the terms of the GNU General Public License
  6.  * as published by the Free Software Foundation; either version 2
  7.  * of the License, or (at your option) any later version.
  8.  *  
  9.  * This program is distributed in the hope that it will be useful,
  10.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  * GNU General Public License for more details.
  13.  *
  14.  * You should have received a copy of the GNU General Public License
  15.  * along with this program; if not, write to the Free Software
  16.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  17.  * Vocalocity, the Vocalocity logo, and VocalOS are trademarks or 
  18.  * registered trademarks of Vocalocity, Inc. 
  19.  * OpenVXI is a trademark of Scansoft, Inc. and used under license 
  20.  * by Vocalocity.
  21.  ***********************************************************************/
  22. #ifndef SWIinputStream_HPP
  23. #define SWIinputStream_HPP
  24. #include <SWIstream.hpp>
  25. class SWIoutputStream;
  26. /**
  27.  * Abstract input stream class.  The basic method that sub-classes need to
  28.  * re-implement is the <code>read</code> method.
  29.  *
  30.  *
  31.  * @doc <p>
  32.  * Copyright 2004 Vocalocity, Inc.
  33.  *  All Rights Reserved.
  34.  **/
  35. class SWIUTIL_API_CLASS SWIinputStream: public SWIstream
  36. {
  37.   // ................. CONSTRUCTORS, DESTRUCTOR  ............
  38.   //
  39.   // ------------------------------------------------------------
  40.   /// default constructor
  41.  public:
  42.   SWIinputStream()
  43.   {}
  44.   // ------------------------------------------------------------
  45.   /// destructor
  46.  public:
  47.   virtual ~SWIinputStream()
  48.   {}
  49.   //
  50.   // ......... DATA MEMBERS, GETTERS, SETTERS  .......
  51.   //
  52.   //
  53.   // ......... METHODS ..........
  54.   //
  55.   /**
  56.    * Reads some number of bytes from the input stream and stores them into the
  57.    * buffer array <code>data</code>.  @doc The number of bytes actually read
  58.    * is returned as an integer.  In blocking mode, this method blocks until
  59.    * data is available, end of file is detected, or an error is detected.
  60.    * Otherwise it returns immediately after having read available bytes.
  61.    *
  62.    * <p> If <code>data</code> is <code>null</code>, a
  63.    * <code>SWI_STREAM_INVALID_ARGUMENT</code> is returned.  If
  64.    * <code>dataSize</code> of is zero, then no bytes are read and
  65.    * <code>0</code> is returned; otherwise, there is an attempt to read at
  66.    * least one byte. If no byte is available because the stream is at end of
  67.    * file, the value <code>SWI_STREAM_EOF</code> is returned. If the stream
  68.    * is not opened, <code>SWI_STREAM_ILLEGAL_STATE</code> is returned.
  69.    *
  70.    * @param data [out] the buffer into which the data is read.
  71.    * @param dataSize [in] the number of bytes to be read.
  72.    * @return the total number of bytes read into the buffer, or a negative
  73.    * number indicating there is no more data because the end of the stream has
  74.    * been reached, or to indicate an error.
  75.    **/
  76.  public:
  77.   virtual int readBytes(void* data, int dataSize) = 0;
  78.   /**
  79.    * Reads one character from the stream.
  80.    * Returns either a non-negative number that can be cast to a char or a negative
  81.    * number representing an error.  See SWIstream.hpp for error codes.
  82.    * Default implementation calls readBytes with dataSize of 1 and returns the character read.
  83.    * Subclass can re-implement this for better efficiency.
  84.    **/
  85.  public:
  86.   virtual int read();
  87.   /**
  88.    * Skips over and discards <code>n</code> bytes of data from this input
  89.    * stream.  @doc The <code>skip</code> method may end up skipping over some
  90.    * smaller number of bytes, possibly <code>0</code>.  This may result from
  91.    * reaching end of file before <code>n</code> bytes have been skipped.  The
  92.    * actual number of bytes skipped is returned.  If <code>n</code> is
  93.    * negative, no bytes are skipped.  The default implementation just attemps
  94.    * to read up to <code>n</code> bytes into a buffer and discards the buffer.
  95.    * Subclasses can re-implement this method for better efficiency.
  96.    *
  97.    * @param n [in] the number of bytes to be skipped.
  98.    * @return the actual number of bytes skipped, or a negative number
  99.    * indicating an error.
  100.    **/
  101.  public:
  102.   virtual int skip(int n);
  103.   /**
  104.    * Reads a line of text.  A line is considered to be terminated by any one
  105.    * of a line feed ('n'), a carriage return ('r'), or a carriage return
  106.    * followed immediately by a linefeed.  The carriage return and line feed
  107.    * are extracted from the stream but not stored.
  108.    *
  109.    * returns the number of characters in the string, or a negative number
  110.    * representing the cause of the error. See SWIstream.hpp for error codes.
  111.    * In any case the string is 0-terminated.  In particular, if we exceed the
  112.    * buffer capacity before reaching the end of line, the BUFFER_OVERFLOW
  113.    * value is returned.
  114.    *
  115.    * If the stream does not support lookAhead, then a NOT_SUPPORTED error is
  116.    * returned.
  117.    *
  118.    **/
  119.  public:
  120.   virtual int readLine(char *buffer, int bufSize);
  121.   /**
  122.    * Reads a line of text and store the result into an OutputStream.
  123.    *
  124.    * Returns the number of characters that have been successfully put into the
  125.    * stream.
  126.    * If the stream does not support lookAhead, then a NOT_SUPPORTED error is
  127.    * returned.
  128.    **/
  129.  public:
  130.   virtual int readLine(SWIoutputStream& out);
  131.   /**
  132.    * Looks at the stream for look-ahead character.
  133.    *
  134.    * @param offset The offset compared to the current read position in the
  135.    * stream.  An offset of 0 means the character that would be returned by the
  136.    * next read().
  137.    *
  138.    * @return Returns either a positive number that can be cast to a char or a
  139.    * negative number representing an error.  If offset is negative or not
  140.    * smaller than the value returned by getLookAhead(), then INVALID_ARGUMENT
  141.    * is returned.
  142.    * Default implementation returns NOT_SUPPORTED.  See SWIstream.hpp for
  143.    * error codes.
  144.    **/
  145.  public:
  146.   virtual int peek(int offset = 0) const;
  147.   /**
  148.    * Returns the maximum look ahead allowed by the stream.  The default
  149.    * implementation returns 0, this method should be re-implemented subclasses
  150.    * that allow look ahead.
  151.    **/
  152.  public:
  153.   virtual int getLookAhead() const;
  154.   /**
  155.    * Returns true if this InputStream is an instance of SWIbufferedStream and
  156.    * can be safely cast to a SWIbufferedStream.  This implementation returns
  157.    * false.
  158.    **/
  159.  public:
  160.   virtual bool isBuffered() const;
  161.   /**
  162.    * Waits until some bytes are available for reading or the specified timeout
  163.    * expires.
  164.    *
  165.    * @param timeoutMs timeout, if less than 0, no timeout, a value of 0 means
  166.    * polling, verify the state of the stream and return immediately.
  167.    *
  168.    * Returns SUCCESS if the stream is ready, TIMED_OUT if the delay has
  169.    * expired or any other Stream::Result value to indicate a failure.
  170.    *
  171.    * Default implementation returns SWIstream::SUCCESS.
  172.    **/
  173.  public:
  174.   virtual Result waitReady(long delayMs = -1);
  175.   /**
  176.    * Closes this input stream and releases any system resources associated
  177.    * with the stream.
  178.    *
  179.    **/
  180.  public:
  181.   virtual Result close() = 0;
  182. };
  183. #endif