Interface ITreeAlgorithmT
Contents
[
Hide
]ITreeAlgorithm<T> interface
Represents an algorithm that can be applied to a tree of objects T.
public interface ITreeAlgorithm<in T>
Parameter | Description |
---|---|
T | The type of object to apply method interface to. |
Methods
Name | Description |
---|---|
Alg(T, int) | Processes a node of a tree. |
PostAlg(T, int) | Called after processing of a node of a tree. |
PreAlg(T, int) | Called before processing of a node of a tree. |
Examples
Shows how to use <see cref=“Aspose.Tasks.Util.ITreeAlgorithm`1” /> tree based algorithm.
public void WorkWithITreeAlgorithm()
{
var project = new Project(DataDir + "Project1.mpp");
var root = project.RootTask.Children.Add("Project Management");
var summary = root.Children.Add("Manage iteration");
var task = summary.Children.Add("Acquire staff");
task.Set(Tsk.Start, new DateTime(1999, 5, 3, 9, 0, 0));
task.Set(Tsk.Duration, project.GetDuration(8 * 14, TimeUnitType.Hour));
task.Set(Tsk.Finish, project.Get(Prj.Calendar).GetFinishDateByStartAndWork(task.Get(Tsk.Start), task.Get(Tsk.Duration)));
var resource = project.Resources.Add("Project Manager");
resource.Set(Rsc.Type, ResourceType.Work);
project.ResourceAssignments.Add(task, resource);
// use tree algorithm to gather common work and update work
var acc = new WorkAccumulator();
TaskUtils.Apply(summary, acc, 0);
var summaryWork = acc.Work.ToDouble();
summary.Set(Tsk.Work, project.GetWork(summaryWork));
summary.Set(Tsk.RemainingWork, project.GetWork(summaryWork));
// ...
}
private class WorkAccumulator : ITreeAlgorithm<Task>
{
/// <summary>Initializes a new instance of the <see cref="WorkAccumulator" /> class.</summary>
public WorkAccumulator()
{
this.Work = new Duration();
}
public Duration Work { get; private set; }
public void PreAlg(Task el, int level)
{
// there is nothing to do in pre algorithm steps
}
public void Alg(Task el, int level)
{
if (!el.Get(Tsk.IsSummary))
{
this.Work.Add(el.Get(Tsk.Work));
}
}
public void PostAlg(Task el, int level)
{
// there is nothing to do in post algorithm steps
}
}
See Also
- namespace Aspose.Tasks.Util
- assembly Aspose.Tasks