- PVSM.RU - https://www.pvsm.ru -

Если вы захотите использовать это ПО в своём проекте или упомянуть в статье, будьте добры, указывайте на его ссылку [4].
Если у вас возникнет желание внести свой вклад в репозиторий, сначала прочтите этот файл [5].
Документация кода сгенерирована при помощи Doxygen [6] и доступна здесь [7]. Помимо этого, есть ещё справочная страница GitHub [8], которая содержит дополнительные практические инструкции и множество примеров.
Вот некоторые из них:

Цвета и стили

Индикаторы выполнения

Двухмерная графика в терминале
Поддерживаемые ОС:
OS_Decorator [9] для удобства управления стилизацией потока вывода программы;Управление цветом и стилем [10]:
#include <iostream>
#include <osmanip/manipulators/colsty.hpp>
// Вывод красной строки
std::cout << osm::feat( osm::col, "red" ) <<
"This string is red!" << osm::feat( osm::rst, "color" );
// Вывод жирной строки
std::cout << osm::feat( osm::sty, "red" ) <<
"This string is bold!" << osm::feat( osm::rst, "bd/ft" );
Управление курсором [11]:
#include <iostream>
#include <osmanip/manipulators/cursor.hpp>
// Перемещение курсора вправо на два пробела
std::cout << osm::feat( osm::crs, "right", 2 ) << "Cursor moved!";
Управляющие последовательности для терминала [12]:
#include <iostream>
#include <osmanip/manipulators/cursor.hpp>
// Вывод звука колокольчика
std::cout << osm::feat( osm::tcs, "bell" );
Дополнительные функции [13]:
#include <iostream>
#include <osmanip/manipulators/printer.hpp>
// Аналог Python функции "print"
osm::print( std::cout, "This is the ", ""print" ",
"function for the normal output stream! ", 100, "% working!" );
Класс для управления стилизацией вывода программы [14]:
#include <iostream>
#include <osmanip/manipulators/printer.hpp>
osm::OS_Decorator my_shell;
// Изменение предопределённого стиля и цвета std::cout
my_shell.setColor( "green", std::cout );
my_shell.setStyle( "underlined", std::cout );
my_shell( std::cout ) << "The stdout stream has been changed
using the OS_Decorator class!" << "n";
// Изменение предопределённого стиля и цвета std::cerr
my_shell.setColor( "red", std::cerr );
my_shell.setStyle( "bold italics", std::cerr ); // Примечание: добавлено 2 стиля
my_shell( std::cerr ) << "The stderr stream has been changed
using the OS_Decorator class!" << "n";
Дополнительные примеры и инструкции можно найти здесь [15].
Почему для работы с escape-последовательностями стоит выбрать именно эту библиотеку:
Процентный индикатор [16]:
#include <iostream>
#include <osmanip/progressbar/progressbar.hpp>
#include <osmanip/utility/options.hpp>
osm::ProgressBar<int> percentage_bar;
percentage_bar.setMin( 5 );
percentage_bar.setMax ( 46 );
percentage_bar.setStyle( "indicator", "%" );
std::cout << "This is a normal percentage bar: " << "n";
osm::OPTION( osm::CURSOR::OFF ); // Сокрытие курсора для лучшей отрисовки вывода
for ( int i = percentage_bar.getMin(); i < percentage_bar.getMax(); i++ )
{
percentage_bar.update( i );
//Выполнение операций...
}
osm::OPTION( osm::CURSOR::ON );

Индикатор загрузки [17]:
#include <iostream>
#include <osmanip/progressbar/progressbar.hpp>
#include <osmanip/utility/options.hpp>
osm::ProgressBar<int> loading_bar( 3, 25 );
loading_bar.setStyle( "loader", "#" );
loading_bar.setBrackets( "{", "}" );
loading_bar.setMessage( "processing..." );
std::cout << "This is a normal loading bar: " << "n";
osm::OPTION( osm::CURSOR::OFF ); // Сокрытие курсора для лучшей отрисовки вывода
for ( int i = loading_bar.getMin(); i < loading_bar.getMax(); i++ )
{
loading_bar.update( i );
//Выполнение операций...
}
osm::OPTION( osm::CURSOR::ON );

