SBinetStringSTL.hpp
上传用户:xqtpzdz
上传日期:2022-05-21
资源大小:1764k
文件大小:8k
源码类别:

xml/soap/webservice

开发平台:

Visual C++

  1. /****************License************************************************
  2.  * Vocalocity OpenVXI
  3.  * Copyright (C) 2004-2005 by Vocalocity, Inc. All Rights Reserved.
  4.  * This program is free software; you can redistribute it and/or
  5.  * modify it under the terms of the GNU General Public License
  6.  * as published by the Free Software Foundation; either version 2
  7.  * of the License, or (at your option) any later version.
  8.  *  
  9.  * This program is distributed in the hope that it will be useful,
  10.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  * GNU General Public License for more details.
  13.  *
  14.  * You should have received a copy of the GNU General Public License
  15.  * along with this program; if not, write to the Free Software
  16.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  17.  * Vocalocity, the Vocalocity logo, and VocalOS are trademarks or 
  18.  * registered trademarks of Vocalocity, Inc. 
  19.  * OpenVXI is a trademark of Scansoft, Inc. and used under license 
  20.  * by Vocalocity.
  21.  ***********************************************************************/
  22. // -----1=0-------2=0-------3=0-------4=0-------5=0-------6=0-------7=0-------8
  23. #ifndef _SBINETSTRINGSTL_HPP__
  24. #define _SBINETSTRINGSTL_HPP__
  25. #include "SBinetInternal.h"
  26. // Highly efficient STL wstring implementation, use a wrapper to
  27. // ensure we don't go beyond a specific subset of functionality that
  28. // will break the non-STL implementation
  29. #include <string>
  30. using namespace std;
  31. class SBinetNString;
  32. class SBinetString
  33. {
  34.  public:
  35.   // Constructors and destructor
  36.   SBinetString():
  37.     details()
  38.   {}
  39.   SBinetString(const VXIchar *str):
  40.     details(str)
  41.   {}
  42.   SBinetString(const SBinetString &str):
  43.     details(str.details)
  44.   {}
  45.   SBinetString(const VXIchar *str, int len):
  46.     details(str, len)
  47.   {}
  48.   SBinetString(const char *str):
  49.     details()
  50.   {
  51.     details.reserve(strlen(str) + 1);
  52.     while (*str) details += (unsigned char) *str++;
  53.   }
  54.   SBinetString(const char *str, int len):
  55.     details()
  56.   {
  57.     details.reserve(len + 1);
  58.     for (int i = 0; i < len; i++) details += (unsigned char) str[i];
  59.   }
  60.   SBinetString(const SBinetNString &str):
  61.     details()
  62.   {
  63.     operator=(str);
  64.   }
  65.   virtual ~SBinetString()
  66.   {}
  67.   // Assignment operators
  68.   SBinetString& operator=(const SBinetString &str)
  69.   {
  70.     if ( &str != this ) details = str.details;
  71.     return *this;
  72.   }
  73.   SBinetString & operator=(const VXIchar *str)
  74.   {
  75.     details = str;
  76.     return *this;
  77.   }
  78.   SBinetString& operator=(const char *str)
  79.   {
  80.     clear();
  81.     return operator+=(str);
  82.   }
  83.   SBinetString& operator=(const SBinetNString& str)
  84.   {
  85.     clear();
  86.     return operator+=(str);
  87.   }
  88.   // Clear operator
  89.   void clear()
  90.   {
  91.     details.resize(0);
  92.   }
  93.   // Operators for appending data to the string
  94.   SBinetString& operator+=(const SBinetString & str)
  95.   {
  96.     details += str.details;
  97.     return *this;
  98.   }
  99.   SBinetString& operator+=(const VXIchar *str)
  100.   {
  101.     details += str;
  102.     return *this;
  103.   }
  104.   inline SBinetString& operator+=(const SBinetNString& str);
  105.   SBinetString& operator+=(const char *str)
  106.   {
  107.     details.reserve(details.size() + strlen(str));
  108.     while (*str) details += (unsigned char) *str++;
  109.     return *this;
  110.   }
  111.   SBinetString & operator+=(VXIchar c)
  112.   {
  113.     details += c;
  114.     return *this;
  115.   }
  116.   SBinetString& operator+=(char c)
  117.   {
  118.     details += (unsigned char) c;
  119.     return *this;
  120.   }
  121.   SBinetString& append(const VXIchar *str, int len)
  122.   {
  123.     details.append(str, len);
  124.     return *this;
  125.   }
  126.   SBinetString& append(const char *str, int len)
  127.   {
  128.     details.reserve(details.size() + len + 1);
  129.     for (int i = 0; i < len; i++) details += (unsigned char) str[i];
  130.     return *this;
  131.   }
  132.   // Operators to access the string data
  133.   unsigned int length() const
  134.   {
  135.     return details.length();
  136.   }
  137.   const VXIchar *c_str() const
  138.   {
  139.     return details.c_str();
  140.   }
  141.   const VXIchar *data() const
  142.   {
  143.     return details.data();
  144.   }
  145.   const VXIchar operator[] (unsigned int i) const
  146.   {
  147.     return details[i];
  148.   }
  149.   VXIchar& operator[] (unsigned int i)
  150.   {
  151.     return details[i];
  152.   }
  153.   void resize(int n, VXIchar c = L'')
  154.   {
  155.     details.resize(n,c);
  156.   }
  157.   void replace(int p, int n, VXIchar *s)
  158.   {
  159.     details.replace(p,n,s);
  160.   }
  161.   // Operator to search the string for a character
  162.   unsigned int find(VXIchar c) const
  163.   {
  164.     return details.find(c);
  165.   }
  166.  private:
  167.   std::basic_string<VXIchar> details;
  168. };
  169. class SBinetNString
  170. {
  171.  public:
  172.   // Constructors and destructor
  173.   SBinetNString(): details()
  174.   {}
  175.   SBinetNString (const char *str):
  176.     details(str)
  177.   {}
  178.   SBinetNString(const SBinetNString &str):
  179.     details(str.details)
  180.   {}
  181.   SBinetNString(const VXIchar *str):
  182.     details()
  183.   {
  184.     details.reserve(wcslen(str) + 1);
  185.     while (*str) details += SBinetW2C(*str++);
  186.   }
  187.   SBinetNString(const SBinetString& str):
  188.     details()
  189.   {
  190.     operator=(str);
  191.   }
  192.   SBinetNString(const char *str, int len):
  193.     details(str,len)
  194.   {}
  195.   SBinetNString(const VXIchar *str, int len):
  196.     details()
  197.   {
  198.     details.reserve(len + 1);
  199.     for (int i = 0; i < len; i++) details += SBinetW2C(str[i]);
  200.   }
  201.   virtual ~SBinetNString()
  202.   {}
  203.   // Assignment operators
  204.   SBinetNString& operator=(const SBinetNString &str)
  205.   {
  206.     if (&str != this) details = str.details;
  207.     return *this;
  208.   }
  209.   SBinetNString& operator=(const char *str)
  210.   {
  211.     details = str;
  212.     return *this;
  213.   }
  214.   SBinetNString& operator=(const VXIchar *str)
  215.   {
  216.     clear();
  217.     return operator+=(str);
  218.   }
  219.   SBinetNString& operator=(const SBinetString& str)
  220.   {
  221.     clear();
  222.     return operator+=(str);
  223.   }
  224.   // Clear operator
  225.   void clear()
  226.   {
  227.     details.resize(0);
  228.   }
  229.   // Operators for appending data to the string
  230.   SBinetNString& operator+=(const SBinetNString & str)
  231.   {
  232.     details += str.details;
  233.     return *this;
  234.   }
  235.   SBinetNString& operator+=(const char *str)
  236.   {
  237.     details += str;
  238.     return *this;
  239.   }
  240.   SBinetNString& operator+=(char c)
  241.   {
  242.     details += c;
  243.     return *this;
  244.   }
  245.   SBinetNString& operator+=(const SBinetString & str)
  246.   {
  247.     int n = str.length();
  248.     details.reserve(n + 1);
  249.     for (int i = 0; i < n; i++) details += SBinetW2C(str[i]);
  250.     return *this;
  251.   }
  252.   SBinetNString& operator+=(const VXIchar *str)
  253.   {
  254.     details.reserve(details.size() + wcslen(str) + 1);
  255.     while (*str) details += SBinetW2C(*str++);
  256.     return *this;
  257.   }
  258.   SBinetNString& operator+=(VXIchar c)
  259.   {
  260.     details += SBinetW2C(c);
  261.     return *this;
  262.   }
  263.   SBinetNString& append(const char *str, int len)
  264.   {
  265.     details.append(str, len);
  266.     return *this;
  267.   }
  268.   SBinetNString& append(const VXIchar *str, int len)
  269.   {
  270.     details.reserve(details.size() + len + 1);
  271.     for (int i = 0; i < len; i++)
  272.       details += SBinetW2C(str[i]);
  273.     return *this;
  274.   }
  275.   // Operators to access the string data
  276.   unsigned int length() const
  277.   {
  278.     return details.length();
  279.   }
  280.   const char *c_str( ) const
  281.   {
  282.     return details.c_str( );
  283.   }
  284.   const char *data() const
  285.   {
  286.     return details.data();
  287.   }
  288.   char operator[] (unsigned int i) const
  289.   {
  290.     return details[i];
  291.   }
  292.   char& operator[] (unsigned int i)
  293.   {
  294.     return details[i];
  295.   }
  296.   void resize(int n, char c = '')
  297.   {
  298.     details.resize(n,c);
  299.   }
  300.   // Operator to search the string for a character
  301.   unsigned int find(char c) const
  302.   {
  303.     return details.find(c);
  304.   }
  305.  private:
  306.   string  details;
  307. };
  308. SBinetString& SBinetString::operator+=(const SBinetNString& str)
  309. {
  310.   int n = str.length();
  311.   details.reserve(n + 1);
  312.   for (int i = 0; i < n; i++) details += (unsigned char) str[i];
  313.   return *this;
  314. }
  315. #endif  /* include guard */