node_builder.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #include "node_builder.h"
  2. namespace NYT {
  3. ////////////////////////////////////////////////////////////////////////////////
  4. TNodeBuilder::TNodeBuilder(TNode* node)
  5. {
  6. Stack_.push(node);
  7. }
  8. void TNodeBuilder::OnStringScalar(TStringBuf value)
  9. {
  10. AddNode(value, true);
  11. }
  12. void TNodeBuilder::OnInt64Scalar(i64 value)
  13. {
  14. AddNode(value, true);
  15. }
  16. void TNodeBuilder::OnUint64Scalar(ui64 value)
  17. {
  18. AddNode(value, true);
  19. }
  20. void TNodeBuilder::OnDoubleScalar(double value)
  21. {
  22. AddNode(value, true);
  23. }
  24. void TNodeBuilder::OnBooleanScalar(bool value)
  25. {
  26. AddNode(value, true);
  27. }
  28. void TNodeBuilder::OnEntity()
  29. {
  30. AddNode(TNode::CreateEntity(), true);
  31. }
  32. void TNodeBuilder::OnBeginList()
  33. {
  34. AddNode(TNode::CreateList(), false);
  35. }
  36. void TNodeBuilder::OnBeginList(ui64 reserveSize) {
  37. OnBeginList();
  38. Stack_.top()->AsList().reserve(reserveSize);
  39. }
  40. void TNodeBuilder::OnListItem()
  41. {
  42. Stack_.push(&Stack_.top()->Add());
  43. }
  44. void TNodeBuilder::OnEndList()
  45. {
  46. Stack_.pop();
  47. }
  48. void TNodeBuilder::OnBeginMap()
  49. {
  50. AddNode(TNode::CreateMap(), false);
  51. }
  52. void TNodeBuilder::OnBeginMap(ui64 reserveSize) {
  53. OnBeginMap();
  54. Stack_.top()->AsMap().reserve(reserveSize);
  55. }
  56. void TNodeBuilder::OnKeyedItem(TStringBuf key)
  57. {
  58. Stack_.push(&(*Stack_.top())[TString(key)]);
  59. }
  60. void TNodeBuilder::OnEndMap()
  61. {
  62. Stack_.pop();
  63. }
  64. void TNodeBuilder::OnBeginAttributes()
  65. {
  66. Stack_.push(&Stack_.top()->Attributes());
  67. }
  68. void TNodeBuilder::OnEndAttributes()
  69. {
  70. Stack_.pop();
  71. }
  72. void TNodeBuilder::OnNode(TNode node)
  73. {
  74. AddNode(std::move(node), true);
  75. }
  76. void TNodeBuilder::AddNode(TNode value, bool pop)
  77. {
  78. Stack_.top()->MoveWithoutAttributes(std::move(value));
  79. if (pop)
  80. Stack_.pop();
  81. }
  82. ////////////////////////////////////////////////////////////////////////////////
  83. } // namespace NYT