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