Skip to content

Commit

Permalink
bugfix std::convertible_to
Browse files Browse the repository at this point in the history
 - abandoned cont Xyz & in std::convertible_to<>
 - made cout/wcout parameter const in the Terminal::hasColorSupport()
  • Loading branch information
silverqx committed Nov 13, 2022
1 parent 97c24cf commit 77e581f
Show file tree
Hide file tree
Showing 7 changed files with 35 additions and 38 deletions.
21 changes: 9 additions & 12 deletions include/orm/ormconcepts.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ namespace Query

/*! Concept for where()'s value parameter. */
template<typename T>
concept WhereValue = std::convertible_to<T, const QVariant &> ||
concept WhereValue = std::convertible_to<T, QVariant> ||
WhereValueSubQuery<T>;

/*! Concept for the join's table parameter. */
Expand All @@ -61,30 +61,27 @@ namespace Query

/*! Concept for the QString. */
template<typename T>
concept QStringConcept = std::convertible_to<T, const QString &> ||
std::convertible_to<T, QString>;
concept QStringConcept = std::convertible_to<T, QString>;

/*! Type for the database column. */
using Column = std::variant<QString, Query::Expression>;

/*! QString container concept (QStringList or QVector<QString>). */
template<typename T>
concept ColumnContainer = std::convertible_to<T, const QStringList &> ||
std::convertible_to<T, const QVector<QString> &> ||
std::convertible_to<T, const QVector<Column> &>;
concept ColumnContainer = std::convertible_to<T, QStringList> ||
std::convertible_to<T, QVector<QString>> ||
std::convertible_to<T, QVector<Column>>;

/*! QString container concept (used by ContainerUtils::join()). */
template<typename T>
concept JoinContainer = ColumnContainer<T> ||
std::convertible_to<T, const std::set<QString> &> ||
std::convertible_to<T, const std::deque<QString> &> ||
std::convertible_to<T, const std::vector<QString> &>;
std::convertible_to<T, std::set<QString>> ||
std::convertible_to<T, std::deque<QString>> ||
std::convertible_to<T, std::vector<QString>>;

// CUR concepts, check if const QString & vs QString in convertible_to<> makes sense silverqx
/*! Concept for delimiter for joining containers. */
template<typename T>
concept DelimiterConcept = std::convertible_to<T, const QString &> ||
std::convertible_to<T, QString> ||
concept DelimiterConcept = std::convertible_to<T, QString> ||
std::convertible_to<T, QChar>;

} // namespace Orm
Expand Down
2 changes: 1 addition & 1 deletion include/orm/query/querybuilder.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ namespace Orm::Query
/*! Concept for the remove() method parameter. */
template<typename T>
concept Remove = std::convertible_to<T, quint64> ||
std::same_as<T, Query::Expression>;
std::convertible_to<T, Query::Expression>;

// TODO querybuilder, whereDay/Month/..., whereFullText silverqx
// FUTURE querybuilder, paginator silverqx
Expand Down
6 changes: 3 additions & 3 deletions include/orm/utils/query.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,11 @@ namespace Orm::Utils

/*! Concept for a bindings type used in the replaceBindingsInSql(). */
template<typename T>
concept BindingsConcept = std::convertible_to<T, const QVector<QVariant> &> ||
concept BindingsConcept = std::convertible_to<T, QVector<QVariant>> ||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
std::convertible_to<T, const QVariantList &>;
std::convertible_to<T, QVariantList>;
#else
std::convertible_to<T, const QVariantMap &>;
std::convertible_to<T, QVariantMap>;
#endif

/*! Library class for database query. */
Expand Down
4 changes: 2 additions & 2 deletions tom/include/tom/concerns/interactswithio.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -169,10 +169,10 @@ namespace Concerns
bool dontOutput(Verbosity verbosity) const;

/*! Should the given output use ansi? (ansi is disabled for non-tty). */
bool isAnsiOutput(std::ostream &cout = std::cout) const;
bool isAnsiOutput(const std::ostream &cout = std::cout) const;
/*! Should the given output use ansi? (ansi is disabled for non-tty),
wide version. */
bool isAnsiWOutput(std::wostream &cout = std::wcout) const;
bool isAnsiWOutput(const std::wostream &cout = std::wcout) const;

/*! Write a string as error output (red box with a white text). */
QString errorWallInternal(const QString &string) const;
Expand Down
20 changes: 10 additions & 10 deletions tom/include/tom/terminal.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,12 @@ namespace Tom
static void initialize();

/*! Supports the given output ansi colors? (ansi is disabled for non-tty). */
bool hasColorSupport(std::ostream &cout = std::cout) const;
bool hasColorSupport(const std::ostream &cout = std::cout) const;
/*! Supports the given output ansi colors? (ansi is disabled for non-tty),
wide version. */
bool hasWColorSupport(std::wostream &wcout = std::wcout) const;
bool hasWColorSupport(const std::wostream &wcout = std::wcout) const;

/*! Determines whether a file descriptor is associated with a character device. */
/*! Determines if a file descriptor is associated with a character device. */
bool isatty(FILE *stream) const;

/*! Obtain the current terminal width. */
Expand Down Expand Up @@ -69,14 +69,14 @@ namespace Tom
private:
/*! Supports the given output ansi colors? (common logic). */
template<OStreamConcept O>
bool hasColorSupportInternal(O &&cout, FILE *stream) const;
bool hasColorSupportInternal(const O &cout, FILE *stream) const;

