From 6f74402e29dcee96ce9dae84ec5f9b955e930667 Mon Sep 17 00:00:00 2001 From: Dmitri Naumov <github@naumov.de> Date: Mon, 23 Mar 2020 12:34:00 +0100 Subject: [PATCH] Remove ThirdParty/logog folder. --- ThirdParty/logog/CMakeLists.txt | 23 - ThirdParty/logog/doc/make-doxygen.bat | 2 - ThirdParty/logog/doc/overview.dox | 991 ------------- ThirdParty/logog/doxyfile | 1716 ----------------------- ThirdParty/logog/include/api.hpp | 47 - ThirdParty/logog/include/checkpoint.hpp | 31 - ThirdParty/logog/include/const.hpp | 90 -- ThirdParty/logog/include/formatter.hpp | 89 -- ThirdParty/logog/include/logog.hpp | 36 - ThirdParty/logog/include/macro.hpp | 240 ---- ThirdParty/logog/include/message.hpp | 45 - ThirdParty/logog/include/mutex.hpp | 98 -- ThirdParty/logog/include/node.hpp | 142 -- ThirdParty/logog/include/object.hpp | 221 --- ThirdParty/logog/include/platform.hpp | 195 --- ThirdParty/logog/include/socket.hpp | 150 -- ThirdParty/logog/include/statics.hpp | 74 - ThirdParty/logog/include/string.hpp | 115 -- ThirdParty/logog/include/target.hpp | 176 --- ThirdParty/logog/include/thread.hpp | 121 -- ThirdParty/logog/include/timer.hpp | 42 - ThirdParty/logog/include/topic.hpp | 203 --- ThirdParty/logog/include/unittest.hpp | 151 -- ThirdParty/logog/readme.txt | 11 - ThirdParty/logog/src/api.cpp | 74 - ThirdParty/logog/src/checkpoint.cpp | 30 - ThirdParty/logog/src/formatter.cpp | 238 ---- ThirdParty/logog/src/lobject.cpp | 177 --- ThirdParty/logog/src/logog.vcproj | 323 ----- ThirdParty/logog/src/lstring.cpp | 497 ------- ThirdParty/logog/src/message.cpp | 69 - ThirdParty/logog/src/mutex.cpp | 92 -- ThirdParty/logog/src/node.cpp | 351 ----- ThirdParty/logog/src/platform.cpp | 11 - ThirdParty/logog/src/socket.cpp | 10 - ThirdParty/logog/src/statics.cpp | 57 - ThirdParty/logog/src/target.cpp | 345 ----- ThirdParty/logog/src/timer.cpp | 80 -- ThirdParty/logog/src/topic.cpp | 454 ------ ThirdParty/logog/src/unittest.cpp | 128 -- ThirdParty/logog/test/CMakeLists.txt | 2 - ThirdParty/logog/test/test.cpp | 837 ----------- ThirdParty/logog/test/test.sln | 41 - ThirdParty/logog/test/test.vcproj | 231 --- ThirdParty/logog/test/test.vcproj.lnt | 11 - 45 files changed, 9067 deletions(-) delete mode 100644 ThirdParty/logog/CMakeLists.txt delete mode 100644 ThirdParty/logog/doc/make-doxygen.bat delete mode 100644 ThirdParty/logog/doc/overview.dox delete mode 100644 ThirdParty/logog/doxyfile delete mode 100644 ThirdParty/logog/include/api.hpp delete mode 100644 ThirdParty/logog/include/checkpoint.hpp delete mode 100644 ThirdParty/logog/include/const.hpp delete mode 100644 ThirdParty/logog/include/formatter.hpp delete mode 100644 ThirdParty/logog/include/logog.hpp delete mode 100644 ThirdParty/logog/include/macro.hpp delete mode 100644 ThirdParty/logog/include/message.hpp delete mode 100644 ThirdParty/logog/include/mutex.hpp delete mode 100644 ThirdParty/logog/include/node.hpp delete mode 100644 ThirdParty/logog/include/object.hpp delete mode 100644 ThirdParty/logog/include/platform.hpp delete mode 100644 ThirdParty/logog/include/socket.hpp delete mode 100644 ThirdParty/logog/include/statics.hpp delete mode 100644 ThirdParty/logog/include/string.hpp delete mode 100644 ThirdParty/logog/include/target.hpp delete mode 100644 ThirdParty/logog/include/thread.hpp delete mode 100644 ThirdParty/logog/include/timer.hpp delete mode 100644 ThirdParty/logog/include/topic.hpp delete mode 100644 ThirdParty/logog/include/unittest.hpp delete mode 100644 ThirdParty/logog/readme.txt delete mode 100644 ThirdParty/logog/src/api.cpp delete mode 100644 ThirdParty/logog/src/checkpoint.cpp delete mode 100644 ThirdParty/logog/src/formatter.cpp delete mode 100644 ThirdParty/logog/src/lobject.cpp delete mode 100644 ThirdParty/logog/src/logog.vcproj delete mode 100644 ThirdParty/logog/src/lstring.cpp delete mode 100644 ThirdParty/logog/src/message.cpp delete mode 100644 ThirdParty/logog/src/mutex.cpp delete mode 100644 ThirdParty/logog/src/node.cpp delete mode 100644 ThirdParty/logog/src/platform.cpp delete mode 100644 ThirdParty/logog/src/socket.cpp delete mode 100644 ThirdParty/logog/src/statics.cpp delete mode 100644 ThirdParty/logog/src/target.cpp delete mode 100644 ThirdParty/logog/src/timer.cpp delete mode 100644 ThirdParty/logog/src/topic.cpp delete mode 100644 ThirdParty/logog/src/unittest.cpp delete mode 100644 ThirdParty/logog/test/CMakeLists.txt delete mode 100644 ThirdParty/logog/test/test.cpp delete mode 100644 ThirdParty/logog/test/test.sln delete mode 100644 ThirdParty/logog/test/test.vcproj delete mode 100644 ThirdParty/logog/test/test.vcproj.lnt diff --git a/ThirdParty/logog/CMakeLists.txt b/ThirdParty/logog/CMakeLists.txt deleted file mode 100644 index c32fbf5676c..00000000000 --- a/ThirdParty/logog/CMakeLists.txt +++ /dev/null @@ -1,23 +0,0 @@ -# logog needs thread support on linux -find_package( Threads ) -add_library( logog - src/api.cpp - src/checkpoint.cpp - src/formatter.cpp - src/lobject.cpp - src/lstring.cpp - src/message.cpp - src/mutex.cpp - src/node.cpp - src/platform.cpp - src/socket.cpp - src/statics.cpp - src/target.cpp - src/timer.cpp - src/topic.cpp - src/unittest.cpp -) -target_include_directories(logog SYSTEM PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) -if(BUILD_SHARED_LIBS) - install(TARGETS logog LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) -endif() diff --git a/ThirdParty/logog/doc/make-doxygen.bat b/ThirdParty/logog/doc/make-doxygen.bat deleted file mode 100644 index ec6f2db2a28..00000000000 --- a/ThirdParty/logog/doc/make-doxygen.bat +++ /dev/null @@ -1,2 +0,0 @@ -cd .. -bin\win32\dev\doxygen.exe \ No newline at end of file diff --git a/ThirdParty/logog/doc/overview.dox b/ThirdParty/logog/doc/overview.dox deleted file mode 100644 index 0baf43db1b9..00000000000 --- a/ThirdParty/logog/doc/overview.dox +++ /dev/null @@ -1,991 +0,0 @@ -/* - -Online documentation is available at http://www.logog.org. - -This is a documentation file for logog, written in doxygen format. It's not -intended to be read by a human; rather, it's intended to be read by the -doxygen formatting tool to generate help in a number of user-readable formats. - -If you wish to generate a local copy of the html documentation, then -install the doxygen utility from http://www.doxygen.org , and run the -utility from the root of the logog installation folder. A folder -named doc/html will be created with complete html documentation for the -current release of logog. - -*/ - -namespace logog { - -/*! -\mainpage logog - logger optimized for games - -\htmlonly -<a href="http://www.github.com/johnwbyrd/logog"> -<img src="download.jpg" width=120 height=90 alt="Download logog" > -</a> -\endhtmlonly - -\section introduction Introduction - -logog is a portable C++ library to -facilitate logging of real-time events in performance-oriented -applications, such as games. It is especially appropriate for projects -that have constrained memory and constrained CPU requirements. - -The latest documentation for logog is online at <a href="http://www.logog.org"> -http://www.logog.org</a>. You can download the latest tarball or zipfile -<a href="http://www.github.com/johnwbyrd/logog">here</a>. - -For the impatient, you can add logging functionality into your program -within five minutes by reading the \ref quickstart section. - -\subsection gettingstarted Getting started - -- \ref quickstart -- \ref requirements -- \ref supportedplatforms -- \ref features - -\subsection basic Basic functionality - -- \ref loggingevents -- \ref levels - -\subsection advancedfeatures Advanced functionality - -- \ref categoriesgroups -- \ref multipletargets -- \ref deferredoutput -- \ref addingnewtargets -- \ref customformatting -- \ref memorymanager -- \ref unicodesupport -- \ref performance -- \ref leakdetection - -\subsection relatedtopics Related topics - -- \ref porting -- \ref unittesting -- \ref othersystems -- \ref license - -\subsection gettinghelp Getting help - -- \ref community - -\htmlonly -<table border=0 style="background-color: #fff; padding: 5px;" cellspacing=0> - <tr><td> - <img src="http://groups.google.com/intl/en/images/logos/groups_logo_sm.gif" - height=30 width=140 alt="Google Groups"> - </td></tr> - <tr><td style="padding-left: 5px"> - <b>Subscribe to Logog</b> - </td></tr> - <form action="http://groups.google.com/group/logog/boxsubscribe"> - <input type=hidden name="hl" value="en"> - <tr><td style="padding-left: 5px;"> - Email: <input type=text name=email> - <input type=submit name="sub" value="Subscribe"> - </td></tr> -</form> -<tr><td align=right> - <a href="http://groups.google.com/group/logog?hl=en">Visit this group</a> -</td></tr> -</table> -\endhtmlonly - - -\page features Features - -Why yet another logging library? Because professional games have -very specific logging requirements that aren't met by any previous -logging system. - -logog supports the following features: - -- High performance. It is possible to disable all logging functionality -entirely within logog. In this case logog incurs zero performance -penalty on executing code. All logging functions compile to no-ops in -the case where the logging level is set to disabled. When logging is -enabled, the do-not-log control path requires exactly one boolean -comparison. All performance-critical operations have been constructed to -have constant time or near constant time performance. logog was designed -to assume that no memory or CPU time is available for logging on a final -release build of software. When compiling in final release mode, logog -is designed to compile completely away -- zero memory allocations, zero -CPU cycles spent. - -- Logging to arbitrary destinations. Log messages can be sent to stdout, -stderr, a log file or into memory, or any combination of these. Logging -classes are highly extensible, so logging to new destinations is easy to -add. - -- Multiple simultaneous logging criteria. Messages can be simultaneously -logged to different log targets with different requirements: by file, by -category, by log level, or by group. Substring matching permits -regexp-like behavior on logging criteria. - -- Limited external dependencies. logog only requires a reasonably modern -standards-compliant C++ compiler (tr1 or later). logog has limited -dependencies on STL. Those dependencies have been orchestrated to mitigate -the negative performance impacts of the STL. Additionally, those dependencies -have been abstracted into macros so that STL can easily be replaced with a somewhat -compatible template library of your own choosing. - -- Highly granular control over which message types are logged. Control -over these messages may be determined at compile-time for maximal -performance, or at run-time for interactively enabling or disabling log -message types during execution. Messages may be logged by source file, -group, category, or message contents. - -- Support for advanced logging requirements. logog's pub-sub -architecture means that logging can occur simultaneously to multiple log -targets, each with its own logging criteria. Stable base classes permit -new logging targets to be easily added. - -- Extremely configurable memory usage and policy. All memory allocations -happen after initialization time via a user-supplied memory manager (or -the default std::allocator). In other words, you can configure ALL -memory allocations to occur from custom malloc() and free() style -functions of your own authorship. - -- All allocated memory is freed after the shutdown -- logog does not -leak memory. A special compilation flag (LOGOG_LEAK_DETECTION) audits -every allocation and free within logog to discover and fix memory leaks therein. -Additionally, if you don't trust logog's internal leak detector, support exists -for auditing leaks with Microsoft's CRT library with LOGOG_LEAK_DETECTION_MICROSOFT. - -- Support for POSIX-type and Windows-type operating systems. -Support for proprietary game consoles is implicit or latent; the system -has been demonstrated to work on Xbox 360 and PS3 (with certain proprietary header -files). Support for other OSes is straightforward; all OS dependencies are encapsulated in -macros. - -- Support for multithreading. Multiple thread sources are permitted to -send logging messages at the same time. - -- Support for re-entrancy. If triggering a log message indirectly causes -another log message to be triggered, either through the memory allocator -or some other user-based policy, logog is not permitted to hang in a -multithreaded environment. - -- Unicode (wide-character) support for all strings; define LOGOG_UNICODE -and all strings go from char-based to wchar-based. - -- Verbose documentation. By far the best documented logging system -available. logog uses doxygen comments throughout. - -- Extremely permissive license. logog is released under the MIT License, -so it may be used freely in commercial as well as open-source projects, -with proper attribution to logog's authors (Gigantic Software). - -\page quickstart Quick start - -The logog system is a set of C++ header files and C++ source files. -To use them, compile all the C++ source files into a single library. -The compiler will need to reference the files in the include directory -when compiling the logog library. - -\par Build the logog library - -To make this easier, logog has been set up to compile using CMake, available -at http://www.cmake.org/ . -CMake is a free cross-platform build system, and executables are available for -most major platforms and development environments. Download and install CMake -in order to generate a build for your platform. - -For example, to build the project and libraries on Visual Studio 2008, find and launch -the Visual Studio 2008 Command Prompt at <b>Microsoft Visual Studio 2008 / Visual Studio Tools / -Visual Studio 2008 Command Prompt.</b> - -Then, to create the appropriate project files, create an empty directory, make that -directory the current directory, and run the CMake command with the logog directory as -a parameter: - -\code -mkdir logog-build -cd logog-build -cmake [path-to-logog-top-directory] -\endcode - -At this point, your directory will contain appropriate project and solution files for your -platform. Once the solution is building, the CMake program is no longer needed. -Compile and link the library for your own platform using the makefile or project files generated -for your platform. - -\par Your Hello, Logog! program - -Here is a working logog example that initializes logog, outputs some sample messages and then -terminates. - -\snippet test.cpp HelloLogog - -The most common mistake when getting started with logog is creating a Cerr or Cout -object and not destroying the object before LOGOG_SHUTDOWN(). This is a usage -error and will be detected as heap corruption by most debuggers. - -\par Integrate logog into your own project - -To use the logging library in your own project, put the following line -at the top of your source file(s): - -\code -#include "logog.hpp" -\endcode - -Additionally, make sure to add logog's /include path into the directories -your build process searches. - -At the beginning of your program, initialize logog exactly once, with this -macro: - -\code -LOGOG_INITIALIZE(); -\endcode - -\par Choose one or more output types - -To tell logog what type of output should be logged, you must first create a logog::Cerr, -a logog::Cout, or a logog::LogFile object. Once this object is instantiated, -all messages will be routed to that target. For example: - -\code -logog::Cerr errOutput; -\endcode - -Or: - -\code -logog::LogFile errFile("log.txt"); -\endcode - -It's only necessary to create one target per process, immediately after initializing -logog; you don't need to instance a different Cout, Cerr or LogFile for each class or each file. - -\par Start logging events - -To log a message in your code, use one of the following macros, in order -of severity. Arguments are assumed to be sprintf-style varargs: - -\snippet macro.hpp Shorthand - -Note the funny spellings on DBUG and ERR to avoid conflicting with existing macros -on Windows platforms. - -If it turns out that the names of these macros conflict with your existing code, -then before including the logog.hpp file, define the following constant: - -\code -#define LOGOG_USE_PREFIX 1 -\endcode - -If you enable that prefix, you may log with the following macros instead: - -\code -LOGOG_DEBUG( __VA_ARGS__ ) -LOGOG_INFO( __VA_ARGS__ ) -LOGOG_WARN3( __VA_ARGS__ ) -LOGOG_WARN2( __VA_ARGS__ ) -LOGOG_WARN1( __VA_ARGS__ ) -LOGOG_WARN( __VA_ARGS__ ) -LOGOG_ERROR( __VA_ARGS__ ) -LOGOG_ALERT( __VA_ARGS__ ) -LOGOG_CRITICAL( __VA_ARGS__ ) -LOGOG_EMERGENCY( __VA_ARGS__ ) -\endcode - -An example usage follows: - -\code -int foo = 9001; -int maxfoo = 9000; - -if ( foo > maxfoo ) -{ - WARN("Foo is over %d! Current value is %d.", maxfoo, foo ); - WARN("Since this is a warning, by default all builds will log this message!"); -} - -const char *pMessage = "message" -INFO( "This is an informational %s.", pMessage ); -\endcode - -At this point, your Target object (in this case, the errOutput object) should -be destroyed. Falling out of scope is the easiest way to achieve this. - -Then, terminate your program and logging with the following message: - -\code -LOGOG_SHUTDOWN(); -\endcode - -Lastly, compile and link with the logog library you created earlier. - -\page loggingevents Logging events in your code - -In order to log events in your code, it's important to first understand the logging -levels that are available to you. Out of the box, logog comes with these logging -levels, which are compatible with the syslog standard: - -\snippet const.hpp Level Constants - -So, the lower the level number is, the more important the logging message is. - -To log an event in your code, there exists macros for each of the logging -levels. So, for example, to log an event of level WARN3, you would use the -following macro in your code: - -\code -LOGOG_WARN3("Disk reads are taking %d milliseconds to complete!", nMilliseconds ); -\endcode - -It can get laborious to type the LOGOG_ prefix on all log messages, so, if the -LOGOG_USE_PREFIX macro is not defined, you may use these shorter alternate -logging forms: - -\snippet macro.hpp Shorthand - -If you want to generate a log message of some user-specified level, check out -the LOGOG_LEVEL_MESSAGE macro. - -Keep in mind that you must instantiate at least one Target object in your application -for log messages to have any effect. - -\page levels Verbosity levels of logging - -During early stages of product development, you may want to spread DBUG() -and INFO() type messages liberally across your code base in order to detect -bugs earlier in the process. However, as your code develops you will -want to omit these instructions entirely, as too many log messages will -slow down your program. - -To omit all logging messages of lower than a specific level at compilation time, -\#define the LOGOG_LEVEL constant to be some value from the following list: - -\snippet const.hpp Level Constants - -All logging macros of a lower level will be omitted. - -You may enable all logging messages in the following manner before loading -logog.hpp: - -\code -#define LOGOG_LEVEL LOGOG_LEVEL_ALL -\endcode - -And you may disable all logging messages with this before logog.hpp: - -\code -#define LOGOG_LEVEL LOGOG_LEVEL_NONE -\endcode - -The standard warnings apply to incrementing or changing variables within a macro. -For example: - -\code -INFO("The core has exploded %d times", nExploded++); -\endcode - -The nExploded variable will only be incremented if LOGOG_LEVEL is set to LOGOG_LEVEL_INFO -or lower. - -\page filters Filters and their uses - -A Filter is a special type of Topic that accepts messages from a publisher -and routes them forward to another Topic, based on criteria decided by the Filter. -When logog is initialized, it creates one default filter that automatically forwards -all messages to all Target objects. This default behavior can be modified in -to generate more complicated logging behaviors. - -You can get a reference to the default filter with GetDefaultFilter(). You -can also instantiate your own filters before you start logging messages -and messages will automatically find and route through them as well. - -Messages attempt to publish themselves to all filters when the message is -instantiated. Filters automatically attempt to publish themselves -to all targets when the filter is instantiated. - -\page categoriesgroups Organizing and filtering log messages by types - -Areas of a program such as a game can be broken down into a set of functional -areas. Some areas might include AI, audio, graphics, input and the file system. - -The logog system allows you to store two dimensions of information with each message -that further type the message. These dimensions are referred to as the -<b>category</b> and the <b>group</b> of the message. The ultimate meaning of -these fields is up to you. - -To define the current group for all messages following a certain point in your -code, \#define the LOGOG_GROUP constant to the name of the group, surrounded -by double quotes. Likewise \#define the LOGOG_CATEGORY constant to the name -of the category surrounded by double quotes. - -Your compiler may need the \#undef macro to undefine the previous setting of -a constant before \#define'ing it to something else. - -If you wish to set further messages to no specific category or group, \#define -either LOGOG_CATEGORY or LOGOG_GROUP to NULL as necessary. - -\snippet test.cpp GroupCategory1 - -A Filter can be told to route only messages matching a specified category or -group. To do this, call the Filter::Category() or Filter::Group() methods on -a specific filter. That filter will then only pass messages matching -the criteria you've set. - -\snippet test.cpp GroupCategory2 - -\page multipletargets Logging to permutations of multiple targets - -It's possible to create multiple filters with multiple criteria on each filter -and then route each filter to a separate target. This permits advanced logging -of different types of events to different log targets. - -A filter will automatically attempt to publish itself to all targets. You can -change this behavior by calling UnpublishToMultiple( AllTargets() ) on that filter, -followed by PublishTo() to publish that filter to an output of your choice. - -\snippet test.cpp GroupCategory4 - -\page deferredoutput Deferring logging output - -Writing debug output can take a lot of time on most platforms. -Especially in programs that produce copious debug output, logging can slow -a program's operation considerably. - -To get around this behavior, use the LogBuffer class. To Create a LogBuffer, -you provide a pointer to the ultimate Target you want to write to, such as -a Cerr or a LogFile, as well as the size of the LogBuffer. Logging then occurs -solely to the LogBuffer, and no output is written to the Target until the -LogBuffer is destroyed, or the LogBuffer::Dump() method is called. - -\page customformatting Custom formatting of log messages - -The Formatter object is responsible for rendering a particular Topic into a human-readable -format. A default Formatter is created by default for you based on the flavor of the compile -target. See FormatterGCC and FormatterMSVC objects for examples. - -If you want log messages in your own custom format, subclass the Formatter::Format -method into your own custom class, and write your own formatting function for a topic. -See FormatterMSVC::Format and FormatterGCC::Format for examples. - -If all you want to do is enable or disable a certain type of output on your formatter -- for example, to remove file and line number information from -all your output lines -- then there's a very simple way of doing this. -The Formatter class implements a Formatter::GetTopicFlags() function that -in the default case queries the topic in order to find out which fields -to render. You can if you wish override this default behavior for a custom -formatter in order to always or never render specific fields. - -The following example overrides the standard FormatterMSVC formatter in -order to never show file and line number information on the output. - -\snippet test.cpp FormatterCustom1 - -If you wish, you can force a formatter to output the current date and time as -part of their format. You can do this by calling the Formatter::SetShowTimeOfDay function -with a value of true, as follows: - -\snippet test.cpp DateAndTimeLogging - -\page addingnewtargets Adding new logging output targets - -To add a new type of logging output, such as a network socket or a printer, -create a subclass of the Target class, and implement your own Output() -function that renders the information to your output device. - -\snippet target.cpp Cout - -Then, instance your new class after your call to LOGOG_INITIALIZE() but -before messages are invoked. - -\page memorymanager Implementing a custom memory manager - -All memory allocated by logog, by default, goes through the system malloc() -and free() routines. However, many games prefer to implement their -own memory management systems in order to track memory usage in detail. - -In this case, logog can be made to allocate memory via a callback into -your own custom code. In order to implement this callback, -allocate an INIT_PARAMS structure on the stack, and then replace -the m_pfMalloc and m_pfFree pointers to pointers to your own custom -allocation and free routines. (It's fine to allocate an INIT_PARAMS structure -on the stack.) -Then, when calling the LOGOG_INITIALIZE() macro, provide the address -of the INIT_PARAMS structure as a parameter. The INIT_PARAMS structure -may then be freed. - -\snippet api.hpp INIT_PARAMS - -\page leakdetection Memory leak detection - -A memory leak detection mechanism has been built into logog that tracks all -internal memory allocations and matches them with corresponding frees. -The system also detects incorrect reallocations and double frees. This -system only needs to be enabled if you suspect that logog is leaking memory. - -To enable this checking, \#define the LOGOG_LEAK_DETECTION constant at compilation -time before \#include'ing logog.hpp, and then recompile both the logog library and your -code. Additionally, if you want a detailed report about memory allocations -and frees at the time they occur, enable the LOGOG_REPORT_ALLOCATIONS flag during -compilation for an action-packed report during run time. - -If you don't trust logog's built-in leak detector and are using a Microsoft -toolset, Microsoft may have enabled support for your platform to detect -leaks using the CRT library. If you want to try to use the Microsoft leak -detector to find leaks in logog, then \#define the LOGOG_LEAK_DETECTION_MICROSOFT constant at -compile time before \#include'ing logog, and recompile both the logog library -and your application. See http://msdn.microsoft.com/en-us/library/x98tx3cf.aspx -for more details on how Microsoft implements CRT leak detection. - -It's not recommended to leave either of these options on for general use. -Memory leak detection will slow down logog; additionally, memory leak -detection avoids logog's custom memory manager, in order -to avoid an infinite recursion. - -Don't try to enable both LOGOG_LEAK_DETECTION and LOGOG_LEAK_DETECTION_MICROSOFT -at the same time. - -\page unicodesupport Unicode support - -The logog library may be compiled either in ANSI mode or in Unicode mode. By default, -logog is compiled as an ANSI library. In this case, multibyte characters are -not permitted in log messages. To enable Unicode support, define the LOGOG_UNICODE -flag in logog.hpp before compiling the logog library. - -Defining this flag sets wchar_t as the base type for all logog character operations. -On Windows like platforms, a wchar_t is two bytes, and on Posix-like platforms this -may be two bytes or four bytes. - -Because Unicode support is based around wchar_t, the exact format of the Unicode -output depends on the endianness of the target platform as well as the size of -wchar_t. If logog is creating a new output log file, logog tries to add a Unicode -BOM to the start of the file, if wchar_t is either two or four bytes in length. -In this case, logog can write a UTF-16 or UTF-32 BOM, in either little or big -endian format. See LogFile::WriteUnicodeBOM() for more information on how this -BOM is written. More information on what a BOM does is available at -http://unicode.org/faq/utf_bom.html . - -Defining LOGOG_UNICODE has several effects on logog. First, this forces all -logging functions to expect to receive string parameters as arrays of the -local wchar_t type instead of char types. In other words, the LOGOG_CHAR -base type is redefined to wchar_t instead of char. Second, this forces logog to route all -Cout messages to wcout, and all Cerr messages to wcerr. - -A convenience macro, _LG(), is available (if you haven't defined LOGOG_USE_PREFIX) -for easily switching your constant strings from ANSI to Unicode, based on the compilation -value of LOGOG_UNICODE. To use this macro, and hence to have all your code compile -in both ANSI and Unicode modes, log in the following fashion: - -\code -INFO(_LG("This informational message is displayed in both ANSI and Unicode builds.")); -WARN(LOGOG_CONST_STRING("And this one works regardless of the LOGOG_USE_PREFIX setting.")); -\endcode - -Mixing and matching both Unicode and ANSI messages in one application is not currently -supported, as most compilers do not implement this functionality. - -<b>Windows specific issues</b> - -Windows platforms have special considerations when logging to the console with -wide characters via wcout or wcerr. Because logog shares the console with its -host application, it does not initialize the console in any way. On Windows -flavored platforms, the console must be initialized in a Unicode-friendly way. -See http://blogs.msdn.com/b/michkap/archive/2008/03/18/8306597.aspx for details -about how this might work. - -One way of initializing a Windows console for Unicode support, which seems to -work, is as follows: - -\snippet test.cpp WindowsUnicodeSetup - -See also Microsoft's documentation at http://msdn.microsoft.com/en-us/library/tw4k6df8.aspx . - -\page pubsub Publisher-subscriber functionality - -Topic objects are a base class that provides publisher-subscriber -features to subclasses. Most classes in logog descend from the -Topic class. - -Topics are capable of sending other topics (or themselves) to other -subscribers, as well as receiving another topic from a publisher. -See Topic::Send() and Topic::Receive() for more details. - -You can cause a Topic to send itself to its subscribers by calling -Topic::Transmit(). - -Topics can publish, unpublish, subscribe and unsubscribe themselves -from other topics. See Topic::Publish(), Topic::Unpublish(), -Topic::Subscribe(), Topic::Unsubscribe() for more details. - -Topics can also do all these tasks to lists of other topics. -See Topic::PublishToMultiple(), Topic::UnpublishToMultiple(), -Topic::SubscribeToMultiple(), Topic::UnsubscribeToMultiple(). - -\snippet test.cpp Subscription - -\page architecture Internal architecture - -The logog system uses a publisher-subscriber model in order to handle -message flow from source to destination. While the higher-level class -architecture takes care of typical message routing, the standard message -flow can be changed to support advanced logging models. - -A key base class is the Topic class. Topics contain strings and numeric -information representing a file name, line number, a free-form group -name, a free-form category name, and a free-form message string. Topics -know how to transmit and receive themselves to and from other topics, -but they don't know how to discover those other topics. They do know how -to negotiate with another topic in order to discover whether they should -subscribe to that other topic -- see Topic::CanSubscribeCheckTopic() for -details. Topics implement the core functionality of subscribing and -publishing. Topics can subscribe to multiple other topics, and they can -publish to multiple other topics. - -Some Topic behavior, especially the subscriber-publisher behavior and -cross-thread locking, is subsumed into the Node class. Nodes should -generally not be instanced by themselves, as they are not sufficiently -functional to be useful. - -Topics are subclassed into TopicSource and TopicSink classes. -TopicSources can only publish, and TopicSinks can only subscribe. - -A Target is a TopicSink that is capable of rendering its subscriptions -to a logical output device. Targets include the Cout, Cerr, and the -OutputDebug classes. To make logog send output to some arbitrary new -destination, create a new Target subclass and override the -Target::Output() method, and instance a new element of your class at the -top of your program. - -A Filter is a Topic that functions basically as a subscriber and a -publisher. It's used to limit the scope of incoming messages to a -particular type, group, or category. For example, a Filter may be used -to permit only messages with a level of LOGOG_LEVEL_WARN or higher to be -logged. Other messages are dropped. By default a filter will attempt to -subscribe itself to all existing Targets; however, this behavior may be -changed by overriding the Initialize() method within your Target -subclass, or by manually calling Target::Unpublish() on each Target that -you want the Filter to not publish to. - -This design permits more advanced logging models. For example, it's -possible to have two Filters, one which filters for error messages and -logs those to the console, versus informational and warning messages, -which are logged to a file. Note that the routing of any of the -higher-level classes such as Filter or Output by simply instantiating a -Topic and manually calling PublishTo() and SubscribeTo() to the desired -inputs and outputs. - -A Message is a sub-sub-class of TopicSource that knows how to publish -itself automatically to any outstanding Filter objects. A program will -typically instance a set of static Message objects and use them to -indicate execution of a certain point in the program. - -String types receive their own custom class. Since logog spends a lot of -time shuffling strings from class to class, this permits string copies -to be fast constant-time operations (a copy of pointers). - -All statically allocated elements are stored inside the Statics class. -This permits all items to be tracked and freed, thus assuring no memory -leaks. - -In order to support cross-platform, multithread-safe support, logog -implements a Thread class, a Timer class, and a Mutex class. These of -course can be customized to support future platforms. - -\page performance Performance topics - -Multiple memory allocations and frees are the bane of performance-oriented -code. STL is particularly naughty in this regard. - -To that end, logog attempts to do as few allocations as possible at run-time. -Message objects are allocated exactly once, when a message macro is run for -the first time. Publisher-subscriber negotiation occurs at this time -as well, which is when the pub-sub lists in the Filter objects get updated. -This process happens only once per message, regardless of the number of times -the message is invoked. Therefore, messages that are never executed never -allocate any memory, and the memory-allocation penalty for a message is incurred -exactly once, the first time the message is transmitted. - -A platform-specific vsprintf() type function is used to convert the varargs -in a message into a final destination string. I looked at this problem -for quite a while, and it seems that this method provides the best performance -guarantees without relying on a large external library, such as Boost, or -increasing the code size significantly. A template-based approach for -running vsprintf type functions would theoretically be faster than calling -vsprintf(); however, this would require the inclusion of a significant -amount of template-based code to handle all the possible situations that -vsprintf() must deal with. This would likely double the existing code size; -so I erred on the size of keeping logog smaller and more self-contained. - -If, after all that, you want to replace vsprintf() for your platform, it is -called in only one place in the logog source code (in String.cpp). - -Because logog spends so much time passing strings around, logog provides a -custom string class that internally represents strings as fixed buffers. -This helps reduce the repeated allocations and frees that std::string is notorious -for. - -Because most logging outputs can be slow, logog provides a LogBuffer class to -help with \ref deferredoutput . - -\page locking Multithread locking and mutexes - -The Mutex object is responsible for multithread safety in logog. All -platforms support a Mutex object. Only one thread may acquire -a Mutex object at one time. Other threads fall into a wait state until -the locking thread releases the Mutex. - -The ScopedLock object is a convenient way to represent a Mutex lock -as part of an object's auto scope. To use a ScopedLock, create -a Mutex lock on a known thread, then create a ScopedLock with the -previously defined Lock as a parameter. Code is guaranteed to be -single threaded within the scope of the ScopedLock. - -\snippet test.cpp SimpleLocking - -\page porting Porting logog - -Porting logog should be a straightforward affair, if you follow these -guidelines. - -First of all, you'll need to choose a flavor of operating system for -your platform. Nearly all OSes will fall into one of two flavors: -POSIX-like and Windows-like. platform.hpp tries to detect the local OS -and compile for it; you may need to change the detection logic for your -new platform. You'll need to set either LOGOG_FLAVOR_POSIX or LOGOG_FLAVOR_WINDOWS -before loading platform.hpp. - -The files containing platform dependent code are as follows. - -- platform.hpp. In addition to detecting the build flavor, platform.hpp -also sets some macros for STL usage. All STL calls are routed through -the macros in platform.hpp. As of this writing, the STL templates are -available in tr1; you may need to tweak this if you're depending on a C++x11 -compiler. - -\snippet platform.hpp STLTypes - -- mutex.hpp. You'll need to write macros for your own LOGOG_MUTEX_* -calls: - -\snippet mutex.hpp Mutex - -- thread.hpp. Write macros for LOGOG_THREAD, LOGOG_THREAD_CREATE and -LOGOG_THREAD_JOIN. Since logog does not actually initiate multiple threads, -this step can technically be skipped; however, unless threads are implemented -for a target platform, the unit tests will fail. - -\snippet thread.hpp Thread - -- timer.hpp. Add code for the Timer initializer and the Get() function. - -\snippet timer.cpp TimerGet - -Lastly, verify that unittest.cpp compiles and executes with a zero -return code. - -\page requirements Requirements - -logog assumes the existence of a C99 compliant C++ compiler. It uses -variadic macros in the C99 style, so any compiler that does not understand -__VA_ARGS__ style message passing will not work. The vast majority of -semi-modern compilers do. - -logog also has limited dependencies on STL. These dependencies are represented -by \#defines in the file platform.hpp. If your STL lacks support for any -of these containers, or if you're using another STL-like container system, -you may replace these \#defines and they will be used as logog's standard -containers. - -\snippet platform.hpp STLTypes - -\page supportedplatforms Supported platforms - -logog has been demonstrated to work with the following platforms: - -- Microsoft Visual Studio 2008 -- Microsoft Visual Studio 2010 (x64 and x86) -- Ubuntu 10.04 LTS -- MacOS 10.7 -- Xbox 360 -- Sony PlayStation 3 - -It is expected that logog should work on any reasonably -POSIX-compliant or Windows-compliant operating system with minimal changes. -Please see \ref porting for more information on support for alternative platforms. - -Since the console implementations are proprietary to the -platform holders, implementation details for these platforms have not been -publicly provided. However they may be provided to authorized and licensed -platform developers if the platform holder permits; contact us if you're a -licensed developer. - -\page license License agreement - -logog is Copyright (c) 2011, Gigantic Software. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -\page community Community and support - -Two mailing lists exist for general support and development discussion related to -logog. The first is for general logog questions and answers. This mailing list is -visible at -<a href="http://groups.google.com/group/logog">http://groups.google.com/group/logog</a>. -All users of logog are invited to join this mailing list for general discussion and help. - -\htmlonly -<table border=0 style="background-color: #fff; padding: 5px;" cellspacing=0> - <tr><td> - <img src="http://groups.google.com/intl/en/images/logos/groups_logo_sm.gif" - height=30 width=140 alt="Google Groups"> - </td></tr> - <tr><td style="padding-left: 5px"> - <b>Subscribe to Logog</b> - </td></tr> - <form action="http://groups.google.com/group/logog/boxsubscribe"> - <input type=hidden name="hl" value="en"> - <tr><td style="padding-left: 5px;"> - Email: <input type=text name=email> - <input type=submit name="sub" value="Subscribe"> - </td></tr> -</form> -<tr><td align=right> - <a href="http://groups.google.com/group/logog?hl=en">Visit this group</a> -</td></tr> -</table> -\endhtmlonly - -The second mailing list is for those who wish to actively participate in the -development of logog. The mailing list is visible at -<a href="http://groups.google.com/group/logog-devel">http://groups.google.com/group/logog-devel</a>. - -\htmlonly -<table border=0 style="background-color: #fff; padding: 5px;" cellspacing=0> - <tr><td> - <img src="http://groups.google.com/intl/en/images/logos/groups_logo_sm.gif" - height=30 width=140 alt="Google Groups"> - </td></tr> - <tr><td style="padding-left: 5px"> - <b>Subscribe to Logog Development</b> - </td></tr> - <form action="http://groups.google.com/group/logog-devel/boxsubscribe"> - <tr><td style="padding-left: 5px;"> - Email: <input type=text name=email> - <input type=submit name="sub" value="Subscribe"> - </td></tr> -</form> -<tr><td align=right> - <a href="http://groups.google.com/group/logog-devel">Visit this group</a> -</td></tr> -</table> -\endhtmlonly - -The best way to get help with a specific problem is to submit an issue -on Github. You can review a list of current issues, or submit your own, -<a href="https://github.com/johnwbyrd/logog/issues">here</a>. - -I'd REALLY like to get other developers involved in maintaining and further -developing the code. All sane developers encouraged to fork the <a href="https://github.com/johnwbyrd/logog">git repository</a> and -do bug fixing or new feature implementation. Contact me at jbyrd at giganticsoftware dot com if you need administrative privileges on the master logog branch; I'm -actively looking to incorporate positive changes. - -\page othersystems Other logging frameworks and systems - -Here are other logging and testing frameworks that have served as -inspiration (negative and/or positive) for logog. - -\section pantheios Panetheios - -http://www.pantheios.org - -Pantheios claims to compile to nothing in the final release case. -However, the Pantheios library depends on STLSoft, xTests, b64, and -shwild. - -\section marginean Petru Margenian's library in Dr. Dobb's Journal - -http://drdobbs.com/cpp/201804215 - -Another interesting effort at a portable logging implementation. -This library depends on an atomic_ops library from HP, and -it won't mention this fact until you try to compile it. Logging can be -enabled or disabled based on a single dimension ("level") and all -logging output ends up at stderr (there is no support for alternative -outputs). - -\section glog glog, the Google logging library - -http://code.google.com/p/google-glog/ - -Provides logging to stderr, a file or syslog. Their ostream-style -logging methodology creates two sets of macros: one for macros that -compile away in release mode, one for macros that don't. Interesting (if -non portable) support for stack walking. - -\section rlog rlog - -http://code.google.com/p/rlog/ - -Uses a publisher-subscriber model for all objects, and demonstrated that -this basic architecture was highly appropriate for logging. Does not -play nicely with custom allocators. - -\section loki Loki - -http://loki-lib.sourceforge.net/ - -The loki library demonstrates how to abstract platform-specific features -like mutexes and threads in remarkably few lines of code. - -*/ - -} - -/** \def LOGOG_UNICODE - ** Define this macro to enable Unicode support in logog. The logog library works either in Unicode mode or not -- - ** attempting to mix the two log types will have unexpected results. - **/ -#define LOGOG_UNICODE 1 - -/** \def LOGOG_INTERNAL_DEBUGGING - ** Define this macro to debug logog itself. This setting enables sanity checks on many logog functions. This setting - ** is not very useful for end users of logog. */ -#define LOGOG_INTERNAL_DEBUGGING 1 - -/** \def LOGOG_LEAK_DETECTION - ** Define this macro to check all memory allocations and frees. This setting will check against double allocations - ** and double deletes as well. Do not enable this on production code -- it'll slow down the performance considerably. - **/ - #define LOGOG_LEAK_DETECTION 1 - -/** \def LOGOG_REPORT_ALLOCATIONS - ** Define this macro to report on ALL allocations and frees that happen through logog. - ** Enable this if you get paid by lines of program output. */ -#define LOGOG_REPORT_ALLOCATIONS 1 - -/** \def LOGOG_COUT - ** This is equivalent to std::wcout if LOGOG_UNICODE is defined, and std::cout otherwise. - **/ - -/** \def LOGOG_CERR - ** This is equivalent to std::wcerr if LOGOG_UNICODE is defined, and std::cerr otherwise. - **/ diff --git a/ThirdParty/logog/doxyfile b/ThirdParty/logog/doxyfile deleted file mode 100644 index 371353e1c56..00000000000 --- a/ThirdParty/logog/doxyfile +++ /dev/null @@ -1,1716 +0,0 @@ -# Doxyfile 1.7.4 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project. -# -# All text after a hash (#) is considered a comment and will be ignored. -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" "). - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all -# text before the first occurrence of this tag. Doxygen uses libiconv (or the -# iconv built into libc) for the transcoding. See -# http://www.gnu.org/software/libiconv for the list of possible encodings. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = logog - -# 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 = - -# 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 = "logger optimized for games" - -# With the PROJECT_LOGO tag one can specify an logo or icon that is -# included in the documentation. The maximum height of the logo should not -# exceed 55 pixels and the maximum width should not exceed 200 pixels. -# Doxygen will copy the logo to the output directory. - -PROJECT_LOGO = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = doc - -# 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 will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, -# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English -# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, -# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, -# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = YES - -# If the FULL_PATH_NAMES tag is set to YES then 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 part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful if your file system -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like regular Qt-style comments -# (thus requiring an explicit @brief command for a brief description.) - -JAVADOC_AUTOBRIEF = 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 comments -# will behave just like regular Qt-style comments (thus requiring -# an explicit \brief command for a brief description.) - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# 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 members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for -# Java. For instance, namespaces will be presented as packages, qualified -# scopes will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources only. Doxygen will then generate output that is more tailored for -# Fortran. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for -# VHDL. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it -# 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++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. 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 that for custom extensions -# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also makes the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = YES - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. -# Doxygen will parse them like normal C++ but will assume all classes use public -# instead of private inheritance when no explicit protection keyword is present. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate getter -# and setter methods for a property. Setting this option to YES (the default) -# will make doxygen replace the get and set methods by a property in the -# documentation. This will only work if the methods are indeed getting or -# setting a simple type. If this is not the case, or you want to show the -# methods anyway, you should set this option to NO. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and -# unions are shown inside the group in which they are included (e.g. using -# @ingroup) instead of on a separate page (for HTML and Man pages) or -# section (for LaTeX and RTF). - -INLINE_GROUPED_CLASSES = NO - -# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum -# is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically -# be useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. - -TYPEDEF_HIDES_STRUCT = NO - -# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to -# determine which symbols to keep in memory and which to flush to disk. -# When the cache is full, less often used symbols will be written to disk. -# For small to medium size projects (<1000 input files) the default value is -# probably good enough. For larger projects a too small cache size can cause -# doxygen to be busy swapping symbols to and from disk most of the time -# causing a significant performance penalty. -# If the system has enough physical memory increasing the cache will improve the -# performance by keeping more symbols in memory. Note that the value works on -# a logarithmic scale so increasing the size by one will roughly double the -# memory usage. The cache size is given by this formula: -# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, -# corresponding to a cache size of 2^16 = 65536 symbols - -SYMBOL_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = YES - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base -# name of the file that contains the anonymous namespace. By default -# anonymous namespaces are hidden. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -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. - -CASE_SENSE_NAMES = NO - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = YES - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = 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. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen -# will sort the (brief and detailed) documentation of class members so that -# constructors and destructors are listed first. If set to NO (the default) -# the constructors will appear in the respective orders defined by -# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. -# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO -# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the -# hierarchy of group names into alphabetical order. If set to NO (the default) -# the group names will appear in their defined order. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to -# do proper type resolution of all parameters of a function it will reject a -# match between the prototype and the implementation of a member function even -# if there is only one candidate or it is obvious which candidate to choose -# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen -# will still accept a match between prototype and implementation in such cases. - -STRICT_PROTO_MATCHING = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or macro consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and macros in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES =YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is NO. - -SHOW_DIRECTORIES = NO - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. -# This will remove the Files entry from the Quick Index and from the -# Folder Tree View (if specified). The default is YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the -# Namespaces page. -# This will remove the Namespaces entry from the Quick Index -# and from the Folder Tree View (if specified). The default is YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command <command> <input-file>, where <command> is the value of -# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. The create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. -# You can optionally specify a file name after the option, if omitted -# DoxygenLayout.xml will be used as the name of the layout file. - -LAYOUT_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# The WARN_NO_PARAMDOC option can be enabled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file($line) : $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = include doc test - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is -# also the default input encoding. Doxygen uses libiconv (or the iconv built -# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for -# the list of possible encodings. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh -# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py -# *.f90 *.f *.for *.vhd *.vhdl - -FILE_PATTERNS = *.dox *.c *.cpp *.hpp *.h - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = NO - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix file system feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. 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 = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = test/ include/ src/ - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command <filter> <input-file>, where <filter> -# is the value of the INPUT_FILTER tag, and <input-file> is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. -# If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. -# Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. -# The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty or if -# non of the patterns match the file name, INPUT_FILTER is applied. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file -# pattern. A pattern will override the setting for FILTER_PATTERN (if any) -# and it is also possible to disable source filtering for a specific pattern -# using *.ext= (so without naming a filter). This option only has effect when -# FILTER_SOURCE_FILES is enabled. - -FILTER_SOURCE_PATTERNS = - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = NO - -# If the REFERENCES_RELATION tag is set to YES -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = NO - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. -# Otherwise they will link to the documentation. - -REFERENCES_LINK_SOURCE = NO - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = YES - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -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 one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. Note that when using a custom header you are responsible -# for the proper inclusion of any scripts and style sheets that doxygen -# needs, which is dependent on the configuration options used. -# It is adviced to generate a default header using "doxygen -w html -# header.html footer.html stylesheet.css YourConfigFile" and then modify -# that header. Note that the header is subject to change so you typically -# have to redo this when upgrading to a newer version of doxygen or when changing the value of configuration settings such as GENERATE_TREEVIEW! - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the HTML output directory. Note -# that these files will be copied to the base HTML output directory. Use the -# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these -# files. In the HTML_STYLESHEET file, use the file name only. Also note that -# the files will be copied as-is; there are no commands or markers available. - -HTML_EXTRA_FILES = - -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. -# Doxygen will adjust the colors in the stylesheet and background images -# according to this color. Hue is specified as an angle on a colorwheel, -# see http://en.wikipedia.org/wiki/Hue for more information. -# For instance the value 0 represents red, 60 is yellow, 120 is green, -# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. -# The allowed range is 0 to 359. - -HTML_COLORSTYLE_HUE = 220 - -# 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 value of 255 will produce the most vivid colors. - -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 gradually make the output lighter, whereas values above 100 make -# the output darker. The value divided by 100 is the actual gamma applied, -# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, -# and 100 does not change the gamma. - -HTML_COLORSTYLE_GAMMA = 80 - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting -# this to NO can help when comparing the output of multiple runs. - -HTML_TIMESTAMP = YES - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. For this to work a browser that supports -# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox -# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). - -HTML_DYNAMIC_SECTIONS = YES - -# 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, 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 http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. - -GENERATE_DOCSET = NO - -# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the -# feed. A documentation feed provides an umbrella under which multiple -# documentation sets from a single provider (such as a company or product suite) -# can be grouped. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that -# should uniquely identify the documentation set bundle. This should be a -# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen -# will append .docset to the name. - -DOCSET_BUNDLE_ID = com.giganticsoftware.logog - -# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify -# the documentation publisher. This should be a reverse domain-name style -# string, e.g. com.mycompany.MyDocSet.documentation. - -DOCSET_PUBLISHER_ID = org.doxygen.Publisher - -# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. - -DOCSET_PUBLISHER_NAME = Gigantic Software - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, 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). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING -# is used to encode HtmlHelp index (hhk), content (hhc) and project file -# content. - -CHM_INDEX_ENCODING = - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated -# that can be used as input for Qt's qhelpgenerator to generate a -# Qt Compressed Help (.qch) of the generated HTML documentation. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can -# be used to specify the file name of the resulting .qch file. -# The path specified is relative to the HTML output folder. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#namespace - -QHP_NAMESPACE = com.giganticsoftware.logog - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#virtual-folders - -QHP_VIRTUAL_FOLDER = doc - -# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to -# add. For more information please see -# http://doc.trolltech.com/qthelpproject.html#custom-filters - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see -# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters"> -# Qt Help Project / Custom Filters</a>. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's -# filter section matches. -# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes"> -# Qt Help Project / Filter Attributes</a>. - -QHP_SECT_FILTER_ATTRS = - -# If the GENERATE_QHP tag is set to YES, 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. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files -# will be generated, which together with the HTML files, form an Eclipse help -# plugin. To install this plugin and make it available under the help contents -# menu in Eclipse, the contents of the directory containing the HTML and XML -# files needs to be copied into the plugins directory of eclipse. The name of -# the directory within the plugins directory should be the same as -# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before -# the help appears. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have -# this name. - -ECLIPSE_DOC_ID = com.giganticsoftware.logog - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values -# (range [0,1..20]) that doxygen will group on one line in the generated HTML -# documentation. Note that a value of 0 will completely suppress the enum -# values from appearing in the overview section. - -ENUM_VALUES_PER_LINE = 4 - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. -# If the tag value is set to YES, a side panel will be generated -# containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). -# Windows users are probably better off using the HTML help feature. - -GENERATE_TREEVIEW = YES - -# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, -# and Class Hierarchy pages using a tree view instead of an ordered list. - -USE_INLINE_TREES = YES - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open -# links to external symbols imported via tag files in a separate window. - -EXT_LINKS_IN_WINDOW = NO - -# Use this tag to change the font size of Latex formulas included -# as images in the HTML documentation. The default is 10. Note that -# when you change the font size after a successful doxygen run you need -# to manually remove any form_*.png images from the HTML output directory -# to force them to be regenerated. - -FORMULA_FONTSIZE = 10 - -# Use the FORMULA_TRANPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are -# not supported properly for IE 6.0, but are supported on all modern browsers. -# Note that when changing this option you need to delete any form_*.png files -# in the HTML output before the changes have effect. - -FORMULA_TRANSPARENT = YES - -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax -# (see http://www.mathjax.org) which uses client side Javascript for the -# rendering instead of using prerendered 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 also need to install MathJax separately and -# configure the path to it using the MATHJAX_RELPATH option. - -USE_MATHJAX = NO - -# When MathJax is enabled you need to specify the location relative to the -# HTML output directory using the MATHJAX_RELPATH option. The destination -# directory should contain the MathJax.js script. For instance, if the mathjax -# directory is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to the -# mathjax.org site, so you can quickly see the result without installing -# MathJax, but it is strongly recommended to install a local copy of MathJax -# before deployment. - -MATHJAX_RELPATH = http://www.mathjax.org/mathjax - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box -# for the HTML output. The underlying search engine uses javascript -# and DHTML and should work on any modern browser. Note that when using -# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets -# (GENERATE_DOCSET) there is already a search function so this one should -# typically be disabled. For large projects the javascript based search engine -# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. - -SEARCHENGINE = YES - -# When the SERVER_BASED_SEARCH tag is enabled the search engine will be -# implemented using a PHP enabled web server instead of at the web client -# using Javascript. Doxygen will generate the search PHP script and index -# file to put on the web server. The advantage of the server -# based approach is that it scales better to large projects and allows -# full text search. The disadvantages are that it is more difficult to setup -# and does not have live searching capabilities. - -SERVER_BASED_SEARCH = NO - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. -# Note that when enabling USE_PDFLATEX this option is only used for -# generating bitmaps for formulas in the HTML output, but not in the -# Makefile that is written to the output directory. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = 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 trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4 - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for -# the generated latex document. The footer should contain everything after -# the last chapter. If it is left blank doxygen will generate a -# standard footer. Notice: only use this tag if you know what you are doing! - -LATEX_FOOTER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = YES - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -# If LATEX_SOURCE_CODE is set to YES then doxygen will include -# source code with syntax highlighting in the LaTeX output. -# Note that which sources are shown also depends on other settings -# such as SOURCE_BROWSER. - -LATEX_SOURCE_CODE = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = YES - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. -# This is useful -# if you want to understand what is going on. -# On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - -EXPAND_ONLY_PREDEF = YES - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# pointed to by INCLUDE_PATH will be searched when a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = DOXYGEN LOGOG_UNICODE=1 LOGOG_INTERNAL_DEBUGGING=1 LOGOG_LEAK_DETECTION=1 LOGOG_REPORT_ALLOCATIONS=1 - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition that -# overrules the definition found in the source code. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all references to function-like macros -# that are alone on a line, have an all uppercase name, and do not end with a -# semicolon, because these will confuse the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option also works with HAVE_DOT disabled, but it is recommended to -# install and use dot, since it yields more powerful graphs. - -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 = - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is -# allowed to run in parallel. When set to 0 (the default) doxygen will -# base this on the number of processors available in the system. You can set it -# explicitly to a value larger than 0 to get control over the balance -# between CPU load and processing speed. - -DOT_NUM_THREADS = 0 - -# By default doxygen will write a font called Helvetica to the output -# directory and reference it in all dot files that doxygen generates. -# When you want a differently looking font you can specify the font name -# using DOT_FONTNAME. You need to make sure dot is able to find the font, -# which can be done by putting it in a standard location or by setting the -# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory -# containing the font. - -DOT_FONTNAME = Helvetica - -# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. -# The default size is 10pt. - -DOT_FONTSIZE = 10 - -# By default doxygen will tell dot to use the output directory to look for the -# FreeSans.ttf font (which doxygen will put there itself). If you specify a -# different font using DOT_FONTNAME you can set the path where dot -# can find it using this tag. - -DOT_FONTPATH = - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT options are set to YES then -# doxygen will generate a call dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable call graphs -# for selected functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then -# doxygen will generate a caller dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable caller -# graphs for selected functions only using the \callergraph command. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will generate a graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are svg, png, jpg, or gif. -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MSCFILE_DIRS tag can be used to specify one or more directories that -# contain msc files that are included in the documentation (see the -# \mscfile command). - -MSCFILE_DIRS = - -# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of -# nodes that will be shown in the graph. If the number of nodes in a graph -# becomes larger than this value, doxygen will truncate the graph, which is -# visualized by representing a node as a red box. Note that doxygen if the -# number of direct children of the root node in a graph is already larger than -# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note -# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. - -DOT_GRAPH_MAX_NODES = 50 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that the size of a graph can be further restricted by -# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not -# seem to support this out of the box. Warning: Depending on the platform used, -# enabling this option may lead to badly anti-aliased labels on the edges of -# a graph (i.e. they become hard to read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES diff --git a/ThirdParty/logog/include/api.hpp b/ThirdParty/logog/include/api.hpp deleted file mode 100644 index 6d98f4b343c..00000000000 --- a/ThirdParty/logog/include/api.hpp +++ /dev/null @@ -1,47 +0,0 @@ -/** - * \file api.hpp Initialization and shutdown functions for logog. - */ - -#ifndef __LOGOG_API_HPP__ -#define __LOGOG_API_HPP__ - -namespace logog -{ -//! [INIT_PARAMS] -/** - * To initialize the memory manager with non-default values, allocate a temporary INIT_PARAMS structure, fill it with - * zeros, and then change the individual entries in the INIT_PARAMS struct before passing as a parameter to Initialize(). - * \sa Initialize - */ -struct INIT_PARAMS -{ - /** A pointer to a function that allocates memory. By default logog allocates using malloc(). Change this pointer - ** before passing to Initialize() to use your own custom memory allocator. - * \sa logog::Initialize() - */ - void *( *m_pfMalloc )( size_t ); - - /** A pointer to a function that frees memory. By default logog frees using free(). Change this pointer - * before passing to Initialize() to use your own custom memory allocator. - * \sa logog::Initialize() - */ - void ( *m_pfFree )( void * ); -}; -//! [INIT_PARAMS] - -/** Initializes the logog system. No logog calls or allocations may be made before calling this function; expect - * crashes if you haven't called this at the top of your program. - * \param params The address of an INIT_PARAMS structure you have already allocated on the heap, or NULL to - * use default values. - * \sa INIT_PARAMS - */ -extern int Initialize( INIT_PARAMS *params = NULL ); - -/** Shuts down the logog system and frees all memory allocated by logog. Memory still allocated by the logog system after Shutdown() indicates - ** a bug. - **/ -extern int Shutdown( ); - -} - -#endif // __LOGOG_API_HPP diff --git a/ThirdParty/logog/include/checkpoint.hpp b/ThirdParty/logog/include/checkpoint.hpp deleted file mode 100644 index 05c8ba1f7a4..00000000000 --- a/ThirdParty/logog/include/checkpoint.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/** - * \file checkpoint.hpp Representations of a program counter reaching a specific point in code. - */ - -#ifndef __LOGOG_CHECKPOINT_HPP__ -#define __LOGOG_CHECKPOINT_HPP__ - -namespace logog -{ -/** A checkpoint is a topic that fires when a specific section of code is executed. The first time a bit of - ** code is executed, a Checkpoint is instanced, and when the code is executed again, the Checkpoint is - ** reused. - **/ -class Checkpoint : public TopicSource -{ -public: - Checkpoint( const LOGOG_LEVEL_TYPE level = LOGOG_LEVEL_ALL, - const LOGOG_CHAR *sFileName = NULL, - const int nLineNumber = 0, - const LOGOG_CHAR *sGroup = NULL, - const LOGOG_CHAR *sCategory = NULL, - const LOGOG_CHAR *sMessage = NULL, - const double dTimestamp = 0.0f ); - - /** Sends the node in question. Optionally updates the timestamp in this checkpoint before sending the node. */ - virtual int Send( const Topic &node ); - -}; -} - -#endif // __LOGOG_CHECKPOINT_HPP_ diff --git a/ThirdParty/logog/include/const.hpp b/ThirdParty/logog/include/const.hpp deleted file mode 100644 index 2608447595d..00000000000 --- a/ThirdParty/logog/include/const.hpp +++ /dev/null @@ -1,90 +0,0 @@ -/** - * \file const.hpp Constants. - */ - -#ifndef __LOGOG_CONST_HPP__ -#define __LOGOG_CONST_HPP__ - -#ifndef LOGOG_FORMATTER_MAX_LENGTH -/** The maximum length of a single line that a formatter may output, in LOGOG_CHAR units. */ -#define LOGOG_FORMATTER_MAX_LENGTH ( 1024 * 16 ) -#endif - -#ifndef LOGOG_DEFAULT_LOG_BUFFER_SIZE -/** The default size of a RingBuffer object for buffering outputs. */ -#define LOGOG_DEFAULT_LOG_BUFFER_SIZE ( 4 * 1024 * 1024 ) -#endif - - -/** \addtogroup levelsettings Level Settings - ** These are level settings for logog. These settings are valid for the LOGOG_LEVEL compilation flag. To enable - ** all logog messages, use the compilation flag -DLOGOG_LEVEL=LOGOG_LEVEL_ALL. To disable all logog messages - ** (and effectively remove logog code from your executable) use the compilation flag -DLOGOG_LEVEL=LOGOG_LEVEL_NONE. - ** \sa LOGOG_LEVEL - ** @{ - **/ -//! [Level Constants] -#define LOGOG_LEVEL_NONE 0 -#define LOGOG_LEVEL_EMERGENCY 8 -#define LOGOG_LEVEL_ALERT 16 -#define LOGOG_LEVEL_CRITICAL 24 -#define LOGOG_LEVEL_ERROR 32 -#define LOGOG_LEVEL_WARN 40 -#define LOGOG_LEVEL_WARN1 48 -#define LOGOG_LEVEL_WARN2 56 -#define LOGOG_LEVEL_WARN3 64 -#define LOGOG_LEVEL_INFO 72 -#define LOGOG_LEVEL_DEBUG 80 -#define LOGOG_LEVEL_ALL 88 -//! [Level Constants] - -#define LOGOG_LEVEL_TYPE int - -#ifndef LOGOG_LEVEL -#define LOGOG_LEVEL LOGOG_LEVEL_DEBUG -#endif - -/** @} */ - -/** \addtogroup topicbitstype Topic Bits Type - * Bit flags representing whether a topic cares about a specific field or not. 1 = care, 0 = don't care. - * @{ - */ -//! [Topic Bits] -typedef enum -{ - TOPIC_LEVEL_FLAG = 0x01, - TOPIC_LINE_NUMBER_FLAG = 0x02, - TOPIC_FILE_NAME_FLAG = 0x04, - TOPIC_GROUP_FLAG = 0x08, - TOPIC_CATEGORY_FLAG = 0x10, - TOPIC_MESSAGE_FLAG = 0x20, - TOPIC_TIMESTAMP_FLAG = 0x40, - /** Bits 0 through TOPIC_COUNT turned on */ - TOPIC_ALL = 0x7f -} TopicBitsType; -//! [Topic Bits] - -/** @} */ - -typedef int TOPIC_FLAGS; - -//! [Topic Offsets] -/** Offsets within the m_vIntProps and m_vStringProps arrays for this topic. */ -typedef enum -{ - TOPIC_LEVEL = 0, - TOPIC_LINE_NUMBER = 1, - /** This must be the number of integer fields. */ - TOPIC_INT_COUNT = 2, - - TOPIC_FILE_NAME = 0, - TOPIC_GROUP = 1, - TOPIC_CATEGORY = 2, - TOPIC_MESSAGE = 3, - /** This must be the number of string fields for this topic. */ - TOPIC_STRING_COUNT = 4 -} TopicOffsetType; -//! [Topic Offsets] - -#endif // __LOGOG_CONST_HPP__ diff --git a/ThirdParty/logog/include/formatter.hpp b/ThirdParty/logog/include/formatter.hpp deleted file mode 100644 index b3b8378290a..00000000000 --- a/ThirdParty/logog/include/formatter.hpp +++ /dev/null @@ -1,89 +0,0 @@ -/** - * \file formatter.hpp Formats a topic into human-readable, compiler lookalike format. - */ - -#ifndef __LOGOG_FORMATTER_HPP__ -#define __LOGOG_FORMATTER_HPP__ - -namespace logog -{ - -#define LOGOG_TIME_STRING_MAX 80 - -/** A helper object for generating a current timestamp as a string. */ -class TimeStamp : public Object -{ -public: - /** Returns a pointer to a string representing the current time. Note! This pointer is only - ** valid while this object is valid -- if you destroy this object, this pointer is no longer - ** valid. - */ - const char *Get(); - -protected: - char cTimeString[ LOGOG_TIME_STRING_MAX ]; -}; - -/** Converts a topic into a human-readable string for printing or otherwise rendering to a target. */ -class Formatter : public Object -{ -public: - Formatter(); - - /** Causes this formatter to format a topic into its own m_sMessageBuffer field, and thence to - ** return a reference to that string. This function must be written to be efficient; it will be called - ** for every logging operation. It is strongly recommended not to allocate or free memory in this function. - **/ - virtual LOGOG_STRING &Format( const Topic &topic, const Target &target ) = 0; - - /** Causes the time of day to be rendered, if it needs to be rendered. This function is only supported on - ** ANSI builds, not Unicode, as the underlying functions are ANSI only. - */ - virtual void RenderTimeOfDay(); - - /** In the base case, this function calls GetTopicFlags() on the provided - ** topic in order to figure out which fields this formatter should render. - ** However, subclasses of the Formatter class can override this function in order - ** to change the default fields that the topic wants to be rendered. For example, - ** you can turn off the TOPIC_LINE_NUMBER_FLAG and the TOPIC_FILE_NAME_FLAG - ** in order to disable these fields from being rendered in your own Formatter - ** subclass. - ** \param topic The topic whose flags are to be determined - ** \return The set of flags representing the topics that really need to be rendered. - **/ - virtual TOPIC_FLAGS GetTopicFlags( const Topic &topic ); - - /** Should this formatter render the current time of day? */ - bool GetShowTimeOfDay() const; - - /** Sets whether this formatter renders the current time of day. */ - void SetShowTimeOfDay(bool val); - -protected: - const LOGOG_CHAR *ErrorDescription( const LOGOG_LEVEL_TYPE level ); - - LOGOG_STRING m_sMessageBuffer; - LOGOG_STRING m_sIntBuffer; - - bool m_bShowTimeOfDay; -}; - -class FormatterGCC : public Formatter -{ -public: - virtual LOGOG_STRING &Format( const Topic &topic, const Target &target ); - -}; - -class FormatterMSVC : public Formatter -{ -public: - virtual LOGOG_STRING &Format( const Topic &topic, const Target &target ); -}; - -extern Formatter &GetDefaultFormatter(); -extern void DestroyDefaultFormatter(); - -} - -#endif // __LOGOG_FORMATTER_HPP_ diff --git a/ThirdParty/logog/include/logog.hpp b/ThirdParty/logog/include/logog.hpp deleted file mode 100644 index e4c343c811f..00000000000 --- a/ThirdParty/logog/include/logog.hpp +++ /dev/null @@ -1,36 +0,0 @@ -/** - * \file logog.hpp Main include file for logog logging functionality. Include this file to enable logging for your application. - */ - -#ifndef __LOGOG_HPP__ -#define __LOGOG_HPP__ - -/** \def LOGOG_UNICODE - ** Define this macro to enable Unicode support in logog. The logog library works either in Unicode mode or not -- - ** attempting to mix the two log types will have unexpected results. - **/ -// #define LOGOG_UNICODE 1 - -#include "const.hpp" -#include "platform.hpp" -#include "statics.hpp" -#include "object.hpp" -#include "timer.hpp" -#include "mutex.hpp" -#include "string.hpp" -#include "node.hpp" -#include "topic.hpp" -#include "formatter.hpp" -#include "target.hpp" -// #include "socket.hpp" -#include "checkpoint.hpp" -#include "api.hpp" -#include "message.hpp" -#include "macro.hpp" - -#ifdef LOGOG_UNIT_TESTING -#include "thread.hpp" -#include "unittest.hpp" -#endif - -#endif // __LOGOG_HPP_ diff --git a/ThirdParty/logog/include/macro.hpp b/ThirdParty/logog/include/macro.hpp deleted file mode 100644 index 97b661f8a38..00000000000 --- a/ThirdParty/logog/include/macro.hpp +++ /dev/null @@ -1,240 +0,0 @@ -/** - * \file macro.hpp Macros for instantiation of a message. - */ - -#ifndef __LOGOG_MACRO_HPP__ -#define __LOGOG_MACRO_HPP__ - -namespace logog -{ -#ifdef LOGOG_USE_PREFIX -#define LOGOG_PREFIX LOGOG_ -#endif // LOGOG_USE_PREFIX - -#ifndef LOGOG_GROUP -/** This is the current group for created messages. Set this to NULL if you - * want messages to not be part of any specific group. - */ -#define LOGOG_GROUP NULL -#endif - -#ifndef LOGOG_CATEGORY -/** This is the current category for created messages. Set this to NULL if you - * want messages to not be part of any specific group. - */ -#define LOGOG_CATEGORY NULL -#endif - -/** When you have a macro replacement, the preprocessor will only expand the macros recursively - * if neither the stringizing operator # nor the token-pasting operator ## are applied to it. - * So, you have to use some extra layers of indirection, you can use the token-pasting operator - * with a recursively expanded argument. - */ -#define TOKENPASTE2(x, y) x ## y -/** \sa TOKENPASTE2(x, y) */ -#define TOKENPASTE(x, y) TOKENPASTE2(x, y) - -/** This macro is used when a message is instantiated without any varargs - * provided by the user. It locks a global mutex, creates the message, - * locks it, transmits it, and releases all locks. - */ -#define LOGOG_LEVEL_GROUP_CATEGORY_MESSAGE_NO_VA( level, group, cat, msg ) \ -{ \ - Mutex *___pMCM = &GetMessageCreationMutex(); \ - ___pMCM->MutexLock(); \ - static logog::Message *TOKENPASTE(_logog_,__LINE__) = new logog::Message( level, \ - LOGOG_CONST_STRING( __FILE__ ), \ - __LINE__ , \ - LOGOG_CONST_STRING( group ), \ - LOGOG_CONST_STRING( cat ), \ - msg; \ - ___pMCM->MutexUnlock(); \ - TOKENPASTE(_logog_,__LINE__)->m_Transmitting.MutexLock(); \ - TOKENPASTE(_logog_,__LINE__)->Transmit(); \ - TOKENPASTE(_logog_,__LINE__)->m_Transmitting.MutexUnlock(); \ -} - -/** This macro is used when a message is instantiated with varargs provided - * by the user. It locks a global mutex, creates the message, locks it, - * formats the message string inside the message, transmits it, - * and releases all locks. - * When logog is shut down, it may be started back up again later. Therefore, - * logog needs a way to flag all static Message pointers that they need - * to be recreated. We manually simulate a static Message pointer by - * implementing it via a static bool. The bool is turned on the first time - * this code is run. - * NOTE! A subtle race condition exists in the following code, that will ONLY occur - * if logog is shut down at the same moment that a log message is processed from - * another thread than the one calling the shutdown. The Message object could - * theoretically be destroyed from another thread just before it's locked - * in a thread that calls the Format() and Transmit() calls on it. I'm not - * sure if this is really a bug -- technically, this race condition will - * occur only if you are calling log messages right on top of the SHUTDOWN - * call from the main thread. - */ -#define LOGOG_LEVEL_GROUP_CATEGORY_MESSAGE( level, group, cat, formatstring, ... ) \ -{ \ - ::logog::Mutex *___pMCM = &::logog::GetMessageCreationMutex(); \ - ___pMCM->MutexLock(); \ - static bool TOKENPASTE(_logog_static_bool_,__LINE__) = false; \ - static logog::Message * TOKENPASTE(_logog_,__LINE__); \ - if ( TOKENPASTE(_logog_static_bool_,__LINE__) == false ) \ - { \ - TOKENPASTE(_logog_,__LINE__) = \ - new logog::Message( level, \ - LOGOG_CONST_STRING( __FILE__ ), \ - __LINE__ , \ - LOGOG_CONST_STRING( group ), \ - LOGOG_CONST_STRING( cat ), \ - LOGOG_CONST_STRING( "" ), \ - 0.0f, \ - & (TOKENPASTE(_logog_static_bool_,__LINE__)) ); \ - } \ - ___pMCM->MutexUnlock(); \ - /* A race condition could theoretically occur here if you are shutting down at the same instant as sending log messages. */ \ - TOKENPASTE(_logog_,__LINE__)->m_Transmitting.MutexLock(); \ - TOKENPASTE(_logog_,__LINE__)->Format( formatstring, ##__VA_ARGS__ ); \ - TOKENPASTE(_logog_,__LINE__)->Transmit(); \ - TOKENPASTE(_logog_,__LINE__)->m_Transmitting.MutexUnlock(); \ -} - -/** Calls LOGOG_LEVEL_GROUP_CATEGORY_MESSAGE with the current LOGOG_GROUP and - * LOGOG_CATEGORY setting. - */ -#define LOGOG_LEVEL_MESSAGE( level, formatstring, ... ) \ - LOGOG_LEVEL_GROUP_CATEGORY_MESSAGE( level, LOGOG_GROUP, LOGOG_CATEGORY, formatstring, ##__VA_ARGS__ ) - -/** Calls LOGOG_LEVEL_MESSAGE with the current LOGOG_LEVEL setting. */ -#define LOGOG_MESSAGE( formatstring, ... ) \ - LOGOG_LEVEL_MESSAGE( LOGOG_LEVEL, formatstring, ##__VA_ARGS__ ) - - -#if LOGOG_LEVEL >= LOGOG_LEVEL_DEBUG -/** Logs a message at the DEBUG reporting level. */ -#define LOGOG_DEBUG( formatstring, ... ) \ - LOGOG_LEVEL_MESSAGE( LOGOG_LEVEL_DEBUG, formatstring, ##__VA_ARGS__ ) -#else -#define LOGOG_DEBUG( formatstring, ... ) {}; -#endif - -#if LOGOG_LEVEL >= LOGOG_LEVEL_INFO -/** Logs a message at the INFO reporting level. */ -#define LOGOG_INFO( formatstring, ... ) \ - LOGOG_LEVEL_MESSAGE( LOGOG_LEVEL_INFO, formatstring, ##__VA_ARGS__ ) -#else -#define LOGOG_INFO( formatstring, ... ) {}; -#endif - -#if LOGOG_LEVEL >= LOGOG_LEVEL_WARN3 -/** Logs a message at the WARN3 reporting level. */ -#define LOGOG_WARN3( formatstring, ... ) \ - LOGOG_LEVEL_MESSAGE( LOGOG_LEVEL_WARN3, formatstring, ##__VA_ARGS__ ) -#else -#define LOGOG_WARN3( formatstring, ... ) {}; -#endif - -#if LOGOG_LEVEL >= LOGOG_LEVEL_WARN2 -/** Logs a message at the WARN2 reporting level. */ -#define LOGOG_WARN2( formatstring, ... ) \ - LOGOG_LEVEL_MESSAGE( LOGOG_LEVEL_WARN2, formatstring, ##__VA_ARGS__ ) -#else -#define LOGOG_WARN2( formatstring, ... ) {}; -#endif - -#if LOGOG_LEVEL >= LOGOG_LEVEL_WARN1 -/** Logs a message at the WARN1 reporting level. */ -#define LOGOG_WARN1( formatstring, ... ) \ - LOGOG_LEVEL_MESSAGE( LOGOG_LEVEL_WARN1, formatstring, ##__VA_ARGS__ ) -#else -#define LOGOG_WARN1( formatstring, ... ) {}; -#endif - -#if LOGOG_LEVEL >= LOGOG_LEVEL_WARN -/** Logs a message at the WARN reporting level. */ -#define LOGOG_WARN( formatstring, ... ) \ - LOGOG_LEVEL_MESSAGE( LOGOG_LEVEL_WARN, formatstring, ##__VA_ARGS__ ) -#else -#define LOGOG_WARN( formatstring, ... ) {}; -#endif - -#if LOGOG_LEVEL >= LOGOG_LEVEL_ERROR -/** Logs a message at the ERROR reporting level. */ -#define LOGOG_ERROR( formatstring, ... ) \ - LOGOG_LEVEL_MESSAGE( LOGOG_LEVEL_ERROR, formatstring, ##__VA_ARGS__ ) -#else -#define LOGOG_ERROR( formatstring, ... ) {}; -#endif - -#if LOGOG_LEVEL >= LOGOG_LEVEL_CRITICAL -/** Logs a message at the CRITICAL reporting level. */ -#define LOGOG_CRITICAL( formatstring, ... ) \ - LOGOG_LEVEL_MESSAGE( LOGOG_LEVEL_CRITICAL, formatstring, ##__VA_ARGS__ ) -#else -#define LOGOG_CRITICAL( formatstring, ... ) {}; -#endif - -#if LOGOG_LEVEL >= LOGOG_LEVEL_ALERT -/** Logs a message at the ALERT reporting level. */ -#define LOGOG_ALERT( formatstring, ... ) \ - LOGOG_LEVEL_MESSAGE( LOGOG_LEVEL_ALERT, formatstring, ##__VA_ARGS__ ) -#else -#define LOGOG_ALERT( formatstring, ... ) {}; -#endif - -#if LOGOG_LEVEL >= LOGOG_LEVEL_EMERGENCY -/** Logs a message at the EMERGENCY reporting level. */ -#define LOGOG_EMERGENCY( formatstring, ... ) \ - LOGOG_LEVEL_MESSAGE( LOGOG_LEVEL_EMERGENCY, formatstring, ##__VA_ARGS__ ) -#else -#define LOGOG_EMERGENCY( formatstring, ... ) {}; -#endif - -#define LOGOG_SET_LEVEL( level ) \ - ::logog::SetDefaultLevel( level ); - -/** Define this compilation flag if your compilation environment conflicts with - * any of the shorthand logging macros in macro.hpp. - */ -#ifndef LOGOG_USE_PREFIX -/* If you get compilation errors in this section, then define the flag LOGOG_USE_PREFIX during compilation, and these - * shorthand logging macros won't exist -- you'll need to use the LOGOG_* equivalents above. - */ -/* We can't use DEBUG in Win32 unfortunately, so we use DBUG for shorthand here. */ -//! [Shorthand] -/** \sa LOGOG_DEBUG */ -#define DBUG(...) LOGOG_DEBUG( __VA_ARGS__ ) -/** \sa LOGOG_INFO */ -#define INFO(...) LOGOG_INFO( __VA_ARGS__ ) -/** \sa LOGOG_WARN3 */ -#define WARN3(...) LOGOG_WARN3( __VA_ARGS__ ) -/** \sa LOGOG_WARN2 */ -#define WARN2(...) LOGOG_WARN2( __VA_ARGS__ ) -/** \sa LOGOG_WARN1 */ -#define WARN1(...) LOGOG_WARN1( __VA_ARGS__ ) -/** \sa LOGOG_WARN */ -#define WARN(...) LOGOG_WARN( __VA_ARGS__ ) -/** \sa LOGOG_ERROR */ -#define ERR(...) LOGOG_ERROR( __VA_ARGS__ ) -/** \sa LOGOG_ALERT */ -#define ALERT(...) LOGOG_ALERT( __VA_ARGS__ ) -/** \sa LOGOG_CRITICAL */ -#define CRITICAL(...) LOGOG_CRITICAL( __VA_ARGS__ ) -/** \sa LOGOG_EMERGENCY */ -#define EMERGENCY(...) LOGOG_EMERGENCY( __VA_ARGS__ ) -//! [Shorthand] -#endif - -/** Call this function to initialize logog and prepare for logging. - * \sa logog::Initialize() - */ -#define LOGOG_INITIALIZE(...) logog::Initialize( __VA_ARGS__ ); - -/** Call this function to shut down logog and release all memory allocated. - * \sa logog::Shutdown() - */ - -#define LOGOG_SHUTDOWN() logog::Shutdown(); - -} // namespace logog - -#endif // __LOGOG_MACRO_HPP_ diff --git a/ThirdParty/logog/include/message.hpp b/ThirdParty/logog/include/message.hpp deleted file mode 100644 index c7d7dc659c9..00000000000 --- a/ThirdParty/logog/include/message.hpp +++ /dev/null @@ -1,45 +0,0 @@ -/** - * \file message.hpp Messages; items transmitted to a log. - */ - -#ifndef __LOGOG_MESSAGE_HPP__ -#define __LOGOG_MESSAGE_HPP__ - -namespace logog -{ - -/** A message is a piece of text that's actually transmitted to outputs. Messages can be asked to - ** Transmit() themselves once they are created. - **/ -class Message : public Checkpoint -{ -public: - Message( const LOGOG_LEVEL_TYPE level = LOGOG_LEVEL_ALL, - const LOGOG_CHAR *sFileName = NULL, - const int nLineNumber = 0, - const LOGOG_CHAR *sGroup = NULL, - const LOGOG_CHAR *sCategory = NULL, - const LOGOG_CHAR *sMessage = NULL, - const double dTimestamp = 0.0f, - bool *bIsCreated = NULL ); - - virtual ~Message(); - - /** Causes this checkpoint to republish itself to all existing filters after - * unpublishing itself. This can be necessary if the message within this - * message has changed in such a way that the downstream Filter objects - * might react differently to it. - */ - virtual bool Republish(); - - Mutex m_Transmitting; - bool *m_pbIsCreated; -}; - -extern Mutex &GetMessageCreationMutex(); -extern void DestroyMessageCreationMutex(); - -} - - -#endif // __LOGOG_MESSAGE_HPP_ diff --git a/ThirdParty/logog/include/mutex.hpp b/ThirdParty/logog/include/mutex.hpp deleted file mode 100644 index c9916f0eaa5..00000000000 --- a/ThirdParty/logog/include/mutex.hpp +++ /dev/null @@ -1,98 +0,0 @@ -/** - * \file mutex.hpp Defines a mutual exclusion object for the current platform. - */ - -#ifndef __LOGOG_MUTEX_HPP__ -#define __LOGOG_MUTEX_HPP__ - -#ifdef LOGOG_FLAVOR_POSIX -#include <pthread.h> -#endif - -namespace logog -{ - -//! [Mutex] -#ifndef LOGOG_MUTEX - -#ifdef LOGOG_FLAVOR_WINDOWS -#define LOGOG_MUTEX(x) CRITICAL_SECTION (x); -#define LOGOG_MUTEX_INIT(x) InitializeCriticalSection (x) -#define LOGOG_MUTEX_DELETE(x) DeleteCriticalSection (x) -#define LOGOG_MUTEX_LOCK(x) EnterCriticalSection (x) -#define LOGOG_MUTEX_UNLOCK(x) LeaveCriticalSection (x) -#define LOGOG_MUTEX_CTOR(x) -#endif // LOGOG_FLAVOR_WINDOWS - -#ifdef LOGOG_FLAVOR_POSIX -#define LOGOG_MUTEX(x) pthread_mutex_t (x); -#define LOGOG_MUTEX_INIT(x) pthread_mutex_init(x, 0) -#define LOGOG_MUTEX_DELETE(x) pthread_mutex_destroy (x) -#define LOGOG_MUTEX_LOCK(x) pthread_mutex_lock (x) -#define LOGOG_MUTEX_UNLOCK(x) pthread_mutex_unlock (x) -#define LOGOG_MUTEX_CTOR(x) -#endif // LOGOG_FLAVOR_POSIX -#endif // LOGOG_MUTEX - -#ifndef LOGOG_MUTEX -#error You need to define mutex macros for your platform; please see mutex.hpp -#endif - -//! [Mutex] - -/** An object that can only be locked by one thread at a time. Implement the LOGOG_MUTEX_* functions for your platform - * to support the Mutex object. - * A mutex is intended to be used with the ScopedLock object to implement critical sections within logog. - * \sa ScopedLock - */ -class Mutex : public Object -{ -public: - Mutex(); - ~Mutex(); - /** Acquires a lock on the mutex. Only one thread is permitted to lock the mutex at one time. */ - void MutexLock(); - /** Releases the lock on the mutex. */ - void MutexUnlock(); - -protected: - Mutex(const Mutex &); - Mutex & operator = (const Mutex &); - - LOGOG_MUTEX( m_Mutex ) -}; - -/** Asserts a lock while this object exists and is in scope. A ScopedLock should be - * declared in "auto" format, typically on the stack. - */ -class ScopedLock : public Object -{ -public : - /** Instances and locks a ScopedLock. - * \param mutex The mutex to attempt to lock. Program execution halts at this point until the lock can be obtained. - */ - ScopedLock( Mutex &mutex ); - ~ScopedLock(); -protected: - /** A pointer to the lockable mutex. */ - Mutex *m_pMutex; - -private: - /* no default constructor */ - ScopedLock(); - /* no copy constructor */ - ScopedLock( const ScopedLock &other ); -}; - -#ifdef LOGOG_LEAK_DETECTION -extern Mutex s_AllocationsMutex; -extern void LockAllocationsMutex(); -extern void UnlockAllocationsMutex(); -#endif // LOGOG_LEAK_DETECTION - -extern Mutex &GetStringSearchMutex(); -extern void DestroyStringSearchMutex(); - -} - -#endif // __LOGOG_MUTEX_HPP_ diff --git a/ThirdParty/logog/include/node.hpp b/ThirdParty/logog/include/node.hpp deleted file mode 100644 index 8174635b482..00000000000 --- a/ThirdParty/logog/include/node.hpp +++ /dev/null @@ -1,142 +0,0 @@ -/** - * \file node.hpp Base class for higher-level logog objects. - */ - -#ifndef __LOGOG_NODE_HPP__ -#define __LOGOG_NODE_HPP__ - -namespace logog -{ -/** The base class for most high-level logog objects. Represents the publisher-subscriber - ** model within logog. */ -class Node; - -/** An aggregation of nodes. Internally, we choose a set representation because we want to be able to traverse - ** the aggregation quickly while still looking up entries quickly. - **/ -typedef LOGOG_SET< Node *, std::less< Node * >, Allocator< Node * > > NodesType; - -/** A type that double inherits from NodesType and Mutex. A lockable NodesType. Handles the copy - ** case correctly. - **/ -class LockableNodesType : public NodesType, public Mutex -{ -public: - /** A LockableNodesType shouldn't copy the internal Mutex when it is copied, but it - ** should copy all the internal nodes. - **/ - LockableNodesType & operator = (const LockableNodesType &other); -}; - -extern LockableNodesType &GetStaticNodes( void ** pvLocation ); - -/** Returns a reference to the global nodes group. Allocates a new global node group if one does not already - ** exist. - */ -extern LockableNodesType &AllNodes(); - -/** Returns a reference to the group of nodes that are capable of subscribing. Allocates a new global subscriber - ** node group if one does not already exist. - */ -extern LockableNodesType &AllSubscriberNodes(); - -/** Returns a reference to the group of nodes that are capable of both subscribing as well as publishing. Allocates a new global subscriber - ** node group if one does not already exist. - */ -extern LockableNodesType &AllFilters(); - -/** Returns a reference to the group of nodes that represent terminals in the graph, i.e. nodes that can't publish. */ -extern LockableNodesType &AllTargets(); - -class Node : public Object -{ -public: - - /** All nodes self-register as part of the all-nodes database. */ - Node(); - - ~Node(); - - /** Call this function immediately after creating a node (or any of the children of the node class.) This function currently - ** registers the node as part of the list of subscriber nodes, if this node may in fact subscribe. - ** If this node is capable of subscribing at all, then this function registers this node as a possible subscriber. - ** Doing this helps to keep down the number of nodes we search, when we are determining which nodes a new node - ** might subscribe to. We have to do this registration as a second step, after the node is completely - ** initialized, as subscriberness is determined late in initialization. - **/ - virtual void Initialize(); - - /** Can a node send notifications? By default they can; later subclasses may not be able to. */ - virtual bool CanPublish() const; - /** Can a node receive notifications? By default they can; later subclasses may not be able to. */ - virtual bool CanSubscribe() const; - /** Is this node interested in receiving notifications from another topic? */ - virtual bool CanSubscribeTo( const Node & ); - - /** In order to avoid bringing in a bunch of RTTI stuff, we permit nodes to be asked whether they're topics or not */ - virtual bool IsTopic() const; - - /** Causes this node to begin publishing events to the given subscriber. - ** \param subscriber The node to receive published events - ** \return true if the request was successful, false if the subscriber was already subscribed - **/ - virtual bool PublishTo( Node &subscriber ); - - /** Causes this node to attempt to publish to some other nodes. */ - virtual bool PublishToMultiple( LockableNodesType &nodes ); - - /** Causes this node to stop publishing events to this subscriber. - ** \param subscriber The node to stop receiving events - ** \return true if successful, false if the subscriber was not being published to in the first place - **/ - virtual bool UnpublishTo( Node &subscriber ); - - /** Causes this node to attempt to unpublish to some other nodes. */ - virtual bool UnpublishToMultiple( LockableNodesType &nodes ); - - /** Causes this node to start receiving events from the given publisher. - ** \param publisher The node to start receiving events from - ** \return true if successful, false if the publisher was already subscribed - **/ - virtual bool SubscribeTo( Node &publisher ); - - /** Causes this node to attempt to subscribe to some other nodes. */ - virtual bool SubscribeToMultiple( LockableNodesType &nodes ); - - - /** Causes this node to unsubscribe from the given publisher's events. - ** \param publisher The publisher to unsubscribe from - ** \return true if successful, false if the node was already unsubscribed - **/ - virtual bool UnsubscribeTo( Node &publisher ); - - /** Causes this node to attempt to unsubscribe to some other nodes. */ - virtual bool UnsubscribeToMultiple( LockableNodesType &nodes ); - - void Clear(); - - - /** A pointer to any custom data you need to store for a node. */ - void *m_pUserData1; - - /** A pointer to any custom data you need to store for a node. */ - void *m_pUserData2; - -protected: - /** A bunch of nodes that are interested in what this node has to report. */ - LockableNodesType m_Subscribers; - - /** A bunch of nodes that this node interested in hearing from. */ - LockableNodesType m_Publishers; -}; - -extern void DestroyNodesList( void **pvList ); - -/** Destroys all nodes currently recorded. This happens at shutdown time. NOTE! If you have allocated - ** your own logog items and free them yourself AFTER this call, exciting crashes will occur. - **/ -extern void DestroyAllNodes(); - -} - -#endif // __LOGOG_NODE_HPP_ diff --git a/ThirdParty/logog/include/object.hpp b/ThirdParty/logog/include/object.hpp deleted file mode 100644 index 2ecbf5806da..00000000000 --- a/ThirdParty/logog/include/object.hpp +++ /dev/null @@ -1,221 +0,0 @@ -/** - * \file object.hpp Base class for all allocated logog objects. - */ - -#ifndef __LOGOG_OBJECT_HPP__ -#define __LOGOG_OBJECT_HPP__ - -namespace logog -{ - -#ifdef LOGOG_LEAK_DETECTION -/** Iteration over an unordered map is slow, but we only do it at shutdown time. Access to a lookup or insert - ** is very fast. Additionally, we do not allocate leak detection records from our own heap; it saves us from - ** doing a recursive allocation. - **/ -typedef void *PointerType; - -/** A type describing the currently outstanding memory allocations. Note that this type does not inherit from - ** Object, because to do so would create an infinite recursion when memory is allocated. - **/ -typedef LOGOG_UNORDERED_MAP< PointerType, size_t > AllocationsType; - -/** All currently outstanding memory allocations, including their size. */ -extern AllocationsType s_Allocations; - -/** A global function to lock the global allocations mutex. We must do this as a static - ** void because Mutexes depend on Objects. This should probably belong in a class, but then - ** we get recursive class definitions. - ** */ -extern void LockAllocationsMutex(); - -/** A global function to unlock the global allocations mutex. We must do this as a static - ** void because Mutexes depend on Objects. */ -extern void UnlockAllocationsMutex(); -#endif // LOGOG_LEAK_DETECTION - -#ifdef new -#define LOGOG_PREVIOUS_DEFINITION_OF_NEW new -#undef new -#endif -#ifdef delete -#define LOGOG_PREVIOUS_DEFINITION_OF_DELETE delete -#undef delete -#endif //delete - -/** Base class for all objects allocated with logog. */ -class Object -{ -public: - Object(); - /* Some builds complain about ~Object() being virtual... sorry lint :( */ - virtual ~Object(); - /** Initializes an object of size new. */ - void *operator new( size_t nSize ); - /** Initializes an array of size new. */ - void *operator new[](size_t nSize); - - /* There's a wonderful behavior in Windows MFC in debug builds that causes it - * to attempt to redefine NEW with a macro if we're compiling in debug mode - * and we're using Gdiplus as well. In that case, Windows attempts to redefine - * new with a macro for everything that has a new. This wonderful behavior - * is worked around here. See http://support.microsoft.com/kb/317799/EN-US/ - * and http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/0df13145-670e-4070-b0a1-61794b20dff7 - * for more exciting information. - */ -#ifdef _DEBUG -#ifdef LOGOG_FLAVOR_WINDOWS - void* operator new(size_t nSize, LPCSTR lpszFileName, int nLine); - void* operator new[](size_t nSize, LPCSTR lpszFileName, int nLine); - void operator delete(void* ptr, LPCSTR lpszFileName, int nLine); - void operator delete[](void* ptr, LPCSTR lpszFileName, int nLine); -#endif // LOGOG_FLAVOR_WINDOWS -#endif // _DEBUG - - /** Deletes an object pointed to by ptr. */ - void operator delete( void *ptr ); - /** Deletes an object array pointed to by ptr. */ - void operator delete[]( void *ptr ); - - /** Allocates nSize bytes of memory. You must call logog::Initialize() before calling this function. - * \sa Initialize() - */ - static void *Allocate( size_t nSize ); - - /** Deallocate a pointer previously acquired by Allocate(). */ - static void Deallocate( void *ptr ); - }; - -#ifdef LOGOG_PREVIOUS_DEFINITION_OF_NEW -#define new LOGOG_PREVIOUS_DEFINITION_OF_NEW -#endif - -#ifdef LOGOG_PREVIOUS_DEFINITION_OF_DELETE -#define delete GA_PREVIOUS_DEFINITION_OF_DELETE -#endif - -/** An STL-compatible allocator which redirects all memory requests to the logog allocator. Used for all STL-like classes within logog. */ -template <class T> -class Allocator -{ -public: - /** Memory allocation size type. */ - typedef size_t size_type; - /** Memory allocation comparison type. */ - typedef ptrdiff_t difference_type; - /** A pointer to T type. */ - typedef T *pointer; - /** A const pointer to T type. */ - typedef const T *const_pointer; - /** A reference to T type. */ - typedef T &reference; - /** A const reference to T type. */ - typedef const T &const_reference; - /** A value type (T itself). */ - typedef T value_type; - - Allocator() {} - /** Not implemented here -- required by the STL standard though. */ - Allocator( const Allocator & ) {} - - /** Allocate and return n value_types of memory through this allocator. Requires that logog::Initialize() has been called. */ - pointer allocate( size_type n, const void * = 0 ) - { - T *t = ( T * ) Object::Allocate( n * sizeof( value_type ) ); - return t; - } - - /** Frees memory previously allocated by allocate(). */ - void deallocate( void *p, size_type ) - { - if ( p ) - { - Object::Deallocate( p ); - } - } - - /** Returns the address of a reference to T. */ - pointer address( reference x ) const - { - return &x; - } - /** Returns the address of a const reference to T. */ - const_pointer address( const_reference x ) const - { - return &x; - } - /** STL required override for = operator. */ - Allocator<T>& operator=( const Allocator & ) - { - return *this; - } - /** Constructs a new T at location p with value val. */ - void construct( pointer p, const T &val ) - { - new(( T * ) p ) T( val ); - } - /** Destroys a T at location p. */ - void destroy( pointer p ) - { -#ifdef LOGOG_FLAVOR_WINDOWS - // MSVC tends to complain unless we reference this pointer here. - p; -#endif // LOGOG_FLAVOR_WINDOWS - p->~T(); - } - - /** The largest size of an object that can be allocated with this allocator. */ - size_type max_size() const - { - return size_t( -1 ); - } - - /** Rebinding to permit allocations of unknown types. Part of std::allocator definition. - * \param other The other "unknown" type to be permitted access to this allocator */ - template <class U> - struct rebind - { - /** The "other" class that will use this allocator for its allocation. */ - typedef Allocator<U> other; - }; - - /** Required by STL -- unused here. */ - template <class U> - Allocator( const Allocator<U>& ) {} - - /** Permit this allocator to be used for assignment in other classes */ - template <class U> - Allocator &operator=( const Allocator<U>& ) - { - return *this; - } -}; - -/* All specializations of this allocator are interchangeable. */ -template <class T1, class T2> -bool operator== ( const Allocator<T1>&, - const Allocator<T2>& ) -{ - return true; -} -template <class T1, class T2> -bool operator!= ( const Allocator <T1>&, - const Allocator<T2>& ) -{ - return false; -} - -// - -/** Returns the current number of outstanding memory allocations in logog. Returns -1 iff LOGOG_LEAK_DETECTION - ** has not been defined at compile time. - **/ -extern int MemoryAllocations(); - -/** Sends a report to cout describing the current memory allocations that exist. Returns the outstanding number of - ** memory allocations, or -1 iff LOGOG_LEAK_DETECTION is defined. - **/ -extern int ReportMemoryAllocations(); - -} -#endif // __LOGOG_OBJECT_HPP diff --git a/ThirdParty/logog/include/platform.hpp b/ThirdParty/logog/include/platform.hpp deleted file mode 100644 index 67415bd85bd..00000000000 --- a/ThirdParty/logog/include/platform.hpp +++ /dev/null @@ -1,195 +0,0 @@ -/** - * \file platform.hpp Platform specific detection and defines, including STL overrides - */ - -#ifndef __LOGOG_PLATFORM_HPP__ -#define __LOGOG_PLATFORM_HPP__ - -#ifdef DOXYGEN -/** Set this compilation flag to 1 to indicate that this is a Windows-like platform, e.g. Win32, Win64, Xbox 360, etc. */ -#define LOGOG_FLAVOR_WINDOWS 1 -/** Set this compilation flag to 1 to indicate that this is a Posix-like platform, e.g. Linux, PS3, etc. */ -#define LOGOG_FLAVOR_POSIX 1 -#endif - -#ifndef LOGOG_FLAVOR_WINDOWS -#ifndef LOGOG_FLAVOR_POSIX - -/* The user hasn't told us which flavor we're running on, so we must make a guess as to which platform is valid. */ - -/* If this is MSVC, then it's Windows like */ -#ifdef _MSC_VER -#define LOGOG_FLAVOR_WINDOWS 1 -#endif // _MSC_VER - -/* gcc probably means Posix */ -#ifdef __GNUC__ -#define LOGOG_FLAVOR_POSIX 1 -#endif - -#ifdef __CYGWIN__ -#ifdef LOGOG_UNICODE -#error LOGOG_UNICODE not supported on Cygwin platform because Cygwin does not support vsnwprintf -#endif -/* Cygwin lacks vsnprintf support in headers but it's in the libraries. First we - * need to define the constants size_t and va_list, then define vsnprintf */ -#include <cstdio> -#include <cstdlib> -#include <cstdarg> -extern int vsnprintf(char *str, size_t size, const char *format, va_list ap); -#define LOGOG_USE_TR1 1 -#endif // __CYGWIN__ - -#ifdef __linux__ -#define LOGOG_USE_TR1 1 -#endif - -#ifdef __APPLE__ -#ifndef __clang__ -#define LOGOG_USE_TR1 1 -#else -#if !(__has_include(<unordered_map>)) -#define LOGOG_USE_TR1 1 -#endif // !(__has_include(<unordered_map>)) -#endif // __clang -#endif // __APPLE__ - -/* Detect IBM's XL C++ */ -#ifdef __IBMCPP__ -// Enable use of TR1 unorderd_map etc. -#define __IBMCPP_TR1__ 1 -#ifdef __PPC__ -#define LOGOG_FLAVOR_POSIX 1 -#endif // __PPC__ -#endif // __IBMCPP__ - -/* If we've recognized it already, it's a relatively modern compiler */ -#if defined( LOGOG_FLAVOR_WINDOWS ) || defined( LOGOG_FLAVOR_POSIX ) -#define LOGOG_HAS_UNORDERED_MAP 1 -#endif // defined(...) - -/* PS3 */ -#ifdef SN_TARGET_PS3 -#include "proprietary/ps3.hpp" -#endif - -#endif // LOGOG_FLAVOR_POSIX -#endif // LOGOG_FLAVOR_WINDOWS - -#ifdef LOGOG_FLAVOR_WINDOWS -/* Detect Xbox 360 */ -#if _XBOX_VER >= 200 -#include "proprietary/xbox360.hpp" -#else -/* Windows has been detected. */ - -/** Microsoft's CRT library has its own leak detection mechanism. If you don't trust logog's - ** LOGOG_LEAK_DETECTION, you can enable LOGOG_LEAK_DETECTION_WINDOWS to enable - ** Microsoft's version. This really doesn't belong in platform.hpp -- feel - ** free to refactor this into a Windows-specific header. - **/ -#ifdef LOGOG_LEAK_DETECTION_WINDOWS -#define _CRTDBG_MAP_ALLOC -#include <stdlib.h> -#include <crtdbg.h> - -#ifdef _DEBUG -#ifndef DBG_NEW -#define DBG_NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ ) -#define new DBG_NEW -#endif -#endif // _DEBUG -#endif // LOGOG_LEAK_DETECTION_WINDOWS - -#include "windows.h" -#endif // _XBOX_VER -#endif // LOGOG_FLAVOR_WINDOWS - -#ifndef LOGOG_FLAVOR_WINDOWS -#ifndef LOGOG_FLAVOR_POSIX -#error Platform flavor not detected. Please see platform.hpp to configure this platform. -#endif -#endif - -// For the FILE type. -#include <cstdio> -// For POSIX file access. -#include <cstdlib> -// For Ubuntu 11 and ptrdiff_t -#include <cstddef> - -#include <ctime> - -#if defined(LOGOG_LEAK_DETECTION) || defined(LOGOG_INTERNAL_DEBUGGING) -#include <cstdio> -#include <iostream> -#endif // LOGOG_LEAK_DETECTION || LOGOG_INTERNAL_DEBUGGING - -#ifdef LOGOG_FLAVOR_POSIX -#include <sys/time.h> -// for uint64_t -#include <inttypes.h> -#include <wchar.h> -// for strstr support -#include <cstring> -#endif - -// For Unicode support -#include <typeinfo> - -/* ----------------------------------------------------------- */ -/* Here's the stuff your compiler may have a problem with... */ - -//! [STLTypes] - -/** The definition for a hash type in logog. You can replace it here with your own set compatible class if needed. */ -#define LOGOG_HASH std::tr1::hash -/** The definition for an unordered map type in logog. You can replace it here with your own unordered_map compatible class if needed. */ - -#ifdef LOGOG_HAS_UNORDERED_MAP -#ifdef LOGOG_USE_TR1 -#include <tr1/unordered_map> -#else -#include <unordered_map> -#endif // LOGOG_USE_TR1 -#ifdef _GLIBCXX_UNORDERED_MAP -#define LOGOG_UNORDERED_MAP std::unordered_map -#else // _GLIBCXX_UNORDERED_MAP -#define LOGOG_UNORDERED_MAP std::tr1::unordered_map -#endif // _GLIBCXX_UNORDERED_MAP -#else // LOGOG_HAS_UNORDERED_MAP -#include <hash_map> -#define LOGOG_UNORDERED_MAP std::hash_map -#endif // LOGOG_HAS_UNORDERED_MAP - -/** An internal consistency error has been detected in logog. */ -#define LOGOG_INTERNAL_FAILURE abort(); - -/* ----------------------------------------------- */ -/* Here's the stuff that's pretty standard in STL by now. */ - -/** The definition for a pair type in logog. You can replace it here with your own pair compatible class if needed. */ -#define LOGOG_PAIR std::pair -#include <list> -/** The definition for a list type in logog. You can replace it here with your own list compatible class if needed. */ -#define LOGOG_LIST std::list -#include <vector> -/** The definition for a vector type in logog. You can replace it here with your own vector compatible class if needed. */ -#define LOGOG_VECTOR std::vector -#include <set> -/** The definition for a set type in logog. You can replace it here with your own set compatible class if needed. */ -#define LOGOG_SET std::set -/** The definition for STL "equal to" in logog. You can replace it here with your own set compatible class if needed. */ -#define LOGOG_EQUAL_TO std::equal_to - -//! [STLTypes] - -/** The default port number that logog uses to communicate via TCP/UDP */ -#define LOGOG_DEFAULT_PORT 9987 - -/** We use va_list for formatting messages. */ -#include <cstdarg> - - - -#endif // __LOGOG_PLATFORM_HPP diff --git a/ThirdParty/logog/include/socket.hpp b/ThirdParty/logog/include/socket.hpp deleted file mode 100644 index 8417eeb89f9..00000000000 --- a/ThirdParty/logog/include/socket.hpp +++ /dev/null @@ -1,150 +0,0 @@ -/** - * \file socket.hpp Cross-platform socket abstractions - */ - -/** - * \todo Socket support is unfinished and is not working yet. Please review socket.hpp if you'd like to implement - * a cross-platform socket abstraction. - */ -#ifndef __LOGOG_SOCKET_HPP_ -#define __LOGOG_SOCKET_HPP_ - -#ifdef LOGOG_FLAVOR_WINDOWS -#pragma comment(lib, "wsock32.lib") -#endif - -#include <memory.h> - -namespace logog -{ -/** A sending or receiving socket to be used as a target. */ -class Socket : public Target -{ -public: - static int Initialize() - { - static bool bInitialized = false; - - if ( !bInitialized ) - { -#ifdef LOGOG_FLAVOR_WINDOWS - WORD wVersionRequested; - WSADATA wsaData; - int err; - wVersionRequested = MAKEWORD( 2, 2 ); - - err = WSAStartup( wVersionRequested, &wsaData ); - - if ( err != 0 ) - { -#ifdef LOGOG_INTERNAL_DEBUGGING - LOGOG_COUT << _LG("WSAStartup failed with error: ") << err << endl; -#endif - return 1; - } - -#endif - } - - bInitialized = true; - - return 0; - } - - static void Shutdown() - { -#ifdef LOGOG_FLAVOR_WINDOWS - WSACleanup(); -#endif - } - - static const int MAXHOSTNAME = 255; - - Socket( - int type = SOCK_STREAM, - int port = LOGOG_DEFAULT_PORT - ) - { - m_Socket = -1; - m_nType = type; - m_nPort = port; - } - - virtual void Close() - { -#ifdef LOGOG_FLAVOR_WINDOWS - closesocket( m_Socket ); -#endif -#ifdef LOGOG_FLAVOR_POSIX - close( m_Socket ); -#endif - } - -#ifdef NYI - virtual int Create( int type, - int port ) - { - char myname[MAXHOSTNAME+1]; - int err; - struct sockaddr_in sa; - struct hostent *hp; - - memset( &sa, 0, sizeof( struct sockaddr_in ) ); /* clear our address */ - gethostname( myname, MAXHOSTNAME ); /* who are we? */ - hp= gethostbyname( myname ); /* get our address info */ - - if ( hp == NULL ) /* we don't exist !? */ - return -1; - - sa.sin_family= hp->h_addrtype; /* this is our host address */ - sa.sin_port= (u_short)htons( (u_short)port ); /* this is our port number */ - - if (( m_Socket = socket( AF_INET, type, 0 ) ) < 0 ) /* create socket */ - return -1; - - if ( bind( m_Socket, (struct sockaddr*) &sa, sizeof( struct sockaddr_in ) ) < 0 ) - { - Close(); - return -1; - } - - if (( err = SetNonBlocking() ) != 0 ) - return err; - } - -#endif // NYI - - virtual int SetNonBlocking() - { - int err; - -#ifdef LOGOG_FLAVOR_POSIX - int flags; - flags = socket_fcntl( m_Socket, F_GETFL, 0 ); - flags |= O_NONBLOCK; - err = socket_fcntl( m_Socket, F_SETFL, flags ); -#endif - -#ifdef LOGOG_FLAVOR_WINDOWS - unsigned long parg; - parg = 1; - err = ioctlsocket( m_Socket, FIONBIO, &parg ); -#endif - return err; - } - - virtual int Output( const LOGOG_STRING &output ) = 0; - -protected: - int m_Socket; - int m_nType; - int m_nPort; -}; - -class SocketServer : Socket -{ - -}; -} - -#endif // __LOGOG_CHECKPOINT_HPP_ diff --git a/ThirdParty/logog/include/statics.hpp b/ThirdParty/logog/include/statics.hpp deleted file mode 100644 index 938bd3d23a6..00000000000 --- a/ThirdParty/logog/include/statics.hpp +++ /dev/null @@ -1,74 +0,0 @@ -/*! - * \file statics.hpp Static variables simultaneously assigned for all instances of logog. - */ - -#ifndef __LOGOG_STATICS_HPP__ -#define __LOGOG_STATICS_HPP__ - - -namespace logog -{ - -class Timer; -class Formatter; -class Target; -class Mutex; - -extern void DestroyAllNodes(); -extern void DestroyGlobalTimer(); -extern void DestroyDefaultFormatter(); -extern void DestroyStringSearchMutex(); -extern void DestroyMessageCreationMutex(); - -/* Technically this information should be in node.hpp but statics is responsible for - * this global list. - */ -class Statics -{ -public: - /** A pointer to the malloc() compatible function used by logog. See logog::Initialize() - ** for more details. */ - void *(*s_pfMalloc)( size_t ); - /** A pointer to the free() compatible function used by logog. See logog::Initialize() - ** for more details. */ - void (*s_pfFree)( void * ); - /** Pointers to all the currently existing nodes in the network. */ - void *s_pAllNodes; - /** Pointers to only those nodes that are capable of subscribing. */ - void *s_pAllSubscriberNodes; - /** Pointers to only those nodes that are capable of subscribing and publishing. */ - void *s_pAllFilterNodes; - /** Pointers to the group of all valid targets. */ - void *s_pAllTargets; - /** Pointer to the default filter, if any. */ - void *s_pDefaultFilter; - /** The default global shared timer. All events are generally in reference to this timer, though yoy may create your own timers. */ - Timer *s_pTimer; - /** A lock on the KMP search for all strings. Prevents mutex explosions. */ - void *s_pStringSearchMutex; - /** A lock for creating messages. Prevents dual message creation from multiple threads. */ - Mutex *s_pMessageCreationMutex; - /** The default Formatter for all targets. Targets may use their individual formatters as well if preferred. */ - Formatter *s_pDefaultFormatter; - /** The number of sockets created. */ - int s_nSockets; - /** A pointer to this object; used for final destruction. */ - Statics *s_pSelf; - - Statics(); - ~Statics(); - - /** Resets all statics to startup values. Releases memory allocated by statics. */ - void Reset(); - -}; - -extern Statics &Static(); - -/** Destroys the Static() structure. Calls to Static() after calling DestroyStatic() will probably crash your - ** program. - */ -extern void DestroyStatic(); - -} -#endif // __LOGOG_STATICS_HPP diff --git a/ThirdParty/logog/include/string.hpp b/ThirdParty/logog/include/string.hpp deleted file mode 100644 index e069b3a26fc..00000000000 --- a/ThirdParty/logog/include/string.hpp +++ /dev/null @@ -1,115 +0,0 @@ -/** - * \file string.hpp Defines the logog string class. - */ -#ifndef __LOGOG_STRING_HPP__ -#define __LOGOG_STRING_HPP__ - -/** \def LOGOG_UNICODE - ** Define this typedef in order to support wide characters in all logog strings. - ** \sa _LG - ** */ - -#ifdef LOGOG_UNICODE -/** logog has detected Unicode; therefore a LOGOG_CHAR is a wide character. */ -typedef wchar_t LOGOG_CHAR; -/** This is a naughty little hack. If we're using Unicode, then we append an - * L to your const string. However, we have several situations in which that string will actually be a NULL or 0 - * value in code, and the string will be rendered as L0 or LNULL. In that case, we catch it with yet another - * macro. Hacky, but seems to do the trick. Beware of conflicts with existing code though...! - */ -#define L0 (const LOGOG_CHAR *)'\0' -#define LNULL (const LOGOG_CHAR *)'\0' -#define L__null (const LOGOG_CHAR *)'\0' - -/* Two indirect references are necessary in order to expand a string and append the L to it. */ -#define LOGOG_CONST_STRING_INDIRECT(x) L ## x -/* This macro will cause a const string to be stored as a Unicode string on a Unicode build. */ -#define LOGOG_CONST_STRING(x) LOGOG_CONST_STRING_INDIRECT(x) -#define LOGOG_COUT std::wcout -#define LOGOG_CERR std::wcerr - -#else // LOGOG_UNICODE - -/** logog has not detected Unicode; therefore a LOGOG_CHAR is simply a char. */ -typedef char LOGOG_CHAR; -/** This macro will cause a const string to be stored as an ANSI string on an ANSI build, and as a Unicode string - * on a Unicode build. - */ -#define LOGOG_CONST_STRING(x) (x) -#define LOGOG_COUT std::cout -#define LOGOG_CERR std::cerr -#endif // LOGOG_UNICODE - -/** If this constant is defined, then you can use the shorthand macro _LG in your code to represent a constant - * string. - */ -#ifndef LOGOG_USE_PREFIX -/** The _LG() macro is defined only if LOGOG_USE_PREFIX is not defined. _LG() can be used to describe - ** a const string that is compiled to either as Unicode - * or ANSI, based on the setting of the LOGOG_UNICODE flag. - * _LG() is not needed if you don't need Unicode support. If you want your messages to work with both Unicode - * as well as ANSI builds of logog, preface them like this: _LG("This const string works on Unicode as well as ANSI.") - */ -#define _LG( x ) LOGOG_CONST_STRING( x ) -#endif - -namespace logog -{ - class String : public Object - { - public: - - static const size_t npos = (size_t) -1; - - String(); - virtual ~String(); - virtual void Free(); - static size_t Length( const LOGOG_CHAR *chars ); - - String( const String &other ); - String( const LOGOG_CHAR *pstr ); - String & operator =( const String & other); - String & operator =( const LOGOG_CHAR *pstr ); - size_t size() const; - virtual void clear(); - virtual size_t reserve( size_t nSize ); - virtual size_t reserve_for_int(); - virtual operator const LOGOG_CHAR *() const; - virtual size_t assign( const String &other ); - virtual size_t append( const String &other ); - virtual size_t append( const LOGOG_CHAR *other ); - virtual void reverse( LOGOG_CHAR* pStart, LOGOG_CHAR* pEnd); - virtual size_t assign( const int value ); - virtual size_t append( const LOGOG_CHAR c ); - virtual bool is_valid() const; - virtual size_t assign( const LOGOG_CHAR *other, const LOGOG_CHAR *pEnd = NULL ); - - virtual size_t find( String &other ) const; - virtual void format( const LOGOG_CHAR *cFormatString, ... ); - virtual void format_va( const LOGOG_CHAR *cFormatString, va_list args ); - - virtual const LOGOG_CHAR* c_str() const; - - protected: - virtual void Initialize(); - - /* Code modified from http://www-igm.univ-mlv.fr/~lecroq/string/node8.html#SECTION0080 */ - void preKmp(size_t m); - - size_t KMP( const LOGOG_CHAR *y, size_t n ); - -#define LOGOG_MAX( a, b ) ( ( a > b ) ? a : b ) - - size_t BM(LOGOG_CHAR *y, size_t n); - - LOGOG_CHAR *m_pBuffer; - LOGOG_CHAR *m_pOffset; - LOGOG_CHAR *m_pEndOfBuffer; - size_t *m_pKMP; - bool m_bIsConst; - }; -} - -#define LOGOG_STRING ::logog::String - -#endif // __LOGOG_STRING_HPP_ diff --git a/ThirdParty/logog/include/target.hpp b/ThirdParty/logog/include/target.hpp deleted file mode 100644 index a5844135013..00000000000 --- a/ThirdParty/logog/include/target.hpp +++ /dev/null @@ -1,176 +0,0 @@ -/** - * \file target.hpp Abstractions representing logging outputs. - */ - -#ifndef __LOGOG_TARGET_HPP_ -#define __LOGOG_TARGET_HPP_ - -namespace logog -{ -/** A target is abstraction representing an output stream from logog. cerr, cout, and syslog, and other logging formats are supported. - ** Targets do not validate their received data. Their only job is to render it on a call to Receive() to their supported target - ** type. Targets should generally make sure to handle calls on multiple threads -- they should make sure to avoid overlapping - ** outputs from multiple threads correctly. This base class handles this serialization in the Receive() function. - ** Children of this class are expected to implement the Output() function to do the actual output. - **/ -class Target : public TopicSink -{ - friend class LogBuffer; -public : - Target(); - virtual ~Target(); - - /** Sets the current formatter for this target. */ - void SetFormatter( Formatter &formatter ); - - /** Returns a reference to the current formatter for this target. */ - Formatter &GetFormatter() const; - - /** All targets must implement the Output function. This function outputs the provided string to the - * output that the target represents. - * \return Zero if no error has occurred; an error code (generally propagated - * from the operating system) if an error has occurred. - */ - virtual int Output( const LOGOG_STRING &data ) = 0; - - /** Receives a topic on behalf of this target. A mutex prevents race conditions from occurring when - ** multiple threads attempt to write to this target at the same time. - ** \return Zero if no error has occurred; an error code (generally propagated from the operating - ** system) if an error has occurred. - */ - virtual int Receive( const Topic &topic ); - - /** Does this target want its formatter to null terminate its strings? */ - bool GetNullTerminatesStrings() const { return m_bNullTerminatesStrings; } - - /** Tells this target whether to request its formatter to null terminate its strings. */ - void SetNullTerminatesStrings(bool val) { m_bNullTerminatesStrings = val; } - - -protected: - /** A pointer to the formatter used for this output. */ - Formatter *m_pFormatter; - /** A mutex on the Receive() function. */ - Mutex m_MutexReceive; - /** Does this target cause its formatter to null-terminate its output strings? File and buffer outputs - ** don't require null terminated strings, but line outputs do. - **/ - bool m_bNullTerminatesStrings; -}; - -/** A target representing the cerr stream. */ -class Cerr : public Target -{ - virtual int Output( const LOGOG_STRING &data ); -}; - -/** A target representing the cout stream. */ -class Cout : public Target -{ - virtual int Output( const LOGOG_STRING &data ); -}; - -/** A target representing the debugger stream on Win32 targets. This only logs information - * on Windows like platforms. - */ -class OutputDebug : public Target -{ - virtual int Output( const LOGOG_STRING &data ); -}; - -/** A LogFile renders received messages to a file. Provide the name of the file to be rendered to as - * a parameter to the construction of the LogFile() object. Destroying a LogFile object will cause the - * output file to be closed. LogFile objects always append to the output file; they do not delete the previous - * log file. - */ -class LogFile : public Target -{ -public: - /** Creates a LogFile object. - * \param sFileName The name of the file to be created. - * Since file names do not support Unicode on most systems, there is no option to create - * a filename with a LOGOG_CHAR. - */ - LogFile(const char *sFileName); - - /** Closes the log file. */ - virtual ~LogFile(); - - /** Opens the log file on first write. */ - virtual int Open(); - - /** This function makes a guess as to the correct BOM for this file, and attempts - ** to write it into the file. It does this by considering the size of LOGOG_CHAR - ** as well as considering the current endianness of this system. This guess - ** may be incorrect. - **/ - virtual void WriteUnicodeBOM(); - - /** Writes the message to the log file. */ - virtual int Output( const LOGOG_STRING &data ); - - /** Should a Unicode BOM be written to the beginning of this log file, if the log file - * was previously empty? By default a BOM is written to a log file if LOGOG_UNICODE - * is enabled. */ - bool m_bWriteUnicodeBOM; - -protected: - char *m_pFileName; - bool m_bFirstTime; - bool m_bOpenFailed; - FILE *m_pFile; - - /** Does the actual fwrite to the file. Call Output() instead to handle error conditions better. */ - virtual int InternalOutput( size_t nSize, const LOGOG_CHAR *pData ); - -private: - LogFile(); -}; - -/** A buffering target. Stores up to a fixed buffer size of output and then renders that output to another - * target. Can be used for buffering log output in memory and then storing it to a log file upon program completion. - * To use, create another target (such as a LogFile) and then create a LogBuffer, providing the other target - * as a parameter to the creation function. - */ -class LogBuffer : public Target -{ -public: - LogBuffer( Target *pTarget = NULL, - size_t s = LOGOG_DEFAULT_LOG_BUFFER_SIZE ); - virtual ~LogBuffer(); - - /** Changes the current rendering target. NOTE: This function does no locking on either the target or - * this object. Program accordingly. - */ - virtual void SetTarget( Target &t ); - - /** Inserts a range of LOGOG_CHAR objects into this buffer. The characters should consist of a null-terminated - * string of length size. Providing anything else as input creates undefined behavior. - */ - virtual int Insert( const LOGOG_CHAR *pChars, size_t size ); - - /** Dumps the current contents of the buffer to the output target. */ - virtual int Dump(); - - virtual int Output( const LOGOG_STRING &data ); - -protected: - virtual void Allocate( size_t size ); - - virtual void Deallocate(); - - /** The non-changing pointer to the basic buffer. */ - LOGOG_CHAR *m_pStart; - /** The current write offset into the buffer. */ - LOGOG_CHAR *m_pCurrent; - /** The position in the buffer after which no data may be written. */ - LOGOG_CHAR *m_pEnd; - /** The size of the buffer in LOGOG_CHAR primitives. */ - size_t m_nSize; - /** A pointer to the target to which the buffer will be rendered upon calling Dump(). */ - Target *m_pOutputTarget; -}; - -} - -#endif // __LOGOG_TARGET_HPP_ diff --git a/ThirdParty/logog/include/thread.hpp b/ThirdParty/logog/include/thread.hpp deleted file mode 100644 index c37e3045d46..00000000000 --- a/ThirdParty/logog/include/thread.hpp +++ /dev/null @@ -1,121 +0,0 @@ -/** - * \file thread.hpp Defines a thread object for the current platform. - */ - -#ifndef __LOGOG_THREAD_HPP__ -#define __LOGOG_THREAD_HPP__ - -//! [Thread] -#ifndef LOGOG_THREAD -#if defined(LOGOG_FLAVOR_WINDOWS) - -#include <process.h> - -typedef unsigned int (WINAPI * __logog_pThreadFn )(void *); - -#define LOGOG_THREAD HANDLE - -#define LOGOG_THREAD_CREATE(handle, attr, pStartFn, arg) \ - (int)((*handle=(HANDLE) _beginthreadex (NULL, /* security */ \ - 0, /* stack size */ \ - (__logog_pThreadFn)pStartFn, /* start address */ \ - arg, /* pv argument */ \ - 0, /* init flag */ \ - NULL /*thread addr */ ))==NULL) - -#define LOGOG_THREAD_JOIN( thread ) \ - ( (WaitForSingleObject(( thread ),INFINITE)!=WAIT_OBJECT_0) \ - || !CloseHandle(thread) \ - ) -#define LOGOG_THREAD_SELF (LOGOG_THREAD)GetCurrentThreadId() - -#endif // defined(LOGOG_FLAVOR_WINDOWS) - -#if defined(LOGOG_FLAVOR_POSIX) - -#define LOGOG_THREAD \ - pthread_t - -#define LOGOG_THREAD_CREATE(handle, attr, pStartFn, arg) \ - pthread_create(handle, attr, pStartFn, arg) - -#define LOGOG_THREAD_JOIN(thread) \ - pthread_join(thread, NULL) - -#define LOGOG_THREAD_SELF \ - pthread_self() - -#endif - -#endif // LOGOG_THREAD - -#ifndef LOGOG_THREAD -#error You need to define mutex macros for your platform; please see mutex.hpp -#endif - -//! [Thread] - -namespace logog -{ - -/** A thread abstraction. Requires definition of macros to describe how to create, start, and wait for threads to terminate. */ -class Thread -{ -public: - - /** A type describing the entry point of a function. */ - typedef void* (*ThreadStartLocationType)(void *); - - /** Creating a new thread requires the starting location as well as a single void pointer to the argument to a function. */ - Thread(ThreadStartLocationType fnThreadStart, void* pvParams) - { - m_pFnThreadStart = fnThreadStart; - m_pvThreadParams = pvParams; - } - - /** Cause the created thread to commence execution asynchronously. */ - int Start() - { - return LOGOG_THREAD_CREATE(&m_Thread, NULL, m_pFnThreadStart, m_pvThreadParams); - } - - /** Causes the current thread to wait for completion of the provided thread. - ** \param thread The thread object to wait for - */ - static int WaitFor(const Thread& thread) - { - return LOGOG_THREAD_JOIN(thread.m_Thread); - } - -#ifdef LOGOG_THREAD_JOIN_SUPPORT - static void Join(const std::vector<Thread*>& threads) - { - for(size_t i=0; i<threads.size(); i++) - WaitFor(*threads.at(i)); - } - - static void Delete(std::vector<Thread*>& threads) - { - for(size_t i=0; i<threads.size(); i++) - delete threads.at(i); - threads.clear(); - } -#endif // LOGOG_THREAD_JOIN_SUPPORT - - /** Returns a LOGOG_THREAD representing the calling process. */ - static LOGOG_THREAD GetCurrent() - { - return (LOGOG_THREAD) LOGOG_THREAD_SELF ; - } - -private: - /** A platform-specific identifier for the calling process. */ - LOGOG_THREAD m_Thread; - /** The entry point for this thread. */ - ThreadStartLocationType m_pFnThreadStart; - /** An arbitrary argument to the thread entry point. */ - void* m_pvThreadParams; -}; -} - -#endif // __LOGOG_THREAD_HPP_ \ No newline at end of file diff --git a/ThirdParty/logog/include/timer.hpp b/ThirdParty/logog/include/timer.hpp deleted file mode 100644 index 579103b2bb7..00000000000 --- a/ThirdParty/logog/include/timer.hpp +++ /dev/null @@ -1,42 +0,0 @@ -/** - * \file timer.hpp Time management. - */ - -#ifndef __LOGOG_TIMER_HPP__ -#define __LOGOG_TIMER_HPP__ - -namespace logog -{ -/** A value for a high resolution timer on this platform. Time representations are in seconds. */ -typedef double LOGOG_TIME; - -/** A high-resolution timer. Reports in seconds. */ -class Timer : public Object -{ -public: - Timer(); - - /** Returns the offset from the time since the creation of the timer, or the time set by the most - ** recent Set() call. Time is assumed to be a value in LOGOG_TIME seconds. - ** \sa LOGOG_TIME - **/ - LOGOG_TIME Get(); - - /** Sets the current time for this timer. */ - void Set( LOGOG_TIME time ); - -protected: -#ifdef LOGOG_FLAVOR_WINDOWS - /** Windows only. Stores the number of high resolution timer ticks per second. */ - double m_fTicksPerMicrosecond; -#endif - /** Zero, if no calls to Set() have been made; else the value of the previous call to Set(). */ - LOGOG_TIME m_fStartTime; -}; - -extern Timer &GetGlobalTimer(); -extern void DestroyGlobalTimer(); - -} - -#endif // __LOGOG_TIMER_HPP_ diff --git a/ThirdParty/logog/include/topic.hpp b/ThirdParty/logog/include/topic.hpp deleted file mode 100644 index ae3d6f3e5af..00000000000 --- a/ThirdParty/logog/include/topic.hpp +++ /dev/null @@ -1,203 +0,0 @@ -/** - * \file topic.hpp Topics -- subjects of interests for publishers and - * subscribers to communicate about - */ - -#ifndef __LOGOG_TOPIC_HPP__ -#define __LOGOG_TOPIC_HPP__ - -namespace logog -{ - -/** A subject that nodes can choose to discuss with one another. - ** Subscribers generally have very general topics, while publishers generally have very specific topics. - **/ -class Topic : public Node -{ - friend class TopicLevel; - friend class TopicGroup; - -public: - /** Creates a topic. Note the defaults for creating a topic -- these defaults are equivalent to "no setting" - ** for those fields. - **/ - Topic( const LOGOG_LEVEL_TYPE level = LOGOG_LEVEL_ALL, - const LOGOG_CHAR *sFileName = NULL, - const int nLineNumber = 0, - const LOGOG_CHAR *sGroup = NULL, - const LOGOG_CHAR *sCategory = NULL, - const LOGOG_CHAR *sMessage = NULL, - const double dTimestamp = 0.0f ); - - /** Topics are always topics. We use this to avoid any RTTI dependence. */ - virtual bool IsTopic() const; - - /** Causes this topic to publish another topic to all its subscribers. - ** \return 0 if successful, non-zero if this topic failed to send the publication to all subscribers */ - virtual int Send( const Topic &node ); - - /** Causes this topic to publish itself to all its subscribers. */ - virtual int Transmit(); - - /** Permits this node to receive a publication from another node, and act upon it. - ** \param node The node constituting the publication - ** \return 0 if successful, non-zero if this node failed to process the publication - **/ - virtual int Receive( const Topic &node ); - - /** Is this topic interested in receiving notifications from another topic? This function implements - ** a generic (slow) test that should work for all topic types. This function only checks fields - ** that have previously been set on this topic -- fields that have not been set will not limit this - ** topic's ability to subscribe. If any of the previously set fields does not "match" the other topic, - ** this function will return false. The matching function behaves slightly differently from field to - ** field. - ** - In the topic level case, this function rejects a publisher with a lower topic level than our - ** own. - ** - In the group, category, file name and message case, this function rejects a publisher if our - ** own group/category/file name or message cannot be found as a substring in the possible publisher. - ** This functionality permits very simple pattern matching functionality (i.e. show me all the message - ** lines that have the word "upload" in them, regardless of their log level.) - ** - In the line number case, this function rejects a publisher unless the line number matches exactly. - ** - In the timestamp case, this function rejects a publisher if their timestamp is before our own. - ** \param otherNode The topic which we are considering subscribing to - **/ - virtual bool CanSubscribeTo( const Node &otherNode ); - - virtual bool CanSubscribeCheckTopic( const Topic &other ); - - /** Causes this topic to begin publishing events to the given subscriber. - ** \param subscriber The node to receive published events - ** \return true if the request was successful, false if the subscriber was already subscribed - **/ - virtual bool PublishTo( Node &subscriber ); - - - - /** Formats the message in this topic given a sprintf-style set of arguments. - ** This function can be used to set the current message in this topic to a string with a variable number of parameters. - **/ - virtual void Format( const LOGOG_CHAR *cFormatMessage, ... ); - - const LOGOG_STRING &FileName() const; - void FileName( const LOGOG_STRING &s ); - - const LOGOG_STRING &Message() const; - void Message( const LOGOG_STRING &s ); - - const LOGOG_STRING &Category() const; - void Category( const LOGOG_STRING &s ); - - const LOGOG_STRING &Group() const; - void Group( const LOGOG_STRING &s ); - - int LineNumber() const; - void LineNumber( const int num ); - - LOGOG_LEVEL_TYPE Level() const; - void Level( LOGOG_LEVEL_TYPE level ); - - LOGOG_TIME Timestamp() const; - void Timestamp( const LOGOG_TIME t ); - - TOPIC_FLAGS GetTopicFlags() const; - -protected: - /** An array (not an STL vector) of string properties for this topic. */ - LOGOG_STRING m_vStringProps[ TOPIC_STRING_COUNT ]; - /** An array (not an STL vector) of integer properties for this topic. */ - int m_vIntProps[ TOPIC_INT_COUNT ]; - /** The time associated with this topic. Usually this field is updated when a topic is triggered. Times need not be associated - ** with a particular topic, in which case this value is zero. - ** */ - LOGOG_TIME m_tTime; - /** A bitfield representing the "important" fields in this topic. Not all fields are considered to contain important information - ** all the time. A logical OR of the TOPIC_*_FLAG fields. - ** \sa TopicBitsType - **/ - TOPIC_FLAGS m_TopicFlags; -}; - -/** A topic that permits both publishing as well as subscribing. This class is functionally same as a Topic; we've added it - ** as a class for clarity when referring to different topic types. Filters should be instantiated only after outputs are - ** instantiated, as they automatically search for and publish to targets. If you instantiate a filter before you - ** instantiate a target, you will need to call PublishTo( theTarget ) yourself before using the target. - **/ -class Filter : public Topic -{ -public: - Filter( const LOGOG_LEVEL_TYPE level = LOGOG_LEVEL_ALL, - const LOGOG_CHAR *sFileName = NULL, - const int nLineNumber = 0, - const LOGOG_CHAR *sGroup = NULL, - const LOGOG_CHAR *sCategory = NULL, - const LOGOG_CHAR *sMessage = NULL, - const double dTimestamp = 0.0f ); -}; - -/** Returns a reference to the unique default filter instantiated with logog. */ -extern Filter &GetDefaultFilter(); - -/** Sets the current reporting level for the default filter. All messages - * connected to the filter after this point should obey this default - * level setting. - */ -void SetDefaultLevel( LOGOG_LEVEL_TYPE level ); - -/** A topic with the group name being the only field of significance. */ -class TopicGroup : public Topic -{ -public: - TopicGroup( const LOGOG_CHAR *sGroup = NULL ); - - virtual bool CanSubscribeCheckTopic( const Topic &other ); -}; - -/** A topic with the level being the only field of significance. */ -class TopicLevel : public Topic -{ -public: - TopicLevel( const LOGOG_LEVEL_TYPE level ); - virtual bool CanSubscribeCheckTopic( const Topic &other ); -}; - -/** A topic that is also a source. */ -class TopicSource : public Topic -{ -public: - TopicSource( const LOGOG_LEVEL_TYPE level = LOGOG_LEVEL_ALL, - const LOGOG_CHAR *sFileName = NULL, - const int nLineNumber = 0, - const LOGOG_CHAR *sGroup = NULL, - const LOGOG_CHAR *sCategory = NULL, - const LOGOG_CHAR *sMessage = NULL, - const double dTimestamp = 0.0f ); - - /** Returns false. Sources do not subscribe. */ - virtual bool SubscribeTo( Node & ); - - /** Returns false. Sources do not unsubscribe. */ - virtual bool UnsubscribeTo( Node & ); - virtual bool CanSubscribe() const; -}; - -/** A topic that is also a sink. */ -class TopicSink : public Topic -{ -public: - virtual bool IsTopic() const; - - /** Sinks do not add themselves to the list of interested subscribers. That's up to intermediate topics to decide. */ - virtual void Initialize(); - - /** Returns false. Sinks do not publish. */ - virtual bool PublishTo( Node & ); - - /** Returns false. Sinks do not unpublish. */ - virtual bool UnpublishTo( Node & ); - - /** Returns false. Sinks do not publish. */ - virtual bool CanPublish() const; -}; -} - -#endif // __LOGOG_TOPIC_HPP_ diff --git a/ThirdParty/logog/include/unittest.hpp b/ThirdParty/logog/include/unittest.hpp deleted file mode 100644 index 3441636bd56..00000000000 --- a/ThirdParty/logog/include/unittest.hpp +++ /dev/null @@ -1,151 +0,0 @@ -/** - * \file unittest.hpp Unit testing interface; may be used for other programs as well. - */ -#ifndef __LOGOG_UNITTEST_HPP -#define __LOGOG_UNITTEST_HPP - -#include <iostream> -#include <string> - -namespace logog -{ - -/** - * \page unittesting Unit test framework - * - * A unit test framework is included with logog. This framework was intended specifically to exercise logog functionality, but it may also - * be used as a general purpose test framework. - * - * A typical test program will look like this: - * \code - * int main( int argc, char *argv[] ) - * { - * int nResult; - * nResult = RunAllTests(); - * ShutdownTests(); - * return nResult; - * } - * \endcode - * - * To define a unit test, create a function of the following form: - * - * \code - * UNITTEST( AdditionTest ) - * { - * logog::Initialize(); - * - * int nResult = 0; - * - * if ( 2 + 2 == 4 ) - * { - * LOGOG_COUT << _LG("Sane.") << endl; - * } - * else - * { - * LOGOG_COUT << _LG("Insane!") << endl; - * nResult = 1; - * } - * - * logog::Shutdown(); - * - * return nResult; - * - * }; - * \endcode - * - * The UNITTEST() macro defines a unique UnitTest object that encompasses your function. - * Your function should take no parameters and return an integer value. It should return - * zero if the test was successful, and non-zero if the test was unsuccesful. If any - * of your tests fail, the stub main() program will propagate that error to the operating - * system, which in turn can be used to halt an automated build system. - * - * The unit testing framework is known to leak memory. However, the underlying logog macros are not known to leak memory (let us know - * if you find any leaks). - */ - -/** A standard string type, used for labelling a test. We don't use LOGOG_STRING here because that class is mutable - ** and it allocates memory. - **/ -typedef const char * TestNameType; -class UnitTest; - -/** A registry for all tests. All tests are instanced using the UNITTEST() macro and stored in the LogogTestRegistry. - ** \ref UNITTEST - **/ -typedef LOGOG_LIST< UnitTest * > TestRegistryType; - -/** All unit tests are registered in here at program initialization time. */ -extern TestRegistryType &LogogTestRegistry(); - -/** A TestSignup is responsible for recording each instanced UnitTest in the test registry. */ -class TestSignup -{ -public: - /** Creates a new TestSignup. Only called from constructor for UnitTest. */ - TestSignup( UnitTest *pTest ); - -protected: - /** A pointer back to the UnitTest that created this TestSignup */ - UnitTest *m_pTest; -private: - TestSignup(); -}; - -/** The base class for unit testing. Children of UnitTest are instanced by the UNITTEST() macro. */ -class UnitTest -{ -public: - /** Instances a test. An instanced test is automatically executed when the RunAllTests() function is called. - * \param sTestName A string representing the name of this test. - */ - UnitTest( const TestNameType &sTestName ); - - virtual ~UnitTest(); - /** Returns the name of this UnitTest provided at construction time. */ - virtual TestNameType &GetName(); - /** Child classes of UnitTest() must provide a RunTest() function. A RunTest() function must initialize logog, conduct its - ** tests, and return 0 if the test was successful, a non-0 value otherwise. If any RunTest() function returns any value other than - ** zero, then the main RunAllTests() function will return non zero as well. - */ - virtual int RunTest() = 0; - - /** This function is called during ShutdownTests(). Its purpose is to free - ** the internal structures allocated by the UnitTest without freeing - ** the UnitTest itself. Microsoft's leak detector will flag the internals - ** of a UnitTest as a leak unless these internals are explicitly destroyed - ** prior to exit(). - **/ - virtual void FreeInternals(); - -protected: - /** The name of this particular test. */ - TestNameType m_sTestName; - /** A pointer to the TestSignup constructed by this UnitTest. */ - TestSignup *m_pTestSignup; -private: - UnitTest(); -}; - -/** Executes all currently registered tests and prints a report of success or failure. */ -extern int RunAllTests(); - -/** Should remove all memory allocated during unit testing. */ -extern void ShutdownTests(); - -/** This should be the function prefix for a unit test. It defines a new class for the test inherited from UnitTest. It instances - ** a member of the class at run-time (before main() starts). Lastly it provides the function definition for the actual test class. - */ -#define UNITTEST( x ) class x : public UnitTest { \ -public: \ - x( TestNameType name ) : \ - UnitTest( name ) \ - {} \ - virtual ~x() {}; \ - virtual int RunTest(); \ - }; \ - x __LogogTestInstance_ ## x ( #x ); \ - int x::RunTest() - -} - -#endif // __LOGOG_UNITTEST_HPP diff --git a/ThirdParty/logog/readme.txt b/ThirdParty/logog/readme.txt deleted file mode 100644 index 1c0339e1488..00000000000 --- a/ThirdParty/logog/readme.txt +++ /dev/null @@ -1,11 +0,0 @@ -See http://www.logog.org or http://johnwbyrd.github.com/logog/ for more information and complete documentation. - -logog is a portable C++ library to facilitate logging of real-time events in performance-oriented applications, such as games. It is especially appropriate for projects that have constrained memory and constrained CPU requirements. - -General support and discussion is available at http://groups.google.com/group/logog . Development support and discussion is available at http://groups.google.com/group/logog-devel . - -This project can be built using CMake, available from http://www.cmake.org . - -Local documentation can be generated with doxygen, available from http://www.doxygen.org . - -The license agreement for logog is viewable at http://johnwbyrd.github.com/logog/license.html . diff --git a/ThirdParty/logog/src/api.cpp b/ThirdParty/logog/src/api.cpp deleted file mode 100644 index 2b67c14051b..00000000000 --- a/ThirdParty/logog/src/api.cpp +++ /dev/null @@ -1,74 +0,0 @@ - /* - * \file api.cpp - */ - -#include "logog.hpp" - -#include <cstdlib> - -namespace logog { - -static Mutex s_mInitialization; -static int s_nInitializations = 0; - -int Initialize( INIT_PARAMS *params ) -{ - s_mInitialization.MutexLock(); - - if ( s_nInitializations++ == 0 ) - { - if ( params == NULL ) - { - Static().s_pfMalloc = malloc; - Static().s_pfFree = free; - } - else - { - if ( params->m_pfMalloc != NULL ) - { - Static().s_pfMalloc = params->m_pfMalloc; - Static().s_pfFree = params->m_pfFree; - } - else - { - Static().s_pfMalloc = malloc; - Static().s_pfFree = free; - } - } - - // Let's allocate a default filter here. - GetDefaultFilter(); - - // Socket::Initialize(); - } - - s_mInitialization.MutexUnlock(); - - return 0; -} - -int Shutdown( ) -{ - s_mInitialization.MutexLock(); - - if ( --s_nInitializations == 0 ) - { - // Socket::Shutdown(); - -#ifdef LOGOG_DESTROY_STATIC_AREA - delete &( Static() ); -#else - Static().Reset(); -#endif - -#ifdef LOGOG_LEAK_DETECTION - ReportMemoryAllocations(); -#endif - } - - s_mInitialization.MutexUnlock(); - - return 0; -} -} - diff --git a/ThirdParty/logog/src/checkpoint.cpp b/ThirdParty/logog/src/checkpoint.cpp deleted file mode 100644 index 45ecf39f5b0..00000000000 --- a/ThirdParty/logog/src/checkpoint.cpp +++ /dev/null @@ -1,30 +0,0 @@ - -/* - * \file checkpoint.cpp - */ - -#include "logog.hpp" - -namespace logog { - - Checkpoint::Checkpoint( const LOGOG_LEVEL_TYPE level, - const LOGOG_CHAR *sFileName , - const int nLineNumber, - const LOGOG_CHAR *sGroup, - const LOGOG_CHAR *sCategory, - const LOGOG_CHAR *sMessage, - const double dTimestamp ) : - TopicSource( level, sFileName, nLineNumber, sGroup, sCategory, sMessage, dTimestamp ) - { - } - - int Checkpoint::Send( const Topic &node ) - { - /* Optionally update our own timestamp before we send on our information */ - if (( m_TopicFlags & TOPIC_TIMESTAMP_FLAG ) != 0 ) - m_tTime = GetGlobalTimer().Get(); - - return TopicSource::Send( node ); - } -} - diff --git a/ThirdParty/logog/src/formatter.cpp b/ThirdParty/logog/src/formatter.cpp deleted file mode 100644 index 22515f3c5a6..00000000000 --- a/ThirdParty/logog/src/formatter.cpp +++ /dev/null @@ -1,238 +0,0 @@ - -/* - * \file formatter.cpp - */ - -#include "logog.hpp" - -namespace logog { - - Formatter::Formatter() : - m_bShowTimeOfDay( false ) - { - m_sMessageBuffer.reserve( LOGOG_FORMATTER_MAX_LENGTH ); - m_sIntBuffer.reserve_for_int(); - } - - void Formatter::RenderTimeOfDay() - { - if ( m_bShowTimeOfDay ) - { -#ifndef LOGOG_UNICODE - TimeStamp stamp; - m_sMessageBuffer.append( stamp.Get() ); - m_sMessageBuffer.append(": "); -#endif - } - } - - const LOGOG_CHAR * Formatter::ErrorDescription( const LOGOG_LEVEL_TYPE level ) - { - if ( level <= LOGOG_LEVEL_NONE ) - return LOGOG_CONST_STRING("none"); - - if ( level <= LOGOG_LEVEL_EMERGENCY ) - return LOGOG_CONST_STRING("emergency"); - - if ( level <= LOGOG_LEVEL_ALERT ) - return LOGOG_CONST_STRING("alert"); - - if ( level <= LOGOG_LEVEL_CRITICAL ) - return LOGOG_CONST_STRING("critical"); - - if ( level <= LOGOG_LEVEL_ERROR ) - return LOGOG_CONST_STRING("error"); - - if ( level <= LOGOG_LEVEL_WARN ) - return LOGOG_CONST_STRING("warning"); - - if ( level <= LOGOG_LEVEL_INFO ) - return LOGOG_CONST_STRING("info"); - - if ( level <= LOGOG_LEVEL_DEBUG ) - return LOGOG_CONST_STRING("debug"); - - return LOGOG_CONST_STRING("unknown"); - } - - bool Formatter::GetShowTimeOfDay() const - { - return m_bShowTimeOfDay; - } - - void Formatter::SetShowTimeOfDay( bool val ) - { - m_bShowTimeOfDay = val; - } - - TOPIC_FLAGS Formatter::GetTopicFlags( const Topic &topic ) - { - return topic.GetTopicFlags(); - } - - LOGOG_STRING &FormatterGCC::Format( const Topic &topic, const Target &target ) - { - TOPIC_FLAGS flags; - flags = GetTopicFlags( topic ); - - m_sMessageBuffer.clear(); - - if ( flags & TOPIC_FILE_NAME_FLAG ) - { - m_sMessageBuffer.append( topic.FileName() ); - m_sMessageBuffer.append( ':' ); - } - - if ( flags & TOPIC_LINE_NUMBER_FLAG ) - { - m_sIntBuffer.assign( topic.LineNumber() ); - m_sMessageBuffer.append( m_sIntBuffer ); - - m_sMessageBuffer.append( LOGOG_CONST_STRING(": ")); - } - - RenderTimeOfDay(); - - if ( flags & TOPIC_LEVEL_FLAG ) - { - m_sMessageBuffer.append( ErrorDescription( topic.Level())); - m_sMessageBuffer.append( LOGOG_CONST_STRING(": ")); - } - - if ( flags & TOPIC_GROUP_FLAG ) - { - m_sMessageBuffer.append( LOGOG_CONST_STRING("{") ); - m_sMessageBuffer.append( topic.Group() ); - m_sMessageBuffer.append( LOGOG_CONST_STRING("} ") ); - } - - if ( flags & TOPIC_CATEGORY_FLAG ) - { - m_sMessageBuffer.append( LOGOG_CONST_STRING("[")); - m_sMessageBuffer.append( topic.Category() ); - m_sMessageBuffer.append( LOGOG_CONST_STRING("] ")); - } - - if ( flags & TOPIC_MESSAGE_FLAG ) - { - m_sMessageBuffer.append( topic.Message() ); - m_sMessageBuffer.append( (LOGOG_CHAR)'\n' ); - } - - if ( target.GetNullTerminatesStrings() ) - m_sMessageBuffer.append( (LOGOG_CHAR)NULL ); - - return m_sMessageBuffer; - } - - - LOGOG_STRING &FormatterMSVC::Format( const Topic &topic, const Target &target ) - { - m_sMessageBuffer.clear(); - - TOPIC_FLAGS flags; - flags = GetTopicFlags( topic ); - - if ( flags & TOPIC_FILE_NAME_FLAG ) - { - m_sMessageBuffer.append( topic.FileName() ); - m_sMessageBuffer.append( '(' ); - } - - if ( flags & TOPIC_LINE_NUMBER_FLAG ) - { - m_sIntBuffer.assign( topic.LineNumber() ); - m_sMessageBuffer.append( m_sIntBuffer ); - - m_sMessageBuffer.append( LOGOG_CONST_STRING(") : ") ); - } - - RenderTimeOfDay(); - - if ( flags & TOPIC_LEVEL_FLAG ) - { - m_sMessageBuffer.append( ErrorDescription( topic.Level() ) ); - m_sMessageBuffer.append( LOGOG_CONST_STRING(": ")); - } - - if ( flags & TOPIC_GROUP_FLAG ) - { - m_sMessageBuffer.append( LOGOG_CONST_STRING("{")); - m_sMessageBuffer.append( topic.Group() ); - m_sMessageBuffer.append( LOGOG_CONST_STRING("} ")); - } - - if ( flags & TOPIC_CATEGORY_FLAG ) - { - m_sMessageBuffer.append( LOGOG_CONST_STRING("[")); - m_sMessageBuffer.append( topic.Category() ); - m_sMessageBuffer.append( LOGOG_CONST_STRING("] ")); - } - - if ( flags & TOPIC_MESSAGE_FLAG ) - { - m_sMessageBuffer.append( topic.Message() ); -#ifdef LOGOG_FLAVOR_WINDOWS - m_sMessageBuffer.append( LOGOG_CONST_STRING("\r\n") ); -#else // LOGOG_FLAVOR_WINDOWS - m_sMessageBuffer.append( LOGOG_CONST_STRING("\n") ); -#endif // LOGOG_FLAVOR_WINDOWS - } - - if ( target.GetNullTerminatesStrings() ) - m_sMessageBuffer.append( LOGOG_CHAR( NULL ) ); - - return m_sMessageBuffer; - } - - Formatter &GetDefaultFormatter() - { - Statics *pStatic = &Static(); - - if ( pStatic->s_pDefaultFormatter == NULL ) - { -#ifdef LOGOG_FLAVOR_WINDOWS - pStatic->s_pDefaultFormatter = new FormatterMSVC(); -#else - pStatic->s_pDefaultFormatter = new FormatterGCC(); -#endif - } - - return *( pStatic->s_pDefaultFormatter ); - } - - void DestroyDefaultFormatter() - { - Statics *pStatic = &Static(); - Formatter *pDefaultFormatter = pStatic->s_pDefaultFormatter; - - if ( pDefaultFormatter != NULL ) - delete pDefaultFormatter; - - pStatic->s_pDefaultFormatter = NULL; -} - -const char * TimeStamp::Get() -{ - time_t tRawTime; - struct tm * tmInfo; - - time ( &tRawTime ); - -#ifdef LOGOG_FLAVOR_WINDOWS -#pragma warning( push ) -#pragma warning( disable : 4996 ) -#endif // LOGOG_FLAVOR_WINDOWS - /* Microsoft is afraid of this function; I'm not sure this warning is sensible */ - tmInfo = localtime ( &tRawTime ); -#ifdef LOGOG_FLAVOR_WINDOWS -#pragma warning( pop ) -#endif // LOGOG_FLAVOR_WINDOWS - - strftime (cTimeString, LOGOG_TIME_STRING_MAX, "%c", tmInfo); - - return cTimeString; -} - -} - diff --git a/ThirdParty/logog/src/lobject.cpp b/ThirdParty/logog/src/lobject.cpp deleted file mode 100644 index 8fbce775556..00000000000 --- a/ThirdParty/logog/src/lobject.cpp +++ /dev/null @@ -1,177 +0,0 @@ -/* - * \file object.cpp - */ - -#include "logog.hpp" -#ifdef LOGOG_LEAK_DETECTION -#include <iostream> -#endif // LOGOG_LEAK_DETECTION - -namespace logog { - -#ifdef LOGOG_LEAK_DETECTION -AllocationsType s_Allocations; -#endif - - Object::Object() {} - - Object::~Object() - { - - } - - void *Object::operator new( size_t nSize ) - { - return Allocate( nSize ); - } - - void *Object::operator new[]( size_t nSize ) - { - return Allocate( nSize ); - } - -#ifdef _DEBUG -#ifdef LOGOG_FLAVOR_WINDOWS - - void *Object::operator new(size_t nSize, LPCSTR lpszFileName, int nLine) - { - /* avoid unref'd parameter warnings */ - lpszFileName; - nLine; - return Allocate( nSize ); - } - - void *Object::operator new[](size_t nSize, LPCSTR lpszFileName, int nLine) - { - /* avoid unref'd parameter warnings */ - lpszFileName; - nLine; - return Allocate( nSize ); - } - - void Object::operator delete(void *ptr, LPCSTR lpszFileName, int nLine) - { - lpszFileName; - nLine; - Deallocate( ptr ); - } - - void Object::operator delete[](void *ptr, LPCSTR lpszFileName, int nLine) - { - lpszFileName; - nLine; - Deallocate( ptr ); - } - -#endif // LOGOG_FLAVOR_WINDOWS -#endif // _DEBUG - - /** Deletes an object pointed to by ptr. */ - void Object::operator delete( void *ptr ) - { - Deallocate( ptr ); - } - /** Deletes an object array pointed to by ptr. */ - void Object::operator delete[]( void *ptr ) - { - Deallocate( ptr ); - } - - /** Allocates nSize bytes of memory. You must call logog::Initialize() before calling this function. - * \sa Initialize() - */ - void *Object::Allocate( size_t nSize ) - { - void *ptr = Static().s_pfMalloc( nSize ); -#ifdef LOGOG_REPORT_ALLOCATIONS - LOGOG_COUT << _LG("Allocated ") << nSize << _LG(" bytes of memory at ") << ptr << endl; -#endif // LOGOG_REPORT_ALLOCATIONS -#ifdef LOGOG_LEAK_DETECTION - AllocationsType::iterator it; - - LockAllocationsMutex(); - it = s_Allocations.find( ptr ); - - if ( it != s_Allocations.end() ) - { - LOGOG_COUT << _LG("Reallocation detected in memory manager! We seem to have allocated the same address twice ") - << _LG("without freeing it! Address = ") << ptr << std::endl; - UnlockAllocationsMutex(); - LOGOG_INTERNAL_FAILURE; - } - - s_Allocations.insert( LOGOG_PAIR< const PointerType, size_t >( ptr, nSize ) ); - UnlockAllocationsMutex(); -#endif // LOGOG_LEAK_DETECTION - return ptr; - } - - /** Deallocate a pointer previously acquired by Allocate(). */ - void Object::Deallocate( void *ptr ) - { -#ifdef LOGOG_LEAK_DETECTION - LockAllocationsMutex(); - AllocationsType::iterator it; - - it = s_Allocations.find( ptr ); - - if ( it == s_Allocations.end() ) - { - LOGOG_COUT << _LG("Freeing memory not previously allocated! Address = ") << ptr << std::endl; - UnlockAllocationsMutex(); - LOGOG_INTERNAL_FAILURE; - } - -#ifdef LOGOG_REPORT_ALLOCATIONS - LOGOG_COUT << _LG("Freeing ") << it->second << _LG(" bytes of memory at ") << it->first << endl; -#endif // LOGOG_REPORT_ALLOCATIONS - s_Allocations.erase( ptr ); - UnlockAllocationsMutex(); -#endif // LOGOG_LEAK_DETECTION - Static().s_pfFree( ptr ); - } - - int MemoryAllocations() - { -#ifdef LOGOG_LEAK_DETECTION - LockAllocationsMutex(); - size_t nSize = s_Allocations.size(); - - if ( nSize != 0 ) - LOGOG_COUT << _LG("Total active allocations: ") << nSize << std::endl; - - UnlockAllocationsMutex(); - return (int)nSize; -#else // LOGOG_LEAK_DETECTION - return -1; -#endif // LOGOG_LEAK_DETECTION - } - - int ReportMemoryAllocations() - { -#ifdef LOGOG_LEAK_DETECTION - LockAllocationsMutex(); - - if ( s_Allocations.size() == 0 ) - { - LOGOG_COUT << _LG("No memory allocations outstanding.") << std::endl; - } - else - { - for ( AllocationsType::iterator it = s_Allocations.begin(); - it != s_Allocations.end(); - it++ ) - { - LOGOG_COUT << _LG("Memory allocated at ") << it->first << - _LG(" with size ") << it->second << - _LG(" bytes ") << std::endl; - } - } - - UnlockAllocationsMutex(); -#endif - return MemoryAllocations(); - } - -} - diff --git a/ThirdParty/logog/src/logog.vcproj b/ThirdParty/logog/src/logog.vcproj deleted file mode 100644 index f80a5d75e08..00000000000 --- a/ThirdParty/logog/src/logog.vcproj +++ /dev/null @@ -1,323 +0,0 @@ -<?xml version="1.0" encoding="Windows-1252"?> -<VisualStudioProject - ProjectType="Visual C++" - Version="9.00" - Name="logog" - ProjectGUID="{85857E80-2122-4DD8-9BA9-B90CC10D65B0}" - RootNamespace="logog" - SccProjectName="Perforce Project" - SccLocalPath=".." - SccProvider="MSSCCI:Perforce SCM" - Keyword="Win32Proj" - TargetFrameworkVersion="196613" - > - <Platforms> - <Platform - Name="Win32" - /> - </Platforms> - <ToolFiles> - </ToolFiles> - <Configurations> - <Configuration - Name="Debug|Win32" - OutputDirectory="$(SolutionDir)$(ConfigurationName)" - IntermediateDirectory="$(ConfigurationName)" - ConfigurationType="4" - CharacterSet="1" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - Optimization="0" - AdditionalIncludeDirectories="../include" - PreprocessorDefinitions="WIN32;_DEBUG;_LIB" - MinimalRebuild="true" - BasicRuntimeChecks="3" - RuntimeLibrary="3" - UsePrecompiledHeader="0" - WarningLevel="4" - WarnAsError="true" - DebugInformationFormat="4" - ShowIncludes="false" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLibrarianTool" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - <Configuration - Name="Release|Win32" - OutputDirectory="$(SolutionDir)$(ConfigurationName)" - IntermediateDirectory="$(ConfigurationName)" - ConfigurationType="4" - CharacterSet="1" - WholeProgramOptimization="1" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - Optimization="2" - EnableIntrinsicFunctions="true" - AdditionalIncludeDirectories="../include" - PreprocessorDefinitions="WIN32;NDEBUG;_LIB" - RuntimeLibrary="2" - EnableFunctionLevelLinking="true" - UsePrecompiledHeader="0" - WarningLevel="4" - WarnAsError="true" - DebugInformationFormat="3" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLibrarianTool" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - </Configurations> - <References> - </References> - <Files> - <Filter - Name="Source Files" - Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" - UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" - > - <File - RelativePath=".\api.cpp" - > - </File> - <File - RelativePath=".\checkpoint.cpp" - > - </File> - <File - RelativePath=".\formatter.cpp" - > - </File> - <File - RelativePath=".\lobject.cpp" - > - </File> - <File - RelativePath=".\lstring.cpp" - > - </File> - <File - RelativePath=".\message.cpp" - > - </File> - <File - RelativePath=".\mutex.cpp" - > - </File> - <File - RelativePath=".\node.cpp" - > - </File> - <File - RelativePath=".\platform.cpp" - > - </File> - <File - RelativePath=".\socket.cpp" - > - </File> - <File - RelativePath=".\statics.cpp" - > - </File> - <File - RelativePath=".\target.cpp" - > - </File> - <File - RelativePath=".\timer.cpp" - > - </File> - <File - RelativePath=".\topic.cpp" - > - </File> - <File - RelativePath=".\unittest.cpp" - > - </File> - </Filter> - <Filter - Name="Header Files" - Filter="h;hpp;hxx;hm;inl;inc;xsd" - UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" - > - <File - RelativePath="..\include\api.hpp" - > - </File> - <File - RelativePath="..\include\checkpoint.hpp" - > - </File> - <File - RelativePath="..\include\const.hpp" - > - </File> - <File - RelativePath="..\include\formatter.hpp" - > - </File> - <File - RelativePath="..\include\logog.hpp" - > - </File> - <File - RelativePath="..\include\macro.hpp" - > - </File> - <File - RelativePath="..\include\message.hpp" - > - </File> - <File - RelativePath="..\include\mutex.hpp" - > - </File> - <File - RelativePath="..\include\node.hpp" - > - </File> - <File - RelativePath="..\include\object.hpp" - > - </File> - <File - RelativePath="..\include\platform.hpp" - > - </File> - <File - RelativePath="..\include\socket.hpp" - > - </File> - <File - RelativePath="..\include\statics.hpp" - > - </File> - <File - RelativePath="..\include\string.hpp" - > - </File> - <File - RelativePath="..\include\target.hpp" - > - </File> - <File - RelativePath="..\include\thread.hpp" - > - </File> - <File - RelativePath="..\include\timer.hpp" - > - </File> - <File - RelativePath="..\include\topic.hpp" - > - </File> - <File - RelativePath="..\include\unittest.hpp" - > - </File> - <Filter - Name="Proprietary" - > - <File - RelativePath="..\include\proprietary\ps3.hpp" - > - </File> - <File - RelativePath="..\include\proprietary\xbox360.hpp" - > - </File> - </Filter> - </Filter> - <Filter - Name="Resource Files" - Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" - UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" - > - </Filter> - </Files> - <Globals> - </Globals> -</VisualStudioProject> diff --git a/ThirdParty/logog/src/lstring.cpp b/ThirdParty/logog/src/lstring.cpp deleted file mode 100644 index 5ab7c03112a..00000000000 --- a/ThirdParty/logog/src/lstring.cpp +++ /dev/null @@ -1,497 +0,0 @@ - /* - * \file lstring.cpp - */ - -#include "logog.hpp" - -namespace logog { - - String::String() - { - Initialize(); - } - - String::~String() - { - Free(); - } - - void String::Free() - { - if ( m_pBuffer && ( m_bIsConst == false )) - { - Deallocate( (void *)m_pBuffer ); - m_pBuffer = m_pEndOfBuffer = m_pOffset = NULL; - } - - if ( m_pKMP ) - { - Deallocate( (void *)m_pKMP ); - m_pKMP = NULL; - } - } - - size_t String::Length( const LOGOG_CHAR *chars ) - { - unsigned int len = 0; - - while ( *chars++ ) - len++; - - return len; - } - - String & String::operator=( const String & other ) - { - Free(); - Initialize(); - assign( other ); - return *this; - } - - String & String::operator=( const LOGOG_CHAR *pstr ) - { - Free(); - Initialize(); - assign( pstr ); - return *this; - } - - String::String( const String &other ) - { - Initialize(); - assign( other ); - } - - String::String( const LOGOG_CHAR *pstr ) - { - Initialize(); - assign( pstr ); - } - - size_t String::size() const - { - return ( m_pOffset - m_pBuffer ); - } - - void String::clear() - { - m_pOffset = m_pBuffer; - } - - size_t String::reserve( size_t nSize ) - { - if ( nSize == (unsigned int)( m_pOffset - m_pBuffer )) - return nSize; - - if ( nSize == 0 ) - { - if ( m_pBuffer && ( *m_pBuffer != (LOGOG_CHAR)NULL )) - Deallocate( (void *)m_pBuffer ); - - Initialize(); - return 0; - } - - LOGOG_CHAR *pNewBuffer = (LOGOG_CHAR *)Allocate( sizeof( LOGOG_CHAR ) * nSize ); - LOGOG_CHAR *pNewOffset = pNewBuffer; - LOGOG_CHAR *pNewEnd = pNewBuffer + nSize; - - LOGOG_CHAR *pOldOffset = m_pOffset; - - if ( pOldOffset != NULL ) - { - while (( pNewOffset < pNewEnd ) && ( *pOldOffset != (LOGOG_CHAR)NULL )) - *pNewOffset++ = *pOldOffset++; - } - - if (( m_pBuffer != NULL ) && ( m_bIsConst == false )) - Deallocate( m_pBuffer ); - - m_pBuffer = pNewBuffer; - m_pOffset = pNewBuffer; - m_pEndOfBuffer = pNewEnd; - - return ( m_pOffset - m_pBuffer ); - } - - size_t String::reserve_for_int() - { - reserve( 32 ); - return 32; - } - - String::operator const LOGOG_CHAR *() const - { - return m_pBuffer; - } - - const LOGOG_CHAR* String::c_str() const - { - return m_pBuffer; - } - - size_t String::assign( const String &other ) - { -#ifdef LOGOG_INTERNAL_DEBUGGING - if ( m_bIsConst ) - cout << "Can't reassign const string!" << endl; -#endif - LOGOG_CHAR *pOther = other.m_pBuffer; - - if ( pOther == NULL ) - return 0; - - size_t othersize = other.size(); - - reserve( othersize + 1 ); - m_pOffset = m_pBuffer; - - for ( unsigned int t = 0; t <= othersize ; t++ ) - *m_pOffset++ = *pOther++; - - return this->size(); - } - - size_t String::assign( const int value ) - { -#ifdef LOGOG_INTERNAL_DEBUGGING - if ( m_bIsConst ) - cout << "Can't reassign const string!" << endl; -#endif - - int number = value; - m_pOffset = m_pBuffer; - - int bSign = value; - - if (( bSign = number) < 0) - number = -number; - - do - { - *m_pOffset++ = _LG("0123456789")[ number % 10 ]; - } - while( number /= 10 ); - - if (bSign < 0) - *m_pOffset++ = '-'; - - *m_pOffset = (LOGOG_CHAR)'\0'; - - reverse( m_pBuffer, m_pOffset - 1 ); - - return ( m_pOffset - m_pBuffer ); - } - - size_t String::assign( const LOGOG_CHAR *other, const LOGOG_CHAR *pEnd /*= NULL */ ) - { - size_t len; - - if ( pEnd == NULL ) - len = Length( other ); - else - len = ( pEnd - other ); - /** This constant decides whether assigning a LOGOG_CHAR * to a String will cause the String to use the previous buffer - * in place, or create a new buffer and copy the results. - */ -#ifdef LOGOG_COPY_CONST_CHAR_ARRAY_ON_ASSIGNMENT - reserve( len + 1 ); - - for (unsigned int t = 0; t <= len; t++ ) - *m_pOffset++ = *other++; -#else // LOGOG_COPY_CONST_CHAR_ARRAY_ON_ASSIGNMENT - -#ifdef LOGOG_INTERNAL_DEBUGGING - if ( m_bIsConst ) - cout << "Can't reassign const string!" << endl; -#endif - /* In this case we don't copy the buffer, just reuse it */ - m_pBuffer = const_cast< LOGOG_CHAR *>( other ); - m_pOffset = m_pBuffer + len + 1; - m_pEndOfBuffer = m_pOffset; - m_bIsConst = true; - -#endif // LOGOG_COPY_CONST_CHAR_ARRAY_ON_ASSIGNMENT - - return (int) len; - } - size_t String::append( const String &other ) - { -#ifdef LOGOG_INTERNAL_DEBUGGING - if ( m_bIsConst ) - cout << "Can't reassign const string!" << endl; -#endif - - return append( other.m_pBuffer ); - } - - size_t String::append( const LOGOG_CHAR *other ) - { -#ifdef LOGOG_INTERNAL_DEBUGGING - if ( m_bIsConst ) - cout << "Can't reassign const string!" << endl; -#endif - if ( other == NULL ) - return 0; - - while (( m_pOffset < m_pEndOfBuffer ) && ( *other != (LOGOG_CHAR)NULL )) - *m_pOffset++ = *other++; - - return ( m_pOffset - m_pBuffer ); - } - - size_t String::append( const LOGOG_CHAR c ) - { - if ( m_pOffset < m_pEndOfBuffer ) - *m_pOffset++ = c; - - return ( m_pOffset - m_pBuffer ); - } - void String::reverse( LOGOG_CHAR* pStart, LOGOG_CHAR* pEnd ) - { - LOGOG_CHAR temp; - - while( pEnd > pStart) - { - temp=*pEnd, *pEnd-- =*pStart, *pStart++=temp; - } - } - - bool String::is_valid() const - { - return ( m_pBuffer != NULL ); - } - - size_t String::find( String &other ) const - { - if ( is_valid() && other.is_valid()) - { - // KMP solution - // String *pThis = const_cast< String *>(this); - // return pThis->KMP( other.m_pBuffer, other.size()); - LOGOG_CHAR *pFound; - -#ifdef LOGOG_UNICODE - pFound = wcsstr( m_pBuffer, other.m_pBuffer ); -#else // LOGOG_UNICODE - pFound = strstr( m_pBuffer, other.m_pBuffer ); -#endif - - if ( pFound != NULL ) - { - return ( pFound - m_pBuffer ); - } - - return npos; - } - - return npos; - } - - void String::format( const LOGOG_CHAR *cFormatString, ... ) - { - va_list args; - - va_start(args, cFormatString); - format_va( cFormatString, args ); - va_end( args ); - } - - void String::format_va( const LOGOG_CHAR *cFormatString, va_list args ) - { - int nActualSize = -1, nAttemptedSize; - LOGOG_CHAR *pszFormatted = NULL; - - Free(); - - /* Estimate length of output; don't pull in strlen() if we can help it */ - int nEstLength = 0; - const LOGOG_CHAR *pCurChar = cFormatString; - while ( *pCurChar++ ) - nEstLength++; - - if ( nEstLength == 0 ) - { - clear(); - return; - } - - /** nAttemptedSize is now a guess at an appropriate size, which is about - ** two times the number of LOGOG_CHARs in the incoming format string. - **/ - nAttemptedSize = nEstLength * 2 * sizeof( LOGOG_CHAR ); - - /* Some *printf implementations, such as msvc's, return -1 on failure. - * Others, such as gcc, return the number - * of characters actually formatted on failure. Deal with either case here. - */ - for ( ; ; ) - { - /** We'll allocate that number of bytes. NOTE that this has less of a chance - ** of working on a Unicode build. - **/ - pszFormatted = (LOGOG_CHAR *)Allocate( nAttemptedSize ); - if ( !pszFormatted ) - { - LOGOG_INTERNAL_FAILURE; - } - - *pszFormatted = (LOGOG_CHAR)'\0'; - - va_list argsCopy; - - /** The va_list structure is not standardized across all platforms; in particular - ** Microsoft seems to have problem with the concept. - **/ -#if defined( va_copy ) - va_copy( argsCopy, args ); -#elif defined( __va_copy ) - __va_copy( argsCopy, args ); -#else - memcpy( &argsCopy, &args, sizeof(va_list) ); -#endif - -#ifdef LOGOG_UNICODE - /** At this point, nSizeInWords will contain the number of words permitted in the - ** output buffer. It takes into account space for appending a null character in the output - ** buffer as well. - **/ - int nSizeInWords = (nAttemptedSize / sizeof( LOGOG_CHAR )); -#endif - /** The nActualSize value receives different things on different platforms. - ** On some platforms it receives -1 on failure; on other platforms - ** it receives the number of LOGOG_CHARs actually formatted (excluding - ** the trailing NULL). - **/ - -#ifdef LOGOG_FLAVOR_WINDOWS -#ifdef LOGOG_UNICODE - nActualSize = _vsnwprintf_s( pszFormatted, nSizeInWords, _TRUNCATE, cFormatString, argsCopy ); -#else // LOGOG_UNICODE - nActualSize = vsnprintf_s( pszFormatted, nAttemptedSize, _TRUNCATE, cFormatString, argsCopy ); -#endif // LOGOG_UNICODE -#else // LOGOG_FLAVOR_WINDOWS -#ifdef LOGOG_UNICODE - nActualSize = vswprintf( pszFormatted, nSizeInWords, cFormatString, argsCopy ); -#else // LOGOG_UNICODE - nActualSize = vsnprintf( pszFormatted, nAttemptedSize, cFormatString, argsCopy ); -#endif // LOGOG_UNICODE -#endif // LOGOG_FLAVOR_WINDOWS - - va_end( argsCopy ); - - /** Convert the number of LOGOG_CHARs actually formatted into bytes. This - ** does NOT include the trailing NULL. - **/ - if ( nActualSize != -1 ) - nActualSize *= sizeof( LOGOG_CHAR ); - - /** When we're doing the compare, we have to keep in mind that the nActualSize - ** does not include a null. We need to verify that the nAttemptedSize can hold all - ** of nActualSize PLUS the size of one null on this platform. A LOGOG_CHAR could - ** be 1, 2, or 4 bytes long. So nAttemptedSize must be greater or equal to nActualSize - ** less the size of one (null) LOGOG_CHAR in bytes. Also, the last - ** allocation may have failed altogether. - ** - **/ - if (( nAttemptedSize >= (nActualSize - (int)sizeof(LOGOG_CHAR))) && ( nActualSize != -1)) - break; - - /** That attempted allocation failed */ - Deallocate( pszFormatted ); - - /** If nActualSize has a positive value, it includes the number of bytes needed to hold - ** the formatted string; we'll add a LOGOG_CHAR size to the end for the next - ** allocation. If nActualSize has no meaningful value, we'll double the previous - ** size and try again. - **/ - if (nActualSize > 0) - { - nAttemptedSize = nActualSize + sizeof( LOGOG_CHAR ); - } - else - { - nAttemptedSize *= 2; - } - - } - - m_bIsConst = false; - assign( pszFormatted ); - /* We just allocated this string, which means it needs to be deallocated - * at shutdown time. The previous function may have changed the const - * setting for this string, which means we may need to change it back here... - * */ - m_bIsConst = false; - } - - void String::Initialize() - { - m_pBuffer = NULL; - m_pOffset = NULL; - m_pEndOfBuffer = NULL; - m_pKMP = NULL; - m_bIsConst = false; - } - - void String::preKmp( size_t m ) - { - ScopedLock sl( GetStringSearchMutex() ); - - size_t i, j; - - if ( m_pBuffer == NULL ) - return; - - if ( m_pKMP == NULL ) - { - m_pKMP = (size_t *)Allocate( sizeof( size_t ) * ( m + 1) ); - } - - i = 0; - j = *m_pKMP = (size_t)-1; - - while (i < m) - { - while (j > (size_t)-1 && m_pBuffer[i] != m_pBuffer[j]) - j = m_pKMP[j]; - i++; - j++; - if (m_pBuffer[i] == m_pBuffer[j]) - m_pKMP[i] = m_pKMP[j]; - else - m_pKMP[i] = j; - } - } - - size_t String::KMP( const LOGOG_CHAR *y, size_t n ) - { - size_t i, j; - - size_t m = size() - 1; // ignore NULL char - - /* Preprocessing */ - if ( m_pKMP == NULL ) - preKmp( m ); - - /* Searching */ - i = j = 0; - while (j < n) - { - while (i > (size_t)-1 && m_pBuffer[i] != y[j]) - i = m_pKMP[i]; - i++; - j++; - if (i >= m) - { - return (j - i); - // We would do this if we cared about multiple substrings - // i = m_pKMP[i]; - } - } - - return npos; - } -} - diff --git a/ThirdParty/logog/src/message.cpp b/ThirdParty/logog/src/message.cpp deleted file mode 100644 index ffc38891a97..00000000000 --- a/ThirdParty/logog/src/message.cpp +++ /dev/null @@ -1,69 +0,0 @@ -/* - * \file message.cpp - */ - -#include "logog.hpp" - -namespace logog -{ - Message::Message( const LOGOG_LEVEL_TYPE level, - const LOGOG_CHAR *sFileName , - const int nLineNumber, - const LOGOG_CHAR *sGroup, - const LOGOG_CHAR *sCategory, - const LOGOG_CHAR *sMessage, - const double dTimestamp, - bool *pbIsCreated ) : - Checkpoint( level, sFileName, nLineNumber, sGroup, sCategory, sMessage, dTimestamp ) - { - m_pbIsCreated = pbIsCreated; - - if ( pbIsCreated != NULL ) - *pbIsCreated = true; - - /* Messages are always sources, so there's no need to call Initialize() here */ - // Initialize(); - - /* NOTE! The message is typically assigned to a checkpoint AFTER it's been published. - * Ergo a message needs to be unpublished from, and published to, all filters - * iff one of those filters is searching for a substring of that message. - */ - PublishToMultiple( AllFilters() ); - } - - Message::~Message() - { - if ( m_pbIsCreated != NULL ) - *m_pbIsCreated = false; - } - - - bool Message::Republish() - { - UnpublishToMultiple( AllFilters() ); - return PublishToMultiple( AllFilters() ); - } - - Mutex &GetMessageCreationMutex() - { - Statics *pStatic = &Static(); - - if ( pStatic->s_pMessageCreationMutex == NULL ) - pStatic->s_pMessageCreationMutex = new Mutex(); - - return *( pStatic->s_pMessageCreationMutex ); - } - - void DestroyMessageCreationMutex() - { - Statics *pStatic = &Static(); - - if ( pStatic->s_pMessageCreationMutex != NULL ) - { - delete pStatic->s_pMessageCreationMutex; - pStatic->s_pMessageCreationMutex = NULL; - } - } -} - - diff --git a/ThirdParty/logog/src/mutex.cpp b/ThirdParty/logog/src/mutex.cpp deleted file mode 100644 index 730a5c42d88..00000000000 --- a/ThirdParty/logog/src/mutex.cpp +++ /dev/null @@ -1,92 +0,0 @@ - -/* - * \file mutex.cpp - */ - -#include "logog.hpp" - -namespace logog { - - Mutex::Mutex() LOGOG_MUTEX_CTOR( m_Mutex ) - { - LOGOG_MUTEX_INIT(&m_Mutex); - } - - Mutex::Mutex( const Mutex & ) - { - LOGOG_MUTEX_INIT(&m_Mutex); - } - - Mutex & Mutex::operator = (const Mutex &) - { - LOGOG_MUTEX_INIT(&m_Mutex); - return *this; - } - - Mutex::~Mutex() - { - LOGOG_MUTEX_DELETE(&m_Mutex); - } - - void Mutex::MutexLock() - { - LOGOG_MUTEX_LOCK(&m_Mutex); - } - - void Mutex::MutexUnlock() - { - LOGOG_MUTEX_UNLOCK(&m_Mutex); - } - - ScopedLock::ScopedLock( Mutex &mutex ) - { - m_pMutex = &mutex; - m_pMutex->MutexLock(); - } - - ScopedLock::~ScopedLock() - { - m_pMutex->MutexUnlock(); - } - -#ifdef LOGOG_LEAK_DETECTION - Mutex s_AllocationsMutex; - void LockAllocationsMutex() - { - s_AllocationsMutex.MutexLock(); - } - void UnlockAllocationsMutex() - { - s_AllocationsMutex.MutexUnlock(); - } -#endif // LOGOG_LEAK_DETECTION - - Mutex &GetStringSearchMutex() - { - Statics *pStatic = &Static(); - Mutex **ppStringSearchMutex = (Mutex **)&( pStatic->s_pStringSearchMutex ); - -#ifdef LOGOG_INTERNAL_DEBUGGING - if ( pStatic == NULL ) - LOGOG_INTERNAL_FAILURE; -#endif - if ( *ppStringSearchMutex == NULL ) - *ppStringSearchMutex = new Mutex(); - - return *(( Mutex *)( *ppStringSearchMutex )); - } - - void DestroyStringSearchMutex() - { - Statics *pStatic = &Static(); - Mutex **ppStringSearchMutex = (Mutex **)&( pStatic->s_pStringSearchMutex ); - - if ( *ppStringSearchMutex != NULL ) - { - delete *ppStringSearchMutex; - *ppStringSearchMutex = NULL; - } - } - -} - diff --git a/ThirdParty/logog/src/node.cpp b/ThirdParty/logog/src/node.cpp deleted file mode 100644 index 2c161609be1..00000000000 --- a/ThirdParty/logog/src/node.cpp +++ /dev/null @@ -1,351 +0,0 @@ - -/* - * \file node.cpp - */ - -#include "logog.hpp" - -namespace logog { - - LockableNodesType & LockableNodesType::operator = (const LockableNodesType &other) - { - /* This function is only used at shutdown. */ - LockableNodesType::const_iterator it; - - it = other.begin(); - while ( it != other.end()) - { - this->insert( *it ); - ++it; - } - - return *this; - } - - LockableNodesType &GetStaticNodes( void ** pvLocation ) - { - if ( *pvLocation == NULL ) - *pvLocation = new LockableNodesType(); - - return *(( LockableNodesType *)( *pvLocation )); - - } - - LockableNodesType &AllNodes() - { - return GetStaticNodes( &(Static().s_pAllNodes) ); - } - - LockableNodesType &AllSubscriberNodes() - { - return GetStaticNodes( &(Static().s_pAllSubscriberNodes ) ); - } - - LockableNodesType &AllFilters() - { - return GetStaticNodes( &(Static().s_pAllFilterNodes ) ); - } - - LockableNodesType &AllTargets() - { - return GetStaticNodes( &(Static().s_pAllTargets ) ); - } - - Node::Node() - { - AllNodes().insert( this ); - } - - Node::~Node() - { - Clear(); - AllNodes().erase( this ); - } - - void Node::Initialize() - { - if ( CanSubscribe() ) - { - LockableNodesType *pSubscriberNodes = &AllSubscriberNodes(); - - { - ScopedLock sl( *pSubscriberNodes ); - pSubscriberNodes->insert( this ); - } - - /* This branch is taken iff this node can both subscribe and publish */ - if ( CanPublish() ) - { - LockableNodesType *pFilterNodes = &AllFilters(); - { - ScopedLock sl( *pFilterNodes ); - pFilterNodes->insert( this ); - } - } - } - } - - bool Node::CanPublish() const - { - return true; - } - - bool Node::CanSubscribe() const - { - return true; - } - - bool Node::CanSubscribeTo( const Node & ) - { - return CanSubscribe(); - } - - bool Node::IsTopic() const - { - return false; - } - - bool Node::PublishTo( Node &subscriber ) - { -#ifdef LOGOG_INTERNAL_DEBUGGING - if ( &subscriber == this ) - LOGOG_INTERNAL_FAILURE; -#endif - bool bWasInserted; - - { - ScopedLock sl( m_Subscribers ); - bWasInserted = ( m_Subscribers.insert( &subscriber ) ).second; - } - - if ( bWasInserted ) - subscriber.SubscribeTo( *this ); - - return bWasInserted; - } - - bool Node::PublishToMultiple( LockableNodesType &nodes ) - { - LockableNodesType::iterator it; - - bool bWasPublished = false; - - nodes.MutexLock(); - it = nodes.begin(); - - while ( it != nodes.end() ) - { - if ( PublishTo( **it ) == true ) - bWasPublished = true; - - it++; - } - - nodes.MutexUnlock(); - - return bWasPublished; - } - - bool Node::UnpublishTo( Node &subscriber ) - { -#ifdef LOGOG_INTERNAL_DEBUGGING - if ( &subscriber == this ) - LOGOG_INTERNAL_FAILURE; -#endif - bool bWasRemoved = false; - - { - ScopedLock sl( m_Subscribers ); - NodesType::iterator it; - - if ( ( it = m_Subscribers.find( &subscriber) ) != m_Subscribers.end() ) - { - bWasRemoved = true; - m_Subscribers.erase( it ); - } - } - - if ( bWasRemoved ) - subscriber.UnsubscribeTo( *this ); - - return bWasRemoved; - } - - bool Node::UnpublishToMultiple( LockableNodesType &nodes ) - { - LockableNodesType::iterator it; - - bool bWasUnpublished = false; - - nodes.MutexLock(); - it = nodes.begin(); - - while ( it != nodes.end() ) - { - if ( UnpublishTo( **it ) == true ) - bWasUnpublished = true; - - it++; - } - - nodes.MutexUnlock(); - - return bWasUnpublished; - } - - bool Node::SubscribeTo( Node &publisher ) - { -#ifdef LOGOG_INTERNAL_DEBUGGING - if ( &publisher == this ) - LOGOG_INTERNAL_FAILURE; -#endif - bool bWasInserted; - - { - ScopedLock sl( m_Publishers ); - bWasInserted = ( m_Publishers.insert( &publisher ) ).second; - } - - if ( bWasInserted ) - publisher.PublishTo( *this ); - - return bWasInserted; - } - - bool Node::SubscribeToMultiple( LockableNodesType &nodes ) - { - LockableNodesType::iterator it; - - bool bWasSubscribed = false; - - nodes.MutexLock(); - it = nodes.begin(); - - while ( it != nodes.end() ) - { - if ( SubscribeTo( **it ) == true ) - bWasSubscribed = true; - - it++; - } - - nodes.MutexUnlock(); - - return bWasSubscribed; - } - - bool Node::UnsubscribeTo( Node &publisher ) - { -#ifdef LOGOG_INTERNAL_DEBUGGING - if ( &publisher == this ) - LOGOG_INTERNAL_FAILURE; -#endif - bool bWasRemoved = false; - - { - ScopedLock sl( m_Publishers ); - NodesType::iterator it; - - if ( ( it = m_Publishers.find( &publisher ) ) != m_Publishers.end() ) - { - bWasRemoved = true; - m_Publishers.erase( it ); - } - } - - if ( bWasRemoved ) - publisher.UnpublishTo( *this ); - - return bWasRemoved; - } - - bool Node::UnsubscribeToMultiple( LockableNodesType &nodes ) - { - LockableNodesType::iterator it; - - bool bWasUnsubscribed = false; - - nodes.MutexLock(); - it = nodes.begin(); - - while ( it != nodes.end() ) - { - if ( UnsubscribeTo( **it ) == true ) - bWasUnsubscribed = true; - - it++; - } - - nodes.MutexUnlock(); - - return bWasUnsubscribed; - } - - void Node::Clear() - { - { - ScopedLock sl( m_Publishers ); - m_Publishers.clear(); - } - { - ScopedLock sl( m_Subscribers ); - m_Publishers.clear(); - } - } - - - void DestroyNodesList( void **pvList ) - { - LockableNodesType **ppNodesList = (LockableNodesType **)pvList; - - if ( *ppNodesList == NULL ) - return; - - (*ppNodesList)->clear(); - delete *ppNodesList; - *ppNodesList = NULL; - } - - void DestroyAllNodes() - { - Statics *pStatics = &Static(); - - LockableNodesType *pAllNodes = ( LockableNodesType *)pStatics->s_pAllNodes; - - if ( pAllNodes == NULL ) - return; - - /** Destroy all the node groups, but don't destroy their contents -- we'll do that as the next step. */ - DestroyNodesList( &(pStatics->s_pAllSubscriberNodes )); - DestroyNodesList( &(pStatics->s_pAllFilterNodes )); - DestroyNodesList( &(pStatics->s_pAllTargets )); - - /* We have to copy the AllNodes because destroying each node will remove it from AllNodes. Fortunately - * this only happens at shutdown, so we don't have to worry about efficiency. - */ - LockableNodesType nodes = *pAllNodes; - - LockableNodesType::iterator it; - - it = nodes.begin(); - - while ( it != nodes.end() ) - { - delete *it; - it++; - } - - nodes.clear(); - - #ifdef LOGOG_INTERNAL_DEBUGGING - if ( pAllNodes->size() != 0 ) - cout << "Not all nodes were deleted at shutdown -- memory leak may have occurred" << endl; - #endif - - pAllNodes->clear(); // just in case - delete pAllNodes; - pStatics->s_pAllNodes = NULL; - } - -} - diff --git a/ThirdParty/logog/src/platform.cpp b/ThirdParty/logog/src/platform.cpp deleted file mode 100644 index d191d10560b..00000000000 --- a/ThirdParty/logog/src/platform.cpp +++ /dev/null @@ -1,11 +0,0 @@ - /* - * \file platform.cpp - */ - -#include "logog.hpp" - -namespace logog { - - bool sb_AvoidLinkError4221_platform_cpp = false; -} - diff --git a/ThirdParty/logog/src/socket.cpp b/ThirdParty/logog/src/socket.cpp deleted file mode 100644 index 533de0b7d8d..00000000000 --- a/ThirdParty/logog/src/socket.cpp +++ /dev/null @@ -1,10 +0,0 @@ -/* - * \file socket.cpp - */ - -#include "logog.hpp" - -namespace logog { - bool sb_AvoidLinkError4221_socket_cpp = false; -} - diff --git a/ThirdParty/logog/src/statics.cpp b/ThirdParty/logog/src/statics.cpp deleted file mode 100644 index 05ec6bdcfdd..00000000000 --- a/ThirdParty/logog/src/statics.cpp +++ /dev/null @@ -1,57 +0,0 @@ - /* - * \file statics.cpp - */ - -#include "logog.hpp" - -namespace logog { - - Statics::Statics() - { - s_pAllNodes = NULL; - s_pAllSubscriberNodes = NULL; - s_pAllFilterNodes = NULL; - s_pAllTargets = NULL; - s_pTimer = NULL; - s_pDefaultFormatter = NULL; - s_pDefaultFilter = NULL; - s_pStringSearchMutex = NULL; - s_pMessageCreationMutex = NULL; - s_pfMalloc = NULL; - s_pfFree = NULL; - s_pSelf = this; - s_nSockets = 0; - } - - void Statics::Reset() - { - DestroyGlobalTimer(); - DestroyDefaultFormatter(); - s_pDefaultFilter = NULL; // This will be destroyed on the next step - DestroyAllNodes(); - DestroyStringSearchMutex(); - DestroyMessageCreationMutex(); - s_pfMalloc = NULL; - s_pfFree = NULL; - s_nSockets = 0; - } - - Statics::~Statics() - { - Reset(); - } - - Statics s_Statics; - - Statics &Static() - { - return s_Statics; - } - - void DestroyStatic() - { - s_Statics.~Statics(); - } - -} - diff --git a/ThirdParty/logog/src/target.cpp b/ThirdParty/logog/src/target.cpp deleted file mode 100644 index da9883e1feb..00000000000 --- a/ThirdParty/logog/src/target.cpp +++ /dev/null @@ -1,345 +0,0 @@ - /* - * \file target.cpp - */ - -#include "logog.hpp" - -#include <iostream> - -namespace logog { - - Target::Target() : - m_bNullTerminatesStrings( true ) - { - SetFormatter( GetDefaultFormatter() ); - LockableNodesType *pAllTargets = &AllTargets(); - - { - ScopedLock sl( *pAllTargets ); - pAllTargets->insert( this ); - } - - SubscribeToMultiple( AllFilters() ); - } - - - Target::~Target() - { - LockableNodesType *pAllTargets = &AllTargets(); - - UnsubscribeToMultiple( AllFilters() ); - - { - ScopedLock sl( *pAllTargets ); - pAllTargets->erase( this ); - } - } - - void Target::SetFormatter( Formatter &formatter ) - { - m_pFormatter = &formatter; - } - - Formatter & Target::GetFormatter() const - { - return *m_pFormatter; - } - - int Target::Receive( const Topic &topic ) - { - ScopedLock sl( m_MutexReceive ); - return Output( m_pFormatter->Format( topic, *this ) ); - } - - int Cerr::Output( const LOGOG_STRING &data ) - { - LOGOG_CERR << (const LOGOG_CHAR *)data; - - return 0; - } -//! [Cout] - int Cout::Output( const LOGOG_STRING &data ) - { - LOGOG_COUT << (const LOGOG_CHAR *)data; - - return 0; - } -//! [Cout] - - int OutputDebug::Output( const LOGOG_STRING &data ) - { -#ifdef LOGOG_FLAVOR_WINDOWS -#ifdef LOGOG_UNICODE - OutputDebugStringW( (const LOGOG_CHAR *)data ); -#else - OutputDebugStringA( (const LOGOG_CHAR *)data ); -#endif // LOGOG_UNICODE -#else - (void)data; -#endif // LOGOG_FLAVOR_WINDOWS - return 0; - } - - LogFile::LogFile(const char *sFileName) : - m_bFirstTime( true ), - m_bOpenFailed( false ), - m_pFile( NULL ) - { - m_bNullTerminatesStrings = false; - -#ifdef LOGOG_UNICODE - m_bWriteUnicodeBOM = true; -#else // LOGOG_UNICODE - m_bWriteUnicodeBOM = false; -#endif // LOGOG_UNICODE - - int nNameLength = 0; - - const char *sNameCount = sFileName; - while ( *sNameCount++ != '\0' ) - nNameLength++; - - // add one for trailing null - nNameLength++; - - m_pFileName = (char *)Object::Allocate( nNameLength ); - - char *m_pOut = m_pFileName; - while ( ( *m_pOut++ = *sFileName++) != '\0' ) - ; - } - - LogFile::~LogFile() - { - if ( m_pFile ) - fclose( m_pFile ); - - Object::Deallocate( m_pFileName ); - } - - int LogFile::Open() - { - int nError = 1; // preset this in case LOGOG_FLAVOR_WINDOWS is not defined - - bool bFileAlreadyExists = false; - FILE *fpTest; - -#ifdef LOGOG_FLAVOR_WINDOWS - nError = fopen_s( &fpTest, m_pFileName, "r"); // ignore the error code -#else // LOGOG_FLAVOR_WINDOWS - (void)nError; // Unused - fpTest = fopen( m_pFileName, "r"); -#endif // LOGOG_FLAVOR_WINDOWS - - if ( fpTest != NULL ) - { - fclose( fpTest ); - bFileAlreadyExists = true; - } - - /** Windows tries to be clever and help us with converting line feeds - ** to carriage returns when writing a text file. This causes problems - ** when writing a Unicode file as Windows helpfully inserts a single-byte - ** 0x0D between the return and line feed on write. So we open and operate - ** the output in binary mode only. - **/ -#ifdef LOGOG_FLAVOR_WINDOWS -#ifdef LOGOG_UNICODE - nError = fopen_s( &m_pFile, m_pFileName, "ab, ccs=UNICODE" ); -#else // LOGOG_UNICODE - nError = fopen_s( &m_pFile, m_pFileName, "ab" ); -#endif // LOGOG_UNICODE - if ( nError != 0 ) - return nError; -#else // LOGOG_FLAVOR_WINDOWS - m_pFile = fopen( m_pFileName, "ab+" ); -#endif // LOGOG_FLAVOR_WINDOWS - - if ( m_pFile == NULL ) - m_bOpenFailed = true; // and no further outputs will work - else - { -#ifdef LOGOG_UNICODE - if ( !bFileAlreadyExists ) - { - WriteUnicodeBOM(); - } -#endif - } - - return ( m_pFile ? 0 : -1 ); - } - - int LogFile::Output( const LOGOG_STRING &data ) - { - if ( m_bOpenFailed ) - return -1; - - int result = 0; - if ( m_bFirstTime ) - { - result = Open(); - if ( result != 0 ) - return result; - - m_bFirstTime = false; - } - - return InternalOutput( data.size(), data.c_str()); - } - - int LogFile::InternalOutput( size_t nSize, const LOGOG_CHAR *pData ) - { - size_t result; - - result = fwrite( pData, sizeof( LOGOG_CHAR ), nSize, m_pFile ); - - if ( (size_t)result != nSize ) - return -1; - - return 0; - } - - void LogFile::WriteUnicodeBOM() - { - static union { - int i; - char c[4]; - } bDetectEndian = {0x01020304}; - - bool bIsLittleEndian = ( bDetectEndian.c[0] != 1 ); - - switch ( sizeof( LOGOG_CHAR )) - { - case 1: - // This could be a UTF-8 BOM but technically very few systems support - // sizeof( wchar_t ) == sizeof( char ). So for now we're not going - // to write a BOM in these cases. - break; - - case 2: - if ( bIsLittleEndian ) - InternalOutput( 1, (const LOGOG_CHAR *)"\xFF\xFE" ); // little endian UTF-16LE - else - InternalOutput( 1, (const LOGOG_CHAR *)"\xFE\xFF" ); // big endian UTF-16BE - - break; - - case 4: - if ( bIsLittleEndian ) - InternalOutput( 1, (const LOGOG_CHAR *)"\xFF\xFE\x00\x00" ); // little endian UTF-32LE - else - InternalOutput( 1, (const LOGOG_CHAR *)"\x00\x00\xFE\xFF" ); // big endian UTF-32BE - - break; - - default: - // No idea what that character size is; do nothing - break; - } - } - - LogBuffer::LogBuffer( Target *pTarget , - size_t s ) : - m_pStart( NULL ), - m_nSize( 0 ) - { - m_pOutputTarget = pTarget; - Allocate( s ); - } - - LogBuffer::~LogBuffer() - { - Dump(); - Deallocate(); - } - - void LogBuffer::SetTarget( Target &t ) - { - m_pOutputTarget = &t; - } - - int LogBuffer::Insert( const LOGOG_CHAR *pChars, size_t size ) - { - if (( m_pCurrent + size ) >= m_pEnd ) - Dump(); - - if ( size > (size_t)( m_pEnd - m_pStart )) - { -#ifdef LOGOG_INTERNAL_DEBUGGING - cerr << "Cannot insert string into buffer; string is larger than buffer. Allocate a larger size for the LogBuffer." << endl; -#endif - return -1; // can't fit this into buffer; punt it - } - - // Store the size of this string in the buffer - size_t *pSize; - pSize = ( size_t *)m_pCurrent; - *pSize = size; - m_pCurrent = (LOGOG_CHAR *)++pSize; - - while ( size-- ) - *m_pCurrent++ = *pChars++; - - return 0; - } - - int LogBuffer::Dump() - { - LOGOG_CHAR *pCurrent = m_pStart; - size_t *pSize; - int nError; - - if ( m_pOutputTarget == NULL ) - return -1; - - // We have to lock the output target here, as we do an end run around its Receive() function */ - ScopedLock sl( m_pOutputTarget->m_MutexReceive ); - - while ( pCurrent < m_pCurrent ) - { - String sOut; - // Get the size of this entry - pSize = ( size_t * )pCurrent; - // Move past that entry into the data area - pCurrent = ( LOGOG_CHAR * )( pSize + 1 ); - - sOut.assign( pCurrent, pCurrent + *pSize - 1 ); - - if ( m_pOutputTarget ) - { - nError = m_pOutputTarget->Output( sOut ); - if ( nError != 0 ) - return nError; - } - - pCurrent += *pSize; - } - - // reset buffer - m_pCurrent = m_pStart; - - return 0; - } - - int LogBuffer::Output( const LOGOG_STRING &data ) - { - return Insert( &(*data), data.size() ); - } - - void LogBuffer::Allocate( size_t size ) - { - m_nSize = size; - m_pCurrent = m_pStart = (LOGOG_CHAR *)Object::Allocate( size * sizeof( LOGOG_CHAR )); - m_pEnd = m_pStart + size; - } - - void LogBuffer::Deallocate() - { - if ( m_pStart ) - Object::Deallocate( m_pStart ); - - m_nSize = 0; - } -} - diff --git a/ThirdParty/logog/src/timer.cpp b/ThirdParty/logog/src/timer.cpp deleted file mode 100644 index accaacac1d6..00000000000 --- a/ThirdParty/logog/src/timer.cpp +++ /dev/null @@ -1,80 +0,0 @@ - -/* - * \file timer.cpp - */ - -#include "logog.hpp" - -namespace logog { - - Timer::Timer() - { - m_fStartTime = 0.0f; - -#ifdef LOGOG_FLAVOR_WINDOWS - LARGE_INTEGER TicksPerSecond; - QueryPerformanceFrequency( &TicksPerSecond ); - m_fTicksPerMicrosecond = (DOUBLE)TicksPerSecond.QuadPart * 0.000001; -#endif - Set( 0.0f ); - } - -//! [TimerGet] - logog::LOGOG_TIME Timer::Get() - { -#ifdef LOGOG_FLAVOR_WINDOWS - LARGE_INTEGER liTime; - QueryPerformanceCounter( &liTime ); - - double dusec; - dusec =( liTime.QuadPart / m_fTicksPerMicrosecond ); - - return ( dusec / 1000000.0f ) - m_fStartTime; -#endif - -#ifdef LOGOG_FLAVOR_POSIX -#ifdef LOGOG_TARGET_PS3 - LOGOG_PS3_GET_TIME; -#else // LOGOG_TARGET_PS3 - // General Posix implementation - timeval tv; - gettimeofday( &tv, 0 ); - return ((double) (tv.tv_sec) + ((double)(tv.tv_usec ) / 1000000.0 ) - m_fStartTime); -#endif // LOGOG_TARGET_PS3 -#endif - } -//! [TimerGet] - - void Timer::Set( LOGOG_TIME time ) - { - m_fStartTime = time + Get(); - } - - Timer &GetGlobalTimer() - { - Statics *pStatic = &Static(); - -#ifdef LOGOG_INTERNAL_DEBUGGING - if ( pStatic == NULL ) - LOGOG_INTERNAL_FAILURE; -#endif - - if ( pStatic->s_pTimer == NULL ) - pStatic->s_pTimer = new Timer(); - - return *(pStatic->s_pTimer ); - } - - void DestroyGlobalTimer() - { - Statics *pStatic = &Static(); - Timer *pGlobalTimer = pStatic->s_pTimer; - - if ( pGlobalTimer != NULL ) - delete pGlobalTimer; - - pStatic->s_pTimer = NULL; - } - -} - diff --git a/ThirdParty/logog/src/topic.cpp b/ThirdParty/logog/src/topic.cpp deleted file mode 100644 index 619aa305c74..00000000000 --- a/ThirdParty/logog/src/topic.cpp +++ /dev/null @@ -1,454 +0,0 @@ - -/* - * \file topic.cpp - */ - -#include "logog.hpp" - -namespace logog { - - void SetDefaultLevel( LOGOG_LEVEL_TYPE level ) - { - Filter *pDefaultFilter = &GetDefaultFilter(); - - pDefaultFilter->Level( level ); - } - - Topic::Topic( const LOGOG_LEVEL_TYPE level , - const LOGOG_CHAR *sFileName , - const int nLineNumber , - const LOGOG_CHAR *sGroup , - const LOGOG_CHAR *sCategory , - const LOGOG_CHAR *sMessage , - const double dTimestamp ) - { - m_TopicFlags = 0; - - if ( sFileName != NULL ) - { - m_vStringProps[ TOPIC_FILE_NAME ] = sFileName; - m_TopicFlags |= TOPIC_FILE_NAME_FLAG; - } - - if ( sGroup != NULL ) - { - m_vStringProps[ TOPIC_GROUP ] = sGroup; - m_TopicFlags |= TOPIC_GROUP_FLAG; - } - - if ( sCategory != NULL ) - { - m_vStringProps[ TOPIC_CATEGORY ] = sCategory; - m_TopicFlags |= TOPIC_CATEGORY_FLAG; - } - - if ( sMessage != NULL ) - { - m_vStringProps[ TOPIC_MESSAGE ] = sMessage; - m_TopicFlags |= TOPIC_MESSAGE_FLAG; - } - - m_vIntProps[ TOPIC_LEVEL ] = level; - - if ( level != LOGOG_LEVEL_ALL ) - { - m_TopicFlags |= TOPIC_LEVEL_FLAG; - } - - m_vIntProps[ TOPIC_LINE_NUMBER ] = nLineNumber; - - if ( nLineNumber != 0 ) - { - m_TopicFlags |= TOPIC_LINE_NUMBER_FLAG; - } - - m_tTime = dTimestamp; - - if ( dTimestamp != 0.0f ) //-V550 - m_TopicFlags |= TOPIC_TIMESTAMP_FLAG; - } - - bool Topic::IsTopic() const - { - return true; - } - - int Topic::Send( const Topic &node ) - { - LockableNodesType::iterator it; - - { - ScopedLock sl( m_Subscribers ); - it = m_Subscribers.begin(); - } - - /* Iterate over the subscribers, but only addressing the subscribers group while locking it */ - Topic *pCurrentTopic; - Node *pCurrentNode; - m_Subscribers.MutexLock(); - int nError = 0; - - while ( it != m_Subscribers.end() ) - { - pCurrentNode = *it; - - if ( pCurrentNode->IsTopic() == false ) - continue; - - pCurrentTopic = ( Topic * )pCurrentNode; - - if ( pCurrentTopic ) - nError += pCurrentTopic->Receive( node ); - - it++; - } - - m_Subscribers.MutexUnlock(); - - return nError; - } - - int Topic::Transmit() - { - return Send( *this ); - } - - int Topic::Receive( const Topic &node ) - { - /* Default implementation -- send it on to all children */ - return Send( node ); - } - - bool Topic::CanSubscribeTo( const Node &otherNode ) - { - if ( CanSubscribe() == false ) - return false; - - if ( otherNode.IsTopic() == false ) - return false; - - Topic *pTopic = ( Topic * )&otherNode; - - /* This function will change from topic class to topic class. */ - return CanSubscribeCheckTopic( *pTopic ); - } - - bool Topic::CanSubscribeCheckTopic( const Topic &other ) - { - /* This is the generic comparison case. We'll want to optimize this function for other types - * of topics. - */ - - /* Check topics in likely order of disinterest */ - if ( m_TopicFlags & TOPIC_LEVEL_FLAG ) - { - /* Topic levels are less interesting the larger the numbers are. */ - if ( other.m_vIntProps[ TOPIC_LEVEL ] > m_vIntProps[ TOPIC_LEVEL ] ) - return false; - } - - if ( m_TopicFlags & TOPIC_GROUP_FLAG ) - { - /* If our topic is not a substring of the publisher's topic, ignore this */ - if (( other.m_vStringProps[ TOPIC_GROUP ] ).find( m_vStringProps[ TOPIC_GROUP ] ) == LOGOG_STRING::npos ) - return false; - } - - if ( m_TopicFlags & TOPIC_CATEGORY_FLAG ) - { - /* If our topic is not a substring of the publisher's topic, ignore this */ - if (( other.m_vStringProps[ TOPIC_CATEGORY ] ).find( m_vStringProps[ TOPIC_CATEGORY ] ) == LOGOG_STRING::npos ) - return false; - } - - if ( m_TopicFlags & TOPIC_FILE_NAME_FLAG ) - { - /* If our topic is not a substring of the publisher's file name, ignore this. */ - if (( other.m_vStringProps[ TOPIC_FILE_NAME ] ).find( m_vStringProps[ TOPIC_FILE_NAME ] ) == LOGOG_STRING::npos ) - return false; - } - - if ( m_TopicFlags & TOPIC_LINE_NUMBER_FLAG ) - { - /* If our line number doesn't equal theirs, ignore this */ - if ( other.m_vIntProps[ TOPIC_LINE_NUMBER ] != m_vIntProps[ TOPIC_LINE_NUMBER ] ) - return false; - } - - if ( m_TopicFlags & TOPIC_MESSAGE_FLAG ) - { - /* If our topic is not a substring of the publisher's file name, ignore this. */ - if (( other.m_vStringProps[ TOPIC_MESSAGE ] ).find( m_vStringProps[ TOPIC_MESSAGE ] ) == LOGOG_STRING::npos ) - return false; - } - - if ( m_TopicFlags & TOPIC_TIMESTAMP_FLAG ) - { - /* Timestamps are only interesting if they're greater than or equal to ours. */ - if ( other.m_tTime < m_tTime ) - return false; - } - - /* all tests passed */ - return true; - } - - bool Topic::PublishTo( Node &subscriber ) - { -#ifdef LOGOG_INTERNAL_DEBUGGING - if ( &subscriber == this ) - LOGOG_INTERNAL_FAILURE; -#endif - bool bWasInserted; - - /** Additional checking may be required first -- can the subscriber handle this publishing? */ - if ( subscriber.IsTopic() ) - { - Topic *pSubscriber = (Topic *)&subscriber; - - if ( pSubscriber->CanSubscribeTo( *this ) == false ) - return false; - } - - { - ScopedLock sl( m_Subscribers ); - bWasInserted = ( m_Subscribers.insert( &subscriber ) ).second; - } - - if ( bWasInserted ) - subscriber.SubscribeTo( *this ); - - return bWasInserted; - } - - void Topic::Format( const LOGOG_CHAR *cFormatMessage, ... ) - { - va_list args; - - va_start( args, cFormatMessage ); - m_vStringProps[ TOPIC_MESSAGE ].format_va( cFormatMessage, args ); - va_end( args ); - - m_TopicFlags |= TOPIC_MESSAGE_FLAG; - } - - const LOGOG_STRING & Topic::FileName() const - { - return m_vStringProps[ TOPIC_FILE_NAME ]; - } - - void Topic::FileName( const LOGOG_STRING &s ) - { - m_vStringProps[ TOPIC_FILE_NAME ] = s; - m_TopicFlags |= TOPIC_FILE_NAME_FLAG; - } - - const LOGOG_STRING & Topic::Message() const - { - return m_vStringProps[ TOPIC_MESSAGE ]; - } - - void Topic::Message( const LOGOG_STRING &s ) - { - m_vStringProps[ TOPIC_MESSAGE ] = s; - m_TopicFlags |= TOPIC_MESSAGE_FLAG; - } - - const LOGOG_STRING & Topic::Category() const - { - return m_vStringProps[ TOPIC_CATEGORY ]; - } - - void Topic::Category( const LOGOG_STRING &s ) - { - m_vStringProps[ TOPIC_CATEGORY ] = s; - m_TopicFlags |= TOPIC_CATEGORY_FLAG; - } - - const LOGOG_STRING & Topic::Group() const - { - return m_vStringProps[ TOPIC_GROUP ]; - } - - void Topic::Group( const LOGOG_STRING &s ) - { - m_vStringProps[ TOPIC_GROUP ] = s; - m_TopicFlags |= TOPIC_GROUP_FLAG; - } - - int Topic::LineNumber() const - { - return m_vIntProps[ TOPIC_LINE_NUMBER ]; - } - - void Topic::LineNumber( const int num ) - { - m_vIntProps[ TOPIC_LINE_NUMBER ] = num; - m_TopicFlags |= TOPIC_LINE_NUMBER_FLAG; - } - - LOGOG_LEVEL_TYPE Topic::Level() const - { - return ( LOGOG_LEVEL_TYPE )m_vIntProps[ TOPIC_LEVEL ]; - } - - void Topic::Level( LOGOG_LEVEL_TYPE level ) - { - m_vIntProps[ TOPIC_LEVEL ] = level; - m_TopicFlags |= TOPIC_LEVEL_FLAG; - } - - logog::LOGOG_TIME Topic::Timestamp() const - { - return m_tTime; - } - - void Topic::Timestamp( const LOGOG_TIME t ) - { - m_tTime = t; - m_TopicFlags |= TOPIC_TIMESTAMP_FLAG; - } - - TOPIC_FLAGS Topic::GetTopicFlags() const - { - return m_TopicFlags; - } - - -/********************************************************/ - - Filter::Filter( const LOGOG_LEVEL_TYPE level , - const LOGOG_CHAR *sFileName , - const int nLineNumber , - const LOGOG_CHAR *sGroup , - const LOGOG_CHAR *sCategory , - const LOGOG_CHAR *sMessage , - const double dTimestamp ) : - Topic( level, sFileName, nLineNumber, sGroup, sCategory, sMessage, dTimestamp ) - { - Statics *pStatic = &Static(); - -#ifdef LOGOG_INTERNAL_DEBUGGING - if ( pStatic == NULL ) - LOGOG_INTERNAL_FAILURE; -#endif - - if ( pStatic->s_pDefaultFilter == NULL ) - pStatic->s_pDefaultFilter = this; - - PublishToMultiple( AllTargets() ); - - LockableNodesType *pFilterNodes = &AllFilters(); - - { - ScopedLock sl( *pFilterNodes ); - pFilterNodes->insert( this ); - } - } - - Filter &GetDefaultFilter() - { - Statics *pStatic = &Static(); - -#ifdef LOGOG_INTERNAL_DEBUGGING - if ( pStatic == NULL ) - LOGOG_INTERNAL_FAILURE; -#endif - - if ( pStatic->s_pDefaultFilter == NULL ) - { - pStatic->s_pDefaultFilter = new Filter( LOGOG_LEVEL ); - } - - return *((Filter *)(pStatic->s_pDefaultFilter)); - } - - TopicGroup::TopicGroup( const LOGOG_CHAR *sGroup ) : - Topic( LOGOG_LEVEL_ALL, NULL, 0, sGroup ) - { - } - - bool TopicGroup::CanSubscribeCheckTopic( const Topic &other ) - { - if ( m_TopicFlags & TOPIC_LEVEL_FLAG ) - { - /* Topic levels are less interesting the larger the numbers are. */ - if ( other.m_vIntProps[ TOPIC_LEVEL ] > m_vIntProps[ TOPIC_LEVEL ] ) - return false; - } - - return true; - } - - TopicLevel::TopicLevel( const LOGOG_LEVEL_TYPE level ) : - Topic( level ) - { - } - - - bool TopicLevel::CanSubscribeCheckTopic( const Topic &other ) - { - /* Check topics in likely order of disinterest */ - if ( m_TopicFlags & TOPIC_LEVEL_FLAG ) - { - /* Topic levels are less interesting the larger the numbers are. */ - if ( other.m_vIntProps[ TOPIC_LEVEL ] > m_vIntProps[ TOPIC_LEVEL ] ) - return false; - } - - /* all tests passed */ - return true; - } - - TopicSource::TopicSource( const LOGOG_LEVEL_TYPE level , - const LOGOG_CHAR *sFileName, - const int nLineNumber, - const LOGOG_CHAR *sGroup, - const LOGOG_CHAR *sCategory, - const LOGOG_CHAR *sMessage, - const double dTimestamp ) : - Topic( level, sFileName, nLineNumber, sGroup, sCategory, sMessage, dTimestamp ) - { - } - - bool TopicSource::SubscribeTo( Node & ) - { - return false; - } - - bool TopicSource::UnsubscribeTo( Node & ) - { - return false; - } - - bool TopicSource::CanSubscribe() const - { - return false; - } - - bool TopicSink::IsTopic() const - { - return true; - } - - void TopicSink::Initialize() - { - - } - - bool TopicSink::PublishTo( Node & ) - { - return false; - } - - bool TopicSink::UnpublishTo( Node & ) - { - return false; - } - - bool TopicSink::CanPublish() const - { - return false; - } -} - diff --git a/ThirdParty/logog/src/unittest.cpp b/ThirdParty/logog/src/unittest.cpp deleted file mode 100644 index c5863cff60d..00000000000 --- a/ThirdParty/logog/src/unittest.cpp +++ /dev/null @@ -1,128 +0,0 @@ - -/* - * \file unittest.cpp - */ - -#define LOGOG_UNIT_TESTING 1 - -#include "logog.hpp" - -namespace logog -{ - -TestRegistryType &LogogTestRegistry() -{ - static TestRegistryType *pRegistry = new TestRegistryType(); - return *pRegistry; -} - -TestSignup::TestSignup( UnitTest *pTest ) -{ - m_pTest = pTest; - LogogTestRegistry().push_back( pTest ); -} - -UnitTest::UnitTest( const TestNameType &sTestName ) -{ - m_sTestName = sTestName; - m_pTestSignup = new TestSignup( this ); -} - -UnitTest::~UnitTest() -{ - FreeInternals(); -} - -void UnitTest::FreeInternals() -{ - if ( m_pTestSignup ) - delete m_pTestSignup; - - m_pTestSignup = NULL; -} - -/** Returns the name of this UnitTest provided at construction time. */ -TestNameType &UnitTest::GetName() -{ - return m_sTestName; -} - -/** Executes all currently registered tests and prints a report of success or failure. */ -int RunAllTests() -{ - using namespace std; - - int nTests = 0, nTestsSucceeded = 0; - int nTestResult; - int nFailures = 0; - -#ifdef LOGOG_UNICODE - wostream *pOut; -#else // LOGOG_UNICODE - ostream *pOut; -#endif // LOGOG_UNICODE - - pOut = &(LOGOG_COUT); - - nTests = (int) LogogTestRegistry().size(); - - if ( nTests == 0 ) - { - *pOut << _LG("No tests currently defined.") << endl; - return 1; - } - - for ( TestRegistryType::iterator it = LogogTestRegistry().begin(); - it != LogogTestRegistry().end(); - ++it ) - { - (*pOut) << _LG("Test ") << (*it)->GetName() << _LG(" running... ") << endl; - nTestResult = (*it)->RunTest(); - - (*pOut) << _LG("Test ") << (*it)->GetName(); - - if ( nTestResult == 0 ) - { - *pOut << _LG(" successful.") << endl; - nTestsSucceeded++; - } - else - { - *pOut << _LG(" failed!") << endl; - nFailures++; - } - - /* Validate that no allocations are currently outstanding. Make sure to handle the case - * where leak detection is disabled */ - int nMemoryTestResult = ReportMemoryAllocations(); - - if ( nMemoryTestResult != -1 ) - { - (*pOut) << _LG("Test ") << (*it)->GetName() << _LG(" has ") << nMemoryTestResult << - _LG(" memory allocations outstanding at end of test.") << endl; - nFailures += nMemoryTestResult; - } - } - - *pOut << _LG("Testing complete, ") - << nTests << _LG(" total tests, ") - << nTestsSucceeded << _LG(" tests succeeded, ") - << ( nTests - nTestsSucceeded ) << _LG(" failed") - << endl; - - return nFailures; -} - -/** Should remove all memory allocated during unit testing. */ -void ShutdownTests() -{ - TestRegistryType::iterator it; - - for ( it = LogogTestRegistry().begin(); it != LogogTestRegistry().end(); it++ ) - (*it)->FreeInternals(); - - delete &LogogTestRegistry(); -} - -} - diff --git a/ThirdParty/logog/test/CMakeLists.txt b/ThirdParty/logog/test/CMakeLists.txt deleted file mode 100644 index f818a2e4fb0..00000000000 --- a/ThirdParty/logog/test/CMakeLists.txt +++ /dev/null @@ -1,2 +0,0 @@ -add_executable( test test.cpp ) - diff --git a/ThirdParty/logog/test/test.cpp b/ThirdParty/logog/test/test.cpp deleted file mode 100644 index 3bb34ebeb22..00000000000 --- a/ThirdParty/logog/test/test.cpp +++ /dev/null @@ -1,837 +0,0 @@ -/** Only define this macro in source files that create unit tests. This setting brings in the std namespace, so its - ** use is not recommended outside of unit tests. */ -#define LOGOG_UNIT_TESTING 1 - -/** Change this to higher constants to exponentially increase test difficulty. */ -const int TEST_STRESS_LEVEL = 1; - -#include "logog.hpp" - -#include <cstdio> - -#include <fcntl.h> - -#ifdef LOGOG_FLAVOR_WINDOWS -#include <io.h> -#endif - -using namespace logog; -using namespace std; - -UNITTEST( SimpleLocking ) -{ -//! [SimpleLocking] - LOGOG_INITIALIZE(); - - { - logog::Mutex m; - - { - logog::ScopedLock s1( m ); - LOGOG_COUT << _LG("Lock is on") << endl; - } - - logog::Mutex *pM = new logog::Mutex(); - - { - logog::ScopedLock s1( *pM ); - LOGOG_COUT << _LG("Lock is on") << endl; - } - - delete pM; - - LOGOG_COUT << _LG("Lock unlocked") << endl; - - logog::Message m1; - - } - - LOGOG_SHUTDOWN(); - - return 0; -//! [SimpleLocking] -} - -int _s_ThreadLockingTest = 0; - -void LockingThread( void *pvMutex ) -{ - const int NUM_TRIALS = 10 * TEST_STRESS_LEVEL; - Mutex *pMutex = (Mutex *)pvMutex; - - if ( pMutex == NULL ) - { - _s_ThreadLockingTest = 1; - LOGOG_COUT << _LG("LockingThread received a NULL argument!") << endl; - return; - } - - for ( int t = 0; t < NUM_TRIALS; t++ ) - { - { - ScopedLock sl( *pMutex ); - INFO( _LG("Thread acquired lock on trial %d"), t); - } - - INFO( _LG("Thread released lock %d"), t ); - } -} - - -UNITTEST( Subscription ) -{ - int nResult = 0; - -//! [Subscription] - LOGOG_INITIALIZE(); - - { - Topic n1, n2; - - // should succeed - if ( n1.SubscribeTo( n2 ) != true ) - nResult++; - - // should indicate no insertion took place - if ( n2.PublishTo( n1 ) != false ) - nResult++; - - n2.Transmit(); - - if ( n2.UnpublishTo( n1 ) != true ) - nResult++; - - if ( n1.UnsubscribeTo( n2 ) != false ) - nResult++; - } - - LOGOG_SHUTDOWN(); - -//! [Subscription] - - return nResult; -} - -UNITTEST( GlobalNodelist ) -{ - LOGOG_INITIALIZE(); - - const int MAX_NODES = 10 * TEST_STRESS_LEVEL; - - LOGOG_VECTOR< Topic *> vTopics; - - for (int t = 0; t < MAX_NODES; t++ ) - vTopics.push_back( new Topic ); - - for ( int i = 0; i < MAX_NODES; i++ ) - for ( int j = i + 1; j < MAX_NODES; j++ ) - vTopics.at( i )->SubscribeTo( *vTopics.at( j ) ); - - LockableNodesType *pNodes = ( LockableNodesType * )Static().s_pAllNodes; - - // For this test we assume that the default Filter has always been created. - if ( pNodes->size() != ( MAX_NODES + 1)) - { - LOGOG_COUT << _LG("Incorrect number of nodes!") << endl; - return 1; - } - - // Try having that master node send a message to all other nodes! - vTopics.at( MAX_NODES - 1)->Transmit(); - - // Let's try leaving all the nodes allocated and let logog clean them all up. - LOGOG_SHUTDOWN(); - - if ( Static().s_pAllNodes != NULL ) - { - LOGOG_COUT << _LG("Could not delete all nodes!") << endl; - return 1; - } - - return 0; -} - - -UNITTEST( TimerTest ) -{ - const int NUM_TRIALS = 10 * TEST_STRESS_LEVEL; - const int WAIT_TIME = 1000000 * TEST_STRESS_LEVEL; - - Timer time; - LOGOG_TIME fCurrent = time.Get(); - - for ( int t = 0; t < NUM_TRIALS; t++ ) - { - /* do busy work */ - int k = 0; - for ( int i = 0; i < WAIT_TIME; i++ ) - k = k + 1; // fixes a lint warning - - if ( time.Get() < fCurrent ) - { - LOGOG_COUT << _LG("Timer error! Non monotonic timer behavior") << endl; - return 1; - } - fCurrent = time.Get(); - LOGOG_COUT << _LG("Current reported time: ") << fCurrent << endl; - } - - return 0; -} - -UNITTEST( TopicTest1 ) -{ - LOGOG_INITIALIZE(); - - { - Topic t1( LOGOG_LEVEL_WARN, - _LG( "file1.cpp" ), 50 ); - Topic t2( LOGOG_LEVEL_WARN ); - Topic t3( LOGOG_LEVEL_ERROR, - _LG( "file2.cpp" ), 100 ); - Topic t4( LOGOG_LEVEL_WARN, NULL, 0, - _LG( "Group" ), - _LG( "Category" ), - _LG( "Message" ), - 30.0f); - Topic t5( LOGOG_LEVEL_CRITICAL, NULL, 0, - _LG( "GroupGROUP" ), - _LG( "Important Category" ), - _LG( "Your Message Here"), - 150.0f); - - if (t1.CanSubscribeTo( t2 ) == true) - { - LOGOG_COUT << _LG("Subscription test failed; t1 can subscribe to t2") << endl; - return 1; - } - - if (t2.CanSubscribeTo( t1 ) == false ) - { - LOGOG_COUT << _LG("Subscription test failed; t2 can't subscribe to t1") << endl; - return 1; - } - - if ( t1.CanSubscribeTo( t3 ) == true ) - { - LOGOG_COUT << _LG("Subscription test failed; t1 can subscribe to t3") << endl; - return 1; - } - - if (t2.CanSubscribeTo( t3 ) == false ) - { - LOGOG_COUT << _LG("Subscription test failed; t2 can't subscribe to t3") << endl; - return 1; - } - - if (t4.CanSubscribeTo( t5 ) == false ) - { - LOGOG_COUT << _LG("Subscription test failed; t4 can't subscribe to t5") << endl; - return 1; - } - - if ( t5.CanSubscribeTo( t4 ) == true ) - { - LOGOG_COUT << _LG("Subscription test failed; t5 can subscribe to t4") << endl; - return 1; - } - } - - LOGOG_SHUTDOWN(); - - return 0; -} - -UNITTEST( Checkpoint1 ) -{ - LOGOG_INITIALIZE(); - - { - Checkpoint check( LOGOG_LEVEL_ALL, _LG( __FILE__ ), __LINE__, - _LG("Group"), _LG("Category"), _LG("Message"), 1.0f ); - - Topic t; - - Cerr cerrobj; - Cerr cerrgnu; - OutputDebug outdebug; - - FormatterGCC f; - cerrgnu.SetFormatter( f ); - - check.PublishTo( t ); - t.PublishToMultiple( AllTargets() ); - - LOGOG_COUT << _LG("Setup complete; ready to transmit ") << endl; - check.Transmit(); - } - - LOGOG_SHUTDOWN(); - - return 0; -} - -UNITTEST( FormatString1 ) -{ - LOGOG_INITIALIZE(); - { - String s; - - s.format( _LG("This is a test message.\n")); - LOGOG_COUT << s.c_str(); - - s.format( _LG("This is a test message: %d %x %f\n"), 1234, 0xf00d, 1.234f ); - LOGOG_COUT << s.c_str(); - - const LOGOG_CHAR *p = _LG("Here is a string"); - -#ifdef LOGOG_UNICODE - s.format( _LG("Here are six strings: %ls %ls %ls %ls %ls %ls \n"), p,p,p,p,p,p ); -#else // LOGOG_UNICODE - s.format( _LG("Here are six strings: %s %s %s %s %s %s \n"), p,p,p,p,p,p ); -#endif - - LOGOG_COUT << s.c_str(); - } - - LOGOG_SHUTDOWN(); - - return 0; -} - -UNITTEST( FormatTopic1 ) -{ - LOGOG_INITIALIZE(); - { - Cout out; - LogFile f( "log.txt"); - Message m; - - m.PublishToMultiple( AllTargets() ); - - m.Format( _LG("This is a test message: %d %x %f"), 1234, 0xf00d, 1.234f ); - m.Transmit(); - - const char *p = "Here is a string"; - - m.Format( _LG("Here are six strings: %s %s %s %s %s %s"), p,p,p,p,p,p ); - m.Transmit(); - } - - LOGOG_SHUTDOWN(); - - return 0; -} - -UNITTEST( ThreadLocking ) -{ - LOGOG_INITIALIZE(); - { - Cout out; // only one of these please - - const int NUM_THREADS = 10 * TEST_STRESS_LEVEL; - - LOGOG_VECTOR< Thread *> vpThreads; - Mutex mSharedMutex; - - for ( int t = 0; t < NUM_THREADS; t++ ) - vpThreads.push_back( new Thread( (Thread::ThreadStartLocationType) LockingThread,&mSharedMutex )); - - for ( int t = 0; t < NUM_THREADS; t++ ) - vpThreads[ t ]->Start(); - - for ( int t = 0; t < NUM_THREADS; t++ ) - Thread::WaitFor( *vpThreads[ t ]); - - for ( int t = 0; t < NUM_THREADS; t++ ) - delete vpThreads[t]; - - } - - LOGOG_SHUTDOWN(); - - return _s_ThreadLockingTest; -} - -//! [FormatterCustom1] -class FormatterCustom : public FormatterMSVC -{ - virtual TOPIC_FLAGS GetTopicFlags( const Topic &topic ) - { - return ( Formatter::GetTopicFlags( topic ) & - ~( TOPIC_FILE_NAME_FLAG | TOPIC_LINE_NUMBER_FLAG )); - } -}; - -UNITTEST( CustomFormatter ) -{ - LOGOG_INITIALIZE(); - { - Cout out; - FormatterCustom customFormat; - - out.SetFormatter( customFormat ); - - INFO( _LG( "No file and line number info is provided with this output.") ); - - /* The following output is produced: - * info: No file and line number info is provided with this output. - */ - } - LOGOG_SHUTDOWN(); - - return 0; -} -//! [FormatterCustom1] - -UNITTEST( HelloLogog ) -{ - //! [HelloLogog] - - /* The LOGOG_INITIALIZE() function must be called before we call - * any other logog functions. - */ - LOGOG_INITIALIZE(); - - { - /* In order to see any output, we have to instance a Target object, - * such as a Cerr or a Cout. Additionally, we have to destroy - * this object before calling LOGOG_SHUTDOWN(). This - * is why we have this object within these enclosing brackets. - */ - Cout out; - - /* Send some debugging information to any targets that have - * been instanced. - */ - /* If you're just getting started, and you haven't defined - * LOGOG_UNICODE, then ASCII logging is easy and works - * out of the box. - */ -#ifndef LOGOG_UNICODE - INFO("Hello, logog!"); - WARN("This is a warning"); -#endif // !LOGOG_UNICODE - - /* The _LG() macro around static text permits the given text to - * display correctly in both Unicode and ASCII builds of the - * logog library. - */ - ERR( _LG( "This is an error") ); - DBUG( _LG( "This is debugging info") ); - - /* The Cout object is destroyed here because it falls out of - * scope. */ - } - - /* Call LOGOG_SHUTDOWN() at the termination of your program to free - * all memory allocated by logog. Make sure no logog objects exist - * when you call LOGOG_SHUTDOWN(). - */ - LOGOG_SHUTDOWN(); - - /* Depending on your compiler, the output of the preceding code is - * something like: - * - * test.cpp(373) : info: Hello, logog! - * test.cpp(374) : warning: This is a warning - * test.cpp(375) : error: This is an error - * test.cpp(376) : debug: This is debugging info - */ - //! [HelloLogog] - return 0; -} - - - -UNITTEST( GroupCategory1 ) -{ -//! [GroupCategory1] - /* - The following example produces something like: - .\test.cpp(364) : emergency: {Graphics} [Unrecoverable] The graphics card has been destroyed - .\test.cpp(368) : warning: {Graphics} [Recoverable] The graphics card has been replaced - .\test.cpp(372) : warning: {Audio} [Recoverable] The headphones are unplugged - .\test.cpp(377) : info: Everything's back to normal - */ - - LOGOG_INITIALIZE(); - - { - Cerr err; - -#undef LOGOG_GROUP -#undef LOGOG_CATEGORY -#define LOGOG_GROUP "Graphics" -#define LOGOG_CATEGORY "Unrecoverable" - - EMERGENCY(_LG("The graphics card has been destroyed")); - -#undef LOGOG_CATEGORY -#define LOGOG_CATEGORY "Recoverable" - - WARN(_LG("The graphics card has been replaced")); - -#undef LOGOG_GROUP -#define LOGOG_GROUP "Audio" - - WARN(_LG("The headphones are unplugged")); - -#undef LOGOG_CATEGORY -#undef LOGOG_GROUP -#define LOGOG_CATEGORY NULL -#define LOGOG_GROUP NULL - - INFO(_LG("Everything's back to... %s!"), _LG("normal")); - } - - LOGOG_SHUTDOWN(); - //! [GroupCategory1] - return 0; -} - -UNITTEST( GroupCategory2 ) -{ -//! [GroupCategory2] - LOGOG_INITIALIZE(); - - { - GetDefaultFilter().Category(_LG("Unrecoverable")); - Cerr err; - - WARN(_LG("Logging messages in the Unrecoverable category...")); - - -#undef LOGOG_GROUP -#undef LOGOG_CATEGORY -#define LOGOG_GROUP "Graphics" -#define LOGOG_CATEGORY "Unrecoverable" - - EMERGENCY(_LG("The graphics card has been destroyed")); - -#undef LOGOG_CATEGORY -#define LOGOG_CATEGORY "Recoverable" - - WARN(_LG("The graphics card has been replaced")); - -#undef LOGOG_GROUP -#define LOGOG_GROUP "Audio" - - WARN(_LG("The headphones are unplugged")); - -#undef LOGOG_CATEGORY -#undef LOGOG_GROUP -#define LOGOG_CATEGORY NULL -#define LOGOG_GROUP NULL - - } - - LOGOG_SHUTDOWN(); -//! [GroupCategory2] - return 0; -} - -UNITTEST( GroupCategory3 ) -{ - LOGOG_INITIALIZE(); - - { - /* Assigning a group twice does not leak memory. */ - GetDefaultFilter().Group( _LG( "Controller" )); - GetDefaultFilter().Group( _LG( "Graphics" )); - - Cerr err; - WARN(_LG("This message won't happen because it's not in the Graphics group")); - -#undef LOGOG_GROUP -#undef LOGOG_CATEGORY -#define LOGOG_GROUP "Graphics" -#define LOGOG_CATEGORY "Unrecoverable" - - EMERGENCY(_LG("The graphics card has been destroyed")); - -#undef LOGOG_CATEGORY -#define LOGOG_CATEGORY "Recoverable" - - WARN(_LG("The graphics card has been replaced")); - -#undef LOGOG_GROUP -#define LOGOG_GROUP "Audio" - - WARN(_LG("The headphones are unplugged")); - -#undef LOGOG_CATEGORY -#undef LOGOG_GROUP -#define LOGOG_CATEGORY NULL -#define LOGOG_GROUP NULL - } - - LOGOG_SHUTDOWN(); - return 0; -} - -UNITTEST( GroupCategory4 ) -{ -//! [GroupCategory4] - LOGOG_INITIALIZE(); - - { - GetDefaultFilter().Group(_LG("Graphics")); - Filter filter; - filter.Group(_LG("Audio")); - Cerr err; - - WARN(_LG("This message won't happen because it's not in the Graphics group")); - -#undef LOGOG_GROUP -#undef LOGOG_CATEGORY -#define LOGOG_GROUP "Graphics" -#define LOGOG_CATEGORY "Unrecoverable" - - EMERGENCY(_LG("The graphics card has been destroyed")); - -#undef LOGOG_CATEGORY -#define LOGOG_CATEGORY "Recoverable" - - WARN(_LG("The graphics card has been replaced")); - -#undef LOGOG_GROUP -#define LOGOG_GROUP "Audio" - - WARN(_LG("The headphones are unplugged")); - -#undef LOGOG_GROUP -#define LOGOG_GROUP "Inputs" - - WARN(_LG("The inputs have been yanked off but this fact won't be reported!")); - -#undef LOGOG_CATEGORY -#undef LOGOG_GROUP -#define LOGOG_CATEGORY NULL -#define LOGOG_GROUP NULL - } - - LOGOG_SHUTDOWN(); -//! [GroupCategory4] - return 0; -} - - -UNITTEST( Info1 ) -{ - LOGOG_INITIALIZE(); - { - Cout out; - - for ( int i = 0; i < 2; i++ ) - { - for ( int t = 0; t < 10; t++ ) - { - INFO( _LG("t is now: %d"), t ); - if ( t > 8 ) - WARN(_LG("t is pretty high now!")); - } - - DBUG(_LG("This warning isn't very interesting")); - EMERGENCY(_LG("THIS IS SUPER IMPORTANT!")); - } - - LOGOG_SET_LEVEL( LOGOG_LEVEL_DEBUG ); - LOGOG_DEBUG(_LG("Messages instantiated for the first time will be called now. However, debug messages")); - LOGOG_DEBUG(_LG("instantiated before the LOGOG_SET_LEVEL won't be transmitted.")); - - } - - LOGOG_SHUTDOWN(); - - return 0; -} - -void GeneratePseudoRandomErrorMessages() -{ - int pr = 0xf8d92347; - int ps; - - for ( int t = 0; t < TEST_STRESS_LEVEL * 10; t++ ) - { - pr = pr * 0xd9381381 + 0x13d7b; - ps = pr % ( (1 << 19) - 1 ); - - ERR( _LG("We must inform you of this pseudo-random error code: %d"), ps ); - - // Do a non specific amount of busy work. - int swap1 = 0, swap2 = 1; - for ( int i = 0; i < ps; i++ ) - { - int swap3 = swap1; - swap1 = swap2; - swap2 = swap3; - } - } - -} - -UNITTEST( ImmediateLogging ) -{ - LOGOG_INITIALIZE(); - - { - LogFile logFile( "log.txt" ); - - GeneratePseudoRandomErrorMessages(); - } - - LOGOG_SHUTDOWN(); - - return 0; -} - -#ifdef LOGOG_UNICODE -UNITTEST( UnicodeLogFile ) -{ - LOGOG_INITIALIZE(); - - { - LogFile logFile( "unicode.txt" ); - - // see http://blogs.msdn.com/b/michkap/archive/2008/03/18/8306597.aspx - INFO(L"\x043a\x043e\x0448\x043a\x0430 \x65e5\x672c\x56fd"); - WARN(L"\x043a\x043e\x0448\x043a\x0430 \x65e5\x672c\x56fd"); - ERR(L"\x043a\x043e\x0448\x043a\x0430 \x65e5\x672c\x56fd"); - } - - LOGOG_SHUTDOWN(); - - return 0; -} -#endif // LOGOG_UNICODE - -UNITTEST( DeferredCoutLogging ) -{ - LOGOG_INITIALIZE(); - - { - Cout out; - LogBuffer logBuffer( &out ); - - // Make sure that out does not receive messages via the general filter mechanism. - out.UnsubscribeToMultiple( AllFilters() ); - - for ( int i = 1; i <= 10; i++ ) - { - ERR(_LG("This is error %d of 10"), i); - - int q = 27832; - - for ( int j = 0; j < TEST_STRESS_LEVEL * 10000000; j++ ) - q *= q; - } - } - - LOGOG_SHUTDOWN(); - - return 0; -} - -UNITTEST( DeferredFileLogging ) -{ -//! [DeferredFileLogging] - LOGOG_INITIALIZE(); - - { - LogFile logFile( "log.txt" ); - LogBuffer logBuffer( &logFile ); - - /* Because the LogBuffer is not writing to a line device a la stdout or stderr, it does not need to - * send null terminated strings to its destination (the LogFile). This is a particular peculiarity - * of having a buffering target to a serial-type target, such as a socket or a file. - */ - logBuffer.SetNullTerminatesStrings( false ); - - // Make sure that the log file does not receive messages via the general filter mechanism. - logFile.UnsubscribeToMultiple( AllFilters() ); - - for ( int i = 1; i <= 20; i++ ) - { - WARN(_LG("This is warning %d of 20"), i); - - int q = 27832; - for ( int j = 0; j < TEST_STRESS_LEVEL * 10000000; j++ ) - q *= q; - } - } - - LOGOG_SHUTDOWN(); -//! [DeferredFileLogging] - return 0; -} - -UNITTEST( DateAndTime ) -{ -//! [DateAndTimeLogging] - LOGOG_INITIALIZE(); - - { - Cerr err; - - Formatter *pFormatter = &GetDefaultFormatter(); - - pFormatter->SetShowTimeOfDay( true ); - - for ( int i = 1; i <= 20; i++ ) - { - WARN(_LG("This is warning %d of 20... but with time!"), i); - - int q = 27832; - for ( int j = 0; j < TEST_STRESS_LEVEL * 10000000; j++ ) - q *= q; - } - } - - LOGOG_SHUTDOWN(); -//! [DateAndTimeLogging] - - return 0; -} - - -#ifndef LOGOG_TARGET_PS3 -int DoPlatformSpecificTestInitialization() -{ - return 0; -} -#endif -int main( int , char ** ) -{ -#ifdef LOGOG_LEAK_DETECTION_WINDOWS - _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF | _CRTDBG_CHECK_ALWAYS_DF ); -#endif // LOGOG_LEAK_DETECTION_WINDOWS - -//! [WindowsUnicodeSetup] -#ifdef LOGOG_UNICODE -#ifdef LOGOG_FLAVOR_WINDOWS - _setmode(_fileno(stdout), _O_U16TEXT); - _setmode(_fileno(stderr), _O_U16TEXT); -#endif // LOGOG_FLAVOR_WINDOWS -#endif // LOGOG_UNICODE -//! [WindowsUnicodeSetup] - - int nPlatformSpecific; - nPlatformSpecific = DoPlatformSpecificTestInitialization(); - if ( nPlatformSpecific != 0) - return nPlatformSpecific; - - int nResult; - nResult = RunAllTests(); - ShutdownTests(); - -#ifdef LOGOG_LEAK_DETECTION_WINDOWS - _CrtMemState crtMemState; - _CrtMemCheckpoint( &crtMemState ); - _CrtMemDumpStatistics( &crtMemState ); - _CrtDumpMemoryLeaks(); -#endif // LOGOG_LEAK_DETECTION_WINDOWS - - return nResult; -} - diff --git a/ThirdParty/logog/test/test.sln b/ThirdParty/logog/test/test.sln deleted file mode 100644 index 5e7b2d0feb6..00000000000 --- a/ThirdParty/logog/test/test.sln +++ /dev/null @@ -1,41 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test", "test.vcproj", "{FFD188AD-0FE5-4808-90E0-EC528324FFAD}" - ProjectSection(ProjectDependencies) = postProject - {85857E80-2122-4DD8-9BA9-B90CC10D65B0} = {85857E80-2122-4DD8-9BA9-B90CC10D65B0} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "logog", "..\src\logog.vcproj", "{85857E80-2122-4DD8-9BA9-B90CC10D65B0}" -EndProject -Global - GlobalSection(SourceCodeControl) = preSolution - SccNumberOfProjects = 2 - SccProjectUniqueName0 = test.vcproj - SccProjectName0 = Perforce\u0020Project - SccLocalPath0 = . - SccProvider0 = MSSCCI:Perforce\u0020SCM - SccProjectUniqueName1 = ..\\src\\logog.vcproj - SccProjectName1 = Perforce\u0020Project - SccLocalPath1 = .. - SccProvider1 = MSSCCI:Perforce\u0020SCM - SccProjectFilePathRelativizedFromConnection1 = src\\ - EndGlobalSection - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {FFD188AD-0FE5-4808-90E0-EC528324FFAD}.Debug|Win32.ActiveCfg = Debug|Win32 - {FFD188AD-0FE5-4808-90E0-EC528324FFAD}.Debug|Win32.Build.0 = Debug|Win32 - {FFD188AD-0FE5-4808-90E0-EC528324FFAD}.Release|Win32.ActiveCfg = Release|Win32 - {FFD188AD-0FE5-4808-90E0-EC528324FFAD}.Release|Win32.Build.0 = Release|Win32 - {85857E80-2122-4DD8-9BA9-B90CC10D65B0}.Debug|Win32.ActiveCfg = Debug|Win32 - {85857E80-2122-4DD8-9BA9-B90CC10D65B0}.Debug|Win32.Build.0 = Debug|Win32 - {85857E80-2122-4DD8-9BA9-B90CC10D65B0}.Release|Win32.ActiveCfg = Release|Win32 - {85857E80-2122-4DD8-9BA9-B90CC10D65B0}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/ThirdParty/logog/test/test.vcproj b/ThirdParty/logog/test/test.vcproj deleted file mode 100644 index 8b14c91680c..00000000000 --- a/ThirdParty/logog/test/test.vcproj +++ /dev/null @@ -1,231 +0,0 @@ -<?xml version="1.0" encoding="Windows-1252"?> -<VisualStudioProject - ProjectType="Visual C++" - Version="9.00" - Name="test" - ProjectGUID="{FFD188AD-0FE5-4808-90E0-EC528324FFAD}" - RootNamespace="test" - SccProjectName="Perforce Project" - SccLocalPath="." - SccProvider="MSSCCI:Perforce SCM" - Keyword="Win32Proj" - TargetFrameworkVersion="196613" - > - <Platforms> - <Platform - Name="Win32" - /> - </Platforms> - <ToolFiles> - </ToolFiles> - <Configurations> - <Configuration - Name="Debug|Win32" - OutputDirectory="$(SolutionDir)$(ConfigurationName)" - IntermediateDirectory="$(ConfigurationName)" - ConfigurationType="1" - CharacterSet="1" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - Optimization="0" - AdditionalIncludeDirectories="..\include" - PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" - MinimalRebuild="true" - BasicRuntimeChecks="3" - RuntimeLibrary="3" - UsePrecompiledHeader="0" - WarningLevel="4" - Detect64BitPortabilityProblems="false" - DebugInformationFormat="4" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - LinkIncremental="2" - GenerateDebugInformation="true" - SubSystem="1" - RandomizedBaseAddress="0" - DataExecutionPrevention="0" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - HeapVerification="2" - HandleVerification="2" - LocksVerification="2" - PageHeapConserveMemory="false" - PageHeapProtectionLocation="1" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - <Configuration - Name="Release|Win32" - OutputDirectory="$(SolutionDir)$(ConfigurationName)" - IntermediateDirectory="$(ConfigurationName)" - ConfigurationType="1" - CharacterSet="1" - WholeProgramOptimization="1" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - Optimization="2" - EnableIntrinsicFunctions="true" - AdditionalIncludeDirectories="..\include" - PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" - RuntimeLibrary="2" - EnableFunctionLevelLinking="true" - UsePrecompiledHeader="0" - WarningLevel="4" - DebugInformationFormat="3" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - LinkIncremental="1" - GenerateDebugInformation="true" - SubSystem="1" - OptimizeReferences="2" - EnableCOMDATFolding="2" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - </Configurations> - <References> - </References> - <Files> - <Filter - Name="Source Files" - Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" - UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" - > - <File - RelativePath=".\test.cpp" - > - </File> - </Filter> - <Filter - Name="Header Files" - Filter="h;hpp;hxx;hm;inl;inc;xsd" - UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" - > - </Filter> - <Filter - Name="Resource Files" - Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" - UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" - > - </Filter> - <File - RelativePath="..\doc\overview.dox" - > - <FileConfiguration - Name="Debug|Win32" - > - <Tool - Name="VCCustomBuildTool" - Description="Generating doxygen output" - CommandLine="$(InputDir)make-doxygen.bat
" - Outputs="$(InputDir)html\index.html" - /> - </FileConfiguration> - <FileConfiguration - Name="Release|Win32" - ExcludedFromBuild="true" - > - <Tool - Name="VCCustomBuildTool" - Description="Generating doxygen output" - CommandLine="$(InputDir)make-doxygen.bat
" - Outputs="$(InputDir)html\index.html" - /> - </FileConfiguration> - </File> - </Files> - <Globals> - </Globals> -</VisualStudioProject> diff --git a/ThirdParty/logog/test/test.vcproj.lnt b/ThirdParty/logog/test/test.vcproj.lnt deleted file mode 100644 index 5fd30307fec..00000000000 --- a/ThirdParty/logog/test/test.vcproj.lnt +++ /dev/null @@ -1,11 +0,0 @@ -/* -dConfiguration= ... none provided */ --D_UNICODE // 27: CharacterSet = "1" --DUNICODE // 27: CharacterSet = "" --i"..\include" // 47: AdditionalIncludeDirectories = "..\include" --DWIN32 // 48: PreprocessorDefinitions = "WIN32;_DEBUG;_CONSOLE" --D_DEBUG // 48: PreprocessorDefinitions = "" --D_CONSOLE // 48: PreprocessorDefinitions = "" --D_MT // 51: RuntimeLibrary = "3" --D_DEBUG // 51: RuntimeLibrary = "" --D_DLL // 51: RuntimeLibrary = "" -.\test.cpp // 180: RelativePath = ".\test.cpp" -- GitLab