2626using Lumina . Text . Payloads ;
2727using Lumina . Text . ReadOnly ;
2828
29- using LSeStringBuilder = Lumina . Text . SeStringBuilder ;
3029using SeString = Dalamud . Game . Text . SeStringHandling . SeString ;
3130using SeStringBuilder = Dalamud . Game . Text . SeStringHandling . SeStringBuilder ;
3231
@@ -207,21 +206,21 @@ public void UpdateQueue()
207206 if ( this . chatQueue . Count == 0 )
208207 return ;
209208
210- var sb = LSeStringBuilder . SharedPool . Get ( ) ;
209+ using var rssb = new RentedSeStringBuilder ( ) ;
211210 Span < byte > namebuf = stackalloc byte [ 256 ] ;
212211 using var sender = new Utf8String ( ) ;
213212 using var message = new Utf8String ( ) ;
214213 while ( this . chatQueue . TryDequeue ( out var chat ) )
215214 {
216- sb . Clear ( ) ;
215+ rssb . Builder . Clear ( ) ;
217216 foreach ( var c in UtfEnumerator . From ( chat . MessageBytes , UtfEnumeratorFlags . Utf8SeString ) )
218217 {
219218 if ( c . IsSeStringPayload )
220- sb . Append ( ( ReadOnlySeStringSpan ) chat . MessageBytes . AsSpan ( c . ByteOffset , c . ByteLength ) ) ;
219+ rssb . Builder . Append ( ( ReadOnlySeStringSpan ) chat . MessageBytes . AsSpan ( c . ByteOffset , c . ByteLength ) ) ;
221220 else if ( c . Value . IntValue == 0x202F )
222- sb . BeginMacro ( MacroCode . NonBreakingSpace ) . EndMacro ( ) ;
221+ rssb . Builder . BeginMacro ( MacroCode . NonBreakingSpace ) . EndMacro ( ) ;
223222 else
224- sb . Append ( c ) ;
223+ rssb . Builder . Append ( c ) ;
225224 }
226225
227226 if ( chat . NameBytes . Length + 1 < namebuf . Length )
@@ -235,7 +234,7 @@ public void UpdateQueue()
235234 sender . SetString ( chat . NameBytes . NullTerminate ( ) ) ;
236235 }
237236
238- message . SetString ( sb . GetViewAsSpan ( ) ) ;
237+ message . SetString ( rssb . Builder . GetViewAsSpan ( ) ) ;
239238
240239 var targetChannel = chat . Type ?? this . configuration . GeneralChatType ;
241240
@@ -247,8 +246,6 @@ public void UpdateQueue()
247246 chat . Timestamp ,
248247 ( byte ) ( chat . Silent ? 1 : 0 ) ) ;
249248 }
250-
251- LSeStringBuilder . SharedPool . Return ( sb ) ;
252249 }
253250
254251 /// <summary>
@@ -326,29 +323,28 @@ private void PrintTagged(SeString message, XivChatType channel, string? tag, ush
326323
327324 private void PrintTagged ( ReadOnlySpan < byte > message , XivChatType channel , string ? tag , ushort ? color )
328325 {
329- var sb = LSeStringBuilder . SharedPool . Get ( ) ;
326+ using var rssb = new RentedSeStringBuilder ( ) ;
330327
331328 if ( ! tag . IsNullOrEmpty ( ) )
332329 {
333330 if ( color is not null )
334331 {
335- sb . PushColorType ( color . Value ) ;
336- sb . Append ( $ "[{ tag } ] ") ;
337- sb . PopColorType ( ) ;
332+ rssb . Builder
333+ . PushColorType ( color . Value )
334+ . Append ( $ "[{ tag } ] ")
335+ . PopColorType ( ) ;
338336 }
339337 else
340338 {
341- sb . Append ( $ "[{ tag } ] ") ;
339+ rssb . Builder . Append ( $ "[{ tag } ] ") ;
342340 }
343341 }
344342
345343 this . Print ( new XivChatEntry
346344 {
347- MessageBytes = sb . Append ( ( ReadOnlySeStringSpan ) message ) . ToArray ( ) ,
345+ MessageBytes = rssb . Builder . Append ( ( ReadOnlySeStringSpan ) message ) . ToArray ( ) ,
348346 Type = channel ,
349347 } ) ;
350-
351- LSeStringBuilder . SharedPool . Return ( sb ) ;
352348 }
353349
354350 private void InventoryItemCopyDetour ( InventoryItem * thisPtr , InventoryItem * otherPtr )
@@ -457,15 +453,16 @@ private void HandleLinkClickDetour(LogViewer* thisPtr, LinkData* linkData)
457453
458454 Log . Verbose ( $ "InteractableLinkClicked: { Payload . EmbeddedInfoType . DalamudLink } ") ;
459455
460- var sb = LSeStringBuilder . SharedPool . Get ( ) ;
456+ using var rssb = new RentedSeStringBuilder ( ) ;
457+
461458 try
462459 {
463460 var seStringSpan = new ReadOnlySeStringSpan ( linkData ->Payload ) ;
464461
465462 // read until link terminator
466463 foreach ( var payload in seStringSpan )
467464 {
468- sb . Append ( payload ) ;
465+ rssb . Builder . Append ( payload ) ;
469466
470467 if ( payload . Type == ReadOnlySePayloadType . Macro &&
471468 payload . MacroCode == MacroCode . Link &&
@@ -477,7 +474,7 @@ private void HandleLinkClickDetour(LogViewer* thisPtr, LinkData* linkData)
477474 }
478475 }
479476
480- var seStr = SeString . Parse ( sb . ToArray ( ) ) ;
477+ var seStr = SeString . Parse ( rssb . Builder . ToArray ( ) ) ;
481478 if ( seStr . Payloads . Count == 0 || seStr . Payloads [ 0 ] is not DalamudLinkPayload link )
482479 return ;
483480
@@ -495,10 +492,6 @@ private void HandleLinkClickDetour(LogViewer* thisPtr, LinkData* linkData)
495492 {
496493 Log . Error ( ex , "Exception in HandleLinkClickDetour" ) ;
497494 }
498- finally
499- {
500- LSeStringBuilder . SharedPool . Return ( sb ) ;
501- }
502495 }
503496}
504497
0 commit comments