std::codecvt<InternT,ExternT,State>::out,do_out (3) - Linux Manuals
std::codecvt<InternT,ExternT,State>::out,do_out: std::codecvt<InternT,ExternT,State>::out,do_out
NAME
std::codecvt<InternT,ExternT,State>::out,do_out - std::codecvt<InternT,ExternT,State>::out,do_out
Synopsis
Defined in header <locale>
public:
result out( StateT& state,
const InternT* from,
const InternT* from_end, (1)
const InternT*& from_next,
ExternT* to,
ExternT* to_end,
ExternT*& to_next ) const;
protected:
virtual result do_out( StateT& state,
const InternT* from,
const InternT* from_end, (2)
const InternT*& from_next,
ExternT* to,
ExternT* to_end,
ExternT*& to_next ) const;
1) public member function, calls the member function do_out of the most derived class.
2) If this codecvt facet defines a conversion, translates the internal characters from the source range [from, from_end) to external characters, placing the results in the subsequent locations starting at to. Converts no more than from_end - from internal characters and writes no more than to_end - to external characters. Leaves from_next and to_next pointing one beyond the last element successfully converted.
If this codecvt facet does not define a conversion, no characters are converted. to_next is set to be equal to to, state is unchanged, and std::codecvt_base::noconv is returned.
Return value
A value of type std::codecvt_base::result, indicating the success status as follows:
ok conversion completed
partial not enough space in the output buffer or unexpected end of source buffer
error encountered a character that could not be converted
noconv this facet is non-converting, no output written
The non-converting specialization std::codecvt<char, char, std::mbstate_t> always returns std::codecvt_base::noconv
Notes
Requires that from <= from_end && to <= to_end and that state either representing the initial shift state or obtained by converting the preceding characters in the sequence.
While codecvt supports N:M conversions (e.g. UTF-16 to UTF-8, where two internal characters may be necessary to decide what external characters to output), std::basic_filebuf can only use codecvt facets that define a 1:N conversion, that is it must be able to process one internal character at a time when writing to a file.
When performing N:M conversions, this function may return std::codecvt_base::partial after consuming all source characters (from_next == from_end). This means that another internal character is needed to complete the conversion (e.g. when converting UTF-16 to UTF-8, if the last character in the source buffer is a high surrogate).
The effect on state is deliberately unspecified. In standard facets, it is used to maintain shift state like when calling std::wcsrtombs, and is therefore updated to reflect the shift state after the last successfully converted character, but a user-defined facet is free to use it to maintain any other state, e.g. count the number of special characters encountered.
Example
// Run this code
Output:
See also
overflow writes characters to the associated file from the put area
[virtual]
to_bytes (public member function of std::wstring_convert<Codecvt,Elem,Wide_alloc,Byte_alloc>)
wcsrtombs (function)
do_in converts a string from externT to internT, such as when reading from file
[virtual]