1/* 2 * Copyright 2002-2006, Haiku, Inc. All Rights Reserved. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Michael Wilber 7 * Axel Dörfler, axeld@pinc-software.de 8 */ 9 10/*! 11 This file contains the BTranslator based object for 12 function based translators, aka, the translators 13 that don't use the make_nth_translator() mechanism. 14 15 This class is used by the BTranslatorRoster class 16 so that function based translators, make_nth_translator() 17 translators and private BTranslator objects could be 18 accessed in the same way. 19*/ 20 21 22#include "FuncTranslator.h" 23 24#include <string.h> 25 26 27namespace BPrivate { 28 29BFuncTranslator::BFuncTranslator(const translator_data& data) 30{ 31 fData = data; 32} 33 34 35BFuncTranslator::~BFuncTranslator() 36{ 37} 38 39 40const char * 41BFuncTranslator::TranslatorName() const 42{ 43 return fData.name; 44} 45 46 47const char * 48BFuncTranslator::TranslatorInfo() const 49{ 50 return fData.info; 51} 52 53 54int32 55BFuncTranslator::TranslatorVersion() const 56{ 57 return fData.version; 58} 59 60 61const translation_format * 62BFuncTranslator::InputFormats(int32* _count) const 63{ 64 if (_count == NULL || fData.input_formats == NULL) 65 return NULL; 66 67 int32 count = 0; 68 while (fData.input_formats[count].type) { 69 count++; 70 } 71 72 *_count = count; 73 return fData.input_formats; 74} 75 76 77const translation_format * 78BFuncTranslator::OutputFormats(int32* _count) const 79{ 80 if (_count == NULL || fData.output_formats == NULL) 81 return NULL; 82 83 int32 count = 0; 84 while (fData.output_formats[count].type) { 85 count++; 86 } 87 88 *_count = count; 89 return fData.output_formats; 90} 91 92 93status_t 94BFuncTranslator::Identify(BPositionIO* source, const translation_format* format, 95 BMessage* ioExtension, translator_info* info, uint32 type) 96{ 97 if (fData.identify_hook == NULL) 98 return B_ERROR; 99 100 return fData.identify_hook(source, format, ioExtension, info, type); 101} 102 103 104status_t 105BFuncTranslator::Translate(BPositionIO* source, const translator_info *info, 106 BMessage* ioExtension, uint32 type, BPositionIO* destination) 107{ 108 if (fData.translate_hook == NULL) 109 return B_ERROR; 110 111 return fData.translate_hook(source, info, ioExtension, type, destination); 112} 113 114 115status_t 116BFuncTranslator::MakeConfigurationView(BMessage* ioExtension, 117 BView** _view, BRect* _extent) 118{ 119 if (fData.make_config_hook == NULL) 120 return B_ERROR; 121 122 return fData.make_config_hook(ioExtension, _view, _extent); 123} 124 125 126status_t 127BFuncTranslator::GetConfigurationMessage(BMessage* ioExtension) 128{ 129 if (fData.get_config_message_hook == NULL) 130 return B_ERROR; 131 132 return fData.get_config_message_hook(ioExtension); 133} 134 135} // namespace BPrivate 136