#pragma once #include "stdafx.hpp" #include namespace VSW::Materializer::Utilities { /// @brief The value representing a invalid CK_ID. constexpr CK_ID INVALID_CK_ID = static_cast(-1); constexpr int INVALID_INDEX = static_cast(-1); constexpr char NULLPTR_CKSTRING[] = ""; class EnhancedReporter : public VSW::Reporter { public: EnhancedReporter(CKContext* ctx); ~EnhancedReporter(); protected: virtual void PrePrint(const YYCC::yycc_char8_t* strl) const override; private: CKContext* m_Ctx; }; class Curve2DBuilder { public: Curve2DBuilder(CK2dCurve* curve_2d); ~Curve2DBuilder(); public: const void* GetDataPtr() const; size_t GetDataLength() const; private: void BuildCurve(CK2dCurve* c); void BuildCurvePoint(CK2dCurvePoint* cp); std::basic_string m_Cache; }; /** * @brief Get relative address from given absolute address * @details This function is used when exporting function pointer into database. * @param[out] relative_addr_str * The variable holding relative address result. * The result is module based relative address like \c xxx.dll+0x00000000. * @param[in] absolute_addr The absolute address */ void RelativeAddress(const EnhancedReporter& reporter, YYCC::yycc_u8string& relative_addr_str, const void* absolute_addr); void CopyStrGuid(const EnhancedReporter& reporter, YYCC::yycc_u8string& dst, const CKGUID& src); void CopyGuid(int64_t& dst, const CKGUID& src); void CopyCKString( const EnhancedReporter& reporter, YYCC::yycc_u8string& storage, const char* str, UINT code_page, const YYCC::yycc_char8_t* fallback = YYCC::EncodingHelper::ToUTF8(NULLPTR_CKSTRING) ); #pragma region Convenient Macros #define CP_ADDR(dst, src) ::VSW::Materializer::Utilities::RelativeAddress(expctx.reporter, (dst), (src)) #define CP_STR_GUID(dst, src) ::VSW::Materializer::Utilities::CopyStrGuid(expctx.reporter, (dst), (src)) #define CP_GUID(dst, src) ::VSW::Materializer::Utilities::CopyGuid((dst), (src)) #define CP_CKSTR(dst, src, ...) ::VSW::Materializer::Utilities::CopyCKString(expctx.reporter, (dst), (src), expctx.cp, ##__VA_ARGS__) #pragma endregion }