Chris@16: // Copyright David Abrahams 2002. Chris@16: // Distributed under the Boost Software License, Version 1.0. (See Chris@16: // accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: #ifndef DICT_20020706_HPP Chris@16: #define DICT_20020706_HPP Chris@16: Chris@16: # include Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost { namespace python { Chris@16: Chris@16: class dict; Chris@16: Chris@16: namespace detail Chris@16: { Chris@16: struct BOOST_PYTHON_DECL dict_base : object Chris@16: { Chris@16: // D.clear() -> None. Remove all items from D. Chris@16: void clear(); Chris@16: Chris@16: // D.copy() -> a shallow copy of D Chris@16: dict copy(); Chris@16: Chris@16: // D.get(k[,d]) -> D[k] if D.has_key(k), else d. d defaults to None. Chris@16: object get(object_cref k) const; Chris@16: Chris@16: object get(object_cref k, object_cref d) const; Chris@16: Chris@16: // D.has_key(k) -> 1 if D has a key k, else 0 Chris@16: bool has_key(object_cref k) const; Chris@16: Chris@16: // D.items() -> list of D's (key, value) pairs, as 2-tuples Chris@16: list items() const; Chris@16: Chris@16: // D.iteritems() -> an iterator over the (key, value) items of D Chris@16: object iteritems() const; Chris@16: Chris@16: // D.iterkeys() -> an iterator over the keys of D Chris@16: object iterkeys() const; Chris@16: Chris@16: // D.itervalues() -> an iterator over the values of D Chris@16: object itervalues() const; Chris@16: Chris@16: // D.keys() -> list of D's keys Chris@16: list keys() const; Chris@16: Chris@16: // D.popitem() -> (k, v), remove and return some (key, value) pair as a Chris@16: // 2-tuple; but raise KeyError if D is empty Chris@16: tuple popitem(); Chris@16: Chris@16: // D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if not D.has_key(k) Chris@16: object setdefault(object_cref k); Chris@16: Chris@16: object setdefault(object_cref k, object_cref d); Chris@16: Chris@16: // D.update(E) -> None. Update D from E: for k in E.keys(): D[k] = E[k] Chris@16: void update(object_cref E); Chris@16: Chris@16: // D.values() -> list of D's values Chris@16: list values() const; Chris@16: Chris@16: protected: Chris@16: // dict() -> new empty dictionary. Chris@16: // dict(mapping) -> new dictionary initialized from a mapping object's Chris@16: // (key, value) pairs. Chris@16: // dict(seq) -> new dictionary initialized as if via: Chris@16: dict_base(); // new dict Chris@16: explicit dict_base(object_cref data); Chris@16: Chris@16: BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(dict_base, object) Chris@16: private: Chris@16: static detail::new_reference call(object const&); Chris@16: }; Chris@16: } Chris@16: Chris@16: class dict : public detail::dict_base Chris@16: { Chris@16: typedef detail::dict_base base; Chris@16: public: Chris@16: // dict() -> new empty dictionary. Chris@16: // dict(mapping) -> new dictionary initialized from a mapping object's Chris@16: // (key, value) pairs. Chris@16: // dict(seq) -> new dictionary initialized as if via: Chris@16: dict() {} // new dict Chris@16: Chris@16: template Chris@16: explicit dict(T const& data) Chris@16: : base(object(data)) Chris@16: { Chris@16: } Chris@16: Chris@16: template Chris@16: object get(T const& k) const Chris@16: { Chris@16: return base::get(object(k)); Chris@16: } Chris@16: Chris@16: template Chris@16: object get(T1 const& k, T2 const& d) const Chris@16: { Chris@16: return base::get(object(k),object(d)); Chris@16: } Chris@16: Chris@16: template Chris@16: bool has_key(T const& k) const Chris@16: { Chris@16: return base::has_key(object(k)); Chris@16: } Chris@16: Chris@16: template Chris@16: object setdefault(T const& k) Chris@16: { Chris@16: return base::setdefault(object(k)); Chris@16: } Chris@16: Chris@16: template Chris@16: object setdefault(T1 const& k, T2 const& d) Chris@16: { Chris@16: return base::setdefault(object(k),object(d)); Chris@16: } Chris@16: Chris@16: template Chris@16: void update(T const& E) Chris@16: { Chris@16: base::update(object(E)); Chris@16: } Chris@16: Chris@16: public: // implementation detail -- for internal use only Chris@16: BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(dict, base) Chris@16: }; Chris@16: Chris@16: // Chris@16: // Converter Specializations Chris@16: // Chris@16: namespace converter Chris@16: { Chris@16: template <> Chris@16: struct object_manager_traits Chris@16: : pytype_object_manager_traits<&PyDict_Type,dict> Chris@16: { Chris@16: }; Chris@16: } Chris@16: Chris@16: }} // namespace boost::python Chris@16: Chris@16: #endif Chris@16: