public static GaTreeMultivectorNode SetLeftChildToInternalNode(this IGaTreeMultivectorNode mv) { if (ReferenceEquals(mv, null)) { return(null); } var rootNode = mv as GaTreeMultivector; if (!ReferenceEquals(rootNode, null)) { var childNode = new GaTreeMultivectorNode(); rootNode.LeftChild = childNode; return(childNode); } var internalNode = mv as GaTreeMultivectorNode; if (!ReferenceEquals(internalNode, null)) { var childNode = new GaTreeMultivectorNode(); internalNode.LeftChild = childNode; return(childNode); } return(null); }
public static GaTreeMultivectorLeaf SetRightChildToLeafNode(this IGaTreeMultivectorNode mv, MathematicaScalar value) { if (ReferenceEquals(mv, null)) { return(null); } var rootNode = mv as GaTreeMultivector; if (!ReferenceEquals(rootNode, null)) { var childNode = new GaTreeMultivectorLeaf(value); rootNode.RightChild = childNode; return(childNode); } var internalNode = mv as GaTreeMultivectorNode; if (!ReferenceEquals(internalNode, null)) { var childNode = new GaTreeMultivectorLeaf(value); internalNode.RightChild = childNode; return(childNode); } return(null); }
public Expr this[int id] { get { IGaTreeMultivectorNode node = this; for (var i = 0; i < VSpaceDimension - 1; i++) { node = node.GetChild(id); if (ReferenceEquals(node, null)) { return(Expr.INT_ZERO); } id >>= 1; } var leafNode = node.GetChild(id) as GaTreeMultivectorLeaf; return(ReferenceEquals(leafNode, null) ? Expr.INT_ZERO : leafNode.Value.Expression); } set { IGaTreeMultivectorNode node = this; for (var i = 0; i < VSpaceDimension - 1; i++) { node = node.GetOrSetChildToInternalNode(id); Debug.Assert(!ReferenceEquals(node, null)); id >>= 1; } var leafNode = node.GetOrSetChildToLeafNode(id, value.ToMathematicaScalar()); Debug.Assert(!ReferenceEquals(leafNode, null)); } }
public static IGaTreeMultivectorNode GetRightChild(this IGaTreeMultivectorNode mv) { if (ReferenceEquals(mv, null)) { return(null); } var rootNode = mv as GaTreeMultivector; if (!ReferenceEquals(rootNode, null)) { return(rootNode.RightChild); } var internalNode = mv as GaTreeMultivectorNode; if (!ReferenceEquals(internalNode, null)) { return(internalNode.RightChild); } return(null); }
public static IGaTreeMultivectorNode GetChild(this IGaTreeMultivectorNode mv, int index) { return((index & 1) == 0 ? mv.GetRightChild() : mv.GetLeftChild()); }
public static GaTreeMultivectorLeaf GetOrSetChildToLeafNode(this IGaTreeMultivectorNode mv, int index, MathematicaScalar value) { return((index & 1) == 0 ? mv.GetOrSetRightChildToLeafNode(value) : mv.GetOrSetLeftChildToLeafNode(value)); }
public static GaTreeMultivectorNode GetOrSetChildToInternalNode(this IGaTreeMultivectorNode mv, int index) { return((index & 1) == 0 ? mv.GetOrSetRightChildToInternalNode() : mv.GetOrSetLeftChildToInternalNode()); }
public static GaTreeMultivectorLeaf AsLeafNode(this IGaTreeMultivectorNode mv) { return(mv as GaTreeMultivectorLeaf); }
public static GaTreeMultivectorNode AsInternalNode(this IGaTreeMultivectorNode mv) { return(mv as GaTreeMultivectorNode); }
public static GaTreeMultivector AsRootNode(this IGaTreeMultivectorNode mv) { return(mv as GaTreeMultivector); }