19 #include "PresentationBridge.h"
24 PresentationBridge::PresentationBridge(std::ostream& stream) :
25 mStream(stream), mMaxItemsPerLevel(0), mIsSkipEntry(false), mStartFilterLevel(1)
30 void PresentationBridge::streamBegin()
34 void PresentationBridge::streamMessage()
38 void PresentationBridge::streamEnd()
43 void PresentationBridge::mapMapItem(std::string name)
45 if (checkAndUpdateMaxItemCounter()) {
46 mStream << mPadding << name << std::endl;
50 void PresentationBridge::mapListItem(std::string name)
52 if (checkAndUpdateMaxItemCounter()) {
53 mStream << mPadding << name << std::endl;
58 void PresentationBridge::mapIntItem(std::string name, std::int64_t i)
60 if (checkAndUpdateMaxItemCounter()) {
61 mStream << mPadding << name <<
": " << i << std::endl;
64 void PresentationBridge::mapFloatItem(std::string name,
double d)
66 if (checkAndUpdateMaxItemCounter()) {
67 mStream << mPadding << name <<
": " << std::fixed << d << std::endl;
70 void PresentationBridge::mapStringItem(std::string name, std::string s)
72 if (checkAndUpdateMaxItemCounter()) {
73 mStream << mPadding << name <<
": " << s << std::endl;
76 void PresentationBridge::mapNoneItem(std::string name) {
77 if (checkAndUpdateMaxItemCounter()) {
78 mStream << mPadding << name <<
": " << std::endl;
82 void PresentationBridge::mapEnd()
87 void PresentationBridge::listMapItem()
89 int items = mMapsInList.top();
90 if (checkAndUpdateMaxItemCounter()) {
93 mStream << mPadding <<
"---" << std::endl;
97 mMapsInList.push(items + 1);
101 void PresentationBridge::listListItem()
106 void PresentationBridge::listIntItem(std::int64_t i)
108 if (checkAndUpdateMaxItemCounter()) {
109 mStream << mPadding <<
": " << i << std::endl;
112 void PresentationBridge::listFloatItem(
double d)
114 if (checkAndUpdateMaxItemCounter()) {
115 mStream << mPadding <<
": " << d << std::endl;
118 void PresentationBridge::listStringItem(std::string s)
120 if (checkAndUpdateMaxItemCounter()) {
121 mStream << mPadding <<
": " << s << std::endl;
124 void PresentationBridge::listNoneItem() {
125 if (checkAndUpdateMaxItemCounter()) {
126 mStream << mPadding <<
": " << std::endl;
129 void PresentationBridge::listEnd()
134 void PresentationBridge::addPadding()
136 mEntriesPerLevelCounter.push_back(0);
140 void PresentationBridge::removePadding()
142 size_t itemsThisLevel = mEntriesPerLevelCounter.back();
143 bool wasSkipping = mIsSkipEntry;
144 mEntriesPerLevelCounter.pop_back();
145 if (mMaxItemsPerLevel) {
147 for (
size_t entry : mEntriesPerLevelCounter) {
148 mIsSkipEntry = entry >= mMaxItemsPerLevel && level >= mStartFilterLevel;
153 if (wasSkipping != mIsSkipEntry) {
154 mStream << mPadding <<
"... (" << (itemsThisLevel - mMaxItemsPerLevel) <<
" more items) ..." << std::endl;
157 mPadding.erase(mPadding.end() - 2, mPadding.end());
160 void PresentationBridge::setMaxItemsPerLevel(
size_t maxItems)
162 mMaxItemsPerLevel = maxItems;
165 void PresentationBridge::setStartFilteringLevel(
size_t startFilteringLevel)
167 mStartFilterLevel = startFilteringLevel;
170 bool PresentationBridge::checkAndUpdateMaxItemCounter()
173 if (mMaxItemsPerLevel && !mEntriesPerLevelCounter.empty() && mEntriesPerLevelCounter.size() > mStartFilterLevel) {
174 size_t& itemsInLevel = mEntriesPerLevelCounter.back();
176 if (itemsInLevel >= mMaxItemsPerLevel) {