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