Data.hxx
上传用户:sy_wanhua
上传日期:2013-07-25
资源大小:3048k
文件大小:11k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. #ifndef DATA_HXX_
  2. #define DATA_HXX_
  3. /* ====================================================================
  4.  * The Vovida Software License, Version 1.0 
  5.  * 
  6.  * Copyright (c) 2000 Vovida Networks, Inc.  All rights reserved.
  7.  * 
  8.  * Redistribution and use in source and binary forms, with or without
  9.  * modification, are permitted provided that the following conditions
  10.  * are met:
  11.  * 
  12.  * 1. Redistributions of source code must retain the above copyright
  13.  *    notice, this list of conditions and the following disclaimer.
  14.  * 
  15.  * 2. Redistributions in binary form must reproduce the above copyright
  16.  *    notice, this list of conditions and the following disclaimer in
  17.  *    the documentation and/or other materials provided with the
  18.  *    distribution.
  19.  * 
  20.  * 3. The names "VOCAL", "Vovida Open Communication Application Library",
  21.  *    and "Vovida Open Communication Application Library (VOCAL)" must
  22.  *    not be used to endorse or promote products derived from this
  23.  *    software without prior written permission. For written
  24.  *    permission, please contact vocal@vovida.org.
  25.  *
  26.  * 4. Products derived from this software may not be called "VOCAL", nor
  27.  *    may "VOCAL" appear in their name, without prior written
  28.  *    permission of Vovida Networks, Inc.
  29.  * 
  30.  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
  31.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  32.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND
  33.  * NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL VOVIDA
  34.  * NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES
  35.  * IN EXCESS OF $1,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL,
  36.  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  37.  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  38.  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  39.  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  40.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
  41.  * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
  42.  * DAMAGE.
  43.  * 
  44.  * ====================================================================
  45.  * 
  46.  * This software consists of voluntary contributions made by Vovida
  47.  * Networks, Inc. and many individuals on behalf of Vovida Networks,
  48.  * Inc.  For more information on Vovida Networks, Inc., please see
  49.  * <http://www.vovida.org/>.
  50.  *
  51.  */
  52. static const char* const Data_hxx_version =
  53.     "$Id: Data.hxx,v 1.64 2001/04/27 11:02:51 bko Exp $";
  54. //Authors: Sunitha Kumar, Cullen Jennings
  55. #ifdef CODE_OPTIMIZE
  56. // set USE_INLINE_COWDATA to 1 to inline the copy-on-write
  57. // implementation, using thread-safe buffers .
  58. #define USE_INLINE_COWDATA 1
  59. #else
  60. // set USE_INLINE_COWDATA to 0 to use a wrapper class to allow easy
  61. // changes to the code
  62. #define USE_INLINE_COWDATA 0
  63. #endif
  64. #if USE_INLINE_COWDATA
  65. #include "CopyOnWriteData.hxx"
  66. typedef CopyOnWriteData Data;
  67. #else
  68. // this is the slow one
  69. #include <string>
  70. #include "mstring.hxx"
  71. #include "VException.hxx"
  72. #include "DataException.hxx"
  73. /** Class for representing binary data and strings, in a thread-safe
  74.  ** manner.
  75. */
  76. class Data
  77. {
  78.     public:
  79.         /// Default constructor
  80.         Data( );
  81.         /** constructor for C style strings
  82.  ** @param str      null-terminated (C style) character array
  83.  */
  84.         Data( const char* str );
  85.         /** constructor for character arrays with length 
  86.  **  @param buffer character array 
  87.  **  @param len    size of buffer
  88.  */
  89.         Data( const char* buffer, int len );
  90.         /// copy constructor
  91.         Data( const Data& data );
  92.         /** constructor for C++ strings
  93.  */
  94.         Data( const string& str);
  95.         /** constructor for mstring (a specialization of C++ strings)
  96.  */
  97.         Data( const mstring& mstr);
  98.         /// constructor that converts an int to a Data
  99.         Data( const int value);
  100.         /// destructor
  101.         ~Data();
  102.         /** compares two Data objects, returning the value of a
  103.  * dictionary comparison of the two strings
  104.  */
  105.         bool operator>(const Data& ) const ;
  106.         /** compares two Data objects, returning the value of a
  107.  * dictionary comparison of the two strings
  108.  */
  109.         bool operator<(const Data& ) const;
  110.         /** assignment operator
  111.  ** @param str   C string character array
  112.  */
  113.         /** compares two Data objects, returning the value of a
  114.  * dictionary comparison of the two strings
  115.  */
  116.         bool operator>(const char* ) const ;
  117.         /** compares two Data objects, returning the value of a
  118.  * dictionary comparison of the two strings
  119.  */
  120.         bool operator<(const char* ) const;
  121.         /** assignment operator
  122.  ** @param str   C string character array
  123.  */
  124.         Data& operator=(const char* str);
  125.         /** assignment operator
  126.  ** @param data   Data object
  127.  */
  128.         Data& operator=(const Data& data);
  129.         /// returns a NUL terminated (a C string) buffer
  130.         const char* getData() const;
  131.         /** returns a pointer to the buffer.  Note that this buffer is
  132.          ** NOT NUL terminated (not a C string).
  133.  */
  134.         const char* getDataBuf() const;
  135.         /** return one character from the string
  136.  ** @param i   index into the Data object
  137.  */
  138.         char getChar( int i ) const;  
  139.         /** return one character from the string
  140.  ** @param i   index into the Data object
  141.  ** @param c   character to set
  142.  */
  143.         void setchar( int i, char c );
  144.         /** return one character from the string
  145.  ** @param i   index into the Data object
  146.  */
  147.         char operator[]( int i );
  148.         /// length of the Data object
  149.         int length() const;
  150.         /** suggest a size for the underlying buffer (optimizes
  151.          ** performance in some implementations)
  152.          */
  153.         void setBufferSize(int size);
  154.         /** equality operator
  155.  ** @param str   C string to compare to
  156.  */
  157.         bool operator==( const char* str ) const;
  158.         /** equality operator
  159.  ** @param data   Data to compare to
  160.  */
  161.         bool operator==( const Data& data ) const;
  162.         /// inequality operator
  163.         bool operator!=( const char* str ) const;
  164.         /// inequality operator
  165.         bool operator!=( const Data& data ) const;
  166.         /// friend to compare a c-style string to a data (avoids conversion)
  167.         friend bool operator==( const char* str, const Data& d );
  168.         /// friend to compare a c-style string to a data (avoids conversion)
  169.         friend bool operator!=( const char* str, const Data& d );
  170.         /** concatenate two Data objects together.  Warning -- this
  171.  * creates an extra copy of the Data object, so it is not
  172.  * terribly efficient.  If possible, it is better to use +=
  173.  * instead.
  174.  */
  175.         Data operator+( const Data& data) const;
  176.         /** concatenate a Data object and a C-style string together.
  177.  * Warning -- this creates an extra copy of the Data object,
  178.  * so it is not terribly efficient.  If possible, it is better
  179.  * to use += instead.
  180.  */
  181.         Data operator+( const char* str) const;
  182.         /** append a Data object d to this Data.
  183.  ** this is potentially much more efficient than operator+().
  184.  */
  185.         void operator+=(const Data& d);
  186.         /** append a string s to this Data.
  187.  ** this is potentially much more efficient than operator+().
  188.  */
  189.         void operator+=(const char* s);
  190. /// convert this Data to lower case
  191. void lowercase();
  192. /// convert this Data to upper case
  193. void uppercase();
  194.         /// erase this object
  195.         void erase();
  196.         /// convert to a string
  197.         operator string() const;
  198.         /// convert to a C style character array
  199.         operator const char*() const;
  200.         /// convert to an mstring
  201.         operator mstring() const;
  202.         /// convert to an int (depreciated)
  203.         operator int() const;
  204. /** 
  205.     match (and eat) the first contiguous block composed of the
  206.     characters in match, which is outside of double quotes <">
  207.     and angle brackets "<" and ">". Returned is the data
  208.     before the matched characters.  If no characters match,
  209.     return the empty Data.  If matchFail is set to a bool ptr,
  210.     the bool *matchFail will be set to true if the match
  211.     fails, and false otherwise.
  212.             This is designed for use in separating a list of
  213.             parameters at the commas (e.g. Contact:)
  214. */
  215. Data parseOutsideQuotes(const char* match, 
  216.                                 bool useQuote, 
  217.                                 bool useAngle, 
  218.                                 bool* matchFail = 0 );
  219. /** 
  220.     match (and eat) the first contiguous block of the
  221.     characters in match. Returned is the data before the
  222.     matched characters.  If no characters match, return the
  223.     empty Data.  If matchFail is set to a bool ptr, the bool
  224.     *matchFail will be set to true if the match fails, and
  225.     false otherwise.
  226. */
  227. Data parse(const char* match, bool* matchFail = 0);
  228. /** match (and eat) any one of the characters in match.  If
  229.     matchedChar points to a char, it will be set to the
  230.     matching character, or  if not matched to anything.
  231.     Returns characters before the match, or the empty string
  232.     if no characters match.
  233. */
  234. Data matchChar(const char* match, char* matchedChar = 0);
  235. /** get the next line in the text, delimited by rn or n .
  236.     Differs from parse("rn", matchFail) in that if there is
  237.     a blank line (which has the contiguous text rnrn),
  238.     parse will merely skip the empty line, while getLine will
  239.     return the empty line as an empty Data.
  240. */
  241. Data getLine(bool* matchFail = 0);
  242.         /** match the string and return the text prior to the match.
  243.          *  If a match is found, this Data is set to the remainder
  244.          *  after the matched string.
  245.          *
  246.          *  @param match         the string to be matched
  247.          *  @param beforeMatch   the data before the matched string
  248.          *  @param replace       whether to replace the matched data
  249.          *  @param replaceWith   the data to replace the matched data
  250.          */
  251.         int match(const char* match,
  252.                         Data* beforeMatch,
  253.                         bool replace = false,
  254.                         Data replaceWith = "");
  255.         /// removes spaces before and after a string.
  256.         void removeSpaces();
  257.         /// remove leading white space
  258.         void Data::removeLWS();
  259.         /// expand expands headers (depreciated)
  260.         void expand(Data startFrom, Data findstr, Data replstr, Data delimiter);
  261.         /// do a case-insensitive match
  262.         friend bool isEqualNoCase( const Data& left, const Data& right ) ;
  263.         /// do a case-insensitive match
  264.         friend bool isEqualNoCase( const char* left, const Data& right ) ;
  265. /// output operator
  266. friend ostream& operator<<(ostream& s, const Data& data);
  267.     private:
  268.         void* dataImpl__;
  269. };
  270. #endif
  271. /* Local Variables: */
  272. /* c-file-style: "stroustrup" */
  273. /* indent-tabs-mode: nil */
  274. /* c-file-offsets: ((access-label . -) (inclass . ++)) */
  275. /* c-basic-offset: 4 */
  276. /* End: */
  277. #endif