@@ -37,36 +37,48 @@ namespace Read_Txt_Input
3737 = Read_Txt_Tools::read_file_to_map (file_name, {" #" ," \\ " }, true );
3838 for (const auto & input_read : inputs_read)
3939 {
40- const auto ptr = this ->input .list .find (input_read.first );
41- if (ptr ==this ->input .list .end ())
40+ const auto item_ptr = this ->input .list .find (input_read.first );
41+ if (item_ptr ==this ->input .list .end ())
4242 throw std::out_of_range (" input_read.first" );
43+ Read_Txt_Input::Input_Item &item = item_ptr->second ;
4344
44- // if(input_read.second.size() > ptr->second.values.size())
45- if (input_read.second .size () != ptr->second .values .size ())
46- throw std::out_of_range (
47- " size of INPUT " +ptr->second .label +" needs " +std::to_string (ptr->second .values .size ())
48- +" but reads " +std::to_string (input_read.second .size ()));
45+ item.values_size_read = input_read.second .size ();
46+ if (item.values .size ()<input_read.second .size ())
47+ {
48+ item.values .resize (input_read.second .size ());
49+ item.values_type .resize (input_read.second .size ()," s" );
50+ }
4951
5052 for (size_t i=0 ; i<input_read.second .size (); ++i)
51- ptr->second .values [i].sets (input_read.second [i]);
52- // ptr->second.value_read_size = input_read.second.size();
53+ item.values [i].sets (input_read.second [i]);
5354 }
5455 }
5556
5657 void Input_Process::check_transform ()
5758 {
58- for (auto &item : this ->input .list )
59+ for (auto &tmp : this ->input .list )
5960 {
60- item.second .check_transform (item.second );
61+ Read_Txt_Input::Input_Item &item = tmp.second ;
62+
63+ if ( item.values_size_read >=0 &&
64+ (item.values_size_read <item.values_size_lower_limit ||
65+ item.values_size_read >item.values_size_upper_limit ))
66+ {
67+ throw std::out_of_range (
68+ " size of INPUT " +item.label +" needs in [" +std::to_string (item.values_size_lower_limit )+" ," +std::to_string (item.values_size_upper_limit )+" ]"
69+ +" but reads " +std::to_string (item.values_size_read ));
70+ }
6171
62- for (size_t i=0 ; i<item.second .values .size (); ++i)
72+ item.check_transform (item);
73+
74+ for (size_t i=0 ; i<item.values .size (); ++i)
6375 {
64- if (item.second . values_type [i]==" b" )
76+ if (item.values_type [i]==" b" )
6577 {
66- if (!Read_Txt_Tools::in_set ( item.second . values [i].gets (), Read_Txt_Tools::Preset::Bool))
67- throw std::invalid_argument (" INPUT " +item.second . label +" must be bool" );
78+ if (!Read_Txt_Tools::in_set ( item.values [i].gets (), Read_Txt_Tools::Preset::Bool))
79+ throw std::invalid_argument (" INPUT " +item.label +" must be bool" );
6880 }
69- }
81+ }
7082 }
7183 this ->check_transform_global (this ->input .list );
7284 }
@@ -83,15 +95,15 @@ namespace Read_Txt_Input
8395 std::ofstream ofs (file_name);
8496 for (const std::string &label : this ->input .output_labels )
8597 {
86- const auto ptr = this ->input .list .find (label);
87- if (ptr ==this ->input .list .end ())
98+ const auto item_ptr = this ->input .list .find (label);
99+ if (item_ptr ==this ->input .list .end ())
88100 {
89101 ofs<<std::endl<<" # " <<label<<std::endl;
90102 }
91103 else
92104 {
93105 ofs<<label<<" \t " ;
94- const Read_Txt_Input::Input_Item &item = ptr ->second ;
106+ const Read_Txt_Input::Input_Item &item = item_ptr ->second ;
95107 for (size_t i=0 ; i<item.values .size (); ++i)
96108 {
97109 if (item.values_type [i]==" s" )
0 commit comments