WuhuIslandTesting/Library/PackageCache/com.unity.scriptablebuildpipeline@1.21.5/Editor/Utilities/CacheEntry.cs
2025-01-07 02:06:59 +01:00

171 lines
5.4 KiB
C#

using System;
using UnityEngine;
namespace UnityEditor.Build.Pipeline.Utilities
{
interface ICachedData {}
/// <summary>
/// Stores asset information for the cache.
/// </summary>
[Serializable]
public class CachedInfo : ICachedData
{
/// <summary>
/// Stores the asset.
/// </summary>
public CacheEntry Asset { get; set; }
/// <summary>
/// Stores the asset dependencies.
/// </summary>
public CacheEntry[] Dependencies { get; set; }
/// <summary>
/// Stores extra data related to the asset.
/// </summary>
public object[] Data { get; set; }
}
/// <summary>
/// Creates a container to store data in build cache.
/// </summary>
[Serializable]
public struct CacheEntry : IEquatable<CacheEntry>
{
/// <summary>
/// Options for the cache entry type.
/// </summary>
public enum EntryType
{
/// <summary>
/// Indicates that the entry is an asset.
/// </summary>
Asset,
/// <summary>
/// Indicates that the entry is a file.
/// </summary>
File,
/// <summary>
/// Indicates that the entry holds general data.
/// </summary>
Data,
/// <summary>
/// Indicates that the entry is a type.
/// </summary>
ScriptType
}
internal enum InclusionType
{
None, Explicit, Implicit
}
/// <summary>
/// Stores the entry hash.
/// </summary>
public Hash128 Hash { get; internal set; }
/// <summary>
/// Stores the entry guid.
/// </summary>
public GUID Guid { get; internal set; }
/// <summary>
/// Stores the entry version.
/// </summary>
public int Version { get; internal set; }
/// <summary>
/// Stores the entry type.
/// </summary>
public EntryType Type { get; internal set; }
internal InclusionType Inclusion { get; set; }
/// <summary>
/// Stores the entry file name.
/// </summary>
public string File { get; internal set; }
/// <summary>
/// Stores the entry scripting type.
/// </summary>
public string ScriptType { get; internal set; }
/// <summary>
/// Determines if the entry is valid.
/// </summary>
/// <returns>Returns true if the entry is valid. Returns false otherwise.</returns>
public bool IsValid()
{
return Hash.isValid && !Guid.Empty();
}
/// <summary>
/// Determines if the current entry instance is equal to the specified entry.
/// </summary>
/// <param name="obj">The entry to compare.</param>
/// <returns>Returns true if the entries are equivalent. Returns false otherwise.</returns>
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj))
return false;
return obj is CacheEntry && Equals((CacheEntry)obj);
}
/// <inheritdoc/>
public static bool operator==(CacheEntry x, CacheEntry y)
{
return x.Equals(y);
}
/// <inheritdoc/>
public static bool operator!=(CacheEntry x, CacheEntry y)
{
return !(x == y);
}
/// <summary>
/// Creates the hash code for the cache entry.
/// </summary>
/// <returns>Returns the hash code for the cache entry.</returns>
public override int GetHashCode()
{
unchecked
{
var hashCode = Hash.GetHashCode();
hashCode = (hashCode * 397) ^ Guid.GetHashCode();
hashCode = (hashCode * 397) ^ Version;
hashCode = (hashCode * 397) ^ (int)Type;
hashCode = (hashCode * 397) ^ (int)Inclusion;
hashCode = (hashCode * 397) ^ (File != null ? File.GetHashCode() : 0);
hashCode = (hashCode * 397) ^ (ScriptType != null ? ScriptType.GetHashCode() : 0);
return hashCode;
}
}
/// <summary>
/// Converts the information about the cache entry to a formatted string.
/// </summary>
/// <returns>Returns information about the cache entry.</returns>
public override string ToString()
{
if (Type == EntryType.File)
return string.Format("({0}, {1})", File, Hash);
if (Type == EntryType.ScriptType)
return string.Format("({0}, {1})", ScriptType, Hash);
return string.Format("({0}, {1})", Guid, Hash);
}
/// <summary>
/// Determines if the current entry instance is equal to the specified entry.
/// </summary>
/// <param name="other">The entry to compare.</param>
/// <returns>Returns true if the entries are equivalent. Returns false otherwise.</returns>
public bool Equals(CacheEntry other)
{
return Hash.Equals(other.Hash) && Guid.Equals(other.Guid) && Version == other.Version && Type == other.Type && Inclusion == other.Inclusion && string.Equals(File, other.File) && string.Equals(ScriptType, other.ScriptType);
}
}
}