blob: 5c3c276ad83ca52cd8eae86fb110061e63a8dfcc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
#include <algorithm>
#include "mail.hpp"
namespace smtp::manage
{
Mail::Mail( file::Mail const& file_reader )
: mFileReader( file_reader )
{
mMails = mFileReader.Read();
}
MailsSet Mail::GetMailToSend() const
{
return mMails;
}
bool Mail::AddMailsToSend( MailsSet const& mails_to_add )
{
auto merged_mails = GetMergedMails( mails_to_add );
auto result = mFileReader.Write( merged_mails );
if( result )
{
mMails = merged_mails;
}
return result;
}
bool Mail::DeleteMailToSend( MailsSet const& mail_to_send )
{
auto mails_to_delete = GetItersectionMails( mail_to_send );
auto result_set_after_delete = GetMailsAfterDelete( mails_to_delete );
auto result_of_delete = mFileReader.Write( result_set_after_delete );
if( result_of_delete )
{
mMails = result_set_after_delete;
}
return result_of_delete;
}
MailsSet Mail::GetMergedMails( MailsSet const& mails_to_add )
{
auto result = mails_to_add;
result.merge( mMails );
return result;
}
MailsSet Mail::GetItersectionMails( MailsSet const& mail_to_send )
{
MailsSet result;
auto sorted_mail_to_send = mail_to_send;
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 );
}
return result;
}
}
|