diff options
author | randomdan <randomdan@localhost> | 2011-03-03 00:23:57 +0000 |
---|---|---|
committer | randomdan <randomdan@localhost> | 2011-03-03 00:23:57 +0000 |
commit | 3a7461c2f1298338b47e52a7018988bef54fa58d (patch) | |
tree | 6855e13473486b2350506772323034840cee8723 | |
parent | Fix function definitions to match declarations (fixes Doxygen warnings) (diff) | |
download | project2-3a7461c2f1298338b47e52a7018988bef54fa58d.tar.bz2 project2-3a7461c2f1298338b47e52a7018988bef54fa58d.tar.xz project2-3a7461c2f1298338b47e52a7018988bef54fa58d.zip |
Fix inheritance of If
Remove virtual inheritance in many places
Strip down the unneeded docs made my doxygen
Add beginnings of a docbook
53 files changed, 596 insertions, 135 deletions
diff --git a/project2/Doxyfile b/project2/Doxyfile index a7a2386..8c2cb5f 100644 --- a/project2/Doxyfile +++ b/project2/Doxyfile @@ -1,4 +1,4 @@ -# Doxyfile 1.6.3 +# Doxyfile 1.7.3 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project @@ -31,7 +31,20 @@ PROJECT_NAME = Project2 # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = v0.2 +PROJECT_NUMBER = v0.4 + +# 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 = + +# 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. @@ -47,7 +60,7 @@ OUTPUT_DIRECTORY = docs # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. -CREATE_SUBDIRS = YES +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 @@ -57,7 +70,7 @@ CREATE_SUBDIRS = YES # 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-Cyrilic, Slovak, +# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English @@ -136,7 +149,7 @@ STRIP_FROM_PATH = 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 is your file systems +# (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 @@ -196,7 +209,7 @@ ALIASES = # 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 = YES +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 @@ -217,15 +230,15 @@ OPTIMIZE_FOR_FORTRAN = NO 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, C#, 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. +# 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 = @@ -233,7 +246,7 @@ EXTENSION_MAPPING = # 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 make the inheritance and collaboration +# func(std::string) {}). This also makes the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES @@ -251,7 +264,7 @@ 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 to replace the get and set methods by a property in the +# 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. @@ -281,7 +294,7 @@ SUBGROUPING = YES # 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 = Yes +TYPEDEF_HIDES_STRUCT = YES # 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. @@ -289,10 +302,10 @@ TYPEDEF_HIDES_STRUCT = Yes # 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 penality. +# 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 rougly double the +# 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 @@ -308,7 +321,7 @@ SYMBOL_CACHE_SIZE = 0 # 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 +EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. @@ -337,7 +350,7 @@ EXTRACT_LOCAL_METHODS = NO # 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 namespace are hidden. +# anonymous namespaces are hidden. EXTRACT_ANON_NSPACES = NO @@ -347,14 +360,14 @@ EXTRACT_ANON_NSPACES = NO # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. -HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_MEMBERS = YES # 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 +HIDE_UNDOC_CLASSES = YES # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. @@ -383,7 +396,7 @@ INTERNAL_DOCS = NO # 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 +CASE_SENSE_NAMES = YES # 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 @@ -395,7 +408,7 @@ HIDE_SCOPE_NAMES = NO # will put a list of the files that are included by a file in the documentation # of that file. -SHOW_INCLUDE_FILES = YES +SHOW_INCLUDE_FILES = NO # If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen # will list include files with double quotes in the documentation @@ -422,12 +435,12 @@ SORT_MEMBER_DOCS = YES 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 +# 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 @@ -448,6 +461,15 @@ SORT_GROUP_NAMES = NO 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. @@ -478,10 +500,10 @@ GENERATE_DEPRECATEDLIST= YES ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in +# 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 defines in the +# 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. @@ -491,7 +513,7 @@ MAX_INITIALIZER_LINES = 30 # 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 +SHOW_USED_FILES = NO # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy @@ -503,7 +525,7 @@ SHOW_DIRECTORIES = NO # 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 +SHOW_FILES = NO # 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 @@ -521,12 +543,12 @@ SHOW_NAMESPACES = YES 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. +# 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 = @@ -537,7 +559,7 @@ LAYOUT_FILE = # 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 +QUIET = YES # 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 @@ -549,7 +571,7 @@ WARNINGS = YES # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. -WARN_IF_UNDOCUMENTED = YES +WARN_IF_UNDOCUMENTED = NO # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some @@ -558,7 +580,7 @@ WARN_IF_UNDOCUMENTED = YES WARN_IF_DOC_ERROR = YES -# This WARN_NO_PARAMDOC option can be abled to get warnings for +# 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 @@ -590,7 +612,10 @@ WARN_LOGFILE = # directories like "/usr/src/myproject". Separate the files or directories # with spaces. -INPUT = . +INPUT = . \ + ../libdbpp \ + ../libpqpp \ + ../libodbcpp # 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 @@ -604,10 +629,12 @@ INPUT_ENCODING = UTF-8 # 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++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 +# *.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 = *.cpp *.h +FILE_PATTERNS = *.cpp \ + *.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. @@ -622,7 +649,7 @@ RECURSIVE = YES EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded +# directories that are symbolic links (a Unix file system feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO @@ -633,7 +660,8 @@ EXCLUDE_SYMLINKS = NO # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* -EXCLUDE_PATTERNS = +EXCLUDE_PATTERNS = */bin \ + */.svn # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the @@ -683,8 +711,8 @@ INPUT_FILTER = # 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, INPUT_FILTER -# is applied to all files. +# 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 = @@ -694,6 +722,14 @@ FILTER_PATTERNS = 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 #--------------------------------------------------------------------------- @@ -747,7 +783,7 @@ USE_HTAGS = NO # 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 +VERBATIM_HEADERS = NO #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index @@ -814,6 +850,31 @@ HTML_FOOTER = HTML_STYLESHEET = +# 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. @@ -842,7 +903,8 @@ HTML_DYNAMIC_SECTIONS = NO # 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. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. GENERATE_DOCSET = NO @@ -860,6 +922,16 @@ DOCSET_FEEDNAME = "Doxygen generated docs" DOCSET_BUNDLE_ID = org.doxygen.Project +# 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 = Publisher + # 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) @@ -904,10 +976,10 @@ BINARY_TOC = NO 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. +# 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 @@ -929,20 +1001,24 @@ QHP_NAMESPACE = org.doxygen.Project 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 +# 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>. +# 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 +# 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>. +# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes"> +# Qt Help Project / Filter Attributes</a>. QHP_SECT_FILTER_ATTRS = @@ -954,12 +1030,12 @@ QHP_SECT_FILTER_ATTRS = 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 +# 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 ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before # the help appears. GENERATE_ECLIPSEHELP = NO @@ -976,8 +1052,10 @@ ECLIPSE_DOC_ID = org.doxygen.Project DISABLE_INDEX = NO -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. +# This 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 @@ -1002,6 +1080,11 @@ USE_INLINE_TREES = NO 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 @@ -1010,22 +1093,50 @@ TREEVIEW_WIDTH = 250 FORMULA_FONTSIZE = 10 -# When the SEARCHENGINE tag is enabled doxygen will generate a search box +# 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 +# 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 = NO -# 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 +# 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 disadvances is that it is more difficult to setup +# 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 @@ -1066,7 +1177,7 @@ MAKEINDEX_CMD_NAME = makeindex 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, a4wide, letter, legal and +# by the printer. Possible values are: a4, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide @@ -1109,9 +1220,9 @@ LATEX_BATCHMODE = NO 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 +# 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 @@ -1320,15 +1431,15 @@ PREDEFINED = # 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. +# 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 function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. +# 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 @@ -1382,9 +1493,8 @@ PERL_PATH = /usr/bin/perl # 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 is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. +# 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 = NO @@ -1401,7 +1511,7 @@ MSCGEN_PATH = # inheritance and usage relations if the target is undocumented # or is not a class. -HIDE_UNDOC_RELATIONS = YES +HIDE_UNDOC_RELATIONS = NO # 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 @@ -1410,11 +1520,18 @@ HIDE_UNDOC_RELATIONS = YES HAVE_DOT = YES -# By default doxygen will write a font called FreeSans.ttf to the output -# directory and reference it in all dot files that doxygen generates. This -# font does not include all possible unicode characters however, so when you need -# these (or just want a differently looking font) you can specify the font name -# using DOT_FONTNAME. You need need to make sure dot is able to find the font, +# 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. @@ -1445,7 +1562,7 @@ CLASS_GRAPH = YES # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. -COLLABORATION_GRAPH = YES +COLLABORATION_GRAPH = NO # 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 @@ -1461,21 +1578,21 @@ UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. -TEMPLATE_RELATIONS = NO +TEMPLATE_RELATIONS = YES # 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 +INCLUDE_GRAPH = NO # 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 +INCLUDED_BY_GRAPH = NO # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function @@ -1494,7 +1611,7 @@ CALL_GRAPH = NO CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. +# will generate a graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES @@ -1506,7 +1623,7 @@ GRAPHICAL_HIERARCHY = YES 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 png, jpg, or gif +# generated by dot. Possible values are png, svg, gif or svg. # If left blank png will be used. DOT_IMAGE_FORMAT = png @@ -1522,6 +1639,12 @@ DOT_PATH = 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 @@ -1548,14 +1671,14 @@ MAX_DOT_GRAPH_DEPTH = 0 # 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 +DOT_TRANSPARENT = YES # 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 +DOT_MULTI_TARGETS = YES # 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 diff --git a/project2/console/consoleAppEngine.cpp b/project2/console/consoleAppEngine.cpp index eed37fd..d5e2bf6 100644 --- a/project2/console/consoleAppEngine.cpp +++ b/project2/console/consoleAppEngine.cpp @@ -7,6 +7,7 @@ SimpleMessageException(UnknownPlatformAlias); +/// Session implementation that stores its contents locally in memory, it has no long term persistence class ConsoleSession : public Session { public: ConsoleSession() : expiry(0) diff --git a/project2/curlHelper.h b/project2/curlHelper.h index af26a50..afebcdc 100644 --- a/project2/curlHelper.h +++ b/project2/curlHelper.h @@ -5,6 +5,7 @@ #include "variables.h" #include "../libmisc/curlsup.h" +/// Project2 helper component to provide common access to remote resources via libcurl class CurlHelper { public: CurlHelper(const xmlpp::Element * p); diff --git a/project2/dataSource.h b/project2/dataSource.h index 81a59ad..d8a5a9a 100644 --- a/project2/dataSource.h +++ b/project2/dataSource.h @@ -7,7 +7,8 @@ class DataSource; typedef boost::intrusive_ptr<DataSource> DataSourcePtr; -class DataSource : public virtual SourceObject { +/// Base class for data sources providing transaction support +class DataSource : public SourceObject { public: DataSource(const xmlpp::Element * p); virtual ~DataSource(); diff --git a/project2/docs/docbook.xml b/project2/docs/docbook.xml new file mode 100644 index 0000000..e8b7028 --- /dev/null +++ b/project2/docs/docbook.xml @@ -0,0 +1,294 @@ +<?xml version="1.0"?> +<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"> +<book> + <bookinfo> + <title>Project2 - Platform Guide</title> + <author> + <firstname>Dan</firstname> + <surname>Goodliffe</surname> + <affiliation> + <address> + <email>dan@randomdan.homeip.net</email> + </address> + </affiliation> + <personblurb>foo</personblurb> + </author> + <copyright> + <year>2011</year> + <holder role="mailto:dan@randomdan.homeip.net">Dan Goodliffe</holder> + </copyright> + <abstract> + <para>The complete guide to everything Project2</para> + </abstract> + </bookinfo> + <info> + <productname>Project2</productname> + </info> + <chapter> + <title>Introduction</title> + </chapter> + <chapter> + <title>Requirements</title> + </chapter> + <chapter> + <title>Compilation</title> + </chapter> + <chapter> + <title>Installation</title> + </chapter> + <chapter> + <title>Deployment</title> + </chapter> + <chapter> + <title>Runtime configuration</title> + <refentry id="p2config"> + <refmeta> + <refentrytitle>p2config</refentrytitle> + <manvolnum>5</manvolnum> + </refmeta> + <refnamediv> + <refname>p2config</refname> + <refname>.p2config</refname> + <refpurpose>Configure runtime behaviour of Project2 application engines.</refpurpose> + </refnamediv> + <variablelist> + <varlistentry> + <term><envar>sysloglevel=<replaceable><-1...7></replaceable></envar></term> + <listitem> + <para>The level of logging written via <citerefentry><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><envar>consoleloglevel=<replaceable><-1...7></replaceable></envar></term> + <listitem> + <para>The level of logging written to <literal>stderr</literal>.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><envar>dumpdatadoc=<replaceable>/path/to/file.xml</replaceable></envar></term> + <listitem> + <para>Write a copy of the data document produced by <application>p2cgi</application> before sending it to the web server.</para> + <tip>This option is available only when compiled with debugging support.</tip> + </listitem> + </varlistentry> + <varlistentry> + <term>errorcontenttype</term> + <listitem> + <para>The HTTP <literal>Content-Type</literal> header producted by <application>p2cgi</application> for an unhandled error document.</para> + </listitem> + </varlistentry> + <varlistentry> + <term>errortransformstyle</term> + <listitem> + <para>The <literal>href</literal> of the <literal>xml-stylesheet</literal> <application>p2cgi</application> will write into the processing instruction for an unhandled error document.</para> + </listitem> + </varlistentry> + </variablelist> + </refentry> + <section> + <title>Platform</title> + </section> + </chapter> + <chapter> + <title>Execution stages</title> + <section> + <title>Check</title> + </section> + <section> + <title>Request</title> + </section> + <section> + <title>Present</title> + </section> + </chapter> + <chapter> + <title>Engines</title> + <refentry> + <refmeta> + <refentrytitle>p2console</refentrytitle> + <manvolnum>1</manvolnum> + </refmeta> + <refnamediv> + <refname>p2console</refname> + <refpurpose>Run one or more Project2 script from the console.</refpurpose> + </refnamediv> + <refsynopsisdiv> + <cmdsynopsis> + <command>p2console</command> + <arg choice="req" rep="repeat"><replaceable>file</replaceable></arg> + </cmdsynopsis> + </refsynopsisdiv> + </refentry> + <refentry> + <refmeta> + <refentrytitle>p2cgi</refentrytitle> + <manvolnum>1</manvolnum> + </refmeta> + <refnamediv> + <refname>p2cgi</refname> + <refpurpose>Generate webpages and/or run Project2 scripts from a CGI capable web server.</refpurpose> + </refnamediv> + </refentry> + <refentry> + <refmeta> + <refentrytitle>p2fcgi</refentrytitle> + <manvolnum>1</manvolnum> + </refmeta> + <refnamediv> + <refname>p2fcgi</refname> + <refpurpose><application>FastCGI</application> implementation of <application>p2cgi</application>.</refpurpose> + </refnamediv> + <para>For all intents and purposes, <application>p2fcgi</application> is a drop in replacement for <application>p2cgi</application> and should be used whenever possible. See your web server configuration documentation for details on running fast CGI applications.</para> + <para>Unless otherwise specified, <literal>p2cgi</literal> refers to both <application>p2cgi</application> and/or <application>p2fcgi</application>.</para> + <para><application>p2fcgi</application> has numerous significant benefits over <application>p2cgi</application>. Most notably a near zero startup time, presistent connections to RDBMS datasources and high performance in memory caching of row sets.</para> + </refentry> + </chapter> + <chapter> + <title>Components</title> + <section> + <title>Common</title> + <refentry> + <refmeta> + <refentrytitle>project2:iterate</refentrytitle> + <manvolnum>7</manvolnum> + </refmeta> + <refnamediv> + <refname>project2:iterate</refname> + <refpurpose>Execute tasks for every record in a row source.</refpurpose> + </refnamediv> + <refsynopsisdiv> + <cmdsynopsis> + <command>project2:iterate</command> + <arg choice="req">name="<replaceable>iteration name</replaceable>"</arg> + <arg choice="req">source="<replaceable>row source</replaceable>"</arg> + <arg choice="opt">filter="<replaceable>row source filter name</replaceable>"</arg> + </cmdsynopsis> + </refsynopsisdiv> + </refentry> + <refentry> + <refmeta> + <refentrytitle>project2:view</refentrytitle> + <manvolnum>7</manvolnum> + </refmeta> + <refnamediv> + <refname>project2:view</refname> + <refpurpose>Present data from a row source.</refpurpose> + </refnamediv> + <refsynopsisdiv> + <cmdsynopsis> + <command>project2:view</command> + <arg choice="req">name="<replaceable>view name</replaceable>"</arg> + <arg choice="req">source="<replaceable>row source</replaceable>"</arg> + <arg choice="req">rootname="<replaceable>root xml node name</replaceable>"</arg> + <arg choice="req">recordname="<replaceable>record xml node name</replaceable>"</arg> + <arg choice="opt">filter="<replaceable>row source filter name</replaceable>"</arg> + </cmdsynopsis> + </refsynopsisdiv> + </refentry> + <refentry> + <refmeta> + <refentrytitle>project2:if</refentrytitle> + <manvolnum>7</manvolnum> + </refmeta> + <refnamediv> + <refname>project2:if</refname> + <refpurpose>Conditionally execute and/or present data.</refpurpose> + </refnamediv> + <refsynopsisdiv> + <cmdsynopsis> + <command>project2:if</command> + <arg choice="req">name="<replaceable>if name</replaceable>"</arg> + <arg choice="req">mode="<replaceable>and | or</replaceable>"</arg> + </cmdsynopsis> + </refsynopsisdiv> + </refentry> + </section> + <section> + <title>Data Sources</title> + <section> + <title>rdbmsdatasource</title> + <section> + <title>Connectors</title> + <section> + <title>ODBC</title> + </section> + <section> + <title>PostgreSQL</title> + </section> + </section> + </section> + </section> + <section> + <title>Row sources</title> + <section> + <title>xslrows</title> + </section> + <section> + <title>xmlrows</title> + </section> + <section> + <title>sqlrows</title> + </section> + <section> + <title>filerows</title> + </section> + <section> + <title>fsrows</title> + </section> + <section> + <title>urlrows</title> + </section> + <section> + <title>procrows</title> + </section> + </section> + <section> + <title>Tasks</title> + <section> + <title>sessionset</title> + </section> + <section> + <title>sessionclear</title> + </section> + <section> + <title>sqlmergetask</title> + </section> + <section> + <title>sqltask</title> + </section> + <section> + <title>sendmail</title> + </section> + </section> + <section> + <title>Variables</title> + <section> + <title>literal</title> + </section> + <section> + <title>config</title> + </section> + <section> + <title>parent</title> + </section> + <section> + <title>uri</title> + </section> + <section> + <title>param</title> + </section> + <section> + <title>session</title> + </section> + </section> + <section> + <title>Checks</title> + <section> + <title>regexcheck</title> + </section> + <section> + <title>sqlcheck</title> + </section> + </section> + </chapter> +</book> diff --git a/project2/fileRows.cpp b/project2/fileRows.cpp index 487c2ef..58dde13 100644 --- a/project2/fileRows.cpp +++ b/project2/fileRows.cpp @@ -8,7 +8,6 @@ DECLARE_LOADER("filerows", FileRows); FileRows::FileRows(const xmlpp::Element * p) : - SourceObject(p), StreamRows(p), path(p, "path") { diff --git a/project2/fileRows.h b/project2/fileRows.h index 0fcc394..a4cc863 100644 --- a/project2/fileRows.h +++ b/project2/fileRows.h @@ -6,6 +6,7 @@ class CommonObjects; +/// Project2 component to create a row set from the contents of a file on the local filesystem class FileRows : public StreamRows { public: FileRows(const xmlpp::Element * p); diff --git a/project2/fsRows.cpp b/project2/fsRows.cpp index 327d9f4..3cfbf8c 100644 --- a/project2/fsRows.cpp +++ b/project2/fsRows.cpp @@ -116,7 +116,6 @@ class FsRowSpecMaxDepth : public FsRows::SpecBase { }; FsRows::FsRows(const xmlpp::Element * p) : - SourceObject(p), RowSet(p) { } diff --git a/project2/fsRows.h b/project2/fsRows.h index a93619f..9e59647 100644 --- a/project2/fsRows.h +++ b/project2/fsRows.h @@ -10,6 +10,7 @@ class CommonObjects; +/// Project2 component to create a row set based on files and directories on the local filesystem class FsRows : public RowSet { public: class SpecBase : public virtual IntrusivePtrBase { diff --git a/project2/iHaveParameters.h b/project2/iHaveParameters.h index 9d5f46f..0f8d154 100644 --- a/project2/iHaveParameters.h +++ b/project2/iHaveParameters.h @@ -5,9 +5,9 @@ #include <boost/intrusive_ptr.hpp> #include "variables.h" #include "intrusivePtrBase.h" -#include "sourceObject.h" -class IHaveParameters : public virtual IntrusivePtrBase { +/// Mix-in base class to store parameters for component execution +class IHaveParameters { public: class Parameter : public virtual IntrusivePtrBase { public: diff --git a/project2/if.cpp b/project2/if.cpp index a69fd8d..b1b98a6 100644 --- a/project2/if.cpp +++ b/project2/if.cpp @@ -39,11 +39,15 @@ IfSet::passes() const If::If(const xmlpp::Element * e) : SourceObject(e), - Iterate(e), - RowView(e), + NoOutputExecute(e), + View(e), IfSet(e), localErrorHandling(e->get_attribute_value("errorHandling") == "local") { + LoaderBase loader("http://project2.randomdan.homeip.net", true); + loader.supportedStorers.insert(Storer::into(&subNOEs)); + loader.supportedStorers.insert(Storer::into(&subViews)); + loader.collectAll(e, true, IgnoreUnsupported); } void diff --git a/project2/if.h b/project2/if.h index 68f6595..0a262c2 100644 --- a/project2/if.h +++ b/project2/if.h @@ -1,8 +1,8 @@ #ifndef IF_H #define IF_H -#include "iterate.h" -#include "rowView.h" +#include "noOutputExecute.h" +#include "view.h" #include "paramChecker.h" class IfSet : public virtual IntrusivePtrBase { @@ -18,7 +18,8 @@ class IfSet : public virtual IntrusivePtrBase { ParamCheckers checks; }; -class If : public Iterate, public RowView, public IfSet { +/// Project2 component to conditionally execute its children +class If : public NoOutputExecute, public View, public IfSet { public: If(const xmlpp::Element *); @@ -29,6 +30,11 @@ class If : public Iterate, public RowView, public IfSet { const bool localErrorHandling; private: + typedef Storage<View>::Objects SubViews; + SubViews subViews; + typedef Storage<NoOutputExecute>::Objects SubNOEs; + SubNOEs subNOEs; + const std::string & getName() const; }; diff --git a/project2/iterate.h b/project2/iterate.h index d5ca824..54ddabf 100644 --- a/project2/iterate.h +++ b/project2/iterate.h @@ -9,6 +9,7 @@ class Iterate; typedef boost::intrusive_ptr<Iterate> IteratePtr; +/// Project2 component to iterate over a row set, executing its children for each record class Iterate : public NoOutputExecute, public RowProcessor { public: Iterate(const xmlpp::Element * p); diff --git a/project2/loggers.h b/project2/loggers.h index 7be5280..69b352c 100644 --- a/project2/loggers.h +++ b/project2/loggers.h @@ -3,6 +3,7 @@ #include "logger.h" +/// Base class for classes providing a logging facility class LogDriverBase : public virtual IntrusivePtrBase { public: LogDriverBase(int level); @@ -12,6 +13,7 @@ class LogDriverBase : public virtual IntrusivePtrBase { const int level; }; +/// Base class for loggers that write to some sort of file handle class FileBasedLogDriver : public LogDriverBase { public: FileBasedLogDriver(FILE *, int level, bool timestamp); @@ -30,6 +32,7 @@ class FileBasedLogDriver : public LogDriverBase { mutable char tmbuf[30]; }; +/// Logger that writes to the console class ConsoleLogDriver : public FileBasedLogDriver { public: ConsoleLogDriver(FILE *, int level, bool timestamp); @@ -37,12 +40,14 @@ class ConsoleLogDriver : public FileBasedLogDriver { }; +/// Logger that writes to a file class FileLogDriver : public FileBasedLogDriver { public: FileLogDriver(const char * path, int level); ~FileLogDriver(); }; +/// Logger that writes to syslog class SyslogLogDriver : public LogDriverBase { public: SyslogLogDriver(const char * ident, int level, int option = 0, int facility = LOG_USER); diff --git a/project2/noOutputExecute.h b/project2/noOutputExecute.h index f47c118..0e84fd1 100644 --- a/project2/noOutputExecute.h +++ b/project2/noOutputExecute.h @@ -3,12 +3,10 @@ #include "sourceObject.h" -class ApplicationEngine; -class PerRowValues; - class NoOutputExecute; typedef boost::intrusive_ptr<NoOutputExecute> NoOutputExecutePtr; +/// Base class for Project2 compoments that perform actions, but product no output class NoOutputExecute : public virtual SourceObject { public: NoOutputExecute(const xmlpp::Element * p); diff --git a/project2/paramChecker.h b/project2/paramChecker.h index 219396c..465b8e9 100644 --- a/project2/paramChecker.h +++ b/project2/paramChecker.h @@ -8,7 +8,8 @@ class ApplicationEngine; class ParamChecker; typedef boost::intrusive_ptr<ParamChecker> ParamCheckerPtr; -class ParamChecker : public virtual SourceObject { +/// Base class for Project2 compoments that perform tests/checks +class ParamChecker : public SourceObject { public: ParamChecker(const xmlpp::Element * p); virtual ~ParamChecker(); diff --git a/project2/procRows.cpp b/project2/procRows.cpp index 54b6d99..f1d00e0 100644 --- a/project2/procRows.cpp +++ b/project2/procRows.cpp @@ -8,7 +8,6 @@ SimpleMessageException(SubProcessFailedToStart); SimpleNumericException(SubProcessFailed); ProcRows::ProcRows(const xmlpp::Element * p) : - SourceObject(p), FileRows(p) { } diff --git a/project2/procRows.h b/project2/procRows.h index c35a2c1..63dbb8e 100644 --- a/project2/procRows.h +++ b/project2/procRows.h @@ -3,6 +3,7 @@ #include "fileRows.h" +/// Project2 component to create a row set from the output of a locally executed program class ProcRows : public FileRows { public: ProcRows(const xmlpp::Element * p); diff --git a/project2/rawView.h b/project2/rawView.h index 5ccd02c..b192c89 100644 --- a/project2/rawView.h +++ b/project2/rawView.h @@ -6,6 +6,7 @@ #include <map> #include "view.h" +/// Project2 component to create output based on its own XML tree node class RawView : public View { public: RawView(const xmlpp::Element * p); diff --git a/project2/rdbmsDataSource.cpp b/project2/rdbmsDataSource.cpp index e843d8c..1b0ab3c 100644 --- a/project2/rdbmsDataSource.cpp +++ b/project2/rdbmsDataSource.cpp @@ -19,6 +19,7 @@ static const int ODBC_TYPEID = 2; SimpleMessageException(UnknownConnectionProvider); +/// Specialized ElementLoader for instances of RdbmsDataSource; handles persistent DB connections class RdbmsDataSourceLoader : public ElementLoaderImpl<RdbmsDataSource> { public: void onIdle() @@ -50,7 +51,6 @@ RdbmsDataSource::FailedHosts RdbmsDataSource::failedhosts; RdbmsDataSource::DSNSet RdbmsDataSource::changedDSNs; RdbmsDataSource::RdbmsDataSource(const xmlpp::Element * p) : - SourceObject(p), DataSource(p), masterDsn(dynamic_cast<const xmlpp::Element *>(p->find("masterdsn").front())), preferLocal(p->get_attribute_value("preferlocal") != "false") diff --git a/project2/rdbmsDataSource.h b/project2/rdbmsDataSource.h index 4026f48..857173b 100644 --- a/project2/rdbmsDataSource.h +++ b/project2/rdbmsDataSource.h @@ -9,6 +9,7 @@ #include "../libdbpp/connection.h" #include "../libdbpp/error.h" +/// Project2 component to provide access to transactional RDBMS data sources class RdbmsDataSource : public DataSource { public: class RdbmsConnection { diff --git a/project2/regexCheck.cpp b/project2/regexCheck.cpp index 5588673..b8504c8 100644 --- a/project2/regexCheck.cpp +++ b/project2/regexCheck.cpp @@ -6,7 +6,6 @@ DECLARE_LOADER("regexcheck", RegexCheck); RegexCheck::RegexCheck(const xmlpp::Element * p) : - SourceObject(p), ParamChecker(p), applyTo(p, "apply-to"), regex(p, "regex") diff --git a/project2/regexCheck.h b/project2/regexCheck.h index 41bb2c8..602f822 100644 --- a/project2/regexCheck.h +++ b/project2/regexCheck.h @@ -4,6 +4,7 @@ #include "paramChecker.h" #include "variables.h" +/// Project2 component to test the value of a variable against a regular expression class RegexCheck : public ParamChecker { public: RegexCheck(const xmlpp::Element * p); diff --git a/project2/rowProcessor.cpp b/project2/rowProcessor.cpp index fbb470a..caff826 100644 --- a/project2/rowProcessor.cpp +++ b/project2/rowProcessor.cpp @@ -4,7 +4,6 @@ #include <boost/foreach.hpp> RowProcessor::RowProcessor(const xmlpp::Element * p) : - SourceObject(p), IHaveParameters(p), recordSource(p->get_attribute_value("source")), filter(p->get_attribute_value("filter")) diff --git a/project2/rowProcessor.h b/project2/rowProcessor.h index e4377bd..0f421f9 100644 --- a/project2/rowProcessor.h +++ b/project2/rowProcessor.h @@ -6,7 +6,8 @@ #include "iHaveParameters.h" #include "rowSet.h" -class RowProcessor : public IHaveParameters, public virtual SourceObject { +/// Base class for Project2 components that work with row sets +class RowProcessor : public IHaveParameters { public: RowProcessor(const xmlpp::Element *); virtual void rowReady() const = 0; diff --git a/project2/rowSet.h b/project2/rowSet.h index d2e4b1f..52edd76 100644 --- a/project2/rowSet.h +++ b/project2/rowSet.h @@ -14,7 +14,8 @@ class VariableType; typedef boost::intrusive_ptr<RowSet> RowSetPtr; typedef boost::intrusive_ptr<const RowSet> ConstRowSetPtr; -class RowSet : public virtual SourceObject { +/// Base class for Project2 components that provide a row set representation of data +class RowSet : public SourceObject { public: typedef boost::function0<VariableType> RowAttribute; SimpleNumericException(ParentOutOfRange); diff --git a/project2/rowView.h b/project2/rowView.h index a866558..7cc6fe1 100644 --- a/project2/rowView.h +++ b/project2/rowView.h @@ -6,6 +6,7 @@ #include "rowProcessor.h" #include "view.h" +/// Project2 component to create output based on a records in a row set class RowView : public View, public RowProcessor { public: RowView(const xmlpp::Element *); diff --git a/project2/sendmailTask.h b/project2/sendmailTask.h index 1f7f193..2f3e088 100644 --- a/project2/sendmailTask.h +++ b/project2/sendmailTask.h @@ -7,6 +7,7 @@ #include "task.h" #include "variables.h" +/// Project2 component to send an email class SendMailTask : public Task { public: class MailPart : public IntrusivePtrBase { diff --git a/project2/session.h b/project2/session.h index 2227b5b..7b66db9 100644 --- a/project2/session.h +++ b/project2/session.h @@ -8,6 +8,7 @@ #include "variables.h" #include "exceptions.h" +/// Base class for classes implementing session variable storage class Session : public virtual IntrusivePtrBase { public: SimpleMessageException(VariableNotFound); diff --git a/project2/sessionClearTask.h b/project2/sessionClearTask.h index 9b93ed5..8241f8a 100644 --- a/project2/sessionClearTask.h +++ b/project2/sessionClearTask.h @@ -10,7 +10,8 @@ class CommonObjects; -class SessionClearTask : public virtual Task { +/// Project2 component to remove a variable from the session +class SessionClearTask : public Task { public: SessionClearTask(const xmlpp::Element * p); virtual ~SessionClearTask(); diff --git a/project2/sessionSetTask.h b/project2/sessionSetTask.h index 5cf139e..f439768 100644 --- a/project2/sessionSetTask.h +++ b/project2/sessionSetTask.h @@ -11,7 +11,8 @@ class CommonObjects; -class SessionSetTask : public virtual Task { +/// Project2 component to add/update a variable in the session +class SessionSetTask : public Task { public: SessionSetTask(const xmlpp::Element * p); virtual ~SessionSetTask(); diff --git a/project2/sessionXml.cpp b/project2/sessionXml.cpp index 41a2f1e..03b48bc 100644 --- a/project2/sessionXml.cpp +++ b/project2/sessionXml.cpp @@ -8,6 +8,7 @@ #include <boost/foreach.hpp> #include <boost/lexical_cast.hpp> +/// Session implementation that stores its contents in an XML file on the local filesystem class SessionXml : public Session { public: SessionXml(UUID & sid); diff --git a/project2/sourceObject.h b/project2/sourceObject.h index fe6b4cc..3ebae2c 100644 --- a/project2/sourceObject.h +++ b/project2/sourceObject.h @@ -8,6 +8,7 @@ class CommonObjects; class SourceObject; typedef boost::intrusive_ptr<SourceObject> SourceObjectPtr; +/// Base class for all Project2 components that can be placed in a Project2 script class SourceObject : public virtual IntrusivePtrBase { public: SourceObject(const xmlpp::Element * p); diff --git a/project2/sqlCheck.cpp b/project2/sqlCheck.cpp index f7c4c8c..c36c229 100644 --- a/project2/sqlCheck.cpp +++ b/project2/sqlCheck.cpp @@ -14,7 +14,6 @@ DECLARE_LOADER("sqlcheck", SqlCheck); class CantCompareNulls : public std::exception { }; SqlCheck::SqlCheck(const xmlpp::Element * p) : - SourceObject(p), IHaveParameters(p), ParamChecker(p), dataSource(p, "datasource"), diff --git a/project2/sqlCheck.h b/project2/sqlCheck.h index 8557dce..1f2937f 100644 --- a/project2/sqlCheck.h +++ b/project2/sqlCheck.h @@ -6,7 +6,8 @@ namespace DB { class SelectCommand; } -class SqlCheck : public IHaveParameters, public ParamChecker { +/// Project2 component to check the value of a variable against an RDBMS data source +class SqlCheck : IHaveParameters, public ParamChecker { public: SqlCheck(const xmlpp::Element * p); virtual ~SqlCheck(); diff --git a/project2/sqlMergeTask.cpp b/project2/sqlMergeTask.cpp index a2dfe72..0160a7f 100644 --- a/project2/sqlMergeTask.cpp +++ b/project2/sqlMergeTask.cpp @@ -16,7 +16,8 @@ static void attach(IteratePtr i, ModifyCommand * insert); class SqlMergeInsert; typedef boost::intrusive_ptr<SqlMergeInsert> SqlMergeInsertPtr; -class SqlMergeInsert : public IHaveParameters, public Task { +/// Project2 component insert custom constructed records during an SQL Merge task +class SqlMergeInsert : IHaveParameters, public Task { public: SqlMergeInsert(const xmlpp::Element * p) : SourceObject(p), diff --git a/project2/sqlMergeTask.h b/project2/sqlMergeTask.h index fc33bc5..795e94f 100644 --- a/project2/sqlMergeTask.h +++ b/project2/sqlMergeTask.h @@ -14,6 +14,7 @@ #include <map> #include <list> +/// Project2 component merge arbitrary data into an RDBMS table class SqlMergeTask : public Task { public: typedef std::string Table; diff --git a/project2/sqlRows.cpp b/project2/sqlRows.cpp index 14bdd41..920b5a6 100644 --- a/project2/sqlRows.cpp +++ b/project2/sqlRows.cpp @@ -16,7 +16,6 @@ DECLARE_LOADER("sqlrows", SqlRows); SqlRows::SqlRows(const xmlpp::Element * p) : - SourceObject(p), RowSet(p), dataSource(p, "datasource"), sqlCommand(dynamic_cast<xmlpp::Element *>(p->get_children("sql").front())), diff --git a/project2/sqlRows.h b/project2/sqlRows.h index 099a56b..901023b 100644 --- a/project2/sqlRows.h +++ b/project2/sqlRows.h @@ -10,6 +10,7 @@ class RdbmsDataSource; +/// Project2 component to create a row set based on an SQL SELECT statement issued against an RDBMS data source class SqlRows : public RowSet { public: SqlRows(const xmlpp::Element * p); diff --git a/project2/sqlTask.h b/project2/sqlTask.h index 4805307..d8f9fe1 100644 --- a/project2/sqlTask.h +++ b/project2/sqlTask.h @@ -9,7 +9,8 @@ namespace DB { class ModifyCommand; } -class SqlTask : public Task, public IHaveParameters { +/// Project2 component to execute a modifying SQL statement against an RDBMS data source +class SqlTask : public Task, IHaveParameters { public: SqlTask(const xmlpp::Element * p); virtual ~SqlTask(); diff --git a/project2/streamRows.cpp b/project2/streamRows.cpp index 47832ac..62d0d0f 100644 --- a/project2/streamRows.cpp +++ b/project2/streamRows.cpp @@ -4,7 +4,6 @@ #include <libxml++/nodes/textnode.h> StreamRows::StreamRows(const xmlpp::Element * p) : - SourceObject(p), RowSet(p), fieldSep(p->get_attribute_value("fieldSep")[0]), quoteChar(p->get_attribute_value("quoteChar")[0]), diff --git a/project2/streamRows.h b/project2/streamRows.h index 6187f12..449a44b 100644 --- a/project2/streamRows.h +++ b/project2/streamRows.h @@ -7,6 +7,7 @@ #include <boost/multi_index/member.hpp> #include <boost/multi_index/ordered_index.hpp> +/// Base class for Project2 components that create a row set based on the contents of a byte stream class StreamRows : public RowSet { public: StreamRows(const xmlpp::Element * p); diff --git a/project2/task.h b/project2/task.h index f9fd1ff..57697e2 100644 --- a/project2/task.h +++ b/project2/task.h @@ -5,6 +5,7 @@ #include "sourceObject.h" #include "noOutputExecute.h" +/// Base class for Project2 components that perform some specific task class Task : public NoOutputExecute { public: Task(const xmlpp::Element * p); diff --git a/project2/urlRows.cpp b/project2/urlRows.cpp index d4910bb..5669925 100644 --- a/project2/urlRows.cpp +++ b/project2/urlRows.cpp @@ -9,7 +9,6 @@ DECLARE_LOADER("urlrows", UrlRows); UrlRows::UrlRows(const xmlpp::Element * p) : - SourceObject(p), StreamRows(p), CurlHelper(p), convertRequired(encoding != "utf-8") diff --git a/project2/urlRows.h b/project2/urlRows.h index d2bf038..ca1894d 100644 --- a/project2/urlRows.h +++ b/project2/urlRows.h @@ -8,6 +8,7 @@ #include "streamRows.h" #include "curlHelper.h" +/// Project2 component to create a row set from the contents of a file accessible via libcurl class UrlRows : public StreamRows, CurlHelper { public: UrlRows(const xmlpp::Element * p); diff --git a/project2/variables.cpp b/project2/variables.cpp index 2e08b1b..2b2872d 100644 --- a/project2/variables.cpp +++ b/project2/variables.cpp @@ -117,6 +117,7 @@ VariableType::operator=(const VariableType & vt) _VT::operator=(*((const _VT *)&vt)); } +/// Variable implementation whose value is a literal value of some known type class VariableLiteral : public VariableImpl { public: VariableLiteral(const Glib::ustring & src, const VT_typeID format = DefaultType) : @@ -129,6 +130,7 @@ class VariableLiteral : public VariableImpl { VariableType val; }; +/// Base class for variables whose content is dynamic class VariableImplDyn : public VariableImpl { public: VariableImplDyn(const xmlpp::Element * e) : @@ -151,6 +153,7 @@ class VariableImplDyn : public VariableImpl { boost::optional<Variable> defaultValue; }; +/// Variable implementation to access session contents class VariableSession : public VariableImplDyn { public: VariableSession(const xmlpp::Element * e) : @@ -175,6 +178,7 @@ class VariableSession : public VariableImplDyn { const Glib::ustring name; }; +/// Variable implementation to access call parameters class VariableParam : public VariableImplDyn { public: VariableParam(const xmlpp::Element * e) : @@ -202,6 +206,7 @@ class VariableParam : public VariableImplDyn { const Glib::ustring name; }; +/// Variable implementation to access URI path fragments class VariableUri : public VariableImplDyn { public: VariableUri(const xmlpp::Element * e) : @@ -233,6 +238,7 @@ static void assignHelper(VariableType & dest, const VariableType & src) { dest = src; } +/// Variable implementation to access fields in row sets class VariableParent : public VariableImplDyn, public RowUser { public: VariableParent(const xmlpp::Element * e, const RowUser * d) : @@ -321,6 +327,7 @@ class VariableParent : public VariableImplDyn, public RowUser { mutable boost::function2<void, VariableType &, ConstRowSetPtr> getValue; }; +/// Variable implementation which has some fixed value class VariableFixed : public VariableImpl { public: VariableFixed(VariableType v) : @@ -335,6 +342,7 @@ class VariableFixed : public VariableImpl { VariableType var; }; +/// Variable implementation to access platform configuration values class VariableConfig : public VariableImplDyn { public: VariableConfig(const xmlpp::Element * e) : diff --git a/project2/variables.h b/project2/variables.h index 7dcccc2..863355c 100644 --- a/project2/variables.h +++ b/project2/variables.h @@ -59,7 +59,8 @@ class VariableType : public _VT { mutable Freer freer; }; -class VariableImpl : public virtual IntrusivePtrBase { +/// Base class for Project2 variable accessors +class VariableImpl : public IntrusivePtrBase { public: virtual const VariableType & value() const = 0; diff --git a/project2/view.h b/project2/view.h index a6ae565..80d7b30 100644 --- a/project2/view.h +++ b/project2/view.h @@ -6,6 +6,7 @@ class Presenter; +/// Base class for Project2 components that output data class View : public virtual SourceObject { public: View(const xmlpp::Element *); diff --git a/project2/xmlObjectLoader.h b/project2/xmlObjectLoader.h index 9fba5bd..40e6d5d 100644 --- a/project2/xmlObjectLoader.h +++ b/project2/xmlObjectLoader.h @@ -53,6 +53,7 @@ class LoaderBase { static void init_loader_##T() __attribute__ ((constructor(201))); \ static void init_loader_##T() { LoaderBase::newLoader(N, new ElementLoaderImpl<T>()); } +/// Helper for loading and maintaining Project2 script components class ElementLoader { public: virtual SourceObjectPtr go(const xmlpp::Element * xml) const = 0; @@ -61,6 +62,7 @@ class ElementLoader { virtual void onPeriodic(); // When the app engine feels like it }; +/// Helper for loading and maintaining Project2 script components (typed implementation) template <class X> class ElementLoaderImpl : public ElementLoader { public: diff --git a/project2/xmlRows.cpp b/project2/xmlRows.cpp index 6cf7da0..bd958a5 100644 --- a/project2/xmlRows.cpp +++ b/project2/xmlRows.cpp @@ -14,7 +14,6 @@ DECLARE_LOADER("xmlrows", XmlRows); XmlRows::XmlRows(const xmlpp::Element * p) : - SourceObject(p), RowSet(p), recordRoot(p->get_attribute_value("recordroot")), recordTrigger(p->get_attribute_value("recordtrigger")), diff --git a/project2/xmlRows.h b/project2/xmlRows.h index df74710..efbaf5e 100644 --- a/project2/xmlRows.h +++ b/project2/xmlRows.h @@ -6,6 +6,7 @@ #include <map> #include "rowSet.h" +/// Project2 component to create a row set based on the contents of an XML file class XmlRows : public RowSet { public: typedef std::map<Glib::ustring, Glib::ustring> Values; diff --git a/project2/xslRows.cpp b/project2/xslRows.cpp index e00d8b7..9793119 100644 --- a/project2/xslRows.cpp +++ b/project2/xslRows.cpp @@ -18,7 +18,6 @@ SimpleMessageException(XpathInitError); SimpleMessageException(XpathEvalError); XslRows::XslRows(const xmlpp::Element * p) : - SourceObject(p), RowSet(p), CurlHelper(p), html(p->get_attribute_value("html") == "true"), diff --git a/project2/xslRows.h b/project2/xslRows.h index 27cb1b5..7aeb4e4 100644 --- a/project2/xslRows.h +++ b/project2/xslRows.h @@ -9,6 +9,7 @@ #include "variables.h" #include "curlHelper.h" +/// Project2 component to create a row set based on the contents of an XML resource and specific XPaths with its hierarchy class XslRows : public RowSet, CurlHelper { public: XslRows(const xmlpp::Element * p); |