Skip to content

Commit

Permalink
Reworked documentation - deleted argparser docs, added GitHub links
Browse files Browse the repository at this point in the history
  • Loading branch information
bialger committed Aug 12, 2024
1 parent ed93d4f commit 0c1923c
Show file tree
Hide file tree
Showing 8 changed files with 6 additions and 769 deletions.
2 changes: 1 addition & 1 deletion docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@

## Итоговая документация

* [Модуль ArgParser](../lib/argparser/docs/README.md)
* [Модуль ArgParser, v1.1.0](https://github.com/bialger/ArgParser/blob/v1.1.0/lib/argparser/docs/README.md)
* [Мануал weather-forecast](WeatherForecast.md)
174 changes: 5 additions & 169 deletions docs/dev/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

* Используется модуль UI для взаимодействия с пользовательским вводом любого рода и
вывода информации.
* Используется модуль [ArgParser](../../lib/argparser/docs/README.md) - подсистема
* Используется модуль [ArgParser](https://github.com/bialger/ArgParser/tree/v1.1.0) - подсистема
для обработки аргументов командной строки.
* Используется модуль Forecast для выполнения и обработки запросов прогноза.
* Используется библиотека [C++ Requests](https://github.com/libcpr/cpr) для выполнения HTTP-запросов.
Expand All @@ -26,13 +26,11 @@
title: Project system diagram
---
flowchart LR
subgraph Independent systems
subgraph Third-party libraries
nodeArgParser([ArgParser])
subgraph Third-party libraries
nodeCPR([C++ Requests])
nodeJSON([JSON])
nodeFTXUI([FTXUI])
end
nodeCPR([C++ Requests])
nodeJSON([JSON])
nodeFTXUI([FTXUI])
end
nodeForecast([Forecast])
nodeUI([UI])
Expand Down Expand Up @@ -325,165 +323,3 @@ Internet-запроса.
Этот класс является абстракцией для представления погоды за наименьший временной
промежуток: время суток. Должен иметь публичные поля для всех характеристик и метод,
универсально возвращающий их всех.

### Архитектура подсистемы "ArgParser"

Эта подсистема представляет собой набор классов и связей между ними, которые выполняют
непосредственно парсинг аргументов командной строки, передаваемых в подсистему. Все
классы находятся в пространстве имён ArgumentParser.

#### UML-диаграмма

```mermaid
---
title: Diagram of the module ArgParser
---
%%{
init: {
'theme': 'base',
'classDiagram': { 'curve': 'linear' },
}
}%%
classDiagram
direction TB
note for ArgParser "Has pseudonym functions for AddArgument and GetValue for each argument type"
class ArgParser {
-const char[] name_;
-vector~ArgumentBuilder*~ argument_builders_;
-vector~Argument*~ arguments_;
-vector~string~ allowed_typenames_;
-vector~string~ allowed_typenames_for_help_;
-map~string, map~ string, size_t~~ arguments_by_type_;
-map~char, string~ short_to_long_names_;
-size_t help_index_;
+Parse(vector~string~ args, ConditionalOutput error_output=()) bool
+Parse(int argc, char[][] argv, ConditionalOutput error_output=()) bool
+Help() bool
+HelpDescription() string
+AddHelp(char short_name, const char[] long_name, const char[] description="") ConcreteArgumentBuilder~bool~ &
+AddHelp(const char[] long_name, const char[] description="") ConcreteArgumentBuilder~bool~ &
+AddArgument~T~(char short_name, const char[] long_name, const char[] description="") ConcreteArgumentBuilder~T~ &
+AddArgument~T~(const char[] long_name, const char[] description="") ConcreteArgumentBuilder~T~ &
+GetValue~T~(const char[] long_name, size_t index=0) T
-Parse_(vector~string~ args, ConditionalOutput error_output) bool
-GetLongKeys(string current_argument) vector~string~
-ParsePositionalArguments(vector~string~ argv, const vector~size_t~ & used_positions) void
-HandleErrors(ConditionalOutput error_output) bool
-RefreshArguments() void
-AddArgument_~T~(char short_name, const char[] long_name, const char[] description) ConcreteArgumentBuilder~T~ &
-GetValue_~T~(const char* long_name, size_t index) T
}
class Argument {
<<interface>>
+ValidateArgument(vector~string~ argv, size_t position)* vector~size_t~
+CheckLimit()* bool
+GetValueStatus()* ArgumentParsingStatus
+GetType()* string
+GetInfo()* ArgumentInformation
+GetUsedValues()* size_t
+ClearStored()* void
#ObtainValue(vector~string~ argv, string& value_string, vector~size_t~ & used_values, size_t position)* size_t
}
class ArgumentBuilder {
<<interface>>
+GetInfo()* ArgumentInformation
+GetDefaultValue()* string
+build()* Argument*
}
class ConcreteArgument~T~ {
-ArgumentInformation info_
-ArgumentParsingStatus value_status_
-size_t value_counter_
-T value_
-T default_value_
-T* stored_value_
-vector~T~* stored_values_
+GetValue(size_t index) T
+ValidateArgument(vector~string~ argv, size_t position) vector~size_t~
+CheckLimit() bool
+GetValueStatus() ArgumentParsingStatus
+GetType() string
+GetInfo() ArgumentInformation
+GetUsedValues() size_t
+ClearStored() void
#ObtainValue(vector~string~ argv, string& value_string, vector~size_t~ & used_values, size_t position) size_t
}
class ConcreteArgumentBuilder~T~ {
-ArgumentInformation info_;
-T default_value_;
-T* stored_value_;
-vector~T~* stored_values_;
-bool was_created_temp_vector_;
+MultiValue(size_t min=0) ConcreteArgumentBuilder &
+Positional() ConcreteArgumentBuilder&
+StoreValue(T& value) ConcreteArgumentBuilder&
+StoreValues(vector~T~ & values) ConcreteArgumentBuilder&
+Default(T value) ConcreteArgumentBuilder&
+AddValidate(function~bool(string&)~ validate) ConcreteArgumentBuilder&
+AddIsGood(function~bool(string&)~ is_good) ConcreteArgumentBuilder&
+GetInfo() ArgumentInformation
+GetDefaultValue() string
+build() Argument*`
}
class ArgumentInformation {
+char short_key = kBadChar
+const char[] long_key = ""
+const char[] description = ""
+string type
+size_t minimum_values = 0
+bool is_multi_value = false
+bool is_positional = false
+bool has_store_values = false
+bool has_store_value = false
+bool has_default = false
+function~bool(string&)~ validate = &AlwaysTrue
++function~bool(string&)~ is_good = &AlwaysTrue
}
class ArgumentParsingStatus {
<<enumeration>>
NoArgument
InvalidArgument
InsufficientArguments
Success
}
ArgParser *-- Argument
ArgParser *-- ArgumentBuilder
ArgParser <.. ConcreteArgument
ArgParser <.. ConcreteArgumentBuilder
Argument <|.. ConcreteArgument
ArgumentBuilder <.. Argument
ArgumentBuilder <|.. ConcreteArgumentBuilder
ConcreteArgument *-- ArgumentInformation
ConcreteArgument *-- ArgumentParsingStatus
ConcreteArgumentBuilder <.. ConcreteArgument
ConcreteArgumentBuilder *-- ArgumentInformation
```

#### Класс ArgParser

Этот класс является основным классом модуля, именно с ним обычно взаимодействует
пользователь. Он должен предоставлять следующие возможности: добавление обрабатываемого
аргумента (любого из указанных) с указанным ключом, парсинг набора аргументов командной
строки, а также функция добавления аргумента. Кроме того, должен иметь функцию
составления справки и обрабатывать ошибки в синтаксисе аргументов командной строки,
и, в некоторых случаях, выводить их.

#### Класс ArgumentBuilder

Этот класс реализует паттерн проектирования "Builder": ссылки на объекты наследников
этого класса должна возвращать функция добавления аргумента из ArgParser, к нему
должен обращаться пользователь, добавляя информацию об аргументе. Должен
реализовывать функции добавления любой информации про аргумент, представленные в
[тестах](../../tests/argparser_unit_tests.cpp) и функцию построения. Ему должен
наследовать шаблонизированный класс конкретного Builder, который будет реализовывать
вышеуказанный функционал для каждого из типов аргумента.

#### Класс Argument

Этот класс является родительским классом для всех классов аргументов. Должен иметь
функции возврата статуса парсинга и возврата информации об аргументе, а также функцию
получения значения аргумента из аргументов командной строки. Необходимая информация,
не изменяемая в процессе парсинга, должна храниться в виде экземпляра структуры.
На данный момент планируется аргументы всех базовых значащих типов (кроме 8-битных
чисел), StringArgument и ComplexArgument (строка с валидацией и чтением пробелов).
136 changes: 0 additions & 136 deletions lib/argparser/docs/ArgParser.md

This file was deleted.

Loading

0 comments on commit 0c1923c

Please sign in to comment.