diff --git a/cmake/module.cpp.in b/cmake/module.cpp.in index 754e0118..44bd6882 100644 --- a/cmake/module.cpp.in +++ b/cmake/module.cpp.in @@ -8,9 +8,9 @@ #pragma warning(pop) #endif -OBS_DECLARE_MODULE(); -OBS_MODULE_AUTHOR("@PROJECT_AUTHORS@"); -OBS_MODULE_USE_DEFAULT_LOCALE("@PROJECT_NAME@", "en-US"); +OBS_DECLARE_MODULE() +OBS_MODULE_AUTHOR("@PROJECT_AUTHORS@") +OBS_MODULE_USE_DEFAULT_LOCALE("@PROJECT_NAME@", "en-US") MODULE_EXPORT const char* obs_module_name() { diff --git a/source/common.hpp b/source/common.hpp index c1a33250..e6ab835b 100644 --- a/source/common.hpp +++ b/source/common.hpp @@ -41,10 +41,10 @@ // Common Plugin includes #include "strings.hpp" +#include "version.hpp" #include "util-profiler.hpp" #include "util-threadpool.hpp" #include "utility.hpp" -#include "version.hpp" // Common OBS includes extern "C" { @@ -53,15 +53,23 @@ extern "C" { #pragma warning(disable : 4201) #endif #include + +#include #include #include #include #include #include -#include + #include -#include + +#include #include +#include +#include +#include + +#include #ifdef _MSC_VER #pragma warning(pop) #endif diff --git a/source/encoders/ffmpeg-encoder.cpp b/source/encoders/ffmpeg-encoder.cpp index d9304209..dfb993ad 100644 --- a/source/encoders/ffmpeg-encoder.cpp +++ b/source/encoders/ffmpeg-encoder.cpp @@ -20,6 +20,7 @@ // SOFTWARE. #include "ffmpeg-encoder.hpp" +#include "strings.hpp" #include #include "codecs/hevc.hpp" #include "ffmpeg/tools.hpp" @@ -27,13 +28,11 @@ #include "handlers/nvenc_h264_handler.hpp" #include "handlers/nvenc_hevc_handler.hpp" #include "handlers/prores_aw_handler.hpp" +#include "obs/gs/gs-helper.hpp" #include "plugin.hpp" -#include "strings.hpp" #include "utility.hpp" extern "C" { -#include -#include #pragma warning(push) #pragma warning(disable : 4244) #include @@ -41,6 +40,7 @@ extern "C" { #include #include #include +#include #pragma warning(pop) } @@ -782,7 +782,7 @@ ffmpeg_instance::ffmpeg_instance(obs_data_t* settings, obs_encoder_t* encoder, b } #ifdef WIN32 - auto gctx = util::obs_graphics(); + auto gctx = gs::context(); if (gs_get_device_type() == GS_DEVICE_DIRECT3D_11) { _hwapi = std::make_shared<::ffmpeg::hwapi::d3d11>(); } @@ -815,7 +815,7 @@ ffmpeg_instance::ffmpeg_instance(obs_data_t* settings, obs_encoder_t* encoder, b update(settings); // Initialize Encoder - auto gctx = util::obs_graphics(); + auto gctx = gs::context(); int res = avcodec_open2(_context, _codec, NULL); if (res < 0) { std::stringstream sstr; @@ -827,7 +827,7 @@ ffmpeg_instance::ffmpeg_instance(obs_data_t* settings, obs_encoder_t* encoder, b ffmpeg_instance::~ffmpeg_instance() { - auto gctx = util::obs_graphics(); + auto gctx = gs::context(); if (_context) { // Flush encoders that require it. if ((_codec->capabilities & AV_CODEC_CAP_DELAY) != 0) { @@ -938,7 +938,8 @@ bool ffmpeg_instance::update(obs_data_t* settings) if (_handler) { LOG_INFO("[%s] Initializing...", _codec->name); LOG_INFO("[%s] FFmpeg:", _codec->name); - LOG_INFO("[%s] Custom Settings: %s", _codec->name, obs_data_get_string(settings, KEY_FFMPEG_CUSTOMSETTINGS)); + LOG_INFO("[%s] Custom Settings: %s", _codec->name, + obs_data_get_string(settings, KEY_FFMPEG_CUSTOMSETTINGS)); LOG_INFO("[%s] Standard Compliance: %s", _codec->name, ::ffmpeg::tools::get_std_compliance_name(_context->strict_std_compliance)); LOG_INFO("[%s] Threading: %s (with %i threads)", _codec->name, @@ -1115,7 +1116,7 @@ int ffmpeg_instance::receive_packet(bool* received_packet, struct encoder_packet av_packet_unref(&_current_packet); { - auto gctx = util::obs_graphics(); + auto gctx = gs::context(); res = avcodec_receive_packet(_context, &_current_packet); } if (res != 0) { @@ -1181,7 +1182,7 @@ int ffmpeg_instance::send_frame(std::shared_ptr const frame) { int res = 0; { - auto gctx = util::obs_graphics(); + auto gctx = gs::context(); res = avcodec_send_frame(_context, frame.get()); } if (res == 0) { diff --git a/source/encoders/handlers/debug_handler.hpp b/source/encoders/handlers/debug_handler.hpp index 5599678a..7cc3ef82 100644 --- a/source/encoders/handlers/debug_handler.hpp +++ b/source/encoders/handlers/debug_handler.hpp @@ -25,6 +25,8 @@ namespace encoder::ffmpeg::handler { class debug_handler : public handler { public: + virtual ~debug_handler(){}; + virtual void get_defaults(obs_data_t* settings, const AVCodec* codec, AVCodecContext* context, bool hw_encode) override; diff --git a/source/encoders/handlers/handler.hpp b/source/encoders/handlers/handler.hpp index c2292e2a..1df49f45 100644 --- a/source/encoders/handlers/handler.hpp +++ b/source/encoders/handlers/handler.hpp @@ -37,6 +37,9 @@ namespace encoder::ffmpeg { namespace handler { class handler { + public: + virtual ~handler(){}; + public /*factory*/: virtual void adjust_encoder_info(ffmpeg_factory* factory, ffmpeg_info* main, ffmpeg_info* fallback); diff --git a/source/encoders/handlers/nvenc_h264_handler.hpp b/source/encoders/handlers/nvenc_h264_handler.hpp index 64cf0668..94eb8374 100644 --- a/source/encoders/handlers/nvenc_h264_handler.hpp +++ b/source/encoders/handlers/nvenc_h264_handler.hpp @@ -31,6 +31,9 @@ extern "C" { namespace encoder::ffmpeg::handler { class nvenc_h264_handler : public handler { + public: + virtual ~nvenc_h264_handler(){}; + public /*factory*/: virtual void adjust_encoder_info(ffmpeg_factory* factory, ffmpeg_info* main, ffmpeg_info* fallback); diff --git a/source/encoders/handlers/nvenc_hevc_handler.hpp b/source/encoders/handlers/nvenc_hevc_handler.hpp index 25f10b18..5da093dc 100644 --- a/source/encoders/handlers/nvenc_hevc_handler.hpp +++ b/source/encoders/handlers/nvenc_hevc_handler.hpp @@ -31,6 +31,9 @@ extern "C" { namespace encoder::ffmpeg::handler { class nvenc_hevc_handler : public handler { + public: + virtual ~nvenc_hevc_handler(){}; + public /*factory*/: virtual void adjust_encoder_info(ffmpeg_factory* factory, ffmpeg_info* main, ffmpeg_info* fallback); diff --git a/source/encoders/handlers/prores_aw_handler.hpp b/source/encoders/handlers/prores_aw_handler.hpp index 38c214c3..59264c08 100644 --- a/source/encoders/handlers/prores_aw_handler.hpp +++ b/source/encoders/handlers/prores_aw_handler.hpp @@ -31,6 +31,9 @@ extern "C" { namespace encoder::ffmpeg::handler { class prores_aw_handler : public handler { + public: + virtual ~prores_aw_handler(){}; + public: virtual void override_colorformat(AVPixelFormat& target_format, obs_data_t* settings, const AVCodec* codec, AVCodecContext* context) override; diff --git a/source/ffmpeg/hwapi/base.hpp b/source/ffmpeg/hwapi/base.hpp index 674e3dda..5df8bcee 100644 --- a/source/ffmpeg/hwapi/base.hpp +++ b/source/ffmpeg/hwapi/base.hpp @@ -44,6 +44,8 @@ namespace ffmpeg::hwapi { class instance { public: + virtual ~instance(){}; + virtual AVBufferRef* create_device_context() = 0; virtual std::shared_ptr allocate_frame(AVBufferRef* frames) = 0; @@ -57,6 +59,8 @@ namespace ffmpeg::hwapi { class base { public: + virtual ~base(){}; + virtual std::list enumerate_adapters() = 0; virtual std::shared_ptr create(hwapi::device target) = 0; diff --git a/source/ffmpeg/hwapi/d3d11.cpp b/source/ffmpeg/hwapi/d3d11.cpp index d89fe56d..18d35e10 100644 --- a/source/ffmpeg/hwapi/d3d11.cpp +++ b/source/ffmpeg/hwapi/d3d11.cpp @@ -24,6 +24,7 @@ #include "d3d11.hpp" #include #include +#include "obs/gs/gs-helper.hpp" #include "utility.hpp" extern "C" { @@ -33,9 +34,7 @@ extern "C" { #pragma warning(disable : 4244) #pragma warning(disable : 4365) #pragma warning(disable : 4986) -#include #include -#include #pragma warning(pop) } @@ -138,7 +137,7 @@ std::shared_ptr d3d11::create(device target) std::shared_ptr d3d11::create_from_obs() { - auto gctx = util::obs_graphics(); + auto gctx = gs::context(); if (GS_DEVICE_DIRECT3D_11 != gs_get_device_type()) { throw std::runtime_error("OBS Device is not a D3D11 Device."); @@ -190,7 +189,7 @@ AVBufferRef* d3d11_instance::create_device_context() std::shared_ptr d3d11_instance::allocate_frame(AVBufferRef* frames) { - auto gctx = util::obs_graphics(); + auto gctx = gs::context(); auto frame = std::shared_ptr(av_frame_alloc(), [](AVFrame* frame) { av_frame_unref(frame); @@ -207,7 +206,7 @@ std::shared_ptr d3d11_instance::allocate_frame(AVBufferRef* frames) void d3d11_instance::copy_from_obs(AVBufferRef*, uint32_t handle, uint64_t lock_key, uint64_t* next_lock_key, std::shared_ptr frame) { - auto gctx = util::obs_graphics(); + auto gctx = gs::context(); ATL::CComPtr mutex; ATL::CComPtr input; @@ -246,7 +245,7 @@ void d3d11_instance::copy_from_obs(AVBufferRef*, uint32_t handle, uint64_t lock_ std::shared_ptr d3d11_instance::avframe_from_obs(AVBufferRef* frames, uint32_t handle, uint64_t lock_key, uint64_t* next_lock_key) { - auto gctx = util::obs_graphics(); + auto gctx = gs::context(); auto frame = this->allocate_frame(frames); this->copy_from_obs(frames, handle, lock_key, next_lock_key, frame); diff --git a/source/ffmpeg/hwapi/d3d11.hpp b/source/ffmpeg/hwapi/d3d11.hpp index 84903daf..73a08823 100644 --- a/source/ffmpeg/hwapi/d3d11.hpp +++ b/source/ffmpeg/hwapi/d3d11.hpp @@ -31,6 +31,7 @@ extern "C++" { #pragma warning(disable : 4777) #pragma warning(disable : 4986) #pragma warning(disable : 5039) +#pragma warning(disable : 5204) #include #include #include diff --git a/source/gfx/shader/gfx-shader-param.cpp b/source/gfx/shader/gfx-shader-param.cpp index 87b59c8d..44f73a26 100644 --- a/source/gfx/shader/gfx-shader-param.cpp +++ b/source/gfx/shader/gfx-shader-param.cpp @@ -164,7 +164,7 @@ gfx::shader::parameter::parameter(gs::effect_parameter param, std::string key_pr if (ov > 0) _size = ov; } - _size = std::clamp(_size, 1ull, 32ull); + _size = std::clamp(_size, size_t{1}, size_t{32}); } void gfx::shader::parameter::defaults(obs_data_t* settings) {} diff --git a/source/nvidia/cuda/nvidia-cuda-context.cpp b/source/nvidia/cuda/nvidia-cuda-context.cpp index e5930875..749354fd 100644 --- a/source/nvidia/cuda/nvidia-cuda-context.cpp +++ b/source/nvidia/cuda/nvidia-cuda-context.cpp @@ -23,7 +23,7 @@ #ifdef WIN32 #ifdef _MSC_VER #pragma warning(push) -#pragma warning(disable: 4191 4365 4777 5039) +#pragma warning(disable: 4191 4365 4777 5039 5204) #endif #include #ifdef _MSC_VER diff --git a/source/nvidia/cuda/nvidia-cuda.hpp b/source/nvidia/cuda/nvidia-cuda.hpp index fb6acdce..ba5f0462 100644 --- a/source/nvidia/cuda/nvidia-cuda.hpp +++ b/source/nvidia/cuda/nvidia-cuda.hpp @@ -25,6 +25,7 @@ #ifdef WIN32 #pragma warning(push) #pragma warning(disable : 4365) +#pragma warning(disable : 5204) #include #include #pragma warning(pop) diff --git a/source/obs/gs/gs-effect-parameter.cpp b/source/obs/gs/gs-effect-parameter.cpp index f402bf1a..b4d4699d 100644 --- a/source/obs/gs/gs-effect-parameter.cpp +++ b/source/obs/gs/gs-effect-parameter.cpp @@ -22,8 +22,16 @@ #include #include "gs-effect-pass.hpp" +extern "C" { +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4201) +#endif #include -#include +#ifdef _MSC_VER +#pragma warning(pop) +#endif +} gs::effect_parameter::effect_parameter() : _effect_parent(nullptr), _pass_parent(nullptr), _param_parent(nullptr) { diff --git a/source/obs/gs/gs-effect-pass.cpp b/source/obs/gs/gs-effect-pass.cpp index db2215f0..9a42d4a7 100644 --- a/source/obs/gs/gs-effect-pass.cpp +++ b/source/obs/gs/gs-effect-pass.cpp @@ -20,7 +20,16 @@ #include "gs-effect-pass.hpp" #include +extern "C" { +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4201) +#endif #include +#ifdef _MSC_VER +#pragma warning(pop) +#endif +} gs::effect_pass::effect_pass(gs_epass_t* pass, std::shared_ptr* parent) : _parent(parent) { diff --git a/source/obs/gs/gs-effect-technique.cpp b/source/obs/gs/gs-effect-technique.cpp index 8921c89a..d5792e4f 100644 --- a/source/obs/gs/gs-effect-technique.cpp +++ b/source/obs/gs/gs-effect-technique.cpp @@ -21,7 +21,16 @@ #include #include +extern "C" { +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4201) +#endif #include +#ifdef _MSC_VER +#pragma warning(pop) +#endif +} gs::effect_technique::effect_technique(gs_technique_t* technique, std::shared_ptr* parent) : _parent(parent) diff --git a/source/obs/gs/gs-effect.cpp b/source/obs/gs/gs-effect.cpp index b7e5acd9..044da212 100644 --- a/source/obs/gs/gs-effect.cpp +++ b/source/obs/gs/gs-effect.cpp @@ -23,17 +23,6 @@ #include #include "obs/gs/gs-helper.hpp" -// OBS -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable : 4201) -#endif -#include -#include -#ifdef _MSC_VER -#pragma warning(pop) -#endif - #define MAX_EFFECT_SIZE 32 * 1024 * 1024 static std::string load_file_as_code(std::filesystem::path file) diff --git a/source/obs/gs/gs-indexbuffer.cpp b/source/obs/gs/gs-indexbuffer.cpp index dcc4b97b..62b493a6 100644 --- a/source/obs/gs/gs-indexbuffer.cpp +++ b/source/obs/gs/gs-indexbuffer.cpp @@ -22,16 +22,6 @@ #include "gs-limits.hpp" #include "obs/gs/gs-helper.hpp" -// OBS -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable : 4201) -#endif -#include -#ifdef _MSC_VER -#pragma warning(pop) -#endif - gs::index_buffer::index_buffer(uint32_t maximumVertices) { this->reserve(maximumVertices); diff --git a/source/obs/gs/gs-mipmapper.cpp b/source/obs/gs/gs-mipmapper.cpp index dda61250..515967bd 100644 --- a/source/obs/gs/gs-mipmapper.cpp +++ b/source/obs/gs/gs-mipmapper.cpp @@ -22,18 +22,6 @@ #include "obs/gs/gs-helper.hpp" #include "plugin.hpp" -// OBS -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable : 4201) -#endif -#include -#include -#include -#ifdef _MSC_VER -#pragma warning(pop) -#endif - #if defined(WIN32) || defined(WIN64) #ifdef _MSC_VER #pragma warning(push) diff --git a/source/obs/gs/gs-rendertarget.cpp b/source/obs/gs/gs-rendertarget.cpp index 0f5576fc..1b4ba67f 100644 --- a/source/obs/gs/gs-rendertarget.cpp +++ b/source/obs/gs/gs-rendertarget.cpp @@ -21,17 +21,6 @@ #include #include "obs/gs/gs-helper.hpp" -// OBS -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable : 4201) -#endif -#include -#include -#ifdef _MSC_VER -#pragma warning(pop) -#endif - gs::rendertarget::~rendertarget() { auto gctx = gs::context(); diff --git a/source/obs/gs/gs-texture.cpp b/source/obs/gs/gs-texture.cpp index 400d57d8..cab2cafe 100644 --- a/source/obs/gs/gs-texture.cpp +++ b/source/obs/gs/gs-texture.cpp @@ -24,17 +24,6 @@ #include "obs/gs/gs-helper.hpp" #include "util-math.hpp" -// OBS -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable : 4201) -#endif -#include -#include -#ifdef _MSC_VER -#pragma warning(pop) -#endif - static uint32_t decode_flags(gs::texture::flags texture_flags) { uint32_t flags = 0; diff --git a/source/obs/gs/gs-vertexbuffer.cpp b/source/obs/gs/gs-vertexbuffer.cpp index 113009c3..f44f2e72 100644 --- a/source/obs/gs/gs-vertexbuffer.cpp +++ b/source/obs/gs/gs-vertexbuffer.cpp @@ -22,16 +22,6 @@ #include "obs/gs/gs-helper.hpp" #include "utility.hpp" -// OBS -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable : 4201) -#endif -#include -#ifdef _MSC_VER -#pragma warning(pop) -#endif - void gs::vertex_buffer::initialize(size_t capacity, size_t layers) { if (capacity > MAXIMUM_VERTICES) { diff --git a/source/obs/obs-tools.cpp b/source/obs/obs-tools.cpp index 5676db9b..909588df 100644 --- a/source/obs/obs-tools.cpp +++ b/source/obs/obs-tools.cpp @@ -22,16 +22,6 @@ #include #include "plugin.hpp" -// OBS -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable : 4201) -#endif -#include -#ifdef _MSC_VER -#pragma warning(pop) -#endif - struct scs_searchdata { obs_source_t* source; bool found = false; diff --git a/source/sources/source-mirror.cpp b/source/sources/source-mirror.cpp index dcbdbbc8..0d149d76 100644 --- a/source/sources/source-mirror.cpp +++ b/source/sources/source-mirror.cpp @@ -35,9 +35,7 @@ #pragma warning(push) #pragma warning(disable : 4201) #endif -#include #include -#include #ifdef _MSC_VER #pragma warning(pop) #endif diff --git a/source/utility.hpp b/source/utility.hpp index 89cd774f..b7c3adec 100644 --- a/source/utility.hpp +++ b/source/utility.hpp @@ -18,18 +18,20 @@ */ #pragma once -#include "common.hpp" +#include +#include +#include +#include extern "C" { #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable : 4201) #endif +#include #include #include #include -#include -#include #ifdef _MSC_VER #pragma warning(pop) #endif @@ -94,17 +96,6 @@ namespace util { return obs_get_version() < MAKE_SEMANTIC_VERSION(24, 0, 0); } - struct obs_graphics { - obs_graphics() - { - obs_enter_graphics(); - } - ~obs_graphics() - { - obs_leave_graphics(); - } - }; - obs_property_t* obs_properties_add_tristate(obs_properties_t* props, const char* name, const char* desc); inline bool is_tristate_enabled(int64_t tristate) @@ -122,25 +113,6 @@ namespace util { return tristate == -1; } - typedef union { - uint32_t color; - struct { - uint8_t r; - uint8_t g; - uint8_t b; - uint8_t a; - }; - } rgba32; - typedef union { - uint32_t color; - struct { - uint8_t a; - uint8_t r; - uint8_t g; - uint8_t b; - }; - } argb32; - struct vec2a : public vec2 { // 16-byte Aligned version of vec2 static void* operator new(size_t count); @@ -171,16 +143,6 @@ namespace util { static void operator delete[](void* p); }; - inline size_t GetNearestPowerOfTwoAbove(size_t v) - { - return 1ull << size_t(ceil(log10(double(v)) / log10(2.0))); - } - - inline size_t GetNearestPowerOfTwoBelow(size_t v) - { - return 1ull << size_t(floor(log10(double(v)) / log10(2.0))); - } - std::pair size_from_string(std::string text, bool allowSquare = true); namespace math { @@ -216,14 +178,14 @@ namespace util { { \ return is_power_of_two_loop(v); \ } - P_IS_POWER_OF_TWO_AS_LOOP(int8_t); - P_IS_POWER_OF_TWO_AS_LOOP(uint8_t); - P_IS_POWER_OF_TWO_AS_LOOP(int16_t); - P_IS_POWER_OF_TWO_AS_LOOP(uint16_t); - P_IS_POWER_OF_TWO_AS_LOOP(int32_t); - P_IS_POWER_OF_TWO_AS_LOOP(uint32_t); - P_IS_POWER_OF_TWO_AS_LOOP(int64_t); - P_IS_POWER_OF_TWO_AS_LOOP(uint64_t); + P_IS_POWER_OF_TWO_AS_LOOP(int8_t) + P_IS_POWER_OF_TWO_AS_LOOP(uint8_t) + P_IS_POWER_OF_TWO_AS_LOOP(int16_t) + P_IS_POWER_OF_TWO_AS_LOOP(uint16_t) + P_IS_POWER_OF_TWO_AS_LOOP(int32_t) + P_IS_POWER_OF_TWO_AS_LOOP(uint32_t) + P_IS_POWER_OF_TWO_AS_LOOP(int64_t) + P_IS_POWER_OF_TWO_AS_LOOP(uint64_t) #undef P_IS_POWER_OF_TWO_AS_LOOP #pragma pop_macro("P_IS_POWER_OF_TWO_AS_LOOP") @@ -315,85 +277,4 @@ namespace util { } void* malloc_aligned(size_t align, size_t size); void free_aligned(void* mem); - - template - class AlignmentAllocator { - public: - typedef T value_type; - typedef size_t size_type; -#ifdef __clang__ - typedef ptrdiff_t difference_type; -#else - typedef std::ptrdiff_t difference_type; -#endif - - typedef T* pointer; - typedef const T* const_pointer; - - typedef T& reference; - typedef const T& const_reference; - - public: - inline AlignmentAllocator() {} - - template - inline AlignmentAllocator(const AlignmentAllocator&) - {} - - inline ~AlignmentAllocator() {} - - inline pointer adress(reference r) - { - return &r; - } - - inline const_pointer adress(const_reference r) const - { - return &r; - } - - inline pointer allocate(size_type n) - { - return (pointer)malloc_aligned(n * sizeof(value_type), N); - } - - inline void deallocate(pointer p, size_type) - { - free_aligned(p); - } - - inline void construct(pointer p, const value_type& wert) - { - new (p) value_type(wert); - } - - inline void destroy(pointer p) - { - p->~value_type(); - p; - } - - inline size_type max_size() const - { - return size_type(-1) / sizeof(value_type); - } - - template - struct rebind { - typedef AlignmentAllocator other; - }; - - bool operator!=(const AlignmentAllocator& other) const - { - return !(*this == other); - } - - // Returns true if and only if storage allocated from *this - // can be deallocated from other, and vice versa. - // Always returns true for stateless allocators. - bool operator==(const AlignmentAllocator&) const - { - return true; - } - }; } // namespace util