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