/* */ #include "BDE.h" namespace aria2 { const BDE BDE::none; BDE::BDE():_type(TYPE_NONE), _bobject(new BObject()) {} BDE::BDE(Integer integer):_type(TYPE_INTEGER), _bobject(new BInteger(integer)) {} BDE::BDE(const std::string& string):_type(TYPE_STRING), _bobject(new BString(std::string(string))) {} BDE::BDE(const char* cstring):_type(TYPE_STRING), _bobject(new BString(std::string(cstring))) {} BDE::BDE(const char* data, size_t length): _type(TYPE_STRING), _bobject(new BString(std::string(&data[0], &data[length]))) {} BDE::BDE(const unsigned char* data, size_t length): _type(TYPE_STRING), _bobject(new BString(std::string(&data[0], &data[length]))) {} BDE BDE::dict() { BDE bde; bde._type = TYPE_DICT; bde._bobject.reset(new BDict()); return bde; } BDE BDE::list() { BDE bde; bde._type = TYPE_LIST; bde._bobject.reset(new BList()); return bde; } // Test for Null data bool BDE::isNone() const { return _type == TYPE_NONE; } // Integer Interface bool BDE::isInteger() const { return _type == TYPE_INTEGER; } BDE::Integer BDE::i() const { return _bobject->i(); } // String Interface bool BDE::isString() const { return _type == TYPE_STRING; } const std::string& BDE::s() const { return _bobject->s(); } const unsigned char* BDE::uc() const { return _bobject->uc(); } // Dictionary Interface bool BDE::isDict() const { return _type == TYPE_DICT; } BDE& BDE::operator[](const std::string& key) { return _bobject->operator[](key); } const BDE& BDE::operator[](const std::string& key) const { if(_bobject->containsKey(key)) { return _bobject->operator[](key); } else { return none; } } bool BDE::containsKey(const std::string& key) const { return _bobject->containsKey(key); } void BDE::removeKey(const std::string& key) { _bobject->removeKey(key); } BDE::Dict::iterator BDE::dictBegin() { return _bobject->dictBegin(); } BDE::Dict::const_iterator BDE::dictBegin() const { return _bobject->dictBegin(); } BDE::Dict::iterator BDE::dictEnd() { return _bobject->dictEnd(); } BDE::Dict::const_iterator BDE::dictEnd() const { return _bobject->dictEnd(); } // List Interface bool BDE::isList() const { return _type == TYPE_LIST; } void BDE::append(const BDE& bde) { _bobject->append(bde); } void BDE::operator<<(const BDE& bde) { _bobject->operator<<(bde); } BDE& BDE::operator[](size_t index) { return _bobject->operator[](index); } const BDE& BDE::operator[](size_t index) const { return _bobject->operator[](index); } BDE::List::iterator BDE::listBegin() { return _bobject->listBegin(); } BDE::List::const_iterator BDE::listBegin() const { return _bobject->listBegin(); } BDE::List::iterator BDE::listEnd() { return _bobject->listEnd(); } BDE::List::const_iterator BDE::listEnd() const { return _bobject->listEnd(); } // Callable from List and Dict size_t BDE::size() const { return _bobject->size(); } // Callable from List and Dict bool BDE::empty() const { return _bobject->empty(); } } // namespace aria2