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

流媒体/Mpeg4/MP4

开发平台:

C/C++

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