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

#include "ScriptAPIRegistry.h"
#include "ScriptAPI.h"

FastMap<const Str, ScriptAPI*>* ScriptAPIRegistry::ApisByName_( NULL );
FastMap<const Str, ScriptAPI*>* ScriptAPIRegistry::ApisByExtension_( NULL );

ScriptAPIRegistry::StaticDestructor ScriptAPIRegistry::StaticDestructor_;

ScriptAPIRegistry::StaticDestructor::~StaticDestructor()
{
    if( NULL != ApisByName_ )
    {
        delete ApisByName_;
    }
    if( NULL != ApisByExtension_ )
    {
        delete ApisByExtension_;
    }
}

void ScriptAPIRegistry::Register( const char* const name, const char* const ext, ScriptAPI* api )
{
    if( NULL == ApisByName_ )
    {
        ApisByName_ = new FastMap<const Str, ScriptAPI*>();
        ApisByExtension_ = new FastMap<const Str, ScriptAPI*>();
    }
    ApisByName_->put( name, api );
    ApisByExtension_->put( ext, api );
}

ScriptAPI* ScriptAPIRegistry::FindByName( const char* const name )
{
    return ApisByName_ == NULL ? NULL : ApisByName_->get( name );
}

ScriptAPI* ScriptAPIRegistry::FindByExtension( const char* const extension )
{
    return ApisByExtension_ == NULL ? NULL : ApisByExtension_->get( extension );
}
