xref: /aosp_15_r20/external/zstd/tests/regression/result.h (revision 01826a4963a0d8a59bc3812d29bdf0fb76416722)
1*01826a49SYabin Cui /*
2*01826a49SYabin Cui  * Copyright (c) Meta Platforms, Inc. and affiliates.
3*01826a49SYabin Cui  * All rights reserved.
4*01826a49SYabin Cui  *
5*01826a49SYabin Cui  * This source code is licensed under both the BSD-style license (found in the
6*01826a49SYabin Cui  * LICENSE file in the root directory of this source tree) and the GPLv2 (found
7*01826a49SYabin Cui  * in the COPYING file in the root directory of this source tree).
8*01826a49SYabin Cui  * You may select, at your option, one of the above-listed licenses.
9*01826a49SYabin Cui  */
10*01826a49SYabin Cui 
11*01826a49SYabin Cui #ifndef RESULT_H
12*01826a49SYabin Cui #define RESULT_H
13*01826a49SYabin Cui 
14*01826a49SYabin Cui #include <stddef.h>
15*01826a49SYabin Cui 
16*01826a49SYabin Cui /**
17*01826a49SYabin Cui  * The error type enum.
18*01826a49SYabin Cui  */
19*01826a49SYabin Cui typedef enum {
20*01826a49SYabin Cui     result_error_ok,                   /**< No error. */
21*01826a49SYabin Cui     result_error_skip,                 /**< This method was skipped. */
22*01826a49SYabin Cui     result_error_system_error,         /**< Some internal error happened. */
23*01826a49SYabin Cui     result_error_compression_error,    /**< Compression failed. */
24*01826a49SYabin Cui     result_error_decompression_error,  /**< Decompression failed. */
25*01826a49SYabin Cui     result_error_round_trip_error,     /**< Data failed to round trip. */
26*01826a49SYabin Cui } result_error_t;
27*01826a49SYabin Cui 
28*01826a49SYabin Cui /**
29*01826a49SYabin Cui  * The success type.
30*01826a49SYabin Cui  */
31*01826a49SYabin Cui typedef struct {
32*01826a49SYabin Cui     size_t total_size;  /**< The total compressed size. */
33*01826a49SYabin Cui } result_data_t;
34*01826a49SYabin Cui 
35*01826a49SYabin Cui /**
36*01826a49SYabin Cui  * The result type.
37*01826a49SYabin Cui  * Do not access the member variables directory, use the helper functions.
38*01826a49SYabin Cui  */
39*01826a49SYabin Cui typedef struct {
40*01826a49SYabin Cui     result_error_t internal_error;
41*01826a49SYabin Cui     result_data_t internal_data;
42*01826a49SYabin Cui } result_t;
43*01826a49SYabin Cui 
44*01826a49SYabin Cui /**
45*01826a49SYabin Cui  * Create a result of the error type.
46*01826a49SYabin Cui  */
47*01826a49SYabin Cui static result_t result_error(result_error_t error);
48*01826a49SYabin Cui /**
49*01826a49SYabin Cui  * Create a result of the success type.
50*01826a49SYabin Cui  */
51*01826a49SYabin Cui static result_t result_data(result_data_t data);
52*01826a49SYabin Cui 
53*01826a49SYabin Cui /**
54*01826a49SYabin Cui  * Check if the result is an error or skip.
55*01826a49SYabin Cui  */
56*01826a49SYabin Cui static int result_is_error(result_t result);
57*01826a49SYabin Cui /**
58*01826a49SYabin Cui  * Check if the result error is skip.
59*01826a49SYabin Cui  */
60*01826a49SYabin Cui static int result_is_skip(result_t result);
61*01826a49SYabin Cui /**
62*01826a49SYabin Cui  * Get the result error or okay.
63*01826a49SYabin Cui  */
64*01826a49SYabin Cui static result_error_t result_get_error(result_t result);
65*01826a49SYabin Cui /**
66*01826a49SYabin Cui  * Get the result data. The result MUST be checked with result_is_error() first.
67*01826a49SYabin Cui  */
68*01826a49SYabin Cui static result_data_t result_get_data(result_t result);
69*01826a49SYabin Cui 
result_error(result_error_t error)70*01826a49SYabin Cui static result_t result_error(result_error_t error) {
71*01826a49SYabin Cui     result_t result = {
72*01826a49SYabin Cui         .internal_error = error,
73*01826a49SYabin Cui     };
74*01826a49SYabin Cui     return result;
75*01826a49SYabin Cui }
76*01826a49SYabin Cui 
result_data(result_data_t data)77*01826a49SYabin Cui static result_t result_data(result_data_t data) {
78*01826a49SYabin Cui     result_t result = {
79*01826a49SYabin Cui         .internal_error = result_error_ok,
80*01826a49SYabin Cui         .internal_data = data,
81*01826a49SYabin Cui     };
82*01826a49SYabin Cui     return result;
83*01826a49SYabin Cui }
84*01826a49SYabin Cui 
result_is_error(result_t result)85*01826a49SYabin Cui static int result_is_error(result_t result) {
86*01826a49SYabin Cui     return result_get_error(result) != result_error_ok;
87*01826a49SYabin Cui }
88*01826a49SYabin Cui 
result_is_skip(result_t result)89*01826a49SYabin Cui static int result_is_skip(result_t result) {
90*01826a49SYabin Cui     return result_get_error(result) == result_error_skip;
91*01826a49SYabin Cui }
92*01826a49SYabin Cui 
result_get_error(result_t result)93*01826a49SYabin Cui static result_error_t result_get_error(result_t result) {
94*01826a49SYabin Cui     return result.internal_error;
95*01826a49SYabin Cui }
96*01826a49SYabin Cui 
97*01826a49SYabin Cui char const* result_get_error_string(result_t result);
98*01826a49SYabin Cui 
result_get_data(result_t result)99*01826a49SYabin Cui static result_data_t result_get_data(result_t result) {
100*01826a49SYabin Cui     return result.internal_data;
101*01826a49SYabin Cui }
102*01826a49SYabin Cui 
103*01826a49SYabin Cui #endif
104