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

#include "MissionAPIRegistry.h"
#include "MissionAPI.h"

FastMap<const Str, MissionAPI*>* MissionAPIRegistry::ApisByName_( NULL );
FastMap<const Str, MissionAPI*>* MissionAPIRegistry::ApisByExtension_( NULL );

MissionAPIRegistry::StaticDestructor MissionAPIRegistry::StaticDestructor_;

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

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

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

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