#ifdef _WIN32
/*! Detect if c++ ostream has enabled virtual terminal processing. */
bool hasVt100Support(std::ostream &cout) const;
bool hasVt100Support(const std::ostream &cout) const;
/*! Detect if c++ wostream has enabled virtual terminal processing,
wide version. */
bool hasVt100Support(std::wostream &wcout) const;
bool hasVt100Support(const std::wostream &wcout) const;
#endif

/* Terminal initialization */
Expand All @@ -90,9 +90,9 @@ namespace Tom
#endif

/*! Cache for detected ansi output. */
mutable std::unordered_map<std::ostream *, bool> m_isAnsiOutput {};
mutable std::unordered_map<const std::ostream *, bool> m_isAnsiOutput {};
/*! Cache for detected ansi output, wide version. */
mutable std::unordered_map<std::wostream *, bool> m_isAnsiWOutput {};
mutable std::unordered_map<const std::wostream *, bool> m_isAnsiWOutput {};

/*! Current terminal width. */
int m_lastWidth = 80;
Expand All @@ -115,7 +115,7 @@ namespace Tom
/* private */

template<OStreamConcept O>
bool Terminal::hasColorSupportInternal(O &&cout, FILE *stream) const
bool Terminal::hasColorSupportInternal(const O &cout, FILE *stream) const
{
#ifndef _WIN32
Q_UNUSED(cout)
Expand All @@ -129,7 +129,7 @@ namespace Tom

#ifdef _WIN32
return isatty(stream) &&
(hasVt100Support(std::forward<O>(cout)) ||
(hasVt100Support(cout) ||
qEnvironmentVariableIsSet("ANSICON") ||
qEnvironmentVariable("ConEmuANSI") == QStringLiteral("ON") ||
qEnvironmentVariable("TERM") == QStringLiteral("xterm"));
Expand Down
4 changes: 2 additions & 2 deletions tom/src/tom/concerns/interactswithio.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -437,7 +437,7 @@ bool InteractsWithIO::dontOutput(const Verbosity verbosity) const
return verbosity > m_verbosity;
}

bool InteractsWithIO::isAnsiOutput(std::ostream &cout) const
bool InteractsWithIO::isAnsiOutput(const std::ostream &cout) const
{
// ansi was set explicitly on the command-line, respect it
if (m_ansi)
Expand All @@ -447,7 +447,7 @@ bool InteractsWithIO::isAnsiOutput(std::ostream &cout) const
return m_terminal->hasColorSupport(cout);
}

bool InteractsWithIO::isAnsiWOutput(std::wostream &wcout) const
bool InteractsWithIO::isAnsiWOutput(const std::wostream &wcout) const
{
// ansi was set explicitly on the command-line, respect it
if (m_ansi)
Expand Down
16 changes: 8 additions & 8 deletions tom/src/tom/terminal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ void Terminal::initialize()
#endif
}

bool Terminal::hasColorSupport(std::ostream &cout) const
bool Terminal::hasColorSupport(const std::ostream &cout) const
{
auto *const coutPointer = std::addressof(cout);
const auto *const coutPointer = std::addressof(cout);

// Return from the cache, compute only once
if (m_isAnsiOutput.contains(coutPointer))
Expand All @@ -62,9 +62,9 @@ bool Terminal::hasColorSupport(std::ostream &cout) const
return isAnsi;
}

bool Terminal::hasWColorSupport(std::wostream &wcout) const
bool Terminal::hasWColorSupport(const std::wostream &wcout) const
{
auto *const wcoutPointer = std::addressof(wcout);
const auto *const wcoutPointer = std::addressof(wcout);

// Return from the cache, compute only once
if (m_isAnsiWOutput.contains(wcoutPointer))
Expand Down Expand Up @@ -164,7 +164,7 @@ Terminal::TerminalSize Terminal::terminalSize() const
namespace
{
/*! Get Windows output handle by passed c++ output stream. */
HANDLE getStdHandleByCppStream(std::ostream &cout = std::cout)
HANDLE getStdHandleByCppStream(const std::ostream &cout = std::cout)
{
HANDLE handle = nullptr;

Expand All @@ -181,7 +181,7 @@ namespace
}

/*! Get Windows output handle by passed c++ output stream, wide version. */
HANDLE getStdHandleByCppStream(std::wostream &wcout = std::wcout)
HANDLE getStdHandleByCppStream(const std::wostream &wcout = std::wcout)
{
HANDLE handle = nullptr;

Expand All @@ -198,7 +198,7 @@ namespace
}
} // namespace

bool Terminal::hasVt100Support(std::ostream &cout) const
bool Terminal::hasVt100Support(const std::ostream &cout) const
{
DWORD mode = 0;

Expand All @@ -209,7 +209,7 @@ bool Terminal::hasVt100Support(std::ostream &cout) const
ENABLE_VIRTUAL_TERMINAL_PROCESSING;
}

bool Terminal::hasVt100Support(std::wostream &wcout) const
bool Terminal::hasVt100Support(const std::wostream &wcout) const
{
DWORD mode = 0;

Expand Down

0 comments on commit 77e581f

Please sign in to comment.