コード例 #1
0
ファイル: TermExt.cs プロジェクト: agamat/Ribbon-1
        public static bool VerifyAnyOverlap(this Term source, TimeBox timeBox)
        {
            var lowestTerm   = source.GetLowestTerm() as Term;
            var convertTerms = timeBox.GetCoveredTermsWithAbsent(lowestTerm).ToArray();

            if (lowestTerm == source)
            {
                return(timeBox.TermSet.Where(o => o != source && o.Level == source.Level).Any(o =>
                {
                    var overlap = source.AnyOverlap(o);
                    return overlap;
                }));
            }

            var closestBottomTerm = timeBox.GetClosestBottom(source);

            if (closestBottomTerm != source.Bottom)
            {
                return(true);
            }

            return(convertTerms.Where(o => o != source || o.Id != source.Id).OrderBy(o => o.Start).Any(o => o.Id != source.Id && o.Level > source.Level ? source.OverlapNotEnclosed(o) : o.OverlapNotEnclosed(source)));
        }
コード例 #2
0
ファイル: TimeBox.Validation.cs プロジェクト: Mrding/Ribbon
        private static bool DependencyTermCreation(TimeBox sender, Term other, IOrderedEnumerable<Term> orderedTerms)
        {
            var newTermType = other.GetType();
            var closestBottom = sender.GetClosestBottom(other);
            var overlapping = false;
            var canLandingOn = false;

            foreach (var t in orderedTerms)
            {
                var insiede = other.IsInTheRange(t.Start, t.End);
              
                overlapping = t.AnyOverlap(other) && !insiede; //oh! No~

                if (overlapping)
                {
                    other.Exception = new TermException(t, "AnyOverlap");
                    break;
                }

                canLandingOn = t.CanBeOverlap(newTermType);
                
                if (!canLandingOn && insiede)
                {
                    other.Exception = new TermException(t, "RelationIncorrect");
                     break;
                }// find right position but no right relation
                   
                if (canLandingOn && insiede)
                {
                    other.Bottom = closestBottom;
                    break;
                }
            }
          
            return overlapping == false && canLandingOn;
        }
コード例 #3
0
ファイル: TimeBox.Validation.cs プロジェクト: agamat/Ribbon-1
        private static bool DependencyTermCreation(TimeBox sender, Term other, IOrderedEnumerable <Term> orderedTerms)
        {
            var newTermType   = other.GetType();
            var closestBottom = sender.GetClosestBottom(other);
            var overlapping   = false;
            var canLandingOn  = false;

            foreach (var t in orderedTerms)
            {
                var insiede = other.IsInTheRange(t.Start, t.End);

                overlapping = t.AnyOverlap(other) && !insiede; //oh! No~

                if (overlapping)
                {
                    other.Exception = new TermException(t, "AnyOverlap");
                    break;
                }

                canLandingOn = t.CanBeOverlap(newTermType);

                if (!canLandingOn && insiede)
                {
                    other.Exception = new TermException(t, "RelationIncorrect");
                    break;
                }// find right position but no right relation

                if (canLandingOn && insiede)
                {
                    other.Bottom = closestBottom;
                    break;
                }
            }

            return(overlapping == false && canLandingOn);
        }