stdex/include/stdex/compat.hpp
Simon Rozman 8fd9fbf191 Bump Copyright year
Signed-off-by: Simon Rozman <simon@rozman.si>
2025-01-08 12:36:35 +01:00

222 lines
3.7 KiB
C++

/*
SPDX-License-Identifier: MIT
Copyright © 2022-2025 Amebis
*/
#pragma once
#include <stddef.h>
#ifdef _WIN32
#include "windows.h"
#include <sal.h>
#include <tchar.h>
#endif
#include <type_traits>
#ifndef _In_
#define _In_
#endif
#ifndef _In_bytecount_
#define _In_bytecount_(p)
#endif
#ifndef _In_count_
#define _In_count_(p)
#endif
#ifndef _In_opt_
#define _In_opt_
#endif
#ifndef _In_opt_count_
#define _In_opt_count_(p)
#endif
#ifndef _In_opt_z_count_
#define _In_opt_z_count_(p)
#endif
#ifndef _In_z_
#define _In_z_
#endif
#ifndef _In_opt_z_
#define _In_opt_z_
#endif
#ifndef _In_z_count_
#define _In_z_count_(p)
#endif
#ifndef _In_reads_
#define _In_reads_(p)
#endif
#ifndef _In_reads_bytes_
#define _In_reads_bytes_(p)
#endif
#ifndef _In_reads_z_
#define _In_reads_z_(p)
#endif
#ifndef _In_reads_opt_
#define _In_reads_opt_(p)
#endif
#ifndef _In_reads_opt_z_
#define _In_reads_opt_z_(p)
#endif
#ifndef _In_reads_or_z_
#define _In_reads_or_z_(p)
#endif
#ifndef _In_reads_or_z_opt_
#define _In_reads_or_z_opt_(p)
#endif
#ifndef _In_reads_bytes_opt_
#define _In_reads_bytes_opt_(p)
#endif
#ifndef _Printf_format_string_
#define _Printf_format_string_
#endif
#ifndef _Printf_format_string_params_
#define _Printf_format_string_params_(n)
#endif
#ifndef _Inout_
#define _Inout_
#endif
#ifndef _Inout_opt_
#define _Inout_opt_
#endif
#ifndef _Inout_z_
#define _Inout_z_
#endif
#ifndef _Inout_z_count_
#define _Inout_z_count_(p)
#endif
#ifndef _Inout_cap_
#define _Inout_cap_(p)
#endif
#ifndef _Inout_count_
#define _Inout_count_(p)
#endif
#ifndef _Inout_updates_z_
#define _Inout_updates_z_(p)
#endif
#ifndef _Use_decl_annotations_
#define _Use_decl_annotations_
#endif
#ifndef _Out_
#define _Out_
#endif
#ifndef _Out_opt_
#define _Out_opt_
#endif
#ifndef _Out_z_cap_
#define _Out_z_cap_(p)
#endif
#ifndef _Out_writes_
#define _Out_writes_(p)
#endif
#ifndef _Out_writes_opt_
#define _Out_writes_opt_(p)
#endif
#ifndef _Out_writes_all_opt_
#define _Out_writes_all_opt_(p)
#endif
#ifndef _Out_writes_opt_z_
#define _Out_writes_opt_z_(p)
#endif
#ifndef _Out_writes_bytes_
#define _Out_writes_bytes_(p)
#endif
#ifndef _Out_writes_to_
#define _Out_writes_to_(p, q)
#endif
#ifndef _Out_writes_all_
#define _Out_writes_all_(p)
#endif
#ifndef _Out_writes_z_
#define _Out_writes_z_(p)
#endif
#ifndef _Out_writes_bytes_to_opt_
#define _Out_writes_bytes_to_opt_(p, q)
#endif
#ifndef _Success_
#define _Success_(p)
#endif
#ifndef _Ret_maybenull_
#define _Ret_maybenull_
#endif
#ifndef _Ret_maybenull_z_
#define _Ret_maybenull_z_
#endif
#ifndef _Ret_notnull_
#define _Ret_notnull_
#endif
#ifndef _Ret_z_
#define _Ret_z_
#endif
#ifndef _Must_inspect_result_
#define _Must_inspect_result_
#endif
#ifndef _Check_return_
#define _Check_return_
#endif
#ifndef _Post_maybez_
#define _Post_maybez_
#endif
#ifndef _Null_terminated_
#define _Null_terminated_
#endif
#ifndef _L
#define __L(x) L ## x
#define _L(x) __L(x)
#endif
#ifndef _T
#define _T(x) x
#endif
#ifndef _Likely_
#if _HAS_CXX20
#define _Likely_ [[likely]]
#else
#define _Likely_
#endif
#endif
#ifndef _Unlikely_
#if _HAS_CXX20
#define _Unlikely_ [[unlikely]]
#else
#define _Unlikely_
#endif
#endif
#ifdef _MSC_VER
#define _Deprecated_(message) __declspec(deprecated(message))
#define _NoReturn_ __declspec(noreturn)
#else
#define _Deprecated_(message) [[deprecated(message)]]
#define _NoReturn_ [[noreturn]]
#endif
#ifdef _WIN32
#define _Unreferenced_(x) UNREFERENCED_PARAMETER(x)
#else
#define _Unreferenced_(x) (void)(x)
#endif
#ifndef _WIN32
template <class T, size_t N>
size_t _countof(const T (&arr)[N])
{
_Unreferenced_(arr);
return std::extent<T[N]>::value;
}
#endif
#ifndef _Analysis_assume_
#define _Analysis_assume_(p)
#endif
#ifdef __APPLE__
#define off64_t off_t
#define lseek64 lseek
#define lockf64 lockf
#define ftruncate64 ftruncate
#endif