From 43e721305c866ad4b2c4c35d1133f169e41dd49b Mon Sep 17 00:00:00 2001 From: claiff Date: Wed, 5 Oct 2022 15:57:43 +0300 Subject: file reader/writer split by decorators --- src/management/mail.cpp | 56 ++++++++++++++++++++++++------------------------- 1 file changed, 27 insertions(+), 29 deletions(-) (limited to 'src/management/mail.cpp') diff --git a/src/management/mail.cpp b/src/management/mail.cpp index 87ebb51..d569826 100644 --- a/src/management/mail.cpp +++ b/src/management/mail.cpp @@ -8,9 +8,9 @@ namespace smtp::manage //Constructors // - Mail::Mail( file::Mail const& file_reader ) + Mail::Mail( file::mail::types::IFileManipulatorPtr const& file_reader ) : mFileReader( file_reader ) - , mMails( mFileReader.Read() ) + , mMails( mFileReader->Read() ) { } @@ -28,61 +28,59 @@ namespace smtp::manage { auto merged_mails = GetMergedMails( mails_to_add ); - return RefreshMails( mails_to_add ); + return RefreshMails( merged_mails ); } - bool Mail::DeleteMailToSend( MailsSet const& mail_to_send ) + bool Mail::DeleteMailToSend( MailsSet const& mail_to_delete ) { - auto mails_to_delete = GetItersectionMails( mail_to_send ); + auto mails_to_delete = GetItersectionMails( mail_to_delete ); + auto result_set_after_delete = GetMailsAfterDelete( mails_to_delete ); - return RefreshMails( mails_to_delete ); + return RefreshMails( result_set_after_delete ); } // //Private methods // - MailsSet Mail::GetMergedMails( MailsSet const& mails_to_add ) + MailsSet Mail::GetMergedMails( MailsSet const& mails_to_add ) { - MailsSet result; - auto sorted_mail_to_add = mails_to_add; - sorted_mail_to_add.sort(); - mMails.sort(); + auto result = mails_to_add; + result.merge( mMails ); - std::set_union( mMails.cbegin(), mMails.cend(), - sorted_mail_to_add.cbegin(), sorted_mail_to_add.cend(), - std::back_inserter( result )); - return result; - } + result.sort(); + result.unique(); + + return result; + } - MailsSet Mail::GetItersectionMails( MailsSet const& mail_to_send ) + MailsSet Mail::GetItersectionMails( MailsSet const& mail_to_delete ) const { - MailsSet result; + MailsSet result; - auto sorted_mail_to_send = mail_to_send; + auto sorted_mail_to_send = mail_to_delete; sorted_mail_to_send.sort(); - mMails.sort(); std::set_intersection( mMails.cbegin(), mMails.cend(), sorted_mail_to_send.cbegin(), sorted_mail_to_send.cend(), std::back_inserter( result ) ); return result; } - MailsSet Mail::GetMailsAfterDelete( MailsSet const& result_set_after_delete ) - { - auto result = mMails; - for( const auto& element_to_delete : result_set_after_delete ) - { - result.remove( element_to_delete ); - } + MailsSet Mail::GetMailsAfterDelete( MailsSet const& mails_to_delete ) + { + auto result = mMails; + for( const auto& mail : mails_to_delete ) + { + result.remove( mail ); + } return result; } bool Mail::RefreshMails( MailsSet const& new_mails ) { - auto result = mFileReader.Write( new_mails ); - mMails = mFileReader.Read(); + auto result = mFileReader->Write( new_mails ); + mMails = mFileReader->Read(); return result; } } -- cgit v1.2.3