コード例 #1
0
ファイル: TableUtils.cs プロジェクト: BeauPrime/RuleScript
        /// <summary>
        /// Outputs all unique triggers for the given table.
        /// </summary>
        static public int UniqueRuleTriggers(RSRuleTableData inTableData, ICollection <RSTriggerId> outCollection)
        {
            Assert.True(inTableData != null, "Cannot read from null table");
            Assert.True(outCollection != null, "Cannot output to null collection");

            if (inTableData == null || inTableData.Rules == null)
            {
                return(0);
            }

            int count = 0;

            for (int i = 0; i < inTableData.Rules.Length; ++i)
            {
                RSTriggerId trigger = inTableData.Rules[i].TriggerId;
                if (trigger == RSTriggerId.Null)
                {
                    continue;
                }
                if (outCollection.Contains(trigger))
                {
                    continue;
                }

                outCollection.Add(trigger);
                ++count;
            }

            return(count);
        }
コード例 #2
0
ファイル: TableUtils.cs プロジェクト: BeauPrime/RuleScript
        /// <summary>
        /// Updates the array of all unique triggers for the given table.
        /// </summary>
        static public void UpdateUniqueRuleTriggers(RSRuleTableData ioTable)
        {
            HashSet <RSTriggerId> uniqueTriggers = new HashSet <RSTriggerId>();
            int uniqueTriggerCount = TableUtils.UniqueRuleTriggers(ioTable, uniqueTriggers);

            ioTable.UniqueTriggers = new RSTriggerId[uniqueTriggerCount];
            uniqueTriggers.CopyTo(ioTable.UniqueTriggers);
        }
コード例 #3
0
ファイル: TableUtils.cs プロジェクト: BeauPrime/RuleScript
            public override void Visit(RSRuleTableData inRuleTableData, TableLineRef inSourceRef)
            {
                base.Visit(inRuleTableData, inSourceRef);

                if (Match(inRuleTableData?.Name))
                {
                    AddRef(inSourceRef, "Rule Table Name: " + inRuleTableData.Name);
                }
            }
コード例 #4
0
        public virtual void Visit(RSRuleTableData inRuleTableData, TableLineRef inSourceRef)
        {
            if (inRuleTableData == null)
            {
                return;
            }

            if (inRuleTableData.Rules != null)
            {
                for (int i = 0; i < inRuleTableData.Rules.Length; ++i)
                {
                    Visit(inRuleTableData.Rules[i], inSourceRef);
                }
            }
        }
コード例 #5
0
ファイル: TableUtils.cs プロジェクト: BeauPrime/RuleScript
        /// <summary>
        /// Attempts to clean up the given rule table.
        /// Returns if any modifications have been made.
        /// </summary>
        static public bool CleanUp(RSRuleTableData ioTableData)
        {
            if (ioTableData == null || ioTableData.Rules == null)
            {
                return(false);
            }

            bool             bChanged          = false;
            HashSet <string> discoveredRuleIds = new HashSet <string>();

            for (int i = 0; i < ioTableData.Rules.Length; ++i)
            {
                bChanged |= CleanUp(ioTableData.Rules[i], discoveredRuleIds);
            }

            return(bChanged);
        }
コード例 #6
0
        public virtual bool Visit(RSRuleTableData ioRuleTable)
        {
            if (ioRuleTable == null)
            {
                return(false);
            }

            bool bChanged = false;

            if (ioRuleTable.Rules != null)
            {
                for (int i = 0; i < ioRuleTable.Rules.Length; ++i)
                {
                    bChanged |= Visit(ioRuleTable.Rules[i]);
                }
            }

            return(bChanged);
        }
コード例 #7
0
ファイル: TableUtils.cs プロジェクト: BeauPrime/RuleScript
        /// <summary>
        /// Returns the index of the rule with the given id.
        /// </summary>
        static public int IndexOfRule(RSRuleTableData inTableData, string inRuleId)
        {
            if (inTableData == null || inTableData.Rules == null)
            {
                return(-1);
            }

            if (string.IsNullOrEmpty(inRuleId))
            {
                return(-1);
            }

            for (int i = 0; i < inTableData.Rules.Length; ++i)
            {
                if (inTableData.Rules[i].Id.Equals(inRuleId, System.StringComparison.Ordinal))
                {
                    return(i);
                }
            }

            return(-1);
        }
コード例 #8
0
ファイル: TableUtils.cs プロジェクト: BeauPrime/RuleScript
 /// <summary>
 /// Deletes all references to an entity id within the given table.
 /// </summary>
 static public bool DeleteEntityRef(RSRuleTableData ioTableData, RSEntityId inEntityId)
 {
     return(UpdateEntityRef(ioTableData, inEntityId, RSEntityId.Invalid));
 }
コード例 #9
0
ファイル: TableUtils.cs プロジェクト: BeauPrime/RuleScript
        /// <summary>
        /// Updates all references to an entity id within the given table.
        /// </summary>
        static public bool UpdateEntityRef(RSRuleTableData ioTableData, RSEntityId inEntityId, RSEntityId inNewId)
        {
            EntityRefUpdateVisitor updater = new EntityRefUpdateVisitor(inEntityId, inNewId);

            return(updater.Visit(ioTableData));
        }