示例#1
0
        /// <summary>
        /// static void r_ivar(VALUE obj, int *has_encoding, struct load_arg *arg)
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="has_encoding"></param>
        public void ReadInstanceVariable(object obj, ref bool has_encoding)
        {
            int         len  = ReadLong();
            FuzzyObject fobj = obj as FuzzyObject;

            if (len > 0)
            {
                do
                {
                    FuzzySymbol id  = ReadSymbol();
                    object      val = ReadObject();
                    Encoding    idx = GetEncoding(id, val);
                    if (idx != null)
                    {
                        if (fobj != null)
                        {
                            fobj.Encoding = idx;
                        }
                        has_encoding = true;
                    }
                    else
                    {
                        if (fobj != null)
                        {
                            fobj.InstanceVariable[id] = val;
                        }
                    }
                } while (--len > 0);
            }
        }
示例#2
0
 public static string GetShortString(FuzzyObject obj)
 {
     if (obj == null)
     {
         return("");
     }
     return("[" + obj.ClassName.Name + "]");
 }
示例#3
0
        /// <summary>
        /// static VALUE append_extmod(VALUE obj, VALUE extmod)
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="extmod"></param>
        /// <returns></returns>
        public object AppendExtendedModule(object obj, List <FuzzyModule> extmod)
        {
            FuzzyObject fobj = obj as FuzzyObject;

            if (fobj != null)
            {
                fobj.ExtendModules.AddRange(extmod);
            }
            return(obj);
        }
示例#4
0
        public bool WriteUserClass(object obj, FuzzyClass super)
        {
            FuzzyObject fobj = obj as FuzzyObject;

            if (fobj != null)
            {
                FuzzyClass klass = fobj.Class;
            }
            return(false);
        }
 protected bool AreValuesDifferent <FT>(FuzzyObject <FT> a, FuzzyObject <FT> b) where FT : Enum
 {
     if (a == null && b == null)
     {
         return(false);
     }
     if (a != null && b != null)
     {
         return(!a.Value.Equals(b.Value) || AreValuesDifferent(a.Degree, b.Degree));
     }
     return(true);
 }
示例#6
0
        /// <summary>
        /// static void w_extended(VALUE klass, struct dump_arg *arg, int check)
        /// </summary>
        /// <param name="klass"></param>
        /// <param name="check"></param>
        public void WriteExtended(object klass, bool check)
        {
            FuzzyObject fobj = klass as FuzzyObject;

            if (fobj != null)
            {
                foreach (FuzzyModule item in fobj.ExtendModules)
                {
                    WriteByte(RubyMarshal.Types.Extended);
                    WriteUnique(item.Symbol);
                }
            }
        }
示例#7
0
        protected void Push(AnyTypeWindow atw)
        {
            object ob  = treeViewForAny1.SelectedObject;
            Key    key = listViewForAny1.SelectedKey;

            if (key == null)
            {
                if (ob is FuzzyArray)
                {
                    (ob as FuzzyArray).Add(atw.Value);
                }
                else if (ob is FuzzyObject)
                {
                    FuzzyObject fo = ob as FuzzyObject;
                    FuzzySymbol fs = FuzzySymbol.GetSymbol(atw.TextName);
                    if (fo.InstanceVariables.ContainsKey(fs))
                    {
                        fo.InstanceVariables[fs] = atw.Value;
                    }
                    else
                    {
                        fo.InstanceVariables.Add(fs, atw.Value);
                    }
                }
                else
                {
                }
            }
            else
            if (key.Type == Key.KeyType.Array)
            {
                (ob as FuzzyArray)[key.ArrayKey] = atw.Value;
            }
            else if (key.Type == Key.KeyType.Hash)
            {
                (ob as FuzzyHash)[key.HashKey] = atw.Value;
            }
            else if (key.Type == Key.KeyType.Object)
            {
                if (key.ObjectKey.Name == NAME_VALUE)
                {
                    (ob as FuzzyObject).ClassName = FuzzySymbol.GetSymbol(atw.TextValue);
                }
                else
                {
                    (ob as FuzzyObject).InstanceVariables[key.ObjectKey] = atw.Value;
                }
            }
            listViewForAny1.ScanObject();
        }
示例#8
0
        /// <summary>
        /// 从文档中读取一个 object
        /// 注意:焦点没有发生移动。
        /// </summary>
        /// <returns></returns>
        protected FuzzyObject GetObject()
        {
            FuzzyObject fobj = new FuzzyObject();

            x_node = x_node.FirstChild;
            if (x_node.Name == "Name")
            {
                x_node         = x_node.FirstChild;
                fobj.ClassName = ReadObject() as FuzzySymbol;
                if (fobj.ClassName == null)
                {
                    fobj.ClassName = FuzzySymbol.GetSymbol("");
                }
                x_node = x_node.ParentNode.NextSibling;
            }
            FuzzySymbol name = null;

            if (x_ignoreSymbolEncoding)
            {
                name = FuzzySymbol.GetSymbol(ReadAttribute("Name"));
                fobj.InstanceVariables.Add(name, ReadObject());
                while (x_node.NextSibling != null)
                {
                    x_node = x_node.NextSibling;
                    name   = FuzzySymbol.GetSymbol(ReadAttribute("Name"));
                    fobj.InstanceVariables.Add(name, ReadObject());
                }
            }
            else
            {
                name = ReadObject() as FuzzySymbol;
                while (x_node.NextSibling != null)
                {
                    x_node = x_node.NextSibling;
                    if (name == null)
                    {
                        name = ReadObject() as FuzzySymbol;
                    }
                    else
                    {
                        fobj.InstanceVariables.Add(name, ReadObject());
                        name = null;
                    }
                }
            }
            x_node = x_node.ParentNode;
            return(fobj);
        }
