]> gitweb.hamatoma.de Git - reqt/commitdiff
Doxigen warnings
authorhama <hama@siduction.net>
Sat, 7 Nov 2015 23:53:18 +0000 (00:53 +0100)
committerhama <hama@siduction.net>
Sat, 7 Nov 2015 23:53:18 +0000 (00:53 +0100)
46 files changed:
Doxyfile
appl/refind/filefinder.cpp
appl/refind/mainwindow.cpp
appl/refind/textfinder.cpp
appl/reide/project.cpp
appl/reimgconvert/converter.cpp
appl/reviewer/mainwindow.cpp
base/ReByteStorage.cpp
base/ReConfig.cpp
base/ReContainer.cpp
base/ReException.cpp
base/ReFile.cpp
base/ReFileUtils.cpp
base/ReLogger.cpp
base/ReMatcher.cpp
base/ReQStringUtils.cpp
base/ReQStringUtils.hpp
base/ReRandomizer.cpp
base/ReRandomizer.hpp
base/ReStringUtils.cpp
base/ReTerminator.cpp
base/ReTest.cpp
base/ReWriter.cpp
cunit/cuReRandomizer.cpp
expr/ReASClasses.cpp
expr/ReASTree.cpp
expr/ReMFParser.cpp
expr/ReVM.cpp
gui/ReEdit.cpp
gui/ReEdit.hpp
gui/ReSettings.cpp
gui/ReStateStorage.cpp
gui/regui.hpp
guiwidget/ReFileTable.cpp
math/ReMatrix.cpp
net/ReTCPClient.cpp [deleted file]
net/ReTCPClient.hpp [deleted file]
net/ReTCPPeer.cpp
net/ReTCPServer.cpp
net/ReTcpClient.cpp [new file with mode: 0644]
net/ReTcpClient.hpp [new file with mode: 0644]
os/ReCryptFileSystem.cpp
os/ReCryptFileSystem.hpp
os/ReFileSystem.cpp
os/ReFileSystem.hpp
os/ReTraverser.cpp

index 48c34216b5ec5a87c3d5de20c6c884b034cd264b..f22a2eb50c64e4cf7e2567a8fbb39c044772fa61 100644 (file)
--- a/Doxyfile
+++ b/Doxyfile
@@ -32,19 +32,19 @@ DOXYFILE_ENCODING      = UTF-8
 # title of most generated pages and in a few other places.
 # The default value is: My Project.
 
-PROJECT_NAME           = RePublib
+PROJECT_NAME           = "Real Public Library - Qt Library"
 
 # The PROJECT_NUMBER tag can be used to enter a project or revision number. This
 # could be handy for archiving the generated documentation or if some version
 # control system is used.
 
-PROJECT_NUMBER         = 
+PROJECT_NUMBER         = 2015.11
 
 # Using the PROJECT_BRIEF tag one can provide an optional one line description
 # for a project that appears at the top of each page and should give viewer a
 # quick idea about the purpose of the project. Keep the description short.
 
-PROJECT_BRIEF          = 
+PROJECT_BRIEF          = "Qt Source Code: Base Classes and Applications"
 
 # With the PROJECT_LOGO tag one can specify a logo or an icon that is included
 # in the documentation. The maximum height of the logo should not exceed 55
@@ -58,7 +58,7 @@ PROJECT_LOGO           =
 # entered, it will be relative to the location where doxygen was started. If
 # left blank the current directory will be used.
 
-OUTPUT_DIRECTORY       = doc
+OUTPUT_DIRECTORY       = /home/doxygen/reqt
 
 # If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
 # directories (in 2 levels) under the output directory of each output format and
@@ -419,7 +419,7 @@ LOOKUP_CACHE_SIZE      = 0
 # normally produced when WARNINGS is set to YES.
 # The default value is: NO.
 
-EXTRACT_ALL            = NO
+EXTRACT_ALL            = YES
 
 # If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
 # be included in the documentation.
@@ -756,7 +756,7 @@ WARN_FORMAT            = "$file:$line: $text"
 # messages should be written. If left blank the output is written to standard
 # error (stderr).
 
-WARN_LOGFILE           = 
+WARN_LOGFILE           = warnings.log
 
 #---------------------------------------------------------------------------
 # Configuration options related to the input files
@@ -768,7 +768,7 @@ WARN_LOGFILE           =
 # spaces.
 # Note: If this tag is empty the current directory is searched.
 
-INPUT                  = .
+INPUT                  = /home/ws/qt/reqt
 
 # 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
@@ -844,7 +844,7 @@ RECURSIVE              = YES
 # Note that relative paths are relative to the directory from which doxygen is
 # run.
 
-EXCLUDE                = 
+EXCLUDE                = build
 
 # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
 # directories that are symbolic links (a Unix file system feature) are excluded
@@ -860,7 +860,8 @@ EXCLUDE_SYMLINKS       = NO
 # Note that the wildcards are matched against the file with absolute path, so to
 # exclude all test directories for example use the pattern */test/*
 
-EXCLUDE_PATTERNS       = 
+EXCLUDE_PATTERNS       = moc_*.cpp \
+                         *.js
 
 # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
 # (namespaces, classes, functions, etc.) that should be excluded from the
@@ -958,7 +959,7 @@ USE_MDFILE_AS_MAINPAGE =
 # also VERBATIM_HEADERS is set to NO.
 # The default value is: NO.
 
-SOURCE_BROWSER         = NO
+SOURCE_BROWSER         = YES
 
 # Setting the INLINE_SOURCES tag to YES will include the body of functions,
 # classes and enums directly into the documentation.
