예제 #1
0
        private void LandingSiteCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            LandingSite editedLandingSite = new LandingSite();

            switch (e.Action)
            {
            case NotifyCollectionChangedAction.Add:
            {
                int newIndex = e.NewStartingIndex;
                editedLandingSite = LandingSiteCollection[newIndex];
                LandingSites.Add(editedLandingSite);
            }
            break;

            case NotifyCollectionChangedAction.Remove:
            {
                List <LandingSite> tempListOfRemovedItems = e.OldItems.OfType <LandingSite>().ToList();
                editedLandingSite = tempListOfRemovedItems[0];
                LandingSites.Delete(editedLandingSite.LandingSiteID);
            }
            break;

            case NotifyCollectionChangedAction.Replace:
            {
                List <LandingSite> tempListOfLandingSites = e.NewItems.OfType <LandingSite>().ToList();
                editedLandingSite = tempListOfLandingSites[0];
                LandingSites.Update(editedLandingSite);              // As the IDs are unique, only one row will be effected hence first index only
            }
            break;
            }
            EntityChangedEventArgs args = new EntityChangedEventArgs(editedLandingSite.GetType().Name, editedLandingSite);

            EntityChanged?.Invoke(this, args);
        }
예제 #2
0
 public void AddNonTerminalToLandingSites(string nonTerminal)
 {
     if (!LandingSites.Contains(nonTerminal))
     {
         LandingSites.Add(nonTerminal);
     }
 }
예제 #3
0
 public void RemoveNonTerminalFromLandingSites(string nonTerminal)
 {
     if (!LandingSites.Contains(nonTerminal))
     {
         return;
     }
     LandingSites.Remove(nonTerminal);
 }
        public int NextRecordNumber()
        {
            int rv;

            if (LandingSiteCollection.Count == 0)
            {
                rv = 1;
            }
            else
            {
                rv = LandingSites.MaxRecordNumber() + 1;;
            }
            return(rv);
        }
예제 #5
0
        public void GenerateInitialRulesFromDerivedRules()
        {
            if (!LandingSites.Any() || !Moveables.Any())
            {
                return;
            }

            var initialRules = ruleNumberDictionary.Values.ToList();
            var derivedRules = initialRules.Where(x => !x.IsInitialRule()).ToList();

            var toRemove = derivedRules.ToList();

            foreach (var item in toRemove)
            {
                DeleteRule(item);
            }
        }
        private void LandingSiteCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            _editSuccess = false;
            switch (e.Action)
            {
            case NotifyCollectionChangedAction.Add:
            {
                int         newIndex       = e.NewStartingIndex;
                LandingSite newLandingSite = LandingSiteCollection[newIndex];

                if (LandingSites.Add(newLandingSite))
                {
                    CurrentEntity = newLandingSite;
                    _editSuccess  = true;
                }
            }
            break;

            case NotifyCollectionChangedAction.Remove:
            {
                List <LandingSite> tempListOfRemovedItems = e.OldItems.OfType <LandingSite>().ToList();
                if (LandingSites.Delete(tempListOfRemovedItems[0].ID))
                {
                    _editSuccess  = true;
                    CurrentEntity = null;
                }
            }
            break;

            case NotifyCollectionChangedAction.Replace:
            {
                List <LandingSite> tempList = e.NewItems.OfType <LandingSite>().ToList();
                if (LandingSites.Update(tempList[0]))
                {
                    _editSuccess  = true;
                    CurrentEntity = tempList[0];
                }
            }
            break;
            }
        }
예제 #7
0
        public void GenerateDerivedRulesFromSchema()
        {
            if (!LandingSites.Any() || !Moveables.Any())
            {
                return;
            }

            var toAdd = new List <Rule>();

            foreach (var moveable in Moveables)
            {
                var pop1 = new Rule(1, moveable, new[] { Epsilon }, 0, 0);
                pop1.Name.Stack = new NonTerminalStack(moveable);
                toAdd.Add(pop1);

                foreach (var landingSiteNonTerminal in LandingSites)
                {
                    var push = new Rule(1, landingSiteNonTerminal, new[] { moveable, landingSiteNonTerminal }, 1, 1);
                    push.Name.Stack          = new NonTerminalStack(".");
                    push.Production[1].Stack = new NonTerminalStack(".");
                    push.Production[1].Stack = push.Production[1].Stack.Push(moveable);
                    toAdd.Add(push);
                }

                var pop2 = new Rule(1, "IP", new[] { moveable, "VP" }, 1, 1);
                pop2.Name.Stack          = new NonTerminalStack(".");
                pop2.Name.Stack          = pop2.Name.Stack.Push(moveable);
                pop2.Production[0].Stack = new NonTerminalStack(moveable);
                pop2.Production[1].Stack = new NonTerminalStack(".");
                toAdd.Add(pop2);
            }

            foreach (var item in toAdd)
            {
                AddRule(item);
            }
        }