1
0
forked from Alepha/Alepha

Exception problem debugging.

This commit is contained in:
2024-09-05 12:15:14 -04:00
parent 90531755f8
commit 759b2ecdea
6 changed files with 34 additions and 11 deletions

View File

@ -33,9 +33,14 @@ namespace Alepha::Hydrogen::Atomic ::detail:: Dropbox_m
inline namespace exports
{
struct finished_exception;
template< typename > class Dropbox;
using DropboxFinishedException= synthetic_exception< struct finished_exception, FinishedException >;
template< template< auto > class > struct ck {};
template< typename > class tag;
using ck2= ck< tag >;
using DropboxFinishedException= synthetic_exception< finished_exception, FinishedException >;
using AnyTaggedDropboxFinishedException= AnyTagged< DropboxFinishedException >;
template< typename tag > using TaggedDropboxFinishedException= Tagged< DropboxFinishedException, tag >;

View File

@ -31,6 +31,7 @@ namespace Alepha::Hydrogen::Atomic ::detail:: Mailbox_m
inline namespace exports
{
struct finished_exception;
template< typename > class Mailbox;
using MailboxFinishedException= synthetic_exception< struct finished_exception, FinishedException >;

View File

@ -1,6 +1,7 @@
static_assert( __cplusplus > 2020'99 );
#include "../Mailbox.h"
#include "../Dropbox.h"
#include <Alepha/Testing/test.h>
#include <Alepha/Testing/TableTest.h>
@ -14,7 +15,7 @@ static auto init= Alepha::Utility::enroll <=[]
"Smoke Test"_test <=[]
{
Alepha::Atomic::Mailbox< int > m( 1024 );
Alepha::Atomic::Dropbox< int > m( 1024 );
m.push( 42 );
m.push( 42 );
@ -23,6 +24,13 @@ static auto init= Alepha::Utility::enroll <=[]
assert( m.pop() == 42 );
assert( m.pop() == 42 );
Alepha::Atomic::DropboxFinishedException *de= nullptr;
Alepha::Atomic::MailboxFinishedException *me= nullptr;
//Alepha::Atomic::MailboxFinishedException2 *me2= nullptr;
static_assert( not std::is_same_v< decltype( de ), decltype( me ) > );
//me2= me;
//de= me;
try
{
m.pop();
@ -34,15 +42,17 @@ static auto init= Alepha::Utility::enroll <=[]
std::cerr << "We caught an exception." << std::endl;
const Alepha::Exception *const cond_p= &cond;
assert( dynamic_cast< const Alepha::Atomic::MailboxFinishedException * >( cond_p ) );
assert( not dynamic_cast< const Alepha::Atomic::MailboxFinishedException * >( cond_p ) );
assert( dynamic_cast< const Alepha::Atomic::DropboxFinishedException * >( cond_p ) );
assert( dynamic_cast< const Alepha::FinishedException * >( cond_p ) );
assert( dynamic_cast< const Alepha::Exception * >( cond_p ) );
assert( dynamic_cast< const Alepha::Atomic::MailboxFinishedCondition * >( cond_p ) );
assert( not dynamic_cast< const Alepha::Atomic::MailboxFinishedCondition * >( cond_p ) );
assert( dynamic_cast< const Alepha::FinishedCondition * >( cond_p ) );
assert( dynamic_cast< const Alepha::Condition * >( cond_p ) );
assert( not dynamic_cast< const Alepha::CriticalError * >( cond_p ) );
assert( not dynamic_cast< const Alepha::Atomic::AnyTaggedMailboxFinishedException * >( cond_p ) );
assert( not dynamic_cast< const Alepha::AnyTaggedFinishedException * >( cond_p ) );

View File

@ -59,6 +59,9 @@ namespace Alepha::Hydrogen ::detail:: Concepts_m
template< typename T >
concept EmptyType= std::is_empty_v< T >;
template< typename T >
concept Enumeration= std::is_enum_v< T >;
// Stream related concepts...
template< typename T >
concept OStreamable=

View File

@ -18,6 +18,8 @@ static auto init= Alepha::Utility::enroll <=[]
using MyEnum= Alepha::Enum< "Adam"_value, "Baker"_value, "Charlie"_value, "David"_value >;
static_assert( not std::is_same_v< decltype( "adam"_value ), decltype( "tony"_value ) > );
"Enum round trip printing test"_test <= TableTest
<
[]( const std::string s ) -> std::string

View File

@ -79,7 +79,7 @@ namespace Alepha::Hydrogen ::detail:: Exception_m
{
};
template< typename unique_handle, typename GradeType, typename ... Bases >
template< Enumeration unique_handle, typename GradeType, typename ... Bases >
class synthetic_exception
: virtual public bases< GradeType, Bases... >
{
@ -332,33 +332,35 @@ namespace Alepha::Hydrogen ::detail:: Exception_m
public:
std::string_view resourceName() const noexcept final { return storage; }
};
class NamedResourceException : public virtual create_exception< struct named_resource_throwable, Exception >, virtual public NamedResourceInterface {};
enum NamedResource;
class NamedResourceException : public virtual create_exception< NamedResource, Exception >, virtual public NamedResourceInterface {};
using AnyTaggedNamedResourceException= NamedResourceException::any_tagged_type;
template< typename tag >
using TaggedNamedResourceException= NamedResourceException::tagged_type< tag >;
using NamedResourceNotification= create_exception< struct named_resource_notification, Notification, NamedResourceException >;
using NamedResourceNotification= create_exception< NamedResource, Notification, NamedResourceException >;
using AnyTaggedNamedResourceNotification= NamedResourceNotification::any_tagged_type;
template< typename tag >
using TaggedNamedResourceNotification= NamedResourceNotification::tagged_type< tag >;
using NamedResourceError= create_exception< struct named_resource_exception, Error, NamedResourceException >;
using NamedResourceError= create_exception< NamedResource, Error, NamedResourceException >;
using AnyTaggedNamedResourceError= NamedResourceError::any_tagged_type;
template< typename tag >
using TaggedNamedResourceError= NamedResourceError::tagged_type< tag >;
using NamedResourceCriticalError= create_exception< struct named_resource_error, CriticalError, NamedResourceException >;
using NamedResourceCriticalError= create_exception< NamedResource, CriticalError, NamedResourceException >;
using AnyTaggedNamedResourceCriticalError= NamedResourceCriticalError::any_tagged_type;
template< typename tag >
using TaggedNamedResourceCriticalError= NamedResourceCriticalError::tagged_type< tag >;
using NamedResourceViolation= create_exception< struct named_resource_violation, Violation, NamedResourceException >;
using NamedResourceViolation= create_exception< NamedResource, Violation, NamedResourceException >;
using AnyTaggedNamedResourceViolation= NamedResourceViolation::any_tagged_type;
template< typename tag >
using TaggedNamedResourceViolation= NamedResourceViolation::tagged_type< tag >;
enum OutOfRange;
class OutOfRangeException
: virtual public create_exception< struct out_of_range_throwable, Exception > {};
: virtual public create_exception< OutOfRange, Exception > {};
using AnyTaggedOutOfRangeException= OutOfRangeException::any_tagged_type;
template< typename tag >
using TaggedOutOfRangeException= OutOfRangeException::tagged_type< tag >;