Смешанный прогресс бар [18]:
#include <iostream>
#include <osmanip/progressbar/progressbar.hpp>
#include <osmanip/utility/options.hpp>
osm::ProgressBar<int> progress_bar( 3, 25 );
progress_bar.setStyle( "complete", "%", "■" );
progress_bar.setBrackets( "[", "]" );
progress_bar.setMessage( "elaborating..." );
progress_bar.setRemainingTimeFlag( "on" );
progress_bar.setColor( "red" );
std::cout << "This is a mixed progress bar with color
and time remaining info: " << "n";
osm::OPTION( osm::CURSOR::OFF ); // Сокрытие курсора для лучшей отрисовки вывода
for ( int i = progress_bar.getMin(); i < progress_bar.getMax(); i++ )
{
progress_bar.update( i );
//Выполнение операций...
}
osm::OPTION( osm::CURSOR::ON );

Спиннер [19]:
#include <iostream>
#include <osmanip/progressbar/progressbar.hpp>
#include <osmanip/utility/options.hpp>
osm::ProgressBar<int> spinner;
spinner.setMin( 2 );
spinner.setMax ( 33 );
spinner.setStyle( "spinner", "/-\|" );
std::cout << "This is a progress spinner: " << "n";
osm::OPTION( osm::CURSOR::OFF ); // Сокрытие курсора для лучшей отрисовки вывода
for ( int i = spinner.getMin(); i < spinner.getMax(); i++ )
{
spinner.update( i );
//Выполнение операций...
}
osm::OPTION( osm::CURSOR::ON );

Дополнительные примеры и инструкции можно найти здесь [20].
Преимущества использования именно этой библиотеки для реализации индикаторов выполнения:
integer, float, double и прочих);Создание анимаций [21]:
#include <osmanip/manipulators/colsty.hpp>
#include <osmanip/graphics/canvas.hpp>
osm::Canvas canvas(10,10);
canvas.setBackground( '.', osm::feat( osm::col, "bg white" ) +
osm::feat( osm::col, "black" ) );
std::cout << "Display an animation in a canvasn";
for( uint i = 0; i < 10; i++ )
{
canvas.clear();
canvas.put( 0, 2, 'x' );
canvas.put( i, 3, 'A', osm::feat( osm::col, "red" ) );
canvas.put( 5, 0, 'B', osm::feat( osm::col, "blue" ) );
canvas.put( 7, 8, 'Z', osm::feat( osm::col, "bg cyan" ) +
osm::feat( osm::col, "black" ) + osm::feat( osm::sty, "bold" ) );
canvas.refresh();
}

Построение 2D-графиков [22]:
#include <functional>
#include <osmanip/manipulators/colsty.hpp>
#include <osmanip/graphics/canvas.hpp>
osm::Plot2DCanvas plot_2d_canvas( 50, 20 );
std::cout << "n" << "Plot2DCanvas with sin and cos" << "n";
plot_2d_canvas.setBackground( ' ', osm::feat( osm::col, "bg white" ) );
plot_2d_canvas.enableFrame( true );
plot_2d_canvas.setFrame( osm::FrameStyle::BOX,
osm::feat( osm::col, "bg white" ) + osm::feat( osm::col, "black" ) );
plot_2d_canvas.enableFrame( true );
plot_2d_canvas.setFrame( osm::FrameStyle::BOX,
osm::feat( osm::col, "bg white" ) + osm::feat( osm::col, "black" ) );
plot_2d_canvas.setScale( 1/3.14, 0.2) ;
for( float i = 0; i < 40; i++ )
{
plot_2d_canvas.setOffset( i/3.14, -2 );
plot_2d_canvas.clear();
plot_2d_canvas.draw( std::function <float( float )>( []( float x ) ->
float{ return std::cos( x ); } ), 'X',
osm::feat( osm::col, "bg white" ) +
osm::feat( osm::col, "bd red" ) );
plot_2d_canvas.draw( std::function <float( float )>( []( float x ) ->
float{ return std::sin( x ); } ), 'X',
osm::feat( osm::col, "bg white" ) +
osm::feat( osm::col, "bd blue" ) );
plot_2d_canvas.refresh();
sleep_for( milliseconds( 100 ) );
}

