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 \
|
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 \
|
ures.o ustring.o rbread.o rbdata.o ubidi.o ubidiln.o \
|
||||||
bidi.o uvector.o udata.o unames.o utf_impl.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)
|
DEPS = $(OBJECTS:.o=.d)
|
||||||
|
|
||||||
|
@ -211,7 +211,7 @@ SOURCE=.\ucnv.c
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\ucnv_2022.c
|
SOURCE=.\ucnv2022.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
@ -231,18 +231,22 @@ SOURCE=.\ucnv_io.c
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin 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
|
SOURCE=.\ucnv_utf.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin 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
|
SOURCE=.\udata.c
|
||||||
# ADD CPP /Ze
|
# ADD CPP /Ze
|
||||||
# End Source File
|
# End Source File
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
* Copyright (C) 2000, International Business Machines
|
* Copyright (C) 2000, International Business Machines
|
||||||
* Corporation and others. All Rights Reserved.
|
* Corporation and others. All Rights Reserved.
|
||||||
**********************************************************************
|
**********************************************************************
|
||||||
* file name: ucnv_2022.cpp
|
* file name: ucnv2022.cpp
|
||||||
* encoding: US-ASCII
|
* encoding: US-ASCII
|
||||||
* tab size: 8 (not used)
|
* tab size: 8 (not used)
|
||||||
* indentation:4
|
* indentation:4
|
@ -19,145 +19,6 @@
|
|||||||
#include "unicode/ucnv.h"
|
#include "unicode/ucnv.h"
|
||||||
#include "ucnv_cnv.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 -------------------------------------------------------------------- */
|
||||||
|
|
||||||
/* UTF-8 Conversion DATA
|
/* 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
|
* Copyright (C) 2000, International Business Machines
|
||||||
* Corporation and others. All Rights Reserved.
|
* Corporation and others. All Rights Reserved.
|
||||||
**********************************************************************
|
**********************************************************************
|
||||||
* file name: ucnv_mbcs.cpp
|
* file name: ucnvmbcs.cpp
|
||||||
* encoding: US-ASCII
|
* encoding: US-ASCII
|
||||||
* tab size: 8 (not used)
|
* tab size: 8 (not used)
|
||||||
* indentation:4
|
* indentation:4
|
@ -3,7 +3,7 @@
|
|||||||
* Copyright (C) 2000, International Business Machines
|
* Copyright (C) 2000, International Business Machines
|
||||||
* Corporation and others. All Rights Reserved.
|
* Corporation and others. All Rights Reserved.
|
||||||
**********************************************************************
|
**********************************************************************
|
||||||
* file name: ucnv_sbcs.cpp
|
* file name: ucnvsbcs.cpp
|
||||||
* encoding: US-ASCII
|
* encoding: US-ASCII
|
||||||
* tab size: 8 (not used)
|
* tab size: 8 (not used)
|
||||||
* indentation:4
|
* indentation:4
|
Loading…
Reference in New Issue
Block a user