// ***********************************************************************
// Assembly : Construction
// Author : zjx
// Created : 09-15-2020
//
// Last Modified By : zjx
// Last Modified On : 09-15-2020
// ***********************************************************************
//
// Copyright (c) jindongfang. All rights reserved.
//
//
// ***********************************************************************
using System;
using System.Collections.Generic;
using System.Linq;
namespace WellWorkDataUI
{
///
/// Class HierarchyHelp.
///
public static class HierarchyHelp
{
///
/// Loops the descendants.
///
/// T
/// The data.
/// The element.
/// The pred.
/// The action.
public static void LoopDescendants(IEnumerable data, T element, Func pred, Action action)
{
foreach (T item in data)
{
if (pred(element, item))
{
action(element, item);
LoopDescendants(data, item, pred, action);
}
}
}
///
/// Enums the descendants.
///
/// T
/// The data.
/// The element.
/// The pred.
/// IEnumerable<T>.
public static IEnumerable EnumDescendants(IEnumerable data, T element, Func pred)
{
foreach (T item in data)
{
if (pred(element, item))
{
yield return item;
foreach (T item2 in EnumDescendants(data, item, pred))
{
yield return item2;
}
}
}
}
///
/// Enums the descendants.
///
/// T
/// The data.
/// The element.
/// The pred.
/// IEnumerable<T>.
public static IEnumerable EnumDescendantsWithElements(IEnumerable data, T element, Func pred)
{
yield return element;
foreach (T item in data)
{
if (pred(element, item))
{
yield return item;
foreach (T item2 in EnumDescendants(data, item, pred))
{
yield return item2;
}
}
}
}
///
/// Enums the descendants.
///
/// T
/// The data.
/// The elements.
/// The pred.
/// IEnumerable<T>.
public static IEnumerable EnumDescendants(IEnumerable data, IEnumerable elements, Func pred)
{
foreach (T element in elements)
{
foreach (T item in EnumDescendants(data, element, pred))
{
yield return item;
}
}
}
///
/// Enums the descendants.
///
/// T
/// The data.
/// The elements.
/// The pred.
/// IEnumerable<T>.
public static IEnumerable EnumDescendantsWithElements(IEnumerable data, IEnumerable elements, Func pred)
{
foreach (T element in elements)
{
yield return element;
foreach (T item in EnumDescendants(data, element, pred))
{
yield return item;
}
}
}
///
/// Enums the ancestors.
///
/// T
/// The data.
/// The elements.
/// The pred.
/// IEnumerable<T>.
public static IEnumerable EnumAncestorsWithElements(IEnumerable data, IEnumerable elements, Func pred)
{
HashSet set = new HashSet();
foreach (T item in elements)
{
T tmp = item;
do
{
set.Add(tmp);
tmp = data.FirstOrDefault(o => pred(o, tmp));
}
while (tmp != null);
}
return set;
}
}
}