19 #include "PresentationBridge.h" 24 PresentationBridge::PresentationBridge(std::ostream& stream) :
25 mStream(stream), mMaxItemsPerLevel(0), mIsSkipEntry(false), mStartFilterLevel(1)
45 if (checkAndUpdateMaxItemCounter()) {
46 mStream << mPadding << name << std::endl;
52 if (checkAndUpdateMaxItemCounter()) {
53 mStream << mPadding << name << std::endl;
60 if (checkAndUpdateMaxItemCounter()) {
61 mStream << mPadding << name <<
": " << i << std::endl;
66 if (checkAndUpdateMaxItemCounter()) {
67 mStream << mPadding << name <<
": " << std::fixed << d << std::endl;
72 if (checkAndUpdateMaxItemCounter()) {
73 mStream << mPadding << name <<
": " << s << std::endl;
77 if (checkAndUpdateMaxItemCounter()) {
78 mStream << mPadding << name <<
": " << std::endl;
89 int items = mMapsInList.top();
90 if (checkAndUpdateMaxItemCounter()) {
93 mStream << mPadding <<
"---" << std::endl;
97 mMapsInList.push(items + 1);
108 if (checkAndUpdateMaxItemCounter()) {
109 mStream << mPadding <<
": " << i << std::endl;
114 if (checkAndUpdateMaxItemCounter()) {
115 mStream << mPadding <<
": " << d << std::endl;
120 if (checkAndUpdateMaxItemCounter()) {
121 mStream << mPadding <<
": " << s << std::endl;
125 if (checkAndUpdateMaxItemCounter()) {
126 mStream << mPadding <<
": " << std::endl;
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());
162 mMaxItemsPerLevel = maxItems;
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) {
void listIntItem(std::int64_t) override
void listStringItem(std::string) override
void setStartFilteringLevel(size_t startFilteringLevel)
void listNoneItem() override
void setMaxItemsPerLevel(size_t maxItems)
void streamEnd() override
void mapNoneItem(std::string name) override
void mapFloatItem(std::string name, double) override
void listListItem() override
void listMapItem() override
void streamBegin() override
void streamMessage() override
void mapIntItem(std::string name, std::int64_t) override
void listFloatItem(double) override
void mapListItem(std::string name) override
void mapStringItem(std::string name, std::string) override
void mapMapItem(std::string name) override