Skip to content

Commit 3c58f99

Browse files
committed
First draft of result data type
1 parent b01b079 commit 3c58f99

File tree

5 files changed

+100
-98
lines changed

5 files changed

+100
-98
lines changed

CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ project(StandardClassLibrary)
44
set(CMAKE_CXX_STANDARD 11)
55

66
add_compile_definitions(SCL_USE_IOSTREAM_EXTEND)
7-
add_executable(StandardClassLibrary main.cpp include/scl/scl.hpp include/scl/tools/tools.hpp include/scl/tools/make/make.hpp include/scl/tools/make/from.h include/scl/tools/make/ptr.h include/scl/tools/make/unique.h include/scl/tools/make/shared.h include/scl/tools/iostream/iostream.hpp include/scl/tools/iostream/nl.h include/scl/tools/iostream/log/log.hpp include/scl/tools/iostream/log/basic.h include/scl/tools/iostream/log/prefixed.h include/scl/macros.h include/scl/tools/iostream/log/surrounded.h include/scl/tools/iostream/extend.h include/scl/tools/meta/meta.hpp include/scl/tools/meta/void_t.h include/scl/tools/meta/enable_if.h include/scl/tools/meta/is_convertible.h include/scl/tools/meta/can_call.h include/scl/tools/meta/is_same.h include/scl/tools/meta/fn_cast.h include/scl/tools/meta/fn_type.h include/scl/tools/meta/type_check.h include/scl/tools/meta/is_base_of.h include/scl/tools/meta/type_mod.h include/scl/tools/meta/type_query.h include/scl/tools/meta/conditional.h include/scl/tools/make/atomic.h include/scl/tools/make/promise.h include/scl/concepts/concepts.hpp include/scl/concepts/is_concept.h include/scl/concepts/require.h include/scl/concepts/Same.h include/scl/concepts/DerivedFrom.h include/scl/concepts/ConvertibleTo.h include/scl/concepts/Integral.h include/scl/concepts/Signed.h include/scl/concepts/Unsigned.h include/scl/concepts/SignedIntegral.h include/scl/concepts/UnsignedIntegral.h include/scl/concepts/Swappable.h include/scl/concepts/SwappableWith.h include/scl/concepts/Destructible.h include/scl/concepts/Constructible.h include/scl/concepts/DefaultConstructible.h include/scl/concepts/MoveConstructible.h include/scl/concepts/CopyConstructible.h include/scl/concepts/MoveAssignable.h include/scl/concepts/CopyAssignable.h include/scl/concepts/Movable.h include/scl/concepts/Copyable.h include/scl/concepts/EqualityComparable.h include/scl/concepts/EqualityComparableWith.h include/scl/concepts/LessThanComparable.h include/scl/concepts/LessThanComparableWith.h include/scl/concepts/SemiRegular.h include/scl/concepts/Regular.h include/scl/concepts/Invocable.h include/scl/concepts/RegularInvocable.h include/scl/concepts/Boolean.h include/scl/concepts/InequalityComparable.h include/scl/concepts/InequalityComparableWith.h include/scl/concepts/Predicate.h include/scl/concepts/Relation.h include/scl/exceptions/exceptions.hpp include/scl/exceptions/Throwable.h include/scl/exceptions/Exception.h include/scl/exceptions/RuntimeException.h include/scl/utils/utils.hpp include/scl/utils/toString.h include/scl/tools/meta/exists.h include/scl/tools/iostream/toString.h include/scl/tools/meta/defines_scl_to_string.h include/scl/tools/meta/defines_std_to_string.h include/scl/tools/meta/defines_ostream_operator.h main.h include/scl/utils/Any.h include/scl/exceptions/InvalidArgument.h include/scl/exceptions/OutOfBound.h include/scl/exceptions/InvalidCast.h include/scl/exceptions/InvalidAnyCast.h include/scl/concepts/NonMovable.h include/scl/concepts/NonCopyable.h include/scl/utils/Optional.h include/scl/exceptions/EmptyOptionalAccess.h include/scl/tools/make/optional.h include/scl/tools/make/any.h include/scl/tools/meta/constexpr_assert.h include/scl/utils/Either.h include/scl/exceptions/InvalidEitherAccess.h include/scl/concepts/Iterator.h include/scl/tools/meta/swap.h include/scl/concepts/ValueSwappable.h include/scl/concepts/NullablePointer.h include/scl/concepts/AssignableWith.h include/scl/concepts/FunctionObject.h include/scl/concepts/Hash.h include/scl/concepts/CharTraits.h include/scl/concepts/BinaryPredicate.h include/scl/tools/meta/is_instance.h include/scl/tools/meta/real_const.h tests/libs/include/testutils/AdvancedTypes.h include/scl/utils/Placeholder.h include/scl/stream/operators/filter.h include/scl/stream/operators/uniqueBy.h include/scl/stream/details/iterator/StlAdapter.h include/scl/stream/operators/unique.h include/scl/async/async.hpp include/scl/async/with_traits.h include/scl/async/with.h include/scl/exceptions/InvalidResource.h include/scl/async/Mutexed.h include/scl/tools/make/mutexed.h include/scl/http/http.hpp include/scl/http/StatusCode.h include/scl/http/Version.h include/scl/exceptions/UninitializedMemoryAccess.h include/scl/stream/creators/istream.h include/scl/async/AsyncQueue.h include/scl/async/Channel.h include/scl/exceptions/NonNullViolation.h include/scl/detect/detect.hpp include/scl/detect/platform/platform.hpp include/scl/detect/platform/windows.h include/scl/detect/platform/unix.h include/scl/detect/platform/linux.h include/scl/detect/platform/platform.clean_macros.h include/scl/detect/platform/posix.h include/scl/detect/platform/apple.h include/scl/detect/platform/android.h include/scl/detect/platform/unified/unified.hpp include/scl/detect/platform/unified/windows.h include/scl/detect/platform/unified/unified.clean_macros.h include/scl/detect/platform/unified/posix.h include/scl/prelude/prelude.hpp include/scl/alias/alias.hpp include/scl/stream/details/deprecation.h)
7+
add_executable(StandardClassLibrary main.cpp include/scl/scl.hpp include/scl/tools/tools.hpp include/scl/tools/make/make.hpp include/scl/tools/make/from.h include/scl/tools/make/ptr.h include/scl/tools/make/unique.h include/scl/tools/make/shared.h include/scl/tools/iostream/iostream.hpp include/scl/tools/iostream/nl.h include/scl/tools/iostream/log/log.hpp include/scl/tools/iostream/log/basic.h include/scl/tools/iostream/log/prefixed.h include/scl/macros.h include/scl/tools/iostream/log/surrounded.h include/scl/tools/iostream/extend.h include/scl/tools/meta/meta.hpp include/scl/tools/meta/void_t.h include/scl/tools/meta/enable_if.h include/scl/tools/meta/is_convertible.h include/scl/tools/meta/can_call.h include/scl/tools/meta/is_same.h include/scl/tools/meta/fn_cast.h include/scl/tools/meta/fn_type.h include/scl/tools/meta/type_check.h include/scl/tools/meta/is_base_of.h include/scl/tools/meta/type_mod.h include/scl/tools/meta/type_query.h include/scl/tools/meta/conditional.h include/scl/tools/make/atomic.h include/scl/tools/make/promise.h include/scl/concepts/concepts.hpp include/scl/concepts/is_concept.h include/scl/concepts/require.h include/scl/concepts/Same.h include/scl/concepts/DerivedFrom.h include/scl/concepts/ConvertibleTo.h include/scl/concepts/Integral.h include/scl/concepts/Signed.h include/scl/concepts/Unsigned.h include/scl/concepts/SignedIntegral.h include/scl/concepts/UnsignedIntegral.h include/scl/concepts/Swappable.h include/scl/concepts/SwappableWith.h include/scl/concepts/Destructible.h include/scl/concepts/Constructible.h include/scl/concepts/DefaultConstructible.h include/scl/concepts/MoveConstructible.h include/scl/concepts/CopyConstructible.h include/scl/concepts/MoveAssignable.h include/scl/concepts/CopyAssignable.h include/scl/concepts/Movable.h include/scl/concepts/Copyable.h include/scl/concepts/EqualityComparable.h include/scl/concepts/EqualityComparableWith.h include/scl/concepts/LessThanComparable.h include/scl/concepts/LessThanComparableWith.h include/scl/concepts/SemiRegular.h include/scl/concepts/Regular.h include/scl/concepts/Invocable.h include/scl/concepts/RegularInvocable.h include/scl/concepts/Boolean.h include/scl/concepts/InequalityComparable.h include/scl/concepts/InequalityComparableWith.h include/scl/concepts/Predicate.h include/scl/concepts/Relation.h include/scl/exceptions/exceptions.hpp include/scl/exceptions/Throwable.h include/scl/exceptions/Exception.h include/scl/exceptions/RuntimeException.h include/scl/utils/utils.hpp include/scl/utils/toString.h include/scl/tools/meta/exists.h include/scl/tools/iostream/toString.h include/scl/tools/meta/defines_scl_to_string.h include/scl/tools/meta/defines_std_to_string.h include/scl/tools/meta/defines_ostream_operator.h main.h include/scl/utils/Any.h include/scl/exceptions/InvalidArgument.h include/scl/exceptions/OutOfBound.h include/scl/exceptions/InvalidCast.h include/scl/exceptions/InvalidAnyCast.h include/scl/concepts/NonMovable.h include/scl/concepts/NonCopyable.h include/scl/utils/Optional.h include/scl/exceptions/EmptyOptionalAccess.h include/scl/tools/make/optional.h include/scl/tools/make/any.h include/scl/tools/meta/constexpr_assert.h include/scl/utils/Either.h include/scl/exceptions/InvalidEitherAccess.h include/scl/concepts/Iterator.h include/scl/tools/meta/swap.h include/scl/concepts/ValueSwappable.h include/scl/concepts/NullablePointer.h include/scl/concepts/AssignableWith.h include/scl/concepts/FunctionObject.h include/scl/concepts/Hash.h include/scl/concepts/CharTraits.h include/scl/concepts/BinaryPredicate.h include/scl/tools/meta/is_instance.h include/scl/tools/meta/real_const.h tests/libs/include/testutils/AdvancedTypes.h include/scl/utils/Placeholder.h include/scl/stream/operators/filter.h include/scl/stream/operators/uniqueBy.h include/scl/stream/details/iterator/StlAdapter.h include/scl/stream/operators/unique.h include/scl/async/async.hpp include/scl/async/with_traits.h include/scl/async/with.h include/scl/exceptions/InvalidResource.h include/scl/async/Mutexed.h include/scl/tools/make/mutexed.h include/scl/http/http.hpp include/scl/http/StatusCode.h include/scl/http/Version.h include/scl/exceptions/UninitializedMemoryAccess.h include/scl/stream/creators/istream.h include/scl/async/AsyncQueue.h include/scl/async/Channel.h include/scl/exceptions/NonNullViolation.h include/scl/detect/detect.hpp include/scl/detect/platform/platform.hpp include/scl/detect/platform/windows.h include/scl/detect/platform/unix.h include/scl/detect/platform/linux.h include/scl/detect/platform/platform.clean_macros.h include/scl/detect/platform/posix.h include/scl/detect/platform/apple.h include/scl/detect/platform/android.h include/scl/detect/platform/unified/unified.hpp include/scl/detect/platform/unified/windows.h include/scl/detect/platform/unified/unified.clean_macros.h include/scl/detect/platform/unified/posix.h include/scl/prelude/prelude.hpp include/scl/alias/alias.hpp include/scl/stream/details/deprecation.h include/scl/concepts/deprecation.h include/scl/utils/Result.h include/scl/exceptions/InvalidResultAccess.h include/scl/tools/make/result.h)
88
target_include_directories(StandardClassLibrary PRIVATE ${CMAKE_SOURCE_DIR}/include)
99

