blob: db4088d16d8962ff76ad7c30316fa2873d50b3cb (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
#include "AsciiTraveler.hh"
namespace pcc {
const std::string AsciiTraveler::MiddleLevelPrefix_ = "|-";
const std::string AsciiTraveler::LastLevelPrefix_ = "`-";
const std::string AsciiTraveler::MiddleChildPrefix_ = "| ";
const std::string AsciiTraveler::LastChildPrefix_ = " ";
const size_t AsciiTraveler::LevelWidth_ =
AsciiTraveler::MiddleLevelPrefix_.size();
AsciiTraveler::AsciiTraveler(std::ostream& out)
: Traveler(out)
, prefix_("")
, level_(0) {
IsLastChild_.push(true);
}
Traveler& AsciiTraveler::operator<<(TravelPart part) {
switch (part) {
case TravelPart::PREFIX:
out_ << prefix_
<< (IsLastChild_.top() ? LastLevelPrefix_ : MiddleLevelPrefix_);
break;
case TravelPart::NAME_BEGIN:
out_ << '<';
break;
case TravelPart::NAME_END:
out_ << '>';
break;
break;
case TravelPart::DESCRPTION_BEGIN:
out_ << '<';
break;
case TravelPart::DESCRPTION_END:
out_ << ">\n";
break;
case TravelPart::CHILD_BEGIN:
prefix_.append(IsLastChild_.top() ? LastChildPrefix_
: MiddleChildPrefix_);
IsLastChild_.push(false);
++level_;
break;
case TravelPart::LAST_CHILD_BEGIN:
prefix_.append(IsLastChild_.top() ? LastChildPrefix_
: MiddleChildPrefix_);
IsLastChild_.push(true);
++level_;
break;
case TravelPart::CHILD_END:
case TravelPart::LAST_CHILD_END:
prefix_.erase(prefix_.size() - LevelWidth_);
IsLastChild_.pop();
--level_;
break;
case TravelPart::END:
break;
default:
break;
}
return *this;
}
} // namespace pcc
|