Skip to content

Commit

Permalink
m_options can't be static (#345)
Browse files Browse the repository at this point in the history
  • Loading branch information
flagarde authored Dec 19, 2023
1 parent d15bb6e commit 59ca651
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 23 deletions.
2 changes: 1 addition & 1 deletion cpp-terminal/options.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,4 @@ void Term::Options::clean()
m_Options = cleaned;
}

bool Term::Options::has(const Option& option) { return std::find(m_Options.begin(), m_Options.end(), option) != m_Options.end(); }
bool Term::Options::has(const Option& option) const noexcept { return std::find(m_Options.begin(), m_Options.end(), option) != m_Options.end(); }
3 changes: 1 addition & 2 deletions cpp-terminal/options.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,7 @@ class Options

bool operator==(const Options& options);
bool operator!=(const Options& options);

bool has(const Option& option);
bool has(const Option& option) const noexcept;

private:
void clean();
Expand Down
2 changes: 1 addition & 1 deletion cpp-terminal/private/terminal_impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ std::size_t Term::Terminal::unsetFocusEvents()
#endif
}

void Term::Terminal::setMode()
void Term::Terminal::setMode() const
{
static bool activated{false};
#if defined(_WIN32)
Expand Down
14 changes: 6 additions & 8 deletions cpp-terminal/terminal_impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,7 @@
#include "cpp-terminal/style.hpp"
#include "cpp-terminal/terminal.hpp" //FIXME avoid recursion

Term::Options Term::Terminal::m_options{}; //NOLINT(fuchsia-statically-constructed-objects)

Term::Options Term::Terminal::getOptions() noexcept { return m_options; }
Term::Options Term::Terminal::getOptions() const noexcept { return m_options; }

Term::Terminal::Terminal() noexcept
try
Expand All @@ -39,8 +37,8 @@ catch(...)
Term::Terminal::~Terminal() noexcept
try
{
if(m_options.has(Option::ClearScreen)) { Term::Private::out.write(clear_buffer() + style(Style::Reset) + cursor_move(1, 1) + screen_load()); }
if(m_options.has(Option::NoCursor)) { Term::Private::out.write(cursor_on()); }
if(getOptions().has(Option::ClearScreen)) { Term::Private::out.write(clear_buffer() + style(Style::Reset) + cursor_move(1, 1) + screen_load()); }
if(getOptions().has(Option::NoCursor)) { Term::Private::out.write(cursor_on()); }
set_unset_utf8();
store_and_restore();
unsetFocusEvents();
Expand All @@ -51,9 +49,9 @@ catch(...)
ExceptionHandler(Private::ExceptionDestination::StdErr);
}

void Term::Terminal::applyOptions()
void Term::Terminal::applyOptions() const
{
if(m_options.has(Option::ClearScreen)) { Term::Private::out.write(screen_save() + clear_buffer() + style(Style::Reset) + cursor_move(1, 1)); }
if(m_options.has(Option::NoCursor)) { Term::Private::out.write(cursor_off()); }
if(getOptions().has(Option::ClearScreen)) { Term::Private::out.write(screen_save() + clear_buffer() + style(Style::Reset) + cursor_move(1, 1)); }
if(getOptions().has(Option::NoCursor)) { Term::Private::out.write(cursor_off()); }
setMode();
}
22 changes: 11 additions & 11 deletions cpp-terminal/terminal_impl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,16 @@ class Terminal
public:
~Terminal() noexcept;
Terminal() noexcept;
Terminal(const Terminal&) = delete;
Terminal(Terminal&&) = delete;
Terminal& operator=(Terminal&&) = delete;
Terminal& operator=(const Terminal&) = delete;
template<typename... Args> static void setOptions(const Args&&... args)
Terminal(const Terminal&) = delete;
Terminal(Terminal&&) = delete;
Terminal& operator=(Terminal&&) = delete;
Terminal& operator=(const Terminal&) = delete;
template<typename... Args> void setOptions(const Args&&... args)
{
m_options = {args...};
applyOptions();
}
static Term::Options getOptions() noexcept;
Term::Options getOptions() const noexcept;

private:
///
Expand All @@ -43,18 +43,18 @@ class Terminal
///@brief Set mode raw/cooked.
///First call is to save the good state set-up by cpp-terminal.
///
static void setMode();
void setMode() const;

static void setOptions();
static void applyOptions();
void setOptions();
void applyOptions() const;

static std::size_t setMouseEvents();
static std::size_t unsetMouseEvents();
static std::size_t setFocusEvents();
static std::size_t unsetFocusEvents();

static void set_unset_utf8();
static Term::Options m_options;
static void set_unset_utf8();
Term::Options m_options;
};

} // namespace Term

1 comment on commit 59ca651

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cpp-Linter Report ⚠️

