string_builder.h 900 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #pragma once
  2. #include "format.h"
  3. #include <util/generic/string.h>
  4. namespace NYT {
  5. ////////////////////////////////////////////////////////////////////////////////
  6. //! Appends a certain delimiter starting from the second call.
  7. class TDelimitedStringBuilderWrapper
  8. : private TNonCopyable
  9. {
  10. public:
  11. TDelimitedStringBuilderWrapper(
  12. TStringBuilderBase* builder,
  13. TStringBuf delimiter = TStringBuf(", "))
  14. : Builder_(builder)
  15. , Delimiter_(delimiter)
  16. { }
  17. TStringBuilderBase* operator->()
  18. {
  19. if (!FirstCall_) {
  20. Builder_->AppendString(Delimiter_);
  21. }
  22. FirstCall_ = false;
  23. return Builder_;
  24. }
  25. private:
  26. TStringBuilderBase* const Builder_;
  27. const TStringBuf Delimiter_;
  28. bool FirstCall_ = true;
  29. };
  30. ////////////////////////////////////////////////////////////////////////////////
  31. } // namespace NYT