1 // ---------------------------------------------------------------------------- 2 // Copyright (C) 2002-2006 Marcin Kalicinski 3 // Copyright (C) 2009 Sebastian Redl 4 // 5 // Distributed under the Boost Software License, Version 1.0. 6 // (See accompanying file LICENSE_1_0.txt or copy at 7 // http://www.boost.org/LICENSE_1_0.txt) 8 // 9 // For more information, see www.boost.org 10 // ---------------------------------------------------------------------------- 11 #ifndef BOOST_PROPERTY_TREE_DETAIL_EXCEPTIONS_IMPLEMENTATION_HPP_INCLUDED 12 #define BOOST_PROPERTY_TREE_DETAIL_EXCEPTIONS_IMPLEMENTATION_HPP_INCLUDED 13 14 namespace boost { namespace property_tree 15 { 16 17 namespace detail 18 { 19 20 // Helper for preparing what string in ptree_bad_path exception 21 template<class P> inline prepare_bad_path_what(const std::string & what,const P & path)22 std::string prepare_bad_path_what(const std::string &what, 23 const P &path) 24 { 25 return what + " (" + path.dump() + ")"; 26 } 27 28 } 29 30 /////////////////////////////////////////////////////////////////////////// 31 // ptree_error 32 ptree_error(const std::string & w)33 inline ptree_error::ptree_error(const std::string &w): 34 std::runtime_error(w) 35 { 36 } 37 ~ptree_error()38 inline ptree_error::~ptree_error() throw() 39 { 40 } 41 42 /////////////////////////////////////////////////////////////////////////// 43 // ptree_bad_data 44 45 template<class D> inline ptree_bad_data(const std::string & w,const D & d)46 ptree_bad_data::ptree_bad_data(const std::string &w, const D &d): 47 ptree_error(w), m_data(d) 48 { 49 } 50 ~ptree_bad_data()51 inline ptree_bad_data::~ptree_bad_data() throw() 52 { 53 } 54 55 template<class D> inline data() const56 D ptree_bad_data::data() const 57 { 58 return boost::any_cast<D>(m_data); 59 } 60 61 /////////////////////////////////////////////////////////////////////////// 62 // ptree_bad_path 63 64 template<class P> inline ptree_bad_path(const std::string & w,const P & p)65 ptree_bad_path::ptree_bad_path(const std::string &w, const P &p): 66 ptree_error(detail::prepare_bad_path_what(w, p)), m_path(p) 67 { 68 69 } 70 ~ptree_bad_path()71 inline ptree_bad_path::~ptree_bad_path() throw() 72 { 73 } 74 75 template<class P> inline path() const76 P ptree_bad_path::path() const 77 { 78 return boost::any_cast<P>(m_path); 79 } 80 81 }} 82 83 #endif 84