Files
FlaxEngine/Source/Engine/Content/Storage/FlaxPackage.h
2021-01-02 14:28:49 +01:00

92 lines
1.8 KiB
C++

// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved.
#pragma once
#include "FlaxStorage.h"
#include "Engine/Core/Collections/Dictionary.h"
/// <summary>
/// Flax resources package container.
/// </summary>
class FLAXENGINE_API FlaxPackage : public FlaxStorage
{
protected:
Dictionary<Guid, Entry> _entries;
public:
/// <summary>
/// Initializes a new instance of the <see cref="FlaxPackage"/> class.
/// </summary>
/// <param name="path">The path.</param>
FlaxPackage(const StringView& path)
: FlaxStorage(path)
, _entries(256)
{
}
/// <summary>
/// Finalizes an instance of the <see cref="FlaxPackage"/> class.
/// </summary>
~FlaxPackage()
{
}
public:
// [FlaxStorage]
String ToString() const override
{
return String::Format(TEXT("Package \'{0}\'"), _path);
}
bool IsPackage() const override
{
return true;
}
bool AllowDataModifications() const override
{
return false;
}
bool HasAsset(const Guid& id) const override
{
return _entries.ContainsKey(id);
}
bool HasAsset(const AssetInfo& info) const override;
int32 GetEntriesCount() const override
{
return _entries.Count();
}
void GetEntry(int32 index, Entry& output) const override
{
ASSERT(index >= 0 && index < _entries.Count());
for (auto i = _entries.Begin(); i.IsNotEnd(); ++i)
{
if (index-- <= 0)
{
output = i->Value;
return;
}
}
}
void GetEntries(Array<Entry>& output) const override
{
_entries.GetValues(output);
}
void Dispose() override;
protected:
// [FlaxStorage]
bool GetEntry(const Guid& id, Entry& e) override;
void AddEntry(Entry& e) override;
};