示例#9
0
        private void Form1_Load(object sender, EventArgs e)
        {
            new MainAction().ShowDialog();
            Interpreter.Collector.AddAssembly(System.Reflection.Assembly.GetAssembly(typeof(DataEditor.Control.Container.ContainerArgs)));
            Interpreter.Collector.AddAssembly(System.Reflection.Assembly.GetAssembly(typeof(DataEditor.Control.Wrapper.WrapNumInput)));
            Interpreter.Builder    builder  = new Interpreter.Builder();
            System.Xml.XmlDocument document = new XmlDocument();
            document.Load("Xmls/test1.xml");
            try
            {
                builder.Build(document.FirstChild.NextSibling, panel1.Controls);
            }
            catch (Exception exc)
            {
            }
            System.IO.FileStream file = new System.IO.FileStream("Tests/Data/Items.rvdata", System.IO.FileMode.Open);
            System.IO.FileStream filx = new System.IO.FileStream("Tests/Data/Classes.rvdata", System.IO.FileMode.Open);
            System.IO.FileStream fily = new System.IO.FileStream("Tests/Data/Actors.rvdata2", System.IO.FileMode.Open);
            System.IO.FileStream filz = new System.IO.FileStream("Tests/Data/System.rvdata2", System.IO.FileMode.Open);

            FuzzyObject ob = DataEditor.FuzzyData.Serialization.RubyMarshal.RubyMarshal.Load(file) as FuzzyObject;
            FuzzyObject op = DataEditor.FuzzyData.Serialization.RubyMarshal.RubyMarshal.Load(filx) as FuzzyObject;
            FuzzyObject od = DataEditor.FuzzyData.Serialization.RubyMarshal.RubyMarshal.Load(fily) as FuzzyObject;
            FuzzyObject oq = DataEditor.FuzzyData.Serialization.RubyMarshal.RubyMarshal.Load(filz) as FuzzyObject;
            FuzzyArray  fa = ob as FuzzyArray;
            FuzzyArray  fb = op as FuzzyArray;
            FuzzyArray  fc = od as FuzzyArray;

            foreach (System.Windows.Forms.Control control in panel1.Controls)
            {
                if (control is TabControl)
                {
                    TabControl tc = control as TabControl;
                    try
                    {
                        (tc.TabPages[0].Tag as DataEditor.Control.ObjectEditor).Parent = fa;
                        (tc.TabPages[1].Tag as DataEditor.Control.ObjectEditor).Parent = fb;
                        (tc.TabPages[2].Tag as DataEditor.Control.ObjectEditor).Parent = oq;
                        (tc.TabPages[3].Tag as DataEditor.Control.ObjectEditor).Parent = fc;
                    }
                    catch (Exception ex)
                    {
                    }
                }
            }
        }
示例#10
0
        /// <summary>
        /// static void w_class(char type, VALUE obj, struct dump_arg *arg, int check)
        /// </summary>
        /// <param name="type"></param>
        /// <param name="obj"></param>
        /// <param name="check"></param>
        public void WriteClass(byte type, object obj, bool check)
        {
            object real_obj;

            if (this.m_compat_tbl.TryGetValue(obj, out real_obj))
            {
                obj = real_obj;
            }
            FuzzyObject fobj = obj as FuzzyObject;

            if (fobj != null)
            {
                FuzzyClass klass = FuzzyClass.GetClass(fobj.ClassName);
                WriteExtended(klass, check);
                WriteByte(type);
                WriteUnique(fobj.ClassName);
            }
        }
示例#11
0
 public void ScanObject(FuzzyObject Value)
 {
     Items.Clear();
     if (Value == null)
     {
         return;
     }
     dictionary.Add(AddItem(AnyTypeEditor.NAME_VALUE, Value.ClassName),
                    new Key(FuzzySymbol.GetSymbol(AnyTypeEditor.NAME_VALUE), Key.KeyType.Object));
     foreach (FuzzySymbol symbol in Value.InstanceVariables.Keys)
     {
         object Target = Value.InstanceVariables[symbol];
         if (Any.SupportedSingle.Contains(Target.GetType()))
         {
             dictionary.Add(AddItem(symbol.Name, Target), new Key(symbol, Key.KeyType.Object));
         }
     }
     if (Value is FuzzyArray)
     {
         FuzzyArray fa = Value as FuzzyArray;
         for (int i = 0; i < fa.Length; i++)
         {
             object Target = fa[i];
             if (Any.SupportedSingle.Contains(Target.GetType()))
             {
                 dictionary.Add(AddItem("[" + i.ToString() + "]", Target), new Key(i, Key.KeyType.Array));
             }
         }
     }
     if (Value is FuzzyHash)
     {
         FuzzyHash fh = Value as FuzzyHash;
         foreach (object key in fh.Keys)
         {
             object      Target = fh[key];
             FuzzyObject target = Target as FuzzyObject;
             if (Any.SupportedSingle.Contains(Target.GetType()))
             {
                 dictionary.Add(AddItem(key.ToString(), target), new Key(key, Key.KeyType.Hash));
             }
         }
     }
     dictionary.Add(AddItem("", null), null);
 }
示例#12
0
        public BaseFuzzyObject multiply(Word item, double mult)
        {
            var fuzzy          = new FuzzyObject();
            var typeDictionary = new Dictionary <string, double>();

            typeDictionary.Add(item.GetType().Name, mult);
            fuzzy.Belongings.Add("type", typeDictionary);

            var fields = item.GetType().GetFields().ToList();

            foreach (var field in fields)
            {
                var temp = new Dictionary <string, double>();
                temp.Add(field.GetValue(item).ToString(), mult);
                fuzzy.Belongings.Add(field.Name, temp);
            }

            return(fuzzy);
        }
示例#13
0
        /// <summary>
        /// static void w_uclass(VALUE obj, VALUE super, struct dump_arg *arg)
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="super"></param>
        public void WriteUserClass(object obj, FuzzyClass super)
        {
            FuzzyObject fobj = obj as FuzzyObject;

            if (fobj != null)
            {
                FuzzyClass klass = fobj.Class;
                WriteExtended(klass, true);
                if (klass != super)
                {
                    WriteByte(RubyMarshal.Types.UserClass);
                    WriteUnique(klass.Symbol);
                }
            }
            else
            {
                throw new InvalidOperationException();
            }
        }
示例#14
0
 public void ScanObject(FuzzyObject Value, TreeNode ParentNode)
 {
     if (Value == null)
     {
         return;
     }
     foreach (FuzzySymbol symbol in Value.InstanceVariables.Keys)
     {
         object Target = Value.InstanceVariables[symbol];
         if (Any.SupportedComplex.Contains(Target.GetType()))
         {
             ScanObject(Target as FuzzyObject, AddNode("[" + symbol.Name + "]", Target, ParentNode));
         }
     }
     if (Value is FuzzyArray)
     {
         FuzzyArray fa = Value as FuzzyArray;
         for (int i = 0; i < fa.Length; i++)
         {
             object Target = fa[i];
             if (Any.SupportedComplex.Contains(Target.GetType()))
             {
                 ScanObject(Target as FuzzyObject, AddNode("[" + i.ToString() + "]", Target, ParentNode));
             }
         }
     }
     if (Value is FuzzyHash)
     {
         FuzzyHash fh = Value as FuzzyHash;
         foreach (object key in fh.Keys)
         {
             object      Target = fh[key];
             FuzzyObject target = Target as FuzzyObject;
             if (Any.SupportedComplex.Contains(Target.GetType()))
             {
                 ScanObject(target, AddNode("[" + Any.GetShortString(target) + "]", target, ParentNode));
             }
         }
     }
 }
