/** AddFirst * * Enumerable * */ public void AddFirst(ModeIEnumerable a_mode, JsonItem a_from_member_jsonitem, System.Collections.IEnumerable a_to_enumerable, System.Reflection.MethodInfo a_to_methodinfo, System.Type a_to_listitem_type) { JsonItemToObject_WorkPool_Item t_item = new JsonItemToObject_WorkPool_Item(); { //モード。 t_item.mode = (int)a_mode; //設定元。 t_item.from_value_jsonitem = a_from_member_jsonitem; t_item.from_key_jsonitem = null; //設定先。 t_item.to_value_type = a_to_listitem_type; t_item.to_key_type = null; t_item.to_value_object = null; t_item.to_key_object = null; t_item.to_list = null; t_item.to_index = 0; t_item.to_dictionary = null; t_item.to_fieldinfo = null; t_item.to_parent_object = null; t_item.to_enumerable = a_to_enumerable; t_item.to_methodinfo = a_to_methodinfo; } this.list.AddFirst(t_item); }
/** AddFirst * * Dictionary。追加。 * */ public void AddFirst(ModeAddStringDictionary a_mode, JsonItem a_from_listitem_jsonitem, string a_from_key_string, System.Collections.IDictionary a_to_dictionary, System.Type a_to_listitem_type) { JsonItemToObject_WorkPool_Item t_item = new JsonItemToObject_WorkPool_Item(); { //モード。 t_item.mode = (int)a_mode; //設定元。 t_item.from_value_jsonitem = a_from_listitem_jsonitem; t_item.from_key_jsonitem = null; //設定先。 t_item.to_value_type = a_to_listitem_type; t_item.to_key_type = null; t_item.to_value_object = null; t_item.to_key_object = a_from_key_string; t_item.to_list = null; t_item.to_index = 0; t_item.to_dictionary = a_to_dictionary; t_item.to_fieldinfo = null; t_item.to_parent_object = null; t_item.to_enumerable = null; t_item.to_methodinfo = null; } this.list.AddFirst(t_item); }
/** 更新。 */ public void Main() { while (true) { int t_count = this.list.Count; if (t_count > 0) { JsonItemToObject_WorkPool_Item t_current_work = this.list.First.Value; this.list.RemoveFirst(); this.Main_Item(t_current_work); //たぶん無限ループ。 if (t_count > Config.POOL_MAX) { this.list.Clear(); Tool.Assert(false); } } else { break; } } }
/** 更新。 */ private void Main_Item(JsonItemToObject_WorkPool_Item a_item) { switch (a_item.mode) { case (int)ModeSetList.Start: { //List。設定。 //JsonItemから型を決める。 if (a_item.to_value_type == typeof(System.Object)) { a_item.to_value_type = ValueType_ConvertToType.Get(a_item.from_value_jsonitem); } //インスタンス作成。 JsonItemToObject_CreateInstance.Create(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem); if (a_item.to_value_type.IsClass == true) { //メンバーの設定。 JsonItemToObject.Convert(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem, this); //リストに設定。 a_item.to_list[a_item.to_index] = a_item.to_value_object; } else { //差し込み位置。 System.Collections.Generic.LinkedListNode <JsonItemToObject_WorkPool_Item> t_first_node = this.list.First; //メンバーの設定。 JsonItemToObject.Convert(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem, this); //再登録。 a_item.mode = (int)ModeSetList.Fix; //差し込み。 if (t_first_node != null) { this.list.AddBefore(t_first_node, a_item); } else { this.list.AddLast(a_item); } } } break; case (int)ModeSetList.Fix: { //List。設定。 //リストに設定。 try{ a_item.to_list[a_item.to_index] = a_item.to_value_object; }catch (System.Exception t_exception) { Tool.DebugReThrow(t_exception); } } break; case (int)ModeAddList.Start: { //List。追加。 //JsonItemから型を決める。 if (a_item.to_value_type == typeof(System.Object)) { a_item.to_value_type = ValueType_ConvertToType.Get(a_item.from_value_jsonitem); } //インスタンス作成。 JsonItemToObject_CreateInstance.Create(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem); if (a_item.to_value_type.IsClass == true) { //メンバーの設定。 JsonItemToObject.Convert(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem, this); //リストに設定。 a_item.to_list.Add(a_item.to_value_object); } else { //差し込み位置。 System.Collections.Generic.LinkedListNode <JsonItemToObject_WorkPool_Item> t_first_node = this.list.First; //メンバーの設定。 JsonItemToObject.Convert(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem, this); //再登録。 a_item.mode = (int)ModeAddList.Fix; //差し込み。 if (t_first_node != null) { this.list.AddBefore(t_first_node, a_item); } else { this.list.AddLast(a_item); } } } break; case (int)ModeAddList.Fix: { //List。追加。 //リストに追加。 try{ a_item.to_list.Add(a_item.to_value_object); }catch (System.Exception t_exception) { Tool.DebugReThrow(t_exception); } } break; case (int)ModeAddStringDictionary.Start: { //Dictionary。追加。 //JsonItemから型を決める。 if (a_item.to_value_type == typeof(System.Object)) { a_item.to_value_type = ValueType_ConvertToType.Get(a_item.from_value_jsonitem); } //インスタンス作成。 JsonItemToObject_CreateInstance.Create(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem); if (a_item.to_value_type.IsClass == true) { //メンバーの設定。 JsonItemToObject.Convert(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem, this); //リストに設定。 a_item.to_dictionary.Add(a_item.to_key_object, a_item.to_value_object); } else { //差し込み位置。 System.Collections.Generic.LinkedListNode <JsonItemToObject_WorkPool_Item> t_first_node = this.list.First; //メンバーの設定。 JsonItemToObject.Convert(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem, this); //再登録。 a_item.mode = (int)ModeAddStringDictionary.Fix; //差し込み。 if (t_first_node != null) { this.list.AddBefore(t_first_node, a_item); } else { this.list.AddLast(a_item); } } } break; case (int)ModeAddStringDictionary.Fix: { //Dictionary。追加。 //リストに追加。 try{ a_item.to_dictionary.Add(a_item.to_key_object, a_item.to_value_object); }catch (System.Exception t_exception) { Tool.DebugReThrow(t_exception); } } break; case (int)ModeAddAnyDictionary.Start: { //Dictionary。追加。 //JsonItemから型を決める。 if (a_item.to_key_type == typeof(System.Object)) { a_item.to_key_type = ValueType_ConvertToType.Get(a_item.from_key_jsonitem); } //JsonItemから型を決める。 if (a_item.to_value_type == typeof(System.Object)) { a_item.to_value_type = ValueType_ConvertToType.Get(a_item.from_value_jsonitem); } if ((a_item.to_key_type.IsClass == true) && (a_item.to_value_type.IsClass == true)) { //キーの作成。 JsonItemToObject_CreateInstance.Create(ref a_item.to_key_object, a_item.to_key_type, a_item.from_key_jsonitem); JsonItemToObject.Convert(ref a_item.to_key_object, a_item.to_key_type, a_item.from_key_jsonitem, this); //値の作成。 JsonItemToObject_CreateInstance.Create(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem); JsonItemToObject.Convert(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem, this); //リストに設定。 a_item.to_dictionary.Add(a_item.to_key_object, a_item.to_value_object); } else { //差し込み位置。 System.Collections.Generic.LinkedListNode <JsonItemToObject_WorkPool_Item> t_first_node = this.list.First; //キーの作成。 JsonItemToObject_CreateInstance.Create(ref a_item.to_key_object, a_item.to_key_type, a_item.from_key_jsonitem); JsonItemToObject.Convert(ref a_item.to_key_object, a_item.to_key_type, a_item.from_key_jsonitem, this); //値の作成。 JsonItemToObject_CreateInstance.Create(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem); JsonItemToObject.Convert(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem, this); //再登録。 a_item.mode = (int)ModeAddAnyDictionary.Fix; //差し込み。 if (t_first_node != null) { this.list.AddBefore(t_first_node, a_item); } else { this.list.AddLast(a_item); } } } break; case (int)ModeAddAnyDictionary.Fix: { //Dictionary。追加。 //リストに追加。 try{ a_item.to_dictionary.Add(a_item.to_key_object, a_item.to_value_object); }catch (System.Exception t_exception) { Tool.DebugReThrow(t_exception); } } break; case (int)ModeFieldInfo.Start: { //FieldInfo。 //JsonItemから型を決める。 if (a_item.to_value_type == typeof(System.Object)) { a_item.to_value_type = ValueType_ConvertToType.Get(a_item.from_value_jsonitem); } //インスタンスの作成。 JsonItemToObject_CreateInstance.Create(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem); if (a_item.to_value_type.IsClass == true) { //メンバーの設定。 JsonItemToObject.Convert(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem, this); //フィールドに設定。 a_item.to_fieldinfo.SetValue(a_item.to_parent_object, a_item.to_value_object); } else { //差し込み位置。 System.Collections.Generic.LinkedListNode <JsonItemToObject_WorkPool_Item> t_first_node = this.list.First; //メンバーの設定。 JsonItemToObject.Convert(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem, this); //再登録。 a_item.mode = (int)ModeFieldInfo.Fix; //差し込み。 if (t_first_node != null) { this.list.AddBefore(t_first_node, a_item); } else { this.list.AddLast(a_item); } } } break; case (int)ModeFieldInfo.Fix: { //FieldInfo。 //フィールドに設定。 try{ a_item.to_fieldinfo.SetValue(a_item.to_parent_object, a_item.to_value_object); }catch (System.Exception t_exception) { Tool.DebugReThrow(t_exception); } } break; case (int)ModeIEnumerable.Start_Param1: { //Generic.Stack //Generic.LinkedList //Generic.HashSet //Generic.Queue //Generic.SortedSet //JsonItemから型を決める。 if (a_item.to_value_type == typeof(System.Object)) { a_item.to_value_type = ValueType_ConvertToType.Get(a_item.from_value_jsonitem); } System.Type t_generic_type = Fee.ReflectionTool.Utility.GetGenericTypeDefinition(a_item.to_enumerable.GetType()); //インスタンス作成。 JsonItemToObject_CreateInstance.Create(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem); //■メンバーの設定。 JsonItemToObject.Convert(ref a_item.to_value_object, a_item.to_value_type, a_item.from_value_jsonitem, this); //パラメータリスト。 this.temp_parameter_list_1[0] = a_item.to_value_object; //呼び出し。 try{ a_item.to_methodinfo.Invoke(a_item.to_enumerable, this.temp_parameter_list_1); }catch (System.Exception t_exception) { Tool.DebugReThrow(t_exception); } } break; } }