Changeset 1054


Ignore:
Timestamp:
02/17/17 19:51:36 (4 years ago)
Author:
oabramkina
Message:

dev: intermediate commit.

Location:
XIOS/dev/dev_olga
Files:
2 deleted
28 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_olga/Doxyfile

    r502 r1054  
    1 # Doxyfile 1.7.4 
     1# Doxyfile 1.8.9.1 
    22 
    33# This file describes the settings to be used by the documentation system 
    4 # doxygen (www.doxygen.org) for a project 
    5 # 
    6 # All text after a hash (#) is considered a comment and will be ignored 
     4# doxygen (www.doxygen.org) for a project. 
     5# 
     6# All text after a double hash (##) is considered a comment and is placed in 
     7# front of the TAG it is preceding. 
     8# 
     9# All text after a single hash (#) is considered a comment and will be ignored. 
    710# The format is: 
    8 #       TAG = value [value, ...] 
    9 # For lists items can also be appended using: 
    10 #       TAG += value [value, ...] 
    11 # Values that contain spaces should be placed between quotes (" ") 
     11# TAG = value [value, ...] 
     12# For lists, items can also be appended using: 
     13# TAG += value [value, ...] 
     14# Values that contain spaces should be placed between quotes (\" \"). 
    1215 
    1316#--------------------------------------------------------------------------- 
     
    1518#--------------------------------------------------------------------------- 
    1619 
    17 # This tag specifies the encoding used for all characters in the config file  
    18 # that follow. The default is UTF-8 which is also the encoding used for all  
    19 # text before the first occurrence of this tag. Doxygen uses libiconv (or the  
    20 # iconv built into libc) for the transcoding. See  
    21 # http://www.gnu.org/software/libiconv for the list of possible encodings. 
     20# This tag specifies the encoding used for all characters in the config file 
     21# that follow. The default is UTF-8 which is also the encoding used for all text 
     22# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv 
     23# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv 
     24# for the list of possible encodings. 
     25# The default value is: UTF-8. 
    2226 
    2327DOXYFILE_ENCODING      = UTF-8 
    2428 
    25 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded  
    26 # by quotes) that should identify the project. 
    27  
    28 PROJECT_NAME           = XIOS 
    29  
    30 # The PROJECT_NUMBER tag can be used to enter a project or revision number.  
    31 # This could be handy for archiving the generated documentation or  
    32 # if some version control system is used. 
    33  
    34 PROJECT_NUMBER         = 1.0 
    35  
    36 # Using the PROJECT_BRIEF tag one can provide an optional one line description  
    37 # for a project that appears at the top of each page and should give viewer  
    38 # a quick idea about the purpose of the project. Keep the description short. 
    39  
    40 PROJECT_BRIEF          = "Xml I/O Server" 
    41  
    42 # With the PROJECT_LOGO tag one can specify an logo or icon that is  
    43 # included in the documentation. The maximum height of the logo should not  
    44 # exceed 55 pixels and the maximum width should not exceed 200 pixels.  
    45 # Doxygen will copy the logo to the output directory. 
    46  
    47 PROJECT_LOGO           =  
    48  
    49 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)  
    50 # base path where the generated documentation will be put.  
    51 # If a relative path is entered, it will be relative to the location  
    52 # where doxygen was started. If left blank the current directory will be used. 
    53  
    54 OUTPUT_DIRECTORY       = ./doc 
    55  
    56 # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create  
    57 # 4096 sub-directories (in 2 levels) under the output directory of each output  
    58 # format and will distribute the generated files over these directories.  
    59 # Enabling this option can be useful when feeding doxygen a huge amount of  
    60 # source files, where putting all generated files in the same directory would  
    61 # otherwise cause performance problems for the file system. 
     29# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by 
     30# double-quotes, unless you are using Doxywizard) that should identify the 
     31# project for which the documentation is generated. This name is used in the 
     32# title of most generated pages and in a few other places. 
     33# The default value is: My Project. 
     34 
     35PROJECT_NAME           = "My Project" 
     36 
     37# The PROJECT_NUMBER tag can be used to enter a project or revision number. This 
     38# could be handy for archiving the generated documentation or if some version 
     39# control system is used. 
     40 
     41PROJECT_NUMBER         = 
     42 
     43# Using the PROJECT_BRIEF tag one can provide an optional one line description 
     44# for a project that appears at the top of each page and should give viewer a 
     45# quick idea about the purpose of the project. Keep the description short. 
     46 
     47PROJECT_BRIEF          = 
     48 
     49# With the PROJECT_LOGO tag one can specify a logo or an icon that is included 
     50# in the documentation. The maximum height of the logo should not exceed 55 
     51# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy 
     52# the logo to the output directory. 
     53 
     54PROJECT_LOGO           = 
     55 
     56# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path 
     57# into which the generated documentation will be written. If a relative path is 
     58# entered, it will be relative to the location where doxygen was started. If 
     59# left blank the current directory will be used. 
     60 
     61OUTPUT_DIRECTORY       = 
     62 
     63# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- 
     64# directories (in 2 levels) under the output directory of each output format and 
     65# will distribute the generated files over these directories. Enabling this 
     66# option can be useful when feeding doxygen a huge amount of source files, where 
     67# putting all generated files in the same directory would otherwise causes 
     68# performance problems for the file system. 
     69# The default value is: NO. 
    6270 
    6371CREATE_SUBDIRS         = NO 
    6472 
    65 # The OUTPUT_LANGUAGE tag is used to specify the language in which all  
    66 # documentation generated by doxygen is written. Doxygen will use this  
    67 # information to generate all constant output in the proper language.  
    68 # The default language is English, other supported languages are:  
    69 # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,  
    70 # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,  
    71 # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English  
    72 # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,  
    73 # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,  
    74 # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. 
    75  
    76 OUTPUT_LANGUAGE        = French 
    77  
    78 # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will  
    79 # include brief member descriptions after the members that are listed in  
    80 # the file and class documentation (similar to JavaDoc).  
    81 # Set to NO to disable this. 
     73# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII 
     74# characters to appear in the names of generated files. If set to NO, non-ASCII 
     75# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode 
     76# U+3044. 
     77# The default value is: NO. 
     78 
     79ALLOW_UNICODE_NAMES    = NO 
     80 
     81# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
     82# documentation generated by doxygen is written. Doxygen will use this 
     83# information to generate all constant output in the proper language. 
     84# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, 
     85# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), 
     86# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, 
     87# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), 
     88# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, 
     89# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, 
     90# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, 
     91# Ukrainian and Vietnamese. 
     92# The default value is: English. 
     93 
     94OUTPUT_LANGUAGE        = English 
     95 
     96# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member 
     97# descriptions after the members that are listed in the file and class 
     98# documentation (similar to Javadoc). Set to NO to disable this. 
     99# The default value is: YES. 
    82100 
    83101BRIEF_MEMBER_DESC      = YES 
    84102 
    85 # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend  
    86 # the brief description of a member or function before the detailed description.  
    87 # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the  
     103# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief 
     104# description of a member or function before the detailed description 
     105# 
     106# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
    88107# brief descriptions will be completely suppressed. 
     108# The default value is: YES. 
    89109 
    90110REPEAT_BRIEF           = YES 
    91111 
    92 # This tag implements a quasi-intelligent brief description abbreviator  
    93 # that is used to form the text in various listings. Each string  
    94 # in this list, if found as the leading text of the brief description, will be  
    95 # stripped from the text and the result after processing the whole list, is  
    96 # used as the annotated text. Otherwise, the brief description is used as-is.  
    97 # If left blank, the following values are used ("$name" is automatically  
    98 # replaced with the name of the entity): "The $name class" "The $name widget"  
    99 # "The $name file" "is" "provides" "specifies" "contains"  
    100 # "represents" "a" "an" "the" 
    101  
    102 ABBREVIATE_BRIEF       = "The $name class" \ 
    103                          "The $name widget" \ 
    104                          "The $name file" \ 
    105                          is \ 
    106                          provides \ 
    107                          specifies \ 
    108                          contains \ 
    109                          represents \ 
    110                          a \ 
    111                          an \ 
    112                          the 
    113  
    114 # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then  
    115 # Doxygen will generate a detailed section even if there is only a brief  
     112# This tag implements a quasi-intelligent brief description abbreviator that is 
     113# used to form the text in various listings. Each string in this list, if found 
     114# as the leading text of the brief description, will be stripped from the text 
     115# and the result, after processing the whole list, is used as the annotated 
     116# text. Otherwise, the brief description is used as-is. If left blank, the 
     117# following values are used ($name is automatically replaced with the name of 
     118# the entity):The $name class, The $name widget, The $name file, is, provides, 
     119# specifies, contains, represents, a, an and the. 
     120 
     121ABBREVIATE_BRIEF       = 
     122 
     123# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
     124# doxygen will generate a detailed section even if there is only a brief 
    116125# description. 
     126# The default value is: NO. 
    117127 
    118128ALWAYS_DETAILED_SEC    = NO 
    119129 
    120 # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all  
    121 # inherited members of a class in the documentation of that class as if those  
    122 # members were ordinary class members. Constructors, destructors and assignment  
     130# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
     131# inherited members of a class in the documentation of that class as if those 
     132# members were ordinary class members. Constructors, destructors and assignment 
    123133# operators of the base classes will not be shown. 
     134# The default value is: NO. 
    124135 
    125136INLINE_INHERITED_MEMB  = NO 
    126137 
    127 # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full  
    128 # path before files name in the file list and in the header files. If set  
    129 # to NO the shortest path that makes the file name unique will be used. 
     138# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path 
     139# before files name in the file list and in the header files. If set to NO the 
     140# shortest path that makes the file name unique will be used 
     141# The default value is: YES. 
    130142 
    131143FULL_PATH_NAMES        = YES 
    132144 
    133 # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag  
    134 # can be used to strip a user-defined part of the path. Stripping is  
    135 # only done if one of the specified strings matches the left-hand part of  
    136 # the path. The tag can be used to show relative paths in the file list.  
    137 # If left blank the directory from which doxygen is run is used as the  
    138 # path to strip. 
    139  
    140 STRIP_FROM_PATH        =  
    141  
    142 # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of  
    143 # the path mentioned in the documentation of a class, which tells  
    144 # the reader which header file to include in order to use a class.  
    145 # If left blank only the name of the header file containing the class  
    146 # definition is used. Otherwise one should specify the include paths that  
    147 # are normally passed to the compiler using the -I flag. 
    148  
    149 STRIP_FROM_INC_PATH    =  
    150  
    151 # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter  
    152 # (but less readable) file names. This can be useful if your file system  
    153 # doesn't support long names like on DOS, Mac, or CD-ROM. 
     145# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. 
     146# Stripping is only done if one of the specified strings matches the left-hand 
     147# part of the path. The tag can be used to show relative paths in the file list. 
     148# If left blank the directory from which doxygen is run is used as the path to 
     149# strip. 
     150# 
     151# Note that you can specify absolute paths here, but also relative paths, which 
     152# will be relative from the directory where doxygen is started. 
     153# This tag requires that the tag FULL_PATH_NAMES is set to YES. 
     154 
     155STRIP_FROM_PATH        = 
     156 
     157# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the 
     158# path mentioned in the documentation of a class, which tells the reader which 
     159# header file to include in order to use a class. If left blank only the name of 
     160# the header file containing the class definition is used. Otherwise one should 
     161# specify the list of include paths that are normally passed to the compiler 
     162# using the -I flag. 
     163 
     164STRIP_FROM_INC_PATH    = 
     165 
     166# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but 
     167# less readable) file names. This can be useful is your file systems doesn't 
     168# support long names like on DOS, Mac, or CD-ROM. 
     169# The default value is: NO. 
    154170 
    155171SHORT_NAMES            = NO 
    156172 
    157 # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen  
    158 # will interpret the first line (until the first dot) of a JavaDoc-style  
    159 # comment as the brief description. If set to NO, the JavaDoc  
    160 # comments will behave just like regular Qt-style comments  
    161 # (thus requiring an explicit @brief command for a brief description.) 
     173# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the 
     174# first line (until the first dot) of a Javadoc-style comment as the brief 
     175# description. If set to NO, the Javadoc-style will behave just like regular Qt- 
     176# style comments (thus requiring an explicit @brief command for a brief 
     177# description.) 
     178# The default value is: NO. 
    162179 
    163180JAVADOC_AUTOBRIEF      = NO 
    164181 
    165 # If the QT_AUTOBRIEF tag is set to YES then Doxygen will  
    166 # interpret the first line (until the first dot) of a Qt-style  
    167 # comment as the brief description. If set to NO, the comments  
    168 # will behave just like regular Qt-style comments (thus requiring  
    169 # an explicit \brief command for a brief description.) 
    170  
    171 QT_AUTOBRIEF           = YES 
    172  
    173 # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen  
    174 # treat a multi-line C++ special comment block (i.e. a block of //! or ///  
    175 # comments) as a brief description. This used to be the default behaviour.  
    176 # The new default is to treat a multi-line C++ comment block as a detailed  
    177 # description. Set this tag to YES if you prefer the old behaviour instead. 
     182# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first 
     183# line (until the first dot) of a Qt-style comment as the brief description. If 
     184# set to NO, the Qt-style will behave just like regular Qt-style comments (thus 
     185# requiring an explicit \brief command for a brief description.) 
     186# The default value is: NO. 
     187 
     188QT_AUTOBRIEF           = NO 
     189 
     190# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a 
     191# multi-line C++ special comment block (i.e. a block of //! or /// comments) as 
     192# a brief description. This used to be the default behavior. The new default is 
     193# to treat a multi-line C++ comment block as a detailed description. Set this 
     194# tag to YES if you prefer the old behavior instead. 
     195# 
     196# Note that setting this tag to YES also means that rational rose comments are 
     197# not recognized any more. 
     198# The default value is: NO. 
    178199 
    179200MULTILINE_CPP_IS_BRIEF = NO 
    180201 
    181 # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented  
    182 # member inherits the documentation from any documented member that it  
    183 # re-implements. 
     202# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the 
     203# documentation from any documented member that it re-implements. 
     204# The default value is: YES. 
    184205 
    185206INHERIT_DOCS           = YES 
    186207 
    187 # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce  
    188 # a new page for each member. If set to NO, the documentation of a member will  
    189 # be part of the file/class/namespace that contains it. 
     208# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new 
     209# page for each member. If set to NO, the documentation of a member will be part 
     210# of the file/class/namespace that contains it. 
     211# The default value is: NO. 
    190212 
    191213SEPARATE_MEMBER_PAGES  = NO 
    192214 
    193 # The TAB_SIZE tag can be used to set the number of spaces in a tab.  
    194 # Doxygen uses this value to replace tabs by spaces in code fragments. 
    195  
    196 TAB_SIZE               = 8 
    197  
    198 # This tag can be used to specify a number of aliases that acts  
    199 # as commands in the documentation. An alias has the form "name=value".  
    200 # For example adding "sideeffect=\par Side Effects:\n" will allow you to  
    201 # put the command \sideeffect (or @sideeffect) in the documentation, which  
    202 # will result in a user-defined paragraph with heading "Side Effects:".  
    203 # You can put \n's in the value part of an alias to insert newlines. 
    204  
    205 ALIASES                =  
    206  
    207 # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C  
    208 # sources only. Doxygen will then generate output that is more tailored for C.  
    209 # For instance, some of the names that are used will be different. The list  
    210 # of all members will be omitted, etc. 
     215# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen 
     216# uses this value to replace tabs by spaces in code fragments. 
     217# Minimum value: 1, maximum value: 16, default value: 4. 
     218 
     219TAB_SIZE               = 4 
     220 
     221# This tag can be used to specify a number of aliases that act as commands in 
     222# the documentation. An alias has the form: 
     223# name=value 
     224# For example adding 
     225# "sideeffect=@par Side Effects:\n" 
     226# will allow you to put the command \sideeffect (or @sideeffect) in the 
     227# documentation, which will result in a user-defined paragraph with heading 
     228# "Side Effects:". You can put \n's in the value part of an alias to insert 
     229# newlines. 
     230 
     231ALIASES                = 
     232 
     233# This tag can be used to specify a number of word-keyword mappings (TCL only). 
     234# A mapping has the form "name=value". For example adding "class=itcl::class" 
     235# will allow you to use the command class in the itcl::class meaning. 
     236 
     237TCL_SUBST              = 
     238 
     239# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources 
     240# only. Doxygen will then generate output that is more tailored for C. For 
     241# instance, some of the names that are used will be different. The list of all 
     242# members will be omitted, etc. 
     243# The default value is: NO. 
    211244 
    212245OPTIMIZE_OUTPUT_FOR_C  = NO 
    213246 
    214 # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java  
    215 # sources only. Doxygen will then generate output that is more tailored for  
    216 # Java. For instance, namespaces will be presented as packages, qualified  
    217 # scopes will look different, etc. 
     247# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or 
     248# Python sources only. Doxygen will then generate output that is more tailored 
     249# for that language. For instance, namespaces will be presented as packages, 
     250# qualified scopes will look different, etc. 
     251# The default value is: NO. 
    218252 
    219253OPTIMIZE_OUTPUT_JAVA   = NO 
    220254 
    221 # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran  
    222 # sources only. Doxygen will then generate output that is more tailored for  
    223 # Fortran. 
     255# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran 
     256# sources. Doxygen will then generate output that is tailored for Fortran. 
     257# The default value is: NO. 
    224258 
    225259OPTIMIZE_FOR_FORTRAN   = NO 
    226260 
    227 # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL  
    228 # sources. Doxygen will then generate output that is tailored for  
    229 # VHDL. 
     261# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL 
     262# sources. Doxygen will then generate output that is tailored for VHDL. 
     263# The default value is: NO. 
    230264 
    231265OPTIMIZE_OUTPUT_VHDL   = NO 
    232266 
    233 # Doxygen selects the parser to use depending on the extension of the files it  
    234 # parses. With this tag you can assign which parser to use for a given extension.  
    235 # Doxygen has a built-in mapping, but you can override or extend it using this  
    236 # tag. The format is ext=language, where ext is a file extension, and language  
    237 # is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C,  
    238 # C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make  
    239 # doxygen treat .inc files as Fortran files (default is PHP), and .f files as C  
    240 # (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions  
    241 # you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. 
    242  
    243 EXTENSION_MAPPING      =  
    244  
    245 # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want  
    246 # to include (a tag file for) the STL sources as input, then you should  
    247 # set this tag to YES in order to let doxygen match functions declarations and  
    248 # definitions whose arguments contain STL classes (e.g. func(std::string); v.s.  
    249 # func(std::string) {}). This also makes the inheritance and collaboration  
     267# Doxygen selects the parser to use depending on the extension of the files it 
     268# parses. With this tag you can assign which parser to use for a given 
     269# extension. Doxygen has a built-in mapping, but you can override or extend it 
     270# using this tag. The format is ext=language, where ext is a file extension, and 
     271# language is one of the parsers supported by doxygen: IDL, Java, Javascript, 
     272# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: 
     273# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: 
     274# Fortran. In the later case the parser tries to guess whether the code is fixed 
     275# or free formatted code, this is the default for Fortran type files), VHDL. For 
     276# instance to make doxygen treat .inc files as Fortran files (default is PHP), 
     277# and .f files as C (default is Fortran), use: inc=Fortran f=C. 
     278# 
     279# Note: For files without extension you can use no_extension as a placeholder. 
     280# 
     281# Note that for custom extensions you also need to set FILE_PATTERNS otherwise 
     282# the files are not read by doxygen. 
     283 
     284EXTENSION_MAPPING      = 
     285 
     286# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments 
     287# according to the Markdown format, which allows for more readable 
     288# documentation. See http://daringfireball.net/projects/markdown/ for details. 
     289# The output of markdown processing is further processed by doxygen, so you can 
     290# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in 
     291# case of backward compatibilities issues. 
     292# The default value is: YES. 
     293 
     294MARKDOWN_SUPPORT       = YES 
     295 
     296# When enabled doxygen tries to link words that correspond to documented 
     297# classes, or namespaces to their corresponding documentation. Such a link can 
     298# be prevented in individual cases by putting a % sign in front of the word or 
     299# globally by setting AUTOLINK_SUPPORT to NO. 
     300# The default value is: YES. 
     301 
     302AUTOLINK_SUPPORT       = YES 
     303 
     304# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want 
     305# to include (a tag file for) the STL sources as input, then you should set this 
     306# tag to YES in order to let doxygen match functions declarations and 
     307# definitions whose arguments contain STL classes (e.g. func(std::string); 
     308# versus func(std::string) {}). This also make the inheritance and collaboration 
    250309# diagrams that involve STL classes more complete and accurate. 
    251  
    252 BUILTIN_STL_SUPPORT    = YES 
    253  
    254 # If you use Microsoft's C++/CLI language, you should set this option to YES to  
     310# The default value is: NO. 
     311 
     312BUILTIN_STL_SUPPORT    = NO 
     313 
     314# If you use Microsoft's C++/CLI language, you should set this option to YES to 
    255315# enable parsing support. 
     316# The default value is: NO. 
    256317 
    257318CPP_CLI_SUPPORT        = NO 
    258319 
    259 # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.  
    260 # Doxygen will parse them like normal C++ but will assume all classes use public  
    261 # instead of private inheritance when no explicit protection keyword is present. 
     320# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: 
     321# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen 
     322# will parse them like normal C++ but will assume all classes use public instead 
     323# of private inheritance when no explicit protection keyword is present. 
     324# The default value is: NO. 
    262325 
    263326SIP_SUPPORT            = NO 
    264327 
    265 # For Microsoft's IDL there are propget and propput attributes to indicate getter  
    266 # and setter methods for a property. Setting this option to YES (the default)  
    267 # will make doxygen replace the get and set methods by a property in the  
    268 # documentation. This will only work if the methods are indeed getting or  
    269 # setting a simple type. If this is not the case, or you want to show the  
    270 # methods anyway, you should set this option to NO. 
     328# For Microsoft's IDL there are propget and propput attributes to indicate 
     329# getter and setter methods for a property. Setting this option to YES will make 
     330# doxygen to replace the get and set methods by a property in the documentation. 
     331# This will only work if the methods are indeed getting or setting a simple 
     332# type. If this is not the case, or you want to show the methods anyway, you 
     333# should set this option to NO. 
     334# The default value is: YES. 
    271335 
    272336IDL_PROPERTY_SUPPORT   = YES 
    273337 
    274 # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC  
    275 # tag is set to YES, then doxygen will reuse the documentation of the first  
    276 # member in the group (if any) for the other members of the group. By default  
     338# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
     339# tag is set to YES then doxygen will reuse the documentation of the first 
     340# member in the group (if any) for the other members of the group. By default 
    277341# all members of a group must be documented explicitly. 
     342# The default value is: NO. 
    278343 
    279344DISTRIBUTE_GROUP_DOC   = NO 
    280345 
    281 # Set the SUBGROUPING tag to YES (the default) to allow class member groups of  
    282 # the same type (for instance a group of public functions) to be put as a  
    283 # subgroup of that type (e.g. under the Public Functions section). Set it to  
    284 # NO to prevent subgrouping. Alternatively, this can be done per class using  
    285 # the \nosubgrouping command. 
     346# Set the SUBGROUPING tag to YES to allow class member groups of the same type 
     347# (for instance a group of public functions) to be put as a subgroup of that 
     348# type (e.g. under the Public Functions section). Set it to NO to prevent 
     349# subgrouping. Alternatively, this can be done per class using the 
     350# \nosubgrouping command. 
     351# The default value is: YES. 
    286352 
    287353SUBGROUPING            = YES 
    288354 
    289 # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and  
    290 # unions are shown inside the group in which they are included (e.g. using  
    291 # @ingroup) instead of on a separate page (for HTML and Man pages) or  
    292 # section (for LaTeX and RTF). 
     355# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions 
     356# are shown inside the group in which they are included (e.g. using \ingroup) 
     357# instead of on a separate page (for HTML and Man pages) or section (for LaTeX 
     358# and RTF). 
     359# 
     360# Note that this feature does not work in combination with 
     361# SEPARATE_MEMBER_PAGES. 
     362# The default value is: NO. 
    293363 
    294364INLINE_GROUPED_CLASSES = NO 
    295365 
    296 # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum  
    297 # is documented as struct, union, or enum with the name of the typedef. So  
    298 # typedef struct TypeS {} TypeT, will appear in the documentation as a struct  
    299 # with name TypeT. When disabled the typedef will appear as a member of a file,  
    300 # namespace, or class. And the struct will be named TypeS. This can typically  
    301 # be useful for C code in case the coding convention dictates that all compound  
     366# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions 
     367# with only public data fields or simple typedef fields will be shown inline in 
     368# the documentation of the scope in which they are defined (i.e. file, 
     369# namespace, or group documentation), provided this scope is documented. If set 
     370# to NO, structs, classes, and unions are shown on a separate page (for HTML and 
     371# Man pages) or section (for LaTeX and RTF). 
     372# The default value is: NO. 
     373 
     374INLINE_SIMPLE_STRUCTS  = NO 
     375 
     376# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or 
     377# enum is documented as struct, union, or enum with the name of the typedef. So 
     378# typedef struct TypeS {} TypeT, will appear in the documentation as a struct 
     379# with name TypeT. When disabled the typedef will appear as a member of a file, 
     380# namespace, or class. And the struct will be named TypeS. This can typically be 
     381# useful for C code in case the coding convention dictates that all compound 
    302382# types are typedef'ed and only the typedef is referenced, never the tag name. 
     383# The default value is: NO. 
    303384 
    304385TYPEDEF_HIDES_STRUCT   = NO 
    305386 
    306 # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to  
    307 # determine which symbols to keep in memory and which to flush to disk.  
    308 # When the cache is full, less often used symbols will be written to disk.  
    309 # For small to medium size projects (<1000 input files) the default value is  
    310 # probably good enough. For larger projects a too small cache size can cause  
    311 # doxygen to be busy swapping symbols to and from disk most of the time  
    312 # causing a significant performance penalty.  
    313 # If the system has enough physical memory increasing the cache will improve the  
    314 # performance by keeping more symbols in memory. Note that the value works on  
    315 # a logarithmic scale so increasing the size by one will roughly double the  
    316 # memory usage. The cache size is given by this formula:  
    317 # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,  
    318 # corresponding to a cache size of 2^16 = 65536 symbols 
    319  
    320 SYMBOL_CACHE_SIZE      = 0 
     387# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This 
     388# cache is used to resolve symbols given their name and scope. Since this can be 
     389# an expensive process and often the same symbol appears multiple times in the 
     390# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small 
     391# doxygen will become slower. If the cache is too large, memory is wasted. The 
     392# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range 
     393# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 
     394# symbols. At the end of a run doxygen will report the cache usage and suggest 
     395# the optimal cache size from a speed point of view. 
     396# Minimum value: 0, maximum value: 9, default value: 0. 
     397 
     398LOOKUP_CACHE_SIZE      = 0 
    321399 
    322400#--------------------------------------------------------------------------- 
     
    324402#--------------------------------------------------------------------------- 
    325403 
    326 # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in  
    327 # documentation are documented, even if no documentation was available.  
    328 # Private class members and static file members will be hidden unless  
    329 # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES 
     404# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in 
     405# documentation are documented, even if no documentation was available. Private 
     406# class members and static file members will be hidden unless the 
     407# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. 
     408# Note: This will also disable the warnings about undocumented members that are 
     409# normally produced when WARNINGS is set to YES. 
     410# The default value is: NO. 
    330411 
    331412EXTRACT_ALL            = YES 
    332413 
    333 # If the EXTRACT_PRIVATE tag is set to YES all private members of a class  
    334 # will be included in the documentation. 
    335  
    336 EXTRACT_PRIVATE        = YES 
    337  
    338 # If the EXTRACT_STATIC tag is set to YES all static members of a file  
    339 # will be included in the documentation. 
     414# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will 
     415# be included in the documentation. 
     416# The default value is: NO. 
     417 
     418EXTRACT_PRIVATE        = NO 
     419 
     420# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal 
     421# scope will be included in the documentation. 
     422# The default value is: NO. 
     423 
     424EXTRACT_PACKAGE        = NO 
     425 
     426# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be 
     427# included in the documentation. 
     428# The default value is: NO. 
    340429 
    341430EXTRACT_STATIC         = YES 
    342431 
    343 # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)  
    344 # defined locally in source files will be included in the documentation.  
    345 # If set to NO only classes defined in header files are included. 
     432# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined 
     433# locally in source files will be included in the documentation. If set to NO, 
     434# only classes defined in header files are included. Does not have any effect 
     435# for Java sources. 
     436# The default value is: YES. 
    346437 
    347438EXTRACT_LOCAL_CLASSES  = YES 
    348439 
    349 # This flag is only useful for Objective-C code. When set to YES local  
    350 # methods, which are defined in the implementation section but not in  
    351 # the interface are included in the documentation.  
    352 # If set to NO (the default) only methods in the interface are included. 
    353  
    354 EXTRACT_LOCAL_METHODS  = YES 
    355  
    356 # If this flag is set to YES, the members of anonymous namespaces will be  
    357 # extracted and appear in the documentation as a namespace called  
    358 # 'anonymous_namespace{file}', where file will be replaced with the base  
    359 # name of the file that contains the anonymous namespace. By default  
    360 # anonymous namespaces are hidden. 
     440# This flag is only useful for Objective-C code. If set to YES, local methods, 
     441# which are defined in the implementation section but not in the interface are 
     442# included in the documentation. If set to NO, only methods in the interface are 
     443# included. 
     444# The default value is: NO. 
     445 
     446EXTRACT_LOCAL_METHODS  = NO 
     447 
     448# If this flag is set to YES, the members of anonymous namespaces will be 
     449# extracted and appear in the documentation as a namespace called 
     450# 'anonymous_namespace{file}', where file will be replaced with the base name of 
     451# the file that contains the anonymous namespace. By default anonymous namespace 
     452# are hidden. 
     453# The default value is: NO. 
    361454 
    362455EXTRACT_ANON_NSPACES   = NO 
    363456 
    364 # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all  
    365 # undocumented members of documented classes, files or namespaces.  
    366 # If set to NO (the default) these members will be included in the  
    367 # various overviews, but no documentation section is generated.  
    368 # This option has no effect if EXTRACT_ALL is enabled. 
     457# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all 
     458# undocumented members inside documented classes or files. If set to NO these 
     459# members will be included in the various overviews, but no documentation 
     460# section is generated. This option has no effect if EXTRACT_ALL is enabled. 
     461# The default value is: NO. 
    369462 
    370463HIDE_UNDOC_MEMBERS     = NO 
    371464 
    372 # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all  
    373 # undocumented classes that are normally visible in the class hierarchy.  
    374 # If set to NO (the default) these classes will be included in the various  
    375 # overviews. This option has no effect if EXTRACT_ALL is enabled. 
     465# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all 
     466# undocumented classes that are normally visible in the class hierarchy. If set 
     467# to NO, these classes will be included in the various overviews. This option 
     468# has no effect if EXTRACT_ALL is enabled. 
     469# The default value is: NO. 
    376470 
    377471HIDE_UNDOC_CLASSES     = NO 
    378472 
    379 # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all  
    380 # friend (class|struct|union) declarations.  
    381 # If set to NO (the default) these declarations will be included in the  
    382 # documentation. 
     473# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend 
     474# (class|struct|union) declarations. If set to NO, these declarations will be 
     475# included in the documentation. 
     476# The default value is: NO. 
    383477 
    384478HIDE_FRIEND_COMPOUNDS  = NO 
    385479 
    386 # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any  
    387 # documentation blocks found inside the body of a function.  
    388 # If set to NO (the default) these blocks will be appended to the  
    389 # function's detailed documentation block. 
     480# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any 
     481# documentation blocks found inside the body of a function. If set to NO, these 
     482# blocks will be appended to the function's detailed documentation block. 
     483# The default value is: NO. 
    390484 
    391485HIDE_IN_BODY_DOCS      = NO 
    392486 
    393 # The INTERNAL_DOCS tag determines if documentation  
    394 # that is typed after a \internal command is included. If the tag is set  
    395 # to NO (the default) then the documentation will be excluded.  
    396 # Set it to YES to include the internal documentation. 
     487# The INTERNAL_DOCS tag determines if documentation that is typed after a 
     488# \internal command is included. If the tag is set to NO then the documentation 
     489# will be excluded. Set it to YES to include the internal documentation. 
     490# The default value is: NO. 
    397491 
    398492INTERNAL_DOCS          = NO 
    399493 
    400 # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate  
    401 # file names in lower-case letters. If set to YES upper-case letters are also  
    402 # allowed. This is useful if you have classes or files whose names only differ  
    403 # in case and if your file system supports case sensitive file names. Windows  
     494# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file 
     495# names in lower-case letters. If set to YES, upper-case letters are also 
     496# allowed. This is useful if you have classes or files whose names only differ 
     497# in case and if your file system supports case sensitive file names. Windows 
    404498# and Mac users are advised to set this option to NO. 
    405  
    406 CASE_SENSE_NAMES       = NO 
    407  
    408 # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen  
    409 # will show members with their full class and namespace scopes in the  
    410 # documentation. If set to YES the scope will be hidden. 
     499# The default value is: system dependent. 
     500 
     501CASE_SENSE_NAMES       = YES 
     502 
     503# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with 
     504# their full class and namespace scopes in the documentation. If set to YES, the 
     505# scope will be hidden. 
     506# The default value is: NO. 
    411507 
    412508HIDE_SCOPE_NAMES       = NO 
    413509 
    414 # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen  
    415 # will put a list of the files that are included by a file in the documentation  
    416 # of that file. 
     510# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will 
     511# append additional text to a page's title, such as Class Reference. If set to 
     512# YES the compound reference will be hidden. 
     513# The default value is: NO. 
     514 
     515HIDE_COMPOUND_REFERENCE= NO 
     516 
     517# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of 
     518# the files that are included by a file in the documentation of that file. 
     519# The default value is: YES. 
    417520 
    418521SHOW_INCLUDE_FILES     = YES 
    419522 
    420 # If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen  
    421 # will list include files with double quotes in the documentation  
    422 # rather than with sharp brackets. 
     523# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each 
     524# grouped member an include statement to the documentation, telling the reader 
     525# which file to include in order to use the member. 
     526# The default value is: NO. 
     527 
     528SHOW_GROUPED_MEMB_INC  = NO 
     529 
     530# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include 
     531# files with double quotes in the documentation rather than with sharp brackets. 
     532# The default value is: NO. 
    423533 
    424534FORCE_LOCAL_INCLUDES   = NO 
    425535 
    426 # If the INLINE_INFO tag is set to YES (the default) then a tag [inline]  
    427 # is inserted in the documentation for inline members. 
     536# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the 
     537# documentation for inline members. 
     538# The default value is: YES. 
    428539 
    429540INLINE_INFO            = YES 
    430541 
    431 # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen  
    432 # will sort the (detailed) documentation of file and class members  
    433 # alphabetically by member name. If set to NO the members will appear in  
    434 # declaration order. 
     542# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the 
     543# (detailed) documentation of file and class members alphabetically by member 
     544# name. If set to NO, the members will appear in declaration order. 
     545# The default value is: YES. 
    435546 
    436547SORT_MEMBER_DOCS       = YES 
    437548 
    438 # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the  
    439 # brief documentation of file, namespace and class members alphabetically  
    440 # by member name. If set to NO (the default) the members will appear in  
    441 # declaration order. 
     549# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief 
     550# descriptions of file, namespace and class members alphabetically by member 
     551# name. If set to NO, the members will appear in declaration order. Note that 
     552# this will also influence the order of the classes in the class list. 
     553# The default value is: NO. 
    442554 
    443555SORT_BRIEF_DOCS        = NO 
    444556 
    445 # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen  
    446 # will sort the (brief and detailed) documentation of class members so that  
    447 # constructors and destructors are listed first. If set to NO (the default)  
    448 # the constructors will appear in the respective orders defined by  
    449 # SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.  
    450 # This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO  
    451 # and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. 
     557# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the 
     558# (brief and detailed) documentation of class members so that constructors and 
     559# destructors are listed first. If set to NO the constructors will appear in the 
     560# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. 
     561# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief 
     562# member documentation. 
     563# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting 
     564# detailed member documentation. 
     565# The default value is: NO. 
    452566 
    453567SORT_MEMBERS_CTORS_1ST = NO 
    454568 
    455 # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the  
    456 # hierarchy of group names into alphabetical order. If set to NO (the default)  
    457 # the group names will appear in their defined order. 
     569# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy 
     570# of group names into alphabetical order. If set to NO the group names will 
     571# appear in their defined order. 
     572# The default value is: NO. 
    458573 
    459574SORT_GROUP_NAMES       = NO 
    460575 
    461 # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be  
    462 # sorted by fully-qualified names, including namespaces. If set to  
    463 # NO (the default), the class list will be sorted only by class name,  
    464 # not including the namespace part.  
    465 # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.  
    466 # Note: This option applies only to the class list, not to the  
    467 # alphabetical list. 
     576# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by 
     577# fully-qualified names, including namespaces. If set to NO, the class list will 
     578# be sorted only by class name, not including the namespace part. 
     579# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. 
     580# Note: This option applies only to the class list, not to the alphabetical 
     581# list. 
     582# The default value is: NO. 
    468583 
    469584SORT_BY_SCOPE_NAME     = NO 
    470585 
    471 # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to  
    472 # do proper type resolution of all parameters of a function it will reject a  
    473 # match between the prototype and the implementation of a member function even  
    474 # if there is only one candidate or it is obvious which candidate to choose  
    475 # by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen  
    476 # will still accept a match between prototype and implementation in such cases. 
     586# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper 
     587# type resolution of all parameters of a function it will reject a match between 
     588# the prototype and the implementation of a member function even if there is 
     589# only one candidate or it is obvious which candidate to choose by doing a 
     590# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still 
     591# accept a match between prototype and implementation in such cases. 
     592# The default value is: NO. 
    477593 
    478594STRICT_PROTO_MATCHING  = NO 
    479595 
    480 # The GENERATE_TODOLIST tag can be used to enable (YES) or  
    481 # disable (NO) the todo list. This list is created by putting \todo  
    482 # commands in the documentation. 
     596# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo 
     597# list. This list is created by putting \todo commands in the documentation. 
     598# The default value is: YES. 
    483599 
    484600GENERATE_TODOLIST      = YES 
    485601 
    486 # The GENERATE_TESTLIST tag can be used to enable (YES) or  
    487 # disable (NO) the test list. This list is created by putting \test  
    488 # commands in the documentation. 
     602# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test 
     603# list. This list is created by putting \test commands in the documentation. 
     604# The default value is: YES. 
    489605 
    490606GENERATE_TESTLIST      = YES 
    491607 
    492 # The GENERATE_BUGLIST tag can be used to enable (YES) or  
    493 # disable (NO) the bug list. This list is created by putting \bug  
    494 # commands in the documentation. 
     608# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug 
     609# list. This list is created by putting \bug commands in the documentation. 
     610# The default value is: YES. 
    495611 
    496612GENERATE_BUGLIST       = YES 
    497613 
    498 # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or  
    499 # disable (NO) the deprecated list. This list is created by putting  
    500 # \deprecated commands in the documentation. 
     614# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) 
     615# the deprecated list. This list is created by putting \deprecated commands in 
     616# the documentation. 
     617# The default value is: YES. 
    501618 
    502619GENERATE_DEPRECATEDLIST= YES 
    503620 
    504 # The ENABLED_SECTIONS tag can be used to enable conditional  
    505 # documentation sections, marked by \if sectionname ... \endif. 
    506  
    507 ENABLED_SECTIONS       =  
    508  
    509 # The MAX_INITIALIZER_LINES tag determines the maximum number of lines  
    510 # the initial value of a variable or macro consists of for it to appear in  
    511 # the documentation. If the initializer consists of more lines than specified  
    512 # here it will be hidden. Use a value of 0 to hide initializers completely.  
    513 # The appearance of the initializer of individual variables and macros in the  
    514 # documentation can be controlled using \showinitializer or \hideinitializer  
    515 # command in the documentation regardless of this setting. 
     621# The ENABLED_SECTIONS tag can be used to enable conditional documentation 
     622# sections, marked by \if <section_label> ... \endif and \cond <section_label> 
     623# ... \endcond blocks. 
     624 
     625ENABLED_SECTIONS       = 
     626 
     627# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the 
     628# initial value of a variable or macro / define can have for it to appear in the 
     629# documentation. If the initializer consists of more lines than specified here 
     630# it will be hidden. Use a value of 0 to hide initializers completely. The 
     631# appearance of the value of individual variables and macros / defines can be 
     632# controlled using \showinitializer or \hideinitializer command in the 
     633# documentation regardless of this setting. 
     634# Minimum value: 0, maximum value: 10000, default value: 30. 
    516635 
    517636MAX_INITIALIZER_LINES  = 30 
    518637 
    519 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated  
    520 # at the bottom of the documentation of classes and structs. If set to YES the  
     638# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at 
     639# the bottom of the documentation of classes and structs. If set to YES, the 
    521640# list will mention the files that were used to generate the documentation. 
     641# The default value is: YES. 
    522642 
    523643SHOW_USED_FILES        = YES 
    524644 
    525 # If the sources in your project are distributed over multiple directories  
    526 # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy  
    527 # in the documentation. The default is NO. 
    528  
    529 SHOW_DIRECTORIES       = YES 
    530  
    531 # Set the SHOW_FILES tag to NO to disable the generation of the Files page.  
    532 # This will remove the Files entry from the Quick Index and from the  
    533 # Folder Tree View (if specified). The default is YES. 
     645# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This 
     646# will remove the Files entry from the Quick Index and from the Folder Tree View 
     647# (if specified). 
     648# The default value is: YES. 
    534649 
    535650SHOW_FILES             = YES 
    536651 
    537 # Set the SHOW_NAMESPACES tag to NO to disable the generation of the  
    538 # Namespaces page.  This will remove the Namespaces entry from the Quick Index  
    539 # and from the Folder Tree View (if specified). The default is YES. 
     652# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces 
     653# page. This will remove the Namespaces entry from the Quick Index and from the 
     654# Folder Tree View (if specified). 
     655# The default value is: YES. 
    540656 
    541657SHOW_NAMESPACES        = YES 
    542658 
    543 # The FILE_VERSION_FILTER tag can be used to specify a program or script that  
    544 # doxygen should invoke to get the current version for each file (typically from  
    545 # the version control system). Doxygen will invoke the program by executing (via  
    546 # popen()) the command <command> <input-file>, where <command> is the value of  
    547 # the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file  
    548 # provided by doxygen. Whatever the program writes to standard output  
    549 # is used as the file version. See the manual for examples. 
    550  
    551 FILE_VERSION_FILTER    =  
    552  
    553 # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed  
    554 # by doxygen. The layout file controls the global structure of the generated  
    555 # output files in an output format independent way. The create the layout file  
    556 # that represents doxygen's defaults, run doxygen with the -l option.  
    557 # You can optionally specify a file name after the option, if omitted  
    558 # DoxygenLayout.xml will be used as the name of the layout file. 
    559  
    560 LAYOUT_FILE            =  
    561  
    562 #--------------------------------------------------------------------------- 
    563 # configuration options related to warning and progress messages 
    564 #--------------------------------------------------------------------------- 
    565  
    566 # The QUIET tag can be used to turn on/off the messages that are generated  
    567 # by doxygen. Possible values are YES and NO. If left blank NO is used. 
     659# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
     660# doxygen should invoke to get the current version for each file (typically from 
     661# the version control system). Doxygen will invoke the program by executing (via 
     662# popen()) the command command input-file, where command is the value of the 
     663# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided 
     664# by doxygen. Whatever the program writes to standard output is used as the file 
     665# version. For an example see the documentation. 
     666 
     667FILE_VERSION_FILTER    = 
     668 
     669# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed 
     670# by doxygen. The layout file controls the global structure of the generated 
     671# output files in an output format independent way. To create the layout file 
     672# that represents doxygen's defaults, run doxygen with the -l option. You can 
     673# optionally specify a file name after the option, if omitted DoxygenLayout.xml 
     674# will be used as the name of the layout file. 
     675# 
     676# Note that if you run doxygen from a directory containing a file called 
     677# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE 
     678# tag is left empty. 
     679 
     680LAYOUT_FILE            = 
     681 
     682# The CITE_BIB_FILES tag can be used to specify one or more bib files containing 
     683# the reference definitions. This must be a list of .bib files. The .bib 
     684# extension is automatically appended if omitted. This requires the bibtex tool 
     685# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. 
     686# For LaTeX the style of the bibliography can be controlled using 
     687# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the 
     688# search path. See also \cite for info how to create references. 
     689 
     690CITE_BIB_FILES         = 
     691 
     692#--------------------------------------------------------------------------- 
     693# Configuration options related to warning and progress messages 
     694#--------------------------------------------------------------------------- 
     695 
     696# The QUIET tag can be used to turn on/off the messages that are generated to 
     697# standard output by doxygen. If QUIET is set to YES this implies that the 
     698# messages are off. 
     699# The default value is: NO. 
    568700 
    569701QUIET                  = NO 
    570702 
    571 # The WARNINGS tag can be used to turn on/off the warning messages that are  
    572 # generated by doxygen. Possible values are YES and NO. If left blank  
    573 # NO is used. 
     703# The WARNINGS tag can be used to turn on/off the warning messages that are 
     704# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES 
     705# this implies that the warnings are on. 
     706# 
     707# Tip: Turn warnings on while writing the documentation. 
     708# The default value is: YES. 
    574709 
    575710WARNINGS               = YES 
    576711 
    577 # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings  
    578 # for undocumented members. If EXTRACT_ALL is set to YES then this flag will  
    579 # automatically be disabled. 
     712# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate 
     713# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag 
     714# will automatically be disabled. 
     715# The default value is: YES. 
    580716 
    581717WARN_IF_UNDOCUMENTED   = YES 
    582718 
    583 # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for  
    584 # potential errors in the documentation, such as not documenting some  
    585 # parameters in a documented function, or documenting parameters that  
    586 # don't exist or using markup commands wrongly. 
     719# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for 
     720# potential errors in the documentation, such as not documenting some parameters 
     721# in a documented function, or documenting parameters that don't exist or using 
     722# markup commands wrongly. 
     723# The default value is: YES. 
    587724 
    588725WARN_IF_DOC_ERROR      = YES 
    589726 
    590 # The WARN_NO_PARAMDOC option can be enabled to get warnings for  
    591 # functions that are documented, but have no documentation for their parameters  
    592 # or return value. If set to NO (the default) doxygen will only warn about  
    593 # wrong or incomplete parameter documentation, but not about the absence of  
    594 # documentation. 
    595  
    596 WARN_NO_PARAMDOC       = YES 
    597  
    598 # The WARN_FORMAT tag determines the format of the warning messages that  
    599 # doxygen can produce. The string should contain the $file, $line, and $text  
    600 # tags, which will be replaced by the file and line number from which the  
    601 # warning originated and the warning text. Optionally the format may contain  
    602 # $version, which will be replaced by the version of the file (if it could  
    603 # be obtained via FILE_VERSION_FILTER) 
     727# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that 
     728# are documented, but have no documentation for their parameters or return 
     729# value. If set to NO, doxygen will only warn about wrong or incomplete 
     730# parameter documentation, but not about the absence of documentation. 
     731# The default value is: NO. 
     732 
     733WARN_NO_PARAMDOC       = NO 
     734 
     735# The WARN_FORMAT tag determines the format of the warning messages that doxygen 
     736# can produce. The string should contain the $file, $line, and $text tags, which 
     737# will be replaced by the file and line number from which the warning originated 
     738# and the warning text. Optionally the format may contain $version, which will 
     739# be replaced by the version of the file (if it could be obtained via 
     740# FILE_VERSION_FILTER) 
     741# The default value is: $file:$line: $text. 
    604742 
    605743WARN_FORMAT            = "$file:$line: $text" 
    606744 
    607 # The WARN_LOGFILE tag can be used to specify a file to which warning  
    608 # and error messages should be written. If left blank the output is written  
    609 # to stderr. 
    610  
    611 WARN_LOGFILE           =  
    612  
    613 #--------------------------------------------------------------------------- 
    614 # configuration options related to the input files 
    615 #--------------------------------------------------------------------------- 
    616  
    617 # The INPUT tag can be used to specify the files and/or directories that contain  
    618 # documented source files. You may enter file names like "myfile.cpp" or  
    619 # directories like "/usr/src/myproject". Separate the files or directories  
    620 # with spaces. 
    621  
    622 INPUT                  = src 
    623  
    624 # This tag can be used to specify the character encoding of the source files  
    625 # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is  
    626 # also the default input encoding. Doxygen uses libiconv (or the iconv built  
    627 # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for  
    628 # the list of possible encodings. 
     745# The WARN_LOGFILE tag can be used to specify a file to which warning and error 
     746# messages should be written. If left blank the output is written to standard 
     747# error (stderr). 
     748 
     749WARN_LOGFILE           = 
     750 
     751#--------------------------------------------------------------------------- 
     752# Configuration options related to the input files 
     753#--------------------------------------------------------------------------- 
     754 
     755# The INPUT tag is used to specify the files and/or directories that contain 
     756# documented source files. You may enter file names like myfile.cpp or 
     757# directories like /usr/src/myproject. Separate the files or directories with 
     758# spaces. 
     759# Note: If this tag is empty the current directory is searched. 
     760 
     761INPUT                  = /local/home/oabramkina/xios_curie/work/xios_my_branch/src 
     762 
     763# This tag can be used to specify the character encoding of the source files 
     764# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses 
     765# libiconv (or the iconv built into libc) for the transcoding. See the libiconv 
     766# documentation (see: http://www.gnu.org/software/libiconv) for the list of 
     767# possible encodings. 
     768# The default value is: UTF-8. 
    629769 
    630770INPUT_ENCODING         = UTF-8 
    631771 
    632 # If the value of the INPUT tag contains directories, you can use the  
    633 # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp  
    634 # and *.h) to filter out the source-files in the directories. If left  
    635 # blank the following patterns are tested:  
    636 # *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh  
    637 # *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py  
    638 # *.f90 *.f *.for *.vhd *.vhdl 
    639  
    640 FILE_PATTERNS          = *.cpp \ 
    641                          *.hpp \ 
    642                          *.conf 
    643  
    644 # The RECURSIVE tag can be used to turn specify whether or not subdirectories  
    645 # should be searched for input files as well. Possible values are YES and NO.  
    646 # If left blank NO is used. 
     772# If the value of the INPUT tag contains directories, you can use the 
     773# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and 
     774# *.h) to filter out the source-files in the directories. If left blank the 
     775# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, 
     776# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, 
     777# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, 
     778# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, 
     779# *.qsf, *.as and *.js. 
     780 
     781FILE_PATTERNS          = 
     782 
     783# The RECURSIVE tag can be used to specify whether or not subdirectories should 
     784# be searched for input files as well. 
     785# The default value is: NO. 
    647786 
    648787RECURSIVE              = YES 
    649788 
    650 # The EXCLUDE tag can be used to specify files and/or directories that should  
    651 # excluded from the INPUT source files. This way you can easily exclude a  
     789# The EXCLUDE tag can be used to specify files and/or directories that should be 
     790# excluded from the INPUT source files. This way you can easily exclude a 
    652791# subdirectory from a directory tree whose root is specified with the INPUT tag. 
    653  
    654 EXCLUDE                =  
    655  
    656 # The EXCLUDE_SYMLINKS tag can be used select whether or not files or  
    657 # directories that are symbolic links (a Unix file system feature) are excluded  
     792# 
     793# Note that relative paths are relative to the directory from which doxygen is 
     794# run. 
     795 
     796EXCLUDE                = 
     797 
     798# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or 
     799# directories that are symbolic links (a Unix file system feature) are excluded 
    658800# from the input. 
     801# The default value is: NO. 
    659802 
    660803EXCLUDE_SYMLINKS       = NO 
    661804 
    662 # If the value of the INPUT tag contains directories, you can use the  
    663 # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude  
    664 # certain files from those directories. Note that the wildcards are matched  
    665 # against the file with absolute path, so to exclude all test directories  
    666 # for example use the pattern */test/* 
    667  
    668 EXCLUDE_PATTERNS       =  
    669  
    670 # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names  
    671 # (namespaces, classes, functions, etc.) that should be excluded from the  
    672 # output. The symbol name can be a fully qualified name, a word, or if the  
    673 # wildcard * is used, a substring. Examples: ANamespace, AClass,  
     805# If the value of the INPUT tag contains directories, you can use the 
     806# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
     807# certain files from those directories. 
     808# 
     809# Note that the wildcards are matched against the file with absolute path, so to 
     810# exclude all test directories for example use the pattern */test/* 
     811 
     812EXCLUDE_PATTERNS       = 
     813 
     814# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
     815# (namespaces, classes, functions, etc.) that should be excluded from the 
     816# output. The symbol name can be a fully qualified name, a word, or if the 
     817# wildcard * is used, a substring. Examples: ANamespace, AClass, 
    674818# AClass::ANamespace, ANamespace::*Test 
    675  
    676 EXCLUDE_SYMBOLS        =  
    677  
    678 # The EXAMPLE_PATH tag can be used to specify one or more files or  
    679 # directories that contain example code fragments that are included (see  
    680 # the \include command). 
    681  
    682 EXAMPLE_PATH           =  
    683  
    684 # If the value of the EXAMPLE_PATH tag contains directories, you can use the  
    685 # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp  
    686 # and *.h) to filter out the source-files in the directories. If left  
    687 # blank all files are included. 
    688  
    689 EXAMPLE_PATTERNS       = * 
    690  
    691 # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be  
    692 # searched for input files to be used with the \include or \dontinclude  
    693 # commands irrespective of the value of the RECURSIVE tag.  
    694 # Possible values are YES and NO. If left blank NO is used. 
     819# 
     820# Note that the wildcards are matched against the file with absolute path, so to 
     821# exclude all test directories use the pattern */test/* 
     822 
     823EXCLUDE_SYMBOLS        = 
     824 
     825# The EXAMPLE_PATH tag can be used to specify one or more files or directories 
     826# that contain example code fragments that are included (see the \include 
     827# command). 
     828 
     829EXAMPLE_PATH           = 
     830 
     831# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
     832# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and 
     833# *.h) to filter out the source-files in the directories. If left blank all 
     834# files are included. 
     835 
     836EXAMPLE_PATTERNS       = 
     837 
     838# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
     839# searched for input files to be used with the \include or \dontinclude commands 
     840# irrespective of the value of the RECURSIVE tag. 
     841# The default value is: NO. 
    695842 
    696843EXAMPLE_RECURSIVE      = NO 
    697844 
    698 # The IMAGE_PATH tag can be used to specify one or more files or  
    699 # directories that contain image that are included in the documentation (see  
    700 # the \image command). 
    701  
    702 IMAGE_PATH             =  
    703  
    704 # The INPUT_FILTER tag can be used to specify a program that doxygen should  
    705 # invoke to filter for each input file. Doxygen will invoke the filter program  
    706 # by executing (via popen()) the command <filter> <input-file>, where <filter>  
    707 # is the value of the INPUT_FILTER tag, and <input-file> is the name of an  
    708 # input file. Doxygen will then use the output that the filter program writes  
    709 # to standard output.  If FILTER_PATTERNS is specified, this tag will be  
    710 # ignored. 
    711  
    712 INPUT_FILTER           =  
    713  
    714 # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern  
    715 # basis.  Doxygen will compare the file name with each pattern and apply the  
    716 # filter if there is a match.  The filters are a list of the form:  
    717 # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further  
    718 # info on how filters are used. If FILTER_PATTERNS is empty or if  
    719 # non of the patterns match the file name, INPUT_FILTER is applied. 
    720  
    721 FILTER_PATTERNS        =  
    722  
    723 # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using  
    724 # INPUT_FILTER) will be used to filter the input files when producing source  
    725 # files to browse (i.e. when SOURCE_BROWSER is set to YES). 
     845# The IMAGE_PATH tag can be used to specify one or more files or directories 
     846# that contain images that are to be included in the documentation (see the 
     847# \image command). 
     848 
     849IMAGE_PATH             = 
     850 
     851# The INPUT_FILTER tag can be used to specify a program that doxygen should 
     852# invoke to filter for each input file. Doxygen will invoke the filter program 
     853# by executing (via popen()) the command: 
     854# 
     855# <filter> <input-file> 
     856# 
     857# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the 
     858# name of an input file. Doxygen will then use the output that the filter 
     859# program writes to standard output. If FILTER_PATTERNS is specified, this tag 
     860# will be ignored. 
     861# 
     862# Note that the filter must not add or remove lines; it is applied before the 
     863# code is scanned, but not when the output code is generated. If lines are added 
     864# or removed, the anchors will not be placed correctly. 
     865 
     866INPUT_FILTER           = 
     867 
     868# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
     869# basis. Doxygen will compare the file name with each pattern and apply the 
     870# filter if there is a match. The filters are a list of the form: pattern=filter 
     871# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how 
     872# filters are used. If the FILTER_PATTERNS tag is empty or if none of the 
     873# patterns match the file name, INPUT_FILTER is applied. 
     874 
     875FILTER_PATTERNS        = 
     876 
     877# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
     878# INPUT_FILTER) will also be used to filter the input files that are used for 
     879# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). 
     880# The default value is: NO. 
    726881 
    727882FILTER_SOURCE_FILES    = NO 
    728883 
    729 # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file  
    730 # pattern. A pattern will override the setting for FILTER_PATTERN (if any)  
    731 # and it is also possible to disable source filtering for a specific pattern  
    732 # using *.ext= (so without naming a filter). This option only has effect when  
    733 # FILTER_SOURCE_FILES is enabled. 
    734  
    735 FILTER_SOURCE_PATTERNS =  
    736  
    737 #--------------------------------------------------------------------------- 
    738 # configuration options related to source browsing 
    739 #--------------------------------------------------------------------------- 
    740  
    741 # If the SOURCE_BROWSER tag is set to YES then a list of source files will  
    742 # be generated. Documented entities will be cross-referenced with these sources.  
    743 # Note: To get rid of all source code in the generated output, make sure also  
    744 # VERBATIM_HEADERS is set to NO. 
    745  
    746 SOURCE_BROWSER         = YES 
    747  
    748 # Setting the INLINE_SOURCES tag to YES will include the body  
    749 # of functions and classes directly in the documentation. 
    750  
    751 INLINE_SOURCES         = NO 
    752  
    753 # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct  
    754 # doxygen to hide any special comment blocks from generated source code  
    755 # fragments. Normal C and C++ comments will always remain visible. 
     884# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file 
     885# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and 
     886# it is also possible to disable source filtering for a specific pattern using 
     887# *.ext= (so without naming a filter). 
     888# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. 
     889 
     890FILTER_SOURCE_PATTERNS = 
     891 
     892# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that 
     893# is part of the input, its contents will be placed on the main page 
     894# (index.html). This can be useful if you have a project on for instance GitHub 
     895# and want to reuse the introduction page also for the doxygen output. 
     896 
     897USE_MDFILE_AS_MAINPAGE = 
     898 
     899#--------------------------------------------------------------------------- 
     900# Configuration options related to source browsing 
     901#--------------------------------------------------------------------------- 
     902 
     903# If the SOURCE_BROWSER tag is set to YES then a list of source files will be 
     904# generated. Documented entities will be cross-referenced with these sources. 
     905# 
     906# Note: To get rid of all source code in the generated output, make sure that 
     907# also VERBATIM_HEADERS is set to NO. 
     908# The default value is: NO. 
     909 
     910SOURCE_BROWSER         = NO 
     911 
     912# Setting the INLINE_SOURCES tag to YES will include the body of functions, 
     913# classes and enums directly into the documentation. 
     914# The default value is: NO. 
     915 
     916INLINE_SOURCES         = YES 
     917 
     918# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any 
     919# special comment blocks from generated source code fragments. Normal C, C++ and 
     920# Fortran comments will always remain visible. 
     921# The default value is: YES. 
    756922 
    757923STRIP_CODE_COMMENTS    = YES 
    758924 
    759 # If the REFERENCED_BY_RELATION tag is set to YES  
    760 # then for each documented function all documented  
    761 # functions referencing it will be listed. 
    762  
    763 REFERENCED_BY_RELATION = YES 
    764  
    765 # If the REFERENCES_RELATION tag is set to YES  
    766 # then for each documented function all documented entities  
    767 # called/used by that function will be listed. 
    768  
    769 REFERENCES_RELATION    = YES 
    770  
    771 # If the REFERENCES_LINK_SOURCE tag is set to YES (the default)  
    772 # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from  
    773 # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will  
    774 # link to the source code.  Otherwise they will link to the documentation. 
     925# If the REFERENCED_BY_RELATION tag is set to YES then for each documented 
     926# function all documented functions referencing it will be listed. 
     927# The default value is: NO. 
     928 
     929REFERENCED_BY_RELATION = NO 
     930 
     931# If the REFERENCES_RELATION tag is set to YES then for each documented function 
     932# all documented entities called/used by that function will be listed. 
     933# The default value is: NO. 
     934 
     935REFERENCES_RELATION    = NO 
     936 
     937# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set 
     938# to YES then the hyperlinks from functions in REFERENCES_RELATION and 
     939# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will 
     940# link to the documentation. 
     941# The default value is: YES. 
    775942 
    776943REFERENCES_LINK_SOURCE = YES 
    777944 
    778 # If the USE_HTAGS tag is set to YES then the references to source code  
    779 # will point to the HTML generated by the htags(1) tool instead of doxygen  
    780 # built-in source browser. The htags tool is part of GNU's global source  
    781 # tagging system (see http://www.gnu.org/software/global/global.html). You  
    782 # will need version 4.8.6 or higher. 
     945# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the 
     946# source code will show a tooltip with additional information such as prototype, 
     947# brief description and links to the definition and documentation. Since this 
     948# will make the HTML file larger and loading of large files a bit slower, you 
     949# can opt to disable this feature. 
     950# The default value is: YES. 
     951# This tag requires that the tag SOURCE_BROWSER is set to YES. 
     952 
     953SOURCE_TOOLTIPS        = YES 
     954 
     955# If the USE_HTAGS tag is set to YES then the references to source code will 
     956# point to the HTML generated by the htags(1) tool instead of doxygen built-in 
     957# source browser. The htags tool is part of GNU's global source tagging system 
     958# (see http://www.gnu.org/software/global/global.html). You will need version 
     959# 4.8.6 or higher. 
     960# 
     961# To use it do the following: 
     962# - Install the latest version of global 
     963# - Enable SOURCE_BROWSER and USE_HTAGS in the config file 
     964# - Make sure the INPUT points to the root of the source tree 
     965# - Run doxygen as normal 
     966# 
     967# Doxygen will invoke htags (and that will in turn invoke gtags), so these 
     968# tools must be available from the command line (i.e. in the search path). 
     969# 
     970# The result: instead of the source browser generated by doxygen, the links to 
     971# source code will now point to the output of htags. 
     972# The default value is: NO. 
     973# This tag requires that the tag SOURCE_BROWSER is set to YES. 
    783974 
    784975USE_HTAGS              = NO 
    785976 
    786 # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen  
    787 # will generate a verbatim copy of the header file for each class for  
    788 # which an include is specified. Set to NO to disable this. 
     977# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a 
     978# verbatim copy of the header file for each class for which an include is 
     979# specified. Set to NO to disable this. 
     980# See also: Section \class. 
     981# The default value is: YES. 
    789982 
    790983VERBATIM_HEADERS       = YES 
    791984 
    792 #--------------------------------------------------------------------------- 
    793 # configuration options related to the alphabetical class index 
    794 #--------------------------------------------------------------------------- 
    795  
    796 # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index  
    797 # of all compounds will be generated. Enable this if the project  
    798 # contains a lot of classes, structs, unions or interfaces. 
     985# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the 
     986# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the 
     987# cost of reduced performance. This can be particularly helpful with template 
     988# rich C++ code for which doxygen's built-in parser lacks the necessary type 
     989# information. 
     990# Note: The availability of this option depends on whether or not doxygen was 
     991# compiled with the --with-libclang option. 
     992# The default value is: NO. 
     993 
     994CLANG_ASSISTED_PARSING = NO 
     995 
     996# If clang assisted parsing is enabled you can provide the compiler with command 
     997# line options that you would normally use when invoking the compiler. Note that 
     998# the include paths will already be set by doxygen for the files and directories 
     999# specified with INPUT and INCLUDE_PATH. 
     1000# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. 
     1001 
     1002CLANG_OPTIONS          = 
     1003 
     1004#--------------------------------------------------------------------------- 
     1005# Configuration options related to the alphabetical class index 
     1006#--------------------------------------------------------------------------- 
     1007 
     1008# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all 
     1009# compounds will be generated. Enable this if the project contains a lot of 
     1010# classes, structs, unions or interfaces. 
     1011# The default value is: YES. 
    7991012 
    8001013ALPHABETICAL_INDEX     = YES 
    8011014 
    802 # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then  
    803 # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns  
    804 # in which this list will be split (can be a number in the range [1..20]) 
     1015# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in 
     1016# which the alphabetical index list will be split. 
     1017# Minimum value: 1, maximum value: 20, default value: 5. 
     1018# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. 
    8051019 
    8061020COLS_IN_ALPHA_INDEX    = 5 
    8071021 
    808 # In case all classes in a project start with a common prefix, all  
    809 # classes will be put under the same header in the alphabetical index.  
    810 # The IGNORE_PREFIX tag can be used to specify one or more prefixes that  
    811 # should be ignored while generating the index headers. 
    812  
    813 IGNORE_PREFIX          =  
    814  
    815 #--------------------------------------------------------------------------- 
    816 # configuration options related to the HTML output 
    817 #--------------------------------------------------------------------------- 
    818  
    819 # If the GENERATE_HTML tag is set to YES (the default) Doxygen will  
    820 # generate HTML output. 
     1022# In case all classes in a project start with a common prefix, all classes will 
     1023# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag 
     1024# can be used to specify a prefix (or a list of prefixes) that should be ignored 
     1025# while generating the index headers. 
     1026# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. 
     1027 
     1028IGNORE_PREFIX          = 
     1029 
     1030#--------------------------------------------------------------------------- 
     1031# Configuration options related to the HTML output 
     1032#--------------------------------------------------------------------------- 
     1033 
     1034# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output 
     1035# The default value is: YES. 
    8211036 
    8221037GENERATE_HTML          = YES 
    8231038 
    824 # The HTML_OUTPUT tag is used to specify where the HTML docs will be put.  
    825 # If a relative path is entered the value of OUTPUT_DIRECTORY will be  
    826 # put in front of it. If left blank `html' will be used as the default path. 
     1039# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a 
     1040# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of 
     1041# it. 
     1042# The default directory is: html. 
     1043# This tag requires that the tag GENERATE_HTML is set to YES. 
    8271044 
    8281045HTML_OUTPUT            = html 
    8291046 
    830 # The HTML_FILE_EXTENSION tag can be used to specify the file extension for  
    831 # each generated HTML page (for example: .htm,.php,.asp). If it is left blank  
    832 # doxygen will generate files with .html extension. 
     1047# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each 
     1048# generated HTML page (for example: .htm, .php, .asp). 
     1049# The default value is: .html. 
     1050# This tag requires that the tag GENERATE_HTML is set to YES. 
    8331051 
    8341052HTML_FILE_EXTENSION    = .html 
    8351053 
    836 # The HTML_HEADER tag can be used to specify a personal HTML header for  
    837 # each generated HTML page. If it is left blank doxygen will generate a  
    838 # standard header. Note that when using a custom header you are responsible  
    839 # for the proper inclusion of any scripts and style sheets that doxygen  
    840 # needs, which is dependent on the configuration options used.  
    841 # It is adviced to generate a default header using "doxygen -w html  
    842 # header.html footer.html stylesheet.css YourConfigFile" and then modify  
    843 # that header. Note that the header is subject to change so you typically  
    844 # have to redo this when upgrading to a newer version of doxygen or when 
    845 # changing the value of configuration settings such as GENERATE_TREEVIEW! 
    846  
    847 HTML_HEADER            =  
    848  
    849 # The HTML_FOOTER tag can be used to specify a personal HTML footer for  
    850 # each generated HTML page. If it is left blank doxygen will generate a  
    851 # standard footer. 
    852  
    853 HTML_FOOTER            =  
    854  
    855 # If the HTML_TIMESTAMP tag is set to YES then the generated HTML 
    856 # documentation will contain the timesstamp. 
    857  
    858 HTML_TIMESTAMP         = YES 
    859  
    860 # The HTML_STYLESHEET tag can be used to specify a user-defined cascading  
    861 # style sheet that is used by each HTML page. It can be used to  
    862 # fine-tune the look of the HTML output. If the tag is left blank doxygen  
    863 # will generate a default style sheet. Note that doxygen will try to copy  
    864 # the style sheet file to the HTML output directory, so don't put your own  
    865 # stylesheet in the HTML output directory as well, or it will be erased! 
    866  
    867 HTML_STYLESHEET        =  
    868  
    869 # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or  
    870 # other source files which should be copied to the HTML output directory. Note  
    871 # that these files will be copied to the base HTML output directory. Use the  
    872 # $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these  
    873 # files. In the HTML_STYLESHEET file, use the file name only. Also note that  
    874 # the files will be copied as-is; there are no commands or markers available. 
    875  
    876 HTML_EXTRA_FILES       =  
    877  
    878 # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.  
    879 # Doxygen will adjust the colors in the stylesheet and background images  
    880 # according to this color. Hue is specified as an angle on a colorwheel,  
    881 # see http://en.wikipedia.org/wiki/Hue for more information.  
    882 # For instance the value 0 represents red, 60 is yellow, 120 is green,  
    883 # 180 is cyan, 240 is blue, 300 purple, and 360 is red again.  
    884 # The allowed range is 0 to 359. 
    885  
    886 HTML_COLORSTYLE_HUE    = 224 
    887  
    888 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of  
    889 # the colors in the HTML output. For a value of 0 the output will use  
    890 # grayscales only. A value of 255 will produce the most vivid colors. 
    891  
    892 HTML_COLORSTYLE_SAT    = 63 
    893  
    894 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to  
    895 # the luminance component of the colors in the HTML output. Values below  
    896 # 100 gradually make the output lighter, whereas values above 100 make  
    897 # the output darker. The value divided by 100 is the actual gamma applied,  
    898 # so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,  
    899 # and 100 does not change the gamma. 
    900  
    901 HTML_COLORSTYLE_GAMMA  = 152 
    902  
    903 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML  
    904 # page will contain the date and time when the page was generated. Setting  
    905 # this to NO can help when comparing the output of multiple runs. 
    906  
    907 HTML_TIMESTAMP         = YES 
    908  
    909 # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,  
    910 # files or namespaces will be aligned in HTML using tables. If set to  
    911 # NO a bullet list will be used. 
    912  
    913 HTML_ALIGN_MEMBERS     = YES 
    914  
    915 # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML  
    916 # documentation will contain sections that can be hidden and shown after the  
    917 # page has loaded. For this to work a browser that supports  
    918 # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox  
    919 # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). 
    920  
    921 HTML_DYNAMIC_SECTIONS  = YES 
    922  
    923 # If the GENERATE_DOCSET tag is set to YES, additional index files  
    924 # will be generated that can be used as input for Apple's Xcode 3  
    925 # integrated development environment, introduced with OSX 10.5 (Leopard).  
    926 # To create a documentation set, doxygen will generate a Makefile in the  
    927 # HTML output directory. Running make will produce the docset in that  
    928 # directory and running "make install" will install the docset in  
    929 # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find  
    930 # it at startup.  
    931 # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html  
     1054# The HTML_HEADER tag can be used to specify a user-defined HTML header file for 
     1055# each generated HTML page. If the tag is left blank doxygen will generate a 
     1056# standard header. 
     1057# 
     1058# To get valid HTML the header file that includes any scripts and style sheets 
     1059# that doxygen needs, which is dependent on the configuration options used (e.g. 
     1060# the setting GENERATE_TREEVIEW). It is highly recommended to start with a 
     1061# default header using 
     1062# doxygen -w html new_header.html new_footer.html new_stylesheet.css 
     1063# YourConfigFile 
     1064# and then modify the file new_header.html. See also section "Doxygen usage" 
     1065# for information on how to generate the default header that doxygen normally 
     1066# uses. 
     1067# Note: The header is subject to change so you typically have to regenerate the 
     1068# default header when upgrading to a newer version of doxygen. For a description 
     1069# of the possible markers and block names see the documentation. 
     1070# This tag requires that the tag GENERATE_HTML is set to YES. 
     1071 
     1072HTML_HEADER            = 
     1073 
     1074# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each 
     1075# generated HTML page. If the tag is left blank doxygen will generate a standard 
     1076# footer. See HTML_HEADER for more information on how to generate a default 
     1077# footer and what special commands can be used inside the footer. See also 
     1078# section "Doxygen usage" for information on how to generate the default footer 
     1079# that doxygen normally uses. 
     1080# This tag requires that the tag GENERATE_HTML is set to YES. 
     1081 
     1082HTML_FOOTER            = 
     1083 
     1084# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style 
     1085# sheet that is used by each HTML page. It can be used to fine-tune the look of 
     1086# the HTML output. If left blank doxygen will generate a default style sheet. 
     1087# See also section "Doxygen usage" for information on how to generate the style 
     1088# sheet that doxygen normally uses. 
     1089# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as 
     1090# it is more robust and this tag (HTML_STYLESHEET) will in the future become 
     1091# obsolete. 
     1092# This tag requires that the tag GENERATE_HTML is set to YES. 
     1093 
     1094HTML_STYLESHEET        = 
     1095 
     1096# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined 
     1097# cascading style sheets that are included after the standard style sheets 
     1098# created by doxygen. Using this option one can overrule certain style aspects. 
     1099# This is preferred over using HTML_STYLESHEET since it does not replace the 
     1100# standard style sheet and is therefore more robust against future updates. 
     1101# Doxygen will copy the style sheet files to the output directory. 
     1102# Note: The order of the extra style sheet files is of importance (e.g. the last 
     1103# style sheet in the list overrules the setting of the previous ones in the 
     1104# list). For an example see the documentation. 
     1105# This tag requires that the tag GENERATE_HTML is set to YES. 
     1106 
     1107HTML_EXTRA_STYLESHEET  = 
     1108 
     1109# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or 
     1110# other source files which should be copied to the HTML output directory. Note 
     1111# that these files will be copied to the base HTML output directory. Use the 
     1112# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these 
     1113# files. In the HTML_STYLESHEET file, use the file name only. Also note that the 
     1114# files will be copied as-is; there are no commands or markers available. 
     1115# This tag requires that the tag GENERATE_HTML is set to YES. 
     1116 
     1117HTML_EXTRA_FILES       = 
     1118 
     1119# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen 
     1120# will adjust the colors in the style sheet and background images according to 
     1121# this color. Hue is specified as an angle on a colorwheel, see 
     1122# http://en.wikipedia.org/wiki/Hue for more information. For instance the value 
     1123# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 
     1124# purple, and 360 is red again. 
     1125# Minimum value: 0, maximum value: 359, default value: 220. 
     1126# This tag requires that the tag GENERATE_HTML is set to YES. 
     1127 
     1128HTML_COLORSTYLE_HUE    = 220 
     1129 
     1130# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors 
     1131# in the HTML output. For a value of 0 the output will use grayscales only. A 
     1132# value of 255 will produce the most vivid colors. 
     1133# Minimum value: 0, maximum value: 255, default value: 100. 
     1134# This tag requires that the tag GENERATE_HTML is set to YES. 
     1135 
     1136HTML_COLORSTYLE_SAT    = 100 
     1137 
     1138# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the 
     1139# luminance component of the colors in the HTML output. Values below 100 
     1140# gradually make the output lighter, whereas values above 100 make the output 
     1141# darker. The value divided by 100 is the actual gamma applied, so 80 represents 
     1142# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not 
     1143# change the gamma. 
     1144# Minimum value: 40, maximum value: 240, default value: 80. 
     1145# This tag requires that the tag GENERATE_HTML is set to YES. 
     1146 
     1147HTML_COLORSTYLE_GAMMA  = 80 
     1148 
     1149# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML 
     1150# page will contain the date and time when the page was generated. Setting this 
     1151# to YES can help to show when doxygen was last run and thus if the 
     1152# documentation is up to date. 
     1153# The default value is: NO. 
     1154# This tag requires that the tag GENERATE_HTML is set to YES. 
     1155 
     1156HTML_TIMESTAMP         = NO 
     1157 
     1158# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 
     1159# documentation will contain sections that can be hidden and shown after the 
     1160# page has loaded. 
     1161# The default value is: NO. 
     1162# This tag requires that the tag GENERATE_HTML is set to YES. 
     1163 
     1164HTML_DYNAMIC_SECTIONS  = NO 
     1165 
     1166# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries 
     1167# shown in the various tree structured indices initially; the user can expand 
     1168# and collapse entries dynamically later on. Doxygen will expand the tree to 
     1169# such a level that at most the specified number of entries are visible (unless 
     1170# a fully collapsed tree already exceeds this amount). So setting the number of 
     1171# entries 1 will produce a full collapsed tree by default. 0 is a special value 
     1172# representing an infinite number of entries and will result in a full expanded 
     1173# tree by default. 
     1174# Minimum value: 0, maximum value: 9999, default value: 100. 
     1175# This tag requires that the tag GENERATE_HTML is set to YES. 
     1176 
     1177HTML_INDEX_NUM_ENTRIES = 100 
     1178 
     1179# If the GENERATE_DOCSET tag is set to YES, additional index files will be 
     1180# generated that can be used as input for Apple's Xcode 3 integrated development 
     1181# environment (see: http://developer.apple.com/tools/xcode/), introduced with 
     1182# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a 
     1183# Makefile in the HTML output directory. Running make will produce the docset in 
     1184# that directory and running make install will install the docset in 
     1185# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at 
     1186# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html 
    9321187# for more information. 
     1188# The default value is: NO. 
     1189# This tag requires that the tag GENERATE_HTML is set to YES. 
    9331190 
    9341191GENERATE_DOCSET        = NO 
    9351192 
    936 # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the  
    937 # feed. A documentation feed provides an umbrella under which multiple  
    938 # documentation sets from a single provider (such as a company or product suite)  
    939 # can be grouped. 
     1193# This tag determines the name of the docset feed. A documentation feed provides 
     1194# an umbrella under which multiple documentation sets from a single provider 
     1195# (such as a company or product suite) can be grouped. 
     1196# The default value is: Doxygen generated docs. 
     1197# This tag requires that the tag GENERATE_DOCSET is set to YES. 
    9401198 
    9411199DOCSET_FEEDNAME        = "Doxygen generated docs" 
    9421200 
    943 # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that  
    944 # should uniquely identify the documentation set bundle. This should be a  
    945 # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen  
    946 # will append .docset to the name. 
     1201# This tag specifies a string that should uniquely identify the documentation 
     1202# set bundle. This should be a reverse domain-name style string, e.g. 
     1203# com.mycompany.MyDocSet. Doxygen will append .docset to the name. 
     1204# The default value is: org.doxygen.Project. 
     1205# This tag requires that the tag GENERATE_DOCSET is set to YES. 
    9471206 
    9481207DOCSET_BUNDLE_ID       = org.doxygen.Project 
    9491208 
    950 # When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify  
    951 # the documentation publisher. This should be a reverse domain-name style  
     1209# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify 
     1210# the documentation publisher. This should be a reverse domain-name style 
    9521211# string, e.g. com.mycompany.MyDocSet.documentation. 
     1212# The default value is: org.doxygen.Publisher. 
     1213# This tag requires that the tag GENERATE_DOCSET is set to YES. 
    9531214 
    9541215DOCSET_PUBLISHER_ID    = org.doxygen.Publisher 
    9551216 
    956 # The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. 
     1217# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. 
     1218# The default value is: Publisher. 
     1219# This tag requires that the tag GENERATE_DOCSET is set to YES. 
    9571220 
    9581221DOCSET_PUBLISHER_NAME  = Publisher 
    9591222 
    960 # If the GENERATE_HTMLHELP tag is set to YES, additional index files  
    961 # will be generated that can be used as input for tools like the  
    962 # Microsoft HTML help workshop to generate a compiled HTML help file (.chm)  
    963 # of the generated HTML documentation. 
     1223# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three 
     1224# additional HTML index files: index.hhp, index.hhc, and index.hhk. The 
     1225# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop 
     1226# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on 
     1227# Windows. 
     1228# 
     1229# The HTML Help Workshop contains a compiler that can convert all HTML output 
     1230# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML 
     1231# files are now used as the Windows 98 help format, and will replace the old 
     1232# Windows help format (.hlp) on all Windows platforms in the future. Compressed 
     1233# HTML files also contain an index, a table of contents, and you can search for 
     1234# words in the documentation. The HTML workshop also contains a viewer for 
     1235# compressed HTML files. 
     1236# The default value is: NO. 
     1237# This tag requires that the tag GENERATE_HTML is set to YES. 
    9641238 
    9651239GENERATE_HTMLHELP      = NO 
    9661240 
    967 # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can  
    968 # be used to specify the file name of the resulting .chm file. You  
    969 # can add a path in front of the file if the result should not be  
     1241# The CHM_FILE tag can be used to specify the file name of the resulting .chm 
     1242# file. You can add a path in front of the file if the result should not be 
    9701243# written to the html output directory. 
    971  
    972 CHM_FILE               =  
    973  
    974 # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can  
    975 # be used to specify the location (absolute path including file name) of  
    976 # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run  
    977 # the HTML help compiler on the generated index.hhp. 
    978  
    979 HHC_LOCATION           =  
    980  
    981 # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag  
    982 # controls if a separate .chi index file is generated (YES) or that  
    983 # it should be included in the master .chm file (NO). 
     1244# This tag requires that the tag GENERATE_HTMLHELP is set to YES. 
     1245 
     1246CHM_FILE               = 
     1247 
     1248# The HHC_LOCATION tag can be used to specify the location (absolute path 
     1249# including file name) of the HTML help compiler (hhc.exe). If non-empty, 
     1250# doxygen will try to run the HTML help compiler on the generated index.hhp. 
     1251# The file has to be specified with full path. 
     1252# This tag requires that the tag GENERATE_HTMLHELP is set to YES. 
     1253 
     1254HHC_LOCATION           = 
     1255 
     1256# The GENERATE_CHI flag controls if a separate .chi index file is generated 
     1257# (YES) or that it should be included in the master .chm file (NO). 
     1258# The default value is: NO. 
     1259# This tag requires that the tag GENERATE_HTMLHELP is set to YES. 
    9841260 
    9851261GENERATE_CHI           = NO 
    9861262 
    987 # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING  
    988 # is used to encode HtmlHelp index (hhk), content (hhc) and project file  
    989 # content. 
    990  
    991 CHM_INDEX_ENCODING     =  
    992  
    993 # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag  
    994 # controls whether a binary table of contents is generated (YES) or a  
    995 # normal table of contents (NO) in the .chm file. 
     1263# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) 
     1264# and project file content. 
     1265# This tag requires that the tag GENERATE_HTMLHELP is set to YES. 
     1266 
     1267CHM_INDEX_ENCODING     = 
     1268 
     1269# The BINARY_TOC flag controls whether a binary table of contents is generated 
     1270# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it 
     1271# enables the Previous and Next buttons. 
     1272# The default value is: NO. 
     1273# This tag requires that the tag GENERATE_HTMLHELP is set to YES. 
    9961274 
    9971275BINARY_TOC             = NO 
    9981276 
    999 # The TOC_EXPAND flag can be set to YES to add extra items for group members  
    1000 # to the contents of the HTML help documentation and to the tree view. 
     1277# The TOC_EXPAND flag can be set to YES to add extra items for group members to 
     1278# the table of contents of the HTML help documentation and to the tree view. 
     1279# The default value is: NO. 
     1280# This tag requires that the tag GENERATE_HTMLHELP is set to YES. 
    10011281 
    10021282TOC_EXPAND             = NO 
    10031283 
    1004 # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and  
    1005 # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated  
    1006 # that can be used as input for Qt's qhelpgenerator to generate a  
    1007 # Qt Compressed Help (.qch) of the generated HTML documentation. 
     1284# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and 
     1285# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that 
     1286# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help 
     1287# (.qch) of the generated HTML documentation. 
     1288# The default value is: NO. 
     1289# This tag requires that the tag GENERATE_HTML is set to YES. 
    10081290 
    10091291GENERATE_QHP           = NO 
    10101292 
    1011 # If the QHG_LOCATION tag is specified, the QCH_FILE tag can  
    1012 # be used to specify the file name of the resulting .qch file.  
    1013 # The path specified is relative to the HTML output folder. 
    1014  
    1015 QCH_FILE               =  
    1016  
    1017 # The QHP_NAMESPACE tag specifies the namespace to use when generating  
    1018 # Qt Help Project output. For more information please see  
    1019 # http://doc.trolltech.com/qthelpproject.html#namespace 
     1293# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify 
     1294# the file name of the resulting .qch file. The path specified is relative to 
     1295# the HTML output folder. 
     1296# This tag requires that the tag GENERATE_QHP is set to YES. 
     1297 
     1298QCH_FILE               = 
     1299 
     1300# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help 
     1301# Project output. For more information please see Qt Help Project / Namespace 
     1302# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). 
     1303# The default value is: org.doxygen.Project. 
     1304# This tag requires that the tag GENERATE_QHP is set to YES. 
    10201305 
    10211306QHP_NAMESPACE          = org.doxygen.Project 
    10221307 
    1023 # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating  
    1024 # Qt Help Project output. For more information please see  
    1025 # http://doc.trolltech.com/qthelpproject.html#virtual-folders 
     1308# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt 
     1309# Help Project output. For more information please see Qt Help Project / Virtual 
     1310# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- 
     1311# folders). 
     1312# The default value is: doc. 
     1313# This tag requires that the tag GENERATE_QHP is set to YES. 
    10261314 
    10271315QHP_VIRTUAL_FOLDER     = doc 
    10281316 
    1029 # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to  
    1030 # add. For more information please see  
    1031 # http://doc.trolltech.com/qthelpproject.html#custom-filters 
    1032  
    1033 QHP_CUST_FILTER_NAME   =  
    1034  
    1035 # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the  
    1036 # custom filter to add. For more information please see  
    1037 # <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">  
    1038 # Qt Help Project / Custom Filters</a>. 
    1039  
    1040 QHP_CUST_FILTER_ATTRS  =  
    1041  
    1042 # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this  
    1043 # project's  
    1044 # filter section matches.  
    1045 # <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">  
    1046 # Qt Help Project / Filter Attributes</a>. 
    1047  
    1048 QHP_SECT_FILTER_ATTRS  =  
    1049  
    1050 # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can  
    1051 # be used to specify the location of Qt's qhelpgenerator.  
    1052 # If non-empty doxygen will try to run qhelpgenerator on the generated  
    1053 # .qhp file. 
    1054  
    1055 QHG_LOCATION           =  
    1056  
    1057 # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files   
    1058 # will be generated, which together with the HTML files, form an Eclipse help  
    1059 # plugin. To install this plugin and make it available under the help contents  
    1060 # menu in Eclipse, the contents of the directory containing the HTML and XML  
    1061 # files needs to be copied into the plugins directory of eclipse. The name of  
    1062 # the directory within the plugins directory should be the same as  
    1063 # the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before  
    1064 # the help appears. 
     1317# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom 
     1318# filter to add. For more information please see Qt Help Project / Custom 
     1319# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- 
     1320# filters). 
     1321# This tag requires that the tag GENERATE_QHP is set to YES. 
     1322 
     1323QHP_CUST_FILTER_NAME   = 
     1324 
     1325# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the 
     1326# custom filter to add. For more information please see Qt Help Project / Custom 
     1327# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- 
     1328# filters). 
     1329# This tag requires that the tag GENERATE_QHP is set to YES. 
     1330 
     1331QHP_CUST_FILTER_ATTRS  = 
     1332 
     1333# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this 
     1334# project's filter section matches. Qt Help Project / Filter Attributes (see: 
     1335# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). 
     1336# This tag requires that the tag GENERATE_QHP is set to YES. 
     1337 
     1338QHP_SECT_FILTER_ATTRS  = 
     1339 
     1340# The QHG_LOCATION tag can be used to specify the location of Qt's 
     1341# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the 
     1342# generated .qhp file. 
     1343# This tag requires that the tag GENERATE_QHP is set to YES. 
     1344 
     1345QHG_LOCATION           = 
     1346 
     1347# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be 
     1348# generated, together with the HTML files, they form an Eclipse help plugin. To 
     1349# install this plugin and make it available under the help contents menu in 
     1350# Eclipse, the contents of the directory containing the HTML and XML files needs 
     1351# to be copied into the plugins directory of eclipse. The name of the directory 
     1352# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. 
     1353# After copying Eclipse needs to be restarted before the help appears. 
     1354# The default value is: NO. 
     1355# This tag requires that the tag GENERATE_HTML is set to YES. 
    10651356 
    10661357GENERATE_ECLIPSEHELP   = NO 
    10671358 
    1068 # A unique identifier for the eclipse help plugin. When installing the plugin  
    1069 # the directory name containing the HTML and XML files should also have  
    1070 # this name. 
     1359# A unique identifier for the Eclipse help plugin. When installing the plugin 
     1360# the directory name containing the HTML and XML files should also have this 
     1361# name. Each documentation set should have its own identifier. 
     1362# The default value is: org.doxygen.Project. 
     1363# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. 
    10711364 
    10721365ECLIPSE_DOC_ID         = org.doxygen.Project 
    10731366 
    1074 # The DISABLE_INDEX tag can be used to turn on/off the condensed index at  
    1075 # top of each HTML page. The value NO (the default) enables the index and  
    1076 # the value YES disables it. 
     1367# If you want full control over the layout of the generated HTML pages it might 
     1368# be necessary to disable the index and replace it with your own. The 
     1369# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top 
     1370# of each HTML page. A value of NO enables the index and the value YES disables 
     1371# it. Since the tabs in the index contain the same information as the navigation 
     1372# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. 
     1373# The default value is: NO. 
     1374# This tag requires that the tag GENERATE_HTML is set to YES. 
    10771375 
    10781376DISABLE_INDEX          = NO 
    10791377 
    1080 # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values  
    1081 # (range [0,1..20]) that doxygen will group on one line in the generated HTML  
    1082 # documentation. Note that a value of 0 will completely suppress the enum  
    1083 # values from appearing in the overview section. 
     1378# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index 
     1379# structure should be generated to display hierarchical information. If the tag 
     1380# value is set to YES, a side panel will be generated containing a tree-like 
     1381# index structure (just like the one that is generated for HTML Help). For this 
     1382# to work a browser that supports JavaScript, DHTML, CSS and frames is required 
     1383# (i.e. any modern browser). Windows users are probably better off using the 
     1384# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can 
     1385# further fine-tune the look of the index. As an example, the default style 
     1386# sheet generated by doxygen has an example that shows how to put an image at 
     1387# the root of the tree instead of the PROJECT_NAME. Since the tree basically has 
     1388# the same information as the tab index, you could consider setting 
     1389# DISABLE_INDEX to YES when enabling this option. 
     1390# The default value is: NO. 
     1391# This tag requires that the tag GENERATE_HTML is set to YES. 
     1392 
     1393GENERATE_TREEVIEW      = NO 
     1394 
     1395# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that 
     1396# doxygen will group on one line in the generated HTML documentation. 
     1397# 
     1398# Note that a value of 0 will completely suppress the enum values from appearing 
     1399# in the overview section. 
     1400# Minimum value: 0, maximum value: 20, default value: 4. 
     1401# This tag requires that the tag GENERATE_HTML is set to YES. 
    10841402 
    10851403ENUM_VALUES_PER_LINE   = 4 
    10861404 
    1087 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index  
    1088 # structure should be generated to display hierarchical information.  
    1089 # If the tag value is set to YES, a side panel will be generated  
    1090 # containing a tree-like index structure (just like the one that  
    1091 # is generated for HTML Help). For this to work a browser that supports  
    1092 # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).  
    1093 # Windows users are probably better off using the HTML help feature. 
    1094  
    1095 GENERATE_TREEVIEW      = YES 
    1096  
    1097 # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,  
    1098 # and Class Hierarchy pages using a tree view instead of an ordered list. 
    1099  
    1100 USE_INLINE_TREES       = YES 
    1101  
    1102 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be  
    1103 # used to set the initial width (in pixels) of the frame in which the tree  
    1104 # is shown. 
     1405# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used 
     1406# to set the initial width (in pixels) of the frame in which the tree is shown. 
     1407# Minimum value: 0, maximum value: 1500, default value: 250. 
     1408# This tag requires that the tag GENERATE_HTML is set to YES. 
    11051409 
    11061410TREEVIEW_WIDTH         = 250 
    11071411 
    1108 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open  
    1109 # links to external symbols imported via tag files in a separate window. 
     1412# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to 
     1413# external symbols imported via tag files in a separate window. 
     1414# The default value is: NO. 
     1415# This tag requires that the tag GENERATE_HTML is set to YES. 
    11101416 
    11111417EXT_LINKS_IN_WINDOW    = NO 
    11121418 
    1113 # Use this tag to change the font size of Latex formulas included  
    1114 # as images in the HTML documentation. The default is 10. Note that  
    1115 # when you change the font size after a successful doxygen run you need  
    1116 # to manually remove any form_*.png images from the HTML output directory  
    1117 # to force them to be regenerated. 
     1419# Use this tag to change the font size of LaTeX formulas included as images in 
     1420# the HTML documentation. When you change the font size after a successful 
     1421# doxygen run you need to manually remove any form_*.png images from the HTML 
     1422# output directory to force them to be regenerated. 
     1423# Minimum value: 8, maximum value: 50, default value: 10. 
     1424# This tag requires that the tag GENERATE_HTML is set to YES. 
    11181425 
    11191426FORMULA_FONTSIZE       = 10 
    11201427 
    1121 # Use the FORMULA_TRANPARENT tag to determine whether or not the images  
    1122 # generated for formulas are transparent PNGs. Transparent PNGs are  
    1123 # not supported properly for IE 6.0, but are supported on all modern browsers.  
    1124 # Note that when changing this option you need to delete any form_*.png files  
    1125 # in the HTML output before the changes have effect. 
     1428# Use the FORMULA_TRANPARENT tag to determine whether or not the images 
     1429# generated for formulas are transparent PNGs. Transparent PNGs are not 
     1430# supported properly for IE 6.0, but are supported on all modern browsers. 
     1431# 
     1432# Note that when changing this option you need to delete any form_*.png files in 
     1433# the HTML output directory before the changes have effect. 
     1434# The default value is: YES. 
     1435# This tag requires that the tag GENERATE_HTML is set to YES. 
    11261436 
    11271437FORMULA_TRANSPARENT    = YES 
    11281438 
    1129 # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax  
    1130 # (see http://www.mathjax.org) which uses client side Javascript for the  
    1131 # rendering instead of using prerendered bitmaps. Use this if you do not  
    1132 # have LaTeX installed or if you want to formulas look prettier in the HTML  
    1133 # output. When enabled you also need to install MathJax separately and  
    1134 # configure the path to it using the MATHJAX_RELPATH option. 
     1439# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see 
     1440# http://www.mathjax.org) which uses client side Javascript for the rendering 
     1441# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX 
     1442# installed or if you want to formulas look prettier in the HTML output. When 
     1443# enabled you may also need to install MathJax separately and configure the path 
     1444# to it using the MATHJAX_RELPATH option. 
     1445# The default value is: NO. 
     1446# This tag requires that the tag GENERATE_HTML is set to YES. 
    11351447 
    11361448USE_MATHJAX            = NO 
    11371449 
    1138 # When MathJax is enabled you need to specify the location relative to the  
    1139 # HTML output directory using the MATHJAX_RELPATH option. The destination  
    1140 # directory should contain the MathJax.js script. For instance, if the mathjax  
    1141 # directory is located at the same level as the HTML output directory, then  
    1142 # MATHJAX_RELPATH should be ../mathjax. The default value points to the  
    1143 # mathjax.org site, so you can quickly see the result without installing  
    1144 # MathJax, but it is strongly recommended to install a local copy of MathJax  
    1145 # before deployment. 
    1146  
    1147 MATHJAX_RELPATH        = http://www.mathjax.org/mathjax 
    1148  
    1149 # When the SEARCHENGINE tag is enabled doxygen will generate a search box  
    1150 # for the HTML output. The underlying search engine uses javascript  
    1151 # and DHTML and should work on any modern browser. Note that when using  
    1152 # HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets  
    1153 # (GENERATE_DOCSET) there is already a search function so this one should  
    1154 # typically be disabled. For large projects the javascript based search engine  
    1155 # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. 
     1450# When MathJax is enabled you can set the default output format to be used for 
     1451# the MathJax output. See the MathJax site (see: 
     1452# http://docs.mathjax.org/en/latest/output.html) for more details. 
     1453# Possible values are: HTML-CSS (which is slower, but has the best 
     1454# compatibility), NativeMML (i.e. MathML) and SVG. 
     1455# The default value is: HTML-CSS. 
     1456# This tag requires that the tag USE_MATHJAX is set to YES. 
     1457 
     1458MATHJAX_FORMAT         = HTML-CSS 
     1459 
     1460# When MathJax is enabled you need to specify the location relative to the HTML 
     1461# output directory using the MATHJAX_RELPATH option. The destination directory 
     1462# should contain the MathJax.js script. For instance, if the mathjax directory 
     1463# is located at the same level as the HTML output directory, then 
     1464# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax 
     1465# Content Delivery Network so you can quickly see the result without installing 
     1466# MathJax. However, it is strongly recommended to install a local copy of 
     1467# MathJax from http://www.mathjax.org before deployment. 
     1468# The default value is: http://cdn.mathjax.org/mathjax/latest. 
     1469# This tag requires that the tag USE_MATHJAX is set to YES. 
     1470 
     1471MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest 
     1472 
     1473# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax 
     1474# extension names that should be enabled during MathJax rendering. For example 
     1475# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols 
     1476# This tag requires that the tag USE_MATHJAX is set to YES. 
     1477 
     1478MATHJAX_EXTENSIONS     = 
     1479 
     1480# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces 
     1481# of code that will be used on startup of the MathJax code. See the MathJax site 
     1482# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an 
     1483# example see the documentation. 
     1484# This tag requires that the tag USE_MATHJAX is set to YES. 
     1485 
     1486MATHJAX_CODEFILE       = 
     1487 
     1488# When the SEARCHENGINE tag is enabled doxygen will generate a search box for 
     1489# the HTML output. The underlying search engine uses javascript and DHTML and 
     1490# should work on any modern browser. Note that when using HTML help 
     1491# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) 
     1492# there is already a search function so this one should typically be disabled. 
     1493# For large projects the javascript based search engine can be slow, then 
     1494# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to 
     1495# search using the keyboard; to jump to the search box use <access key> + S 
     1496# (what the <access key> is depends on the OS and browser, but it is typically 
     1497# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down 
     1498# key> to jump into the search results window, the results can be navigated 
     1499# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel 
     1500# the search. The filter options can be selected when the cursor is inside the 
     1501# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> 
     1502# to select a filter and <Enter> or <escape> to activate or cancel the filter 
     1503# option. 
     1504# The default value is: YES. 
     1505# This tag requires that the tag GENERATE_HTML is set to YES. 
    11561506 
    11571507SEARCHENGINE           = YES 
    11581508 
    1159 # When the SERVER_BASED_SEARCH tag is enabled the search engine will be  
    1160 # implemented using a PHP enabled web server instead of at the web client  
    1161 # using Javascript. Doxygen will generate the search PHP script and index  
    1162 # file to put on the web server. The advantage of the server  
    1163 # based approach is that it scales better to large projects and allows  
    1164 # full text search. The disadvantages are that it is more difficult to setup  
    1165 # and does not have live searching capabilities. 
     1509# When the SERVER_BASED_SEARCH tag is enabled the search engine will be 
     1510# implemented using a web server instead of a web client using Javascript. There 
     1511# are two flavors of web server based searching depending on the EXTERNAL_SEARCH 
     1512# setting. When disabled, doxygen will generate a PHP script for searching and 
     1513# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing 
     1514# and searching needs to be provided by external tools. See the section 
     1515# "External Indexing and Searching" for details. 
     1516# The default value is: NO. 
     1517# This tag requires that the tag SEARCHENGINE is set to YES. 
    11661518 
    11671519SERVER_BASED_SEARCH    = NO 
    11681520 
    1169 #--------------------------------------------------------------------------- 
    1170 # configuration options related to the LaTeX output 
    1171 #--------------------------------------------------------------------------- 
    1172  
    1173 # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will  
    1174 # generate Latex output. 
    1175  
    1176 GENERATE_LATEX         = NO 
    1177  
    1178 # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.  
    1179 # If a relative path is entered the value of OUTPUT_DIRECTORY will be  
    1180 # put in front of it. If left blank `latex' will be used as the default path. 
     1521# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP 
     1522# script for searching. Instead the search results are written to an XML file 
     1523# which needs to be processed by an external indexer. Doxygen will invoke an 
     1524# external search engine pointed to by the SEARCHENGINE_URL option to obtain the 
     1525# search results. 
     1526# 
     1527# Doxygen ships with an example indexer (doxyindexer) and search engine 
     1528# (doxysearch.cgi) which are based on the open source search engine library 
     1529# Xapian (see: http://xapian.org/). 
     1530# 
     1531# See the section "External Indexing and Searching" for details. 
     1532# The default value is: NO. 
     1533# This tag requires that the tag SEARCHENGINE is set to YES. 
     1534 
     1535EXTERNAL_SEARCH        = NO 
     1536 
     1537# The SEARCHENGINE_URL should point to a search engine hosted by a web server 
     1538# which will return the search results when EXTERNAL_SEARCH is enabled. 
     1539# 
     1540# Doxygen ships with an example indexer (doxyindexer) and search engine 
     1541# (doxysearch.cgi) which are based on the open source search engine library 
     1542# Xapian (see: http://xapian.org/). See the section "External Indexing and 
     1543# Searching" for details. 
     1544# This tag requires that the tag SEARCHENGINE is set to YES. 
     1545 
     1546SEARCHENGINE_URL       = 
     1547 
     1548# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed 
     1549# search data is written to a file for indexing by an external tool. With the 
     1550# SEARCHDATA_FILE tag the name of this file can be specified. 
     1551# The default file is: searchdata.xml. 
     1552# This tag requires that the tag SEARCHENGINE is set to YES. 
     1553 
     1554SEARCHDATA_FILE        = searchdata.xml 
     1555 
     1556# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the 
     1557# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is 
     1558# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple 
     1559# projects and redirect the results back to the right project. 
     1560# This tag requires that the tag SEARCHENGINE is set to YES. 
     1561 
     1562EXTERNAL_SEARCH_ID     = 
     1563 
     1564# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen 
     1565# projects other than the one defined by this configuration file, but that are 
     1566# all added to the same external search index. Each project needs to have a 
     1567# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of 
     1568# to a relative location where the documentation can be found. The format is: 
     1569# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... 
     1570# This tag requires that the tag SEARCHENGINE is set to YES. 
     1571 
     1572EXTRA_SEARCH_MAPPINGS  = 
     1573 
     1574#--------------------------------------------------------------------------- 
     1575# Configuration options related to the LaTeX output 
     1576#--------------------------------------------------------------------------- 
     1577 
     1578# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. 
     1579# The default value is: YES. 
     1580 
     1581GENERATE_LATEX         = YES 
     1582 
     1583# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a 
     1584# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of 
     1585# it. 
     1586# The default directory is: latex. 
     1587# This tag requires that the tag GENERATE_LATEX is set to YES. 
    11811588 
    11821589LATEX_OUTPUT           = latex 
    11831590 
    1184 # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be  
    1185 # invoked. If left blank `latex' will be used as the default command name.  
    1186 # Note that when enabling USE_PDFLATEX this option is only used for  
    1187 # generating bitmaps for formulas in the HTML output, but not in the  
    1188 # Makefile that is written to the output directory. 
     1591# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
     1592# invoked. 
     1593# 
     1594# Note that when enabling USE_PDFLATEX this option is only used for generating 
     1595# bitmaps for formulas in the HTML output, but not in the Makefile that is 
     1596# written to the output directory. 
     1597# The default file is: latex. 
     1598# This tag requires that the tag GENERATE_LATEX is set to YES. 
    11891599 
    11901600LATEX_CMD_NAME         = latex 
    11911601 
    1192 # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to  
    1193 # generate index for LaTeX. If left blank `makeindex' will be used as the  
    1194 # default command name. 
     1602# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate 
     1603# index for LaTeX. 
     1604# The default file is: makeindex. 
     1605# This tag requires that the tag GENERATE_LATEX is set to YES. 
    11951606 
    11961607MAKEINDEX_CMD_NAME     = makeindex 
    11971608 
    1198 # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact  
    1199 # LaTeX documents. This may be useful for small projects and may help to  
    1200 # save some trees in general. 
     1609# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX 
     1610# documents. This may be useful for small projects and may help to save some 
     1611# trees in general. 
     1612# The default value is: NO. 
     1613# This tag requires that the tag GENERATE_LATEX is set to YES. 
    12011614 
    12021615COMPACT_LATEX          = NO 
    12031616 
    1204 # The PAPER_TYPE tag can be used to set the paper type that is used  
    1205 # by the printer. Possible values are: a4, letter, legal and  
    1206 # executive. If left blank a4wide will be used. 
     1617# The PAPER_TYPE tag can be used to set the paper type that is used by the 
     1618# printer. 
     1619# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x 
     1620# 14 inches) and executive (7.25 x 10.5 inches). 
     1621# The default value is: a4. 
     1622# This tag requires that the tag GENERATE_LATEX is set to YES. 
    12071623 
    12081624PAPER_TYPE             = a4 
    12091625 
    1210 # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX  
    1211 # packages that should be included in the LaTeX output. 
    1212  
    1213 EXTRA_PACKAGES         =  
    1214  
    1215 # The LATEX_HEADER tag can be used to specify a personal LaTeX header for  
    1216 # the generated latex document. The header should contain everything until  
    1217 # the first chapter. If it is left blank doxygen will generate a  
    1218 # standard header. Notice: only use this tag if you know what you are doing! 
    1219  
    1220 LATEX_HEADER           =  
    1221  
    1222 # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for  
    1223 # the generated latex document. The footer should contain everything after  
    1224 # the last chapter. If it is left blank doxygen will generate a  
    1225 # standard footer. Notice: only use this tag if you know what you are doing! 
    1226  
    1227 LATEX_FOOTER           =  
    1228  
    1229 # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated  
    1230 # is prepared for conversion to pdf (using ps2pdf). The pdf file will  
    1231 # contain links (just like the HTML output) instead of page references  
    1232 # This makes the output suitable for online browsing using a pdf viewer. 
     1626# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names 
     1627# that should be included in the LaTeX output. To get the times font for 
     1628# instance you can specify 
     1629# EXTRA_PACKAGES=times 
     1630# If left blank no extra packages will be included. 
     1631# This tag requires that the tag GENERATE_LATEX is set to YES. 
     1632 
     1633EXTRA_PACKAGES         = 
     1634 
     1635# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the 
     1636# generated LaTeX document. The header should contain everything until the first 
     1637# chapter. If it is left blank doxygen will generate a standard header. See 
     1638# section "Doxygen usage" for information on how to let doxygen write the 
     1639# default header to a separate file. 
     1640# 
     1641# Note: Only use a user-defined header if you know what you are doing! The 
     1642# following commands have a special meaning inside the header: $title, 
     1643# $datetime, $date, $doxygenversion, $projectname, $projectnumber, 
     1644# $projectbrief, $projectlogo. Doxygen will replace $title with the empty 
     1645# string, for the replacement values of the other commands the user is referred 
     1646# to HTML_HEADER. 
     1647# This tag requires that the tag GENERATE_LATEX is set to YES. 
     1648 
     1649LATEX_HEADER           = 
     1650 
     1651# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the 
     1652# generated LaTeX document. The footer should contain everything after the last 
     1653# chapter. If it is left blank doxygen will generate a standard footer. See 
     1654# LATEX_HEADER for more information on how to generate a default footer and what 
     1655# special commands can be used inside the footer. 
     1656# 
     1657# Note: Only use a user-defined footer if you know what you are doing! 
     1658# This tag requires that the tag GENERATE_LATEX is set to YES. 
     1659 
     1660LATEX_FOOTER           = 
     1661 
     1662# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined 
     1663# LaTeX style sheets that are included after the standard style sheets created 
     1664# by doxygen. Using this option one can overrule certain style aspects. Doxygen 
     1665# will copy the style sheet files to the output directory. 
     1666# Note: The order of the extra style sheet files is of importance (e.g. the last 
     1667# style sheet in the list overrules the setting of the previous ones in the 
     1668# list). 
     1669# This tag requires that the tag GENERATE_LATEX is set to YES. 
     1670 
     1671LATEX_EXTRA_STYLESHEET = 
     1672 
     1673# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or 
     1674# other source files which should be copied to the LATEX_OUTPUT output 
     1675# directory. Note that the files will be copied as-is; there are no commands or 
     1676# markers available. 
     1677# This tag requires that the tag GENERATE_LATEX is set to YES. 
     1678 
     1679LATEX_EXTRA_FILES      = 
     1680 
     1681# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is 
     1682# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will 
     1683# contain links (just like the HTML output) instead of page references. This 
     1684# makes the output suitable for online browsing using a PDF viewer. 
     1685# The default value is: YES. 
     1686# This tag requires that the tag GENERATE_LATEX is set to YES. 
    12331687 
    12341688PDF_HYPERLINKS         = YES 
    12351689 
    1236 # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of  
    1237 # plain latex in the generated Makefile. Set this option to YES to get a  
     1690# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate 
     1691# the PDF file directly from the LaTeX files. Set this option to YES, to get a 
    12381692# higher quality PDF documentation. 
     1693# The default value is: YES. 
     1694# This tag requires that the tag GENERATE_LATEX is set to YES. 
    12391695 
    12401696USE_PDFLATEX           = YES 
    12411697 
    1242 # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.  
    1243 # command to the generated LaTeX files. This will instruct LaTeX to keep  
    1244 # running if errors occur, instead of asking the user for help.  
    1245 # This option is also used when generating formulas in HTML. 
     1698# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode 
     1699# command to the generated LaTeX files. This will instruct LaTeX to keep running 
     1700# if errors occur, instead of asking the user for help. This option is also used 
     1701# when generating formulas in HTML. 
     1702# The default value is: NO. 
     1703# This tag requires that the tag GENERATE_LATEX is set to YES. 
    12461704 
    12471705LATEX_BATCHMODE        = NO 
    12481706 
    1249 # If LATEX_HIDE_INDICES is set to YES then doxygen will not  
    1250 # include the index chapters (such as File Index, Compound Index, etc.)  
    1251 # in the output. 
     1707# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the 
     1708# index chapters (such as File Index, Compound Index, etc.) in the output. 
     1709# The default value is: NO. 
     1710# This tag requires that the tag GENERATE_LATEX is set to YES. 
    12521711 
    12531712LATEX_HIDE_INDICES     = NO 
    12541713 
    1255 # If LATEX_SOURCE_CODE is set to YES then doxygen will include  
    1256 # source code with syntax highlighting in the LaTeX output.  
    1257 # Note that which sources are shown also depends on other settings  
    1258 # such as SOURCE_BROWSER. 
     1714# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source 
     1715# code with syntax highlighting in the LaTeX output. 
     1716# 
     1717# Note that which sources are shown also depends on other settings such as 
     1718# SOURCE_BROWSER. 
     1719# The default value is: NO. 
     1720# This tag requires that the tag GENERATE_LATEX is set to YES. 
    12591721 
    12601722LATEX_SOURCE_CODE      = NO 
    12611723 
    1262 #--------------------------------------------------------------------------- 
    1263 # configuration options related to the RTF output 
    1264 #--------------------------------------------------------------------------- 
    1265  
    1266 # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output  
    1267 # The RTF output is optimized for Word 97 and may not look very pretty with  
    1268 # other RTF readers or editors. 
     1724# The LATEX_BIB_STYLE tag can be used to specify the style to use for the 
     1725# bibliography, e.g. plainnat, or ieeetr. See 
     1726# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. 
     1727# The default value is: plain. 
     1728# This tag requires that the tag GENERATE_LATEX is set to YES. 
     1729 
     1730LATEX_BIB_STYLE        = plain 
     1731 
     1732#--------------------------------------------------------------------------- 
     1733# Configuration options related to the RTF output 
     1734#--------------------------------------------------------------------------- 
     1735 
     1736# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The 
     1737# RTF output is optimized for Word 97 and may not look too pretty with other RTF 
     1738# readers/editors. 
     1739# The default value is: NO. 
    12691740 
    12701741GENERATE_RTF           = NO 
    12711742 
    1272 # The RTF_OUTPUT tag is used to specify where the RTF docs will be put.  
    1273 # If a relative path is entered the value of OUTPUT_DIRECTORY will be  
    1274 # put in front of it. If left blank `rtf' will be used as the default path. 
     1743# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a 
     1744# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of 
     1745# it. 
     1746# The default directory is: rtf. 
     1747# This tag requires that the tag GENERATE_RTF is set to YES. 
    12751748 
    12761749RTF_OUTPUT             = rtf 
    12771750 
    1278 # If the COMPACT_RTF tag is set to YES Doxygen generates more compact  
    1279 # RTF documents. This may be useful for small projects and may help to  
    1280 # save some trees in general. 
     1751# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF 
     1752# documents. This may be useful for small projects and may help to save some 
     1753# trees in general. 
     1754# The default value is: NO. 
     1755# This tag requires that the tag GENERATE_RTF is set to YES. 
    12811756 
    12821757COMPACT_RTF            = NO 
    12831758 
    1284 # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated  
    1285 # will contain hyperlink fields. The RTF file will  
    1286 # contain links (just like the HTML output) instead of page references.  
    1287 # This makes the output suitable for online browsing using WORD or other  
    1288 # programs which support those fields.  
    1289 # Note: wordpad (write) and others do not support links. 
     1759# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will 
     1760# contain hyperlink fields. The RTF file will contain links (just like the HTML 
     1761# output) instead of page references. This makes the output suitable for online 
     1762# browsing using Word or some other Word compatible readers that support those 
     1763# fields. 
     1764# 
     1765# Note: WordPad (write) and others do not support links. 
     1766# The default value is: NO. 
     1767# This tag requires that the tag GENERATE_RTF is set to YES. 
    12901768 
    12911769RTF_HYPERLINKS         = NO 
    12921770 
    1293 # Load stylesheet definitions from file. Syntax is similar to doxygen's  
    1294 # config file, i.e. a series of assignments. You only have to provide  
    1295 # replacements, missing definitions are set to their default value. 
    1296  
    1297 RTF_STYLESHEET_FILE    =  
    1298  
    1299 # Set optional variables used in the generation of an rtf document.  
    1300 # Syntax is similar to doxygen's config file. 
    1301  
    1302 RTF_EXTENSIONS_FILE    =  
    1303  
    1304 #--------------------------------------------------------------------------- 
    1305 # configuration options related to the man page output 
    1306 #--------------------------------------------------------------------------- 
    1307  
    1308 # If the GENERATE_MAN tag is set to YES (the default) Doxygen will  
    1309 # generate man pages 
     1771# Load stylesheet definitions from file. Syntax is similar to doxygen's config 
     1772# file, i.e. a series of assignments. You only have to provide replacements, 
     1773# missing definitions are set to their default value. 
     1774# 
     1775# See also section "Doxygen usage" for information on how to generate the 
     1776# default style sheet that doxygen normally uses. 
     1777# This tag requires that the tag GENERATE_RTF is set to YES. 
     1778 
     1779RTF_STYLESHEET_FILE    = 
     1780 
     1781# Set optional variables used in the generation of an RTF document. Syntax is 
     1782# similar to doxygen's config file. A template extensions file can be generated 
     1783# using doxygen -e rtf extensionFile. 
     1784# This tag requires that the tag GENERATE_RTF is set to YES. 
     1785 
     1786RTF_EXTENSIONS_FILE    = 
     1787 
     1788# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code 
     1789# with syntax highlighting in the RTF output. 
     1790# 
     1791# Note that which sources are shown also depends on other settings such as 
     1792# SOURCE_BROWSER. 
     1793# The default value is: NO. 
     1794# This tag requires that the tag GENERATE_RTF is set to YES. 
     1795 
     1796RTF_SOURCE_CODE        = NO 
     1797 
     1798#--------------------------------------------------------------------------- 
     1799# Configuration options related to the man page output 
     1800#--------------------------------------------------------------------------- 
     1801 
     1802# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for 
     1803# classes and files. 
     1804# The default value is: NO. 
    13101805 
    13111806GENERATE_MAN           = NO 
    13121807 
    1313 # The MAN_OUTPUT tag is used to specify where the man pages will be put.  
    1314 # If a relative path is entered the value of OUTPUT_DIRECTORY will be  
    1315 # put in front of it. If left blank `man' will be used as the default path. 
     1808# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a 
     1809# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of 
     1810# it. A directory man3 will be created inside the directory specified by 
     1811# MAN_OUTPUT. 
     1812# The default directory is: man. 
     1813# This tag requires that the tag GENERATE_MAN is set to YES. 
    13161814 
    13171815MAN_OUTPUT             = man 
    13181816 
    1319 # The MAN_EXTENSION tag determines the extension that is added to  
    1320 # the generated man pages (default is the subroutine's section .3) 
     1817# The MAN_EXTENSION tag determines the extension that is added to the generated 
     1818# man pages. In case the manual section does not start with a number, the number 
     1819# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is 
     1820# optional. 
     1821# The default value is: .3. 
     1822# This tag requires that the tag GENERATE_MAN is set to YES. 
    13211823 
    13221824MAN_EXTENSION          = .3 
    13231825 
    1324 # If the MAN_LINKS tag is set to YES and Doxygen generates man output,  
    1325 # then it will generate one additional man file for each entity  
    1326 # documented in the real man page(s). These additional files  
    1327 # only source the real man page, but without them the man command  
    1328 # would be unable to find the correct page. The default is NO. 
     1826# The MAN_SUBDIR tag determines the name of the directory created within 
     1827# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by 
     1828# MAN_EXTENSION with the initial . removed. 
     1829# This tag requires that the tag GENERATE_MAN is set to YES. 
     1830 
     1831MAN_SUBDIR             = 
     1832 
     1833# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it 
     1834# will generate one additional man file for each entity documented in the real 
     1835# man page(s). These additional files only source the real man page, but without 
     1836# them the man command would be unable to find the correct page. 
     1837# The default value is: NO. 
     1838# This tag requires that the tag GENERATE_MAN is set to YES. 
    13291839 
    13301840MAN_LINKS              = NO 
    13311841 
    13321842#--------------------------------------------------------------------------- 
    1333 # configuration options related to the XML output 
    1334 #--------------------------------------------------------------------------- 
    1335  
    1336 # If the GENERATE_XML tag is set to YES Doxygen will  
    1337 # generate an XML file that captures the structure of  
    1338 # the code including all documentation. 
     1843# Configuration options related to the XML output 
     1844#--------------------------------------------------------------------------- 
     1845 
     1846# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that 
     1847# captures the structure of the code including all documentation. 
     1848# The default value is: NO. 
    13391849 
    13401850GENERATE_XML           = NO 
    13411851 
    1342 # The XML_OUTPUT tag is used to specify where the XML pages will be put.  
    1343 # If a relative path is entered the value of OUTPUT_DIRECTORY will be  
    1344 # put in front of it. If left blank `xml' will be used as the default path. 
     1852# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a 
     1853# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of 
     1854# it. 
     1855# The default directory is: xml. 
     1856# This tag requires that the tag GENERATE_XML is set to YES. 
    13451857 
    13461858XML_OUTPUT             = xml 
    13471859 
    1348 # The XML_SCHEMA tag can be used to specify an XML schema,  
    1349 # which can be used by a validating XML parser to check the  
    1350 # syntax of the XML files. 
    1351  
    1352 XML_SCHEMA             =  
    1353  
    1354 # The XML_DTD tag can be used to specify an XML DTD,  
    1355 # which can be used by a validating XML parser to check the  
    1356 # syntax of the XML files. 
    1357  
    1358 XML_DTD                =  
    1359  
    1360 # If the XML_PROGRAMLISTING tag is set to YES Doxygen will  
    1361 # dump the program listings (including syntax highlighting  
    1362 # and cross-referencing information) to the XML output. Note that  
    1363 # enabling this will significantly increase the size of the XML output. 
     1860# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program 
     1861# listings (including syntax highlighting and cross-referencing information) to 
     1862# the XML output. Note that enabling this will significantly increase the size 
     1863# of the XML output. 
     1864# The default value is: YES. 
     1865# This tag requires that the tag GENERATE_XML is set to YES. 
    13641866 
    13651867XML_PROGRAMLISTING     = YES 
    13661868 
    13671869#--------------------------------------------------------------------------- 
    1368 # configuration options for the AutoGen Definitions output 
    1369 #--------------------------------------------------------------------------- 
    1370  
    1371 # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will  
    1372 # generate an AutoGen Definitions (see autogen.sf.net) file  
    1373 # that captures the structure of the code including all  
    1374 # documentation. Note that this feature is still experimental  
    1375 # and incomplete at the moment. 
     1870# Configuration options related to the DOCBOOK output 
     1871#--------------------------------------------------------------------------- 
     1872 
     1873# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files 
     1874# that can be used to generate PDF. 
     1875# The default value is: NO. 
     1876 
     1877GENERATE_DOCBOOK       = NO 
     1878 
     1879# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. 
     1880# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in 
     1881# front of it. 
     1882# The default directory is: docbook. 
     1883# This tag requires that the tag GENERATE_DOCBOOK is set to YES. 
     1884 
     1885DOCBOOK_OUTPUT         = docbook 
     1886 
     1887# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the 
     1888# program listings (including syntax highlighting and cross-referencing 
     1889# information) to the DOCBOOK output. Note that enabling this will significantly 
     1890# increase the size of the DOCBOOK output. 
     1891# The default value is: NO. 
     1892# This tag requires that the tag GENERATE_DOCBOOK is set to YES. 
     1893 
     1894DOCBOOK_PROGRAMLISTING = NO 
     1895 
     1896#--------------------------------------------------------------------------- 
     1897# Configuration options for the AutoGen Definitions output 
     1898#--------------------------------------------------------------------------- 
     1899 
     1900# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an 
     1901# AutoGen Definitions (see http://autogen.sf.net) file that captures the 
     1902# structure of the code including all documentation. Note that this feature is 
     1903# still experimental and incomplete at the moment. 
     1904# The default value is: NO. 
    13761905 
    13771906GENERATE_AUTOGEN_DEF   = NO 
    13781907 
    13791908#--------------------------------------------------------------------------- 
    1380 # configuration options related to the Perl module output 
    1381 #--------------------------------------------------------------------------- 
    1382  
    1383 # If the GENERATE_PERLMOD tag is set to YES Doxygen will  
    1384 # generate a Perl module file that captures the structure of  
    1385 # the code including all documentation. Note that this  
    1386 # feature is still experimental and incomplete at the  
    1387 # moment. 
     1909# Configuration options related to the Perl module output 
     1910#--------------------------------------------------------------------------- 
     1911 
     1912# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module 
     1913# file that captures the structure of the code including all documentation. 
     1914# 
     1915# Note that this feature is still experimental and incomplete at the moment. 
     1916# The default value is: NO. 
    13881917 
    13891918GENERATE_PERLMOD       = NO 
    13901919 
    1391 # If the PERLMOD_LATEX tag is set to YES Doxygen will generate  
    1392 # the necessary Makefile rules, Perl scripts and LaTeX code to be able  
    1393 # to generate PDF and DVI output from the Perl module output. 
     1920# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary 
     1921# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI 
     1922# output from the Perl module output. 
     1923# The default value is: NO. 
     1924# This tag requires that the tag GENERATE_PERLMOD is set to YES. 
    13941925 
    13951926PERLMOD_LATEX          = NO 
    13961927 
    1397 # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be  
    1398 # nicely formatted so it can be parsed by a human reader.  This is useful  
    1399 # if you want to understand what is going on.  On the other hand, if this  
    1400 # tag is set to NO the size of the Perl module output will be much smaller  
    1401 # and Perl will parse it just the same. 
     1928# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely 
     1929# formatted so it can be parsed by a human reader. This is useful if you want to 
     1930# understand what is going on. On the other hand, if this tag is set to NO, the 
     1931# size of the Perl module output will be much smaller and Perl will parse it 
     1932# just the same. 
     1933# The default value is: YES. 
     1934# This tag requires that the tag GENERATE_PERLMOD is set to YES. 
    14021935 
    14031936PERLMOD_PRETTY         = YES 
    14041937 
    1405 # The names of the make variables in the generated doxyrules.make file  
    1406 # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.  
    1407 # This is useful so different doxyrules.make files included by the same  
    1408 # Makefile don't overwrite each other's variables. 
    1409  
    1410 PERLMOD_MAKEVAR_PREFIX =  
     1938# The names of the make variables in the generated doxyrules.make file are 
     1939# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful 
     1940# so different doxyrules.make files included by the same Makefile don't 
     1941# overwrite each other's variables. 
     1942# This tag requires that the tag GENERATE_PERLMOD is set to YES. 
     1943 
     1944PERLMOD_MAKEVAR_PREFIX = 
    14111945 
    14121946#--------------------------------------------------------------------------- 
     
    14141948#--------------------------------------------------------------------------- 
    14151949 
    1416 # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will  
    1417 # evaluate all C-preprocessor directives found in the sources and include  
     1950# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all 
     1951# C-preprocessor directives found in the sources and include files. 
     1952# The default value is: YES. 
     1953 
     1954ENABLE_PREPROCESSING   = YES 
     1955 
     1956# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names 
     1957# in the source code. If set to NO, only conditional compilation will be 
     1958# performed. Macro expansion can be done in a controlled way by setting 
     1959# EXPAND_ONLY_PREDEF to YES. 
     1960# The default value is: NO. 
     1961# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. 
     1962 
     1963MACRO_EXPANSION        = NO 
     1964 
     1965# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then 
     1966# the macro expansion is limited to the macros specified with the PREDEFINED and 
     1967# EXPAND_AS_DEFINED tags. 
     1968# The default value is: NO. 
     1969# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. 
     1970 
     1971EXPAND_ONLY_PREDEF     = NO 
     1972 
     1973# If the SEARCH_INCLUDES tag is set to YES, the include files in the 
     1974# INCLUDE_PATH will be searched if a #include is found. 
     1975# The default value is: YES. 
     1976# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. 
     1977 
     1978SEARCH_INCLUDES        = YES 
     1979 
     1980# The INCLUDE_PATH tag can be used to specify one or more directories that 
     1981# contain include files that are not input files but should be processed by the 
     1982# preprocessor. 
     1983# This tag requires that the tag SEARCH_INCLUDES is set to YES. 
     1984 
     1985INCLUDE_PATH           = 
     1986 
     1987# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
     1988# patterns (like *.h and *.hpp) to filter out the header-files in the 
     1989# directories. If left blank, the patterns specified with FILE_PATTERNS will be 
     1990# used. 
     1991# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. 
     1992 
     1993INCLUDE_FILE_PATTERNS  = 
     1994 
     1995# The PREDEFINED tag can be used to specify one or more macro names that are 
     1996# defined before the preprocessor is started (similar to the -D option of e.g. 
     1997# gcc). The argument of the tag is a list of macros of the form: name or 
     1998# name=definition (no spaces). If the definition and the "=" are omitted, "=1" 
     1999# is assumed. To prevent a macro definition from being undefined via #undef or 
     2000# recursively expanded use the := operator instead of the = operator. 
     2001# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. 
     2002 
     2003PREDEFINED             = 
     2004 
     2005# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this 
     2006# tag can be used to specify a list of macro names that should be expanded. The 
     2007# macro definition that is found in the sources will be used. Use the PREDEFINED 
     2008# tag if you want to use a different macro definition that overrules the 
     2009# definition found in the source code. 
     2010# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. 
     2011 
     2012EXPAND_AS_DEFINED      = 
     2013 
     2014# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will 
     2015# remove all references to function-like macros that are alone on a line, have 
     2016# an all uppercase name, and do not end with a semicolon. Such function macros 
     2017# are typically used for boiler-plate code, and will confuse the parser if not 
     2018# removed. 
     2019# The default value is: YES. 
     2020# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. 
     2021 
     2022SKIP_FUNCTION_MACROS   = YES 
     2023 
     2024#--------------------------------------------------------------------------- 
     2025# Configuration options related to external references 
     2026#--------------------------------------------------------------------------- 
     2027 
     2028# The TAGFILES tag can be used to specify one or more tag files. For each tag 
     2029# file the location of the external documentation should be added. The format of 
     2030# a tag file without this location is as follows: 
     2031# TAGFILES = file1 file2 ... 
     2032# Adding location for the tag files is done as follows: 
     2033# TAGFILES = file1=loc1 "file2 = loc2" ... 
     2034# where loc1 and loc2 can be relative or absolute paths or URLs. See the 
     2035# section "Linking to external documentation" for more information about the use 
     2036# of tag files. 
     2037# Note: Each tag file must have a unique name (where the name does NOT include 
     2038# the path). If a tag file is not located in the directory in which doxygen is 
     2039# run, you must also specify the path to the tagfile here. 
     2040 
     2041TAGFILES               = 
     2042 
     2043# When a file name is specified after GENERATE_TAGFILE, doxygen will create a 
     2044# tag file that is based on the input files it reads. See section "Linking to 
     2045# external documentation" for more information about the usage of tag files. 
     2046 
     2047GENERATE_TAGFILE       = 
     2048 
     2049# If the ALLEXTERNALS tag is set to YES, all external class will be listed in 
     2050# the class index. If set to NO, only the inherited external classes will be 
     2051# listed. 
     2052# The default value is: NO. 
     2053 
     2054ALLEXTERNALS           = NO 
     2055 
     2056# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed 
     2057# in the modules index. If set to NO, only the current project's groups will be 
     2058# listed. 
     2059# The default value is: YES. 
     2060 
     2061EXTERNAL_GROUPS        = YES 
     2062 
     2063# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in 
     2064# the related pages index. If set to NO, only the current project's pages will 
     2065# be listed. 
     2066# The default value is: YES. 
     2067 
     2068EXTERNAL_PAGES         = YES 
     2069 
     2070# The PERL_PATH should be the absolute path and name of the perl script 
     2071# interpreter (i.e. the result of 'which perl'). 
     2072# The default file (with absolute path) is: /usr/bin/perl. 
     2073 
     2074PERL_PATH              = /usr/bin/perl 
     2075 
     2076#--------------------------------------------------------------------------- 
     2077# Configuration options related to the dot tool 
     2078#--------------------------------------------------------------------------- 
     2079 
     2080# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram 
     2081# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to 
     2082# NO turns the diagrams off. Note that this option also works with HAVE_DOT 
     2083# disabled, but it is recommended to install and use dot, since it yields more 
     2084# powerful graphs. 
     2085# The default value is: YES. 
     2086 
     2087CLASS_DIAGRAMS         = YES 
     2088 
     2089# You can define message sequence charts within doxygen comments using the \msc 
     2090# command. Doxygen will then run the mscgen tool (see: 
     2091# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the 
     2092# documentation. The MSCGEN_PATH tag allows you to specify the directory where 
     2093# the mscgen tool resides. If left empty the tool is assumed to be found in the 
     2094# default search path. 
     2095 
     2096MSCGEN_PATH            = 
     2097 
     2098# You can include diagrams made with dia in doxygen documentation. Doxygen will 
     2099# then run dia to produce the diagram and insert it in the documentation. The 
     2100# DIA_PATH tag allows you to specify the directory where the dia binary resides. 
     2101# If left empty dia is assumed to be found in the default search path. 
     2102 
     2103DIA_PATH               = 
     2104 
     2105# If set to YES the inheritance and collaboration graphs will hide inheritance 
     2106# and usage relations if the target is undocumented or is not a class. 
     2107# The default value is: YES. 
     2108 
     2109HIDE_UNDOC_RELATIONS   = YES 
     2110 
     2111# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
     2112# available from the path. This tool is part of Graphviz (see: 
     2113# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent 
     2114# Bell Labs. The other options in this section have no effect if this option is 
     2115# set to NO 
     2116# The default value is: YES. 
     2117 
     2118HAVE_DOT               = YES 
     2119 
     2120# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed 
     2121# to run in parallel. When set to 0 doxygen will base this on the number of 
     2122# processors available in the system. You can set it explicitly to a value 
     2123# larger than 0 to get control over the balance between CPU load and processing 
     2124# speed. 
     2125# Minimum value: 0, maximum value: 32, default value: 0. 
     2126# This tag requires that the tag HAVE_DOT is set to YES. 
     2127 
     2128DOT_NUM_THREADS        = 0 
     2129 
     2130# When you want a differently looking font in the dot files that doxygen 
     2131# generates you can specify the font name using DOT_FONTNAME. You need to make 
     2132# sure dot is able to find the font, which can be done by putting it in a 
     2133# standard location or by setting the DOTFONTPATH environment variable or by 
     2134# setting DOT_FONTPATH to the directory containing the font. 
     2135# The default value is: Helvetica. 
     2136# This tag requires that the tag HAVE_DOT is set to YES. 
     2137 
     2138DOT_FONTNAME           = Helvetica 
     2139 
     2140# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of 
     2141# dot graphs. 
     2142# Minimum value: 4, maximum value: 24, default value: 10. 
     2143# This tag requires that the tag HAVE_DOT is set to YES. 
     2144 
     2145DOT_FONTSIZE           = 10 
     2146 
     2147# By default doxygen will tell dot to use the default font as specified with 
     2148# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set 
     2149# the path where dot can find it using this tag. 
     2150# This tag requires that the tag HAVE_DOT is set to YES. 
     2151 
     2152DOT_FONTPATH           = 
     2153 
     2154# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for 
     2155# each documented class showing the direct and indirect inheritance relations. 
     2156# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO. 
     2157# The default value is: YES. 
     2158# This tag requires that the tag HAVE_DOT is set to YES. 
     2159 
     2160CLASS_GRAPH            = YES 
     2161 
     2162# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a 
     2163# graph for each documented class showing the direct and indirect implementation 
     2164# dependencies (inheritance, containment, and class references variables) of the 
     2165# class with other documented classes. 
     2166# The default value is: YES. 
     2167# This tag requires that the tag HAVE_DOT is set to YES. 
     2168 
     2169COLLABORATION_GRAPH    = YES 
     2170 
     2171# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for 
     2172# groups, showing the direct groups dependencies. 
     2173# The default value is: YES. 
     2174# This tag requires that the tag HAVE_DOT is set to YES. 
     2175 
     2176GROUP_GRAPHS           = YES 
     2177 
     2178# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and 
     2179# collaboration diagrams in a style similar to the OMG's Unified Modeling 
     2180# Language. 
     2181# The default value is: NO. 
     2182# This tag requires that the tag HAVE_DOT is set to YES. 
     2183 
     2184UML_LOOK               = NO 
     2185 
     2186# If the UML_LOOK tag is enabled, the fields and methods are shown inside the 
     2187# class node. If there are many fields or methods and many nodes the graph may 
     2188# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the 
     2189# number of items for each type to make the size more manageable. Set this to 0 
     2190# for no limit. Note that the threshold may be exceeded by 50% before the limit 
     2191# is enforced. So when you set the threshold to 10, up to 15 fields may appear, 
     2192# but if the number exceeds 15, the total amount of fields shown is limited to 
     2193# 10. 
     2194# Minimum value: 0, maximum value: 100, default value: 10. 
     2195# This tag requires that the tag HAVE_DOT is set to YES. 
     2196 
     2197UML_LIMIT_NUM_FIELDS   = 10 
     2198 
     2199# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and 
     2200# collaboration graphs will show the relations between templates and their 
     2201# instances. 
     2202# The default value is: NO. 
     2203# This tag requires that the tag HAVE_DOT is set to YES. 
     2204 
     2205TEMPLATE_RELATIONS     = NO 
     2206 
     2207# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to 
     2208# YES then doxygen will generate a graph for each documented file showing the 
     2209# direct and indirect include dependencies of the file with other documented 
    14182210# files. 
    1419  
    1420 ENABLE_PREPROCESSING   = YES 
    1421  
    1422 # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro  
    1423 # names in the source code. If set to NO (the default) only conditional  
    1424 # compilation will be performed. Macro expansion can be done in a controlled  
    1425 # way by setting EXPAND_ONLY_PREDEF to YES. 
    1426  
    1427 MACRO_EXPANSION        = YES 
    1428  
    1429 # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES  
    1430 # then the macro expansion is limited to the macros specified with the  
    1431 # PREDEFINED and EXPAND_AS_DEFINED tags. 
    1432  
    1433 EXPAND_ONLY_PREDEF     = NO 
    1434  
    1435 # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files  
    1436 # pointed to by INCLUDE_PATH will be searched when a #include is found. 
    1437  
    1438 SEARCH_INCLUDES        = YES 
    1439  
    1440 # The INCLUDE_PATH tag can be used to specify one or more directories that  
    1441 # contain include files that are not input files but should be processed by  
    1442 # the preprocessor. 
    1443  
    1444 INCLUDE_PATH           =  
    1445  
    1446 # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard  
    1447 # patterns (like *.h and *.hpp) to filter out the header-files in the  
    1448 # directories. If left blank, the patterns specified with FILE_PATTERNS will  
    1449 # be used. 
    1450  
    1451 INCLUDE_FILE_PATTERNS  =  
    1452  
    1453 # The PREDEFINED tag can be used to specify one or more macro names that  
    1454 # are defined before the preprocessor is started (similar to the -D option of  
    1455 # gcc). The argument of the tag is a list of macros of the form: name  
    1456 # or name=definition (no spaces). If the definition and the = are  
    1457 # omitted =1 is assumed. To prevent a macro definition from being  
    1458 # undefined via #undef or recursively expanded use the := operator  
    1459 # instead of the = operator. 
    1460  
    1461 PREDEFINED             =  
    1462  
    1463 # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then  
    1464 # this tag can be used to specify a list of macro names that should be expanded.  
    1465 # The macro definition that is found in the sources will be used.  
    1466 # Use the PREDEFINED tag if you want to use a different macro definition that  
    1467 # overrules the definition found in the source code. 
    1468  
    1469 EXPAND_AS_DEFINED      =  
    1470  
    1471 # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then  
    1472 # doxygen's preprocessor will remove all references to function-like macros  
    1473 # that are alone on a line, have an all uppercase name, and do not end with a  
    1474 # semicolon, because these will confuse the parser if not removed. 
    1475  
    1476 SKIP_FUNCTION_MACROS   = YES 
    1477  
    1478 #--------------------------------------------------------------------------- 
    1479 # Configuration::additions related to external references 
    1480 #--------------------------------------------------------------------------- 
    1481  
    1482 # The TAGFILES option can be used to specify one or more tagfiles.  
    1483 # Optionally an initial location of the external documentation  
    1484 # can be added for each tagfile. The format of a tag file without  
    1485 # this location is as follows:  
    1486 #   TAGFILES = file1 file2 ...  
    1487 # Adding location for the tag files is done as follows:  
    1488 #   TAGFILES = file1=loc1 "file2 = loc2" ...  
    1489 # where "loc1" and "loc2" can be relative or absolute paths or  
    1490 # URLs. If a location is present for each tag, the installdox tool  
    1491 # does not have to be run to correct the links.  
    1492 # Note that each tag file must have a unique name  
    1493 # (where the name does NOT include the path)  
    1494 # If a tag file is not located in the directory in which doxygen  
    1495 # is run, you must also specify the path to the tagfile here. 
    1496  
    1497 TAGFILES               =  
    1498  
    1499 # When a file name is specified after GENERATE_TAGFILE, doxygen will create  
    1500 # a tag file that is based on the input files it reads. 
    1501  
    1502 GENERATE_TAGFILE       =  
    1503  
    1504 # If the ALLEXTERNALS tag is set to YES all external classes will be listed  
    1505 # in the class index. If set to NO only the inherited external classes  
    1506 # will be listed. 
    1507  
    1508 ALLEXTERNALS           = NO 
    1509  
    1510 # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed  
    1511 # in the modules index. If set to NO, only the current project's groups will  
    1512 # be listed. 
    1513  
    1514 EXTERNAL_GROUPS        = YES 
    1515  
    1516 # The PERL_PATH should be the absolute path and name of the perl script  
    1517 # interpreter (i.e. the result of `which perl'). 
    1518  
    1519 PERL_PATH              = /usr/bin/perl 
    1520  
    1521 #--------------------------------------------------------------------------- 
    1522 # Configuration options related to the dot tool 
    1523 #--------------------------------------------------------------------------- 
    1524  
    1525 # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will  
    1526 # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base  
    1527 # or super classes. Setting the tag to NO turns the diagrams off. Note that  
    1528 # this option also works with HAVE_DOT disabled, but it is recommended to  
    1529 # install and use dot, since it yields more powerful graphs. 
    1530  
    1531 CLASS_DIAGRAMS         = YES 
    1532  
    1533 # You can define message sequence charts within doxygen comments using the \msc  
    1534 # command. Doxygen will then run the mscgen tool (see  
    1535 # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the  
    1536 # documentation. The MSCGEN_PATH tag allows you to specify the directory where  
    1537 # the mscgen tool resides. If left empty the tool is assumed to be found in the  
    1538 # default search path. 
    1539  
    1540 MSCGEN_PATH            =  
    1541  
    1542 # If set to YES, the inheritance and collaboration graphs will hide  
    1543 # inheritance and usage relations if the target is undocumented  
    1544 # or is not a class. 
    1545  
    1546 HIDE_UNDOC_RELATIONS   = YES 
    1547  
    1548 # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is  
    1549 # available from the path. This tool is part of Graphviz, a graph visualization  
    1550 # toolkit from AT&T and Lucent Bell Labs. The other options in this section  
    1551 # have no effect if this option is set to NO (the default) 
    1552  
    1553 HAVE_DOT               = YES 
    1554  
    1555 # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is  
    1556 # allowed to run in parallel. When set to 0 (the default) doxygen will  
    1557 # base this on the number of processors available in the system. You can set it  
    1558 # explicitly to a value larger than 0 to get control over the balance  
    1559 # between CPU load and processing speed. 
    1560  
    1561 DOT_NUM_THREADS        = 0 
    1562  
    1563 # By default doxygen will write a font called Helvetica to the output  
    1564 # directory and reference it in all dot files that doxygen generates.  
    1565 # When you want a differently looking font you can specify the font name  
    1566 # using DOT_FONTNAME. You need to make sure dot is able to find the font,  
    1567 # which can be done by putting it in a standard location or by setting the  
    1568 # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory  
    1569 # containing the font. 
    1570  
    1571 DOT_FONTNAME           = Helvetica 
    1572  
    1573 # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.  
    1574 # The default size is 10pt. 
    1575  
    1576 DOT_FONTSIZE           = 10 
    1577  
    1578 # By default doxygen will tell dot to use the output directory to look for the  
    1579 # FreeSans.ttf font (which doxygen will put there itself). If you specify a  
    1580 # different font using DOT_FONTNAME you can set the path where dot  
    1581 # can find it using this tag. 
    1582  
    1583 DOT_FONTPATH           =  
    1584  
    1585 # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen  
    1586 # will generate a graph for each documented class showing the direct and  
    1587 # indirect inheritance relations. Setting this tag to YES will force the  
    1588 # the CLASS_DIAGRAMS tag to NO. 
    1589  
    1590 CLASS_GRAPH            = YES 
    1591  
    1592 # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen  
    1593 # will generate a graph for each documented class showing the direct and  
    1594 # indirect implementation dependencies (inheritance, containment, and  
    1595 # class references variables) of the class with other documented classes. 
    1596  
    1597 COLLABORATION_GRAPH    = YES 
    1598  
    1599 # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen  
    1600 # will generate a graph for groups, showing the direct groups dependencies 
    1601  
    1602 GROUP_GRAPHS           = YES 
    1603  
    1604 # If the UML_LOOK tag is set to YES doxygen will generate inheritance and  
    1605 # collaboration diagrams in a style similar to the OMG's Unified Modeling  
    1606 # Language. 
    1607  
    1608 UML_LOOK               = YES 
    1609  
    1610 # If set to YES, the inheritance and collaboration graphs will show the  
    1611 # relations between templates and their instances. 
    1612  
    1613 TEMPLATE_RELATIONS     = YES 
    1614  
    1615 # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT  
    1616 # tags are set to YES then doxygen will generate a graph for each documented  
    1617 # file showing the direct and indirect include dependencies of the file with  
    1618 # other documented files. 
     2211# The default value is: YES. 
     2212# This tag requires that the tag HAVE_DOT is set to YES. 
    16192213 
    16202214INCLUDE_GRAPH          = YES 
    16212215 
    1622 # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and  
    1623 # HAVE_DOT tags are set to YES then doxygen will generate a graph for each  
    1624 # documented header file showing the documented files that directly or  
    1625 # indirectly include this file. 
     2216# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are 
     2217# set to YES then doxygen will generate a graph for each documented file showing 
     2218# the direct and indirect include dependencies of the file with other documented 
     2219# files. 
     2220# The default value is: YES. 
     2221# This tag requires that the tag HAVE_DOT is set to YES. 
    16262222 
    16272223INCLUDED_BY_GRAPH      = YES 
    16282224 
    1629 # If the CALL_GRAPH and HAVE_DOT options are set to YES then  
    1630 # doxygen will generate a call dependency graph for every global function  
    1631 # or class method. Note that enabling this option will significantly increase  
    1632 # the time of a run. So in most cases it will be better to enable call graphs  
    1633 # for selected functions only using the \callgraph command. 
    1634  
    1635 CALL_GRAPH             = YES 
    1636  
    1637 # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then  
    1638 # doxygen will generate a caller dependency graph for every global function  
    1639 # or class method. Note that enabling this option will significantly increase  
    1640 # the time of a run. So in most cases it will be better to enable caller  
    1641 # graphs for selected functions only using the \callergraph command. 
    1642  
    1643 CALLER_GRAPH           = YES 
    1644  
    1645 # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen  
    1646 # will generate a graphical hierarchy of all classes instead of a textual one. 
     2225# If the CALL_GRAPH tag is set to YES then doxygen will generate a call 
     2226# dependency graph for every global function or class method. 
     2227# 
     2228# Note that enabling this option will significantly increase the time of a run. 
     2229# So in most cases it will be better to enable call graphs for selected 
     2230# functions only using the \callgraph command. 
     2231# The default value is: NO. 
     2232# This tag requires that the tag HAVE_DOT is set to YES. 
     2233 
     2234CALL_GRAPH             = NO 
     2235 
     2236# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller 
     2237# dependency graph for every global function or class method. 
     2238# 
     2239# Note that enabling this option will significantly increase the time of a run. 
     2240# So in most cases it will be better to enable caller graphs for selected 
     2241# functions only using the \callergraph command. 
     2242# The default value is: NO. 
     2243# This tag requires that the tag HAVE_DOT is set to YES. 
     2244 
     2245CALLER_GRAPH           = NO 
     2246 
     2247# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical 
     2248# hierarchy of all classes instead of a textual one. 
     2249# The default value is: YES. 
     2250# This tag requires that the tag HAVE_DOT is set to YES. 
    16472251 
    16482252GRAPHICAL_HIERARCHY    = YES 
    16492253 
    1650 # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES  
    1651 # then doxygen will show the dependencies a directory has on other directories  
    1652 # in a graphical way. The dependency relations are determined by the #include  
    1653 # relations between the files in the directories. 
     2254# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the 
     2255# dependencies a directory has on other directories in a graphical way. The 
     2256# dependency relations are determined by the #include relations between the 
     2257# files in the directories. 
     2258# The default value is: YES. 
     2259# This tag requires that the tag HAVE_DOT is set to YES. 
    16542260 
    16552261DIRECTORY_GRAPH        = YES 
    16562262 
    1657 # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images  
    1658 # generated by dot. Possible values are svg, png, jpg, or gif.  
    1659 # If left blank png will be used. 
     2263# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
     2264# generated by dot. 
     2265# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order 
     2266# to make the SVG files visible in IE 9+ (other browsers do not have this 
     2267# requirement). 
     2268# Possible values are: png, png:cairo, png:cairo:cairo, png:cairo:gd, png:gd, 
     2269# png:gd:gd, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd, gif, gif:cairo, 
     2270# gif:cairo:gd, gif:gd, gif:gd:gd and svg. 
     2271# The default value is: png. 
     2272# This tag requires that the tag HAVE_DOT is set to YES. 
    16602273 
    16612274DOT_IMAGE_FORMAT       = png 
    16622275 
    1663 # The tag DOT_PATH can be used to specify the path where the dot tool can be  
     2276# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to 
     2277# enable generation of interactive SVG images that allow zooming and panning. 
     2278# 
     2279# Note that this requires a modern browser other than Internet Explorer. Tested 
     2280# and working are Firefox, Chrome, Safari, and Opera. 
     2281# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make 
     2282# the SVG files visible. Older versions of IE do not have SVG support. 
     2283# The default value is: NO. 
     2284# This tag requires that the tag HAVE_DOT is set to YES. 
     2285 
     2286INTERACTIVE_SVG        = NO 
     2287 
     2288# The DOT_PATH tag can be used to specify the path where the dot tool can be 
    16642289# found. If left blank, it is assumed the dot tool can be found in the path. 
    1665  
    1666 DOT_PATH               =  
    1667  
    1668 # The DOTFILE_DIRS tag can be used to specify one or more directories that  
    1669 # contain dot files that are included in the documentation (see the  
    1670 # \dotfile command). 
    1671  
    1672 DOTFILE_DIRS           =  
    1673  
    1674 # The MSCFILE_DIRS tag can be used to specify one or more directories that  
    1675 # contain msc files that are included in the documentation (see the  
    1676 # \mscfile command). 
    1677  
    1678 MSCFILE_DIRS           =  
    1679  
    1680 # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of  
    1681 # nodes that will be shown in the graph. If the number of nodes in a graph  
    1682 # becomes larger than this value, doxygen will truncate the graph, which is  
    1683 # visualized by representing a node as a red box. Note that doxygen if the  
    1684 # number of direct children of the root node in a graph is already larger than  
    1685 # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note  
    1686 # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. 
     2290# This tag requires that the tag HAVE_DOT is set to YES. 
     2291 
     2292DOT_PATH               = 
     2293 
     2294# The DOTFILE_DIRS tag can be used to specify one or more directories that 
     2295# contain dot files that are included in the documentation (see the \dotfile 
     2296# command). 
     2297# This tag requires that the tag HAVE_DOT is set to YES. 
     2298 
     2299DOTFILE_DIRS           = 
     2300 
     2301# The MSCFILE_DIRS tag can be used to specify one or more directories that 
     2302# contain msc files that are included in the documentation (see the \mscfile 
     2303# command). 
     2304 
     2305MSCFILE_DIRS           = 
     2306 
     2307# The DIAFILE_DIRS tag can be used to specify one or more directories that 
     2308# contain dia files that are included in the documentation (see the \diafile 
     2309# command). 
     2310 
     2311DIAFILE_DIRS           = 
     2312 
     2313# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the 
     2314# path where java can find the plantuml.jar file. If left blank, it is assumed 
     2315# PlantUML is not used or called during a preprocessing step. Doxygen will 
     2316# generate a warning when it encounters a \startuml command in this case and 
     2317# will not generate output for the diagram. 
     2318 
     2319PLANTUML_JAR_PATH      = 
     2320 
     2321# When using plantuml, the specified paths are searched for files specified by 
     2322# the !include statement in a plantuml block. 
     2323 
     2324PLANTUML_INCLUDE_PATH  = 
     2325 
     2326# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes 
     2327# that will be shown in the graph. If the number of nodes in a graph becomes 
     2328# larger than this value, doxygen will truncate the graph, which is visualized 
     2329# by representing a node as a red box. Note that doxygen if the number of direct 
     2330# children of the root node in a graph is already larger than 
     2331# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that 
     2332# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. 
     2333# Minimum value: 0, maximum value: 10000, default value: 50. 
     2334# This tag requires that the tag HAVE_DOT is set to YES. 
    16872335 
    16882336DOT_GRAPH_MAX_NODES    = 50 
    16892337 
    1690 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the  
    1691 # graphs generated by dot. A depth value of 3 means that only nodes reachable  
    1692 # from the root by following a path via at most 3 edges will be shown. Nodes  
    1693 # that lay further from the root node will be omitted. Note that setting this  
    1694 # option to 1 or 2 may greatly reduce the computation time needed for large  
    1695 # code bases. Also note that the size of a graph can be further restricted by  
     2338# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs 
     2339# generated by dot. A depth value of 3 means that only nodes reachable from the 
     2340# root by following a path via at most 3 edges will be shown. Nodes that lay 
     2341# further from the root node will be omitted. Note that setting this option to 1 
     2342# or 2 may greatly reduce the computation time needed for large code bases. Also 
     2343# note that the size of a graph can be further restricted by 
    16962344# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. 
     2345# Minimum value: 0, maximum value: 1000, default value: 0. 
     2346# This tag requires that the tag HAVE_DOT is set to YES. 
    16972347 
    16982348MAX_DOT_GRAPH_DEPTH    = 0 
    16992349 
    1700 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent  
    1701 # background. This is disabled by default, because dot on Windows does not  
    1702 # seem to support this out of the box. Warning: Depending on the platform used,  
    1703 # enabling this option may lead to badly anti-aliased labels on the edges of  
    1704 # a graph (i.e. they become hard to read). 
     2350# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
     2351# background. This is disabled by default, because dot on Windows does not seem 
     2352# to support this out of the box. 
     2353# 
     2354# Warning: Depending on the platform used, enabling this option may lead to 
     2355# badly anti-aliased labels on the edges of a graph (i.e. they become hard to 
     2356# read). 
     2357# The default value is: NO. 
     2358# This tag requires that the tag HAVE_DOT is set to YES. 
    17052359 
    17062360DOT_TRANSPARENT        = NO 
    17072361 
    1708 # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output  
    1709 # files in one run (i.e. multiple -o and -T options on the command line). This  
    1710 # makes dot run faster, but since only newer versions of dot (>1.8.10)  
    1711 # support this, this feature is disabled by default. 
     2362# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output 
     2363# files in one run (i.e. multiple -o and -T options on the command line). This 
     2364# makes dot run faster, but since only newer versions of dot (>1.8.10) support 
     2365# this, this feature is disabled by default. 
     2366# The default value is: NO. 
     2367# This tag requires that the tag HAVE_DOT is set to YES. 
    17122368 
    17132369DOT_MULTI_TARGETS      = NO 
    17142370 
    1715 # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will  
    1716 # generate a legend page explaining the meaning of the various boxes and  
    1717 # arrows in the dot generated graphs. 
     2371# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page 
     2372# explaining the meaning of the various boxes and arrows in the dot generated 
     2373# graphs. 
     2374# The default value is: YES. 
     2375# This tag requires that the tag HAVE_DOT is set to YES. 
    17182376 
    17192377GENERATE_LEGEND        = YES 
    17202378 
    1721 # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will  
    1722 # remove the intermediate dot files that are used to generate  
    1723 # the various graphs. 
     2379# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot 
     2380# files that are used to generate the various graphs. 
     2381# The default value is: YES. 
     2382# This tag requires that the tag HAVE_DOT is set to YES. 
    17242383 
    17252384DOT_CLEANUP            = YES 
  • XIOS/dev/dev_olga/bld.cfg

    r1021 r1054  
    3434#bld::target xios_server.exe #test_remap.exe 
    3535bld::target xios_server.exe  
    36 bld::target xios_server1.exe xios_server2.exe 
    3736#bld::target test_regular.exe 
    3837#bld::target test_new_features.exe test_unstruct_complete.exe  
  • XIOS/dev/dev_olga/src/client.cpp

    r1021 r1054  
    162162    } 
    163163 
    164     void CClient::initializeClientOnServer(const int rank, const MPI_Comm& intraCommPrmSrv, const int srvSndLeader) 
    165     { 
    166       MPI_Comm_dup(intraCommPrmSrv, &intraComm) ; 
    167       serverLeader.push_back(srvSndLeader); 
    168       int intraCommSize, intraCommRank ; 
    169       MPI_Comm_size(intraComm,&intraCommSize) ; 
    170       MPI_Comm_rank(intraComm,&intraCommRank) ; 
    171       info(50)<<"intercommCreate::client "<<rank<<" intraCommSize : "<<intraCommSize 
    172           <<" intraCommRank :"<<intraCommRank<<"  clientLeader "<< srvSndLeader<<endl ; 
    173       MPI_Intercomm_create(intraComm, 0, CXios::globalComm, srvSndLeader, 0, &interComm) ; 
    174     } 
    175  
    176  
    177164///--------------------------------------------------------------- 
    178165/*! 
     
    257244  * The only difference with CClient::registerContext() is naming of contexts on servers (appearing of pool id at the end). 
    258245  */ 
    259         void CClient::registerContextByClienOfServer(const string& id, MPI_Comm contextComm) 
    260         { 
    261           CContext::setCurrent(id) ; 
    262           CContext* context=CContext::create(id); 
    263           StdString idServer(id); 
    264           idServer += "_server_"; 
    265  
    266           int size,rank,globalRank ; 
    267           size_t message_size ; 
    268           int leaderRank ; 
    269           MPI_Comm contextInterComm ; 
    270  
    271           MPI_Comm_size(contextComm,&size) ; 
    272           MPI_Comm_rank(contextComm,&rank) ; 
    273           MPI_Comm_rank(CXios::globalComm,&globalRank) ; 
    274           if (rank!=0) globalRank=0 ; 
    275  
    276           CMessage msg ; 
    277  
    278           int messageSize ; 
    279           void * buff ; 
    280  
    281           for (int i = 0; i < serverLeader.size(); ++i) 
    282           { 
    283             StdString str = idServer + boost::lexical_cast<string>(i); 
    284             msg<<str<<size<<globalRank ; 
    285             messageSize = msg.size() ; 
    286             buff = new char[messageSize] ; 
    287             CBufferOut buffer(buff,messageSize) ; 
    288             buffer<<msg ; 
    289  
    290             MPI_Send(buff, buffer.count(), MPI_CHAR, serverLeader[i], 1, CXios::globalComm) ; 
    291             MPI_Intercomm_create(contextComm, 0, CXios::globalComm, serverLeader[i], 10+globalRank, &contextInterComm) ; 
    292             info(10)<<"Register new Context : "<<id<<endl ; 
    293             MPI_Comm inter ; 
    294             MPI_Intercomm_merge(contextInterComm,0,&inter) ; 
    295             MPI_Barrier(inter) ; 
    296  
    297             context->initClient(contextComm,contextInterComm) ; 
    298  
    299             contextInterComms.push_back(contextInterComm); 
    300             MPI_Comm_free(&inter); 
    301             delete [] buff ; 
    302           } 
    303         } 
     246//        void CClient::registerContextByClientOfServer(const string& id, MPI_Comm contextComm) 
     247//        { 
     248//          CContext::setCurrent(id) ; 
     249//          CContext* context=CContext::create(id); 
     250//          StdString idServer(id); 
     251//          idServer += "_server_"; 
     252// 
     253//          int size,rank,globalRank ; 
     254//          size_t message_size ; 
     255//          int leaderRank ; 
     256//          MPI_Comm contextInterComm ; 
     257// 
     258//          MPI_Comm_size(contextComm,&size) ; 
     259//          MPI_Comm_rank(contextComm,&rank) ; 
     260//          MPI_Comm_rank(CXios::globalComm,&globalRank) ; 
     261//          if (rank!=0) globalRank=0 ; 
     262// 
     263//          CMessage msg ; 
     264// 
     265//          int messageSize ; 
     266//          void * buff ; 
     267// 
     268//          for (int i = 0; i < serverLeader.size(); ++i) 
     269//          { 
     270//            StdString str = idServer + boost::lexical_cast<string>(i); 
     271//            msg<<str<<size<<globalRank ; 
     272//            messageSize = msg.size() ; 
     273//            buff = new char[messageSize] ; 
     274//            CBufferOut buffer(buff,messageSize) ; 
     275//            buffer<<msg ; 
     276// 
     277//            MPI_Send(buff, buffer.count(), MPI_CHAR, serverLeader[i], 1, CXios::globalComm) ; 
     278//            MPI_Intercomm_create(contextComm, 0, CXios::globalComm, serverLeader[i], 10+globalRank, &contextInterComm) ; 
     279//            info(10)<<"Register new Context : "<<id<<endl ; 
     280//            MPI_Comm inter ; 
     281//            MPI_Intercomm_merge(contextInterComm,0,&inter) ; 
     282//            MPI_Barrier(inter) ; 
     283// 
     284//            context->initClient(contextComm,contextInterComm) ; 
     285// 
     286////            contextInterComms.push_back(contextInterComm); 
     287//            MPI_Comm_free(&inter); 
     288//            delete [] buff ; 
     289//          } 
     290//        } 
    304291 
    305292    void CClient::finalize(void) 
  • XIOS/dev/dev_olga/src/client.hpp

    r1021 r1054  
    1111      public: 
    1212        static void initialize(const string& codeId, MPI_Comm& localComm, MPI_Comm& returnComm); 
    13         static void initializeClientOnServer(const int rank, const MPI_Comm& localComm, const int srvSndLeader); 
    1413 
    1514        static void finalize(void); 
    1615        static void registerContext(const string& id, MPI_Comm contextComm); 
    17         static void registerContextByClienOfServer(const string& id, MPI_Comm contextComm); 
     16//        static void registerContextByClientOfServer(const string& id, MPI_Comm contextComm); 
    1817 
    1918        static MPI_Comm intraComm; 
  • XIOS/dev/dev_olga/src/client_server_mapping_distributed.cpp

    r907 r1054  
    3939{ 
    4040  CContext* context=CContext::getCurrent() ; 
    41   CContextClient* client=context->client ; 
     41//  CContextClient* client=context->client ; 
     42  // For now the assumption is that secondary server pools consist of the same number of procs. 
     43  // CHANGE the line below if the assumption changes. 
     44  CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[0] : context->client; 
    4245  int nbServer=client->serverSize; 
    4346 
  • XIOS/dev/dev_olga/src/context_client.cpp

    r1021 r1054  
    8484    { 
    8585      list<int> ranks = event.getRanks(); 
     86 
    8687      if (!event.isEmpty()) 
    8788      { 
    8889        list<int> sizes = event.getSizes(); 
    8990 
    90         list<CBufferOut*> buffList = getBuffers(ranks, sizes); 
    91  
    92         event.send(timeLine, sizes, buffList); 
    93  
    94         checkBuffers(ranks); 
    95       } 
    96  
    97       if (isAttachedModeEnabled()) 
    98       { 
    99         waitEvent(ranks); 
    100         CContext::setCurrent(context->getId()); 
     91        // We force the getBuffers call to be non-blocking on the servers 
     92        list<CBufferOut*> buffList; 
     93        bool couldBuffer = getBuffers(ranks, sizes, buffList, !CXios::isClient); 
     94//        bool couldBuffer = getBuffers(ranks, sizes, buffList, CXios::isServer); 
     95 
     96        if (couldBuffer) 
     97        { 
     98          event.send(timeLine, sizes, buffList); 
     99 
     100          checkBuffers(ranks); 
     101 
     102          if (isAttachedModeEnabled()) // couldBuffer is always true in attached mode 
     103          { 
     104            waitEvent(ranks); 
     105            CContext::setCurrent(context->getId()); 
     106          } 
     107        } 
     108        else 
     109        { 
     110          tmpBufferedEvent.ranks = ranks; 
     111          tmpBufferedEvent.sizes = sizes; 
     112 
     113          for (list<int>::const_iterator it = sizes.begin(); it != sizes.end(); it++) 
     114            tmpBufferedEvent.buffers.push_back(new CBufferOut(*it)); 
     115 
     116          event.send(timeLine, tmpBufferedEvent.sizes, tmpBufferedEvent.buffers); 
     117        } 
    101118      } 
    102119 
    103120      timeLine++; 
     121    } 
     122 
     123    /*! 
     124     * Send the temporarily buffered event (if any). 
     125     * 
     126     * \return true if a temporarily buffered event could be sent, false otherwise 
     127     */ 
     128    bool CContextClient::sendTemporarilyBufferedEvent() 
     129    { 
     130      bool couldSendTmpBufferedEvent = false; 
     131 
     132      if (hasTemporarilyBufferedEvent()) 
     133      { 
     134        list<CBufferOut*> buffList; 
     135        if (getBuffers(tmpBufferedEvent.ranks, tmpBufferedEvent.sizes, buffList, true)) // Non-blocking call 
     136        { 
     137          list<CBufferOut*>::iterator it, itBuffer; 
     138 
     139          for (it = tmpBufferedEvent.buffers.begin(), itBuffer = buffList.begin(); it != tmpBufferedEvent.buffers.end(); it++, itBuffer++) 
     140            (*itBuffer)->put((char*)(*it)->start(), (*it)->count()); 
     141 
     142          checkBuffers(tmpBufferedEvent.ranks); 
     143 
     144          tmpBufferedEvent.clear(); 
     145 
     146          couldSendTmpBufferedEvent = true; 
     147        } 
     148      } 
     149 
     150      return couldSendTmpBufferedEvent; 
    104151    } 
    105152 
     
    124171    } 
    125172 
    126     /*! 
    127     Setup buffer for each connection to server and verify their state to put content into them 
    128     \param [in] serverList list of rank of connected server 
    129     \param [in] sizeList size of message corresponding to each connection 
    130     \return List of buffer input which event can be placed 
    131     */ 
    132     list<CBufferOut*> CContextClient::getBuffers(list<int>& serverList, list<int>& sizeList) 
    133     { 
    134       list<int>::iterator itServer, itSize; 
     173 
     174    /*! 
     175     * Get buffers for each connection to the servers. This function blocks until there is enough room in the buffers unless 
     176     * it is explicitly requested to be non-blocking. 
     177     * 
     178     * \param [in] serverList list of rank of connected server 
     179     * \param [in] sizeList size of message corresponding to each connection 
     180     * \param [out] retBuffers list of buffers that can be used to store an event 
     181     * \param [in] nonBlocking whether this function should be non-blocking 
     182     * \return whether the already allocated buffers could be used 
     183    */ 
     184    bool CContextClient::getBuffers(const list<int>& serverList, const list<int>& sizeList, list<CBufferOut*>& retBuffers, bool nonBlocking /*= false*/) 
     185    { 
     186      list<int>::const_iterator itServer, itSize; 
    135187      list<CClientBuffer*> bufferList; 
    136       map<int,CClientBuffer*>::iterator it; 
     188      map<int,CClientBuffer*>::const_iterator it; 
    137189      list<CClientBuffer*>::iterator itBuffer; 
    138       list<CBufferOut*>  retBuffer; 
    139190      bool areBuffersFree; 
    140191 
     
    160211        { 
    161212          checkBuffers(); 
    162           context->server->listen(); 
    163         } 
    164       } while (!areBuffersFree); 
     213//          if (?) 
     214//          { 
     215//            for (int i = 0; i < context->serverPrimServer.size(); ++i) 
     216//              context->serverPrimServer[i]->listen(); 
     217//          } 
     218//          else 
     219            context->server->listen(); 
     220        } 
     221      } while (!areBuffersFree && !nonBlocking); 
    165222      CTimer::get("Blocking time").suspend(); 
    166223 
    167       for (itBuffer = bufferList.begin(), itSize = sizeList.begin(); itBuffer != bufferList.end(); itBuffer++, itSize++) 
    168       { 
    169         retBuffer.push_back((*itBuffer)->getBuffer(*itSize)); 
    170       } 
    171       return retBuffer; 
     224      if (areBuffersFree) 
     225      { 
     226        for (itBuffer = bufferList.begin(), itSize = sizeList.begin(); itBuffer != bufferList.end(); itBuffer++, itSize++) 
     227          retBuffers.push_back((*itBuffer)->getBuffer(*itSize)); 
     228      } 
     229 
     230      return areBuffersFree; 
    172231   } 
    173232 
     
    299358   Finalize context client and do some reports 
    300359   */ 
    301    void CContextClient::finalize(void) 
    302    { 
    303      map<int,CClientBuffer*>::iterator itBuff; 
    304      bool stop = true; 
    305  
    306      CEventClient event(CContext::GetType(), CContext::EVENT_ID_CONTEXT_FINALIZE); 
    307      if (isServerLeader()) 
    308      { 
    309        CMessage msg; 
    310        const std::list<int>& ranks = getRanksServerLeader(); 
    311        for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    312          event.push(*itRank, 1, msg); 
    313        sendEvent(event); 
    314      } 
    315      else sendEvent(event); 
    316  
    317      CTimer::get("Blocking time").resume(); 
    318      while (stop) 
    319      { 
    320        checkBuffers(); 
    321        stop = false; 
    322        for (itBuff = buffers.begin(); itBuff != buffers.end(); itBuff++) stop |= itBuff->second->hasPendingRequest(); 
    323      } 
    324      CTimer::get("Blocking time").suspend(); 
    325  
    326      std::map<int,StdSize>::const_iterator itbMap = mapBufferSize_.begin(), 
    327                                            iteMap = mapBufferSize_.end(), itMap; 
    328      StdSize totalBuf = 0; 
    329      for (itMap = itbMap; itMap != iteMap; ++itMap) 
    330      { 
    331        report(10) << " Memory report : Context <" << context->getId() << "> : client side : memory used for buffer of each connection to server" << endl 
    332                   << "  +) To server with rank " << itMap->first << " : " << itMap->second << " bytes " << endl; 
    333        totalBuf += itMap->second; 
    334      } 
    335      report(0) << " Memory report : Context <" << context->getId() << "> : client side : total memory used for buffer " << totalBuf << " bytes" << endl; 
    336  
    337      releaseBuffers(); 
    338    } 
     360  void CContextClient::finalize(void) 
     361  { 
     362    map<int,CClientBuffer*>::iterator itBuff; 
     363    bool stop = false; 
     364 
     365    CTimer::get("Blocking time").resume(); 
     366    while (hasTemporarilyBufferedEvent()) 
     367    { 
     368      checkBuffers(); 
     369      sendTemporarilyBufferedEvent(); 
     370    } 
     371    CTimer::get("Blocking time").suspend(); 
     372 
     373    CEventClient event(CContext::GetType(), CContext::EVENT_ID_CONTEXT_FINALIZE); 
     374    if (isServerLeader()) 
     375    { 
     376      CMessage msg; 
     377      const std::list<int>& ranks = getRanksServerLeader(); 
     378      for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     379        event.push(*itRank, 1, msg); 
     380      sendEvent(event); 
     381    } 
     382    else sendEvent(event); 
     383 
     384    CTimer::get("Blocking time").resume(); 
     385    while (!stop) 
     386    { 
     387      checkBuffers(); 
     388      if (hasTemporarilyBufferedEvent()) 
     389        sendTemporarilyBufferedEvent(); 
     390 
     391      stop = true; 
     392      for (itBuff = buffers.begin(); itBuff != buffers.end(); itBuff++) stop &= !itBuff->second->hasPendingRequest(); 
     393    } 
     394    CTimer::get("Blocking time").suspend(); 
     395 
     396    std::map<int,StdSize>::const_iterator itbMap = mapBufferSize_.begin(), 
     397                                          iteMap = mapBufferSize_.end(), itMap; 
     398    StdSize totalBuf = 0; 
     399    for (itMap = itbMap; itMap != iteMap; ++itMap) 
     400    { 
     401      report(10) << " Memory report : Context <" << context->getId() << "> : client side : memory used for buffer of each connection to server" << endl 
     402                 << "  +) To server with rank " << itMap->first << " : " << itMap->second << " bytes " << endl; 
     403      totalBuf += itMap->second; 
     404    } 
     405    report(0) << " Memory report : Context <" << context->getId() << "> : client side : total memory used for buffer " << totalBuf << " bytes" << endl; 
     406 
     407    releaseBuffers(); 
     408  } 
    339409} 
  • XIOS/dev/dev_olga/src/context_client.hpp

    r1021 r1054  
    3131      // Send event to server 
    3232      void sendEvent(CEventClient& event); 
     33      bool sendTemporarilyBufferedEvent(); 
    3334      void waitEvent(list<int>& ranks); 
    3435 
    35       // Functions relates to set/get buffers 
    36       list<CBufferOut*> getBuffers(list<int>& serverlist, list<int>& sizeList); 
     36      // Functions to set/get buffers 
     37      bool getBuffers(const list<int>& serverList, const list<int>& sizeList, list<CBufferOut*>& retBuffers, bool nonBlocking = false); 
    3738      void newBuffer(int rank); 
    3839      bool checkBuffers(list<int>& ranks); 
     
    4647 
    4748      bool isAttachedModeEnabled() const; 
     49      bool hasTemporarilyBufferedEvent() const { return !tmpBufferedEvent.isEmpty(); }; 
    4850 
    4951      // Close and finalize context client 
    50       void closeContext(void); 
     52//      void closeContext(void);  Never been implemented. 
    5153      void finalize(void); 
    5254 
     
    6870      MPI_Comm intraComm; //!< Communicator of client group 
    6971 
    70       map<int,CClientBuffer*> buffers; //!< Buffers for connection to servers 
     72      map<int,CClientBuffer*> buffers;     //!< Buffers for connection to servers 
    7173 
    7274    private: 
     
    7577      //! Maximum number of events that can be buffered 
    7678      StdSize maxBufferedEvents; 
     79 
     80      struct { 
     81        std::list<int> ranks, sizes; 
     82        std::list<CBufferOut*> buffers; 
     83 
     84        bool isEmpty() const { return ranks.empty(); }; 
     85        void clear() { 
     86          ranks.clear(); 
     87          sizes.clear(); 
     88 
     89          for (std::list<CBufferOut*>::iterator it = buffers.begin(); it != buffers.end(); it++) 
     90            delete *it; 
     91 
     92          buffers.clear(); 
     93        }; 
     94      } tmpBufferedEvent; //! Event temporarily buffered (used only on the server) 
    7795 
    7896      //! Context for server (Only used in attached mode) 
  • XIOS/dev/dev_olga/src/context_server.cpp

    r1021 r1054  
    2222namespace xios 
    2323{ 
     24  StdSize CContextServer::totalBuf_ = 0; 
    2425 
    2526  CContextServer::CContextServer(CContext* parent, MPI_Comm intraComm_,MPI_Comm interComm_) 
     
    2930    MPI_Comm_size(intraComm,&intraCommSize); 
    3031    MPI_Comm_rank(intraComm,&intraCommRank); 
     32 
    3133    interComm=interComm_; 
    3234    int flag; 
     
    3840    scheduled=false; 
    3941    finished=false; 
    40  
    4142    boost::hash<string> hashString; 
    4243    hashId=hashString(context->getId()); 
    43  
    44   } 
    45  
    46 //  CContextServer::CContextServer(CContext* parent, int srvLvl, MPI_Comm intraComm_,MPI_Comm interComm_) 
    47 //  { 
    48 //    context=parent; 
    49 //    intraComm=intraComm_; 
    50 //    MPI_Comm_size(intraComm,&intraCommSize); 
    51 //    MPI_Comm_rank(intraComm,&intraCommRank); 
    52 //    interComm=interComm_; 
    53 //    int flag; 
    54 //    MPI_Comm_test_inter(interComm,&flag); 
    55 //    if (flag) MPI_Comm_remote_size(interComm,&commSize); 
    56 //    else  MPI_Comm_size(interComm,&commSize); 
    57 // 
    58 //    currentTimeLine=0; 
    59 //    scheduled=false; 
    60 //    finished=false; 
    61 // 
    62 //    boost::hash<string> hashString; 
    63 //    StdString contextId = context->getId(); 
    64 //    hashId=hashString(contextId); 
    65 // 
    66 //  } 
     44  } 
     45 
    6746  void CContextServer::setPendingEvent(void) 
    6847  { 
     
    7049  } 
    7150 
     51 
    7252  bool CContextServer::hasPendingEvent(void) 
    7353  { 
     
    8060  } 
    8161 
    82   bool CContextServer::eventLoop(void) 
     62  bool CContextServer::eventLoop(bool enableEventsProcessing /*= true*/) 
    8363  { 
    8464    listen(); 
    8565    checkPendingRequest(); 
    86     processEvents(); 
     66    if (enableEventsProcessing) 
     67      processEvents(); 
    8768    return finished; 
    8869  } 
     
    188169    map<size_t,CEventServer*>::iterator it; 
    189170    CEventServer* event; 
     171    boost::hash<string> hashString; 
     172    size_t hashId=hashString(context->getId()); 
    190173 
    191174    it=events.find(currentTimeLine); 
     
    224207  { 
    225208    map<int,CServerBuffer*>::iterator it; 
    226     for(it=buffers.begin();it!=buffers.end();++it) delete it->second; 
    227   } 
    228  
     209    for(it=buffers.begin();it!=buffers.end();++it) 
     210      delete it->second; 
     211  } 
    229212 
    230213  void CContextServer::dispatchEvent(CEventServer& event) 
     
    235218    int rank; 
    236219    list<CEventServer::SSubEvent>::iterator it; 
    237     CContext::setCurrent(context->getId()); 
     220//    CContext::setCurrent(context->getId()); 
     221    StdString ctxId = context->getId(); 
     222    CContext::setCurrent(ctxId); 
    238223 
    239224    if (event.classId==CContext::GetType() && event.type==CContext::EVENT_ID_CONTEXT_FINALIZE) 
     
    243228      std::map<int, StdSize>::const_iterator itbMap = mapBufferSize_.begin(), 
    244229                           iteMap = mapBufferSize_.end(), itMap; 
    245       StdSize totalBuf = 0; 
    246230      for (itMap = itbMap; itMap != iteMap; ++itMap) 
    247231      { 
    248         report(10)<< " Memory report : Context <"<<context->getId()<<"> : server side : memory used for buffer of each connection to client" << endl 
    249             << "  +) With client of rank " << itMap->first << " : " << itMap->second << " bytes " << endl; 
    250         totalBuf += itMap->second; 
     232        rank = itMap->first; 
     233        report(10)<< " Memory report : Context <"<<ctxId<<"> : server side : memory used for buffer of each connection to client" << endl 
     234            << "  +) With client of rank " << rank << " : " << itMap->second << " bytes " << endl; 
     235        totalBuf_ += itMap->second; 
    251236      } 
    252237      context->finalize(); 
    253       report(0)<< " Memory report : Context <"<<context->getId()<<"> : server side : total memory used for buffer "<<totalBuf<<" bytes"<<endl; 
     238 
     239//      report(0)<< " Memory report : Context <"<<ctxId<<"> : server side : total memory used for buffer "<<totalBuf<<" bytes"<<endl; 
    254240    } 
    255241    else if (event.classId==CContext::GetType()) CContext::dispatchEvent(event); 
     
    274260    } 
    275261  } 
     262 
     263  size_t CContextServer::getTotalBuf(void) 
     264  { 
     265    return totalBuf_; 
     266  } 
     267 
    276268} 
  • XIOS/dev/dev_olga/src/context_server.hpp

    r992 r1054  
    1515 
    1616    CContextServer(CContext* parent, MPI_Comm intraComm, MPI_Comm interComm) ; 
    17     CContextServer(CContext* parent, int srvLvl, MPI_Comm intraComm, MPI_Comm interComm) ; 
    18     bool eventLoop(void) ; 
     17 
     18    bool eventLoop(bool enableEventsProcessing = true); 
    1919    void listen(void) ; 
    2020    void checkPendingRequest(void) ; 
    21     void processRequest(int rank, char* buff,int count) ; 
    2221    void processEvents(void) ; 
     22    bool hasFinished(void); 
    2323    void dispatchEvent(CEventServer& event) ; 
    2424    void setPendingEvent(void) ; 
    2525    bool hasPendingEvent(void) ; 
    26     bool hasFinished(void); 
     26 
     27    void processRequest(int rank, char* buff,int count) ; 
    2728 
    2829    MPI_Comm intraComm ; 
     
    4546    bool scheduled  ;    /*!< event of current timeline is alreading scheduled ? */ 
    4647    size_t hashId ; 
     48 
     49    static size_t getTotalBuf(void); 
     50 
    4751    ~CContextServer() ; 
    4852 
    4953    private: 
    50       std::map<int, StdSize> mapBufferSize_; 
     54    std::map<int, StdSize> mapBufferSize_; 
     55    static size_t totalBuf_ ;  /*!< Total memory allocated by servers per context.*/ 
    5156 
    5257  } ; 
  • XIOS/dev/dev_olga/src/cxios.cpp

    r1021 r1054  
    136136 
    137137  //! Initialize server then put it into listening state 
    138   void CXios::initServerSide(int serverLvl) 
     138  void CXios::initServerSide(void) 
    139139  { 
    140140    initServer(); 
    141  
    142 //    if (serverLvl == 1) 
    143 //      isClient = true; 
    144 //    else 
    145 //      isClient = false; 
    146 // 
    147 //    isServer = true; 
    148 //    serverLevel = serverLvl; 
    149  
    150  
    151141 
    152142    // Initialize all aspects MPI 
     
    163153    { 
    164154      if (CServer::serverLevel == 0) 
    165 //      if (CXios::serverLevel == 0) 
    166155      { 
    167156        CServer::openInfoStream(serverFile); 
     
    169158      } 
    170159      else if (CServer::serverLevel == 1) 
    171 //      else if (CXios::serverLevel == 1) 
    172160      { 
    173161        CServer::openInfoStream(serverPrmFile); 
  • XIOS/dev/dev_olga/src/cxios.hpp

    r1021 r1054  
    1616     static void initialize(void) ; 
    1717     static void initClientSide(const string & codeId, MPI_Comm& localComm, MPI_Comm& returnComm) ; 
    18      static void initServerSide(int serverLevel) ; 
     18     static void initServerSide(void) ; 
    1919     static void clientFinalize(void) ; 
    2020     static void parseFile(const string& filename) ; 
  • XIOS/dev/dev_olga/src/distribution_server.hpp

    r1025 r1054  
    4141    const std::vector<int>& getZoomSizeServer() const; 
    4242    const GlobalLocalMap& getGlobalLocalIndex() const { return globalLocalIndexMap_; } 
    43     const std::vector<CArray<int,1> >& getGlobalIndexEachDimension() const;  
     43    const std::vector<CArray<int,1> >& getGlobalIndexEachDimension() const {return globalIndexEachDimension_;} 
    4444 
    4545    virtual CArray<size_t,1> computeLocalIndex(const CArray<size_t,1>& globalIndex); 
  • XIOS/dev/dev_olga/src/interface/c/icdata.cpp

    r983 r1054  
    4747   } 
    4848 
    49    void cxios_init_server(int server_level) 
    50    { 
    51      CXios::initServerSide(server_level); 
     49   void cxios_init_server(void) 
     50   { 
     51     CXios::initServerSide(); 
    5252   } 
    5353 
  • XIOS/dev/dev_olga/src/interface/fortran/idata.F90

    r983 r1054  
    77   INTERFACE ! Ne pas appeler directement/Interface FORTRAN 2003 <-> C99 
    88 
    9       SUBROUTINE  cxios_init_server(server_level) BIND(C) 
    10          USE ISO_C_BINDING 
    11          INTEGER  (kind = C_INT)    , VALUE         :: server_level 
     9      SUBROUTINE  cxios_init_server() BIND(C) 
     10         USE ISO_C_BINDING 
    1211      END SUBROUTINE cxios_init_server 
    1312 
     
    453452   CONTAINS ! Fonctions disponibles pour les utilisateurs. 
    454453 
    455    SUBROUTINE  xios(init_server)(server_level) 
    456    IMPLICIT NONE 
    457        INTEGER  (kind = C_INT), INTENT(IN)         :: server_level 
    458        CALL cxios_init_server(server_level) 
     454   SUBROUTINE  xios(init_server)() 
     455   IMPLICIT NONE 
     456       CALL cxios_init_server() 
    459457   END SUBROUTINE xios(init_server) 
    460458 
  • XIOS/dev/dev_olga/src/io/nc4_data_output.cpp

    r1030 r1054  
    231231                       SuperClassWriter::writeData(CArray<double,1>(lat.copy()), latid, isCollective, 0); 
    232232                       CArray<double,1> lon = domain->lonvalue(Range(0,local_size_write[1])) ; 
     233//                       CArray<double,1> lon = domain->lonvalue(Range(0,local_size_write[1]-1)) ; 
    233234                       SuperClassWriter::writeData(CArray<double,1>(lon.copy()), lonid, isCollective, 0); 
    234235                       break; 
  • XIOS/dev/dev_olga/src/node/axis.cpp

    r1030 r1054  
    174174   std::map<int, StdSize> CAxis::getAttributesBufferSize() 
    175175   { 
    176      CContextClient* client = CContext::getCurrent()->client; 
     176//     CContextClient* client = CContext::getCurrent()->client; 
     177     // For now the assumption is that secondary server pools consist of the same number of procs. 
     178     // CHANGE the line below if the assumption changes. 
     179     CContext* context = CContext::getCurrent(); 
     180     CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[0] : context->client; 
    177181 
    178182     std::map<int, StdSize> attributesSizes = getMinimumBufferSizeForAttributes(); 
     
    455459    // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    456460    int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 1) : 1; 
    457     for (int i = 0; i < nbSrvPools; ++i) 
    458     { 
    459       CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[i] : context->client; 
     461    for (int p = 0; p < nbSrvPools; ++p) 
     462    { 
     463      CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[p] : context->client; 
    460464      int nbServer = client->serverSize; 
    461465      int range, clientSize = client->clientSize; 
     
    751755    // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    752756    int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 1) : 1; 
    753     for (int i = 0; i < nbSrvPools; ++i) 
    754     { 
    755       CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[i] : context->client; 
     757    for (int p = 0; p < nbSrvPools; ++p) 
     758    { 
     759      CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[p] : context->client; 
    756760 
    757761      CEventClient event(getType(), EVENT_ID_NON_DISTRIBUTED_ATTRIBUTES); 
     
    857861    //int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    858862    int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 1) : 1; 
    859     for (int i = 0; i < nbSrvPools; ++i) 
    860     { 
    861       CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[i] : context->client; 
     863    for (int p = 0; p < nbSrvPools; ++p) 
     864    { 
     865      CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[p] : context->client; 
    862866 
    863867      CEventClient eventData(getType(), EVENT_ID_DISTRIBUTED_ATTRIBUTES); 
  • XIOS/dev/dev_olga/src/node/context.cpp

    r1030 r1054  
    249249 
    250250     hasClient = true; 
     251 
    251252     if (CServer::serverLevel != 1) 
    252 //     if (CXios::serverLevel != 1) 
    253      // initClient is called by client pool 
     253     // initClient is called by client 
    254254     { 
    255255       client = new CContextClient(this, intraComm, interComm, cxtServer); 
    256256       server = new CContextServer(this, intraComm, interComm); 
    257      } 
     257       MPI_Comm intraCommServer, interCommServer; 
     258       if (cxtServer) // Attached mode 
     259       { 
     260         intraCommServer = intraComm; 
     261         interCommServer = interComm; 
     262       } 
     263       else 
     264       { 
     265//         MPI_Comm_dup(intraComm, &intraCommServer); 
     266//         comms.push_back(intraCommServer); 
     267//         MPI_Comm_dup(interComm, &interCommServer); 
     268//         comms.push_back(interCommServer); 
     269       } 
     270     } 
     271 
    258272     else 
    259      // initClient is called by primary server pool 
     273     // initClient is called by primary server 
    260274     { 
    261275       clientPrimServer.push_back(new CContextClient(this, intraComm, interComm)); 
     
    263277     } 
    264278 
    265      registryIn=new CRegistry(intraComm); 
    266      registryIn->setPath(getId()) ; 
    267      if (client->clientRank==0) registryIn->fromFile("xios_registry.bin") ; 
    268      registryIn->bcastRegistry() ; 
    269  
    270      registryOut=new CRegistry(intraComm) ; 
    271      registryOut->setPath(getId()) ; 
    272  
    273      MPI_Comm intraCommServer, interCommServer; 
    274      if (cxtServer) // Attached mode 
    275      { 
    276        intraCommServer = intraComm; 
    277        interCommServer = interComm; 
    278      } 
    279      else 
    280      { 
    281        MPI_Comm_dup(intraComm, &intraCommServer); 
    282        comms.push_back(intraCommServer); 
    283        MPI_Comm_dup(interComm, &interCommServer); 
    284        comms.push_back(interCommServer); 
    285      } 
     279 
     280 
     281//     registryIn=new CRegistry(intraComm); 
     282//     registryIn->setPath(getId()) ; 
     283//     if (client->clientRank==0) registryIn->fromFile("xios_registry.bin") ; 
     284//     registryIn->bcastRegistry() ; 
     285// 
     286//     registryOut=new CRegistry(intraComm) ; 
     287//     registryOut->setPath(getId()) ; 
     288 
     289 
    286290   } 
    287291 
     
    353357//     client = new CContextClient(this,intraComm,interComm, cxtClient); 
    354358 
    355      registryIn=new CRegistry(intraComm); 
    356      registryIn->setPath(getId()) ; 
    357      if (server->intraCommRank==0) registryIn->fromFile("xios_registry.bin") ; 
    358      registryIn->bcastRegistry() ; 
    359      registryOut=new CRegistry(intraComm) ; 
    360      registryOut->setPath(getId()) ; 
     359//     registryIn=new CRegistry(intraComm); 
     360//     registryIn->setPath(getId()) ; 
     361//     if (server->intraCommRank==0) registryIn->fromFile("xios_registry.bin") ; 
     362//     registryIn->bcastRegistry() ; 
     363//     registryOut=new CRegistry(intraComm) ; 
     364//     registryOut->setPath(getId()) ; 
    361365 
    362366     MPI_Comm intraCommClient, interCommClient; 
     
    368372     else 
    369373     { 
    370        MPI_Comm_dup(intraComm, &intraCommClient); 
    371        comms.push_back(intraCommClient); 
    372        MPI_Comm_dup(interComm, &interCommClient); 
    373        comms.push_back(interCommClient); 
     374//       MPI_Comm_dup(intraComm, &intraCommClient); 
     375//       comms.push_back(intraCommClient); 
     376//       MPI_Comm_dup(interComm, &interCommClient); 
     377//       comms.push_back(interCommClient); 
    374378     } 
    375379 
     
    377381 
    378382   //! Server side: Put server into a loop in order to listen message from client 
    379    bool CContext::eventLoop(void) 
    380    { 
    381      if (CServer::serverLevel == 0) 
    382      { 
    383        return server->eventLoop(); 
    384      } 
    385      else if (CServer::serverLevel == 1) 
    386      { 
    387        bool serverFinished = server->eventLoop(); 
    388        bool serverPrimFinished = true; 
    389        for (int i = 0; i < serverPrimServer.size(); ++i) 
    390        { 
    391          serverPrimFinished *= serverPrimServer[i]->eventLoop(); 
    392        } 
    393        return ( serverFinished && serverPrimFinished); 
    394      } 
    395      else 
    396      { 
    397        return server->eventLoop(); 
    398      } 
    399    } 
     383//   bool CContext::eventLoop(void) 
     384//   { 
     385//     if (CServer::serverLevel == 0) 
     386//     { 
     387//       return server->eventLoop(); 
     388//     } 
     389//     else if (CServer::serverLevel == 1) 
     390//     { 
     391//       bool serverFinished = server->eventLoop(); 
     392//       bool serverPrimFinished = true; 
     393//       for (int i = 0; i < serverPrimServer.size(); ++i) 
     394//       { 
     395//         serverPrimFinished *= serverPrimServer[i]->eventLoop(); 
     396//       } 
     397//       return ( serverFinished && serverPrimFinished); 
     398//     } 
     399//     else 
     400//     { 
     401//       return server->eventLoop(); 
     402//     } 
     403//   } 
    400404 
    401405   //! Try to send the buffers and receive possible answers 
     
    405409     { 
    406410       client->checkBuffers(); 
    407        return server->eventLoop(); 
    408      } 
     411       bool hasTmpBufferedEvent = client->hasTemporarilyBufferedEvent(); 
     412       if (hasTmpBufferedEvent) 
     413         hasTmpBufferedEvent = !client->sendTemporarilyBufferedEvent(); 
     414 
     415       // Don't process events if there is a temporarily buffered event 
     416       return server->eventLoop(!hasTmpBufferedEvent); 
     417     } 
     418 
    409419     else if (CServer::serverLevel == 1) 
    410420     { 
    411421       client->checkBuffers(); 
     422       bool hasTmpBufferedEvent = client->hasTemporarilyBufferedEvent(); 
     423       if (hasTmpBufferedEvent) 
     424         hasTmpBufferedEvent = !client->sendTemporarilyBufferedEvent(); 
     425       bool serverFinished = server->eventLoop(!hasTmpBufferedEvent); 
     426 
     427       bool serverPrimFinished = true; 
    412428       for (int i = 0; i < clientPrimServer.size(); ++i) 
     429       { 
    413430         clientPrimServer[i]->checkBuffers(); 
    414        bool serverFinished = server->eventLoop(); 
    415        bool serverPrimFinished = true; 
    416        for (int i = 0; i < serverPrimServer.size(); ++i) 
    417        { 
    418          serverPrimFinished *= serverPrimServer[i]->eventLoop(); 
     431         bool hasTmpBufferedEventPrim = clientPrimServer[i]->hasTemporarilyBufferedEvent(); 
     432         if (hasTmpBufferedEventPrim) 
     433           hasTmpBufferedEventPrim = !clientPrimServer[i]->sendTemporarilyBufferedEvent(); 
     434         serverPrimFinished *= serverPrimServer[i]->eventLoop(hasTmpBufferedEventPrim); 
    419435       } 
    420436       return ( serverFinished && serverPrimFinished); 
    421437     } 
     438 
    422439     else if (CServer::serverLevel == 2) 
    423440     { 
    424441       client->checkBuffers(); 
    425        return server->eventLoop(); 
     442       bool hasTmpBufferedEvent = client->hasTemporarilyBufferedEvent(); 
     443       if (hasTmpBufferedEvent) 
     444         hasTmpBufferedEvent = !client->sendTemporarilyBufferedEvent(); 
     445       return server->eventLoop(!hasTmpBufferedEvent); 
    426446     } 
    427447   } 
     
    433453     { 
    434454       finalized = true; 
    435        if (hasClient) sendRegistry() ; 
     455//       if (hasClient) sendRegistry() ; 
     456 
     457       client->finalize(); 
     458       while (!server->hasFinished()) 
     459       { 
     460         server->eventLoop(); 
     461       } 
    436462 
    437463       if ((hasClient) && (hasServer)) 
     
    450476       } 
    451477 
    452        client->finalize(); 
    453        while (!server->hasFinished()) 
    454        { 
    455          server->eventLoop(); 
    456        } 
    457  
    458        if (hasServer) 
     478       report(0)<< " Memory report : Context <"<<getId()<<"> : server side : total memory used for buffers "<<CContextServer::getTotalBuf()<<" bytes"<<endl; 
     479 
     480//       if (hasServer) 
     481       if (hasServer && !hasClient) 
    459482       { 
    460483         closeAllFile(); 
    461          registryOut->hierarchicalGatherRegistry() ; 
    462          if (server->intraCommRank==0) CXios::globalRegistry->mergeRegistry(*registryOut) ; 
     484//         registryOut->hierarchicalGatherRegistry() ; 
     485//         if (server->intraCommRank==0) CXios::globalRegistry->mergeRegistry(*registryOut) ; 
    463486       } 
    464487 
     
    472495         MPI_Comm_free(&(*it)); 
    473496       comms.clear(); 
    474  
    475497 
    476498      } 
     
    16271649  } 
    16281650 
     1651  bool CContext::isFinalized(void) 
     1652  { 
     1653    return finalized; 
     1654  } 
     1655 
    16291656} // namespace xios 
  • XIOS/dev/dev_olga/src/node/context.hpp

    r1025 r1054  
    9595 
    9696         // Put sever or client into loop state 
    97          bool eventLoop(void); 
    98  
    9997         bool checkBuffersAndListen(void); 
    10098 
     
    167165         void recvRegistry(CBufferIn& buffer) ; //!< registry is received by the servers 
    168166 
     167         bool isFinalized(void); 
     168 
    169169         // dispatch event 
    170170         static bool dispatchEvent(CEventServer& event); 
     
    208208         virtual bool hasChild(void) const; 
    209209 
     210 
    210211      public : 
    211212         // Calendar of context 
     
    238239         CContextServer* server; 
    239240 
    240          // Client-server pair in case of secondary server pool 
    241241//         CContextClient* clientPrimServer; 
    242242//         CContextServer* serverPrimServer; 
     
    250250         StdString idServer_; 
    251251         CGarbageCollector garbageCollector; 
    252          std::list<MPI_Comm> comms; //!< Communicators allocated internally 
     252         std::list<MPI_Comm> comms; //!< Communicators allocated internally  --- significance?? 
    253253 
    254254      public: // Some function maybe removed in the near future 
  • XIOS/dev/dev_olga/src/node/domain.cpp

    r1030 r1054  
    156156   std::map<int, StdSize> CDomain::getAttributesBufferSize() 
    157157   { 
    158      CContextClient* client = CContext::getCurrent()->client; 
     158     CContext* context = CContext::getCurrent(); 
     159     // For now the assumption is that secondary server pools consist of the same number of procs. 
     160     // CHANGE the line below if the assumption changes. 
     161     CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[0] : context->client; 
    159162 
    160163     std::map<int, StdSize> attributesSizes = getMinimumBufferSizeForAttributes(); 
     
    272275     this->isRedistributed_ = true; 
    273276     CContext* context = CContext::getCurrent(); 
    274      CContextClient* client = context->client; 
     277     // For now the assumption is that secondary server pools consist of the same number of procs. 
     278     // CHANGE the line below if the assumption changes. 
     279     CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[0] : context->client; 
    275280     int rankClient = client->clientRank; 
    276281     int rankOnDomain = rankClient%nbLocalDomain; 
     
    508513   { 
    509514          CContext* context = CContext::getCurrent(); 
    510       CContextClient* client = context->client; 
     515    // For now the assumption is that secondary server pools consist of the same number of procs. 
     516    // CHANGE the line below if the assumption changes. 
     517    CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[0] : context->client; 
    511518          lon_g.resize(ni_glo) ; 
    512519          lat_g.resize(nj_glo) ; 
     
    13511358      this->computeConnectedClients(); 
    13521359       // if (hasLonLat || hasArea || isCompressible_) this->computeConnectedClients(); 
    1353        if (hasLonLat) this->completeLonLatClient(); 
     1360       if (hasLonLat) 
     1361         if (!context->hasServer) 
     1362           this->completeLonLatClient(); 
    13541363     } 
    13551364 
     
    13971406     if (context->hasClient) 
    13981407     { 
     1408//       this->completeLonLatClient(); 
    13991409       sendAttributes(); 
    14001410     } 
     
    14441454    // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    14451455    int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    1446     for (int i = 0; i < nbSrvPools; ++i) 
    1447     { 
    1448       CContextClient* contextClientTmp = (context->hasServer) ? context->clientPrimServer[i] 
    1449                                                                          : context->client;     
     1456    for (int p = 0; p < nbSrvPools; ++p) 
     1457    { 
     1458      CContextClient* contextClientTmp = (context->hasServer) ? context->clientPrimServer[p] 
     1459                                                                       : context->client; 
     1460 
    14501461      int nbServer = contextClientTmp->serverSize; 
    14511462      std::vector<int> nGlobDomain(2); 
     
    14981509    // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    14991510    int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    1500     for (int i = 0; i < nbSrvPools; ++i) 
    1501     { 
    1502       CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[i] : context->client; 
     1511    for (int p = 0; p < nbSrvPools; ++p) 
     1512    { 
     1513      CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[p] : context->client; 
    15031514      int nbServer=client->serverSize; 
    15041515      int rank = client->clientRank; 
     
    16681679      for (it = globalIndexDomainOnServer.begin(); it != ite; ++it) { 
    16691680        connectedServerRank_.push_back(it->first); 
    1670 //        std::vector<size_t> vec = it->second; 
    1671 //        std::sort(vec.begin(), vec.end()); 
    1672 //        indSrv_[it->first] = vec; 
    1673       } 
    1674  
    1675       indSrv_.swap(globalIndexDomainOnServer); 
     1681        std::vector<size_t> vec = it->second; 
     1682        std::sort(vec.begin(), vec.end()); 
     1683        indSrv_[it->first] = vec; 
     1684      } 
     1685 
     1686//      indSrv_.swap(globalIndexDomainOnServer); 
    16761687      nbConnectedClients_ = clientServerMap->computeConnectedClients(client->serverSize, client->clientSize, client->intraComm, connectedServerRank_); 
    16771688 
    16781689      clientServerMap->computeServerIndexMapping(globalIndexDomainZoom); 
    16791690      CClientServerMapping::GlobalIndexMap& globalIndexDomainZoomOnServer = clientServerMap->getGlobalIndexOnServer(); 
    1680       indZoomSrv_.swap(globalIndexDomainZoomOnServer); 
     1691//      indZoomSrv_.swap(globalIndexDomainZoomOnServer); 
    16811692      std::vector<int> connectedServerZoomRank(indZoomSrv_.size()); 
    1682       for (it = indZoomSrv_.begin(); it != indZoomSrv_.end(); ++it) 
     1693//      for (it = indZoomSrv_.begin(); it != indZoomSrv_.end(); ++it) 
     1694//        connectedServerZoomRank.push_back(it->first); 
     1695      for (it = globalIndexDomainZoomOnServer.begin(); it != globalIndexDomainZoomOnServer.end(); ++it) 
     1696      { 
    16831697        connectedServerZoomRank.push_back(it->first); 
     1698        std::vector<size_t> vec = it->second; 
     1699        std::sort(vec.begin(), vec.end()); 
     1700        indZoomSrv_[it->first] = vec; 
     1701      } 
    16841702      nbConnectedClientsZoom_ = clientServerMap->computeConnectedClients(client->serverSize, client->clientSize, client->intraComm, connectedServerZoomRank); 
    16851703 
     
    16991717  void CDomain::sendAttributes() 
    17001718  { 
     1719    sendDistributionAttributes(); 
    17011720    sendIndex(); 
    1702     sendDistributionAttributes(); 
    17031721    sendMask(); 
    17041722    sendLonLat(); 
     
    17171735    // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    17181736    int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    1719     for (int i = 0; i < nbSrvPools; ++i) 
    1720     { 
    1721       CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[i] : context->client; 
     1737    for (int p = 0; p < nbSrvPools; ++p) 
     1738    { 
     1739      CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[p] : context->client; 
    17221740 
    17231741      CEventClient eventIndex(getType(), EVENT_ID_INDEX); 
     
    17881806    // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    17891807    int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    1790     for (int i = 0; i < nbSrvPools; ++i) 
    1791     { 
    1792       CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[i] : context->client; 
     1808    for (int p = 0; p < nbSrvPools; ++p) 
     1809    { 
     1810      CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[p] : context->client; 
    17931811 
    17941812      // send area for each connected server 
     
    18351853    // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    18361854    int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    1837     for (int i = 0; i < nbSrvPools; ++i) 
    1838     { 
    1839       CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[i] : context->client; 
     1855    for (int p = 0; p < nbSrvPools; ++p) 
     1856    { 
     1857      CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[p] : context->client; 
    18401858 
    18411859      // send area for each connected server 
     
    18851903    // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    18861904    int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    1887     for (int i = 0; i < nbSrvPools; ++i) 
    1888     { 
    1889       CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[i] : context->client; 
     1905    for (int p = 0; p < nbSrvPools; ++p) 
     1906    { 
     1907      CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[p] : context->client; 
    18901908 
    18911909      // send lon lat for each connected server 
     
    19541972        eventLat.push(rank, nbConnectedClients_[rank], list_msgsLat.back()); 
    19551973      } 
    1956  
    19571974      client->sendEvent(eventLon); 
    19581975      client->sendEvent(eventLat); 
     
    19711988    // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    19721989    int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    1973     for (int i = 0; i < nbSrvPools; ++i) 
    1974     { 
    1975       CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[i] : context->client; 
     1990    for (int p = 0; p < nbSrvPools; ++p) 
     1991    { 
     1992      CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[p] : context->client; 
    19761993 
    19771994      // send area for each connected server 
     
    22042221        for (idx =0; idx < ni_zoom; ++idx) 
    22052222        { 
    2206            if ((ibegin <= zoom_i_index(idx)) && (zoom_i_index(idx) < ibegin+ni) && (nbIZoom < ni)) 
     2223          if ((ibegin <= zoom_i_index(idx)) && (zoom_i_index(idx) < ibegin+ni) && (nbIZoom < ni)) 
    22072224            ++nbIZoom; 
    2208            if ((jbegin <= zoom_j_index(idx)) && (zoom_j_index(idx) < jbegin+nj) && (nbJZoom < nj)) 
     2225          if ((jbegin <= zoom_j_index(idx)) && (zoom_j_index(idx) < jbegin+nj) && (nbJZoom < nj)) 
    22092226            ++nbJZoom; 
    22102227        } 
     
    22372254      } 
    22382255             
    2239       MPI_Scan(&count_write_index_[0], &start_write_index_[0], 2, MPI_INT, MPI_SUM, server->intraComm);       
    2240       start_write_index_[0] = 0;  
    2241       start_write_index_[1] -= count_write_index_[1]; 
     2256      MPI_Scan(&count_write_index_[0], &start_write_index_[0], 2, MPI_INT, MPI_SUM, server->intraComm); 
     2257      if ((this->type) != CDomain::type_attr::unstructured) 
     2258      { 
     2259        start_write_index_[0] = 0; 
     2260        start_write_index_[1] -= count_write_index_[1]; 
     2261      } 
     2262      else 
     2263      { 
     2264        start_write_index_[0] -= count_write_index_[0]; 
     2265      } 
    22422266      local_write_size_[0] = count_write_index_[0]; 
    22432267      local_write_size_[1] = count_write_index_[1]; 
    22442268      MPI_Allreduce(&count_write_index_[0], &global_write_size_[0], 2, MPI_INT, MPI_SUM, server->intraComm); 
    2245       global_write_size_[0] = count_write_index_[0]; 
    2246       global_write_size_[1] = (global_write_size_[1] > nj_glo) ? nj_glo : global_write_size_[1]; 
    2247           
     2269      if ((this->type) != CDomain::type_attr::unstructured) 
     2270      { 
     2271        global_write_size_[0] = count_write_index_[0]; 
     2272        global_write_size_[1] = (global_write_size_[1] > nj_glo) ? nj_glo : global_write_size_[1]; 
     2273      } 
    22482274    } 
    22492275 
  • XIOS/dev/dev_olga/src/node/field.cpp

    r1030 r1054  
    125125//    CContextClient* client = context->client; 
    126126    // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    127     int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    128     for (int i = 0; i < nbSrvPools; ++i) 
    129     { 
    130       CContextClient* client = (!context->hasServer) ? context->client : context->clientPrimServer[i]; 
     127//    int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
     128//    for (int i = 0; i < nbSrvPools; ++i) 
     129//    { 
     130//      CContextClient* client = (!context->hasServer) ? context->client : context->clientPrimServer[i]; 
     131      CContextClient* client = (!context->hasServer) ? context->client : this->file->getContextClient(); 
    131132 
    132133      CEventClient event(getType(), EVENT_ID_UPDATE_DATA); 
     
    176177        client->sendEvent(event); 
    177178      } 
    178     } 
     179//    } 
    179180 
    180181    CTimer::get("XIOS Send Data").suspend(); 
    181182  } 
    182183 
     184/* 
    183185  void CField::sendUpdateData(const CArray<double,1>& data, CContextClient* client) 
    184186  { 
     
    233235    CTimer::get("XIOS Send Data").suspend(); 
    234236  } 
    235  
     237*/ 
    236238  void CField::recvUpdateData(CEventServer& event) 
    237239  { 
  • XIOS/dev/dev_olga/src/node/field.hpp

    r1024 r1054  
    146146        static bool dispatchEvent(CEventServer& event); 
    147147        void sendUpdateData(const CArray<double,1>& data); 
    148         void sendUpdateData(const CArray<double,1>& data, CContextClient* client); 
     148//        void sendUpdateData(const CArray<double,1>& data, CContextClient* client); 
    149149        static void recvUpdateData(CEventServer& event); 
    150150        void recvUpdateData(std::map<int,CBufferIn*>& rankBuffers); 
  • XIOS/dev/dev_olga/src/node/file.cpp

    r1025 r1054  
    270270    void CFile::checkFile(void) 
    271271    { 
    272       if (mode.isEmpty() || mode.getValue() == mode_attr::write) 
     272      CContext* context = CContext::getCurrent(); 
     273      // Done by classical server or secondary server 
     274      if (!CXios::usingServer2 || (CXios::usingServer2 && !context->hasClient)) 
    273275      { 
    274         if (!isOpen) createHeader(); 
    275         checkSync(); 
    276       } 
    277       else 
    278       { 
    279         if (!isOpen) openInReadMode(); 
    280       } 
    281       checkSplit(); 
     276        if (mode.isEmpty() || mode.getValue() == mode_attr::write) 
     277        { 
     278          if (!isOpen) createHeader(); 
     279          checkSync(); 
     280        } 
     281        else 
     282        { 
     283          if (!isOpen) openInReadMode(); 
     284        } 
     285        checkSplit(); 
     286      } 
    282287    } 
    283288 
     
    590595     CContext* context = CContext::getCurrent(); 
    591596     CContextClient* client=context->client; 
     597//     CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[0] : context->client; 
    592598 
    593599     // It would probably be better to call initFile() somehow 
  • XIOS/dev/dev_olga/src/node/file.hpp

    r1025 r1054  
    170170      private : 
    171171         /// Propriétés privées /// 
     172         CContextClient* client; 
    172173         CFieldGroup* vFieldGroup; 
    173174         CVariableGroup* vVariableGroup; 
     
    175176         boost::shared_ptr<CDataInput> data_in; 
    176177         std::vector<CField*> enabledFields; 
    177          CContextClient* client; 
    178178 
    179179      public: 
  • XIOS/dev/dev_olga/src/node/grid.cpp

    r1030 r1054  
    630630     computeClientIndex(); 
    631631     if (context->hasClient) 
    632       computeConnectedClients(); 
     632     { 
     633       computeConnectedClients(); 
     634     } 
    633635 
    634636 
     
    792794         } 
    793795 
    794          nbIndexOnServer = 0; 
    795          for (it = itb; it != ite; ++it) 
     796//         nbIndexOnServer = 0; 
     797//         for (it = itb; it != ite; ++it) 
     798//         { 
     799//           const std::vector<int>& tmp = it->second; 
     800//           nbIndexOnServerTmp = 0; 
     801//           for (int i = 0; i < tmp.size(); ++i) 
     802//           { 
     803//             if (0 == nbIndexOnServerTmp(tmp[i])) 
     804//             { 
     805//               globalElementIndexOnServer[idx][tmp[i]][nbIndexOnServer(tmp[i])] = it->first; 
     806//               ++nbIndexOnServerTmp(tmp[i]); 
     807//             } 
     808//           } 
     809//           nbIndexOnServer += nbIndexOnServerTmp; 
     810//         } 
     811//       } 
     812 
     813       nbIndexOnServer = 0; 
     814//       for (it = itb; it != ite; ++it) 
     815       for (size_t j = 0; j < globalIndexElementOnServerMap.size(); ++j) 
     816       { 
     817         it = globalIndexElementOnServerMap.find(globalIndexElementOnClient(j)); 
     818         if (it != ite) 
    796819         { 
    797820           const std::vector<int>& tmp = it->second; 
     
    808831         } 
    809832       } 
     833     } 
    810834 
    811835      // Determine server which contain global source index 
     
    12361260    // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    12371261    int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 1) : 1; 
    1238     for (int i = 0; i < nbSrvPools; ++i) 
    1239     { 
    1240       CContextClient* client = context->hasServer ? context->clientPrimServer[i] : context->client ; 
     1262    for (int p = 0; p < nbSrvPools; ++p) 
     1263    { 
     1264      CContextClient* client = context->hasServer ? context->clientPrimServer[p] : context->client ; 
    12411265 
    12421266      CEventClient event(getType(), EVENT_ID_INDEX); 
     
    13971421    int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 1) : 1; 
    13981422    nbSrvPools = 1; 
    1399     for (int i = 0; i < nbSrvPools; ++i) 
    1400     { 
    1401       CContextServer* server = (context->hasServer) ? context->server : context->serverPrimServer[i]; 
    1402       CContextClient* client = (context->hasServer) ? context->client : context->clientPrimServer[i]; 
     1423    for (int p = 0; p < nbSrvPools; ++p) 
     1424    { 
     1425      CContextServer* server = (!context->hasClient) ? context->server : context->serverPrimServer[p]; 
     1426      CContextClient* client = (!context->hasClient) ? context->client : context->clientPrimServer[p]; 
     1427//      CContextServer* server = (context->hasServer) ? context->server : context->serverPrimServer[p]; 
     1428//      CContextClient* client = (context->hasServer) ? context->client : context->clientPrimServer[p]; 
    14031429      numberWrittenIndexes_ = totalNumberWrittenIndexes_ = offsetWrittenIndexes_ = 0; 
    14041430      connectedServerRank_ = ranks; 
     
    15031529        else 
    15041530        { 
    1505           dataSize = outIndex.numElements(); 
    1506           for (int i = 0; i < outIndex.numElements(); ++i) outIndex(i) = i; 
     1531//          dataSize = outIndex.numElements(); 
     1532//          for (int i = 0; i < outIndex.numElements(); ++i) outIndex(i) = i; 
     1533          // THE PROBLEM HERE IS THAT DATA CAN BE NONDISTRIBUTED ON CLIENT AND DISTRIBUTED ON SERVER 
     1534          // BELOW IS THE TEMPORARY FIX only for a single type of element (domain, asix, scalar) 
     1535          dataSize = serverDistribution_->getGlobalIndexEachDimension()[0].numElements(); 
     1536          outIndex.resize(dataSize); 
     1537          outIndex = serverDistribution_->getGlobalIndexEachDimension()[0]; 
     1538 
    15071539        } 
    15081540        writtenDataSize_ += dataSize; 
  • XIOS/dev/dev_olga/src/object_template_impl.hpp

    r1030 r1054  
    296296      } 
    297297    } 
    298 //     // if (!context->hasServer) 
    299 //     if (context->hasClient) 
    300 //     { 
    301 //        CContextClient* client=context->client; 
    302  
    303 //        CEventClient event(getType(),EVENT_ID_SEND_ATTRIBUTE); 
    304 //        if (client->isServerLeader()) 
    305 //        { 
    306 //          CMessage msg; 
    307 // //       msg << this->getId(); 
    308 //          msg << this->getIdServer(); 
    309 //          msg << attr.getName(); 
    310 //          msg << attr; 
    311 //          const std::list<int>& ranks = client->getRanksServerLeader(); 
    312 //          for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    313 //            event.push(*itRank,1,msg); 
    314 //          client->sendEvent(event); 
    315 //        } 
    316 //        else client->sendEvent(event); 
    317 //     } 
    318  
    319298  } 
    320299 
  • XIOS/dev/dev_olga/src/server.cpp

    r1021 r1054  
    2020    list<MPI_Comm> CServer::interCommLeft ; 
    2121    list<MPI_Comm> CServer::interCommRight ; 
    22     list<MPI_Comm> CServer::interComm ; 
     22//    list<MPI_Comm> CServer::interComm ; 
    2323    std::list<MPI_Comm> CServer::contextInterComms; 
    2424    int CServer::serverLevel = 0 ; 
     25    int CServer::serverLeader = 0; 
     26    int CServer::serverSize = 0; 
    2527    int CServer::nbPools = 0; 
    2628    int CServer::poolId = 0; 
    27     int CServer::serverSize = 0; 
    2829    bool CServer::isRoot = false ; 
    2930    int CServer::rank = INVALID_RANK; 
     
    3839/*! 
    3940 * \fn void CServer::initialize(void) 
    40  * Creates intraComm and interComm for a server pool (primary or secondary). 
     41 * Creates intraComm for each possible type of servers (classical, primary or secondary). 
     42 * In case of secondary servers intraComm is created for each secondary server pool. 
     43 * (For now the assumption is that there is one proc per pool.) 
     44 * Creates the following lists of interComms: 
     45 *   classical server -- interCommLeft 
     46 *   primary server -- interCommLeft and interCommRight 
     47 *   secondary server -- interComm for each pool. 
    4148 */ 
    4249    void CServer::initialize(void) 
     
    6471 
    6572        unsigned long* hashAll ; 
    66 //        unsigned long* hashAllServers ; 
    6773 
    6874//        int rank ; 
     
    129135              MPI_Intercomm_create(intraComm, 0, CXios::globalComm, clientLeader, 0, &newComm) ; 
    130136               interCommLeft.push_back(newComm) ; 
    131                interComm.push_back(newComm) ; 
    132137            } 
    133138          } 
     
    135140        else if (serverLevel == 1) 
    136141        { 
    137           int clientLeader, srvPrmLeader, srvSndLeader; 
     142          int clientLeader, srvSndLeader; 
     143          int srvPrmLeader ; 
    138144          for (it=leaders.begin();it!=leaders.end();it++) 
    139145          { 
     
    148154              MPI_Intercomm_create(intraComm, 0, CXios::globalComm, clientLeader, 0, &newComm) ; 
    149155              interCommLeft.push_back(newComm) ; 
    150               interComm.push_back(newComm) ; 
    151156            } 
    152157            else 
    153               srvPrmLeader = it->second; 
     158              serverLeader = it->second; 
    154159          } 
    155160 
    156161          for (int i = 0; i < nbPools; ++i) 
    157162          { 
    158             srvSndLeader = srvPrmLeader + serverSize - nbPools + i; 
    159 //            CClient::initializeClientOnServer(rank, serversComm, srvSndLeader); 
    160             CClient::initializeClientOnServer(rank, intraComm, srvSndLeader); 
    161             interCommRight.push_back(CClient::getInterComm()); 
    162             interComm.push_back(CClient::getInterComm()); 
     163            srvSndLeader = serverLeader + serverSize - nbPools + i; 
     164            int intraCommSize, intraCommRank ; 
     165            MPI_Comm_size(intraComm, &intraCommSize) ; 
     166            MPI_Comm_rank(intraComm, &intraCommRank) ; 
     167            info(50)<<"intercommCreate::client "<<rank<<" intraCommSize : "<<intraCommSize 
     168                <<" intraCommRank :"<<intraCommRank<<"  clientLeader "<< srvSndLeader<<endl ; 
     169            MPI_Intercomm_create(intraComm, 0, CXios::globalComm, srvSndLeader, 0, &newComm) ; 
     170            interCommRight.push_back(newComm) ; 
    163171          } 
    164172        } // primary server 
     
    175183          MPI_Intercomm_create(intraComm, 0, CXios::globalComm, clientLeader, 0, &newComm) ; 
    176184          interCommLeft.push_back(newComm) ; 
    177           interComm.push_back(newComm) ; 
    178185        } // secondary server 
    179186 
     
    210217          if (rank==0) MPI_Send(&globalRank,1,MPI_INT,0,0,newComm) ; 
    211218          MPI_Comm_remote_size(newComm,&size); 
    212           interComm.push_back(newComm) ; 
     219//          interComm.push_back(newComm) ; 
     220          interCommLeft.push_back(newComm) ; 
    213221        } 
    214222              oasis_enddef() ; 
    215223      } 
    216224 
    217       MPI_Comm_rank(intraComm, &rank) ; 
    218       if (rank==0) isRoot=true; 
     225      int rankServer; 
     226      MPI_Comm_rank(intraComm, &rankServer) ; 
     227      if (rankServer==0) isRoot=true; 
    219228      else isRoot=false; 
    220229       
     
    235244//        MPI_Comm_free(&(*it)); 
    236245 
    237       for (std::list<MPI_Comm>::iterator it = interCommLeft.begin(); it != interCommLeft.end(); it++) 
    238         MPI_Comm_free(&(*it)); 
    239  
    240       for (std::list<MPI_Comm>::iterator it = interCommRight.begin(); it != interCommRight.end(); it++) 
    241         MPI_Comm_free(&(*it)); 
     246        for (std::list<MPI_Comm>::iterator it = interCommLeft.begin(); it != interCommLeft.end(); it++) 
     247          MPI_Comm_free(&(*it)); 
     248 
     249        for (std::list<MPI_Comm>::iterator it = interCommRight.begin(); it != interCommRight.end(); it++) 
     250          MPI_Comm_free(&(*it)); 
    242251 
    243252      MPI_Comm_free(&intraComm); 
     
    273282 
    274283         contextEventLoop() ; 
     284//         if (finished && contextList.empty()) stop=true ; 
    275285         if (finished && contextList.empty()) stop=true ; 
    276286         eventScheduler->checkEvent() ; 
     
    294304           if (flag==true) 
    295305           { 
    296              MPI_Recv(&msg,1,MPI_INT,0,0,*it,&status) ; 
    297              info(20)<<" CServer : Receive client finalize"<<endl ; 
    298  
    299              // If primary server, send finalize to secondary server pool(s) 
    300              for(itr=interCommRight.begin(); itr!=interCommRight.end(); itr++) 
    301              { 
    302                MPI_Send(&msg,1,MPI_INT,0,0,*itr) ; 
    303 //               MPI_Comm_free(&(*itr)); 
    304 //               interCommRight.erase(itr) ; 
    305              } 
    306  
     306              MPI_Recv(&msg,1,MPI_INT,0,0,*it,&status) ; 
     307              info(20)<<" CServer : Receive client finalize"<<endl ; 
     308              // Sending server finalize message to secondary servers (if any) 
     309              for(itr=interCommRight.begin();itr!=interCommRight.end();itr++) 
     310              { 
     311                MPI_Send(&msg,1,MPI_INT,0,0,*itr) ; 
     312//                itr = interCommRight.erase(itr) ; 
     313              } 
    307314              MPI_Comm_free(&(*it)); 
    308 //              interComm.erase(it) ; 
    309315              interCommLeft.erase(it) ; 
    310316              break ; 
     
    312318         } 
    313319 
    314         if (interCommLeft.empty()) 
    315 //        if (interComm.empty()) 
     320         if (interCommLeft.empty()) 
    316321         { 
    317322           int i,size ; 
     
    381386           MPI_Get_count(&status,MPI_CHAR,&count) ; 
    382387           recvContextMessage(buffer,count) ; 
    383            delete [] buffer ; 
     388           delete [] buffer; 
    384389           recept=false ; 
    385390         } 
     
    390395     { 
    391396       static map<string,contextMessage> recvContextId; 
    392  
    393397       map<string,contextMessage>::iterator it ; 
    394  
    395398       CBufferIn buffer(buff,count) ; 
    396399       string id ; 
     
    434437     void CServer::listenRootContext(void) 
    435438     { 
    436  
    437439       MPI_Status status ; 
    438440       int flag ; 
     
    464466           MPI_Get_count(&status,MPI_CHAR,&count) ; 
    465467           registerContext(buffer,count) ; 
    466  
    467468           delete [] buffer ; 
    468469           recept=false ; 
     
    484485               << "Context '" << contextId << "' has already been registred"); 
    485486 
    486        MPI_Comm contextInterComm; 
    487        MPI_Intercomm_create(intraComm,0,CXios::globalComm,leaderRank,10+leaderRank,&contextInterComm); 
    488  
    489        MPI_Comm inter; 
    490        MPI_Intercomm_merge(contextInterComm,1,&inter); 
    491        MPI_Barrier(inter); 
    492  
    493487       context=CContext::create(contextId); 
    494488       contextList[contextId]=context; 
    495        context->initServer(intraComm,contextInterComm); 
    496        contextInterComms.push_back(contextInterComm); 
    497  
     489 
     490       // All type of servers initialize its own server (CContextServer) 
     491       if (serverLevel < 2) 
     492       { 
     493         MPI_Comm contextInterComm; 
     494         MPI_Intercomm_create(intraComm, 0, CXios::globalComm, leaderRank, 10+leaderRank, &contextInterComm); 
     495         MPI_Comm inter; 
     496         MPI_Intercomm_merge(contextInterComm,1,&inter); 
     497         MPI_Barrier(inter); 
     498         MPI_Comm_free(&inter); 
     499         context->initServer(intraComm,contextInterComm); 
     500         contextInterComms.push_back(contextInterComm); 
     501       } 
     502       else if (serverLevel == 2) 
     503       { 
     504         context->initServer(intraComm, interCommLeft.front()); 
     505       } 
     506 
     507       // Primary server: send create context message to secondary servers and initialize its own client (CContextClient) 
    498508       if (serverLevel == 1) 
    499509       { 
    500 //         CClient::registerContext(contextId, intraComm); 
    501          CClient::registerContextByClienOfServer(contextId, intraComm); 
    502        } 
    503  
    504        MPI_Comm_free(&inter); 
    505  
     510         int i = 0, size; 
     511         CMessage msg; 
     512         int messageSize; 
     513         MPI_Comm_size(intraComm, &size) ; 
     514         for (std::list<MPI_Comm>::iterator it = interCommRight.begin(); it != interCommRight.end(); it++, ++i) 
     515         { 
     516           StdString str = contextId +"_server_" + boost::lexical_cast<string>(i); 
     517           msg<<str<<size<<rank ; 
     518           messageSize = msg.size() ; 
     519           buff = new char[messageSize] ; 
     520           CBufferOut buffer(buff,messageSize) ; 
     521           buffer<<msg ; 
     522           int sndServerGloRanks = serverSize-nbPools+serverLeader +i;  // the assumption is that there is only one proc per secondary server pool 
     523           MPI_Send(buff, buffer.count(), MPI_CHAR, sndServerGloRanks, 1, CXios::globalComm) ; 
     524           context->initClient(intraComm, *it) ; 
     525           delete [] buff ; 
     526         } 
     527       } 
    506528     } 
    507529 
     
    509531     { 
    510532       bool finished ; 
     533 
    511534       map<string,CContext*>::iterator it ; 
    512535 
    513536       for(it=contextList.begin();it!=contextList.end();it++) 
    514537       { 
    515          finished=it->second->checkBuffersAndListen(); 
     538         finished=it->second->isFinalized(); 
    516539         if (finished) 
    517540         { 
     
    519542           break ; 
    520543         } 
     544         else 
     545           finished=it->second->checkBuffersAndListen(); 
    521546       } 
    522547     } 
     
    554579      { 
    555580        if (serverLevel == 1) 
    556           id = getRank(); 
     581          id = rank-serverLeader; 
    557582        else 
    558583          id = poolId; 
  • XIOS/dev/dev_olga/src/server.hpp

    r1021 r1054  
    1414      public: 
    1515        static void initialize(void); 
    16         static void initialize(const StdString& serverId); 
    1716        static void finalize(void); 
    1817        static void eventLoop(void); 
     
    2322        static void listenRootContext(void); 
    2423        static void listenRootFinalize(void); 
    25         static void registerContext(void* buff,int count, int leaderRank=0);        // context registered by the primary server 
     24        static void registerContext(void* buff,int count, int leaderRank=0); 
    2625 
    27         // Communicators for the primary group of servers 
    2826        static MPI_Comm intraComm; 
    29         static list<MPI_Comm> interCommLeft;   // interComm between server (primary or secondary) and its client (client or primary server) 
    30         static list<MPI_Comm> interCommRight;  // interComm between primary server and secondary server (non-empty only for primary server pool) 
    31         static list<MPI_Comm> interComm;       // interCommLeft + interCommRight 
    32         static std::list<MPI_Comm> contextInterComms; 
     27        static list<MPI_Comm> interCommLeft;           // interComm between server (primary, classical or secondary) and its client (client or primary server) 
     28        static list<MPI_Comm> interCommRight;          // interComm between primary server and secondary server (non-empty only for primary server pool) 
     29        static std::list<MPI_Comm> contextInterComms;  // significance ?? 
    3330        static CEventScheduler* eventScheduler; 
    3431 
    3532        static int serverLevel ; 
    36  
    37 //        static int nbSndSrvPools;   // number of secondary server pools 
    38 //        static int poolNb;          // for secondary servers; stores the pool number 
    3933 
    4034        struct contextMessage 
     
    4640        static bool isRoot; 
    4741 
    48         static map<string,CContext*> contextList;       // contexts on the primary server 
     42        static map<string,CContext*> contextList; 
    4943        static bool finished; 
    5044        static bool is_MPI_Initialized; 
     
    7064      private: 
    7165        static int rank; 
    72         static int serverSize;  //!< Number of procs dedicated to server 
    73         static int nbPools;     //!< Number of secondary-server pools 
    74         static int poolId;      //!< ID of a secondary-server pool 
     66        static int serverLeader;  //!< Leader of the classical or primary server (needed in case of secondary servers) 
     67        static int serverSize;    //!< Number of procs dedicated to servers (primary and seconday (if any) combined) 
     68        static int nbPools;       //!< Number of secondary server pools 
     69        static int poolId;        //!< id of a secondary server pool starting from 1 
    7570        static StdOFStream m_infoStream; 
    7671        static StdOFStream m_errorStream; 
  • XIOS/dev/dev_olga/src/xios_server.f90

    r983 r1054  
    44  INCLUDE "mpif.h" 
    55  INTEGER :: ierr 
    6   INTEGER            :: server_level = 0   
    7   ! 0 in case of a single server pool  
    8   ! 1 for primary server in case of two server pools 
    9   ! 2 for secondary server in case of two server pools 
    106 
    11   CALL xios_init_server(server_level) 
     7  CALL xios_init_server 
    128 
    139END PROGRAM server_main 
Note: See TracChangeset for help on using the changeset viewer.