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

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. #ifndef NEWDATA_HXX_
  2. #define NEWDATA_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 NewData_hxx_Version =
  53.     "$Id: NewData.hxx,v 1.12 2001/04/27 01:11:56 bko Exp $";
  54. //Authors: Sunitha Kumar, Cullen Jennings
  55. #if defined (__SUNPRO_CC)
  56. #define USE_HASH_MAP 0
  57. #else
  58. #define USE_HASH_MAP 1
  59. #endif
  60. #include <cstring>
  61. #include <string>
  62. #include "mstring.hxx"
  63. #include "VException.hxx"
  64. #include "DataException.hxx"
  65. /** This will eventually implemented the copy on write, reference
  66.     counted smart buffer scheme
  67. */
  68. class NewData
  69. {
  70.     public:
  71.         static const int npos = INT_MAX;
  72.         // creation members.
  73.         ///
  74.         //Data( const string& str);
  75.         ///
  76.         NewData( );
  77.         ///
  78.         NewData( const char* str );
  79.         ///
  80.         NewData( const char* buffer, int length );
  81.         ///
  82.         NewData( const NewData& data );
  83.         ///
  84.         NewData( const string& str);
  85.         ///
  86.         NewData( const mstring& mstr);
  87.         ///
  88.         NewData( const int value);
  89.         ///
  90.         ~NewData();
  91.         ///
  92.         bool operator>(const NewData& ) const ;
  93.         ///
  94.         bool operator<(const NewData& ) const;
  95.         ///
  96.         NewData& operator=(const char* str);
  97.         ///
  98.         NewData& operator=(const NewData& data);
  99.         ///
  100.         //Data& operator=(const string& str);
  101.         /// getData returns a NUL terminated (e.g. a C string) buffer
  102.         const char* getData() const;
  103.         /** getDataBuf differs from getData in that the resultant buffer is NOT
  104.         NUL terminated */
  105.         const char* getDataBuf() const;
  106.         ///
  107.         //void substr( int start, int length , char* str) const;
  108.         //char* substr( int start, int length ) const;
  109.         ///
  110.         char getChar( int i ) const;  //return the i'th char of string.
  111.         ///
  112.         void setchar( int i, char c );  //write to the i'th char of string.
  113.         ///
  114.         char operator[]( int i );  //return the i'th char of string.
  115.         ///
  116.         int length() const;
  117.         ///
  118.         bool operator==( const char* str ) const;
  119.         ///
  120.         bool operator==( const NewData& data ) const;
  121.         ///
  122.         //bool operator==(const string& second );
  123.         ///
  124.         bool operator!=( const char* str ) const;
  125.         ///
  126.         bool operator!=( const NewData& data ) const;
  127.         /// friend to compare a c-style string to a data (avoids conversion)
  128.         friend bool operator==( const char* str, const NewData& d );
  129.         /// friend to compare a c-style string to a data (avoids conversion)
  130.         friend bool operator!=( const char* str, const NewData& d );
  131.         ///
  132.         int compare(const char* str, int length) const;
  133.         ///
  134.         int compare(const NewData& data) const;
  135.         ///
  136.         int compareNoCase(const char* str, int length) const;
  137.         ///
  138.         int compareNoCase(const NewData& data) const;
  139. ///
  140.         NewData operator+( const NewData& data) const;
  141.         ///
  142.         NewData operator+( const char* str) const;
  143.         //modification members
  144.         ///
  145.         void operator+=(const NewData&);
  146.         ///
  147.         void operator+=(const char*);
  148.         ///
  149.         void erase();
  150. /// convert Data to uppercase
  151. void lowercase();
  152. /// convert Data to lowercase
  153. void uppercase();
  154.         // conversion operators
  155.         ///
  156.         operator string() const;
  157.         ///
  158.         operator const char*() const;
  159.         ///
  160.         operator mstring() const;
  161.         ///
  162.         operator int() const;
  163.         /** match the string and return the text prior to the match.
  164.          *  If a match is found, this Data is set to the remainder
  165.          *  after the matched string.
  166.          *
  167.          *  @param match         the string to be matched
  168.          *  @param beforeMatch   the data before the matched string
  169.          *  @param replace       whether to replace the matched data
  170.          *  @param replaceWith   the data to replace the matched data
  171.          */
  172.         int match(const char* match,
  173.                   NewData* data,
  174.                   bool replace = false,
  175.                   NewData replaceWith = "");
  176. /** 
  177.     match (and eat) the first contiguous block composed of the
  178.     characters in match, which is outside of double quotes <">
  179.     and angle brackets "<" and ">". Returned is the data
  180.     before the matched characters.  If no characters match,
  181.     return the empty Data.  If matchFail is set to a bool ptr,
  182.     the bool *matchFail will be set to true if the match
  183.     fails, and false otherwise.
  184.             This is designed for use in separating a list of
  185.             parameters at the commas (e.g. Contact:)
  186. */
  187. NewData parseOutsideQuotes(const char* match, 
  188.                                            bool useQuote,
  189.                                            bool useAngle,
  190.                                            bool* matchFail = 0 );
  191. /** 
  192.     match (and eat) the first contiguous block composed of the
  193.     characters in match. Returned is the data before the
  194.     matched characters.  If no characters match, return the
  195.     empty Data.  If matchFail is set to a bool ptr, the bool
  196.     *matchFail will be set to true if the match fails, and
  197.     false otherwise.
  198. */
  199. NewData parse(const char* match, bool* matchFail = 0 );
  200. /** match (and eat) any one of the characters in match.  If
  201.     matchedChar points to a char, it will be set to the
  202.     matching character, or  if not matched to anything.
  203.     Returns characters before the match, or the empty string
  204.     if no characters match.
  205. */
  206. NewData matchChar(const char* match, char* matchedChar = 0);
  207. /** get the next line in the text, delimited by rn or n .
  208.     Differs from parse("rn", matchFail) in that if there is
  209.     a blank line (which has the contiguous text rnrn),
  210.     parse will merely skip the empty line, while getLine will
  211.     return the empty line as an empty Data.
  212. */
  213. NewData getLine(bool* matchFail = 0 );
  214.         /// removes spaces before and after a string.
  215.         void removeSpaces();
  216.         /// remove leading white space.
  217.         void removeLWS();
  218.         /// expand expands headers (depreciated)
  219.         void expand(NewData startFrom,
  220.                     NewData findstr,
  221.                     NewData replstr,
  222.                     NewData delimiter);
  223.         /// do a case-insensitive match
  224.         friend bool isEqualNoCase( const NewData& left, const NewData& right ) ;
  225.         /// do a case-insensitive match
  226.         friend bool isEqualNoCase( const char* left, const NewData& right ) ;
  227.         /// find a string in the object
  228.         int find( const NewData& match, int start = npos );
  229.         /// find a string in the object
  230.         int find( const char* match, int start = npos );
  231. ///
  232. friend ostream& operator<<(ostream& s, const NewData& data);
  233.     private:
  234.         ///
  235. void truncate(int first, int last);
  236.         ///
  237.         void replace(int startpos, int endpos, const NewData& replaceStr);
  238.         char* buf;
  239.         int buflen;
  240.         int boundary( int len ) const;
  241. };
  242. #endif