Дополнительные примеры и инструкции можно найти здесь [23].
Преимущества реализации графики в терминале с помощью этой библиотеки:
// Активация escape-последовательностей ANSI
osm::OPTION( osm::ANSI::ON );
// выполнение нужных действий...
osm::OPTION( osm::ANSI::ON );
// Активация символов unicode
osm::OPTION( osm::UNICODECH::ON );
// выполнение нужных действий...
osm::OPTION( osm::UNICODECH::ON );
Дополнительные примеры и инструкции можно найти здесь [24].
1. Скачать один из релизов [25] репозитория.
2. Распаковать архив и открыть каталог.
3. Установить и скомпилировать библиотеку с зависимостями при помощи установочного скрипта.
./script/install.sh
Этот скрипт поддерживает установку под Ubuntu, MacOS, Windows и прочими операционными системами.
Примечание: если вы работаете в Cygwin64, то можете получить ошибку, связанную с символом
r. Чтобы её избежать, предварительно выполните для скрипта командуdos2unix.
В результате в каталоге /usr/lib создаётся новая библиотека, а файлы заголовков устанавливаются по пути /usr/include.
Примечание: если вы работаете в MacOS или Windows, пути будут несколько отличаться (см. install.sh).
Обязательные программы (устанавливаются автоматически скриптом):
Необязательные программы, для разработчиков:
4. Дополнительно: для периодического обновления репозитория:
./scripts/update.sh
./scripts/install.sh
5. Дополнительно: для деинсталляции репозитория из системы:
./scripts/uninstall.sh
Для использования одного или более заголовков библиотеки:
#include <osmanip/module_folder/module_name.hpp>
В случае использования библиотеки в программе добавьте флаг -losmanip для линковки исходного кода.
Примечание: не забудьте также добавить флаг
-pthread, если хотите использовать потокозависимые библиотеки вроде progressbar/multi_progress_bar.hpp [37].
Компиляция примеров:
make main
Запуск примеров:
./bin/manipulators
./bin/progressbar
./bin/graphics
Примечание: если вы работаете в Windows, исполняемые файлы оканчиваются на .exe.
Компиляция тестов:
make tests
Запуск тестов:
./bin/tests
Также есть вариант вернуться обратно в состояние до компиляции. Для этого просто выполните:
make clean
Я добавил кое-какие дополнительные полезные скрипты в каталог scripts [38]. После компиляции исходного кода их можно будет запустить из домашнего каталога репозитория.
Скрипт debug.sh используется для запуска отладчиков Valgrind и Cppcheck для всего кода.
Valgrind можно запустить через отдельный исполняемый файл:
./scripts/debug_cpp.sh [valgrind-tool-name] [executable-name]
osmanip/
├── .github/
│ ├── workflows/
│ │ ├── DocGenerator.yml
│ │ ├── codeql-analysis.yml
├── img/
├── include/
│ ├── graphics/
│ │ ├── canvas.hpp
│ │ ├── plot_2D.hpp
│ ├── manipulators/
│ │ ├── colsty.hpp
│ │ ├── cursor.hpp
│ │ ├── common.hpp
│ │ ├── printer.hpp
│ ├── progressbar/
│ │ ├── progress_bar.hpp
│ │ ├── multi_progress_bar.hpp
│ ├── utility/
│ │ ├── windows.hpp
│ │ ├── options.hpp
├── src/
│ ├── graphics/
│ │ ├── canvas.cpp
│ │ ├── plot_2D.cpp
│ ├── manipulators/
│ │ ├── colsty.cpp
│ │ ├── cursor.cpp
│ │ ├── common.cpp
│ │ ├── printer.hpp
│ ├── progressbar/
│ │ ├── progress_bar.cpp
│ │ ├── multi_progress_bar.cpp
│ ├── utility/
│ │ ├── windows.cpp
├── examples/
│ ├── manipulators.cpp
│ ├── progressbar.cpp
│ ├── graphics.cpp
├── scripts/
│ ├── debug.sh
│ ├── install.sh
│ ├── uninstall.sh
│ ├── update.sh
│ ├── size_of_dir.py
├── test/
│ ├── graphics/
│ │ ├── tests_canvas.cpp
│ │ ├── tests_plot_2D.cpp
│ ├── manipulators/
│ │ ├── tests_common.cpp
│ │ ├── tests_colsty.cpp
│ │ ├── tests_cursor.cpp
│ │ ├── tests_printer.cpp
│ ├── progressbar/
│ │ ├── tests_progress_bar.cpp
│ │ ├── tests_multi_progress_bar.cpp
│── README.md
│── CONTRIBUTING.md
│── LICENSE
│── CITATION.cff
│── Makefile
│── Doxyfile
│── .gitignore
│── .clang-format
│── .valgrindrc
│── .gitignore
│── .all-contributorsrc
OS_decorator новые методы;elapsedTime() для отображения пройденного времени выполнения, заменив им существующий метод getTime();
Автор: Дмитрий Брайт
Источник [39]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/377678
Ссылки в тексте:
[1] управляющими последовательностями ANSI: https://gist.github.com/fnky/458719343aabd01cfb17a3a4f7296797
[2] скачать последний архив репозитория: https://github.com/JustWhit3/osmanip/archive/main.zip
[3] скачать локальную копию: https://www.codeproject.com/KB/Articles/5337124/main.zip
[4] ссылку: https://github.com/JustWhit3/osmanip/blob/main/CITATION.cff
[5] этот файл: https://github.com/JustWhit3/osmanip/blob/main/CONTRIBUTING.md
[6] Doxygen: https://www.doxygen.nl/manual/starting.html
[7] здесь: https://justwhit3.github.io/osmanip/
[8] справочная страница GitHub: https://github.com/JustWhit3/osmanip/wiki
[9] OS_Decorator: https://github.com/JustWhit3/osmanip/blob/main/include/manipulators/printer.hpp#:~:text=*/-,class%20OS_Decorator,-%7B
[10] Управление цветом и стилем: https://github.com/JustWhit3/osmanip/wiki/ANSI-escape-sequences-manipulators#colors-and-styles-manipulators
[11] Управление курсором: https://github.com/JustWhit3/osmanip/wiki/ANSI-escape-sequences-manipulators#cursor-manipulators
[12] Управляющие последовательности для терминала: https://github.com/JustWhit3/osmanip/wiki/ANSI-escape-sequences-manipulators#terminal-control-sequences
[13] Дополнительные функции: https://github.com/JustWhit3/osmanip/wiki/ANSI-escape-sequences-manipulators#the-osmprint-function
[14] Класс для управления стилизацией вывода программы: https://github.com/JustWhit3/osmanip/wiki/ANSI-escape-sequences-manipulators#the-osmprint-function:~:text=osm%3A%3AOS_Decorator%20class-,Can%20be%20accessed%20with%3A,-%23include%20%3C
[15] здесь: https://github.com/JustWhit3/osmanip/wiki/ANSI-escape-sequences-manipulators
[16] Процентный индикатор: https://github.com/JustWhit3/osmanip/wiki/Progress-bars#percentage-indicator
[17] Индикатор загрузки: https://github.com/JustWhit3/osmanip/wiki/Progress-bars#loading-bar
[18] Смешанный прогресс бар: https://github.com/JustWhit3/osmanip/wiki/Progress-bars#full-progress-bar
[19] Спиннер: https://github.com/JustWhit3/osmanip/wiki/Progress-bars#progress-spinner
[20] здесь: https://github.com/JustWhit3/osmanip/wiki/Progress-bars
[21] Создание анимаций: https://github.com/JustWhit3/osmanip/wiki/Terminal-graphics#canvases
[22] Построение 2D-графиков: https://github.com/JustWhit3/osmanip/wiki/Terminal-graphics#2D-graphics
[23] здесь: https://github.com/JustWhit3/osmanip/wiki/Terminal-graphics
[24] здесь: https://github.com/JustWhit3/osmanip/wiki/Options
[25] релизов: https://github.com/JustWhit3/osmanip/releases
[26] GNU make: https://www.opensourceforu.com/2012/06/gnu-make-in-detail-for-beginners/#:~:text=Installing%20GNU%20Make,install%20build%2Dessential.
[27] библиотека Boost: https://www.boost.org/
[28] библиотека arsenalgear: https://github.com/JustWhit3/arsenalgear-cpp
[29] Valgrind: https://valgrind.org/
[30] Cppcheck: https://github.com/danmar/cppcheck
[31] Clang formatter: https://stackoverflow.com/questions/20756924/how-can-i-install-clang-format-in-ubuntu#:~:text=16.04%2C%20simply%20do%3A-,sudo%20apt%20install%20clang%2Dformat,-Share
[32] wget: https://www.techwalla.com/articles/how-to-install-wget-in-ubuntu
[33] unzip: https://www.mysoftkey.com/linux/how-to-do-zip-and-unzip-file-in-ubuntu-linux/
[34] doctest: https://github.com/onqtam/doctest
[35] hurry.filesize: https://pypi.org/project/hurry.filesize/
[36] termcolor: https://pypi.org/project/termcolor/
[37] progressbar/multi_progress_bar.hpp: https://github.com/JustWhit3/osmanip/blob/main/include/progressbar/multi_progress_bar.hpp
[38] scripts: https://github.com/JustWhit3/osmanip/blob/main/scripts
[39] Источник: https://habr.com/ru/post/679758/?utm_source=habrahabr&utm_medium=rss&utm_campaign=679758
Нажмите здесь для печати.