Json.NET
Code Coverage Statistics for Source File

Newtonsoft.Json\Utilities\StringBuffer.cs

Symbol Coverage: 89.29% (25 of 28)

Branch Coverage: 91.67% (11 of 12)

Cyclomatic Complexity Avg: 1.09 Max:2

Code Lines: 26


L V Source
1
#region License
2
// Copyright (c) 2007 James Newton-King
3
//
4
// Permission is hereby granted, free of charge, to any person
5
// obtaining a copy of this software and associated documentation
6
// files (the "Software"), to deal in the Software without
7
// restriction, including without limitation the rights to use,
8
// copy, modify, merge, publish, distribute, sublicense, and/or sell
9
// copies of the Software, and to permit persons to whom the
10
// Software is furnished to do so, subject to the following
11
// conditions:
12
//
13
// The above copyright notice and this permission notice shall be
14
// included in all copies or substantial portions of the Software.
15
//
16
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
18
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
20
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
21
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23
// OTHER DEALINGS IN THE SOFTWARE.
24
#endregion
25

  
26
using System;
27

  
28
namespace Newtonsoft.Json.Utilities
29
{
30
  /// <summary>
31
  /// Builds a string. Unlike StringBuilder this class lets you reuse it's internal buffer.
32
  /// </summary>
33
  internal class StringBuffer
34
  {
35
    private char[] _buffer;
36
    private int _position;
37

  
38
 1
    private static readonly char[] _emptyBuffer = new char[0];
39

  
40
    public int Position
41
    {
42
 10
      get { return _position; }
43
 178774
      set { _position = value; }
44
    }
45

  
46
 0
    public StringBuffer()
47
    {
48
 0
      _buffer = _emptyBuffer;
49
 0
    }
50

  
51
 5438
    public StringBuffer(int initalSize)
52
    {
53
 5438
      _buffer = new char[initalSize];
54
 5438
    }
55

  
56
    public void Append(char value)
57
    {
58
      // test if the buffer array is large enough to take the value
59
 1891276
      if (_position == _buffer.Length)
60
      {
61
 3
        EnsureSize(1);
62
      }
63

  
64
      // set value and increment poisition
65
 1891276
      _buffer[_position++] = value;
66
 1891276
    }
67

  
68
    public void Clear()
69
    {
70
 215
      _buffer = _emptyBuffer;
71
 215
      _position = 0;
72
 215
    }
73

  
74
    private void EnsureSize(int appendLength)
75
    {
76
 3
      char[] newBuffer = new char[(_position + appendLength) * 2];
77

  
78
 3
      Array.Copy(_buffer, newBuffer, _position);
79

  
80
 3
      _buffer = newBuffer;
81
 3
    }
82

  
83
    public override string ToString()
84
    {
85
 178770
      return ToString(0, _position);
86
 178770
    }
87

  
88
    public string ToString(int start, int length)
89
    {
90
      // TODO: validation
91
 178770
      return new string(_buffer, start, length);
92
 178770
    }
93

  
94
    public char[] GetInternalBuffer()
95
    {
96
 4
      return _buffer;
97
 4
    }
98
  }
99
}