X-Git-Url: https://pd.if.org/git/?p=pdclib.old;a=blobdiff_plain;f=internals%2F_PDCLIB_encoding.h;h=0178b12f70dcf6e338770caf4e1086c8ef7a7d91;hp=01e60a1916389b0263827bf5d597400ce5ffebc8;hb=4fe88a1c445105a96d08b808831d6fc7480a211d;hpb=3d8dbf37294136263403973fec89f50ab9eca402 diff --git a/internals/_PDCLIB_encoding.h b/internals/_PDCLIB_encoding.h index 01e60a1..0178b12 100644 --- a/internals/_PDCLIB_encoding.h +++ b/internals/_PDCLIB_encoding.h @@ -147,15 +147,21 @@ static inline _PDCLIB_size_t _PDCLIB_c32rtowc( #endif typedef struct { - /* Reads at most *_P_insz bytes from *_P_inbuf and writes the result into - * *_P_outbuf, writing at most *_P_outsz characters. Updates *_P_outbuf, - * *_P_outsz, *_P_inbuf, *_P_outsz with the resulting state + /* Reads at most *_P_insz code units from *_P_inbuf and writes the result + * into *_P_outbuf, writing at most *_P_outsz code units. Updates + * *_P_outbuf, *_P_outsz, *_P_inbuf, *_P_outsz with the resulting state + * + * If _P_outbuf is NULL, then the input must be processed but no output + * generated. _P_outsz may be processed as normal. * * Returns true if the conversion completed successfully (i.e. one of * _P_outsize or _P_insize reached zero and no coding errors were * encountered), else return false. */ - _PDCLIB_bool (*__mbtoc32)( + + /* UCS-4 variants. Mandatory. */ + + _PDCLIB_bool (*__mbstoc32s)( _PDCLIB_char32_t **_PDCLIB_restrict _P_outbuf, _PDCLIB_size_t *_PDCLIB_restrict _P_outsz, const char **_PDCLIB_restrict _P_inbuf, @@ -163,13 +169,35 @@ typedef struct { _PDCLIB_mbstate_t *_PDCLIB_restrict _P_ps ); - _PDCLIB_bool (*__c32tomb)( + _PDCLIB_bool (*__c32stombs)( char **_PDCLIB_restrict _P_outbuf, _PDCLIB_size_t *_PDCLIB_restrict _P_outsz, const _PDCLIB_char32_t **_PDCLIB_restrict _P_inbuf, _PDCLIB_size_t *_PDCLIB_restrict _P_insz, _PDCLIB_mbstate_t *_PDCLIB_restrict _P_ps ); + + /* UTF-16 variants; same as above except optional. + * + * If not provided, _PDCLib will internally synthesize on top of the UCS-4 + * variants above, albeit at a performance cost. + */ + + _PDCLIB_bool (*__mbstoc16s)( + _PDCLIB_char16_t **_PDCLIB_restrict _P_outbuf, + _PDCLIB_size_t *_PDCLIB_restrict _P_outsz, + const char **_PDCLIB_restrict _P_inbuf, + _PDCLIB_size_t *_PDCLIB_restrict _P_insz, + _PDCLIB_mbstate_t *_PDCLIB_restrict _P_ps + ); + + _PDCLIB_bool (*__c16stombs)( + char **_PDCLIB_restrict _P_outbuf, + _PDCLIB_size_t *_PDCLIB_restrict _P_outsz, + const _PDCLIB_char16_t **_PDCLIB_restrict _P_inbuf, + _PDCLIB_size_t *_PDCLIB_restrict _P_insz, + _PDCLIB_mbstate_t *_PDCLIB_restrict _P_ps + ); } _PDCLIB_charcodec; #endif