Compare commits

...

96 Commits

Author SHA1 Message Date
31c6c022bc Варианты сборки в одном файле настройки 2020-04-15 19:12:49 +03:00
e243b899b3 update 2020-04-15 18:56:04 +03:00
84990e2821 update 2020-04-15 10:32:44 +03:00
16e8ef3bdb update 2020-04-15 10:00:09 +03:00
9a9bea6b1b update 2020-04-14 23:10:26 +03:00
fc6b02c833 update 2020-04-14 22:59:24 +03:00
329145eb50 update 2020-04-14 21:52:10 +03:00
7cab7eab1b update 2020-04-14 19:43:31 +03:00
fa7da4ab1b update 2020-04-14 17:23:07 +03:00
303837da8e update 2020-04-14 17:04:45 +03:00
0f27298764 update 2020-04-14 16:57:28 +03:00
2a6147b3db update 2020-04-14 16:55:21 +03:00
de13ec6e73 update 2020-04-14 16:54:05 +03:00
dc59d8785d update 2020-04-14 16:37:35 +03:00
12b1019cab update 2020-04-14 16:27:02 +03:00
4b640a0a34 update 2020-04-14 14:20:29 +03:00
8750675e43 update 2020-04-14 13:45:26 +03:00
5761bcb0fc update 2020-04-14 13:35:51 +03:00
9530058f05 update 2020-04-14 13:25:21 +03:00
ee4f156901 update 2020-04-14 13:19:33 +03:00
019eea73cf update 2020-04-14 13:10:34 +03:00
16f6a40456 update 2020-04-14 12:37:56 +03:00
3a2222cde3 update 2020-04-14 12:31:39 +03:00
8a4866ce9f update 2020-04-14 12:17:22 +03:00
2d0baaf290 update 2020-04-14 11:56:35 +03:00
3ca7530a29 update 2020-04-14 10:01:33 +03:00
6d71ca630a update 2020-04-14 09:43:55 +03:00
cf7d33f8b2 update 2020-04-14 09:37:33 +03:00
5f85ae0f8f update 2020-04-14 01:26:01 +03:00
9b4fe8fdb1 update 2020-04-14 01:11:23 +03:00
c89fed2c07 update 2020-04-14 00:57:48 +03:00
c22fcdfdd8 update 2020-04-13 13:22:56 +03:00
65a80b8d80 update 2020-04-13 13:18:15 +03:00
634cce1c8d update 2020-04-13 12:45:11 +03:00
ec06dd2a01 update 2020-04-13 12:31:59 +03:00
6d0d152039 update 2020-04-13 12:23:07 +03:00
2d8a272d2d update 2020-04-13 12:17:34 +03:00
59492ba5c6 update 2020-04-13 12:09:20 +03:00
e9970d2b2b update 2020-04-13 12:06:11 +03:00
bdda710617 update 2020-04-13 11:52:00 +03:00
e4d5715a06 update 2020-04-13 11:47:19 +03:00
3fe8173a31 update 2020-04-13 11:35:56 +03:00
ed3f6faa1b update 2020-04-13 11:31:26 +03:00
65007b699d update 2020-04-13 11:25:28 +03:00
0160aab51f update 2020-04-13 11:19:37 +03:00
4bdb12c95e update 2020-04-13 11:06:07 +03:00
305da06de1 update 2020-04-13 11:05:48 +03:00
e1873d9579 update 2020-04-13 10:54:15 +03:00
5facc2edd6 update 2020-04-13 10:33:11 +03:00
37e74cdbaf update 2020-04-13 10:02:30 +03:00
8f38d1d96c update 2020-04-13 10:00:26 +03:00
964fb48b9a update 2020-04-13 09:11:58 +03:00
78505cfa75 update 2020-04-13 09:08:14 +03:00
5602fbc30e update 2020-04-12 20:04:35 +03:00
0f1804e3fb gitignore 2020-04-12 19:59:32 +03:00
c6648d7ae8 update 2020-04-12 19:46:33 +03:00
b9ef4fb756 update 2020-04-12 17:13:09 +03:00
002213aa87 Важное изменение в настройках для переводов 2020-04-12 17:08:45 +03:00
ac5e2dd88e update 2020-04-11 23:58:43 +03:00
b7d2c2e280 update 2020-04-11 23:09:16 +03:00
40fac363ce update 2020-04-11 22:54:03 +03:00
b8d878287c update 2020-04-11 22:43:14 +03:00
a6d0505adb update 2020-04-11 22:00:06 +03:00
c99b5f0559 update 2020-04-11 21:53:54 +03:00
5fa1f983b8 update 2020-04-11 21:48:55 +03:00
5eb808d587 update 2020-04-11 21:20:55 +03:00
ee24a0d933 update 2020-04-11 21:06:02 +03:00
7430389f3c update 2020-04-11 20:59:22 +03:00
d84e23e0ad update 2020-04-11 20:49:41 +03:00
221a63a827 update 2020-04-11 20:44:28 +03:00
07bafa380d update 2020-04-11 20:36:44 +03:00
83f97f482e images 2020-04-11 20:20:31 +03:00
321e48c500 update 2020-04-11 20:16:51 +03:00
22067a2a3d update 2020-04-11 20:09:43 +03:00
494c9f31d6 update 2020-04-11 19:44:15 +03:00
2bcf387ba4 update 2020-04-11 18:07:10 +03:00
5bf5a20624 update 2020-04-11 16:19:35 +03:00
fff4e996d2 update 2020-04-11 15:13:41 +03:00
218f22c8d2 Merge branch 'master' of git.246060.ru:/f1x1t/dsp-site 2020-04-11 15:10:08 +03:00
d931b5aaea update 2020-04-11 14:57:13 +03:00
ec16a3a380 update 2020-04-10 18:13:06 +03:00
c41683d9e2 update 2020-04-10 18:10:40 +03:00
2abd41f429 update 2020-04-10 10:59:43 +03:00
f0cba8e7f6 update 2020-04-09 20:59:56 +03:00
8e1b48e868 update 2020-04-09 20:43:02 +03:00
d3fe32a96b update 2020-04-09 20:41:13 +03:00
62ab8db450 update 2020-04-09 20:39:10 +03:00
2af67616c8 update 2020-04-09 20:35:09 +03:00
d07e6a66f8 update 2020-04-09 20:10:52 +03:00
51adf6eb5a update 2020-04-09 19:23:16 +03:00
007afda3d1 update 2020-04-08 20:09:58 +03:00
3355f9185e update 2020-04-06 08:49:00 +03:00
1e5b6aa485 update 2020-04-04 11:51:36 +03:00
679bf869e8 Merge branch 'adoc' 2019-08-30 09:31:00 +03:00
1aaacb1df7 cmake 2019-08-29 17:34:57 +03:00
1068f502bb update 2019-07-15 21:47:09 +03:00
31 changed files with 1822 additions and 987 deletions

3
.gitignore vendored
View File

@ -10,3 +10,6 @@ upload.sh
wiki/**/*.png
wiki/**/*.png.cache
*.txt
upload-*.sh

View File

@ -2,7 +2,7 @@ build:
pelican -s pelicanconf.py
web:
pelican -s pelicanconf-web.py
COMPRESS=1 pelican -s pelicanconf.py
clean:
rm -rf cache __pycache__

View File

