Skip to content

Commit 57c8850

Browse files
committed
[Engine][IO] Reworked Filesystem for typesafe accessor api
1 parent be2bd5b commit 57c8850

18 files changed

Lines changed: 193 additions & 156 deletions

File tree

Engine/Source/Editor/src/EAssets/Bakers/MaterialBaker.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,9 @@ void MaterialBaker::Bake(const Gleam::Path& directory, const AssetItem& item) co
1616
{
1717
auto filename = Gleam::TWString(item.reference.guid.ToString()) + Gleam::Asset::Extension();
1818
auto file = Gleam::Filesystem::Create(directory / filename, Gleam::FileType::Binary);
19-
auto accessor = Gleam::Filesystem::WriteAccessor(directory / filename);
2019

2120
auto serializer = Gleam::BinarySerializer();
22-
serializer.Serialize(mDescriptor, file.GetStream());
21+
serializer.Serialize(mDescriptor, file->GetStream());
2322
}
2423

2524
Gleam::TString MaterialBaker::Filename() const
@@ -48,10 +47,9 @@ void MaterialInstanceBaker::Bake(const Gleam::Path& directory, const AssetItem&
4847
{
4948
auto filename = Gleam::TWString(item.reference.guid.ToString()) + Gleam::Asset::Extension();
5049
auto file = Gleam::Filesystem::Create(directory / filename, Gleam::FileType::Binary);
51-
auto accessor = Gleam::Filesystem::WriteAccessor(directory / filename);
5250

5351
auto serializer = Gleam::BinarySerializer();
54-
serializer.Serialize(mDescriptor, file.GetStream());
52+
serializer.Serialize(mDescriptor, file->GetStream());
5553
}
5654

5755
Gleam::TString MaterialInstanceBaker::Filename() const

Engine/Source/Editor/src/EAssets/Bakers/MeshBaker.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,9 @@ void MeshBaker::Bake(const Gleam::Path& directory, const AssetItem& item) const
1515
{
1616
auto filename = Gleam::TWString(item.reference.guid.ToString()) + Gleam::Asset::Extension();
1717
auto file = Gleam::Filesystem::Create(directory / filename, Gleam::FileType::Binary);
18-
auto accessor = Gleam::Filesystem::WriteAccessor(directory / filename);
1918

2019
auto serializer = Gleam::BinarySerializer();
21-
serializer.Serialize(mDescriptor, file.GetStream());
20+
serializer.Serialize(mDescriptor, file->GetStream());
2221
}
2322

2423
Gleam::TString MeshBaker::Filename() const

Engine/Source/Editor/src/EAssets/Bakers/PrefabBaker.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,10 @@ void PrefabBaker::Bake(const Gleam::Path& directory, const AssetItem& item) cons
1515
{
1616
auto filename = Gleam::TWString(item.reference.guid.ToString()) + Gleam::Prefab::Extension();
1717
auto file = Gleam::Filesystem::Create(directory / filename, Gleam::FileType::Text);
18-
auto accessor = Gleam::Filesystem::WriteAccessor(directory / filename);
1918

2019
Gleam::Prefab prefab;
2120
prefab.name = mWorld->name;
22-
prefab.Serialize(mWorld->GetEntityManager(), file.GetStream());
21+
prefab.Serialize(mWorld->GetEntityManager(), file->GetStream());
2322
}
2423

2524
Gleam::TString PrefabBaker::Filename() const

Engine/Source/Editor/src/EAssets/Bakers/TextureBaker.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,9 @@ void TextureBaker::Bake(const Gleam::Path& directory, const AssetItem& item) con
1515
{
1616
auto filename = Gleam::TWString(item.reference.guid.ToString()) + Gleam::Asset::Extension();
1717
auto file = Gleam::Filesystem::Create(directory / filename, Gleam::FileType::Binary);
18-
auto accessor = Gleam::Filesystem::WriteAccessor(directory / filename);
1918

2019
auto serializer = Gleam::BinarySerializer();
21-
serializer.Serialize(mDescriptor, file.GetStream());
20+
serializer.Serialize(mDescriptor, file->GetStream());
2221
}
2322

2423
Gleam::TString TextureBaker::Filename() const

Engine/Source/Editor/src/EAssets/EAssetManager.cpp

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,79 +8,71 @@ using namespace GEditor;
88

99
static Gleam::BinaryHeader ParseBinaryHeader(const Gleam::Path& asset)
1010
{
11-
auto file = Gleam::Filesystem::Open(asset, Gleam::FileType::Binary);
12-
auto accessor = Gleam::Filesystem::ReadAccessor(asset);
11+
auto file = Gleam::Filesystem::OpenRead(asset, Gleam::FileType::Binary);
1312
auto serializer = Gleam::BinarySerializer();
14-
return serializer.ParseHeader(file.GetStream());
13+
return serializer.ParseHeader(file->GetStream());
1514
}
1615

1716
static Gleam::JSONHeader ParseJSONHeader(const Gleam::Path& asset)
1817
{
19-
auto file = Gleam::Filesystem::Open(asset, Gleam::FileType::Text);
20-
auto accessor = Gleam::Filesystem::ReadAccessor(asset);
18+
auto file = Gleam::Filesystem::OpenRead(asset, Gleam::FileType::Text);
2119
auto serializer = Gleam::JSONSerializer();
22-
return serializer.ParseHeader(file.GetStream());
20+
return serializer.ParseHeader(file->GetStream());
2321
}
2422

2523
static Gleam::TString ParseAssetName(const Gleam::Path& asset, const Gleam::Guid& typeGuid)
2624
{
2725
if (typeGuid == Gleam::Reflection::GetClass<Gleam::MeshDescriptor>().Guid())
2826
{
29-
auto file = Gleam::Filesystem::Open(asset, Gleam::FileType::Binary);
30-
auto accessor = Gleam::Filesystem::ReadAccessor(asset);
27+
auto file = Gleam::Filesystem::OpenRead(asset, Gleam::FileType::Binary);
3128
auto serializer = Gleam::BinarySerializer();
3229

33-
auto descriptor = serializer.Deserialize<Gleam::MeshDescriptor>(file.GetStream());
30+
auto descriptor = serializer.Deserialize<Gleam::MeshDescriptor>(file->GetStream());
3431
return descriptor.name;
3532
}
3633

3734
if (typeGuid == Gleam::Reflection::GetClass<Gleam::Texture2DDescriptor>().Guid())
3835
{
39-
auto file = Gleam::Filesystem::Open(asset, Gleam::FileType::Binary);
40-
auto accessor = Gleam::Filesystem::ReadAccessor(asset);
36+
auto file = Gleam::Filesystem::OpenRead(asset, Gleam::FileType::Binary);
4137
auto serializer = Gleam::BinarySerializer();
4238

43-
auto descriptor = serializer.Deserialize<Gleam::Texture2DDescriptor>(file.GetStream());
39+
auto descriptor = serializer.Deserialize<Gleam::Texture2DDescriptor>(file->GetStream());
4440
return descriptor.name;
4541
}
4642

4743
if (typeGuid == Gleam::Reflection::GetClass<Gleam::MaterialDescriptor>().Guid())
4844
{
49-
auto file = Gleam::Filesystem::Open(asset, Gleam::FileType::Binary);
50-
auto accessor = Gleam::Filesystem::ReadAccessor(asset);
45+
auto file = Gleam::Filesystem::OpenRead(asset, Gleam::FileType::Binary);
5146
auto serializer = Gleam::BinarySerializer();
5247

53-
auto descriptor = serializer.Deserialize<Gleam::MaterialDescriptor>(file.GetStream());
48+
auto descriptor = serializer.Deserialize<Gleam::MaterialDescriptor>(file->GetStream());
5449
return descriptor.name;
5550
}
5651

5752
if (typeGuid == Gleam::Reflection::GetClass<Gleam::MaterialInstanceDescriptor>().Guid())
5853
{
59-
auto file = Gleam::Filesystem::Open(asset, Gleam::FileType::Binary);
60-
auto accessor = Gleam::Filesystem::ReadAccessor(asset);
54+
auto file = Gleam::Filesystem::OpenRead(asset, Gleam::FileType::Binary);
6155
auto serializer = Gleam::BinarySerializer();
6256

63-
auto descriptor = serializer.Deserialize<Gleam::MaterialInstanceDescriptor>(file.GetStream());
57+
auto descriptor = serializer.Deserialize<Gleam::MaterialInstanceDescriptor>(file->GetStream());
6458
return descriptor.name;
6559
}
6660

6761
if (typeGuid == Gleam::Reflection::GetClass<Gleam::Prefab>().Guid())
6862
{
69-
auto file = Gleam::Filesystem::Open(asset, Gleam::FileType::Text);
70-
auto accessor = Gleam::Filesystem::ReadAccessor(asset);
63+
auto file = Gleam::Filesystem::OpenRead(asset, Gleam::FileType::Text);
7164
auto serializer = Gleam::JSONSerializer();
7265

73-
auto prefab = serializer.Deserialize<Gleam::Prefab>(file.GetStream());
66+
auto prefab = serializer.Deserialize<Gleam::Prefab>(file->GetStream());
7467
return prefab.name;
7568
}
7669

7770
if (typeGuid == Gleam::Reflection::GetClass<Gleam::World>().Guid())
7871
{
79-
auto file = Gleam::Filesystem::Open(asset, Gleam::FileType::Text);
80-
auto accessor = Gleam::Filesystem::ReadAccessor(asset);
72+
auto file = Gleam::Filesystem::OpenRead(asset, Gleam::FileType::Text);
8173
auto serializer = Gleam::JSONSerializer();
8274

83-
auto world = serializer.Deserialize<Gleam::World>(file.GetStream());
75+
auto world = serializer.Deserialize<Gleam::World>(file->GetStream());
8476
return world.name;
8577
}
8678

Engine/Source/Editor/src/EAssets/MaterialSource.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,13 @@ static Gleam::BlendMode BlendModeFromObject(const rapidjson::Value& object)
5959

6060
bool MaterialSource::Import(const Gleam::Path& path, const ImportSettings& settings)
6161
{
62-
auto file = Gleam::Filesystem::Open(path, Gleam::FileType::Text);
63-
if (file.Empty())
62+
auto file = Gleam::Filesystem::OpenRead(path, Gleam::FileType::Text);
63+
if (file->Empty())
6464
{
6565
return false;
6666
}
6767

68-
rapidjson::IStreamWrapper ss(file.GetStream());
68+
rapidjson::IStreamWrapper ss(file->GetStream());
6969
rapidjson::Document document;
7070
document.ParseStream(ss);
7171

@@ -145,11 +145,11 @@ bool MaterialSource::Import(const Gleam::Path& path, const ImportSettings& setti
145145
auto generatedPath = shaderPath;
146146
generatedPath.Concat(".gen.hlsl");
147147
{
148-
auto shaderFile = Gleam::Filesystem::Open(shaderPath, Gleam::FileType::Text);
149-
generatedShader << shaderFile.Read() << "\0";
148+
auto shaderFile = Gleam::Filesystem::OpenRead(shaderPath, Gleam::FileType::Text);
149+
generatedShader << shaderFile->Read() << "\0";
150150

151151
auto generatedFile = Gleam::Filesystem::Create(generatedPath, Gleam::FileType::Text);
152-
generatedFile.Write(generatedShader.str());
152+
generatedFile->Write(generatedShader.str());
153153
}
154154

155155
if (document.HasMember("Lighting"))

Engine/Source/Editor/src/GleamEditor.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ class GleamLauncher : public Gleam::Application
8383
// global probe
8484
world.GetEntityManager().SetSingleton<Gleam::ReflectionProbe>();
8585

86-
world.Serialize(file.GetStream());
86+
world.Serialize(file->GetStream());
8787
}
8888
project.worldConfig.worlds.emplace_back(worldRef);
8989

@@ -95,7 +95,7 @@ class GleamLauncher : public Gleam::Application
9595
auto projectFile = path / filename;
9696
auto file = Gleam::Filesystem::Create(projectFile, Gleam::FileType::Text);
9797
auto serializer = Gleam::JSONSerializer();
98-
serializer.Serialize(project, file.GetStream());
98+
serializer.Serialize(project, file->GetStream());
9999
}
100100
return project;
101101
}
@@ -106,9 +106,9 @@ class GleamLauncher : public Gleam::Application
106106
project.path = path;
107107
if (Gleam::Filesystem::Exists(path))
108108
{
109-
auto file = Gleam::Filesystem::Open(path, Gleam::FileType::Text);
109+
auto file = Gleam::Filesystem::OpenRead(path, Gleam::FileType::Text);
110110
auto serializer = Gleam::JSONSerializer();
111-
project = serializer.Deserialize<Gleam::Project>(file.GetStream());
111+
project = serializer.Deserialize<Gleam::Project>(file->GetStream());
112112
}
113113
return project;
114114
}

