Blame lib/rawfilefactory.cpp

rpm-build d2b433
/*
rpm-build d2b433
 * libopenraw - rawfilefactory.cpp
rpm-build d2b433
 *
rpm-build d2b433
 * Copyright (C) 2006-2017 Hubert Figuière
rpm-build d2b433
 *
rpm-build d2b433
 * This library is free software: you can redistribute it and/or
rpm-build d2b433
 * modify it under the terms of the GNU Lesser General Public License
rpm-build d2b433
 * as published by the Free Software Foundation, either version 3 of
rpm-build d2b433
 * the License, or (at your option) any later version.
rpm-build d2b433
 *
rpm-build d2b433
 * This library is distributed in the hope that it will be useful,
rpm-build d2b433
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
rpm-build d2b433
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
rpm-build d2b433
 * Lesser General Public License for more details.
rpm-build d2b433
 *
rpm-build d2b433
 * You should have received a copy of the GNU Lesser General Public
rpm-build d2b433
 * License along with this library.  If not, see
rpm-build d2b433
 * <http://www.gnu.org/licenses/>.
rpm-build d2b433
 */
rpm-build d2b433
rpm-build d2b433
#include <stdlib.h>
rpm-build d2b433
#include <stddef.h>
rpm-build d2b433
rpm-build d2b433
#include <utility>
rpm-build d2b433
#include <cassert>
rpm-build d2b433
rpm-build d2b433
#include <libopenraw/debug.h>
rpm-build d2b433
rpm-build d2b433
#include "rawfile.hpp"
rpm-build d2b433
#include "rawfilefactory.hpp"
rpm-build d2b433
#include "trace.hpp"
rpm-build d2b433
rpm-build d2b433
using namespace Debug;
rpm-build d2b433
rpm-build d2b433
namespace OpenRaw {
rpm-build d2b433
rpm-build d2b433
namespace Internals {
rpm-build d2b433
rpm-build d2b433
RawFileFactory::RawFileFactory(RawFile::Type type,
rpm-build d2b433
                               const RawFileFactory::raw_file_factory_t &fn,
rpm-build d2b433
                               const char *ext)
rpm-build d2b433
{
rpm-build d2b433
    LOGDBG1("registering type %d\n", (int)type);
rpm-build d2b433
    registerType(type, fn, ext);
rpm-build d2b433
}
rpm-build d2b433
rpm-build d2b433
void RawFileFactory::registerType(RawFile::Type type,
rpm-build d2b433
                                  const RawFileFactory::raw_file_factory_t &fn,
rpm-build d2b433
                                  const char *ext)
rpm-build d2b433
{
rpm-build d2b433
    if (fn == nullptr) {
rpm-build d2b433
        LOGERR("NULL fn for registerFactory()\n");
rpm-build d2b433
        assert(fn == nullptr);
rpm-build d2b433
    }
rpm-build d2b433
    table()[type] = fn;
rpm-build d2b433
    extensions()[ext] = type;
rpm-build d2b433
}
rpm-build d2b433
rpm-build d2b433
void RawFileFactory::unRegisterType(RawFile::Type type)
rpm-build d2b433
{
rpm-build d2b433
    Table::iterator iter = table().find(type);
rpm-build d2b433
    if (iter == table().end()) {
rpm-build d2b433
        LOGERR("attempting to unregisterFactory() in unregistered element\n");
rpm-build d2b433
        assert(true);
rpm-build d2b433
    }
rpm-build d2b433
    table().erase(iter);
rpm-build d2b433
}
rpm-build d2b433
rpm-build d2b433
const char **RawFileFactory::fileExtensions()
rpm-build d2b433
{
rpm-build d2b433
    static const char **_fileExtensions = NULL;
rpm-build d2b433
    if (!_fileExtensions) {
rpm-build d2b433
        Extensions &ext = extensions();
rpm-build d2b433
        size_t s = ext.size();
rpm-build d2b433
        _fileExtensions = (const char **)calloc((s + 1), sizeof(char *));
rpm-build d2b433
        const char **current = _fileExtensions;
rpm-build d2b433
        Extensions::const_iterator iter(ext.begin());
rpm-build d2b433
        for (; iter != ext.end(); ++iter) {
rpm-build d2b433
            *current = iter->first.c_str();
rpm-build d2b433
            current++;
rpm-build d2b433
        }
rpm-build d2b433
    }
rpm-build d2b433
rpm-build d2b433
    return _fileExtensions;
rpm-build d2b433
}
rpm-build d2b433
}
rpm-build d2b433
}
rpm-build d2b433