Dune Core Modules (2.9.0)

indent.hh
Go to the documentation of this file.
1 // -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 // vi: set et ts=4 sw=2 sts=2:
3 // SPDX-FileCopyrightInfo: Copyright (C) DUNE Project contributors, see file LICENSE.md in module root
4 // SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
5 #ifndef DUNE_COMMON_INDENT_HH
6 #define DUNE_COMMON_INDENT_HH
7 
8 #include <ostream>
9 #include <string>
10 
11 namespace Dune {
22 
52  class Indent
53  {
54  const Indent* parent;
55  std::string basic_indent;
56  unsigned level;
57 
58  public:
60 
63  inline Indent(const std::string& basic_indent_ = " ", unsigned level_ = 0)
64  : parent(0), basic_indent(basic_indent_), level(level_)
65  { }
66 
68  inline Indent(unsigned level_)
69  : parent(0), basic_indent(" "), level(level_)
70  { }
71 
73 
76  inline Indent(const Indent* parent_,
77  const std::string& basic_indent_ = " ", unsigned level_ = 1)
78  : parent(parent_), basic_indent(basic_indent_), level(level_)
79  { }
80 
82  inline Indent(const Indent* parent_, unsigned level_)
83  : parent(parent_), basic_indent(" "), level(level_)
84  { }
85 
87  inline Indent operator+(const std::string& newindent) const {
88  return Indent(this, newindent);
89  }
91  inline Indent operator+(unsigned morelevel) const {
92  return Indent(parent, basic_indent, level+morelevel);
93  }
95  inline Indent& operator++() { ++level; return *this; }
97  inline Indent& operator--() { if ( level > 0 ) --level; return *this; }
98 
100  friend inline std::ostream& operator<<(std::ostream& s,
101  const Indent& indent);
102  };
103 
105  inline std::ostream& operator<<(std::ostream& s, const Indent& indent) {
106  if(indent.parent)
107  s << *indent.parent;
108  for(unsigned i = 0; i < indent.level; ++i)
109  s << indent.basic_indent;
110  return s;
111  }
112 
115 } // namespace Dune
116 
117 #endif // DUNE_COMMON_INDENT_HH
Utility class for handling nested indentation in output.
Definition: indent.hh:53
Indent operator+(const std::string &newindent) const
create new indentation object with this one as parent
Definition: indent.hh:87
Indent(unsigned level_)
setup without parent and basic_indentation of two spaces
Definition: indent.hh:68
Indent operator+(unsigned morelevel) const
create a copy of this indentation object with raised level
Definition: indent.hh:91
Indent(const Indent *parent_, unsigned level_)
setup with parent
Definition: indent.hh:82
friend std::ostream & operator<<(std::ostream &s, const Indent &indent)
write indentation to a stream
Definition: indent.hh:105
Indent & operator++()
raise indentation level
Definition: indent.hh:95
Indent & operator--()
lower indentation level
Definition: indent.hh:97
Indent(const std::string &basic_indent_=" ", unsigned level_=0)
setup without parent
Definition: indent.hh:63
Indent(const Indent *parent_, const std::string &basic_indent_=" ", unsigned level_=1)
setup with parent
Definition: indent.hh:76
Dune namespace.
Definition: alignedallocator.hh:13
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.80.0 (May 2, 22:35, 2024)