1
0

refactor: adapt new yycc for ck2 module kernel except CKContext

This commit is contained in:
2026-01-25 20:17:23 +08:00
parent 9319425237
commit 97b33b131a
17 changed files with 106 additions and 91 deletions

View File

@@ -6,7 +6,7 @@
#pragma region Help & Save Functions
static constexpr const LibCmo::CK2::CK_ID INVALID_CKID = 0;
static constexpr LibCmo::CK2::CK_ID INVALID_CKID = 0;
static LibCmo::CK2::CK_ID SafeGetID(LibCmo::CK2::ObjImpls::CKObject* obj) {
if (obj == nullptr) return INVALID_CKID;
else return obj->GetID();

0
DEVNOTE.md Normal file
View File

View File

@@ -4,14 +4,15 @@
#include "CKFile.hpp"
#include "DataHandlers/CKBitmapHandler.hpp"
#include "MgrImpls/CKPathManager.hpp"
#include <yycc/cenum.hpp>
#include <memory>
namespace LibCmo::CK2 {
#pragma region Assist RW Functions
constexpr const CKDWORD c_SpecificFmtHasTransparent = 2;
constexpr const CKDWORD c_SpecificFmtNoTransparent = 1;
constexpr CKDWORD c_SpecificFmtHasTransparent = 2;
constexpr CKDWORD c_SpecificFmtNoTransparent = 1;
bool CKBitmapData::ReadSpecificFormatBitmap(CKStateChunk* chk, VxMath::VxImageDescEx* slot) {
// read transparent prop
@@ -521,7 +522,7 @@ namespace LibCmo::CK2 {
m_Slots.resize(count);
if (count == 0) {
YYCC::EnumHelper::Add(m_BitmapFlags, CK_BITMAPDATA_FLAGS::CKBITMAPDATA_INVALID);
yycc::cenum::add(m_BitmapFlags, CK_BITMAPDATA_FLAGS::CKBITMAPDATA_INVALID);
}
}
@@ -535,8 +536,8 @@ namespace LibCmo::CK2 {
m_CurrentSlot = slot;
// NOTE: idk what the fuck this is. just interpter the IDA decompiled code.
if (YYCC::EnumHelper::Has(m_BitmapFlags, CK_BITMAPDATA_FLAGS::CKBITMAPDATA_CUBEMAP)) {
YYCC::EnumHelper::Add(m_BitmapFlags, CK_BITMAPDATA_FLAGS::CKBITMAPDATA_FORCERESTORE);
if (yycc::cenum::has(m_BitmapFlags, CK_BITMAPDATA_FLAGS::CKBITMAPDATA_CUBEMAP)) {
yycc::cenum::add(m_BitmapFlags, CK_BITMAPDATA_FLAGS::CKBITMAPDATA_FORCERESTORE);
}
}
@@ -660,14 +661,14 @@ namespace LibCmo::CK2 {
// but we decide split the flag settings and slot.
// User should set slot count manually.
if (is_cube) {
YYCC::EnumHelper::Add(m_BitmapFlags, CK_BITMAPDATA_FLAGS::CKBITMAPDATA_CUBEMAP);
yycc::cenum::add(m_BitmapFlags, CK_BITMAPDATA_FLAGS::CKBITMAPDATA_CUBEMAP);
} else {
YYCC::EnumHelper::Remove(m_BitmapFlags, CK_BITMAPDATA_FLAGS::CKBITMAPDATA_CUBEMAP);
yycc::cenum::remove(m_BitmapFlags, CK_BITMAPDATA_FLAGS::CKBITMAPDATA_CUBEMAP);
}
}
bool CKBitmapData::IsCubeMap() const {
return YYCC::EnumHelper::Has(m_BitmapFlags, CK_BITMAPDATA_FLAGS::CKBITMAPDATA_CUBEMAP);
return yycc::cenum::has(m_BitmapFlags, CK_BITMAPDATA_FLAGS::CKBITMAPDATA_CUBEMAP);
}
const CKBitmapProperties& CKBitmapData::GetSaveFormat() const {
@@ -688,14 +689,14 @@ namespace LibCmo::CK2 {
void CKBitmapData::SetTransparent(bool Transparency) {
if (Transparency) {
YYCC::EnumHelper::Add(m_BitmapFlags, CK_BITMAPDATA_FLAGS::CKBITMAPDATA_TRANSPARENT);
yycc::cenum::add(m_BitmapFlags, CK_BITMAPDATA_FLAGS::CKBITMAPDATA_TRANSPARENT);
} else {
YYCC::EnumHelper::Remove(m_BitmapFlags, CK_BITMAPDATA_FLAGS::CKBITMAPDATA_TRANSPARENT);
yycc::cenum::remove(m_BitmapFlags, CK_BITMAPDATA_FLAGS::CKBITMAPDATA_TRANSPARENT);
}
}
bool CKBitmapData::IsTransparent() const {
return YYCC::EnumHelper::Has(m_BitmapFlags, CK_BITMAPDATA_FLAGS::CKBITMAPDATA_TRANSPARENT);
return yycc::cenum::has(m_BitmapFlags, CK_BITMAPDATA_FLAGS::CKBITMAPDATA_TRANSPARENT);
}
void CKBitmapData::SetTransparentColor(CKDWORD col) {

View File

@@ -1,6 +1,7 @@
#pragma once
#include "../VTInternal.hpp"
#include <yycc/macro/class_copy_move.hpp>
namespace LibCmo::CK2 {
@@ -26,7 +27,7 @@ namespace LibCmo::CK2 {
CKBitmapSlot() :
m_ImageData(), m_FileName() {}
~CKBitmapSlot() {}
YYCC_DEF_CLS_COPY_MOVE(CKBitmapSlot);
YYCC_DEFAULT_COPY_MOVE(CKBitmapSlot)
VxMath::VxImageDescEx m_ImageData;
XContainer::XString m_FileName;
@@ -36,7 +37,7 @@ namespace LibCmo::CK2 {
public:
CKBitmapData(CKContext* ctx);
~CKBitmapData();
YYCC_DEL_CLS_COPY_MOVE(CKBitmapData);
YYCC_DELETE_COPY_MOVE(CKBitmapData)
#pragma region RW Funcs

View File

@@ -1,6 +1,7 @@
#pragma once
#include "../VTInternal.hpp"
#include <yycc/macro/class_copy_move.hpp>
#include <map>
#include <deque>
#include <functional>
@@ -21,7 +22,7 @@ namespace LibCmo::CK2 {
public:
CKContext();
~CKContext();
YYCC_DEL_CLS_COPY_MOVE(CKContext);
YYCC_DELETE_COPY_MOVE(CKContext)
// ========== Engine runtime ==========
public:

View File

@@ -2,6 +2,7 @@
#include "CKTypes.hpp"
#include "CKGlobals.hpp"
#include <yycc/macro/class_copy_move.hpp>
namespace LibCmo::CK2 {
@@ -9,39 +10,39 @@ namespace LibCmo::CK2 {
// Virtools Managers GUID second DWORD must be 0
constexpr const CKDWORD OBJECT_MANAGER_GUID1 = 0x7cbb3b91;
constexpr const CKDWORD ATTRIBUTE_MANAGER_GUID1 = 0x3d242466;
constexpr const CKDWORD MESSAGE_MANAGER_GUID1 = 0x466a0fac;
constexpr const CKDWORD FLOOR_MANAGER_GUID1 = 0x420936f9;
constexpr const CKDWORD COLLISION_MANAGER_GUID1 = 0x38244712;
constexpr const CKDWORD GRID_MANAGER_GUID1 = 0x7f004791;
constexpr const CKDWORD TIME_MANAGER_GUID1 = 0x89ce7b32;
constexpr const CKDWORD BEHAVIOR_MANAGER_GUID1 = 0x58d621ae;
constexpr const CKDWORD INPUT_MANAGER_GUID1 = 0xf787c904;
constexpr const CKDWORD SOUND_MANAGER_GUID1 = 0xdce135f6;
constexpr const CKDWORD MIDI_MANAGER_GUID1 = 0x594154a6;
constexpr const CKDWORD INTERFACE_MANAGER_GUID1 = 0x9a4b8e3d;
constexpr const CKDWORD RENDER_MANAGER_GUID1 = 0xa213c8d5;
constexpr const CKDWORD PARAMETER_MANAGER_GUID1 = 0x9ce57ab6;
constexpr const CKDWORD PATH_MANAGER_GUID1 = 0x15fd54b9;
constexpr const CKDWORD VARIABLE_MANAGER_GUID1 = 0x98cc3cc9;
constexpr CKDWORD OBJECT_MANAGER_GUID1 = 0x7cbb3b91;
constexpr CKDWORD ATTRIBUTE_MANAGER_GUID1 = 0x3d242466;
constexpr CKDWORD MESSAGE_MANAGER_GUID1 = 0x466a0fac;
constexpr CKDWORD FLOOR_MANAGER_GUID1 = 0x420936f9;
constexpr CKDWORD COLLISION_MANAGER_GUID1 = 0x38244712;
constexpr CKDWORD GRID_MANAGER_GUID1 = 0x7f004791;
constexpr CKDWORD TIME_MANAGER_GUID1 = 0x89ce7b32;
constexpr CKDWORD BEHAVIOR_MANAGER_GUID1 = 0x58d621ae;
constexpr CKDWORD INPUT_MANAGER_GUID1 = 0xf787c904;
constexpr CKDWORD SOUND_MANAGER_GUID1 = 0xdce135f6;
constexpr CKDWORD MIDI_MANAGER_GUID1 = 0x594154a6;
constexpr CKDWORD INTERFACE_MANAGER_GUID1 = 0x9a4b8e3d;
constexpr CKDWORD RENDER_MANAGER_GUID1 = 0xa213c8d5;
constexpr CKDWORD PARAMETER_MANAGER_GUID1 = 0x9ce57ab6;
constexpr CKDWORD PATH_MANAGER_GUID1 = 0x15fd54b9;
constexpr CKDWORD VARIABLE_MANAGER_GUID1 = 0x98cc3cc9;
constexpr const CKGUID OBJECT_MANAGER_GUID { OBJECT_MANAGER_GUID1, 0 };
constexpr const CKGUID ATTRIBUTE_MANAGER_GUID { ATTRIBUTE_MANAGER_GUID1, 0 };
constexpr const CKGUID MESSAGE_MANAGER_GUID { MESSAGE_MANAGER_GUID1, 0 };
constexpr const CKGUID TIME_MANAGER_GUID { TIME_MANAGER_GUID1, 0 };
constexpr const CKGUID SOUND_MANAGER_GUID { SOUND_MANAGER_GUID1, 0 };
constexpr const CKGUID MIDI_MANAGER_GUID { MIDI_MANAGER_GUID1, 0 };
constexpr const CKGUID INPUT_MANAGER_GUID { INPUT_MANAGER_GUID1, 0 };
constexpr const CKGUID BEHAVIOR_MANAGER_GUID { BEHAVIOR_MANAGER_GUID1, 0 };
constexpr const CKGUID FLOOR_MANAGER_GUID { FLOOR_MANAGER_GUID1, 0 };
constexpr const CKGUID COLLISION_MANAGER_GUID { COLLISION_MANAGER_GUID1, 0 };
constexpr const CKGUID GRID_MANAGER_GUID { GRID_MANAGER_GUID1, 0 };
constexpr const CKGUID INTERFACE_MANAGER_GUID { INTERFACE_MANAGER_GUID1, 0 };
constexpr const CKGUID RENDER_MANAGER_GUID { RENDER_MANAGER_GUID1, 0 };
constexpr const CKGUID PARAMETER_MANAGER_GUID { PARAMETER_MANAGER_GUID1, 0 };
constexpr const CKGUID PATH_MANAGER_GUID { PATH_MANAGER_GUID1, 0 };
constexpr const CKGUID VARIABLE_MANAGER_GUID { VARIABLE_MANAGER_GUID1, 0 };
constexpr CKGUID OBJECT_MANAGER_GUID { OBJECT_MANAGER_GUID1, 0 };
constexpr CKGUID ATTRIBUTE_MANAGER_GUID { ATTRIBUTE_MANAGER_GUID1, 0 };
constexpr CKGUID MESSAGE_MANAGER_GUID { MESSAGE_MANAGER_GUID1, 0 };
constexpr CKGUID TIME_MANAGER_GUID { TIME_MANAGER_GUID1, 0 };
constexpr CKGUID SOUND_MANAGER_GUID { SOUND_MANAGER_GUID1, 0 };
constexpr CKGUID MIDI_MANAGER_GUID { MIDI_MANAGER_GUID1, 0 };
constexpr CKGUID INPUT_MANAGER_GUID { INPUT_MANAGER_GUID1, 0 };
constexpr CKGUID BEHAVIOR_MANAGER_GUID { BEHAVIOR_MANAGER_GUID1, 0 };
constexpr CKGUID FLOOR_MANAGER_GUID { FLOOR_MANAGER_GUID1, 0 };
constexpr CKGUID COLLISION_MANAGER_GUID { COLLISION_MANAGER_GUID1, 0 };
constexpr CKGUID GRID_MANAGER_GUID { GRID_MANAGER_GUID1, 0 };
constexpr CKGUID INTERFACE_MANAGER_GUID { INTERFACE_MANAGER_GUID1, 0 };
constexpr CKGUID RENDER_MANAGER_GUID { RENDER_MANAGER_GUID1, 0 };
constexpr CKGUID PARAMETER_MANAGER_GUID { PARAMETER_MANAGER_GUID1, 0 };
constexpr CKGUID PATH_MANAGER_GUID { PATH_MANAGER_GUID1, 0 };
constexpr CKGUID VARIABLE_MANAGER_GUID { VARIABLE_MANAGER_GUID1, 0 };
#pragma endregion
@@ -50,17 +51,17 @@ namespace LibCmo::CK2 {
/**
* @brief The identifier of Virtools file.
*/
constexpr const CKCHAR CKNEMOFI[] = u8"Nemo Fi";
constexpr CKCHAR CKNEMOFI[] = u8"Nemo Fi";
/**
* @brief Current Version of CK Engine (Day/Month/Year)
*/
constexpr const CKDWORD CKVERSION = 0x13022002u;
constexpr CKDWORD CKVERSION = 0x13022002u;
/**
* @brief Current Version of Dev
*/
constexpr const CKDWORD DEVBUILD = 0x02010001u;
constexpr const CKDWORD DEVVERSION = 0u;
constexpr const CKGUID VIRTOOLS_GUID = CKGUID(0x56495254u, 0x4f4f4c53u);
constexpr CKDWORD DEVBUILD = 0x02010001u;
constexpr CKDWORD DEVVERSION = 0u;
constexpr CKGUID VIRTOOLS_GUID = CKGUID(0x56495254u, 0x4f4f4c53u);
#pragma endregion
@@ -135,7 +136,7 @@ namespace LibCmo::CK2 {
m_ReaderGuid(), m_Ext() {}
CKBitmapProperties(const CKGUID& guid, CKSTRING ext) :
m_ReaderGuid(guid), m_Ext(ext) {}
YYCC_DEF_CLS_COPY_MOVE(CKBitmapProperties);
YYCC_DEFAULT_COPY_MOVE(CKBitmapProperties)
CKGUID m_ReaderGuid; /**< CKGUID that uniquely identifies the reader that created this properties structure */
CKFileExtension m_Ext; /**< File Extension of the image being described by this structure */

View File

@@ -1,6 +1,7 @@
#pragma once
#include "../VTInternal.hpp"
#include <yycc/macro/class_copy_move.hpp>
namespace LibCmo::XContainer {
using XIntArray = XArray<CKINT>;
@@ -40,7 +41,7 @@ namespace LibCmo::CK2 {
~CKBufferParser() {
if (this->m_NeedManualFree) delete[](this->m_MemBegin);
}
YYCC_DEL_CLS_COPY_MOVE(CKBufferParser);
YYCC_DELETE_COPY_MOVE(CKBufferParser)
const void* GetPtr(CKINT extraoff = 0) { return (this->m_MemBegin + m_MemPos + extraoff); }
void* GetMutablePtr(CKINT extraoff = 0) { return (this->m_MemBegin + m_MemPos + extraoff); }
@@ -96,7 +97,7 @@ namespace LibCmo::CK2 {
ObjectCount(0u), ManagerCount(0u), MaxIDSaved(0u), Crc(0u),
Hdr1PackSize(0u), Hdr1UnPackSize(0u), DataPackSize(0u), DataUnPackSize(0u) {}
~CKFileInfo() {}
YYCC_DEF_CLS_COPY_MOVE(CKFileInfo);
YYCC_DEFAULT_COPY_MOVE(CKFileInfo)
CKDWORD ProductVersion; /**< Virtools Version (Dev/Creation). (CK_VIRTOOLS_VERSION) */
CKDWORD ProductBuild; /**< Virtools Build Number. */
@@ -155,7 +156,7 @@ namespace LibCmo::CK2 {
CKFilePluginDependencies() :
m_PluginCategory(CK_PLUGIN_TYPE::CKPLUGIN_MANAGER_DLL), m_Guids() {}
~CKFilePluginDependencies() {}
YYCC_DEF_CLS_COPY_MOVE(CKFilePluginDependencies);
YYCC_DEFAULT_COPY_MOVE(CKFilePluginDependencies)
CK_PLUGIN_TYPE m_PluginCategory;
XContainer::XArray<CKGUID> m_Guids;
@@ -187,7 +188,7 @@ namespace LibCmo::CK2 {
public:
CKFileReader(CKContext* ctx);
~CKFileReader();
YYCC_DEL_CLS_COPY_MOVE(CKFileReader);
YYCC_DELETE_COPY_MOVE(CKFileReader)
// ========== Loading ==========
CKERROR ShallowLoad(CKSTRING u8_filename);
@@ -228,7 +229,7 @@ namespace LibCmo::CK2 {
CKFileWriter(CKContext* ctx);
CKFileWriter(CKContext* ctx, CKFileReader* reader, bool is_shallow);
~CKFileWriter();
YYCC_DEL_CLS_COPY_MOVE(CKFileWriter);
YYCC_DELETE_COPY_MOVE(CKFileWriter)
// ========== Saving Preparing ==========
bool AddSavedObject(ObjImpls::CKObject* obj, CKDWORD flags = CK_STATESAVE_ALL);

View File

@@ -4,6 +4,8 @@
#include "MgrImpls/CKPathManager.hpp"
#include "../VxMath/VxMemoryMappedFile.hpp"
#include "CKContext.hpp"
#include <yycc/cenum.hpp>
#include <yycc/patch/fopen.hpp>
#include <memory>
namespace LibCmo::CK2 {
@@ -234,8 +236,8 @@ namespace LibCmo::CK2 {
std::string name_conv;
// ========== compress feature process ==========
if (YYCC::EnumHelper::Has(this->m_FileInfo.FileWriteMode, CK_FILE_WRITEMODE::CKFILE_CHUNKCOMPRESSED_OLD) ||
YYCC::EnumHelper::Has(this->m_FileInfo.FileWriteMode, CK_FILE_WRITEMODE::CKFILE_WHOLECOMPRESSED)) {
if (yycc::cenum::has(this->m_FileInfo.FileWriteMode, CK_FILE_WRITEMODE::CKFILE_CHUNKCOMPRESSED_OLD)
|| yycc::cenum::has(this->m_FileInfo.FileWriteMode, CK_FILE_WRITEMODE::CKFILE_WHOLECOMPRESSED)) {
void* decomp_buffer = CKUnPackData(this->m_FileInfo.DataUnPackSize, parser->GetPtr(), this->m_FileInfo.DataPackSize);
if (decomp_buffer != nullptr) {
@@ -351,7 +353,7 @@ namespace LibCmo::CK2 {
// read file body
XContainer::XString tempfilename = m_Ctx->GetPathManager()->GetTempFilePath(file.c_str());
FILE* fp = YYCC::IOHelper::UTF8FOpen(tempfilename.c_str(), u8"wb");
FILE* fp = yycc::patch::fopen::fopen(tempfilename.c_str(), u8"wb");
if (fp != nullptr) {
std::fwrite(parser->GetPtr(), sizeof(CKBYTE), filebodylen, fp);
std::fclose(fp);

View File

@@ -5,6 +5,8 @@
#include "MgrImpls/CKBaseManager.hpp"
#include "MgrImpls/CKPathManager.hpp"
#include "../VxMath/VxMemoryMappedFile.hpp"
#include <yycc/cenum.hpp>
#include <yycc/patch/fopen.hpp>
#include <memory>
namespace LibCmo::CK2 {
@@ -216,8 +218,8 @@ namespace LibCmo::CK2 {
}
// compress header if needed
if (YYCC::EnumHelper::Has(fileWriteMode, CK_FILE_WRITEMODE::CKFILE_CHUNKCOMPRESSED_OLD) ||
YYCC::EnumHelper::Has(fileWriteMode, CK_FILE_WRITEMODE::CKFILE_WHOLECOMPRESSED)) {
if (yycc::cenum::has(fileWriteMode, CK_FILE_WRITEMODE::CKFILE_CHUNKCOMPRESSED_OLD)
|| yycc::cenum::has(fileWriteMode, CK_FILE_WRITEMODE::CKFILE_WHOLECOMPRESSED)) {
CKDWORD comp_buf_size = 0;
void* comp_buffer = CKPackData(hdrparser->GetBase(), hdrparser->GetSize(), comp_buf_size, m_Ctx->GetCompressionLevel());
@@ -263,8 +265,8 @@ namespace LibCmo::CK2 {
}
// compress header if needed
if (YYCC::EnumHelper::Has(fileWriteMode, CK_FILE_WRITEMODE::CKFILE_CHUNKCOMPRESSED_OLD) ||
YYCC::EnumHelper::Has(fileWriteMode, CK_FILE_WRITEMODE::CKFILE_WHOLECOMPRESSED)) {
if (yycc::cenum::has(fileWriteMode, CK_FILE_WRITEMODE::CKFILE_CHUNKCOMPRESSED_OLD)
|| yycc::cenum::has(fileWriteMode, CK_FILE_WRITEMODE::CKFILE_WHOLECOMPRESSED)) {
CKDWORD comp_buf_size = 0;
void* comp_buffer = CKPackData(datparser->GetBase(), datparser->GetSize(), comp_buf_size, m_Ctx->GetCompressionLevel());
@@ -303,7 +305,7 @@ namespace LibCmo::CK2 {
// ========== Open File & Write Essential Data ==========
// open file and test
FILE* fs = YYCC::IOHelper::UTF8FOpen(u8_filename, u8"wb");
FILE* fs = yycc::patch::fopen::fopen(u8_filename, u8"wb");
if (fs == nullptr) return CKERROR::CKERR_CANTWRITETOFILE;
// write small header + header + data
std::fwrite(&rawHeader, sizeof(CKRawFileInfo), 1, fs);
@@ -363,7 +365,7 @@ namespace LibCmo::CK2 {
// try open file to check whether we can write it.
CKERROR err;
FILE* tryfile = YYCC::IOHelper::UTF8FOpen(filename, u8"ab");
FILE* tryfile = yycc::patch::fopen::fopen(filename, u8"ab");
if (tryfile == nullptr) {
err = CKERROR::CKERR_CANTWRITETOFILE;
} else {

View File

@@ -1,15 +1,18 @@
// Idk why I need import this first when I refactoring this file.
// But I keep it because I don't want to raise any potential bugs.
#include "../VTUtils.hpp"
#if defined(YYCC_OS_WINDOWS)
#define ZLIB_WINAPI
#endif
// We import zlib first to prevent any possible conflict.
#include <zconf.h>
#include <zlib.h>
// Import self header
#include "CKGlobals.hpp"
// Import STL and YYCC headers
#include <yycc/string/reinterpret.hpp>
#include <algorithm>
#include <initializer_list>
// Import implementations.
#include "ObjImpls/CKObject.hpp"
#include "ObjImpls/CKSceneObject.hpp"
#include "ObjImpls/CKBeObject.hpp"
@@ -128,7 +131,7 @@ namespace LibCmo::CK2 {
CKDWORD CKStrLen(CKSTRING strl) {
if (strl == nullptr) return 0u;
size_t len = std::strlen(YYCC::EncodingHelper::ToOrdinary(strl));
size_t len = std::strlen(yycc::string::reinterpret::as_ordinary(strl));
if (len > static_cast<size_t>(std::numeric_limits<CKDWORD>::max()))
throw RuntimeException("Exceed maximum value when cast size_t to CKDWORD.");
return static_cast<CKDWORD>(len);

View File

@@ -2,6 +2,7 @@
#include "CKTypes.hpp"
#include "../XContainer/XTypes.hpp"
#include <yycc/macro/class_copy_move.hpp>
#include <functional>
#include <memory>
@@ -146,7 +147,7 @@ namespace LibCmo::CK2 {
DerivationLevel(0),
Parents(), Children(), ToBeNotify(), CommonToBeNotify()
{}
YYCC_DEF_CLS_COPY_MOVE(CKClassDesc);
YYCC_DEFAULT_COPY_MOVE(CKClassDesc)
};
// ========== CKClass Registration ==========

View File

@@ -10,7 +10,7 @@
namespace LibCmo::CK2 {
constexpr const CKDWORD CK_STATESAVE_ALL = 0xFFFFFFFF;
constexpr CKDWORD CK_STATESAVE_ALL = 0xFFFFFFFF;
/**
Object

View File

@@ -1,6 +1,7 @@
#pragma once
#include "../VTInternal.hpp"
#include <yycc/macro/class_copy_move.hpp>
#include <memory>
#include <functional>
#include <type_traits>
@@ -54,7 +55,7 @@ namespace LibCmo::CK2 {
LockedReadBufferDeleter() : m_Host(nullptr), m_ConsumedSize(0) {}
LockedReadBufferDeleter(CKStateChunk* host, CKDWORD init_size) :
m_Host(host), m_ConsumedSize(init_size) {}
YYCC_DEF_CLS_COPY_MOVE(LockedReadBufferDeleter);
YYCC_DEFAULT_COPY_MOVE(LockedReadBufferDeleter)
void operator()(const void* /*buf*/);
void SetConsumedSize(CKDWORD newsize);
@@ -68,7 +69,7 @@ namespace LibCmo::CK2 {
LockedWriteBufferDeleter() : m_Host(nullptr), m_ConsumedSize(0) {}
LockedWriteBufferDeleter(CKStateChunk* host, CKDWORD init_size) :
m_Host(host), m_ConsumedSize(init_size) {}
YYCC_DEF_CLS_COPY_MOVE(LockedWriteBufferDeleter);
YYCC_DEFAULT_COPY_MOVE(LockedWriteBufferDeleter)
void operator()(const void* /*buf*/);
void SetConsumedSize(CKDWORD newsize);
@@ -82,7 +83,7 @@ namespace LibCmo::CK2 {
BufferDeleter() : m_Host(nullptr), m_BufSize(0) {}
BufferDeleter(CKStateChunk* host, CKDWORD bufsize) :
m_Host(host), m_BufSize(bufsize) {}
YYCC_DEF_CLS_COPY_MOVE(BufferDeleter);
YYCC_DEFAULT_COPY_MOVE(BufferDeleter)
void operator()(const void* buf);
CKDWORD GetBufferSize() const;

View File

@@ -1,6 +1,7 @@
#include "CKStateChunk.hpp"
#include "CKFile.hpp"
#include "CKContext.hpp"
#include <yycc/cenum.hpp>
namespace LibCmo::CK2 {
@@ -419,23 +420,23 @@ namespace LibCmo::CK2 {
std::memcpy(this->m_pData, dwbuf + bufpos, sizeof(CKDWORD) * this->m_DataDwSize);
bufpos += this->m_DataDwSize;
}
if (!YYCC::EnumHelper::Has(options, CK_STATECHUNK_CHUNKOPTIONS::CHNK_OPTION_FILE)) {
if (!yycc::cenum::has(options, CK_STATECHUNK_CHUNKOPTIONS::CHNK_OPTION_FILE)) {
// forced no bind file
this->m_BindFile = nullptr;
}
if (YYCC::EnumHelper::Has(options, CK_STATECHUNK_CHUNKOPTIONS::CHNK_OPTION_IDS)) {
if (yycc::cenum::has(options, CK_STATECHUNK_CHUNKOPTIONS::CHNK_OPTION_IDS)) {
this->m_ObjectList.resize(dwbuf[bufpos]);
bufpos += 1u;
std::memcpy(this->m_ObjectList.data(), dwbuf + bufpos, sizeof(CKDWORD) * this->m_ObjectList.size());
bufpos += this->m_ObjectList.size();
}
if (YYCC::EnumHelper::Has(options, CK_STATECHUNK_CHUNKOPTIONS::CHNK_OPTION_CHN)) {
if (yycc::cenum::has(options, CK_STATECHUNK_CHUNKOPTIONS::CHNK_OPTION_CHN)) {
this->m_ChunkList.resize(dwbuf[bufpos]);
bufpos += 1u;
std::memcpy(this->m_ChunkList.data(), dwbuf + bufpos, sizeof(CKDWORD) * this->m_ChunkList.size());
bufpos += this->m_ChunkList.size();
}
if (YYCC::EnumHelper::Has(options, CK_STATECHUNK_CHUNKOPTIONS::CHNK_OPTION_MAN)) {
if (yycc::cenum::has(options, CK_STATECHUNK_CHUNKOPTIONS::CHNK_OPTION_MAN)) {
this->m_ManagerList.resize(dwbuf[bufpos]);
bufpos += 1u;
std::memcpy(this->m_ManagerList.data(), dwbuf + bufpos, sizeof(CKDWORD) * this->m_ManagerList.size());
@@ -459,19 +460,19 @@ namespace LibCmo::CK2 {
if (!m_ObjectList.empty()) {
size += CKSizeof(CKDWORD) * static_cast<CKDWORD>(m_ObjectList.size()) + sizeof(CKDWORD);
YYCC::EnumHelper::Add(options, CK_STATECHUNK_CHUNKOPTIONS::CHNK_OPTION_IDS);
yycc::cenum::add(options, CK_STATECHUNK_CHUNKOPTIONS::CHNK_OPTION_IDS);
}
if (!m_ChunkList.empty()) {
size += CKSizeof(CKDWORD) * static_cast<CKDWORD>(m_ChunkList.size()) + sizeof(CKDWORD);
YYCC::EnumHelper::Add(options, CK_STATECHUNK_CHUNKOPTIONS::CHNK_OPTION_CHN);
yycc::cenum::add(options, CK_STATECHUNK_CHUNKOPTIONS::CHNK_OPTION_CHN);
}
if (!m_ManagerList.empty()) {
size += CKSizeof(CKDWORD) * static_cast<CKDWORD>(m_ManagerList.size()) + sizeof(CKDWORD);
YYCC::EnumHelper::Add(options, CK_STATECHUNK_CHUNKOPTIONS::CHNK_OPTION_MAN);
yycc::cenum::add(options, CK_STATECHUNK_CHUNKOPTIONS::CHNK_OPTION_MAN);
}
if (this->m_BindFile != nullptr) {
YYCC::EnumHelper::Add(options, CK_STATECHUNK_CHUNKOPTIONS::CHNK_OPTION_FILE);
yycc::cenum::add(options, CK_STATECHUNK_CHUNKOPTIONS::CHNK_OPTION_FILE);
}
// if buffer provided, write it

View File

@@ -1,5 +1,10 @@
#include "VTUtils.hpp"
// Check LibCmo build type first.
#if !(defined(LIBCMO_BUILD_DEBUG) ^ defined(LIBCMO_BUILD_RELEASE))
#error "You must define ONE of LIBCMO_BUILD_DEBUG and LIBCMO_BUILD_RELEASE to indicate build type!"
#endif
// Check YYCC library version
#include <yycc/macro/version_cmp.hpp>
#if YYCC_VERCMP_NE(YYCC_VER_MAJOR, YYCC_VER_MINOR, YYCC_VER_PATCH, 2, 0, 0)

View File

@@ -1,10 +1,5 @@
#pragma once
// Check LibCmo build type first.
#if !(defined(LIBCMO_BUILD_DEBUG) ^ defined(LIBCMO_BUILD_RELEASE))
#error "You must define ONE of LIBCMO_BUILD_DEBUG and LIBCMO_BUILD_RELEASE to indicate build type!"
#endif
// Include YYCC library core header for all headers
#include <yycc.hpp>

View File

@@ -8,7 +8,7 @@
namespace Unvirt {
namespace AccessibleValue {
constexpr const char8_t c_InvalidEnumName[] = u8"[undefined]";
constexpr char8_t c_InvalidEnumName[] = u8"[undefined]";
#pragma region Size Formatter