ICU-266 c++-ify UConverter (UConverterImpl resembles a vtable)
X-SVN-Rev: 723
This commit is contained in:
parent
7b6b7df37a
commit
20baeae401
@ -75,7 +75,7 @@ uchar.o uchriter.o ucmp8.o ucmp16.o ucmp32.o ucnv.o ucnv_bld.o \
|
||||
ucnv_cnv.o ucnv_err.o ucnv_io.o uhash.o uloc.o unicode.o unistr.o \
|
||||
ures.o ustring.o rbread.o rbdata.o ubidi.o ubidiln.o \
|
||||
bidi.o uvector.o udata.o unames.o utf_impl.o \
|
||||
ucnv_2022.o ucnv_utf.o ucnv_sbcs.o ucnv_mbcs.o
|
||||
ucnv2022.o ucnvlat1.o ucnv_utf.o ucnvsbcs.o ucnvmbcs.o
|
||||
|
||||
DEPS = $(OBJECTS:.o=.d)
|
||||
|
||||
|
@ -211,7 +211,7 @@ SOURCE=.\ucnv.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\ucnv_2022.c
|
||||
SOURCE=.\ucnv2022.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
@ -231,18 +231,22 @@ SOURCE=.\ucnv_io.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\ucnv_mbcs.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\ucnv_sbcs.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\ucnv_utf.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\ucnvlat1.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\ucnvmbcs.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\ucnvsbcs.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\udata.c
|
||||
# ADD CPP /Ze
|
||||
# End Source File
|
||||
|
@ -3,7 +3,7 @@
|
||||
* Copyright (C) 2000, International Business Machines
|
||||
* Corporation and others. All Rights Reserved.
|
||||
**********************************************************************
|
||||
* file name: ucnv_2022.cpp
|
||||
* file name: ucnv2022.cpp
|
||||
* encoding: US-ASCII
|
||||
* tab size: 8 (not used)
|
||||
* indentation:4
|
@ -19,145 +19,6 @@
|
||||
#include "unicode/ucnv.h"
|
||||
#include "ucnv_cnv.h"
|
||||
|
||||
/* ISO 8859-1 --------------------------------------------------------------- */
|
||||
|
||||
void T_UConverter_toUnicode_LATIN_1 (UConverter * _this,
|
||||
UChar ** target,
|
||||
const UChar * targetLimit,
|
||||
const char **source,
|
||||
const char *sourceLimit,
|
||||
int32_t *offsets,
|
||||
bool_t flush,
|
||||
UErrorCode * err)
|
||||
{
|
||||
unsigned char *mySource = (unsigned char *) *source;
|
||||
UChar *myTarget = *target;
|
||||
int32_t sourceLength = sourceLimit - (char *) mySource;
|
||||
int32_t readLen = 0;
|
||||
int32_t i = 0;
|
||||
|
||||
/*Since there is no risk of encountering illegal Chars
|
||||
*we need to pad our latin1 chars to create Unicode codepoints
|
||||
*we need to go as far a min(targetLen, sourceLen)
|
||||
*in case we don't have enough buffer space
|
||||
*we set the error flag accordingly
|
||||
*/
|
||||
if ((targetLimit - *target) < sourceLength)
|
||||
{
|
||||
readLen = targetLimit - *target;
|
||||
*err = U_INDEX_OUTOFBOUNDS_ERROR;
|
||||
}
|
||||
else
|
||||
{
|
||||
readLen = sourceLimit - (char *) mySource;
|
||||
}
|
||||
|
||||
for (i = 0; i < readLen; i++) myTarget[i] = (UChar) mySource[i];
|
||||
|
||||
*target += i;
|
||||
*source += i;
|
||||
return;
|
||||
}
|
||||
|
||||
void T_UConverter_fromUnicode_LATIN_1 (UConverter * _this,
|
||||
char **target,
|
||||
const char *targetLimit,
|
||||
const UChar ** source,
|
||||
const UChar * sourceLimit,
|
||||
int32_t *offsets,
|
||||
bool_t flush,
|
||||
UErrorCode * err)
|
||||
{
|
||||
const UChar *mySource = *source;
|
||||
unsigned char *myTarget = (unsigned char *) *target;
|
||||
int32_t mySourceIndex = 0;
|
||||
int32_t myTargetIndex = 0;
|
||||
int32_t targetLength = targetLimit - (char *) myTarget;
|
||||
int32_t sourceLength = sourceLimit - mySource;
|
||||
|
||||
/*writing the char to the output stream */
|
||||
while (mySourceIndex < sourceLength)
|
||||
{
|
||||
|
||||
if (myTargetIndex < targetLength)
|
||||
{
|
||||
if (mySource[mySourceIndex] < 0x0100)
|
||||
{
|
||||
/*writes the char to the output stream */
|
||||
myTarget[myTargetIndex++] = (char) mySource[mySourceIndex++];
|
||||
}
|
||||
else
|
||||
{
|
||||
*err = U_INVALID_CHAR_FOUND;
|
||||
_this->invalidUCharBuffer[0] = (UChar) mySource[mySourceIndex++];
|
||||
_this->invalidUCharLength = 1;
|
||||
|
||||
/* Needed explicit cast for myTarget on MVS to make compiler happy - JJD */
|
||||
FromU_CALLBACK_MACRO(_this,
|
||||
(char *)myTarget,
|
||||
myTargetIndex,
|
||||
targetLimit,
|
||||
mySource,
|
||||
mySourceIndex,
|
||||
sourceLimit,
|
||||
offsets,
|
||||
flush,
|
||||
err);
|
||||
|
||||
if (U_FAILURE (*err)) break;
|
||||
_this->invalidUCharLength = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
*err = U_INDEX_OUTOFBOUNDS_ERROR;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
*target += myTargetIndex;
|
||||
*source += mySourceIndex;;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
UChar T_UConverter_getNextUChar_LATIN_1(UConverter* converter,
|
||||
const char** source,
|
||||
const char* sourceLimit,
|
||||
UErrorCode* err)
|
||||
{
|
||||
|
||||
/* Empties the internal buffers if need be
|
||||
* In this case since ErrorFunctors are never called
|
||||
* (LATIN_1 is a subset of Unicode)
|
||||
*/
|
||||
|
||||
if ((*source)+1 > sourceLimit)
|
||||
{
|
||||
*err = U_INDEX_OUTOFBOUNDS_ERROR;
|
||||
return 0xFFFD;
|
||||
}
|
||||
|
||||
return (UChar)*((*source)++);
|
||||
}
|
||||
|
||||
static UConverterImpl _Latin1Impl={
|
||||
UCNV_LATIN_1,
|
||||
|
||||
T_UConverter_toUnicode_LATIN_1,
|
||||
NULL,
|
||||
T_UConverter_fromUnicode_LATIN_1,
|
||||
NULL,
|
||||
T_UConverter_getNextUChar_LATIN_1
|
||||
};
|
||||
|
||||
extern UConverterSharedData _Latin1Data={
|
||||
sizeof(UConverterSharedData), ~0,
|
||||
NULL, NULL, &_Latin1Impl, "LATIN_1",
|
||||
819, UCNV_IBM, UCNV_LATIN_1, 1, 1,
|
||||
{ 0, 1, 0x1a, 0, 0, 0 }
|
||||
};
|
||||
|
||||
/* UTF-8 -------------------------------------------------------------------- */
|
||||
|
||||
/* UTF-8 Conversion DATA
|
||||
|
159
icu4c/source/common/ucnvlat1.c
Normal file
159
icu4c/source/common/ucnvlat1.c
Normal file
@ -0,0 +1,159 @@
|
||||
/*
|
||||
**********************************************************************
|
||||
* Copyright (C) 2000, International Business Machines
|
||||
* Corporation and others. All Rights Reserved.
|
||||
**********************************************************************
|
||||
* file name: ucnvlat1.cpp
|
||||
* encoding: US-ASCII
|
||||
* tab size: 8 (not used)
|
||||
* indentation:4
|
||||
*
|
||||
* created on: 2000feb07
|
||||
* created by: Markus W. Scherer
|
||||
*/
|
||||
|
||||
#include "unicode/utypes.h"
|
||||
#include "ucmp16.h"
|
||||
#include "ucmp8.h"
|
||||
#include "unicode/ucnv_bld.h"
|
||||
#include "unicode/ucnv.h"
|
||||
#include "ucnv_cnv.h"
|
||||
|
||||
/* ISO 8859-1 --------------------------------------------------------------- */
|
||||
|
||||
void T_UConverter_toUnicode_LATIN_1 (UConverter * _this,
|
||||
UChar ** target,
|
||||
const UChar * targetLimit,
|
||||
const char **source,
|
||||
const char *sourceLimit,
|
||||
int32_t *offsets,
|
||||
bool_t flush,
|
||||
UErrorCode * err)
|
||||
{
|
||||
unsigned char *mySource = (unsigned char *) *source;
|
||||
UChar *myTarget = *target;
|
||||
int32_t sourceLength = sourceLimit - (char *) mySource;
|
||||
int32_t readLen = 0;
|
||||
int32_t i = 0;
|
||||
|
||||
/*Since there is no risk of encountering illegal Chars
|
||||
*we need to pad our latin1 chars to create Unicode codepoints
|
||||
*we need to go as far a min(targetLen, sourceLen)
|
||||
*in case we don't have enough buffer space
|
||||
*we set the error flag accordingly
|
||||
*/
|
||||
if ((targetLimit - *target) < sourceLength)
|
||||
{
|
||||
readLen = targetLimit - *target;
|
||||
*err = U_INDEX_OUTOFBOUNDS_ERROR;
|
||||
}
|
||||
else
|
||||
{
|
||||
readLen = sourceLimit - (char *) mySource;
|
||||
}
|
||||
|
||||
for (i = 0; i < readLen; i++) myTarget[i] = (UChar) mySource[i];
|
||||
|
||||
*target += i;
|
||||
*source += i;
|
||||
return;
|
||||
}
|
||||
|
||||
void T_UConverter_fromUnicode_LATIN_1 (UConverter * _this,
|
||||
char **target,
|
||||
const char *targetLimit,
|
||||
const UChar ** source,
|
||||
const UChar * sourceLimit,
|
||||
int32_t *offsets,
|
||||
bool_t flush,
|
||||
UErrorCode * err)
|
||||
{
|
||||
const UChar *mySource = *source;
|
||||
unsigned char *myTarget = (unsigned char *) *target;
|
||||
int32_t mySourceIndex = 0;
|
||||
int32_t myTargetIndex = 0;
|
||||
int32_t targetLength = targetLimit - (char *) myTarget;
|
||||
int32_t sourceLength = sourceLimit - mySource;
|
||||
|
||||
/*writing the char to the output stream */
|
||||
while (mySourceIndex < sourceLength)
|
||||
{
|
||||
|
||||
if (myTargetIndex < targetLength)
|
||||
{
|
||||
if (mySource[mySourceIndex] < 0x0100)
|
||||
{
|
||||
/*writes the char to the output stream */
|
||||
myTarget[myTargetIndex++] = (char) mySource[mySourceIndex++];
|
||||
}
|
||||
else
|
||||
{
|
||||
*err = U_INVALID_CHAR_FOUND;
|
||||
_this->invalidUCharBuffer[0] = (UChar) mySource[mySourceIndex++];
|
||||
_this->invalidUCharLength = 1;
|
||||
|
||||
/* Needed explicit cast for myTarget on MVS to make compiler happy - JJD */
|
||||
FromU_CALLBACK_MACRO(_this,
|
||||
(char *)myTarget,
|
||||
myTargetIndex,
|
||||
targetLimit,
|
||||
mySource,
|
||||
mySourceIndex,
|
||||
sourceLimit,
|
||||
offsets,
|
||||
flush,
|
||||
err);
|
||||
|
||||
if (U_FAILURE (*err)) break;
|
||||
_this->invalidUCharLength = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
*err = U_INDEX_OUTOFBOUNDS_ERROR;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
*target += myTargetIndex;
|
||||
*source += mySourceIndex;;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
UChar T_UConverter_getNextUChar_LATIN_1(UConverter* converter,
|
||||
const char** source,
|
||||
const char* sourceLimit,
|
||||
UErrorCode* err)
|
||||
{
|
||||
|
||||
/* Empties the internal buffers if need be
|
||||
* In this case since ErrorFunctors are never called
|
||||
* (LATIN_1 is a subset of Unicode)
|
||||
*/
|
||||
|
||||
if ((*source)+1 > sourceLimit)
|
||||
{
|
||||
*err = U_INDEX_OUTOFBOUNDS_ERROR;
|
||||
return 0xFFFD;
|
||||
}
|
||||
|
||||
return (UChar)*((*source)++);
|
||||
}
|
||||
|
||||
static UConverterImpl _Latin1Impl={
|
||||
UCNV_LATIN_1,
|
||||
|
||||
T_UConverter_toUnicode_LATIN_1,
|
||||
NULL,
|
||||
T_UConverter_fromUnicode_LATIN_1,
|
||||
NULL,
|
||||
T_UConverter_getNextUChar_LATIN_1
|
||||
};
|
||||
|
||||
extern UConverterSharedData _Latin1Data={
|
||||
sizeof(UConverterSharedData), ~0,
|
||||
NULL, NULL, &_Latin1Impl, "LATIN_1",
|
||||
819, UCNV_IBM, UCNV_LATIN_1, 1, 1,
|
||||
{ 0, 1, 0x1a, 0, 0, 0 }
|
||||
};
|
@ -3,7 +3,7 @@
|
||||
* Copyright (C) 2000, International Business Machines
|
||||
* Corporation and others. All Rights Reserved.
|
||||
**********************************************************************
|
||||
* file name: ucnv_mbcs.cpp
|
||||
* file name: ucnvmbcs.cpp
|
||||
* encoding: US-ASCII
|
||||
* tab size: 8 (not used)
|
||||
* indentation:4
|
@ -3,7 +3,7 @@
|
||||
* Copyright (C) 2000, International Business Machines
|
||||
* Corporation and others. All Rights Reserved.
|
||||
**********************************************************************
|
||||
* file name: ucnv_sbcs.cpp
|
||||
* file name: ucnvsbcs.cpp
|
||||
* encoding: US-ASCII
|
||||
* tab size: 8 (not used)
|
||||
* indentation:4
|
Loading…
Reference in New Issue
Block a user