Files
Upsilon/apps/apps_container_storage.cpp
2023-10-16 19:35:31 +02:00

59 lines
1.5 KiB
C++

#include "apps_container_storage.h"
#ifndef APPS_CONTAINER_SNAPSHOT_CONSTRUCTORS
#error Missing snapshot constructors
#endif
#ifndef APPS_CONTAINER_SNAPSHOT_LIST
#error Missing snapshot list
#endif
#ifndef APPS_CONTAINER_SNAPSHOT_COUNT
#error Missing snapshot count
#endif
constexpr int k_numberOfCommonApps = 1+APPS_CONTAINER_SNAPSHOT_COUNT; // Take the Home app into account
AppsContainerStorage::AppsContainerStorage() :
AppsContainer()
APPS_CONTAINER_SNAPSHOT_CONSTRUCTORS
{
}
int AppsContainerStorage::numberOfApps() {
return k_numberOfCommonApps;
}
App::Snapshot * AppsContainerStorage::appSnapshotAtIndex(int index) {
if (index < 0) {
return nullptr;
}
App::Snapshot * snapshots[] = {
homeAppSnapshot()
APPS_CONTAINER_SNAPSHOT_LIST
};
assert(sizeof(snapshots)/sizeof(snapshots[0]) == k_numberOfCommonApps);
assert(index >= 0 && index < k_numberOfCommonApps);
// To avoid crashes, we return the home app snapshot if the index is out of
// bounds. (no crash in release mode, but an assert in debug mode)
if (index >= k_numberOfCommonApps) {
return snapshots[0];
}
return snapshots[index];
}
// Get the index of the app from its snapshot
int AppsContainerStorage::appIndexFromSnapshot(App::Snapshot * snapshot) {
App::Snapshot * snapshots[] = {
homeAppSnapshot()
APPS_CONTAINER_SNAPSHOT_LIST
};
assert(sizeof(snapshots)/sizeof(snapshots[0]) == k_numberOfCommonApps);
for (int i = 0; i < k_numberOfCommonApps; i++) {
if (snapshots[i] == snapshot) {
return i;
}
}
return NULL;
}