Closed krouk closed 12 years ago
Добавлен конструктор Union
, который инициализирует объект как bare (без инициализации).
ну судя по обновлению теста test_storage немного не то получилось. Ты все равно передаешь union параметры:
libgod::Union nunion(dp,dc);
storage.read(nunion);
storage.dump(std::cout, nunion);
Тут больше интересует случай, когда мы делаем вот так:
libgod::Union un;
libgod::Storage st( argv[1] );
st.read(un);
//Print dump to stdout
st.dump(std::cout, un);
Тут получается два интересных случай.
Я создал юнион вот таким кодом:
//input.union1: Union with 1 empty set
libgod::Union un1(10,7);
libgod::Set& s = un1.add();
libgod::Storage st1("input.union1");
st1.write(un1);
// Print dump to cout
st1.dump(std::cout, un1);
В ответ st1.dump(std::cout, un1) распечатало все правильно. Но если я использую код, который привел в самом начале, чтобы попытаться тоже вывести дамп, то получается вывод вот такой:
<God>
<header>
<version>1</version>
<comment></comment>
</header>
<metric>
<parameterDim>1</parameterDim>
<criteriaDim>1</criteriaDim>
<setsCount>1</setsCount>
</metric>
<union>
<Set>
<pointCount>0</pointCount>
<points>
</points>
</Set>
</union>
</God>
То есть лучше, чем раньше было (появилась информация о сете), но параметры все равно неправильные.
Если я создал юнион с непустым сетом, например, так:
const size_t dp = 2, dc = 3;
libgod::Union un3(dp,dc);
for (int i=0; i<10; i++) {
libgod::Set& s = un3.add();
for (int j=0; j<(i+1); j++)
s.add(randPoint(dp,dc));
}
libgod::Storage st3("input.union3");
st3.write(un3);
st3.dump(std::cout, un3);
То при попытке использовать код для распечатки (из начала) получаю ошибку:
Print error: boost::too_few_args: format-string referred to more arguments than were passed
boost::too_few_args пофиксил в 90f311b
хм... после твоего фикса Print error: parameter index 1 is out of range 1
Привет. Может я сам и внес багу, криво добавив Union::Union(). Но он по-любому нужен для того, чтобы инициализировать множества из файла. Я использовал вот такой код: libgod::Union un; libgod::Storage st( argv[1] );
И вывод получается как будто ничего не было считано. Вывод dump() как раз это и показывает: