// Copyright Epic Games, Inc. All Rights Reserved.
using System.Collections.Generic;
namespace EpicGames.BuildGraph
{
///
/// Defines a agggregate within a graph, which give the combined status of one or more job steps, and allow building several steps at once.
///
public class BgAggregateDef
{
///
/// Name of this badge
///
public string Name { get; }
///
/// Set of nodes that must be run for this label to be shown.
///
public HashSet RequiredNodes { get; } = new HashSet();
///
/// Constructor
///
/// Name of this aggregate
public BgAggregateDef(string name)
{
Name = name;
}
///
/// Get the name of this label
///
/// The name of this label
public override string ToString()
{
return Name;
}
}
///
/// Aggregate that was created from bytecode
///
[BgObject(typeof(BgAggregateExpressionDefSerializer))]
public class BgAggregateExpressionDef
{
///
public string Name { get; set; }
///
public List RequiredNodes { get; } = new List();
///
/// Labels to add this aggregate to
///
public BgLabelDef? Label { get; set; }
///
/// Constructor
///
public BgAggregateExpressionDef(string name)
{
Name = name;
}
///
/// Construct a BgAggregateDef
///
///
public BgAggregateDef ToAggregateDef()
{
BgAggregateDef aggregate = new BgAggregateDef(Name);
aggregate.RequiredNodes.UnionWith(RequiredNodes);
return aggregate;
}
}
class BgAggregateExpressionDefSerializer : BgObjectSerializer
{
///
public override BgAggregateExpressionDef Deserialize(BgObjectDef obj)
{
BgAggregateExpressionDef aggregate = new BgAggregateExpressionDef(obj.Get(x => x.Name, ""));
obj.CopyTo(aggregate);
return aggregate;
}
}
}