diff --git a/CMakeLists.txt b/CMakeLists.txt index 7a6d7a99..e46382f5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_policy(SET CMP0017 NEW) # need include() with .cmake project(pip) set(pip_MAJOR 2) set(pip_MINOR 34) -set(pip_REVISION 0) +set(pip_REVISION 1) set(pip_SUFFIX ) set(pip_COMPANY SHS) set(pip_DOMAIN org.SHS) @@ -553,13 +553,21 @@ if ((NOT PIP_FREERTOS) AND (NOT CROSSTOOLS)) set(DOXY_PROJECT_NUMBER "${pip_VERSION}") set(DOXY_QHP_CUST_FILTER_ATTRS "\"PIP ${pip_VERSION}\"") set(DOXY_QHP_SECT_FILTER_ATTRS "\"PIP ${pip_VERSION}\"") - set(DOXY_EXAMPLE_PATH "\"${CMAKE_CURRENT_SOURCE_DIR}/doc/examples\"") - set(DOXY_IMAGE_PATH "\"${CMAKE_CURRENT_SOURCE_DIR}/doc/images\"") - set(DOXY_EXCLUDE "\"${CMAKE_CURRENT_SOURCE_DIR}/libs/lua/3rd\"") + set(DOXY_EXAMPLE_PATH "\"${CMAKE_CURRENT_SOURCE_DIR}/doc/examples\"") + set(DOXY_IMAGE_PATH "\"${CMAKE_CURRENT_SOURCE_DIR}/doc/images\"") + set(DOXY_LOGO_PATH "\"${CMAKE_CURRENT_SOURCE_DIR}/doc/pip.png\"") + set(DOXY_EXCLUDE "\"${CMAKE_CURRENT_SOURCE_DIR}/libs/lua/3rd\"") + set(DOXY_DOMAIN "${pip_DOMAIN}.${PROJECT_NAME}.doc") + if ("x${DOC_LANG}" STREQUAL "x") + set(DOXY_OUTPUT_LANGUAGE English) + set(DOXY_OUTPUT_DIR en) + else() + set(DOXY_OUTPUT_LANGUAGE ${DOC_LANG}) + set(DOXY_OUTPUT_DIR ${DOC_DIR}) + endif() if(DOXYGEN_DOT_EXECUTABLE) - string(REPLACE "\\" "" _DOT_PATH "${DOXYGEN_DOT_PATH}") + string(REPLACE "\\" "/" _DOT_PATH "${DOXYGEN_DOT_PATH}") set(DOXY_DOT_PATH "\"${_DOT_PATH}\"") - set(DOXY_MSCGEN_PATH "\"${_DOT_PATH}\"") set(DOXY_DIA_PATH "\"${_DOT_PATH}\"") endif() set(DOXY_INPUT) diff --git a/README.md b/README.md index 6b6fe825..80da2824 100644 --- a/README.md +++ b/README.md @@ -33,4 +33,6 @@ You should add ${} to your target. ## Documentation -[Online documentation](https://shs.tools/pip/html/index.html) +[Online documentation](https://shs.tools/pip/html/en/index.html) + +[Документация на Русском языке](https://shs.tools/pip/html/ru/index.html) diff --git a/cmake/PIPDocumentation.cmake b/cmake/PIPDocumentation.cmake index 9e9a099a..66fbc39b 100644 --- a/cmake/PIPDocumentation.cmake +++ b/cmake/PIPDocumentation.cmake @@ -1,7 +1,7 @@ macro(ADD_DOCUMENTATION TARGET DOXYGEN_CONFIG_FILE) if(DOXYGEN_FOUND) configure_file("${PROJECT_SOURCE_DIR}/${DOXYGEN_CONFIG_FILE}" "${CMAKE_CURRENT_BINARY_DIR}/doxyfile-${TARGET}") - add_custom_target("genereate.${TARGET}" COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doxyfile-${TARGET}) + add_custom_target("genereate.${TARGET}" COMMAND "${CMAKE_COMMAND}" -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/doc/html" COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doxyfile-${TARGET}) add_custom_target("${TARGET}" COMMAND ${CMAKE_COMMAND} -D COMPONENT=doc -P cmake_install.cmake) add_dependencies("${TARGET}" "genereate.${TARGET}") else(DOXYGEN_FOUND) diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in index 7b0fde56..04697f7f 100644 --- a/doc/Doxyfile.in +++ b/doc/Doxyfile.in @@ -1,4 +1,4 @@ -# Doxyfile 1.8.15 +# Doxyfile 1.9.1 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -51,7 +51,7 @@ PROJECT_BRIEF = "Platform-Independent Primitives" # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy # the logo to the output directory. -PROJECT_LOGO = +PROJECT_LOGO = ${DOXY_LOGO_PATH} # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is @@ -91,7 +91,7 @@ ALLOW_UNICODE_NAMES = NO # Ukrainian and Vietnamese. # The default value is: English. -OUTPUT_LANGUAGE = English +OUTPUT_LANGUAGE = ${DOXY_OUTPUT_LANGUAGE} # The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all # documentation generated by doxygen is written. Doxygen will use this @@ -158,7 +158,7 @@ INLINE_INHERITED_MEMB = NO # shortest path that makes the file name unique will be used # The default value is: YES. -FULL_PATH_NAMES = YES +FULL_PATH_NAMES = NO # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. # Stripping is only done if one of the specified strings matches the left-hand @@ -197,10 +197,20 @@ SHORT_NAMES = NO JAVADOC_AUTOBRIEF = NO +# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line +# such as +# /*************** +# as being the beginning of a Javadoc-style comment "banner". If set to NO, the +# Javadoc-style will behave just like regular comments and it will not be +# interpreted by doxygen. +# The default value is: NO. + +JAVADOC_BANNER = NO + # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first # line (until the first dot) of a Qt-style comment as the brief description. If # set to NO, the Qt-style will behave just like regular Qt-style comments (thus -# requiring an explicit @brief command for a brief description.) +# requiring an explicit \brief command for a brief description.) # The default value is: NO. QT_AUTOBRIEF = NO @@ -215,7 +225,15 @@ QT_AUTOBRIEF = NO # not recognized any more. # The default value is: NO. -MULTILINE_CPP_IS_BRIEF = NO +MULTILINE_CPP_IS_BRIEF = YES + +# By default Python docstrings are displayed as preformatted text and doxygen's +# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the +# doxygen's special commands can be used and the contents of the docstring +# documentation blocks is shown as doxygen documentation. +# The default value is: YES. + +PYTHON_DOCSTRING = YES # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the # documentation from any documented member that it re-implements. @@ -256,12 +274,6 @@ ALIASES = "handlers=\name Handlers" \ "events=\name Events" \ "ioparams=\name Configurable parameters" -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding "class=itcl::class" -# will allow you to use the command class in the itcl::class meaning. - -TCL_SUBST = - # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For # instance, some of the names that are used will be different. The list of all @@ -302,19 +314,22 @@ OPTIMIZE_OUTPUT_SLICE = NO # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and -# language is one of the parsers supported by doxygen: IDL, Java, Javascript, -# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, +# language is one of the parsers supported by doxygen: IDL, Java, JavaScript, +# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, VHDL, # Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: # FortranFree, unknown formatted Fortran: Fortran. In the later case the parser # tries to guess whether the code is fixed or free formatted code, this is the -# default for Fortran type files), VHDL, tcl. For instance to make doxygen treat -# .inc files as Fortran files (default is PHP), and .f files as C (default is -# Fortran), use: inc=Fortran f=C. +# default for Fortran type files). For instance to make doxygen treat .inc files +# as Fortran files (default is PHP), and .f files as C (default is Fortran), +# use: inc=Fortran f=C. # # Note: For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise -# the files are not read by doxygen. +# the files are not read by doxygen. When specifying no_extension you should add +# * to the FILE_PATTERNS. +# +# Note see also the list of default file extension mappings. EXTENSION_MAPPING = @@ -332,7 +347,7 @@ MARKDOWN_SUPPORT = YES # to that level are automatically included in the table of contents, even if # they do not have an id attribute. # Note: This feature currently applies only to Markdown headings. -# Minimum value: 0, maximum value: 99, default value: 0. +# Minimum value: 0, maximum value: 99, default value: 5. # This tag requires that the tag MARKDOWN_SUPPORT is set to YES. TOC_INCLUDE_HEADINGS = 0 @@ -353,7 +368,7 @@ AUTOLINK_SUPPORT = YES # diagrams that involve STL classes more complete and accurate. # The default value is: NO. -BUILTIN_STL_SUPPORT = NO +BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. @@ -448,6 +463,19 @@ TYPEDEF_HIDES_STRUCT = NO LOOKUP_CACHE_SIZE = 0 +# The NUM_PROC_THREADS specifies the number threads doxygen is allowed to use +# during processing. When set to 0 doxygen will based this on the number of +# cores available in the system. You can set it explicitly to a value larger +# than 0 to get more control over the balance between CPU load and processing +# speed. At this moment only the input processing can be done using multiple +# threads. Since this is still an experimental feature the default is set to 1, +# which efficively disables parallel processing. Please report any issues you +# encounter. Generating dot graphs in parallel is controlled by the +# DOT_NUM_THREADS setting. +# Minimum value: 0, maximum value: 32, default value: 1. + +NUM_PROC_THREADS = 1 + #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- @@ -468,6 +496,12 @@ EXTRACT_ALL = NO EXTRACT_PRIVATE = NO +# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual +# methods of a class will be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIV_VIRTUAL = YES + # If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal # scope will be included in the documentation. # The default value is: NO. @@ -505,6 +539,13 @@ EXTRACT_LOCAL_METHODS = YES EXTRACT_ANON_NSPACES = NO +# If this flag is set to YES, the name of an unnamed parameter in a declaration +# will be determined by the corresponding definition. By default unnamed +# parameters remain unnamed in the output. +# The default value is: YES. + +RESOLVE_UNNAMED_PARAMS = YES + # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all # undocumented members inside documented classes or files. If set to NO these # members will be included in the various overviews, but no documentation @@ -522,8 +563,8 @@ HIDE_UNDOC_MEMBERS = YES HIDE_UNDOC_CLASSES = YES # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# (class|struct|union) declarations. If set to NO, these declarations will be -# included in the documentation. +# declarations. If set to NO, these declarations will be included in the +# documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = YES @@ -542,11 +583,18 @@ HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO -# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file -# names in lower-case letters. If set to YES, upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. +# With the correct setting of option CASE_SENSE_NAMES doxygen will better be +# able to match the capabilities of the underlying filesystem. In case the +# filesystem is case sensitive (i.e. it supports files in the same directory +# whose names only differ in casing), the option must be set to YES to properly +# deal with such files in case they appear in the input. For filesystems that +# are not case sensitive the option should be be set to NO to properly deal with +# output files written for symbols that only differ in casing, such as for two +# classes, one named CLASS and the other named Class, and to also support +# references to files without having to specify the exact matching casing. On +# Windows (including Cygwin) and MacOS, users should typically set this option +# to NO, whereas on Linux or other Unix flavors it should typically be set to +# YES. # The default value is: system dependent. CASE_SENSE_NAMES = NO @@ -576,7 +624,7 @@ SHOW_INCLUDE_FILES = NO # which file to include in order to use the member. # The default value is: NO. -SHOW_GROUPED_MEMB_INC = NO +SHOW_GROUPED_MEMB_INC = YES # If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include # files with double quotes in the documentation rather than with sharp brackets. @@ -785,7 +833,10 @@ WARN_IF_DOC_ERROR = YES WARN_NO_PARAMDOC = NO # If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when -# a warning is encountered. +# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS +# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but +# at the end of the doxygen process doxygen will return with a non-zero status. +# Possible values are: NO, YES and FAIL_ON_WARNINGS. # The default value is: NO. WARN_AS_ERROR = NO @@ -821,8 +872,8 @@ INPUT = ${DOXY_INPUT} # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: https://www.gnu.org/software/libiconv/) for the list of -# possible encodings. +# documentation (see: +# https://www.gnu.org/software/libiconv/) for the list of possible encodings. # The default value is: UTF-8. INPUT_ENCODING = UTF-8 @@ -835,46 +886,20 @@ INPUT_ENCODING = UTF-8 # need to set EXTENSION_MAPPING for the extension otherwise the files are not # read by doxygen. # +# Note the list of default checked file patterns might differ from the list of +# default file extension mappings. +# # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, # *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, # *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, -# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, -# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice. +# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment), +# *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, *.vhdl, +# *.ucf, *.qsf and *.ice. -FILE_PATTERNS = *.c \ - *.cc \ - *.cxx \ +FILE_PATTERNS = *.c \ *.cpp \ - *.c++ \ - *.d \ - *.java \ - *.ii \ - *.ixx \ - *.ipp \ - *.i++ \ - *.inl \ *.h \ - *.hh \ - *.hxx \ - *.hpp \ - *.h++ \ - *.idl \ - *.odl \ - *.cs \ - *.php \ - *.php3 \ - *.inc \ - *.m \ - *.markdown \ - *.md \ - *.mm \ - *.dox \ - *.py \ - *.f90 \ - *.f \ - *.for \ - *.vhd \ - *.vhdl + *.md # The RECURSIVE tag can be used to specify whether or not subdirectories should # be searched for input files as well. @@ -1087,16 +1112,22 @@ USE_HTAGS = NO VERBATIM_HEADERS = NO # If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the -# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the -# cost of reduced performance. This can be particularly helpful with template -# rich C++ code for which doxygen's built-in parser lacks the necessary type -# information. +# clang parser (see: +# http://clang.llvm.org/) for more accurate parsing at the cost of reduced +# performance. This can be particularly helpful with template rich C++ code for +# which doxygen's built-in parser lacks the necessary type information. # Note: The availability of this option depends on whether or not doxygen was # generated with the -Duse_libclang=ON option for CMake. # The default value is: NO. CLANG_ASSISTED_PARSING = NO +# If clang assisted parsing is enabled and the CLANG_ADD_INC_PATHS tag is set to +# YES then doxygen will add the directory of each input to the include path. +# The default value is: YES. + +CLANG_ADD_INC_PATHS = YES + # If clang assisted parsing is enabled you can provide the compiler with command # line options that you would normally use when invoking the compiler. Note that # the include paths will already be set by doxygen for the files and directories @@ -1106,10 +1137,13 @@ CLANG_ASSISTED_PARSING = NO CLANG_OPTIONS = # If clang assisted parsing is enabled you can provide the clang parser with the -# path to the compilation database (see: -# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) used when the files -# were built. This is equivalent to specifying the "-p" option to a clang tool, -# such as clang-check. These options will then be passed to the parser. +# path to the directory containing a file called compile_commands.json. This +# file is the compilation database (see: +# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) containing the +# options used when the source files were built. This is equivalent to +# specifying the -p option to a clang tool, such as clang-check. These options +# will then be passed to the parser. Any options specified with CLANG_OPTIONS +# will be added as well. # Note: The availability of this option depends on whether or not doxygen was # generated with the -Duse_libclang=ON option for CMake. @@ -1126,13 +1160,6 @@ CLANG_DATABASE_PATH = ALPHABETICAL_INDEX = YES -# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in -# which the alphabetical index list will be split. -# Minimum value: 1, maximum value: 20, default value: 5. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -COLS_IN_ALPHA_INDEX = 5 - # In case all classes in a project start with a common prefix, all classes will # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag # can be used to specify a prefix (or a list of prefixes) that should be ignored @@ -1156,7 +1183,7 @@ GENERATE_HTML = YES # The default directory is: html. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_OUTPUT = html +HTML_OUTPUT = html/${DOXY_OUTPUT_DIR} # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each # generated HTML page (for example: .htm, .php, .asp). @@ -1239,7 +1266,7 @@ HTML_EXTRA_FILES = # Minimum value: 0, maximum value: 359, default value: 220. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_COLORSTYLE_HUE = 246 +HTML_COLORSTYLE_HUE = 221 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors # in the HTML output. For a value of 0 the output will use grayscales only. A @@ -1247,7 +1274,7 @@ HTML_COLORSTYLE_HUE = 246 # Minimum value: 0, maximum value: 255, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_COLORSTYLE_SAT = 79 +HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the # luminance component of the colors in the HTML output. Values below 100 @@ -1271,9 +1298,9 @@ HTML_TIMESTAMP = YES # If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML # documentation will contain a main index with vertical navigation menus that -# are dynamically created via Javascript. If disabled, the navigation index will +# are dynamically created via JavaScript. If disabled, the navigation index will # consists of multiple levels of tabs that are statically embedded in every HTML -# page. Disable this option to support browsers that do not have Javascript, +# page. Disable this option to support browsers that do not have JavaScript, # like the Qt help browser. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1299,14 +1326,15 @@ HTML_DYNAMIC_SECTIONS = NO # Minimum value: 0, maximum value: 9999, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_INDEX_NUM_ENTRIES = 100 +HTML_INDEX_NUM_ENTRIES = 1 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: https://developer.apple.com/xcode/), introduced with OSX -# 10.5 (Leopard). To create a documentation set, doxygen will generate a -# Makefile in the HTML output directory. Running make will produce the docset in -# that directory and running make install will install the docset in +# environment (see: +# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To +# create a documentation set, doxygen will generate a Makefile in the HTML +# output directory. Running make will produce the docset in that directory and +# running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at # startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy # genXcode/_index.html for more information. @@ -1329,7 +1357,7 @@ DOCSET_FEEDNAME = "Doxygen generated docs" # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_DOCSET is set to YES. -DOCSET_BUNDLE_ID = org.doxygen.Project +DOCSET_BUNDLE_ID = ${DOXY_DOMAIN} # The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style @@ -1337,19 +1365,19 @@ DOCSET_BUNDLE_ID = org.doxygen.Project # The default value is: org.doxygen.Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. -DOCSET_PUBLISHER_ID = org.doxygen.Publisher +DOCSET_PUBLISHER_ID = ${DOXY_DOMAIN} # The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. # The default value is: Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. -DOCSET_PUBLISHER_NAME = Publisher +DOCSET_PUBLISHER_NAME = PIP # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on -# Windows. +# (see: +# https://www.microsoft.com/en-us/download/details.aspx?id=21138) on Windows. # # The HTML Help Workshop contains a compiler that can convert all HTML output # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML @@ -1379,7 +1407,7 @@ CHM_FILE = HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated -# (YES) or that it should be included in the master .chm file (NO). +# (YES) or that it should be included in the main .chm file (NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. @@ -1420,11 +1448,12 @@ GENERATE_QHP = YES # the HTML output folder. # This tag requires that the tag GENERATE_QHP is set to YES. -QCH_FILE = pip.qch +QCH_FILE = pip_${DOXY_OUTPUT_DIR}.qch # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace -# (see: http://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). +# (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1432,8 +1461,8 @@ QHP_NAMESPACE = PIP # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: http://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual- -# folders). +# Folders (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1441,30 +1470,30 @@ QHP_VIRTUAL_FOLDER = PIP # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- -# filters). +# Filters (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = PIP # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- -# filters). +# Filters (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = ${DOXY_QHP_CUST_FILTER_ATTRS} # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: -# http://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = ${DOXY_QHP_SECT_FILTER_ATTRS} -# The QHG_LOCATION tag can be used to specify the location of Qt's -# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the -# generated .qhp file. +# The QHG_LOCATION tag can be used to specify the location (absolute path +# including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to +# run qhelpgenerator on the generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = qhelpgenerator @@ -1487,7 +1516,7 @@ GENERATE_ECLIPSEHELP = NO # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. -ECLIPSE_DOC_ID = org.doxygen.Project +ECLIPSE_DOC_ID = PIP # If you want full control over the layout of the generated HTML pages it might # be necessary to disable the index and replace it with your own. The @@ -1515,7 +1544,7 @@ DISABLE_INDEX = NO # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. -GENERATE_TREEVIEW = YES +GENERATE_TREEVIEW = NO # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # doxygen will group on one line in the generated HTML documentation. @@ -1541,6 +1570,17 @@ TREEVIEW_WIDTH = 250 EXT_LINKS_IN_WINDOW = NO +# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg +# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see +# https://inkscape.org) to generate formulas as SVG images instead of PNGs for +# the HTML output. These images will generally look nicer at scaled resolutions. +# Possible values are: png (the default) and svg (looks nicer but requires the +# pdf2svg or inkscape tool). +# The default value is: png. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FORMULA_FORMAT = png + # Use this tag to change the font size of LaTeX formulas included as images in # the HTML documentation. When you change the font size after a successful # doxygen run you need to manually remove any form_*.png images from the HTML @@ -1561,8 +1601,14 @@ FORMULA_FONTSIZE = 10 FORMULA_TRANSPARENT = YES +# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands +# to create new LaTeX commands to be used in formulas as building blocks. See +# the section "Including formulas" for details. + +FORMULA_MACROFILE = + # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see -# https://www.mathjax.org) which uses client side Javascript for the rendering +# https://www.mathjax.org) which uses client side JavaScript for the rendering # instead of using pre-rendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path @@ -1574,7 +1620,7 @@ USE_MATHJAX = NO # When MathJax is enabled you can set the default output format to be used for # the MathJax output. See the MathJax site (see: -# http://docs.mathjax.org/en/latest/output.html) for more details. +# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. # Possible values are: HTML-CSS (which is slower, but has the best # compatibility), NativeMML (i.e. MathML) and SVG. # The default value is: HTML-CSS. @@ -1590,7 +1636,7 @@ MATHJAX_FORMAT = HTML-CSS # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of # MathJax from https://www.mathjax.org before deployment. -# The default value is: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/. +# The default value is: https://cdn.jsdelivr.net/npm/mathjax@2. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest @@ -1604,7 +1650,8 @@ MATHJAX_EXTENSIONS = # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # of code that will be used on startup of the MathJax code. See the MathJax site -# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# (see: +# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an # example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. @@ -1629,10 +1676,10 @@ MATHJAX_CODEFILE = # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. -SEARCHENGINE = NO +SEARCHENGINE = YES # When the SERVER_BASED_SEARCH tag is enabled the search engine will be -# implemented using a web server instead of a web client using Javascript. There +# implemented using a web server instead of a web client using JavaScript. There # are two flavors of web server based searching depending on the EXTERNAL_SEARCH # setting. When disabled, doxygen will generate a PHP script for searching and # an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing @@ -1651,7 +1698,8 @@ SERVER_BASED_SEARCH = NO # # Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: https://xapian.org/). +# Xapian (see: +# https://xapian.org/). # # See the section "External Indexing and Searching" for details. # The default value is: NO. @@ -1664,8 +1712,9 @@ EXTERNAL_SEARCH = NO # # Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: https://xapian.org/). See the section "External Indexing and -# Searching" for details. +# Xapian (see: +# https://xapian.org/). See the section "External Indexing and Searching" for +# details. # This tag requires that the tag SEARCHENGINE is set to YES. SEARCHENGINE_URL = @@ -1736,13 +1785,14 @@ LATEX_CMD_NAME = latex MAKEINDEX_CMD_NAME = makeindex # The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to -# generate index for LaTeX. +# generate index for LaTeX. In case there is no backslash (\) as first character +# it will be automatically added in the LaTeX code. # Note: This tag is used in the generated output file (.tex). # See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat. -# The default value is: \makeindex. +# The default value is: makeindex. # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_MAKEINDEX_CMD = \makeindex +LATEX_MAKEINDEX_CMD = makeindex # If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX # documents. This may be useful for small projects and may help to save some @@ -1828,9 +1878,11 @@ LATEX_EXTRA_FILES = PDF_HYPERLINKS = YES -# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate -# the PDF file directly from the LaTeX files. Set this option to YES, to get a -# higher quality PDF documentation. +# If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as +# specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX +# files. Set this option to YES, to get a higher quality PDF documentation. +# +# See also section LATEX_CMD_NAME for selecting the engine. # The default value is: YES. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -2209,7 +2261,7 @@ TAGFILES = # tag file that is based on the input files it reads. See section "Linking to # external documentation" for more information about the usage of tag files. -GENERATE_TAGFILE = doc/pip.cfg +GENERATE_TAGFILE = doc/html/${DOXY_OUTPUT_DIR}/pip.cfg # If the ALLEXTERNALS tag is set to YES, all external class will be listed in # the class index. If set to NO, only the inherited external classes will be @@ -2232,12 +2284,6 @@ EXTERNAL_GROUPS = YES EXTERNAL_PAGES = YES -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of 'which perl'). -# The default file (with absolute path) is: /usr/bin/perl. - -PERL_PATH = /usr/bin/perl - #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- @@ -2251,15 +2297,6 @@ PERL_PATH = /usr/bin/perl CLASS_DIAGRAMS = YES -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see: -# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = ${DOXY_MSCGEN_PATH} - # You can include diagrams made with dia in doxygen documentation. Doxygen will # then run dia to produce the diagram and insert it in the documentation. The # DIA_PATH tag allows you to specify the directory where the dia binary resides. @@ -2357,10 +2394,32 @@ UML_LOOK = NO # but if the number exceeds 15, the total amount of fields shown is limited to # 10. # Minimum value: 0, maximum value: 100, default value: 10. -# This tag requires that the tag HAVE_DOT is set to YES. +# This tag requires that the tag UML_LOOK is set to YES. UML_LIMIT_NUM_FIELDS = 12 +# If the DOT_UML_DETAILS tag is set to NO, doxygen will show attributes and +# methods without types and arguments in the UML graphs. If the DOT_UML_DETAILS +# tag is set to YES, doxygen will add type and arguments for attributes and +# methods in the UML graphs. If the DOT_UML_DETAILS tag is set to NONE, doxygen +# will not generate fields with class member information in the UML graphs. The +# class diagrams will look similar to the default class diagrams but using UML +# notation for the relationships. +# Possible values are: NO, YES and NONE. +# The default value is: NO. +# This tag requires that the tag UML_LOOK is set to YES. + +DOT_UML_DETAILS = NO + +# The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters +# to display on a single line. If the actual line length exceeds this threshold +# significantly it will wrapped across multiple lines. Some heuristics are apply +# to avoid ugly line breaks. +# Minimum value: 0, maximum value: 1000, default value: 17. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_WRAP_THRESHOLD = 17 + # If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and # collaboration graphs will show the relations between templates and their # instances. @@ -2550,9 +2609,11 @@ DOT_MULTI_TARGETS = YES GENERATE_LEGEND = YES -# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot +# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate # files that are used to generate the various graphs. +# +# Note: This setting is not only used for dot files but also for msc and +# plantuml temporary files. # The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. DOT_CLEANUP = YES diff --git a/doc/examples/picontainers.cpp b/doc/examples/picontainers.cpp index 2d058037..2fcc83d0 100644 --- a/doc/examples/picontainers.cpp +++ b/doc/examples/picontainers.cpp @@ -4,14 +4,17 @@ void _() { //! [foreach] PIVector vec; vec << 1 << 2 << 3; -piForeach (int & i, vec) - cout << i << ", "; -// 1, 2, 3, -piForeach (int & i, vec) - i++; -piForeach (int & i, vec) - cout << i << ", "; -// 2, 3, 4, + +piForeach (int & i, vec) piCout << i; +// 1 +// 2 +// 3 + +piForeach (int & i, vec) i++; +piForeach (int & i, vec) piCout << i; +// 2 +// 3 +// 4 //! [foreach] //! [foreachC] PIVector vec; diff --git a/doc/examples/piobject.cpp b/doc/examples/piobject.cpp index 93107d1c..36e4ef11 100644 --- a/doc/examples/piobject.cpp +++ b/doc/examples/piobject.cpp @@ -5,8 +5,8 @@ class ObjectA: public PIObject { PIOBJECT(ObjectA) public: EVENT_HANDLER1(void, handlerA, const PIString & , str) {piCoutObj << "handler A:" << str;} - EVENT2(eventA2, int, i, float, f); EVENT1(eventA1, const PIString & , str); + EVENT2(eventA2, int, i, float, f); }; class ObjectB: public PIObject { @@ -26,7 +26,11 @@ int main(int argc, char * argv[]) { CONNECT1(void, PIString, &obj_b, eventB, &obj_a, handlerA); obj_b.eventB("event to handler"); - CONNECT1(void, PIString, &obj_a, eventA1, &obj_b, eventB); + CONNECTU(&obj_a, eventA1, &obj_b, eventB); obj_a.eventA1("event to event"); + + obj_a.piDisconnect("eventA1"); + CONNECTL(&obj_a, eventA1, ([](const PIString & str){piCout << str;})); + obj_a.eventA1("event to lambda"); }; //! [main] diff --git a/doc/pip.png b/doc/pip.png new file mode 100644 index 00000000..4eea6e1c Binary files /dev/null and b/doc/pip.png differ diff --git a/libs/console/piscreen.cpp b/libs/console/piscreen.cpp index 232ad3e5..448f87b2 100644 --- a/libs/console/piscreen.cpp +++ b/libs/console/piscreen.cpp @@ -142,7 +142,7 @@ void PIScreen::SystemConsole::resize(int w, int h) { pcells.resize(height); for (int i = 0; i < height; ++i) { cells[i].resize(width); - pcells[i].resize(width, Cell(0)); + pcells[i].resize(width, Cell(PIChar())); } #ifdef WINDOWS PRIVATE->sbi.srWindow = PRIVATE->csbi.srWindow; diff --git a/libs/console/piscreentiles.cpp b/libs/console/piscreentiles.cpp index 1fea2e93..0e579636 100644 --- a/libs/console/piscreentiles.cpp +++ b/libs/console/piscreentiles.cpp @@ -691,7 +691,7 @@ bool TileInput::keyEvent(PIKbdListener::KeyEvent key) { default: PIChar tc #ifdef WINDOWS - = PIChar(key.key); + = PIChar((ushort)key.key); #else = PIChar::fromUTF8((char *)&(key.key)); #endif diff --git a/libs/console/piterminal.cpp b/libs/console/piterminal.cpp index d63fca89..292a393b 100644 --- a/libs/console/piterminal.cpp +++ b/libs/console/piterminal.cpp @@ -239,9 +239,9 @@ void PITerminal::write(PIKbdListener::KeyEvent ke) { else { PIByteArray ba; #ifdef WINDOWS - ba << uchar(PIChar(ke.key).toConsole1Byte()); + ba << uchar(PIChar((ushort)ke.key).toConsole1Byte()); #else - ba = PIString(PIChar(ke.key)).toUTF8(); + ba = PIString(PIChar((ushort)ke.key)).toUTF8(); #endif write(ba); } diff --git a/libs/crypt/piauth.cpp b/libs/crypt/piauth.cpp index d3858355..223e3ad5 100644 --- a/libs/crypt/piauth.cpp +++ b/libs/crypt/piauth.cpp @@ -128,7 +128,7 @@ PIAuth::State PIAuth::receive(PIByteArray & ba) { passwordRequest(&ps); if (ps.isEmpty()) return disconnect(ba, "Canceled by user"); ph = crypt.passwordHash(ps, PIString("PIAuth").toByteArray()); - ps.fill(PIChar(0)); + ps.fill(PIChar()); tba.clear(); tba << ph << auth_sign << sign_pk; tba = crypt.crypt(tba, box_pk, box_sk); diff --git a/libs/fftw/pifft_p.h b/libs/fftw/pifft_p.h index 2a2d1546..04c61169 100644 --- a/libs/fftw/pifft_p.h +++ b/libs/fftw/pifft_p.h @@ -1,5 +1,5 @@ -/*! @file pifft_p.h - * @brief Class for FFT, IFFT and Hilbert transformations +/*! \file pifft_p.h + * \brief Class for FFT, IFFT and Hilbert transformations */ /* PIP - Platform Independent Primitives diff --git a/libs/io_utils/pibroadcast.cpp b/libs/io_utils/pibroadcast.cpp index a59b1314..49a32f2e 100644 --- a/libs/io_utils/pibroadcast.cpp +++ b/libs/io_utils/pibroadcast.cpp @@ -20,7 +20,7 @@ #include "pibroadcast.h" /** \class PIBroadcast - * @brief Broadcast for all interfaces, including loopback + * \brief Broadcast for all interfaces, including loopback * * \section PIBroadcast_synopsis Synopsis * %PIBroadcast used as multichannel IO device. It can use diff --git a/libs/io_utils/piethutilbase.cpp b/libs/io_utils/piethutilbase.cpp index 46a2faa5..38301e2c 100644 --- a/libs/io_utils/piethutilbase.cpp +++ b/libs/io_utils/piethutilbase.cpp @@ -23,7 +23,7 @@ #endif /** \class PIEthUtilBase - * @brief Base class for ethernet utils + * \brief Base class for ethernet utils * * \section PIEthUtilBase_synopsis Synopsis * %PIEthUtilBase provides crypt layer for derived classes: diff --git a/libs/io_utils/pistreampacker.cpp b/libs/io_utils/pistreampacker.cpp index be4649dd..5f95a953 100644 --- a/libs/io_utils/pistreampacker.cpp +++ b/libs/io_utils/pistreampacker.cpp @@ -28,7 +28,7 @@ #endif /** \class PIStreamPacker - * @brief Simple packet wrap aroud any PIIODevice + * \brief Simple packet wrap aroud any PIIODevice * * \section PIStreamPacker_synopsis Synopsis * %PIStreamPacker provides simple pack/unpack logic for any data packets. diff --git a/libs/main/cloud/picloudbase.h b/libs/main/cloud/picloudbase.h index 674b0d7f..170a3d89 100644 --- a/libs/main/cloud/picloudbase.h +++ b/libs/main/cloud/picloudbase.h @@ -1,5 +1,5 @@ -/*! @file picloudbase.h - * @brief PICloud Base - Base class for PICloudClient and PICloud Server +/*! \file picloudbase.h + * \brief PICloud Base - Base class for PICloudClient and PICloud Server */ /* PIP - Platform Independent Primitives diff --git a/libs/main/cloud/picloudclient.h b/libs/main/cloud/picloudclient.h index cc944b2b..1fc4e4bb 100644 --- a/libs/main/cloud/picloudclient.h +++ b/libs/main/cloud/picloudclient.h @@ -1,5 +1,5 @@ -/*! @file picloudclient.h - * @brief PICloud Client +/*! \file picloudclient.h + * \brief PICloud Client */ /* PIP - Platform Independent Primitives @@ -27,7 +27,7 @@ #include "piconditionvar.h" -//! @brief PICloudClient +//! \brief PICloudClient class PIP_CLOUD_EXPORT PICloudClient: public PIIODevice, public PICloudBase { diff --git a/libs/main/cloud/picloudserver.h b/libs/main/cloud/picloudserver.h index 899ad326..4b614966 100644 --- a/libs/main/cloud/picloudserver.h +++ b/libs/main/cloud/picloudserver.h @@ -1,5 +1,5 @@ -/*! @file picloudserver.h - * @brief PICloud Server +/*! \file picloudserver.h + * \brief PICloud Server */ /* PIP - Platform Independent Primitives diff --git a/libs/main/cloud/picloudtcp.h b/libs/main/cloud/picloudtcp.h index cf9af60b..31ac9408 100644 --- a/libs/main/cloud/picloudtcp.h +++ b/libs/main/cloud/picloudtcp.h @@ -1,5 +1,5 @@ -/*! @file picloudtcp.h - * @brief PICloud TCP transport +/*! \file picloudtcp.h + * \brief PICloud TCP transport */ /* PIP - Platform Independent Primitives diff --git a/libs/main/code/picodeinfo.h b/libs/main/code/picodeinfo.h index 3a577305..75cd0309 100644 --- a/libs/main/code/picodeinfo.h +++ b/libs/main/code/picodeinfo.h @@ -1,5 +1,5 @@ -/*! @file picodeinfo.h - * @brief C++ code info structs +/*! \file picodeinfo.h + * \brief C++ code info structs */ /* PIP - Platform Independent Primitives diff --git a/libs/main/code/picodeparser.cpp b/libs/main/code/picodeparser.cpp index 79cd8c8f..f3fcc53f 100644 --- a/libs/main/code/picodeparser.cpp +++ b/libs/main/code/picodeparser.cpp @@ -51,7 +51,7 @@ PIString PICodeParser::Macro::expand(PIString args_, bool * ok) const { const PIString & an(args[i]), av(arg_vals[i]); int ind(-1); while ((ind = ret.find(an, ind + 1)) >= 0) { - PIChar ppc(0), pc(0), nc(0); + PIChar ppc, pc, nc; if (ind > 1) ppc = ret[ind - 2]; if (ind > 0) pc = ret[ind - 1]; if (ind + an.size_s() < ret.size_s()) nc = ret.mid(ind + an.size_s(),1)[0]; @@ -279,7 +279,7 @@ bool PICodeParser::parseFileContent(PIString & fc, bool main) { piForeachC (Define & d, defines) { int ind(-1); while ((ind = pfc.find(d.first, ind + 1)) >= 0) { - PIChar pc(0), nc(0); + PIChar pc, nc; if (ind > 0) pc = pfc[ind - 1]; if (ind + d.first.size_s() < pfc.size_s()) nc = pfc.mid(ind + d.first.size_s(),1)[0]; if (_isCChar(pc) || _isCChar(nc) || nc.isDigit()) continue; @@ -291,7 +291,7 @@ bool PICodeParser::parseFileContent(PIString & fc, bool main) { piForeachC (Macro & m, macros) { int ind(-1); while ((ind = pfc.find(m.name, ind + 1)) >= 0) { - PIChar pc(0), nc(0); + PIChar pc, nc; if (ind > 0) pc = pfc[ind - 1]; if (ind + m.name.size_s() < pfc.size_s()) nc = pfc.mid(ind + m.name.size_s(),1)[0]; if (_isCChar(pc) || _isCChar(nc) || nc.isDigit()) continue; diff --git a/libs/main/code/picodeparser.h b/libs/main/code/picodeparser.h index 34baadcb..716dda9a 100644 --- a/libs/main/code/picodeparser.h +++ b/libs/main/code/picodeparser.h @@ -1,5 +1,5 @@ -/*! @file picodeparser.h - * @brief C++ code parser +/*! \file picodeparser.h + * \brief C++ code parser */ /* PIP - Platform Independent Primitives diff --git a/libs/main/compress/picompress.h b/libs/main/compress/picompress.h index e159fc4c..e0ada4d0 100644 --- a/libs/main/compress/picompress.h +++ b/libs/main/compress/picompress.h @@ -1,5 +1,5 @@ -/*! @file picompress.h - * @brief Compress class using zlib +/*! \file picompress.h + * \brief Compress class using zlib */ /* PIP - Platform Independent Primitives diff --git a/libs/main/console/pikbdlistener.cpp b/libs/main/console/pikbdlistener.cpp index 6d7d6d3a..8de218d2 100644 --- a/libs/main/console/pikbdlistener.cpp +++ b/libs/main/console/pikbdlistener.cpp @@ -26,7 +26,7 @@ #endif /** \class PIKbdListener - * @brief Keyboard console input listener + * \brief Keyboard console input listener * \details This class provide listening of console keyboard input. * There is two ways to receive pressed key: * * external static function with format "void func(char key, void * data_)" diff --git a/libs/main/console/pikbdlistener.h b/libs/main/console/pikbdlistener.h index b257ed67..4bc1c4d0 100644 --- a/libs/main/console/pikbdlistener.h +++ b/libs/main/console/pikbdlistener.h @@ -1,5 +1,5 @@ -/*! @file pikbdlistener.h - * @brief Keyboard console input listener +/*! \file pikbdlistener.h + * \brief Keyboard console input listener */ /* PIP - Platform Independent Primitives @@ -181,20 +181,20 @@ public: //! \{ //! \fn void enableExitCapture(int key = 'Q') - //! @brief Enable exit key "key" awaiting + //! \brief Enable exit key "key" awaiting //! \fn void disableExitCapture() - //! @brief Disable exit key awaiting + //! \brief Disable exit key awaiting //! \fn void setActive(bool yes = true) - //! @brief Set keyboard listening is active or not + //! \brief Set keyboard listening is active or not //! \} //! \events //! \{ //! \fn void keyPressed(PIKbdListener::KeyEvent key, void * data) - //! @brief Raise on key "key" pressed, "data" is custom data + //! \brief Raise on key "key" pressed, "data" is custom data //! \} diff --git a/libs/main/console/piscreen.h b/libs/main/console/piscreen.h index e1e88112..34439e1b 100644 --- a/libs/main/console/piscreen.h +++ b/libs/main/console/piscreen.h @@ -1,5 +1,5 @@ -/*! @file piscreen.h - * @brief Console GUI class +/*! \file piscreen.h + * \brief Console GUI class */ /* PIP - Platform Independent Primitives @@ -80,23 +80,23 @@ public: //! \{ //! \fn void waitForFinish() - //! @brief block until finished (exit key will be pressed) + //! \brief block until finished (exit key will be pressed) //! \fn void start(bool wait = false) - //! @brief Start console output and if "wait" block until finished (exit key will be pressed) + //! \brief Start console output and if "wait" block until finished (exit key will be pressed) //! \fn void stop(bool clear = false) - //! @brief Stop console output and if "clear" clear the screen + //! \brief Stop console output and if "clear" clear the screen //! \} //! \events //! \{ //! \fn void keyPressed(PIKbdListener::KeyEvent key, void * data) - //! @brief Raise on key "key" pressed, "data" is pointer to %PIConsole object + //! \brief Raise on key "key" pressed, "data" is pointer to %PIConsole object //! \fn void tileEvent(PIScreenTile * tile, PIScreenTypes::TileEvent e) - //! @brief Raise on some event "e" from tile "tile" + //! \brief Raise on some event "e" from tile "tile" //! \} diff --git a/libs/main/console/piscreenconsole.h b/libs/main/console/piscreenconsole.h index b1d45725..cd45ba73 100644 --- a/libs/main/console/piscreenconsole.h +++ b/libs/main/console/piscreenconsole.h @@ -1,5 +1,5 @@ -/*! @file piscreenconsole.h - * @brief Tile for PIScreen with PIConsole API +/*! \file piscreenconsole.h + * \brief Tile for PIScreen with PIConsole API * * This file declares TileVars */ diff --git a/libs/main/console/piscreendrawer.h b/libs/main/console/piscreendrawer.h index 85791dba..6a118adb 100644 --- a/libs/main/console/piscreendrawer.h +++ b/libs/main/console/piscreendrawer.h @@ -1,5 +1,5 @@ -/*! @file piscreendrawer.h - * @brief Drawer for PIScreen +/*! \file piscreendrawer.h + * \brief Drawer for PIScreen */ /* PIP - Platform Independent Primitives diff --git a/libs/main/console/piscreentile.h b/libs/main/console/piscreentile.h index e09ca863..28e7dcd7 100644 --- a/libs/main/console/piscreentile.h +++ b/libs/main/console/piscreentile.h @@ -1,5 +1,5 @@ -/*! @file piscreentile.h - * @brief Basic PIScreen tile +/*! \file piscreentile.h + * \brief Basic PIScreen tile */ /* PIP - Platform Independent Primitives diff --git a/libs/main/console/piscreentiles.h b/libs/main/console/piscreentiles.h index 2b31fa09..34815d9f 100644 --- a/libs/main/console/piscreentiles.h +++ b/libs/main/console/piscreentiles.h @@ -1,5 +1,5 @@ -/*! @file piscreentiles.h - * @brief Various tiles for PIScreen +/*! \file piscreentiles.h + * \brief Various tiles for PIScreen */ /* PIP - Platform Independent Primitives diff --git a/libs/main/console/piscreentypes.h b/libs/main/console/piscreentypes.h index 22665333..0409cd0d 100644 --- a/libs/main/console/piscreentypes.h +++ b/libs/main/console/piscreentypes.h @@ -1,5 +1,5 @@ -/*! @file piscreentypes.h - * @brief Types for PIScreen +/*! \file piscreentypes.h + * \brief Types for PIScreen */ /* PIP - Platform Independent Primitives diff --git a/libs/main/console/piterminal.h b/libs/main/console/piterminal.h index 7e1615d2..b519d6bd 100644 --- a/libs/main/console/piterminal.h +++ b/libs/main/console/piterminal.h @@ -1,5 +1,5 @@ -/*! @file piterminal.h - * @brief Virtual terminal +/*! \file piterminal.h + * \brief Virtual terminal */ /* PIP - Platform Independent Primitives diff --git a/libs/main/containers/picontainers.h b/libs/main/containers/picontainers.h index b14fce98..fb364e94 100644 --- a/libs/main/containers/picontainers.h +++ b/libs/main/containers/picontainers.h @@ -1,12 +1,20 @@ -/*! @file picontainers.h - * @brief Base for generic containers - * - * This file declare all containers and useful macros - * to use them -*/ +/*! \addtogroup Containers + * \{ + * \file picontainers.h + * \brief + * \~english Base macros for generic containers + * \~russian Базовые макросы для контейнеров + * \~\authors + * \~english + * Ivan Pelipenko peri4ko@yandex.ru; + * Andrey Bychkov work.a.b@yandex.ru; + * \~russian + * Иван Пелипенко peri4ko@yandex.ru; + * Андрей Бычков work.a.b@yandex.ru; + * \~\} */ /* PIP - Platform Independent Primitives - Base for generic containers + Base macros for generic containers Ivan Pelipenko peri4ko@yandex.ru This program is free software: you can redistribute it and/or modify @@ -37,87 +45,122 @@ #include #include #include -#ifndef PIP_MEMALIGN_BYTES -# define PIP_MEMALIGN_BYTES (sizeof(void*)*4) -#endif -#ifdef WINDOWS -# ifdef CC_GCC -# define amalloc(s) __mingw_aligned_malloc(s, PIP_MEMALIGN_BYTES) -# define afree(p) __mingw_aligned_free(p) -# else -# ifdef CC_VC -# define amalloc(s) _aligned_malloc(s, PIP_MEMALIGN_BYTES) -# define afree(p) _aligned_free(p) -# endif -# endif -#else -# define amalloc(s) aligned_alloc(PIP_MEMALIGN_BYTES, s) -# define afree(p) free(p) -#endif - - -#ifdef DOXYGEN - -/*!@brief Macro for iterate any container - * \details Use this macros instead of standard "for" - * to get read/write access to each element of container. - * Pass direction is direct \n - * Example: \snippet picontainers.cpp foreach - */ -# define piForeach(i,c) - -/*!@brief Macro for iterate any container only for read - * \details Use this macros instead of standard "for" - * to get read access to each element of container. - * Pass direction is direct \n - * Example: \snippet picontainers.cpp foreachC - */ -# define piForeachC(i,c) - -/*!@brief Macro for iterate any container with reverse direction - * \details Use this macros instead of standard "for" - * to get read/write access to each element of container. - * Pass direction is reverse \n - * Example: \snippet picontainers.cpp foreachR - */ -# define piForeachR(i,c) - -/*!@brief Macro for iterate any container only for read with reverse direction - * \details Use this macros instead of standard "for" - * to get read access to each element of container. - * Pass direction is reverse \n - * Example: \snippet picontainers.cpp foreachCR - */ -# define piForeachCR(i,c) - -#else template -struct _reverse_wrapper { - C & c_; - _reverse_wrapper(C & c): c_(c) {} - _reverse_wrapper(const C & c): c_(const_cast(c)) {} +class _PIReverseWrapper { +public: + _PIReverseWrapper(C & c): c_(c) {} + _PIReverseWrapper(const C & c): c_(const_cast(c)) {} typename C::reverse_iterator begin() {return c_.rbegin();} typename C::reverse_iterator end() {return c_.rend(); } typename C::const_reverse_iterator begin() const {return c_.rbegin();} typename C::const_reverse_iterator end() const {return c_.rend(); } +private: + C & c_; }; -template _reverse_wrapper _reverse_wrap(C & c) {return _reverse_wrapper(c);} -template _reverse_wrapper _reverse_wrap(const C & c) {return _reverse_wrapper(c);} + +/*! \brief + * \~english Template reverse wrapper over any container + * \~russian Шаблонная функция обертки любого контейнера для обратного доступа через итераторы + */ +template _PIReverseWrapper PIReverseWrap(C & c) {return _PIReverseWrapper(c);} +template _PIReverseWrapper PIReverseWrap(const C & c) {return _PIReverseWrapper(c);} -# define piForTimes(c) for(int _i##c = 0; _i##c < c; ++_i##c) +/*! \brief + * \~english Macro for short replacement of standart "for" + * \~russian Макрос для короткой записи стандартного цикла "for" + * \~\param c + * \~english Iteration times in loop + * \~russian Количество итераций цикла + */ +#define piForTimes(c) for(int _i##c = 0; _i##c < c; ++_i##c) -# define piForeach(i,c) for(i : c) -# define piForeachC(i,c) for(const i : c) -# define piForeachR(i,c) for(i : _reverse_wrap(c)) -# define piForeachRC(i,c) for(const i : _reverse_wrap(c)) -# define piForeachCR piForeachRC +/*! \brief + * \~english Macro for iterate any container + * \~russian Макрос для перебора любых контейнеров + * \~\deprecated + * \~english Deprecated, using only for backward compatibility. Use + * [C++ Range-based for loop](https://en.cppreference.com/w/cpp/language/range-for). + * \~russian Устарело, используется только для обратной совместимости. Используйте + * [C++ Range-based for loop](https://ru.cppreference.com/w/cpp/language/range-for). + * \~\details + * \~english Get read/write access to each element of container. + * Iterating in forward direction. + * Example of using: + * \~russian Перебор всех элементов контейнера с доступом на чтение и запись. + * Перебор осуществляется в прямом порядке. + * Пример использования: + * \~\code + * PIVector vec; + * vec << 1 << 2 << 3; + * piForeach(int & i, vec) piCout << i; + * // 1 + * // 2 + * // 3 + * piForeach(int & i, vec) i++; + * piForeach(int & i, vec) piCout << i; + * // 2 + * // 3 + * // 4 + * \endcode + * \sa \a piForeachC, \a piForeachR, \a piForeachRC + */ +#define piForeach(i, c) for(i : c) -#endif // DOXYGEN +/*! \brief + * \~english Macro for iterate any container + * \~russian Макрос для перебора любых контейнеров + * \~\deprecated + * \~english Deprecated, using only for backward compatibility. Use + * [C++ Range-based for loop](https://en.cppreference.com/w/cpp/language/range-for). + * \~russian Устарело, используется только для обратной совместимости. Используйте + * [C++ Range-based for loop](https://ru.cppreference.com/w/cpp/language/range-for). + * \~\details + * \~english Get read only access to each element of container. + * Iterating in forward direction. + * \~russian Перебор всех элементов контейнера с доступом только на чтение. + * Перебор осуществляется в прямом порядке. + * \~ \sa \a piForeach, \a piForeachR, \a piForeachRC + */ +#define piForeachC(i, c) for(const i : c) +/*! \brief + * \~english Macro for iterate any container + * \~russian Макрос для перебора любых контейнеров + * \~\deprecated + * \~english Deprecated, using only for backward compatibility. Use + * [C++ Range-based for loop](https://en.cppreference.com/w/cpp/language/range-for). + * \~russian Устарело, используется только для обратной совместимости. Используйте + * [C++ Range-based for loop](https://ru.cppreference.com/w/cpp/language/range-for). + * \~\details + * \~english Get read/write access to each element of container. + * Iterating in backward direction. + * \~russian Перебор всех элементов контейнера с доступом на чтение и запись. + * Перебор осуществляется в обратном порядке. + * \~ \sa \a piForeach, \a piForeachC, \a piForeachRC + */ +#define piForeachR(i, c) for(i : PIReverseWrap(c)) + +/*! \brief + * \~english Macro for iterate any container + * \~russian Макрос для перебора любых контейнеров + * \~\deprecated + * \~english Deprecated, using only for backward compatibility. Use + * [C++ Range-based for loop](https://en.cppreference.com/w/cpp/language/range-for). + * \~russian Устарело, используется только для обратной совместимости. Используйте + * [C++ Range-based for loop](https://ru.cppreference.com/w/cpp/language/range-for). + * \~\details + * \~english Get read only access to each element of container. + * Iterating in backward direction. Also has alias **piForeachCR** + * \~russian Перебор всех элементов контейнера с доступом только на чтение. + * Перебор осуществляется в обратном порядке. Также можно писать **piForeachCR** + * \~ \sa \a piForeach, \a piForeachC, \a piForeachR + */ +#define piForeachRC(i, c) for(const i : PIReverseWrap(c)) +#define piForeachCR piForeachRC #endif // PICONTAINERS_H diff --git a/libs/main/containers/picontainersmodule.h b/libs/main/containers/picontainersmodule.h index b16b2fef..32e19e48 100644 --- a/libs/main/containers/picontainersmodule.h +++ b/libs/main/containers/picontainersmodule.h @@ -1,6 +1,6 @@ /* PIP - Platform Independent Primitives - Module includes + Containers Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru This program is free software: you can redistribute it and/or modify @@ -16,6 +16,30 @@ You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ +/** \defgroup Containers + * \~\brief + * \~english This module contains various standart containers realization. + * \~russian Модуль содержит основные классы контейнеров. + * + * \~\details + * Scope | Use + * ----- | ------- + * C++ | #include + * CMake | PIP + * + * \~english This includes + * \~russian В него входят + * \~ \a PIVector, \a PIDeque, \a PIMap, \a PISet, + * \a PIStack, \a PIQueue, \a PIPair, \a PIVector2D. + * + * \authors + * \~english + * Ivan Pelipenko peri4ko@yandex.ru; + * Andrey Bychkov work.a.b@yandex.ru; + * \~russian + * Иван Пелипенко peri4ko@yandex.ru; + * Андрей Бычков work.a.b@yandex.ru; +*/ #ifndef PICONTAINERSMODULE_H #define PICONTAINERSMODULE_H diff --git a/libs/main/containers/pideque.h b/libs/main/containers/pideque.h index 169e8614..53e86851 100644 --- a/libs/main/containers/pideque.h +++ b/libs/main/containers/pideque.h @@ -1,5 +1,5 @@ -/*! @file pideque.h - * @brief Dynamic array of any type +/*! \file pideque.h + * \brief Dynamic array of any type * * This file declares PIDeque */ diff --git a/libs/main/containers/pimap.cpp b/libs/main/containers/pimap.cpp index 51172471..3c0b0034 100644 --- a/libs/main/containers/pimap.cpp +++ b/libs/main/containers/pimap.cpp @@ -1,5 +1,5 @@ /** \class PIMap - * @brief Associative array + * \brief Associative array * \details This class used to store Key = Value array of any * type of data. \a value() returns value for key and leave map * unchaged in any case. \a operator [] create entry in map if @@ -9,97 +9,97 @@ * \a makeIterator() and \a makeReverseIterator(). * \fn PIMap::PIMap(); - * @brief Contructs an empty map + * \brief Contructs an empty map * \fn PIMap::PIMap(const PIMap & other); - * @brief Contructs a copy of "other" + * \brief Contructs a copy of "other" * \fn PIMap & PIMap::operator =(const PIMap & other); - * @brief Copy operator + * \brief Copy operator * \fn PIMap::PIMap(const PIMap & other); - * @brief Contructs a copy of "other" + * \brief Contructs a copy of "other" * \fn PIMapIterator PIMap::makeIterator() const -* @brief Returns PIMapIterator for this map +* \brief Returns PIMapIterator for this map * \fn PIMapIterator PIMap::makeReverseIterator() const -* @brief Returns reverse PIMapIterator for this map +* \brief Returns reverse PIMapIterator for this map * \fn size_t PIMap::size() const -* @brief Returns entries count +* \brief Returns entries count * \fn int PIMap::size_s() const -* @brief Returns entries count +* \brief Returns entries count * \fn size_t PIMap::length() const -* @brief Returns entries count +* \brief Returns entries count * \fn bool PIMap::isEmpty() const -* @brief Returns if map is empty +* \brief Returns if map is empty * \fn T & PIMap::operator [](const Key & key) -* @brief Returns value for key "key". If there is no key in map, create one. +* \brief Returns value for key "key". If there is no key in map, create one. * \fn const T PIMap::operator [](const Key & key) const -* @brief Returns value for key "key". If there is no key in map, returns default T(). +* \brief Returns value for key "key". If there is no key in map, returns default T(). * \fn T & PIMap::at(const Key & key) -* @brief Equivalent to operator [] +* \brief Equivalent to operator [] * \fn const T PIMap::at(const Key & key) const -* @brief Equivalent to operator [] +* \brief Equivalent to operator [] * \fn PIMap & PIMap::operator <<(const PIMap & other) -* @brief Insert all etries of "other" to this map. Override existing values. +* \brief Insert all etries of "other" to this map. Override existing values. * \fn bool PIMap::operator ==(const PIMap & t) const -* @brief Compare operator +* \brief Compare operator * \fn bool PIMap::operator !=(const PIMap & t) const -* @brief Compare operator +* \brief Compare operator * \fn bool PIMap::contains(const Key & key) const -* @brief Returns "true" if map contains entry with key "key" +* \brief Returns "true" if map contains entry with key "key" * \fn PIMap & PIMap::reserve(size_t new_size) -* @brief Reserve space for "new_size" entries +* \brief Reserve space for "new_size" entries * \fn PIMap & PIMap::removeOne(const Key & key) -* @brief Remove entry with key "key" +* \brief Remove entry with key "key" * \fn PIMap & PIMap::remove(const Key & key) -* @brief Equivalent \a removeOne(key) +* \brief Equivalent \a removeOne(key) * \fn PIMap & PIMap::erase(const Key & key) -* @brief Equivalent \a removeOne(key) +* \brief Equivalent \a removeOne(key) * \fn PIMap & PIMap::clear() -* @brief Clear map +* \brief Clear map * \fn void PIMap::swap(PIMap & other) -* @brief Swap map with "other" +* \brief Swap map with "other" * \fn PIMap & PIMap::insert(const Key & key, const T & value) -* @brief Insert or rewrite entry with key "key" and value "value" +* \brief Insert or rewrite entry with key "key" and value "value" * \fn const T PIMap::value(const Key & key, const T & default = T()) -* @brief Returns value for key "key". If there is no key in map, returns "default". +* \brief Returns value for key "key". If there is no key in map, returns "default". * \fn PIVector PIMap::values() const -* @brief Returns all values as PIVector +* \brief Returns all values as PIVector * \fn Key PIMap::key(const T & value, const Key & default = Key()) const -* @brief Returns key for first founded value "value". If there is no such value in map, returns "default". +* \brief Returns key for first founded value "value". If there is no such value in map, returns "default". * \fn PIVector PIMap::keys() const -* @brief Returns all keys as PIVector +* \brief Returns all keys as PIVector * */ @@ -107,7 +107,7 @@ /** \class PIMapIterator - * @brief Helper class to iterate over PIMap + * \brief Helper class to iterate over PIMap * \details This class used to access keys and values in PIMap. * You can use constructor to create iterator, or use \a PIMap::makeIterator() * and \a PIMap::makeReverseIterator() methods. @@ -164,24 +164,24 @@ * \endcode * \fn PIMapIterator(const PIMap & map, bool reverse = false) -* @brief Contructs iterator for "map". Current position is invalid. +* \brief Contructs iterator for "map". Current position is invalid. * \fn const Key & PIMapIterator::key() const -* @brief Returns current entry key +* \brief Returns current entry key * \fn const T & PIMapIterator::value() const -* @brief Returns current entry value +* \brief Returns current entry value * \fn T & PIMapIterator::valueRef() const -* @brief Returns reference to current entry value +* \brief Returns reference to current entry value * \fn bool PIMapIterator::hasNext() -* @brief Returns if iterator can jump to next entry +* \brief Returns if iterator can jump to next entry * \fn bool PIMapIterator::next() -* @brief Jump to next entry and return if new position is valid. +* \brief Jump to next entry and return if new position is valid. * \fn void PIMapIterator::reset() -* @brief Reset iterator to initial position. +* \brief Reset iterator to initial position. * */ diff --git a/libs/main/containers/pimap.h b/libs/main/containers/pimap.h index beb45106..0ceed77b 100644 --- a/libs/main/containers/pimap.h +++ b/libs/main/containers/pimap.h @@ -1,5 +1,5 @@ -/*! @file pimap.h - * @brief Associative array with custom types of key and value +/*! \file pimap.h + * \brief Associative array with custom types of key and value * * This file declares PIMap */ diff --git a/libs/main/containers/pipair.h b/libs/main/containers/pipair.h index e032960c..575838ef 100644 --- a/libs/main/containers/pipair.h +++ b/libs/main/containers/pipair.h @@ -1,5 +1,5 @@ -/*! @file pipair.h - * @brief pair +/*! \file pipair.h + * \brief pair * * This file declare PIPair */ diff --git a/libs/main/containers/piqueue.h b/libs/main/containers/piqueue.h index c7d41b57..5c56b1b0 100644 --- a/libs/main/containers/piqueue.h +++ b/libs/main/containers/piqueue.h @@ -1,5 +1,5 @@ -/*! @file pideque.h - * @brief Queue container +/*! \file pideque.h + * \brief Queue container * * This file declare PIQueue */ diff --git a/libs/main/containers/piset.h b/libs/main/containers/piset.h index 52721068..50603403 100644 --- a/libs/main/containers/piset.h +++ b/libs/main/containers/piset.h @@ -1,5 +1,5 @@ -/*! @file piset.h - * @brief Set container +/*! \file piset.h + * \brief Set container * * This file declare PISet */ @@ -27,7 +27,7 @@ #include "pimap.h" -/*! @brief Set of any type +/*! \brief Set of any type * \details This class used to store collection of unique elements * of any type. You can only add values to set with \a operator<< or * with function \a insert(). You can discover if value already in @@ -129,16 +129,16 @@ public: }; -//! \relatesalso PISet @brief Returns unite of two sets +//! \relatesalso PISet \brief Returns unite of two sets template PISet operator +(const PISet & v0, const PISet & v1) {PISet ret(v0); ret.unite(v1); return ret;} -//! \relatesalso PISet @brief Returns subtraction of two sets +//! \relatesalso PISet \brief Returns subtraction of two sets template PISet operator -(const PISet & v0, const PISet & v1) {PISet ret(v0); ret.subtract(v1); return ret;} -//! \relatesalso PISet @brief Returns unite of two sets +//! \relatesalso PISet \brief Returns unite of two sets template PISet operator |(const PISet & v0, const PISet & v1) {PISet ret(v0); ret.unite(v1); return ret;} -//! \relatesalso PISet @brief Returns intersetion of two sets +//! \relatesalso PISet \brief Returns intersetion of two sets template PISet operator &(const PISet & v0, const PISet & v1) {PISet ret(v0); ret.intersect(v1); return ret;} diff --git a/libs/main/containers/pistack.h b/libs/main/containers/pistack.h index 0341de29..5b65fa90 100644 --- a/libs/main/containers/pistack.h +++ b/libs/main/containers/pistack.h @@ -1,5 +1,5 @@ -/*! @file pistack.h - * @brief Stack container +/*! \file pistack.h + * \brief Stack container * * This file declare PIStack */ diff --git a/libs/main/containers/pivector.cpp b/libs/main/containers/pivector.cpp deleted file mode 100644 index ca6fe887..00000000 --- a/libs/main/containers/pivector.cpp +++ /dev/null @@ -1,170 +0,0 @@ -/** \class PIVector - * @brief Dynamic array of any type - * \details This class used to store dynamic array of any - * type of data. In memory data stored linear. You can insert - * item in any place of remove some items from any place. - * For quick add elements this is stream operator <<. - - * \fn PIVector::PIVector(); - * Contructs an empty vector - - * \fn PIVector::PIVector(size_t size, const T & value = T()); - * @brief Contructs vector with size "size" filled elements "value" - * \details Example: \snippet picontainers.cpp PIVector::PIVector - - * \fn PIVector::PIVector(std::initializer_list list); - * @brief Contructs vector from C++11 initializer list - * \details Example: \snippet picontainers.cpp PIVector::PIVector - - * \fn const T & PIVector::at(size_t index) const; - * @brief Read-only access to element by index "index" - * \details Example: \snippet picontainers.cpp PIVector::at_c - * \sa \a operator[] - - * \fn T & PIVector::at(size_t index); - * @brief Full access to element by index "index" - * \details Example: \snippet picontainers.cpp PIVector::at - * \sa \a operator[] - - * \fn const T * PIVector::data(size_t index = 0) const; - * @brief Read-only pointer to element by index "index" - * \details Example: \snippet picontainers.cpp PIVector::data_c - - * \fn T * PIVector::data(size_t index = 0); - * @brief Pointer to element by index "index" - * \details Example: \snippet picontainers.cpp PIVector::data - - * \fn size_t PIVector::size() const; - * @brief Elements count - - * \fn ssize_t PIVector::size_s() const; - * @brief Elements count - - * \fn bool PIVector::isEmpty() const; - * @brief Return \c "true" if vector is empty, i.e. size = 0 - - * \fn bool PIVector::has(const T & t) const; - - * \fn bool PIVector::contains(const T & v) const; - * @brief Return \c "true" if vector has at least one element equal "t" - - * \fn int PIVector::etries(const T & t) const; - * @brief Return how many times element "t" appears in vector - - * \fn ssize_t PIVector::indexOf(const T & t) const; - * @brief Return index of first element equal "t" or -1 if there is no such element - - * \fn ssize_t PIVector::lastIndexOf(const T & t) const; - * @brief Return index of last element equal "t" or -1 if there is no such element - - * \fn static int PIVector::compare_func(const T * t0, const T * t1); - * @brief Standard compare function for type "T". Return 0 if t0 = t1, -1 if t0 < t1 and 1 if t0 > t1. - - * \fn void PIVector::resize(size_t size, const T & new_type = T()); - * @brief Resize vector to size "size" - * \details Elements removed from end of vector if new size < old size, or added new elements = "new_type" if new size > old size.\n - * Example: \snippet picontainers.cpp PIVector::resize - * \sa \a size(), \a clear() - - * \fn PIVector & PIVector::enlarge(size_t size); - * @brief Increase vector size with "size" elements - - * \fn void PIVector::clear(); - * @brief Clear vector. Equivalent to call "resize(0)" - - * \fn PIVector & PIVector::sort(CompareFunc compare = compare_func); - * @brief Sort vector using quick sort algorithm and standard compare function - * \details Example: \snippet picontainers.cpp PIVector::sort_0 - * With custom compare function: \snippet picontainers.cpp PIVector::sort_1 - - * \fn PIVector & PIVector::fill(const T & t); - * @brief Fill vector with elements "t" leave size is unchanged and return reference to vector - * \details Example: \snippet picontainers.cpp PIVector::fill - - * \fn PIVector & PIVector::assign(const T & t = T()); - * @brief Synonym of \a fill(t) - - * \fn PIVector & PIVector::assign(size_t new_size, const T & t); - * @brief Resize to "new_size", then fill with "t" - - * \fn T & PIVector::back(); - * @brief Last element of the vector - - * \fn const T & PIVector::back() const; - * @brief Last element of the vector - - * \fn T & PIVector::front(); - * @brief First element of the vector - - * \fn const T & PIVector::front() const; - * @brief First element of the vector - - * \fn PIVector & PIVector::push_back(const T & t); - * @brief Add new element "t" at the end of vector and return reference to vector - - * \fn PIVector & PIVector::push_front(const T & t); - * @brief Add new element "t" at the beginning of vector and return reference to vector - - * \fn PIVector & PIVector::pop_back(); - * @brief Remove one element from the end of vector and return reference to vector - - * \fn PIVector & PIVector::pop_front(); - * @brief Remove one element from the beginning of vector and return reference to vector - - * \fn T PIVector::take_back(); - * @brief Remove one element from the end of vector and return it - - * \fn T PIVector::take_front(); - * @brief Remove one element from the beginning of vector and return it - - * \fn PIVector & PIVector::remove(size_t index); - * @brief Remove one element by index "index" and return reference to vector - * \details Example: \snippet picontainers.cpp PIVector::remove_0 - * \sa \a removeOne(), \a removeAll() - - * \fn PIVector & PIVector::remove(size_t index, size_t count); - * @brief Remove "count" elements by first index "index" and return reference to vector - * \details Example: \snippet picontainers.cpp PIVector::remove_1 - * \sa \a removeOne(), \a removeAll() - - * \fn PIVector & PIVector::removeOne(const T & v); - * @brief Remove no more than one element equal "v" and return reference to vector - * \details Example: \snippet picontainers.cpp PIVector::removeOne - * \sa \a remove(), \a removeAll() - - * \fn PIVector & PIVector::removeAll(const T & v); - * @brief Remove all elements equal "v" and return reference to vector - * \details Example: \snippet picontainers.cpp PIVector::removeAll - * \sa \a remove(), \a removeOne() - - * \fn PIVector & PIVector::insert(size_t pos, const T & t); - * @brief Insert element "t" after index "pos" and return reference to vector - * \details Example: \snippet picontainers.cpp PIVector::insert_0 - - * \fn PIVector & PIVector::insert(size_t pos, const PIVector & t); - * @brief Insert other vector "t" after index "pos" and return reference to vector - * \details Example: \snippet picontainers.cpp PIVector::insert_1 - - * \fn T & PIVector::operator [](size_t index); - * @brief Full access to element by index "index" - * \details Example: \snippet picontainers.cpp PIVector::() - * \sa \a at() - - * \fn const T & PIVector::operator [](size_t index) const; - * @brief Read-only access to element by index "index" - * \details Example: \snippet picontainers.cpp PIVector::()_c - * \sa \a at() - - * \fn PIVector & PIVector::operator <<(const T & t); - * @brief Add new element "t" at the end of vector and return reference to vector - - * \fn PIVector & PIVector::operator <<(const PIVector & t); - * @brief Add vector "t" at the end of vector and return reference to vector - - * \fn bool PIVector::operator ==(const PIVector & t); - * @brief Compare with vector "t" - - * \fn bool PIVector::operator !=(const PIVector & t); - * @brief Compare with vector "t" - - * */ diff --git a/libs/main/containers/pivector.h b/libs/main/containers/pivector.h index 6d9a664a..e8314dd8 100644 --- a/libs/main/containers/pivector.h +++ b/libs/main/containers/pivector.h @@ -1,11 +1,20 @@ -/*! @file pivector.h - * @brief Dynamic array of any type - * - * This file declares PIVector -*/ +/*! \addtogroup Containers + * \{ + * \file pivector.h + * \brief + * \~english Declares \a PIVector + * \~russian Объявление \a PIVector + * \~\authors + * \~english + * Ivan Pelipenko peri4ko@yandex.ru; + * Andrey Bychkov work.a.b@yandex.ru; + * \~russian + * Иван Пелипенко peri4ko@yandex.ru; + * Андрей Бычков work.a.b@yandex.ru; + * \~\} */ /* PIP - Platform Independent Primitives - Dynamic array of any type + Sequence linear container aka dynamic size array of any type Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru This program is free software: you can redistribute it and/or modify @@ -27,13 +36,70 @@ #include "picontainers.h" - +/*! \addtogroup Containers + * \{ + * \class PIVector pivector.h + * \brief + * \~english Sequence linear container - dynamic size array of any type + * \~russian Последовательный контейнер с линейной памятью - динамический массив любого типа + * \~\} + * \details + * \~english + * The elements are stored contiguously, + * which means that elements can be accessed not only through iterators, + * but also using offsets to regular pointers to elements. + * This means that a pointer to an element of a vector may be passed to any function + * that expects a pointer to an element of an array. + * + * The storage of the vector is handled automatically, + * being expanded and contracted as needed. + * Vectors usually occupy more space than static arrays, + * because more memory is allocated to handle future growth. + * This way a vector does not need to reallocate each time an element is inserted, + * but only when the additional memory is exhausted. + * The total amount of allocated memory can be queried using \a capacity() function. + * Reallocations are usually costly operations in terms of performance. + * The \a reserve() function can be used to eliminate reallocations + * if the number of elements is known beforehand. + * + * The complexity (efficiency) of common operations on vectors is as follows: + * - Random access - constant 𝓞(1) + * - Insertion or removal of elements at the end - amortized constant 𝓞(1) + * - Insertion or removal of elements - linear in the distance to the end of the vector 𝓞(n) + * + * \~russian + * Элементы хранятся непрерывно, а значит доступны не только через итераторы, + * но и с помощью смещений для обычных указателей на элементы. + * Это означает, что указатель на элемент вектора может передаваться в любую функцию, + * ожидающую указатель на элемент массива. + * + * Память вектора обрабатывается автоматически, + * расширяясь и сжимаясь по мере необходимости. + * Векторы обычно занимают больше места, чем статические массивы, + * поскольку больше памяти выделяется для обработки будущего роста. + * Таким образом, память для вектора требуется выделять + * не при каждой вставке элемента, + * а только после исчерпания дополнительной памяти. + * Общий объём выделенной памяти можно получить с помощью функции \a capacity(). + * + * Выделение памяти обычно является дорогостоящей операцией + * с точки зрения производительности. + * Функцию \a reserve() можно использовать для исключения выделения памяти, + * если количество элементов известно заранее. + * + * Сложность (эффективность) обычных операций над векторами следующая: + * - Произвольный доступ — постоянная 𝓞(1) + * - Вставка и удаление элементов в конце — амортизированная постоянная 𝓞(1) + * - Вставка и удаление элементов — линейная по расстоянию до конца вектора 𝓞(n) + */ template class PIVector { public: + //! Contructs an empty vector inline PIVector(): piv_data(0), piv_size(0), piv_rsize(0) { PIINTROSPECTION_CONTAINER_NEW(T, sizeof(T)) } + //! \brief Contructs vector with size "size" filled elements "value" inline PIVector(const T * data, size_t size): piv_data(0), piv_size(0), piv_rsize(0) { PIINTROSPECTION_CONTAINER_NEW(T, sizeof(T)) alloc(size); @@ -44,6 +110,7 @@ public: alloc(v.piv_size); newT(piv_data, v.piv_data, piv_size); } + //! \brief Contructs vector from C++11 initializer list inline PIVector(std::initializer_list init_list): piv_data(0), piv_size(0), piv_rsize(0) { PIINTROSPECTION_CONTAINER_NEW(T, sizeof(T)) alloc(init_list.size()); @@ -83,8 +150,6 @@ public: return *this; } - typedef T value_type; - enum ReshapeOrder { byRow, byColumn @@ -463,6 +528,10 @@ public: return *this; } +/*! \brief Remove no more than one element equal "v" and return reference to vector +* \details Example: \snippet picontainers.cpp PIVector::removeOne +* \sa \a remove(), \a removeAll() +*/ inline PIVector & removeOne(const T & e) { for (size_t i = 0; i < piv_size; ++i) { if (piv_data[i] == e) { @@ -586,7 +655,7 @@ public: return ret; } - inline PIVector> reshape(size_t rows, size_t cols, int order = byRow) const { + inline PIVector> reshape(size_t rows, size_t cols, ReshapeOrder order = byRow) const { PIVector> ret; if (isEmpty()) return ret; assert(rows*cols == piv_size); @@ -610,7 +679,7 @@ public: template>::value , int>::type = 0> - inline PIVector reshape(int order = byRow) const { + inline PIVector reshape(ReshapeOrder order = byRow) const { PIVector ret; if (isEmpty()) return ret; size_t rows = size(); diff --git a/libs/main/containers/pivector2d.h b/libs/main/containers/pivector2d.h index 004cdb5e..9f8a7957 100644 --- a/libs/main/containers/pivector2d.h +++ b/libs/main/containers/pivector2d.h @@ -1,5 +1,5 @@ -/*! @file pivector2d.h - * @brief 2D wrapper around PIVector +/*! \file pivector2d.h + * \brief 2D wrapper around PIVector * * This file declares PIVector */ @@ -27,7 +27,7 @@ #include "pivector.h" -/*! @brief 2D array, +/*! \brief 2D array, * \details This class used to store 2D array of any type elements as plain vector. * You can read/write any element via operators [][], first dimension - row, second - column. * The first dimension is Row, and you can operate with Row as PIVector: modify any element, assign to another Row and etc. diff --git a/libs/main/core/pibase.h b/libs/main/core/pibase.h index 5d011e77..e8ab90da 100644 --- a/libs/main/core/pibase.h +++ b/libs/main/core/pibase.h @@ -1,8 +1,16 @@ -/*! @file pibase.h - * @brief Base types and functions +/*! \file pibase.h + * \ingroup Core + * \~\brief + * \~english Base types and functions + * \~russian Базовые типы и методы * + * \~\details + * \~english * This file implements first layer above the system and * declares some basic useful functions + * \~russian + * Этот файл реализует первый слой после системы и объявляет + * несколько базовых полезных методов */ /* PIP - Platform Independent Primitives @@ -31,90 +39,163 @@ #include "pip_export.h" #include "pip_defs.h" #include "string.h" + +//! \~english //! Meta-information section for any entity. //! Parsing by \a pip_cmg and can be accessed by \a PICodeInfo. //! Contains sequence of key=value pairs, e.g. +//! \~russian +//! Секция метаинформации для любой сущности. +//! Парсится \a pip_cmg и доступна с помощью \a PICodeInfo. +//! Содержит набор пар ключ=значение, например +//! \~ //! PIMETA(id=12345,tag="my string") #define PIMETA(...) #ifdef DOXYGEN -//! Major value of PIP version +//! \~\brief +//! \~english Major value of PIP version +//! \~russian Мажорная версия PIP # define PIP_VERSION_MAJOR -//! Minor value of PIP version +//! \~\brief +//! \~english Minor value of PIP version +//! \~russian Минорная версия PIP # define PIP_VERSION_MINOR -//! Revision value of PIP version +//! \~\brief +//! \~english Revision value of PIP version +//! \~russian Ревизия версии PIP # define PIP_VERSION_REVISION -//! Suffix of PIP version +//! \~\brief +//! \~english Suffix of PIP version +//! \~russian Суффикс версии PIP # define PIP_VERSION_SUFFIX -//! Version of PIP in hex - 0x##(Major)##(Minor)##(Revision) +//! \~\brief +//! \~english Version of PIP in hex - 0x##(Major)##(Minor)##(Revision) +//! \~russian Версия PIP в hex - 0x##(Major)##(Minor)##(Revision) # define PIP_VERSION -//! Macro is defined when compile-time debug is enabled +//! \~\brief +//! \~english Macro is defined when compile-time debug is enabled +//! \~russian Макрос объявлен когда включена compile-time отладка # define PIP_DEBUG -//! Macro is defined when host is any Windows +//! \~\brief +//! \~english Macro is defined when operation system is any Windows +//! \~russian Макрос объявлен когда операционная система Windows # define WINDOWS -//! Macro is defined when host is QNX or Blackberry +//! \~\brief +//! \~english Macro is defined when operation system is QNX or Blackberry +//! \~russian Макрос объявлен когда операционная система QNX или Blackberry # define QNX -//! Macro is defined when host is Blackberry +//! \~\brief +//! \~english Macro is defined when operation system is Blackberry +//! \~russian Макрос объявлен когда операционная система Blackberry # define BLACKBERRY -//! Macro is defined when host is FreeBSD +//! \~\brief +//! \~english Macro is defined when operation system is FreeBSD +//! \~russian Макрос объявлен когда операционная система FreeBSD # define FREE_BSD -//! Macro is defined when host is Mac OS +//! \~\brief +//! \~english Macro is defined when operation system is Mac OS +//! \~russian Макрос объявлен когда операционная система Mac OS # define MAC_OS -//! Macro is defined when host is Android +//! \~\brief +//! \~english Macro is defined when operation system is Android +//! \~russian Макрос объявлен когда операционная система Android # define ANDROID -//! Macro is defined when host is any Linux +//! \~\brief +//! \~english Macro is defined when operation system is any Linux +//! \~russian Макрос объявлен когда операционная система Linux # define LINUX -//! Macro is defined when compiler is GCC or MinGW +//! \~\brief +//! \~english Macro is defined when operation system is FreeRTOS +//! \~russian Макрос объявлен когда операционная система FreeRTOS +# define FREERTOS + +//! \~\brief +//! \~english Macro is defined when compiler is GCC or MinGW +//! \~russian Макрос объявлен когда компилятор GCC или MinGW # define CC_GCC -//! Macro is defined when PIP is decided that host is support language +//! \~\brief +//! \~english Macro is defined when PIP is decided that host is support language +//! \~russian Макрос объявлен когда PIP решил что система поддерживает локализацию # define HAS_LOCALE -//! Macro is defined when compiler is Visual Studio +//! \~\brief +//! \~english Macro is defined when PIP is building for embedded systems +//! \~russian Макрос объявлен когда PIP собирается для встраиваемых систем +# define MICRO_PIP + +//! \~\brief +//! \~english Macro is defined when compiler is Visual Studio +//! \~russian Макрос объявлен когда компилятор Visual Studio # define CC_VC -//! Macro is defined when compiler is unknown +//! \~\brief +//! \~english Macro is defined when compiler is AVR GCC +//! \~russian Макрос объявлен когда компилятор AVR GCC +# define CC_AVR_GCC + +//! \~\brief +//! \~english Macro is defined when compiler is unknown +//! \~russian Макрос объявлен когда компилятор неизвестен # define CC_OTHER -//! Macro is defined when PIP can use "rt" library for "PITimer::ThreadRT" timers implementation +//! \~\brief +//! \~english Macro is defined when PIP can use "rt" library for \a PITimer::ThreadRT timers implementation +//! \~russian Макрос объявлен когда PIP может использовать библиотеку "rt" для \a PITimer::ThreadRT реализации таймера # define PIP_TIMER_RT -//! Macro to declare private section, export is optional +//! \~\brief +//! \~english Macro to declare private section, "export" is optional +//! \~russian Макрос для объявления частной секции, "export" необязателен # define PRIVATE_DECLARATION(export) -//! Macro to start definition of private section +//! \~\brief +//! \~english Macro to start definition of private section +//! \~russian Макрос для начала реализации частной секции # define PRIVATE_DEFINITION_START(Class) -//! Macro to end definition of private section +//! \~\brief +//! \~english Macro to end definition of private section +//! \~russian Макрос для окончания реализации частной секции # define PRIVATE_DEFINITION_END(Class) -//! Macro to access private section by pointer +//! \~\brief +//! \~english Macro to access private section by pointer +//! \~russian Макрос для доступа к частной секции # define PRIVATE -//! Macro to access private section by pointer without brakes () +//! \~\brief +//! \~english Macro to access private section by pointer without brakes () +//! \~russian Макрос для доступа к частной секции без обрамляющих скобок () # define PRIVATEWB -//! Macro to start static initializer +//! \~\brief +//! \~english Macro to start static initializer +//! \~russian Макрос для начала статической инициализации # define STATIC_INITIALIZER_BEGIN -//! Macro to end static initializer +//! \~\brief +//! \~english Macro to end static initializer +//! \~russian Макрос для окончания статической инициализации # define STATIC_INITIALIZER_END - +#undef MICRO_PIP +#undef FREERTOS #endif //DOXYGEN #ifdef CC_AVR_GCC @@ -144,6 +225,8 @@ extern long long __pi_perf_freq; #endif +#ifndef DOXYGEN + #ifdef ANDROID ///# define tcdrain(fd) ioctl(fd, TCSBRK, 1) //inline int wctomb(char * c, wchar_t w) {*c = ((char * )&w)[0]; return 1;} @@ -225,7 +308,7 @@ # define DEPRECATED #endif - +#endif //DOXYGEN // Private data macros #ifndef DOXYGEN @@ -278,28 +361,47 @@ } _PIP_ADD_COUNTER(_pip_initializer_); -#ifdef MICRO_PIP -# define PIP_MIN_MSLEEP 10. -#else -# define PIP_MIN_MSLEEP 1. +//! \~\brief +//! \~english Minimal sleep in milliseconds for internal PIP using +//! \~russian Минимальное значание задержки в милисекундах для внутреннего использования в библиотеке PIP +//! \~\details +//! \~english Using in \a piMinSleep(), \a PIThread, \a PITimer::Pool. By default 1ms. +//! \~russian Используется в \a piMinSleep(), \a PIThread, \a PITimer::Pool. По умолчанию равна 1мс. +#ifndef PIP_MIN_MSLEEP +# ifndef MICRO_PIP +# define PIP_MIN_MSLEEP 1. +# else +# define PIP_MIN_MSLEEP 10. +# endif #endif -//! Macro used for infinite loop +//! \~\brief +//! \~english Macro used for infinite loop +//! \~russian Макрос для бесконечного цикла #define FOREVER for (;;) -//! Macro used for infinite wait +//! \~\brief +//! \~english Macro used for infinite wait +//! \~russian Макрос для бесконечного ожидания #define FOREVER_WAIT FOREVER piMinSleep; -//! Macro used for infinite wait +//! \~\brief +//! \~english Macro used for infinite wait +//! \~russian Макрос для бесконечного ожидания #define WAIT_FOREVER FOREVER piMinSleep; -//! global variable enabling output to piCout, default is true +//! \~\brief +//! \~english Global variable enabling output to piCout, default is true +//! \~russian Глобальная переменная, включающая вывод в piCout, при старте true extern PIP_EXPORT bool piDebug; -//! global variable that set minimum real update interval +//! \~\brief +//! \~english Global variable that set minimum real update interval //! for function PIInit::mountInfo(), default is 10000 ms +//! \~russian Глобальная переменная минимального ожидания между реальным обновлением +//! в методе PIInit::mountInfo(), по умолчанию 10000 мс extern PIP_EXPORT double piMountInfoRefreshIntervalMs; typedef unsigned char uchar; @@ -310,12 +412,20 @@ typedef unsigned long long ullong; typedef long long llong; typedef long double ldouble; -/*! @brief Templated function for swap two values - * \details Example:\n \snippet piincludes.cpp swap */ +//! \~\brief +//! \~english Templated function for swap two values +//! \~russian Шаблонный метод для перестановки двух значений +//! \~\details +//! \~english Example:\n \snippet piincludes.cpp swap +//! \~russian Пример:\n \snippet piincludes.cpp swap template inline void piSwap(T & f, T & s) {T t(std::move(f)); f = std::move(s); s = std::move(t);} -/*! @brief Templated function for swap two values without "=" - * \details Example:\n \snippet piincludes.cpp swapBinary */ +//! \~\brief +//! \~english Templated function for swap two values without "=" +//! \~russian Шаблонный метод для перестановки двух значений без использования "=" +//! \~\details +//! \~english Example:\n \snippet piincludes.cpp swapBinary +//! \~russian Пример:\n \snippet piincludes.cpp swapBinary template inline void piSwapBinary(T & f, T & s) { if ((size_t*)&f == (size_t*)&s) return; size_t j = (sizeof(T) / sizeof(size_t)), bs = j * sizeof(size_t), bf = sizeof(T); @@ -350,8 +460,12 @@ template<> inline void piSwapBinary(const void *& f, const void *& s) { } -/*! @brief Function for compare two values without "=" by raw content - * \details Example:\n \snippet piincludes.cpp compareBinary */ +//! \~\brief +//! \~english Function for compare two values without "==" by raw content +//! \~russian Метод для сравнения двух значений без использования "==" (по сырому содержимому) +//! \~\details +//! \~english Example:\n \snippet piincludes.cpp compareBinary +//! \~russian Пример:\n \snippet piincludes.cpp compareBinary inline bool piCompareBinary(const void * f, const void * s, size_t size) { for (size_t i = 0; i < size; ++i) if (((const uchar*)f)[i] != ((const uchar*)s)[i]) @@ -359,146 +473,304 @@ inline bool piCompareBinary(const void * f, const void * s, size_t size) { return true; } -/*! @brief Templated function return round of float falue - * \details Round is the nearest integer value \n - * There are some macros: - * - \c piRoundf for "float" - * - \c piRoundd for "double" - * - * Example: - * \snippet piincludes.cpp round */ +//! \~\brief +//! \~english Templated function return round of float falue +//! \~russian Шаблонный метод, возвращающий округленное значение +//! \~\details +//! \~english +//! Round is the nearest integer value \n +//! There are some macros: +//! - \c piRoundf for "float" +//! - \c piRoundd for "double" +//! +//! Example: +//! \snippet piincludes.cpp round +//! \~russian +//! Округленное значение - это ближайшее целое число\n +//! Есть несколько макросов: +//! - \c piRoundf для "float" +//! - \c piRoundd для "double" +//! +//! Пример: +//! \snippet piincludes.cpp round template inline constexpr int piRound(const T & v) {return int(v >= T(0.) ? v + T(0.5) : v - T(0.5));} -/*! @brief Templated function return floor of float falue - * \details Floor is the largest integer that is not greater than value \n - * There are some macros: - * - \c piFloorf for "float" - * - \c piFloord for "double" - * - * Example: - * \snippet piincludes.cpp floor */ +//! \~\brief +//! \~english Templated function return floor of float falue +//! \~russian Шаблонный метод, возвращающий floor значение +//! \~\details +//! \~english +//! Floor is the largest integer that is not greater than "v" \n +//! There are some macros: +//! - \c piFloorf for "float" +//! - \c piFloord for "double" +//! +//! Example: +//! \snippet piincludes.cpp floor +//! \~russian +//! Floor значение - это наибольшее целое, не большее чем "v"\n +//! Есть несколько макросов: +//! - \c piFloorf для "float" +//! - \c piFloord для "double" +//! +//! Пример: +//! \snippet piincludes.cpp floor template inline constexpr int piFloor(const T & v) {return v < T(0) ? int(v) - 1 : int(v);} -/*! @brief Templated function return ceil of float falue - * \details Ceil is the smallest integer that is not less than value \n - * There are some macros: - * - \c piCeilf for "float" - * - \c piCeild for "double" - * - * Example: - * \snippet piincludes.cpp ceil */ +//! \~\brief +//! \~english Templated function return ceil of float falue +//! \~russian Шаблонный метод, возвращающий ceil значение +//! \~\details +//! \~english +//! Ceil is the smallest integer that is not less than "v" \n +//! There are some macros: +//! - \c piCeilf for "float" +//! - \c piCeild for "double" +//! +//! Example: +//! \snippet piincludes.cpp ceil +//! \~russian +//! Ceil значение - это наименьшее целое, не меньшее чем "v" \n +//! Есть несколько макросов: +//! - \c piCeilf для "float" +//! - \c piCeild для "double" +//! +//! Пример: +//! \snippet piincludes.cpp ceil template inline constexpr int piCeil(const T & v) {return v < T(0) ? int(v) : int(v) + 1;} -/*! @brief Templated function return absolute of numeric falue - * \details Absolute is the positive or equal 0 value \n - * There are some macros: - * - \c piAbss for "short" - * - \c piAbsi for "int" - * - \c piAbsl for "long" - * - \c piAbsll for "llong" - * - \c piAbsf for "float" - * - \c piAbsd for "double" - * - * Example: - * \snippet piincludes.cpp abs */ +//! \~\brief +//! \~english Templated function return absolute of numeric falue +//! \~russian Шаблонный метод, возвращающий модуль числового значения +//! \~\details +//! \~english +//! Absolute is the positive or equal 0 value \n +//! There are some macros: +//! - \c piAbss for "short" +//! - \c piAbsi for "int" +//! - \c piAbsl for "long" +//! - \c piAbsll for "llong" +//! - \c piAbsf for "float" +//! - \c piAbsd for "double" +//! +//! Example: +//! \snippet piincludes.cpp abs +//! \~russian +//! Модуль числового значения всегда >= 0 \n +//! Есть несколько макросов: +//! - \c piAbss для "short" +//! - \c piAbsi для "int" +//! - \c piAbsl для "long" +//! - \c piAbsll для "llong" +//! - \c piAbsf для "float" +//! - \c piAbsd для "double" +//! +//! Пример: +//! \snippet piincludes.cpp abs template inline constexpr T piAbs(const T & v) {return (v >= T(0) ? v : -v);} -/*! @brief Templated function return minimum of two values - * \details There are some macros: - * - \c piMins for "short" - * - \c piMini for "int" - * - \c piMinl for "long" - * - \c piMinll for "llong" - * - \c piMinf for "float" - * - \c piMind for "double" - * - * Example: - * \snippet piincludes.cpp min2 */ +//! \~\brief +//! \~english Templated function return minimum of two values +//! \~russian Шаблонный метод, возвращающий минимум из двух значений +//! \~\details +//! \~english +//! There are some macros: +//! - \c piMins for "short" +//! - \c piMini for "int" +//! - \c piMinl for "long" +//! - \c piMinll for "llong" +//! - \c piMinf for "float" +//! - \c piMind for "double" +//! +//! Example: +//! \snippet piincludes.cpp min2 +//! \~russian +//! Есть несколько макросов: +//! - \c piMins для "short" +//! - \c piMini для "int" +//! - \c piMinl для "long" +//! - \c piMinll для "llong" +//! - \c piMinf для "float" +//! - \c piMind для "double" +//! +//! Пример: +//! \snippet piincludes.cpp min2 template inline constexpr T piMin(const T & f, const T & s) {return ((f > s) ? s : f);} -/*! @brief Templated function return minimum of tree values - * \details There are some macros: - * - \c piMins for "short" - * - \c piMini for "int" - * - \c piMinl for "long" - * - \c piMinll for "llong" - * - \c piMinf for "float" - * - \c piMind for "double" - * - * Example: - * \snippet piincludes.cpp min3 */ +//! \~\brief +//! \~english Templated function return minimum of tree values +//! \~russian Шаблонный метод, возвращающий минимум из трех значений +//! \~\details +//! \~english +//! There are some macros: +//! - \c piMins for "short" +//! - \c piMini for "int" +//! - \c piMinl for "long" +//! - \c piMinll for "llong" +//! - \c piMinf for "float" +//! - \c piMind for "double" +//! +//! Example: +//! \snippet piincludes.cpp min3 +//! \~russian +//! Есть несколько макросов: +//! - \c piMins для "short" +//! - \c piMini для "int" +//! - \c piMinl для "long" +//! - \c piMinll для "llong" +//! - \c piMinf для "float" +//! - \c piMind для "double" +//! +//! Пример: +//! \snippet piincludes.cpp min3 template inline constexpr T piMin(const T & f, const T & s, const T & t) {return ((f < s && f < t) ? f : ((s < t) ? s : t));} -/*! @brief Templated function return maximum of two values - * \details There are some macros: - * - \c piMaxs for "short" - * - \c piMaxi for "int" - * - \c piMaxl for "long" - * - \c piMaxll for "llong" - * - \c piMaxf for "float" - * - \c piMaxd for "double" - * - * Example: - * \snippet piincludes.cpp max2 */ +//! \~\brief +//! \~english Templated function return maximum of two values +//! \~russian Шаблонный метод, возвращающий максимум из двух значений +//! \~\details +//! \~english +//! There are some macros: +//! - \c piMaxs for "short" +//! - \c piMaxi for "int" +//! - \c piMaxl for "long" +//! - \c piMaxll for "llong" +//! - \c piMaxf for "float" +//! - \c piMaxd for "double" +//! +//! Example: +//! \snippet piincludes.cpp max2 +//! \~russian +//! Есть несколько макросов: +//! - \c piMaxs для "short" +//! - \c piMaxi для "int" +//! - \c piMaxl для "long" +//! - \c piMaxll для "llong" +//! - \c piMaxf для "float" +//! - \c piMaxd для "double" +//! +//! Пример: +//! \snippet piincludes.cpp max2 template inline constexpr T piMax(const T & f, const T & s) {return ((f < s) ? s : f);} -/*! @brief Templated function return maximum of tree values - * \details There are some macros: - * - \c piMaxs for "short" - * - \c piMaxi for "int" - * - \c piMaxl for "long" - * - \c piMaxll for "llong" - * - \c piMaxf for "float" - * - \c piMaxd for "double" - * - * Example: - * \snippet piincludes.cpp max3 */ +//! \~\brief +//! \~english Templated function return maximum of tree values +//! \~russian Шаблонный метод, возвращающий максимум из трех значений +//! \~\details +//! \~english +//! There are some macros: +//! - \c piMaxs for "short" +//! - \c piMaxi for "int" +//! - \c piMaxl for "long" +//! - \c piMaxll for "llong" +//! - \c piMaxf for "float" +//! - \c piMaxd for "double" +//! +//! Example: +//! \snippet piincludes.cpp max3 +//! \~russian +//! Есть несколько макросов: +//! - \c piMaxs для "short" +//! - \c piMaxi для "int" +//! - \c piMaxl для "long" +//! - \c piMaxll для "llong" +//! - \c piMaxf для "float" +//! - \c piMaxd для "double" +//! +//! Пример: +//! \snippet piincludes.cpp max3 template inline constexpr T piMax(const T & f, const T & s, const T & t) {return ((f > s && f > t) ? f : ((s > t) ? s : t));} -/*! @brief Templated function return clamped value - * \details Clamped is the not greater than "max" and not lesser than "min" value \n - * There are some macros: - * - \c piClamps for "short" - * - \c piClampi for "int" - * - \c piClampl for "long" - * - \c piClampll for "llong" - * - \c piClampf for "float" - * - \c piClampd for "double" - * - * Example: - * \snippet piincludes.cpp clamp */ +//! \~\brief +//! \~english Templated function return clamped value +//! \~russian Шаблонный метод, возвращающий ограниченное значение +//! \~\details +//! \~english +//! Clamped is the not greater than "max" and not lesser than "min" value \n +//! There are some macros: +//! - \c piClamps for "short" +//! - \c piClampi for "int" +//! - \c piClampl for "long" +//! - \c piClampll for "llong" +//! - \c piClampf for "float" +//! - \c piClampd for "double" +//! +//! Example: +//! \snippet piincludes.cpp clamp +//! \~russian +//! Ограниченное значение - не больше чем "max" и не меньше чем "min" +//! Есть несколько макросов: +//! - \c piClamps для "short" +//! - \c piClampi для "int" +//! - \c piClampl для "long" +//! - \c piClampll для "llong" +//! - \c piClampf для "float" +//! - \c piClampd для "double" +//! +//! Пример: +//! \snippet piincludes.cpp clamp template inline constexpr T piClamp(const T & v, const T & min, const T & max) {return (v > max ? max : (v < min ? min : v));} -/// Function inverse byte order in memory block +//! \~\brief +//! \~english Function inverse byte order in memory block ([1..N] -> [N..1]) +//! \~russian Метод для смены порядка байт в блоке памяти ([1..N] -> [N..1]) inline void piLetobe(void * data, int size) { for (int i = 0; i < size / 2; i++) piSwap(((uchar*)data)[size - i - 1], ((uchar*)data)[i]); } -/*! @brief Function for compare two numeric values with epsilon - * \details Example:\n \snippet piincludes.cpp compare -* There are some macros: -* - \c piComparef for "float" -* - \c piCompared for "double" -*/ +//! \~\brief +//! \~english Function for compare two numeric values with epsilon +//! \~russian Метод для сравнения двух чисел с порогом +//! \~\details +//! \~english +//! There are some macros: +//! - \c piComparef for "float" +//! - \c piCompared for "double" +//! +//! Example: +//! \snippet piincludes.cpp compare +//! \~russian +//! Есть несколько макросов: +//! - \c piComparef для "float" +//! - \c piCompared для "double" +//! +//! Пример: +//! \snippet piincludes.cpp compare template inline bool piCompare(const T & a, const T & b, const T & epsilon = std::numeric_limits::epsilon()) { return piAbs(a - b) <= epsilon; } -/// @brief Templated function that inverse byte order of value "v" +//! \~\brief +//! \~english Templated function that inverse byte order of value "v" +//! \~russian Шаблонный метод, меняющий порядок байт в переменной "v" template inline void piLetobe(T * v) {piLetobe(v, sizeof(T));} -/*! @brief Templated function that returns "v" with inversed byte order - * \details This function used to convert values between little and big endian \n - * There are some macros: - * - \c piLetobes for "ushort" - * - \c piLetobei for "uint" - * - \c piLetobel for "ulong" - * - \c piLetobell for "ullong" - * - * Example: - * \snippet piincludes.cpp letobe */ +//! \~\brief +//! \~english Templated function that returns "v" with inversed byte order +//! \~russian Шаблонный метод, возвращающий переменную "v" с измененным порядком байт +//! \~\details +//! \~english +//! This function used to convert values between little and big endian \n +//! There are some macros: +//! - \c piLetobes for "ushort" +//! - \c piLetobei for "uint" +//! - \c piLetobel for "ulong" +//! - \c piLetobell for "ullong" +//! +//! Example: +//! \snippet piincludes.cpp letobe +//! \~russian +//! Этот метод используется для изменения порядка байт между little и big endian +//! Есть несколько макросов: +//! - \c piLetobes для "ushort" +//! - \c piLetobei для "uint" +//! - \c piLetobel для "ulong" +//! - \c piLetobell для "ullong" +//! +//! Пример: +//! \snippet piincludes.cpp letobe template inline T piLetobe(const T & v) {T tv(v); piLetobe(&tv, sizeof(T)); return tv;} // specialization @@ -515,7 +787,9 @@ template<> inline float piLetobe(const float & v) { return a.f; } -/// @brief Generic hash function, implements murmur3/32 algorithm +//! \~\brief +//! \~english Generic hash function, implements murmur3/32 algorithm +//! \~russian Хэш-функция общего назначения, по алгоритму murmur3/32 inline uint piHashData(const uchar * data, uint len, uint seed = 0) { if (!data || len <= 0) return 0u; uint h = seed; diff --git a/libs/main/core/pibitarray.h b/libs/main/core/pibitarray.h index 4492bde1..c9eae0e9 100644 --- a/libs/main/core/pibitarray.h +++ b/libs/main/core/pibitarray.h @@ -1,5 +1,7 @@ -/*! @file pibitarray.h - * @brief Bit array +/*! \file pibitarray.h + * \~\brief + * \~english Bit array + * \~russian Битовый массив */ /* PIP - Platform Independent Primitives diff --git a/libs/main/core/pibytearray.cpp b/libs/main/core/pibytearray.cpp index 9fc22fdc..08076420 100644 --- a/libs/main/core/pibytearray.cpp +++ b/libs/main/core/pibytearray.cpp @@ -21,6 +21,85 @@ #include "pistringlist.h" #include +//! \addtogroup Core +//! \{ +//! \class PIByteArray pibytearray.h +//! +//! \~\brief +//! \~english The %PIByteArray class provides an array of bytes +//! \~russian Класс %PIByteArray представляет собой массив байтов +//! \} +//! +//! \~\details +//! \~english +//! %PIByteArray used to store raw bytes. +//! It can be constructed from any data and size. +//! You can use %PIByteArray as binary stream +//! to serialize/deserialize any objects and data. +//! This class based on PIDeque and provide some handle function +//! to manipulate it. +//! \~russian +//! %PIByteArray используется для хранения байтов. +//! Он может быть сконструирован из любых даных. +//! Можно использовать %PIByteArray как потоковый объект +//! для сериализации/десериализации любых типов и данных. +//! Этот класс наследован от PIDeque и предоставляет набор +//! удобных методов для работы с байтами. +//! +//! \~english \section PIByteArray_sec0 Usage +//! \~russian \section PIByteArray_sec0 Использование +//! \~english +//! %PIByteArray can be used to store custom data and manipulate it. There are many +//! stream operators to store/restore common types to byte array. Store operators +//! places data at the end of array, restore operators takes data from the beginning +//! of array. +//! In addition there are Hex and Base64 convertions +//! \~russian +//! %PIByteArray может быть использован для сохранения любых данных и работы с ними. +//! Он предоставляет множество операторов для сохранения/извлечения общих типов. +//! Операторы сохранения добавляют данные в конец массива, а операторы извлечения +//! берут данные из его начала. +//! +//! \~english +//! One of the major usage of %PIByteArray is stream functions. You can form binary +//! packet from many types (also dynamic types, e.g. PIVector) with one line: +//! \~russian +//! Один из основных сценариев использования %PIByteArray - это потоковый объект. +//! Можно сформировать пакет бинарных данных из многих типов (также и контейнеров, +//! например, PIVector) в одну строку: +//! \~\snippet pibytearray.cpp 0 +//! +//! \~english +//! Or you can descibe stream operator of your own type and store/restore vectors of +//! your type: +//! \~russian +//! Также можно описать операторы сохранения/извлечения для собственных типов: +//! \~\snippet pibytearray.cpp 1 +//! +//! \~english +//! For store/restore custom data blocks there is PIByteArray::RawData class. Stream +//! operators of this class simply store/restore data block to/from byte array: +//! \~russian +//! Для сохранения/извлечения блоков произвольных данных используется класс PIByteArray::RawData. +//! Потоковые операторы для него просто сохраняют/извлекают блоки байтов: +//! \~\snippet pibytearray.cpp 2 +//! +//! \~english \section PIByteArray_sec1 Attention +//! \~russian \section PIByteArray_sec1 Внимание +//! \~english +//! Stream operator of %PIByteArray store byte array as vector, not simply append +//! content of byte array. This operators useful to transmit custom data as %PIByteArray +//! packed into parent byte array, e.g. to form packet from %PIByteArray. +//! To append one byte array to another use funtion \a append(). +//! \~russian +//! Потоковый оператор для типа %PIByteArray сохраняет его как контейнер, +//! а не просто добавляет его содержимое в конец. Этот оператор полезен для управляемой +//! упаковки произвольных данных в виде %PIByteArray. +//! Для добавления содержимого одного байтового массива к другому используется +//! метов \a append(). +//! \~\snippet pibytearray.cpp 3 +//! + static const uchar base64Table[64] = { 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, @@ -221,6 +300,19 @@ PIByteArray & PIByteArray::decompressRLE(uchar threshold) { } +//! \~\details +//! \~english +//! This is simple sum of all bytes, if "inverse" then add 1 and inverse. +//! Pseudocode: +//! \~russian +//! Это простая сумма всех байтов, если "inverse", то ещё добавляется 1 и инвертируется результат. +//! Псевдокод: +//! \~\code +//! for (i) +//! sum += at(i); +//! if (inverse) return ~(sum + 1); +//! else return sum; +//! \endcode uchar PIByteArray::checksumPlain8(bool inverse) const { uchar c = 0; int sz = size_s(); @@ -231,6 +323,19 @@ uchar PIByteArray::checksumPlain8(bool inverse) const { } +//! \~\details +//! \~english +//! This is sum of all bytes multiplied by index+1, if inverse then add 1 and inverse. +//! Pseudocode: +//! \~russian +//! Это простая сумма всех байтов, умноженных на индекс+1, если "inverse", то ещё добавляется 1 и инвертируется результат. +//! Псевдокод: +//! \~\code +//! for (i) +//! sum += at(i) * (i + 1); +//! if (inverse) return ~(sum + 1); +//! else return sum; +//! \endcode uint PIByteArray::checksumPlain32(bool inverse) const { uint c = 0; int sz = size_s(); diff --git a/libs/main/core/pibytearray.h b/libs/main/core/pibytearray.h index 9887337a..dedfc15c 100644 --- a/libs/main/core/pibytearray.h +++ b/libs/main/core/pibytearray.h @@ -1,5 +1,7 @@ -/*! @file pibytearray.h - * @brief Byte array +/*! \file pibytearray.h + * \~\brief + * \~english Byte array + * \~russian Байтовый массив */ /* PIP - Platform Independent Primitives @@ -39,76 +41,49 @@ class PIString; class PIByteArray; -/*! @class PIByteArray - * @brief The PIByteArray class provides an array of bytes - * @details PIByteArray used to store raw bytes. - * It can be constructed from any data and size. - * You can use PIByteArray as binary stream - * to serialize/deserialize any objects and data. - * This class based on PIDeque and provide some handle function - * to manipulate it. - * - * @section PIByteArray_sec0 Usage - * %PIByteArray can be used to store custom data and manipulate it. There are many - * stream operators to store/restore common types to byte array. Store operators - * places data at the end of array, restore operators takes data from the beginning - * of array. - * In addition there are Hex and Base64 convertions - * - * One of the major usage of %PIByteArray is stream functions. You can form binary - * packet from many types (also dynamic types, e.g. PIVector) with one line: - * @snippet pibytearray.cpp 0 - * - * Or you can descibe stream operator of your own type and store/restore vectors of - * your type: - * @snippet pibytearray.cpp 1 - * - * For store/restore custom data blocks there is PIByteArray::RawData class. Stream - * operators of this class simply store/restore data block to/from byte array. - * @snippet pibytearray.cpp 2 - * - * @section PIByteArray_sec1 Attention - * Stream operator of %PIByteArray store byte array as vector, not simply append - * content of byte array. This operators useful to transmit custom data as %PIByteArray - * packed into parent byte array, e.g. to form packet from %PIByteArray. - * To append one byte array to another use funtion \a append(). - * @snippet pibytearray.cpp 3 - * - * - */ - class PIP_EXPORT PIByteArray: public PIDeque { public: - //! Constructs an empty byte array + //! \~english Constructs an empty byte array + //! \~russian Создает пустой байтовый массив PIByteArray() {;} + //! \~english Constructs copy of byte array "o" + //! \~russian Создает копию байтового массива "o" PIByteArray(const PIByteArray & o): PIDeque(o) {} + //! \~english Constructs copy of byte array "o" + //! \~russian Создает копию байтового массива "o" PIByteArray(const PIDeque & o): PIDeque(o) {} PIByteArray(PIByteArray && o): PIDeque(std::move(o)) {} - //! Constructs 0-filled byte array with size "size" + //! \~english Constructs 0-filled byte array with size "size" + //! \~russian Создает заполненный "0" байтовый массив размером "size" PIByteArray(const uint size) {resize(size);} - //! Constructs byte array from data "data" and size "size" + //! \~english Constructs byte array from data "data" and size "size" + //! \~russian Создает байтовый массив из данных по указателю "data" размером "size" PIByteArray(const void * data, const uint size): PIDeque((const uchar*)data, size_t(size)) {} - //! Constructs byte array with size "size" filled by "t" + //! \~english Constructs byte array with size "size" filled by "t" + //! \~russian Создает заполненный "t" байтовый массив размером "size" PIByteArray(const uint size, uchar t): PIDeque(size, t) {} - //! Help struct to store/restore custom blocks of data to/from PIByteArray + //! \~english Help struct to store/restore custom blocks of data to/from PIByteArray + //! \~russian Вспомогательная структура для сохранения/извлечения произвольного блока данных в/из байтового массива struct RawData { friend PIByteArray & operator <<(PIByteArray & s, const PIByteArray::RawData & v); friend PIByteArray & operator >>(PIByteArray & s, PIByteArray::RawData v); public: - //! Constructs data block + //! \~english Constructs data block + //! \~russian Создает блок данных RawData(void * data = 0, int size = 0) {d = data; s = size;} RawData(const RawData & o) {d = o.d; s = o.s;} - //! Constructs data block + //! \~english Constructs data block + //! \~russian Создает блок данных RawData(const void * data, const int size) {d = const_cast(data); s = size;} RawData & operator =(const RawData & o) {d = o.d; s = o.s; return *this;} private: @@ -116,22 +91,27 @@ public: int s; }; - //! Return resized byte array + //! \~english Return resized byte array + //! \~russian Возвращает копию байтового массива с измененным размером PIByteArray resized(uint new_size) const {PIByteArray ret(new_size); memcpy(ret.data(), data(), new_size); return ret;} - //! Return sub-array starts from "index" and has "count" or less bytes + //! \~english Return sub-array starts from "index" and has "count" or less bytes + //! \~russian Возвращает подмассив с данными от индекса "index" и размером не более "count" PIByteArray getRange(size_t index, size_t count) const { return PIDeque::getRange(index, count); } - //! Convert data to Base 64 and return this byte array + //! \~english Convert data to Base 64 and return this byte array + //! \~russian Преобразует данные в Base 64 и возвращает текущий массив PIByteArray & convertToBase64(); - //! Convert data from Base 64 and return this byte array + //! \~english Convert data from Base 64 and return this byte array + //! \~russian Преобразует данные из Base 64 и возвращает текущий массив PIByteArray & convertFromBase64(); - //! Return converted to Base 64 data + //! \~english Return converted to Base 64 data + //! \~russian Возвращает копию байтового массива, преобразованного в Base 64 PIByteArray toBase64() const; PIByteArray & compressRLE(uchar threshold = 192); @@ -139,36 +119,40 @@ public: PIByteArray compressedRLE(uchar threshold = 192) {PIByteArray ba(*this); ba.compressRLE(threshold); return ba;} PIByteArray decompressedRLE(uchar threshold = 192) {PIByteArray ba(*this); ba.decompressRLE(threshold); return ba;} + //! \~english Return string representation of data, each byte in "base" base, separated by spaces + //! \~russian Возвращает текстовое представление байтового массива, каждый байт в "base" системе, с пробелами PIString toString(int base = 16) const; - //! Returns a hex encoded copy of the byte array. + //! \~english + //! Returns a hex encoded copy of the byte array, without spaces. //! The hex encoding uses the numbers 0-9 and the letters a-f. + //! \~russian + //! Возвращает шестнадцатеричное представление массива, без пробелов. + //! Оно использует цифры 0-9 и буквы a-f. PIString toHex() const; - //! Add to the end data "data" with size "size" + //! \~english Add to the end data "data" with size "size" + //! \~russian Добавляет в конец массива данные по указателю "data" размером "size" PIByteArray & append(const void * data_, int size_) {uint ps = size(); enlarge(size_); memcpy(data(ps), data_, size_); return *this;} - //! Add to the end byte array "data" + //! \~english Add to the end byte array "data" + //! \~russian Добавляет в конец массива содержимое массива "data" PIByteArray & append(const PIByteArray & data_) {uint ps = size(); enlarge(data_.size_s()); memcpy(data(ps), data_.data(), data_.size()); return *this;} - //! Add to the end "t" + //! \~english Add to the end "t" + //! \~russian Добавляет в конец массива байт "t" PIByteArray & append(uchar t) {push_back(t); return *this;} - //! Returns 8-bit checksum - //! sum all bytes, if inverse - add 1, inverse - //! Pseudocode: - //! sum += at(i); - //! return ~(sum + 1) + //! \~english Returns 8-bit checksum + //! \~russian Возвращает 8-битную контрольную сумму uchar checksumPlain8(bool inverse = true) const; - //! Returns 32-bit checksum - //! sum all bytes multiplyed by index+1, if inverse - add 1, inverse - //! Pseudocode: - //! sum += at(i) * (i + 1); - //! return ~(sum + 1) + //! \~english Returns 32-bit checksum + //! \~russian Возвращает 32-битную контрольную сумму uint checksumPlain32(bool inverse = true) const; - //! Returns hash + //! \~english Returns hash of content + //! \~russian Возвращает хэш содержимого uint hash() const; void operator =(const PIDeque & d) {resize(d.size()); memcpy(data(), d.data(), d.size());} @@ -181,7 +165,8 @@ public: static PIByteArray fromHex(PIString str); - //! Return converted from Base 64 data + //! \~english Return converted from Base 64 data + //! \~russian Возвращает массив из Base 64 представления static PIByteArray fromBase64(const PIByteArray & base64); static PIByteArray fromBase64(const PIString & base64); @@ -196,7 +181,9 @@ public: }; -//! \relatesalso PIByteArray @brief Byte arrays compare operator +//! \relatesalso PIByteArray +//! \~english Byte arrays compare operator +//! \~russian Оператор сравнения inline bool operator <(const PIByteArray & v0, const PIByteArray & v1) { if (v0.size() == v1.size()) { if (v0.isEmpty()) return false; @@ -205,7 +192,9 @@ inline bool operator <(const PIByteArray & v0, const PIByteArray & v1) { return v0.size() < v1.size(); } -//! \relatesalso PIByteArray @brief Byte arrays compare operator +//! \relatesalso PIByteArray +//! \~english Byte arrays compare operator +//! \~russian Оператор сравнения inline bool operator >(const PIByteArray & v0, const PIByteArray & v1) { if (v0.size() == v1.size()) { if (v0.isEmpty()) return false; @@ -214,7 +203,9 @@ inline bool operator >(const PIByteArray & v0, const PIByteArray & v1) { return v0.size() > v1.size(); } -//! \relatesalso PIByteArray @brief Byte arrays compare operator +//! \relatesalso PIByteArray +//! \~english Byte arrays compare operator +//! \~russian Оператор сравнения inline bool operator ==(const PIByteArray & v0, const PIByteArray & v1) { if (v0.size() == v1.size()) { if (v0.isEmpty()) return true; @@ -223,7 +214,9 @@ inline bool operator ==(const PIByteArray & v0, const PIByteArray & v1) { return false; } -//! \relatesalso PIByteArray @brief Byte arrays compare operator +//! \relatesalso PIByteArray +//! \~english Byte arrays compare operator +//! \~russian Оператор сравнения inline bool operator !=(const PIByteArray & v0, const PIByteArray & v1) { if (v0.size() == v1.size()) { if (v0.isEmpty()) return false; @@ -233,11 +226,13 @@ inline bool operator !=(const PIByteArray & v0, const PIByteArray & v1) { } #ifdef PIP_STD_IOSTREAM -//! \relatesalso PIByteArray @brief Output to std::ostream operator +//! \relatesalso PIByteArray \brief Output to std::ostream operator inline std::ostream & operator <<(std::ostream & s, const PIByteArray & ba); #endif -//! \relatesalso PIByteArray @brief Output to PICout operator +//! \relatesalso PIByteArray +//! \~english Output operator to \a PICout +//! \~russian Оператор вывода в \a PICout PIP_EXPORT PICout operator <<(PICout s, const PIByteArray & ba); @@ -246,16 +241,24 @@ PIP_EXPORT PICout operator <<(PICout s, const PIByteArray & ba); // store operators for basic types -//! \relatesalso PIByteArray @brief Store operator +//! \relatesalso PIByteArray +//! \~english Store operator +//! \~russian Оператор сохранения inline PIByteArray & operator <<(PIByteArray & s, const bool v) {s.push_back(v); return s;} -//! \relatesalso PIByteArray @brief Store operator +//! \relatesalso PIByteArray +//! \~english Store operator +//! \~russian Оператор сохранения inline PIByteArray & operator <<(PIByteArray & s, const char v) {s.push_back(v); return s;} -//! \relatesalso PIByteArray @brief Store operator +//! \relatesalso PIByteArray +//! \~english Store operator +//! \~russian Оператор сохранения inline PIByteArray & operator <<(PIByteArray & s, const uchar v) {s.push_back(v); return s;} -//! \relatesalso PIByteArray @brief Store operator for any trivial copyable type +//! \relatesalso PIByteArray +//! \~english Store operator for any trivial copyable type +//! \~russian Оператор сохранения для тривиальных типов template::value, int>::type = 0> inline PIByteArray::StreamRef operator <<(PIByteArray & s, const T & v) { int os = s.size_s(); @@ -264,10 +267,14 @@ inline PIByteArray::StreamRef operator <<(PIByteArray & s, const T & v) { return s; } -//! \relatesalso PIByteArray @brief Store operator, see \ref PIByteArray_sec1 for details +//! \relatesalso PIByteArray +//! \~english Store operator, see \ref PIByteArray_sec1 for details +//! \~russian Оператор сохранения, подробнее в \ref PIByteArray_sec1 PIP_EXPORT PIByteArray & operator <<(PIByteArray & s, const PIByteArray & v); -//! \relatesalso PIByteArray @brief Store operator, see \ref PIByteArray_sec1 for details +//! \relatesalso PIByteArray +//! \~english Store operator, see \ref PIByteArray_sec1 for details +//! \~russian Оператор сохранения, подробнее в \ref PIByteArray_sec1 inline PIByteArray & operator <<(PIByteArray & s, const PIByteArray::RawData & v) { int os = s.size_s(); if (v.s > 0) { @@ -277,7 +284,9 @@ inline PIByteArray & operator <<(PIByteArray & s, const PIByteArray::RawData & v return s; } -//! \relatesalso PIByteArray @brief Store operator for PIVector of any trivial copyable type +//! \relatesalso PIByteArray +//! \~english Store operator for PIVector of any trivial copyable type +//! \~russian Оператор сохранения для PIVector тривиальных типов template::value, int>::type = 0, typename std::enable_if< std::is_same() << std::declval()), PIByteArray::StreamRef>::value, int>::type = 0> @@ -299,7 +308,9 @@ inline PIByteArray & operator <<(PIByteArray & s, const PIVector & v) { return s; } -//! \relatesalso PIByteArray @brief Store operator for PIDeque of any trivial copyable type +//! \relatesalso PIByteArray +//! \~english Store operator for PIDeque of any trivial copyable type +//! \~russian Оператор сохранения для PIDeque тривиальных типов template::value, int>::type = 0, typename std::enable_if< std::is_same() << std::declval()), PIByteArray::StreamRef>::value, int>::type = 0> @@ -321,7 +332,9 @@ inline PIByteArray & operator <<(PIByteArray & s, const PIDeque & v) { return s; } -//! \relatesalso PIByteArray @brief Store operator for PIVector2D of any trivial copyable type +//! \relatesalso PIByteArray +//! \~english Store operator for PIVector2D of any trivial copyable type +//! \~russian Оператор сохранения для PIVector2D тривиальных типов template::value, int>::type = 0, typename std::enable_if< std::is_same() << std::declval()), PIByteArray::StreamRef>::value, int>::type = 0> @@ -342,10 +355,14 @@ inline PIByteArray & operator <<(PIByteArray & s, const PIVector2D & v) { return s; } -//! \relatesalso PIByteArray @brief Store operator +//! \relatesalso PIByteArray +//! \~english Store operator +//! \~russian Оператор сохранения inline PIByteArray & operator <<(PIByteArray & s, const PIBitArray & v) {s << v.size_ << v.data_; return s;} -//! \relatesalso PIPair @brief Store operator +//! \relatesalso PIPair +//! \~english Store operator +//! \~russian Оператор сохранения template inline PIByteArray & operator <<(PIByteArray & s, const PIPair & v) {s << v.first << v.second; return s;} @@ -355,16 +372,24 @@ inline PIByteArray & operator <<(PIByteArray & s, const PIPair & v // restore operators for basic types -//! \relatesalso PIByteArray @brief Restore operator +//! \relatesalso PIByteArray +//! \~english Restore operator +//! \~russian Оператор извлечения inline PIByteArray & operator >>(PIByteArray & s, bool & v) {assert(s.size() >= 1u); v = s.take_front(); return s;} -//! \relatesalso PIByteArray @brief Restore operator +//! \relatesalso PIByteArray +//! \~english Restore operator +//! \~russian Оператор извлечения inline PIByteArray & operator >>(PIByteArray & s, char & v) {assert(s.size() >= 1u); v = s.take_front(); return s;} -//! \relatesalso PIByteArray @brief Restore operator +//! \relatesalso PIByteArray +//! \~english Restore operator +//! \~russian Оператор извлечения inline PIByteArray & operator >>(PIByteArray & s, uchar & v) {assert(s.size() >= 1u); v = s.take_front(); return s;} -//! \relatesalso PIByteArray @brief Restore operator for any trivial copyable type +//! \relatesalso PIByteArray +//! \~english Restore operator for any trivial copyable type +//! \~russian Оператор извлечения для тривиальных типов template::value, int>::type = 0> inline PIByteArray::StreamRef operator >>(PIByteArray & s, T & v) { if (s.size() < sizeof(v)) { @@ -376,10 +401,14 @@ inline PIByteArray::StreamRef operator >>(PIByteArray & s, T & v) { return s; } -//! \relatesalso PIByteArray @brief Restore operator, see \ref PIByteArray_sec1 for details +//! \relatesalso PIByteArray +//! \~english Restore operator, see \ref PIByteArray_sec1 for details +//! \~russian Оператор извлечения, подробнее в \ref PIByteArray_sec1 PIP_EXPORT PIByteArray & operator >>(PIByteArray & s, PIByteArray & v); -//! \relatesalso PIByteArray @brief Restore operator, see \ref PIByteArray_sec1 for details +//! \relatesalso PIByteArray +//! \~english Restore operator, see \ref PIByteArray_sec1 for details +//! \~russian Оператор извлечения, подробнее в \ref PIByteArray_sec1 inline PIByteArray & operator >>(PIByteArray & s, PIByteArray::RawData v) { if (s.size_s() < v.s) { printf("error with RawData %d < %d\n", (int)s.size_s(), v.s); @@ -392,7 +421,9 @@ inline PIByteArray & operator >>(PIByteArray & s, PIByteArray::RawData v) { return s; } -//! \relatesalso PIByteArray @brief Restore operator for PIVector of any trivial copyable type +//! \relatesalso PIByteArray +//! \~english Restore operator for PIVector of any trivial copyable type +//! \~russian Оператор извлечения для PIVector тривиальных типов template::value, int>::type = 0, typename std::enable_if< std::is_same() << std::declval()), PIByteArray::StreamRef>::value, int>::type = 0> @@ -423,7 +454,9 @@ inline PIByteArray & operator >>(PIByteArray & s, PIVector & v) { return s; } -//! \relatesalso PIByteArray @brief Restore operator for PIDeque of any trivial copyable type +//! \relatesalso PIByteArray +//! \~english Restore operator for PIDeque of any trivial copyable type +//! \~russian Оператор извлечения для PIDeque тривиальных типов template::value, int>::type = 0, typename std::enable_if< std::is_same() << std::declval()), PIByteArray::StreamRef>::value, int>::type = 0> @@ -454,7 +487,9 @@ inline PIByteArray & operator >>(PIByteArray & s, PIDeque & v) { return s; } -//! \relatesalso PIByteArray @brief Restore operator for PIVector2D of any trivial copyable type +//! \relatesalso PIByteArray +//! \~english Restore operator for PIVector2D of any trivial copyable type +//! \~russian Оператор извлечения для PIVector2D тривиальных типов template::value, int>::type = 0, typename std::enable_if< std::is_same() << std::declval()), PIByteArray::StreamRef>::value, int>::type = 0> @@ -487,10 +522,14 @@ inline PIByteArray & operator >>(PIByteArray & s, PIVector2D & v) { return s; } -//! \relatesalso PIByteArray @brief Restore operator +//! \relatesalso PIByteArray +//! \~english Restore operator +//! \~russian Оператор извлечения inline PIByteArray & operator >>(PIByteArray & s, PIBitArray & v) {assert(s.size_s() >= 8); s >> v.size_ >> v.data_; return s;} -//! \relatesalso PIPair @brief Restore operator +//! \relatesalso PIPair +//! \~english Restore operator +//! \~russian Оператор извлечения template inline PIByteArray & operator >>(PIByteArray & s, PIPair & v) {s >> v.first >> v.second; return s;} @@ -500,7 +539,9 @@ inline PIByteArray & operator >>(PIByteArray & s, PIPair & v) {s > // store operators for complex types -//! \relatesalso PIByteArray @brief Store operator for PIVector of any compound type +//! \relatesalso PIByteArray +//! \~english Store operator for PIVector of any compound type +//! \~russian Оператор сохранения для PIVector сложных типов template::value, int>::type = 0> inline PIByteArray & operator <<(PIByteArray & s, const PIVector & v) { s << int(v.size_s()); @@ -508,7 +549,9 @@ inline PIByteArray & operator <<(PIByteArray & s, const PIVector & v) { return s; } -//! \relatesalso PIByteArray @brief Store operator for PIDeque of any compound type +//! \relatesalso PIByteArray +//! \~english Store operator for PIDeque of any compound type +//! \~russian Оператор сохранения для PIDeque сложных типов template::value, int>::type = 0> inline PIByteArray & operator <<(PIByteArray & s, const PIDeque & v) { s << int(v.size_s()); @@ -516,7 +559,9 @@ inline PIByteArray & operator <<(PIByteArray & s, const PIDeque & v) { return s; } -//! \relatesalso PIByteArray @brief Store operator for PIVector2D of any compound type +//! \relatesalso PIByteArray +//! \~english Store operator for PIVector2D of any compound type +//! \~russian Оператор сохранения для PIVector2D сложных типов template::value, int>::type = 0> inline PIByteArray & operator <<(PIByteArray & s, const PIVector2D & v) { s << int(v.rows()) << int(v.cols()) << v.toPlainVector(); @@ -529,7 +574,9 @@ inline PIByteArray & operator <<(PIByteArray & s, const PIVector2D & v) { // restore operators for complex types -//! \relatesalso PIByteArray @brief Restore operator for PIVector of any compound type +//! \relatesalso PIByteArray +//! \~english Restore operator for PIVector of any compound type +//! \~russian Оператор извлечения для PIVector сложных типов template::value, int>::type = 0> inline PIByteArray & operator >>(PIByteArray & s, PIVector & v) { if (s.size_s() < 4) { @@ -542,7 +589,9 @@ inline PIByteArray & operator >>(PIByteArray & s, PIVector & v) { return s; } -//! \relatesalso PIByteArray @brief Restore operator for PIDeque of any compound type +//! \relatesalso PIByteArray +//! \~english Restore operator for PIDeque of any compound type +//! \~russian Оператор извлечения для PIDeque сложных типов template::value, int>::type = 0> inline PIByteArray & operator >>(PIByteArray & s, PIDeque & v) { if (s.size_s() < 4) { @@ -555,7 +604,9 @@ inline PIByteArray & operator >>(PIByteArray & s, PIDeque & v) { return s; } -//! \relatesalso PIByteArray @brief Restore operator for PIVector2D of any compound type +//! \relatesalso PIByteArray +//! \~english Restore operator for PIVector2D of any compound type +//! \~russian Оператор извлечения для PIVector2D сложных типов template::value, int>::type = 0> inline PIByteArray & operator >>(PIByteArray & s, PIVector2D & v) { if (s.size_s() < 8) { @@ -575,6 +626,9 @@ inline PIByteArray & operator >>(PIByteArray & s, PIVector2D & v) { // other types +//! \relatesalso PIByteArray +//! \~english Store operator +//! \~russian Оператор сохранения template inline PIByteArray & operator <<(PIByteArray & s, const PIMap & v) { s << int(v.pim_index.size_s()); @@ -585,6 +639,9 @@ inline PIByteArray & operator <<(PIByteArray & s, const PIMap & v) { } +//! \relatesalso PIByteArray +//! \~english Restore operator +//! \~russian Оператор извлечения template inline PIByteArray & operator >>(PIByteArray & s, PIMap & v) { if (s.size_s() < 4) { @@ -620,16 +677,29 @@ inline PIByteArray & operator >>(PIByteArray & s, T & ) { } +//! \relatesalso PIByteArray +//! \~english Returns PIByteArray::hash() of "ba" +//! \~russian Возвращает PIByteArray::hash() от "ba" template<> inline uint piHash(const PIByteArray & ba) {return ba.hash();} + +//! \relatesalso PIByteArray +//! \~english Swap contents betwee "f" and "s" +//! \~russian Меняет содержимое массивов "f" и "s" template<> inline void piSwap(PIByteArray & f, PIByteArray & s) {f.swap(s);} +//! \relatesalso PIByteArray +//! \~english Store "value" to bytearray and returns it +//! \~russian Сохраняет "value" в байтовый массив и возвращает его template PIByteArray piSerialize(const T & value) { PIByteArray ret; ret << value; return ret; } +//! \relatesalso PIByteArray +//! \~english Restore type "T" from bytearray "data" and returns it +//! \~russian Извлекает тип "T" из байтового массива "data" и возвращает его template T piDeserialize(const PIByteArray & data) { T ret; if (!data.isEmpty()) { diff --git a/libs/main/core/pichar.cpp b/libs/main/core/pichar.cpp index 836caf17..0e06334a 100644 --- a/libs/main/core/pichar.cpp +++ b/libs/main/core/pichar.cpp @@ -1,6 +1,3 @@ -/*! @file pichar.h - * @brief Unicode char -*/ /* PIP - Platform Independent Primitives Unicode char @@ -45,11 +42,24 @@ char * __utf8name__ = 0; # endif #endif -/*! \class PIChar - * @brief Unicode char - * \details This class is wrapper around \c "uint". - * There are many contructors and information functions - */ +//! \addtogroup Core +//! \{ +//! \class PIChar pichar.h +//! +//! \~\brief +//! \~english %PIChar represents a single character +//! \~russian %PIChar представляет собой один символ строки +//! +//! \~\details +//! \~english +//! This class is wrapper around UTF16. +//! There are many contructors and information functions +//! +//! \~russian +//! %PIChar хранит один сивол в UTF16. Имеет много контрукторов, геттеров в различные +//! кодировки (системную, консольную, UTF8) и информационных функций. +//! +//! \} ushort charFromCodepage(const char * c, int size, const char * codepage, int * taken = 0) { @@ -324,7 +334,7 @@ char PIChar::toSystem() const { PIChar PIChar::toUpper() const { - if (isAscii()) return PIChar(toupper(ch)); + if (isAscii()) return PIChar((ushort)toupper(ch)); #ifdef PIP_ICU UChar c(0); UErrorCode e((UErrorCode)0); @@ -342,7 +352,7 @@ PIChar PIChar::toUpper() const { PIChar PIChar::toLower() const { - if (isAscii()) return PIChar(tolower(ch)); + if (isAscii()) return PIChar((ushort)tolower(ch)); #ifdef PIP_ICU UChar c(0); UErrorCode e((UErrorCode)0); diff --git a/libs/main/core/pichar.h b/libs/main/core/pichar.h index 9e123989..6eacd170 100644 --- a/libs/main/core/pichar.h +++ b/libs/main/core/pichar.h @@ -1,5 +1,7 @@ -/*! @file pichar.h - * @brief Unicode char +/*! \file pichar.h + * \~\brief + * \~english Single string character + * \~russian Один символ строки */ /* PIP - Platform Independent Primitives @@ -34,97 +36,134 @@ class PIP_EXPORT PIChar friend class PIString; friend PICout PIP_EXPORT operator <<(PICout s, const PIChar & v); public: - //! Contructs ascii symbol + //! \~english Contructs Ascii symbol + //! \~russian Создает символ Ascii PIChar(const char c) {ch = c; ch &= 0xFF;} - //! Contructs 2-bytes symbol + //! \~english Contructs 2-bytes symbol + //! \~russian Создает 2-байтный символ PIChar(const short c) {ch = c;} - //! Contructs 4-bytes symbol - PIChar(const int c) {ch = c;} + //! \~english Contructs ascii symbol + //! \~russian Создает символ Ascii + PIChar(const uchar c) {ch = c;} - //! Contructs ascii symbol - PIChar(const uchar c) {ch = c; ch &= 0xFF;} + //! \~english Contructs 2-bytes symbol + //! \~russian Создает 2-байтный символ + PIChar(const ushort c = 0) {ch = c;} - //! Contructs 2-bytes symbol - PIChar(const ushort c) {ch = c;} - - //! Default constructor. Contructs 4-bytes symbol - PIChar(const uint c = 0) {ch = c;} - - //! Contructs symbol from no more than 4 bytes of string + //! \~english Contructs symbol from system locale and no more than 4 bytes of string + //! \~russian Создает символ из системной локали не более 4 байт длины PIChar(const char * c, int * bytes = 0); - //! Copy operator + //! \~english Copy operator + //! \~russian Оператор присваивания PIChar & operator =(const char v) {ch = v; return *this;} - //! Compare operator + //! \~english Compare operator + //! \~russian Оператор сравнения bool operator ==(const PIChar & o) const; - //! Compare operator + //! \~english Compare operator + //! \~russian Оператор сравнения bool operator !=(const PIChar & o) const {return !(o == *this);} - //! Compare operator + //! \~english Compare operator + //! \~russian Оператор сравнения bool operator >(const PIChar & o) const; - //! Compare operator + //! \~english Compare operator + //! \~russian Оператор сравнения bool operator <(const PIChar & o) const; - //! Compare operator + //! \~english Compare operator + //! \~russian Оператор сравнения bool operator >=(const PIChar & o) const; - //! Compare operator + //! \~english Compare operator + //! \~russian Оператор сравнения bool operator <=(const PIChar & o) const; - //! Return \b true if symbol is digit ('0' to '9') + //! \~english Returns \b true if symbol is digit ('0' to '9') + //! \~russian Возвращает \b true если символ является bool isDigit() const; - //! Return \b true if symbol is HEX digit ('0' to '9', 'a' to 'f', 'A' to 'F') + //! \~english Returns \b true if symbol is HEX digit ('0' to '9', 'a' to 'f', 'A' to 'F') + //! \~russian Возвращает \b true если символ является HEX цифрой ('0' до '9', 'a' до 'f', 'A' до 'F') bool isHex() const; - //! Return \b true if symbol is drawable (without space) + //! \~english Returns \b true if symbol is drawable (without space) + //! \~russian Возвращает \b true если символ является графическим (исключая пробельные) bool isGraphical() const; - //! Return \b true if symbol is control byte (< 32 or 127) + //! \~english Returns \b true if symbol is control byte (< 32 or 127) + //! \~russian Возвращает \b true если символ является контрольным (< 32 or 127) bool isControl() const; - //! Return \b true if symbol is in lower case + //! \~english Returns \b true if symbol is in lower case + //! \~russian Возвращает \b true если символ в нижнем регистре bool isLower() const; - - //! Return \b true if symbol is in upper case + + //! \~english Returns \b true if symbol is in upper case + //! \~russian Возвращает \b true если символ в верхнем регистре bool isUpper() const; - //! Return \b true if symbol is printable (with space) + //! \~english Returns \b true if symbol is printable (with space) + //! \~russian Возвращает \b true если символ является печатным (включая пробельные) bool isPrint() const; - //! Return \b true if symbol is space or tab + //! \~english Returns \b true if symbol is space or tab + //! \~russian Возвращает \b true если символ является пробельным или табуляцией bool isSpace() const; - //! Return \b true if symbol is alphabetical letter + //! \~english Returns \b true if symbol is alphabetical letter + //! \~russian Возвращает \b true если символ является алфавитной буквой bool isAlpha() const; - //! Return \b true if symbol is ascii (< 128) + //! \~english Returns \b true if symbol is Ascii (< 128) + //! \~russian Возвращает \b true если символ является Ascii (< 128) bool isAscii() const; const wchar_t * toWCharPtr() const; - //! Return as "char * " string + //! \~english Returns as "char * " string + //! \~russian Возвращает символ как указатель на "char * " const char * toCharPtr() const; wchar_t toWChar() const; + + //! \~english Returns symbol as Ascii + //! \~russian Возвращает символ в Ascii char toAscii() const {return ch % 256;} + + //! \~english Returns symbol as console codepage + //! \~russian Возвращает символ в консольной кодировке char toConsole1Byte() const; + + //! \~english Returns symbol as system codepage + //! \~russian Возвращает символ в системной кодировке char toSystem() const; + ushort unicode16Code() const {return ch;} - //! Return symbol in upper case + //! \~english Returns symbol in upper case + //! \~russian Возвращает символ в нижнем регистре PIChar toUpper() const; - //! Return symbol in lower case + //! \~english Returns symbol in lower case + //! \~russian Возвращает символ в верхнем регистре PIChar toLower() const; + //! \~english Returns symbol from console codepage + //! \~russian Возвращает символ из консольной кодировки static PIChar fromConsole(char c); + + //! \~english Returns symbol from system codepage + //! \~russian Возвращает символ из системной кодировки static PIChar fromSystem(char c); + + //! \~english Returns symbol from UTF8 codepage + //! \~russian Возвращает символ из UTF8 кодировки static PIChar fromUTF8(const char * c); private: @@ -132,54 +171,86 @@ private: }; -//! Output operator to \a PICout +//! \relatesalso PIChar +//! \~english Output operator to \a PICout +//! \~russian Оператор вывода в \a PICout PICout PIP_EXPORT operator <<(PICout s, const PIChar & v); -//! Compare operator +//! \relatesalso PIChar +//! \~english Compare operator +//! \~russian Оператор сравнения inline bool operator ==(const char v, const PIChar & c) {return (PIChar(v) == c);} -//! Compare operator +//! \relatesalso PIChar +//! \~english Compare operator +//! \~russian Оператор сравнения inline bool operator >(const char v, const PIChar & c) {return (PIChar(v) > c);} -//! Compare operator +//! \relatesalso PIChar +//! \~english Compare operator +//! \~russian Оператор сравнения inline bool operator <(const char v, const PIChar & c) {return (PIChar(v) < c);} -//! Compare operator +//! \relatesalso PIChar +//! \~english Compare operator +//! \~russian Оператор сравнения inline bool operator >=(const char v, const PIChar & c) {return (PIChar(v) >= c);} -//! Compare operator +//! \relatesalso PIChar +//! \~english Compare operator +//! \~russian Оператор сравнения inline bool operator <=(const char v, const PIChar & c) {return (PIChar(v) <= c);} -//! Compare operator +//! \relatesalso PIChar +//! \~english Compare operator +//! \~russian Оператор сравнения inline bool operator ==(const char * v, const PIChar & c) {return (PIChar(v) == c);} -//! Compare operator +//! \relatesalso PIChar +//! \~english Compare operator +//! \~russian Оператор сравнения inline bool operator >(const char * v, const PIChar & c) {return (PIChar(v) > c);} -//! Compare operator +//! \relatesalso PIChar +//! \~english Compare operator +//! \~russian Оператор сравнения inline bool operator <(const char * v, const PIChar & c) {return (PIChar(v) < c);} -//! Compare operator +//! \relatesalso PIChar +//! \~english Compare operator +//! \~russian Оператор сравнения inline bool operator >=(const char * v, const PIChar & c) {return (PIChar(v) >= c);} -//! Compare operator +//! \relatesalso PIChar +//! \~english Compare operator +//! \~russian Оператор сравнения inline bool operator <=(const char * v, const PIChar & c) {return (PIChar(v) <= c);} -//! Compare operator -inline bool operator ==(const int v, const PIChar & c) {return (PIChar(v) == c);} +//! \relatesalso PIChar +//! \~english Compare operator +//! \~russian Оператор сравнения +inline bool operator ==(const int v, const PIChar & c) {return (PIChar((ushort)v) == c);} -//! Compare operator -inline bool operator >(const int v, const PIChar & c) {return (PIChar(v) > c);} +//! \relatesalso PIChar +//! \~english Compare operator +//! \~russian Оператор сравнения +inline bool operator >(const int v, const PIChar & c) {return (PIChar((ushort)v) > c);} -//! Compare operator -inline bool operator <(const int v, const PIChar & c) {return (PIChar(v) < c);} +//! \relatesalso PIChar +//! \~english Compare operator +//! \~russian Оператор сравнения +inline bool operator <(const int v, const PIChar & c) {return (PIChar((ushort)v) < c);} -//! Compare operator -inline bool operator >=(const int v, const PIChar & c) {return (PIChar(v) >= c);} +//! \relatesalso PIChar +//! \~english Compare operator +//! \~russian Оператор сравнения +inline bool operator >=(const int v, const PIChar & c) {return (PIChar((ushort)v) >= c);} -//! Compare operator -inline bool operator <=(const int v, const PIChar & c) {return (PIChar(v) <= c);} +//! \relatesalso PIChar +//! \~english Compare operator +//! \~russian Оператор сравнения +inline bool operator <=(const int v, const PIChar & c) {return (PIChar((ushort)v) <= c);} #endif // PICHAR_H diff --git a/libs/main/core/pichunkstream.cpp b/libs/main/core/pichunkstream.cpp index 9fc0a8a5..95eaa232 100644 --- a/libs/main/core/pichunkstream.cpp +++ b/libs/main/core/pichunkstream.cpp @@ -19,45 +19,77 @@ #include "pichunkstream.h" -/*! \class PIChunkStream - * @brief Class for binary serialization - * - * \section PIChunkStream_sec0 Synopsis - * This class provides very handly mechanism to store and restore values to and from - * \a PIByteArray. The main advantage of using this class is that your binary data - * become independent from order and collection of your values. - * - * \section PIChunkStream_sec1 Mechanism - * %PIChunkStream works with items called "chunk". Chunk is an ID and any value that - * can be stored and restored to \a PIByteArray with stream operators << and >>. - * You can place chunks to stream and read chunks from stream. - * - * To construct %PIChunkStream for writing data use any constructor. Empty constructor - * creates internal empty buffer that can be accessed by function \a data(). - * Non-empty constructor works with given byte array. - * - * To read chunks from byte array use function \a read() that returns ID of - * next chunk. Then you can get value of this chunk with function \a getData(), - * but you should definitely know type of this value. You can read from byte array - * while \a atEnd() if false. - * - * \section PIChunkStream_sec2 Examples - * - * Using simple operator and cascade serialization: - * - * Prepare your structs to work with %PIChunkStream: - * \snippet pichunkstream.cpp struct - * Old-style writing to %PIChunkStream: - * \snippet pichunkstream.cpp write - * Fastest reading from %PIChunkStream: - * \snippet pichunkstream.cpp read - * - * And next code show how to serialize your struct with %PIChunkStream: - * \snippet pichunkstream.cpp write_new - * - * ... and deserialize: - * \snippet pichunkstream.cpp read_new - */ +//! \addtogroup Core +//! \{ +//! \class PIChunkStream pichunkstream.h +//! \brief +//! \~english Class for binary de/serialization +//! \~russian Класс для бинарной де/сериализации +//! +//! \~english \section PIChunkStream_sec0 Synopsis +//! \~russian \section PIChunkStream_sec0 Краткий обзор +//! \~english +//! This class provides very handly mechanism to store and restore values to and from +//! \a PIByteArray. The main advantage of using this class is that your binary data +//! become independent from order and collection of your values. +//! +//! \~russian +//! Этот класс предоставляет очень удобный механизм для сохранения и извлечения значений +//! в/из \a PIByteArray. Главным плюсом является то, что данные не будут зависеть от порядка +//! и наличия значений. +//! +//! \~english \section PIChunkStream_sec1 Mechanism +//! \~russian \section PIChunkStream_sec1 Механизм +//! \~english +//! %PIChunkStream works with items called "chunk". Chunk is an ID, size and any value that +//! can be stored and restored to/from %PIChunkStream with stream operators << and >>. +//! +//! To construct %PIChunkStream for writing data use any non-default constructor. Empty constructor +//! creates internal buffer that can be accessed by function \a data(). +//! Non-empty constructor works with given byte array. +//! +//! To read chunks from byte array use function \a read() that returns ID of +//! readed chunk. Then you can get value of this chunk with functions \a getData() or \a get(), +//! but you should definitely know type of this value. You can read from byte array +//! while \a atEnd() if false. +//! +//! \~russian +//! %PIChunkStream работает с элементами под названием "чанк". Чанк имеет ID, размер и значение, +//! и может быть записан или прочитан в/из %PIChunkStream с помощью операторов << и >>. +//! +//! Для создания потока на запись используется любой не-умолчальный конструктор. Пустой конструктор +//! создает внутренний буфер, который можно получить с помощью метода \a data(). +//! Непустой конструктор работает с переданным байтовым массивом. +//! +//! Для чтения чанков из байтового массива используется метод \a read(), который возвращает +//! ID прочитанного чанка. Получить значение этого чанка далее можно с помощью методов \a getData() или get(), +//! но тип значения должен быть известен. Читать из потока можно пока метод \a atEnd() возвращает ложь. +//! +//! \~english \section PIChunkStream_sec2 Examples +//! \~russian \section PIChunkStream_sec2 Пример +//! +//! \~english Using simple operator and cascade serialization: +//! \~russian Использование простого оператора и каскадная сериализация: +//! +//! \~english Prepare your structs to work with %PIChunkStream: +//! \~russian Подготовка своей структуры для работы с %PIChunkStream: +//! \~\snippet pichunkstream.cpp struct +//! \~english Old-style writing to %PIChunkStream: +//! \~russian Старый стиль использования %PIChunkStream: +//! \~\snippet pichunkstream.cpp write +//! \~english Fastest reading from %PIChunkStream: +//! \~russian Самое быстрое чтение из %PIChunkStream: +//! \~\snippet pichunkstream.cpp read +//! +//! \~english And next code show how to serialize your struct with %PIChunkStream: +//! \~russian Следующий код показывает, как сериализовать свою структуру в %PIChunkStream: +//! \~\snippet pichunkstream.cpp write_new +//! +//! \~english ... and deserialize: +//! \~russian ... в десериализовать: +//! \~\snippet pichunkstream.cpp read_new +//! +//! \} void PIChunkStream::setSource(const PIByteArray & data) { diff --git a/libs/main/core/pichunkstream.h b/libs/main/core/pichunkstream.h index edfd0591..7f1fa2ce 100644 --- a/libs/main/core/pichunkstream.h +++ b/libs/main/core/pichunkstream.h @@ -1,5 +1,7 @@ -/*! @file pichunkstream.h - * @brief Binary markup serializator +/*! \file pichunkstream.h + * \~\brief + * \~english Binary markup de/serializator stream + * \~russian Бинарный поток для де/сериализации с разметкой */ /* PIP - Platform Independent Primitives @@ -30,20 +32,27 @@ class PIP_EXPORT PIChunkStream { public: + //! \~english //! Version of data packing. Read-access %PIChunkStream automatic detect version, but write-access //! %PIChunkStream by default write in new version, be careful! + //! \~russian + //! Версия хранения данных. %PIChunkStream на чтение автоматически определяет версию, но для записи + //! использует по умолчанию новую, осторожно! enum Version { - Version_1 /*! First, old version */, - Version_2 /*! Second, more optimized version */ = 2, + Version_1 /*! \~english First, old version \~russian Первая, старая версия */, + Version_2 /*! \~english Second, more optimized version \~russian Вторая, более оптимизированная версия */ = 2, }; - //! Contructs stream for read from "data" + //! \~english Contructs stream for read from "data" + //! \~russian Создает поток на чтение из "data" PIChunkStream(const PIByteArray & data): version_(Version_2) {setSource(data);} - //! Contructs stream for read or write to/from "data", or empty stream for write + //! \~english Contructs stream for read or write to/from "data", or empty stream for write if "data" = 0 + //! \~russian Создает поток на чтение или запись из/в "data", или пустой поток на запись если "data" = 0 PIChunkStream(PIByteArray * data = 0, Version v = Version_2): version_(v) {setSource(data);} - //! Contructs empty stream for write with version \"v\" + //! \~english Contructs empty stream for write with version \"v\" + //! \~russian Создает пустой поток на запись с версией \"v\" PIChunkStream(Version v): version_(v) {setSource(0);} ~PIChunkStream(); @@ -61,48 +70,64 @@ public: const T & data; }; - //! Returns chunk with ID "id" and value "data" for write to stream + //! \~english Returns chunk with ID "id" and value "data" for write to stream + //! \~russian Возвращает чанк с ID "id" и значением "data" для записи в поток template static ChunkConst chunk(int id, const T & data) {return ChunkConst(id, data);} - //! Add data to this chunk strean with ID "id" and value "data" + //! \~english Add to this stream chunk with ID "id" and value "data" + //! \~russian Добавляет в этот поток чанк с ID "id" и значением "data" template PIChunkStream & add(int id, const T & data) {*this << ChunkConst(id, data); return *this;} + //! \~english //! Extract %PIByteArray from "data" and set it current stream. //! If "read_all" then call \a readAll() after extract. //! Returns if has data to read. + //! \~russian + //! Извлекает %PIByteArray из "data" и инициализирует им поток. + //! Если указан "read_all", то вызывает \a readAll() после инициализации. + //! Возвращает если ли данные для чтения. bool extract(PIByteArray & data, bool read_all = false); void setSource(const PIByteArray & data); void setSource(PIByteArray * data); - //! Returns internal buffer with written data + //! \~english Returns internal buffer with written data + //! \~russian Возвращает внутренний буфер с записанными данными PIByteArray data() const; - //! Returns if there is end of stream + //! \~english Returns if there is end of stream + //! \~russian Возвращает достигнут ли конец потока bool atEnd() const {return data_->size_s() <= 1;} - //! Returns stream version + //! \~english Returns stream version + //! \~russian Возвращает версию потока Version version() const {return (Version)version_;} - //! Read one chunk from stream and returns its ID + //! \~english Read one chunk from stream and returns its ID + //! \~russian Читает один чанк из потока и возвращает его ID int read(); - //! Read all chunks from stream. This function just index input data + //! \~english Read all chunks from stream. This function just index input data + //! \~russian Читает все чанки из потока. Данный метод лишь индексирует данные void readAll(); - //! Returns last readed chunk ID + //! \~english Returns last readed chunk ID + //! \~russian Возвращает ID последнего прочитанного чанка int getID() {return last_id;} - //! Returns value of last readed chunk + //! \~english Returns value of last readed chunk + //! \~russian Возвращает значение последнего прочитанного чанка template T getData() const {T ret; PIByteArray s(last_data); s >> ret; return ret;} - //! Place value of last readed chunk into \"v\" + //! \~english Place value of last readed chunk into \"v\" + //! \~russian Записывает значение последнего прочитанного чанка в \"v\" template void get(T & v) const {v = getData();} - //! Place value of chunk with id \"id\" into \"v\". You should call \a readAll() before using this function! + //! \~english Place value of chunk with ID \"id\" into \"v\". You should call \a readAll() before using this function! + //! \~russian Записывает значение чанка с ID \"id\" в \"v\". Необходимо вызвать \a readAll() перед использованием этого метода! template const PIChunkStream & get(int id, T & v) const { CacheEntry pos = data_map.value(id); @@ -113,7 +138,8 @@ public: return *this; } - //! Replace value of chunk with ID \"id\" to \"v\". You should call \a readAll() before using this function! + //! \~english Replace value of chunk with ID \"id\" to \"v\". You should call \a readAll() before using this function! + //! \~russian Заменяет значение чанка с ID \"id\" на \"v\". Необходимо вызвать \a readAll() перед использованием этого метода! template PIChunkStream & set(int id, const T & v) { PIByteArray ba; diff --git a/libs/main/core/picli.cpp b/libs/main/core/picli.cpp index 67b15d38..3c85c040 100644 --- a/libs/main/core/picli.cpp +++ b/libs/main/core/picli.cpp @@ -21,16 +21,32 @@ #include "pisysteminfo.h" -/*! \class PICLI - * @brief Command-line arguments parser - * - * \section PICLI_sec0 Synopsis - * This class provide handy parsing of command-line arguments. First you should add - * arguments to PICLI with function \a addArgument(). Then you can check if there - * is some argument in application command-line with function \a hasArgument(); - * \section PICLI_sec1 Example - * \snippet picli.cpp main - */ +//! \addtogroup Core +//! \{ +//! \class PICLI picli.h +//! \~\brief +//! \~english Command-Line parser +//! \~russian Парсер командной строки +//! +//! \~english \section PICLI_sec0 Synopsis +//! \~russian \section PICLI_sec0 Краткий обзор +//! \~english +//! This class provide handy parsing of command-line arguments. First you should add +//! arguments to %PICLI with function \a addArgument(). Then you can check if there +//! is some argument in application command-line with function \a hasArgument(), +//! or obtain argument value by \a argumentValue(). +//! +//! \~russian +//! Этот класс предоставляет удобный механизм для разбора аргументов командной строки. +//! Сперва необходимо добавить аргументы в %PICLI с помощью методов \a addArgument(). +//! Далее можно проверять аргументы на наличие в командной строке методом \a hasArgument(), +//! а также получить их значения при помощи \a argumentValue(). +//! +//! \~english \section PICLI_sec1 Example +//! \~russian \section PICLI_sec0 Пример +//! \~\snippet picli.cpp main +//! +//! /} PICLI::PICLI(int argc, char * argv[]) { diff --git a/libs/main/core/picli.h b/libs/main/core/picli.h index 0908be78..c2792877 100644 --- a/libs/main/core/picli.h +++ b/libs/main/core/picli.h @@ -1,5 +1,7 @@ -/*! @file picli.h - * @brief Command-Line parser +/*! \file picli.h + * \~\brief + * \~english Command-Line parser + * \~russian Парсер командной строки */ /* PIP - Platform Independent Primitives @@ -30,39 +32,54 @@ class PIP_EXPORT PICLI: public PIObject PIOBJECT_SUBCLASS(PICLI, PIObject) public: - //! Constructor + //! \~english Constructor + //! \~russian Конструктор PICLI(int argc, char * argv[]); - //! Add argument with name "name", short key = name first letter, full key = name + //! \~english Add argument with name "name", short key = name first letter and full key = name + //! \~russian Добавляет аргумент с именем "name", коротким ключом = первой букве имени и полным ключом = имени void addArgument(const PIString & name, bool value = false) {_args << Argument(name, name[0], name, value); needParse = true;} - //! Add argument with name "name", short key = "shortKey", full key = name + //! \~english Add argument with name "name", short key = "shortKey" and full key = name + //! \~russian Добавляет аргумент с именем "name", коротким ключом = "shortKey" и полным ключом = имени void addArgument(const PIString & name, const PIChar & shortKey, bool value = false) {_args << Argument(name, shortKey, name, value); needParse = true;} - //! Add argument with name "name", short key = "shortKey", full key = name + //! \~english Add argument with name "name", short key = "shortKey" and full key = name + //! \~russian Добавляет аргумент с именем "name", коротким ключом = "shortKey" и полным ключом = имени void addArgument(const PIString & name, const char * shortKey, bool value = false) {_args << Argument(name, PIChar(shortKey), name, value); needParse = true;} - //! Add argument with name "name", short key = "shortKey", full key = "fullKey" + //! \~english Add argument with name "name", short key = "shortKey" and full key = "fullKey" + //! \~russian Добавляет аргумент с именем "name", коротким ключом = "shortKey" и полным ключом = "fullKey" void addArgument(const PIString & name, const PIChar & shortKey, const PIString & fullKey, bool value = false) {_args << Argument(name, shortKey, fullKey, value); needParse = true;} - //! Add argument with name "name", short key = "shortKey", full key = "fullKey" + //! \~english Add argument with name "name", short key = "shortKey" and full key = "fullKey" + //! \~russian Добавляет аргумент с именем "name", коротким ключом = "shortKey" и полным ключом = "fullKey" void addArgument(const PIString & name, const char * shortKey, const PIString & fullKey, bool value = false) {_args << Argument(name, PIChar(shortKey), fullKey, value); needParse = true;} - //! Returns unparsed command-line argument by index "index". Index 0 is program execute command. + //! \~english Returns unparsed command-line argument by index "index". Index 0 is program execute command + //! \~russian Возвращает исходный аргумент командной строки по индексу "index". Индекс 0 это команда вызова программы PIString rawArgument(int index) {parse(); return _args_raw[index];} PIString mandatoryArgument(int index) {parse(); return _args_mand[index];} PIString optionalArgument(int index) {parse(); return _args_opt[index];} - //! Returns unparsed command-line arguments + //! \~english Returns unparsed command-line arguments + //! \~russian Возвращает исходные аргументы командной строки const PIStringList & rawArguments() {parse(); return _args_raw;} const PIStringList & mandatoryArguments() {parse(); return _args_mand;} const PIStringList & optionalArguments() {parse(); return _args_opt;} - //! Returns program execute command without arguments + //! \~english Returns program execute command without arguments + //! \~russian Возвращает команду вызова программы без аргументов PIString programCommand() {parse(); return _args_raw.size() > 0 ? _args_raw.front() : PIString();} + + //! \~english Returns if argument "name" found + //! \~russian Возвращает найден ли аргумент "name" bool hasArgument(const PIString & name) {parse(); piForeach (Argument & i, _args) if (i.name == name && i.found) return true; return false;} + + //! \~english Returns argument "name" value, or empty string if this is no value + //! \~russian Возвращает значение аргумента "name" или пустую строку, если значения нет PIString argumentValue(const PIString & name) {parse(); piForeach (Argument &i, _args) if (i.name == name && i.found) return i.value; return PIString();} PIString argumentShortKey(const PIString & name) {piForeach (Argument &i, _args) if (i.name == name) return i.short_key; return PIString();} PIString argumentFullKey(const PIString & name) {piForeach (Argument &i, _args) if (i.name == name) return i.full_key; return PIString();} diff --git a/libs/main/core/picollection.cpp b/libs/main/core/picollection.cpp index 13790c95..2607249a 100644 --- a/libs/main/core/picollection.cpp +++ b/libs/main/core/picollection.cpp @@ -20,15 +20,28 @@ #include "picollection.h" -/** \class PICollection - * @brief Interface to discover element groups - * \details - * \section PICollection_sec0 Synopsis - * This class has only static functions so no need to create instance of the - * %PICollection. This class provide macros to add some classes or existing - * objects to global collection and access to them from any place of the code. - * \snippet picollection.cpp main - * */ +//! \addtogroup Core +//! \{ +//! \~\class PICollection picollection.h +//! \~\brief +//! \~english Helper to collect and retrieve classes to groups +//! \~russian Помощник для создания и получения классов в группы +//! +//! \~\details +//! \~english \section PICollection_sec0 Synopsis +//! \~russian \section PICollection_sec0 Краткий обзор +//! \~english +//! This class has only static functions so no need to create instance of the +//! %PICollection. This class provide macros to add some classes or existing +//! objects to global collection and access to them from any place of the code. +//! +//! \~russian +//! Этот класс предоставляет статические методы, поэтому не нужно создавать +//! его экземпляр. Имеется несколько макросов для добавления классов или существующих +//! объектов в глобальные группы. Затем можно получить их список в любом месте программы. +//! \~\snippet picollection.cpp main +//! +//! \} PIStringList PICollection::groups() { @@ -77,7 +90,8 @@ PIVector & PICollection::_groups() { PICollection::CollectionAdder::CollectionAdder(const PIString & group, const PIObject * element, const PIString & name, bool own) { if (!element) return; - const_cast(element)->setName(name); + if (name.isNotEmpty()) + const_cast(element)->setName(name); bool added = PICollection::addToGroup(group, element); if (!added && own) delete element; diff --git a/libs/main/core/picollection.h b/libs/main/core/picollection.h index 33058185..29310def 100644 --- a/libs/main/core/picollection.h +++ b/libs/main/core/picollection.h @@ -1,5 +1,7 @@ -/*! @file picollection.h - * @brief Custom elements collection +/*! \file picollection.h + * \~\brief + * \~english Custom elements collection + * \~russian */ /* PIP - Platform Independent Primitives @@ -27,32 +29,70 @@ #ifdef DOXYGEN -/** @brief Add existing element "object" in group with name "group" - * \relatesalso PICollection - * \details If there is no group with name "group" it will be created. - * Only one element of the class "object" can be in group "group". If - * this is already exists nothing be happens. \n "object" should to - * be pointer to object based on PIObject. */ +//! \~\relatesalso PICollection +//! \~\brief +//! \~english Add existing element "object" in group with name "group" +//! \~russian Добавляет существующий элемент "object" в группу с именем "group" +//! \~\details +//! \~english +//! If this is no group with name "group" it will be created. +//! Only one element of the class "object" can be in group. If +//! this is already exists nothing be happens. \n "object" should to +//! be pointer to object based on \a PIObject. +//! \~russian +//! Если такой группы нет, она создается. В каждой группе может присутствовать +//! только один элемент класса объекта "object". Если такой элемент уже есть, +//! то ничего не изменится. \n "object" должен быть наследником \a PIObject. # define ADD_TO_COLLECTION(group, object) -/** @brief Add new element of class "class" in group with name "group" - * \relatesalso PICollection - * \details If there is no group with name "group" it will be created. - * Only one element of the class "class" can be in group "group". If - * this is already exists nothing be happens. \n "class" should to - * be name of the any class based on PIObject. */ +//! \~\relatesalso PICollection +//! \~\brief +//! \~english Add existing element "object" in group with name "group" and set its name to "name" +//! \~russian Добавляет существующий элемент "object" в группу с именем "group" и присваивает объекту имя "name" +//! \~\details +//! \~english +//! Similar to \a ADD_TO_COLLECTION(group, object) but set object name to "name" +//! \~russian +//! Аналогично \a ADD_TO_COLLECTION(group, object), но присваивает имя объекту "name" +# define ADD_TO_COLLECTION_WITH_NAME(group, object, name) + +//! \~\relatesalso PICollection +//! \~\brief +//! \~english Add new element of class "class" in group with name "group" +//! \~russian Добавляет новый элемент класса "class" в группу с именем "group" +//! \~\details +//! \~english +//! If this is no group with name "group" it will be created. +//! Only one element of the class "class" can be in group. If +//! this is already exists nothing be happens. \n "class" should to +//! be name of the any class based on PIObject. +//! \~russian +//! Если такой группы нет, она создается. В каждой группе может присутствовать +//! только один элемент класса "class". Если такой элемент уже есть, +//! то ничего не изменится. \n "class" должен быть любым классом, наследным от \a PIObject. # define ADD_NEW_TO_COLLECTION(group, class) +//! \~\relatesalso PICollection +//! \~\brief +//! \~english Add new element of class "class" in group with name "group" and set its name to "name" +//! \~russian Добавляет новый элемент класса "class" в группу с именем "group" и присваивает объекту имя "name" +//! \~\details +//! \~english +//! Similar to \a ADD_NEW_TO_COLLECTION(group, class) but set object name to "name" +//! \~russian +//! Аналогично \a ADD_NEW_TO_COLLECTION(group, class), но присваивает имя объекту "name" +# define ADD_NEW_TO_COLLECTION_WITH_NAME(group, class, name) + #else # define ADD_TO_COLLECTION(group, object) \ - static PICollection::CollectionAdder _PIP_ADD_COUNTER(_collection_adder_)(#group, object, false); + static PICollection::CollectionAdder _PIP_ADD_COUNTER(_collection_adder_)(#group, object, "", false); # define ADD_TO_COLLECTION_WITH_NAME(group, object, name) \ static PICollection::CollectionAdder _PIP_ADD_COUNTER(_collection_adder_)(#group, object, #name, false); # define ADD_NEW_TO_COLLECTION(group, class) \ - static PICollection::CollectionAdder _PIP_ADD_COUNTER(_collection_adder_)(#group, new class(), true); + static PICollection::CollectionAdder _PIP_ADD_COUNTER(_collection_adder_)(#group, new class(), "", true); # define ADD_NEW_TO_COLLECTION_WITH_NAME(group, class, name) \ static PICollection::CollectionAdder _PIP_ADD_COUNTER(_collection_adder_)(#group, new class(), #name, true); @@ -65,10 +105,12 @@ class PIP_EXPORT PICollection public: PICollection() {;} - //! @brief Returns all existing groups by their names + //! \~english Returns all existing groups by their names + //! \~russian Возвращает имена всех групп static PIStringList groups(); - //! @brief Returns all elements of group "group" + //! \~english Returns all elements of group "group" + //! \~russian Возвращает все элементы группы "group" static PIVector groupElements(const PIString & group); static bool addToGroup(const PIString & group, const PIObject * element); diff --git a/libs/main/core/picoremodule.h b/libs/main/core/picoremodule.h index de313302..9ee6bcd5 100644 --- a/libs/main/core/picoremodule.h +++ b/libs/main/core/picoremodule.h @@ -16,6 +16,31 @@ You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ +/** \defgroup Core + * \~\brief + * \~english This module contains basic functionality. + * \~russian Модуль обеспечивает базовую функциональность. + * + * \~\details + * Scope | Use + * ----- | ------- + * C++ | #include + * CMake | PIP + * + * \~english + * These files provides platform abstraction, useful macros, methods and classes + * + * \~russian + * Эти файлы обеспечивают абстракцию операционной системы, полезные макросы, методы и классы + * + * \~\authors + * \~english + * Ivan Pelipenko peri4ko@yandex.ru; + * Andrey Bychkov work.a.b@yandex.ru; + * \~russian + * Иван Пелипенко peri4ko@yandex.ru; + * Андрей Бычков work.a.b@yandex.ru; +*/ #ifndef PICOREMODULE_H #define PICOREMODULE_H diff --git a/libs/main/core/picout.cpp b/libs/main/core/picout.cpp index edc61909..560c44e1 100644 --- a/libs/main/core/picout.cpp +++ b/libs/main/core/picout.cpp @@ -30,6 +30,82 @@ #endif +//! \addtogroup Core +//! \{ +//! \~\class PICout picout.h +//! \~\brief +//! \~english Universal output to console class +//! \~russian Универсальный вывод в консоль +//! +//! \~english \section PICout_sec0 Synopsis +//! \~russian \section PICout_sec0 Краткий обзор +//! \~english +//! This class provide many stream operators for output with some features. +//! Output to %PICout is thread-sequential, i.e. doesn`t mixed from parallel +//! threads. +//! +//! \~russian +//! Данный класс предоставляет множество операторов для вывода в консоль. +//! Вывод в %PICout потоково-последовательный, т.е. не смешивается из параллельных +//! потоков. +//! +//! \~english \section PICout_sec1 Features +//! \~russian \section PICout_sec1 Особенности +//! \~english +//! * support text formatting (color, style) +//! * insertion spaces between entries +//! * insertion new line at the end of output +//! * strings are quoted +//! * custom output operator can be easily written +//! * can outpur to console, internal buffer or both +//! +//! \~russian +//! * поддержка форматирования (цвет, стиль) +//! * вставка пробелов между выводами +//! * вставка новой строки после последнего вывода +//! * строки обрамляются кавычками +//! * легко создавать сови операторы вывода +//! * может выводить в консоль, внутренний буфер или в оба места +//! +//! \~english \section PICout_ex0 Usage +//! \~russian \section PICout_ex0 Использование +//! \~\snippet picout.cpp 0 +//! +//! \~english \section PICout_ex1 Writing your own output operator +//! \~russian \section PICout_ex1 Создание своего оператора вывода +//! \~\snippet picout.cpp own +//! +//! \} + + +//! \addtogroup Core +//! \{ +//! \~\class PICout::Notifier picout.h +//! \~\brief +//! \~english Class for emit notifications of PICout +//! \~russian Класс для посылки событий от PICout +//! +//! \~english \section PICout_sec0 Synopsis +//! \~russian \section PICout_sec0 Краткий обзор +//! \~english +//! This class used as PICout events emitter. When +//! PICout constructs with external PIString* buffer +//! and some ID, last copy of this PICout on delete +//! emit event "finished()" on object Notifier::object(). +//! Sample: +//! +//! \~russian +//! Этот класс используется как источник событий PICout. +//! Когда PICout сконструирован с внешним буфером PIString* +//! и каким-то ID, последняя копия этого PICout при уничтожении +//! посылает событие "finished()" у объекта Notifier::object(). +//! Пример: +//! +//! \~\snippet picout.cpp notifier +//! +//! \} + + class NotifierObject: public PIObject { PIOBJECT(NotifierObject) public: @@ -204,22 +280,65 @@ PICout PICout::operator <<(const PICoutAction v) { } +PICout PICout::operator <<(const PICoutManipulators::PICoutFormat v) { + switch (v) { + case PICoutManipulators::Bin: cnb_ = 2; break; + case PICoutManipulators::Oct: cnb_ = 8; break; + case PICoutManipulators::Dec: cnb_ = 10; break; + case PICoutManipulators::Hex: cnb_ = 16; break; + default: applyFormat(v); + }; + return *this; +} + + +PICout PICout::operator <<(const PIFlags & v) { + if (v[PICoutManipulators::Bin]) cnb_ = 2; + if (v[PICoutManipulators::Oct]) cnb_ = 8; + if (v[PICoutManipulators::Dec]) cnb_ = 10; + if (v[PICoutManipulators::Hex]) cnb_ = 16; + if (v[PICoutManipulators::Bold]) applyFormat(PICoutManipulators::Bold); + if (v[PICoutManipulators::Faint]) applyFormat(PICoutManipulators::Faint); + if (v[PICoutManipulators::Italic]) applyFormat(PICoutManipulators::Italic); + if (v[PICoutManipulators::Underline]) applyFormat(PICoutManipulators::Underline); + if (v[PICoutManipulators::Blink]) applyFormat(PICoutManipulators::Blink); + if (v[PICoutManipulators::Black]) applyFormat(PICoutManipulators::Black); + if (v[PICoutManipulators::Red]) applyFormat(PICoutManipulators::Red); + if (v[PICoutManipulators::Green]) applyFormat(PICoutManipulators::Green); + if (v[PICoutManipulators::Blue]) applyFormat(PICoutManipulators::Blue); + if (v[PICoutManipulators::Yellow]) applyFormat(PICoutManipulators::Yellow); + if (v[PICoutManipulators::Magenta]) applyFormat(PICoutManipulators::Magenta); + if (v[PICoutManipulators::Cyan]) applyFormat(PICoutManipulators::Cyan); + if (v[PICoutManipulators::White]) applyFormat(PICoutManipulators::White); + if (v[PICoutManipulators::BackBlack]) applyFormat(PICoutManipulators::BackBlack); + if (v[PICoutManipulators::BackRed]) applyFormat(PICoutManipulators::BackRed); + if (v[PICoutManipulators::BackGreen]) applyFormat(PICoutManipulators::BackGreen); + if (v[PICoutManipulators::BackBlue]) applyFormat(PICoutManipulators::BackBlue); + if (v[PICoutManipulators::BackYellow]) applyFormat(PICoutManipulators::BackYellow); + if (v[PICoutManipulators::BackMagenta]) applyFormat(PICoutManipulators::BackMagenta); + if (v[PICoutManipulators::BackCyan]) applyFormat(PICoutManipulators::BackCyan); + if (v[PICoutManipulators::BackWhite]) applyFormat(PICoutManipulators::BackWhite); + if (v[PICoutManipulators::Default]) applyFormat(PICoutManipulators::Default); + return *this; +} + + #define PICOUTTOTARGET(v) { \ if (buffer_) {\ - (*buffer_) << (v);\ + (*buffer_) << (v);\ } else {\ - if (PICout::isOutputDeviceActive(PICout::StdOut)) std::cout << (v);\ - if (PICout::isOutputDeviceActive(PICout::Buffer)) PICout::__string__() << (v);\ + if (PICout::isOutputDeviceActive(PICout::StdOut)) std::cout << (v);\ + if (PICout::isOutputDeviceActive(PICout::Buffer)) PICout::__string__() << (v);\ }\ -} + } #define PICOUTTOTARGETS(v) { \ if (buffer_) {\ - (*buffer_) << (v);\ + (*buffer_) << (v);\ } else {\ - if (PICout::isOutputDeviceActive(PICout::StdOut)) std::cout << (v).dataConsole();\ - if (PICout::isOutputDeviceActive(PICout::Buffer)) PICout::__string__() << (v);\ + if (PICout::isOutputDeviceActive(PICout::StdOut)) std::cout << (v).dataConsole();\ + if (PICout::isOutputDeviceActive(PICout::Buffer)) PICout::__string__() << (v);\ }\ -} + } #define PINUMERICCOUT if (cnb_ == 10) PICOUTTOTARGET(v) else PICOUTTOTARGETS(PIString::fromNumber(v, cnb_)) @@ -273,10 +392,10 @@ PICout PICout::operator <<(const PICoutSpecialChar v) { switch (v) { case Null: if (buffer_) { - (*buffer_) << PIChar(0); + (*buffer_) << PIChar(); } else { if (isOutputDeviceActive(StdOut)) std::cout << char(0); - if (isOutputDeviceActive(Buffer)) PICout::__string__() << PIChar(0); + if (isOutputDeviceActive(Buffer)) PICout::__string__() << PIChar(); } break; case NewLine: @@ -346,6 +465,12 @@ PICout & PICout::restoreControl() { #undef PICOUTTOTARGET #undef PINUMERICCOUT +//! \details +//! \~english +//! If it is not a first output and control \a AddSpaces is set space character is put +//! \~russian +//! Добавляет пробел если это не первый вывод и установлен флаг \a AddSpaces +//! \~\sa \a quote(), \a newLine() PICout & PICout::space() { if (!act_) return *this; if (!fo_ && co_[AddSpaces]) { @@ -360,6 +485,12 @@ PICout & PICout::space() { return *this; } +//! \details +//! \~english +//! If control \a AddQuotes is set quote character is put +//! \~russian +//! Добавляет кавычки если установлен флаг \a AddQuotes +//! \~\sa \a space(), \a newLine() PICout & PICout::quote() { if (!act_) return *this; if (co_[AddQuotes]) { @@ -374,6 +505,12 @@ PICout & PICout::quote() { return *this; } +//! \details +//! \~english +//! If control \a AddNewLine is set new line character is put +//! \~russian +//! Добавляет новую строку если установлен флаг \a AddNewLine +//! \~\sa \a space(), \a quote() PICout & PICout::newLine() { if (!act_) return *this; if (co_[AddNewLine]) { diff --git a/libs/main/core/picout.h b/libs/main/core/picout.h index 12ede0eb..eed2f1ff 100644 --- a/libs/main/core/picout.h +++ b/libs/main/core/picout.h @@ -1,5 +1,7 @@ -/*! @file picout.h - * @brief Universal output to console class +/*! \file picout.h + * \~\brief + * \~english Universal output to console class + * \~russian Универсальный вывод в консоль */ /* PIP - Platform Independent Primitives @@ -27,10 +29,13 @@ #ifdef DOXYGEN -//! @brief Macro used for conditional (piDebug) output to PICout +//! \~english Macro used for conditional (piDebug) output to PICout +//! \~russian Макрос для условного (piDebug) вывода в PICout # define piCout -//! \relatesalso PIObject @brief Macro used for conditional (piDebug and PIObject::debug()) output to PICout for subclasses of PIObject +//! \relatesalso PIObject +//! \~english Macro used for conditional (piDebug && PIObject::debug()) output to PICout for subclasses of PIObject +//! \~russian Макрос для условного (piDebug && PIObject::debug()) вывода в PICout для наследников PIObject # define piCoutObj #else @@ -42,106 +47,97 @@ class PIObject; -//! @brief Namespace contains enums controlled PICout +//! \relatesalso PICout +//! \~english Namespace contains enums that controls PICout +//! \~russian Пространство имен содержит перечисления для контроля PICout namespace PICoutManipulators { - //! @brief Enum contains special characters + //! \~english Enum contains special characters + //! \~russian Перечисление со спецсимволами enum PICoutSpecialChar { - Null /*! Null-character, '\\0' */, - NewLine /*! New line character, '\\n' */, - Tab /*! Tab character, '\\t' */, - Esc /*! Escape character, '\\e' */, - Quote /*! Quote character, '"' */ + Null /*! \~english Null-character, '\\0' \~russian Нулевой символ, '\\0' */, + NewLine /*! \~english New line character, '\\n' \~russian Новая строка, '\\n' */, + Tab /*! \~english Tab character, '\\t' \~russian Табуляция, '\\t' */, + Esc /*! \~english Escape character, '\\e' \~russian Esc-символ, '\\e' */, + Quote /*! \~english Quote character, '"' \~russian Кавычки, '"' */ }; - //! @brief Enum contains immediate action + //! \~english Enum contains immediate action + //! \~russian Перечисление с немедленными действиями enum PICoutAction { - Flush /*! Flush the output */, - Backspace /*! Remove last symbol */, - ShowCursor /*! Show cursor */, - HideCursor /*! Hide cursor */, - ClearLine /*! Clear current line */, - ClearScreen /*! Clear the screen */, - SaveContol /*! Save control flags, equivalent to \a saveControl() */, - RestoreControl /*! Restore control flags, equivalent to \a restoreControl() */ + Flush /*! \~english Flush the output \~russian Обновить вывод */, + Backspace /*! \~english Remove last symbol \~russian Удалить последний символ */, + ShowCursor /*! \~english Show cursor \~russian Показать курсор */, + HideCursor /*! \~english Hide cursor \~russian Скрыть курсор */, + ClearLine /*! \~english Clear current line \~russian Очистить текущую строку */, + ClearScreen /*! \~english Clear the screen \~russian Очистить экран */, + SaveContol /*! \~english Save control flags, equivalent to \a saveControl() \~russian Сохранить флаги, аналогично \a saveControl() */, + RestoreControl /*! \~english Restore control flags, equivalent to \a restoreControl() \~russian Восстановить флаги, аналогично \a restoreControl() */ }; - //! @brief Enum contains control of PICout + //! \~english Enum contains control of PICout + //! \~russian Перечисление с управлением PICout enum PICoutControl { - AddNone /*! No controls */ = 0x0, - AddSpaces /*! Spaces will be appear after each output */ = 0x1, - AddNewLine /*! New line will be appear after all output */ = 0x2, - AddQuotes /*! Each string will be quoted */ = 0x4, - DefaultControls /*! Default controls */ = AddSpaces | AddNewLine, - AddAll /*! All controls */ = 0xFF, - NoLock /*! Don`t use mutex for output */ = 0x100, + AddNone /*! \~english No controls \~russian Без управления */ = 0x0, + AddSpaces /*! \~english Spaces will be appear after each output \~russian Пробел после каждого вывода */ = 0x1, + AddNewLine /*! \~english New line will be appear after all output \~russian Новая строка после завершения вывода */ = 0x2, + AddQuotes /*! \~english Each string will be quoted \~russian Каждая строка в кавычках */ = 0x4, + DefaultControls /*! \~english Default controls \~russian Управление по умолчанию */ = AddSpaces | AddNewLine, + AddAll /*! \~english All controls \~russian Всё управление */ = 0xFF, + NoLock /*! \~english Don`t use mutex for output \~russian Не использовать мьютекс при выводе */ = 0x100, }; - //! @brief Enum contains output format + //! \~english Enum contains output format + //! \~russian Перечисление с форматом вывода enum PICoutFormat { - Bin /*! Binary representation of integers */ = 0x01, - Oct /*! Octal representation of integers */ = 0x02, - Dec /*! Decimal representation of integers */ = 0x04, - Hex /*! Hexadecimal representation of integers */ = 0x08, - Bold /*! Bold */ = 0x10, - Faint /*! */ = 0x20, - Italic /*! */ = 0x40, - Underline /*! Underline */ = 0x80, - Blink /*! Blink */ = 0x100, - Black /*! Black font */ = 0x400, - Red /*! Red font */ = 0x800, - Green /*! Green font */ = 0x1000, - Blue /*! Blue font */ = 0x2000, - Yellow /*! Yellow font */ = 0x4000, - Magenta /*! Magenta font */ = 0x8000, - Cyan /*! Cyan font */ = 0x10000, - White /*! White font */ = 0x20000, - BackBlack /*! Black background */ = 0x40000, - BackRed /*! Red background */ = 0x80000, - BackGreen /*! Green background */ = 0x100000, - BackBlue /*! Blue background */ = 0x200000, - BackYellow /*! Yellow background */ = 0x400000, - BackMagenta /*! Magenta background */ = 0x800000, - BackCyan /*! Cyan background */ = 0x1000000, - BackWhite /*! White background */ = 0x2000000, - Default /*! Default format */ = 0x4000000 + Bin /*! \~english Binary representation of integers \~russian Двоичное представление для целых чисел */ = 0x01, + Oct /*! \~english Octal representation of integers \~russian Восьмеричное представление для целых чисел */ = 0x02, + Dec /*! \~english Decimal representation of integers \~russian Десятичное представление для целых чисел */ = 0x04, + Hex /*! \~english Hexadecimal representation of integers \~russian Шестнадцатеричное представление для целых чисел */ = 0x08, + Bold /*! \~english Bold \~russian Жирный */ = 0x10, + Faint /*! \~english \~russian */ = 0x20, + Italic /*! \~english \~russian */ = 0x40, + Underline /*! \~english Underline \~russian Подчеркнутый */ = 0x80, + Blink /*! \~english Blink \~russian Мигающий */ = 0x100, + Black /*! \~english Black font \~russian Чёрный */ = 0x400, + Red /*! \~english Red font \~russian Красный */ = 0x800, + Green /*! \~english Green font \~russian Зелёный */ = 0x1000, + Blue /*! \~english Blue font \~russian Синий */ = 0x2000, + Yellow /*! \~english Yellow font \~russian Жёлтый */ = 0x4000, + Magenta /*! \~english Magenta font \~russian Пурпурный */ = 0x8000, + Cyan /*! \~english Cyan font \~russian Голубой */ = 0x10000, + White /*! \~english White font \~russian Белый */ = 0x20000, + BackBlack /*! \~english Black background \~russian Чёрный фон */ = 0x40000, + BackRed /*! \~english Red background \~russian Красный фон */ = 0x80000, + BackGreen /*! \~english Green background \~russian Зелёный фон */ = 0x100000, + BackBlue /*! \~english Blue background \~russian Синий фон */ = 0x200000, + BackYellow /*! \~english Yellow background \~russian Жёлтый фон */ = 0x400000, + BackMagenta /*! \~english Magenta background \~russian Пурпурный фон */ = 0x800000, + BackCyan /*! \~english Cyan background \~russian Голубой фон */ = 0x1000000, + BackWhite /*! \~english White background \~russian Белый фон */ = 0x2000000, + Default /*! \~english Default format \~russian Формат по умолчанию */ = 0x4000000 }; typedef PIFlags PICoutControls; } -/*! \class PICout - * @brief Class for formatted output similar std::cout - * - * \section PICout_sec0 Synopsis - * This class provide many stream operators for output with some features. - * Output to PICout is thread-sequential, i.e. doesn`t mixed from parallel - * threads. - * - * \section PICout_sec1 Features - * - insertion spaces between entries - * - insertion new line at the end of output - * - strings are quoted - * - custom output operator can be easily written - * - * \section PICout_ex0 Usage - * \snippet picout.cpp 0 - * - * \section PICout_ex1 Writing your own output operator - * \snippet picout.cpp own - */ + class PIP_EXPORT PICout { public: - //! Default constructor with default features (AddSpaces and AddNewLine) + + //! \~english Default constructor with default features (AddSpaces and AddNewLine) + //! \~russian Конструктор по умолчанию (AddSpaces и AddNewLine) PICout(PIFlags controls = PICoutManipulators::DefaultControls); PICout(PICoutManipulators::PICoutControl control = PICoutManipulators::DefaultControls); - //! Construct with default features (AddSpaces and AddNewLine), but if \"active\" is false does nothing + //! \~english Construct with default features (AddSpaces and AddNewLine), but if \"active\" is false does nothing + //! \~russian Конструктор по умолчанию (AddSpaces и AddNewLine), но если не \"active\" то будет неактивным PICout(bool active); - //! Construct with external buffer and id "id". See \a Notifier for details + //! \~english Construct with external buffer and ID "id". See \a Notifier for details + //! \~russian Конструктор с внешним буфером и ID "id". Подробнее \a Notifier PICout(PIString * buffer, int id = 0, PIFlags controls = PICoutManipulators::AddSpaces | PICoutManipulators::AddNewLine); PICout(const PICout & other); @@ -149,171 +145,171 @@ public: ~PICout(); - /*! \class PICout::Notifier - * @brief Class for emit notifications of PICout - * - * \section PICout_sec0 Synopsis - * This class used as PICout events emitter. When - * PICout constructs with external PIString* buffer - * and some id, last copy of this PICout on delete - * emit event "finished()" on object Notifier::object(). - * Sample: - * \snippet picout.cpp notifier - */ - class PIP_EXPORT Notifier { public: + //! \~english Singleton access to %PICout::Notifier + //! \~russian Синглтон класса %PICout::Notifier static Notifier * instance(); + + //! \~english Object that emit events from %PICout + //! \~russian Объект, который посылает события от %PICout static PIObject * object(); private: Notifier(); PIObject * o; }; - //! @brief Enum contains output devices of PICout + //! \~english Enum contains output devices of %PICout + //! \~russian Перечисление с устройствами вывода для %PICout enum OutputDevice { - NoDevices /** PICout is disabled */ = 0x0, - StdOut /** Standard console output */ = 0x1, - Buffer /** Internal buffer */ = 0x2, - AllDevices /** All */ = 0xFFFF, + NoDevices /** \~english %PICout is disabled \~russian %PICout неактивен */ = 0x0, + StdOut /** \~english Standard console output \~russian Стандартный вывод в консоль */ = 0x1, + Buffer /** \~english Internal buffer \~russian Внутренний буфер */ = 0x2, + AllDevices /** \~english All \~russian Все */ = 0xFFFF, }; typedef PIFlags OutputDevices; - //! Output operator for strings with "const char * " type + //! \~english Output operator for strings with "const char * " type + //! \~russian Оператор вывода для строк "const char * " PICout operator <<(const char * v); - //! Output operator for strings with "std::string" type + // ! Output operator for strings with "std::string" type //PICout operator <<(const std::string & v); - //! Output operator for boolean values + //! \~english Output operator for boolean values + //! \~russian Оператор вывода для логических значений PICout operator <<(const bool v); - //! Output operator for "char" values + //! \~english Output operator for "char" values + //! \~russian Оператор вывода для "char" значений PICout operator <<(const char v); - //! Output operator for "unsigned char" values + //! \~english Output operator for "unsigned char" values + //! \~russian Оператор вывода для "unsigned char" значений PICout operator <<(const uchar v); - //! Output operator for "short" values + //! \~english Output operator for "short" values + //! \~russian Оператор вывода для "short" значений PICout operator <<(const short v); - //! Output operator for "unsigned short" values + //! \~english Output operator for "unsigned short" values + //! \~russian Оператор вывода для "unsigned short" значений PICout operator <<(const ushort v); - //! Output operator for "int" values + //! \~english Output operator for "int" values + //! \~russian Оператор вывода для "int" значений PICout operator <<(const int v); - //! Output operator for "unsigned int" values + //! \~english Output operator for "unsigned int" values + //! \~russian Оператор вывода для "unsigned int" значений PICout operator <<(const uint v); - //! Output operator for "long" values + //! \~english Output operator for "long" values + //! \~russian Оператор вывода для "long" значений PICout operator <<(const long v); - //! Output operator for "unsigned long" values + //! \~english Output operator for "unsigned long" values + //! \~russian Оператор вывода для "unsigned long" значений PICout operator <<(const ulong v); - //! Output operator for "long long" values + //! \~english Output operator for "long long" values + //! \~russian Оператор вывода для "long long" значений PICout operator <<(const llong v); - //! Output operator for "unsigned long long" values + //! \~english Output operator for "unsigned long long" values + //! \~russian Оператор вывода для "unsigned long long" значений PICout operator <<(const ullong v); - //! Output operator for "float" values + //! \~english Output operator for "float" values + //! \~russian Оператор вывода для "float" значений PICout operator <<(const float v); - //! Output operator for "double" values + //! \~english Output operator for "double" values + //! \~russian Оператор вывода для "double" значений PICout operator <<(const double v); - //! Output operator for pointers + //! \~english Output operator for pointers + //! \~russian Оператор вывода для указателей PICout operator <<(const void * v); - //! Output operator for PIObject and ancestors + //! \~english Output operator for PIObject and ancestors + //! \~russian Оператор вывода для PIObject и наследников PICout operator <<(const PIObject * v); - //! Output operator for \a PICoutSpecialChar values + //! \~english Output operator for \a PICoutSpecialChar values + //! \~russian Оператор вывода для \a PICoutSpecialChar PICout operator <<(const PICoutManipulators::PICoutSpecialChar v); - //! Output operator for \a PIFlags values - PICout operator <<(const PIFlags & v) { - if (v[PICoutManipulators::Bin]) cnb_ = 2; - if (v[PICoutManipulators::Oct]) cnb_ = 8; - if (v[PICoutManipulators::Dec]) cnb_ = 10; - if (v[PICoutManipulators::Hex]) cnb_ = 16; - if (v[PICoutManipulators::Bold]) applyFormat(PICoutManipulators::Bold); - if (v[PICoutManipulators::Faint]) applyFormat(PICoutManipulators::Faint); - if (v[PICoutManipulators::Italic]) applyFormat(PICoutManipulators::Italic); - if (v[PICoutManipulators::Underline]) applyFormat(PICoutManipulators::Underline); - if (v[PICoutManipulators::Blink]) applyFormat(PICoutManipulators::Blink); - if (v[PICoutManipulators::Black]) applyFormat(PICoutManipulators::Black); - if (v[PICoutManipulators::Red]) applyFormat(PICoutManipulators::Red); - if (v[PICoutManipulators::Green]) applyFormat(PICoutManipulators::Green); - if (v[PICoutManipulators::Blue]) applyFormat(PICoutManipulators::Blue); - if (v[PICoutManipulators::Yellow]) applyFormat(PICoutManipulators::Yellow); - if (v[PICoutManipulators::Magenta]) applyFormat(PICoutManipulators::Magenta); - if (v[PICoutManipulators::Cyan]) applyFormat(PICoutManipulators::Cyan); - if (v[PICoutManipulators::White]) applyFormat(PICoutManipulators::White); - if (v[PICoutManipulators::BackBlack]) applyFormat(PICoutManipulators::BackBlack); - if (v[PICoutManipulators::BackRed]) applyFormat(PICoutManipulators::BackRed); - if (v[PICoutManipulators::BackGreen]) applyFormat(PICoutManipulators::BackGreen); - if (v[PICoutManipulators::BackBlue]) applyFormat(PICoutManipulators::BackBlue); - if (v[PICoutManipulators::BackYellow]) applyFormat(PICoutManipulators::BackYellow); - if (v[PICoutManipulators::BackMagenta]) applyFormat(PICoutManipulators::BackMagenta); - if (v[PICoutManipulators::BackCyan]) applyFormat(PICoutManipulators::BackCyan); - if (v[PICoutManipulators::BackWhite]) applyFormat(PICoutManipulators::BackWhite); - if (v[PICoutManipulators::Default]) applyFormat(PICoutManipulators::Default); - return *this; - } + //! \~english Output operator for \a PIFlags values + //! \~russian Оператор вывода для \a PIFlags + PICout operator <<(const PIFlags & v); - //! Output operator for \a PICoutFormat values - PICout operator <<(const PICoutManipulators::PICoutFormat v) { - switch (v) { - case PICoutManipulators::Bin: cnb_ = 2; break; - case PICoutManipulators::Oct: cnb_ = 8; break; - case PICoutManipulators::Dec: cnb_ = 10; break; - case PICoutManipulators::Hex: cnb_ = 16; break; - default: applyFormat(v); - }; - return *this; - } + //! \~english Output operator for \a PICoutFormat values + //! \~russian Оператор вывода для \a PICoutFormat + PICout operator <<(const PICoutManipulators::PICoutFormat v); - //! Do some action + //! \~english Do some action + //! \~russian Делает действие PICout operator <<(const PICoutManipulators::PICoutAction v); - //! Set control flag "c" is "on" state + //! \~english Set control flag "c" is "on" state + //! \~russian Установить флаг "c" в "on" состояние PICout & setControl(PICoutManipulators::PICoutControl c, bool on = true) {co_.setFlag(c, on); return *this;} - //! Set control flags "c" and if "save" exec \a saveControl() + //! \~english Set control flags "c" and if "save" exec \a saveControl() + //! \~russian Установить флаг "c" и если "save" то выполнить \a saveControl() PICout & setControl(PICoutManipulators::PICoutControls c, bool save = false) {if (save) saveControl(); co_ = c; return *this;} - //! Save control flags to internal stack \sa \a restoreControl() + //! \~english Save control flags to internal stack + //! \~russian Сохраняет состояние флагов во внутренний стек + //! \~\sa \a restoreControl() PICout & saveControl(); - //! Restore control flags from internal stack \sa \a saveControl() + //! \~english Restore control flags from internal stack + //! \~russian Восстанавливает состояние флагов из внутреннего стека + //! \~\sa \a saveControl() PICout & restoreControl(); - /*! @brief Conditional put space character to output - * \details If it is not a first output and control \a AddSpaces is set - * space character is put \sa \a quote(), \a newLine() */ + //! \~english Conditional put space character to output + //! \~russian Условно добавляет пробел PICout & space(); - /*! @brief Conditional put quote character to output - * \details If control \a AddQuotes is set - * quote character is put \sa \a space(), \a newLine() */ + //! \~english Conditional put quote character to output + //! \~russian Условно добавляет кавычки PICout & quote(); - /*! @brief Conditional put new line character to output - * \details If control \a AddNewLine is set - * new line character is put \sa \a space(), \a quote() */ + //! \~english Conditional put new line character to output + //! \~russian Условно добавляет новую строку PICout & newLine(); + //! \~english Set output device to \a PICout::Buffer and if "clear" clear it + //! \~russian Устанавливает устройство вывода на \a PICout::Buffer и если "clear" то очищает его static bool setBufferActive(bool on, bool clear = false); + + //! \~english Equivalent to \a isOutputDeviceActive(OutputDevice) + //! \~russian Аналог \a isOutputDeviceActive(OutputDevice) static bool isBufferActive(); + + //! \~english Returns internal PIString buffer and if "clear" clear it + //! \~russian Возвращает внутренний PIString буфер и если "clear" то очищает его static PIString buffer(bool clear = false); + + //! \~english Clear internal PIString buffer + //! \~russian Очищает внутренний PIString буфер static void clearBuffer(); + + //! \~english Set output to device "d" enabled "on". Returns if it was enabled + //! \~russian Устройство вывода "d" устанавливается в "on". Возвращает было ли устройство активно static bool setOutputDevice(OutputDevice d, bool on = true); + + //! \~english Set output to devices to "d" + //! \~russian Устанавливает устройства вывода "d" static void setOutputDevices(OutputDevices d); + + //! \~english Returns if output device "d" is active + //! \~russian Возвращает активно ли устройство вывода "d" static bool isOutputDeviceActive(OutputDevice d); static PIMutex & __mutex__(); diff --git a/libs/main/core/piflags.h b/libs/main/core/piflags.h index 91ba874e..56ea9328 100644 --- a/libs/main/core/piflags.h +++ b/libs/main/core/piflags.h @@ -1,5 +1,7 @@ -/*! @file piflags.h - * @brief General flags class +/*! \file piflags.h + * \~\brief + * \~english General flags class + * \~russian Универсальные флаги */ /* PIP - Platform Independent Primitives @@ -25,109 +27,220 @@ #include "pip_export.h" -/*! @brief This class used as container for bit flags - * \details PIFlags is wrapper around \c "int". There are many - * bit-wise operators, native conversion to int and function - * to test flag. \n Example: - * \snippet piincludes.cpp flags - */ +//! \addtogroup Core +//! \{ +//! \~\class PIFlags piflags.h +//! \~\brief +//! \~english Container for bit flags +//! \~russian Контейнер для битовых полей (флагов) +//! +//! \~\details +//! \~english +//! %PIFlags is wrapper around \c "int". One can use it as native \c "int". +//! There are manybit-wise operators, +//! native conversion to "int" and function +//! to test flag. \n Example: +//! +//! \~russian +//! %PIFlags по сути обертка вокруг \c "int". Можно использовать его как обычный \c "int". +//! Имеет много битовых операторов, +//! неявное преобразование в "int" и методы для проверки +//! флагов. \n Пример: +//! +//! \~\snippet piincludes.cpp flags +//! +//! \} template class PIFlags { public: - //! Constructor with flags = 0 + + //! \~english Constructor with flags = 0 + //! \~russian Создает нулевые флаги PIFlags(): flags(0) {;} - //! Constructor with flags = Enum "e" + + //! \~english Constructor with flags = Enum "e" + //! \~russian Создает флаги со значением = Enum "e" PIFlags(Enum e): flags(e) {;} - //! Constructor with flags = int "i" + + //! \~english Constructor with flags = int "i" + //! \~russian Создает флаги со значением = int "i" PIFlags(const int i): flags(i) {;} - //! Set flags "f" to value "on" + + //! \~english Set flags on positions "f" to value "on" + //! \~russian Устанавливает флаги по позициям "f" в "on" PIFlags & setFlag(const PIFlags & f, bool on = true) {if (on) flags |= f.flags; else flags &= ~f.flags; return *this;} - //! Set flag "e" to value "on" + + //! \~english Set flag "e" to value "on" + //! \~russian Устанавливает флаг "e" в "on" PIFlags & setFlag(const Enum & e, bool on = true) {if (on) flags |= e; else flags &= ~e; return *this;} - //! Set flag "i" to value "on" + + //! \~english Set flag "i" to value "on" + //! \~russian Устанавливает флаг "i" в "on" PIFlags & setFlag(const int & i, bool on = true) {if (on) flags |= i; else flags &= ~i; return *this;} - //! copy operator + + //! \~english Assign operator + //! \~russian Оператор присваивания void operator =(const Enum & e) {flags = e;} - //! copy operator + + //! \~english Assign operator + //! \~russian Оператор присваивания void operator =(const int & i) {flags = i;} - //! compare operator + + //! \~english Compare operator + //! \~russian Оператор сравнения bool operator ==(const PIFlags & f) {return flags == f.flags;} - //! compare operator + + //! \~english Compare operator + //! \~russian Оператор сравнения bool operator ==(const Enum & e) {return flags == e;} - //! compare operator + + //! \~english Compare operator + //! \~russian Оператор сравнения bool operator ==(const int i) {return flags == i;} - //! compare operator + + //! \~english Compare operator + //! \~russian Оператор сравнения bool operator !=(const PIFlags & f) {return flags != f.flags;} - //! compare operator + + //! \~english Compare operator + //! \~russian Оператор сравнения bool operator !=(const Enum & e) {return flags != e;} - //! compare operator + + //! \~english Compare operator + //! \~russian Оператор сравнения bool operator !=(const int i) {return flags != i;} - //! compare operator + + //! \~english Compare operator + //! \~russian Оператор сравнения bool operator >(const PIFlags & f) {return flags > f.flags;} - //! compare operator + + //! \~english Compare operator + //! \~russian Оператор сравнения bool operator >(const Enum & e) {return flags > e;} - //! compare operator + + //! \~english Compare operator + //! \~russian Оператор сравнения bool operator >(const int i) {return flags > i;} - //! compare operator + + //! \~english Compare operator + //! \~russian Оператор сравнения bool operator <(const PIFlags & f) {return flags < f.flags;} - //! compare operator + + //! \~english Compare operator + //! \~russian Оператор сравнения bool operator <(const Enum & e) {return flags < e;} - //! compare operator + + //! \~english Compare operator + //! \~russian Оператор сравнения bool operator <(const int i) {return flags < i;} - //! compare operator + + //! \~english Compare operator + //! \~russian Оператор сравнения bool operator >=(const PIFlags & f) {return flags >= f.flags;} - //! compare operator + + //! \~english Compare operator + //! \~russian Оператор сравнения bool operator >=(const Enum & e) {return flags >= e;} - //! compare operator + + //! \~english Compare operator + //! \~russian Оператор сравнения bool operator >=(const int i) {return flags >= i;} - //! compare operator + + //! \~english Compare operator + //! \~russian Оператор сравнения bool operator <=(const PIFlags & f) {return flags <= f.flags;} - //! compare operator + + //! \~english Compare operator + //! \~russian Оператор сравнения bool operator <=(const Enum & e) {return flags <= e;} - //! compare operator + + //! \~english Compare operator + //! \~russian Оператор сравнения bool operator <=(const int i) {return flags <= i;} - //! Bit-wise AND operator + + //! \~english Bit-wise AND operator + //! \~russian Оператор побитового И void operator &=(const PIFlags & f) {flags &= f.flags;} - //! Bit-wise AND operator + + //! \~english Bit-wise AND operator + //! \~russian Оператор побитового И void operator &=(const Enum & e) {flags &= e;} - //! Bit-wise AND operator + + //! \~english Bit-wise AND operator + //! \~russian Оператор побитового И void operator &=(const int i) {flags &= i;} - //! Bit-wise OR operator + + //! \~english Bit-wise OR operator + //! \~russian Оператор побитового ИЛИ void operator |=(const PIFlags & f) {flags |= f.flags;} - //! Bit-wise OR operator + + //! \~english Bit-wise OR operator + //! \~russian Оператор побитового ИЛИ void operator |=(const Enum & e) {flags |= e;} - //! Bit-wise OR operator + + //! \~english Bit-wise OR operator + //! \~russian Оператор побитового ИЛИ void operator |=(const int i) {flags |= i;} - //! Bit-wise XOR operator + + //! \~english Bit-wise XOR operator + //! \~russian Оператор побитового исключающего ИЛИ void operator ^=(const PIFlags & f) {flags ^= f.flags;} - //! Bit-wise XOR operator + + //! \~english Bit-wise XOR operator + //! \~russian Оператор побитового исключающего ИЛИ void operator ^=(const Enum & e) {flags ^= e;} - //! Bit-wise XOR operator + + //! \~english Bit-wise XOR operator + //! \~russian Оператор побитового исключающего ИЛИ void operator ^=(const int i) {flags ^= i;} - //! Bit-wise AND operator + + //! \~english Bit-wise AND operator + //! \~russian Оператор побитового И PIFlags operator &(PIFlags f) const {PIFlags tf(flags & f.flags); return tf;} - //! Bit-wise AND operator + + //! \~english Bit-wise AND operator + //! \~russian Оператор побитового И PIFlags operator &(Enum e) const {PIFlags tf(flags & e); return tf;} - //! Bit-wise AND operator + + //! \~english Bit-wise AND operator + //! \~russian Оператор побитового И PIFlags operator &(int i) const {PIFlags tf(flags & i); return tf;} - //! Bit-wise OR operator + + //! \~english Bit-wise OR operator + //! \~russian Оператор побитового ИЛИ PIFlags operator |(PIFlags f) const {PIFlags tf(flags | f.flags); return tf;} - //! Bit-wise OR operator + + //! \~english Bit-wise OR operator + //! \~russian Оператор побитового ИЛИ PIFlags operator |(Enum e) const {PIFlags tf(flags | e); return tf;} - //! Bit-wise OR operator + + //! \~english Bit-wise OR operator + //! \~russian Оператор побитового ИЛИ PIFlags operator |(int i) const {PIFlags tf(flags | i); return tf;} - //! Bit-wise XOR operator + + //! \~english Bit-wise XOR operator + //! \~russian Оператор побитового исключающего ИЛИ PIFlags operator ^(PIFlags f) const {PIFlags tf(flags ^ f.flags); return tf;} - //! Bit-wise XOR operator + + //! \~english Bit-wise XOR operator + //! \~russian Оператор побитового исключающего ИЛИ PIFlags operator ^(Enum e) const {PIFlags tf(flags ^ e); return tf;} - //! Bit-wise XOR operator + + //! \~english Bit-wise XOR operator + //! \~russian Оператор побитового исключающего ИЛИ PIFlags operator ^(int i) const {PIFlags tf(flags ^ i); return tf;} - //! Test flag operator + + //! \~english Test flag operator + //! \~russian Оператор проверки флага bool operator [](Enum e) const {return (flags & e) == e;} - //! Implicity conversion to \c int + + //! \~english Implicity conversion to \c int + //! \~russian Оператор неявного преобразования в \c int operator int() const {return flags;} + private: int flags; + }; #endif // PIFLAGS_H diff --git a/libs/main/core/piincludes.cpp b/libs/main/core/piincludes.cpp index 1f29270e..5a84c558 100644 --- a/libs/main/core/piincludes.cpp +++ b/libs/main/core/piincludes.cpp @@ -95,7 +95,10 @@ int randomi() { } -/*! \mainpage What is PIP +/*! \~english \mainpage What is PIP + * \~russian \mainpage Что такое PIP + * + * \~english * PIP - Platform-Independent Primitives - is crossplatform library for C++ developers. * It is wrap around STL and pure C++. This library can help developers write non-GUI * projects much more quickly, efficiently and customizable than on pure C++. @@ -112,10 +115,16 @@ int randomi() { * * executor (\a PIThreadPoolExecutor) * * blocking dequeue (\a PIBlockingDequeue) * * timer (\a PITimer) - * * console (information output) (\a PIConsole) - * * stand-alone - * * server - * * client + * * tiling console (with widgets) (\a PIScreen) + * * simple text rows + * * scroll bar + * * list + * * button + * * buttons group + * * check box + * * progress bar + * * PICout output + * * text input * * I/O devices * * base class (\a PIIODevice) * * file (\a PIFile) @@ -134,15 +143,72 @@ int randomi() { * * peering net node (\a PIPeer) * * process (\a PIProcess) * * state machine (\a PIStateMachine) - * \n \n Basic using of PIP described at page \ref using_basic */ + * \n \n Basic using of PIP described at page \ref using_basic + * + * \~russian + * PIP - Platform-Independent Primitives - кроссплатформенная библиотека для разработчиков на C++. + * It is wrap around STL and pure C++. This library can help developers write non-GUI + * projects much more quickly, efficiently and customizable than on pure C++. + * PIP предоставляет следующие классы: + * * общение с консолью (\a PICout) + * * контейнеры (\a PIVector, \a PIList, \a PIMap, \a PIStack) + * * байтовый массив (\a PIByteArray) + * * строка (\a PIString, \a PIStringList) + * * базовый объект (события и обработчики) (\a PIObject) + * * многопоточность + * * поток (\a PIThread) + * * исполнитель (\a PIThreadPoolExecutor) + * * блокирующая очередь (\a PIBlockingDequeue) + * * таймер (\a PITimer) + * * тайлинговая консоль (с виджетами) (\a PIScreen) + * * простой вывод строк + * * скроллбар + * * лист + * * кнопка + * * группа кнопок + * * галочка + * * прогрессбар + * * вывод PICout + * * текстовый ввод + * * устройства ввода/вывода + * * базовый класс (\a PIIODevice) + * * файл (\a PIFile) + * * последовательный порт (\a PISerial) + * * ethernet (\a PIEthernet) + * * USB (\a PIUSB) + * * packets extractor (\a PIPacketExtractor) + * * бинарный логфайл (\a PIBinaryLog) + * * сложное составное устройство (\a PIConnection) + * * поддержка библиотек времени выполнения + * * базовая функциональность (\a PILibrary) + * * плагин (\a PIPluginLoader) + * * диагностика качества связи (\a PIDiagnostics) + * * парсер аргументов командной строки (\a PICLI) + * * вычислитель (\a PIEvaluator) + * * пиринговая сеть (\a PIPeer) + * * процесс (\a PIProcess) + * * машина состояний (\a PIStateMachine) + * \n \n Базовое использование PIP описано на странице \ref using_basic + */ -/*! \page using_basic Getting started +/*! \~english \page using_basic Getting started + * \~russian \page using_basic Простые начала + * + * \~english * Many novice programmers are solved many common task with system integrity: output to console, * keyboard buttons press detecting, working with serial ports, ethernet or files, and many other. * These tasks can solve this library, and code, based only on PIP will be compile and work * similar on many systems: Windows, any Linux, Red Hat, FreeBSD, MacOS X and QNX. * Typical application on PIP looks like this: \n + * + * \~russian + * Многие начинающие программисты решают общие задачи взаимодействия с операционной системой: + * вывод в консоль, определение нажатия клавиш, работа с последовательными портами, сетью или файлами, + * и многое другое. Эти задачи решены в библиотеке, и код, основанный на PIP будет компилироваться + * и работать одинаково на многих системах: Windows, любой Linux, Red Hat, FreeBSD, MacOS X и QNX. + * Типовое приложение на PIP выглядит примерно так: \n + * \code{.cpp} #include @@ -232,15 +298,32 @@ int main(int argc, char * argv[]) { return 0; }; \endcode + * + * \~english * This code demonstrates simple interactive configurable program, which can be started with console * display or not, and with debug or not. \b MainClass is central class that also can be inherited from * \a PIThread and reimplement \a run() function. * \n Many PIP classes has events and event handlers, which can be connected one to another. * Details you can see at \a PIObject reference page (\ref PIObject_sec0). * \n To configure your program from file use \a PIConfig. - * \n If you want more information see \ref using_advanced */ + * \n If you want more information see \ref using_advanced + * + * \~russian + * Этот код демонстрирует простую конфигурируемую программу, которая может быть запущена с + * This code demonstrates simple interactive configurable program, which can be started with console + * display or not, and with debug or not. \b MainClass is central class that also can be inherited from + * \a PIThread and reimplement \a run() function. + * \n Many PIP classes has events and event handlers, which can be connected one to another. + * Details you can see at \a PIObject reference page (\ref PIObject_sec0). + * \n To configure your program from file use \a PIConfig. + */ /*! \page using_advanced Advanced using * Sorry, creativity crysis xD */ + + /* +* \~english +* \~russian +*/ diff --git a/libs/main/core/piincludes.h b/libs/main/core/piincludes.h index a65591ac..b4fdf01d 100644 --- a/libs/main/core/piincludes.h +++ b/libs/main/core/piincludes.h @@ -42,10 +42,20 @@ struct lconv; extern PIP_EXPORT lconv * currentLocale; -/*! \fn errorString() - * @brief Return readable error description in format "code - " */ +//! \ingroup Core +//! \brief +//! \~english +//! Return readable error description in format "code - " +//! \~russian +//! Возвращает читаемое описание ошибки в формате "code <номер> - <описание>" PIP_EXPORT PIString errorString(); +//! \ingroup Core +//! \brief +//! \~english +//! Reset last error +//! \~russian +//! Сброс последней ошибки PIP_EXPORT void errorClear(); PIP_EXPORT void piqsort(void* base, size_t num, size_t size, int (*compar)(const void*,const void*)); @@ -53,7 +63,10 @@ PIP_EXPORT void piqsort(void* base, size_t num, size_t size, int (*compar)(const PIP_EXPORT void randomize(); PIP_EXPORT int randomi(); -/// Return readable version of PIP +//! \ingroup Core +//! \brief +//! \~english Return readable version of PIP +//! \~russian Возвращает читаемую версию PIP PIP_EXPORT PIString PIPVersion(); #endif // PIINCLUDES_H diff --git a/libs/main/core/piinit.h b/libs/main/core/piinit.h index 2ea2936a..2921e926 100644 --- a/libs/main/core/piinit.h +++ b/libs/main/core/piinit.h @@ -1,5 +1,7 @@ -/*! @file piinit.h - * @brief Initialization +/*! \file piinit.h + * \~\brief + * \~english Library initialization + * \~russian Инициализация библиотеки */ /* PIP - Platform Independent Primitives @@ -51,19 +53,29 @@ class PIP_EXPORT PIInit { public: ~PIInit(); - //! @brief Build options which PIP library was built + //! \ingroup Core + //! \~english Build options which PIP library was built + //! \~russian Опции, с которыми был собран PIP enum BuildOption { - boICU /*! Unicode support */ = 0x01, - boUSB /*! USB support */ = 0x02, - boCrypt /*! Crypt support */ = 0x08, - boIntrospection /*! Introspection */ = 0x010, - boFFTW /*! FFTW3 support */ = 0x40, - boCompress /*! Zlib compression support */ = 0x80, - boOpenCL /*! OpenCL support */ = 0x100, - boCloud /*! Cloud transport support */ = 0x200, + boICU /*! \~english Unicode support by ICU \~russian Поддержка юникода через ICU */ = 0x01, + boUSB /*! \~english USB support \~russian Поддержка USB */ = 0x02, + boCrypt /*! \~english Crypt support \~russian Поддержка шифрования */ = 0x08, + boIntrospection /*! \~english Introspection \~russian Интроспекция */ = 0x010, + boFFTW /*! \~english FFTW3 support \~russian Поддержка FFTW3 */ = 0x40, + boCompress /*! \~english Zlib compression support \~russian Поддержка сжатия Zlib */ = 0x80, + boOpenCL /*! \~english OpenCL support \~russian Поддержка OpenCL */ = 0x100, + boCloud /*! \~english PICloud transport support \~russian Поддержка облачного транспорта PICloud */ = 0x200, }; static PIInit * instance() {return __PIInit_Initializer__::__instance__;} + + //! \ingroup Core + //! \~english Returns if build option was enabled + //! \~russian Возвращает была ли включена опция при сборке static bool isBuildOptionEnabled(BuildOption o); + + //! \ingroup Core + //! \~english Returns build options as stringlist + //! \~russian Возвращает опции сборки как список строк static PIStringList buildOptions(); private: explicit PIInit(); diff --git a/libs/main/core/piobject.cpp b/libs/main/core/piobject.cpp index ab051a78..700a5ff8 100644 --- a/libs/main/core/piobject.cpp +++ b/libs/main/core/piobject.cpp @@ -25,37 +25,89 @@ # include "pifile.h" #endif -/** \class PIObject - * @brief This is base class for any classes which use events -> handlers mechanism. - * \details - * \section PIObject_sec0 Events and Event handlers - * %PIObject provide notification mechanism similar Qt but implemented - * on language capabilities without any special preprocessors or compilers. - * Any class inherits PIObject should use macro \a PIOBJECT() immediate - * after declaration to proper compile. - * - * Event is a some abstract event that can be raised at any time. - * Event is a function but declared with special macro \a EVENT(). - * To raise event simply execute event function. - * - * Event handler is a function but declared with special macro - * \a EVENT_HANDLER(). You can use event handlers as ordinary functions. - * - * Main goal of this mechanism is perform abstract connections between - * various objects. This functionality provide macro \a CONNECT() which - * connect some event of first object to some event handler or event of - * second object. Each event can be connected any times to any event handlers. - * - * \image html events_handlers.png - * - * Example: \snippet piobject.cpp main - * Result: -\code{.cpp} -handler B: 2 , 0.5 -handler A: event to handler -handler A: event to event -\endcode - */ + +//! \addtogroup Core +//! \{ +//! \~\class PIObject piobject.h +//! \~\brief +//! \~english This is base class for any classes which use events -> handlers mechanism +//! \~russian Этот класс является базовым для использования механизма события -> обработчики +//! +//! \~\details +//! \~english \section PIObject_sec0 Events and Event handlers +//! \~russian \section PIObject_sec0 События и Обработчики событий +//! +//! \~english +//! %PIObject provide notification mechanism similar Qt but implemented +//! on language capabilities without any special preprocessors or compilers. +//! Any class inherits %PIObject should use macro \a PIOBJECT() immediate +//! after declaration to proper compile. +//! +//! Event is a some abstract event that can be raised at any time as common method. +//! Event is a function but declared with special macro \a EVENT() and don`t need definition. +//! To raise event simply execute event function. +//! +//! Event handler is a function but declared with special macro +//! \a EVENT_HANDLER(). It need definition as common method. +//! You can use event handlers as ordinary functions. +//! +//! Main goal of this mechanism is perform abstract connections between +//! various objects. This functionality provide macro \a CONNECT(), \a CONNECTU() and \a CONNECTL() which +//! connect some event of first object to some event handler or event of +//! second object. Each event can be connected any times to any event handlers. +//! +//! * \a CONNECT() macros family work with explicit subclasses of %PIObject with compile-time check of events and handlers +//! * \a CONNECTU() macro can work implicit subclasses of %PIObject with run-time check of events and handlers +//! * \a CONNECTU_QUEUED() macro similar to \a CONNECTU() macro but queue execution with performer object instead of handler direct call +//! * \a CONNECTL() macro work with implicit subclasses of %PIObject and lambda-function +//! +//! \~russian +//! %PIObject предоставляет механизм событий и их обработчиков, реализованный без +//! дополнительного препроцессора или метакомпилятора. Любой класс, наследованный +//! от %PIObject должен использовать макрос \a PIOBJECT() сразу после объявления +//! класса для корректной работы. +//! +//! Событием является сигнал, который может быть вызван как обычный метод в любое время. +//! Это метод, объявленный с помощью макроса \a EVENT() и не требует описания. +//! Для его вызова просто вызывается метод события. +//! +//! Обработчик события это метод, объявленный с помощью макроса \a EVENT_HANDLER() +//! и он требует описания, как и обычный метод. Можно его использовать как обычный метод. +//! +//! Основной функцией этого механизма является реализация соединений между различными объектами. +//! Её предоставляют макросы \a CONNECT(), \a CONNECTU() и \a CONNECTL(), которые соединяют +//! события одних объектов с обработчиками или событиями других объектов. Каждое событие +//! может быть присоеденино неограниченное количество раз к любым обработчикам. +//! +//! * \a CONNECT() семейство макросов работает с явными наследниками %PIObject, и проверяет соединение во время компиляции +//! * \a CONNECTU() макрос может работать с неявными наследниками %PIObject, и проверяет соединение во время исполнения +//! * \a CONNECTU_QUEUED() макрос подобен \a CONNECTU(), но планирует вызов обработчика у объекта performer вместо прямого вызова +//! * \a CONNECTL() макрос может работать с неявными наследниками %PIObject и лямбда-функцией +//! +//! \~\image html events_handlers.png +//! +//! \~english Example: +//! \~russian Пример: +//! +//! \~\snippet piobject.cpp main +//! \~english Result: +//! \~russian Результат: +//! \~\code{.cpp} +//! handler B: 2 , 0.5 +//! handler A: event to handler +//! handler A: event to event +//! event to lambda +//! \endcode +//! \} + + +//! \addtogroup Core +//! \{ +//! \~\class PIObject::Connection piobject.h +//! \~\brief +//! \~english Helper class for obtain info about if connection successful and disconnect single connection +//! \~russian Вспомогательный класс для получения информации об успешности соединения и возможности его разрыва +//! \} PIString PIObject::__MetaFunc::arguments() const { @@ -454,6 +506,14 @@ void PIObject::callQueuedEvents() { } +//! \details +//! \~english +//! On first call background thread started to delete objects. +//! Each object deletes when it`s outside from any events and hadlers. +//! \~russian +//! При первом вызове стартует фоновый поток для удаления объектов. +//! Каждый объект из очереди удаляется только когда выйдет из всех +//! событий и обработок. void PIObject::deleteLater() { Deleter::instance()->post(this); } diff --git a/libs/main/core/piobject.h b/libs/main/core/piobject.h index c6c6451a..d32b27aa 100644 --- a/libs/main/core/piobject.h +++ b/libs/main/core/piobject.h @@ -1,7 +1,7 @@ -/*! @file piobject.h - * @brief Base object - * - * This file declare PIObject class +/*! \file piobject.h + * \~\brief + * \~english Base object + * \~russian Базовый класс */ /* PIP - Platform Independent Primitives @@ -47,12 +47,12 @@ class PIP_EXPORT PIObject { public: NO_COPY_CLASS(PIObject) - //! Contructs PIObject with name "name" + //! \~english Contructs %PIObject with name "name" + //! \~russian Создает %PIObject с именем "name" explicit PIObject(const PIString & name = PIString()); virtual ~PIObject(); - //! Helper class for obtain info about if connection successful and disconnect single connection class PIP_EXPORT Connection { friend class PIObject; Connection(void * sl, void * si, const PIString & e = PIString(), @@ -81,22 +81,28 @@ public: int args_count; public: - //! Contructs invalid %Connection + //! \~english Contructs invalid %Connection + //! \~russian Создает недействительный %Connection Connection(); - //! Returns if %Connection is valid + //! \~english Returns if %Connection is valid + //! \~russian Возвращает успешен ли %Connection bool isValid() const {return signal;} - //! Returns source object + //! \~english Returns source object + //! \~russian Возвращает объект-источник PIObject * sourceObject() const {return src_o;} - //! Returns destination object or nullptr if this is lambda connection + //! \~english Returns destination object or "nullptr" if this is lambda connection + //! \~russian Возвращает объект-приемник или "nullptr" если это соединение на лямбда-функцию PIObject * destinationObject() const {return dest_o;} - //! Returns performer object or nullptr if this is non-queued connection + //! \~english Returns performer object or "nullptr" if this is non-queued connection + //! \~russian Возвращает объект-приемник или "nullptr" если это соединение не отложенное PIObject * performerObject() const {return performer;} - //! Disconnect this %Connection, returns if operation successful + //! \~english Disconnect this %Connection, returns if operation successful + //! \~russian Разрывает этот %Connection, возвращает успешен ли разрыв bool disconnect(); }; @@ -105,10 +111,12 @@ private: public: - //! Returns object name + //! \~english Returns object name + //! \~russian Возвращает имя объекта PIString name() const {return property(PIStringAscii("name")).toString();} - //! Returns object class name + //! \~english Returns object class name + //! \~russian Возвращает имя класса объекта virtual const char * className() const {return "PIObject";} virtual uint classNameID() const {static uint ret = PIStringAscii("PIObject").hash(); return ret;} @@ -116,36 +124,45 @@ public: static const PIString __classNameS() {return PIStringAscii("PIObject");} static uint __classNameIDS() {static uint ret = PIStringAscii("PIObject").hash(); return ret;} - //! Returns parent object class name + //! \~english Returns parent class name + //! \~russian Возвращает имя родительского класса virtual const char * parentClassName() const {return "";} - //! Return if debug of this object is active + //! \~english Return if debug of this object is active + //! \~russian Возвращает включен ли вывод на консоль для этого объекта bool debug() const {return property(PIStringAscii("debug")).toBool();} - //! Set object name + //! \~english Set object name + //! \~russian Устанавливает имя объекта void setName(const PIString & name) {setProperty(PIStringAscii("name"), name);} void setName(const char * name) {setName(PIStringAscii(name));} - //! Set object debug active + //! \~english Set object debug active + //! \~russian Включает или отключает вывод на консоль для этого объекта void setDebug(bool debug) {setProperty(PIStringAscii("debug"), debug);} - //! Returns properties of the object - PIMap properties() const; + //! \~english Returns properties of the object + //! \~russian Возвращает словарь свойств объекта + PIMap properties() const; - //! Returns properties count of the object + //! \~english Returns properties count of the object + //! \~russian Возвращает количество свойств объекта int propertiesCount() const {return properties_.size_s();} - //! Returns property with name "name" + //! \~english Returns property with name "name" + //! \~russian Возвращает свойство объекта по имени "name" PIVariant property(const PIString & name) const {return properties_.value(name.hash(), Property(PIString(), PIVariant())).second;} PIVariant property(const char * name) const {return property(PIStringAscii(name));} - //! Set property with name "name" to "value". If there is no such property in object it will be added + //! \~english Set property with name "name" to "value". If there is no such property in object it will be added + //! \~russian Устанавливает у объекта свойство по имени "name" в "value". Если такого свойства нет, оно добавляется void setProperty(const PIString & name, const PIVariant & value) {properties_[name.hash()] = Property(name, value); propertyChanged(name);} void setProperty(const char * name, const PIVariant & value) {setProperty(PIStringAscii(name), value);} - //! Returns if property with name "name" exists + //! \~english Returns if property with name "name" exists + //! \~russian Возвращает присутствует ли свойство по имени "name" bool isPropertyExists(const PIString & name) const {return properties_.contains(name.hash());} bool isPropertyExists(const char * name) const {return isPropertyExists(PIStringAscii(name));} @@ -183,7 +200,10 @@ public: void dump(const PIString & line_prefix = PIString()) const; + //! \~english Returns subclass scope of this object (including this class name) + //! \~russian Возвращает цепочку наследования объекта (вместе с классом самого объекта) PIStringList scopeList() const; + PIStringList methodsEH() const; bool isMethodEHContains(const PIString & name) const; PIString methodEHArguments(const PIString & name) const; @@ -200,23 +220,29 @@ public: } - //! Disconnect object from all connections with event name "sig", connected to destination object "dest" and handler "ev_h" + //! \~english Disconnect object from all connections with event name "sig", connected to destination object "dest" and handler "ev_h" + //! \~russian Разрывает все соединения от события "sig" к объекту "dest" и обработчику "ev_h" void piDisconnect(const PIString & sig, PIObject * dest, void * ev_h) {piDisconnect(this, sig, dest, ev_h);} - //! Disconnect object from all connections with event name "sig", connected to destination object "dest" + //! \~english Disconnect object from all connections with event name "sig", connected to destination object "dest" + //! \~russian Разрывает все соединения от события "sig" к объекту "dest" void piDisconnect(const PIString & sig, PIObject * dest) {piDisconnect(this, sig, dest);} - //! Disconnect object from all connections with event name "sig" + //! \~english Disconnect object from all connections with event name "sig" + //! \~russian Разрывает все соединения от события "sig" void piDisconnect(const PIString & sig) {piDisconnect(this, sig);} - //! Disconnect object "src" from all connections with event name "sig", connected to destination object "dest" and handler "ev_h" + //! \~english Disconnect object "src" from all connections with event name "sig", connected to destination object "dest" and handler "ev_h" + //! \~russian Разрывает все соединения от события "sig" объекта "src" к объекту "dest" и обработчику "ev_h" static void piDisconnect(PIObject * src, const PIString & sig, PIObject * dest, void * ev_h); - //! Disconnect object "src" from all connections with event name "sig", connected to destination object "dest" + //! \~english Disconnect object "src" from all connections with event name "sig", connected to destination object "dest" + //! \~russian Разрывает все соединения от события "sig" объекта "src" к объекту "dest" static void piDisconnect(PIObject * src, const PIString & sig, PIObject * dest); - //! Disconnect object "src" from all connections with event name "sig" + //! \~english Disconnect object "src" from all connections with event name "sig" + //! \~russian Разрывает все соединения от события "sig" объекта "src" static void piDisconnect(PIObject * src, const PIString & sig); // / Raise events @@ -398,23 +424,36 @@ public: if (i->name() != name) continue; return i; } - return 0; + return nullptr; } + //! \~english Returns if this is valid %PIObject (check signature) + //! \~russian Возвращает действительный ли это %PIObject (проверяет подпись) bool isPIObject() const {return isPIObject(this);} + + //! \~english Returns if this is valid %PIObject subclass "T" (check signature and classname) + //! \~russian Возвращает действительный ли это наследник %PIObject типа "T" (проверяет подпись и имя класса) template bool isTypeOf() const { if (!isPIObject()) return false; return scopeList().contains(T::__classNameS()); } + + //! \~english Returns cast to T if this is valid subclass "T" (check by \a isTypeOf()) or "nullptr" + //! \~russian Возвращает преобразование к типу T если это действительный наследник типа "T" (проверяет через \a isTypeOf()), или "nullptr" template T * cast() const { - if (!isTypeOf()) return (T*)0; + if (!isTypeOf()) return (T*)nullptr; return (T*)this; } + //! \~english Returns if "o" is valid %PIObject (check signature) + //! \~russian Возвращает действительный ли "o" %PIObject (проверяет подпись) static bool isPIObject(const PIObject * o); static bool isPIObject(const void * o) {return isPIObject((PIObject*)o);} + + //! \~english Returns if "o" is valid %PIObject subclass "T" (check signature and classname) + //! \~russian Возвращает действительный ли "o" наследник %PIObject типа "T" (проверяет подпись и имя класса) template static bool isTypeOf(const PIObject * o) {return o->isTypeOf();} template @@ -445,17 +484,22 @@ public: }; typedef PIPair __EHPair; - //! @brief Execute all posted events from CONNECTU_QUEUED connections + //! \~english Execute all posted events from CONNECTU_QUEUED connections + //! \~russian Выполнить все отложенные события от CONNECTU_QUEUED соединений void callQueuedEvents(); - //! @brief Check if any CONNECTU_QUEUED connections to this object and execute them + //! \~english + //! \brief Check if any CONNECTU_QUEUED connections to this object and execute them //! \details This function is more optimized than \a callQueuedEvents() for objects that doesn`t //! appears as \"performer\" target at CONNECTU_QUEUED + //! \~russian + //! \brief Если было хотя бы одно CONNECTU_QUEUED соединение с исполнителем this, то выполнить события + //! \details Этот метод более оптимален, чем \a callQueuedEvents(), для объектов, которые не были в роли + //! \"performer\" в макросе CONNECTU_QUEUED bool maybeCallQueuedEvents() {if (proc_event_queue) callQueuedEvents(); return proc_event_queue;} - //! @brief Mark object to delete - //! \details On first call background thread started to delete objects. - //! Each object deletes when it`s outside from any events and hadlers. + //! \~english Mark object to delete + //! \~russian Пометить объект на удаление void deleteLater(); static PIMutex & __meta_mutex(); @@ -463,10 +507,12 @@ public: protected: - //! Returns PIObject* which has raised an event. This value is correct only in definition of some event handler + //! \~english Returns %PIObject* which has raised an event. This value is correct only in definition of some event handler + //! \~russian Возвращает %PIObject* который вызвал это событие. Значение допустимо только из методов обработчиков событий PIObject * emitter() const {return emitter_;} - //! Virtual function executes after property with name "name" has been changed + //! \~english Virtual function executes after property with name "name" has been changed + //! \~russian Виртуальная функция, вызывается после изменения любого свойства. virtual void propertyChanged(const PIString & name) {} EVENT1(deleted, PIObject *, o) @@ -474,10 +520,17 @@ protected: //! \events //! \{ - /** \fn void deleted(PIObject * o) - * @brief Raise before object delete - * \note This event raised from destructor, so use only "o" value, - * don`t try to cast deleted object to some subclass! */ + //! \fn void deleted(PIObject * o) + //! \brief + //! \~english Raise before object delete + //! \~russian Вызывается перед удалением объекта + //! \~\warning + //! \~english + //! This event raised from destructor, so use only "o" numeric value, + //! don`t try to cast deleted object to some subclass! + //! \~russian + //! Это событие вызывается из деструктора, поэтому используйте + //! только численное значение "o", не надо кастовать его в другие типы! //! \} diff --git a/libs/main/core/piobject_macros.h b/libs/main/core/piobject_macros.h index cff78bca..2f440b72 100644 --- a/libs/main/core/piobject_macros.h +++ b/libs/main/core/piobject_macros.h @@ -1,5 +1,5 @@ -/*! @file piobject_macros.h - * @brief Base object +/*! \file piobject_macros.h + * \~\brief Base object * * This file declare macros for PIObject */ @@ -29,67 +29,127 @@ #ifdef DOXYGEN -/// \relatesalso PIObject @brief you should use this macro after class declaration to use EVENT and EVENT_HANDLER and correct piCoutObj output +//! \relatesalso PIObject +//! \~\brief +//! \~english You should use this macro after class declaration to use EVENT and EVENT_HANDLER and correct piCoutObj output +//! \~russian Необходимо использовать этот макрос после объявления класса для использования событийной системы и корректного вывода piCoutObj #define PIOBJECT(name) -/// \relatesalso PIObject @brief you should use this macro after class declaration to use EVENT and EVENT_HANDLER of parent class, and \a scopeList() +//! \relatesalso PIObject +//! \~\brief +//! \~english You should use this macro after class declaration to use EVENT and EVENT_HANDLER of parent class, and \a scopeList() +//! \~russian #define PIOBJECT_SUBCLASS(name, parent) -/// \relatesalso PIObject @brief declare event handler \"event\" with name \"name\" and return type \"ret\", ret name() +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare event handler with name \"name\" and return type \"ret\", ret name() +//! \~russian Объявляет обработчик событий с именем \"name\" и возвращаемым типом \"ret\", ret name() #define EVENT_HANDLER0(ret, name) ret name() -/// \relatesalso PIObject @brief declare event handler \"event\" with name \"name\" and return type \"ret\", ret name(type0 var0) +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare event handler with name \"name\" and return type \"ret\", ret name(type0 var0) +//! \~russian Объявляет обработчик событий с именем \"name\" и возвращаемым типом \"ret\", ret name(type0 var0) #define EVENT_HANDLER1(ret, name, type0, var0) ret name(type0 var0) -/// \relatesalso PIObject @brief declare event handler \"event\" with name \"name\" and return type \"ret\", ret name(type0 var0, type1 var1) +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare event handler with name \"name\" and return type \"ret\", ret name(type0 var0, type1 var1) +//! \~russian Объявляет обработчик событий с именем \"name\" и возвращаемым типом \"ret\", ret name(type0 var0, type1 var1) #define EVENT_HANDLER2(ret, name, type0, var0, type1, var1) ret name(type0 var0, type1 var1) -/// \relatesalso PIObject @brief declare event handler \"event\" with name \"name\" and return type \"ret\", ret name(type0 var0, type1 var1, type2 var2) +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare event handler with name \"name\" and return type \"ret\", ret name(type0 var0, type1 var1, type2 var2) +//! \~russian Объявляет обработчик событий с именем \"name\" и возвращаемым типом \"ret\", ret name(type0 var0, type1 var1, type2 var2) #define EVENT_HANDLER3(ret, name, type0, var0, type1, var1, type2, var2) ret name(type0 var0, type1 var1, type2 var2) -/// \relatesalso PIObject @brief declare event handler \"event\" with name \"name\" and return type \"ret\", ret name(type0 var0, type1 var1, type2 var2, type3 var3) +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare event handler with name \"name\" and return type \"ret\", ret name(type0 var0, type1 var1, type2 var2, type3 var3) +//! \~russian Объявляет обработчик событий с именем \"name\" и возвращаемым типом \"ret\", ret name(type0 var0, type1 var1, type2 var2, type3 var3) #define EVENT_HANDLER4(ret, name, type0, var0, type1, var1, type2, var2, type3, var3) ret name(type0 var0, type1 var1, type2 var2, type3 var3) -/// \relatesalso PIObject @brief EVENT_HANDLER is synonym of EVENT_HANDLER0 +//! \relatesalso PIObject +//! \~\brief +//! \~english Synonym of EVENT_HANDLER0 +//! \~russian Аналог EVENT_HANDLER0 #define EVENT_HANDLER EVENT_HANDLER0 -/// \relatesalso PIObject @brief declare virtual event handler \"event\" with name \"name\" and return type \"ret\", virtual ret name() +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare virtual event handler with name \"name\" and return type \"ret\", virtual ret name() +//! \~russian Объявляет виртуальный обработчик событий с именем \"name\" и возвращаемым типом \"ret\", virtual ret name() #define EVENT_VHANDLER0(ret, name) virtual ret name() -/// \relatesalso PIObject @brief declare virtual event handler \"event\" with name \"name\" and return type \"ret\", virtual ret name(type0 var0) +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare virtual event handler with name \"name\" and return type \"ret\", virtual ret name(type0 var0) +//! \~russian Объявляет виртуальный обработчик событий с именем \"name\" и возвращаемым типом \"ret\", virtual ret name(type0 var0) #define EVENT_VHANDLER1(ret, name, type0, var0) virtual ret name(type0 var0) -/// \relatesalso PIObject @brief declare virtual event handler \"event\" with name \"name\" and return type \"ret\", virtual ret name(type0 var0, type1 var1) +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare virtual event handler with name \"name\" and return type \"ret\", virtual ret name(type0 var0, type1 var1) +//! \~russian Объявляет виртуальный обработчик событий с именем \"name\" и возвращаемым типом \"ret\", virtual ret name(type0 var0, type1 var1) #define EVENT_VHANDLER2(ret, name, type0, var0, type1, var1) virtual ret name(type0 var0, type1 var1) -/// \relatesalso PIObject @brief declare virtual event handler \"event\" with name \"name\" and return type \"ret\", virtual ret name(type0 var0, type1 var1, type2 var2) +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare virtual event handler with name \"name\" and return type \"ret\", virtual ret name(type0 var0, type1 var1, type2 var2) +//! \~russian Объявляет виртуальный обработчик событий с именем \"name\" и возвращаемым типом \"ret\", virtual ret name(type0 var0, type1 var1, type2 var2) #define EVENT_VHANDLER3(ret, name, type0, var0, type1, var1, type2, var2) virtual ret name(type0 var0, type1 var1, type2 var2) -/// \relatesalso PIObject @brief declare virtual event handler \"event\" with name \"name\" and return type \"ret\", virtual ret name(type0 var0, type1 var1, type2 var2, type3 var3) +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare virtual event handler with name \"name\" and return type \"ret\", virtual ret name(type0 var0, type1 var1, type2 var2, type3 var3) +//! \~russian Объявляет виртуальный обработчик событий с именем \"name\" и возвращаемым типом \"ret\", virtual ret name(type0 var0, type1 var1, type2 var2, type3 var3) #define EVENT_VHANDLER4(ret, name, type0, var0, type1, var1, type2, var2, type3, var3) virtual ret name(type0 var0, type1 var1, type2 var2, type3 var3) -/// \relatesalso PIObject @brief EVENT_VHANDLER is synonym of EVENT_VHANDLER0 +//! \relatesalso PIObject +//! \~\brief +//! \~english Synonym of EVENT_VHANDLER0 +//! \~russian Аналог EVENT_VHANDLER0 #define EVENT_VHANDLER EVENT_VHANDLER0 -/// \relatesalso PIObject @brief declare event \"event\" with name \"name\", void name(); +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare event with name \"name\", void name(); +//! \~russian Объявляет событие с именем \"name\", void name(); #define EVENT0(name) void name(); -/// \relatesalso PIObject @brief declare event \"event\" with name \"name\", void name(type0 var0); +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare event with name \"name\", void name(type0 var0); +//! \~russian Объявляет событие с именем \"name\", void name(type0 var0); #define EVENT1(name, type0, var0) void name(type0 var0); -/// \relatesalso PIObject @brief declare event \"event\" with name \"name\", void name(type0 var0, type1 var1); +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare event with name \"name\", void name(type0 var0, type1 var1); +//! \~russian Объявляет событие с именем \"name\", void name(type0 var0, type1 var1); #define EVENT2(name, type0, var0, type1, var1) void name(type0 var0, type1 var1); -/// \relatesalso PIObject @brief declare event \"event\" with name \"name\", void name(type0 var0, type1 var1, type2 var2); +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare event with name \"name\", void name(type0 var0, type1 var1, type2 var2); +//! \~russian Объявляет событие с именем \"name\", void name(type0 var0, type1 var1, type2 var2); #define EVENT3(name, type0, var0, type1, var1, type2, var2) void name(type0 var0, type1 var1, type2 var2); -/// \relatesalso PIObject @brief declare event \"event\" with name \"name\", void name(type0 var0, type1 var1, type2 var2, type3 var3); +//! \relatesalso PIObject +//! \~\brief +//! \~english Declare event with name \"name\", void name(type0 var0, type1 var1, type2 var2, type3 var3); +//! \~russian Объявляет событие с именем \"name\", void name(type0 var0, type1 var1, type2 var2, type3 var3); #define EVENT4(name, type0, var0, type1, var1, type2, var2, type3, var3) void name(type0 var0, type1 var1, type2 var2, type3 var3); -/// \relatesalso PIObject @brief EVENT is synonym of EVENT0 +//! \relatesalso PIObject +//! \~\brief +//! \~english Synonym of EVENT0 +//! \~russian Аналог EVENT0 #define EVENT EVENT0 @@ -101,89 +161,217 @@ #define RAISE_EVENT RAISE_EVENT0 -/// \relatesalso PIObject @brief connect event \"event\" from object \"src\" to event handler \"handler\". \"Event\" and \"handler\" must has equal argument lists. -/// Returns PIObject::Connection +//! \relatesalso PIObject +//! \~\brief +//! \~english Connect event \"event\" from object \"src\" to event handler or event \"handler\" of object \"dest\". +//! \~russian Соединяет событие \"event\" объекта \"src\" к обработчику или событию \"handler\" объекта \"dest\". +//! \~\details +//! \~english +//! \"handler\" can handle subset arguments of \"event\". +//! Returns \a PIObject::Connection +//! \~russian +//! \"handler\" может принимать не все аргументы от \"event\". +//! Возвращает \a PIObject::Connection #define CONNECTU(src, event, dest, handler) -/// \relatesalso PIObject @brief connect event \"event\" from object \"src\" to event handler \"handler\". -/// Event handler will be executed by \"performer\". \"Event\" and \"handler\" must has equal argument lists. -/// Returns PIObject::Connection +//! \relatesalso PIObject +//! \~\brief +//! \~english Connect event \"event\" from object \"src\" to event handler or event \"handler\" of object \"dest\". +//! \~russian Соединяет событие \"event\" объекта \"src\" к обработчику или событию \"handler\" объекта \"dest\". +//! \~\details +//! \~english +//! \"handler\" can handle subset arguments of \"event\". +//! Event handler will be executed by \"performer\" when \a PIObject::callQueuedEvents() called. +//! All argument types should be registered by \a REGISTER_VARIANT() macro, but many +//! common and PIP types already done. +//! Returns \a PIObject::Connection +//! \~russian +//! \"handler\" может принимать не все аргументы от \"event\". +//! Обработчик будет вызван объектом \"performer\" при вызове \a PIObject::callQueuedEvents(). +//! Все типы аргументов должны быть зарегистрированы с помощью макроса \a REGISTER_VARIANT(), +//! однако многие стандартные и PIP типы уже там. +//! Возвращает \a PIObject::Connection #define CONNECTU_QUEUED(src, event, dest, handler, performer) -/// \relatesalso PIObject @brief connect event \"event\" from object \"src\" to lambda-expression \"functor\". \"Event\" and \"functor\" must has equal argument lists. -/// Returns PIObject::Connection +//! \relatesalso PIObject +//! \~\brief +//! \~english Connect event \"event\" from object \"src\" to lambda-expression \"functor\". +//! \~russian Соединяет событие \"event\" объекта \"src\" к лямбда-функции \"functor\". +//! \~\details +//! \~english +//! \"event\" and \"functor\" must has equal argument lists. +//! You should parentness \"functor\" with () if this is complex lambda. +//! Returns \a PIObject::Connection +//! \~russian +//! \"event\" и \"functor\" должны иметь одинаковые аргументы. +//! В случае сложной лямбда-функции оберните её (). +//! Возвращает \a PIObject::Connection #define CONNECTL(src, event, functor) -/// \relatesalso PIObject @brief connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" with check of event and handler exists -/// Returns PIObject::Connection +//! \relatesalso PIObject +//! \deprecated +//! \~english Use \a CONNECTU() instead +//! \~russian Используйте \a CONNECTU() +//! \~\brief +//! \~english Connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" with check of event and handler exists +//! \~russian Соединяет событие \"event\" объекта \"src\" к обработчику или событию \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" с проверкой наличия события и обработчика. +//! \~\details +//! Returns PIObject::Connection #define CONNECT0(ret, src, event, dest, handler) -/// \relatesalso PIObject @brief connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" with check of event and handler exists -/// Returns PIObject::Connection +//! \relatesalso PIObject +//! \deprecated +//! \~english Use \a CONNECTU() instead +//! \~russian Используйте \a CONNECTU() +//! \~\brief +//! \~english Connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" with check of event and handler exists +//! \~russian Соединяет событие \"event\" объекта \"src\" к обработчику или событию \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" с проверкой наличия события и обработчика. +//! \~\details +//! Returns PIObject::Connection #define CONNECT1(ret, type0, src, event, dest, handler) -/// \relatesalso PIObject @brief connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" with check of event and handler exists -/// Returns PIObject::Connection +//! \relatesalso PIObject +//! \deprecated +//! \~english Use \a CONNECTU() instead +//! \~russian Используйте \a CONNECTU() +//! \~\brief +//! \~english Connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" with check of event and handler exists +//! \~russian Соединяет событие \"event\" объекта \"src\" к обработчику или событию \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" с проверкой наличия события и обработчика. +//! \~\details +//! Returns PIObject::Connection #define CONNECT2(ret, type0, type1, src, event, dest, handler) -/// \relatesalso PIObject @brief connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" with check of event and handler exists -/// Returns PIObject::Connection +//! \relatesalso PIObject +//! \deprecated +//! \~english Use \a CONNECTU() instead +//! \~russian Используйте \a CONNECTU() +//! \~\brief +//! \~english Connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" with check of event and handler exists +//! \~russian Соединяет событие \"event\" объекта \"src\" к обработчику или событию \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" с проверкой наличия события и обработчика. +//! \~\details +//! Returns PIObject::Connection #define CONNECT3(ret, type0, type1, type2, src, event, dest, handler) -/// \relatesalso PIObject @brief connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" with check of event and handler exists. -/// Returns PIObject::Connection +//! \relatesalso PIObject +//! \deprecated +//! \~english Use \a CONNECTU() instead +//! \~russian Используйте \a CONNECTU() +//! \~\brief +//! \~english Connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" with check of event and handler exists. +//! \~russian Соединяет событие \"event\" объекта \"src\" к обработчику или событию \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" с проверкой наличия события и обработчика. +//! \~\details +//! Returns PIObject::Connection #define CONNECT4(ret, type0, type1, type2, type3, src, event, dest, handler) -/// \relatesalso PIObject @brief CONNECT is synonym of CONNECT0 +//! \relatesalso PIObject +//! \deprecated +//! \~english Use \a CONNECTU() instead +//! \~russian Используйте \a CONNECTU() +//! \~\brief +//! \~english Synonym of \a CONNECT0 +//! \~russian Аналог \a CONNECT0 #define CONNECT CONNECT0 -/// \relatesalso PIObject @brief connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" without check of event exists +//! \relatesalso PIObject +//! \deprecated +//! \~english Use \a CONNECTU() instead +//! \~russian Используйте \a CONNECTU() +//! \~\brief +//! \~english Connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" without check of event exists +//! \~russian Соединяет событие \"event\" объекта \"src\" к обработчику или событию \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" без проверки наличия события и обработчика. #define WEAK_CONNECT0(ret, src, event, dest, handler) -/// \relatesalso PIObject @brief connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" without check of event exists +//! \relatesalso PIObject +//! \deprecated +//! \~english Use \a CONNECTU() instead +//! \~russian Используйте \a CONNECTU() +//! \~\brief +//! \~english Connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" without check of event exists +//! \~russian Соединяет событие \"event\" объекта \"src\" к обработчику или событию \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" без проверки наличия события и обработчика. #define WEAK_CONNECT1(ret, type0, src, event, dest, handler) -/// \relatesalso PIObject @brief connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" without check of event exists +//! \relatesalso PIObject +//! \deprecated +//! \~english Use \a CONNECTU() instead +//! \~russian Используйте \a CONNECTU() +//! \~\brief +//! \~english Connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" without check of event exists +//! \~russian Соединяет событие \"event\" объекта \"src\" к обработчику или событию \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" без проверки наличия события и обработчика. #define WEAK_CONNECT2(ret, type0, type1, src, event, dest, handler) -/// \relatesalso PIObject @brief connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" without check of event exists +//! \relatesalso PIObject +//! \deprecated +//! \~english Use \a CONNECTU() instead +//! \~russian Используйте \a CONNECTU() +//! \~\brief +//! \~english Connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" without check of event exists +//! \~russian Соединяет событие \"event\" объекта \"src\" к обработчику или событию \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" без проверки наличия события и обработчика. #define WEAK_CONNECT3(ret, type0, type1, type2, src, event, dest, handler) -/// \relatesalso PIObject @brief connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" without check of event exists +//! \relatesalso PIObject +//! \deprecated +//! \~english Use \a CONNECTU() instead +//! \~russian Используйте \a CONNECTU() +//! \~\brief +//! \~english Connect event \"event\" from object \"src\" to event handler \"handler\" with return type \"ret\" from object \"dest\" without check of event exists +//! \~russian Соединяет событие \"event\" объекта \"src\" к обработчику или событию \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" без проверки наличия события и обработчика. #define WEAK_CONNECT4(ret, type0, type1, type2, type3, src, event, dest, handler) -/// \relatesalso PIObject @brief WEAK_CONNECT is synonym of WEAK_CONNECT0 +//! \relatesalso PIObject +//! \deprecated +//! \~english Use \a CONNECTU() instead +//! \~russian Используйте \a CONNECTU() +//! \~\brief +//! \~english Synonym of \a WEAK_CONNECT0 +//! \~russian Аналог \a WEAK_CONNECT0 #define WEAK_CONNECT WEAK_CONNECT0 -/// \relatesalso PIObject @brief piDisconnect event \"event\" from object \"src\" from event handler \"handler\" with return type \"ret\" from object \"dest\" +//! \relatesalso PIObject +//! \~\brief +//! \~english piDisconnect event \"event\" from object \"src\" from event handler \"handler\" with return type \"ret\" from object \"dest\" +//! \~russian piDisconnect событие \"event\" объекта \"src\" от обработчика или события \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" #define DISCONNECT0(ret, src, event, dest, handler) -/// \relatesalso PIObject @brief piDisconnect event \"event\" from object \"src\" from event handler \"handler\" with return type \"ret\" from object \"dest\" +//! \relatesalso PIObject +//! \~\brief +//! \~english piDisconnect event \"event\" from object \"src\" from event handler \"handler\" with return type \"ret\" from object \"dest\" +//! \~russian piDisconnect событие \"event\" объекта \"src\" от обработчика или события \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" #define DISCONNECT1(ret, type0, src, event, dest, handler) -/// \relatesalso PIObject @brief piDisconnect event \"event\" from object \"src\" from event handler \"handler\" with return type \"ret\" from object \"dest\" +//! \relatesalso PIObject +//! \~\brief +//! \~english piDisconnect event \"event\" from object \"src\" from event handler \"handler\" with return type \"ret\" from object \"dest\" +//! \~russian piDisconnect событие \"event\" объекта \"src\" от обработчика или события \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" #define DISCONNECT2(ret, type0, type1, src, event, dest, handler) -/// \relatesalso PIObject @brief piDisconnect event \"event\" from object \"src\" from event handler \"handler\" with return type \"ret\" from object \"dest\" +//! \relatesalso PIObject +//! \~\brief +//! \~english piDisconnect event \"event\" from object \"src\" from event handler \"handler\" with return type \"ret\" from object \"dest\" +//! \~russian piDisconnect событие \"event\" объекта \"src\" от обработчика или события \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" #define DISCONNECT3(ret, type0, type1, type2, src, event, dest, handler) -/// \relatesalso PIObject @brief piDisconnect event \"event\" from object \"src\" from event handler \"handler\" with return type \"ret\" from object \"dest\" +//! \relatesalso PIObject +//! \~\brief +//! \~english piDisconnect event \"event\" from object \"src\" from event handler \"handler\" with return type \"ret\" from object \"dest\" +//! \~russian piDisconnect событие \"event\" объекта \"src\" от обработчика или события \"handler\" с возвращаемым типом \"ret\" объекта \"dest\" #define DISCONNECT4(ret, type0, type1, type2, type3, src, event, dest, handler) -/// \relatesalso PIObject @brief DISCONNECT is synonym of DISCONNECT0 +//! \relatesalso PIObject +//! \~\brief +//! \~english Synonym of \a DISCONNECT0 +//! \~russian Аналог \a DISCONNECT0 #define DISCONNECT DISCONNECT0 -/// \relatesalso PIObject @brief Returns pointer to events handler \"handler\" +//! \relatesalso PIObject +//! \~\brief +//! \~english Returns pointer to events handler \"handler\" +//! \~russian Возвращает указатель на обработчик события \"handler\" #define HANDLER(handler) -#define PIOBJECT(name) -#define PIOBJECT_SUBCLASS(name) - - #else diff --git a/libs/main/core/pipropertystorage.cpp b/libs/main/core/pipropertystorage.cpp index 246ba6c9..152d20cc 100644 --- a/libs/main/core/pipropertystorage.cpp +++ b/libs/main/core/pipropertystorage.cpp @@ -20,6 +20,62 @@ #include "pipropertystorage.h" +//! \addtogroup Core +//! \{ +//! \~\class PIPropertyStorage pipropertystorage.h +//! \~\brief +//! \~english This class provides key-value properties storage +//! \~russian Этот класс предоставляет ключ-значение хранение свойств +//! +//! \~\details +//! \~english \section PIPropertyStorage_sec0 Synopsis +//! \~russian \section PIPropertyStorage_sec0 Краткий обзор +//! +//! \~english +//! Key-value storage, based on PIVector with PIPropertyStorage::Property elements. Each element in vector +//! contains unique name. You can access property by name with \a propertyValueByName() or \a propertyByName(). +//! You can add or replace property by \a addProperty(const Property&) or \a addProperty(const PIString&, const PIVariant&, const PIString&, int). +//! +//! \~russian +//! Хранилище свойств ключ-значние, основанный на PIVector с элементами PIPropertyStorage::Property. +//! Каждый элемент имеет уникальное имя. Доступ к свойствам через \a propertyValueByName() или \a propertyByName(). +//! Добавление и перезапись свойств через \a addProperty(const Property&) или \a addProperty(const PIString&, const PIVariant&, const PIString&, int). +//! +//! \~english Example: +//! \~russian Пример: +//! \~\code{.cpp} +//! \endcode +//! \} + + +//! \addtogroup Core +//! \{ +//! \~\class PIPropertyStorage::Property pipropertystorage.h +//! \~\brief +//! \~english PIPropertyStorage element +//! \~russian Элемент PIPropertyStorage +//! +//! \~\details +//! \~english \section PIPropertyStorage_sec0 Synopsis +//! \~russian \section PIPropertyStorage_sec0 Краткий обзор +//! +//! \~english +//! Key-value storage, based on PIVector with PIPropertyStorage::Property elements. Each element in vector +//! contains unique name. You can access property by name with \a propertyValueByName() or \a propertyByName(). +//! You can add or replace property by \a addProperty(const Property&) or \a addProperty(const PIString&, const PIVariant&, const PIString&, int). +//! +//! \~russian +//! Хранилище свойств ключ-значние, основанный на PIVector с элементами PIPropertyStorage::Property. +//! Каждый элемент имеет уникальное имя. Доступ к свойствам через \a propertyValueByName() или \a propertyByName(). +//! Добавление и перезапись свойств через \a addProperty(const Property&) или \a addProperty(const PIString&, const PIVariant&, const PIString&, int). +//! +//! \~english Example: +//! \~russian Пример: +//! \~\code{.cpp} +//! \endcode +//! \} + + bool PIPropertyStorage::isPropertyExists(const PIString & _name) const { for (uint i = 0; i < props.size(); ++i) if (props[i].name == _name) @@ -28,6 +84,9 @@ bool PIPropertyStorage::isPropertyExists(const PIString & _name) const { } +//! \details +//! \~english Returns "true" if new property added, else if update existing property return "false" +//! \~russian Возвращает истину если новое свойство добавлено, в случае обновления "ложь" bool PIPropertyStorage::addProperty(const PIPropertyStorage::Property & p) { for (uint i = 0; i < props.size(); ++i) if (props[i].name == p.name) { @@ -50,6 +109,9 @@ bool PIPropertyStorage::addProperty(PIPropertyStorage::Property && p) { } +//! \details +//! \~english Returns "true" if new property added, else if update existing property return "false" +//! \~russian Возвращает истину если новое свойство добавлено, в случае обновления "ложь" bool PIPropertyStorage::addProperty(const PIString & _name, const PIVariant & _def_value, const PIString & _comment, int _flags) { return addProperty(Property(_name, _comment, _def_value, _flags)); } @@ -66,6 +128,9 @@ bool PIPropertyStorage::removeProperty(const PIString & _name) { } +//! \details +//! \~english "flag" checked as bitfield +//! \~russian "flag" проверяется как битовое поле int PIPropertyStorage::removePropertiesByFlag(int flag) { int ret = 0; for (int i = 0; i < props.size_s(); ++i) { @@ -79,6 +144,9 @@ int PIPropertyStorage::removePropertiesByFlag(int flag) { } +//! \details +//! \~english "flag_ignore" is bitfield to ignore property in merge process +//! \~russian "flag_ignore" - битовое поле для исключения свойств из процесса слияния void PIPropertyStorage::updateProperties(const PIVector & properties_, int flag_ignore) { PIMap values; piForeachC(Property & p, props) diff --git a/libs/main/core/pipropertystorage.h b/libs/main/core/pipropertystorage.h index bc678279..ac259b72 100644 --- a/libs/main/core/pipropertystorage.h +++ b/libs/main/core/pipropertystorage.h @@ -1,8 +1,8 @@ -/*! @file pipropertystorage.h - * @brief Storage of properties for GUI usage - * - * This file declare PIPropertyStorage -*/ +/*! \file pipropertystorage.h + * \~\brief + * \~english Properties array + * \~russian Массив свойств + */ /* PIP - Platform Independent Primitives Storage of properties for GUI usage @@ -27,25 +27,28 @@ #include "pivariant.h" -/** - * @brief Key-value storage, based on PIVector with PIPropertyStorage::Property elements. Each element in vector - * contains unique name and you can identify property by name with propertyValueByName(), propertyByName(). - * You can add property using addProperty(const Property&), addProperty(const PIString&, const PIVariant&, const PIString&, int). - */ + class PIP_EXPORT PIPropertyStorage { public: + + //! \~english Contructs an empty %PIPropertyStorage + //! \~russian Создает пустой %PIPropertyStorage PIPropertyStorage() {} - /** - * @brief PIPropertyStorage element. - */ struct PIP_EXPORT Property { - Property(const PIString & n = PIString(), const PIString & c = PIString(), const PIVariant & v = PIVariant(), int f = 0): - name(n), comment(c), value(v), flags(f) {} - Property(const Property & o): - name(o.name), comment(o.comment), value(o.value), flags(o.flags) {} + + //! \~english Contructs %PIPropertyStorage::Property with name "n", comment "c", value "v" and flags "f" + //! \~russian Создает %PIPropertyStorage::Property с именем "n", комментарием "c", значением "v" и флагами "f" + Property(const PIString & n = PIString(), const PIString & c = PIString(), const PIVariant & v = PIVariant(), int f = 0): name(n), comment(c), value(v), flags(f) {} + + //! \~english Contructs copy of another %PIPropertyStorage::Property "o" + //! \~russian Создает копию %PIPropertyStorage::Property "o" + Property(const Property & o): name(o.name), comment(o.comment), value(o.value), flags(o.flags) {} + Property(Property && o) {swap(o);} + //! \~english Assign operator + //! \~russian Оператор присваивания Property & operator =(const Property & v) { name = v.name; comment = v.comment; @@ -56,10 +59,24 @@ public: Property & operator =(Property && v) {swap(v); return *this;} + //! \~english Returns value as boolean + //! \~russian Возвращает значение как логическое bool toBool() const {return value.toBool();} + + //! \~english Returns value as integer + //! \~russian Возвращает значение как целое int toInt() const {return value.toInt();} + + //! \~english Returns value as float + //! \~russian Возвращает значение как float float toFloat() const {return value.toFloat();} + + //! \~english Returns value as double + //! \~russian Возвращает значение как double double toDouble() const {return value.toDouble();} + + //! \~english Returns value as string + //! \~russian Возвращает значение как строку PIString toString() const {return value.toString();} void swap(Property & o) { @@ -69,22 +86,30 @@ public: piSwap(flags, o.flags); } - /*! Uniqueue id of property */ + //! \~english Property name (uniqueue for %PIPropertyStorage) + //! \~russian Имя свойства (уникальное для %PIPropertyStorage) PIString name; - /*! Optional description of property */ + //! \~english Optional description of property + //! \~russian Опциональный комментарий свойства PIString comment; - /*! Custom value of property */ + //! \~english Property value + //! \~russian Значение свойства PIVariant value; - /*! Abstract flags which may be used for user needs */ + //! \~english Abstract flags which may be used for user needs + //! \~russian Абстрактные флаги, могут быть использованы для своих нужд int flags; }; + //! \~english Contructs %PIPropertyStorage with "pl" properties + //! \~russian Создает %PIPropertyStorage со свойствами "pl" PIPropertyStorage(const PIVector & pl) {props = pl;} - PIPropertyStorage(PIVector && pl): props(std::move(pl)) {} + //! \~english Contructs %PIPropertyStorage from another "o" + //! \~russian Создает %PIPropertyStorage из другого "o" + PIPropertyStorage(PIVector && o): props(std::move(o)) {} typedef PIVector::const_iterator const_iterator; typedef PIVector::iterator iterator; @@ -95,115 +120,140 @@ public: iterator end() {return props.end();} const_iterator end() const {return props.end();} + //! \~english Returns properties count + //! \~russian Возвращает количество свойств int length() const {return props.length();} + + //! \~english Returns properties count + //! \~russian Возвращает количество свойств int size() const {return props.size();} + + //! \~english Returns if no properties + //! \~russian Возвращает нет ли свойств bool isEmpty() const {return props.isEmpty();} + + //! \~english Returns if properties + //! \~russian Возвращает есть ли свойства + bool isNotEmpty() const {return props.isNotEmpty();} + + //! \~english Returns first property + //! \~russian Возвращает первое свойство Property & front() {return props.front();} + + //! \~english Returns first property as const + //! \~russian Возвращает первое свойство как константу const Property & front() const {return props.front();} + + //! \~english Returns last property + //! \~russian Возвращает последнее свойство Property & back() {return props.back();} + + //! \~english Returns last property as const + //! \~russian Возвращает последнее свойство как константу const Property & back() const {return props.back();} + + //! \~english Remove property at index "i" + //! \~russian Удаляет свойство по индексу "i" void removeAt(int i) {props.remove(i);} + + //! \~english Remove all properties + //! \~russian Удаляет все свойства void clear() {props.clear();} + + //! \~english Returns copy of this %PIPropertyStorage + //! \~russian Возвращает копию этого %PIPropertyStorage PIPropertyStorage copy() const {return PIPropertyStorage(*this);} + + //! \~english Returns properties count + //! \~russian Возвращает количество свойств int propertiesCount() const {return props.size();} + + //! \~english Returns properties as PIVector + //! \~russian Возвращает свойства как PIVector PIVector & properties() {return props;} + + //! \~english Returns properties as const PIVector + //! \~russian Возвращает свойства как константный PIVector const PIVector & properties() const {return props;} + const PIPropertyStorage & propertyStorage() const {return *this;} - /** - * @brief Check if property with \a name exists - * @return "true" if property exists - */ - bool isPropertyExists(const PIString & _name) const; + //! \~english Returns if properties with name "name" exists + //! \~russian Возвращает присутствует ли свойство с именем "name" + bool isPropertyExists(const PIString & name) const; - /** - * @brief Remove all properties - */ + //! \~english Remove all properties + //! \~russian Удаляет все свойства void clearProperties() {props.clear();} - /** - * @brief Add property if name isn't present in storage, otherwrise update existing property with same name. - * @return "true" if new property added, else if update existing property return "false" - * @param p to copy in storage - */ + //! \~english Add property if name isn't present in storage, otherwrise update existing property with same name + //! \~russian Добавляет новое свойство, если его имени не было в контейнере, иначе обновляет существующее свойство с этим именем bool addProperty(const Property & p); bool addProperty(Property && p); - /** - * @brief First of all construct Property with method params. After then add property if name isn't present - * in storage, otherwrise update existing property with same name. - * @return "true" if new property added, else if update existing property return "false" - */ + //! \~english Add property if name isn't present in storage, otherwrise update existing property with same name + //! \~russian Добавляет новое свойство, если его имени не было в контейнере, иначе обновляет существующее свойство с этим именем bool addProperty(const PIString & _name, const PIVariant & _def_value, const PIString & _comment = PIString(), int _flags = 0); - /** - * @brief Remove property with \a name - * @return "true" if property exists and removed - */ - bool removeProperty(const PIString & _name); + //! \~english Remove property with name "name", returns if property removed + //! \~russian Удаляет свойство с именем "name", возвращает было ли оно удалено + bool removeProperty(const PIString & name); - /** - * @brief Remove properties wich has \a flag set - * @return removed properties count - */ + //! \~english Remove all properties with flag "flag" set, returns removed properties count + //! \~russian Удаляет все свойства с флагом "flag", возвращает количество удаленных свойств int removePropertiesByFlag(int flag); - /** - * @brief Merge other \a properties_ into this - * @param flag_ignore - properties wich has this flag set will be ignored in merge - */ - void updateProperties(const PIVector & properties_, int flag_ignore = 0); + //! \~english Merge other "properties" into this + //! \~russian Объединяет "properties" с текущим контейнером + void updateProperties(const PIVector & properties, int flag_ignore = 0); - /** - * @brief Search property by name and return it. - * - * @param name of property - * @return property value or default constructed Property - */ + //! \~english Returns property with name "name" or default-constructed %PIPropertyStorage::Property + //! \~russian Возвращает свойство с именем "name" или пустое %PIPropertyStorage::Property Property propertyByName(const PIString & name) const; - /** - * @brief Search property by name and return property value. - * - * @param name of property - * @return property value or invalid PIVariant if name unknown - */ + //! \~english Returns property value with name "name" or invalid %PIVariant + //! \~russian Возвращает значение свойства с именем "name" или недействительный %PIVariant PIVariant propertyValueByName(const PIString & name) const; - /** - * @brief Set value of property with specific name if name is present in storage. - * - * @param name of property to set value - * @param value to set - * @return "true" if property exists and updated - */ + //! \~english Set value of property with name "name" to "value", returns if property exists + //! \~russian Устанавливает значение "value" свойству с именем "name", возвращает существует ли такое свойство bool setPropertyValue(const PIString & name, const PIVariant & value); - /** - * @brief Set comment of property with specific name if name is present in storage. - * - * @param name of property to set comment - * @param comment to set - * @return "true" if property exists and updated - */ + //! \~english Set comment of property with name "name" to "comment", returns if property exists + //! \~russian Устанавливает комментарий "comment" свойству с именем "name", возвращает существует ли такое свойство bool setPropertyComment(const PIString & name, const PIString & comment); - /** - * @brief Set flags of property with specific name if name is present in storage. - * - * @param name of property to set flags - * @param flags to set - * @return "true" if property exists and updated - */ + //! \~english Set flags of property with name "name" to "flags", returns if property exists + //! \~russian Устанавливает флаги "flags" свойству с именем "name", возвращает существует ли такое свойство bool setPropertyFlags(const PIString & name, int flags); + //! \~english Add property "p" + //! \~russian Добавляет свойство "p" PIPropertyStorage & operator <<(const PIPropertyStorage::Property & p) {props << p; return *this;} + + //! \~english Add properties "p" + //! \~russian Добавляет свойства "p" PIPropertyStorage & operator <<(const PIVector & p) {props << p; return *this;} + + //! \~english Add properties "p" + //! \~russian Добавляет свойства "p" PIPropertyStorage & operator <<(const PIPropertyStorage & p) {props << p.props; return *this;} + + //! \~english Returns property with index "i" + //! \~russian Возвращает свойство по индексу "i" Property & operator[](int i) {return props[i];} + + //! \~english Returns property with index "i" as const + //! \~russian Возвращает свойство по индексу "i" как константу const Property & operator[](int i) const {return props[i];} + + //! \~english Returns property with name "name" + //! \~russian Возвращает свойство с именем "name" Property & operator[](const PIString & name); + + //! \~english Returns property with name "name" as const + //! \~russian Возвращает свойство с именем "name" как константу const Property operator[](const PIString & name) const; static Property parsePropertyLine(PIString l); diff --git a/libs/main/core/pistring.cpp b/libs/main/core/pistring.cpp index 104f506d..578d949a 100644 --- a/libs/main/core/pistring.cpp +++ b/libs/main/core/pistring.cpp @@ -36,7 +36,7 @@ #endif /*! \class PIString - * @brief String class + * \brief String class * \details PIP use this class for use string information. * * \section PIString_sec0 Synopsis @@ -72,7 +72,7 @@ /*! \fn int versionCompare(const PIString & v0, const PIString & v1, int components = 6) * \relatesalso PIString - * @brief Compare two version strings in free notation and returns 0, -1 or 1 + * \brief Compare two version strings in free notation and returns 0, -1 or 1 * \details This function parse version to number codes and labels. Then it * compare no more than "components" codes. If there is no difference, compare * labels. Each label has corresponding integer value, so @@ -95,7 +95,7 @@ * * \fn PIString versionNormalize(const PIString & v) * \relatesalso PIString - * @brief Converts version string in free notation to classic view + * \brief Converts version string in free notation to classic view * \details Parse version as described in \a versionCompare() and * returns classic view of codes and labels: major.minor.revision[-build][_label]. * Example: diff --git a/libs/main/core/pistring.h b/libs/main/core/pistring.h index be55ae1a..9a4d1d6d 100644 --- a/libs/main/core/pistring.h +++ b/libs/main/core/pistring.h @@ -1,5 +1,5 @@ -/*! @file pistring.h - * @brief String +/*! \file pistring.h + * \brief String * * This file declare string and string list classes */ @@ -59,12 +59,12 @@ public: PIString(const PIChar c): PIDeque() {*this += c;} PIString(const char c): PIDeque() {*this += PIChar(c);} - /*! @brief Contructs string from c-string "str" + /*! \brief Contructs string from c-string "str" * \details "str" should be null-terminated\n * Example: \snippet pistring.cpp PIString(char * ) */ PIString(const char * str): PIDeque() {*this += str;} - /*! @brief Contructs string from \c wchar_t c-string "str" + /*! \brief Contructs string from \c wchar_t c-string "str" * \details "str" should be null-terminated\n * Example: \snippet pistring.cpp PIString(wchar_t * ) */ PIString(const wchar_t * str): PIDeque() {*this += str;} @@ -72,18 +72,18 @@ public: //! Contructs string from byte array "ba" PIString(const PIByteArray & ba): PIDeque() {*this += ba;} - //! @brief Contructs string from "len" characters of buffer "str" + //! \brief Contructs string from "len" characters of buffer "str" PIString(const PIChar * str, const int len): PIDeque(str, size_t(len)) {} - /*! @brief Contructs string from "len" characters of buffer "str" + /*! \brief Contructs string from "len" characters of buffer "str" * \details Example: \snippet pistring.cpp PIString(char * , int) */ PIString(const char * str, const int len): PIDeque() {appendFromChars(str, len);} - /*! @brief Contructs string as sequence of characters "c" of buffer with length "len" + /*! \brief Contructs string as sequence of characters "c" of buffer with length "len" * \details Example: \snippet pistring.cpp PIString(int, char) */ PIString(const int len, const char c): PIDeque() {for (int i = 0; i < len; ++i) push_back(c);} - /*! @brief Contructs string as sequence of symbols "c" of buffer with length "len" + /*! \brief Contructs string as sequence of symbols "c" of buffer with length "len" * \details Example: \snippet pistring.cpp PIString(int, PIChar) */ PIString(const int len, const PIChar c): PIDeque() {for (int i = 0; i < len; ++i) push_back(c);} @@ -148,32 +148,32 @@ public: //! Compare operator bool operator >=(const char * str) const {return *this >= PIString(str);} - /*! @brief Append string "str" at the end of string + /*! \brief Append string "str" at the end of string * \details Example: \snippet pistring.cpp PIString::<<(PIString) */ PIString & operator <<(const PIString & str) {*this += str; return *this;} - /*! @brief Append symbol "c" at the end of string + /*! \brief Append symbol "c" at the end of string * \details Example: \snippet pistring.cpp PIString::<<(PIChar) */ PIString & operator <<(const PIChar c) {*this += c; return *this;} - /*! @brief Append symbol "c" at the end of string + /*! \brief Append symbol "c" at the end of string * \details Example: \snippet pistring.cpp PIString::<<(PIChar) */ PIString & operator <<(const char c) {*this += PIChar(c); return *this;} - /*! @brief Append c-string "str" at the end of string + /*! \brief Append c-string "str" at the end of string * \details Example: \snippet pistring.cpp PIString::<<(char * ) */ PIString & operator <<(const char * str) {*this += str; return *this;} - /*! @brief Append \c wchar_t c-string "str" at the end of string + /*! \brief Append \c wchar_t c-string "str" at the end of string * \details Example: \snippet pistring.cpp PIString::<<(wchar_t * ) */ PIString & operator <<(const wchar_t * str) {*this += str; return *this;} - /*! @brief Append string representation of "num" at the end of string + /*! \brief Append string representation of "num" at the end of string * \details Example: \snippet pistring.cpp PIString::<<(int) */ PIString & operator <<(const int & num) {*this += PIString::fromNumber(num); return *this;} PIString & operator <<(const uint & num) {*this += PIString::fromNumber(num); return *this;} - /*! @brief Append string representation of "num" at the end of string + /*! \brief Append string representation of "num" at the end of string * \details Example: \snippet pistring.cpp PIString::<<(int) */ PIString & operator <<(const long & num) {*this += PIString::fromNumber(num); return *this;} PIString & operator <<(const ulong & num) {*this += PIString::fromNumber(num); return *this;} @@ -181,101 +181,101 @@ public: PIString & operator <<(const llong & num) {*this += PIString::fromNumber(num); return *this;} PIString & operator <<(const ullong & num) {*this += PIString::fromNumber(num); return *this;} - /*! @brief Append string representation of "num" at the end of string + /*! \brief Append string representation of "num" at the end of string * \details Example: \snippet pistring.cpp PIString::<<(int) */ PIString & operator <<(const float & num) {*this += PIString::fromNumber(num); return *this;} - /*! @brief Append string representation of "num" at the end of string + /*! \brief Append string representation of "num" at the end of string * \details Example: \snippet pistring.cpp PIString::<<(int) */ PIString & operator <<(const double & num) {*this += PIString::fromNumber(num); return *this;} - //! @brief Insert string "str" at the begin of string + //! \brief Insert string "str" at the begin of string PIString & prepend(const PIString & str) {insert(0, str); return *this;} - //! @brief Insert string "str" at the end of string + //! \brief Insert string "str" at the end of string PIString & append(const PIString & str) {*this += str; return *this;} - /*! @brief Return part of string from symbol at index "start" and maximum length "len" + /*! \brief Return part of string from symbol at index "start" and maximum length "len" * \details All variants demonstrated in example: \snippet pistring.cpp PIString::mid * \sa \a left(), \a right() */ PIString mid(const int start, const int len = -1) const; - /*! @brief Return sub-string of string from symbol at index "start" and maximum length "len" */ + /*! \brief Return sub-string of string from symbol at index "start" and maximum length "len" */ PIString subString(const int start, const int len = -1) const {return mid(start, len);} - /*! @brief Return part of string from left and maximum length "len" + /*! \brief Return part of string from left and maximum length "len" * \details Example: \snippet pistring.cpp PIString::left * \sa \a mid(), \a right() */ PIString left(const int len) const {return len <= 0 ? PIString() : mid(0, len);} - /*! @brief Return part of string from right and maximum length "len" + /*! \brief Return part of string from right and maximum length "len" * \details Example: \snippet pistring.cpp PIString::right * \sa \a mid(), \a left() */ PIString right(const int len) const {return len <= 0 ? PIString() : mid(size() - len, len);} - /*! @brief Remove part of string from symbol as index "start" and maximum length "len" + /*! \brief Remove part of string from symbol as index "start" and maximum length "len" * and return this string * \details All variants demonstrated in example: \snippet pistring.cpp PIString::cutMid * \sa \a cutLeft(), \a cutRight() */ PIString & cutMid(const int start, const int len); - /*! @brief Remove part of string from left and maximum length "len" and return this string + /*! \brief Remove part of string from left and maximum length "len" and return this string * \details Example: \snippet pistring.cpp PIString::cutLeft * \sa \a cutMid(), \a cutRight() */ PIString & cutLeft(const int len) {return len <= 0 ? *this : cutMid(0, len);} - /*! @brief Remove part of string from right and maximum length "len" and return this string + /*! \brief Remove part of string from right and maximum length "len" and return this string * \details Example: \snippet pistring.cpp PIString::cutRight * \sa \a cutMid(), \a cutLeft() */ PIString & cutRight(const int len) {return len <= 0 ? *this : cutMid(size() - len, len);} - /*! @brief Remove spaces at the start and at the end of string and return this string + /*! \brief Remove spaces at the start and at the end of string and return this string * \details Example: \snippet pistring.cpp PIString::trim * \sa \a trimmed() */ PIString & trim(); - /*! @brief Return copy of this string without spaces at the start and at the end + /*! \brief Return copy of this string without spaces at the start and at the end * \details Example: \snippet pistring.cpp PIString::trimmed * \sa \a trim() */ PIString trimmed() const; - /*! @brief Replace part of string from index "from" and maximum length "len" + /*! \brief Replace part of string from index "from" and maximum length "len" * with string "with" and return this string * \details Example: \snippet pistring.cpp PIString::replace_0 * \sa \a replaced(), \a replaceAll() */ PIString & replace(const int from, const int count, const PIString & with); - /*! @brief Replace part copy of this string from index "from" and maximum length "len" + /*! \brief Replace part copy of this string from index "from" and maximum length "len" * with string "with" and return copied string * \details Example: \snippet pistring.cpp PIString::replaced_0 * \sa \a replace(), \a replaceAll() */ PIString replaced(const int from, const int count, const PIString & with) const {PIString str(*this); str.replace(from, count, with); return str;} - /*! @brief Replace first founded substring "what" with string "with" and return this string + /*! \brief Replace first founded substring "what" with string "with" and return this string * \details If "ok" is not null, it set to "true" if something was replaced\n * Example: \snippet pistring.cpp PIString::replace_1 * \sa \a replaced(), \a replaceAll() */ PIString & replace(const PIString & what, const PIString & with, bool * ok = 0); - /*! @brief Replace first founded substring "what" with string "with" and return copied string + /*! \brief Replace first founded substring "what" with string "with" and return copied string * \details If "ok" is not null, it set to "true" if something was replaced\n * Example: \snippet pistring.cpp PIString::replaced_1 * \sa \a replaced(), \a replaceAll() */ PIString replaced(const PIString & what, const PIString & with, bool * ok = 0) const {PIString str(*this); str.replace(what, with, ok); return str;} - /*! @brief Replace all founded substrings "what" with strings "with" and return this string + /*! \brief Replace all founded substrings "what" with strings "with" and return this string * \details Example: \snippet pistring.cpp PIString::replaceAll * \sa \a replace(), \a replaced() */ PIString & replaceAll(const PIString & what, const PIString & with); - /*! @brief Replace all founded substrings "what" with symbol "with" and return this string + /*! \brief Replace all founded substrings "what" with symbol "with" and return this string * \details Example: \snippet pistring.cpp PIString::replaceAll * \sa \a replace(), \a replaced() */ PIString & replaceAll(const PIString & what, const char with); - /*! @brief Replace all founded symbols "what" with symbol "with" and return this string + /*! \brief Replace all founded symbols "what" with symbol "with" and return this string * \details Example: \snippet pistring.cpp PIString::replaceAll * \sa \a replace(), \a replaced() */ PIString & replaceAll(const char what, const char with); @@ -288,119 +288,119 @@ public: PIString & removeAll(char c) {PIDeque::removeAll(PIChar(c)); return *this;} - /*! @brief Repeat content of string "times" times and return this string + /*! \brief Repeat content of string "times" times and return this string * \details Example: \snippet pistring.cpp PIString::repeat */ PIString & repeat(int times) {PIString ss(*this); times--; piForTimes (times) *this += ss; return *this;} - /*! @brief Returns repeated "times" times string + /*! \brief Returns repeated "times" times string * \details Example: \snippet pistring.cpp PIString::repeated */ PIString repeated(int times) const {PIString ss(*this); return ss.repeat(times);} - /*! @brief Insert symbol "c" after index "index" and return this string + /*! \brief Insert symbol "c" after index "index" and return this string * \details Example: \snippet pistring.cpp PIString::insert_0 */ PIString & insert(const int index, const PIChar c) {PIDeque::insert(index, c); return *this;} - /*! @brief Insert symbol "c" after index "index" and return this string + /*! \brief Insert symbol "c" after index "index" and return this string * \details Example: \snippet pistring.cpp PIString::insert_1 */ PIString & insert(const int index, const char c) {return insert(index, PIChar(c));} - /*! @brief Insert string "str" after index "index" and return this string + /*! \brief Insert string "str" after index "index" and return this string * \details Example: \snippet pistring.cpp PIString::insert_2 */ PIString & insert(const int index, const PIString & str); - /*! @brief Insert string "str" after index "index" and return this string + /*! \brief Insert string "str" after index "index" and return this string * \details Example: \snippet pistring.cpp PIString::insert_2 */ PIString & insert(const int index, const char * c) {return insert(index, PIString(c));} - /*! @brief Enlarge string to length "len" by addition sequence of symbols + /*! \brief Enlarge string to length "len" by addition sequence of symbols * "c" at the end of string, and return this string * \details Example: \snippet pistring.cpp PIString::expandRightTo * \sa \a expandLeftTo() */ PIString & expandRightTo(const int len, const PIChar c) {if (len > length()) resize(len, c); return *this;} - /*! @brief Enlarge string to length "len" by addition sequence of symbols + /*! \brief Enlarge string to length "len" by addition sequence of symbols * "c" at the beginning of string, and return this string * \details Example: \snippet pistring.cpp PIString::expandLeftTo * \sa \a expandRightTo() */ PIString & expandLeftTo(const int len, const PIChar c) {if (len > length()) insert(0, PIString(len - length(), c)); return *this;} - /*! @brief Enlarge and returns copy of this string to length "len" + /*! \brief Enlarge and returns copy of this string to length "len" * by addition sequence of symbols "c" at the end of string * \sa \a expandRightTo() */ PIString expandedRightTo(const int len, const PIChar c) const {return PIString(*this).expandRightTo(len, c);} - /*! @brief Enlarge and returns copy of this string to length "len" + /*! \brief Enlarge and returns copy of this string to length "len" * by addition sequence of symbols "c" at the beginning of string * \sa \a expandLeftTo() */ PIString expandedLeftTo(const int len, const PIChar c) const {return PIString(*this).expandLeftTo(len, c);} - /*! @brief Add "c" symbols at the beginning and end of the string, and return this string + /*! \brief Add "c" symbols at the beginning and end of the string, and return this string * \sa \a quoted() */ PIString & quote(PIChar c = PIChar('"')) {insert(0, c); *this += c; return *this;} - /*! @brief Return quoted copy of this string + /*! \brief Return quoted copy of this string * \sa \a quote() */ PIString quoted(PIChar c = PIChar('"')) {return PIString(*this).quote(c);} - /*! @brief Reverse string and return this string + /*! \brief Reverse string and return this string * \details Example: \snippet pistring.cpp PIString::reverse * \sa \a reversed() */ PIString & reverse() {PIString str(*this); clear(); piForeachCR (PIChar c, str) push_back(c); return *this;} - /*! @brief Reverse copy of this string and return it + /*! \brief Reverse copy of this string and return it * \details Example: \snippet pistring.cpp PIString::reversed * \sa \a reverse() */ PIString reversed() const {PIString str(*this); str.reverse(); return str;} - /*! @brief Elide string to maximum size \"size\" and return this string + /*! \brief Elide string to maximum size \"size\" and return this string * \sa \a elided() */ PIString & elide(int size, float pos = ElideCenter); - /*! @brief Elide copy of this string to maximum size \"size\" and return it + /*! \brief Elide copy of this string to maximum size \"size\" and return it * \details Example: \snippet pistring.cpp PIString::elided * \sa \a elide() */ PIString elided(int size, float pos = ElideCenter) const {PIString str(*this); str.elide(size, pos); return str;} - /*! @brief Take a part of string from symbol at index "start" and maximum length "len" and return it + /*! \brief Take a part of string from symbol at index "start" and maximum length "len" and return it * \sa \a takeLeft, \a takeRight() */ PIString takeMid(const int start, const int len = -1) {PIString ret(mid(start, len)); cutMid(start, len); return ret;} - /*! @brief Take a part from the begin of string with maximum length "len" and return it + /*! \brief Take a part from the begin of string with maximum length "len" and return it * \sa \a takeMid(), \a takeRight() */ PIString takeLeft(const int len) {PIString ret(left(len)); cutLeft(len); return ret;} - /*! @brief Take a part from the end of string with maximum length "len" and return it + /*! \brief Take a part from the end of string with maximum length "len" and return it * \sa \a takeMid(), \a takeLeft() */ PIString takeRight(const int len) {PIString ret(right(len)); cutRight(len); return ret;} - /*! @brief Take a symbol from the begin of this string and return it + /*! \brief Take a symbol from the begin of this string and return it * \details Example: \snippet pistring.cpp PIString::takeSymbol * \sa \a takeWord(), \a takeCWord(), \a takeLine(), \a takeNumber(), \a takeRange() */ PIString takeSymbol(); - /*! @brief Take a word from the begin of this string and return it + /*! \brief Take a word from the begin of this string and return it * \details Example: \snippet pistring.cpp PIString::takeWord * \sa \a takeSymbol(), \a takeCWord(), \a takeLine(), \a takeNumber(), \a takeRange() */ PIString takeWord(); - /*! @brief Take a word with letters, numbers and '_' symbols from the + /*! \brief Take a word with letters, numbers and '_' symbols from the * begin of this string and return it * \details Example: \snippet pistring.cpp PIString::takeCWord * \sa \a takeSymbol(), \a takeWord(), \a takeLine(), \a takeNumber(), \a takeRange() */ PIString takeCWord(); - /*! @brief Take a line from the begin of this string and return it + /*! \brief Take a line from the begin of this string and return it * \details Example: \snippet pistring.cpp PIString::takeLine * \sa \a takeSymbol(), \a takeWord(), \a takeCWord(), \a takeNumber(), \a takeRange() */ PIString takeLine(); - /*! @brief Take a number with C-format from the begin of this string and return it + /*! \brief Take a number with C-format from the begin of this string and return it * \details Example: \snippet pistring.cpp PIString::takeNumber * \sa \a takeSymbol(), \a takeWord(), \a takeCWord(), \a takeLine(), \a takeRange() */ PIString takeNumber(); - /*! @brief Take a range between "start" and "end" symbols from the begin of this + /*! \brief Take a range between "start" and "end" symbols from the begin of this * string and return it. * \details "Shield" symbol prevent analysis of the next symbol. * Example: \snippet pistring.cpp PIString::takeRange @@ -408,19 +408,19 @@ public: PIString takeRange(const PIChar start, const PIChar end, const PIChar shield = '\\'); - /*! @brief Return a string in brackets "start" and "end" symbols from the begin of this + /*! \brief Return a string in brackets "start" and "end" symbols from the begin of this * string and return it. * \details Example: string = "a(b(c)d)e"; inBrackets('(', ')') = "b(c)d"; */ PIString inBrackets(const PIChar start, const PIChar end) const; - /*! @brief Return real bytes count of this string + /*! \brief Return real bytes count of this string * \details It`s equivalent length of char sequence * returned by function \a data() - 1, without terminating null-char \n * Example: \snippet pistring.cpp PIString::lengthAscii * \sa \a data() */ int lengthAscii() const {buildData(__syslocname__); return data_.size_s() - 1;} - /*! @brief Return \c char * representation of this string in system codepage + /*! \brief Return \c char * representation of this string in system codepage * \details This function fill buffer by sequence * of chars. Minimum length of this buffer is count * of symbols. Returned \c char * is valid until next @@ -429,7 +429,7 @@ public: * \sa \a dataConsole(), \a dataUTF8() */ const char * data() const {buildData(__syslocname__); return (const char *)(data_.data());} - /*! @brief Return \c char * representation of this string in terminal codepage + /*! \brief Return \c char * representation of this string in terminal codepage * \details This function fill buffer by sequence * of chars. Minimum length of this buffer is count * of symbols. Returned \c char * is valid until next @@ -437,7 +437,7 @@ public: * \sa \a data(), \a dataUTF8() */ const char * dataConsole() const; - /*! @brief Return \c char * representation of this string in UTF-8 + /*! \brief Return \c char * representation of this string in UTF-8 * \details This function fill buffer by sequence * of chars. Minimum length of this buffer is count * of symbols. Returned \c char * is valid until next @@ -445,7 +445,7 @@ public: * \sa \a data(), \a dataConsole() */ const char * dataUTF8() const; - /*! @brief Return \c char * representation of this string in ASCII + /*! \brief Return \c char * representation of this string in ASCII * \details This function fill buffer by sequence * of chars. Minimum length of this buffer is count * of symbols. Returned \c char * is valid until next @@ -455,277 +455,277 @@ public: //! Returns hash uint hash() const; - //! @brief Return \a PIByteArray contains \a data() of this string without terminating null-char + //! \brief Return \a PIByteArray contains \a data() of this string without terminating null-char PIByteArray toByteArray() const {buildData(__utf8name__); return data_.resized(data_.size_s() - 1);} - //! @brief Return \a PIByteArray contains UTF-8 \a data() of this string without terminating null-char + //! \brief Return \a PIByteArray contains UTF-8 \a data() of this string without terminating null-char PIByteArray toUTF8() const; - //! @brief Return \a PIByteArray contains custom charset representation of this string without terminating null-char + //! \brief Return \a PIByteArray contains custom charset representation of this string without terminating null-char PIByteArray toCharset(const char * c) const; - /*! @brief Split string with delimiter "delim" to \a PIStringList and return it + /*! \brief Split string with delimiter "delim" to \a PIStringList and return it * \details Example: \snippet pistring.cpp PIString::split */ PIStringList split(const PIString & delim) const; - //! @brief Convert each symbol in copyed string to upper case and return it + //! \brief Convert each symbol in copyed string to upper case and return it PIString toUpperCase() const; - //! @brief Convert each symbol in copyed string to lower case and return it + //! \brief Convert each symbol in copyed string to lower case and return it PIString toLowerCase() const; PIString toNativeDecimalPoints() const; - //! @brief Returns if string contains "c" + //! \brief Returns if string contains "c" bool contains(const char c) const {return PIDeque::contains(PIChar(c));} - //! @brief Returns if string contains "str" + //! \brief Returns if string contains "str" bool contains(const char * str) const {return contains(PIString(str));} - //! @brief Returns if string contains "str" + //! \brief Returns if string contains "str" bool contains(const PIString & str) const {return find(str) >= 0;} - //! @brief Search symbol "c" from symbol at index "start" and return first occur position + //! \brief Search symbol "c" from symbol at index "start" and return first occur position //! \details Example: \snippet pistring.cpp PIString::find int find(const char c, const int start = 0) const; - //! @brief Search substring "str" from symbol at index "start" and return first occur position + //! \brief Search substring "str" from symbol at index "start" and return first occur position //! \details Example: \snippet pistring.cpp PIString::find int find(const PIString & str, const int start = 0) const; - //! @brief Search substring "str" from symbol at index "start" and return first occur position + //! \brief Search substring "str" from symbol at index "start" and return first occur position //! \details Example: \snippet pistring.cpp PIString::find int find(const char * str, const int start = 0) const {return find(PIString(str), start);} - //! @brief Search symbol "c" from symbol at index "start" and return last occur position + //! \brief Search symbol "c" from symbol at index "start" and return last occur position //! \details Example: \snippet pistring.cpp PIString::findLast int findLast(const char c, const int start = 0) const; - //! @brief Search substring "str" from symbol at index "start" and return last occur position + //! \brief Search substring "str" from symbol at index "start" and return last occur position //! \details Example: \snippet pistring.cpp PIString::findLast int findLast(const PIString & str, const int start = 0) const; - //! @brief Search substring "str" from symbol at index "start" and return last occur position + //! \brief Search substring "str" from symbol at index "start" and return last occur position //! \details Example: \snippet pistring.cpp PIString::findLast int findLast(const char * str, const int start = 0) const {return findLast(PIString(str), start);} - //! @brief Search word "word" from symbol at index "start" and return first occur position. + //! \brief Search word "word" from symbol at index "start" and return first occur position. //! \details Example: \snippet pistring.cpp PIString::findWord int findWord(const PIString & word, const int start = 0) const; - //! @brief Search C-style word "word" from symbol at index "start" and return first occur position. + //! \brief Search C-style word "word" from symbol at index "start" and return first occur position. //! \details Example: \snippet pistring.cpp PIString::findCWord int findCWord(const PIString & word, const int start = 0) const; - //! @brief Search range between "start" and "end" symbols at index "start_index" and return first occur position. + //! \brief Search range between "start" and "end" symbols at index "start_index" and return first occur position. //! \details Example: \snippet pistring.cpp PIString::findRange int findRange(const PIChar start, const PIChar end, const PIChar shield = '\\', const int start_index = 0, int * len = 0) const; - //! @brief Search any symbol of "str" from symbol at index "start" and return first occur position + //! \brief Search any symbol of "str" from symbol at index "start" and return first occur position //! \details Example: \snippet pistring.cpp PIString::findAny int findAny(const PIString & str, const int start = 0) const; - //! @brief Search any symbol of "str" from symbol at index "start" and return first occur position + //! \brief Search any symbol of "str" from symbol at index "start" and return first occur position //! \details Example: \snippet pistring.cpp PIString::findAny int findAny(const char * str, const int start = 0) const {return findAny(PIString(str), start);} - //! @brief Search any symbol of "str" from symbol at index "start" and return last occur position + //! \brief Search any symbol of "str" from symbol at index "start" and return last occur position //! \details Example: \snippet pistring.cpp PIString::findAnyLast int findAnyLast(const PIString & str, const int start = 0) const; - //! @brief Search any symbol of "str" from symbol at index "start" and return last occur position + //! \brief Search any symbol of "str" from symbol at index "start" and return last occur position //! \details Example: \snippet pistring.cpp PIString::findAnyLast int findAnyLast(const char * str, const int start = 0) const {return findAnyLast(PIString(str), start);} - //! @brief Returns number of occurrences of symbol "c" + //! \brief Returns number of occurrences of symbol "c" int entries(const PIChar c) const; - //! @brief Returns number of occurrences of symbol "c" + //! \brief Returns number of occurrences of symbol "c" int entries(char c) const {return entries(PIChar(c));} - //! @brief Return if string starts with "str" + //! \brief Return if string starts with "str" bool startsWith(const PIString & str) const; - //! @brief Return if string ends with "str" + //! \brief Return if string ends with "str" bool endsWith(const PIString & str) const; - //! @brief Return symbols length of string + //! \brief Return symbols length of string int length() const {return size();} - //! @brief Return \c true if string is empty, i.e. length = 0 + //! \brief Return \c true if string is empty, i.e. length = 0 bool isEmpty() const {return (size() == 0 || *this == "");} - //! @brief Return \c true if string equal "true", "yes", "on" or positive not null numeric value + //! \brief Return \c true if string equal "true", "yes", "on" or positive not null numeric value bool toBool() const; - //! @brief Return \c char numeric value of string + //! \brief Return \c char numeric value of string char toChar() const; - //! @brief Return \c short numeric value of string in base "base" + //! \brief Return \c short numeric value of string in base "base" //! \details Example: \snippet pistring.cpp PIString::toNumber short toShort(int base = -1, bool * ok = 0) const {return short(toNumberBase(*this, base, ok));} - //! @brief Return \c ushort numeric value of string in base "base" + //! \brief Return \c ushort numeric value of string in base "base" //! \details Example: \snippet pistring.cpp PIString::toNumber ushort toUShort(int base = -1, bool * ok = 0) const {return ushort(toNumberBase(*this, base, ok));} - //! @brief Return \c int numeric value of string in base "base" + //! \brief Return \c int numeric value of string in base "base" //! \details Example: \snippet pistring.cpp PIString::toNumber int toInt(int base = -1, bool * ok = 0) const {return int(toNumberBase(*this, base, ok));} - //! @brief Return \c uint numeric value of string in base "base" + //! \brief Return \c uint numeric value of string in base "base" //! \details Example: \snippet pistring.cpp PIString::toNumber uint toUInt(int base = -1, bool * ok = 0) const {return uint(toNumberBase(*this, base, ok));} - //! @brief Return \c long numeric value of string in base "base" + //! \brief Return \c long numeric value of string in base "base" //! \details Example: \snippet pistring.cpp PIString::toNumber long toLong(int base = -1, bool * ok = 0) const {return long(toNumberBase(*this, base, ok));} - //! @brief Return \c ulong numeric value of string in base "base" + //! \brief Return \c ulong numeric value of string in base "base" //! \details Example: \snippet pistring.cpp PIString::toNumber ulong toULong(int base = -1, bool * ok = 0) const {return ulong(toNumberBase(*this, base, ok));} - //! @brief Return \c llong numeric value of string in base "base" + //! \brief Return \c llong numeric value of string in base "base" //! \details Example: \snippet pistring.cpp PIString::toNumber llong toLLong(int base = -1, bool * ok = 0) const {return toNumberBase(*this, base, ok);} - //! @brief Return \c ullong numeric value of string in base "base" + //! \brief Return \c ullong numeric value of string in base "base" //! \details Example: \snippet pistring.cpp PIString::toNumber ullong toULLong(int base = -1, bool * ok = 0) const {return ullong(toNumberBase(*this, base, ok));} - //! @brief Return \c float numeric value of string + //! \brief Return \c float numeric value of string //! \details Example: \snippet pistring.cpp PIString::toFloat float toFloat() const; - //! @brief Return \c double numeric value of string + //! \brief Return \c double numeric value of string //! \details Example: \snippet pistring.cpp PIString::toFloat double toDouble() const; - //! @brief Return \c ldouble numeric value of string + //! \brief Return \c ldouble numeric value of string //! \details Example: \snippet pistring.cpp PIString::toFloat ldouble toLDouble() const; - //! @brief Set string content to numeric representation of "value" in base "base" + //! \brief Set string content to numeric representation of "value" in base "base" //! \details Example: \snippet pistring.cpp PIString::setNumber PIString & setNumber(const short value, int base = 10, bool * ok = 0) {clear(); *this += PIString::fromNumber(value, base, ok); return *this;} - //! @brief Set string content to numeric representation of "value" in base "base" + //! \brief Set string content to numeric representation of "value" in base "base" //! \details Example: \snippet pistring.cpp PIString::setNumber PIString & setNumber(const ushort value, int base = 10, bool * ok = 0) {clear(); *this += PIString::fromNumber(value, base, ok); return *this;} - //! @brief Set string content to numeric representation of "value" in base "base" + //! \brief Set string content to numeric representation of "value" in base "base" //! \details Example: \snippet pistring.cpp PIString::setNumber PIString & setNumber(const int value, int base = 10, bool * ok = 0) {clear(); *this += PIString::fromNumber(value, base, ok); return *this;} - //! @brief Set string content to numeric representation of "value" in base "base" + //! \brief Set string content to numeric representation of "value" in base "base" //! \details Example: \snippet pistring.cpp PIString::setNumber PIString & setNumber(const uint value, int base = 10, bool * ok = 0) {clear(); *this += PIString::fromNumber(value, base, ok); return *this;} - //! @brief Set string content to numeric representation of "value" in base "base" + //! \brief Set string content to numeric representation of "value" in base "base" //! \details Example: \snippet pistring.cpp PIString::setNumber PIString & setNumber(const long value, int base = 10, bool * ok = 0) {clear(); *this += PIString::fromNumber(value, base, ok); return *this;} - //! @brief Set string content to numeric representation of "value" in base "base" + //! \brief Set string content to numeric representation of "value" in base "base" //! \details Example: \snippet pistring.cpp PIString::setNumber PIString & setNumber(const ulong value, int base = 10, bool * ok = 0) {clear(); *this += PIString::fromNumber(value, base, ok); return *this;} - //! @brief Set string content to numeric representation of "value" in base "base" + //! \brief Set string content to numeric representation of "value" in base "base" //! \details Example: \snippet pistring.cpp PIString::setNumber PIString & setNumber(const llong & value, int base = 10, bool * ok = 0) {clear(); *this += PIString::fromNumber(value, base, ok); return *this;} - //! @brief Set string content to numeric representation of "value" in base "base" + //! \brief Set string content to numeric representation of "value" in base "base" //! \details Example: \snippet pistring.cpp PIString::setNumber PIString & setNumber(const ullong & value, int base = 10, bool * ok = 0) {clear(); *this += PIString::fromNumber(value, base, ok); return *this;} - //! @brief Set string content to numeric representation of "value" + //! \brief Set string content to numeric representation of "value" //! \details Example: \snippet pistring.cpp PIString::setFloat PIString & setNumber(const float value, char format = 'f', int precision = 8) {clear(); *this += PIString::fromNumber(value, format, precision); return *this;} - //! @brief Set string content to numeric representation of "value" + //! \brief Set string content to numeric representation of "value" //! \details Example: \snippet pistring.cpp PIString::setFloat PIString & setNumber(const double & value, char format = 'f', int precision = 8) {clear(); *this += PIString::fromNumber(value, format, precision); return *this;} - //! @brief Set string content to numeric representation of "value" + //! \brief Set string content to numeric representation of "value" //! \details Example: \snippet pistring.cpp PIString::setFloat PIString & setNumber(const ldouble & value, char format = 'f', int precision = 8) {clear(); *this += PIString::fromNumber(value, format, precision); return *this;} - //! @brief Set string content to human readable size in B/kB/MB/GB/TB + //! \brief Set string content to human readable size in B/kB/MB/GB/TB //! \details Example: \snippet pistring.cpp PIString::setReadableSize PIString & setReadableSize(llong bytes); - //! @brief Return string contains numeric representation of "value" in base "base" + //! \brief Return string contains numeric representation of "value" in base "base" //! \details Example: \snippet pistring.cpp PIString::fromNumber static PIString fromNumber(const short value, int base = 10, bool * ok = 0) {return fromNumberBaseS(llong(value), base, ok);} - //! @brief Return string contains numeric representation of "value" in base "base" + //! \brief Return string contains numeric representation of "value" in base "base" //! \details Example: \snippet pistring.cpp PIString::fromNumber static PIString fromNumber(const ushort value, int base = 10, bool * ok = 0) {return fromNumberBaseU(ullong(value), base, ok);} - //! @brief Return string contains numeric representation of "value" in base "base" + //! \brief Return string contains numeric representation of "value" in base "base" //! \details Example: \snippet pistring.cpp PIString::fromNumber static PIString fromNumber(const int value, int base = 10, bool * ok = 0) {return fromNumberBaseS(llong(value), base, ok);} - //! @brief Return string contains numeric representation of "value" in base "base" + //! \brief Return string contains numeric representation of "value" in base "base" //! \details Example: \snippet pistring.cpp PIString::fromNumber static PIString fromNumber(const uint value, int base = 10, bool * ok = 0) {return fromNumberBaseU(ullong(value), base, ok);} - //! @brief Return string contains numeric representation of "value" in base "base" + //! \brief Return string contains numeric representation of "value" in base "base" //! \details Example: \snippet pistring.cpp PIString::fromNumber static PIString fromNumber(const long value, int base = 10, bool * ok = 0) {return fromNumberBaseS(llong(value), base, ok);} - //! @brief Return string contains numeric representation of "value" in base "base" + //! \brief Return string contains numeric representation of "value" in base "base" //! \details Example: \snippet pistring.cpp PIString::fromNumber static PIString fromNumber(const ulong value, int base = 10, bool * ok = 0) {return fromNumberBaseU(ullong(value), base, ok);} - //! @brief Return string contains numeric representation of "value" in base "base" + //! \brief Return string contains numeric representation of "value" in base "base" //! \details Example: \snippet pistring.cpp PIString::fromNumber static PIString fromNumber(const llong & value, int base = 10, bool * ok = 0) {return fromNumberBaseS(value, base, ok);} - //! @brief Return string contains numeric representation of "value" in base "base" + //! \brief Return string contains numeric representation of "value" in base "base" //! \details Example: \snippet pistring.cpp PIString::fromNumber static PIString fromNumber(const ullong & value, int base = 10, bool * ok = 0) {return fromNumberBaseU(value, base, ok);} - //! @brief Return string contains numeric representation of "value" + //! \brief Return string contains numeric representation of "value" //! \details Example: \snippet pistring.cpp PIString::fromFloat static PIString fromNumber(const float value, char format = 'f', int precision = 8) {return ftos(value, format, precision);} - //! @brief Return string contains numeric representation of "value" + //! \brief Return string contains numeric representation of "value" //! \details Example: \snippet pistring.cpp PIString::fromFloat static PIString fromNumber(const double & value, char format = 'f', int precision = 8) {return dtos(value, format, precision);} - //! @brief Return string contains numeric representation of "value" + //! \brief Return string contains numeric representation of "value" //! \details Example: \snippet pistring.cpp PIString::fromFloat static PIString fromNumber(const ldouble & value, char format = 'f', int precision = 8) {return dtos(value, format, precision);} - //! @brief Return "true" or "false" + //! \brief Return "true" or "false" static PIString fromBool(const bool value) {return PIString(value ? "true" : "false");} - //! @brief Return string constructed from terminal codepage + //! \brief Return string constructed from terminal codepage static PIString fromConsole(const char * s); - //! @brief Return string constructed from system codepage + //! \brief Return string constructed from system codepage static PIString fromSystem(const char * s); - //! @brief Return string constructed from UTF-8 + //! \brief Return string constructed from UTF-8 static PIString fromUTF8(const char * s); - //! @brief Return string constructed from UTF-8 + //! \brief Return string constructed from UTF-8 static PIString fromUTF8(const PIByteArray &ba); - //! @brief Return string constructed from ASCII + //! \brief Return string constructed from ASCII static PIString fromAscii(const char * s); - //! @brief Return string constructed from "len" chars ASCII + //! \brief Return string constructed from "len" chars ASCII static PIString fromAscii(const char * s, int len); - //! @brief Return string constructed from "c" codepage + //! \brief Return string constructed from "c" codepage static PIString fromCodepage(const char * s, const char * c); - //! @brief Return string contains human readable size in B/kB/MB/GB/TB + //! \brief Return string contains human readable size in B/kB/MB/GB/TB //! \details Example: \snippet pistring.cpp PIString::readableSize static PIString readableSize(llong bytes); @@ -751,30 +751,30 @@ private: }; -//! \relatesalso PICout @brief Output operator to PICout +//! \relatesalso PICout \brief Output operator to PICout PIP_EXPORT PICout operator <<(PICout s, const PIString & v); -//! \relatesalso PIByteArray @brief Output operator to PIByteArray +//! \relatesalso PIByteArray \brief Output operator to PIByteArray inline PIByteArray & operator <<(PIByteArray & s, const PIString & v) {s << *(PIDeque*)&v; return s;} -//! \relatesalso PIByteArray @brief Input operator from PIByteArray +//! \relatesalso PIByteArray \brief Input operator from PIByteArray inline PIByteArray & operator >>(PIByteArray & s, PIString & v) {v.clear(); s >> *(PIDeque*)&v; return s;} -//! @brief Return concatenated string +//! \brief Return concatenated string inline PIString operator +(const PIString & str, const PIString & f) {PIString s(str); s += f; return s;} -//! @brief Return concatenated string +//! \brief Return concatenated string inline PIString operator +(const PIString & f, const char * str) {PIString s(f); s += str; return s;} -//! @brief Return concatenated string +//! \brief Return concatenated string inline PIString operator +(const char * str, const PIString & f) {return PIString(str) + f;} -//! \relatesalso PIString @brief Return concatenated string +//! \relatesalso PIString \brief Return concatenated string inline PIString operator +(const char c, const PIString & f) {return PIChar(c) + f;} -//! @brief Return concatenated string +//! \brief Return concatenated string inline PIString operator +(const PIString & f, const char c) {return f + PIChar(c);} diff --git a/libs/main/core/pistring_std.h b/libs/main/core/pistring_std.h index 42ec80cf..909c5348 100644 --- a/libs/main/core/pistring_std.h +++ b/libs/main/core/pistring_std.h @@ -1,5 +1,5 @@ -/*! @file pistring_std.h - * @brief STD for PIString +/*! \file pistring_std.h + * \brief STD for PIString * * This file declare std operators and string conversions */ @@ -70,24 +70,24 @@ inline PIString StdWString2PIString(const std::wstring & v) { -//! \relatesalso PIChar @brief Output operator to \c std::ostream +//! \relatesalso PIChar \brief Output operator to \c std::ostream inline std::ostream & operator <<(std::ostream & s, const PIChar & v) {s << v.toCharPtr(); return s;} -//! \relatesalso PIString @brief Return concatenated string +//! \relatesalso PIString \brief Return concatenated string inline PIString operator +(const PIString & f, const std::string & str) {PIString s(f); s += StdString2PIString(str); return s;} -//! \relatesalso PIString @brief Return concatenated string +//! \relatesalso PIString \brief Return concatenated string inline PIString operator +(const std::string & str, const PIString & f) {return StdString2PIString(str) + f;} -//! \relatesalso PIString @brief Output operator to std::ostream (cout) +//! \relatesalso PIString \brief Output operator to std::ostream (cout) inline std::ostream & operator <<(std::ostream & s, const PIString & v) {for (int i = 0; i < v.length(); ++i) s << v[i]; return s;} -//! \relatesalso PIString @brief Input operator from std::istream (cin) +//! \relatesalso PIString \brief Input operator from std::istream (cin) inline std::istream & operator >>(std::istream & s, PIString & v) {std::string ss; s >> ss; v = StdString2PIString(ss); return s;} -//! \relatesalso PIStringList @brief Output operator to std::ostream (cout) +//! \relatesalso PIStringList \brief Output operator to std::ostream (cout) inline std::ostream & operator <<(std::ostream & s, const PIStringList & v) { s << PIChar("{"); for (uint i = 0; i < v.size(); ++i) { diff --git a/libs/main/core/pistringlist.cpp b/libs/main/core/pistringlist.cpp index acace3fb..0adb46f3 100644 --- a/libs/main/core/pistringlist.cpp +++ b/libs/main/core/pistringlist.cpp @@ -20,6 +20,52 @@ #include "pistringlist.h" +//! \addtogroup Core +//! \{ +//! \~\class PIStringList pistringlist.h +//! \~\brief +//! \~english Based on \a PIDeque strings list +//! \~russian Основанный на \a PIDeque массив строк +//! +//! \~\details +//! +//! \} + + +//! \details +//! \~english Example: +//! \~russian Пример: +//! \~\snippet pistring.cpp PIStringList::join +PIString PIStringList::join(const PIString & delim) const { + PIString s; + for (uint i = 0; i < size(); ++i) { + s += at(i); + if (i < size() - 1) + s += delim; + } + return s; +} + + +//! \details +//! \~english Example: +//! \~russian Пример: +//! \~\snippet pistring.cpp PIStringList::removeStrings +PIStringList & PIStringList::removeStrings(const PIString & value) { + for (uint i = 0; i < size(); ++i) { + if (at(i) == value) { + remove(i); + --i; + } + } + return *this; +} + + +//! \details +//! \~english Example: +//! \~russian Пример: +//! \~\snippet pistring.cpp PIStringList::removeDuplicates PIStringList& PIStringList::removeDuplicates() { PIStringList l; PIString s; @@ -40,3 +86,14 @@ PIStringList& PIStringList::removeDuplicates() { } return *this; } + + +//! \details +//! \~english Example: +//! \~russian Пример: +//! \~\snippet pistring.cpp PIStringList::trim +PIStringList & PIStringList::trim() { + for (uint i = 0; i < size(); ++i) + (*this)[i].trim(); + return *this; +} diff --git a/libs/main/core/pistringlist.h b/libs/main/core/pistringlist.h index 5b9d1a67..709c7d8f 100644 --- a/libs/main/core/pistringlist.h +++ b/libs/main/core/pistringlist.h @@ -1,6 +1,8 @@ -/*! @brief Strings array class - * \details This class is based on \a PIDeque and - * expand it functionality. */ +/*! \file pistringlist.h + * \~\brief + * \~english Based on \a PIDeque strings list + * \~russian Основанный на \a PIDeque массив строк + */ /* PIP - Platform Independent Primitives Strings array class @@ -30,80 +32,108 @@ class PIP_EXPORT PIStringList: public PIDeque { public: - //! Contructs empty strings list + //! \~english Contructs an empty strings list + //! \~russian Создает пустой список строк PIStringList() {;} - ~PIStringList() {;} - - //! Contructs strings list with one string "str" + //! \~english Contructs strings list with one string "str" + //! \~russian Создает список строк с одной строкой "str" PIStringList(const PIString & str) {push_back(str);} PIStringList(PIString && str) {push_back(std::move(str));} - //! Contructs empty strings list with strings "s0" and "s1" + //! \~english Contructs strings list with strings "s0" and "s1" + //! \~russian Создает список строк со строками "s0" и "s1" PIStringList(const PIString & s0, const PIString & s1) {push_back(s0); push_back(s1);} PIStringList(PIString && s0, PIString && s1) {push_back(std::move(s0)); push_back(std::move(s1));} - //! Contructs empty strings list with strings "s0", "s1" and "s2" + //! \~english Contructs strings list with strings "s0", "s1" and "s2" + //! \~russian Создает список строк со строками "s0", "s1" и "s2" PIStringList(const PIString & s0, const PIString & s1, const PIString & s2) {push_back(s0); push_back(s1); push_back(s2);} PIStringList(PIString && s0, PIString && s1, PIString && s2) {push_back(std::move(s0)); push_back(std::move(s1)); push_back(std::move(s2));} - //! Contructs empty strings list with strings "s0", "s1", "s2" and "s3" + //! \~english Contructs strings list with strings "s0", "s1", "s2" and "s3" + //! \~russian Создает список строк со строками "s0", "s1", "s2" и "s3" PIStringList(const PIString & s0, const PIString & s1, const PIString & s2, const PIString & s3) {push_back(s0); push_back(s1); push_back(s2); push_back(s3);} PIStringList(PIString && s0, PIString && s1, PIString && s2, PIString && s3) {push_back(std::move(s0)); push_back(std::move(s1)); push_back(std::move(s2)); push_back(std::move(s3));} + //! \~english Contructs strings list with strings "o" + //! \~russian Создает список строк со строками "o" PIStringList(const PIStringList & o): PIDeque(o) {} PIStringList(PIStringList && o): PIDeque(std::move(o)) {} + + //! \~english Contructs strings list with strings "o" + //! \~russian Создает список строк со строками "o" PIStringList(const PIVector & o): PIDeque() {resize(o.size()); for (uint i = 0; i < size(); ++i) (*this)[i] = o[i];} + + //! \~english Contructs strings list with strings "o" + //! \~russian Создает список строк со строками "o" PIStringList(const PIDeque & o): PIDeque() {resize(o.size()); for (uint i = 0; i < size(); ++i) (*this)[i] = o[i];} - //! Contructs strings list with std::initializer_list + //! \~english Contructs strings list with strings "init_list" in std::initializer_list format + //! \~russian Создает список строк со строками "init_list" в формате std::initializer_list PIStringList(std::initializer_list init_list): PIDeque(init_list) {} - //! @brief Join all strings in one with delimiter "delim" and return it - //! \details Example: \snippet pistring.cpp PIStringList::join - PIString join(const PIString & delim) const {PIString s; for (uint i = 0; i < size(); ++i) {s += at(i); if (i < size() - 1) s += delim;} return s;} + //! \~english Join all strings in one with delimiter "delim" and returns it + //! \~russian Соединяет все строки в одну через разделитель "delim" и возвращает её + PIString join(const PIString & delim) const; - //! @brief Remove all strings equal "value" and return this - //! \details Example: \snippet pistring.cpp PIStringList::removeStrings - PIStringList & removeStrings(const PIString & value) {for (uint i = 0; i < size(); ++i) {if (at(i) == value) {remove(i); --i;}} return *this;} + //! \~english Remove all strings equal "value" and returns reference to this + //! \~russian Удаляет все строки равные "value" и возвращает ссылку на этот список строк + PIStringList & removeStrings(const PIString & value); PIStringList & remove(uint num) {PIDeque::remove(num); return *this;} PIStringList & remove(uint num, uint count) {PIDeque::remove(num, count); return *this;} - //! @brief Remove duplicated strings and return this - //! \details Example: \snippet pistring.cpp PIStringList::removeDuplicates + //! \~english Remove duplicated strings and returns reference to this + //! \~russian Удаляет все дублированные строки и возвращает ссылку на этот список строк PIStringList & removeDuplicates(); - //! @brief Trim all strings - //! \details Example: \snippet pistring.cpp PIString::trim - PIStringList & trim() {for (uint i = 0; i < size(); ++i) (*this)[i].trim(); return *this;} + //! \~english Trim all strings and returns reference to this + //! \~russian Подчищает у всех строк пробельные символы в начале и в конце и возвращает ссылку на этот список строк + PIStringList & trim(); - //! Return sum of lengths of all strings + //! \~english Returns sum of lengths of all strings + //! \~russian Возвращает сумму длин всех строк uint contentSize() {uint s = 0; for (uint i = 0; i < size(); ++i) s += at(i).size(); return s;} - //! Compare operator + //! \~english Compare operator + //! \~russian Оператор сравнения bool operator ==(const PIStringList & o) const {if (size() != o.size()) return false; for (size_t i = 0; i < size(); ++i) if (o[i] != (*this)[i]) return false; return true;} - //! Compare operator + //! \~english Compare operator + //! \~russian Оператор сравнения bool operator !=(const PIStringList & o) const {return !(o == (*this));} + //! \~english Assign operator + //! \~russian Оператор присваивания PIStringList & operator =(const PIStringList & o) {PIDeque::operator=(o); return *this;} + //! \~english Append string "str" + //! \~russian Добавляет строку "str" PIStringList & operator <<(const PIString & str) {append(str); return *this;} PIStringList & operator <<(PIString && str) {append(std::move(str)); return *this;} + + //! \~english Append strings list "sl" + //! \~russian Добавляет список строк "sl" PIStringList & operator <<(const PIStringList & sl) {append(sl); return *this;} }; -//! \relatesalso PIByteArray @brief Output operator to PIByteArray +//! \relatesalso PIByteArray +//! \~english Store operator +//! \~russian Оператор сохранения inline PIByteArray & operator <<(PIByteArray & s, const PIStringList & v) {s << int(v.size_s()); for (int i = 0; i < v.size_s(); ++i) s << v[i]; return s;} -//! relatesalso PIByteArray @brief Input operator from PIByteArray +//! \relatesalso PIByteArray +//! \~english Restore operator +//! \~russian Оператор извлечения inline PIByteArray & operator >>(PIByteArray & s, PIStringList & v) {int sz; s >> sz; v.resize(sz); for (int i = 0; i < sz; ++i) s >> v[i]; return s;} -//! \relatesalso PICout @brief Output operator to PICout +//! \relatesalso PICout +//! \~english Output operator to \a PICout +//! \~russian Оператор вывода в \a PICout inline PICout operator <<(PICout s, const PIStringList & v) {s.space(); s.setControl(0, true); s << "{"; for (uint i = 0; i < v.size(); ++i) {s << "\"" << v[i] << "\""; if (i < v.size() - 1) s << ", ";} s << "}"; s.restoreControl(); return s;} #endif // PISTRINGLIST_H diff --git a/libs/main/core/pitime.cpp b/libs/main/core/pitime.cpp index 7cc9123c..4b3cef8e 100644 --- a/libs/main/core/pitime.cpp +++ b/libs/main/core/pitime.cpp @@ -39,31 +39,73 @@ # include #endif -/*! \class PISystemTime - * @brief System time - * - * \section PISystemTime_sec0 Synopsis - * This class provide arithmetic functions for POSIX system time. - * This time represents as seconds and nanosecons in integer formats. - * You can take current system time with function \a PISystemTime::current(), - * compare times, sum or subtract two times, convert time to/from - * seconds, milliseconds, microseconds or nanoseconds. - * \section PISystemTime_sec1 Example - * \snippet pitimer.cpp system_time -*/ +//! \addtogroup Core +//! \{ +//! \class PISystemTime pitime.h +//! \brief +//! \~english System time with nanosecond precision +//! \~russian Системное время с точностью до наносекунд +//! +//! \~english \section PISystemTime_sec0 Synopsis +//! \~russian \section PISystemTime_sec0 Краткий обзор +//! \~english +//! This class provide arithmetic functions for POSIX system time. +//! This time represents as seconds and nanosecons in integer formats. +//! You can take current system time with function \a PISystemTime::current(), +//! compare times, sum or subtract two times, convert time to/from +//! seconds, milliseconds, microseconds or nanoseconds. +//! +//! \~russian +//! Этот класс предоставляет арифметику для системного времени в формате POSIX. +//! Это время представлено в виде целочисленных секунд и наносекунд. +//! Можно взять текущее время с помощью метода \a PISystemTime::current(), +//! сравнивать, суммировать и вычитать времена, преобразовывать в/из +//! секунд, миллисекунд, микросекунд и наносекунд. +//! +//! \~english \section PISystemTime_sec1 Example +//! \~russian \section PISystemTime_sec1 Пример +//! \~\snippet pitimer.cpp system_time +//! +//! \} -/*! \class PITimeMeasurer - * @brief Time measurements - * - * \section PITimeMeasurer_sec0 Synopsis - * Function \a reset() set time mark to current - * system time, then functions double elapsed_*() returns time elapsed from this mark. - * These functions can returns nano-, micro-, milli- and seconds with suffixes "n", "u", "m" - * and "s" -*/ +//! \addtogroup Core +//! \{ +//! \class PITimeMeasurer pitime.h +//! \brief +//! \~english Time measurements +//! \~russian Измерение времени +//! +//! \~english \section PITimeMeasurer_sec0 Usage +//! \~russian \section PITimeMeasurer_sec0 Использование +//! \~english +//! Function \a reset() set time mark to current +//! system time, then functions "double elapsed_*()" returns time elapsed from this mark. +//! These functions can returns nano-, micro-, milli- and seconds with suffixes "n", "u", "m" +//! and "s" +//! +//! \~russian +//! Метод \a reset() устанавливает текущую метку системного времени. Далее методы +//! "double elapsed_*()" возвращают время, прошедшее от установленной метки. +//! Эти методы возвращают нано, микро, милли и секунды с приставками +//! "n", "u", "m" и "s". +//! +//! \} +//! \details +//! \~english +//! This function consider \c "usleep" offset +//! on QNX/Linux/Mac, which is calculated with +//! \a pip_sys_test program. If this is correct +//! offset value in system config, this function +//! wait \b exactly "usecs" microseconds. +//! \~russian +//! Этот метод учитывает смещение \c "usleep" +//! на QNX/Linux/Mac, которое расчитывается с помощью +//! утилиты \a pip_sys_test. Если это значение в системном +//! конфиге действительно, то этот метод будет ожидать +//! \b точно "usecs" микросекунд. void piUSleep(int usecs) { if (usecs <= 0) return; #ifdef WINDOWS diff --git a/libs/main/core/pitime.h b/libs/main/core/pitime.h index 316811ed..76ab4809 100644 --- a/libs/main/core/pitime.h +++ b/libs/main/core/pitime.h @@ -1,5 +1,8 @@ -/*! @file pitime.h - * @brief Time structs +/*! \file pitime.h + * \ingroup Core + * \~\brief + * \~english Time structs and methods + * \~russian Типы и методы времени */ /* PIP - Platform Independent Primitives @@ -30,23 +33,28 @@ # include #endif -/*! @brief Precise sleep for "usecs" microseconds - * \details This function consider \c "usleep" offset - * on QNX/Linux/Mac, which is calculated with - * \a pip_sys_test program. If there is correct - * offset value in system config, this function - * wait \b exactly "usecs" microseconds. */ +//! \~english Precise sleep for "usecs" microseconds +//! \~russian Точно ожидает "usecs" микросекунд PIP_EXPORT void piUSleep(int usecs); // on !Windows consider constant "usleep" offset -/*! @brief Precise sleep for "msecs" milliseconds - * \details This function exec \a piUSleep (msecs * 1000). */ +//! ~\brief +//! \~english Precise sleep for "msecs" milliseconds +//! \~russian Точно ожидает "msecs" миллисекунд +//! ~\details +//! \~english This function exec \a piUSleep (msecs * 1000) +//! \~russian Этот метод вызывает \a piUSleep (msecs * 1000) inline void piMSleep(double msecs) {piUSleep(int(msecs * 1000.));} // on !Windows consider constant "usleep" offset -/*! @brief Precise sleep for "secs" seconds - * \details This function exec \a piUSleep (msecs * 1000000). */ +//! ~\brief +//! \~english Precise sleep for "secs" seconds +//! \~russian Точно ожидает "secs" секунд +//! ~\details +//! \~english This function exec \a piUSleep (msecs * 1000000) +//! \~russianЭтот метод вызывает \a piUSleep (msecs * 1000000) inline void piSleep(double secs) {piUSleep(int(secs * 1000000.));} // on !Windows consider constant "usleep" offset -//! Shortest available on current system sleep +//! \~english Shortest available on current system sleep +//! \~russian Наименее возможное для данной системы по длительности ожидание inline void piMinSleep() {piMSleep(PIP_MIN_MSLEEP);} @@ -167,7 +175,7 @@ private: }; -//! \relatesalso PICout @brief Output operator to PICout +//! \relatesalso PICout \brief Output operator to PICout inline PICout operator <<(PICout s, const PISystemTime & v) {s.space(); s.setControl(0, true); s << "(" << v.seconds << " s, " << v.nanoseconds << " ns)"; s.restoreControl(); return s;} @@ -191,7 +199,7 @@ inline bool operator !=(const PITime & t0, const PITime & t1) {return !(t0 == t1 inline bool operator <=(const PITime & t0, const PITime & t1) {return !(t0 > t1);} inline bool operator >=(const PITime & t0, const PITime & t1) {return !(t0 < t1);} -//! \relatesalso PICout @brief Output operator to PICout +//! \relatesalso PICout \brief Output operator to PICout PIP_EXPORT PICout operator <<(PICout s, const PITime & v); @@ -213,7 +221,7 @@ inline bool operator !=(const PIDate & t0, const PIDate & t1) {return !(t0 == t1 inline bool operator <=(const PIDate & t0, const PIDate & t1) {return !(t0 > t1);} inline bool operator >=(const PIDate & t0, const PIDate & t1) {return !(t0 < t1);} -//! \relatesalso PICout @brief Output operator to PICout +//! \relatesalso PICout \brief Output operator to PICout PIP_EXPORT PICout operator <<(PICout s, const PIDate & v); @@ -258,7 +266,7 @@ inline bool operator >=(const PIDateTime & t0, const PIDateTime & t1) {return !( inline PIByteArray & operator <<(PIByteArray & s, const PIDateTime & v) {s << v.year << v.month << v.day << v.hours << v.minutes << v.seconds << v.milliseconds; return s;} inline PIByteArray & operator >>(PIByteArray & s, PIDateTime & v) {s >> v.year >> v.month >> v.day >> v.hours >> v.minutes >> v.seconds >> v.milliseconds; return s;} -//! \relatesalso PICout @brief Output operator to PICout +//! \relatesalso PICout \brief Output operator to PICout PIP_EXPORT PICout operator <<(PICout s, const PIDateTime & v); @@ -268,7 +276,7 @@ class PIP_EXPORT PITimeMeasurer { public: PITimeMeasurer(); - /** @brief Set internal time mark to current system time + /** \brief Set internal time mark to current system time * \details This function used for set start time mark. Later * you can find out elapsed time from this time mark to any * moment of time with \a elapsed_s(), \a elapsed_m(), @@ -276,19 +284,19 @@ public: * \sa \a elapsed_s(), \a elapsed_m(), \a elapsed_u(), \a elapsed_n() */ void reset() {t_st = PISystemTime::current(true);} - //! @brief Returns nanoseconds elapsed from last \a reset() execution or from timer measurer creation. + //! \brief Returns nanoseconds elapsed from last \a reset() execution or from timer measurer creation. double elapsed_n() const; - //! @brief Returns microseconds elapsed from last \a reset() execution or from timer measurer creation. + //! \brief Returns microseconds elapsed from last \a reset() execution or from timer measurer creation. double elapsed_u() const; - //! @brief Returns milliseconds elapsed from last \a reset() execution or from timer measurer creation. + //! \brief Returns milliseconds elapsed from last \a reset() execution or from timer measurer creation. double elapsed_m() const; - //! @brief Returns seconds elapsed from last \a reset() execution or from timer measurer creation. + //! \brief Returns seconds elapsed from last \a reset() execution or from timer measurer creation. double elapsed_s() const; - //! @brief Returns PISystemTime elapsed from last \a reset() execution or from timer measurer creation. + //! \brief Returns PISystemTime elapsed from last \a reset() execution or from timer measurer creation. PISystemTime elapsed() const; double reset_time_n() const {return t_st.toNanoseconds();} @@ -296,22 +304,22 @@ public: double reset_time_m() const {return t_st.toMilliseconds();} double reset_time_s() const {return t_st.toSeconds();} - //! @brief Returns time mark of last \a reset() execution or timer measurer creation. + //! \brief Returns time mark of last \a reset() execution or timer measurer creation. PISystemTime reset_time() {return t_st;} - //! @brief Returns nanoseconds representation of current system time. + //! \brief Returns nanoseconds representation of current system time. static double elapsed_system_n() {return PISystemTime::current(true).toNanoseconds();} - //! @brief Returns microseconds representation of current system time. + //! \brief Returns microseconds representation of current system time. static double elapsed_system_u() {return PISystemTime::current(true).toMicroseconds();} - //! @brief Returns milliseconds representation of current system time. + //! \brief Returns milliseconds representation of current system time. static double elapsed_system_m() {return PISystemTime::current(true).toMilliseconds();} - //! @brief Returns seconds representation of current system time. + //! \brief Returns seconds representation of current system time. static double elapsed_system_s() {return PISystemTime::current(true).toSeconds();} - //! @brief Returns time mark of current system time. + //! \brief Returns time mark of current system time. static PISystemTime elapsed_system() {return PISystemTime::current(true);} private: diff --git a/libs/main/core/pitime_win.h b/libs/main/core/pitime_win.h index 907bc458..053e727b 100644 --- a/libs/main/core/pitime_win.h +++ b/libs/main/core/pitime_win.h @@ -1,5 +1,5 @@ -/*! @file pitime_win.h - * @brief PITime conversions for Windows +/*! \file pitime_win.h + * \brief PITime conversions for Windows * * This file declare time conversions for Windows */ diff --git a/libs/main/core/pivariant.cpp b/libs/main/core/pivariant.cpp index 98d1eb4e..470b50a2 100644 --- a/libs/main/core/pivariant.cpp +++ b/libs/main/core/pivariant.cpp @@ -21,7 +21,7 @@ /** \class PIVariant - * @brief Variant type + * \brief Variant type * \details * \section PIVariant_sec0 Synopsis * This class provides general type that can contains all standard types, some @@ -220,7 +220,7 @@ PIString PIVariant::typeName(PIVariant::Type type) { } -/** @brief Returns variant content as boolean +/** \brief Returns variant content as boolean * \details In case of numeric types returns \b true if value != 0. \n * In case of String type returns \a PIString::toBool(). \n * In case of StringList type returns \b false if string list is empty, @@ -251,7 +251,7 @@ bool PIVariant::toBool() const { -/** @brief Returns variant content as int +/** \brief Returns variant content as int * \details In case of numeric types returns integer value. \n * In case of String type returns \a PIString::toInt(). \n * In case of StringList type returns \b 0 if string list is empty, @@ -283,7 +283,7 @@ int PIVariant::toInt() const { } -/** @brief Returns variant content as long long +/** \brief Returns variant content as long long * \details In case of numeric types returns integer value. \n * In case of String type returns \a PIString::toLLong(). \n * In case of StringList type returns \b 0L if string list is empty, @@ -314,7 +314,7 @@ llong PIVariant::toLLong() const { } -/** @brief Returns variant content as float +/** \brief Returns variant content as float * \details In case of numeric types returns float value. \n * In case of String type returns \a PIString::toFloat(). \n * In case of StringList type returns \b 0.f if string list is empty, @@ -345,7 +345,7 @@ float PIVariant::toFloat() const { } -/** @brief Returns variant content as double +/** \brief Returns variant content as double * \details In case of numeric types returns double value. \n * In case of String type returns \a PIString::toDouble(). \n * In case of StringList type returns \b 0. if string list is empty, @@ -376,7 +376,7 @@ double PIVariant::toDouble() const { } -/** @brief Returns variant content as long double +/** \brief Returns variant content as long double * \details In case of numeric types returns long double value. \n * In case of String type returns \a PIString::toLDouble(). \n * In case of StringList type returns \b 0. if string list is empty, @@ -407,7 +407,7 @@ ldouble PIVariant::toLDouble() const { } -/** @brief Returns variant content as time +/** \brief Returns variant content as time * \details In case of Time type returns time value. \n * In case of DateTime type returns time part of value. \n * In case of other types returns \a PITime(). */ @@ -420,7 +420,7 @@ PITime PIVariant::toTime() const { } -/** @brief Returns variant content as date +/** \brief Returns variant content as date * \details In case of Date type returns date value. \n * In case of DateTime type returns date part of value. \n * In case of other types returns \a PIDate(). */ @@ -433,7 +433,7 @@ PIDate PIVariant::toDate() const { } -/** @brief Returns variant content as date and time +/** \brief Returns variant content as date and time * \details In case of Time type returns time value with null date. \n * In case of Date type returns date value with null time. \n * In case of DateTime type returns date and time. \n @@ -448,7 +448,7 @@ PIDateTime PIVariant::toDateTime() const { } -/** @brief Returns variant content as system time +/** \brief Returns variant content as system time * \details In case of SystemTime type returns system time. \n * In case of other types returns \a PISystemTime::fromSeconds() from * double value of variant content. */ @@ -460,7 +460,7 @@ PISystemTime PIVariant::toSystemTime() const { } -/** @brief Returns variant content as string +/** \brief Returns variant content as string * \details In case of numeric types returns \a PIString::fromNumber(). \n * In case of String type returns string value. \n * In case of StringList type returns joined string ("(" + PIStringList::join("; ") + ")"). \n @@ -501,7 +501,7 @@ PIString PIVariant::toString() const { } -/** @brief Returns variant content as strings list +/** \brief Returns variant content as strings list * \details In case of StringList type returns strings list value. \n * In case of other types returns \a PIStringList with one string value of variant content. */ PIStringList PIVariant::toStringList() const { @@ -513,7 +513,7 @@ PIStringList PIVariant::toStringList() const { } -/** @brief Returns variant content as bit array +/** \brief Returns variant content as bit array * \details In case of BitArray type returns bit array value. \n * In case of other types returns \a PIBitArray from \a toLLong() value. */ PIBitArray PIVariant::toBitArray() const { @@ -524,7 +524,7 @@ PIBitArray PIVariant::toBitArray() const { } -/** @brief Returns variant content as byte array +/** \brief Returns variant content as byte array * \details In case of ByteArray type returns byte array value. \n * In case of other types returns empty \a PIByteArray. */ PIByteArray PIVariant::toByteArray() const { @@ -535,7 +535,7 @@ PIByteArray PIVariant::toByteArray() const { } -/** @brief Returns variant content as enum +/** \brief Returns variant content as enum * \details In case of Enum type returns enum value. \n * In case of String returns Enum with one member. \n * In case of StringList returns Enum with corresponding members. \n @@ -550,7 +550,7 @@ PIVariantTypes::Enum PIVariant::toEnum() const { } -/** @brief Returns variant content as file +/** \brief Returns variant content as file * \details In case of File type returns file value. \n * In case of String returns File with string value path. \n * In case of other types returns empty File. */ @@ -563,7 +563,7 @@ PIVariantTypes::File PIVariant::toFile() const { } -/** @brief Returns variant content as dir +/** \brief Returns variant content as dir * \details In case of Dir type returns dir value. \n * In case of String returns Dir with string value path. \n * In case of other types returns empty Dir. */ @@ -576,7 +576,7 @@ PIVariantTypes::Dir PIVariant::toDir() const { } -/** @brief Returns variant content as color +/** \brief Returns variant content as color * \details In case of Color type returns color value. \n * In case of int returns color with int value. \n * In case of other types returns empty Color. */ @@ -589,7 +589,7 @@ PIVariantTypes::Color PIVariant::toColor() const { } -/** @brief Returns variant content as IODevice +/** \brief Returns variant content as IODevice * \details In case of IODevice type returns IODevice value. \n * In case of other types returns empty IODevice. */ PIVariantTypes::IODevice PIVariant::toIODevice() const { @@ -599,7 +599,7 @@ PIVariantTypes::IODevice PIVariant::toIODevice() const { } -/** @brief Returns variant content as point +/** \brief Returns variant content as point * \details In case of PIPointd type returns point value. \n * In case of other types returns empty PIPointd. */ PIPointd PIVariant::toPoint() const { @@ -609,7 +609,7 @@ PIPointd PIVariant::toPoint() const { } -/** @brief Returns variant content as rect +/** \brief Returns variant content as rect * \details In case of PIRectd type returns rect value. \n * In case of other types returns empty PIRectd. */ PIRectd PIVariant::toRect() const { @@ -619,7 +619,7 @@ PIRectd PIVariant::toRect() const { } -/** @brief Returns variant content as rect +/** \brief Returns variant content as line * \details In case of PILined type returns line value. \n * In case of other types returns empty PILined. */ PILined PIVariant::toLine() const { @@ -629,7 +629,7 @@ PILined PIVariant::toLine() const { } -/** @brief Returns variant content as math vector +/** \brief Returns variant content as math vector * \details In case of PIMathVectord type returns rect value. \n * In case of other types returns empty PIMathVectord. */ PIMathVectord PIVariant::toMathVector() const { @@ -639,7 +639,7 @@ PIMathVectord PIVariant::toMathVector() const { } -/** @brief Returns variant content as math matrix +/** \brief Returns variant content as math matrix * \details In case of PIMathMatrixd type returns rect value. \n * In case of other types returns empty PIMathMatrixd. */ PIMathMatrixd PIVariant::toMathMatrix() const { diff --git a/libs/main/core/pivariant.h b/libs/main/core/pivariant.h index 0db863d8..9cf38c4c 100644 --- a/libs/main/core/pivariant.h +++ b/libs/main/core/pivariant.h @@ -1,5 +1,5 @@ -/*! @file pivariant.h - * @brief Variant type +/*! \file pivariant.h + * \brief Variant type * * This file declares PIVariant */ @@ -468,7 +468,7 @@ public: PIMathMatrixd toMathMatrix() const; - /** @brief Returns variant content as custom type + /** \brief Returns variant content as custom type * \details In case of known types this function equivalent \a to function. \n * Otherwise returns content as type T. */ template @@ -561,7 +561,7 @@ public: void swap(PIVariant & v); - /** @brief Returns new variant from custom type + /** \brief Returns new variant from custom type * \details In case of known types this function equivalent \a PIVariant(T) constructors. \n * Otherwise returns variant with content \a v and type Custom. */ template diff --git a/libs/main/core/pivariantsimple.h b/libs/main/core/pivariantsimple.h index dd6067e9..70a79f29 100644 --- a/libs/main/core/pivariantsimple.h +++ b/libs/main/core/pivariantsimple.h @@ -1,5 +1,5 @@ -/*! @file pivariantsimple.h - * @brief Variant simple type +/*! \file pivariantsimple.h + * \brief Variant simple type * * This file declares PIVariantSimple */ diff --git a/libs/main/core/pivarianttypes.h b/libs/main/core/pivarianttypes.h index 8c2eb4e2..6bafe682 100644 --- a/libs/main/core/pivarianttypes.h +++ b/libs/main/core/pivarianttypes.h @@ -1,5 +1,5 @@ -/*! @file pivarianttypes.h - * @brief Variant type +/*! \file pivarianttypes.h + * \brief Variant type * * This file declares PIVariant */ @@ -34,7 +34,7 @@ class PIPropertyStorage; namespace PIVariantTypes { /** - * @brief name-value pair + * \brief name-value pair */ struct PIP_EXPORT Enumerator { Enumerator(int v = 0, const PIString & n = PIString()): value(v), name(n) {} @@ -43,26 +43,26 @@ struct PIP_EXPORT Enumerator { }; /** - * @brief Collection of PIVariantTypes::Enumerator. It's replace classic c-style enum. + * \brief Collection of PIVariantTypes::Enumerator. It's replace classic c-style enum. * Contains elements with unique name and not uniqueue values. */ struct PIP_EXPORT Enum { Enum(const PIString & n = PIString()): enum_name(n) {} /** - * @brief Find selected value. + * \brief Find selected value. * @return selected value, otherwrise 0 */ int selectedValue() const; /** - * @brief Get selected name + * \brief Get selected name * @return selected name, otherwrise empty PIString */ PIString selectedName() const {return selected;} /** - * @brief Select value if exists in Enum. If Enum contains several PIVariantTypes::Enumerator with same values, + * \brief Select value if exists in Enum. If Enum contains several PIVariantTypes::Enumerator with same values, * first PIVariantTypes::Enumerator will selected * @param v value for selection * @return true if value exists in Enum, false otherwrise @@ -70,55 +70,55 @@ struct PIP_EXPORT Enum { bool selectValue(int v); /** - * @brief Select name if exists in enum + * \brief Select name if exists in enum * @param n name for selection * @return true if name exists in Enum, false otherwrise */ bool selectName(const PIString & n); /** - * @brief Find PIVariantTypes::Enumerator with specific name and return it value + * \brief Find PIVariantTypes::Enumerator with specific name and return it value * @param n name for search * @return value of founded PIVariantTypes::Enumerator, 0 otherwrise */ int value(const PIString & n) const; /** - * @brief Find first PIVariantTypes::Enumerator with specific value and return it name + * \brief Find first PIVariantTypes::Enumerator with specific value and return it name * @param v value for search * @return name of founded PIVariantTypes::Enumerator, empty string otherwrise */ PIString name(int v) const; /** - * @brief Make vector of Enum values + * \brief Make vector of Enum values */ PIVector values() const; /** - * @brief Make vector of Enum names + * \brief Make vector of Enum names */ PIStringList names() const; /** - * @brief Add PIVariantTypes::Enumerator to Enum + * \brief Add PIVariantTypes::Enumerator to Enum */ Enum & operator <<(const Enumerator & v); /** - * @brief Add PIVariantTypes::Enumerator element to Enum. Element contains specific name and value more per + * \brief Add PIVariantTypes::Enumerator element to Enum. Element contains specific name and value more per * unit then last element. If the is no elements, contains zero value. * @param v name for new PIVariantTypes::Enumerator element */ Enum & operator <<(const PIString & v); /** - * @brief Add PIVariantTypes::Enumerator element for each name in vector + * \brief Add PIVariantTypes::Enumerator element for each name in vector */ Enum & operator <<(const PIStringList & v); /** - * @brief Return true if Enum is empty + * \brief Return true if Enum is empty */ bool isEmpty() const {return enum_list.isEmpty();} diff --git a/libs/main/crypt/piauth.h b/libs/main/crypt/piauth.h index f65bea81..427b9dad 100644 --- a/libs/main/crypt/piauth.h +++ b/libs/main/crypt/piauth.h @@ -1,5 +1,5 @@ -/*! @file piauth.h - * @brief PIP Authentication API +/*! \file piauth.h + * \brief PIP Authentication API */ /* PIP - Platform Independent Primitives diff --git a/libs/main/crypt/picrypt.h b/libs/main/crypt/picrypt.h index bee2b810..32846a09 100644 --- a/libs/main/crypt/picrypt.h +++ b/libs/main/crypt/picrypt.h @@ -1,5 +1,5 @@ -/*! @file picrypt.h - * @brief Cryptographic class using lib Sodium +/*! \file picrypt.h + * \brief Cryptographic class using lib Sodium */ /* PIP - Platform Independent Primitives diff --git a/libs/main/geo/piellipsoidmodel.h b/libs/main/geo/piellipsoidmodel.h index 296e8b51..c9c2f621 100644 --- a/libs/main/geo/piellipsoidmodel.h +++ b/libs/main/geo/piellipsoidmodel.h @@ -1,5 +1,5 @@ -/*! @file piellipsoidmodel.h - * @brief Contains geo ellipsoid models +/*! \file piellipsoidmodel.h + * \brief Contains geo ellipsoid models */ /* PIP - Platform Independent Primitives diff --git a/libs/main/geo/pigeoposition.h b/libs/main/geo/pigeoposition.h index 75dd6f27..bb301198 100644 --- a/libs/main/geo/pigeoposition.h +++ b/libs/main/geo/pigeoposition.h @@ -1,5 +1,5 @@ -/*! @file pigeoposition.h - * @brief Class for geo position storage and conversions +/*! \file pigeoposition.h + * \brief Class for geo position storage and conversions */ /* PIP - Platform Independent Primitives diff --git a/libs/main/io_devices/pibinarylog.cpp b/libs/main/io_devices/pibinarylog.cpp index bc593ed9..df1404d5 100644 --- a/libs/main/io_devices/pibinarylog.cpp +++ b/libs/main/io_devices/pibinarylog.cpp @@ -24,7 +24,7 @@ #define PIBINARYLOG_VERSION_OLD 0x31 /*! \class PIBinaryLog - * @brief Class for read and write binary data to logfile, and playback this data in realtime, or custom speed + * \brief Class for read and write binary data to logfile, and playback this data in realtime, or custom speed * * \section PIBinaryLog_sec0 Synopsis * Binary Log is a file with simple header, where you can read and write some binary data. diff --git a/libs/main/io_devices/pibinarylog.h b/libs/main/io_devices/pibinarylog.h index 1c9bee81..e3adea53 100644 --- a/libs/main/io_devices/pibinarylog.h +++ b/libs/main/io_devices/pibinarylog.h @@ -1,5 +1,5 @@ -/*! @file pibinarylog.h - * @brief Binary log +/*! \file pibinarylog.h + * \brief Binary log */ /* PIP - Platform Independent Primitives @@ -33,14 +33,14 @@ public: explicit PIBinaryLog(); virtual ~PIBinaryLog(); - //! @brief Play modes for \a PIBinaryLog + //! \brief Play modes for \a PIBinaryLog enum PlayMode { PlayRealTime /*! Play in system realtime, default mode */ , PlayVariableSpeed /*! Play in software realtime with speed, set by \a setSpeed */ , PlayStaticDelay /*! Play with custom static delay, ignoring timestamp */ }; - //! @brief Different split modes for writing \a PIBinaryLog, which can separate files by size, by time or by records count + //! \brief Different split modes for writing \a PIBinaryLog, which can separate files by size, by time or by records count enum SplitMode { SplitNone /*! Without separate, default mode */ , SplitTime /*! Separate files by record time */ , @@ -48,7 +48,7 @@ public: SplitCount /*! Separate files by records count */ }; - //! @brief Struct contains information about all records with same ID + //! \brief Struct contains information about all records with same ID struct PIP_EXPORT BinLogRecordInfo { BinLogRecordInfo() { id = count = 0; @@ -62,7 +62,7 @@ public: PISystemTime end_time; }; - //! @brief Struct contains full information about Binary Log file and about all Records using map of \a BinLogRecordInfo + //! \brief Struct contains full information about Binary Log file and about all Records using map of \a BinLogRecordInfo struct PIP_EXPORT BinLogInfo { PIString path; int records_count; @@ -73,7 +73,7 @@ public: PIByteArray user_header; }; - //! @brief Struct contains position, ID and timestamp of record in file + //! \brief Struct contains position, ID and timestamp of record in file struct PIP_EXPORT BinLogIndex { int id; int data_size; @@ -256,7 +256,7 @@ public: //! \{ //! \fn PIString createNewFile() - //! @brief Create new binlog file in \a logDir, if successful returns filename, else returns empty string. + //! \brief Create new binlog file in \a logDir, if successful returns filename, else returns empty string. //! Filename is like \a filePrefix + "yyyy_MM_dd__hh_mm_ss.binlog" //! \} @@ -264,13 +264,13 @@ public: //! \{ //! \fn void fileEnd() - //! @brief Raise on file end while reading + //! \brief Raise on file end while reading //! \fn void fileError() - //! @brief Raise on file creation error + //! \brief Raise on file creation error //! \fn void newFile(const PIString & filename) - //! @brief Raise on new file created + //! \brief Raise on new file created //! \} @@ -331,7 +331,7 @@ private: PIByteArray user_header; }; -//! \relatesalso PICout @brief Output operator PIBinaryLog::BinLogInfo to PICout +//! \relatesalso PICout \brief Output operator PIBinaryLog::BinLogInfo to PICout inline PICout operator <<(PICout s, const PIBinaryLog::BinLogInfo & bi) { s.space(); s.setControl(0, true); diff --git a/libs/main/io_devices/pican.h b/libs/main/io_devices/pican.h index ba2b4592..11f2bb06 100644 --- a/libs/main/io_devices/pican.h +++ b/libs/main/io_devices/pican.h @@ -1,5 +1,5 @@ -/*! @file pican.h - * @brief CAN device +/*! \file pican.h + * \brief CAN device */ /* PIP - Platform Independent Primitives diff --git a/libs/main/io_devices/piconfig.cpp b/libs/main/io_devices/piconfig.cpp index 318dfac9..816207ff 100644 --- a/libs/main/io_devices/piconfig.cpp +++ b/libs/main/io_devices/piconfig.cpp @@ -26,7 +26,7 @@ # include #endif /*! \class PIConfig - * @brief Configuration file + * \brief Configuration file * \details This class provide handle access to configuration file. * * \section PIConfig_sec0 Synopsis @@ -67,7 +67,7 @@ */ /*! \class PIConfig::Entry - * @brief %Entry of configuration file + * \brief %Entry of configuration file * \details This class is node of internal PIConfig tree. * %Entry provide access to elements of PIConfig. Each entry has * children or next properties: @@ -91,7 +91,7 @@ */ /*! \class PIConfig::Branch - * @brief %Branch is a list of entries of configuration file + * \brief %Branch is a list of entries of configuration file * \details %Branch provides some features to get entries lists. * \snippet piconfig.cpp PIConfig::Branch * diff --git a/libs/main/io_devices/piconfig.h b/libs/main/io_devices/piconfig.h index 5bee75ab..c6027ffc 100644 --- a/libs/main/io_devices/piconfig.h +++ b/libs/main/io_devices/piconfig.h @@ -1,5 +1,5 @@ -/*! @file piconfig.h - * @brief Configuration parser and writer +/*! \file piconfig.h + * \brief Configuration parser and writer */ /* PIP - Platform Independent Primitives @@ -148,7 +148,7 @@ public: //! Returns comment const PIString & comment() const {return _comment;} - /** @brief Returns full name, i.e. name as it looks in file + /** \brief Returns full name, i.e. name as it looks in file * \details In case of default entry full name always is empty * \snippet piconfig.cpp fullName */ const PIString & fullName() const {return _full_name;} @@ -205,7 +205,7 @@ public: Entry & setValue(const double value) {setValue(PIString::fromNumber(value)); setType("f"); return *this;} - /** @brief Returns entry with name "vname" and default value "def" + /** \brief Returns entry with name "vname" and default value "def" * \details If there is no suitable entry found, reference to default internal entry with * value = "def" will be returned, and if "exists" not null it will be set to \b false */ Entry & getValue(const PIString & vname, const PIString & def = PIString(), bool * exists = 0); @@ -213,43 +213,43 @@ public: PICONFIG_GET_VALUE //! \fn Entry & getValue(const PIString & vname, const char * def, bool * exists = 0) - //! @brief Returns entry with name "vname" and default value "def" + //! \brief Returns entry with name "vname" and default value "def" //! \fn Entry & getValue(const PIString & vname, const char * def, bool * exists = 0) - //! @brief Returns entry with name "vname" and default value "def" + //! \brief Returns entry with name "vname" and default value "def" //! \fn Entry & getValue(const PIString & vname, const PIStringList & def, bool * exists = 0) - //! @brief Returns entry with name "vname" and default value "def" + //! \brief Returns entry with name "vname" and default value "def" //! \fn Entry & getValue(const PIString & vname, const bool def, bool * exists = 0) - //! @brief Returns entry with name "vname" and default value "def" + //! \brief Returns entry with name "vname" and default value "def" //! \fn Entry & getValue(const PIString & vname, const short def, bool * exists = 0) - //! @brief Returns entry with name "vname" and default value "def" + //! \brief Returns entry with name "vname" and default value "def" //! \fn Entry & getValue(const PIString & vname, const int def, bool * exists = 0) - //! @brief Returns entry with name "vname" and default value "def" + //! \brief Returns entry with name "vname" and default value "def" //! \fn Entry & getValue(const PIString & vname, const long def, bool * exists = 0) - //! @brief Returns entry with name "vname" and default value "def" + //! \brief Returns entry with name "vname" and default value "def" //! \fn Entry & getValue(const PIString & vname, const uchar def, bool * exists = 0) - //! @brief Returns entry with name "vname" and default value "def" + //! \brief Returns entry with name "vname" and default value "def" //! \fn Entry & getValue(const PIString & vname, const ushort def, bool * exists = 0) - //! @brief Returns entry with name "vname" and default value "def" + //! \brief Returns entry with name "vname" and default value "def" //! \fn Entry & getValue(const PIString & vname, const uint def, bool * exists = 0) - //! @brief Returns entry with name "vname" and default value "def" + //! \brief Returns entry with name "vname" and default value "def" //! \fn Entry & getValue(const PIString & vname, const ulong def, bool * exists = 0) - //! @brief Returns entry with name "vname" and default value "def" + //! \brief Returns entry with name "vname" and default value "def" //! \fn Entry & getValue(const PIString & vname, const float def, bool * exists = 0) - //! @brief Returns entry with name "vname" and default value "def" + //! \brief Returns entry with name "vname" and default value "def" //! \fn Entry & getValue(const PIString & vname, const double def, bool * exists = 0) - //! @brief Returns entry with name "vname" and default value "def" + //! \brief Returns entry with name "vname" and default value "def" //! Find all entries with names with substrings "vname" and returns them as \a PIConfig::Branch @@ -341,43 +341,43 @@ public: PICONFIG_GET_VALUE //! \fn Entry & getValue(const PIString & vname, const char * def, bool * exists = 0) - //! @brief Returns top-level entry with name "vname" and default value "def" + //! \brief Returns top-level entry with name "vname" and default value "def" //! \fn Entry & getValue(const PIString & vname, const char * def, bool * exists = 0) - //! @brief Returns top-level entry with name "vname" and default value "def" + //! \brief Returns top-level entry with name "vname" and default value "def" //! \fn Entry & getValue(const PIString & vname, const PIStringList & def, bool * exists = 0) - //! @brief Returns top-level entry with name "vname" and default value "def" + //! \brief Returns top-level entry with name "vname" and default value "def" //! \fn Entry & getValue(const PIString & vname, const bool def, bool * exists = 0) - //! @brief Returns top-level entry with name "vname" and default value "def" + //! \brief Returns top-level entry with name "vname" and default value "def" //! \fn Entry & getValue(const PIString & vname, const short def, bool * exists = 0) - //! @brief Returns top-level entry with name "vname" and default value "def" + //! \brief Returns top-level entry with name "vname" and default value "def" //! \fn Entry & getValue(const PIString & vname, const int def, bool * exists = 0) - //! @brief Returns top-level entry with name "vname" and default value "def" + //! \brief Returns top-level entry with name "vname" and default value "def" //! \fn Entry & getValue(const PIString & vname, const long def, bool * exists = 0) - //! @brief Returns top-level entry with name "vname" and default value "def" + //! \brief Returns top-level entry with name "vname" and default value "def" //! \fn Entry & getValue(const PIString & vname, const uchar def, bool * exists = 0) - //! @brief Returns top-level entry with name "vname" and default value "def" + //! \brief Returns top-level entry with name "vname" and default value "def" //! \fn Entry & getValue(const PIString & vname, const ushort def, bool * exists = 0) - //! @brief Returns top-level entry with name "vname" and default value "def" + //! \brief Returns top-level entry with name "vname" and default value "def" //! \fn Entry & getValue(const PIString & vname, const uint def, bool * exists = 0) - //! @brief Returns top-level entry with name "vname" and default value "def" + //! \brief Returns top-level entry with name "vname" and default value "def" //! \fn Entry & getValue(const PIString & vname, const ulong def, bool * exists = 0) - //! @brief Returns top-level entry with name "vname" and default value "def" + //! \brief Returns top-level entry with name "vname" and default value "def" //! \fn Entry & getValue(const PIString & vname, const float def, bool * exists = 0) - //! @brief Returns top-level entry with name "vname" and default value "def" + //! \brief Returns top-level entry with name "vname" and default value "def" //! \fn Entry & getValue(const PIString & vname, const double def, bool * exists = 0) - //! @brief Returns top-level entry with name "vname" and default value "def" + //! \brief Returns top-level entry with name "vname" and default value "def" //! Returns top-level entries with names with substrings "vname" @@ -517,7 +517,7 @@ inline PICout operator <<(PICout s, const PIConfig::Entry & v) { /** \relatesalso PIConfig \relatesalso PIIODevice - * @brief Service function. useful for configuring devices + * \brief Service function. useful for configuring devices * \details Function takes entry name "name", default value "def" and two * \a PIConfig::Entry sections: "em" and their parent "ep". If there is no * parent ep = 0. If "ep" is not null and entry "name" exists in "ep" function diff --git a/libs/main/io_devices/pidir.cpp b/libs/main/io_devices/pidir.cpp index fa7c4bf4..c4db1962 100644 --- a/libs/main/io_devices/pidir.cpp +++ b/libs/main/io_devices/pidir.cpp @@ -46,7 +46,7 @@ extern "C" { #endif /*! \class PIDir - * @brief Local directory + * \brief Local directory * * \section PIDir_sec0 Synopsis * This class provide access to local file. You can manipulate diff --git a/libs/main/io_devices/pidir.h b/libs/main/io_devices/pidir.h index 2c4e6448..4873b252 100644 --- a/libs/main/io_devices/pidir.h +++ b/libs/main/io_devices/pidir.h @@ -1,5 +1,5 @@ -/*! @file pidir.h - * @brief Local directory +/*! \file pidir.h + * \brief Local directory */ /* PIP - Platform Independent Primitives @@ -57,7 +57,7 @@ public: //! Returns absolute path of this directory PIString absolutePath() const; - /** @brief Simplify path of this directory + /** \brief Simplify path of this directory * \details This function remove repeatedly separators and * resolve ".." in path. E.g. "/home/.//peri4/src/../.." will * become "/home" \n This function returns reference to this %PIDir */ @@ -76,7 +76,7 @@ public: bool setCurrent() {return PIDir::setCurrent(path());} - /** @brief Returns this directory content + /** \brief Returns this directory content * \details Scan this directory and returns all directories * and files in one list, sorted alphabetically. This list * contains also "." and ".." members. There are absolute @@ -85,7 +85,7 @@ public: * directories! */ PIVector entries(); - /** @brief Returns all this directory content + /** \brief Returns all this directory content * \details Scan this directory recursively and returns all * directories and files in one list, sorted alphabetically. * This list doesn`t contains "." and ".." members. There diff --git a/libs/main/io_devices/piethernet.cpp b/libs/main/io_devices/piethernet.cpp index dd9f5b25..fcf4a00b 100644 --- a/libs/main/io_devices/piethernet.cpp +++ b/libs/main/io_devices/piethernet.cpp @@ -69,9 +69,11 @@ #include -/** \class PIEthernet - * @brief Ethernet device - * \details +/** \class PIEthernet piethernet.h + * \brief + * Ethernet device + * + * \details * \section PIEthernet_sec0 Synopsis * %PIEthernet designed to work with IPv4 network via two protocols: * UDP and TCP. This class allow you send and receive packets to/from diff --git a/libs/main/io_devices/piethernet.h b/libs/main/io_devices/piethernet.h index ac977fb1..ebacf5be 100644 --- a/libs/main/io_devices/piethernet.h +++ b/libs/main/io_devices/piethernet.h @@ -1,5 +1,5 @@ -/*! @file piethernet.h - * @brief Ethernet device +/*! \file piethernet.h + * \brief Ethernet device */ /* PIP - Platform Independent Primitives @@ -42,7 +42,7 @@ public: //! Contructs UDP %PIEthernet with empty read address explicit PIEthernet(); - //! @brief Type of %PIEthernet + //! \brief Type of %PIEthernet enum Type { UDP /** UDP - User Datagram Protocol */ , TCP_Client /** TCP client - allow connection to TCP server */ , @@ -50,7 +50,7 @@ public: TCP_SingleTCP /** TCP client single mode - connect & send & disconnect, on each packet */ }; - //! @brief Parameters of %PIEthernet + //! \brief Parameters of %PIEthernet enum Parameters { ReuseAddress /** Rebind address if there is already binded. Enabled by default */ = 0x1, Broadcast /** Broadcast send. Disabled by default */ = 0x2, @@ -62,7 +62,7 @@ public: }; - //! @brief IPv4 network address, IP and port + //! \brief IPv4 network address, IP and port class PIP_EXPORT Address { friend class PIEthernet; public: @@ -421,37 +421,37 @@ public: //! \{ //! \fn void newConnection(PIEthernet * client) - //! @brief Raise on new TCP connection received + //! \brief Raise on new TCP connection received //! \fn void connected() - //! @brief Raise if succesfull TCP connection + //! \brief Raise if succesfull TCP connection //! \fn void disconnected(bool withError) - //! @brief Raise if TCP connection was closed + //! \brief Raise if TCP connection was closed //! \} //! \ioparams //! \{ #ifdef DOXYGEN - //! @brief read ip, default "" + //! \brief read ip, default "" string ip; - //! @brief read port, default 0 + //! \brief read port, default 0 int port; - //! @brief ethernet parameters + //! \brief ethernet parameters int parameters; - //! @brief read timeout, default 1000 ms + //! \brief read timeout, default 1000 ms double readTimeout; - //! @brief write timeout, default 1000 ms + //! \brief write timeout, default 1000 ms double writeTimeout; - //! @brief time-to-live, default 64 + //! \brief time-to-live, default 64 int TTL; - //! @brief time-to-live for multicast, default 1 + //! \brief time-to-live for multicast, default 1 int multicastTTL; #endif //! \} diff --git a/libs/main/io_devices/pifile.cpp b/libs/main/io_devices/pifile.cpp index 813818b1..05fd459d 100644 --- a/libs/main/io_devices/pifile.cpp +++ b/libs/main/io_devices/pifile.cpp @@ -70,7 +70,7 @@ #endif /*! \class PIFile - * @brief Local file + * \brief Local file * * \section PIFile_sec0 Synopsis * This class provide access to local file. You can manipulate diff --git a/libs/main/io_devices/pifile.h b/libs/main/io_devices/pifile.h index 2cb9c036..67317959 100644 --- a/libs/main/io_devices/pifile.h +++ b/libs/main/io_devices/pifile.h @@ -1,5 +1,5 @@ -/*! @file pifile.h - * @brief Local file +/*! \file pifile.h + * \brief Local file */ /* PIP - Platform Independent Primitives @@ -267,16 +267,16 @@ public: //! \{ //! \fn void clear() - //! @brief Clear content of file + //! \brief Clear content of file //! \fn void resize(llong new_size) - //! @brief Resize file to "new_size" with "fill" filling + //! \brief Resize file to "new_size" with "fill" filling //! \fn void resize(llong new_size, uchar fill) - //! @brief Resize file to "new_size" with "fill" filling + //! \brief Resize file to "new_size" with "fill" filling //! \fn void remove() - //! @brief Remove file + //! \brief Remove file //! \} //! \ioparams diff --git a/libs/main/io_devices/pigpio.cpp b/libs/main/io_devices/pigpio.cpp index 86783691..85d6cb78 100644 --- a/libs/main/io_devices/pigpio.cpp +++ b/libs/main/io_devices/pigpio.cpp @@ -29,7 +29,7 @@ /*! \class PIGPIO - * @brief GPIO support + * \brief GPIO support * * \section PIGPIO_sec0 Synopsis * This class provide initialize, get/set and watch functions for GPIO. diff --git a/libs/main/io_devices/pigpio.h b/libs/main/io_devices/pigpio.h index ce157aae..ed566206 100644 --- a/libs/main/io_devices/pigpio.h +++ b/libs/main/io_devices/pigpio.h @@ -1,5 +1,5 @@ -/*! @file pigpio.h - * @brief GPIO +/*! \file pigpio.h + * \brief GPIO */ /* PIP - Platform Independent Primitives @@ -33,41 +33,41 @@ public: PIGPIO(); virtual ~PIGPIO(); - //! @brief Work mode for pin + //! \brief Work mode for pin enum Direction { In /** Input direction (read) */, Out /** Output direction (write) */ }; - //! @brief Returns singleton object of %PIGPIO + //! \brief Returns singleton object of %PIGPIO static PIGPIO * instance(); - //! @brief Initialize pin \"gpio_num\" for \"dir\" mode + //! \brief Initialize pin \"gpio_num\" for \"dir\" mode void initPin(int gpio_num, Direction dir = PIGPIO::In); - //! @brief Set pin \"gpio_num\" value to \"value\" + //! \brief Set pin \"gpio_num\" value to \"value\" void pinSet (int gpio_num, bool value); - //! @brief Set pin \"gpio_num\" value to \b true + //! \brief Set pin \"gpio_num\" value to \b true void pinHigh (int gpio_num) {pinSet(gpio_num, true );} - //! @brief Set pin \"gpio_num\" value to \b false + //! \brief Set pin \"gpio_num\" value to \b false void pinLow (int gpio_num) {pinSet(gpio_num, false);} - //! @brief Returns pin \"gpio_num\" state + //! \brief Returns pin \"gpio_num\" state bool pinState(int gpio_num); - //! @brief Starts watch for pin \"gpio_num\". + //! \brief Starts watch for pin \"gpio_num\". //! \details Pins watching starts only with \a PIThread::start() function! //! This function doesn`t affect thread state void pinBeginWatch(int gpio_num); - //! @brief End watch for pin \"gpio_num\". + //! \brief End watch for pin \"gpio_num\". //! \details Pins watching starts only with \a PIThread::start() function! //! This function doesn`t affect thread state void pinEndWatch (int gpio_num); - //! @brief End watch for all pins. + //! \brief End watch for all pins. //! \details Pins watching starts only with \a PIThread::start() function! //! This function doesn`t affect thread state void clearWatch(); @@ -78,7 +78,7 @@ public: //! \{ //! \fn void pinChanged(int gpio_num, bool new_value) - //! @brief Raise on pin \"gpio_num\" state changes to \"new_value\" + //! \brief Raise on pin \"gpio_num\" state changes to \"new_value\" //! \details Important! This event will be raised only with started //! thread. diff --git a/libs/main/io_devices/piiobytearray.cpp b/libs/main/io_devices/piiobytearray.cpp index c91c3c90..67f45a21 100644 --- a/libs/main/io_devices/piiobytearray.cpp +++ b/libs/main/io_devices/piiobytearray.cpp @@ -21,7 +21,7 @@ /*! \class PIIOByteArray - * @brief PIIODevice wrapper around PIByteArray + * \brief PIIODevice wrapper around PIByteArray * * \section PIIOByteArray_sec0 Synopsis * This class sllow you to use PIByteArray as PIIODevice and pass it to, e.g. PIConfig diff --git a/libs/main/io_devices/piiobytearray.h b/libs/main/io_devices/piiobytearray.h index 6ff35480..57bec2e4 100644 --- a/libs/main/io_devices/piiobytearray.h +++ b/libs/main/io_devices/piiobytearray.h @@ -1,5 +1,5 @@ -/*! @file piiobytearray.h - * @brief PIIODevice wrapper around PIByteArray +/*! \file piiobytearray.h + * \brief PIIODevice wrapper around PIByteArray */ /* PIP - Platform Independent Primitives diff --git a/libs/main/io_devices/piiodevice.cpp b/libs/main/io_devices/piiodevice.cpp index c3e2cbc3..4a6a921a 100644 --- a/libs/main/io_devices/piiodevice.cpp +++ b/libs/main/io_devices/piiodevice.cpp @@ -24,7 +24,7 @@ /*! \class PIIODevice - * @brief Base class for input/output classes + * \brief Base class for input/output classes * * \section PIIODevice_sec0 Synopsis * This class provide open/close logic, threaded read/write and virtual input/output @@ -125,7 +125,7 @@ PIIODevice::PIIODevice(): PIThread() { } -/*! @brief Constructs a PIIODevice with path and mode +/*! \brief Constructs a PIIODevice with path and mode * \param path path to device * \param type mode for open */ PIIODevice::PIIODevice(const PIString & path, PIIODevice::DeviceMode mode): PIThread() { diff --git a/libs/main/io_devices/piiodevice.h b/libs/main/io_devices/piiodevice.h index bfe903e2..6c7319fe 100644 --- a/libs/main/io_devices/piiodevice.h +++ b/libs/main/io_devices/piiodevice.h @@ -1,5 +1,5 @@ -/*! @file piiodevice.h - * @brief Abstract input/output device +/*! \file piiodevice.h + * \brief Abstract input/output device */ /* PIP - Platform Independent Primitives @@ -35,10 +35,10 @@ typedef bool (*ReadRetFunc)(void * , uchar * , int ); #ifdef DOXYGEN -//! \relatesalso PIIODevice @brief Use this macro to enable automatic creation instances of your class with \a createFromFullPath() function +//! \relatesalso PIIODevice \brief Use this macro to enable automatic creation instances of your class with \a createFromFullPath() function # define REGISTER_DEVICE(class) -//! \relatesalso PIIODevice @brief Use this macro instead of PIOBJECT when describe your own PIIODevice +//! \relatesalso PIIODevice \brief Use this macro instead of PIOBJECT when describe your own PIIODevice # define PIIODEVICE(class) #else @@ -59,20 +59,20 @@ public: //! Constructs a empty PIIODevice explicit PIIODevice(); - //! @brief Open modes for PIIODevice + //! \brief Open modes for PIIODevice enum DeviceMode { ReadOnly /*! Device can only read */ = 0x01, WriteOnly /*! Device can only write */ = 0x02, ReadWrite /*! Device can both read and write */ = 0x03 }; - //! @brief Options for PIIODevice, works with some devices + //! \brief Options for PIIODevice, works with some devices enum DeviceOption { BlockingRead /*! \a read block until data is received, default off */ = 0x01, BlockingWrite /*! \a write block until data is sent, default off */ = 0x02 }; - //! @brief Characteristics of PIIODevice subclass + //! \brief Characteristics of PIIODevice subclass enum DeviceInfoFlag { Sequential /*! Continuous bytestream without datagrams */ = 0x01, Reliable /*! Channel without data errors / corruptions */ = 0x02 @@ -144,7 +144,7 @@ public: int reopenTimeout() {return property(PIStringAscii("reopenTimeout")).toInt();} - /** @brief Set "threaded read slot" + /** \brief Set "threaded read slot" * \details Set external static function of threaded read that will be executed * at every successful threaded read. Function should have format * "bool func(void * data, uchar * readed, int size)" */ @@ -153,7 +153,7 @@ public: //! Set custom data that will be passed to "threaded read slot" void setThreadedReadData(void * d) {ret_data_ = d;} - /** @brief Set size of threaded read buffer + /** \brief Set size of threaded read buffer * \details Default size is 4096 bytes. If your device can read at single read * more than 4096 bytes you should use this function to adjust buffer size */ void setThreadedReadBufferSize(int new_size) {threaded_read_buffer_size = new_size; threadedReadBufferSizeChanged();} @@ -240,12 +240,12 @@ public: //! Configure device from PIVariantTypes::IODevice void configureFromVariant(const PIVariantTypes::IODevice & d); - //! @brief Try to determine suitable device, create new one, configure it with \a configureFromFullPath() and returns it. + //! \brief Try to determine suitable device, create new one, configure it with \a configureFromFullPath() and returns it. //! \details To function \a configureFromFullPath() "full_path" passed without \a fullPathPrefix() + "://". //! See \ref PIIODevice_sec7 static PIIODevice * createFromFullPath(const PIString & full_path); - //! @brief Try to determine suitable device, create new one, configure it with \a configureFromVariant() and returns it. + //! \brief Try to determine suitable device, create new one, configure it with \a configureFromVariant() and returns it. //! \details To function \a configureFromFullPath() "full_path" passed without \a fullPathPrefix() + "://". //! See \ref PIIODevice_sec7 static PIIODevice * createFromVariant(const PIVariantTypes::IODevice & d); @@ -276,57 +276,57 @@ public: //! \{ //! \fn bool open() - //! @brief Open device + //! \brief Open device //! \fn bool open(const PIString & path) - //! @brief Open device with path "path" + //! \brief Open device with path "path" //! \fn bool open(const DeviceMode & mode) - //! @brief Open device with mode "mode" + //! \brief Open device with mode "mode" //! \fn bool open(const PIString & path, const DeviceMode & mode) - //! @brief Open device with path "path" and mode "mode" + //! \brief Open device with path "path" and mode "mode" //! \fn bool close() - //! @brief Close device + //! \brief Close device //! \fn int write(PIByteArray data) - //! @brief Write "data" to device + //! \brief Write "data" to device //! \} //! \vhandlers //! \{ //! \fn void flush() - //! @brief Immediate write all buffers + //! \brief Immediate write all buffers //! \} //! \events //! \{ //! \fn void opened() - //! @brief Raise if succesfull open + //! \brief Raise if succesfull open //! \fn void closed() - //! @brief Raise if succesfull close + //! \brief Raise if succesfull close //! \fn void threadedReadEvent(uchar * readed, int size) - //! @brief Raise if read thread succesfull read some data + //! \brief Raise if read thread succesfull read some data //! \fn void threadedWriteEvent(ullong id, int written_size) - //! @brief Raise if write thread successfull write some data of task with ID "id" + //! \brief Raise if write thread successfull write some data of task with ID "id" //! \} //! \ioparams //! \{ #ifdef DOXYGEN - //! @brief setReopenEnabled, default "true" + //! \brief setReopenEnabled, default "true" bool reopenEnabled; - //! @brief setReopenTimeout in ms, default 1000 + //! \brief setReopenTimeout in ms, default 1000 int reopenTimeout; - //! @brief setThreadedReadBufferSize in bytes, default 4096 + //! \brief setThreadedReadBufferSize in bytes, default 4096 int threadedReadBufferSize; #endif //! \} diff --git a/libs/main/io_devices/piiostring.cpp b/libs/main/io_devices/piiostring.cpp index 47f30e4b..d2587cec 100644 --- a/libs/main/io_devices/piiostring.cpp +++ b/libs/main/io_devices/piiostring.cpp @@ -21,7 +21,7 @@ /*! \class PIIOString - * @brief PIIODevice wrapper around PIString + * \brief PIIODevice wrapper around PIString * * \section PIIOString_sec0 Synopsis * This class allow you to use PIString as PIIODevice and pass it to, e.g. PIConfig diff --git a/libs/main/io_devices/piiostring.h b/libs/main/io_devices/piiostring.h index 68a93684..9301060d 100644 --- a/libs/main/io_devices/piiostring.h +++ b/libs/main/io_devices/piiostring.h @@ -1,5 +1,5 @@ -/*! @file piiostring.h - * @brief PIIODevice wrapper around PIString +/*! \file piiostring.h + * \brief PIIODevice wrapper around PIString */ /* PIP - Platform Independent Primitives diff --git a/libs/main/io_devices/pipeer.h b/libs/main/io_devices/pipeer.h index 36a16b53..41862623 100644 --- a/libs/main/io_devices/pipeer.h +++ b/libs/main/io_devices/pipeer.h @@ -1,5 +1,5 @@ -/*! @file pipeer.h - * @brief Peering net node +/*! \file pipeer.h + * \brief Peering net node */ /* PIP - Platform Independent Primitives diff --git a/libs/main/io_devices/piserial.cpp b/libs/main/io_devices/piserial.cpp index f8264da3..0e381c71 100644 --- a/libs/main/io_devices/piserial.cpp +++ b/libs/main/io_devices/piserial.cpp @@ -138,7 +138,7 @@ /*! \class PISerial - * @brief Serial device + * \brief Serial device * * \section PISerial_sec0 Synopsis * This class provide access to serial device, e.g. COM port. It can read, @@ -416,7 +416,7 @@ int PISerial::convertSpeed(PISerial::Speed speed) { } -/** @brief Advanced read function +/** \brief Advanced read function * \details Read to pointer "read_to" no more than "max_size" and no longer * than "timeout_ms" milliseconds. If "timeout_ms" < 0 function will be * wait forever until "max_size" will be readed. If size <= 0 function @@ -454,7 +454,7 @@ bool PISerial::read(void * data, int size, double timeout_ms) { } -/** @brief Advanced read function +/** \brief Advanced read function * \details Read all or no more than "size" and no longer than * "timeout_ms" milliseconds. If "timeout_ms" < 0 function will be * wait forever until "size" will be readed. If "size" <= 0 @@ -506,7 +506,7 @@ PIString PISerial::read(int size, double timeout_ms) { } -/** @brief Advanced read function +/** \brief Advanced read function * \details Read all or no more than "size" and no longer than * "timeout_ms" milliseconds. If "timeout_ms" < 0 function will be * wait forever until "size" will be readed. If "size" <= 0 @@ -722,7 +722,7 @@ void PISerial::setTimeouts() { } -/** @brief Basic read function +/** \brief Basic read function * \details Read to pointer "read_to" no more than "max_size". If read is * set to blocking this function will be wait at least one byte. * \returns Readed bytes count diff --git a/libs/main/io_devices/piserial.h b/libs/main/io_devices/piserial.h index 6af6c290..f8957a40 100644 --- a/libs/main/io_devices/piserial.h +++ b/libs/main/io_devices/piserial.h @@ -1,5 +1,5 @@ -/*! @file piserial.h - * @brief Serial device +/*! \file piserial.h + * \brief Serial device */ /* PIP - Platform Independent Primitives @@ -34,14 +34,14 @@ public: //! Contructs an empty %PISerial explicit PISerial(); - //! @brief Parameters of PISerial + //! \brief Parameters of PISerial enum Parameters { ParityControl /*! Enable parity check and generate */ = 0x1, ParityOdd /*! Parity is odd instead of even */ = 0x2, TwoStopBits /*! Two stop bits instead of one */ = 0x4 }; - //! @brief Speed of PISerial + //! \brief Speed of PISerial enum Speed { S50 /*! 50 baud */ = 50, S75 /*! 75 baud */ = 75, @@ -72,26 +72,26 @@ public: S4000000 /*! 4000000 baud */ = 4000000 }; - //! @brief Information about serial device + //! \brief Information about serial device struct PIP_EXPORT DeviceInfo { DeviceInfo(); - //! @brief String representation of USB ID in format \"xxxx:xxxx\" + //! \brief String representation of USB ID in format \"xxxx:xxxx\" PIString id() const; - //! @brief USB Vendor ID + //! \brief USB Vendor ID uint vID; - //! @brief USB Product ID + //! \brief USB Product ID uint pID; - //! @brief Path to device, e.g. "COM2" or "/dev/ttyUSB0" + //! \brief Path to device, e.g. "COM2" or "/dev/ttyUSB0" PIString path; - //! @brief Device description + //! \brief Device description PIString description; - //! @brief Device manufacturer + //! \brief Device manufacturer PIString manufacturer; }; @@ -187,42 +187,42 @@ public: PIString read(int size = -1, double timeout_ms = 1000.); PIByteArray readData(int size = -1, double timeout_ms = 1000.); - //! @brief Write to device data "data" with maximum size "size" and wait for data written if "wait" is \b true. + //! \brief Write to device data "data" with maximum size "size" and wait for data written if "wait" is \b true. //! \returns \b true if sended bytes count = "size" bool send(const void * data, int size); - //! @brief Write to device byte array "data" + //! \brief Write to device byte array "data" //! \returns \b true if sended bytes count = size of string bool send(const PIByteArray & data) {return send(data.data(), data.size_s());} - //! @brief Returns all available speeds for serial devices + //! \brief Returns all available speeds for serial devices static PIVector availableSpeeds(); - //! @brief Returns all available system devices path. If "test" each device will be tried to open + //! \brief Returns all available system devices path. If "test" each device will be tried to open static PIStringList availableDevices(bool test = false); - //! @brief Returns all available system devices. If "test" each device will be tried to open + //! \brief Returns all available system devices. If "test" each device will be tried to open static PIVector availableDevicesInfo(bool test = false); //! \ioparams //! \{ #ifdef DOXYGEN - //! @brief device, default "" + //! \brief device, default "" string device; - //! @brief input/output speed, default 115200 + //! \brief input/output speed, default 115200 int speed; - //! @brief dataBitsCount, default 8 + //! \brief dataBitsCount, default 8 int dataBitsCount; - //! @brief parityControl, default false + //! \brief parityControl, default false bool parityControl; - //! @brief parityOdd, default false + //! \brief parityOdd, default false bool parityOdd; - //! @brief twoStopBits, default false + //! \brief twoStopBits, default false bool twoStopBits; #endif //! \} diff --git a/libs/main/io_devices/pisharedmemory.cpp b/libs/main/io_devices/pisharedmemory.cpp index 2b5c3f70..daaaa2c2 100644 --- a/libs/main/io_devices/pisharedmemory.cpp +++ b/libs/main/io_devices/pisharedmemory.cpp @@ -41,7 +41,7 @@ /*! \class PISharedMemory - * @brief Shared memory + * \brief Shared memory * * \section PISharedMemory_sec0 Synopsis * This class provide access to local file. You can manipulate diff --git a/libs/main/io_devices/pisharedmemory.h b/libs/main/io_devices/pisharedmemory.h index d08559f8..495739f6 100644 --- a/libs/main/io_devices/pisharedmemory.h +++ b/libs/main/io_devices/pisharedmemory.h @@ -1,5 +1,5 @@ -/*! @file pisharedmemory.h - * @brief Shared memory +/*! \file pisharedmemory.h + * \brief Shared memory */ /* PIP - Platform Independent Primitives diff --git a/libs/main/io_devices/pispi.h b/libs/main/io_devices/pispi.h index f9295235..29284a45 100644 --- a/libs/main/io_devices/pispi.h +++ b/libs/main/io_devices/pispi.h @@ -1,5 +1,5 @@ -/*! @file pispi.h - * @brief SPI device +/*! \file pispi.h + * \brief SPI device */ /* PIP - Platform Independent Primitives @@ -33,7 +33,7 @@ public: explicit PISPI(const PIString & path = PIString(), uint speed_hz = 1000000, PIIODevice::DeviceMode mode = PIIODevice::ReadWrite); virtual ~PISPI(); - //! @brief Parameters of PISPI + //! \brief Parameters of PISPI enum Parameters { ClockInverse /*! SPI clk polarity control*/ = 0x1, ClockPhaseShift /*! SPI clk phase control */ = 0x2, diff --git a/libs/main/io_devices/pitransparentdevice.cpp b/libs/main/io_devices/pitransparentdevice.cpp index 6b6e5f39..42f1a609 100644 --- a/libs/main/io_devices/pitransparentdevice.cpp +++ b/libs/main/io_devices/pitransparentdevice.cpp @@ -21,7 +21,7 @@ /*! \class PITransparentDevice - * @brief PIIODevice that pass write to read + * \brief PIIODevice that pass write to read * * \section PITransparentDevice_sec0 Synopsis * This class pass all data from \a write() function to \a read(). diff --git a/libs/main/io_devices/pitransparentdevice.h b/libs/main/io_devices/pitransparentdevice.h index cc023e12..4b49eb4b 100644 --- a/libs/main/io_devices/pitransparentdevice.h +++ b/libs/main/io_devices/pitransparentdevice.h @@ -1,5 +1,5 @@ -/*! @file pitransparentdevice.h - * @brief PIIODevice that pass write to read +/*! \file pitransparentdevice.h + * \brief PIIODevice that pass write to read */ /* PIP - Platform Independent Primitives diff --git a/libs/main/io_devices/piusb.h b/libs/main/io_devices/piusb.h index 0658dc01..5ba47d8c 100644 --- a/libs/main/io_devices/piusb.h +++ b/libs/main/io_devices/piusb.h @@ -1,5 +1,5 @@ -/*! @file piusb.h - * @brief USB device +/*! \file piusb.h + * \brief USB device */ /* PIP - Platform Independent Primitives diff --git a/libs/main/io_utils/pibasetransfer.h b/libs/main/io_utils/pibasetransfer.h index cbf58b06..988cdef9 100644 --- a/libs/main/io_utils/pibasetransfer.h +++ b/libs/main/io_utils/pibasetransfer.h @@ -1,5 +1,5 @@ -/*! @file pibasetransfer.h - * @brief Base class for reliable send and receive data in fixed packets with error correction, pause and resume +/*! \file pibasetransfer.h + * \brief Base class for reliable send and receive data in fixed packets with error correction, pause and resume */ /* PIP - Platform Independent Primitives diff --git a/libs/main/io_utils/pibroadcast.h b/libs/main/io_utils/pibroadcast.h index a9787aa2..67008007 100644 --- a/libs/main/io_utils/pibroadcast.h +++ b/libs/main/io_utils/pibroadcast.h @@ -1,5 +1,5 @@ -/*! @file pibroadcast.h - * @brief Broadcast for all interfaces, including loopback +/*! \file pibroadcast.h + * \brief Broadcast for all interfaces, including loopback */ /* PIP - Platform Independent Primitives @@ -117,7 +117,7 @@ public: //! \{ //! \fn void receiveEvent(PIByteArray data) - //! @brief Raise on packet received + //! \brief Raise on packet received //! \} diff --git a/libs/main/io_utils/piconnection.cpp b/libs/main/io_utils/piconnection.cpp index 17c05ec2..c82d8c7c 100644 --- a/libs/main/io_utils/piconnection.cpp +++ b/libs/main/io_utils/piconnection.cpp @@ -21,7 +21,7 @@ #include "piconfig.h" /** \class PIConnection - * @brief Complex Input/Output point + * \brief Complex Input/Output point * * \section PIConnection_synopsis Synopsis * %PIConnection provides abstract layer over physical devices, diff --git a/libs/main/io_utils/piconnection.h b/libs/main/io_utils/piconnection.h index 1a40a4a0..f6be10bd 100644 --- a/libs/main/io_utils/piconnection.h +++ b/libs/main/io_utils/piconnection.h @@ -1,5 +1,5 @@ -/*! @file piconnection.h - * @brief Complex I/O point +/*! \file piconnection.h + * \brief Complex I/O point */ /* PIP - Platform Independent Primitives @@ -43,11 +43,11 @@ public: ~PIConnection(); - /*! @brief Configure connection from config file "config" from section "name". Returns if configuration was successful + /*! \brief Configure connection from config file "config" from section "name". Returns if configuration was successful * \details \b Warning: all devices, filters and channels removed before configure! */ bool configureFromConfig(const PIString & config, const PIString & name = PIStringAscii("connection")); - /*! @brief Configure connection from config content "string" from section "name". Returns if configuration was successful + /*! \brief Configure connection from config content "string" from section "name". Returns if configuration was successful * \details \b Warning: all devices, filters and channels removed before configure! */ bool configureFromString(PIString * string, const PIString & name = PIStringAscii("connection")); @@ -55,7 +55,7 @@ public: PIString makeConfig() const; - /*! @brief Add device with full path "full_path", open mode "mode" to Device pool and connection + /*! \brief Add device with full path "full_path", open mode "mode" to Device pool and connection * \details Returns pointer to device or null if device can not be created. If "start" is true, * read thread is started immediately. Else, you can start read thread with functions \a startThreadedRead() * or \a startAllThreadedReads(). By default, read thread doesn`t start */ @@ -65,12 +65,12 @@ public: PIStringList deviceNames(const PIIODevice * dev) const; - /*! @brief Remove device with full path "full_path" from connection + /*! \brief Remove device with full path "full_path" from connection * \details Returns if device was removed. If there is no connection bounded to this device, * it will be removed from Device pool */ bool removeDevice(const PIString & full_path); - /*! @brief Remove all device from connection + /*! \brief Remove all device from connection * \details If there is no connection bounded to there devices, they removed from Device pool */ void removeAllDevices(); @@ -83,7 +83,7 @@ public: //! Returns all devices bounded to this connection PIVector boundedDevices() const; - /*! @brief Add filter with name "name" to device with full path "full_path_name" or filter "full_path_name" + /*! \brief Add filter with name "name" to device with full path "full_path_name" or filter "full_path_name" * \details If there is no filter with name "name", connection create new with split mode "mode" and bound * to it device "full_path_name" or filter "full_path_name". If filter with name "name" already exists, * device "full_path_name" or filter "full_path_name" add to this filter. @@ -100,7 +100,7 @@ public: //! Add filter with "filter" to device "dev" PIPacketExtractor * addFilter(PIPacketExtractor * filter, const PIIODevice * dev) {return addFilter(filter, devFPath(dev));} - /*! @brief Remove from filter with name "name" device with full path "full_path_name" or filter "full_path_name" + /*! \brief Remove from filter with name "name" device with full path "full_path_name" or filter "full_path_name" * \details If there is no devices bounded to this filter, it will be removed. Returns if device was removed */ bool removeFilter(const PIString & name, const PIString & full_path_name); @@ -125,7 +125,7 @@ public: //! Returns all devices bounded to filter "name" PIVector filterBoundedDevices(const PIString & name) const; - /*! @brief Add to connection channel from "name_from" to "name_to" + /*! \brief Add to connection channel from "name_from" to "name_to" * \details "name_from" and "name_to" can be full pathes of devices or device names or filter names. * Returns \b false if there if no such device or filter, else create channel and returns \b true */ bool addChannel(const PIString & name_from, const PIString & name_to); @@ -139,7 +139,7 @@ public: //! Add to connection channel from "dev_from" to "dev_to" bool addChannel(const PIIODevice * dev_from, const PIIODevice * dev_to) {return addChannel(devFPath(dev_from), devFPath(dev_to));} - /*! @brief Remove from connection channel from "name_from" to "name_to" + /*! \brief Remove from connection channel from "name_from" to "name_to" * \details "name_from" and "name_to" can be full pathes of devices or filter names. * Returns \b false if there if no such device or filter, else remove channel and returns \b true */ bool removeChannel(const PIString & name_from, const PIString & name_to); @@ -153,7 +153,7 @@ public: //! Remove from connection channel from "dev_from" to "dev_to" bool removeChannel(const PIIODevice * dev_from, const PIIODevice * dev_to) {return removeChannel(devFPath(dev_from), devFPath(dev_to));} - /*! @brief Remove from connection all channels from "name_from" + /*! \brief Remove from connection all channels from "name_from" * \details "name_from" can be full path of device or filter name. * Returns \b false if there if no such device or filter, else remove channels and returns \b true */ bool removeChannel(const PIString & name_from); @@ -167,7 +167,7 @@ public: //! Returns all channels of this connection as full pathes or filter names pair array (from, to) PIVector > channels() const; - /*! @brief Add to connection sender with name "name" device with full path "full_path" + /*! \brief Add to connection sender with name "name" device with full path "full_path" * \details If there is no sender with name "name", connection create new, bound * to it device "full_path_name" and start sender timer with frequency "frequency". * If sender with name "name" already exists, device "full_path_name" add to this sender @@ -179,7 +179,7 @@ public: //! Add to connection sender with name "name" device "dev" void addSender(const PIString & name, const PIIODevice * dev, float frequency, bool start = false) {addSender(name, devFPath(dev), frequency, start);} - /*! @brief Remove from sender with name "name" device with full path "full_path_name" + /*! \brief Remove from sender with name "name" device with full path "full_path_name" * \details If there is no devices bounded to this sender, it will be removed. Returns if sender was removed */ bool removeSender(const PIString & name, const PIString & full_path_name); @@ -321,13 +321,13 @@ public: //! \{ //! \fn void dataReceivedEvent(const PIString & from, const PIByteArray & data) - //! @brief Raise on data received from device with full path "from" + //! \brief Raise on data received from device with full path "from" //! \fn void packetReceivedEvent(const PIString & from, const PIByteArray & data) - //! @brief Raise on packet received from filter with name "from" + //! \brief Raise on packet received from filter with name "from" //! \fn void qualityChanged(const PIIODevice * device, PIDiagnostics::Quality new_quality, PIDiagnostics::Quality old_quality) - //! @brief Raise on diagnostic quality of device "device" changed from "old_quality" to "new_quality" + //! \brief Raise on diagnostic quality of device "device" changed from "old_quality" to "new_quality" //! \} diff --git a/libs/main/io_utils/pidatatransfer.h b/libs/main/io_utils/pidatatransfer.h index 5a4b62ad..dd8480d7 100644 --- a/libs/main/io_utils/pidatatransfer.h +++ b/libs/main/io_utils/pidatatransfer.h @@ -1,5 +1,5 @@ -/*! @file pidatatransfer.h - * @brief Class for send and receive PIByteArray via \a PIBaseTransfer +/*! \file pidatatransfer.h + * \brief Class for send and receive PIByteArray via \a PIBaseTransfer */ /* PIP - Platform Independent Primitives diff --git a/libs/main/io_utils/pidiagnostics.cpp b/libs/main/io_utils/pidiagnostics.cpp index 7ba08c3e..bb54d881 100644 --- a/libs/main/io_utils/pidiagnostics.cpp +++ b/libs/main/io_utils/pidiagnostics.cpp @@ -21,7 +21,7 @@ /** \class PIDiagnostics - * @brief Connection quality diagnostics + * \brief Connection quality diagnostics * \details * \section PIDiagnostics_sec0 Synopsis * This class provide abstract connection quality diagnostics and diff --git a/libs/main/io_utils/pidiagnostics.h b/libs/main/io_utils/pidiagnostics.h index b6af71d2..71da060a 100644 --- a/libs/main/io_utils/pidiagnostics.h +++ b/libs/main/io_utils/pidiagnostics.h @@ -1,5 +1,5 @@ -/*! @file pidiagnostics.h - * @brief Connection quality diagnostics +/*! \file pidiagnostics.h + * \brief Connection quality diagnostics */ /* PIP - Platform Independent Primitives @@ -102,23 +102,23 @@ public: //! \{ //! \fn void start(double msecs = 1000.) - //! @brief Start diagnostics evaluations with period "msecs" milliseconds + //! \brief Start diagnostics evaluations with period "msecs" milliseconds //! \fn void reset() - //! @brief Reset diagnostics counters + //! \brief Reset diagnostics counters //! \fn void received(int size, bool correct = true) - //! @brief Notify diagnostics about "correct" corected received packet + //! \brief Notify diagnostics about "correct" corected received packet //! \fn void sended(int size) - //! @brief Notify diagnostics about sended packet + //! \brief Notify diagnostics about sended packet //! \} //! \events //! \{ //! \fn void qualityChanged(PIDiagnostics::Quality new_quality, PIDiagnostics::Quality old_quality) - //! @brief Raise on change receive quality from "old_quality" to "new_quality" + //! \brief Raise on change receive quality from "old_quality" to "new_quality" //! \} diff --git a/libs/main/io_utils/piethutilbase.h b/libs/main/io_utils/piethutilbase.h index f18b3a5a..fc564004 100644 --- a/libs/main/io_utils/piethutilbase.h +++ b/libs/main/io_utils/piethutilbase.h @@ -1,5 +1,5 @@ -/*! @file piethutilbase.h - * @brief Base class for ethernet utils +/*! \file piethutilbase.h + * \brief Base class for ethernet utils */ /* PIP - Platform Independent Primitives @@ -56,11 +56,11 @@ public: protected: - /*! @brief Returns encrypted data if layer enabled, + /*! \brief Returns encrypted data if layer enabled, * otherwise returns unchanged \"data\" */ PIByteArray cryptData(const PIByteArray & data); - /*! @brief Returns decrypted data if layer enabled, + /*! \brief Returns decrypted data if layer enabled, * otherwise returns unchanged \"data\". If decryption * was unsuccessfull returns empty %PIByteArray. */ PIByteArray decryptData(const PIByteArray & data); diff --git a/libs/main/io_utils/pifiletransfer.h b/libs/main/io_utils/pifiletransfer.h index 8ed18d6a..254454a0 100644 --- a/libs/main/io_utils/pifiletransfer.h +++ b/libs/main/io_utils/pifiletransfer.h @@ -1,5 +1,5 @@ -/*! @file pifiletransfer.h - * @brief Class for send and receive files and directories via \a PIBaseTransfer +/*! \file pifiletransfer.h + * \brief Class for send and receive files and directories via \a PIBaseTransfer */ /* PIP - Platform Independent Primitives diff --git a/libs/main/io_utils/pipacketextractor.cpp b/libs/main/io_utils/pipacketextractor.cpp index 0a15880b..996ad08f 100644 --- a/libs/main/io_utils/pipacketextractor.cpp +++ b/libs/main/io_utils/pipacketextractor.cpp @@ -21,7 +21,7 @@ /** \class PIPacketExtractor - * @brief Packets extractor + * \brief Packets extractor * \details * \section PIPacketExtractor_main Synopsis * This class implements packet recognition by various algorithms and custom diff --git a/libs/main/io_utils/pipacketextractor.h b/libs/main/io_utils/pipacketextractor.h index 4fd3eba5..52657bf9 100644 --- a/libs/main/io_utils/pipacketextractor.h +++ b/libs/main/io_utils/pipacketextractor.h @@ -1,5 +1,5 @@ -/*! @file pipacketextractor.h - * @brief Packets extractor +/*! \file pipacketextractor.h + * \brief Packets extractor */ /* PIP - Platform Independent Primitives @@ -130,27 +130,27 @@ public: //! \{ //! \fn void packetReceived(uchar * data, int size) - //! @brief Raise on successfull \a packetValidate() function + //! \brief Raise on successfull \a packetValidate() function //! \} protected: - /** @brief Function to validate header + /** \brief Function to validate header * \param src Your header content * \param rec Received header * \param size Header size * \details Default implementation returns by-byte "src" with "rec" compare result */ virtual bool validateHeader(uchar * src, uchar * rec, int size) {if (ret_func_header != 0) return ret_func_header(ret_data_, src, rec, size); for (int i = 0; i < size; ++i) if (src[i] != rec[i]) return false; return true;} - /** @brief Function to validate footer + /** \brief Function to validate footer * \param src Your footer content * \param rec Received footer * \param size Footer size * \details Default implementation returns by-byte "src" with "rec" compare result */ virtual bool validateFooter(uchar * src, uchar * rec, int size) {if (ret_func_footer != 0) return ret_func_footer(ret_data_, src, rec, size); for (int i = 0; i < size; ++i) if (src[i] != rec[i]) return false; return true;} - /** @brief Function to validate payload + /** \brief Function to validate payload * \param rec Received payload * \param size payload size * \details Default implementation returns \b true */ diff --git a/libs/main/io_utils/piparsehelper.h b/libs/main/io_utils/piparsehelper.h index df0f2524..a44eec1a 100644 --- a/libs/main/io_utils/piparsehelper.h +++ b/libs/main/io_utils/piparsehelper.h @@ -1,5 +1,5 @@ -/*! @file piparsehelper.h - * @brief Helper class to automate structs receive +/*! \file piparsehelper.h + * \brief Helper class to automate structs receive */ /* PIP - Platform Independent Primitives @@ -28,7 +28,7 @@ /** \class PIParseHelper - * @brief Helper class to automate structs receive + * \brief Helper class to automate structs receive * * * \section PIParseHelper_synopsis Synopsis @@ -85,11 +85,11 @@ template class PIParseHelper { public: - //! @brief Construct %PIParseHelper with target object \"p\" + //! \brief Construct %PIParseHelper with target object \"p\" PIParseHelper(PIObject * p): parent(p) {} - //! @brief Assign key \"key\" to event handler \"handler\" with 1 argument + //! \brief Assign key \"key\" to event handler \"handler\" with 1 argument template void assign(Key key, Ret(*handler)(void*,T)) { if (!parent) return; @@ -110,7 +110,7 @@ public: } - //! @brief Assign key \"key\" to event handler \"handler\" without arguments + //! \brief Assign key \"key\" to event handler \"handler\" without arguments template void assign(Key key, Ret(*handler)(void*)) { if (!parent) return; @@ -130,7 +130,7 @@ public: } - //! @brief Assign key \"key\" to lambda-function \"func\" with 1 argument + //! \brief Assign key \"key\" to lambda-function \"func\" with 1 argument //! \note Important! Direct lambda functions are not allowed, see \ref PIParseHelper_lambda template void assign(Key key, std::function func) { @@ -145,7 +145,7 @@ public: } - //! @brief Assign key \"key\" to lambda-function \"func\" without arguments + //! \brief Assign key \"key\" to lambda-function \"func\" without arguments //! \note Important! Direct lambda functions are not allowed, see \ref PIParseHelper_lambda void assign(Key key, std::function func) { if (!parent) return; @@ -156,7 +156,7 @@ public: } - //! @brief Deserialize data and invoke assigned to \"key\" methods + //! \brief Deserialize data and invoke assigned to \"key\" methods void parse(Key key, PIByteArray ba) { if (!parent) return; auto fl = functions.value(key); diff --git a/libs/main/io_utils/pistreampacker.h b/libs/main/io_utils/pistreampacker.h index 933c0c0d..834c6cb1 100644 --- a/libs/main/io_utils/pistreampacker.h +++ b/libs/main/io_utils/pistreampacker.h @@ -1,5 +1,5 @@ -/*! @file pistreampacker.h - * @brief Simple packet wrap aroud any PIIODevice +/*! \file pistreampacker.h + * \brief Simple packet wrap aroud any PIIODevice */ /* PIP - Platform Independent Primitives @@ -90,7 +90,7 @@ public: //! \{ //! \fn void received(uchar * readed, int size) - //! @brief Handler to receive data. \a PIIODevice::threadedReadEvent() + //! \brief Handler to receive data. \a PIIODevice::threadedReadEvent() //! can be connected to this handler //! \} @@ -99,10 +99,10 @@ public: //! \{ //! \fn void packetReceiveEvent(PIByteArray data) - //! @brief Raise on packet successfully received + //! \brief Raise on packet successfully received //! \fn void sendRequest(PIByteArray data) - //! @brief Raise from \a send() function. This data should + //! \brief Raise from \a send() function. This data should //! be directly sended to your device. You can //! connect this event to \a PIIODevice::write() handler diff --git a/libs/main/lua/piluaprogram.h b/libs/main/lua/piluaprogram.h index cec94678..3b2cf5da 100644 --- a/libs/main/lua/piluaprogram.h +++ b/libs/main/lua/piluaprogram.h @@ -1,5 +1,5 @@ -/*! @file piluaprogram.h - * @brief Lua Program +/*! \file piluaprogram.h + * \brief Lua Program */ /* PIP - Platform Independent Primitives diff --git a/libs/main/lua/pip_lua.h b/libs/main/lua/pip_lua.h index 0f7b216d..a9b94167 100644 --- a/libs/main/lua/pip_lua.h +++ b/libs/main/lua/pip_lua.h @@ -1,5 +1,5 @@ -/*! @file pip_lua.h - * @brief PIP Lua bindings +/*! \file pip_lua.h + * \brief PIP Lua bindings * * This file declare conversions for PIP types via LuaBridge */ diff --git a/libs/main/math/picrc.h b/libs/main/math/picrc.h index ebac8013..e18f9440 100644 --- a/libs/main/math/picrc.h +++ b/libs/main/math/picrc.h @@ -1,5 +1,5 @@ -/*! @file picrc.h - * @brief CRC checksum calculator +/*! \file picrc.h + * \brief CRC checksum calculator */ /* PIP - Platform Independent Primitives diff --git a/libs/main/math/pievaluator.cpp b/libs/main/math/pievaluator.cpp index 521d758f..6e8e4272 100644 --- a/libs/main/math/pievaluator.cpp +++ b/libs/main/math/pievaluator.cpp @@ -21,7 +21,7 @@ /*! \class PIEvaluator - * @brief This class provide mathematical evaluations of custom expression + * \brief This class provide mathematical evaluations of custom expression * * \section PIEvaluator_sec0 Synopsis * %PIEvaluator developed for stream evaluations of once set expression. diff --git a/libs/main/math/pievaluator.h b/libs/main/math/pievaluator.h index 23c32188..bad7ab48 100644 --- a/libs/main/math/pievaluator.h +++ b/libs/main/math/pievaluator.h @@ -1,5 +1,5 @@ -/*! @file pievaluator.h - * @brief Mathematic expressions calculator +/*! \file pievaluator.h + * \brief Mathematic expressions calculator */ /* PIP - Platform Independent Primitives diff --git a/libs/main/math/pifft.h b/libs/main/math/pifft.h index d06f8101..10428201 100644 --- a/libs/main/math/pifft.h +++ b/libs/main/math/pifft.h @@ -1,5 +1,5 @@ -/*! @file pifft.h - * @brief Class for FFT, IFFT and Hilbert transformations +/*! \file pifft.h + * \brief Class for FFT, IFFT and Hilbert transformations */ /* PIP - Platform Independent Primitives diff --git a/libs/main/math/pimathcomplex.h b/libs/main/math/pimathcomplex.h index 4dcfaea5..cec45505 100644 --- a/libs/main/math/pimathcomplex.h +++ b/libs/main/math/pimathcomplex.h @@ -1,5 +1,5 @@ -/*! @file pimathcomplex.h - * @brief PIP math complex +/*! \file pimathcomplex.h + * \brief PIP math complex */ /* PIP - Platform Independent Primitives @@ -89,7 +89,7 @@ inline PIVector2D abs(const PIVector2D & v) { /** -* @brief floating point number specific comparison between value passed as parameter and zero +* \brief floating point number specific comparison between value passed as parameter and zero * * @param v floating point parameter for comparison * @return true if v in locality of zero, otherwise false @@ -101,7 +101,7 @@ inline bool PIMathFloatNullCompare(const T v) { } /** -* @brief floating point number specific comparison between parameter value and zero. +* \brief floating point number specific comparison between parameter value and zero. * * @param v complex with floating point real and imag parts * @return true if absolute of v in locality of zero, otherwise false diff --git a/libs/main/math/pimathmatrix.h b/libs/main/math/pimathmatrix.h index 6119ce70..c149acf6 100644 --- a/libs/main/math/pimathmatrix.h +++ b/libs/main/math/pimathmatrix.h @@ -1,5 +1,5 @@ -/*! @file pimathmatrix.h - * @brief PIMathMatrix +/*! \file pimathmatrix.h + * \brief PIMathMatrix * * This file declare math matrix class, which performs various matrix operations */ @@ -37,7 +37,7 @@ #pragma pack(push, 1) -//! @brief A class that works with square matrix operations, the input data of which are columns, rows and the data type of the matrix +//! \brief A class that works with square matrix operations, the input data of which are columns, rows and the data type of the matrix //! @tparam Rows rows number of matrix //! @tparam Сols columns number of matrix //! @tparam Type is the data type of the matrix. There are can be basic C++ language data and different classes where the arithmetic operators(=, +=, -=, *=, /=, ==, !=, +, -, *, /) @@ -53,12 +53,12 @@ class PIP_EXPORT PIMathMatrixT { static_assert(Cols > 0, "Column count must be > 0"); public: /** - * @brief Constructs PIMathMatrixT that is filled by \a new_value + * \brief Constructs PIMathMatrixT that is filled by \a new_value */ PIMathMatrixT(const Type &new_value = Type()) {PIMM_FOR m[r][c] = new_value;} /** - * @brief Contructs PIMathMatrixT from PIVector + * \brief Contructs PIMathMatrixT from PIVector */ PIMathMatrixT(const PIVector &val) { assert(Rows*Cols == val.size()); @@ -67,7 +67,7 @@ public: } /** - * @brief Contructs PIMathMatrixT from C++11 initializer list + * \brief Contructs PIMathMatrixT from C++11 initializer list */ PIMathMatrixT(std::initializer_list init_list) { assert(Rows*Cols == init_list.size()); @@ -76,7 +76,7 @@ public: } /** - * @brief Сreates a matrix whose main diagonal is filled with ones and the remaining elements are zeros + * \brief Сreates a matrix whose main diagonal is filled with ones and the remaining elements are zeros * * @return identity matrix of type PIMathMatrixT */ @@ -87,21 +87,21 @@ public: } /** - * @brief Method which returns number of columns in matrix + * \brief Method which returns number of columns in matrix * * @return type uint shows number of columns */ constexpr uint cols() const {return Cols;} /** - * @brief Method which returns number of rows in matrix + * \brief Method which returns number of rows in matrix * * @return type uint shows number of rows */ constexpr uint rows() const {return Rows;} /** - * @brief Method which returns the selected column in PIMathVectorT format. + * \brief Method which returns the selected column in PIMathVectorT format. * If you enter an index out of the border of the matrix there will be "undefined behavior" * * @param index is the number of the selected column @@ -114,7 +114,7 @@ public: } /** - * @brief Method which returns the selected row in PIMathVectorT format + * \brief Method which returns the selected row in PIMathVectorT format * If you enter an index out of the border of the matrix there will be "undefined behavior" * * @param index is the number of the selected row @@ -127,7 +127,7 @@ public: } /** - * @brief Set the selected column in matrix. + * \brief Set the selected column in matrix. * If you enter an index out of the border of the matrix there will be "undefined behavior" * * @param index is the number of the selected column @@ -140,7 +140,7 @@ public: } /** - * @brief Set the selected row in matrix + * \brief Set the selected row in matrix * If you enter an index out of the border of the matrix there will be "undefined behavior" * * @param index is the number of the selected row @@ -153,7 +153,7 @@ public: } /** - * @brief Method which changes selected rows in a matrix. + * \brief Method which changes selected rows in a matrix. * If you enter an index out of the border of the matrix there will be "undefined behavior" * * @param rf is the number of the first selected row @@ -166,7 +166,7 @@ public: } /** - * @brief Method which changes selected columns in a matrix. + * \brief Method which changes selected columns in a matrix. * If you enter an index out of the border of the matrix there will be "undefined behavior" * * @param cf is the number of the first selected column @@ -179,7 +179,7 @@ public: } /** - * @brief Method which fills the matrix with selected value + * \brief Method which fills the matrix with selected value * * @param v is a parameter the type and value of which is selected and later filled into the matrix * @return filled matrix type _CMatrix @@ -190,14 +190,14 @@ public: } /** - * @brief Method which checks if matrix is square + * \brief Method which checks if matrix is square * * @return true if matrix is square, else false */ constexpr bool isSquare() const { return Rows == Cols; } /** - * @brief Method which checks if main diagonal of matrix consists of ones and another elements are zeros + * \brief Method which checks if main diagonal of matrix consists of ones and another elements are zeros * * @return true if matrix is identitied, else false */ @@ -207,7 +207,7 @@ public: } /** - * @brief Method which checks if every elements of matrix are zeros + * \brief Method which checks if every elements of matrix are zeros * * @return true if matrix is null, else false */ @@ -218,7 +218,7 @@ public: /** - * @brief Read-only access to element by \a row and \a col. + * \brief Read-only access to element by \a row and \a col. * If you enter an index out of the border of the matrix there will be "undefined behavior" * * @param row of matrix @@ -228,7 +228,7 @@ public: Type at(uint row, uint col) const { return m[row][col]; } /** - * @brief Full access to element by \a row and \a col. + * \brief Full access to element by \a row and \a col. * If you enter an index out of the border of the matrix there will be "undefined behavior" * * @param row of matrix @@ -238,7 +238,7 @@ public: inline Type & element(uint row, uint col) {return m[row][col];} /** - * @brief Read-only access to element by \a row and \a col. + * \brief Read-only access to element by \a row and \a col. * If you enter an index out of the border of the matrix there will be "undefined behavior" * * @param row of matrix @@ -248,7 +248,7 @@ public: inline const Type & element(uint row, uint col) const {return m[row][col];} /** - * @brief Full access to the matrix row pointer. If you enter an index out of the border of the matrix there will be "undefined behavior" + * \brief Full access to the matrix row pointer. If you enter an index out of the border of the matrix there will be "undefined behavior" * * @param row of matrix * @return matrix row pointer @@ -256,7 +256,7 @@ public: Type *operator[](uint row) { return m[row]; } /** - * @brief Read-only access to the matrix row pointer. If you enter an index out of the border of the matrix there will be "undefined behavior" + * \brief Read-only access to the matrix row pointer. If you enter an index out of the border of the matrix there will be "undefined behavior" * * @param row of matrix * @return matrix row pointer @@ -264,7 +264,7 @@ public: const Type *operator[](uint row) const {return m[row];} /** - * @brief Matrix compare + * \brief Matrix compare * * @param sm matrix for compare * @return if matrices are equal true, else false @@ -275,7 +275,7 @@ public: } /** - * @brief Matrix negative compare + * \brief Matrix negative compare * * @param sm matrix for compare * @return if matrices are not equal true, else false @@ -283,21 +283,21 @@ public: bool operator!=(const _CMatrix &sm) const { return !(*this == sm); } /** - * @brief Addition assignment with matrix "sm" + * \brief Addition assignment with matrix "sm" * * @param sm matrix for the addition assigment */ void operator+=(const _CMatrix &sm) {PIMM_FOR m[r][c] += sm.m[r][c];} /** - * @brief Subtraction assignment with matrix "sm" + * \brief Subtraction assignment with matrix "sm" * * @param sm matrix for the subtraction assigment */ void operator-=(const _CMatrix &sm) {PIMM_FOR m[r][c] -= sm.m[r][c];} /** - * @brief Multiplication assignment with value "v" + * \brief Multiplication assignment with value "v" * * @param v value for the multiplication assigment */ @@ -306,7 +306,7 @@ public: } /** - * @brief Division assignment with value "v" + * \brief Division assignment with value "v" * * @param v value for the division assigment */ @@ -316,7 +316,7 @@ public: } /** - * @brief Matrix substraction + * \brief Matrix substraction * * @return the result of matrix substraction */ @@ -327,7 +327,7 @@ public: } /** - * @brief Matrix addition + * \brief Matrix addition * * @param sm is matrix term * @return the result of matrix addition @@ -339,7 +339,7 @@ public: } /** - * @brief Matrix substraction + * \brief Matrix substraction * * @param sm is matrix subtractor * @return the result of matrix substraction @@ -351,7 +351,7 @@ public: } /** - * @brief Matrix multiplication + * \brief Matrix multiplication * * @param v is value factor * @return the result of matrix multiplication @@ -363,7 +363,7 @@ public: } /** - * @brief Matrix division + * \brief Matrix division * * @param v is value divider * @return the result of matrix division @@ -376,7 +376,7 @@ public: } /** - * @brief Determinant of the matrix is ​​calculated. Works only with square matrix, nonzero matrices and invertible matrix + * \brief Determinant of the matrix is ​​calculated. Works only with square matrix, nonzero matrices and invertible matrix * * @param ok is a parameter with which we can find out if the method worked correctly * @return matrix determinant @@ -394,7 +394,7 @@ public: } /** - * @brief Trace of the matrix is calculated. Works only with square matrix, nonzero matrices and invertible matrix + * \brief Trace of the matrix is calculated. Works only with square matrix, nonzero matrices and invertible matrix * * @return matrix trace */ @@ -408,7 +408,7 @@ public: } /** - * @brief Transforming matrix to upper triangular. Works only with square matrix, nonzero matrices and invertible matrix + * \brief Transforming matrix to upper triangular. Works only with square matrix, nonzero matrices and invertible matrix * * @param ok is a parameter with which we can find out if the method worked correctly * @return copy of transformed upper triangular matrix @@ -448,7 +448,7 @@ public: } /** - * @brief Matrix inversion operation. Works only with square matrix, nonzero matrices and invertible matrix + * \brief Matrix inversion operation. Works only with square matrix, nonzero matrices and invertible matrix * * @param ok is a parameter with which we can find out if the method worked correctly * @return copy of inverted matrix @@ -502,7 +502,7 @@ public: } /** - * @brief Matrix inversion operation. Works only with square matrix, nonzero matrices and invertible matrix + * \brief Matrix inversion operation. Works only with square matrix, nonzero matrices and invertible matrix * * @param ok is a parameter with which we can find out if the method worked correctly * @return inverted matrix @@ -514,7 +514,7 @@ public: } /** - * @brief Matrix transposition operation. Works only with square matrix, nonzero matrices and invertible matrix + * \brief Matrix transposition operation. Works only with square matrix, nonzero matrices and invertible matrix * * @return transposed matrix */ @@ -525,7 +525,7 @@ public: } /** - * @brief Matrix rotation operation. Works only with 2x2 matrix + * \brief Matrix rotation operation. Works only with 2x2 matrix * * @return rotated matrix */ @@ -565,7 +565,7 @@ inline std::ostream & operator <<(std::ostream & s, const PIMathMatrixT &m) { } /** -* @brief Multiplying matrices by each other. If you enter an index out of the border of the matrix there will be "undefined behavior" +* \brief Multiplying matrices by each other. If you enter an index out of the border of the matrix there will be "undefined behavior" * * @param fm first matrix multiplier * @param sm second matrix multiplier @@ -609,7 +609,7 @@ inline PIMathMatrixT operator*(const PIMathMatrixT operator*(const PIMathMatrixT } /** -* @brief Multiplying vector and matrix. If you enter an index out of the border of the matrix there will be "undefined behavior" +* \brief Multiplying vector and matrix. If you enter an index out of the border of the matrix there will be "undefined behavior" * * @param sv first vector multiplier * @param fm second matrix multiplier @@ -651,7 +651,7 @@ inline PIMathVectorT operator*(const PIMathVectorT &sv, } /** -* @brief Multiplying value of type Type and matrix +* \brief Multiplying value of type Type and matrix * * @param x first multiplier of type Type * @param fm second matrix multiplier @@ -689,7 +689,7 @@ class PIMathMatrix; #define PIMM_FOR_C for (uint i = 0; i < _V2D::cols_; ++i) #define PIMM_FOR_R for (uint i = 0; i < _V2D::rows_; ++i) -//! @brief A class that works with matrix operations, the input data of which is the data type of the matrix +//! \brief A class that works with matrix operations, the input data of which is the data type of the matrix //! @tparam There are can be basic C++ language data and different classes where the arithmetic operators(=, +=, -=, *=, /=, ==, !=, +, -, *, /) //! of the C++ language are implemented template @@ -698,7 +698,7 @@ class PIP_EXPORT PIMathMatrix : public PIVector2D { typedef PIMathMatrix _CMatrix; public: /** - * @brief Constructor of class PIMathMatrix, which creates a matrix + * \brief Constructor of class PIMathMatrix, which creates a matrix * * @param cols is number of matrix column uint type * @param rows is number of matrix row uint type @@ -707,7 +707,7 @@ public: PIMathMatrix(const uint cols = 0, const uint rows = 0, const Type &f = Type()) { _V2D::resize(rows, cols, f); } /** - * @brief Constructor of class PIMathMatrix, which creates a matrix + * \brief Constructor of class PIMathMatrix, which creates a matrix * * @param cols is number of matrix column uint type * @param rows is number of matrix row uint type @@ -720,7 +720,7 @@ public: } /** - * @brief Constructor of class PIMathMatrix, which creates a matrix + * \brief Constructor of class PIMathMatrix, which creates a matrix * * @param val is PIVector of PIVector, which creates matrix */ @@ -736,7 +736,7 @@ public: } /** - * @brief Constructor of class PIMathMatrix, which creates a matrix + * \brief Constructor of class PIMathMatrix, which creates a matrix * * @param val is PIVector2D, which creates matrix */ @@ -748,7 +748,7 @@ public: } /** - * @brief Creates a matrix whose main diagonal is filled with ones and the remaining elements are zeros + * \brief Creates a matrix whose main diagonal is filled with ones and the remaining elements are zeros * * @param cols is number of matrix column uint type * @param rows is number of matrix row uint type @@ -761,7 +761,7 @@ public: } /** - * @brief Creates a row matrix of every element that is equal to every element of the vector + * \brief Creates a row matrix of every element that is equal to every element of the vector * * @param val is the vector type PIMathVector * @return row matrix of every element that is equal to every element of the vector @@ -769,7 +769,7 @@ public: static _CMatrix matrixRow(const PIMathVector &val) {return _CMatrix(val.size(), 1, val.toVector());} /** - * @brief Creates a column matrix of every element that is equal to every element of the vector + * \brief Creates a column matrix of every element that is equal to every element of the vector * * @param val is the vector type PIMathVector * @return column matrix of every element that is equal to every element of the vector @@ -777,7 +777,7 @@ public: static _CMatrix matrixCol(const PIMathVector &val) {return _CMatrix(1, val.size(), val.toVector());} /** - * @brief Set the selected column in matrix. If there are more elements of the vector than elements in the column of the matrix + * \brief Set the selected column in matrix. If there are more elements of the vector than elements in the column of the matrix * or index larger than the number of columns otherwise there will be "undefined behavior" * * @param index is the number of the selected column @@ -791,7 +791,7 @@ public: } /** - * @brief Set the selected row in matrix. If there are more elements of the vector than elements in the row of the matrix, + * \brief Set the selected row in matrix. If there are more elements of the vector than elements in the row of the matrix, * or index larger than the number of rows otherwise there will be "undefined behavior" * @param index is the number of the selected row * @param v is a vector of the type _CMCol that needs to fill the row @@ -804,7 +804,7 @@ public: } /** - * @brief Method which replace selected columns in a matrix. You cannot use an index larger than the number of columns, + * \brief Method which replace selected columns in a matrix. You cannot use an index larger than the number of columns, * otherwise there will be "undefined behavior" * * @param r0 is the number of the first selected row @@ -817,7 +817,7 @@ public: } /** - * @brief Method which replace selected rows in a matrix. You cannot use an index larger than the number of rows, + * \brief Method which replace selected rows in a matrix. You cannot use an index larger than the number of rows, * otherwise there will be "undefined behavior" * * @param c0 is the number of the first selected row @@ -830,7 +830,7 @@ public: } /** - * @brief Method which fills the matrix with selected value + * \brief Method which fills the matrix with selected value * * @param v is a parameter the type and value of which is selected and later filled into the matrix * @return filled matrix type _CMatrix @@ -841,14 +841,14 @@ public: } /** - * @brief Method which checks if matrix is square + * \brief Method which checks if matrix is square * * @return true if matrix is square, else false */ bool isSquare() const { return _V2D::cols_ == _V2D::rows_; } /** - * @brief Method which checks if main diagonal of matrix consists of ones and another elements are zeros + * \brief Method which checks if main diagonal of matrix consists of ones and another elements are zeros * * @return true if matrix is identity, else false */ @@ -858,7 +858,7 @@ public: } /** - * @brief Method which checks if every elements of matrix are zeros + * \brief Method which checks if every elements of matrix are zeros * * @return true if matrix elements equal to zero, else false */ @@ -868,14 +868,14 @@ public: } /** - * @brief Method which checks if matrix is empty + * \brief Method which checks if matrix is empty * * @return true if matrix is valid, else false */ bool isValid() const { return !PIVector2D::isEmpty(); } /** - * @brief Addition assignment with matrix "sm" + * \brief Addition assignment with matrix "sm" * * @param sm matrix for the addition assigment */ @@ -886,7 +886,7 @@ public: } /** - * @brief Subtraction assignment with matrix "sm" + * \brief Subtraction assignment with matrix "sm" * * @param sm matrix for the subtraction assigment */ @@ -897,7 +897,7 @@ public: } /** - * @brief Multiplication assignment with value "v" + * \brief Multiplication assignment with value "v" * * @param v value for the multiplication assigment */ @@ -906,7 +906,7 @@ public: } /** - * @brief Division assignment with value "v" + * \brief Division assignment with value "v" * * @param v value for the division assigment */ @@ -916,7 +916,7 @@ public: } /** - * @brief Matrix substraction + * \brief Matrix substraction * * @return the result of matrix substraction */ @@ -927,7 +927,7 @@ public: } /** - * @brief Matrix addition + * \brief Matrix addition * * @param sm is matrix term * @return the result of matrix addition @@ -941,7 +941,7 @@ public: } /** - * @brief Matrix subtraction + * \brief Matrix subtraction * * @param sm is matrix subtractor * @return the result of matrix subtraction @@ -955,7 +955,7 @@ public: } /** - * @brief Matrix multiplication + * \brief Matrix multiplication * * @param v is value factor * @return the result of matrix multiplication @@ -967,7 +967,7 @@ public: } /** - * @brief Matrix division + * \brief Matrix division * * @param v is value divider * @return the result of matrix division @@ -980,7 +980,7 @@ public: } /** - * @brief Determinant of the self matrix is ​​calculated. Works only with square matrix, nonzero matrices and invertible matrix + * \brief Determinant of the self matrix is ​​calculated. Works only with square matrix, nonzero matrices and invertible matrix * * @param ok is a parameter with which we can find out if the method worked correctly * @return matrix determinant @@ -1001,7 +1001,7 @@ public: } /** - * @brief Trace of the matrix is calculated. Works only with square matrix, nonzero matrices and invertible matrix + * \brief Trace of the matrix is calculated. Works only with square matrix, nonzero matrices and invertible matrix * * @return matrix trace */ @@ -1015,7 +1015,7 @@ public: } /** - * @brief Transforming matrix to upper triangular. Works only with square matrix, nonzero matrices and invertible matrix + * \brief Transforming matrix to upper triangular. Works only with square matrix, nonzero matrices and invertible matrix * * @param ok is a parameter with which we can find out if the method worked correctly * @return copy of transformed upper triangular matrix @@ -1055,7 +1055,7 @@ public: } /** - * @brief Matrix inversion operation. Works only with square matrix, nonzero matrices and invertible matrix + * \brief Matrix inversion operation. Works only with square matrix, nonzero matrices and invertible matrix * * @param ok is a parameter with which we can find out if the method worked correctly * @param sv is a vector multiplier @@ -1114,7 +1114,7 @@ public: } /** - * @brief Matrix inversion operation. Works only with square matrix, nonzero matrices and invertible matrix + * \brief Matrix inversion operation. Works only with square matrix, nonzero matrices and invertible matrix * * @param ok is a parameter with which we can find out if the method worked correctly * @return inverted matrix @@ -1126,7 +1126,7 @@ public: } /** - * @brief Matrix transposition operation + * \brief Matrix transposition operation * * @return transposed matrix */ @@ -1144,7 +1144,7 @@ inline std::ostream & operator <<(std::ostream & s, const PIMathMatrix & m #endif /** -* @brief Inline operator for outputting the matrix to the console +* \brief Inline operator for outputting the matrix to the console * * @param s PICout type * @param the matrix type PIMathMatrix that we print to the console @@ -1165,7 +1165,7 @@ inline PICout operator<<(PICout s, const PIMathMatrix &m) { } /** -* @brief Inline operator for serializing a matrix into a PIByteArray +* \brief Inline operator for serializing a matrix into a PIByteArray * * @param s PIByteArray type * @param v PIMathMatrix type @@ -1178,7 +1178,7 @@ inline PIByteArray &operator<<(PIByteArray &s, const PIMathMatrix &v) { } /** -* @brief Inline operator to deserialize matrix from PIByteArray +* \brief Inline operator to deserialize matrix from PIByteArray * * @param s PIByteArray type * @param v PIMathMatrix type @@ -1192,7 +1192,7 @@ inline PIByteArray &operator>>(PIByteArray &s, PIMathMatrix &v) { /** -* @brief Multiplying matrices by each other. If you enter an index out of the border of the matrix there will be "undefined behavior" +* \brief Multiplying matrices by each other. If you enter an index out of the border of the matrix there will be "undefined behavior" * * @param fm first matrix multiplier * @param sm second matrix multiplier @@ -1216,7 +1216,7 @@ inline PIMathMatrix operator*(const PIMathMatrix &fm, } /** -* @brief Multiplying matrix and vector. If you enter an index out of the border of the matrix there will be "undefined behavior" +* \brief Multiplying matrix and vector. If you enter an index out of the border of the matrix there will be "undefined behavior" * * @param fm first matrix multiplier * @param sv second vector multiplier @@ -1238,7 +1238,7 @@ inline PIMathVector operator*(const PIMathMatrix &fm, } /** -* @brief Multiplying vector and matrix. If you enter an index out of the border of the matrix there will be "undefined behavior" +* \brief Multiplying vector and matrix. If you enter an index out of the border of the matrix there will be "undefined behavior" * * @param sv first vector multiplier * @param fm second matrix multiplier @@ -1260,7 +1260,7 @@ inline PIMathVector operator*(const PIMathVector &sv, } /** -* @brief Multiplying value of type Type and matrix +* \brief Multiplying value of type Type and matrix * * @param x first multiplier of type Type * @param v second matrix multiplier @@ -1275,7 +1275,7 @@ typedef PIMathMatrix PIMathMatrixi; typedef PIMathMatrix PIMathMatrixd; /** -* @brief Searching hermitian matrix +* \brief Searching hermitian matrix * * @param m conjugate transpose matrix * @return result of the hermitian diff --git a/libs/main/math/pimathsolver.h b/libs/main/math/pimathsolver.h index 7d6c57f7..5d030c20 100644 --- a/libs/main/math/pimathsolver.h +++ b/libs/main/math/pimathsolver.h @@ -1,5 +1,5 @@ -/*! @file pimathsolver.h - * @brief PIMathSolver +/*! \file pimathsolver.h + * \brief PIMathSolver */ /* PIP - Platform Independent Primitives diff --git a/libs/main/math/pimathvector.h b/libs/main/math/pimathvector.h index 4f19cc89..9a5d0166 100644 --- a/libs/main/math/pimathvector.h +++ b/libs/main/math/pimathvector.h @@ -1,5 +1,5 @@ -/*! @file pimathvector.h - * @brief PIMathVector +/*! \file pimathvector.h + * \brief PIMathVector */ /* PIP - Platform Independent Primitives diff --git a/libs/main/math/piquaternion.h b/libs/main/math/piquaternion.h index d975f234..4cfb6f1f 100644 --- a/libs/main/math/piquaternion.h +++ b/libs/main/math/piquaternion.h @@ -1,5 +1,5 @@ -/*! @file piquaternion.h - * @brief Class for quaternions +/*! \file piquaternion.h + * \brief Class for quaternions */ /* PIP - Platform Independent Primitives diff --git a/libs/main/math/pistatistic.h b/libs/main/math/pistatistic.h index 27897ea6..8d731842 100644 --- a/libs/main/math/pistatistic.h +++ b/libs/main/math/pistatistic.h @@ -1,5 +1,5 @@ -/*! @file pistatistic.h - * @brief Class for calculating math statistic in values array +/*! \file pistatistic.h + * \brief Class for calculating math statistic in values array */ /* PIP - Platform Independent Primitives diff --git a/libs/main/resources/piresources.h b/libs/main/resources/piresources.h index 428ec7b1..6fca0431 100644 --- a/libs/main/resources/piresources.h +++ b/libs/main/resources/piresources.h @@ -1,5 +1,5 @@ -/*! @file piresources.h - * @brief Resources subsystem +/*! \file piresources.h + * \brief Resources subsystem */ /* PIP - Platform Independent Primitives diff --git a/libs/main/system/pilibrary.h b/libs/main/system/pilibrary.h index e5ec0845..e98cdcbc 100644 --- a/libs/main/system/pilibrary.h +++ b/libs/main/system/pilibrary.h @@ -1,5 +1,5 @@ -/*! @file pilibrary.h -* @brief Dynamic library +/*! \file pilibrary.h +* \brief Dynamic library */ /* PIP - Platform Independent Primitives diff --git a/libs/main/system/piplugin.cpp b/libs/main/system/piplugin.cpp index beef10b7..25f9fb60 100644 --- a/libs/main/system/piplugin.cpp +++ b/libs/main/system/piplugin.cpp @@ -25,7 +25,7 @@ #include "piincludes_p.h" /*! \class PIPluginLoader - * @brief Plugin loader + * \brief Plugin loader * * \section PIPluginLoader_sec0 Synopsis * This class provides several macro to define plugin and %PIPluginLoader - class diff --git a/libs/main/system/piplugin.h b/libs/main/system/piplugin.h index 0b240efb..90f2879f 100644 --- a/libs/main/system/piplugin.h +++ b/libs/main/system/piplugin.h @@ -1,5 +1,5 @@ -/*! @file piplugin.h -* @brief Plugin helpers +/*! \file piplugin.h +* \brief Plugin helpers */ /* PIP - Platform Independent Primitives diff --git a/libs/main/system/piprocess.h b/libs/main/system/piprocess.h index 3d60aeff..96945273 100644 --- a/libs/main/system/piprocess.h +++ b/libs/main/system/piprocess.h @@ -1,5 +1,5 @@ -/*! @file piprocess.h -* @brief Process +/*! \file piprocess.h +* \brief Process */ /* PIP - Platform Independent Primitives diff --git a/libs/main/system/pisignals.h b/libs/main/system/pisignals.h index 3027c691..7709c355 100644 --- a/libs/main/system/pisignals.h +++ b/libs/main/system/pisignals.h @@ -1,5 +1,5 @@ -/*! @file pisignals.h - * @brief System signals +/*! \file pisignals.h + * \brief System signals */ /* PIP - Platform Independent Primitives diff --git a/libs/main/thread/piblockingqueue.h b/libs/main/thread/piblockingqueue.h index c630ea21..200ebc17 100644 --- a/libs/main/thread/piblockingqueue.h +++ b/libs/main/thread/piblockingqueue.h @@ -24,7 +24,7 @@ #include "piconditionvar.h" /** - * @brief A Queue that supports operations that wait for the queue to become non-empty when retrieving an element, and + * \brief A Queue that supports operations that wait for the queue to become non-empty when retrieving an element, and * wait for space to become available in the queue when storing an element. */ template @@ -32,7 +32,7 @@ class PIBlockingQueue: private PIQueue { public: /** - * @brief Constructor + * \brief Constructor */ explicit inline PIBlockingQueue(size_t capacity = SIZE_MAX, PIConditionVariable* cond_var_add = new PIConditionVariable(), @@ -40,7 +40,7 @@ public: : cond_var_add(cond_var_add), cond_var_rem(cond_var_rem), max_size(capacity) { } /** - * @brief Copy constructor. Initialize queue with copy of other queue elements. Not thread-safe for other queue. + * \brief Copy constructor. Initialize queue with copy of other queue elements. Not thread-safe for other queue. */ explicit inline PIBlockingQueue(const PIDeque& other) : cond_var_add(new PIConditionVariable()), cond_var_rem(new PIConditionVariable()) { mutex.lock(); @@ -50,7 +50,7 @@ public: } /** - * @brief Thread-safe copy constructor. Initialize queue with copy of other queue elements. + * \brief Thread-safe copy constructor. Initialize queue with copy of other queue elements. */ inline PIBlockingQueue(PIBlockingQueue & other) : cond_var_add(new PIConditionVariable()), cond_var_rem(new PIConditionVariable()) { other.mutex.lock(); @@ -67,7 +67,7 @@ public: } /** - * @brief Inserts the specified element into this queue, waiting if necessary for space to become available. + * \brief Inserts the specified element into this queue, waiting if necessary for space to become available. * * @param v the element to add */ @@ -83,7 +83,7 @@ public: PIBlockingQueue & enqueue(const T & v) {return put(v);} /** - * @brief Inserts the specified element at the end of this queue if it is possible to do so immediately without + * \brief Inserts the specified element at the end of this queue if it is possible to do so immediately without * exceeding the queue's capacity, returning true upon success and false if this queue is full. * * @param v the element to add @@ -104,7 +104,7 @@ public: } /** - * @brief Retrieves and removes the head of this queue, waiting if necessary until an element becomes available. + * \brief Retrieves and removes the head of this queue, waiting if necessary until an element becomes available. * * @return the head of this queue */ @@ -121,7 +121,7 @@ public: T dequeue() {return take();} /** - * @brief Retrieves and removes the head of this queue, waiting up to the specified wait time if necessary for an + * \brief Retrieves and removes the head of this queue, waiting up to the specified wait time if necessary for an * element to become available. * * @param timeoutMs how long to wait before giving up, in milliseconds @@ -146,7 +146,7 @@ public: } /** - * @brief Returns the number of elements that this queue can ideally (in the absence of memory or resource + * \brief Returns the number of elements that this queue can ideally (in the absence of memory or resource * constraints) contains. This is always equal to the initial capacity of this queue less the current size of this queue. * * @return the capacity @@ -160,7 +160,7 @@ public: } /** - * @brief Returns the number of additional elements that this queue can ideally (in the absence of memory or resource + * \brief Returns the number of additional elements that this queue can ideally (in the absence of memory or resource * constraints) accept. This is always equal to the initial capacity of this queue less the current size of this queue. * * @return the remaining capacity @@ -173,7 +173,7 @@ public: } /** - * @brief Returns the number of elements in this collection. + * \brief Returns the number of elements in this collection. */ size_t size() { mutex.lock(); @@ -183,7 +183,7 @@ public: } /** - * @brief Removes all available elements from this queue and adds them to other given queue. + * \brief Removes all available elements from this queue and adds them to other given queue. */ size_t drainTo(PIDeque& other, size_t maxCount = SIZE_MAX) { mutex.lock(); @@ -194,7 +194,7 @@ public: } /** - * @brief Removes all available elements from this queue and adds them to other given queue. + * \brief Removes all available elements from this queue and adds them to other given queue. */ size_t drainTo(PIBlockingQueue& other, size_t maxCount = SIZE_MAX) { mutex.lock(); diff --git a/libs/main/thread/piconditionvar.h b/libs/main/thread/piconditionvar.h index 0e988e32..87aed74a 100644 --- a/libs/main/thread/piconditionvar.h +++ b/libs/main/thread/piconditionvar.h @@ -24,7 +24,7 @@ /** - * @brief A condition variable is an object able to block the calling thread until notified to resume. + * \brief A condition variable is an object able to block the calling thread until notified to resume. * * It uses a PIMutex to lock the thread when one of its wait functions is called. The thread remains * blocked until woken up by another thread that calls a notification function on the same PIConditionVariable object. @@ -36,24 +36,24 @@ public: virtual ~PIConditionVariable(); /** - * @brief Unblocks one of the threads currently waiting for this condition. If no threads are waiting, the function + * \brief Unblocks one of the threads currently waiting for this condition. If no threads are waiting, the function * does nothing. If more than one, it is unspecified which of the threads is selected. */ void notifyOne(); /** - * @brief Unblocks all threads currently waiting for this condition. If no threads are waiting, the function does + * \brief Unblocks all threads currently waiting for this condition. If no threads are waiting, the function does * nothing. */ void notifyAll(); /** - * @brief see wait(PIMutex &, const std::function&) + * \brief see wait(PIMutex &, const std::function&) */ virtual void wait(PIMutex & lk); /** - * @brief Wait until notified + * \brief Wait until notified * * The execution of the current thread (which shall have locked with lk method PIMutex::lock()) is blocked * until notified. @@ -79,12 +79,12 @@ public: virtual void wait(PIMutex& lk, const std::function& condition); /** - * @brief see waitFor(PIMutex &, int, const std::function&) + * \brief see waitFor(PIMutex &, int, const std::function&) */ virtual bool waitFor(PIMutex & lk, int timeoutMs); /** - * @brief Wait for timeout or until notified + * \brief Wait for timeout or until notified * * The execution of the current thread (which shall have locked with lk method PIMutex::lock()) is blocked * during timeoutMs, or until notified (if the latter happens first). diff --git a/libs/main/thread/pigrabberbase.h b/libs/main/thread/pigrabberbase.h index 6bb2843b..a19776aa 100644 --- a/libs/main/thread/pigrabberbase.h +++ b/libs/main/thread/pigrabberbase.h @@ -1,5 +1,5 @@ -/*! @file pigrabberbase.h - * @brief Abstract class for create grabbers +/*! \file pigrabberbase.h + * \brief Abstract class for create grabbers */ /* PIP - Platform Independent Primitives diff --git a/libs/main/thread/pimutex.cpp b/libs/main/thread/pimutex.cpp index db42b86f..bea01ef2 100644 --- a/libs/main/thread/pimutex.cpp +++ b/libs/main/thread/pimutex.cpp @@ -18,7 +18,7 @@ */ /** \class PIMutex - * @brief Mutex + * \brief Mutex * \details * \section PIMutex_sec0 Synopsis * %PIMutex provides synchronization blocks between several threads. diff --git a/libs/main/thread/pimutex.h b/libs/main/thread/pimutex.h index 847d5eb6..af66fa1f 100644 --- a/libs/main/thread/pimutex.h +++ b/libs/main/thread/pimutex.h @@ -1,5 +1,5 @@ -/*! @file pimutex.h - * @brief PIMutex, PIMutexLocker +/*! \file pimutex.h + * \brief PIMutex, PIMutexLocker */ /* PIP - Platform Independent Primitives @@ -38,16 +38,16 @@ public: ~PIMutex(); - //! @brief Lock mutex + //! \brief Lock mutex //! \details If mutex is unlocked it set to locked state and returns immediate. //! If mutex is already locked function blocks until mutex will be unlocked void lock(); - //! @brief Unlock mutex + //! \brief Unlock mutex //! \details In any case this function returns immediate void unlock() ; - //! @brief Try to lock mutex + //! \brief Try to lock mutex //! \details If mutex is unlocked it set to locked state and returns "true" immediate. //! If mutex is already locked function returns immediate an returns "false" bool tryLock(); @@ -63,7 +63,7 @@ private: }; -//! @brief PIMutexLocker +//! \brief PIMutexLocker //! \details Same as std::lock_guard. //! When a PIMutexLocker object is created, it attempts to lock the mutex it is given, if "condition" true. //! When control leaves the scope in which the PIMutexLocker object was created, diff --git a/libs/main/thread/pipipelinethread.h b/libs/main/thread/pipipelinethread.h index fd300cb1..91321df3 100644 --- a/libs/main/thread/pipipelinethread.h +++ b/libs/main/thread/pipipelinethread.h @@ -1,5 +1,5 @@ -/*! @file pipipelinethread.h - * @brief Class for create multihread pipeline +/*! \file pipipelinethread.h + * \brief Class for create multihread pipeline */ /* PIP - Platform Independent Primitives diff --git a/libs/main/thread/pispinlock.cpp b/libs/main/thread/pispinlock.cpp index 1b547538..3262f39b 100644 --- a/libs/main/thread/pispinlock.cpp +++ b/libs/main/thread/pispinlock.cpp @@ -18,7 +18,7 @@ */ /** \class PISpinlock - * @brief Spinlock + * \brief Spinlock * \details * \section PISpinlock_sec0 Synopsis * %PISpinlock provides synchronization blocks between several threads. diff --git a/libs/main/thread/pispinlock.h b/libs/main/thread/pispinlock.h index ecc90dc7..6de315c4 100644 --- a/libs/main/thread/pispinlock.h +++ b/libs/main/thread/pispinlock.h @@ -1,5 +1,5 @@ -/*! @file pispinlock.h - * @brief PISpinlock +/*! \file pispinlock.h + * \brief PISpinlock */ /* PIP - Platform Independent Primitives @@ -39,12 +39,12 @@ public: ~PISpinlock() {} - //! @brief Lock spinlock + //! \brief Lock spinlock //! \details If spinlock is unlocked it set to locked state and returns immediate. //! If spinlock is already locked function blocks until spinlock will be unlocked void lock() {while (flag.test_and_set(std::memory_order_acquire));} - //! @brief Unlock spinlock + //! \brief Unlock spinlock //! \details In any case this function returns immediate void unlock() {flag.clear(std::memory_order_release);} @@ -54,7 +54,7 @@ private: }; -//! @brief PISpinlockLocker +//! \brief PISpinlockLocker //! \details //! When a PISpinlockLocker object is created, it attempts to lock the spinlock it is given, if "condition" true. //! When control leaves the scope in which the PISpinlockLocker object was created, diff --git a/libs/main/thread/pithread.cpp b/libs/main/thread/pithread.cpp index e1eb1f4d..11e6531e 100644 --- a/libs/main/thread/pithread.cpp +++ b/libs/main/thread/pithread.cpp @@ -55,7 +55,7 @@ __THREAD_FUNC_RET__ thread_function_once(void * t) {((PIThread*)t)->__thread_fun #endif /*! \class PIThread - * @brief Thread class + * \brief Thread class * \details This class allow you exec your code in separate thread. * * \section PIThread_sec0 Synopsis diff --git a/libs/main/thread/pithread.h b/libs/main/thread/pithread.h index 6d676f68..9eaa6afa 100644 --- a/libs/main/thread/pithread.h +++ b/libs/main/thread/pithread.h @@ -1,5 +1,5 @@ -/*! @file pithread.h - * @brief Thread +/*! \file pithread.h + * \brief Thread * * This file declare thread class and some wait functions */ @@ -105,25 +105,25 @@ public: EVENT_HANDLER1(void, stop, bool, wait); EVENT_HANDLER0(void, terminate); - //! @brief Set common data passed to external function + //! \brief Set common data passed to external function void setData(void * d) {data_ = d;} - //! @brief Set external function that will be executed after every \a run() + //! \brief Set external function that will be executed after every \a run() void setSlot(ThreadFunc func) {ret_func = func;} - //! @brief Set external function that will be executed after every \a run() + //! \brief Set external function that will be executed after every \a run() void setSlot(std::function func) {ret_func = [func](void*){func();};} - //! @brief Set priority of thread + //! \brief Set priority of thread void setPriority(PIThread::Priority prior); - //! @brief Returns common data passed to external function + //! \brief Returns common data passed to external function void * data() const {return data_;} - //! @brief Return priority of thread + //! \brief Return priority of thread PIThread::Priority priority() const {return priority_;} - //! @brief Return \c true if thread is running + //! \brief Return \c true if thread is running bool isRunning() const {return running_;} bool isStopping() const {return running_ && terminating;} @@ -133,19 +133,19 @@ public: EVENT_HANDLER0(bool, waitForFinish) {return waitForFinish(-1);} EVENT_HANDLER1(bool, waitForFinish, int, timeout_msecs); - //! @brief Set necessity of lock every \a run with internal mutex + //! \brief Set necessity of lock every \a run with internal mutex void needLockRun(bool need) {lockRun = need;} - //! @brief Lock internal mutex + //! \brief Lock internal mutex EVENT_HANDLER0(void, lock) const {thread_mutex.lock();} - //! @brief Unlock internal mutex + //! \brief Unlock internal mutex EVENT_HANDLER0(void, unlock) const {thread_mutex.unlock();} - //! @brief Returns internal mutex + //! \brief Returns internal mutex PIMutex & mutex() const {return thread_mutex;} - //! @brief Returns thread ID + //! \brief Returns thread ID llong tid() const {return tid_;} void __thread_func__(); @@ -154,12 +154,12 @@ public: EVENT(started) EVENT(stopped) - //! @brief Start event handler with name \"handler\" of object \"object\" + //! \brief Start event handler with name \"handler\" of object \"object\" //! in separate thread with name \"name\" //! and automatically delete it on function finish static void runOnce(PIObject * object, const char * handler, const PIString & name = PIString()); - //! @brief Start function \"func\" in separate thread with name \"name\" + //! \brief Start function \"func\" in separate thread with name \"name\" //! and automatically delete it on function finish static void runOnce(std::function func, const PIString & name = PIString()); @@ -167,7 +167,7 @@ public: //! \{ /** \fn bool start(int timer_delay = -1) - * @brief Start thread + * \brief Start thread * \details Start execution of \a run() in internal loop with * "timer_delay" delay in milliseconds. If "timer_delay" <= 0 * there is no delay in loop. Thread also exec external function @@ -176,58 +176,58 @@ public: * \return \c false if thread already started or can`t start thread */ /** \fn bool startOnce() - * @brief Start thread without internal loop + * \brief Start thread without internal loop * \details Start execution of \a run() once. Thread also exec * external function set by \a setSlot() if it`s not null * * \return \c false if thread already started or can`t start thread */ /** \fn bool startOnce(ThreadFunc func) - * @brief Start thread without internal loop + * \brief Start thread without internal loop * \details Overloaded function. Set external function "func" before start * * \return \c false if thread already started or can`t start thread */ /** \fn void stop(bool wait = false) - * @brief Stop thread + * \brief Stop thread * \details Stop execution of thread and wait for it finish * if "wait" is \c true. This function can block for infinite * time if "wait" is \c true and any of thread function is * busy forever */ /** \fn void terminate() - * @brief Strongly stop thread + * \brief Strongly stop thread * \details Stop execution of thread immediately */ /** \fn bool waitForStart(int timeout_msecs = -1) - * @brief Wait for thread start + * \brief Wait for thread start * \details This function block until thread start for "timeout_msecs" * or forever if "timeout_msecs" < 0 * * \return \c false if timeout is exceeded */ /** \fn bool waitForFinish(int timeout_msecs = -1) - * @brief Wait for thread finish + * \brief Wait for thread finish * \details This function block until thread finish for "timeout_msecs" * or forever if "timeout_msecs" < 0 * * \return \c false if timeout is exceeded */ //! \fn void lock() - //! @brief Lock internal mutex + //! \brief Lock internal mutex //! \fn void unlock() - //! @brief Unlock internal mutex + //! \brief Unlock internal mutex //! \} //! \events //! \{ //! \fn void started() - //! @brief Raise on thread start + //! \brief Raise on thread start //! \fn void stopped() - //! @brief Raise on thread stop + //! \brief Raise on thread stop //! \} diff --git a/libs/main/thread/pithreadnotifier.h b/libs/main/thread/pithreadnotifier.h index 5755fc7c..0f13d30b 100644 --- a/libs/main/thread/pithreadnotifier.h +++ b/libs/main/thread/pithreadnotifier.h @@ -1,5 +1,5 @@ -/*! @file pithreadnotifier.h - * @brief Class for simply notify and wait in different threads +/*! \file pithreadnotifier.h + * \brief Class for simply notify and wait in different threads */ /* PIP - Platform Independent Primitives diff --git a/libs/main/thread/pithreadpoolexecutor.cpp b/libs/main/thread/pithreadpoolexecutor.cpp index ea0eb9aa..0f0c3bac 100644 --- a/libs/main/thread/pithreadpoolexecutor.cpp +++ b/libs/main/thread/pithreadpoolexecutor.cpp @@ -20,7 +20,7 @@ #include "pithreadpoolexecutor.h" /*! \class PIThreadPoolExecutor - * @brief Thread pools address two different problems: they usually provide improved performance when executing large + * \brief Thread pools address two different problems: they usually provide improved performance when executing large * numbers of asynchronous tasks, due to reduced per-task invocation overhead, and they provide a means of bounding and * managing the resources, including threads, consumed when executing a collection of tasks. */ diff --git a/libs/main/thread/pithreadpoolexecutor.h b/libs/main/thread/pithreadpoolexecutor.h index 70c5850b..e5a97d33 100644 --- a/libs/main/thread/pithreadpoolexecutor.h +++ b/libs/main/thread/pithreadpoolexecutor.h @@ -31,7 +31,7 @@ public: virtual ~PIThreadPoolExecutor(); /** - * @brief Executes the given task sometime in the future. The task execute in an existing pooled thread. If the task + * \brief Executes the given task sometime in the future. The task execute in an existing pooled thread. If the task * cannot be submitted for execution, either because this executor has been shutdown or because its capacity has been * reached. * @@ -42,7 +42,7 @@ public: void shutdownNow(); /** - * @brief Initiates an orderly shutdown in which previously submitted tasks are executed, but no new tasks will be + * \brief Initiates an orderly shutdown in which previously submitted tasks are executed, but no new tasks will be * accepted. Invocation has no additional effect if already shut down. This method does not wait for previously * submitted tasks to complete execution. Use awaitTermination to do that. */ diff --git a/libs/main/thread/pithreadpoolloop.cpp b/libs/main/thread/pithreadpoolloop.cpp index b829469b..050acd15 100644 --- a/libs/main/thread/pithreadpoolloop.cpp +++ b/libs/main/thread/pithreadpoolloop.cpp @@ -23,7 +23,7 @@ /*! \class PIThreadPoolLoop - * @brief Thread class + * \brief Thread class * \details This class allow you parallelize loop. * * \section PIThreadPoolLoop_sec0 Usage diff --git a/libs/main/thread/pithreadpoolloop.h b/libs/main/thread/pithreadpoolloop.h index 30938d66..49368caa 100644 --- a/libs/main/thread/pithreadpoolloop.h +++ b/libs/main/thread/pithreadpoolloop.h @@ -1,5 +1,5 @@ -/*! @file pithreadpoolloop.h - * @brief Thread pool loop +/*! \file pithreadpoolloop.h + * \brief Thread pool loop * * This file declare thread class and some wait functions */ diff --git a/libs/main/thread/pitimer.cpp b/libs/main/thread/pitimer.cpp index 83e94885..b2a1edac 100644 --- a/libs/main/thread/pitimer.cpp +++ b/libs/main/thread/pitimer.cpp @@ -25,7 +25,7 @@ /*! \class PITimer - * @brief Timer + * \brief Timer * * \section PITimer_sec0 Synopsis * This class implements timer function. PIP timers supports 3 way to tick notify, diff --git a/libs/main/thread/pitimer.h b/libs/main/thread/pitimer.h index fc076b50..842af062 100644 --- a/libs/main/thread/pitimer.h +++ b/libs/main/thread/pitimer.h @@ -1,5 +1,5 @@ -/*! @file pitimer.h - * @brief Timer +/*! \file pitimer.h + * \brief Timer */ /* PIP - Platform Independent Primitives @@ -39,7 +39,7 @@ public: double interval() const {return interval_;} void setInterval(double i); - //! @brief Return \c true if thread is running + //! \brief Return \c true if thread is running bool isRunning() const {return running_;} bool isStopped() const {return !running_;} @@ -76,10 +76,10 @@ class PIP_EXPORT PITimer: public PIObject { public: NO_COPY_CLASS(PITimer) - //! @brief Constructs timer with PITimer::Thread implementation + //! \brief Constructs timer with PITimer::Thread implementation explicit PITimer(); - //! @brief Timer implementations + //! \brief Timer implementations enum TimerImplementation { Thread /*! Timer works in his own thread. Intervals are measured by the system time */ = 0x01, ThreadRT /*! Using POSIX timer with SIGEV_THREAD notification. \attention Doesn`t support on Windows and Mac OS! */ = 0x02, @@ -87,34 +87,34 @@ public: * sequentially executes all timers. \attention Use this implementation with care! */ = 0x04 }; - //! @brief Constructs timer with "ti" implementation + //! \brief Constructs timer with "ti" implementation explicit PITimer(TimerImplementation ti); - //! @brief Constructs timer with "slot" slot void(void *,int), "data" data and "ti" implementation + //! \brief Constructs timer with "slot" slot void(void *,int), "data" data and "ti" implementation explicit PITimer(TimerEvent slot, void * data = 0, TimerImplementation ti = Thread); - //! @brief Constructs timer with "slot" slot void(), and "ti" implementation + //! \brief Constructs timer with "slot" slot void(), and "ti" implementation explicit PITimer(std::function slot, TimerImplementation ti = Thread); - //! @brief Constructs timer with "slot" slot void(void *), "data" data and "ti" implementation + //! \brief Constructs timer with "slot" slot void(void *), "data" data and "ti" implementation explicit PITimer(std::function slot, void * data, TimerImplementation ti = Thread); virtual ~PITimer(); - //! @brief Returns timer implementation + //! \brief Returns timer implementation PITimer::TimerImplementation implementation() const {return imp_mode;} - //! @brief Returns timer loop delay in milliseconds + //! \brief Returns timer loop delay in milliseconds double interval() const; - //! @brief Set timer loop delay in milliseconds + //! \brief Set timer loop delay in milliseconds EVENT_HANDLER1(void, setInterval, double, ms); - //! @brief Returns if timer is started + //! \brief Returns if timer is started bool isRunning() const; - //! @brief Returns if timer is not started + //! \brief Returns if timer is not started bool isStopped() const; EVENT_HANDLER0(bool, start); @@ -123,22 +123,22 @@ public: EVENT_HANDLER0(bool, restart); - /** @brief Start timer with \b interval() loop delay after \b delay_msecs delay. + /** \brief Start timer with \b interval() loop delay after \b delay_msecs delay. * \details Timer wait \b delay_msecs milliseconds and then normally starts with * \b interval() loop delay. */ void startDeferred(double delay_ms); - /** @brief Start timer with \b interval_msecs loop delay after \b delay_msecs delay. + /** \brief Start timer with \b interval_msecs loop delay after \b delay_msecs delay. * \details Timer wait \b delay_msecs milliseconds and then normally starts with * \b interval_msecs loop delay. */ void startDeferred(double interval_ms, double delay_ms); - /** @brief Start timer with \b interval() loop delay after \b start_datetime date and time. + /** \brief Start timer with \b interval() loop delay after \b start_datetime date and time. * \details Timer wait until \b start_datetime and then normally starts with * \b interval() loop delay. */ void startDeferred(PIDateTime start_datetime); - /** @brief Start timer with \b interval_msecs loop delay after \b start_datetime date and time. + /** \brief Start timer with \b interval_msecs loop delay after \b start_datetime date and time. * \details Timer wait until \b start_datetime and then normally starts with * \b interval_msecs loop delay. */ void startDeferred(double interval_ms, PIDateTime start_datetime); @@ -148,43 +148,43 @@ public: bool waitForFinish() {return waitForFinish(-1);} bool waitForFinish(int timeout_msecs); - //! @brief Set custom data + //! \brief Set custom data void setData(void * data_) {data_t = data_;} - //! @brief Set timer tick function + //! \brief Set timer tick function void setSlot(TimerEvent slot) {ret_func = slot;} - //! @brief Set timer tick function + //! \brief Set timer tick function void setSlot(std::function slot) {ret_func = [slot](void *, int){slot();};} - //! @brief Set timer tick function + //! \brief Set timer tick function void setSlot(std::function slot) {ret_func = [slot](void *d, int){slot(d);};} - //! @brief Returns common data passed to tick functions + //! \brief Returns common data passed to tick functions void * data() const {return data_t;} void needLockRun(bool need) {lockRun = need;} EVENT_HANDLER0(void, lock) {mutex_.lock();} EVENT_HANDLER0(void, unlock) {mutex_.unlock();} - //! @brief Returns if timer should exec \a maybeCallQueuedEvents() at every tick. + //! \brief Returns if timer should exec \a maybeCallQueuedEvents() at every tick. //! By default \b true bool isCallQueuedEvents() const {return callEvents;} - //! @brief If set timer exec \a maybeCallQueuedEvents() at every tick. + //! \brief If set timer exec \a maybeCallQueuedEvents() at every tick. //! By default \b true void setCallQueuedEvents(bool yes) {callEvents = yes;} - //! @brief Add frequency delimiter \b delim with optional delimiter slot \b slot. + //! \brief Add frequency delimiter \b delim with optional delimiter slot \b slot. void addDelimiter(int delim, TimerEvent slot = 0) {delims << Delimiter(slot, delim);} - //! @brief Add frequency delimiter \b delim with optional delimiter slot \b slot. + //! \brief Add frequency delimiter \b delim with optional delimiter slot \b slot. void addDelimiter(int delim, std::function slot) {delims << Delimiter([slot](void *, int){slot();}, delim);} - //! @brief Add frequency delimiter \b delim with optional delimiter slot \b slot. + //! \brief Add frequency delimiter \b delim with optional delimiter slot \b slot. void addDelimiter(int delim, std::function slot) {delims << Delimiter([slot](void *d, int){slot(d);}, delim);} - //! @brief Remove all frequency delimiters \b delim. + //! \brief Remove all frequency delimiters \b delim. void removeDelimiter(int delim) {for (int i = 0; i < delims.size_s(); ++i) if (delims[i].delim == delim) {delims.remove(i); i--;}} EVENT_HANDLER0(void, clearDelimiters) {delims.clear();} @@ -195,30 +195,30 @@ public: //! \{ /** \fn bool start() - * @brief Start timer with \a interval() loop delay + * \brief Start timer with \a interval() loop delay * \details Start execution of timer functions with frequency = 1 / msecs Hz. */ /** \fn bool start(double msecs) - * @brief Start timer with \b msecs loop delay + * \brief Start timer with \b msecs loop delay * \details Start execution of timer functions with frequency = 1. / msecs Hz. * Instead of \a start(int msecs) function this variant allow start timer * with frequencies more than 1 kHz */ //! \fn bool restart() - //! @brief Stop and start timer with \a interval() loop delay + //! \brief Stop and start timer with \a interval() loop delay //! \fn bool stop(bool wait = true) - //! @brief Stop timer and wait for it finish if "wait" + //! \brief Stop timer and wait for it finish if "wait" //! \fn void clearDelimiters() - //! @brief Remove all frequency delimiters + //! \brief Remove all frequency delimiters //! \} //! \events //! \{ /** \fn void tickEvent(void * data, int delimiter) - * @brief Raise on timer tick + * \brief Raise on timer tick * \details \b Data can be set with function \a setData(void * data) or from constructor. * \b Delimiter is frequency delimiter, 1 for main loop. */ diff --git a/logo.png b/logo.png new file mode 100644 index 00000000..b00636c1 Binary files /dev/null and b/logo.png differ diff --git a/utils/piterminal/main.cpp b/utils/piterminal/main.cpp index 0e45491b..aeae643d 100644 --- a/utils/piterminal/main.cpp +++ b/utils/piterminal/main.cpp @@ -200,9 +200,9 @@ public: ir[j].Event.KeyEvent.dwControlKeyState = KeyModifiers2ControlKeyState(k.modifiers); if (PITerminal::isSpecialKey(k.key)) { ir[j].Event.KeyEvent.wVirtualKeyCode = SpecialKey2VirtualKeyCode((PIKbdListener::SpecialKey)k.key); - ir[j].Event.KeyEvent.uChar.AsciiChar = PIChar(piMaxi(k.key, 0)).toAscii(); + ir[j].Event.KeyEvent.uChar.AsciiChar = PIChar((ushort)piMaxi(k.key, 0)).toAscii(); } else - ir[j].Event.KeyEvent.uChar.UnicodeChar = PIChar(piMaxi(k.key, 0)).toWChar(); + ir[j].Event.KeyEvent.uChar.UnicodeChar = PIChar((ushort)piMaxi(k.key, 0)).toWChar(); //piCout << ir[j].Event.KeyEvent.wVirtualKeyCode << int(ir[j].Event.KeyEvent.uChar.AsciiChar); ir[j].Event.KeyEvent.bKeyDown = true; ir[z] = ir[j];