1010
add_subdirectory(tests)
+33-34
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,34 @@
1-
#pragma once
2-
3-
#include <scl/exceptions/Exception.h>
4-
#include <scl/macros.h>
5-
6-
namespace scl{
7-
namespace exceptions{
8-
/**
9-
* Exception class used when attempting to access the wrong type stored in an scl::utils::Either
10-
*/
11-
class InvalidEitherAccess : public Exception{
12-
public:
13-
using Exception::Exception;
14-
realConst(char*) type() const noexcept override{
15-
return "scl::exceptions::InvalidEitherAccess";
16-
}
17-
18-
/**
19-
* Helper function that creates an InvaidEitherAccess when trying to access Lhs when Rhs is active
20-
* @return the exception
21-
*/
22-
static InvalidEitherAccess leftWhenRight(){
23-
return InvalidEitherAccess{"Tried to access Lhs member of Either<Lhs, Rhs> when Rhs was set"};
24-
}
25-
26-
/**
27-
* Helper function that creates an InvaidEitherAccess when trying to access Rhs when Lhs is active
28-
* @return the exception
29-
*/
30-
static InvalidEitherAccess rightWhenLeft(){
31-
return InvalidEitherAccess{"Tried to access Rhs member of Either<Lhs, Rhs> when Lhs was set"};
32-
}
33-
};
34-
}
1+
#pragma once
2+
#include <scl/exceptions/Exception.h>
3+
#include <scl/macros.h>
4+
5+
namespace scl{
6+
namespace exceptions{
7+
/**
8+
* Exception class used when attempting to access the wrong type stored in an scl::utils::Either
9+
*/
10+
class InvalidEitherAccess : public Exception{
11+
public:
12+
using Exception::Exception;
13+
realConst(char*) type() const noexcept override{
14+
return "scl::exceptions::InvalidEitherAccess";
15+
}
16+
17+
/**
18+
* Helper function that creates an InvaidEitherAccess when trying to access Lhs when Rhs is active
19+
* @return the exception
20+
*/
21+
static InvalidEitherAccess leftWhenRight(){
22+
return InvalidEitherAccess{"Tried to access Lhs member of Either<Lhs, Rhs> when Rhs was set"};
23+
}
24+
25+
/**
26+
* Helper function that creates an InvaidEitherAccess when trying to access Rhs when Lhs is active
27+
* @return the exception
28+
*/
29+
static InvalidEitherAccess rightWhenLeft(){
30+
return InvalidEitherAccess{"Tried to access Rhs member of Either<Lhs, Rhs> when Lhs was set"};
31+
}
32+
};
33+
}
3534
}

include/scl/exceptions/exceptions.hpp

+23-22
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,24 @@
1-
#pragma once
2-
3-
namespace scl{
4-
/**
5-
* @namespace scl::exceptions
6-
* The namespace englobing all exception types
7-
*/
8-
namespace exceptions{}
9-
}
10-
11-
#include <scl/exceptions/Throwable.h>
12-
#include <scl/exceptions/Exception.h>
13-
#include <scl/exceptions/RuntimeException.h>
14-
15-
#include <scl/exceptions/InvalidArgument.h>
16-
#include <scl/exceptions/OutOfBound.h>
17-
#include <scl/exceptions/InvalidCast.h>
18-
#include <scl/exceptions/InvalidAnyCast.h>
19-
#include <scl/exceptions/EmptyOptionalAccess.h>
20-
#include <scl/exceptions/InvalidEitherAccess.h>
21-
#include <scl/exceptions/InvalidResource.h>
22-
#include <scl/exceptions/UninitializedMemoryAccess.h>
1+
#pragma once
2+
3+
namespace scl{
4+
/**
5+
* @namespace scl::exceptions
6+
* The namespace englobing all exception types
7+
*/
8+
namespace exceptions{}
9+
}
10+
11+
#include <scl/exceptions/Throwable.h>
12+
#include <scl/exceptions/Exception.h>
13+
#include <scl/exceptions/RuntimeException.h>
14+
15+
#include <scl/exceptions/InvalidArgument.h>
16+
#include <scl/exceptions/OutOfBound.h>
17+
#include <scl/exceptions/InvalidCast.h>
18+
#include <scl/exceptions/InvalidAnyCast.h>
19+
#include <scl/exceptions/EmptyOptionalAccess.h>
20+
#include <scl/exceptions/InvalidEitherAccess.h>
21+
#include <scl/exceptions/InvalidResultAccess.h>
22+
#include <scl/exceptions/InvalidResource.h>
23+
#include <scl/exceptions/UninitializedMemoryAccess.h>
2324
#include <scl/exceptions/NonNullViolation.h>

include/scl/tools/make/make.hpp

+21-20
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
1-
#pragma once
2-
3-
namespace scl{
4-
namespace tools{
5-
/**
6-
* @namespace scl::tools::make
7-
* Group of factory functions
8-
*/
9-
namespace make{}
10-
}
11-
}
12-
13-
#include <scl/tools/make/from.h>
14-
#include <scl/tools/make/ptr.h>
15-
#include <scl/tools/make/unique.h>
16-
#include <scl/tools/make/shared.h>
17-
#include <scl/tools/make/atomic.h>
18-
#include <scl/tools/make/promise.h>
19-
#include <scl/tools/make/optional.h>
20-
#include <scl/tools/make/any.h>
1+
#pragma once
2+
3+
namespace scl{
4+
namespace tools{
5+
/**
6+
* @namespace scl::tools::make
7+
* Group of factory functions
8+
*/
9+
namespace make{}
10+
}
11+
}
12+
13+
#include <scl/tools/make/from.h>
14+
#include <scl/tools/make/ptr.h>
15+
#include <scl/tools/make/unique.h>
16+
#include <scl/tools/make/shared.h>
17+
#include <scl/tools/make/atomic.h>
18+
#include <scl/tools/make/promise.h>
19+
#include <scl/tools/make/optional.h>
20+
#include <scl/tools/make/result.h>
21+
#include <scl/tools/make/any.h>
2122
#include <scl/tools/make/mutexed.h>

include/scl/utils/utils.hpp

+22-21
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
1-
#pragma once
2-
3-
namespace scl{
4-
/**
5-
* @namespace scl::utils
6-
* Utility classes (and rare functions)
7-
*/
8-
namespace utils{
9-
/**
10-
* @namespace scl::utils::details
11-
* Implementation details for the utility classes
12-
*/
13-
namespace details{}
14-
}
15-
}
16-
17-
#include <scl/utils/toString.h>
18-
#include <scl/utils/Any.h>
19-
#include <scl/utils/RawStorage.h>
20-
#include <scl/utils/Optional.h>
21-
#include <scl/utils/Either.h>
1+
#pragma once
2+
3+
namespace scl{
4+
/**
5+
* @namespace scl::utils
6+
* Utility classes (and rare functions)
7+
*/
8+
namespace utils{
9+
/**
10+
* @namespace scl::utils::details
11+
* Implementation details for the utility classes
12+
*/
13+
namespace details{}
14+
}
15+
}
16+
17+
#include <scl/utils/toString.h>
18+
#include <scl/utils/Any.h>
19+
#include <scl/utils/RawStorage.h>
20+
#include <scl/utils/Optional.h>
21+
#include <scl/utils/Either.h>
22+
#include <scl/utils/Result.h>
2223
#include <scl/utils/Placeholder.h>

0 commit comments

Comments
 (0)