示例#15
0
        /// <summary>
        /// static void w_ivar(VALUE obj, st_table *tbl, struct dump_call_arg *arg)
        /// </summary>
        /// <param name="obj"></param>
        public void WriteInstanceVariable(FuzzyObject obj, Dictionary <FuzzySymbol, object> tbl)
        {
            int num = tbl != null ? tbl.Count : 0;

            WriteEncoding(obj, num);
            if (tbl != null)
            {
                foreach (KeyValuePair <FuzzySymbol, object> item in tbl)
                {
                    if (item.Key == RubyMarshal.IDs.encoding)
                    {
                        continue;
                    }
                    if (item.Key == RubyMarshal.IDs.E)
                    {
                        continue;
                    }
                    WriteSymbol(item.Key);
                    WriteObject(item.Value);
                }
            }
        }
示例#16
0
        private static object LoadNext(string name, object node)
        {
            int num = -1;

            if (int.TryParse(name, out num))
            {
                if (node is Array)
                {
                    if (num > 0 && num < (node as Array).Length)
                    {
                        return((node as Array).GetValue(num));
                    }
                }
                if (node is FuzzyArray)
                {
                    if (num > 0 && num < (node as FuzzyArray).Count)
                    {
                        return((node as FuzzyArray)[num]);
                    }
                }
            }
            FuzzyObject obj = node as FuzzyObject;

            if (obj == null)
            {
                throw new ArgumentException(" Giving a wrong object when searching " + name);
            }
            if (!name.StartsWith("@"))
            {
                name = "@" + name;
            }
            FuzzySymbol sym = FuzzySymbol.GetSymbol(name);

            if (obj.InstanceVariables.ContainsKey(sym))
            {
                return(obj.InstanceVariables[sym]);
            }
            throw new ArgumentException(" Not defined : " + name + " in " + node.ToString());
        }
示例#17
0
        public override void Pull()
        {
            if (base.Value == null || model == null || Binding == null)
            {
                return;
            }
            FuzzyArray arr = base.Value as FuzzyArray;

            Prototype.ProtoFullListBox origin = Binding as Prototype.ProtoFullListBox;
            if (arr == null || arr == null)
            {
                return;
            }
            Prototype.ProtoLeftListBox lb = origin.ListBox;
            Link.Clear();
            TextManager.Clear();
            lb.Items.Clear();
            int i = -1, j = 0;

            foreach (object Child in arr)
            {
                i++;
                if (Child == null || Child is FuzzyNil)
                {
                    continue;
                }
                FuzzyObject child = Child as FuzzyObject;
                if (child == null)
                {
                    continue;
                }
                Help.TextManager text = new Help.TextManager(model, child);
                lb.Items.Add(text);
                Link.Add(i, j++);
            }
            base.Pull();
            Help.TaintRecord.Multi[arr] = Taint;
        }
示例#18
0
        /// <summary>
        /// static void w_object(VALUE obj, struct dump_arg *arg, int limit)
        /// </summary>
        /// <param name="obj"></param>
        public void WriteObject(object obj)
        {
            int num;

            if (this.m_objects.TryGetValue(obj, out num))
            {
                WriteByte(RubyMarshal.Types.Link);
                WriteLong(num);
                return;
            }
            if (obj == null || obj == FuzzyNil.Instance)
            {
                WriteByte(RubyMarshal.Types.Nil);
            }
            else if (obj is bool && (bool)obj == true)
            {
                WriteByte(RubyMarshal.Types.True);
            }
            else if (obj is bool && (bool)obj == false)
            {
                WriteByte(RubyMarshal.Types.False);
            }
            else if (obj is FuzzyBool && (obj as FuzzyBool).Value)
            {
                WriteByte(RubyMarshal.Types.True);
            }
            else if (obj is FuzzyBool && !(obj as FuzzyBool).Value)
            {
                WriteByte(RubyMarshal.Types.False);
            }
            else if (obj is int || obj is long || obj is FuzzyFixnum)
            {
                long v;
                if (obj is int | obj is long)
                {
                    v = (long)obj;
                }
                else
                {
                    v = (obj as FuzzyFixnum).Value;
                }
                // (2**30).class   => Bignum
                // (2**30-1).class => Fixnum
                // (-2**30-1).class=> Bignum
                // (-2**30).class  => Fixnum
                if (v <= 1073741823 && v >= -1073741824)
                {
                    WriteByte(RubyMarshal.Types.Fixnum);
                    WriteLong((int)v);
                }
                else
                {
                    WriteObject(FuzzyBignum.Create(v));
                }
            }
            else if (obj is FuzzySymbol)
            {
                WriteSymbol(obj as FuzzySymbol);
            }
            else
            {
                FuzzyObject fobj  = obj as FuzzyObject;
                bool        hasiv = false;
                if (fobj != null)
                {
                    hasiv = (obj as FuzzyObject).InstanceVariables.Count > 0 || fobj.Encoding != null;
                }
                var factor = Serialization.Factory <byte[]> .Factor(fobj.GetType());

                if (factor != null)
                {
                    WriteSymbol(fobj.ClassName);
                    factor.dump(m_stream, fobj, null);
                }
                if (obj is IRubyUserdefinedMarshalDumpObject)
                {
                    this.m_objects.Add(obj, this.m_objects.Count);
                    object result = (obj as IRubyUserdefinedMarshalDumpObject).Dump();
                    if (hasiv)
                    {
                        WriteByte(RubyMarshal.Types.InstanceVariable);
                    }
                    WriteClass(RubyMarshal.Types.UserMarshal, obj, false);
                    WriteObject(result);
                    if (hasiv)
                    {
                        WriteObjectInstanceVariable(fobj);
                    }
                    return;
                }
                if (obj is IRubyUserdefinedDumpObject)
                {
                    byte[] result = (obj as IRubyUserdefinedDumpObject).Dump();
                    if (hasiv)
                    {
                        WriteByte(RubyMarshal.Types.InstanceVariable);
                    }
                    WriteClass(RubyMarshal.Types.UserDefined, obj, false);
                    WriteBytes(result, result.Length);
                    if (hasiv)
                    {
                        WriteObjectInstanceVariable(fobj);
                    }
                    this.m_objects.Add(obj, this.m_objects.Count);
                    return;
                }

                this.m_objects.Add(obj, this.m_objects.Count);


                if (hasiv)
                {
                    WriteByte(RubyMarshal.Types.InstanceVariable);
                }

                if (obj is FuzzyClass)
                {
                    WriteByte(RubyMarshal.Types.Class);
                    WriteCString((obj as FuzzyClass).Name);
                }
                else if (obj is FuzzyModule)
                {
                    WriteByte(RubyMarshal.Types.Module);
                    WriteCString((obj as FuzzyModule).Name);
                }
                else if (obj is float)
                {
                    WriteByte(RubyMarshal.Types.Float);
                    WriteFloat((float)obj);
                }
                else if (obj is double)
                {
                    WriteByte(RubyMarshal.Types.Float);
                    WriteFloat((double)obj);
                }
                else if (obj is FuzzyFloat)
                {
                    WriteByte(RubyMarshal.Types.Float);
                    WriteFloat((FuzzyFloat)obj);
                }
                else if (obj is FuzzyBignum || obj is FuzzyBignumAdapter)
                {
                    FuzzyBignum value;
                    if (obj is FuzzyBignumAdapter)
                    {
                        value = (obj as FuzzyBignumAdapter).Value;
                    }
                    else
                    {
                        value = (FuzzyBignum)obj;
                    }
                    char ch;
                    if (value.Sign > 0)
                    {
                        ch = '+';
                    }
                    else if (value.Sign < 0)
                    {
                        ch = '-';
                    }
                    else
                    {
                        ch = '0';
                    }
                    this.m_writer.Write((byte)ch);
                    uint[] words = value.GetWords();
                    int    num2  = words.Length * 2;
                    int    index = words.Length - 1;
                    bool   flag  = false;
                    if ((words.Length > 0) && ((words[index] >> 0x10) == 0))
                    {
                        num--;
                        flag = true;
                    }
                    this.WriteLong(num2);
                    for (int i = 0; i < words.Length; i++)
                    {
                        if (flag && (i == index))
                        {
                            this.m_writer.Write((ushort)words[i]);
                        }
                        else
                        {
                            this.m_writer.Write(words[i]);
                        }
                    }
                }
                else if (obj is FuzzyString || obj is string)
                {
                    FuzzyString v;
                    if (obj is string)
                    {
                        v = new FuzzyString(obj as string);
                    }
                    else
                    {
                        v = (FuzzyString)obj;
                    }
                    WriteUserClass(v, FuzzyClass.GetClass("String"));
                    WriteByte(RubyMarshal.Types.String);
                    WriteBytes(v.Raw);
                }
                else if (obj is FuzzyRegexp)
                {
                    FuzzyRegexp v = (FuzzyRegexp)obj;
                    WriteUserClass(obj, FuzzyClass.GetClass("Regexp"));
                    WriteByte(RubyMarshal.Types.Regexp);
                    WriteBytes(v.Pattern.Raw);
                    WriteByte((byte)v.Options);
                }
                else if (obj is FuzzyArray || obj is List <object> )
                {
                    FuzzyArray v;
                    if (obj is List <object> )
                    {
                        v = new FuzzyArray(obj as List <object>);
                    }
                    else
                    {
                        v = (FuzzyArray)obj;
                    }
                    WriteUserClass(v, FuzzyClass.GetClass("Array"));
                    WriteByte(RubyMarshal.Types.Array);
                    WriteLong(v.Length);
                    for (int i = 0; i < v.Count; i++)
                    {
                        WriteObject(v[i]);
                    }
                }
                else if (obj is FuzzyHash)
                {
                    FuzzyHash v = (FuzzyHash)obj;
                    WriteUserClass(obj, FuzzyClass.GetClass("Hash"));
                    WriteByte(v.DefaultValue != null ? RubyMarshal.Types.HashWithDefault : RubyMarshal.Types.Hash);
                    WriteLong(v.Length);
                    foreach (KeyValuePair <object, object> item in v)
                    {
                        WriteObject(item.Key);
                        WriteObject(item.Value);
                    }
                    if (v.DefaultValue != null)
                    {
                        WriteObject(v.DefaultValue);
                    }
                }
                else if (obj is FuzzyStruct)
                {
                    FuzzyStruct v = (FuzzyStruct)obj;
                    WriteUserClass(obj, FuzzyClass.GetClass("Struct"));
                    WriteLong(v.InstanceVariables.Count);
                    foreach (KeyValuePair <FuzzySymbol, object> item in v.InstanceVariables)
                    {
                        WriteObject(item.Key);
                        WriteObject(item.Value);
                    }
                }
                else if (obj is FuzzyObject)
                {
                    WriteClass(RubyMarshal.Types.Object, obj, true);
                    WriteObjectInstanceVariable((FuzzyObject)obj);
                }
                else
                {
                    throw new InvalidDataException(string.Format("can't dump {0}", obj.GetType().FullName));
                }
                if (hasiv)
                {
                    WriteInstanceVariable(fobj, fobj.InstanceVariables);
                }
            }
        }
