Есть кто, понимающий в C++?

Есть кто, понимающий в C++?

Сообщение Nafania » 03 окт 2010, 18:20

Есть небольшое, но маленькое дело.

Есть код, вот такой - download/file.php?id=188

В файле Tracker/server.cpp , после строки 618 надо добавить условие
Код: Выделить всё
//если файл изменен и присутствует, то чистим пиров
if ( file.flags == 9 && file.fid ) {
file.peers.erase();
}


То есть суть кода, надо удалить из массива (?) peers, относящегося к данному file, все данные (то есть именно тех пиров, которые принадлежат только к file с этим id). Очистить массив этот.

Как это можно сделать (вышенаписанный код, вестимо, не работает)?
Аватара пользователя
Nafania
Администратор
 
Сообщения: 1207
Зарегистрирован: 30 июн 2007, 16:10

Re: Есть кто, понимающий в C++?

Сообщение VladX » 03 окт 2010, 20:07

Два раза перечитал, так и не понял какая именно помощь от меня требуется. Нужно освободить память, занимаемую объектом?
небольшое, но маленькое

как то странно Вы союз «но» употребили :) "масляное, но масляное?"
VladX
 
Сообщения: 3
Зарегистрирован: 25 янв 2010, 14:36
Адрес трекера: http://vladx.net

Re: Есть кто, понимающий в C++?

Сообщение Nafania » 03 окт 2010, 20:18

VladX писал(а):Два раза перечитал, так и не понял какая именно помощь от меня требуется. Нужно освободить память, занимаемую объектом?

Мне сложно сказать, я в ц++ полный 0.
Если вы видели код, то могли бы понять.
Есть массив (объект) - file.
У него есть свойства, я так понимаю, типа file.fid, file.ctime, file.seeders etc
На строке 373 я вижу вот такой код
Код: Выделить всё
file.peers.erase(peer_key);

который, как я понимаю, удаяет из свойства peers объекта file определенного пира по ключу peer_key.
Моя же задача удалить ВСЕХ пиров из объекта file, относящихся к данному конкретному file.
На php это было бы примерно так:
Код: Выделить всё
unset($file[$file['fid']]['peers']);

написал корявенько, но чтобы было близко к сишному коду.

VladX писал(а):
небольшое, но маленькое

как то странно Вы союз «но» употребили :) "масляное, но масляное?"

Это просто цитата такая :), не обращайте внимания.
Аватара пользователя
Nafania
Администратор
 
Сообщения: 1207
Зарегистрирован: 30 июн 2007, 16:10

Re: Есть кто, понимающий в C++?

Сообщение MiF » 03 окт 2010, 20:47

Насколько я понял Вам нужно следующее:
Код: Выделить всё
file.peers.clear();
MiF
 
Сообщения: 1
Зарегистрирован: 19 апр 2008, 01:07

Re: Есть кто, понимающий в C++?

Сообщение Nafania » 03 окт 2010, 20:56

MiF писал(а):Насколько я понял Вам нужно следующее:
Код: Выделить всё
file.peers.clear();

Видимо да, почитал ман и понял разницу.
Премного благодарен, xbtt скомпилировался, буду тестить.
Аватара пользователя
Nafania
Администратор
 
Сообщения: 1207
Зарегистрирован: 30 июн 2007, 16:10

Re: Есть кто, понимающий в C++?

Сообщение VladX » 03 окт 2010, 20:57

В код не смотрел, но возможно это то
Код: Выделить всё
file.peers.erase(file.peers.begin(), file.peers.end());

если не заработает, напишите.
VladX
 
Сообщения: 3
Зарегистрирован: 25 янв 2010, 14:36
Адрес трекера: http://vladx.net

Re: Есть кто, понимающий в C++?

Сообщение VladX » 03 окт 2010, 20:57

Упс, опоздал, решение найдено :)
VladX
 
Сообщения: 3
Зарегистрирован: 25 янв 2010, 14:36
Адрес трекера: http://vladx.net

Re: Есть кто, понимающий в C++?

Сообщение Nafania » 11 окт 2010, 21:14

Вопрос по той же теме.
Значится в том же месте, кусок кода:

Код: Выделить всё
            t_file& file = m_files[row[0].s()];
            //do not update some info if file already present but want to updated (flags = 9), cause correct info will be replaced with info from db
            if ( !file.fid ) {
                file.completed = row[1].i();
                file.dirty = false;
            }
            file.fid = row[2].i();           
            file.ctime = row[3].i();
            file.hidden = row[4].i();
            file.free = row[5].i();
            file.flags = row[6].i();
           
            //if file changed we clearing peers and update db (dirty = true)
            if ( file.flags == 9 ) {
                file.peers.clear();
                file.seeders = 0;
                file.leechers = 0;
                file.dirty = true;
            }   



Такая вот незадача, когда читаются измененные торренты (с флагом 9), то получается, что в m_files попадают торренты с одинаковым fid, но разными хешами и после этого случаются разные косяки.
Как можно удалить из m_files удалить торренты по fid, а не по хешу (ибо старый хеш неизвестнен)?
Аватара пользователя
Nafania
Администратор
 
Сообщения: 1207
Зарегистрирован: 30 июн 2007, 16:10


Вернуться в Разговоры на темы программирования

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron