Result.h#

Fully qualified name: omni/core/Result.h

File members: omni/core/Result.h

// Copyright (c) 2023-2024, NVIDIA CORPORATION. All rights reserved.
//
// NVIDIA CORPORATION and its licensors retain all intellectual property
// and proprietary rights in and to this software, related documentation
// and any modifications thereto. Any use, reproduction, disclosure or
// distribution of this software and related documentation without an express
// license agreement from NVIDIA CORPORATION is strictly prohibited.
//
#pragma once

#include "../../carb/Defines.h"
#include "OmniAttr.h"

#include <cstdint>

namespace omni
{
namespace core
{

using Result OMNI_ATTR("constant, prefix=kResult") = std::int32_t;

#define OMNI_SUCCEEDED(x_) ((x_) >= 0)

#define OMNI_FAILED(x_) ((x_) < 0)

#define OMNI_RETURN_IF_FAILED(x_)                                                                                      \
    do                                                                                                                 \
    {                                                                                                                  \
        auto result = (x_);                                                                                            \
        if (OMNI_FAILED(result))                                                                                       \
        {                                                                                                              \
            return result;                                                                                             \
        }                                                                                                              \
    } while (0)

constexpr Result kResultSuccess = 0;

constexpr Result kResultNotImplemented = Result(0x80004001);

constexpr Result kResultOperationAborted = Result(0x80004004);

constexpr Result kResultFail = Result(0x80004005);

constexpr Result kResultNotFound = Result(0x80070002);

constexpr Result kResultAccessDenied = Result(0x80070005);

constexpr Result kResultOutOfMemory = Result(0x8007000E);

constexpr Result kResultNotSupported = Result(0x80070032);

constexpr Result kResultInvalidArgument = Result(0x80070057);

constexpr Result kResultInvalidState = Result(0x80070004);

constexpr Result kResultVersionCheckFailure = Result(0x80070283);

constexpr Result kResultVersionParseError = Result(0x80070309);

constexpr Result kResultInsufficientBuffer = Result(0x8007007A);

constexpr Result kResultTryAgain = Result(0x8007106B);

constexpr Result kResultInterrupted = Result(0xa4310001);

constexpr Result kResultNoInterface = Result(0x80004002);

constexpr Result kResultNullPointer = Result(0x80004003);

constexpr Result kResultAlreadyExists = Result(0x80030050);

constexpr Result kResultInvalidOperation = Result(0x800710DD);

constexpr Result kResultNoMoreItems = Result(0x8009002A);

constexpr Result kResultInvalidIndex = Result(0x80091008);

constexpr Result kResultNotEnoughData = Result(0x80290101);

constexpr Result kResultTooMuchData = Result(0x80290102);

constexpr Result kResultInvalidDataType = Result(0x8031000B);

constexpr Result kResultInvalidDataSize = Result(0x8031000C);

constexpr Result kResultTimedOut = Result(0xa431274C);

constexpr Result kResultWouldBlock = Result(0xa4312733);

// clang-format off

#define OMNI_RESULT_CODE_LIST(item_)                                                \
    /*   (symbol,               snek_symbol,            message)             */     \
    item_(Success,              success,                "operation succeeded")      \
    item_(NotImplemented,       not_implemented,        "not implemented")          \
    item_(OperationAborted,     operation_aborted,      "aborted")                  \
    item_(Fail,                 fail,                   "failure")                  \
    item_(NotFound,             not_found,              "not found")                \
    item_(AccessDenied,         access_denied,          "access denied")            \
    item_(OutOfMemory,          out_of_memory,          "out of memory")            \
    item_(NotSupported,         not_supported,          "not supported")            \
    item_(InvalidArgument,      invalid_argument,       "invalid argument")         \
    item_(InvalidState,         invalid_state,          "invalid state")            \
    item_(VersionCheckFailure,  version_check_failure,  "version check failure")    \
    item_(VersionParseError,    version_parse_error,    "version parse error")      \
    item_(InsufficientBuffer,   insufficient_buffer,    "insufficient buffer")      \
    item_(TryAgain,             try_again,              "try again")                \
    item_(Interrupted,          interrupted,            "interrupted")              \
    item_(NoInterface,          no_interface,           "no interface")             \
    item_(NullPointer,          null_pointer,           "null pointer")             \
    item_(AlreadyExists,        already_exists,         "already exists")           \
    item_(InvalidOperation,     invalid_operation,      "invalid operation")        \
    item_(NoMoreItems,          no_more_items,          "no more items")            \
    item_(InvalidIndex,         invalid_index,          "invalid index")            \
    item_(NotEnoughData,        not_enough_data,        "not enough data")          \
    item_(TooMuchData,          too_much_data,          "too much data")            \
    item_(InvalidDataType,      invalid_data_type,      "invalid data type")        \
    item_(InvalidDataSize,      invalid_data_size,      "invalid data size")        \
    item_(TimedOut,             timed_out,              "timed out")                \
    item_(WouldBlock,           would_block,            "operation would block")

// clang-format on

} // namespace core
} // namespace omni