|
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 |
|