123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- /*
- ==============================================================================
- This file is part of the juce_core module of the JUCE library.
- Copyright (c) 2013 - Raw Material Software Ltd.
- Permission to use, copy, modify, and/or distribute this software for any purpose with
- or without fee is hereby granted, provided that the above copyright notice and this
- permission notice appear in all copies.
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
- TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
- NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
- IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- ------------------------------------------------------------------------------
- NOTE! This permissive ISC license applies ONLY to files within the juce_core module!
- All other JUCE modules are covered by a dual GPL/commercial license, so if you are
- using any other modules, be sure to check that you also comply with their license.
- For more details, visit www.juce.com
- ==============================================================================
- */
- #ifndef JUCE_RESULT_H_INCLUDED
- #define JUCE_RESULT_H_INCLUDED
- //==============================================================================
- /**
- Represents the 'success' or 'failure' of an operation, and holds an associated
- error message to describe the error when there's a failure.
- E.g.
- @code
- Result myOperation()
- {
- if (doSomeKindOfFoobar())
- return Result::ok();
- else
- return Result::fail ("foobar didn't work!");
- }
- const Result result (myOperation());
- if (result.wasOk())
- {
- ...it's all good...
- }
- else
- {
- warnUserAboutFailure ("The foobar operation failed! Error message was: "
- + result.getErrorMessage());
- }
- @endcode
- */
- class JUCE_API Result
- {
- public:
- //==============================================================================
- /** Creates and returns a 'successful' result. */
- static Result ok() noexcept { return Result(); }
- /** Creates a 'failure' result.
- If you pass a blank error message in here, a default "Unknown Error" message
- will be used instead.
- */
- static Result fail (const String& errorMessage) noexcept;
- //==============================================================================
- /** Returns true if this result indicates a success. */
- bool wasOk() const noexcept;
- /** Returns true if this result indicates a failure.
- You can use getErrorMessage() to retrieve the error message associated
- with the failure.
- */
- bool failed() const noexcept;
- /** Returns true if this result indicates a success.
- This is equivalent to calling wasOk().
- */
- operator bool() const noexcept;
- /** Returns true if this result indicates a failure.
- This is equivalent to calling failed().
- */
- bool operator!() const noexcept;
- /** Returns the error message that was set when this result was created.
- For a successful result, this will be an empty string;
- */
- const String& getErrorMessage() const noexcept;
- //==============================================================================
- Result (const Result&);
- Result& operator= (const Result&);
- #if JUCE_COMPILER_SUPPORTS_MOVE_SEMANTICS
- Result (Result&&) noexcept;
- Result& operator= (Result&&) noexcept;
- #endif
- bool operator== (const Result& other) const noexcept;
- bool operator!= (const Result& other) const noexcept;
- private:
- String errorMessage;
- // The default constructor is not for public use!
- // Instead, use Result::ok() or Result::fail()
- Result() noexcept;
- explicit Result (const String&) noexcept;
- // These casts are private to prevent people trying to use the Result object in numeric contexts
- operator int() const;
- operator void*() const;
- };
- #endif // JUCE_RESULT_H_INCLUDED
|