xref: /haiku/src/kits/translation/FuncTranslator.cpp (revision 6e184da0bf3d609936178412218eebfa9616627a)
1f90e4543SAxel Dörfler /*
2f90e4543SAxel Dörfler  * Copyright 2002-2006, Haiku, Inc. All Rights Reserved.
3f90e4543SAxel Dörfler  * Distributed under the terms of the MIT License.
4f90e4543SAxel Dörfler  *
5f90e4543SAxel Dörfler  * Authors:
6f90e4543SAxel Dörfler  *		Michael Wilber
7f90e4543SAxel Dörfler  *		Axel Dörfler, axeld@pinc-software.de
8f90e4543SAxel Dörfler  */
927aa9660SMatthew Wilber 
10f90e4543SAxel Dörfler /*!
11f90e4543SAxel Dörfler 	This file contains the BTranslator based object for
12f90e4543SAxel Dörfler 	function based translators, aka, the translators
13f90e4543SAxel Dörfler 	that don't use the make_nth_translator() mechanism.
1427aa9660SMatthew Wilber 
15f90e4543SAxel Dörfler 	This class is used by the BTranslatorRoster class
16f90e4543SAxel Dörfler 	so that function based translators, make_nth_translator()
17f90e4543SAxel Dörfler 	translators and private BTranslator objects could be
18f90e4543SAxel Dörfler 	accessed in the same way.
19f90e4543SAxel Dörfler */
20f90e4543SAxel Dörfler 
21f90e4543SAxel Dörfler 
22f90e4543SAxel Dörfler #include "FuncTranslator.h"
23f90e4543SAxel Dörfler 
24b0bc48fbSAxel Dörfler #include <string.h>
25b0bc48fbSAxel Dörfler 
26f90e4543SAxel Dörfler 
27f90e4543SAxel Dörfler namespace BPrivate {
28f90e4543SAxel Dörfler 
BFuncTranslator(const translator_data & data)29f90e4543SAxel Dörfler BFuncTranslator::BFuncTranslator(const translator_data& data)
3027aa9660SMatthew Wilber {
31*6e184da0SMarcus Overhagen 	fData = data;
3227aa9660SMatthew Wilber }
3327aa9660SMatthew Wilber 
34f90e4543SAxel Dörfler 
~BFuncTranslator()3527aa9660SMatthew Wilber BFuncTranslator::~BFuncTranslator()
3627aa9660SMatthew Wilber {
3727aa9660SMatthew Wilber }
3827aa9660SMatthew Wilber 
39f90e4543SAxel Dörfler 
40f90e4543SAxel Dörfler const char *
TranslatorName() const41f90e4543SAxel Dörfler BFuncTranslator::TranslatorName() const
4227aa9660SMatthew Wilber {
43f90e4543SAxel Dörfler 	return fData.name;
44f90e4543SAxel Dörfler }
45f90e4543SAxel Dörfler 
46f90e4543SAxel Dörfler 
47f90e4543SAxel Dörfler const char *
TranslatorInfo() const48f90e4543SAxel Dörfler BFuncTranslator::TranslatorInfo() const
49f90e4543SAxel Dörfler {
50f90e4543SAxel Dörfler 	return fData.info;
51f90e4543SAxel Dörfler }
52f90e4543SAxel Dörfler 
53f90e4543SAxel Dörfler 
54f90e4543SAxel Dörfler int32
TranslatorVersion() const55f90e4543SAxel Dörfler BFuncTranslator::TranslatorVersion() const
56f90e4543SAxel Dörfler {
57f90e4543SAxel Dörfler 	return fData.version;
58f90e4543SAxel Dörfler }
59f90e4543SAxel Dörfler 
60f90e4543SAxel Dörfler 
61f90e4543SAxel Dörfler const translation_format *
InputFormats(int32 * _count) const62f90e4543SAxel Dörfler BFuncTranslator::InputFormats(int32* _count) const
63f90e4543SAxel Dörfler {
64f90e4543SAxel Dörfler 	if (_count == NULL || fData.input_formats == NULL)
6527aa9660SMatthew Wilber 		return NULL;
66f90e4543SAxel Dörfler 
67f90e4543SAxel Dörfler 	int32 count = 0;
68f90e4543SAxel Dörfler 	while (fData.input_formats[count].type) {
69f90e4543SAxel Dörfler 		count++;
7027aa9660SMatthew Wilber 	}
7127aa9660SMatthew Wilber 
72f90e4543SAxel Dörfler 	*_count = count;
73f90e4543SAxel Dörfler 	return fData.input_formats;
74f90e4543SAxel Dörfler }
75f90e4543SAxel Dörfler 
76f90e4543SAxel Dörfler 
77f90e4543SAxel Dörfler const translation_format *
OutputFormats(int32 * _count) const78f90e4543SAxel Dörfler BFuncTranslator::OutputFormats(int32* _count) const
7927aa9660SMatthew Wilber {
80f90e4543SAxel Dörfler 	if (_count == NULL || fData.output_formats == NULL)
8127aa9660SMatthew Wilber 		return NULL;
82f90e4543SAxel Dörfler 
83f90e4543SAxel Dörfler 	int32 count = 0;
84f90e4543SAxel Dörfler 	while (fData.output_formats[count].type) {
85f90e4543SAxel Dörfler 		count++;
8627aa9660SMatthew Wilber 	}
8727aa9660SMatthew Wilber 
88f90e4543SAxel Dörfler 	*_count = count;
89f90e4543SAxel Dörfler 	return fData.output_formats;
90f90e4543SAxel Dörfler }
91f90e4543SAxel Dörfler 
92f90e4543SAxel Dörfler 
93f90e4543SAxel Dörfler status_t
Identify(BPositionIO * source,const translation_format * format,BMessage * ioExtension,translator_info * info,uint32 type)94f90e4543SAxel Dörfler BFuncTranslator::Identify(BPositionIO* source, const translation_format* format,
95f90e4543SAxel Dörfler 	BMessage* ioExtension, translator_info* info, uint32 type)
9627aa9660SMatthew Wilber {
97f90e4543SAxel Dörfler 	if (fData.identify_hook == NULL)
9827aa9660SMatthew Wilber 		return B_ERROR;
99f90e4543SAxel Dörfler 
100f90e4543SAxel Dörfler 	return fData.identify_hook(source, format, ioExtension, info, type);
10127aa9660SMatthew Wilber }
10227aa9660SMatthew Wilber 
103f90e4543SAxel Dörfler 
104f90e4543SAxel Dörfler status_t
Translate(BPositionIO * source,const translator_info * info,BMessage * ioExtension,uint32 type,BPositionIO * destination)105f90e4543SAxel Dörfler BFuncTranslator::Translate(BPositionIO* source, const translator_info *info,
106f90e4543SAxel Dörfler 	BMessage* ioExtension, uint32 type, BPositionIO* destination)
10727aa9660SMatthew Wilber {
108f90e4543SAxel Dörfler 	if (fData.translate_hook == NULL)
10927aa9660SMatthew Wilber 		return B_ERROR;
110f90e4543SAxel Dörfler 
111f90e4543SAxel Dörfler 	return fData.translate_hook(source, info, ioExtension, type, destination);
11227aa9660SMatthew Wilber }
11327aa9660SMatthew Wilber 
114f90e4543SAxel Dörfler 
115f90e4543SAxel Dörfler status_t
MakeConfigurationView(BMessage * ioExtension,BView ** _view,BRect * _extent)116f90e4543SAxel Dörfler BFuncTranslator::MakeConfigurationView(BMessage* ioExtension,
117f90e4543SAxel Dörfler 	BView** _view, BRect* _extent)
11827aa9660SMatthew Wilber {
119f90e4543SAxel Dörfler 	if (fData.make_config_hook == NULL)
12027aa9660SMatthew Wilber 		return B_ERROR;
121f90e4543SAxel Dörfler 
122f90e4543SAxel Dörfler 	return fData.make_config_hook(ioExtension, _view, _extent);
12327aa9660SMatthew Wilber }
12427aa9660SMatthew Wilber 
125f90e4543SAxel Dörfler 
126f90e4543SAxel Dörfler status_t
GetConfigurationMessage(BMessage * ioExtension)127f90e4543SAxel Dörfler BFuncTranslator::GetConfigurationMessage(BMessage* ioExtension)
12827aa9660SMatthew Wilber {
129f90e4543SAxel Dörfler 	if (fData.get_config_message_hook == NULL)
13027aa9660SMatthew Wilber 		return B_ERROR;
131f90e4543SAxel Dörfler 
132f90e4543SAxel Dörfler 	return fData.get_config_message_hook(ioExtension);
13327aa9660SMatthew Wilber }
13427aa9660SMatthew Wilber 
135f90e4543SAxel Dörfler }	// namespace BPrivate
136