Engine/Source/Runtime/src/Assets/AssetManager.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,9 @@ class AssetManager final : public GameInstanceSubsystem
9595
if (it != mAssetPaths.end())
9696
{
9797
auto fullpath = Globals::ProjectContentDirectory / it->second;
98-
auto file = Filesystem::Open(fullpath, FileType::Binary);
98+
auto file = Filesystem::OpenRead(fullpath, FileType::Binary);
9999
auto serializer = BinarySerializer();
100-
auto asset = serializer.Deserialize<T>(file.GetStream());
100+
auto asset = serializer.Deserialize<T>(file->GetStream());
101101
return asset;
102102
}
103103

Engine/Source/Runtime/src/Core/Engine.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,9 @@ void Engine::Initialize(const CommandLine& cli)
4646
auto configFile = Globals::StartupDirectory/"Engine.config";
4747
if (Filesystem::Exists(configFile))
4848
{
49-
auto file = Filesystem::Open(configFile, FileType::Text);
50-
auto accessor = Filesystem::ReadAccessor(configFile);
49+
auto file = Filesystem::OpenRead(configFile, FileType::Text);
5150
auto serializer = JSONSerializer();
52-
mConfig = serializer.Deserialize<EngineConfig>(file.GetStream());
51+
mConfig = serializer.Deserialize<EngineConfig>(file->GetStream());
5352
}
5453

