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

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. #ifndef SUPPORT_HXX_
  2. #define SUPPORT_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 support_hxx_version =
  53.     "$Id: support.hxx,v 1.34 2001/01/23 22:40:55 bko Exp $";
  54. #include "global.h"
  55. #include <iostream>
  56. #include <stdio.h>
  57. #include <vector>
  58. #include <deque>
  59. #include <string>
  60. #include "substring.h"
  61. #include "Data.hxx"
  62. /***********************************************************************
  63.  
  64.   Utility and support functions for the stack.
  65.  
  66.  **********************************************************************/
  67. #ifndef __sparc
  68. #ifndef __FreeBSD__
  69. typedef deque < substring > sub_split_t;
  70. typedef deque < string > split_t;
  71. #else
  72. typedef vector < substring > sub_split_t;
  73. typedef vector < string > split_t;
  74. #endif
  75. #else
  76. typedef vector < substring > sub_split_t;
  77. typedef vector < string > split_t;
  78. #endif
  79. /** paren_match will return the data that is in the first matched
  80.     set of parentheses.
  81.  
  82.     e.g. if the text is like this:
  83.  
  84.     foo(la, la, la)
  85.  
  86.     it will return a substring pointing to "la, la, la" (no quotes,
  87.     obviously)
  88.  
  89.     or, if it is
  90.  
  91.     (a, b(d, e(g, h), f), c)
  92.  
  93.     it will return "a, b(d, e(g, h), f), c" .
  94.  
  95.     paren_match will work both on strings and substrings.
  96.  
  97. */
  98. substring
  99. paren_match(const string& inputText);
  100. /// same as the one for strings, but for substrings
  101. substring
  102. paren_match(const substring& inputText);
  103. /// the same as above, but it returns a string, not a substring
  104. string
  105. str_paren_match(const string& inputText);
  106. /** splits a string into a vector of substrings while first matching
  107.    parentheses.
  108.  
  109.    This function will NOT match the characters when they are inside
  110.    brackets.  At the moment, this is specialized to only match "()" as
  111.    brackets, although this may change in the future.
  112.  
  113.    sub_split_paren_patch does not copy the strings itself.  Instead,
  114.    it substrings, which are pointers into the original string and
  115.    length counts.
  116.  
  117.    The substring.h file contains the useful information about what a
  118.    substring is, and what you can do with one.
  119.  
  120.    Clearly, this was influenced by perl.  
  121. */
  122. sub_split_t
  123. sub_split_paren_match(const string& inputText, const string& characters);
  124. /** splits a string into a vector of strings while first matching
  125.    parentheses.
  126.  
  127.    This function will NOT match the characters when they are inside
  128.    brackets.  At the moment, this is specialized to only match "()" as
  129.    brackets, although this may change in the future.
  130.  
  131.    split_paren_patch copies the strings itself.  
  132.  
  133.    Clearly, this was influenced by perl.  */
  134. split_t
  135. split_paren_match( const string& inputText, const string& characters);
  136. /**
  137.    splits a string into a vector of substrings. 
  138.  
  139.    This version is more efficient than split() because it does not
  140.    copy the strings itself.  Instead, it uses substrings, which are
  141.    pointers into the original string and length counts.
  142.  
  143.    The substring.h file contains the useful information about what a
  144.    substring is, and what you can do with one.
  145.  
  146.    Clearly, this was influenced by perl.  */
  147. sub_split_t
  148. sub_split(const string& inputText, const string& characters);
  149. /**
  150.    splits a string into a vector of substrings. 
  151.  
  152.    This is inefficient because copying is generally involved here.  A
  153.    more efficient implementation which uses pointers into the original
  154.    string (and length counts) may replace this in a future version.
  155.  
  156.    Clearly, this was influenced by perl.
  157. */
  158. split_t
  159. split(const string& inputText, const string& characters);
  160. /// slower, new split code
  161. vector < string >
  162. new_split(const string& inputText, const string& characters);
  163. /**
  164.    removes the trailing character from a string.
  165.  
  166.    Clearly, this was influenced by perl.
  167. */
  168. void
  169. chop(string* input);
  170. /**
  171.     removes the trailing character from a string if it is r or n.
  172.  
  173.     Clearly, this was influenced by perl.
  174. */
  175. void
  176. chomp(string* input);
  177. /**
  178.    convert an int to a string
  179. */
  180. inline string itos(unsigned int i)
  181. {
  182.     char buf[32];
  183.     sprintf(buf, "%d", i);
  184.     return buf;
  185. }
  186. /// convert an int to a base 16 (hex) string
  187. inline string itohexs(unsigned int i)
  188. {
  189.     char buf[32];
  190.     sprintf(buf, "%x", i);
  191.     return buf;
  192. }
  193. /**
  194.    returns a string converted to lowercase.
  195. */
  196. string
  197. str2lower(string str);
  198. /**
  199.    returns a string converted to lowercase.
  200. */
  201. string
  202. c2lower_s(const char* cstr);
  203. /**
  204.    check to see if a string is all legal digit characters
  205. */
  206. int
  207. matchString(string a, string regex);
  208. /**
  209.     get the integer from the string s, e.g. "   2598   ", it may contain
  210.     arbituary spaces in the front or end, but not in between digits
  211.     otherwise, the first whole integer is read and returned,
  212.     e.g. "  235   67" is returned as 235.
  213.     if true is returned, the num variable contains a valid integer for use
  214. */
  215. bool stringToInt ( const string& s, int *num);
  216. /**
  217.     Assume the string s contains an integer or a number
  218.     range between two integers, e.g. 20 or 23-45.
  219.     Returns: If string s contains only a single integer, it is
  220.     returned in start variable and isRange is set to false, and the function
  221.     in whole returns true.
  222.     If string s contains a range, start variable will contain
  223.     the starting number, and end variable will contain the ending
  224.     number, and isRange is set to true if the range is valid, i.e. start < end.
  225.     the function in whole returns true.
  226.     Any other case, the function returns false.
  227. */
  228. bool getRange( const string& s, int* start, int* end, bool* isRange);
  229. /// convert data to an unsigned char array
  230. int convertToUnsigned(const Data& data, unsigned char* dest);
  231. /// convert Hex-encoded ASCII in src to a Data containing the appropriate data
  232. Data convertToHex(const unsigned char* src, int len);
  233. #endif