index d6b453390dddda8b544dd75a171511109ef1ecfa..5f6661411c1cab7d780227b0f01137e1845e9250 100644 (file)
@@ -258,7 +258,7 @@ void FileFinder::setFiletypes(const QDir::Filters& filetypes){
 /**
  * Sets the maximum subdirectory depth.
  *
- * @param minDepth  0: search only in the base directory<br>
+ * @param maxDepth  0: search only in the base directory<br>
  *                  otherwise: the maximum depth
  */
 void FileFinder::setMaxDepth(int maxDepth){
index 92aab297bf3d5cf9c31761bd98ff87a159c472bf..2308aea10ee5b00b24f1e98faf09356a95c56cad 100644 (file)
@@ -35,6 +35,8 @@ const QString VERSION("2015.06.01");
 /**
  * @brief Constructor.
  *
+ * @param startDir     the current directory at program start
+ * @param homeDir      the base directory for the configuration files
  * @param parent    NULL or the parent widget
  */
 MainWindow::MainWindow(const QString& startDir, const QString& homeDir,
index 235286060e6e4b62663cd9a7f8af4d383508fe4b..346a5979ba636ef3fbf384e495014dcf53a0648e 100644 (file)
@@ -56,10 +56,7 @@ TextFinder::~TextFinder(){
 /**
  * Search a text pattern in the given file.
  *
- * @param pattern       a text pattern to search
- * @param ignoreCase    <code>true</code>: the search must be case insensitive
- * @param isRegular     <code>true</code>: the pattern is a regular expression
- * @return              <code>true</code>: the patter was found
+ * @return              <code>true</code>: the pattern was found
  */
 bool TextFinder::contains(){
    bool rc = false;
index ab07bd52a1dc7b59568717aca0792b1270acd1b4..7e0c03d4ae4c166d301849a7db6975d465db37d3 100644 (file)
@@ -15,8 +15,8 @@ const char* Project::KEY_HISTORY_OPEN_FILES = "openFiles";
 /**
  * Constructor.
  *
- * @param path         the directory containing the configuration
- * @param logger       the logger
+ * @param path                 the directory containing the configuration
+ * @param mainWindow   the instance of the main window
  */
 Project::Project(const QString& path, MainWindow* mainWindow) :
            ReSettings(path, ".reditor.proj", mainWindow->logger()),
index 771603990f920c194162fc80ecb581c6550c8897..c30c7e0bcd38acd13b1d83578b3b18a7f8e20a07 100644 (file)
@@ -174,16 +174,6 @@ void Converter::changeState(Converter::State state, const QString& info){
    m_mainWindows->on_threadStateChanged(state, info);
 }
 
-/**
- * Reads the image properties from an image file.
- *
- * @param name      filename with path
- * @param width     OUT: the width of the image
- * @param height    OUT: the height of the image
- * @param info      OUT: information of the image
- * @return          <code>true</code>: success<br>
- *                  <code>false</code>: cannot retrieve the image data
- */
 /**
  * Converts an image into another format.
  *
@@ -349,7 +339,7 @@ bool Converter::readProperties(const QString& name, int& width, int& height,
  * <ul>
  *<li>Makes the target directory (if necessary)</li>
  *<li>Search the images *.png / *.jpg and converts them</li>
- *<ul>
+ *</ul>
  */
 void Converter::run(){
    QString msg;
index cca307d8830a9dd6fbebab6089efd7c9a004ea5e..c00c2b8f6b0ebecad3471646776020c638b1c827 100644 (file)
@@ -27,6 +27,7 @@
 /**
  * @brief Constructor.
  *
+ * @param file         the file to view
  * @param parent    NULL or the parent widget
  */
 MainWindow::MainWindow(const QString& file,
index 56aed0674fc5eced087977fbc5ec758f077a4b24..d15f2f8fe7cbef3a27d4b28c1b57c1c8eba350d2 100644 (file)
@@ -9,11 +9,11 @@
  * The latest sources: https://github.com/republib
  */
 
-/** @file
+/** \@file
  *
  * @brief A very efficient storage for bytes and C strings.
  */
-/** @file rplcore/rplbytestorage.hpp
+/** @file base/ReByteStorage.hpp
  *
  * @brief Definitions for a very efficient storage for bytes and C strings.
  */
index 9b0dbad607f921e6d9d6599ddd1b5996303109ac..299021f597686f123af82f338c240d3bca148097 100644 (file)
@@ -14,7 +14,7 @@
  *
  * @brief Reading/writing configuration files.
  */
-/** @file rplcore/rplconfig.hpp
+/** @file base/ReConfig.hpp
  *
  * @brief Definitions for reading/writing configuration files.
  */
index 81a44c67e36c54ac344fbbf293b355f10b43d4f9..248b98c14ab58c128e55d457dc939b4ec4738deb 100644 (file)
@@ -14,7 +14,7 @@
  * @brief Implements a portable data container.
  */
 
-/** @file recore/ReContainer.hpp
+/** @file base/ReContainer.hpp
  *
  * @brief Definition for a portable data container.
  */
index d68b73a00e32bd5d476c0b0cd10be2c214bc57ee..8a35e5e858b140b0184d72578eabd2a93a1e0275 100644 (file)
  *
  * @note A real public library for QT.
  *
- * This library contains the module groups
+ * This library contains the following module groups
  * <ul>
- * <li>rplcore: basic definitions, used in all other module groups</li>
- * <li>rplmath: mathematic definitions and tools</li>
- * <li>rplexpr: definition for parsing and interpretation of languages</li>
- * <li>rplnet: definitions and tools for tcp/udp communication</li>
+ * <li>base: basic definitions, used in all other module groups</li>
+ * <li>os: Operating System specific definitions and tools</li>
+ * <li>math: mathematic definitions and tools</li>
+ * <li>expr: definition for parsing and interpretation of languages</li>
+ * <li>net: definitions and tools for tcp/udp communication</li>
  * </ul>
  *
  * Each module group has a central include file, which organizes the necessary
  * #include "base/rebase.hpp"
  * #include "expr/reexpr.hpp"
  * </code></pre>
- * In this case all definitions of rplcore and rplexpr are available.
+ * In this case all definitions of base and expr are available.
  */
 /** @file
  * @brief Generally usable exceptions.
  */
-/** @file rplcore/rplexception.hpp
+/** @file base/ReException.hpp
  *
  * @brief Definitions for a generally usable exceptions.
  */
@@ -105,7 +106,7 @@ ReException::ReException(ReLoggerLevel level, int location, ReLogger* logger,
        logger->log(level, location, buffer);
 }
 
-/** @class RplRangeException rplexception.hpp "rplcore/rplexception.hpp"
+/** @class RplRangeException ReException.hpp "base/ReException.hpp"
  *
  * @brief An exception for integer range errors.
  *
@@ -148,7 +149,7 @@ ReRangeException::ReRangeException(ReLoggerLevel level, int location,
        logger->log(level, location, buffer);
 }
 
-/** @class RplInvalidDataException rplexception.hpp "rplcore/rplexception.hpp"
+/** @class RplInvalidDataException ReException.hpp "base/ReException.hpp"
  *
  * @brief An exception usable if binary data have the wrong structure.
  *
index 0301d03151d7c2f9a9f6ba90067fac5f6a1cac81..42be77ba87515af303956bc60d57316d310f35c6 100644 (file)
@@ -252,7 +252,7 @@ void ReLines::insertText(int lineNo, int col, const QString& text) {
  * Joins a line and the following line into one line.
  *
  * @param first the line number of the first line
- * @param              <code>true</code>: the join has been done<br>
+ * @return             <code>true</code>: the join has been done<br>
  *                             <code>false</code>: wrong parameter (first)
  */
 bool ReLines::joinLines(int first) {
@@ -403,6 +403,9 @@ void ReLines::undo(int& lineNo, int& col) {
  * Constructor.
  *
  * @param filename  name of the file
+ * @param readOnly     <code>true</code>: the file will be opened for
+ *                                     reading only
+ * @param logger       the logger
  */
 ReFile::ReFile(const QString& filename, bool readOnly, ReLogger* logger) :
            ReLineSource(),
@@ -911,8 +914,8 @@ qint64 ReUndoList::maxUndoSize() const {
 /**
  * Prepares the undo operation of an insertion in a given lineNo.
  *
- * @param line the line number of the the first line to insert
- * @param count        the number of lines to insert
+ * @param lineNo       the line number of the the first line to insert
+ * @param count                the number of lines to insert
  */
 void ReUndoList::storeInsertLines(int lineNo, int count) {
        UndoItem* item = new UndoItem();
index 58a6f30c57e17aaa1966ddbcad50a8c632a98591..ed04c23ab99da8ce8a223b4c229fdb7ff94dfb69 100644 (file)
@@ -458,6 +458,7 @@ QByteArray ReFileUtils::replaceExtension(const char* path, const char* ext) {
  * @param host         OUT: NULL or the host part
  * @param path         OUT: NULL or the path without the last node
  * @param node         OUT: NULL or the last node of the path
+ * @param params       OUT: NULL or the parameters (e.g. at http)
  */
 void ReFileUtils::splitUrl(const QString& url, QString* protocol, QString* host,
                        QString* path, QString* node, QString* params){
@@ -514,6 +515,7 @@ void ReFileUtils::splitUrl(const QString& url, QString* protocol, QString* host,
  * @param modified     the new modification time
  * @param accessed     the new access time.
  *                                     If <code>m_undefinedTime</code> the current time is taken
+ * @param logger       the logger
  * @return                     <code>true</code>: success
  */
 bool ReFileUtils::setTimes(const char* filename, const QDateTime& modified,
index eb1885518d648801e773b52c517eec342c515704..fb794e5377bb77ea9dea683ee719ed40431ddb1d 100644 (file)
@@ -12,7 +12,7 @@
 /** @file
  * A configurable logger for different output media.
  */
-/** @file rplcore/rpllogger.hpp
+/** @file base/ReLogger.hpp
  *
  * Definitions for a configurable logger for different output media.
  */
@@ -48,7 +48,7 @@ void ReLogger::destroyGlobalLogger() {
        m_globalLogger = NULL;
 }
 
-/** @class ReAppender rpllogger.hpp "rplcore/rpllogger.hpp"
+/** @class ReAppender ReLogger.hpp "base/ReLogger.hpp"
  *
  * @brief Puts the logging info to a medium (e.g. a file).
  *
@@ -125,7 +125,7 @@ bool ReAppender::isAutoDelete() const {
        return m_autoDelete;
 }
 
-/** @class ReLogger rpllogger.hpp "rplcore/rpllogger.hpp"
+/** @class ReLogger ReLogger.hpp "base/ReLogger.hpp"
  *
  * @brief Implements a logger.
  *
@@ -456,7 +456,7 @@ void ReLogger::buildStandardAppender(const QByteArray& prefix, int maxSize,
        addAppender((ReAppender*) fileAppender);
 }
 
-/** @class ReStreamAppender rpllogger.hpp "rplcore/rpllogger.hpp"
+/** @class ReStreamAppender ReLogger.hpp "base/ReLogger.hpp"
  *
  * @brief Puts the logging info to a standard output stream.
  *
@@ -496,7 +496,7 @@ void ReStreamAppender::log(ReLoggerLevel level, int location,
 }
 #pragma GCC diagnostic warning "-Wunused-parameter"
 
-/** @class ReFileAppender rpllogger.hpp "rplcore/rpllogger.hpp"
+/** @class ReFileAppender ReLogger.hpp "base/ReLogger.hpp"
  *
  * @brief Puts the logging info to a file.
  *
@@ -577,7 +577,7 @@ void ReFileAppender::log(ReLoggerLevel level, int location, const char* message,
 }
 #pragma GCC diagnostic warning "-Wunused-parameter"
 
-/** @class ReMemoryAppender rpllogger.hpp "rplcore/rpllogger.hpp"
+/** @class ReMemoryAppender ReLogger.hpp "base/ReLogger.hpp"
  *
  * @brief Puts the logging info to an internal buffer.
  *
index 9ed1c913a5345446c207b368dda93ffbfd7c2b6b..e10730f3f501901c6d3b884670d93dc31f0e665d 100644 (file)
@@ -27,10 +27,10 @@ ReIncludeExcludeMatcher* ReIncludeExcludeMatcher::m_allMatcher = NULL;
  * Constructor.
  *
  * @param pattern                      a pattern with wildcards '*' (any string)
- * @param caseSensitivity      caseSensitive or caseInsensitive
- * @param anchored                     <code>true<code>: the pattern starts at the strings
+ * @param caseSensivity                caseSensitive or caseInsensitive
+ * @param anchored                     <code>true</code>: the pattern starts at the strings
  *                                                     start<br>
- *                                                     <code>false<code>: the pattern can start anywhere in
+ *                                                     <code>false</code>: the pattern can start anywhere in
  *                                                     the string
  */
 
@@ -162,10 +162,10 @@ void ReMatcher::setCaseSensivitiy(const Qt::CaseSensitivity& caseSensivitiy) {
  * Constructor.
  *
  * @param patterns                     a list of patterns with wildcards '*' (any string)
- * @param caseSensitivity      caseSensitive or caseInsensitive
- * @param anchored                     <code>true<code>: the pattern starts at the strings
+ * @param caseSensivity                caseSensitive or caseInsensitive
+ * @param anchored                     <code>true</code>: the pattern starts at the strings
  *                                                     start<br>
- *                                                     <code>false<code>: the pattern can start anywhere in
+ *                                                     <code>false</code>: the pattern can start anywhere in
  *                                                     the string
  */
 ReListMatcher::ReListMatcher(const QStringList& patterns,
@@ -298,9 +298,10 @@ void ReListMatcher::setCaseSensivitiy(
 /**
  * Sets a new pattern list.
  *
- * @param patterns     the patterns to search
- * @param anchored     <code>true<code>: the pattern must match the string's start<br>
- *                                     <code>false<code>: the pattern can match anywhere
+ * @param patterns             the patterns to search
+ * @param caseSensivity        CaseSensitive or CaseInsensitive
+ * @param anchored             <code>true</code>: the pattern must match the string's start<br>
+ *                                             <code>false</code>: the pattern can match anywhere
  */
 void ReListMatcher::setPatterns(const QStringList& patterns,
        Qt::CaseSensitivity caseSensivity, bool anchored) {
@@ -323,10 +324,10 @@ void ReListMatcher::setPatterns(const QStringList& patterns,
  *
  * @param patterns                     a comma delimited pattern list, exclude patterns
  *                                                     marked with the prefix '-'. Example: "*.c,*.h,-test*'
- * @param caseSensitivity      caseSensitive or caseInsensitive
- * @param anchored                     <code>true<code>: the pattern starts at the strings
+ * @param caseSensivity                CaseSensitive or CaseInsensitive
+ * @param anchored                     <code>true</code>: the pattern starts at the strings
  *                                                     start<br>
- *                                                     <code>false<code>: the pattern can start anywhere in
+ *                                                     <code>false</code>: the pattern can start anywhere in
  *                                                     the string
  */
 ReIncludeExcludeMatcher::ReIncludeExcludeMatcher(const QString& patterns,
@@ -342,10 +343,10 @@ ReIncludeExcludeMatcher::ReIncludeExcludeMatcher(const QString& patterns,
  *
  * @param includes                     a list of include patterns
  * @param excludes                     a list of exclude patterns
- * @param caseSensitivity      caseSensitive or caseInsensitive
- * @param anchored                     <code>true<code>: the pattern starts at the strings
+ * @param caseSensivity                CaseSensitive or CaseInsensitive
+ * @param anchored                     <code>true</code>: the pattern starts at the strings
  *                                                     start<br>
- *                                                     <code>false<code>: the pattern can start anywhere in
+ *                                                     <code>false</code>: the pattern can start anywhere in
  *                                                     the string
  */
 ReIncludeExcludeMatcher::ReIncludeExcludeMatcher(const QStringList& includes,
index 264b16d95a7dcb2b4dd1cd2eefb54d485f1972c4..4cd1ea2434d2e38322d095c1c2879b67ca4899b4 100644 (file)
@@ -26,7 +26,7 @@ const QString ReQStringUtils::m_empty;
  * Removes end of line characters if any.
  *
  * @param text  text to inspect
- * @return      <code>text</code> without trailing '\n' and/or '\r'
+ * @return      <code>text</code> without trailing '\\n' and/or '\\r'
  */
 ReString ReQStringUtils::chomp(const ReString& text) {
        int last = text.length() - 1;
@@ -68,18 +68,18 @@ QString& ReQStringUtils::ensureLastChar(QString& value, QChar lastChar) {
 }
 
 /**
- * @brief Determines the length and vlaue of an integer.
+ * @brief Determines the length and value of an integer.
  *
  * @param text      the number as text
  * @param start     the first index to inspect
  * @param radix     the base of the number sytem: 8 (octal), 10 or 16
- * @param pValue     OUT: the value of the integer. May be NULL
+ * @param pValue    OUT: the value of the integer. May be NULL
  *
- * @return          <=0: no integer found
+ * @return          &lt;=0: no integer found<br>
  *                  otherwise: the length of the integer
  */
 int ReQStringUtils::lengthOfUInt64(const ReString& text, int start, int radix,
-       quint64* pValue) {
+       int64_t* pValue) {
        int inputLength = text.size();
        int64_t value = 0;
        int ix = start;
@@ -498,6 +498,7 @@ public:
  * @param expr       an expression, e.g. "10*1024kByte+5MiByte"
  * @param unitList   description of the allowed units with its factor<br>
  *                   example: "kibyte:1024;kbyte:1000;mibyte:1048576;mbyte:1000000"
+ * @param parseAtOnce  <code>true</code>: the parse process will be started
  */
 ReUnitParser::ReUnitParser(const QString& expr, const char* unitList,
        bool parseAtOnce) :
@@ -707,8 +708,8 @@ QDateTime ReDateTimeParser::asDateTime() const {
 /**
  * Parses a date/time expression.
  *
- * Syntax: { "now" | <date> [<time>] | <time> } [ { '+' | '-' } <second expr>]
- *          | <second expr>
+ * Syntax: { "now" | DATE [TIME] | TIME } [ { '+' | '-' } SECOND_EXPR]
+ *          | SECOND_EXPR
  * @param expr  expression to parse, e.g. "now+3weeks-5*30days"
  * @return      start of the epoche: no valid input<br>
  *              othewise: the calculated date/time
index 0a9da6d195635529af086bcccb9b0ab187aca276..ed13d7a8a3d7eab5bfd11328505e34876ff09d21 100644 (file)
@@ -107,8 +107,8 @@ public:
 /**
  * Calculates time expressions.
  *
- * Syntax: { "now" | <date> [<time>] | <time> } [ { '+' | '-' } <second expr>]
- *          | <second expr>
+ * Syntax: { "now" | DATE [TIME] | TIME } [ { '+' | '-' } SECOND_EXPR]
+ *          | SECOND_EXPR
  * Example: now+3weeks-5*30days
  */
 class ReDateTimeParser: public ReUnitParser {
index c1797abc1edacaf2860f4fedfb103ce99348dcd8..29e3ab01d2c2f17f43e89c50a97e808cecc61c1c 100644 (file)
@@ -16,6 +16,7 @@ enum {
        LOC_READ_1 = LOC_FIRST_OF(LOC_RANDOMIZER), // 12201
        LOC_DECODE_CONTENT_1,           // 12202
        LOC_DECODE_CONTENT_2,           // 12203
+       LOC_UPDATE_1,                           // 22204
 };
 
 const char ReNameScrambler::ESC = '%';
@@ -167,14 +168,151 @@ const char ReNameScrambler::m_nodeChars[] = { ' ', '!', '#', '$', '%', '&',
 const int ReNameScrambler::m_countNodeChars =
        sizeof ReNameScrambler::m_nodeChars;
 
+
+/**
+ * Contructor.
+ *
+ * @param factor
+ * @param increment
+ */
+ReHmHash64::ReHmHash64(int64_t factor, int64_t increment) :
+       m_factor(factor),
+       m_increment(increment),
+       m_hash(0),
+       m_sumLength(0),
+       m_closed(false),
+       m_littleEndian(true)
+{
+       int src = 1;
+       int trg = 0;
+       memcpy(&trg, &src, 1);
+       m_littleEndian = trg != 0;
+}
+
+/**
+ * Return the hash value as 64 bit integer.
+ *
+ * @return the hash value as 64 bit integer
+ */
+int64_t ReHmHash64::digestAsInt()
+{
+       if (! m_closed){
+               m_closed = true;
+               m_hash ^= (m_sumLength ^ 0x2011195811081965L) * m_factor
+                               + (m_increment >> m_sumLength % 29);
+       }
+       return m_hash;
+}
+
+/**
+ * Returns the hash value as byte array.
+ *
+ * @return     the hash value as byte array, stored in "little endian" byte order
+ */
+QByteArray ReHmHash64::digest()
+{
+       QByteArray rc;
+       rc.resize(sizeof m_hash);
+       int64_t value = digestAsInt();
+       if (m_littleEndian){
+               * (int64_t*) rc.data() = value;
+       } else {
+               memcpy(rc.data(), &value, sizeof m_hash);
+       }
+       return rc;
+}
+
+/**
+ * Returns the hash value as hex string.
+ * @return     the hash value as hex string, stored in "big endian" byte order
+ */
+QByteArray ReHmHash64::hexDigest()
+{
+       QByteArray rc;
+       int size = sizeof m_hash * 2;
+       rc.reserve(size);
+       rc = QByteArray::number((qlonglong) digestAsInt(), 16);
+       if (rc.length() != size)
+               rc.insert(0, QByteArray("0000000000000000").mid(0, size - rc.length()));
+       return rc;
+}
+
+/**
+ * Resets the hash.
+ *
+ * The state is equal after the constructor.
+ */
+void ReHmHash64::reset(){
+       m_hash = m_sumLength = 0;
+       m_closed = false;
+}
+
+/**
+ * Sets the flag "handle as little endian".
+ *
+ * @param littleEndian <code>true</code>: the byte order is "little endian"
+ */
+void ReHmHash64::setLittleEndian(bool littleEndian)
+{
+       m_littleEndian = littleEndian;
+}
+
+/**
+ * Adds the content of a block to the hash.
+ *
+ *
+ * @param source       the data block which will be added to the hash
+ * @param length       the length of the data (in bytes)
+ */
+void ReHmHash64::update(void* source, size_t length)
+{
+#define CalcNextHash(data) m_hash ^= (data ^ 0x2004199111121989L) \
+       * m_factor + (m_increment >> (data % 23))
+       int64_t data;
+       if (m_sumLength % sizeof m_hash != 0)
+               ReLogger::logv(LOG_ERROR, LOC_UPDATE_1,
+                                          "ReHmHash64::update() non last block called with wrong length: %d",
+                                          m_sumLength);
+       m_sumLength += length;
+       if (m_littleEndian){
+               const int64_t* src = reinterpret_cast<const int64_t*>(source);
+               for (int ix = length / sizeof m_hash - 1; ix >= 0; ix--){
+                       data = *src++;
+                       CalcNextHash(data);
+               }
+               int rest = length % sizeof m_hash;
+               if (rest > 0){
+                       data = 0;
+                       memcpy(&data, src, rest);
+                       data <<= sizeof m_hash - rest;
+                       CalcNextHash(data);
+               }
+       } else {
+               const int8_t* src = reinterpret_cast<const int8_t*>(source);
+               for (int ix = length / sizeof m_hash - 1; ix >= 0; ix--){
+                       data = 0;
+                       for (int ix2 = 0; ix2 < 8; ix2++)
+                               data |= (*src++ << ix2 * 8);
+                       CalcNextHash(data);
+               }
+               int rest = length % sizeof m_hash;
+               if (rest > 0){
+                       data = 0;
+                       memcpy(&data, src, rest);
+                       data <<= sizeof m_hash - rest;
+                       CalcNextHash(data);
+               }
+       }
+}
+
 /**
  * @brief Constructor.
  *
  * @param name the name of the generator
  */
 ReRandomizer::ReRandomizer(const char* name) :
-               m_name(name),
-               m_counter(0){
+       m_name(name),
+       m_counter(0){
 }
 /**
  * @brief Destructor.
@@ -935,7 +1073,6 @@ QString ReNameScrambler::decodeName(const QString& name) {
 /**
  * Encodes a block of file content.
  *
- * @param first                <code>true</code>: this is the first block of the file
  * @param source       the source block
  * @param target       OUT: the target block<br>
  *                                     Can be identical to <code>source</code> (in place replacement)
@@ -1122,10 +1259,10 @@ void ReByteScrambler::initHeader(int metaInfoLength, int markerLength,
  * Method:
  * <ul><li>Invert the name without extension (first char becomes the last),
  * add the extension</li>
- * <li>Replace the "unconvertable" chars (> 127) into "%xx" ('%' with 2 hexdigits)</li>
+ * <li>Replace the "unconvertable" chars (&lt; 127) into "%xx" ('%' with 2 hexdigits)</li>
  * <li>exchange the char with a value generated by the pseudo random generator</li>
  * </ul>
- * @param name clear text filename
+ * @param node clear text filename
  * @return             the encrypted filename
  */
 QByteArray& ReNameScrambler::encodeName(const QByteArray& node) {
@@ -1161,3 +1298,4 @@ QByteArray& ReNameScrambler::encodeName(const QByteArray& node) {
 }
 
 
+
index c2c48f428e781e1d5e571f03df4e19b09cb675db..31d13da112a33eb811bfee501b82b4af41a291bd 100644 (file)
 #ifndef RANDOMIZER_H_
 #define RANDOMIZER_H_
 
+/**
+ * Pure abstract base class for hash generators.
+ */
+class ReDigest {
+public:
+       /** Returns the hash value as byte array.
+        * @return      the hash value as byte array, stored in "little endian" byte order
+        */
+       virtual QByteArray digest() = 0;
+       /** Returns the hash value as hex string.
+        * @return      the hash value as hex string, stored in "little endian" byte order
+        */
+       virtual QByteArray hexDigest() = 0;
+       /** Resets the hash.
+        * The state is equal after the constructor.
+        */
+       virtual void reset() = 0;
+       /** Adds the content of a block to the hash.
+        * @param source        the data block which will be added to the hash
+        * @param length        the length of the data (in bytes)
+        */
+       virtual void update(void* source, size_t length) = 0;
+};
+
+/**
+ * Implements a very simple (and cheap) checksum.
+ */
+class ReHmHash64 : ReDigest{
+public:
+       ReHmHash64(int64_t factor = 0x70cf79d585f5a313L,
+                          int64_t increment = 0x75c280b9881252dbL);
+public:
+       int64_t digestAsInt();
+public:
+       virtual QByteArray digest();
+       virtual QByteArray hexDigest();
+       virtual void reset();
+       virtual void setLittleEndian(bool littleEndian);
+       virtual void update(void* source, size_t length);
+
+private:
+       int64_t m_factor;
+       int64_t m_increment;
+       int64_t m_hash;
+       int64_t m_sumLength;
+       bool m_closed;
+       bool m_littleEndian;
+};
+
 /**
  * This implements an abstract base class for random generators.
  */
@@ -167,7 +216,7 @@ protected:
 /**
  * A simple pseudo random generator simular to <code>ReCongruentialGenerator</code>.
  *
- * Difference: An array of seeds is used (round robin)</code>.
+ * Difference: An array of seeds is used (round robin).
  */
 class ReMultiCongruentialGenerator: public ReMultiSeedRandomizer,
        public ReCongruentialGeneratorBase {
index d01b4c1ef8f7e52332ac9f2356fcd897842e95c3..9f08a75358e0808adf52a015c0f0c9448cd89a19 100644 (file)
 /** @file
  * @brief Missed operations for <code>QByteArray</code>s.
  */
-/** @file base/ReStringUtil.cpp
+/** @file base/ReStringUtils.cpp
  *
  * @brief Definitions for missed operations for <code>QByteArray</code>s.
  */
 #include "base/rebase.hpp"
 
-/** @class ReStringUtil ReStringUtil.hpp "base/ReStringUtil.hpp"
+/** @class ReStringUtil ReStringUtils.hpp "base/ReStringUtils.hpp"
  *
  * @brief Implements some services around strings.
  *
@@ -546,6 +546,8 @@ int ReStringUtils::lengthOfReal(const char* text, qreal* pValue) {
  * @param charOf       a string containing all member characters of the char set.
  * @param indexOf      an array containing the index of the char at the position
  *                                     of the char, starting with the minimum character
+ * @param minChar      the lowest character of the set
+ * @param maxChar      the highest character of the set
  * @param count                -1: strlen(charOf) is taken<br>
  *
  *                                     otherwise: the length of charOf[]
index 642be6052a1f58c3577684122dc44a309a883047..7a87637a1594199b679ec73b00dbd6db81695fdb 100644 (file)
@@ -21,7 +21,7 @@ enum {
 };
 
 /**
- * @class ReTerminator ReTerminator.hpp "rplcore/ReTerminator.hpp"
+ * @class ReTerminator ReTerminator.hpp "base/ReTerminator.hpp"
  *
  * @brief Implements a thread stopper.
  *
index d57229d6c4886981effe767b66d74a8c8a087949..c83bf7fac940a81d4fc372f7123f0cbaf00ab43b 100644 (file)
 /** @file
  * @brief A testing tool like JUnit.
  */
-/** @file rplcore/rpltest.hpp
+/** @file base/ReTest.hpp
  *
  * @brief Definitions for a testing tool like JUnit.
  */
 #include "base/rebase.hpp"
 
-/** @class ReTest rpltest.hpp "rplcore/repltest"
+/** @class ReTest ReTest.hpp "base/ReTest"
  *
  * @brief Implements an unit test base class similar JUnit for java.
  *
- * Example for usage:
- *
- * @see rplexample.cpp
  */
 class ReTest;
 
@@ -39,7 +36,7 @@ ReTest::ReTest(const char* name) :
            m_memoryAppender(1024),
            m_memoryLogger() {
        m_memoryAppender.setAutoDelete(false);
-       m_logger.buildStandardAppender(getTempDir("rpltest"));
+       m_logger.buildStandardAppender(getTempDir("retest"));
        log(QByteArray("Start of ") + m_name);
        m_memoryLogger.addAppender(&m_memoryAppender);
 }
index b76ae56ee287849197933c645a9dce18ff365fb7..272eb2ce2c4960f5ad77188f4c07597626b2a644 100644 (file)
@@ -15,7 +15,7 @@
  * Implementation of the abstract base class <code>ReWriter</code> and
  * the concrete derivation <code>ReFileWriter</code>.
  */
-/** @file rplcore/rplwriter.hpp
+/** @file base/ReWriter.hpp
  *
  * @brief Definitions for a writer to an output media.
  */
@@ -25,7 +25,7 @@ const char* ReWriter::m_tabs =
     "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t";
 int ReWriter::m_maxIndention = strlen(ReWriter::m_tabs);
 
-/** @class ReWriter ReWriter.hpp "rplcore/ReWriter.hpp"
+/** @class ReWriter ReWriter.hpp "base/ReWriter.hpp"
  *
  * @brief Implements an abstract base class for producing text lines.
  *
@@ -129,7 +129,7 @@ void ReWriter::formatIndented(int indent, const char* format, ...) {
        writeLine(buffer);
 }
 
-/** @class ReWriter rplwriter.hpp "rplcore/rplwriter.hpp"
+/** @class ReWriter ReWriter.hpp "base/ReWriter.hpp"
  *
  * @brief Implements a class which writes lines into a file.
  */
index 32181c31e66cfa2d438754bd8a9828eddf2438a4..2504851acd3bc85e8423406c1477a7b66448d00b 100644 (file)
@@ -329,7 +329,52 @@ public:
                printf("MLC: %s\n", rand3.nextString(80, 80, buffer));
                printf("KIS: %s\n", rand4.nextString(80, 80, buffer));
        }
+       void printHash(const char* source){
+               ReHmHash64 hash;
+               hash.update((void*) source, strlen(source));
+               printf("%-8s: %s\n", source, hash.hexDigest().constData());
+       }
+       void printBinary(int length){
+               QByteArray source;
+               source.fill(0, length);
+               ReHmHash64 hash;
+               hash.update((void*) source.constData(), length);
+               printf("0 x %2d: %s\n",
+                          length, hash.hexDigest().constData());
+       }
+
+       void testReHmHash64(){
+               ReHmHash64 hash;
 
+               hash.update((void*) "12345678abcdefghABC", 8+8+3);
+               int64_t value = hash.digestAsInt();
+               hash.reset();
+               hash.update((void*) "12345678", 8);
+               hash.update((void*) "abcdefgh", 8);
+               hash.update((void*) "ABC", 3);
+               checkEqu(value, hash.digestAsInt());
+
+               printHash("a");
+               printHash("b");
+               printHash("aa");
+               printHash("ab");
+               printHash("aaa");
+               printHash("aab");
+               printHash("aaaa");
+               printHash("aaab");
+               printHash("aaaaaaaa");
+               printHash("aaaaaaab");
+               printHash("aaaaaaba");
+               printHash("aaaaabaa");
+               printHash("aaaabaaa");
+               printHash("aaabaaaa");
+               printHash("aabaaaaa");
+               printHash("abaaaaaa");
+               printHash("baaaaaaa");
+               for (int ix = 0; ix < 16; ix++)
+                       printBinary(ix);
+               log("ready");
+       }
        void special(){
                ReKISSRandomizer rand;
                rand.dump();
@@ -339,6 +384,7 @@ public:
        }
 
        virtual void run(void) {
+               testReHmHash64();
                testNextString();
                testRealRandom();
                testShuffle();
index e57971e7ea3badb785adc38bc17fd6cf1c759b9e..d95e38395e3f033563a88bf0eae7b3418ef98c94 100644 (file)
@@ -12,7 +12,7 @@
 /** @file
  * @brief Predefined classes of the virtual machine, e.g ReASInteger.
  */
-/** @file rplexpr/rplasclasses.hpp
+/** @file expr/ReASClasses.hpp
  *
  * @brief Definitions for predefined classes of the virtual machine.
  */
@@ -29,7 +29,7 @@ ReASBoolean* ReASBoolean::m_instance = NULL;
 ReASVoid* ReASVoid::m_instance = NULL;
 ReASFormula* ReASFormula::m_instance = NULL;
 
-/** @class ReSymbolSpace rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReSymbolSpace ReASClasses.hpp "expr/ReASClasses.hpp"
  *
  * @brief Implements a symbol space for the parser.
  *
@@ -422,7 +422,7 @@ const QByteArray& ReSymbolSpace::name() const {
        return m_name;
 }
 
-/** @class ReASBoolean rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASBoolean ReASClasses.hpp "expr/ReASClasses.hpp"
  *
  * @brief Implements the class of a Boolean.
  *
@@ -479,7 +479,7 @@ QByteArray ReASBoolean::toString(void* object, int) const {
        return ((ReASVariant*) object)->asBool() ? "True" : "False";
 }
 
-/** @class ReASNumber rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASNumber ReASClasses.hpp "expr/ReASClasses.hpp"
  *
  * @brief Implements the class of a Boolean.
  *
@@ -544,7 +544,7 @@ QByteArray ReASFloat::toString(void* object, int) const {
        return buffer;
 }
 
-/** @class ReASInteger rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASInteger ReASClasses.hpp "expr/ReASClasses.hpp"
  *
  * @brief Implements the class of a Boolean.
  *
@@ -583,7 +583,7 @@ QByteArray ReASInteger::toString(void* object, int maxLength) const {
        return buffer;
 }
 
-/** @class ReASString rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASString ReASClasses.hpp "expr/ReASClasses.hpp"
  *
  * @brief Implements the class of a string.
  *
@@ -664,7 +664,7 @@ QByteArray ReASString::toString(void* object, int maxLength) const {
        return rc;
 }
 
-/** @class ReASList rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASList ReASClasses.hpp "expr/ReASClasses.hpp"
  *
  * @brief Implements the class of a list.
  *
@@ -758,7 +758,7 @@ QByteArray ReASList::toString(void* object, int maxLength) const {
        return rc;
 }
 
-/** @class ReASMap rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASMap ReASClasses.hpp "expr/ReASClasses.hpp"
  *
  * @brief Implements the class of a map.
  *
@@ -861,7 +861,7 @@ QByteArray ReASMap::toString(void* object, int maxLength) const {
        return rc;
 }
 
-/** @class ReVariable rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReVariable ReASClasses.hpp "expr/ReASClasses.hpp"
  *
  * @brief Implements a variable of a symbol space.
  */
@@ -915,7 +915,7 @@ const QByteArray& ReVariable::name() const {
        return m_name;
 }
 
-/** @class ReVariable rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReVariable ReASClasses.hpp "expr/ReASClasses.hpp"
  *
  * @brief Implements a data type representing a none type.
  */
@@ -965,7 +965,7 @@ QByteArray ReASVoid::toString(void*, int) const {
        return QByteArray("");
 }
 
-/** @class ReASFormula rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASFormula ReASClasses.hpp "expr/ReASClasses.hpp"
  *
  * @brief Implements a data type representing a calculated value.
  */
@@ -1025,7 +1025,7 @@ QByteArray ReASFormula::toString(void* object, int) const {
        return buffer;
 }
 
-/** @class ReASUserClass rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASUserClass ReASClasses.hpp "expr/ReASClasses.hpp"
  *
  * @brief Implements a data type representing an user defined class.
  */
@@ -1090,7 +1090,7 @@ const ReSourcePosition* ReASUserClass::position() const {
        return m_position;
 }
 
-/** @class ReASUserObject rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASUserObject ReASClasses.hpp "expr/ReASClasses.hpp"
  *
  * @brief Implements an instance of an user defined class.
  */
index a3dca9a2c40d4fa511a3109c3759ce39c11407ad..f30e785e72731835b31e4aecec0baf88bbf6f873 100644 (file)
@@ -13,7 +13,7 @@
  * @brief Implementation of an Abstract Syntax Tree.
  *
  */
-/** @file rplexpr/rplastree.hpp
+/** @file expr/ReASTree.hpp
  *
  * @brief Definitions for an Abstract Syntax Tree.
  *
@@ -101,7 +101,7 @@ void dumpMap(ReWriter& writer, ReASMapOfVariants& map, bool withEndOfLine) {
                writer.writeLine();
 }
 
-/** @class ReASException rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASException ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements a specific exception for the Abstract Syntax Tree.
  */
@@ -147,7 +147,7 @@ ReASException::ReASException() :
            ReException("") {
 }
 
-/** @class ReASVariant rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASVariant ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements a class which can hold the value of any type.
  *
@@ -457,7 +457,7 @@ void ReASVariant::setObject(void* object, const ReASClass* clazz) {
        m_class = clazz;
 }
 
-/** @class ReASItem rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASItem ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements the abstract base class of all entries of an AST.
  *
@@ -803,7 +803,7 @@ bool ReASItem::ensureError(ReParser& parser, const char* info) {
        return false;
 }
 
-/** @class ReASCalculable rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASCalculable ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief An abstract base class for items which calculates a value.
  *
@@ -830,13 +830,13 @@ void ReASCalculable::setClass(ReASClass* clazz) {
        m_class = clazz;
 }
 
-/** @class ReASStorable rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASStorable ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements the abstract base class of value containing items.
  *
  */
 
-/** @class ReASConstant rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASConstant ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements a constant for the Abstract Syntax Tree.
  *
@@ -898,7 +898,7 @@ ReASVariant& ReASConstant::value() {
        return m_value;
 }
 
-/** @class ReASListConstant rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASListConstant ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements a container for constant list entries.
  *
@@ -974,7 +974,7 @@ ReASVariant& ReASListConstant::value() {
        return m_value;
 }
 
-/** @class ReASMapConstant rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASMapConstant ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements a hash map for constant list entries.
  *
@@ -1043,7 +1043,7 @@ ReASMapOfVariants* ReASMapConstant::map() {
        return rc;
 }
 
-/** @class ReASNamedValue rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASNamedValue ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements a named values, a constant or a variable
  */
@@ -1147,7 +1147,7 @@ int ReASNamedValue::variableNo() const {
        return m_variableNo;
 }
 
-/** @class ReASConversion rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASConversion ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements a data type conversion.
  *
@@ -1304,7 +1304,7 @@ ReASConversion* ReASConversion::tryConversion(ReASClass* expected,
        return rc;
 }
 
-/** @class ReASIndexedValue rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASIndexedValue ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements an indexed values (member of a list)
  *
@@ -1379,7 +1379,7 @@ void ReASIndexedValue::dump(ReWriter& writer, int indent) {
        m_child->dump(writer, indent + 1);
 }
 
-/** @class RplVarDefinition rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class RplVarDefinition ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements variable definition for the Abstract Syntax Tree.
  *
@@ -1521,7 +1521,7 @@ int ReASVarDefinition::execute(ReVMThread& thread) {
        return 0;
 }
 
-/** @class ReASExprStatement rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASExprStatement ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements an statement consisting of an expression.
  *
@@ -1589,7 +1589,7 @@ void ReASExprStatement::dump(ReWriter& writer, int indent) {
                m_child2->dump(writer, indent + 1);
 }
 
-/** @class ReASNode1 rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASNode1 ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements an inner node of the abstract syntax tree with one child.
  *
@@ -1643,7 +1643,7 @@ void ReASNode1::dumpStatements(ReWriter& writer, int indent,
        }
 }
 
-/** @class ReASNode2 rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASNode2 ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements an inner node of the abstract syntax tree with two childs.
  *
@@ -1674,7 +1674,7 @@ void ReASNode2::setChild2(ReASItem* child2) {
        m_child2 = child2;
 }
 
-/** @class ReASNode3 rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASNode3 ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements an inner node of the abstract syntax tree with 3 childs.
  *
@@ -1715,7 +1715,7 @@ void ReASNode3::setChild3(ReASItem* child3) {
        m_child3 = child3;
 }
 
-/** @class ReASNode4 rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASNode4 ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements an inner node of the abstract syntax tree with 3 childs.
  *
@@ -1757,7 +1757,7 @@ void ReASNode4::setChild4(ReASItem* child4) {
        m_child4 = child4;
 }
 
-/** @class ReASNode5 rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASNode5 ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements an inner node of the abstract syntax tree with 4 childs.
  *
@@ -1799,7 +1799,7 @@ void ReASNode5::setChild5(ReASItem* child5) {
        m_child5 = child5;
 }
 
-/** @class ReASNode6 rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASNode6 ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements an inner node of the abstract syntax tree with 4 childs.
  *
@@ -1841,7 +1841,7 @@ void ReASNode6::setChild6(ReASItem* child6) {
        m_child6 = child6;
 }
 
-/** @class ReASUnaryOp rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASUnaryOp ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements an unary operation.
  *
@@ -2010,7 +2010,7 @@ const char*ReASUnaryOp::nameOfOp(ReASUnaryOp::UnaryOp op) {
        return rc;
 }
 
-/** @class ReASStatement rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASStatement ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements a base class for all statements.
  *
@@ -2041,7 +2041,7 @@ int ReASStatement::executeStatementList(ReASItem* list, ReVMThread& thread) {
        return rc;
 }
 
-/** @class ReASIf rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASIf ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements an if statement.
  *
@@ -2129,7 +2129,7 @@ void ReASIf::dump(ReWriter& writer, int indent) {
                m_child4->dump(writer, indent + 1);
 }
 
-/** @class ReASFor rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASFor ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements a for statement.
  *
@@ -2203,7 +2203,7 @@ void ReASForIterated::dump(ReWriter& writer, int indent) {
        dumpStatements(writer, indent + 1, m_child2);
 }
 
-/** @class ReASForCounted rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASForCounted ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements a for statement.
  *
@@ -2340,7 +2340,7 @@ void ReASForCounted::dump(ReWriter& writer, int indent) {
        dumpStatements(writer, indent + 1, m_child2);
 }
 
-/** @class ReASWhile rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASWhile ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements a while statement.
  *
@@ -2428,7 +2428,7 @@ void ReASWhile::dump(ReWriter& writer, int indent) {
        dumpStatements(writer, indent + 1, m_child3);
 }
 
-/** @class ReASRepeat rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASRepeat ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements a while statement.
  *
@@ -2515,7 +2515,7 @@ void ReASRepeat::dump(ReWriter& writer, int indent) {
        dumpStatements(writer, indent + 1, m_child3);
 }
 
-/** @class ReASClass rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASClass ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements the base class of an Abstract Syntax Tree class.
  *
@@ -2569,7 +2569,7 @@ void ReASClass::setSymbols() {
        m_symbols = m_tree.currentSpace();
 }
 
-/** @class ReASTree rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASTree ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements a manager for all parts of an Abstract Syntax Tree.
  *
@@ -2768,7 +2768,7 @@ void ReASTree::dump(const char* filename, int flags, const char* header) {
        writer.close();
 }
 
-/** @class ReASMethodCall rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASMethodCall ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements a method or function call for the Abstract Syntax Tree.
  *
@@ -2906,7 +2906,7 @@ ReASExprStatement* ReASMethodCall::arg1() const {
        return dynamic_cast<ReASExprStatement*>(m_child2);
 }
 
-/** @class ReASException rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASException ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements a call of a method or function.
  *
@@ -2914,7 +2914,7 @@ ReASExprStatement* ReASMethodCall::arg1() const {
  * <code>m_child2</code>: argument list (or NULL)
  */
 
-/** @class ReASBinaryOp rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASBinaryOp ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements binary operator for the Abstract Syntax Tree.
  *
@@ -3323,7 +3323,7 @@ const char* ReASBinaryOp::nameOfOp(ReASBinaryOp::BinOperator op) {
        return rc;
 }
 
-/** @class ReASMethod rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASMethod ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements a method definition for the Abstract Syntax Tree.
  *
@@ -3478,7 +3478,7 @@ void ReASMethod::setFirstParamWithDefault(int value) {
        firstParamWithDefault = value;
 }
 
-/** @class ReASField rplastree.hpp "rplexpr/rplastree.hpp"
+/** @class ReASField ReASTree.hpp "expr/ReASTree.hpp"
  *
  * @brief Implements an class field for the Abstract Syntax Tree.
  *
index e73731db4abd85c2ffac44c80d91479644b5ad77..a2b13900621f22c989ab91a13bce26a3dc88b954 100644 (file)
@@ -74,7 +74,7 @@ enum MFLocations {
 
 };
 
-/** @class ReMFParser rpllexer.hpp "rplexpr/rplmfparser.hpp"
+/** @class ReMFParser ReMFParser.hpp "expr/ReMFParser.hpp"
  *
  * @brief Implements a parser for the language MF.
  *
index 07c144d0faef8a0137a502b38901d42aefe32fd3..4e4db4d0ce11629bfb301c14d7f755af9e72ae2d 100644 (file)
@@ -66,6 +66,7 @@ ReVMException::ReVMException(const char* format, ...) :
 /**
  * @brief Constructor.
  *
+ * @param caller       name of the caller (for debugging)
  * @param symbols   the symbol space belonging to the stack frame
  */
 
index cedf156e43afac755c45329c627d3d25fd88fd94..074c7d60c83d0667ec3120047aa699e934632b54 100644 (file)
@@ -30,10 +30,6 @@ inline int heightToFullHeight(int height) {
 
 /**
  * Constructor.
- *
- * @param foreground    symbolic foreground color
- * @param background    symbolic background color
- * @param edit          the parent
  */
 ReLook::ReLook() :
                m_font(NULL),
@@ -735,7 +731,8 @@ void ReEdit::paintEvent(QPaintEvent* event) {
 /**
  * Ensures that a given line / column is visible.
  *
- * @param firstLine    number of the line which should be visible
+ * @param firstLine    number of the line which should be visible
+ * @param firstCol     the first column which should be visible
  */
 void ReEdit::reposition(int firstLine, int firstCol) {
        if (firstLine != m_firstLine) {
@@ -769,9 +766,9 @@ void ReEdit::setCursorLine(int cursorLine) {
  *
  * Example (tab width = 3):
  * <pre>
- *   "\tz" -> '   z' -> '\t' + '  '
- *  "x\tz" -> 'x  z' -> '\t' + ' '
- * "xy\tz" -> 'xy z' -> '\t'
+ *   "\tz" -> '   z' -> TAB + '  '
+ *  "x\tz" -> 'x  z' -> TAB + ' '
+ * "xy\tz" -> 'xy z' -> TAB
  * </pre>
  * @param tabWidth
  */
@@ -958,6 +955,7 @@ int ReParagraphs::indexToColumn(int index) {
  * @param lineNo    the line number of the first line to transfer
  * @param count     the number of lines to transfer
  * @param width                width of the screen (in chars)
+ * @param edit         the parent (instance of the editor)
  */
 void ReParagraphs::load(int lineNo, int count, int width, ReEdit* edit) {
        clear();
@@ -987,7 +985,6 @@ void ReParagraphs::setLines(ReLines* lines) {
  *
  * @param paragraph the paragraph to change
  * @param lineNo    the line number (0..N-1) of the paragraph in the source
- * @param firstCol     the first column of the text (with expanded tabulators)
  * @param edit      the parent, the edit field
  */
 void ReParagraphBuilder::buildParagraph(ReParagraph& paragraph, int lineNo,
index 67cf3153868dbcc20e0a498847848a9787707285..64ea4b2c27278262be6fe7e544b67456cd864595 100644 (file)
@@ -141,7 +141,7 @@ public:
  * A manipulator of a paragraph.
  *
  * A <code>ReParagraphBuilder</code> changes the presentation of the given text
- * inside the paragraph. It should <bold>never</bold> change the text!
+ * inside the paragraph. It should <b>never</b> change the text!
  */
 class ReParagraphBuilder {
 public:
index ea6556fc64f36bba90949ab35e0237b92732066b..946f3ad1d880da64ee9a750e8f146f3171b55ecb 100644 (file)
@@ -411,7 +411,9 @@ void ReSettings::writeSettings() {
 /**
  * Constructor.
  *
- * @param delay        time between first change of setting and storage in seconds
+ * @param file         the file to store the settings
+ * @param logger       the logger
+ * @param delay                time between first change of setting and storage in seconds
  */
 ReDelayedStorage::ReDelayedStorage(const QString& file, ReLogger* logger,
                                                                   int delay) :
index f59c4282e8ad028f075e7b36856e29bc0a30939b..5c1c08da32fd99157acb43e56e752b71fcb76393 100644 (file)
@@ -21,6 +21,7 @@ enum {
  * Constructor.
  *
  * @param filename  filename with path of the storage file
+ * @param logger       the logger
  */
 ReStateStorage::ReStateStorage(const QString& filename, ReLogger* logger) :
                m_filename(filename),
@@ -136,7 +137,7 @@ const QByteArray& ReStateStorage::form() const {
  * Returns the full name of a widget.
  *
  * @param name  the name of the widget
- * @return      <form name> '.' <name> or <name> (if no form name is set)
+ * @return      &lt;form name&gt; '.' &lt;name&gt; or &lt;name&gt; (if no form name is set)
  */
 QByteArray ReStateStorage::fullname(const char* name) {
        QByteArray rc;
@@ -315,6 +316,7 @@ void ReStateStorage::store(const QComboBox* combo, const char* name,
  *
  * @param name the key of the key-value-pair. May be extended by <code>m_form</code>
  * @param value        the value to store
+ * @param index        -1 or the index in the array
  */
 void ReStateStorage::store(const char* name, const QString& value, int index) {
        if (initForWrite()) {
index 68df2b2a530f9a2ebf97d15df3e720f0f3ee1424..9d32a31333612ab4a428103d371293f94e3d9ce8 100644 (file)
@@ -21,6 +21,7 @@
  * Tests whether a point is inside the rectangle (including border).
  * @param rect  rectangle to test
  * @param point point to test
+ * @param what description of the caller
  * @return      <code>true</code>: the point lays inside the rectangle
  */
 inline bool rectContains(const QRect& rect, const QPoint& point,
index 36d72b8abbf7613eeeada01e0ebb9aae8947e727..b341c761ca6e15bda3016d05889f6495fc822660 100644 (file)
@@ -75,8 +75,8 @@ ReFileTable::~ReFileTable()
  *
  * @param row       the row number
  * @param withNode  true: the node will be appended to the result
- * @param uriFormat true: example: file:///u:/tmp/file.txt<br>
- *                  false: example: u:\tmp\file.txt
+ * @param uriFormat true: example: "file:///u:/tmp/file.txt"<br>
+ *                  false: example: "u:\\tmp\\file.txt"
  * @return          the absolute path of the file given by the row
  */
 QString ReFileTable::buildAbsPath(int row, bool withNode, bool uriFormat){
@@ -247,8 +247,6 @@ void ReFileTable::dropEvent(QDropEvent *event)
 
 /**
  * Fills the table with the file data of the filesystem.
- *
- * @param table        OUT: table to fill
  */
 void ReFileTable::fillTable()
 {
@@ -408,7 +406,8 @@ bool ReFileTable::say(ReLoggerLevel level, const QString& message)
 /**
  * Handles the double click of a table cell.
  *
- * @param index        the abstract index of the cell
+ * @param row          the row of the cell has been clicked
+ * @param column       the column of the cell has been clicked
  */
 void ReFileTable::tableDoubleClicked(int row, int column){
        openEntry(row);
index ef9350cacda2bfa08faa74303b7da607a7ccd2a7..4becc0562667c514b689aaa64007373ecca22d70 100644 (file)
@@ -12,7 +12,7 @@
 /** @file
  * @brief Implements 2 dimensional matrices.
  */
-/** @file rplmath/rplmatrix.hpp
+/** @file math/ReMatrix.hpp
  *
  * @brief Definitions for 2 dimensional matrices.
  */
diff --git a/net/ReTCPClient.cpp b/net/ReTCPClient.cpp
deleted file mode 100644 (file)
index 7800d26..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * ReTCPClient.cpp
- *
- * License: Public Domain
- * You can use and modify this file without any restriction.
- * Do what you want.
- * No warranties and disclaimer of any damages.
- * You also can use this license: http://www.wtfpl.net
- * The latest sources: https://github.com/republib
- */
-#include "base/rebase.hpp"
-#include "math/remath.hpp"
-#include "net/renet.hpp"
-
-enum {
-       LOC_1 = LOC_FIRST_OF(LOC_TCPCLIENT), // 10701
-       LOC_HANDLE_ERROR_1,
-       LOC_SET_REMOTE_ADDRESS_1,
-};
-
-/** @class RplTcpClient rpltcpclient.hpp "rplnet/rpltcpclient.hpp"
- *
- * @brief Implements a TCP client.
- *
- * Use the protocol defined at <code>ReTCPServer</code>.
- */
-/**
- * @brief Constructor.
- *
- * @param configurator  some parameters will be get from this configurator
- * @param thread        current thread. Used for <code>sleep()</code>
- * @param terminator    NULL or for controlled termination
- * @param logger        a logger
- */
-RplTcpClient::RplTcpClient(ReConfigurator& configurator, QThread* thread,
-    ReTerminator* terminator, ReLogger* logger) :
-           m_peer(new ReTCPPeer(configurator, thread, terminator, false, logger)),
-           m_logger(logger),
-           m_configurator(configurator) {
-       QByteArray ip = configurator.asString(ReNetConfig::IP, "localhost");
-       int port = configurator.asInt(ReNetConfig::PORT, 12345);
-       if (!ip.isEmpty() && port != 0)
-               setRemoteAddress(ip.constData(), port);
-}
-
-/**
- * @brief Destructor.
- */
-RplTcpClient::~RplTcpClient() {
-       delete m_peer;
-       m_peer = NULL;
-}
-
-/**
- * @brief Defines the remote address for a client.
- * @param ip    NULL or the ip to connect
- * @param port  0 or the port to connect
- */
-void RplTcpClient::setRemoteAddress(const char* ip, int port) {
-       QTcpSocket* socket = (QTcpSocket*) m_peer->getSocket();
-       delete socket;
-       if (ip == NULL || port == 0)
-               m_peer->setSocket(NULL);
-       else {
-               socket = new QTcpSocket();
-               connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this,
-                   SLOT(handleError(QAbstractSocket::SocketError)));
-               m_peer->setSocket(socket);
-               m_peer->setAddress(ip, port);
-               m_logger->logv(LOG_INFO, LOC_SET_REMOTE_ADDRESS_1, "connect with %s:%d",
-                   ip, port);
-               socket->connectToHost(ReString(ip), port);
-               socket->waitForConnected();
-       }
-}
-
-/**
- * @brief Returns the peer info.
- * @return the peer info
- */
-ReTCPPeer* RplTcpClient::getPeer() const {
-       return m_peer;
-}
-
-/**
- * @brief Handles a network error.
- *
- * @param socketError   the error code
- */
-void RplTcpClient::handleError(QAbstractSocket::SocketError socketError) {
-       if (m_logger != NULL)
-               m_logger->logv(LOG_ERROR, LOC_HANDLE_ERROR_1, "Network error %d",
-                   socketError);
-}
-
-/** @class RplClientThread rpltcpclient.hpp "rplnet/rpltcpclient.hpp"
- *
- * @brief Implements a thread usable for a tcp client.
- *
- * Each <code>ReTCPPeer</code> needs a thread. Therefore this class provides all things
- * needed for a <code>RplTcpClient</code> which uses a <code>ReTCPPeer</code>.
- */
-
-/**
- * @brief Constructor.
- *
- * @param configurator  delivers some connection parameters
- * @param logger        the logger. If NULL a default logger will be used
- */
-RplClientThread::RplClientThread(ReConfigurator& configurator, ReLogger* logger) :
-           m_client(NULL),
-           m_logger(logger),
-           m_configurator(configurator),
-           m_ownsLogger(false) {
-       m_client = new RplTcpClient(configurator, this, NULL, logger);
-}
-/**
- * @brief Destructor.
- */
-RplClientThread::~RplClientThread() {
-       delete m_client;
-       m_client = NULL;
-       if (m_ownsLogger) {
-               delete m_logger;
-               m_logger = NULL;
-       }
-}
-/**
- * @brief Returns the peer which can be used for sending and receiving messages.
- *
- * @return the peer
- */
-ReTCPPeer* RplClientThread::getPeer() const {
-       return m_client->getPeer();
-}
-
-/**
- * @brief Returns the logger of the thread.
- * @return the logger
- */
-ReLogger* RplClientThread::getLogger() const {
-       return m_logger;
-}
-
-/**
- * @brief Contains the main method of the thread.
- *
- * Calls <code>doIt()</code> for the real things.
- */
-void RplClientThread::run() {
-       doIt();
-}
diff --git a/net/ReTCPClient.hpp b/net/ReTCPClient.hpp
deleted file mode 100644 (file)
index 24084f1..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * ReTCPClient.hpp
- *
- * License: Public Domain
- * You can use and modify this file without any restriction.
- * Do what you want.
- * No warranties and disclaimer of any damages.
- * You also can use this license: http://www.wtfpl.net
- * The latest sources: https://github.com/republib
- */
-#ifndef RETCPCLIENT_HPP
-#define RETCPCLIENT_HPP
-
-#ifndef REBASE_HPP
-#include "base/rebase.hpp"
-#include "math/remath.hpp"
-#include "net/renet.hpp"
-#endif
-
-class ReTCPPeer;
-
-class RplTcpClient: public QObject {
-       Q_OBJECT
-public:
-       RplTcpClient(ReConfigurator& configurator, QThread* thread,
-           ReTerminator* terminator, ReLogger* logger = NULL);
-       virtual ~RplTcpClient();
-private:
-       // No copy constructor: no implementation!
-       RplTcpClient(const RplTcpClient& source);
-       // Prohibits assignment operator: no implementation!
-       RplTcpClient& operator =(const RplTcpClient& source);
-public:
-       ReTCPPeer* getPeer() const;
-private:
-       void setRemoteAddress(const char* ip, int port);public slots:
-       void handleError(QAbstractSocket::SocketError socketError);
-private:
-       ReTCPPeer* m_peer;
-       ReLogger* m_logger;
-       ReConfigurator& m_configurator;
-};
-
-class RplClientThread: public QThread {
-public:
-       RplClientThread(ReConfigurator& configurator, ReLogger* logger = NULL);
-       virtual ~RplClientThread();
-private:
-       // No copy constructor: no implementation!
-       RplClientThread(const RplClientThread& source);
-       // Prohibits the assignment operator. Not implemented!
-       RplClientThread& operator=(const RplClientThread& source);
-public:
-       /**
-        * @brief Does the main task of the thread.
-        *
-        * Will be called from <code>QThread::run()</code>.
-        * The implementations of this abstract method should be call <code>getPeer()</code>
-        * to send and receive messages.
-        */
-       virtual void doIt() = 0;
-       ReTCPPeer* getPeer() const;
-       ReLogger* getLogger() const;
-private:
-       virtual void run();
-protected:
-       RplTcpClient* m_client;
-       ReLogger* m_logger;
-       ReConfigurator& m_configurator;
-private:
-       bool m_ownsLogger;
-};
-
-#endif // RETCPCLIENT_HPP
index 916e688e0ff8d0cca6aa2479811e6e0d15832600..ed473a9f9ef73b092f24f3c5a0ff9212a7d54b78 100644 (file)
@@ -24,7 +24,7 @@ enum {
 
 static int s_dummy = 0;
 
-/** @class ReTCPPeer rpltcppeer.hpp "rplnet/rpltcppeer.hpp"
+/** @class ReTCPPeer ReTCPPeer.hpp "net/ReTCPPeer.hpp"
  *
  * @brief Implements the common things for TCP server and client.
  *
index 0ee20561cbc4a557366d58948e7ca10d6ecccbc4..8c2b7c93294a69d98265b6b013646495b3af1dc8 100644 (file)
@@ -19,7 +19,7 @@ enum {
        LOC_TCP_INCOMING_CONNECTION_1,
 };
 
-/** @class ReTCPThread rpltcpserver.hpp "rplcore/rpltcpserver.hpp"
+/** @class ReTCPThread ReTCPServer.hpp "net/ReTCPServer.hpp"
  *
  * @brief Serves one connection of a multihreaded TCP server.
  *
@@ -99,7 +99,7 @@ qintptr ReTCPThread::getSocketDescriptor() const {
        return m_socketDescriptor;
 }
 
-/** @class ReTCPServer rpltcpserver.hpp "rplcore/rpltcpserver"
+/** @class ReTCPServer ReTCPServer.hpp "base/ReTCPServer.hpp"
  *
  * @brief Implements a multithreaded TCP server.
  */
@@ -138,13 +138,13 @@ void ReTCPServer::incomingConnection(qintptr socketDescriptor) {
        thread->start();
 }
 
-/** @class ReTCPThread rpltcpserver.hpp "rplcore/rpltcpserver.hpp"
+/** @class ReTCPThread ReTCPServer.hpp "net/ReTCPServer.hpp"
  *
  * @brief Defines a function pointer type to create a <code>ReTCPThread</code> instance.
  *
  */
 
-/** @class ReTaskHandler rpltcpserver.hpp "rplcore/rpltcpserver.hpp"
+/** @class ReTaskHandler ReTCPServer.hpp "net/ReTCPServer.hpp"
  *
  * @brief An abstract base class for an handler processing  an data unit.
  *
diff --git a/net/ReTcpClient.cpp b/net/ReTcpClient.cpp
new file mode 100644 (file)
index 0000000..7c5379e
--- /dev/null
@@ -0,0 +1,152 @@
+/*
+ * ReTCPClient.cpp
+ *
+ * License: Public Domain
+ * You can use and modify this file without any restriction.
+ * Do what you want.
+ * No warranties and disclaimer of any damages.
+ * You also can use this license: http://www.wtfpl.net
+ * The latest sources: https://github.com/republib
+ */
+#include "base/rebase.hpp"
+#include "math/remath.hpp"
+#include "net/renet.hpp"
+
+enum {
+       LOC_1 = LOC_FIRST_OF(LOC_TCPCLIENT), // 10701
+       LOC_HANDLE_ERROR_1,
+       LOC_SET_REMOTE_ADDRESS_1,
+};
+
+/** @class RplTcpClient ReTcpClient.hpp "net/ReTcpClient.hpp"
+ *
+ * @brief Implements a TCP client.
+ *
+ * Use the protocol defined at <code>ReTCPServer</code>.
+ */
+/**
+ * @brief Constructor.
+ *
+ * @param configurator  some parameters will be get from this configurator
+ * @param thread        current thread. Used for <code>sleep()</code>
+ * @param terminator    NULL or for controlled termination
+ * @param logger        a logger
+ */
+RplTcpClient::RplTcpClient(ReConfigurator& configurator, QThread* thread,
+    ReTerminator* terminator, ReLogger* logger) :
+           m_peer(new ReTCPPeer(configurator, thread, terminator, false, logger)),
+           m_logger(logger),
+           m_configurator(configurator) {
+       QByteArray ip = configurator.asString(ReNetConfig::IP, "localhost");
+       int port = configurator.asInt(ReNetConfig::PORT, 12345);
+       if (!ip.isEmpty() && port != 0)
+               setRemoteAddress(ip.constData(), port);
+}
+
+/**
+ * @brief Destructor.
+ */
+RplTcpClient::~RplTcpClient() {
+       delete m_peer;
+       m_peer = NULL;
+}
+
+/**
+ * @brief Defines the remote address for a client.
+ * @param ip    NULL or the ip to connect
+ * @param port  0 or the port to connect
+ */
+void RplTcpClient::setRemoteAddress(const char* ip, int port) {
+       QTcpSocket* socket = (QTcpSocket*) m_peer->getSocket();
+       delete socket;
+       if (ip == NULL || port == 0)
+               m_peer->setSocket(NULL);
+       else {
+               socket = new QTcpSocket();
+               connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this,
+                   SLOT(handleError(QAbstractSocket::SocketError)));
+               m_peer->setSocket(socket);
+               m_peer->setAddress(ip, port);
+               m_logger->logv(LOG_INFO, LOC_SET_REMOTE_ADDRESS_1, "connect with %s:%d",
+                   ip, port);
+               socket->connectToHost(ReString(ip), port);
+               socket->waitForConnected();
+       }
+}
+
+/**
+ * @brief Returns the peer info.
+ * @return the peer info
+ */
+ReTCPPeer* RplTcpClient::getPeer() const {
+       return m_peer;
+}
+
+/**
+ * @brief Handles a network error.
+ *
+ * @param socketError   the error code
+ */
+void RplTcpClient::handleError(QAbstractSocket::SocketError socketError) {
+       if (m_logger != NULL)
+               m_logger->logv(LOG_ERROR, LOC_HANDLE_ERROR_1, "Network error %d",
+                   socketError);
+}
+
+/** @class RplClientThread ReTcpClient.hpp "net/ReTcpClient.hpp"
+ *
+ * @brief Implements a thread usable for a tcp client.
+ *
+ * Each <code>ReTCPPeer</code> needs a thread. Therefore this class provides all things
+ * needed for a <code>RplTcpClient</code> which uses a <code>ReTCPPeer</code>.
+ */
+
+/**
+ * @brief Constructor.
+ *
+ * @param configurator  delivers some connection parameters
+ * @param logger        the logger. If NULL a default logger will be used
+ */
+RplClientThread::RplClientThread(ReConfigurator& configurator, ReLogger* logger) :
+           m_client(NULL),
+           m_logger(logger),
+           m_configurator(configurator),
+           m_ownsLogger(false) {
+       m_client = new RplTcpClient(configurator, this, NULL, logger);
+}
+/**
+ * @brief Destructor.
+ */
+RplClientThread::~RplClientThread() {
+       delete m_client;
+       m_client = NULL;
+       if (m_ownsLogger) {
+               delete m_logger;
+               m_logger = NULL;
+       }
+}
+/**
+ * @brief Returns the peer which can be used for sending and receiving messages.
+ *
+ * @return the peer
+ */
+ReTCPPeer* RplClientThread::getPeer() const {
+       return m_client->getPeer();
+}
+
+/**
+ * @brief Returns the logger of the thread.
+ * @return the logger
+ */
+ReLogger* RplClientThread::getLogger() const {
+       return m_logger;
+}
+
+/**
+ * @brief Contains the main method of the thread.
+ *
+ * Calls <code>doIt()</code> for the real things.
+ */
+void RplClientThread::run() {
+       doIt();
+}
diff --git a/net/ReTcpClient.hpp b/net/ReTcpClient.hpp
new file mode 100644 (file)
index 0000000..24084f1
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * ReTCPClient.hpp
+ *
+ * License: Public Domain
+ * You can use and modify this file without any restriction.
+ * Do what you want.
+ * No warranties and disclaimer of any damages.
+ * You also can use this license: http://www.wtfpl.net
+ * The latest sources: https://github.com/republib
+ */
+#ifndef RETCPCLIENT_HPP
+#define RETCPCLIENT_HPP
+
+#ifndef REBASE_HPP
+#include "base/rebase.hpp"
+#include "math/remath.hpp"
+#include "net/renet.hpp"
+#endif
+
+class ReTCPPeer;
+
+class RplTcpClient: public QObject {
+       Q_OBJECT
+public:
+       RplTcpClient(ReConfigurator& configurator, QThread* thread,
+           ReTerminator* terminator, ReLogger* logger = NULL);
+       virtual ~RplTcpClient();
+private:
+       // No copy constructor: no implementation!
+       RplTcpClient(const RplTcpClient& source);
+       // Prohibits assignment operator: no implementation!
+       RplTcpClient& operator =(const RplTcpClient& source);
+public:
+       ReTCPPeer* getPeer() const;
+private:
+       void setRemoteAddress(const char* ip, int port);public slots:
+       void handleError(QAbstractSocket::SocketError socketError);
+private:
+       ReTCPPeer* m_peer;
+       ReLogger* m_logger;
+       ReConfigurator& m_configurator;
+};
+
+class RplClientThread: public QThread {
+public:
+       RplClientThread(ReConfigurator& configurator, ReLogger* logger = NULL);
+       virtual ~RplClientThread();
+private:
+       // No copy constructor: no implementation!
+       RplClientThread(const RplClientThread& source);
+       // Prohibits the assignment operator. Not implemented!
+       RplClientThread& operator=(const RplClientThread& source);
+public:
+       /**
+        * @brief Does the main task of the thread.
+        *
+        * Will be called from <code>QThread::run()</code>.
+        * The implementations of this abstract method should be call <code>getPeer()</code>
+        * to send and receive messages.
+        */
+       virtual void doIt() = 0;
+       ReTCPPeer* getPeer() const;
+       ReLogger* getLogger() const;
+private:
+       virtual void run();
+protected:
+       RplTcpClient* m_client;
+       ReLogger* m_logger;
+       ReConfigurator& m_configurator;
+private:
+       bool m_ownsLogger;
+};
+
+#endif // RETCPCLIENT_HPP
index 0bb63abf7f9e930f21bf2429755ee3dc4438ecbf..a4f93ec9bc83e51c7036dc0dc027581b3e56cb24 100644 (file)
 #include "base/rebase.hpp"
 #include "os/reos.hpp"
 
+/**
+ * @file
+ *
+ * Format of a file (on the hosted FS):
+ * <pre> random (8 byte)
+ * checksum (from offset 16) (8 byte, encrypted with resetted random)
+ * marker (2 byte, encrypted with resetted random)
+ * flags (2 byte) see ReFileHeaderOptions
+ * reserved (4 byte)
+ * encrypted file content
+ * checksum of the original file content
+ * </pre>
+ * Checksum: sum_n ^= content_n * FAC + INC,
+ * operands 8 byte signed integer, little endian
+ * missing bytes (to 8 byte boundary) are padded with 0
+ * FAC=0x7b644ac5d1187d25, INC=0x6b85115d6064365b
+ */
 enum {
        LOC_ADD_ENTRY_1 = LOC_FIRST_OF(LOC_CRYPTFILESYSTEM), // 12301
        LOC_REMOVE_ENTRY_1,             // 12302
@@ -18,10 +35,11 @@ enum {
        LOC_READ_META_FILE_3,   // 12305
        LOC_WRITE_META_1,               // 12306
        LOC_WRITE_META_2,               // 12307
+       LOC_MAKE_DIR_1,                 // 12308
 };
 
 const int ReCryptFileSystem::NODE_LENGHT = 44;
-const int ReCryptFileSystem::MARKER_LENGHT = 4;
+const int ReCryptFileSystem::MARKER_LENGHT = 2;
 const int ReCryptFileSystem::CHECKSUM_LENGHT = 16;
 const int ReCryptFileSystem::HEADER_LENGTH = sizeof(int64_t)
                + ReCryptFileSystem::NODE_LENGHT
@@ -41,8 +59,8 @@ const int ReCryptDirectory::MAX_ENTRY_SIZE = sizeof(ReCryptDirectory::FileEntry_
  *
  * @param hostFileSystem       the filesystem which does the storage (with
  *                                                     encrypted names and content
- * @param nameRandom           a pseudo random generator for names
  * @param contentRandom                a pseudo random generator for content
+ * @param logger                       the logger
  */
 ReCryptFileSystem::ReCryptFileSystem(ReFileSystem& hostFileSystem,
        ReRandomizer& contentRandom, ReLogger* logger) :
@@ -58,21 +76,56 @@ ReCryptFileSystem::ReCryptFileSystem(ReFileSystem& hostFileSystem,
 ReCryptFileSystem::~ReCryptFileSystem() {
 }
 
+QString ReCryptFileSystem::canonicalPathOf(const QString& path)
+{
+       return ReFileUtils::cleanPath(path);
+}
+
 /** Frees resources like open files.
  */
 void ReCryptFileSystem::close()
 {
 }
 
+/**
+ * Tests whether a file exists in the current directory.
+ *
+ * @param node         filename without path
+ * @param metaInfo     OUT: info of the found file. May be NULL
+ * @return
+ */
+bool ReCryptFileSystem::exists(const QString& node, ReFileMetaData* metaInfo) const
+{
+       const ReFileMetaData* info = find(node);
+       bool rc = info != NULL;
+       if (rc && metaInfo != NULL)
+               *metaInfo = *info;
+       return rc;
+}
+
 /**
  * Fills a list with the items of the current directory.
  *
- * @param matcher      the matching processor
+ * @param matcher      the matching processor for selecting the files
+ * @param list         OUT: the list of the found files
+ * @param options      options to define what kind of files should be found
  * @return                     the count of the found entries (<code>list.size()</code>)
  */
 int ReCryptFileSystem::listInfos(const ReIncludeExcludeMatcher& matcher,
-       ReFileMetaDataList& list, ListOptions options) {
-       return 0;
+                       ReFileMetaDataList& list, ListOptions options) {
+       ReFileMetaDataList::const_iterator it;
+       bool withDirs = (options & LO_DIRS) != 0;
+       bool withFiles = (options & LO_FILES) != 0;
+       bool filterDirs = (options & LO_NAME_FILTER_FOR_DIRS);
+       list.clear();
+       for (it = m_list.cbegin(); it != m_list.cend(); ++it){
+               bool isDir = S_ISDIR(it->m_mode);
+               if ( (isDir && ! withDirs) || (! isDir && ! withFiles))
+                       continue;
+               if ((! filterDirs && isDir) || matcher.matches(it->m_node))
+                       list.append(*it);
+       }
+       return list.length();
 }
 
 /**
@@ -82,7 +135,31 @@ int ReCryptFileSystem::listInfos(const ReIncludeExcludeMatcher& matcher,
  * @return             EC_SUCCESS or error code
  */
 ReFileSystem::ErrorCode ReCryptFileSystem::makeDir(const QString& node) {
-       return EC_SUCCESS;
+       ReFileMetaData file;
+       ErrorCode rc = EC_SUCCESS;
+       if (exists(node, &file)){
+               if ((S_ISDIR(file.m_mode)))
+                       rc = EC_DIR_ALREADY_EXISTS;
+               else
+                       rc = EC_FILE_ALREADY_EXISTS;
+       } else {
+               QDateTime now = QDateTime::currentDateTime();
+               int id = ++m_maxFileId;
+               QString hostName = buildHostedNode(id);
+               ErrorCode rc2 = m_host.makeDir(hostName);
+               if (rc2 != EC_SUCCESS){
+                       m_logger2->logv(LOG_ERROR, LOC_MAKE_DIR_1, "cannot create hosted directory %s: %s",
+                                                  hostName.toUtf8().constData(),
+                                                  errorMessage(rc2).toUtf8().constData());
+                       rc = EC_REMOTE_MKDIR;
+               } else {
+                       m_list.append(ReFileMetaData(node, now, now, m_osPermissions.m_user,
+                                                                                m_osPermissions.m_group, m_osPermissions.m_dirMode, 0,
+                                                                                id));
+                       m_changed = true;
+               }
+       }
+       return rc;
 }
 
 /**
@@ -139,7 +216,7 @@ ReFileSystem::ErrorCode ReCryptFileSystem::setProperties(const ReFileMetaData& s
 /**
  * Writes a buffer to a file.
  *
- * @param node         the file to write (without path, inside the current directory)
+ * @param target       the file to write (without path, inside the current directory)
  * @param offset       first position to write
  * @param buffer       content to write
  * @return                     EC_SUCCESS or error code
@@ -166,8 +243,9 @@ void ReCryptFileSystem::addFile(const QString& node)
 /**
  * Constructor
  *
- * @param parent       the parent filesystem
- * @param logger       the logger
+ * @param contentRandom        the pseudo random generator uses for encryption
+ * @param parent               the hosting filesystem
+ * @param logger               the logger
  */
 ReCryptDirectory::ReCryptDirectory(ReRandomizer& contentRandom,
                                                                   ReCryptFileSystem* parent, ReLogger* logger) :
@@ -175,7 +253,7 @@ ReCryptDirectory::ReCryptDirectory(ReRandomizer& contentRandom,
        m_list(),
        m_parent(parent),
        m_changed(false),
-       m_logger(logger),
+       m_logger2(logger),
        m_currentNode(),
        m_fileBuffer(),
        m_entryBuffer(),
index 42c49cc0233dd4be987297406e0c3ec947747d23..d24707601f1e5189d6d081b505250b389c7e2c3b 100644 (file)
@@ -55,7 +55,8 @@ protected:
        ReFileMetaDataList m_list;
        ReCryptFileSystem* m_parent;
        bool m_changed;
-       ReLogger* m_logger;
+       // to avoid ambigousity:
+       ReLogger* m_logger2;
        QString m_currentNode;
        QByteArray m_fileBuffer;
        QByteArray m_entryBuffer;
@@ -87,7 +88,9 @@ public:
                ReRandomizer& contentRandom, ReLogger* logger);
        ~ReCryptFileSystem();
 public:
+       virtual QString canonicalPathOf(const QString& path);
        virtual void close();
+       virtual bool exists(const QString& node, ReFileMetaData* metaInfo) const;
        virtual int listInfos(const ReIncludeExcludeMatcher& matcher,
                ReFileMetaDataList& list, ListOptions options = LO_UNDEF);
        virtual ErrorCode makeDir(const QString& node);
index e482d5e830acfb024415b0d3e196048d7767e700..7fc22eef3cd89eb999dfa628b405009468862aae 100644 (file)
@@ -36,6 +36,7 @@ enum {
  * Constructor.
  *
  * @param name the name of the filesystem
+ * @param logger       the logger
  */
 ReFileSystem::ReFileSystem(const QString& name, ReLogger* logger) :
                m_name(name),
@@ -161,7 +162,7 @@ QString ReFileSystem::errorMessage(ReFileSystem::ErrorCode errorCode)
        case EC_POSITION:
                rc = QObject::tr("cannot set new file position");
                break;
-       case EC_ALREADY_EXISTS:
+       case EC_FILE_ALREADY_EXISTS:
                rc = QObject::tr("file already exists");
                break;
        case EC_NOT_EXISTS:
@@ -176,6 +177,12 @@ QString ReFileSystem::errorMessage(ReFileSystem::ErrorCode errorCode)
        case EC_MARKER:
                rc = QObject::tr("marker mismatch");
                break;
+       case EC_DIR_ALREADY_EXISTS:
+               rc = QObject::tr("directory already exists");
+               break;
+       case EC_REMOTE_MKDIR:
+               rc = QObject::tr("remote directory cannot be built");
+               break;
        default:
                rc = QObject::tr("unknown error code: ") + QString::number(errorCode);
                break;
@@ -360,6 +367,33 @@ void ReLocalFileSystem::close() {
        }
 }
 
+/**
+ * Search a file in the current directory given by name.
+ *
+ * @param node         the filename without path
+ * @param metaData     OUT: the info of the found file. May be NULL
+ * @return                     <code>true</code>: the file was found
+ */
+bool ReLocalFileSystem::exists(const QString& node, ReFileMetaData* metaData) const
+{
+       QByteArray full;
+       full.resize(m_directory.length() + 10 + node.length());
+       full = m_directory.toUtf8();
+       full.append(node.toUtf8());
+       struct stat info;
+       bool rc = stat(full.constData(), &info) != 0;
+       if (rc && metaData != NULL){
+               metaData->m_node = node;
+               metaData->m_modified = QDateTime::fromTime_t(info.st_mtime);
+               metaData->m_created = QDateTime::fromTime_t(info.st_ctime);
+               metaData->m_owner = info.st_uid;
+               metaData->m_group = info.st_gid;
+               metaData->m_mode = info.st_mode;
+               metaData->m_size = info.st_size;
+       }
+       return rc;
+}
+
 /**
  * Fills a list with the items of the current directory.
  *
@@ -430,7 +464,7 @@ ReFileSystem::ErrorCode ReLocalFileSystem::makeDir(const QString& node) {
        } else if (m_dir.exists(node)) {
                m_logger->logv(LOG_ERROR, LOC_MAKE_DIR_2, "node exists already: %s",
                        fullNameAsUTF8(node).constData());
-               rc = EC_ALREADY_EXISTS;
+               rc = EC_FILE_ALREADY_EXISTS;
        } else if (!m_dir.mkdir(node)) {
                m_logger->logv(LOG_ERROR, LOC_MAKE_DIR_2, "cannot create directory: %s",
                        fullNameAsUTF8(node).constData());
@@ -607,7 +641,7 @@ ReFileSystem::ErrorCode ReLocalFileSystem::setProperties(
                                if (m_dir.exists(source.m_node)) {
                                        if (name.length() == 0)
                                                name = fullNameAsUTF8(target.m_node);
-                                       rc = EC_ALREADY_EXISTS;
+                                       rc = EC_FILE_ALREADY_EXISTS;
                                        m_logger->logv(LOG_ERROR, LOC_SET_PROPERTIES_2,
                                                "renaming impossible: node exists: %s",
                                                name.constData());
@@ -737,6 +771,7 @@ ReFileMetaData::ReFileMetaData() :
  * @param group                the group of the file (GID)
  * @param mode         rights and attributs of the file
  * @param size         the filesize (0 for directories)
+ * @param id           an identifier of the file unique inside the directory
  */
 ReFileMetaData::ReFileMetaData(const QString& node, const QDateTime& modified,
        const QDateTime& created, int owner, int group, mode_t mode, int64_t size,
index 26082813576860966d9f57b03c4d9ca41865cb20..8c6dd0047927de48f9f184e4e7388fbc880fd3e9 100644 (file)
@@ -65,11 +65,13 @@ public:
                EC_NOT_WRITEABLE,
                EC_WRITE,
                EC_POSITION,
-               EC_ALREADY_EXISTS,
+               EC_FILE_ALREADY_EXISTS,
                EC_NOT_EXISTS,
                EC_RENAME,
                EC_HEADER_LENGTH,
                EC_MARKER,
+               EC_DIR_ALREADY_EXISTS,
+               EC_REMOTE_MKDIR,
        };
 
 public:
@@ -89,13 +91,21 @@ public:
         * @return      the name of the current directory
         */
        virtual const QString& directory() const;
+       /** Search a file in the current directory given by name.
+        * @param node          the filename without path
+        * @param metaData      OUT: the info of the found file. May be NULL
+        * @return                      <code>true</code>: the file was found
+        */
+       virtual bool exists(const QString& node, ReFileMetaData* metaData = NULL)
+       const = 0;
        /** Fills a list with the items of the current directory.
         * @param matcher       the matching processor
+        * @param list          OUT: the found files
         * @param options       a set (bitmap) of options, e.g. LO_FILES | LO_DIRS
         * @return                      the count of the found entries (<code>list.size()</code>)
         */
        virtual int listInfos(const ReIncludeExcludeMatcher& matcher,
-               ReFileMetaDataList& list, ListOptions opts
+               ReFileMetaDataList& list, ListOptions options
                                                  = ListOptions(LO_FILES | LO_DIRS )) = 0;
        /** Creates a directory.
         * @param node  the name without path (in the current directory)
@@ -133,7 +143,7 @@ public:
        virtual ErrorCode setProperties(const ReFileMetaData& source,
                ReFileMetaData& target, bool force) = 0;
        /** Writes a buffer to a file.
-        * @param node          the file to write (without path, inside the current directory)
+        * @param target        the file to write (without path, inside the current directory)
         * @param offset        first position to write
         * @param buffer        content to write
         * @return                      EC_SUCCESS or error code
@@ -205,6 +215,7 @@ public:
        virtual QString canonicalPathOf(const QString& path);
        // ReFileSystem interface
        virtual void close();
+       virtual bool exists(const QString& node, ReFileMetaData* metaData = NULL) const;
        virtual int listInfos(const ReIncludeExcludeMatcher& matcher,
                ReFileMetaDataList& list, ListOptions options);
        ErrorCode makeDir(const QString& node);
index ae09ecc964c98f86de2edaa67ed65c33602d9d26..a8ef08cf67b4ee892893a3207d8163933b544fdb 100644 (file)
@@ -652,8 +652,8 @@ ReByteBuffer& ReDirEntryFilter::serialize(ReByteBuffer& sequence) {
  * Tests whether an entry matches the conditions of the filter.
  *
  * @param entry                entry to test
- * @return                     <true>: the entry matches the conditions of the filter<br>
- *                                     <false>: otherwise
+ * @return                     <code>true</code>: the entry matches the conditions of the filter<br>
+ *                                     <code>false</code>: otherwise
  */
 bool ReDirEntryFilter::match(ReDirStatus_t& entry) {
        bool rc = false;
@@ -712,8 +712,8 @@ ReDirTreeStatistic::ReDirTreeStatistic() :
  * @param append               <code>true</code>: the string will be appended to the buffer<br>
  *                                             <code>false</code>: the buffer will be cleared at the beginning
  * @param formatFiles  the <code>sprintf</code> format for the file count, e.g. "%8d"
- * @param formatSized  the <code>sprintf</code> format for the MByte format, e.g. "%12.6f"
- * @param formatFiles  the <code>sprintf</code> format for the directory count, e.g. "%6d"
+ * @param formatSizes  the <code>sprintf</code> format for the MByte format, e.g. "%12.6f"
+ * @param formatDirs   the <code>sprintf</code> format for the directory count, e.g. "%6d"
  * @return                             a human readable string
  */
 const char* ReDirTreeStatistic::statisticAsString(ReByteBuffer& buffer,
@@ -767,6 +767,8 @@ bool ReTraceUnit::trace(const char* message) {
  * Constructor.
  *
  * @param base         the base directory. The traversal starts at this point
+ * @param tracer       actor doing the trace
+ * @param logger       the logger
  */
 ReTraverser::ReTraverser(const char* base, ReTraceUnit* tracer,
     ReLogger* logger) :
@@ -935,9 +937,9 @@ ReDirStatus_t* ReTraverser::nextFile(int& level, ReDirEntryFilter* filter) {
  * @param parent       the parent directory of the entry
  * @param node      the name of the directory belonging to the entry (without path)
  * @param level            the index of the entry in the stack.<br>
- *                  If < 0: m_levels and m_path will not be changed
+ *                  If &lt; 0: m_levels and m_path will not be changed
  * @return          <code>true</code>: a new file is available<br>
- *                  <cude>false/code>: findFirstEntry() signals: no entry.
+ *                  <code>false</code>: findFirstEntry() signals: no entry.
  */
 bool ReTraverser::initEntry(const ReByteBuffer& parent, const char* node,
     int level) {