move parts to new common component to avoid circular dependency of zonecommon and objcommon

This commit is contained in:
Jan 2021-03-03 12:56:15 -08:00
parent d616738be4
commit 12461d27e7
38 changed files with 70 additions and 22 deletions

View File

@ -82,6 +82,7 @@ group ""
-- ========================
-- Projects
-- ========================
include "src/Common.lua"
include "src/Crypto.lua"
include "src/Linker.lua"
include "src/Unlinker.lua"
@ -99,6 +100,7 @@ include "src/ObjWriting.lua"
-- Components group: All projects assist or are part of a tool
group "Components"
Common:project()
Crypto:project()
Utils:project()
ZoneCode:project()

41
src/Common.lua Normal file
View File

@ -0,0 +1,41 @@
Common = {}
function Common:include(includes)
if includes:handle(self:name()) then
Utils:include(includes)
includedirs {
path.join(ProjectFolder(), "Common")
}
end
end
function Common:link(links)
links:add(self:name())
links:linkto(Utils)
end
function Common:use()
end
function Common:name()
return "Common"
end
function Common:project()
local folder = ProjectFolder()
local includes = Includes:create()
project(self:name())
targetdir(TargetDirectoryLib)
location "%{wks.location}/src/%{prj.name}"
kind "StaticLib"
language "C++"
files {
path.join(folder, "Common/**.h"),
path.join(folder, "Common/**.cpp")
}
self:include(includes)
end

View File

@ -2,7 +2,7 @@ ObjCommon = {}
function ObjCommon:include(includes)
if includes:handle(self:name()) then
ZoneCommon:include(includes)
Common:include(includes)
minizip:include(includes)
includedirs {
path.join(ProjectFolder(), "ObjCommon")
@ -13,7 +13,7 @@ end
function ObjCommon:link(links)
links:add(self:name())
links:linkto(Utils)
links:linkto(ZoneCommon)
links:linkto(Common)
links:linkto(minizip)
end

View File

@ -1,13 +1,13 @@
#include "ObjContainerReferenceable.h"
void ObjContainerReferenceable::AddReference(Zone* referencer)
void ObjContainerReferenceable::AddReference(void* referencer)
{
m_references.insert(referencer);
}
bool ObjContainerReferenceable::RemoveReference(Zone* zone)
bool ObjContainerReferenceable::RemoveReference(void* referencer)
{
return m_references.erase(zone) > 0;
return m_references.erase(referencer) > 0;
}
bool ObjContainerReferenceable::IsReferenced() const

View File

@ -1,16 +1,15 @@
#pragma once
#include "IObjContainer.h"
#include "Zone/Zone.h"
#include <set>
class ObjContainerReferenceable : public IObjContainer
{
std::set<Zone*> m_references;
std::set<void*> m_references;
public:
void AddReference(Zone* referencer);
bool RemoveReference(Zone* zone);
void AddReference(void* referencer);
bool RemoveReference(void* referencer);
bool IsReferenced() const;
};

View File

@ -202,7 +202,7 @@ function ZoneCode:project()
buildinputs {
path.join(ProjectFolder(), "ZoneCode/Game/%{file.basename}/%{file.basename}.h"),
path.join(ProjectFolder(), "ZoneCode/Game/%{file.basename}/%{file.basename}_Commands.txt"),
path.join(ProjectFolder(), "ZoneCommon/Game/%{file.basename}/%{file.basename}_Assets.h"),
path.join(ProjectFolder(), "Common/Game/%{file.basename}/%{file.basename}_Assets.h"),
TargetDirectoryBin .. "/" .. ExecutableByOs('ZoneCodeGenerator')
}
filter {}

View File

@ -3,6 +3,6 @@
// Entry point for IW4 code generation
#include "../Common.h"
#include "../../../ZoneCommon/Game/IW4/IW4_Assets.h"
#include "../../../Common/Game/IW4/IW4_Assets.h"
// EOF

View File

@ -3,6 +3,6 @@
// Entry point for T6 code generation
#include "../Common.h"
#include "../../../ZoneCommon/Game/T6/T6_Assets.h"
#include "../../../Common/Game/T6/T6_Assets.h"
// EOF

View File

@ -2,17 +2,19 @@ ZoneCommon = {}
function ZoneCommon:include(includes)
if includes:handle(self:name()) then
Utils:include(includes)
ObjCommon:include(includes)
includedirs {
path.join(ProjectFolder(), "ZoneCommon")
}
Utils:include(includes)
Common:include(includes)
ObjCommon:include(includes)
end
end
function ZoneCommon:link(links)
links:add(self:name())
links:linkto(Utils)
links:linkto(Common)
links:linkto(ObjCommon)
end

View File

@ -4,7 +4,7 @@
#include "Pool/ZoneAssetPools.h"
#include "Pool/AssetPool.h"
#include "IW4.h"
#include "Game/IW4/IW4.h"
class GameAssetPoolIW4 final : public ZoneAssetPools
{

View File

@ -2,7 +2,7 @@
#include "Pool/ZoneAssetPools.h"
#include "Pool/AssetPool.h"
#include "T6.h"
#include "Game/T6/T6.h"
class GameAssetPoolT6 final : public ZoneAssetPools
{

View File

@ -1,14 +1,15 @@
#pragma once
#include <memory>
#include "ZoneTypes.h"
#include <memory>
#include <string>
#include <vector>
#include "Zone/ZoneTypes.h"
#include "Pool/ZoneAssetPools.h"
#include "Game/IGame.h"
#include "Game/GameLanguage.h"
#include "Zone/XBlock.h"
#include "ZoneMemory.h"
#include <string>
#include <vector>
class IGame;
class ZoneAssetPools;

View File

@ -11,6 +11,7 @@ end
function ZoneLoading:link(links)
links:add(self:name())
links:add("pthread")
links:linkto(Crypto)
links:linkto(Utils)
links:linkto(ZoneCommon)

View File

@ -1,14 +1,16 @@
#include <catch2/catch.hpp>
#include <type_traits>
#include "Image/ImageFormat.h"
namespace image::image_format
{
TEST_CASE("ImageFormat: EnsureAllFormatsArrayIndicesAreIds", "[image]")
{
REQUIRE(static_cast<unsigned int>(ImageFormatId::MAX) == _countof(ImageFormat::ALL_FORMATS));
REQUIRE(static_cast<unsigned int>(ImageFormatId::MAX) == std::extent<decltype(ImageFormat::ALL_FORMATS)>::value);
for(unsigned i = 0; i < _countof(ImageFormat::ALL_FORMATS); i++)
for(unsigned i = 0; i < std::extent<decltype(ImageFormat::ALL_FORMATS)>::value; i++)
{
REQUIRE(ImageFormat::ALL_FORMATS[i] != nullptr);
REQUIRE(i == static_cast<unsigned>(ImageFormat::ALL_FORMATS[i]->GetId()));