/*
   ********************************************************************************
   *                                                                              *
   * COPYRIGHT:                                                                   *
   *   (C) Copyright International Business Machines Corporation, 1999            *
   *   Licensed Material - Program-Property of IBM - All Rights Reserved.         *
   *   US Government Users Restricted Rights - Use, duplication, or disclosure    *
   *   restricted by GSA ADP Schedule Contract with IBM Corp.                     *
   *                                                                              *
   ********************************************************************************
   *
   *
   *   uconv_cnv.h:
   *   defines all the low level conversion functions
   *   T_UnicodeConverter_{to,from}Unicode_$ConversionType
 */

#ifndef UCNV_CNV_H
#define UCNV_CNV_H

#include "utypes.h"
#include "ucnv_bld.h"

bool_t CONVERSION_SUCCESS (UErrorCode err);

void T_UConverter_toUnicode_SBCS (UConverter * converter,
				  UChar ** target,
				  const UChar * targetLimit,
				  const char **source,
				  const char *sourceLimit,
				  int32_t* offsets,
				  bool_t flush,
				  UErrorCode * err);

void T_UConverter_fromUnicode_SBCS (UConverter * converter,
				    char **target,
				    const char *targetLimit,
				    const UChar ** source,
				    const UChar * sourceLimit,
				    int32_t* offsets,
				    bool_t flush,
				    UErrorCode * err);

void T_UConverter_toUnicode_MBCS (UConverter * converter,
				  UChar ** target,
				  const UChar * targetLimit,
				  const char **source,
				  const char *sourceLimit,
				  int32_t* offsets,
				  bool_t flush,
				  UErrorCode * err);

void T_UConverter_fromUnicode_MBCS (UConverter * converter,
				    char **target,
				    const char *targetLimit,
				    const UChar ** source,
				    const UChar * sourceLimit,
				    int32_t* offsets,
				    bool_t flush,
				    UErrorCode * err);
void T_UConverter_toUnicode_MBCS_OFFSETS_LOGIC (UConverter * converter,
				  UChar ** target,
				  const UChar * targetLimit,
				  const char **source,
				  const char *sourceLimit,
				  int32_t* offsets,
				  bool_t flush,
				  UErrorCode * err);

void T_UConverter_fromUnicode_MBCS_OFFSETS_LOGIC (UConverter * converter,
				    char **target,
				    const char *targetLimit,
				    const UChar ** source,
				    const UChar * sourceLimit,
				    int32_t* offsets,
				    bool_t flush,
				    UErrorCode * err);

void T_UConverter_toUnicode_DBCS (UConverter * converter,
				  UChar ** target,
				  const UChar * targetLimit,
				  const char **source,
				  const char *sourceLimit,
				  int32_t* offsets,
				  bool_t flush,
				  UErrorCode * err);

void T_UConverter_fromUnicode_DBCS (UConverter * converter,
				    char **target,
				    const char *targetLimit,
				    const UChar ** source,
				    const UChar * sourceLimit,
				    int32_t* offsets,
				    bool_t flush,
				    UErrorCode * err);

void T_UConverter_fromUnicode_UTF16_BE (UConverter * converter,
					char **target,
					const char *targetLimit,
					const UChar ** source,
					const UChar * sourceLimit,
					int32_t* offsets,
					bool_t flush,
					UErrorCode * err);

void T_UConverter_toUnicode_UTF16_BE (UConverter * converter,
				      UChar ** target,
				      const UChar * targetLimit,
				      const char **source,
				      const char *sourceLimit,
				      int32_t* offsets,
				      bool_t flush,
				      UErrorCode * err);

void T_UConverter_fromUnicode_UTF16_LE (UConverter * converter,
					char **target,
					const char *targetLimit,
					const UChar ** source,
					const UChar * sourceLimit,
					int32_t* offsets,
					bool_t flush,
					UErrorCode * err);

void T_UConverter_toUnicode_EBCDIC_STATEFUL(UConverter * converter,
					    UChar ** target,
					    const UChar * targetLimit,
					    const char **source,
					    const char *sourceLimit,
					    int32_t* offsets,
					    bool_t flush,
					    UErrorCode * err);

void T_UConverter_fromUnicode_EBCDIC_STATEFUL(UConverter * converter,
					      char **target,
					      const char *targetLimit,
					      const UChar ** source,
					      const UChar * sourceLimit,
					      int32_t* offsets,
					      bool_t flush,
					      UErrorCode * err);

void T_UConverter_toUnicode_EBCDIC_STATEFUL_OFFSETS_LOGIC(UConverter * converter,
							  UChar ** target,
							  const UChar * targetLimit,
							  const char **source,
							  const char *sourceLimit,
							  int32_t* offsets,
							  bool_t flush,
							  UErrorCode * err);

