|  | // Copyright Microsoft and CHERIoT Contributors. | 
|  | // SPDX-License-Identifier: MIT | 
|  |  | 
|  | #pragma once | 
|  | /** | 
|  | * Minimal wchar.h  This exists because libc++ doesn't support platforms that | 
|  | * don't have it.  We don't expect anything to actually use the template | 
|  | * instantiations that would require anything in this file but the identifiers | 
|  | * must exist. | 
|  | */ | 
|  | #include <string.h> | 
|  |  | 
|  | /** | 
|  | * libc++ headers require wchar.h to exist with a definition of an mbstate_t | 
|  | * structure.  We don't use this with anything, so this is just a stub. | 
|  | */ | 
|  | struct mbstate_t | 
|  | { | 
|  | }; | 
|  |  | 
|  | /** | 
|  | * `string_view` requires `wmemcpy` to exist.  Forward to `memcpy`. | 
|  | */ | 
|  | static inline wchar_t *wmemcpy(wchar_t *s1, const wchar_t *s2, size_t n) | 
|  | { | 
|  | return (wchar_t *)memcpy(s1, s2, n / sizeof(wchar_t)); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * `string_view` requires `wmemmove` to exist.  Forward to `memmove`. | 
|  | */ | 
|  | static inline wchar_t *wmemmove(wchar_t *s1, const wchar_t *s2, size_t n) | 
|  | { | 
|  | return (wchar_t *)memmove(s1, s2, n / sizeof(wchar_t)); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * `string_view` requires `wmemset` to exist.  Provide a trivial | 
|  | * implementation. | 
|  | */ | 
|  | static inline wchar_t *wmemset(wchar_t *dest, wchar_t ch, size_t count) | 
|  | { | 
|  | for (size_t i = 0; i < count; i++) | 
|  | { | 
|  | dest[i] = ch; | 
|  | } | 
|  | return dest; | 
|  | } |