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

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. /* ====================================================================
  2.  * The Vovida Software License, Version 1.0 
  3.  * 
  4.  * Copyright (c) 2000 Vovida Networks, Inc.  All rights reserved.
  5.  * 
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  * 
  10.  * 1. Redistributions of source code must retain the above copyright
  11.  *    notice, this list of conditions and the following disclaimer.
  12.  * 
  13.  * 2. Redistributions in binary form must reproduce the above copyright
  14.  *    notice, this list of conditions and the following disclaimer in
  15.  *    the documentation and/or other materials provided with the
  16.  *    distribution.
  17.  * 
  18.  * 3. The names "VOCAL", "Vovida Open Communication Application Library",
  19.  *    and "Vovida Open Communication Application Library (VOCAL)" must
  20.  *    not be used to endorse or promote products derived from this
  21.  *    software without prior written permission. For written
  22.  *    permission, please contact vocal@vovida.org.
  23.  *
  24.  * 4. Products derived from this software may not be called "VOCAL", nor
  25.  *    may "VOCAL" appear in their name, without prior written
  26.  *    permission of Vovida Networks, Inc.
  27.  * 
  28.  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
  29.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  30.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND
  31.  * NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL VOVIDA
  32.  * NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES
  33.  * IN EXCESS OF $1,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL,
  34.  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  35.  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  36.  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  37.  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  38.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
  39.  * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
  40.  * DAMAGE.
  41.  * 
  42.  * ====================================================================
  43.  * 
  44.  * This software consists of voluntary contributions made by Vovida
  45.  * Networks, Inc. and many individuals on behalf of Vovida Networks,
  46.  * Inc.  For more information on Vovida Networks, Inc., please see
  47.  * <http://www.vovida.org/>.
  48.  *
  49.  */
  50. static const char* const Data_cxx_Version =
  51.     "$Id: Data.cxx,v 1.74 2001/06/27 22:56:20 bko Exp $";
  52. //Authors: Sunitha Kumar, Cullen Jennings
  53. //#include <cstdio>
  54. //#include <ctype.h>
  55. //#include "cpLog.h"
  56. #include "Data.hxx"
  57. #if !USE_INLINE_COWDATA
  58. // define this to use the StringData.hxx (using C++ strings) as the
  59. // underlying mechanism
  60. #ifdef WIN32
  61. #define USE_STRING_DATA 1
  62. #define USE_COPY_ON_WRITE_DATA 0
  63. #else
  64. #define USE_STRING_DATA 0
  65. // define this to use the CopyOnWriteData.hxx (thread-safe internal
  66. // buffer representation) as the underlying mechanism
  67. #define USE_COPY_ON_WRITE_DATA 1
  68. #endif //WIN32
  69. #if USE_STRING_DATA
  70. # include "StringData.hxx"
  71. typedef StringData DataImplType;
  72. #else
  73. # if USE_COPY_ON_WRITE_DATA
  74. # include "CopyOnWriteData.hxx"
  75. typedef CopyOnWriteData DataImplType;
  76. # else
  77. # include "NewData.hxx"
  78. typedef NewData DataImplType;
  79. # endif 
  80. #endif
  81. #include "DataException.hxx"
  82. Data::Data()
  83. {
  84.     dataImpl__ = new DataImplType;
  85. }
  86. Data::Data( const char* str, int length )
  87. {
  88.     dataImpl__ = new DataImplType(str, length);
  89. }
  90. Data::Data( const char* str )
  91. {
  92.     dataImpl__ = new DataImplType(str);
  93. }
  94. Data::Data( const string& str)
  95. {
  96.     dataImpl__ = new DataImplType(str);
  97. }
  98. Data::Data( const mstring& mstr)
  99. {
  100.     dataImpl__ = new DataImplType(mstr);
  101. }
  102. Data::Data( int value)
  103. {
  104.     dataImpl__ = new DataImplType(value);
  105. }
  106. Data::Data( const Data& data )
  107. {
  108.     dataImpl__ 
  109. = new DataImplType( *(static_cast < DataImplType* > (data.dataImpl__)) );
  110. }
  111. Data&
  112. Data::operator=( const char* str )
  113. {
  114.     static_cast < DataImplType* > (dataImpl__)->operator=(str);
  115.     return *this;
  116. }
  117. Data&
  118. Data::operator=( const Data& data )
  119. {
  120.     static_cast < DataImplType* > (dataImpl__)->
  121. operator=(*(static_cast < DataImplType* > (data.dataImpl__)));
  122.     return *this;
  123. }
  124. const char*
  125. Data::getData() const
  126. {
  127.     return static_cast < DataImplType* > (dataImpl__)->getData();
  128. }
  129. const char*
  130. Data::getDataBuf() const
  131. {
  132.     return static_cast < DataImplType* > (dataImpl__)->getDataBuf();
  133. }
  134. char
  135. Data::getChar(int i) const
  136. {
  137.     return static_cast < DataImplType* > (dataImpl__)->getChar(i);
  138. }
  139. void
  140. Data::setchar(int i, char c)
  141. {
  142.     static_cast < DataImplType* > (dataImpl__)->setchar(i, c);
  143. }
  144. char
  145. Data::operator[](int i)
  146. {
  147.     return static_cast < DataImplType* > (dataImpl__)->operator[](i);
  148. }
  149. int
  150. Data::length() const
  151. {
  152.     return static_cast < DataImplType* > (dataImpl__)->length();
  153. }
  154. void
  155. Data::setBufferSize(int size)
  156. {
  157.     static_cast < DataImplType* > (dataImpl__)->setBufferSize(size);
  158. }
  159. bool
  160. Data::operator==(const char* str) const
  161. {
  162.     return static_cast < DataImplType* > (dataImpl__)->operator==(str);
  163. }
  164. bool
  165. Data::operator==( const Data& data) const
  166. {
  167.     return static_cast < DataImplType* > (dataImpl__)->
  168. operator==(*(static_cast < DataImplType* > (data.dataImpl__)));
  169. }
  170. bool
  171. Data::operator!=(const char* str) const
  172. {
  173.     return static_cast < DataImplType* > (dataImpl__)->operator!=(str);
  174. }
  175. bool
  176. Data::operator!=(const Data& data) const
  177. {
  178.     return static_cast < DataImplType* > (dataImpl__)->operator!=(*(static_cast < DataImplType* > (data.dataImpl__)));
  179. }
  180. bool
  181. operator==(const char* s, const Data& data)
  182. {
  183.     return static_cast < DataImplType* > (data.dataImpl__)->operator==(s);
  184. }
  185. bool
  186. operator!=(const char* s, const Data& data)
  187. {
  188.     return static_cast < DataImplType* > (data.dataImpl__)->operator!=(s);
  189. }
  190. bool
  191. Data::operator>(const Data& data) const
  192. {
  193.     return static_cast < DataImplType* > (dataImpl__)->
  194. operator>(*(static_cast < DataImplType* > (data.dataImpl__)));
  195. }
  196. bool
  197. Data::operator<(const Data& data) const
  198. {
  199.     return static_cast < DataImplType* > (dataImpl__)->
  200. operator<(*(static_cast < DataImplType* > (data.dataImpl__)));
  201. }
  202. bool
  203. Data::operator>(const char* data) const
  204. {
  205.     return static_cast < DataImplType* > (dataImpl__)->
  206. operator>(data);
  207. }
  208. bool
  209. Data::operator<(const char* data) const
  210. {
  211.     return static_cast < DataImplType* > (dataImpl__)->
  212. operator<(data);
  213. }
  214. Data
  215. Data::operator+(const Data& data) const
  216. {
  217.     Data tmp;
  218.     *(static_cast < DataImplType* > (tmp.dataImpl__))
  219.     =
  220.         static_cast < DataImplType* > (dataImpl__)->operator+(
  221.             *(static_cast < DataImplType* > (data.dataImpl__)));
  222.     return ( tmp );
  223. }
  224. Data
  225. Data::operator+(const char* str) const
  226. {
  227.     Data tmp;
  228.     *(static_cast < DataImplType* > (tmp.dataImpl__))
  229.     =
  230.         static_cast < DataImplType* > (dataImpl__)->operator+(str);
  231.     return ( tmp );
  232. }
  233. void
  234. Data::operator+=(const Data& data)
  235. {
  236.     static_cast < DataImplType* > (dataImpl__)->
  237. operator+=(*(static_cast < DataImplType* > (data.dataImpl__)));
  238. }
  239. void
  240. Data::operator+=(const char* str)
  241. {
  242.     static_cast < DataImplType* > (dataImpl__)->operator+=(str);
  243. }
  244. Data::~Data()
  245. {
  246.     delete static_cast < DataImplType* > (dataImpl__);
  247. }
  248. void
  249. Data::lowercase()
  250. {
  251.     static_cast < DataImplType* > (dataImpl__)->lowercase();
  252. }
  253. void
  254. Data::uppercase()
  255. {
  256.     static_cast < DataImplType* > (dataImpl__)->uppercase();
  257. }
  258. void
  259. Data::erase()
  260. {
  261.     static_cast < DataImplType* > (dataImpl__)->erase();
  262. }
  263. Data::operator string() const
  264. {
  265.     return static_cast < DataImplType* > (dataImpl__)->operator string();
  266. }
  267. Data::operator const char*() const
  268. {
  269.     return static_cast < DataImplType* > (dataImpl__)->operator const char*();
  270. }
  271. Data::operator mstring() const
  272. {
  273.     return static_cast < DataImplType* > (dataImpl__)->operator mstring();
  274. }
  275. Data::operator int() const
  276. {
  277.     return static_cast < DataImplType* > (dataImpl__)->operator int();
  278. }
  279. int Data::match( const char* match,
  280.                  Data* retModifiedData,
  281.                  bool replace,
  282.                  Data replaceWith)
  283. {
  284.     return static_cast < DataImplType* > (dataImpl__)->
  285.         match(match,
  286.               static_cast < DataImplType* > (retModifiedData->dataImpl__),
  287.               replace,
  288.               *(static_cast < DataImplType* > (replaceWith.dataImpl__)));
  289. }
  290. Data Data::parse(const char* match, bool* matchFail )
  291. {
  292.     Data x;
  293.     *( static_cast < DataImplType* > (x.dataImpl__)) 
  294. = static_cast < DataImplType* > (dataImpl__)->parse(match, matchFail);
  295.     return x;
  296. }
  297. Data Data::parseOutsideQuotes(const char* match, bool useQuote, bool useAngle, bool* matchFail )
  298. {
  299.     Data x;
  300.     *( static_cast < DataImplType* > (x.dataImpl__)) 
  301. = static_cast < DataImplType* > (dataImpl__)->
  302.         parseOutsideQuotes(match, 
  303.                            useQuote, 
  304.                            useAngle, 
  305.                            matchFail);
  306.     return x;
  307. }
  308. Data Data::matchChar(const char* match, char* matchedChar )
  309. {
  310.     Data x;
  311.     *( static_cast < DataImplType* > (x.dataImpl__)) 
  312. = static_cast < DataImplType* > (dataImpl__)->matchChar(match, matchedChar);
  313.     return x;
  314. }
  315. Data Data::getLine(bool* matchFail )
  316. {
  317.     Data x;
  318.     *( static_cast < DataImplType* > (x.dataImpl__)) 
  319. = static_cast < DataImplType* > (dataImpl__)->getLine(matchFail);
  320.     return x;
  321. }
  322. bool isEqualNoCase(const Data& left, const Data& right )
  323. {
  324.     return isEqualNoCase(
  325.         *(static_cast < DataImplType* > (left.dataImpl__)),
  326.         *(static_cast < DataImplType* > (right.dataImpl__)));
  327. }
  328. bool isEqualNoCase(const char* left, const Data& right )
  329. {
  330.     return isEqualNoCase(
  331.         left,
  332.         *(static_cast < DataImplType* > (right.dataImpl__)));
  333. }
  334. void Data::removeSpaces()
  335. {
  336.     static_cast < DataImplType* > (dataImpl__)->removeSpaces();
  337. }
  338.     
  339.     
  340. void Data::removeLWS()
  341. {
  342. #if !USE_STRING_DATA
  343.     static_cast < DataImplType* > (dataImpl__)->removeLWS();
  344. #endif
  345. }
  346. void
  347. Data::expand(Data startFrom, Data findstr, Data replstr, Data delimiter)
  348. {
  349.     static_cast < DataImplType* > (dataImpl__)->expand(
  350.         *static_cast < DataImplType* > (startFrom.dataImpl__),
  351.         *static_cast < DataImplType* > (findstr.dataImpl__),
  352.         *static_cast < DataImplType* > (replstr.dataImpl__),
  353.         *static_cast < DataImplType* > (delimiter.dataImpl__));
  354. }
  355. ostream&
  356. operator<<(ostream& s, const Data& data)
  357. {
  358.     s << (*(static_cast < DataImplType* > (data.dataImpl__)));
  359.     return s;
  360. }
  361. /* Local Variables: */
  362. /* c-file-style:"stroustrup" */
  363. /* c-basic-offset:4 */
  364. /* c-file-offsets:((inclass . ++)) */
  365. /* indent-tabs-mode:nil */
  366. /* End: */
  367. #endif