示例#19
0
 /// <summary>
 /// static void w_objivar(VALUE obj, struct dump_call_arg *arg)
 /// </summary>
 /// <param name="obj"></param>
 public void WriteObjectInstanceVariable(FuzzyObject obj)
 {
     WriteInstanceVariable(obj, obj.InstanceVariables);
 }
示例#20
0
        public void WriteObject(object obj)
        {
            int num;

            if (this.x_objects.TryGetValue(obj, out num))
            {
                WriteNode(XML.Types.Link, num.ToString());
                return;
            }
            if (obj == null || obj == FuzzyNil.Instance)
            {
                WriteNode(XML.Types.Nil, "");
            }
            else if (obj is bool && (bool)obj == true)
            {
                WriteNode(XML.Types.True, "");
            }
            else if (obj is bool && (bool)obj == false)
            {
                WriteNode(XML.Types.False, "");
            }
            else if (obj is int || obj is long || obj is FuzzyFixnum)
            {
                long v;
                if (obj is FuzzyFixnum)
                {
                    v = (obj as FuzzyFixnum).Value;
                }
                else
                {
                    v = (long)obj;
                }
                if (v <= 1073741823 && v >= -1073741824)
                {
                    WriteNode(XML.Types.Fixnum, obj.ToString());
                }
                else
                {
                    WriteObject(FuzzyBignum.Create(v));
                }
            }
            else if (obj is FuzzySymbol)
            {
                WriteSymbol(obj as FuzzySymbol);
            }
            else
            {
                FuzzyObject fobj  = obj as FuzzyObject;
                bool        hasiv = false;
                if (fobj != null)
                {
                    hasiv = (obj as FuzzyObject).InstanceVariables.Count > 0 || fobj.Encoding != null;
                }
                if (obj is IXMLUserdefinedDumpObject)
                {
                    this.x_objects.Add(obj, this.x_objects.Count);
                    object result = (obj as IXMLUserdefinedMarshalDumpObject).Dump();
                    WritePopNode(XML.Types.UserMarshal, "");
                    WriteObject(result);
                    x_parent_node.Pop();
                    return;
                }
                if (obj is IXMLUserdefinedDumpObject)
                {
                    XmlNode result = (obj as IXMLUserdefinedDumpObject).Dump();
                    WritePopNode(XML.Types.UserDefined, "").AppendChild(result);
                    this.x_objects.Add(obj, this.x_objects.Count);
                    return;
                }
                this.x_objects.Add(obj, this.x_objects.Count);
                if (obj is FuzzyClass)
                {
                    WriteNode(XML.Types.Class, (obj as FuzzyClass).Name);
                }
                else if (obj is FuzzyModule)
                {
                    WriteNode(XML.Types.Module, (obj as FuzzyClass).Name);
                }
                else if (obj is float)
                {
                    WriteFloat((float)obj);
                }
                else if (obj is double)
                {
                    WriteFloat((double)obj);
                }
                else if (obj is FuzzyFloat)
                {
                    WriteFloat((obj as FuzzyFloat).Value);
                }
                else if (obj is FuzzyBignum)
                {
                    WriteNode(XML.Types.Bignum, obj.ToString());
                }
                else if (obj is FuzzyBignumAdapter)
                {
                    WriteNode(XML.Types.Bignum, (obj as FuzzyBignumAdapter).Value.ToString());
                }
                else if (obj is FuzzyString || obj is string)
                {
                    FuzzyString v;
                    if (obj is string)
                    {
                        v = new FuzzyString(obj as string);
                    }
                    else
                    {
                        v = (FuzzyString)obj;
                    }
                    WritePopNode(XML.Types.String);
                    WriteString(v.Text, v.Encoding);
                    x_parent_node.Pop();
                }
                else if (obj is FuzzyRegexp)
                {
                    FuzzyRegexp v = (FuzzyRegexp)obj;
                    WritePopNode(XML.Types.Regexp);
                    WriteString(v.Pattern.Text, v.Pattern.Encoding);
                    WriteNode("Options", ((int)v.Options).ToString());
                }
                else if (obj is FuzzyArray || obj is List <object> )
                {
                    FuzzyArray v;
                    if (obj is List <object> )
                    {
                        v = new FuzzyArray(obj as List <object>);
                    }
                    else
                    {
                        v = (FuzzyArray)obj;
                    }
                    WritePopNode(XML.Types.Array);
                    for (int i = 0; i < v.Count; i++)
                    {
                        WriteObject(v[i]);
                    }
                    x_parent_node.Pop();
                }
                else if (obj is FuzzyHash)
                {
                    FuzzyHash v = (FuzzyHash)obj;
                    if (v.DefaultValue == null)
                    {
                        WritePopNode(XML.Types.Hash);
                    }
                    else
                    {
                        WritePopNode(XML.Types.HashWithDefault);
                        WritePopNode("Default");
                        WriteObject(v.DefaultValue);
                        x_parent_node.Pop();
                    }
                    foreach (KeyValuePair <object, object> item in v)
                    {
                        WriteObject(item.Key);
                        WriteObject(item.Value);
                    }
                    x_parent_node.Pop();
                }

                else if (obj is FuzzyObject || obj is FuzzyStruct)
                {
                    FuzzyObject v = fobj;
                    if (obj is FuzzyObject)
                    {
                        WritePopNode(XML.Types.Object);
                    }
                    else
                    {
                        WritePopNode(XML.Types.Struct);
                    }
                    if (XML.Options.IgnoreSymbolEncoding)
                    {
                        WriteAttribute("Name", v.ClassName.Name);
                        foreach (KeyValuePair <FuzzySymbol, object> item in v.InstanceVariables)
                        {
                            WritePopNode("Data");
                            WriteAttribute("Name", item.Key.Name);
                            WriteObject(item.Value);
                            x_parent_node.Pop();
                        }
                    }
                    else
                    {
                        var factor = Serialization.Factory <XmlNode> .Factor(fobj.GetType());

                        if (factor == null)
                        {
                            factor = Serialization.Factory <XmlNode> .Factor(fobj.ClassName.Name);
                        }
                        if (factor != null)
                        {
                            WritePopNode(XML.Types.UserDefined);
                            XmlNode node = factor.dump(x_stream, fobj, null);
                            node = x_document.ImportNode(node, true);
                            x_parent_node.Pop().AppendChild(node);
                        }
                        else
                        {
                            WritePopNode("Name");
                            WriteObject(v.ClassName);
                            x_parent_node.Pop();
                            foreach (KeyValuePair <FuzzySymbol, object> item in v.InstanceVariables)
                            {
                                WriteSymbol(item.Key);
                                WriteObject(item.Value);
                            }
                        }
                    }
                    x_parent_node.Pop();
                }
                else
                {
                    throw new InvalidDataException(string.Format("can't dump {0}", obj.GetType().FullName));
                }
            }
        }