5554
// init windowing subsystem
@@ -79,9 +78,8 @@ void Engine::Shutdown()
7978
void Engine::SaveConfigToDisk() const
8079
{
8180
auto file = Filesystem::Create(Globals::StartupDirectory/"Engine.config", FileType::Text);
82-
auto accessor = Filesystem::WriteAccessor(Globals::StartupDirectory / "Engine.config");
8381
auto serializer = JSONSerializer();
84-
serializer.Serialize(mConfig, file.GetStream());
82+
serializer.Serialize(mConfig, file->GetStream());
8583
}
8684

8785
void Engine::UpdateConfig(const WindowConfig& config)

Engine/Source/Runtime/src/IO/File.cpp

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ TString File::Read() const
2525
return "";
2626
}
2727

28-
FileAccessor::Read accessor(mAccessor);
29-
3028
size_t size = GetSize();
3129
TString contents;
3230
contents.resize(size);
@@ -43,7 +41,6 @@ void File::Write(const TString& contents)
4341
return;
4442
}
4543

46-
FileAccessor::Write accessor(mAccessor);
4744
mHandle << contents;
4845
}
4946

@@ -55,7 +52,6 @@ void File::Append(const TString& contents)
5552
return;
5653
}
5754

58-
FileAccessor::Write accessor(mAccessor);
5955
mHandle.seekg(0, std::ios::end);
6056
mHandle << contents;
6157
}
@@ -64,7 +60,6 @@ size_t File::GetSize() const
6460
{
6561
if (mHandle.is_open())
6662
{
67-
FileAccessor::Read accessor(mAccessor);
6863
mHandle.seekg(0, std::ios::end);
6964
size_t size = mHandle.tellg();
7065
mHandle.seekg(0, std::ios::beg);
@@ -88,7 +83,7 @@ const TString& File::GetName() const
8883
return mName;
8984
}
9085

91-
FileStream& File::GetStream()
86+
FileStream& File::GetStream() const
9287
{
9388
return mHandle;
9489
}

0 commit comments

Comments
 (0)