/* */ #include "BencodeVisitor.h" #include "Data.h" #include "List.h" #include "Dictionary.h" #include "Util.h" BencodeVisitor::BencodeVisitor() {} BencodeVisitor::~BencodeVisitor() {} void BencodeVisitor::visit(const Data* d) { if(d->isNumber()) { _bencodedData += "i"+d->toString()+"e"; } else { _bencodedData += Util::itos(d->getLen())+":"+d->toString(); } } void BencodeVisitor::visit(const List* l) { _bencodedData += "l"; for_each(l->getList().begin(), l->getList().end(), bind2nd(mem_fun(&MetaEntry::accept), this)); _bencodedData += "e"; } void BencodeVisitor::visit(const Dictionary* d) { _bencodedData += "d"; for(Order::const_iterator itr = d->getOrder().begin(); itr != d->getOrder().end(); ++itr) { _bencodedData += Util::itos((int32_t)(*itr).size()); _bencodedData += ":"; _bencodedData += *itr; d->get(*itr)->accept(this); } _bencodedData += "e"; } void BencodeVisitor::visit(const MetaEntry* e) { if(dynamic_cast(e) != 0) { visit((const Data*)e); } else if(dynamic_cast(e) != 0) { visit((const List*)e); } else if(dynamic_cast(e) != 0) { visit((const Dictionary*)e); } }