/* */ #include "BencodeVisitor.h" #include "Data.h" #include "List.h" #include "Dictionary.h" #include "Util.h" #include #include namespace aria2 { 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"; std::for_each(l->getList().begin(), l->getList().end(), std::bind2nd(std::mem_fun(&MetaEntry::accept), this)); _bencodedData += "e"; } void BencodeVisitor::visit(const Dictionary* d) { _bencodedData += "d"; for(std::deque::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(reinterpret_cast(e)); } else if(dynamic_cast(e) != 0) { visit(reinterpret_cast(e)); } else if(dynamic_cast(e) != 0) { visit(reinterpret_cast(e)); } } } // namespace aria2