@ -2,8 +2,8 @@
========
```sh
sudo apt-get install pelican asciidoctor ruby-asciidoctor-pdf plantuml yui-compressor
sudo gem install asciidoctor-diagram
sudo apt-get install pelican plantuml yui-compressor
sudo gem install asciidoctor asciidoctor-pdf asciidoctor-diagram
```
Установка:
@ -18,6 +18,7 @@ git submodule update --init plugins/thirdparty/pelidoc
git submodule update --init plugins/thirdparty/yuicompressor-opt
git submodule update --init plugins/thirdparty/pandoc_reader
git submodule update --init plugins/thirdparty/replacer
git submodule update --init plugins/thirdparty/asciidoctor
git submodule update --init themes/bootstrap4
```

View File

@ -1,122 +0,0 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*- #
from __future__ import unicode_literals
import os
class i18n(object):
# looks for translations in
# {LOCALE_DIR}/{LANGUAGE}/LC_MESSAGES/{DOMAIN}.mo
# if not present, falls back to default
DOMAIN = 'messages'
LOCALE_DIR = '{THEME}/translations'
LANGUAGES = ['ru']
NEWSTYLE = True
__name__ = 'i18n'
def register(self):
from pelican.signals import generator_init
generator_init.connect(self.install_translator)
def install_translator(self, generator):
import gettext
try:
translator = gettext.translation(
self.DOMAIN,
self.LOCALE_DIR.format(THEME=THEME),
self.LANGUAGES)
except (OSError, IOError):
translator = gettext.NullTranslations()
generator.env.install_gettext_translations(translator, self.NEWSTYLE)
# ABOUT_ME = ' '
AUTHOR = 'Андрей Астафьев'
SITENAME = 'ДСП'
SITEURL = 'https://dsp.246060.ru'
PATH = 'wiki'
CACHE_PATH = 'cache'
TIMEZONE = 'Europe/Moscow'
DEFAULT_LANG = 'ru'
# Generation time
CACHE_CONTENT = True
LOAD_CONTENT_CACHE = True
# Feed generation is usually not desired when developing
FEED_ALL_ATOM = None
CATEGORY_FEED_ATOM = None
TRANSLATION_FEED_ATOM = None
AUTHOR_FEED_ATOM = None
AUTHOR_FEED_RSS = None
USE_FOLDER_AS_CATEGORY = True
DEFAULT_DATE = 'fs'
STATIC_PATHS = [ 'images', 'files', 'extras' ]
DIRECT_TEMPLATES = ('index', 'categories', 'authors', 'archives', 'search')
EXTRA_PATH_METADATA = {
'extras/favicon.ico': {'path': 'favicon.ico'},
}
DISPLAY_CATEGORIES_ON_MENU = False
DISPLAY_CATEGORIES_ON_SIDEBAR = True
DISPLAY_TAGS_ON_SIDEBAR = True
THEME = 'themes/bootstrap4'
BOOTSTRAP_THEME = 'litera'
I18N_TEMPLATES_LANG = 'ru'
I18N_GETTEXT_NEWSTYLE = True
I18N_GETTEXT_LOCALEDIR = 'themes/bootstrap4/translations'
I18N_GETTEXT_DOMAIN = 'messages'
JINJA_ENVIRONMENT = {'extensions': ['jinja2.ext.i18n']}
PLUGIN_PATHS = ["plugins/official", "plugins/thirdparty"]
PLUGINS = [i18n(), "pelican-css", "series", "subcategory", "tag_cloud", "tipue_search", "replacer", "asciidoctor"]
ASCIIDOCTOR_CMD = "asciidoctor"
ASCIIDOCTOR_EXTRA_OPTIONS = [
'--require', 'asciidoctor-diagram',
'--attribute=imagesdir={}/wiki/images'.format(os.getcwd()),
'--attribute=source-highlighter=pygments',
'--attribute=pygments-style=manni',
'--attribute=pygments-css=class',
'--attribute=lang=ru',
'--attribute=figure-caption=Рис.',
'--attribute=toc-title=Содержание',
'--attribute=experimental',
]
REPLACES = (
('{}/wiki/'.format(os.getcwd()), u''),
)
YUICOMPRESSOR_EXECUTABLE = "yui-compressor"
YUICOMPRESSOR_EXTRA_OPTIONS = ["--nomunge"]
PLUGINS += ["yuicompressor-opt"]
PDF_PROCESSOR = True
# Blogroll
LINKS = ()
# LINKS = (('Pelican', 'http://getpelican.com/'),
# ('Python.org', 'http://python.org/'),
# ('Jinja2', 'http://jinja.pocoo.org/'),
# ('You can modify those links in your config file', '#'),)
# Social widget
SOCIAL = ()
# SOCIAL = (('You can add links in your config file', '#'),
# ('Another social link', '#'),)
PYGMENTS_STYLE='asciidoctor-pastie'
DEFAULT_PAGINATION = 20
# Uncomment following line if you want document-relative URLs when developing
RELATIVE_URLS = True

View File

@ -1,35 +1,7 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*- #
from __future__ import unicode_literals
import os
class i18n(object):
# looks for translations in
# {LOCALE_DIR}/{LANGUAGE}/LC_MESSAGES/{DOMAIN}.mo
# if not present, falls back to default
DOMAIN = 'messages'
LOCALE_DIR = '{THEME}/translations'
LANGUAGES = ['ru']
NEWSTYLE = True
__name__ = 'i18n'
def register(self):
from pelican.signals import generator_init
generator_init.connect(self.install_translator)
def install_translator(self, generator):
import gettext
try:
translator = gettext.translation(
self.DOMAIN,
self.LOCALE_DIR.format(THEME=THEME),
self.LANGUAGES)
except (OSError, IOError):
translator = gettext.NullTranslations()
generator.env.install_gettext_translations(translator, self.NEWSTYLE)
# ABOUT_ME = ' '
AUTHOR = 'Андрей Астафьев'
SITENAME = 'ДСП'
@ -68,14 +40,16 @@ DISPLAY_TAGS_ON_SIDEBAR = True
THEME = 'themes/bootstrap4'
BOOTSTRAP_THEME = 'litera'
I18N_TEMPLATES_LANG = 'ru'
# I18N_GETTEXT_LOCALEDIR = 'translations'
# I18N_GETTEXT_DOMAIN = 'messages'
# Обязательно в виде массива
I18N_TEMPLATES_LANG = ['ru']
I18N_GETTEXT_NEWSTYLE = True
I18N_GETTEXT_LOCALEDIR = 'themes/bootstrap4/translations'
I18N_GETTEXT_DOMAIN = 'messages'
JINJA_ENVIRONMENT = {'extensions': ['jinja2.ext.i18n']}
PLUGIN_PATHS = ["plugins/official", "plugins/thirdparty"]
PLUGINS = [i18n(), "pelican-css", "series", "subcategory", "tag_cloud", "tipue_search", "replacer", "asciidoctor"]
PLUGINS = ["i18n_subsites", "pelican-css", "series", "subcategory", "tag_cloud", "tipue_search", "replacer", "asciidoctor"]
ASCIIDOCTOR_CMD = "asciidoctor"
@ -86,9 +60,13 @@ ASCIIDOCTOR_EXTRA_OPTIONS = [
'--attribute=pygments-style=manni',
'--attribute=pygments-css=class',
'--attribute=lang=ru',
'--attribute=figure-caption=Рис.',
'--attribute=figure-caption=Рисунок',
'--attribute=table-caption=Таблица',
'--attribute=toc-title=Содержание',
'--attribute=important-caption=Важно',
'--attribute=experimental',
'--attribute=pdf-themesdir={}/themes/pdf'.format(os.getcwd()),
'--attribute=pdf-theme=wiki',
]
REPLACES = (
@ -97,7 +75,10 @@ REPLACES = (
YUICOMPRESSOR_EXECUTABLE = "yui-compressor"
YUICOMPRESSOR_EXTRA_OPTIONS = ["--nomunge"]
#PLUGINS += ["yuicompressor-opt"]
if 'COMPRESS' in os.environ:
PLUGINS += ["yuicompressor-opt"]
PDF_PROCESSOR = True

11
themes/pdf/wiki-theme.yml Normal file
View File

@ -0,0 +1,11 @@
extends: default
page:
size: A4
layout: portrait
# margin: [15mm, 20mm, 15mm, 10mm]
image:
caption:
align: inherit
font-style: normal
caption:
font-style: normal

View File

@ -7,16 +7,16 @@
Windows{nbsp}10. Пример приведён ниже:
.Экран 1
image::oo-shutup/1.jpg[1]
image::oo-shutup/1.jpg[1,align="center"]
.Экран 2
image::oo-shutup/2.jpg[2]
image::oo-shutup/2.jpg[2,align="center"]
.Экран 3
image::oo-shutup/3.jpg[3]
image::oo-shutup/3.jpg[3,align="center"]
.Экран 4
image::oo-shutup/4.jpg[4]
image::oo-shutup/4.jpg[4,align="center"]
.Экран 5
image::oo-shutup/5.jpg[5]
image::oo-shutup/5.jpg[5,align="center"]

View File

@ -0,0 +1,110 @@
= Настройка Qt Creator
:title-separator: {sp}|
:category: Linux/Программы
:tags: Linux, Qt, QtCreator, C++,
Перед настройкой QtCreator желательно установить пакеты для разработки
и выполнить дополнительные настройки:
[source,sh]
----
sudo apt-get install git ninja-build cmake uncrustify dos2unix doxygen
sudo apt-get install clazy clang-tidy build-essential qt5-default
git clone https://git.246060.ru/f1x1t/uncrustify-config ~/.config/uncrustify
----
== Плагины
[.text-center]
.Справка - О модулях (часть 1)
image::qtcreator-setup/qtcreator21.png[qtcreator21,pdfwidth=80%,scaledwidth=80%,align="center"]
{empty} +
[.text-center]
.Справка - О модулях (часть 2)
image::qtcreator-setup/qtcreator22.png[qtcreator22,pdfwidth=90%,scaledwidth=90%,align="center"]
{empty} +
<<<
== Комплекты
[.text-center]
.Инструменты - Параметры - Комплекты - Комплекты
image::qtcreator-setup/qtcreator34.png[qtcreator34,pdfwidth=80%,scaledwidth=80%,align="center"]
{empty} +
[.text-center]
.Инструменты - Параметры - Комплекты - Комплекты - Генератор CMake - Изменить
image::qtcreator-setup/qtcreator35.png[qtcreator35,align="center"]
{empty} +
<<<
== Среда
[.text-center]
.Инструменты - Параметры - Среда - Система
image::qtcreator-setup/qtcreator41.png[qtcreator41,pdfwidth=80%,scaledwidth=80%,align="center"]
{empty} +
== Редактор
[.text-center]
.Инструменты - Параметры - Текстовый редактор - Поведение
image::qtcreator-setup/qtcreator42.png[qtcreator42,pdfwidth=80%,scaledwidth=80%,align="center"]
{empty} +
<<<
== C++
[.text-center]
.Инструменты - Параметры - С++ - Именование файлов
image::qtcreator-setup/qtcreator51.png[qtcreator51,pdfwidth=80%,scaledwidth=80%,align="center"]
{empty} +
== Стилизатор
[.text-center]
.Инструменты - Параметры - Стилизатор - Uncrustify
image::qtcreator-setup/qtcreator55.png[qtcreator55,pdfwidth=80%,scaledwidth=80%,align="center"]
{empty} +
<<<
== Сборка и запуск
[.text-center]
.Инструменты - Параметры - Сборка и запуск - Основное
image::qtcreator-setup/qtcreator61.png[qtcreator61,pdfwidth=80%,scaledwidth=80%,align="center"]
{empty} +
== To-Do
[.text-center]
.Инструменты - Параметры - To-Do
image::qtcreator-setup/qtcreator67.png[qtcreator67,pdfwidth=80%,scaledwidth=80%,align="center"]
{empty} +
<<<
== Импорт проекта на CMake
[.text-center]
.Импорт проекта - Настроить проект
image::qtcreator-setup/qtcreator74.png[qtcreator74,pdfwidth=80%,scaledwidth=80%,align="center"]
{empty} +
== Сборка
[.text-center]
.Проект - Настройки сборки
image::qtcreator-setup/qtcreator81.png[qtcreator81,pdfwidth=80%,scaledwidth=80%,align="center"]

View File

@ -0,0 +1,268 @@
= Программный проект и иерархия каталогов
:title-separator: {sp}|
:category: Программирование
:tags: Linux, файлы, каталоги, программирование, cmake
:toc:
Для операционных систем типа Linux принят стандарт
https://ru.wikipedia.org/wiki/FHS[FHS] («стандарт иерархии файловой
системы»), унифицирующий местонахождение файлов и каталогов с общим
назначением в файловой системе. Полная текущая версия стандарта
находится http://refspecs.linuxfoundation.org/fhs.shtml[здесь].
== Типы расположения проекта
В соответствии с данным стандартом, а также принятыми в ведущих
дистрибутивах правилами размещения исполняемых файлов в каталогах
пользователей, можно выделить следующие типы расположения:
* системная иерархия в каталоге `/usr` используется для установки
бинарных пакетов для данного дистрибутива;
* системная иерархия в каталоге `/usr/local` используется для установки
программного обеспечения системным администратором без использования
пакетов (не рекомендуется для использования из-за проблем поддержки
в актуальном состоянии);
* системная иерархия в каталоге `/opt` используется для установки
стороннего программного обеспечения. В рамках данной иерархии
предполагается, что каждый программный продукт располагается в
собственном каталоге. При таком типе сборки обычно используются
дополнительные методы (статическая компоновка, включение в состав
пакета своего набора динамических библиотек) для обеспечения работы
пакета в операционных системам с отличающимся составом библиотек
и другим циклом обновления;
* системная иерархия в домашнем каталоге пользователя не имеет
определённого стандарта, обычно производители дистрибутивов
предлагают использовать для исполняемых файлов каталоги
`$HOME/bin` или `$HOME/.local/bin`.
Система автоматизации сборки программного обеспечения https://cmake.org[CMake]
позволяет организовать окружение подобное перечисленным выше.
На этапе сборки проекта можно создать структуру каталогов,
которая будет отвечать требованиям по логическому разделению
файлов на исполняемые, заголовочные, библиотеки, файлы настроек и т.д.
== Автоматическая адаптация к текущему окружению
Для обеспечения единообразной работы вне зависимости от варианта
иерархии каталогов, в которой находится исполняемый файл, можно
выполнять автоматическую настройку на работу в текущем окружении.
В библиотеке https://git.246060.ru/f1x1t/myxlib[myxlib] реализован
класс, который анализирует расположение и окружение исполняемого
файла и предоставляет методы для получения имён каталогов,
соответствующих текущему окружению. Названия методов и описания
возвращаемых значений приведены в таблице.
.Имена методов и описания
[cols="2m,4",options="header"]
|===
| Метод | Описание
| homeDirectory() | Полный путь к домашнему каталогу текущего пользователя
| tempDirectory() | Полный путь к каталогу с временными файлами
| userConfigDirectory() | Полный путь к пользовательскому каталогу с файлами настройки
| userConstDataDirectory() | Полный путь к пользовательскому каталогу с неизменяемыми файлами
| userVarDataDirectory() | Полный путь к пользовательскому каталогу с изменяемыми файлами
| userLogDirectory() | Полный путь к пользовательскому каталогу с журналами работы
| executableFilePath() | Полный путь к исполняемому файлу
| systemConfigDirectory() | Полный путь к системному каталогу с файлами настройки
| systemConstDataDirectory() | Полный путь к системному каталогу с неизменяемыми файлами
| systemVarDataDirectory() | Полный путь к системному каталогу с изменяемыми файлами
| systemLogDirectory() | Полный путь к системному каталогу с журналами работы
| executableFileDirectory() | Полный путь к каталогу с исполняемым файлом
| executableFileName() | Имя исполняемого файла
| configFilePath() | Полный путь к файлу настройки
| configFileName() | Имя файла настройки
| projectName() | Имя подкаталога для проекта
|===
Пример использования:
[source,cpp]
----
#include <myx/filesystem/paths.hpp>
namespace MF = myx::filesystem;
MF::Paths& paths = MF::Paths::instance();
paths.init( QStringLiteral( "project_name" ), QStringLiteral( "conf" ) );
qDebug() << paths.systemConstDataDirectory().path();
----
== Правила выбора типа окружения
Класс `myx::filesystem::Paths` реализован в виде синглтона,
чтобы повторно не выполнять проверку окружения в разных частях программы.
Сначала определяются имена пользовательского и временного каталогов с
помощью вызовов функций https://doc.qt.io/qt-5/qdir.html#homePath[`QDir::homePath`]
и https://doc.qt.io/qt-5/qdir.html#tempPath[`QDir::tempPath`], затем
имена пользовательских каталогов для настроек, постоянных и изменяемых
данных и журналов. Эти значения не зависят от расположения исполняемого файла,
а определяются в соответствии со значениям переменных окружения `HOME`,
`TMPDIR`, `XDG_CONFIG_HOME` и `XDG_DATA_HOME`, либо устанавливаются значения,
принятые в стандартах. Пример имён каталогов для пользователя `user`
и проекта `project` приведён в таблице.
.Стандартные каталоги для текущего пользователя
[cols="4,4m,6m",options="header"]
|===
| Назначение каталога | Метод | Значение
| Домашний каталог | homeDirectory() | /home/user
| Временные файлы | tempDirectory() | /tmp
| Файлы настройки | userConfigDirectory() | /home/user/.config/project
| Неизменяемые файлы | userConstDataDirectory() | /home/user/.local/share/project/data
| Изменяемые файлы | userVarDataDirectory() | /home/user/.local/share/project/lib
| Журналы работы | userLogDirectory() | /home/user/.local/share/project/log
|===
=== Общая проверка
Для определения типа текущего окружения используется полный путь
к исполняемому файлу, если он находится в каталоге `bin`, то выполняются
проверки работы в одной из возможных вариантов иерархий,
иначе делается заключение о том, что файлы всех типов находятся
в одном каталоге с исполняемым и дальнейшие проверки не выполняются.
IMPORTANT: При проверке типов иерархии всегда проверяется наличие
всех необходимых каталогов, при отсутствии хотя бы одного будет
принято решение, что файлы всех типов находятся в одном каталоге
с исполняемым.
=== Проверка на работу в иерархии `/opt`
Если полный путь к исполняемому файлу начинается c `/opt` и
содержит в себе название текущего проекта, например
`/opt/org/project/bin/application`, то выполняется проверка
на наличие сопутствующих системных каталогов. Если они присутствуют,
то принимается решение, что окружение в иерархии `/opt` сформировано правильно,
иначе делается заключение о том, что файлы всех типов находятся
в одном каталоге с исполняемым и дальнейшие проверки не выполняются.
Пример правильной структуры каталогов для данной иерархии приведён в таблице.
.Каталоги в иерархии `/opt`
[cols="4,4m,5m",options="header"]
|===
| Назначение файла / каталога | Метод | Значение
| Исполняемый файл | executableFilePath() | /opt/org/project/bin/application
| Файлы настройки | systemConfigDirectory() | /opt/org/project/etc
| Неизменяемые файлы | systemConstDataDirectory() | /opt/org/project/files/data
| Изменяемые файлы | systemVarDataDirectory() | /opt/org/project/files/lib
| Журналы работы | systemLogDirectory() | /opt/org/project/files/log
|===
=== Проверка на работу в иерархии `/usr/local`
Если полный путь к исполняемому файлу начинается c `/usr/local`,
например `/usr/local/bin/application`, то выполняется проверка
на наличие сопутствующих системных каталогов. Если они присутствуют,
то принимается решение, что окружение в иерархии `/usr/local` сформировано правильно,
иначе делается заключение о том, что файлы всех типов находятся
в одном каталоге с исполняемым и дальнейшие проверки не выполняются.
Пример правильной структуры каталогов для данной иерархии приведён в таблице.
.Каталоги в иерархии `/usr/local`
[cols="4,4m,5m",options="header"]
|===
| Назначение файла / каталога | Метод | Значение
| Исполняемый файл | executableFilePath() | /usr/local/bin/application
| Файлы настройки | systemConfigDirectory() | /usr/local/etc/project
| Неизменяемые файлы | systemConstDataDirectory() | /usr/local/share/project
| Изменяемые файлы | systemVarDataDirectory() | /var/lib/project
| Журналы работы | systemLogDirectory() | /var/log/project
|===
=== Проверка на работу в иерархии `/usr`
Если полный путь к исполняемому файлу начинается c `/usr`,
например `/usr/bin/application`, то выполняется проверка
на наличие сопутствующих системных каталогов. Если они присутствуют,
то принимается решение, что окружение в иерархии `/usr` сформировано правильно,
иначе делается заключение о том, что файлы всех типов находятся
в одном каталоге с исполняемым и дальнейшие проверки не выполняются.
Пример правильной структуры каталогов для данной иерархии приведён в таблице.
.Каталоги в иерархии `/usr`
[cols="4,4m,5m",options="header"]
|===
| Назначение файла / каталога | Метод | Значение
| Исполняемый файл | executableFilePath() | /usr/bin/application
| Файлы настройки | systemConfigDirectory() | /etc/project
| Неизменяемые файлы | systemConstDataDirectory() | /usr/share/project
| Изменяемые файлы | systemVarDataDirectory() | /var/lib/project
| Журналы работы | systemLogDirectory() | /var/log/project
|===
=== Проверка на работу в домашнем каталоге
Если полный путь к исполняемому файлу начинается c `/home/user/bin` или
`/home/user/.local/bin`, например `/home/user/bin/application`, то выполняется
проверка на наличие сопутствующих системных каталогов. Если они присутствуют,
то принимается решение, что окружение в домашнем каталоге сформировано правильно,
иначе делается заключение о том, что файлы всех типов находятся
в одном каталоге с исполняемым и дальнейшие проверки не выполняются.
Пример правильной структуры каталогов для данной иерархии приведён в таблице.
.Каталоги при работе в домашнем каталоге
[cols="4,4m,6m",options="header"]
|===
| Назначение файла / каталога | Метод | Значение
| Исполняемый файл | executableFilePath() | /home/user/bin/application
| Файлы настройки | systemConfigDirectory() | /home/user/.config/project
| Неизменяемые файлы | systemConstDataDirectory() | /home/user/.local/share/project/data
| Изменяемые файлы | systemVarDataDirectory() | /home/user/.local/share/project/lib
| Журналы работы | systemLogDirectory() | /home/user/.local/share/project/log
|===
=== Проверка на работу в окружении для разработки
Если исполняемый файл находится в каталоге `bin` и при этом окружение не совпадает
ни с одним из перечисленных выше, то делается предположение, что исполняемый файл
запускается из окружения, сформированного системой управления проектом, и в данный
момент идёт разработка (отладка) приложения. В этом случае целесообразно считать
системными каталогами те, которые находятся внутри иерархии каталогов программного
проекта. Если присутствуют каталоги, созданные системой управления проекта,
то принимается решение, что окружение сформировано правильно,
иначе делается заключение о том, что файлы всех типов находятся
в одном каталоге с исполняемым и на этом проверки заканчиваются.
Пример правильной структуры каталогов для данной иерархии приведён в таблице.
.Каталоги при работе в окружении для разработки
[cols="4,4m,6m",options="header"]
|===
| Назначение файла / каталога | Метод | Значение
| Исполняемый файл | executableFilePath() | /home/user/work/project/_build/debug/bin/application
| Файлы настройки | systemConfigDirectory() | /home/user/work/project/_build/debug/etc/
| Неизменяемые файлы | systemConstDataDirectory() | /home/user/work/project/_build/debug/files/data
| Изменяемые файлы | systemVarDataDirectory() | /home/user/work/project/_build/debug/files/lib
| Журналы работы | systemLogDirectory() | /home/user/work/project/_build/debug/files/log
|===
=== Расположение в одном каталоге
Если в ходе перечисленных выше проверок не удалось найти правильно
сформированное окружение, то применяется настройка по умолчанию,
которая соответствует ситуации, когда все типы файлов расположены
в одном каталоге с исполняемым файлом. Пример для такого случая приведён в таблице.
.Каталоги в неопределённой иерархии
[cols="4,4m,6m",options="header"]
|===
| Назначение файла / каталога | Метод | Значение
| Исполняемый файл | executableFilePath() | /home/user/work/project/application
| Файлы настройки | systemConfigDirectory() | /home/user/work/project
| Неизменяемые файлы | systemConstDataDirectory() | /home/user/work/project
| Изменяемые файлы | systemVarDataDirectory() | /home/user/work/project
| Журналы работы | systemLogDirectory() | /home/user/work/project
|===

View File

@ -13,14 +13,14 @@
[source,sh]
----
sudo apt-get install clang-tidy-6.0
sudo apt-get install clang-tidy-10
----
Использование:
[source,sh]
----
cmake "-DCMAKE_CXX_CLANG_TIDY=/usr/bin/clang-tidy-6.0" path/to/source
cmake "-DCMAKE_CXX_CLANG_TIDY=/usr/bin/clang-tidy-10" path/to/source
----
В каталоге проекта нужно создать файл `.clang-tidy` в формате YAML со
@ -30,12 +30,25 @@ cmake "-DCMAKE_CXX_CLANG_TIDY=/usr/bin/clang-tidy-6.0" path/to/source
----
---
Checks: '-*,
clang-diagnostic-*,
readability-*,
modernize-*,
cppcoreguidelines-*,
google-*,
bugprone-*'
bugprone-*,
clang-analyzer-*,
cppcoreguidelines-*,
google-*,
llvm-*,
misc-*,
modernize-*,
readability-*,
performance-*,
portability-*,
-cppcoreguidelines-owning-memory,
-cppcoreguidelines-avoid-magic-numbers,
-cppcoreguidelines-pro-bounds-array-to-pointer-decay,
-readability-magic-numbers,
-readability-else-after-return,
-modernize-use-trailing-return-type,
-modernize-avoid-c-arrays,
-performance-no-automatic-move,
'
CheckOptions:
- key: readability-identifier-naming.ClassCase
value: CamelCase
@ -124,7 +137,7 @@ cmake -DCMAKE_LINK_WHAT_YOU_USE=TRUE ..
[source,sh]
----
sudo apt-get install clazy clang-6.0
sudo apt-get install clazy clang-9
----
Использование:
@ -132,7 +145,6 @@ sudo apt-get install clazy clang-6.0
[source,sh]
----
CLAZY_CHECKS=level2 cmake -DCMAKE_CXX_COMPILER=clazy ..
CLANGXX=clang++-6.0 make
CLANGXX=clang++-9 make
----
=== PVS-Studio

View File

@ -3,15 +3,35 @@
:category: Программирование
:tags: программирование, git,
Если у подмодуля, находящегося в каталоге `thirdparty/example` нужно
заменить адрес синхронизации и имя используемой ветки, то в каталоге с
файлом `.gitmodules`, в котором содержится информация об этом подмодуле,
нужно выполнить команды:
Если у подмодулей необходимо заменить адрес синхронизации и/или
имя используемой ветки, то можно отредактировать в корневом
каталоге проекта файл `.gitmodules` и выполнить данный скрипт:
[source,sh]
----
git config --file=.gitmodules submodule.thirdparty/example.url https://github.com/username/ABC.git
git config --file=.gitmodules submodule.thirdparty/example.branch new-branch-name
git submodule sync --recursive
git submodule update --init --recursive --remote
#!/bin/bash
# Замена адресов для подмодулей:
# 1. Отредактировать файл .gitmodules
# 2. Запустить этот скрипт
#
# Параметры:
# - имя подмодуля (если присутствует, то замена
# адреса производится только для данного подмодуля)
M="#"
[ ! -z $1 ] && M="$1"
cat .gitmodules | while read s; do
s=${s/\*/}
s=${s/path = /}
if [ "$M" = "#" -o "x$M" = "x$s" ]; then
rm -rf .git/modules/$s
rm -rf $s
fi
done
git submodule sync
git submodule update
----

View File

@ -23,27 +23,15 @@ sudo apt-get install git
[width="100%",cols="18%,20%,62%",options="header",]
|===
|Термин |Англ |Определение
|Рабочий каталог |working tree, working directory |Набор файлов в
текущем каталоге
|Репозиторий |repository, repo |Контейнер, хранящий историю изменений
файлов проекта
|Индекс |index, staging area |Область между рабочим каталогом и
репозиторием, в котором осуществляется подготовка к фиксации
|SHA-1 |SHA-1 |Уникальный идентификатор, отражающий информацию об
истории
|Ветка |branch |Именованная последовательность в истории изменений
|Фиксация (коммит) |commit |Набор файлов, записанных в историю
одновременно
|`HEAD` |`HEAD` |Имя ссылки на последнюю фиксацию в текущей ветке
|Метка |tag |Именованная ссылка на некоторую фиксацию в истории
| Термин | Англ | Определение
| Рабочий каталог | working tree, working directory | Набор файлов в текущем каталоге
| Репозиторий | repository, repo | Контейнер, хранящий историю изменений файлов проекта
| Индекс | index, staging area | Область между рабочим каталогом и репозиторием, в котором осуществляется подготовка к фиксации
| SHA-1 | SHA-1 | Уникальный идентификатор, отражающий информацию об истории
| Ветка | branch | Именованная последовательность в истории изменений
| Фиксация (коммит) | commit | Набор файлов, записанных в историю одновременно
| `HEAD` | `HEAD` | Имя ссылки на последнюю фиксацию в текущей ветке
| Метка | tag | Именованная ссылка на некоторую фиксацию в истории
|===
== Состояния
@ -63,20 +51,20 @@ sudo apt-get install git
@startuml
skinparam padding 16
participant untracked as "Неотслеживамые\n(untracked)"
participant untracked as "Неотслеживамые\n(untracked)"
box "Отслеживаемые"
participant staged as "Подготовленные к фиксации\n(indexed)" #55FF55
participant staged as "Подготовленные к фиксации\n(indexed)" #55FF55
participant unmodified as "Неизменённые\n(unmodified)" #99FF99
participant modified as "Изменённые\n(modified)" #77FF77
participant modified as "Изменённые\n(modified)" #77FF77
end box
untracked -> staged : git add
staged -> unmodified : git commit
unmodified -> modified : редактирование
modified -> staged : git add
modified -> untracked: git rm --cached
unmodified -> untracked: git rm --cached
staged -> untracked: git rm --cached
untracked -> staged: git add
staged -> unmodified: git commit
unmodified -> modified: редактирование
modified -> staged: git add
modified -> untracked: git rm --cached
unmodified -> untracked: git rm --cached
staged -> untracked: git rm --cached
@enduml
----
@ -92,14 +80,14 @@ staged -> untracked: git rm --cached
skinparam padding 16
participant workspace as "Рабочий каталог\n(working dir)"
participant index as "Индекс\n(index)" #77FF77
participant local as "Локальный репозиторий\n(local repository)" #FF7777
participant remote as "Удалённый репозиторий\n(remote repository)" #7777FF
participant index as "Индекс\n(index)" #77FF77
participant local as "Локальный репозиторий\n(local repository)" #FF7777
participant remote as "Удалённый репозиторий\n(remote repository)" #7777FF
workspace -> local : git commit -a
workspace -> index : git add (-u)
index -> local : git commit
local -> remote : git push
index -> local : git commit
local -> remote : git push
== Обновление с сервера ==
@ -130,29 +118,29 @@ skinparam defaultFontSize 24
skinparam padding 16
participant workspace as "Рабочий каталог\n(working dir)"
participant index as "Индекс\n(index)" #77FF77
participant local as "Локальный репозиторий\n(local repository)" #FF7777
participant remote as "Удалённый репозиторий\n(remote repository)" #7777FF
participant index as "Индекс\n(index)" #77FF77
participant local as "Локальный репозиторий\n(local repository)" #FF7777
participant remote as "Удалённый репозиторий\n(remote repository)" #7777FF
[-> workspace : <font color=red>Начало работы</font>
activate workspace
remote -> local : <font color=red>Получение изменений с сервера</font>\n<b>git fetch</b>
remote -> local : <font color=red>Обновление подмодулей</font>\n<b>git submodule update --remote</b>
workspace <-> local : <font color=red>Просмотр информации</font>\n<b>git status</b>
workspace <-> local : <font color=red>Переход на ветку master</font>\n<b>git checkout master</b>
local -> workspace : <font color=red>Слияние с удалённой веткой</font>\n<b>git merge origin/master</b>
local <-> workspace : <font color=red>Создание новой ветки</font>\n<b>git branch temp</b>
local <-> workspace : <font color=red>Переход на новую ветку</font>\n<b>git checkout temp</b>
remote -> local : <font color=red>Получение изменений с сервера</font>\n<b>git fetch</b>
remote -> local : <font color=red>Обновление подмодулей</font>\n<b>git submodule update --recursive --init</b>
workspace <-> local : <font color=red>Просмотр информации</font>\n<b>git status</b>
workspace <-> local : <font color=red>Переход на ветку master</font>\n<b>git checkout master</b>
local -> workspace : <font color=red>Слияние с удалённой веткой</font>\n<b>git merge origin/master</b>
local <-> workspace : <font color=red>Создание новой ветки</font>\n<b>git branch temp</b>
local <-> workspace : <font color=red>Переход на новую ветку</font>\n<b>git checkout temp</b>
workspace ->o workspace : <font color=red>Редактирование</font>
workspace <-> local : <font color=red>Просмотр изменений</font>\n<b>git diff</b>
workspace -> index : <font color=red>Занесение файлов в индекс</font>\n<b>git add</b>
index -> local : <font color=red>Фиксация изменений</font>\n<b>git commit</b>
local ->o local : <font color=red>Присвоение ветки осмысленного названия</font>\n<b>git branch -m temp branch_name</b>
local ->o local : <font color=red>Переход на ветку</font>\n<b>git checkout branch_name</b>
remote -> local : <font color=red>Получение изменений с сервера</font>\n<b>git fetch</b>
local ->o local : <font color=red>Слияние изменений с сервера в текущую ветку (branch_name)</font>\n<b>git merge origin/master</b>
local -> remote : <font color=red>Отправка ветки на сервер</font>\n<b>git push origin branch_name</b>
remote ->] : <font color=red>Создание запроса на слияние</font>
workspace <-> local : <font color=red>Просмотр изменений</font>\n<b>git diff</b>
workspace -> index : <font color=red>Занесение файлов в индекс</font>\n<b>git add</b>
index -> local : <font color=red>Фиксация изменений</font>\n<b>git commit</b>
local ->o local : <font color=red>Присвоение ветки осмысленного названия</font>\n<b>git branch -m temp branch_name</b>
local ->o local : <font color=red>Переход на ветку</font>\n<b>git checkout branch_name</b>
remote -> local : <font color=red>Получение изменений с сервера</font>\n<b>git fetch</b>
local ->o local : <font color=red>Слияние изменений с сервера в текущую ветку (branch_name)</font>\n<b>git merge origin/master</b>
local -> remote : <font color=red>Отправка ветки на сервер</font>\n<b>git push origin branch_name</b>
remote ->] : <font color=red>Создание запроса на слияние</font>
deactivate workspace
@enduml
----
@ -161,45 +149,31 @@ deactivate workspace
[width="100%",cols="15%,35%,50%",options="header",]
|===
|Команда |Ключи |Описание
|`git config` |`--global user.name "John Doe"` |Имя текущего
пользователя
|`git config` |`--global user.email "mail@example.com"` |Почта текущего
пользователя
|`git config` |`--list` |Вывод текущей конфигурации
|`git config` |`--global --list` |Вывод глобальной конфигурации
| Команда | Ключи | Описание
| `git config` | `--global user.name "John Doe"` | Имя текущего пользователя
| `git config` | `--global user.email "mail@example.com"` | Почта текущего пользователя
| `git config` | `--list` | Вывод текущей конфигурации
| `git config` | `--global --list` | Вывод глобальной конфигурации
|===
== Инициализация
[width="100%",cols="15%,35%,50%",options="header",]
|===
|Команда |Ключи |Описание
|`git init` |`<dir>` |Создать пустой репозиторий в каталоге `<dir>`
|`git clone` |`<giturl>` `<dir>` |Создать в каталоге `<dir>` копию
репозитория, находящегося по адресу `<giturl>`
|`git clone` |`--recursive <giturl>` `<dir>` |Создать в каталоге `<dir>`
копию репозитория, находящегося по адресу `<giturl>`, с учётом
подмодулей
| Команда | Ключи | Описание
| `git init` | `<dir>` | Создать пустой репозиторий в каталоге `<dir>`
| `git clone` | `<giturl>` `<dir>` | Создать в каталоге `<dir>` копию репозитория, находящегося по адресу `<giturl>`
| `git clone` | `--recursive <giturl>` `<dir>` | Создать в каталоге `<dir>` копию репозитория, находящегося по адресу `<giturl>`, с учётом подмодулей
|===
== Подмодули
[width="100%",cols="15%,25%,60%",options="header",]
|===
|Команда |Ключи |Описание
|`git submodule` |`add <giturl> <dir>` |Добавить в каталог `<dir>`
текущего репозитория подмодуль, находящийся по адресу `<giturl>`
|`git submodule` |`update --recursive --remote` |Обновить подмодули
|`git submodule` |`sync --recursive` |Заменить адреса подмодулей на
указанные в файле `.gitmodules`
| Команда | Ключи | Описание
| `git submodule` | `add <giturl> <dir>` | Добавить в каталог `<dir>` текущего репозитория подмодуль, находящийся по адресу `<giturl>`
| `git submodule` | `update --recursive --remote` | Обновить подмодули
| `git submodule` | `sync --recursive` | Заменить адреса подмодулей на указанные в файле `.gitmodules`
|===
Удаление подмодуля:
@ -214,54 +188,42 @@ git rm <path/to/submodule>
[width="100%",cols="15%,20%,65%",options="header",]
|===
|Команда |Ключи |Описание
|`git add` |`<filename>` |Подготовить файл `<filename>` к фиксации
|`git commit` | |Зафиксировать подготовленные файлы
|`git commit` |`-a` |Зафиксировать все отслеживаемые файлы, которые были
изменены
| Команда | Ключи | Описание
| `git add` | `<filename>` | Подготовить файл `<filename>` к фиксации
| `git commit` | | Зафиксировать подготовленные файлы
| `git commit` | `-a` | Зафиксировать все отслеживаемые файлы, которые были изменены
|===
== Удаление
[width="100%",cols="15%,20%,65%",options="header",]
|===
|Команда |Ключи |Описание
|`git rm` |`<filename>` |Удалить файл из индекса и рабочего каталога
|`git rm` |`-f <filename>` |Принудительное удаление файла
|`git rm` |`--cached <filename>` |Удаление файла из проекта, но не из
рабочего каталога
| Команда | Ключи | Описание
| `git rm` | `<filename>` | Удалить файл из индекса и рабочего каталога
| `git rm` | `-f <filename>` | Принудительное удаление файла
| `git rm` | `--cached <filename>` | Удаление файла из проекта, но не из рабочего каталога
|===
== Информация
[width="100%",cols="15%,20%,65%",options="header",]
|===
|Команда |Ключи |Описание
|`git status` |`-s` |Вывод информации о рабочем каталоге в краткой форме
|`git log` |`--oneline` |Вывод журнала изменений в краткой форме
|`git ls-files` | |Вывод списка отслеживаемых и подготовленных файлов
| Команда | Ключи | Описание
| `git status` | `-s` | Вывод информации о рабочем каталоге в краткой форме
| `git log` | `--oneline` | Вывод журнала изменений в краткой форме
| `git ls-files` | | Вывод списка отслеживаемых и подготовленных файлов
|===
== Удалённый репозиторий
[width="100%",cols="15%,20%,65%",options="header",]
|===
|Команда |Ключи |Описание
|`git remote` |`-v` |Список адресов удалённых репозиториев
|`git branch` |`-r` |Список веток в удалённых репозиториях
|`git remote` |`add <name> <url>` |Создать ссылку `<name>` на удалённый
репозиторий, находящийся по адресу `<url>`
|`git remote` |`rename <old> <new>` |Переименовать ссылку `<old>` на
`<new>`
|`git remote` |`rm <name>` |Удалить ссылку `<name>`
| Команда | Ключи | Описание
| `git remote` | `-v` | Список адресов удалённых репозиториев
| `git branch` | `-r` | Список веток в удалённых репозиториях
| `git remote` | `add <name> <url>` | Создать ссылку `<name>` на удалённый репозиторий, находящийся по адресу `<url>`
| `git remote` | `rename <old> <new>` | Переименовать ссылку `<old>` на `<new>`
| `git remote` | `rm <name>` | Удалить ссылку `<name>`
|===
* Обращение к удалённому репозиторию осуществляется по ссылке,
@ -272,32 +234,21 @@ git rm <path/to/submodule>
[width="100%",cols="15%,20%,65%",options="header",]
|===
|Команда |Ключи |Описание
|`git push` |`<remote> <branch>` |Отправить ветку `<branch>` в удалённый
репозиторий `<remote>`
|`git push` |`<remote> --all` |Отправить все ветки в удалённый
репозиторий `<remote>`
|`git push` |`--d <remote> <branch>` |Удалить ветку `<branch>` из
удалённого репозитория `<remote>`
| Команда | Ключи | Описание
| `git push` | `<remote> <branch>` | Отправить ветку `<branch>` в удалённый репозиторий `<remote>`
| `git push` | `<remote> --all` | Отправить все ветки в удалённый репозиторий `<remote>`
| `git push` | `--d <remote> <branch>` | Удалить ветку `<branch>` из удалённого репозитория `<remote>`
|===
== Получение изменений
[width="100%",cols="15%,20%,65%",options="header",]
|===
|Команда |Ключи |Описание
|`git fetch` |`<remote>` |Получить изменения из всех веток репозитория
`<remote>`, но не выполнять слияние
|`git fetch` |`<remote> <branch>` |Получить изменения из ветки
`<branch>` репозитория `<remote>`, но не выполнять слияние
|`git merge` |`<remote>/<branch>` |Выполнить слияние с веткой `<branch>`
репозитория `<remote>`
|`git pull` |`<remote>` |Получение и слияние
| Команда | Ключи | Описание
| `git fetch` | `<remote>` | Получить изменения из всех веток репозитория `<remote>`, но не выполнять слияние
| `git fetch` | `<remote> <branch>` | Получить изменения из ветки `<branch>` репозитория `<remote>`, но не выполнять слияние
| `git merge` | `<remote>/<branch>` | Выполнить слияние с веткой `<branch>` репозитория `<remote>`
| `git pull` | `<remote>` | Получение и слияние
|===
== Ветки
@ -305,42 +256,25 @@ git rm <path/to/submodule>
[width="100%",cols="15%,20%,65%",options="header",]
|===
|Команда |Ключи |Описание
|`git branch` |`-a` |Список локальных и удалённых веток
|`git branch` | |Список локальных веток
|`git branch` |`<branch>` |Создать ветку `<branch>`
|`git checkout` |`<sha-1>` |Перейти к фиксации с идентификатором
`<sha-1>`
|`git branch` |`-m <old> <new>` |Переименовать ветку `<old>` в `<new>`
|`git merge` |`<branch>` |Слить изменения из ветки `<branch>` в текущую
ветку
|`git branch` |`-d <branch>` |Удалить ветку `<branch>`
| `git branch` | `-a` | Список локальных и удалённых веток
| `git branch` | | Список локальных веток
| `git branch` | `<branch>` | Создать ветку `<branch>`
| `git checkout` | `<sha-1>` | Перейти к фиксации с идентификатором `<sha-1>`
| `git branch` | `-m <old> <new>` | Переименовать ветку `<old>` в `<new>`
| `git merge` | `<branch>` | Слить изменения из ветки `<branch>` в текущую ветку
| `git branch` | `-d <branch>` | Удалить ветку `<branch>`
|===
== Сравнение
[width="100%",cols="15%,20%,65%",options="header",]
|===
|Команда |Ключи |Описание
|`git diff` | |Сравнить рабочий каталог и индекс
|`git diff` |`-cached` |Сравнить индекс и последнюю фиксацию
|`git diff` |`HEAD` |Сравнить последнюю фиксацию и рабочий каталог
|`git diff` |`--stat` |Краткий вывод результатов
|`git diff` |`<sha-1> <sha-1>` |Сравнить две точки с указанными
идентификаторами
|`git diff` |`<dir>` `<file>` |Сравнивать только указанный каталог
`<dir>` или файл `<file>`
|`git difftool` | |Отобразить результаты сравнения в программе,
определяемой переменной `diff.tool`
| Команда | Ключи | Описание
| `git diff` | | Сравнить рабочий каталог и индекс
| `git diff` | `-cached` | Сравнить индекс и последнюю фиксацию
| `git diff` | `HEAD` | Сравнить последнюю фиксацию и рабочий каталог
| `git diff` | `--stat` | Краткий вывод результатов
| `git diff` | `<sha-1> <sha-1>` | Сравнить две точки с указанными идентификаторами
| `git diff` | `<dir>` `<file>` | Сравнивать только указанный каталог `<dir>` или файл `<file>`
| `git difftool` | | Отобразить результаты сравнения в программе, определяемой переменной `diff.tool`
|===

View File

@ -19,11 +19,16 @@ CREATE TABLE example (
----
const char cart[] = {0x04, 0x43, 0x00, 0x9A};
QByteArray binDataArray(QByteArray::fromRawData(cart, 4));
QSqlQuery query;
query.prepare(QString("INSERT INTO example (id, bin_data) VALUES(:id, :bin_data)");
query.bindValue(":id", 10, QSql::In);
query.bindValue(":bin_data", binDataArray, QSql::In | QSql::Binary);
query.exec();
QSqlQuery query1;
query1.prepare(QString("INSERT INTO example (id, bin_data) VALUES(:id, :bin_data)");
query1.bindValue(":id", 10, QSql::In);
query1.bindValue(":bin_data", binDataArray, QSql::In | QSql::Binary);
query1.exec();
QSqlQuery query2;
query2.exec(QString("INSERT INTO files VALUES(%1, %2);")
.arg(18)
.arg(db.driver()->formatValue(dataField)));
----
Чтение данных:

View File

@ -53,10 +53,10 @@ https://git.246060.ru/f1x1t/clang-tidy-readability-identifier-naming[Проек
[cols=",",options="header",]
|===
|Параметр |Значение
|AbstractClassCase |`CamelCase`
|AbstractClassPrefix |`''`
|AbstractClassSuffix |`''`
| Параметр | Значение
| AbstractClassCase | `CamelCase`
| AbstractClassPrefix | `''`
| AbstractClassSuffix | `''`
|===
Пример кода до форматирования:
@ -83,10 +83,10 @@ class AbstractClass {
[cols=",",options="header",]
|===
|Параметр |Значение
|ClassCase |`CamelCase`
|ClassPrefix |`''`
|ClassSuffix |`''`
| Параметр | Значение
| ClassCase | `CamelCase`
| ClassPrefix | `''`
| ClassSuffix | `''`
|===
Пример кода до форматирования:
@ -115,10 +115,10 @@ class TestClass {
[cols=",",options="header",]
|===
|Параметр |Значение
|StructCase |`CamelCase`
|StructPrefix |`''`
|StructSuffix |`''`
| Параметр | Значение
| StructCase | `CamelCase`
| StructPrefix | `''`
| StructSuffix | `''`
|===
Пример кода до форматирования:
@ -143,10 +143,10 @@ struct TestStruct {
[cols=",",options="header",]
|===
|Параметр |Значение
|UnionCase |`CamelCase`
|UnionPrefix |`''`
|UnionSuffix |`''`
| Параметр | Значение
| UnionCase | `CamelCase`
| UnionPrefix | `''`
| UnionSuffix | `''`
|===
Пример кода до форматирования:
@ -173,10 +173,10 @@ union TestUnion {
[cols=",",options="header",]
|===
|Параметр |Значение
|EnumCase |`CamelCase`
|EnumPrefix |`''`
|EnumSuffix |`''`
| Параметр | Значение
| EnumCase | `CamelCase`
| EnumPrefix | `''`
| EnumSuffix | `''`
|===
Пример кода до форматирования:
@ -197,10 +197,10 @@ enum TestEnum { ONE, TWO };
[cols=",",options="header",]
|===
|Параметр |Значение
|EnumConstantCase |`UPPER_CASE`
|EnumConstantPrefix |`''`
|EnumConstantSuffix |`''`
| Параметр | Значение
| EnumConstantCase | `UPPER_CASE`
| EnumConstantPrefix | `''`
| EnumConstantSuffix | `''`
|===
Пример кода до форматирования:
@ -221,10 +221,10 @@ enum TestEnum { ONE, TWO };
[cols=",",options="header",]
|===
|Параметр |Значение
|NamespaceCase |`lower_case`
|NamespacePrefix |`''`
|NamespaceSuffix |`''`
| Параметр | Значение
| NamespaceCase | `lower_case`
| NamespacePrefix | `''`
| NamespaceSuffix | `''`
|===
Пример кода до форматирования:
@ -249,10 +249,10 @@ namespace test_ns {
[cols=",",options="header",]
|===
|Параметр |Значение
|InlineNamespaceCase |`lower_case`
|InlineNamespacePrefix |`''`
|InlineNamespaceSuffix |`''`
| Параметр | Значение
| InlineNamespaceCase | `lower_case`
| InlineNamespacePrefix | `''`
| InlineNamespaceSuffix | `''`
|===
Пример кода до форматирования:
@ -281,10 +281,10 @@ inline namespace inline_namespace {
[cols=",",options="header",]
|===
|Параметр |Значение
|TypeAliasCase |`lower_case`
|TypeAliasPrefix |`''`
|TypeAliasSuffix |`''`
| Параметр | Значение
| TypeAliasCase | `lower_case`
| TypeAliasPrefix | `''`
| TypeAliasSuffix | `''`
|===
Пример кода до форматирования:
@ -311,10 +311,10 @@ using MyStructType = MyStructure;
[cols=",",options="header",]
|===
|Параметр |Значение
|TypedefCase |`lower_case`
|TypedefPrefix |`''`
|TypedefSuffix |`''`
| Параметр | Значение
| TypedefCase | `lower_case`
| TypedefPrefix | `''`
| TypedefSuffix | `''`
|===
Пример кода до форматирования:
@ -339,10 +339,10 @@ typedef int my_int;
[cols=",",options="header",]
|===
|Параметр |Значение
|GlobalVariableCase |`lower_case`
|GlobalVariablePrefix |`''`
|GlobalVariableSuffix |`''`
| Параметр | Значение
| GlobalVariableCase | `lower_case`
| GlobalVariablePrefix | `''`
| GlobalVariableSuffix | `''`
|===
Пример кода до форматирования:
@ -363,10 +363,10 @@ unsigned global_variable;
[cols=",",options="header",]
|===
|Параметр |Значение
|LocalVariableCase |`camelBack`
|LocalVariablePrefix |`''`
|LocalVariableSuffix |`''`
| Параметр | Значение
| LocalVariableCase | `camelBack`
| LocalVariablePrefix | `''`
| LocalVariableSuffix | `''`
|===
Пример кода до форматирования:
@ -393,10 +393,10 @@ int function() {
[cols=",",options="header",]
|===
|Параметр |Значение
|StaticVariableCase |`camelBack`
|StaticVariablePrefix |`''`
|StatucVariableSuffix |`''`
| Параметр | Значение
| StaticVariableCase | `camelBack`
| StaticVariablePrefix | `''`
| StatucVariableSuffix | `''`
|===
Пример кода до форматирования:
@ -423,10 +423,10 @@ int functionWithStaticVariable() {
[cols=",",options="header",]
|===
|Параметр |Значение
|ConstexprVariableCase |`lower_case`
|ConstexprVariablePrefix |`''`
|ConstexprVariableSuffix |`''`
| Параметр | Значение
| ConstexprVariableCase | `lower_case`
| ConstexprVariablePrefix | `''`
| ConstexprVariableSuffix | `''`
|===
Пример кода до форматирования:
@ -447,10 +447,10 @@ constexpr int const_five = 5;
[cols=",",options="header",]
|===
|Параметр |Значение
|GlobalPointerCase |`lower_case`
|GlobalPointerPrefix |`''`
|GlobalPointerSuffix |`''`
| Параметр | Значение
| GlobalPointerCase | `lower_case`
| GlobalPointerPrefix | `''`
| GlobalPointerSuffix | `''`
|===
Пример кода до форматирования:
@ -471,10 +471,10 @@ void* global_pointer;
[cols=",",options="header",]
|===
|Параметр |Значение
|LocalPointerCase |`camelBack`
|LocalPointerPrefix |`''`
|LocalPointerSuffix |`''`
| Параметр | Значение
| LocalPointerCase | `camelBack`
| LocalPointerPrefix | `''`
| LocalPointerSuffix | `''`
|===
Пример кода до форматирования:
@ -503,10 +503,10 @@ void* function() {
[cols=",",options="header",]
|===
|Параметр |Значение
|ClassMemberCase |`camelBack`
|ClassMemberPrefix |`''`
|ClassMemberSuffix |`''`
| Параметр | Значение
| ClassMemberCase | `camelBack`
| ClassMemberPrefix | `''`
| ClassMemberSuffix | `''`
|===
Пример кода до форматирования:
@ -533,10 +533,10 @@ class ClassWithClassMember {
[cols=",",options="header",]
|===
|Параметр |Значение
|ConstantMemberCase |`lower_case`
|ConstantMemberPrefix |`''`
|ConstantMemberSuffix |`''`
| Параметр | Значение
| ConstantMemberCase | `lower_case`
| ConstantMemberPrefix | `''`
| ConstantMemberSuffix | `''`
|===
Пример кода до форматирования:
@ -561,10 +561,10 @@ class ClassWithConstantMember {
[cols=",",options="header",]
|===
|Параметр |Значение
|PrivateMemberCase |`camelBack`
|PrivateMemberPrefix |`'m_'`
|PrivateMemberSuffix |`''`
| Параметр | Значение
| PrivateMemberCase | `camelBack`
| PrivateMemberPrefix | `'m_'`
| PrivateMemberSuffix | `''`
|===
Пример кода до форматирования:
@ -591,10 +591,10 @@ class ClassWithPrivateMember {
[cols=",",options="header",]
|===
|Параметр |Значение
|ProtectedMemberCase |`camelBack`
|ProtectedMemberPrefix |`''`
|ProtectedMemberSuffix |`''`
| Параметр | Значение
| ProtectedMemberCase | `camelBack`
| ProtectedMemberPrefix | `''`
| ProtectedMemberSuffix | `''`
|===
Пример кода до форматирования:
@ -621,10 +621,10 @@ class ClassWithProtectedMember {
[cols=",",options="header",]
|===
|Параметр |Значение
|PublicMemberCase |`camelBack`
|PublicMemberPrefix |`''`
|PublicMemberSuffix |`''`
| Параметр | Значение
| PublicMemberCase | `camelBack`
| PublicMemberPrefix | `''`
| PublicMemberSuffix | `''`
|===
Пример кода до форматирования:
@ -653,10 +653,10 @@ class ClassWithPublicMember {
[cols=",",options="header",]
|===
|Параметр |Значение
|ConstantCase |`UPPER_CASE`
|ConstantPrefix |`''`
|ConstantSuffix |`''`
| Параметр | Значение
| ConstantCase | `UPPER_CASE`
| ConstantPrefix | `''`
| ConstantSuffix | `''`
|===
Пример кода до форматирования:
@ -677,10 +677,10 @@ const int THE_ONE = 1;
[cols=",",options="header",]
|===
|Параметр |Значение
|GlobalConstantCase |`UPPER_CASE`
|GlobalConstantPrefix |`''`
|GlobalConstantSuffix |`''`
| Параметр | Значение
| GlobalConstantCase | `UPPER_CASE`
| GlobalConstantPrefix | `''`
| GlobalConstantSuffix | `''`
|===
Пример кода до форматирования:
@ -701,10 +701,10 @@ const int THE_ONE = 1;
[cols=",",options="header",]
|===
|Параметр |Значение
|LocalConstantCase |`camelBack`
|LocalConstantPrefix |`''`
|LocalConstantSuffix |`''`
| Параметр | Значение
| LocalConstantCase | `camelBack`
| LocalConstantPrefix | `''`
| LocalConstantSuffix | `''`
|===
Пример кода до форматирования:
@ -731,10 +731,10 @@ int functionWithLocalConstant() {
[cols=",",options="header",]
|===
|Параметр |Значение
|StaticConstantCase |`camelBack`
|StaticConstantPrefix |`''`
|StaticConstantSuffix |`''`
| Параметр | Значение
| StaticConstantCase | `camelBack`
| StaticConstantPrefix | `''`
| StaticConstantSuffix | `''`
|===
Пример кода до форматирования:
@ -761,10 +761,10 @@ int functionWithStaticConstant() {
[cols=",",options="header",]
|===
|Параметр |Значение
|ClassConstantCase |`UPPER_CASE`
|ClassConstantPrefix |`''`
|ClassConstantSuffix |`''`
| Параметр | Значение
| ClassConstantCase | `UPPER_CASE`
| ClassConstantPrefix | `''`
| ClassConstantSuffix | `''`
|===
Пример кода до форматирования:
@ -791,10 +791,10 @@ class ClassWithClassConstant {
[cols=",",options="header",]
|===
|Параметр |Значение
|GlobalConstantPointerCase |`lower_case`
|GlobalConstantPointerPrefix |`''`
|GlobalConstantPointerSuffix |`''`
| Параметр | Значение
| GlobalConstantPointerCase | `lower_case`
| GlobalConstantPointerPrefix | `''`
| GlobalConstantPointerSuffix | `''`
|===
Пример кода до форматирования:
@ -817,10 +817,10 @@ void* const global_const_pointer = global_pointer;
[cols=",",options="header",]
|===
|Параметр |Значение
|LocalConstantPointerCase |`camelBack`
|LocalConstantPointerPrefix |`''`
|LocalConstantPointerSuffix |`''`
| Параметр | Значение
| LocalConstantPointerCase | `camelBack`
| LocalConstantPointerPrefix | `''`
| LocalConstantPointerSuffix | `''`
|===
Пример кода до форматирования:
@ -851,10 +851,10 @@ void* functionWithLocalConstPointer() {
[cols=",",options="header",]
|===
|Параметр |Значение
|FunctionCase |`camelBack`
|FunctionPrefix |`''`
|FunctionSuffix |`''`
| Параметр | Значение
| FunctionCase | `camelBack`
| FunctionPrefix | `''`
| FunctionSuffix | `''`
|===
Пример кода до форматирования:
@ -879,10 +879,10 @@ static int staticFunction() {
[cols=",",options="header",]
|===
|Параметр |Значение
|GlobalFunctionCase |`camelBack`
|GlobalFunctionPrefix |`''`
|GlobalFunctionSuffix |`''`
| Параметр | Значение
| GlobalFunctionCase | `camelBack`
| GlobalFunctionPrefix | `''`
| GlobalFunctionSuffix | `''`
|===
Пример кода до форматирования:
@ -907,10 +907,10 @@ int globalFunction() {
[cols=",",options="header",]
|===
|Параметр |Значение
|ConstexprFunctionCase |`camelBack`
|ConstexprFunctionPrefix |`''`
|ConstexprFunctionSuffix |`''`
| Параметр | Значение
| ConstexprFunctionCase | `camelBack`
| ConstexprFunctionPrefix | `''`
| ConstexprFunctionSuffix | `''`
|===
Пример кода до форматирования:
@ -937,10 +937,10 @@ constexpr int getFive() {
[cols=",",options="header",]
|===
|Параметр |Значение
|ClassMethodCase |`camelBack`
|ClassMethodPrefix |`''`
|ClassMethodSuffix |`''`
| Параметр | Значение
| ClassMethodCase | `camelBack`
| ClassMethodPrefix | `''`
| ClassMethodSuffix | `''`
|===
Пример кода до форматирования:
@ -967,10 +967,10 @@ class ClassWithMethod {
[cols=",",options="header",]
|===
|Параметр |Значение
|ConstexprMethodCase |`camelBack`
|ConstexprMethodPrefix |`''`
|ConstexprMethodSuffix |`''`
| Параметр | Значение
| ConstexprMethodCase | `camelBack`
| ConstexprMethodPrefix | `''`
| ConstexprMethodSuffix | `''`
|===
Пример кода до форматирования:
@ -997,10 +997,10 @@ class ClassWithConstexprMethod {
[cols=",",options="header",]
|===
|Параметр |Значение
|VirtualMethodCase |`camelBack`
|VirtualMethodPrefix |`''`
|VirtualMethodSuffix |`''`
| Параметр | Значение
| VirtualMethodCase | `camelBack`
| VirtualMethodPrefix | `''`
| VirtualMethodSuffix | `''`
|===
Пример кода до форматирования:
@ -1027,10 +1027,10 @@ class ClassWithVirtualMethod {
[cols=",",options="header",]
|===
|Параметр |Значение
|PrivateMethodCase |`camelBack`
|PrivateMethodPrefix |`''`
|PrivateMethodSuffix |`''`
| Параметр | Значение
| PrivateMethodCase | `camelBack`
| PrivateMethodPrefix | `''`
| PrivateMethodSuffix | `''`
|===
Пример кода до форматирования:
@ -1040,7 +1040,7 @@ class ClassWithVirtualMethod {
class ClassWithPrivateMethod {
private:
int get_int() { return 0; };
};
};
----
Пример кода после форматирования:
@ -1050,17 +1050,17 @@ class ClassWithPrivateMethod {
class ClassWithPrivateMethod {
private:
int getInt() { return 0; };
};
};
----
=== ProtectedMethod (Защищённый метод)
[cols=",",options="header",]
|===
|Параметр |Значение
|ProtectedMethodCase |`camelBack`
|ProtectedMethodPrefix |`''`
|ProtectedMethodSuffix |`''`
| Параметр | Значение
| ProtectedMethodCase | `camelBack`
| ProtectedMethodPrefix | `''`
| ProtectedMethodSuffix | `''`
|===
Пример кода до форматирования:
@ -1087,10 +1087,10 @@ class ClassWithProtectedMethod {
[cols=",",options="header",]
|===
|Параметр |Значение
|PublicMethodCase |`camelBack`
|PublicMethodPrefix |`''`
|PublicMethodSuffix |`''`
| Параметр | Значение
| PublicMethodCase | `camelBack`
| PublicMethodPrefix | `''`
| PublicMethodSuffix | `''`
|===
Пример кода до форматирования:
@ -1119,10 +1119,10 @@ class ClassWithPublicMethod {
[cols=",",options="header",]
|===
|Параметр |Значение
|ParameterCase |`camelBack`
|ParameterPrefix |`''`
|ParameterSuffix |`''`
| Параметр | Значение
| ParameterCase | `camelBack`
| ParameterPrefix | `''`
| ParameterSuffix | `''`
|===
Пример кода до форматирования:
@ -1147,10 +1147,10 @@ int returnInt(int returnValue) {
[cols=",",options="header",]
|===
|Параметр |Значение
|ConstantParameterCase |`camelBack`
|ConstantParameterPrefix |`''`
|ConstantParameterSuffix |`''`
| Параметр | Значение
| ConstantParameterCase | `camelBack`
| ConstantParameterPrefix | `''`
| ConstantParameterSuffix | `''`
|===
Пример кода до форматирования:
@ -1175,10 +1175,10 @@ char returnChar(const char returnValue) {
[cols=",",options="header",]
|===
|Параметр |Значение
|ConstantPointerParameterCase |`camelBack`
|ConstantPointerParameterPrefix |`''`
|ConstantPointerParameterSuffix |`''`
| Параметр | Значение
| ConstantPointerParameterCase | `camelBack`
| ConstantPointerParameterPrefix | `''`
| ConstantPointerParameterSuffix | `''`
|===
Пример кода до форматирования:
@ -1203,10 +1203,10 @@ void* returnVoid(void* const returnValue) {
[cols=",",options="header",]
|===
|Параметр |Значение
|PointerParameterCase |`camelBack`
|PointerParameterPrefix |`''`
|PointerParameterSuffix |`''`
| Параметр | Значение
| PointerParameterCase | `camelBack`
| PointerParameterPrefix | `''`
| PointerParameterSuffix | `''`
|===
Пример кода до форматирования:
@ -1233,10 +1233,10 @@ void* returnPtr(void* returnValue) {
[cols=",",options="header",]
|===
|Параметр |Значение
|TemplateParameterCase |`camelBack`
|TemplateParameterPrefix |`''`
|TemplateParameterSuffix |`''`
| Параметр | Значение
| TemplateParameterCase | `camelBack`
| TemplateParameterPrefix | `''`
| TemplateParameterSuffix | `''`
|===
Пример кода до форматирования:
@ -1261,10 +1261,10 @@ template<typename TType> int tFunction(TType tValue) {
[cols=",",options="header",]
|===
|Параметр |Значение
|ParameterPackCase |`camelBack`
|ParameterPackPrefix |`''`
|ParameterPackSuffix |`''`
| Параметр | Значение
| ParameterPackCase | `camelBack`
| ParameterPackPrefix | `''`
| ParameterPackSuffix | `''`
|===
Пример кода до форматирования:
@ -1285,10 +1285,10 @@ template<class ... Types> void f(Types ... parametersPack);
[cols=",",options="header",]
|===
|Параметр |Значение
|TemplateTemplateParameterCase |`camelBack`
|TemplateTemplateParameterPrefix |`''`
|TemplateTemplateParameterSuffix |`''`
| Параметр | Значение
| TemplateTemplateParameterCase | `camelBack`
| TemplateTemplateParameterPrefix | `''`
| TemplateTemplateParameterSuffix | `''`
|===
Пример кода до форматирования:
@ -1311,10 +1311,10 @@ class AllmightyClass { };
[cols=",",options="header",]
|===
|Параметр |Значение
|TypeTemplateParameterCase |`CamelCase`
|TypeTemplateParameterPrefix |`''`
|TypeTemplateParameterSuffix |`''`
| Параметр | Значение
| TypeTemplateParameterCase | `CamelCase`
| TypeTemplateParameterPrefix | `''`
| TypeTemplateParameterSuffix | `''`
|===
Пример кода до форматирования:
@ -1339,10 +1339,10 @@ template<typename TType>int tFunction(TType value) {
[cols=",",options="header",]
|===
|Параметр |Значение
|ValueTemplateParameterCase |`camelBack`
|ValueTemplateParameterPrefix |`''`
|ValueTemplateParameterSuffix |`''`
| Параметр | Значение
| ValueTemplateParameterCase | `camelBack`
| ValueTemplateParameterPrefix | `''`
| ValueTemplateParameterSuffix | `''`
|===
Пример кода до форматирования:

View File

@ -19,10 +19,9 @@ https://ru.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms[BLAS]
* https://github.com/skystrife/cpptoml[cpptoml]: чтение
https://github.com/toml-lang/toml[TOML]
* https://github.com/martinmoene/gsl-lite/[gsl-lite]: реализация
рекомендаций https://github.com/isocpp/CppCoreGuidelines[C++ Core
Guidelines]
* http://www.holoborodko.com/pavel/mpfr[mpfrc++]: C++ интерфейс для
https://www.mpfr.org/[MPFR]
рекомендаций https://github.com/isocpp/CppCoreGuidelines/[C{plus}{plus} Core Guidelines]
* http://www.holoborodko.com/pavel/mpfr/[mpfrc{plus}{plus}]: C++ интерфейс
для https://www.mpfr.org/[MPFR]
== Qt

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB