diff foosdk/sdk/pfc/pfc-lite.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/foosdk/sdk/pfc/pfc-lite.h	Mon Jan 05 02:15:46 2026 -0500
@@ -0,0 +1,186 @@
+#pragma once
+
+
+#ifdef _MSC_VER // MSVC sucks, doesn't set __cplusplus properly by default
+#if _MSVC_LANG < 201703L
+#error C++17 please
+#endif
+#else // not MSVC
+#if __cplusplus < 201703L
+#error C++17 please
+#endif
+#endif
+
+// Global flag - whether it's OK to leak static objects as they'll be released anyway by process death
+#ifndef PFC_LEAK_STATIC_OBJECTS
+#define PFC_LEAK_STATIC_OBJECTS 1
+#endif
+
+
+#ifdef __clang__
+// Suppress a warning for a common practice in pfc/fb2k code
+#pragma clang diagnostic ignored "-Wdelete-non-virtual-dtor"
+#endif
+
+#if !defined(_WINDOWS) && (defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64) || defined(_WIN32_WCE))
+#define _WINDOWS
+#endif
+
+
+#ifdef _WINDOWS
+#include "targetver.h"
+
+#ifndef STRICT
+#define STRICT
+#endif
+
+#ifndef _SYS_GUID_OPERATOR_EQ_
+#define _NO_SYS_GUID_OPERATOR_EQ_	//fix retarded warning with operator== on GUID returning int
+#endif
+
+// WinSock2.h *before* Windows.h or else VS2017 15.3 breaks
+#include <WinSock2.h>
+#include <windows.h>
+
+#if !defined(PFC_WINDOWS_STORE_APP) && !defined(PFC_WINDOWS_DESKTOP_APP)
+
+#ifdef WINAPI_FAMILY_PARTITION
+#if ! WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+#define PFC_WINDOWS_STORE_APP // Windows store or Windows phone app, not a desktop app
+#endif // #if ! WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+#endif // #ifdef WINAPI_FAMILY_PARTITION
+
+#ifndef PFC_WINDOWS_STORE_APP
+#define PFC_WINDOWS_DESKTOP_APP
+#endif
+
+#endif // #if !defined(PFC_WINDOWS_STORE_APP) && !defined(PFC_WINDOWS_DESKTOP_APP)
+
+#ifndef _SYS_GUID_OPERATOR_EQ_
+__inline bool __InlineIsEqualGUID(REFGUID rguid1, REFGUID rguid2)
+{
+    return (
+        ((unsigned long*)&rguid1)[0] == ((unsigned long*)&rguid2)[0] &&
+        ((unsigned long*)&rguid1)[1] == ((unsigned long*)&rguid2)[1] &&
+        ((unsigned long*)&rguid1)[2] == ((unsigned long*)&rguid2)[2] &&
+        ((unsigned long*)&rguid1)[3] == ((unsigned long*)&rguid2)[3]);
+}
+
+inline bool operator==(REFGUID guidOne, REFGUID guidOther) { return __InlineIsEqualGUID(guidOne, guidOther); }
+inline bool operator!=(REFGUID guidOne, REFGUID guidOther) { return !__InlineIsEqualGUID(guidOne, guidOther); }
+#endif
+
+#include <tchar.h>
+
+#else // not Windows
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h> // memcmp
+
+#ifndef GUID_DEFINED
+#define GUID_DEFINED
+
+
+struct GUID {
+    uint32_t Data1;
+    uint16_t Data2;
+    uint16_t Data3;
+    uint8_t  Data4[ 8 ];
+} __attribute__((packed));
+
+inline bool operator==(const GUID & p_item1,const GUID & p_item2) {
+    return memcmp(&p_item1,&p_item2,sizeof(GUID)) == 0;
+}
+
+inline bool operator!=(const GUID & p_item1,const GUID & p_item2) {
+    return memcmp(&p_item1,&p_item2,sizeof(GUID)) != 0;
+}
+
+#endif // GUID_DEFINED
+
+#endif
+
+
+
+#define PFC_MEMORY_SPACE_LIMIT ((t_uint64)1<<(sizeof(void*)*8-1))
+
+#define PFC_ALLOCA_LIMIT (4096)
+
+#include <exception>
+#include <stdexcept>
+#include <new>
+
+#define _PFC_WIDESTRING(_String) L ## _String
+#define PFC_WIDESTRING(_String) _PFC_WIDESTRING(_String)
+
+#if defined(_DEBUG) || defined(DEBUG)
+#define PFC_DEBUG 1
+#else
+#define PFC_DEBUG 0
+#endif
+
+#if ! PFC_DEBUG
+
+#ifndef NDEBUG
+#pragma message("WARNING: release build without NDEBUG")
+#endif
+
+#define PFC_ASSERT(_Expression)     ((void)0)
+#define PFC_ASSERT_SUCCESS(_Expression) (void)( (_Expression), 0)
+#define PFC_ASSERT_NO_EXCEPTION(_Expression) { _Expression; }
+#else
+
+#ifdef _WIN32
+namespace pfc { void myassert_win32(const wchar_t* _Message, const wchar_t* _File, unsigned _Line); }
+#define PFC_ASSERT(_Expression) (void)( (!!(_Expression)) || (pfc::myassert_win32(PFC_WIDESTRING(#_Expression), PFC_WIDESTRING(__FILE__), __LINE__), 0) )
+#define PFC_ASSERT_SUCCESS(_Expression) PFC_ASSERT(_Expression)
+#else
+namespace pfc { void myassert(const char* _Message, const char* _File, unsigned _Line); }
+#define PFC_ASSERT(_Expression) (void)( (!!(_Expression)) || (pfc::myassert(#_Expression, __FILE__, __LINE__), 0) )
+#define PFC_ASSERT_SUCCESS(_Expression) PFC_ASSERT( _Expression )
+#endif
+
+#define PFC_ASSERT_NO_EXCEPTION(_Expression) { try { _Expression; } catch(...) { PFC_ASSERT(!"Should not get here - unexpected exception"); } }
+#endif
+
+#ifdef _MSC_VER
+
+#if PFC_DEBUG
+#define NOVTABLE
+#else
+#define NOVTABLE _declspec(novtable)
+#endif
+
+#if PFC_DEBUG
+#define ASSUME(X) PFC_ASSERT(X)
+#else
+#define ASSUME(X) __assume(X)
+#endif
+
+#define PFC_DEPRECATE(X) // __declspec(deprecated(X))   don't do this since VS2015 defaults to erroring these
+#define PFC_NORETURN __declspec(noreturn)
+#define PFC_NOINLINE __declspec(noinline)
+#else // else not MSVC
+
+#define NOVTABLE
+#define ASSUME(X) PFC_ASSERT(X)
+#define PFC_DEPRECATE(X)
+#define PFC_NORETURN __attribute__ ((noreturn))
+#define PFC_NOINLINE
+
+#endif // end not MSVC
+
+#include "int_types.h"
+#include "string-interface.h"
+#include "string-lite.h"
+
+namespace pfc {
+    // forward types
+    class bit_array;
+    class bit_array_var;
+
+    template<typename T> class list_base_const_t;
+    template<typename T> class list_base_t;
+}