/** \file
 *
 *  Contains the MissionAPIRegistry class definition.
 *
 *  Copyright (c) 2007,2008,2009 MBARI
 *  MBARI Proprietary Information.  All Rights Reserved
 *
 */

#ifndef MISSIONAPIREGISTRY_H_
#define MISSIONAPIREGISTRY_H_

#include "utils/FastMap.h"
#include "utils/Str.h"

class MissionAPI;

/** \ingroup missionScript
 *
 *  Registry of simpleton classes that implement MissionAPI
 */
class MissionAPIRegistry
{
public:
    static void Register( const char* const name, const char* const ext, MissionAPI* api );
    static MissionAPI* FindByName( const char* const name );
    static MissionAPI* FindByExtension( const char* const extension );
    static FastMap<const Str, MissionAPI*>* GetApisByExtension()
    {
        return ApisByExtension_;
    }

private:
    /// Purely static class has a private constructor with no implementation
    MissionAPIRegistry();
    static FastMap<const Str, MissionAPI*>* ApisByName_;
    static FastMap<const Str, MissionAPI*>* ApisByExtension_;

    class StaticDestructor
    {
    public:
        virtual ~StaticDestructor();
    };
    static StaticDestructor StaticDestructor_;
};

#endif /* MISSIONAPIREGISTRY_H_ */
