示例#1
0
 /// <summary>
 /// 指定された変換を用いて引数に名前をつけます
 /// </summary>
 /// <param name="map">変数の値と,その変数に付ける名前のディクショナリ</param>
 /// <param name="ignoreState">名前付けをしない条件</param>
 public void ReplaceByName(IDictionary <ScriptVariable, string> map, VariableNamedState ignoreState)
 {
     foreach (var refCall in _histories)
     {
         refCall.ReplaceByName(map, ignoreState);
     }
 }
示例#2
0
 /// <summary>
 /// 指定された変換を用いて引数に名前をつけます
 /// </summary>
 /// <param name="map">変数の値と,その変数に付ける名前のディクショナリ</param>
 /// <param name="ignoreState">名前付けをしない条件</param>
 public void ReplaceByName(IDictionary <ScriptVariable, string> map, VariableNamedState ignoreState)
 {
     foreach (var param in this.Params)
     {
         param.ReplaceByName(map, ignoreState);
     }
 }
示例#3
0
 /// <summary>
 /// この変数の名前付けが指定された状態を満たすかを返します
 /// </summary>
 /// <param name="state"></param>
 /// <returns></returns>
 public bool SatisfiesNamedState(VariableNamedState state)
 {
     if (state == VariableNamedState.AllElementsNamed && this.IsNamed)
     {
         return(true);
     }
     if (state == VariableNamedState.AnyElementNamed && this.IsNamed)
     {
         return(true);
     }
     return(false);
 }
示例#4
0
        /// <summary>
        /// 変数の値と,その値が利用されている回数のペアのディクショナリを返します
        /// </summary>
        /// <param name="targetTypes">回数を数える変数の値の型</param>
        /// <param name="ignoreState">回数を数える対象としない条件</param>
        /// <param name="ignoreVariables">回数を数えない変数の値</param>
        /// <returns></returns>
        public IDictionary <ScriptVariable, int> GetOccuranceOfVariables(ScriptVariableType targetTypes, VariableNamedState ignoreState, ICollection <ScriptVariable> ignoreVariables)
        {
            Dictionary <ScriptVariable, int> ret = new Dictionary <ScriptVariable, int>(new VariableValueEqualityComparer());

            foreach (var refCall in _histories)
            {
                getOccuranceOfVariablesAux(ret, refCall.Params, targetTypes, ignoreState, ignoreVariables);
            }
            return(ret);
        }
示例#5
0
 public void getOccuranceOfVariablesAux(IDictionary <ScriptVariable, int> map, IList <RefScriptVariable> variables, ScriptVariableType targetTypes, VariableNamedState ignoreState, ICollection <ScriptVariable> ignoreVariables)
 {
     foreach (var variable in variables)
     {
         if (variable.SatisfiesNamedState(ignoreState))
         {
             continue;
         }
         if (variable.Value == null)
         {
             continue;
         }
         if (!variable.Value.IsTypeOf(targetTypes))
         {
             continue;
         }
         if (!ignoreVariables.Contains(variable.Value))
         {
             if (!map.ContainsKey(variable.Value))
             {
                 map[variable.Value] = 0;
             }
             map[variable.Value]++;
         }
         RefListVariable         list   = variable as RefListVariable;
         RefConcatStringVariable concat = variable as RefConcatStringVariable;
         if (list != null)
         {
             getOccuranceOfVariablesAux(map, list.List, targetTypes, ignoreState, ignoreVariables);
         }
         else if (concat != null)
         {
             if (concat.Strings.Count == 1 && concat.Strings[0].Word == concat.Value.ToString())
             {
                 continue;
             }
             foreach (var c in concat.Strings)
             {
                 if (c.SatisfiesNamedState(ignoreState))
                 {
                     continue;
                 }
                 StringVariable strVar = new StringVariable(c.Word);
                 if (!ignoreVariables.Contains(strVar))
                 {
                     if (!map.ContainsKey(strVar))
                     {
                         map[strVar] = 0;
                     }
                     map[strVar]++;
                 }
             }
         }
     }
 }
示例#6
0
        /// <summary>
        /// 関数の戻り値を用いて引数を変数で置き換えます
        /// </summary>
        /// <param name="targetTypes">置き換える対象の変数の値の型</param>
        /// <param name="resultPrefix">戻り値を受け取る</param>
        /// <param name="useIndexerOfResult">戻り値のインデクサの値を用いるかどうか</param>
        /// <param name="ignoreState">置き換えの対象としない条件</param>
        public void ReplaceByResult(ScriptVariableType targetTypes, string resultPrefix, bool useIndexerOfResult, VariableNamedState ignoreState)
        {
            int index = 0;

            foreach (var refCall in _histories)
            {
                refCall.ReplaceByName(_replacements, ignoreState);
                index++;
                replaceByResultAux(refCall.Result, _replacements, ConstructResultName(resultPrefix, index), targetTypes);
            }
        }
示例#7
0
        public override IList <string> ReplaceByName(IDictionary <ScriptVariable, string> map, VariableNamedState ignoreState)
        {
            List <string> ret = new List <string>();

            if (this.SatisfiesNamedState(ignoreState))
            {
                return(ret);
            }
            if (this.Value == null)
            {
                return(ret);
            }
            string name;

            if (map.TryGetValue(this.Value, out name))
            {
                this.Name = name;
                ret.Add(name);
            }

            foreach (var sub in this.List)
            {
                ret.AddRange(sub.ReplaceByName(map, ignoreState));
            }
            return(ret);
        }
示例#8
0
        /// <summary>
        /// 指定された変換を用いて変数に名前をつけます
        /// </summary>
        /// <param name="map">変数の値と,その変数に付ける名前のディクショナリ</param>
        /// <param name="ignoreState">名前付けをしない条件</param>
        public IList <string> ReplaceByName(IDictionary <ScriptVariable, string> map, VariableNamedState ignoreState)
        {
            List <string> ret = new List <string>();

            if (this.SatisfiesNamedState(ignoreState))
            {
                return(ret);
            }
            string name;

            if (map.TryGetValue(new StringVariable(this.Word), out name))
            {
                this.Name = name;
                ret.Add(name);
            }
            return(ret);
        }