Some files did not pass the configured checks!

clang-tidy reports: 40 concern(s)
  • cpp-terminal/options.cpp

    cpp-terminal/options.cpp:14:35: warning: [misc-include-cleaner]

    no header providing "std::initializer_list" is directly included

       13 | 
       14 | Term::Options::Options(const std::initializer_list<Term::Option>& option) : m_Options(option) { clean(); }
          |                                   ^

    cpp-terminal/options.cpp:21:8: warning: [misc-include-cleaner]

    no header providing "std::vector" is directly included

       13 | 
       14 | Term::Options::Options(const std::initializer_list<Term::Option>& option) : m_Options(option) { clean(); }
       15 | 
       16 | bool Term::Options::operator==(const Options& options) { return m_Options == options.m_Options; }
       17 | bool Term::Options::operator!=(const Options& options) { return !(m_Options == options.m_Options); }
       18 | 
       19 | void Term::Options::clean()
       20 | {
       21 |   std::vector<Term::Option> cleaned;
          |        ^

    cpp-terminal/options.cpp:25:16: warning: [misc-include-cleaner]

    no header providing "std::size_t" is directly included

       13 | 
       14 | Term::Options::Options(const std::initializer_list<Term::Option>& option) : m_Options(option) { clean(); }
       15 | 
       16 | bool Term::Options::operator==(const Options& options) { return m_Options == options.m_Options; }
       17 | bool Term::Options::operator!=(const Options& options) { return !(m_Options == options.m_Options); }
       18 | 
       19 | void Term::Options::clean()
       20 | {
       21 |   std::vector<Term::Option> cleaned;
       22 |   std::sort(m_Options.begin(), m_Options.end());
       23 |   while(!m_Options.empty())
       24 |   {
       25 |     const std::size_t count      = std::count(m_Options.begin(), m_Options.end(), m_Options[0]);
          |                ^

    cpp-terminal/options.cpp:26:16: warning: [misc-include-cleaner]

    no header providing "std::size_t" is directly included

       13 | 
       14 | Term::Options::Options(const std::initializer_list<Term::Option>& option) : m_Options(option) { clean(); }
       15 | 
       16 | bool Term::Options::operator==(const Options& options) { return m_Options == options.m_Options; }
       17 | bool Term::Options::operator!=(const Options& options) { return !(m_Options == options.m_Options); }
       18 | 
       19 | void Term::Options::clean()
       20 | {
       21 |   std::vector<Term::Option> cleaned;
       22 |   std::sort(m_Options.begin(), m_Options.end());
       23 |   while(!m_Options.empty())
       24 |   {
       25 |     const std::size_t count      = std::count(m_Options.begin(), m_Options.end(), m_Options[0]);
       26 |     const std::size_t anti_count = std::count(m_Options.begin(), m_Options.end(), static_cast<Term::Option>(-1 * static_cast<std::int16_t>(m_Options[0])));
          |                ^

    cpp-terminal/options.cpp:26:131: warning: [misc-include-cleaner]

    no header providing "std::int16_t" is directly included

       13 | 
       14 | Term::Options::Options(const std::initializer_list<Term::Option>& option) : m_Options(option) { clean(); }
       15 | 
       16 | bool Term::Options::operator==(const Options& options) { return m_Options == options.m_Options; }
       17 | bool Term::Options::operator!=(const Options& options) { return !(m_Options == options.m_Options); }
       18 | 
       19 | void Term::Options::clean()
       20 | {
       21 |   std::vector<Term::Option> cleaned;
       22 |   std::sort(m_Options.begin(), m_Options.end());
       23 |   while(!m_Options.empty())
       24 |   {
       25 |     const std::size_t count      = std::count(m_Options.begin(), m_Options.end(), m_Options[0]);
       26 |     const std::size_t anti_count = std::count(m_Options.begin(), m_Options.end(), static_cast<Term::Option>(-1 * static_cast<std::int16_t>(m_Options[0])));
          |                                                                                                                                   ^

    cpp-terminal/options.cpp:28:104: warning: [misc-include-cleaner]

    no header providing "std::int16_t" is directly included

       13 | 
       14 | Term::Options::Options(const std::initializer_list<Term::Option>& option) : m_Options(option) { clean(); }
       15 | 
       16 | bool Term::Options::operator==(const Options& options) { return m_Options == options.m_Options; }
       17 | bool Term::Options::operator!=(const Options& options) { return !(m_Options == options.m_Options); }
       18 | 
       19 | void Term::Options::clean()
       20 | {
       21 |   std::vector<Term::Option> cleaned;
       22 |   std::sort(m_Options.begin(), m_Options.end());
       23 |   while(!m_Options.empty())
       24 |   {
       25 |     const std::size_t count      = std::count(m_Options.begin(), m_Options.end(), m_Options[0]);
       26 |     const std::size_t anti_count = std::count(m_Options.begin(), m_Options.end(), static_cast<Term::Option>(-1 * static_cast<std::int16_t>(m_Options[0])));
       27 |     if(count > anti_count) { cleaned.emplace_back(m_Options[0]); }
       28 |     else if(count < anti_count) { cleaned.emplace_back(static_cast<Term::Option>(-1 * static_cast<std::int16_t>(m_Options[0]))); }
          |                                                                                                        ^

    cpp-terminal/options.cpp:29:117: warning: [misc-include-cleaner]

    no header providing "std::int16_t" is directly included

       13 |     m_Options.erase(std::remove(m_Options.begin(), m_Options.end(), static_cast<Term::Option>(-1 * static_cast<std::int16_t>(m_Options[0]))), m_Options.end());
          |                                                                                                                     ^
  • cpp-terminal/options.hpp

    cpp-terminal/options.hpp:1:1: warning: [llvm-header-guard]

    header is missing header guard

        1 | /*
          | ^
  • cpp-terminal/private/terminal_impl.cpp

    cpp-terminal/private/terminal_impl.cpp:11:1: warning: [misc-include-cleaner]

    included header env.hpp is not used directly

       11 | #include "cpp-terminal/private/env.hpp"
          | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       12 | #include "cpp-terminal/private/exception.hpp"

    cpp-terminal/private/terminal_impl.cpp:14:1: warning: [misc-include-cleaner]

    included header terminal.hpp is not used directly

       14 | #include "cpp-terminal/terminal.hpp"
          | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       15 | 

    cpp-terminal/private/terminal_impl.cpp:32:12: warning: [misc-include-cleaner]

    no header providing "Term::Terminal" is directly included

       10 | void Term::Terminal::set_unset_utf8()
          |            ^

    cpp-terminal/private/terminal_impl.cpp:56:16: warning: [misc-include-cleaner]

    no header providing "std::string" is directly included

       15 |     const std::string  read{Term::Private::in.read()};
          |                ^

    cpp-terminal/private/terminal_impl.cpp:58:16: warning: [misc-include-cleaner]

    no header providing "std::size_t" is directly included

       15 |     const std::size_t  moved{cursor_after.column() - cursor_before.column()};
          |                ^

    cpp-terminal/private/terminal_impl.cpp:59:10: warning: [misc-include-cleaner]

    no header providing "std::string" is directly included

       15 |     std::string        rem;
          |          ^

    cpp-terminal/private/terminal_impl.cpp:61:14: warning: [misc-include-cleaner]

    no header providing "std::size_t" is directly included

       15 |     for(std::size_t i = 0; i != moved; ++i) { rem += "\b \b"; }
          |              ^

    cpp-terminal/private/terminal_impl.cpp:61:28: warning: [altera-id-dependent-backward-branch]

    backward branch (for loop) is ID-dependent due to variable reference to 'moved' and may cause performance degradation

       61 |     for(std::size_t i = 0; i != moved; ++i) { rem += "\b \b"; }
          |                            ^
    /home/runner/work/cpp-terminal/cpp-terminal/cpp-terminal/private/terminal_impl.cpp:58:5: note: inferred assignment of ID-dependent value from ID-dependent 
       58 |     const std::size_t  moved{cursor_after.column() - cursor_before.column()};
          |     ^

    cpp-terminal/private/terminal_impl.cpp:73:12: warning: [misc-include-cleaner]

    no header providing "Term::Terminal" is directly included

       10 | void Term::Terminal::store_and_restore() noexcept
          |            ^

    cpp-terminal/private/terminal_impl.cpp:124:6: warning: [misc-include-cleaner]

    no header providing "std::size_t" is directly included

       15 | std::size_t Term::Terminal::setMouseEvents()
          |      ^

    cpp-terminal/private/terminal_impl.cpp:124:19: warning: [misc-include-cleaner]

    no header providing "Term::Terminal" is directly included

       10 | std::size_t Term::Terminal::setMouseEvents()
          |                   ^

    cpp-terminal/private/terminal_impl.cpp:133:6: warning: [misc-include-cleaner]

    no header providing "std::size_t" is directly included

       15 | std::size_t Term::Terminal::unsetMouseEvents()
          |      ^

    cpp-terminal/private/terminal_impl.cpp:133:19: warning: [misc-include-cleaner]

    no header providing "Term::Terminal" is directly included

       10 | std::size_t Term::Terminal::unsetMouseEvents()
          |                   ^

    cpp-terminal/private/terminal_impl.cpp:142:6: warning: [misc-include-cleaner]

    no header providing "std::size_t" is directly included

       15 | std::size_t Term::Terminal::setFocusEvents()
          |      ^

    cpp-terminal/private/terminal_impl.cpp:142:19: warning: [misc-include-cleaner]

    no header providing "Term::Terminal" is directly included

       10 | std::size_t Term::Terminal::setFocusEvents()
          |                   ^

    cpp-terminal/private/terminal_impl.cpp:151:6: warning: [misc-include-cleaner]

    no header providing "std::size_t" is directly included

       15 | std::size_t Term::Terminal::unsetFocusEvents()
          |      ^

    cpp-terminal/private/terminal_impl.cpp:151:19: warning: [misc-include-cleaner]

    no header providing "Term::Terminal" is directly included

       10 | std::size_t Term::Terminal::unsetFocusEvents()
          |                   ^

    cpp-terminal/private/terminal_impl.cpp:160:12: warning: [misc-include-cleaner]

    no header providing "Term::Terminal" is directly included

       10 | void Term::Terminal::setMode() const
          |            ^

    cpp-terminal/private/terminal_impl.cpp:194:40: warning: [misc-include-cleaner]

    no header providing "std::size_t" is directly included

       15 |       raw.c_cflag &= ~static_cast<std::size_t>(CSIZE | PARENB);
          |                                        ^

    cpp-terminal/private/terminal_impl.cpp:202:22: warning: [misc-include-cleaner]

    no header providing "Term::Option" is directly included

       11 |     if(m_options.has(Option::Raw))
          |                      ^

    cpp-terminal/private/terminal_impl.cpp:202:30: warning: [misc-include-cleaner]

    no header providing "Term::Option::Raw" is directly included

       11 |     if(m_options.has(Option::Raw))
          |                              ^

    cpp-terminal/private/terminal_impl.cpp:204:41: warning: [misc-include-cleaner]

    no header providing "std::size_t" is directly included

       15 |       send.c_iflag &= ~static_cast<std::size_t>(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON | INPCK);
          |                                         ^

    cpp-terminal/private/terminal_impl.cpp:209:41: warning: [misc-include-cleaner]

    no header providing "std::size_t" is directly included

       15 |       send.c_lflag &= ~static_cast<std::size_t>(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
          |                                         ^

    cpp-terminal/private/terminal_impl.cpp:213:27: warning: [misc-include-cleaner]

    no header providing "Term::Option" is directly included

       11 |     else if(m_options.has(Option::Cooked))
          |                           ^

    cpp-terminal/private/terminal_impl.cpp:213:35: warning: [misc-include-cleaner]

    no header providing "Term::Option::Cooked" is directly included

       11 |     else if(m_options.has(Option::Cooked))
          |                                   ^

    cpp-terminal/private/terminal_impl.cpp:219:22: warning: [misc-include-cleaner]

    no header providing "Term::Option" is directly included

       11 |     if(m_options.has(Option::NoSignalKeys)) { send.c_lflag &= ~static_cast<std::size_t>(ISIG); }  //FIXME need others flags !
          |                      ^

    cpp-terminal/private/terminal_impl.cpp:219:30: warning: [misc-include-cleaner]

    no header providing "Term::Option::NoSignalKeys" is directly included

       11 |     if(m_options.has(Option::NoSignalKeys)) { send.c_lflag &= ~static_cast<std::size_t>(ISIG); }  //FIXME need others flags !
          |                              ^

    cpp-terminal/private/terminal_impl.cpp:219:81: warning: [misc-include-cleaner]

    no header providing "std::size_t" is directly included

       15 |     if(m_options.has(Option::NoSignalKeys)) { send.c_lflag &= ~static_cast<std::size_t>(ISIG); }  //FIXME need others flags !
          |                                                                                 ^

    cpp-terminal/private/terminal_impl.cpp:220:27: warning: [misc-include-cleaner]

    no header providing "Term::Option" is directly included

       11 |     else if(m_options.has(Option::NoSignalKeys)) { send.c_lflag |= ISIG; }
          |                           ^

    cpp-terminal/private/terminal_impl.cpp:220:35: warning: [misc-include-cleaner]

    no header providing "Term::Option::NoSignalKeys" is directly included

       11 |     else if(m_options.has(Option::NoSignalKeys)) { send.c_lflag |= ISIG; }
          |                                   ^
  • cpp-terminal/terminal_impl.hpp

    cpp-terminal/terminal_impl.hpp:1:1: warning: [llvm-header-guard]

    header is missing header guard

        1 | /*
          | ^

    cpp-terminal/terminal_impl.hpp:13:1: warning: [misc-include-cleaner]

    included header terminal_initializer.hpp is not used directly

       13 | #include "cpp-terminal/terminal_initializer.hpp"
          | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       14 | 

Have any feedback or feature suggestions? Share it here.

Please sign in to comment.