コード例 #1
0
ファイル: TypeLink.cs プロジェクト: xeno-by/relinq
        protected TypeLink(FuzzyMetadata first, FuzzyMetadata second)
        {
            First = first;
            AssociateMetadataAndLink(first, this);

            Second = second;
            AssociateMetadataAndLink(second, this);

            Engine.RegisterLink(this);
        }
コード例 #2
0
ファイル: TypeLink.cs プロジェクト: xeno-by/relinq
 public void Sync(FuzzyMetadata sender)
 {
     if (sender != First && sender != Second)
     {
         throw new ArgumentException("I don't care about alien type points");
     }
     else
     {
         Sync(sender, sender == First ? Second : First);
     }
 }
コード例 #3
0
ファイル: TypeLink.cs プロジェクト: xeno-by/relinq
        private void AssociateMetadataAndLink(FuzzyMetadata metadata, TypeLink link)
        {
            link.RegDebuggableParent(metadata);

            var links = new List<TypeLink>(metadata.Links);
            links.Add(link);
            metadata.Links = links.AsReadOnly();

            metadata.SomeMoreStuffInferred += (o, e) => Engine.ScheduleSync(this, (FuzzyMetadata)o);
            metadata.ContradictionReported += (o, e) => ReportContradiction(String.Format(
                "'{0}' reports: '{1}'", o, e.WhatHappened));
        }
コード例 #4
0
        protected override void Sync(FuzzyMetadata sender, FuzzyMetadata recipient)
        {
            if (sender == _first)
            {
                base.Sync(sender, recipient);
            }
            else
            {
                // if the alternative isn't the only one for this binding, 
                // then it has no right to propagate changes to binding typepoints
                //
                // kek... at the very start of TIEN v2 I've classified links to simplex and duplex
                // then I just made links to be innately duplex since there wasn't need in simplex ones
                // however, current case proves the contrary

                if (Polarity != TypeLinkPolarity.Right)
                {
                    base.Sync(sender, recipient);
                }
            }
        }
コード例 #5
0
ファイル: TypeLink.cs プロジェクト: xeno-by/relinq
 protected abstract void Sync(FuzzyMetadata sender, FuzzyMetadata recipient);
コード例 #6
0
ファイル: TypeInferenceEngine.cs プロジェクト: xeno-by/relinq
        public void Dispose(FuzzyMetadata fuzzy)
        {
            // bug: rewrite this ffs!
#if DEBUG
            foreach (var fuzzyChild in fuzzy.DebuggableChildren.OfType<FuzzyMetadata>())
            {
                Dispose(fuzzyChild);
            }
#else
            cba to rewrite this now, so you'll have to do it when you try to compile
            this craptastic stuff in release mode. I'm sorry tbh, but I have no time
#endif

            foreach (var link in _links.ToArray())
            {
                if (link.First == fuzzy || link.Second == fuzzy)
                {
                    UnregisterLink(link);
                }
            }

            fuzzy.DisposeDebuggableObject();
        }
コード例 #7
0
ファイル: TypeInferenceEngine.cs プロジェクト: xeno-by/relinq
 public Sync(TypeLink link, FuzzyMetadata sender)
 {
     Link = link;
     Sender = sender;
 }
コード例 #8
0
ファイル: TypeInferenceEngine.cs プロジェクト: xeno-by/relinq
 public void ScheduleSync(TypeLink link, FuzzyMetadata sender)
 {
     if (_syncsAllowed)
     {
         _queue.Enqueue(new Sync(link, sender));
     }
 }