void T_UConverter_fromUnicode_EBCDIC_STATEFUL_OFFSETS_LOGIC(UConverter * converter,
							    char **target,
							    const char *targetLimit,
							    const UChar ** source,
							    const UChar * sourceLimit,
							    int32_t* offsets,
							    bool_t flush,
							    UErrorCode * err);

void T_UConverter_toUnicode_ISO_2022(UConverter * converter,
				     UChar ** target,
				     const UChar * targetLimit,
				     const char **source,
				     const char *sourceLimit,
				     int32_t* offsets,
				     bool_t flush,
				     UErrorCode * err);

void T_UConverter_fromUnicode_ISO_2022(UConverter * converter,
				       char **target,
				       const char *targetLimit,
				       const UChar ** source,
				       const UChar * sourceLimit,
				       int32_t* offsets,
				       bool_t flush,
				       UErrorCode * err);

void T_UConverter_toUnicode_ISO_2022_OFFSETS_LOGIC(UConverter * converter,
				     UChar ** target,
				     const UChar * targetLimit,
				     const char **source,
				     const char *sourceLimit,
				     int32_t* offsets,
				     bool_t flush,
				     UErrorCode * err);

void T_UConverter_fromUnicode_ISO_2022_OFFSETS_LOGIC(UConverter * converter,
				       char **target,
				       const char *targetLimit,
				       const UChar ** source,
				       const UChar * sourceLimit,
				       int32_t* offsets,
				       bool_t flush,
				       UErrorCode * err);


void T_UConverter_toUnicode_UTF16_LE (UConverter * converter,
				      UChar ** target,
				      const UChar * targetLimit,
				      const char **source,
				      const char *sourceLimit,
				      int32_t* offsets,
				      bool_t flush,
				      UErrorCode * err);

void T_UConverter_fromUnicode_UTF8 (UConverter * converter,
				    char **target,
				    const char *targetLimit,
				    const UChar ** source,
				    const UChar * sourceLimit,
				    int32_t* offsets,
				    bool_t flush,
				    UErrorCode * err);

void T_UConverter_toUnicode_UTF8 (UConverter * converter,
				  UChar ** target,
				  const UChar * targetLimit,
				  const char **source,
				  const char *sourceLimit,
				  int32_t* offsets,
				  bool_t flush,
				  UErrorCode * err);

void T_UConverter_fromUnicode_UTF8_OFFSETS_LOGIC (UConverter * converter,
				    char **target,
				    const char *targetLimit,
				    const UChar ** source,
				    const UChar * sourceLimit,
				    int32_t* offsets,
				    bool_t flush,
				    UErrorCode * err);

void T_UConverter_toUnicode_UTF8_OFFSETS_LOGIC (UConverter * converter,
				  UChar ** target,
				  const UChar * targetLimit,
				  const char **source,
				  const char *sourceLimit,
				  int32_t* offsets,
				  bool_t flush,
				  UErrorCode * err);

void T_UConverter_fromUnicode_LATIN_1 (UConverter * converter,
				       char **target,
				       const char *targetLimit,
				       const UChar ** source,
				       const UChar * sourceLimit,
				       int32_t* offsets,
				       bool_t flush,
				       UErrorCode * err);

void T_UConverter_toUnicode_LATIN_1 (UConverter * converter,
				     UChar ** target,
				     const UChar * targetLimit,
				     const char **source,
				     const char *sourceLimit,
				     int32_t* offsets,
				     bool_t flush,
				     UErrorCode * err);

UChar T_UConverter_getNextUChar_LATIN_1 (UConverter * converter,
					 const char **source,
					 const char *sourceLimit,
					 UErrorCode * err);

UChar T_UConverter_getNextUChar_SBCS (UConverter * converter,
				      const char **source,
				      const char *sourceLimit,
				      UErrorCode * err);

UChar T_UConverter_getNextUChar_DBCS (UConverter * converter,
				      const char **source,
				      const char *sourceLimit,
				      UErrorCode * err);

UChar T_UConverter_getNextUChar_MBCS (UConverter * converter,
				      const char **source,
				      const char *sourceLimit,
				      UErrorCode * err);

UChar T_UConverter_getNextUChar_UTF8 (UConverter * converter,
				      const char **source,
				      const char *sourceLimit,
				      UErrorCode * err);

UChar T_UConverter_getNextUChar_UTF16_BE (UConverter * converter,
					  const char **source,
					  const char *sourceLimit,
					  UErrorCode * err);

UChar T_UConverter_getNextUChar_UTF16_LE (UConverter * converter,
					  const char **source,
					  const char *sourceLimit,
					  UErrorCode * err);


UChar T_UConverter_getNextUChar_EBCDIC_STATEFUL (UConverter * converter,
						 const char **source,
						 const char *sourceLimit,
						 UErrorCode * err);

UChar T_UConverter_getNextUChar_ISO_2022 (UConverter * converter,
					  const char **source,
					  const char *sourceLimit,
					  UErrorCode * err);

#endif /* UCNV_CNV */
