Click here to Skip to main content
15,896,308 members
Articles / Programming Languages / C#

Universal Framework for Science and Engineering - Part 4: Space elevator

Rate me:
Please Sign up or sign in to vote.
4.56/5 (6 votes)
14 Aug 20066 min read 36.6K   2.2K   37  
An article on framework applications to the space elevator.
using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;

using CategoryTheory;
using DiagramUI;
using MathGraph;


namespace DataPerformer
{
    /// <summary>
    /// Consumer of time
    /// </summary>
    public interface ITimeMeasureConsumer
    {
        /// <summary>
        /// Time measure
        /// </summary>
        IMeasure Time
        {
            set;
        }
    }

    /// <summary>
    /// Provider of time
    /// </summary>
    public interface ITimeMeasureProvider
    {
        /// <summary>
        /// Time measure
        /// </summary>
        IMeasure Time
        {
            get;
        }
    }

    /// <summary>
    /// Performer of all operations of time measure
    /// </summary>
    public class TimeMeasurePerformer
    {
        static private readonly string illegal = "Illegal sequence of time providers";

        static IMeasure timeMeasure = new MeasureDerivation(a, new MeasureParameter(GetTime), new MeasureParameter(Unity), "Time");

        static private readonly Double a = 0;

        static private void check(DataLink l)
        {
            object o = l.Object;
            if (o != null)
            {
                if (o is INamedComponent)
                {
                    INamedComponent nc = o as INamedComponent;
                    IDesktop d = nc.Desktop;
                    Check(d);
                }
            }
        }

        static public void SetLinkChecker()
        {
            CheckDataLink ch = new CheckDataLink(check);
            DataLink.Checker = ch;
        }

        static public void Check(IDesktop desktop)
        {
            IDesktop d = desktop.Root;
            CheckObject ch = new CheckObject(checkLink);
            List<IObjectLabel> objects;
            List<IArrowLabel> arrows;
            PureDesktopPeer.GetFullList(d, out objects, out arrows);
            Digraph graph = PureDesktop.CreateDigraph(objects, arrows, null, ch);
            ArrayList loops = graph.Loops;
            foreach (DigraphLoop loop in loops)
            {
                check(loop);
            }
        }

        static public void SetProvider(IDataConsumer consumer)
        {
            SetProvider(consumer, null);
        }

        static public void SetProvider(IDataConsumer consumer, ITimeMeasureProvider provider)
        {
            ITimeMeasureProvider p = provider;
            if (consumer is ITimeMeasureConsumer)
            {
                ITimeMeasureConsumer cons = consumer as ITimeMeasureConsumer;
                if (provider == null)
                {
                    cons.Time = timeMeasure;
                }
                else
                {
                    cons.Time = provider.Time;
                }
            }
            if (consumer is ITimeMeasureProvider)
            {
                p = consumer as ITimeMeasureProvider;
            }
            for (int i = 0; i < consumer.Count; i++)
            {
                IMeasurements m = consumer[i];
                if (m is IDataConsumer)
                {
                    IDataConsumer cons = m as IDataConsumer;
                    SetProvider(cons, p);
                    continue;
                }
                if (m is ITimeMeasureConsumer)
                {
                    ITimeMeasureConsumer cons = m as ITimeMeasureConsumer;
                    if (p == null)
                    {
                        cons.Time = timeMeasure;
                    }
                    else
                    {
                        cons.Time = p.Time;
                    }
                }
            }
        }


        static private void check(DigraphLoop loop)
        {
            ITimeMeasureProvider[] p = new ITimeMeasureProvider[] { getProvider(loop[0]), getProvider(loop[1]) };
            if (p[0] == null | p[1] == null)
            {
                return;
            }
            if (p[0] != p[1])
            {
                throw new Exception(illegal);
            }
        }

        static private ITimeMeasureProvider getProvider(DigraphPath path)
        {
            ITimeMeasureProvider p = null;
            for (int i = 0; i < path.Count - 1; i++)
            {
                ICategoryObject ob = path[i].CategoryObject;
                if (ob is ITimeMeasureProvider)
                {
                    p = ob as ITimeMeasureProvider;
                }
            }
            return p;
        }

        static private bool checkLink(object obj)
        {
            return obj is DataLink;
        }

        /// <summary>
        /// The unity
        /// </summary>
        /// <returns>Unity</returns>
        static private object Unity()
        {
            return (double)1;
        }



        /// <summary>
        /// Measurement of time
        /// </summary>
        static public IMeasure TimeMeasure
        {
            get
            {
                return timeMeasure;
            }
        }

        /// <summary>
        /// Gets time
        /// </summary>
        /// <returns>The time</returns>
        static private object GetTime()
        {
            return DataPerformerStrategy.Object.Time;
        }

  

    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Architect
Russian Federation Russian Federation
Ph. D. Petr Ivankov worked as scientific researcher at Russian Mission Control Centre since 1978 up to 2000. Now he is engaged by Aviation training simulators http://dinamika-avia.com/ . His additional interests are:

1) Noncommutative geometry

http://front.math.ucdavis.edu/author/P.Ivankov

2) Literary work (Russian only)

http://zhurnal.lib.ru/editors/3/3d_m/

3) Scientific articles
http://arxiv.org/find/all/1/au:+Ivankov_Petr/0/1/0/all/0/1

Comments and Discussions