1/*
2 * Copyright 2010-2019 Branimir Karadzic. All rights reserved.
3 * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
4 */
5
6#ifndef BX_ERROR_H_HEADER_GUARD
7#	error "Must be included from bx/error!"
8#endif // BX_ERROR_H_HEADER_GUARD
9
10namespace bx
11{
12	inline Error::Error()
13		: m_code(0)
14	{
15	}
16
17	inline void Error::reset()
18	{
19		m_code = 0;
20		m_msg.clear();
21	}
22
23	inline void Error::setError(ErrorResult _errorResult, const StringView& _msg)
24	{
25		BX_CHECK(0 != _errorResult.code, "Invalid ErrorResult passed to setError!");
26
27		if (!isOk() )
28		{
29			return;
30		}
31
32		m_code = _errorResult.code;
33		m_msg  = _msg;
34	}
35
36	inline bool Error::isOk() const
37	{
38		return 0 == m_code;
39	}
40
41	inline ErrorResult Error::get() const
42	{
43		ErrorResult result = { m_code };
44		return result;
45	}
46
47	inline const StringView& Error::getMessage() const
48	{
49		return m_msg;
50	}
51
52	inline bool Error::operator==(const ErrorResult& _rhs) const
53	{
54		return _rhs.code == m_code;
55	}
56
57	inline bool Error::operator!=(const ErrorResult& _rhs) const
58	{
59		return _rhs.code != m_code;
60	}
61
62	inline ErrorScope::ErrorScope(Error* _err)
63		: m_err(_err)
64	{
65		BX_CHECK(NULL != _err, "_err can't be NULL");
66	}
67
68	inline ErrorScope::~ErrorScope()
69	{
70		BX_CHECK(m_err->isOk(), "Error: %d", m_err->get().code);
71	}
72
73} // namespace bx
74