diff options
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);  | 
