12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #ifndef _SVC_STRINGCONVERTER_H
- #define _SVC_STRINGCONVERTER_H
- #include <bfc/dispatch.h>
- #include <api/service/services.h>
- #include <api/service/svcs/svc_stringtypes.h>
- // Porting Rule: A new service to respond to at least OSNATIVE and UTF16 shall be
- // provided for every new platform. This service should provide transcoding
- // to and from the platform's native internationalized string encoding format
- // (ie: MBCS under Win9x, WorldScript on the Mac, etc etc etc).and to and from
- // UTF16. If the OSNATIVE string _IS_ UTF16, just respond that you can convert
- // both.
- class NOVTABLE svc_stringConverter : public Dispatchable {
- public:
- static FOURCC getServiceType() { return WaSvc::STRINGCONVERTER; }
- // test the type.
- int canConvert(FOURCC encoding_type);
- // The return code is the number of bytes written to the output buffer, or the error.
- // A return code of 0 is not an error, other than you passing NULL or a size 0 buffer won't do much interesting.
- int convertToUTF8(FOURCC encoding_type, const void *in_buffer, int size_in_bytes, char *out_buffer, int size_out_bytes);
- int preflightToUTF8(FOURCC encoding_type, const void *in_buffer, int size_in_bytes);
- int convertFromUTF8(FOURCC encoding_type, const char *in_buffer, int size_in_bytes, void *out_buffer, int size_out_bytes);
- int preflightFromUTF8(FOURCC encoding_type, const char *in_buffer, int size_in_bytes);
- protected:
- enum {
- CANCONVERT,
- CONVERTTOUTF8,
- PREFLIGHTTOUTF8,
- CONVERTFROMUTF8,
- PREFLIGHTFROMUTF8
- };
- };
- inline
- int svc_stringConverter::canConvert(FOURCC encoding_type) {
- return _call(CANCONVERT, (int)0, encoding_type);
- }
- inline
- int svc_stringConverter::convertToUTF8(FOURCC encoding_type, const void *in_buffer, int size_in_bytes, char *out_buffer, int size_out_bytes) {
- return _call(CONVERTTOUTF8, (int)0, encoding_type, in_buffer, size_in_bytes, out_buffer, size_out_bytes);
- }
- inline
- int svc_stringConverter::preflightToUTF8(FOURCC encoding_type, const void *in_buffer, int size_in_bytes) {
- return _call(PREFLIGHTTOUTF8, (int)0, encoding_type, in_buffer, size_in_bytes);
- }
- inline
- int svc_stringConverter::convertFromUTF8(FOURCC encoding_type, const char *in_buffer, int size_in_bytes, void *out_buffer, int size_out_bytes) {
- return _call(CONVERTFROMUTF8, (int)0, encoding_type, in_buffer, size_in_bytes, out_buffer, size_out_bytes);
- }
- inline
- int svc_stringConverter::preflightFromUTF8(FOURCC encoding_type, const char *in_buffer, int size_in_bytes) {
- return _call(PREFLIGHTFROMUTF8, (int)0, encoding_type, in_buffer, size_in_bytes);
- }
- // implementor derives from this one
- class NOVTABLE svc_stringConverterI : public svc_stringConverter {
- public:
- // test the type
- virtual int canConvert(FOURCC encoding_type) = 0;
- virtual int convertToUTF8(FOURCC encoding_type, const void *in_buffer, int size_in_bytes, char *out_buffer, int size_out_bytes) = 0;
- virtual int preflightToUTF8(FOURCC encoding_type, const void *in_buffer, int size_in_bytes) = 0;
- virtual int convertFromUTF8(FOURCC encoding_type, const char *in_buffer, int size_in_bytes, void *out_buffer, int size_out_bytes) = 0;
- virtual int preflightFromUTF8(FOURCC encoding_type, const char *in_buffer, int size_in_bytes) = 0;
- protected:
- RECVS_DISPATCH;
- };
- #include <api/service/svc_enum.h>
- class StringConverterEnum : public SvcEnumT<svc_stringConverter> {
- public:
- StringConverterEnum(FOURCC enc_type) : encoding_type(enc_type) {}
- protected:
- virtual int testService(svc_stringConverter *svc) {
- return (svc->canConvert(encoding_type));
- }
- private:
- FOURCC encoding_type;
- };
- #endif // _SVC_STRINGCONVERTER_H
|