示例#21
0
 public ValueChangedEventArgs(FuzzyObject Value)
 {
     newValue = Value;
 }
示例#22
0
        static void Main(string[] args)
        {
            //FuzzyModule fm = new FuzzyModule();

            //FuzzyVariable DistToTarget = m_FuzzyModule.CreateFLV("DistToTarget");
            //FuzzySetProxy Target_Close = DistToTarget.AddFuzzySet("Target_Close", FuzzySet.CreateLeftShoulderSet(0, 25, 150));
            //FuzzySetProxy Target_Medium = DistToTarget.AddFuzzySet("Target_Medium", FuzzySet.CreateTriangularSet(25, 150, 300));
            //FuzzySetProxy Target_Far = DistToTarget.AddFuzzySet( "Target_Far", FuzzySet.CreateRightShoulderSet(150, 300, 1000));

            //FuzzyVariable Desirability = m_FuzzyModule.CreateFLV("Desirability");
            //FuzzySetProxy Undesirable = Desirability.AddFuzzySet("Undesirable", FuzzySet.CreateLeftShoulderSet(0, 25, 50));
            //FuzzySetProxy Desirable = Desirability.AddFuzzySet("Desirable", FuzzySet.CreateTriangularSet(25, 50, 75));
            //FuzzySetProxy VeryDesirable = Desirability.AddFuzzySet("VeryDesirable", FuzzySet.CreateRightShoulderSet(50, 75, 100));

            //FuzzyVariable AmmoStatus = m_FuzzyModule.CreateFLV("AmmoStatus");
            //FuzzySetProxy Ammo_Loads = AmmoStatus.AddFuzzySet("Ammo_Loads", FuzzySet.CreateRightShoulderSet(10, 30, 100));
            //FuzzySetProxy Ammo_Okay = AmmoStatus.AddFuzzySet("Ammo_Okay", FuzzySet.CreateTriangularSet(0, 10, 30));
            //FuzzySetProxy Ammo_Low = AmmoStatus.AddFuzzySet("Ammo_Low", FuzzySet.CreateTriangularSet(0, 0, 10));

            //m_FuzzyModule.AddRule(new FuzzyOperatorOR(new FuzzyOperatorAND(Target_Close, Ammo_Low), new FuzzyOperatorOR(new FuzzyOperatorAND(Target_Close, Ammo_Loads), new FuzzyOperatorAND(Target_Close, Ammo_Okay))), Undesirable);
            ////m_FuzzyModule.AddRule(new FuzzyOperatorAND(Target_Close, Ammo_Okay), Undesirable);
            ////m_FuzzyModule.AddRule(new FuzzyOperatorAND(Target_Close, Ammo_Low), Undesirable);

            //m_FuzzyModule.AddRule(new FuzzyOperatorAND(Target_Medium, Ammo_Loads), VeryDesirable);
            //m_FuzzyModule.AddRule(new FuzzyOperatorAND(Target_Medium, Ammo_Okay), VeryDesirable);
            //m_FuzzyModule.AddRule(new FuzzyOperatorAND(Target_Medium, Ammo_Low), Desirable);

            //m_FuzzyModule.AddRule(new FuzzyOperatorAND(Target_Far, Ammo_Loads), Desirable);
            //m_FuzzyModule.AddRule(new FuzzyOperatorAND(Target_Far, Ammo_Okay), Undesirable);
            //m_FuzzyModule.AddRule(new FuzzyOperatorAND(Target_Far, Ammo_Low), Undesirable);

            //Console.Write("Enter distance: ");
            //string distanceString = Console.ReadLine();

            //double distance = 0;
            //double.TryParse(distanceString, out distance);

            //Console.Write("Enter rounds: ");
            //string roundsString = Console.ReadLine();

            //int numRoundsLeft = 0;
            //int.TryParse(roundsString, out numRoundsLeft);

            ////fuzzify distance and amount of ammo
            //m_FuzzyModule.Fuzzify("DistToTarget", distance);
            //m_FuzzyModule.Fuzzify("AmmoStatus", (double)numRoundsLeft);
            //double desirabilityScore = m_FuzzyModule.DeFuzzify("Desirability", DefuzzifyMethod.MAX_AV);

            //Console.WriteLine("Desirability Score: {0}", desirabilityScore);
            //Console.ReadLine();

            var enemy = new Enemy();
            var mod = new FuzzyObject<Enemy>(enemy);

            var distanceVariable = mod.DefineVariable(p => p.DistanceToTarget);
            var statusVariable = mod.DefineVariable(p => p.AmmoStatus);
            var desireability = mod.DefineVariable(p => p.Desireability);

            mod.AddFuzzySet("Ammo_Loads", p => p.AmmoStatus, FuzzySet.CreateRightShoulderSet, 10, 20, 100)
                .AddFuzzySet("Ammo_Okay", p => p.AmmoStatus, FuzzySet.CreateTriangularSet, 0, 10, 30)
                .AddFuzzySet("Ammo_Low", p => p.AmmoStatus, FuzzySet.CreateTriangularSet, 0, 0, 10);

            mod.AddFuzzySet("Undesirable", p => p.Desireability, FuzzySet.CreateLeftShoulderSet, 0, 25, 50)
                .AddFuzzySet("Desirable", p => p.Desireability, FuzzySet.CreateTriangularSet, 25, 50, 75)
                .AddFuzzySet("VeryDesirable", p => p.Desireability, FuzzySet.CreateRightShoulderSet, 50, 75, 100);

            mod.AddFuzzySet("Target_Close", p => p.DistanceToTarget, FuzzySet.CreateLeftShoulderSet, 0, 25, 150)
            .AddFuzzySet("Target_Medium", p => p.DistanceToTarget, FuzzySet.CreateTriangularSet, 25, 150, 300)
            .AddFuzzySet( "Target_Far", p => p.DistanceToTarget, FuzzySet.CreateRightShoulderSet, 150, 300, 1000);

            //FuzzyVariable Desirability = m_FuzzyModule.CreateFLV("Desirability");
            //FuzzySetProxy Undesirable = Desirability.AddFuzzySet("Undesirable", FuzzySet.CreateLeftShoulderSet(0, 25, 50));
            //FuzzySetProxy Desirable = Desirability.AddFuzzySet("Desirable", FuzzySet.CreateTriangularSet(25, 50, 75));
            //FuzzySetProxy VeryDesirable = Desirability.AddFuzzySet("VeryDesirable", FuzzySet.CreateRightShoulderSet(50, 75, 100));

            //dynamic modwrapper = mod;

            dynamic modwrapper = mod.GetDynamic();

            //mod.WrapSet("Ammo_Loads").And(mod["Ammo_Okay"]);
            //.Or(mod.And(mod["DistanceOkay"], mod["Ammo_Low"])
            mod.AddRule(
                mod.WrapSet(modwrapper.Ammo_Loads)
                .Or(mod["Ammo_Okay"])
                .And(mod["Target_Medium"])
                , /* antecedent - If */
                mod.WrapSet("Desirable") /* consequence - then */
            );

            //FuzzySetProxy Ammo_Okay = AmmoStatus.AddFuzzySet("Ammo_Okay", FuzzySet.CreateTriangularSet(0, 10, 30));
            //FuzzySetProxy Ammo_Low = AmmoStatus.AddFuzzySet("Ammo_Low", FuzzySet.CreateTriangularSet(0, 0, 10));

            var ammoLoads = distanceVariable.AddFuzzySet("dont", FuzzySet.CreateTriangularSet(0, 50, 4000));
            var desirable = desireability.AddFuzzySet("dont", FuzzySet.CreateTriangularSet(0, 50, 4000));

            enemy.DistanceToTarget = 45;
            enemy.AmmoStatus = 5;
            enemy.Desireability = 23;

            // fuzzify some variables to be used
            //mod.Fuzzify(p => p.DistanceToTarget);
            //mod.Fuzzify(p => p.AmmoStatus);

            mod.Compile(
                p => p.DistanceToTarget,
                p => p.AmmoStatus);

            // get result
            mod.DeFuzzify(p => p.Desireability, m => m.DeFuzzifyCentroid(15));
            //mod.DeFuzzify(p => p.Desireability, m => m.DeFuzzifyMaxAv());

            //mod.Module.AddRule(new FuzzyOperatorAND(targetFar, ammoLoads), desirable);
            //mod.DeFuzzify(p => p.Desireability, DefuzzifyMethod.CENTROID);
        }
