blob: 0aea0697358482a966e6c158e525751c9c4bc156 (
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
|
#include <cstring>
#include "NotificationManager.h"
using namespace Pinetime::Controllers;
void NotificationManager::Push(Pinetime::Controllers::NotificationManager::Categories category,
const char *message, uint8_t currentMessageSize) {
// TODO handle edge cases on read/write index
auto checkedSize = std::min(currentMessageSize, uint8_t{18});
auto& notif = notifications[writeIndex];
std::memcpy(notif.message.data(), message, checkedSize);
notif.message[checkedSize] = '\0';
notif.category = category;
writeIndex = (writeIndex + 1 < TotalNbNotifications) ? writeIndex + 1 : 0;
if(!empty && writeIndex == readIndex)
readIndex = writeIndex + 1;
}
NotificationManager::Notification Pinetime::Controllers::NotificationManager::Pop() {
// TODO handle edge cases on read/write index
NotificationManager::Notification notification = notifications[readIndex];
if(readIndex != writeIndex) {
readIndex = (readIndex + 1 < TotalNbNotifications) ? readIndex + 1 : 0;
}
// TODO Check move optimization on return
return notification;
}
|