Skip to content

Commit

Permalink
Update dev documentation and add instruction to README
Browse files Browse the repository at this point in the history
  • Loading branch information
bialger committed Aug 27, 2024
1 parent f166391 commit bfd0c7f
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 18 deletions.
18 changes: 17 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

## Использование в проекте

Более подробно об использовании ArgParser можно прочитать на странице
Более подробно об использовании ArgParser можно прочитать на странице
[пользовательской документации](./lib/argparser/docs/ArgParser.md).

### CMake
Expand All @@ -39,6 +39,22 @@ FetchContent_Declare(argparser GIT_REPOSITORY https://github.com/bialger/ArgPars

## Пример использования и добавления аргумента

Для добавления пользовательского типа аргумента `Type`, он должен удовлетворять следующим требованиям:

* Иметь конструктор без параметров и конструктор копирования
* Иметь оператор присваивания с копированием
* Должен быть определен оператор `std::ostream& operator<<(std::ostream& os, const Type& t)`
* Должна быть определена функция получения значения из `std::string`:
`ArgumentParser::NonMemberParsingResult<Type> ParseType(const std::string&)`

Тогда для добавления аргумента можно использовать макрос:
`AddArgumentType(Type, ParseType)`.

При вызове конструктора класса `ArgParser` должен быть передан аргумент типа
`ArgumentTypes<Args...>`, где `Args...` - типы добавленных аргументов.
Это можно сделать удобно при помощи макроса `PassArgumentTypes(Args...)`.
В вышеприведенном примере следует передать `PassArgumentTypes(Type)`.

CMakeLists.txt:

```cmake
Expand Down
34 changes: 17 additions & 17 deletions lib/argparser/docs/dev/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ flowchart TB
## Архитектура подсистем

* Исходя из вышеуказанного предполагаемого использования продукта, весь продукт
представляет собой одну подсистему - библиотеку argparer, которая должна обрабатывать
представляет собой одну подсистему - библиотеку argparser, которая должна обрабатывать
данные аргументы командной строки.

### Архитектура подсистемы "ArgParser"
Expand All @@ -40,38 +40,38 @@ classDiagram
direction TB
note for ArgParser "Has pseudonym functions for AddArgument and GetValue for each argument type"
class ArgParser {
-const char[] name_;
-string name_;
-vector~ArgumentBuilder*~ argument_builders_;
-vector~Argument*~ arguments_;
-vector~string~ allowed_typenames_;
-vector~string_view~ allowed_typenames_;
-vector~string~ allowed_typenames_for_help_;
-map~string, map~ string, size_t~~ arguments_by_type_;
-map~char, string~ short_to_long_names_;
-map~string_view, map~ string_view, size_t~~ arguments_by_type_;
-map~char, string_view~ 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
+AddHelp(char short_name, string_view long_name, string description="") ConcreteArgumentBuilder~bool~ &
+AddHelp(string_view long_name, string description="") ConcreteArgumentBuilder~bool~ &
+AddArgument~T~(char short_name, string_view long_name, string description="") ConcreteArgumentBuilder~T~ &
+AddArgument~T~(string_view long_name, string description="") ConcreteArgumentBuilder~T~ &
+GetValue~T~(string_view long_name, size_t index=0) T
+SeSetAliasForType~T~(string alias) void
-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
-AddArgument_~T~(char short_name, string_view long_name, string description) ConcreteArgumentBuilder~T~ &
-GetValue_~T~(string_view 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
+GetType()* string_view
+GetInfo()* ArgumentInformation
+GetUsedValues()* size_t
+ClearStored()* void
Expand All @@ -95,7 +95,7 @@ classDiagram
+ValidateArgument(vector~string~ argv, size_t position) vector~size_t~
+CheckLimit() bool
+GetValueStatus() ArgumentParsingStatus
+GetType() string
+GetType() string_view
+GetInfo() ArgumentInformation
+GetUsedValues() size_t
+ClearStored() void
Expand All @@ -120,9 +120,9 @@ classDiagram
}
class ArgumentInformation {
+char short_key = kBadChar
+const char[] long_key = ""
+const char[] description = ""
+string type
+string_view long_key = ""
+string description = ""
+string_view type
+size_t minimum_values = 0
+bool is_multi_value = false
+bool is_positional = false
Expand Down

0 comments on commit bfd0c7f

Please sign in to comment.