1 //
2 // Copyright (c) 2010-2025 Antmicro
3 //
4 // This file is licensed under the MIT License.
5 // Full license text is available in 'licenses/MIT.txt'.
6 //
7 
8 using System.Text;
9 
10 namespace Antmicro.Renode.Utilities
11 {
12     public class SafeStringBuilder
13     {
SafeStringBuilder()14         public SafeStringBuilder()
15         {
16             buffer = new StringBuilder();
17         }
18 
TryDump(out string content)19         public bool TryDump(out string content)
20         {
21             lock(buffer)
22             {
23                 if(buffer.Length == 0)
24                 {
25                     content = null;
26                     return false;
27                 }
28 
29                 content = buffer.ToString();
30                 return true;
31             }
32         }
33 
ToString()34         public override string ToString()
35         {
36             lock(buffer)
37             {
38                 return buffer.ToString();
39             }
40         }
41 
Unload(int? count = null)42         public string Unload(int? count = null)
43         {
44             lock(buffer)
45             {
46                 int toUnload = count ?? buffer.Length;
47                 var content = buffer.ToString(0, toUnload);
48                 buffer.Remove(0, toUnload);
49                 return content;
50             }
51         }
52 
Append(string str)53         public void Append(string str)
54         {
55             lock(buffer)
56             {
57                 buffer.Append(str);
58             }
59         }
60 
Append(char str)61         public void Append(char str)
62         {
63             lock(buffer)
64             {
65                 buffer.Append(str);
66             }
67         }
68 
AppendFormat(string str, params object[] args)69         public void AppendFormat(string str, params object[] args)
70         {
71             lock(buffer)
72             {
73                 buffer.AppendFormat(str, args);
74             }
75         }
76 
AppendLine(string str)77         public void AppendLine(string str)
78         {
79             lock(buffer)
80             {
81                 buffer.AppendLine(str);
82             }
83         }
84 
85         private readonly StringBuilder buffer;
86     }
87 }
88 
89