BASIS  version 1.2.3 (revision 2104)
OptionalUnlabeledTracker.h
00001 
00002 
00003 /****************************************************************************** 
00004  * 
00005  *  file:  OptionalUnlabeledTracker.h
00006  * 
00007  *  Copyright (c) 2005, Michael E. Smoot .
00008  *  All rights reverved.
00009  * 
00010  *  See the file COPYING in the top directory of this distribution for
00011  *  more information.
00012  *  
00013  *  THE SOFTWARE IS PROVIDED _AS IS_, WITHOUT WARRANTY OF ANY KIND, EXPRESS 
00014  *  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
00015  *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 
00016  *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
00017  *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
00018  *  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
00019  *  DEALINGS IN THE SOFTWARE.  
00020  *  
00021  *****************************************************************************/ 
00022 
00023 
00024 #ifndef TCLAP_OPTIONAL_UNLABELED_TRACKER_H
00025 #define TCLAP_OPTIONAL_UNLABELED_TRACKER_H
00026 
00027 #include <string>
00028 
00029 namespace TCLAP {
00030 
00031 class OptionalUnlabeledTracker
00032 {
00033 
00034     public:
00035 
00036         static void check( bool req, const std::string& argName );
00037 
00038         static void gotOptional() { alreadyOptionalRef() = true; }
00039 
00040         static bool& alreadyOptional() { return alreadyOptionalRef(); } 
00041 
00042     private:
00043 
00044         static bool& alreadyOptionalRef() { static bool ct = false; return ct; }
00045 };
00046 
00047 
00048 inline void OptionalUnlabeledTracker::check( bool req, const std::string& argName )
00049 {
00050     if ( OptionalUnlabeledTracker::alreadyOptional() )
00051         throw( SpecificationException(
00052     "You can't specify ANY Unlabeled Arg following an optional Unlabeled Arg",
00053                     argName ) );
00054 
00055     if ( !req )
00056         OptionalUnlabeledTracker::gotOptional();
00057 }
00058 
00059 
00060 } // namespace TCLAP
00061 
00062 #endif