bmstu-rk6 / libgod

Global Optimization Data Library
BSD 3-Clause "New" or "Revised" License
6 stars 2 forks source link

storage::read doesn't work #6

Closed krouk closed 12 years ago

krouk commented 12 years ago

Привет. Может я сам и внес багу, криво добавив Union::Union(). Но он по-любому нужен для того, чтобы инициализировать множества из файла. Я использовал вот такой код: libgod::Union un; libgod::Storage st( argv[1] );

    st.read(un);

    //Print dump to stdout
    st.dump(std::cout, un);

И вывод получается как будто ничего не было считано. Вывод dump() как раз это и показывает:

1
1 1 0
theirix commented 12 years ago

Добавлен конструктор Union, который инициализирует объект как bare (без инициализации).

krouk commented 12 years ago

ну судя по обновлению теста 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);

Тут получается два интересных случай.

  1. Я создал юнион вот таким кодом:

    //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>

То есть лучше, чем раньше было (появилась информация о сете), но параметры все равно неправильные.

  1. Если я создал юнион с непустым сетом, например, так:

    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

theirix commented 12 years ago

boost::too_few_args пофиксил в 90f311b

krouk commented 12 years ago

хм... после твоего фикса Print error: parameter index 1 is out of range 1