示例#23
0
        /// <summary>
        /// static VALUE r_object0(struct load_arg *arg, int *ivp, VALUE extmod)
        /// </summary>
        /// <param name="hasivp"></param>
        /// <param name="ivp"></param>
        /// <param name="extmod"></param>
        /// <returns></returns>
        public object ReadObject0(bool hasivp, ref bool ivp, List <FuzzyModule> extmod)
        {
            object v    = null;
            int    type = ReadByte();
            int    id;
            object link;

            switch (type)
            {
            case RubyMarshal.Types.Link:
                id = ReadLong();
                if (!this.m_objects.TryGetValue(id, out link))
                {
                    throw new InvalidDataException("dump format error (unlinked)");
                }
                v = link;
                if (this.m_proc != null)
                {
                    v = this.m_proc(v);
                }
                break;

            case RubyMarshal.Types.InstanceVariable:
            {
                bool ivar = true;
                v = ReadObject0(ref ivar, extmod);
                bool hasenc = false;
                if (ivar)
                {
                    ReadInstanceVariable(v, ref hasenc);
                }
            }
            break;

            case RubyMarshal.Types.Extended:
            {
                FuzzyModule m = FuzzyModule.GetModule(ReadUnique());
                if (extmod == null)
                {
                    extmod = new List <FuzzyModule>();
                }
                extmod.Add(m);
                v = ReadObject0(extmod);
                FuzzyObject fobj = v as FuzzyObject;
                if (fobj != null)
                {
                    fobj.ExtendModules.AddRange(extmod);
                }
            }
            break;

            case RubyMarshal.Types.UserClass:
            {
                FuzzyClass c = FuzzyClass.GetClass(ReadUnique());

                v = ReadObject0(extmod);
                if (v is FuzzyObject)
                {
                    (v as FuzzyObject).ClassName = c.Symbol;
                }
            }
            break;

            case RubyMarshal.Types.Nil:
                v = FuzzyNil.Instance;
                v = Leave(v);
                break;

            case RubyMarshal.Types.True:
                v = FuzzyBool.True;
                v = Leave(v);
                break;

            case RubyMarshal.Types.False:
                v = FuzzyBool.False;
                v = Leave(v);
                break;

            case RubyMarshal.Types.Fixnum:
                v = ReadLong();
                v = new FuzzyFixnum(Convert.ToInt64(v));
                v = Leave(v);
                break;

            case RubyMarshal.Types.Float:
            {
                double      d;
                FuzzyString fstr = ReadString();
                string      str  = fstr.Text;

                if (str == "inf")
                {
                    d = double.PositiveInfinity;
                }
                else if (str == "-inf")
                {
                    d = double.NegativeInfinity;
                }
                else if (str == "nan")
                {
                    d = double.NaN;
                }
                else
                {
                    if (str.Contains("\0"))
                    {
                        str = str.Remove(str.IndexOf("\0"));
                    }
                    d = Convert.ToDouble(str);
                }
                v = new FuzzyFloat(d);
                v = Entry(v);
                v = Leave(v);
            }
            break;

            case RubyMarshal.Types.Bignum:
            {
                int sign = 0;
                switch (ReadByte())
                {
                case 0x2b:
                    sign = 1;
                    break;

                case 0x2d:
                    sign = -1;
                    break;

                default:
                    sign = 0;
                    break;
                }
                int    num3  = ReadLong();
                int    index = num3 / 2;
                int    num5  = (num3 + 1) / 2;
                uint[] data  = new uint[num5];
                for (int i = 0; i < index; i++)
                {
                    data[i] = m_reader.ReadUInt32();
                }
                if (index != num5)
                {
                    data[index] = m_reader.ReadUInt16();
                }
                v = new FuzzyBignum(sign, data);
                v = new FuzzyBignumAdapter(v as FuzzyBignum);
                v = Entry(v);
                v = Leave(v);
            }
            break;

            case RubyMarshal.Types.String:
                v = Entry(ReadString());
                v = Leave(v);
                break;

            case RubyMarshal.Types.Regexp:
            {
                FuzzyString str          = ReadString();
                int         options      = ReadByte();
                bool        has_encoding = false;
                int         idx          = Prepare();
                if (hasivp)
                {
                    ReadInstanceVariable(str, ref has_encoding);
                    ivp = false;
                }
                if (!has_encoding)
                {
                    // TODO: 1.8 compatibility; remove escapes undefined in 1.8

                    /*
                     * char *ptr = RSTRING_PTR(str), *dst = ptr, *src = ptr;
                     * long len = RSTRING_LEN(str);
                     * long bs = 0;
                     * for (; len-- > 0; *dst++ = *src++) {
                     *  switch (*src) {
                     *      case '\\': bs++; break;
                     *      case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
                     *      case 'm': case 'o': case 'p': case 'q': case 'u': case 'y':
                     *      case 'E': case 'F': case 'H': case 'I': case 'J': case 'K':
                     *      case 'L': case 'N': case 'O': case 'P': case 'Q': case 'R':
                     *      case 'S': case 'T': case 'U': case 'V': case 'X': case 'Y':
                     *      if (bs & 1) --dst;
                     *      default: bs = 0; break;
                     *  }
                     * }
                     * rb_str_set_len(str, dst - ptr);
                     */
                }
                v = Entry0(new FuzzyRegexp(str, (FuzzyRegexpOptions)options), idx);
                v = Leave(v);
            }
            break;

            case RubyMarshal.Types.Array:
            {
                int        len = ReadLong();
                FuzzyArray ary = new FuzzyArray();
                v = ary;
                v = Entry(v);
                while (len-- > 0)
                {
                    ary.Push(ReadObject());
                }
                v = Leave(v);
            }
            break;

            case RubyMarshal.Types.Hash:
            case RubyMarshal.Types.HashWithDefault:
            {
                int       len  = ReadLong();
                FuzzyHash hash = new FuzzyHash();
                v = hash;
                v = Entry(v);
                while (len-- > 0)
                {
                    object key   = ReadObject();
                    object value = ReadObject();
                    hash.Add(key, value);
                }
                if (type == RubyMarshal.Types.HashWithDefault)
                {
                    hash.DefaultValue = ReadObject();
                }
                v = Leave(v);
            }
            break;

            case RubyMarshal.Types.Struct:
            {
                int         idx   = Prepare();
                FuzzyStruct obj   = new FuzzyStruct();
                FuzzySymbol klass = ReadUnique();
                obj.ClassName = klass;
                int len = ReadLong();
                v = obj;
                v = Entry0(v, idx);
                while (len-- > 0)
                {
                    FuzzySymbol key   = ReadSymbol();
                    object      value = ReadObject();
                    obj.InstanceVariable[key] = value;
                }
                v = Leave(v);
            }
            break;

            case RubyMarshal.Types.UserDefined:
            {
                FuzzySymbol klass  = ReadUnique();
                var         factor = Factory <byte[]> .Factor(klass.Name);

                if (factor == null)
                {
                    FuzzyString data = ReadString();
                    if (hasivp)
                    {
                        ReadInstanceVariable(data);
                        ivp = false;
                    }

                    FuzzyUserdefinedDumpObject obj = new FuzzyUserdefinedDumpObject();
                    obj.ClassName    = klass;
                    obj.DumpedObject = data.Raw;
                    v = obj;
                    v = Entry(v);
                    v = Leave(v);
                }
                else
                {
                    object obj = factor._dump(m_stream, null);
                    v = obj;
                    v = Entry(v);
                    v = Leave(v);
                }
            }
            break;

            case RubyMarshal.Types.UserMarshal:
            {
                FuzzySymbol klass = ReadUnique();
                FuzzyUserdefinedMarshalDumpObject obj = new FuzzyUserdefinedMarshalDumpObject();
                v = obj;
                if (extmod != null)
                {
                    AppendExtendedModule(obj, extmod);
                }
                v = Entry(v);
                object data = ReadObject();
                obj.ClassName    = klass;
                obj.DumpedObject = data;
                v = Leave(v);
                if (extmod != null)
                {
                    extmod.Clear();
                }
            }
            break;

            case RubyMarshal.Types.Object:
            {
                int         idx   = Prepare();
                FuzzyObject obj   = new FuzzyObject();
                FuzzySymbol klass = ReadUnique();
                obj.ClassName = klass;
                v             = obj;
                v             = Entry0(v, idx);
                ReadInstanceVariable(v);
                v = Leave(v);
            }
            break;

            case RubyMarshal.Types.Class:
            {
                FuzzyString str = ReadString();
                v = FuzzyClass.GetClass(FuzzySymbol.GetSymbol(str));
                v = Entry(v);
                v = Leave(v);
            }
            break;

            case RubyMarshal.Types.Module:
            {
                FuzzyString str = ReadString();
                v = FuzzyModule.GetModule(FuzzySymbol.GetSymbol(str));
                v = Entry(v);
                v = Leave(v);
            }
            break;

            case RubyMarshal.Types.Symbol:
                if (hasivp)
                {
                    v   = ReadSymbolReal(ivp);
                    ivp = false;
                }
                else
                {
                    v = ReadSymbolReal(false);
                }
                v = Leave(v);
                break;

            case RubyMarshal.Types.SymbolLink:
                v = ReadSymbolLink();
                break;

            case RubyMarshal.Types.Data:
            /*  TODO: Data Support
             *  {
             *      VALUE klass = path2class(r_unique(arg));
             *      VALUE oldclass = 0;
             *
             *      v = obj_alloc_by_klass(klass, arg, &oldclass);
             *      if (!RB_TYPE_P(v, T_DATA)) {
             *          rb_raise(rb_eArgError, "dump format error");
             *      }
             *      v = r_entry(v, arg);
             *      if (!rb_respond_to(v, s_load_data)) {
             *          rb_raise(rb_eTypeError, "class %s needs to have instance method `_load_data'", rb_class2name(klass));
             *      }
             *      rb_funcall(v, s_load_data, 1, r_object0(arg, 0, extmod));
             *      check_load_arg(arg, s_load_data);
             *      v = r_leave(v, arg);
             *  }
             */
            case RubyMarshal.Types.ModuleOld:
            /*
             *  TODO: ModuleOld Support
             *  {
             *      volatile VALUE str = r_bytes(arg);
             *      v = rb_path_to_class(str);
             *      v = r_entry(v, arg);
             *      v = r_leave(v, arg);
             *  }
             */
            default:
                throw new InvalidDataException(string.Format("dump format error(0x{0:X2})", type));
            }
            return(v);
        }
        protected override void Implication()
        {
            base.Implication();

            // -------------------------------------------------------------------------------------

            FuzzyObject <FuzzyInteractionModeTypes> resultOfNoErrorsAndMuchPositves =
                If(FuzzyErrorHistoryTypes.NoErrors)
                //.And(FuzzyPositiveHistoryTypes.MuchPositives)
                .Then(FuzzyInteractionModeTypes.Solving);

            FuzzyObject <FuzzyInteractionModeTypes> resultOfMuchErrorsOrNoPositivesOrMuchNeutrals =
                If(FuzzyErrorHistoryTypes.MuchErrors)
                //.Or(FuzzyPositiveHistoryTypes.NoPositives)
                //.Or(FuzzyNeutralHistoryTypes.MuchNeutrals)
                .Then(FuzzyInteractionModeTypes.Learning);

            _learningModeConditionResults.Clear();
            _learningModeConditionResults.Add(resultOfNoErrorsAndMuchPositves);
            _learningModeConditionResults.Add(resultOfMuchErrorsOrNoPositivesOrMuchNeutrals);

            // ToDo: Think about moving that stuff to base class and use a method like AddConditionResult(...)
            _conditionResults.Add(resultOfNoErrorsAndMuchPositves.NeutralType());
            _conditionResults.Add(resultOfMuchErrorsOrNoPositivesOrMuchNeutrals.NeutralType());

            AddDegree(resultOfNoErrorsAndMuchPositves.Value, resultOfNoErrorsAndMuchPositves.Degree);
            AddDegree(resultOfMuchErrorsOrNoPositivesOrMuchNeutrals.Value, resultOfMuchErrorsOrNoPositivesOrMuchNeutrals.Degree);

            // -------------------------------------------------------------------------------------

            FuzzyObject <FuzzyExpectationFactorTypes> resultOfPositiveLearningPlausibility =
                If(FuzzyPlausibilityOfPositiveFeedbackTypes.LearningPlausibility)
                .Factor(FuzzyInteractionModeTypes.Learning)
                .Then(FuzzyExpectationFactorTypes.PositiveFeedback);

            FuzzyObject <FuzzyExpectationFactorTypes> resultOfPositiveSolvingPlausibility =
                If(FuzzyPlausibilityOfPositiveFeedbackTypes.SolvingPlausibility)
                .Factor(Not(FuzzyInteractionModeTypes.Learning))
                .Then(FuzzyExpectationFactorTypes.PositiveFeedback);

            FuzzyObject <FuzzyExpectationFactorTypes> resultOfNegativeLearningPlausibility =
                If(FuzzyPlausibilityOfNegativeFeedbackTypes.LearningPlausibility)
                .Factor(FuzzyInteractionModeTypes.Learning)
                .Then(FuzzyExpectationFactorTypes.NegativeFeedback);

            FuzzyObject <FuzzyExpectationFactorTypes> resultOfNegativeSolvingPlausibility =
                If(FuzzyPlausibilityOfNegativeFeedbackTypes.SolvingPlausibility)
                .Factor(Not(FuzzyInteractionModeTypes.Learning))
                .Then(FuzzyExpectationFactorTypes.NegativeFeedback);

            _expectionFactorConditionResults.Clear();
            _expectionFactorConditionResults.Add(resultOfPositiveLearningPlausibility);
            _expectionFactorConditionResults.Add(resultOfPositiveSolvingPlausibility);
            _expectionFactorConditionResults.Add(resultOfNegativeLearningPlausibility);
            _expectionFactorConditionResults.Add(resultOfNegativeSolvingPlausibility);

            // ToDo: Think about moving that stuff to base class and use a method like AddConditionResult(...)
            _conditionResults.Add(resultOfPositiveLearningPlausibility.NeutralType());
            _conditionResults.Add(resultOfPositiveSolvingPlausibility.NeutralType());
            _conditionResults.Add(resultOfNegativeLearningPlausibility.NeutralType());
            _conditionResults.Add(resultOfNegativeSolvingPlausibility.NeutralType());

            // -------------------------------------------------------------------------------------
        }