blob: cef73e26a8cbb80340c4191a840e145682f80309 [file] [log] [blame]
/* $Id$
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to you under the Apache License, Version
* 2.0 (the "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* etch_tdformat.c
* a factory used to abstract tagged data handler constructors
*/
#include "etch_tdformat.h"
#include "etch_objecttypes.h"
#include <wchar.h>
void etchtdf_init();
int etchtdf_name_to_id(wchar_t*);
tagged_data_input* etchtdf_defnewtdi (etch_value_factory*);
tagged_data_output* etchtdf_defnewtdo (etch_value_factory*);
const wchar_t* tdfname_binary = L"binary";
const wchar_t* tdfname_xml = L"xml";
/*
* tagdata_format_factory()
* @param format_name name of the tagged data format, e.g., L"binary",
* caller retains ownership of this string.
* @return a format factory (interface to tagged data constructors) for specified format.
* caller assumes ownership of this object.
*/
tagdata_format_factory* get_format_factory(wchar_t* format_name)
{
tagdata_format_factory* ff = (tagdata_format_factory*) new_object
(sizeof(tagdata_format_factory), ETCHTYPEB_FORMATFACT, CLASSID_FORMATFACT);
ff->new_tagdata_input = etchtdf_defnewtdi;
ff->new_tagdata_output = etchtdf_defnewtdo;
switch(etchtdf_name_to_id(format_name))
{ case ETCH_TAGDATA_FORMAT_BINARY:
((etch_object*)ff)->class_id = CLASSID_FORMATFACT_BINARY;
ff->new_tagdata_input = new_binary_tdi;
ff->new_tagdata_output = new_binary_tdo;
break;
case ETCH_TAGDATA_FORMAT_XML:
((etch_object*)ff)->class_id = CLASSID_FORMATFACT_XML;
/* overrides will be plugged in here at such time as we have xml tdi/tdo */
break;
default: /* name not recognized */
break;
}
return ff;
}
/*
* etchtdf_init()
* static data lazy initializer
*/
void etchtdf_init()
{
if (is_tdf_initialized) return;
tdformat_names[ETCH_TAGDATA_FORMAT_BINARY] = tdfname_binary;
tdformat_names[ETCH_TAGDATA_FORMAT_XML] = tdfname_xml;
is_tdf_initialized = TRUE;
}
/*
* etchtdf_name_to_id()
* translate name of tagdata format to format ID (index)
*/
int etchtdf_name_to_id(wchar_t* format_name)
{
int i = 0;
etchtdf_init();
if (NULL == format_name) return -1;
for(; i < ETCH_TAGDATA_FORMAT_COUNT; i++)
if (0 == wcscmp(format_name, tdformat_names[i]))
return i;
return -1;
}
/*
* tdf_defnewtdi()
* default virtual new_tagdata_input()
*/
tagged_data_input* etchtdf_defnewtdi (etch_value_factory* vf)
{
return NULL;
}
/*
* tdf_defnewtdi()
* default virtual new_tagdata_output()
*/
tagged_data_output* etchtdf_defnewtdo (etch_value_factory* vf)
{
return NULL;
}