write some funcs for CKStateChunk writer
This commit is contained in:
		| @ -234,17 +234,47 @@ namespace LibCmo::CK2 { | ||||
|  | ||||
| 	bool CKFileWriter::AddSavedObject(ObjImpls::CKObject* obj, CKDWORD flags) { | ||||
| 		if (m_Done || m_IsCopyFromReader) return false; | ||||
| 		return false; | ||||
| 		if (obj == nullptr) return false; | ||||
|  | ||||
| 		// check whether is saved. | ||||
| 		CK_ID objid = obj->GetID(); | ||||
| 		if (XContainer::NSXBitArray::IsSet(m_AlreadySavedMask, static_cast<CKDWORD>(objid))) return false; | ||||
|  | ||||
| 		// ok, insert this value | ||||
| 		m_ObjectsHashTable.try_emplace(objid, static_cast<CKDWORD>(m_FileObjects.size())); | ||||
|  | ||||
| 		XContainer::NSXBitArray::Set(m_AlreadySavedMask, static_cast<CKDWORD>(objid)); | ||||
|  | ||||
| 		CKFileObject fobj; | ||||
| 		fobj.ObjectId = objid; | ||||
| 		fobj.ObjPtr = obj; | ||||
| 		fobj.ObjectCid = obj->GetClassID(); | ||||
| 		fobj.SaveFlags = flags; | ||||
| 		XContainer::NSXString::FromCKSTRING(fobj.Name, obj->GetName()); | ||||
| 		m_FileObjects.emplace_back(std::move(fobj)); | ||||
| 		 | ||||
| 		return true; | ||||
| 	} | ||||
|  | ||||
| 	bool CKFileWriter::AddSavedObjects(CKObjectArray* objarray, CKDWORD flags) { | ||||
| 	bool CKFileWriter::AddSavedObjects(const XContainer::XObjectPointerArray& objarray, CKDWORD flags) { | ||||
| 		if (m_Done || m_IsCopyFromReader) return false; | ||||
| 		return false; | ||||
| 		 | ||||
| 		bool ret = true; | ||||
| 		for (auto obj : objarray) { | ||||
| 			if (!AddSavedObject(obj, flags)) { | ||||
| 				ret = false; | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		return ret; | ||||
| 	} | ||||
|  | ||||
| 	bool CKFileWriter::AddSavedFile(CKSTRING u8FileName) { | ||||
| 		if (m_Done || m_IsCopyFromReader) return false; | ||||
| 		return false; | ||||
| 		if (u8FileName == nullptr) return false; | ||||
|  | ||||
| 		m_IncludedFiles.emplace_back(u8FileName); | ||||
| 		return true; | ||||
| 	} | ||||
|  | ||||
| #pragma endregion | ||||
| @ -294,6 +324,16 @@ namespace LibCmo::CK2 { | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	CKDWORD CKFileVisitor::GetIndexByObjectID(CK_ID objid) { | ||||
| 		// see CKFile::SaveFindObjectIndex in IDA | ||||
| 		CKDWORD idx = -1; | ||||
| 		if (m_IsReader) return idx; | ||||
|  | ||||
| 		auto finder = m_Writer->m_ObjectsHashTable.find(objid); | ||||
| 		if (finder == m_Writer->m_ObjectsHashTable.end()) return idx; | ||||
| 		return finder->second; | ||||
| 	} | ||||
|  | ||||
| #pragma endregion | ||||
|  | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user