C++ Utilities 5.14.0
Useful C++ classes and routines such as argument parser, IO and conversion utilities
commandlineutils.h
Go to the documentation of this file.
1#ifndef APPLICATION_UTILITIES_COMMANDLINEUTILS_H
2#define APPLICATION_UTILITIES_COMMANDLINEUTILS_H
3
4#include "../global.h"
5
6#include <ostream>
7
8#ifdef PLATFORM_WINDOWS
9#include <memory>
10#include <vector>
11#endif
12
13namespace CppUtilities {
14
18enum class Response { None, Yes, No };
19
20CPP_UTILITIES_EXPORT bool confirmPrompt(const char *message, Response defaultResponse = Response::None);
21
22#ifdef PLATFORM_WINDOWS
23CPP_UTILITIES_EXPORT void startConsole();
24CPP_UTILITIES_EXPORT std::pair<std::vector<std::unique_ptr<char[]>>, std::vector<char *>> convertArgsToUtf8();
25#define CMD_UTILS_START_CONSOLE ::CppUtilities::startConsole();
26#define CMD_UTILS_CONVERT_ARGS_TO_UTF8 \
27 auto utf8Args = ::CppUtilities::convertArgsToUtf8(); \
28 argv = utf8Args.second.data(); \
29 argc = static_cast<int>(utf8Args.second.size());
30#else
31#define CMD_UTILS_START_CONSOLE
32#define CMD_UTILS_CONVERT_ARGS_TO_UTF8
33#endif
34
41 TerminalSize(unsigned short rows = 0, unsigned short columns = 0, unsigned short width = 0, unsigned short height = 0);
42
44 unsigned short rows;
46 unsigned short columns;
48 unsigned short width;
50 unsigned short height;
51};
52
53inline TerminalSize::TerminalSize(unsigned short rows, unsigned short columns, unsigned short width, unsigned short height)
54 : rows(rows)
55 , columns(columns)
56 , width(width)
57 , height(height)
58{
59}
60
62
67public:
68 Indentation(unsigned char level = 4, char character = ' ')
69 : level(level)
70 , character(character)
71 {
72 }
73
74 Indentation operator+(unsigned char level)
75 {
76 return Indentation(this->level + level, character);
77 }
78
79 unsigned char level;
81};
82
83inline CPP_UTILITIES_EXPORT std::ostream &operator<<(std::ostream &out, Indentation indentation)
84{
85 for (unsigned char i = 0; i < indentation.level; ++i) {
86 out << indentation.character;
87 }
88 return out;
89}
90
91} // namespace CppUtilities
92
93#endif // APPLICATION_UTILITIES_COMMANDLINEUTILS_H
The Indentation class allows printing indentation conveniently, eg.
Indentation(unsigned char level=4, char character=' ')
Indentation operator+(unsigned char level)
#define CPP_UTILITIES_EXPORT
Marks the symbol to be exported by the c++utilities library.
Contains all utilities provides by the c++utilities library.
CPP_UTILITIES_EXPORT TerminalSize determineTerminalSize()
Returns the current size of the terminal.
CPP_UTILITIES_EXPORT std::ostream & operator<<(std::ostream &out, Indentation indentation)
Response
The Response enum is used to specify the default response for the confirmPrompt() method.
CPP_UTILITIES_EXPORT bool confirmPrompt(const char *message, Response defaultResponse=Response::None)
Prompts for confirmation displaying the specified message.
The TerminalSize struct describes a terminal size.
unsigned short width
width in pixel
unsigned short height
height in pixel
TerminalSize(unsigned short rows=0, unsigned short columns=0, unsigned short width=0, unsigned short height=0)
unsigned short columns
number of columns
unsigned short rows
number of rows
constexpr int i