1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-05-09 23:08:18 +08:00
CMake/Source/cm_codecvt.hxx
Kitware Robot 0b96ae1f6a Revise C++ coding style using clang-format with "east const"
Run the `clang-format.bash` script to update all our C and C++ code to a
new style defined by `.clang-format`, now with "east const" enforcement.
Use `clang-format` version 18.

* If you reached this commit for a line in `git blame`, re-run the blame
  operation starting at the parent of this commit to see older history
  for the content.

* See the parent commit for instructions to rebase a change across this
  style transition commit.

Issue: #26123
2025-01-23 13:09:50 -05:00

59 lines
1.8 KiB
C++

/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
file Copyright.txt or https://cmake.org/licensing for details. */
#pragma once
#include "cmConfigure.h" // IWYU pragma: keep
#include <cwchar>
#include <locale>
enum class codecvt_Encoding;
class codecvt : public std::codecvt<char, char, mbstate_t>
{
public:
#ifndef CMAKE_BOOTSTRAP
codecvt(codecvt_Encoding e);
protected:
~codecvt() override;
bool do_always_noconv() const noexcept override;
result do_out(mbstate_t& state, char const* from, char const* from_end,
char const*& from_next, char* to, char* to_end,
char*& to_next) const override;
result do_unshift(mbstate_t& state, char* to, char*,
char*& to_next) const override;
int do_max_length() const noexcept override;
int do_encoding() const noexcept override;
private:
// The mbstate_t argument to do_out and do_unshift is responsible
// for storing state between calls. We cannot control the type
// since we want to imbue on standard streams. However, we do
// know that it is a trivial type. Define our own type to overlay
// on it safely with no alignment requirements.
struct State
{
// Buffer bytes we have consumed from a partial codepoint.
char partial[3];
// Number of bytes we have buffered from a partial codepoint.
unsigned char buffered : 4;
// Size of the current codepoint in bytes.
unsigned char size : 4;
};
bool m_noconv;
# if defined(_WIN32)
unsigned int m_codepage;
result Decode(mbstate_t& state, int need, char const*& from_next,
char*& to_next, char* to_end) const;
result DecodePartial(mbstate_t& state, char*& to_next, char* to_end) const;
void BufferPartial(mbstate_t& state, int need, char const*& from_next) const;
# endif
#endif
};