1[/ 2 (C) Copyright Edward Diener 2011-2015 3 Distributed under the Boost Software License, Version 1.0. 4 (See accompanying file LICENSE_1_0.txt or copy at 5 http://www.boost.org/LICENSE_1_0.txt). 6] 7 8[section:vmd_modifiers Macros with modifiers] 9 10The basic functionality for VMD macros parsing data types 11has been given using the required parameters of those 12macros. This basic functionality may be perfectly adequate for 13macro programmers to use VMD effectively in their programming efforts. 14 15A number of those macros take optional parameters, 16called in general "modifiers", which enhance or change the 17functionality of those macros in various ways. All modifiers 18are VMD identifiers. 19 20In all situations modifiers are optional parameters which are parsed 21by VMD to provide enhanced functionality for some of its macros. 22They are never required as part of the basic functionality of a macro. 23 24When modifiers are used as optional arguments to a macro they 25can be input after the required parameters in any order and 26VMD will still handle the optional parameters correctly. 27 28There are two general types of modifiers, 'specific modifiers' and 29'user-defined modifiers'. Specific modifers start with BOOST_VMD_ 30and are both registered and pre-detected identifiers known to VMD. 31The specific modifiers change the expansion of particular macros 32in various ways which will be subsequently explained. User-defined 33modifiers are user-defined identifiers which the end-user of 34specific macros must register and pre-detect for himself. They also 35change the expansion of particular macros in various ways which 36will be subsequently explained. 37 38For any particular macro if a specific modifier 39is not appropriate it is just ignored. This means that VMD never 40generates a preprocessing error or gives an incorrect result 41just because a specific modifier does not apply for a particular 42macro. Any modifier which is not recognized as a specific modifier 43is treated as a user-defined modifier. In cases where a user-defined 44modifier is not appropriate it is also just ignored. 45 46The situations where modifiers can be used to enhance the basic 47functionality of VMD macros can be divided by particular types 48of specific modifiers. Each particular type of a specific modifier 49has a name given to it, functionality, and set of identifiers 50associated with that particular type. 51Each particular type of a specific modifier may be used as optional 52parameters in one or more designated macros depending on the specific 53modifier type. 54 55When more than one mutually exclusive specific modifier from a particular type of modifier is 56specified as an optional parameter the last specified takes effect. This 57allows the programmer to override a specific modifier by adding the 58overridden identifier as an optional argument to the end of the 59macro's invocation. 60 61Header files for specific modifiers are automatically included when 62the header files for macros taking those specific modifiers are 63included. 64 65Header files for user-defined modifiers, which register and pre-detect 66those user-defined modifiers, must be included as needed by the programmer 67using those modifiers. 68 69The following topics will explain each particular type of modifier 70and where it may be used. 71 72[include vmd_modifiers_return_type.qbk] 73[include vmd_modifiers_filter.qbk] 74[include vmd_modifiers_identifier.qbk] 75[include vmd_modifiers_splitting.qbk] 76[include vmd_modifiers_index.qbk] 77[include vmd_modifiers_single_element.qbk] 78 79[endsect]