1//
2// Copyright 2014 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5
6// Error.inc: Inline definitions of egl::Error and gl::Error classes which encapsulate API errors
7// and optional error messages.
8
9#include "common/angleutils.h"
10
11#include <cstdarg>
12
13namespace egl
14{
15
16Error::Error(EGLint errorCode)
17    : mCode(errorCode),
18      mID(0)
19{
20}
21
22Error::Error(const Error &other)
23    : mCode(other.mCode),
24      mID(other.mID)
25{
26    if (other.mMessage)
27    {
28        createMessageString();
29        *mMessage = *(other.mMessage);
30    }
31}
32
33Error::Error(Error &&other)
34    : mCode(other.mCode),
35      mID(other.mID),
36      mMessage(std::move(other.mMessage))
37{
38}
39
40Error &Error::operator=(const Error &other)
41{
42    mCode = other.mCode;
43    mID = other.mID;
44
45    if (other.mMessage)
46    {
47        createMessageString();
48        *mMessage = *(other.mMessage);
49    }
50    else
51    {
52        mMessage.reset();
53    }
54
55    return *this;
56}
57
58Error &Error::operator=(Error &&other)
59{
60    if (this != &other)
61    {
62        mCode = other.mCode;
63        mID = other.mID;
64        mMessage = std::move(other.mMessage);
65    }
66
67    return *this;
68}
69
70EGLint Error::getCode() const
71{
72    return mCode;
73}
74
75EGLint Error::getID() const
76{
77    return mID;
78}
79
80bool Error::isError() const
81{
82    return (mCode != EGL_SUCCESS);
83}
84
85// Static
86Error Error::NoError()
87{
88    return Error(EGL_SUCCESS);
89}
90
91}
92