Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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));
            }
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
 public static IGaTreeMultivectorNode GetChild(this IGaTreeMultivectorNode mv, int index)
 {
     return((index & 1) == 0
         ? mv.GetRightChild()
         : mv.GetLeftChild());
 }
Beispiel #6
0
 public static GaTreeMultivectorLeaf GetOrSetChildToLeafNode(this IGaTreeMultivectorNode mv, int index, MathematicaScalar value)
 {
     return((index & 1) == 0
         ? mv.GetOrSetRightChildToLeafNode(value)
         : mv.GetOrSetLeftChildToLeafNode(value));
 }
Beispiel #7
0
 public static GaTreeMultivectorNode GetOrSetChildToInternalNode(this IGaTreeMultivectorNode mv, int index)
 {
     return((index & 1) == 0
         ? mv.GetOrSetRightChildToInternalNode()
         : mv.GetOrSetLeftChildToInternalNode());
 }
Beispiel #8
0
 public static GaTreeMultivectorLeaf AsLeafNode(this IGaTreeMultivectorNode mv)
 {
     return(mv as GaTreeMultivectorLeaf);
 }
Beispiel #9
0
 public static GaTreeMultivectorNode AsInternalNode(this IGaTreeMultivectorNode mv)
 {
     return(mv as GaTreeMultivectorNode);
 }
Beispiel #10
0
 public static GaTreeMultivector AsRootNode(this IGaTreeMultivectorNode mv)
 {
     return(mv as GaTreeMultivector);
 }