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

#ifndef SCRIPTAPIREGISTRY_H_
#define SCRIPTAPIREGISTRY_H_

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

class ScriptAPI;

/**
 *  Registry of simpleton classes that implement MissionAPI
 *
 *  \ingroup missionScript
 */
class ScriptAPIRegistry
{
public:
    static void Register( const char* const name, const char* const ext, ScriptAPI* api );
    static ScriptAPI* FindByName( const char* const name );
    static ScriptAPI* FindByExtension( const char* const extension );
private:
    /// Purely static class has a private constructor with no implementation
    ScriptAPIRegistry();
    static FastMap<const Str, ScriptAPI*>* ApisByName_;
    static FastMap<const Str, ScriptAPI*>* ApisByExtension_;

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

};

#endif /* SCRIPTAPIREGISTRY_H_ */
