/* */ #include "ValueBase.h" namespace aria2 { const std::shared_ptr ValueBase::none; String::String(const ValueType& string):str_(string) {} String::String(const char* cstring):str_(cstring) {} String::String(const char* data, size_t length):str_(&data[0], &data[length]) {} String::String(const unsigned char* data, size_t length): str_(&data[0], &data[length]) {} String::String() {} String::~String() {} const String::ValueType& String::s() const { return str_; } const unsigned char* String::uc() const { return reinterpret_cast(str_.data()); } std::shared_ptr String::g(const ValueType& string) { return std::shared_ptr(new String(string)); } std::shared_ptr String::g(const unsigned char* data, size_t length) { return std::shared_ptr(new String(data, length)); } void String::accept(ValueBaseVisitor& v) const { v.visit(*this); } Integer::Integer(ValueType integer):integer_(integer) {} Integer::Integer():integer_(0) {} Integer::~Integer() {} Integer::ValueType Integer::i() const { return integer_; } std::shared_ptr Integer::g(ValueType integer) { return std::shared_ptr(new Integer(integer)); } void Integer::accept(ValueBaseVisitor& v) const { v.visit(*this); } const std::shared_ptr Bool::trueValue_(new Bool(true)); const std::shared_ptr Bool::falseValue_(new Bool(false)); std::shared_ptr Bool::gTrue() { return trueValue_; } std::shared_ptr Bool::gFalse() { return falseValue_; } bool Bool::val() const { return val_; } void Bool::accept(ValueBaseVisitor& v) const { v.visit(*this); } Bool::Bool(bool val):val_(val) {} const std::shared_ptr Null::nullValue_(new Null()); std::shared_ptr Null::g() { return nullValue_; } void Null::accept(ValueBaseVisitor& v) const { v.visit(*this); } Null::Null() {} List::List() {} List::~List() {} const std::shared_ptr& List::get(size_t index) const { return list_[index]; } void List::set(size_t index, const std::shared_ptr& v) { list_[index] = v; } void List::append(const std::shared_ptr& v) { list_.push_back(v); } void List::append(const String::ValueType& string) { list_.push_back(String::g(string)); } List& List::operator<<(const std::shared_ptr& v) { list_.push_back(v); return *this; } const std::shared_ptr& List::operator[](size_t index) const { return list_[index]; } List::ValueType::iterator List::begin() { return list_.begin(); } List::ValueType::iterator List::end() { return list_.end(); } List::ValueType::const_iterator List::begin() const { return list_.begin(); } List::ValueType::const_iterator List::end() const { return list_.end(); } size_t List::size() const { return list_.size(); } bool List::empty() const { return list_.empty(); } std::shared_ptr List::g() { return std::shared_ptr(new List()); } void List::accept(ValueBaseVisitor& v) const { v.visit(*this); } Dict::Dict() {} Dict::~Dict() {} void Dict::put(const std::string& key, const std::shared_ptr& vlb) { ValueType::value_type p = std::make_pair(key, vlb); std::pair r = dict_.insert(p); if(!r.second) { (*r.first).second = vlb; } } void Dict::put(const std::string& key, const String::ValueType& string) { put(key, String::g(string)); } const std::shared_ptr& Dict::get(const std::string& key) const { ValueType::const_iterator itr = dict_.find(key); if(itr == dict_.end()) { return ValueBase::none; } else { return (*itr).second; } } std::shared_ptr& Dict::get(const std::string& key) { ValueType::iterator itr = dict_.find(key); if(itr == dict_.end()) { return dict_[key]; } else { return (*itr).second; } } std::shared_ptr& Dict::operator[](const std::string& key) { return get(key); } const std::shared_ptr& Dict::operator[](const std::string& key) const { return get(key); } bool Dict::containsKey(const std::string& key) const { return dict_.count(key) == 1; } void Dict::removeKey(const std::string& key) { dict_.erase(key); } Dict::ValueType::iterator Dict::begin() { return dict_.begin(); } Dict::ValueType::iterator Dict::end() { return dict_.end(); } Dict::ValueType::const_iterator Dict::begin() const { return dict_.begin(); } Dict::ValueType::const_iterator Dict::end() const { return dict_.end(); } size_t Dict::size() const { return dict_.size(); } bool Dict::empty() const { return dict_.empty(); } std::shared_ptr Dict::g() { return std::shared_ptr(new Dict()); } void Dict::accept(ValueBaseVisitor& v) const { v.visit(*this); } } // namespace aria2