// -----------------------------------------------------------------------
//
// Copyright 2014 MIT Licence. See licence.md for more information.
//
// -----------------------------------------------------------------------
namespace Perspex.LogicalTree
{
using System;
using System.Collections.Generic;
using System.Linq;
public static class LogicalExtensions
{
public static IEnumerable GetLogicalAncestors(this ILogical logical)
{
Contract.Requires(logical != null);
logical = logical.LogicalParent;
while (logical != null)
{
yield return logical;
logical = logical.LogicalParent;
}
}
public static IEnumerable GetSelfAndLogicalAncestors(this ILogical logical)
{
yield return logical;
foreach (var ancestor in logical.GetLogicalAncestors())
{
yield return ancestor;
}
}
public static IEnumerable GetLogicalChildren(this ILogical logical)
{
return logical.LogicalChildren;
}
public static IEnumerable GetLogicalDescendents(this ILogical logical)
{
foreach (ILogical child in logical.LogicalChildren)
{
yield return child;
foreach (ILogical descendent in child.GetLogicalDescendents())
{
yield return descendent;
}
}
}
public static ILogical GetLogicalParent(this ILogical logical)
{
return logical.LogicalParent;
}
public static T GetLogicalParent(this ILogical logical) where T : class
{
return logical.LogicalParent as T;
}
public static IEnumerable GetLogicalSiblings(this ILogical logical)
{
ILogical parent = logical.LogicalParent;
if (parent != null)
{
foreach (ILogical sibling in parent.LogicalChildren)
{
yield return sibling;
}
}
}
}
}