Ejemplo n.º 1
0
            protected static TBaseStatus[] Convert <TStatus>(TStatus[] statuses) where TStatus : struct
            {
                if (statuses == null)
                {
                    return(null);
                }
                var result = new TBaseStatus[statuses.Length];

                for (int i = 0; i < statuses.Length; ++i)
                {
                    result[i] = StatusSystem <TObject> .Convert(statuses[i]);
                }
                return(result);
            }
Ejemplo n.º 2
0
 internal StatusTracker(TObject obj, StatusSystem <TObject> rules)
 {
     this.obj   = obj;
     this.rules = rules;
     if (rules != null)
     {
         rules.TrackerCreated = true;
     }
     currentActualValues = new DefaultValueDictionary <TBaseStatus, int>();
     currentRaw          = new Dictionary <InstanceType, DefaultValueDictionary <TBaseStatus, int> >();
     statusInstances     = new Dictionary <InstanceType, MultiValueDictionary <TBaseStatus, StatusInstance <TObject> > >();
     internalFeeds       = new Dictionary <InstanceType, Dictionary <TBaseStatus, Dictionary <TBaseStatus, int> > >();
     changeStack         = new List <DefaultValueDictionary <StatusChange, OnChangedHandler <TObject> > >();
     foreach (InstanceType type in Enum.GetValues(typeof(InstanceType)))
     {
         currentRaw[type]      = new DefaultValueDictionary <TBaseStatus, int>();
         statusInstances[type] = new MultiValueDictionary <TBaseStatus, StatusInstance <TObject> >();
         internalFeeds[type]   = new Dictionary <TBaseStatus, Dictionary <TBaseStatus, int> >();
     }
 }
Ejemplo n.º 3
0
        /// <summary>
        /// Open "<paramref name="filename"/>" and parse its text as rules. Apply the parsed rules to "<paramref name="rules"/>".
        /// </summary>
        public static StatusSystem <TObject> ParseRulesText <TObject>(this StatusSystem <TObject> rules, string filename)
        {
            if (!File.Exists(filename))
            {
                throw new FileNotFoundException($"{filename} cannot be found here.");
            }
            List <string> text = new List <string>();

            using (StreamReader stream = new StreamReader(filename)) {
                while (true)
                {
                    string line = stream.ReadLine();
                    if (line == null)
                    {
                        break;
                    }
                    text.Add(line);
                }
            }
            return(rules.ParseRulesText(text));
        }
Ejemplo n.º 4
0
 internal StatusParserInternal(StatusSystem <TObject> rules, List <string> tokens)
 {
     this.rules  = rules;
     this.tokens = tokens;
     extraEnums  = rules.extraEnumTypes;
     if (rules.DefaultValueAggregator == rules.Total)
     {
         rulesDefaultAggregator = "total";
     }
     else if (rules.DefaultValueAggregator == rules.Bool)
     {
         rulesDefaultAggregator = "bool";
     }
     else if (rules.DefaultValueAggregator == rules.MaximumOrZero)
     {
         rulesDefaultAggregator = "max";
     }
     else
     {
         rulesDefaultAggregator = null;
     }
     parserDefaultAggregator    = rulesDefaultAggregator;
     parserDefaultInstanceLimit = "multiple";
 }
Ejemplo n.º 5
0
 internal RuleChecker(StatusSystem <TObject> rules)
 {
     visitedRps = new EasyHashSet <List <TStatus> >(new IEnumValueEquality <TStatus>());         // Compare lists with value equality!
     this.rules = rules;
     CheckRules();
 }
Ejemplo n.º 6
0
 /// <summary>
 /// Parse "<paramref name="text"/>" as rules. Apply the parsed rules to "<paramref name="rules"/>".
 /// </summary>
 public static StatusSystem <TObject> ParseRulesText <TObject>(this StatusSystem <TObject> rules, IEnumerable <string> text)
 {
     new StatusParserInternal <TObject>(rules, Tokenize(text)).Parse();
     return(rules);
 }
Ejemplo n.º 7
0
 internal StatusRules(StatusSystem <TObject> rules, TBaseStatus status) : base(rules, status, status)
 {
     this.rules  = rules;
     this.status = status;
 }
Ejemplo n.º 8
0
 protected static TBaseStatus Convert <TStatus>(TStatus status) where TStatus : struct
 {
     return(StatusSystem <TObject> .Convert(status));
 }