xref: /aosp_15_r20/external/libwebm/webm_parser/include/webm/status.h (revision 103e46e4cd4b6efcf6001f23fa8665fb110abf8d)
1*103e46e4SHarish Mahendrakar // Copyright (c) 2016 The WebM project authors. All Rights Reserved.
2*103e46e4SHarish Mahendrakar //
3*103e46e4SHarish Mahendrakar // Use of this source code is governed by a BSD-style license
4*103e46e4SHarish Mahendrakar // that can be found in the LICENSE file in the root of the source
5*103e46e4SHarish Mahendrakar // tree. An additional intellectual property rights grant can be found
6*103e46e4SHarish Mahendrakar // in the file PATENTS.  All contributing project authors may
7*103e46e4SHarish Mahendrakar // be found in the AUTHORS file in the root of the source tree.
8*103e46e4SHarish Mahendrakar #ifndef INCLUDE_WEBM_STATUS_H_
9*103e46e4SHarish Mahendrakar #define INCLUDE_WEBM_STATUS_H_
10*103e46e4SHarish Mahendrakar 
11*103e46e4SHarish Mahendrakar #include <cstdint>
12*103e46e4SHarish Mahendrakar 
13*103e46e4SHarish Mahendrakar /**
14*103e46e4SHarish Mahendrakar  \file
15*103e46e4SHarish Mahendrakar  Status information that represents success, failure, etc. for operations
16*103e46e4SHarish Mahendrakar  throughout the API.
17*103e46e4SHarish Mahendrakar  */
18*103e46e4SHarish Mahendrakar 
19*103e46e4SHarish Mahendrakar namespace webm {
20*103e46e4SHarish Mahendrakar 
21*103e46e4SHarish Mahendrakar /**
22*103e46e4SHarish Mahendrakar  \addtogroup PUBLIC_API
23*103e46e4SHarish Mahendrakar  @{
24*103e46e4SHarish Mahendrakar  */
25*103e46e4SHarish Mahendrakar 
26*103e46e4SHarish Mahendrakar /**
27*103e46e4SHarish Mahendrakar  An object used to represent the resulting status of various operations,
28*103e46e4SHarish Mahendrakar  indicating success, failure, or some other result.
29*103e46e4SHarish Mahendrakar  */
30*103e46e4SHarish Mahendrakar struct Status {
31*103e46e4SHarish Mahendrakar   /**
32*103e46e4SHarish Mahendrakar    A list of generic status codes used by the parser. Users are encouraged to
33*103e46e4SHarish Mahendrakar    reuse these values as needed in the derivations of `Callback`. These values
34*103e46e4SHarish Mahendrakar    will always be <= 0.
35*103e46e4SHarish Mahendrakar    */
36*103e46e4SHarish Mahendrakar   enum Code : std::int32_t {
37*103e46e4SHarish Mahendrakar     // General status codes. Range: 0 to -1024.
38*103e46e4SHarish Mahendrakar     /**
39*103e46e4SHarish Mahendrakar      The operation successfully completed.
40*103e46e4SHarish Mahendrakar      */
41*103e46e4SHarish Mahendrakar     kOkCompleted = 0,
42*103e46e4SHarish Mahendrakar 
43*103e46e4SHarish Mahendrakar     /**
44*103e46e4SHarish Mahendrakar      The operation was successful but only partially completed (for example, a
45*103e46e4SHarish Mahendrakar      read that resulted in fewer bytes than requested).
46*103e46e4SHarish Mahendrakar      */
47*103e46e4SHarish Mahendrakar     kOkPartial = -1,
48*103e46e4SHarish Mahendrakar 
49*103e46e4SHarish Mahendrakar     /**
50*103e46e4SHarish Mahendrakar      The operation would block, and should be tried again later.
51*103e46e4SHarish Mahendrakar      */
52*103e46e4SHarish Mahendrakar     kWouldBlock = -2,
53*103e46e4SHarish Mahendrakar 
54*103e46e4SHarish Mahendrakar     /**
55*103e46e4SHarish Mahendrakar      More data was requested but the file has ended.
56*103e46e4SHarish Mahendrakar      */
57*103e46e4SHarish Mahendrakar     kEndOfFile = -3,
58*103e46e4SHarish Mahendrakar 
59*103e46e4SHarish Mahendrakar     /**
60*103e46e4SHarish Mahendrakar      The reader was unable to seek to the requested location.
61*103e46e4SHarish Mahendrakar      */
62*103e46e4SHarish Mahendrakar     kSeekFailed = -4,
63*103e46e4SHarish Mahendrakar 
64*103e46e4SHarish Mahendrakar     // Parsing errors. Range: -1025 to -2048.
65*103e46e4SHarish Mahendrakar     /**
66*103e46e4SHarish Mahendrakar      An element's ID is malformed.
67*103e46e4SHarish Mahendrakar      */
68*103e46e4SHarish Mahendrakar     kInvalidElementId = -1025,
69*103e46e4SHarish Mahendrakar 
70*103e46e4SHarish Mahendrakar     /**
71*103e46e4SHarish Mahendrakar      An element's size is malformed.
72*103e46e4SHarish Mahendrakar      */
73*103e46e4SHarish Mahendrakar     kInvalidElementSize = -1026,
74*103e46e4SHarish Mahendrakar 
75*103e46e4SHarish Mahendrakar     /**
76*103e46e4SHarish Mahendrakar      An unknown element has unknown size.
77*103e46e4SHarish Mahendrakar      */
78*103e46e4SHarish Mahendrakar     kIndefiniteUnknownElement = -1027,
79*103e46e4SHarish Mahendrakar 
80*103e46e4SHarish Mahendrakar     /**
81*103e46e4SHarish Mahendrakar      A child element overflowed the parent element's bounds.
82*103e46e4SHarish Mahendrakar      */
83*103e46e4SHarish Mahendrakar     kElementOverflow = -1028,
84*103e46e4SHarish Mahendrakar 
85*103e46e4SHarish Mahendrakar     /**
86*103e46e4SHarish Mahendrakar      An element's size exceeds the system's memory limits.
87*103e46e4SHarish Mahendrakar      */
88*103e46e4SHarish Mahendrakar     kNotEnoughMemory = -1029,
89*103e46e4SHarish Mahendrakar 
90*103e46e4SHarish Mahendrakar     /**
91*103e46e4SHarish Mahendrakar      An element's value is illegal/malformed.
92*103e46e4SHarish Mahendrakar      */
93*103e46e4SHarish Mahendrakar     kInvalidElementValue = -1030,
94*103e46e4SHarish Mahendrakar 
95*103e46e4SHarish Mahendrakar     /**
96*103e46e4SHarish Mahendrakar      A recursive element was so deeply nested that exceeded the parser's limit.
97*103e46e4SHarish Mahendrakar      */
98*103e46e4SHarish Mahendrakar     kExceededRecursionDepthLimit = -1031,
99*103e46e4SHarish Mahendrakar 
100*103e46e4SHarish Mahendrakar     // The following codes are internal-only and should not be used by users.
101*103e46e4SHarish Mahendrakar     // Additionally, these codes should never be returned to the user; doing so
102*103e46e4SHarish Mahendrakar     // is considered a bug.
103*103e46e4SHarish Mahendrakar     /**
104*103e46e4SHarish Mahendrakar      \internal Parsing should switch from reading to skipping elements.
105*103e46e4SHarish Mahendrakar      */
106*103e46e4SHarish Mahendrakar     kSwitchToSkip = INT32_MIN,
107*103e46e4SHarish Mahendrakar   };
108*103e46e4SHarish Mahendrakar 
109*103e46e4SHarish Mahendrakar   /**
110*103e46e4SHarish Mahendrakar    Status codes <= 0 are reserved by the parsing library. User error codes
111*103e46e4SHarish Mahendrakar    should be positive (> 0). Users are encouraged to use codes from the `Code`
112*103e46e4SHarish Mahendrakar    enum, but may use a positive error code if some application-specific error is
113*103e46e4SHarish Mahendrakar    encountered.
114*103e46e4SHarish Mahendrakar    */
115*103e46e4SHarish Mahendrakar   std::int32_t code;
116*103e46e4SHarish Mahendrakar 
117*103e46e4SHarish Mahendrakar   Status() = default;
118*103e46e4SHarish Mahendrakar   Status(const Status&) = default;
119*103e46e4SHarish Mahendrakar   Status(Status&&) = default;
120*103e46e4SHarish Mahendrakar   Status& operator=(const Status&) = default;
121*103e46e4SHarish Mahendrakar   Status& operator=(Status&&) = default;
122*103e46e4SHarish Mahendrakar 
123*103e46e4SHarish Mahendrakar   /**
124*103e46e4SHarish Mahendrakar    Creates a new `Status` object with the given status code.
125*103e46e4SHarish Mahendrakar 
126*103e46e4SHarish Mahendrakar    \param code The status code which will be used to set the `code` member.
127*103e46e4SHarish Mahendrakar    */
StatusStatus128*103e46e4SHarish Mahendrakar   constexpr explicit Status(Code code) : code(code) {}
129*103e46e4SHarish Mahendrakar 
130*103e46e4SHarish Mahendrakar   /**
131*103e46e4SHarish Mahendrakar    Creates a new `Status` object with the given status code.
132*103e46e4SHarish Mahendrakar 
133*103e46e4SHarish Mahendrakar    \param code The status code which will be used to set the `code` member.
134*103e46e4SHarish Mahendrakar    */
StatusStatus135*103e46e4SHarish Mahendrakar   constexpr explicit Status(std::int32_t code) : code(code) {}
136*103e46e4SHarish Mahendrakar 
137*103e46e4SHarish Mahendrakar   /**
138*103e46e4SHarish Mahendrakar    Returns true if the status code is either `kOkCompleted` or `kOkPartial`.
139*103e46e4SHarish Mahendrakar    Provided for convenience.
140*103e46e4SHarish Mahendrakar    */
okStatus141*103e46e4SHarish Mahendrakar   constexpr bool ok() const {
142*103e46e4SHarish Mahendrakar     return code == kOkCompleted || code == kOkPartial;
143*103e46e4SHarish Mahendrakar   }
144*103e46e4SHarish Mahendrakar 
145*103e46e4SHarish Mahendrakar   /**
146*103e46e4SHarish Mahendrakar    Returns true if the status code is `kOkCompleted`. Provided for convenience.
147*103e46e4SHarish Mahendrakar    */
completed_okStatus148*103e46e4SHarish Mahendrakar   constexpr bool completed_ok() const { return code == kOkCompleted; }
149*103e46e4SHarish Mahendrakar 
150*103e46e4SHarish Mahendrakar   /**
151*103e46e4SHarish Mahendrakar    Returns true if the status is considered a parsing error. Parsing errors
152*103e46e4SHarish Mahendrakar    represent unrecoverable errors due to malformed data. Only status codes in
153*103e46e4SHarish Mahendrakar    the range -2048 to -1025 (inclusive) are considered parsing errors.
154*103e46e4SHarish Mahendrakar    */
is_parsing_errorStatus155*103e46e4SHarish Mahendrakar   constexpr bool is_parsing_error() const {
156*103e46e4SHarish Mahendrakar     return -2048 <= code && code <= -1025;
157*103e46e4SHarish Mahendrakar   }
158*103e46e4SHarish Mahendrakar };
159*103e46e4SHarish Mahendrakar 
160*103e46e4SHarish Mahendrakar /**
161*103e46e4SHarish Mahendrakar  @}
162*103e46e4SHarish Mahendrakar  */
163*103e46e4SHarish Mahendrakar 
164*103e46e4SHarish Mahendrakar }  // namespace webm
165*103e46e4SHarish Mahendrakar 
166*103e46e4SHarish Mahendrakar #endif  // INCLUDE_WEBM_STATUS_H_
167