The Labs \ Source Viewer \ SSCLI \ Microsoft.JScript \ ConcatString

  1. // ==++==
  2. //
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. //
  14. // ==--==
  15. namespace Microsoft.JScript
  16. {
  17.    
  18.     using System;
  19.     using System.Text;
  20.    
  21.     internal sealed class ConcatString : IConvertible
  22.     {
  23.         private StringBuilder buf;
  24.         private bool isOwner;
  25.         private int length;
  26.        
  27.         internal ConcatString(string str1, string str2)
  28.         {
  29.             this.length = str1.Length + str2.Length;
  30.             int capacity = this.length * 2;
  31.             if (capacity < 256)
  32.                 capacity = 256;
  33.             this.buf = new StringBuilder(str1, capacity);
  34.             this.buf.Append(str2);
  35.             this.isOwner = true;
  36.         }
  37.        
  38.         internal ConcatString(ConcatString str1, string str2)
  39.         {
  40.             this.length = str1.length + str2.Length;
  41.             if (str1.isOwner) {
  42.                 this.buf = str1.buf;
  43.                 str1.isOwner = false;
  44.             }
  45.             else {
  46.                 int capacity = this.length * 2;
  47.                 if (capacity < 256)
  48.                     capacity = 256;
  49.                 this.buf = new StringBuilder(str1.ToString(), capacity);
  50.             }
  51.             this.buf.Append(str2);
  52.             this.isOwner = true;
  53.         }
  54.        
  55.         TypeCode IConvertible.GetTypeCode()
  56.         {
  57.             return TypeCode.String;
  58.         }
  59.        
  60.         bool IConvertible.ToBoolean(IFormatProvider provider)
  61.         {
  62.             return this.ToIConvertible().ToBoolean(provider);
  63.         }
  64.        
  65.         char IConvertible.ToChar(IFormatProvider provider)
  66.         {
  67.             return this.ToIConvertible().ToChar(provider);
  68.         }
  69.        
  70.         sbyte IConvertible.ToSByte(IFormatProvider provider)
  71.         {
  72.             return this.ToIConvertible().ToSByte(provider);
  73.         }
  74.        
  75.         byte IConvertible.ToByte(IFormatProvider provider)
  76.         {
  77.             return this.ToIConvertible().ToByte(provider);
  78.         }
  79.        
  80.         short IConvertible.ToInt16(IFormatProvider provider)
  81.         {
  82.             return this.ToIConvertible().ToInt16(provider);
  83.         }
  84.        
  85.         ushort IConvertible.ToUInt16(IFormatProvider provider)
  86.         {
  87.             return this.ToIConvertible().ToUInt16(provider);
  88.         }
  89.        
  90.         private IConvertible ToIConvertible()
  91.         {
  92.             return this.ToString();
  93.         }
  94.        
  95.         int IConvertible.ToInt32(IFormatProvider provider)
  96.         {
  97.             return this.ToIConvertible().ToInt32(provider);
  98.         }
  99.        
  100.         uint IConvertible.ToUInt32(IFormatProvider provider)
  101.         {
  102.             return this.ToIConvertible().ToUInt32(provider);
  103.         }
  104.        
  105.         long IConvertible.ToInt64(IFormatProvider provider)
  106.         {
  107.             return this.ToIConvertible().ToInt64(provider);
  108.         }
  109.        
  110.         ulong IConvertible.ToUInt64(IFormatProvider provider)
  111.         {
  112.             return this.ToIConvertible().ToUInt64(provider);
  113.         }
  114.        
  115.         float IConvertible.ToSingle(IFormatProvider provider)
  116.         {
  117.             return this.ToIConvertible().ToSingle(provider);
  118.         }
  119.        
  120.         double IConvertible.ToDouble(IFormatProvider provider)
  121.         {
  122.             return this.ToIConvertible().ToDouble(provider);
  123.         }
  124.        
  125.         decimal IConvertible.ToDecimal(IFormatProvider provider)
  126.         {
  127.             return this.ToIConvertible().ToDecimal(provider);
  128.         }
  129.        
  130.         DateTime IConvertible.ToDateTime(IFormatProvider provider)
  131.         {
  132.             return this.ToIConvertible().ToDateTime(provider);
  133.         }
  134.        
  135.         string IConvertible.ToString(IFormatProvider provider)
  136.         {
  137.             return this.ToIConvertible().ToString(provider);
  138.         }
  139.        
  140.         object IConvertible.ToType(Type conversionType, IFormatProvider provider)
  141.         {
  142.             return this.ToIConvertible().ToType(conversionType, provider);
  143.         }
  144.        
  145.         public override string ToString()
  146.         {
  147.             return this.buf.ToString(0, this.length);
  148.         }
  149.        
  150.     }
  151. }

Developer Fusion