Program Listing for File optional_unlabeled_tracker.hpp

Return to documentation for file (/tmp/ws/src/ecl_core/ecl_command_line/include/ecl/command_line/optional_unlabeled_tracker.hpp)

/*****************************************************************************
** Ifdefs
*****************************************************************************/

#ifndef TCLAP_OPTIONAL_UNLABELED_TRACKER_H
#define TCLAP_OPTIONAL_UNLABELED_TRACKER_H

#include <string>

namespace ecl {

class OptionalUnlabeledTracker
{

    public:

        static void check( bool req, const std::string& argName );

        static void gotOptional() { alreadyOptionalRef() = true; }

        static bool& alreadyOptional() { return alreadyOptionalRef(); }

    private:

        static bool& alreadyOptionalRef() { static bool ct = false; return ct; }
};


inline void OptionalUnlabeledTracker::check( bool req, const std::string& argName )
{
    if ( OptionalUnlabeledTracker::alreadyOptional() )
        throw( SpecificationException(
    "You can't specify ANY Unlabeled Arg following an optional Unlabeled Arg",
                    argName ) );

    if ( !req )
        OptionalUnlabeledTracker::gotOptional();
}

} // namespace ecl


#endif