sort implementation

main
xd 3 years ago
parent 9ed49d95ba
commit 88bb73a3f8

@ -5,7 +5,33 @@
#include <json/retrieve.h> #include <json/retrieve.h>
#include <stdexcept> #include <stdexcept>
/// @brief This is a callback function to process the json data of a node provided by the API into an array of Node structs. /// @brief Function to compare nodes by the uptime.
/// @param a The first node to compare
/// @param b The node to compare to
/// @return True if the uptime of node b is higher, false if uptime of a is higher.
bool compareNode(const Node &a, const Node &b) {
return a.uptime < b.uptime;
}
/// @brief Function to compare containers by ID.
/// @param a The first container to compare
/// @param b The container to compare to
/// @return True if the ID of container b is higher, false if uptime of a is higher.
bool compareContainer(const Container &a, const Container &b) {
return a.id < b.id;
}
/// @brief Function to compare VMs by ID.
/// @param a The first VM to compare
/// @param b The VM to compare to
/// @return True if the ID of VM b is higher, false if ID of a is higher.
bool compareVM(const VM &a, const VM &b) {
return a.id < b.id;
}
/// @brief This is a callback function to process the json data of a node provided by the API into an array of Node structs. Also sorts the nodes based on uptime.
/// @param doc A reference to the json document containing the data from the API. /// @param doc A reference to the json document containing the data from the API.
/// @param numNodes A reference to an integer containing the number of nodes retrieved from the API. /// @param numNodes A reference to an integer containing the number of nodes retrieved from the API.
/// @param nodeArray A pointer to the array used to hold the nodes once they have been processed. /// @param nodeArray A pointer to the array used to hold the nodes once they have been processed.
@ -27,11 +53,14 @@ void processNodeData(DynamicJsonDocument &doc, int &numNodes, void *&nodeArray)
array[i].uptime = nodes[i]["uptime"].as<long long>(); array[i].uptime = nodes[i]["uptime"].as<long long>();
} }
// Sort the array
std::sort(array, array + nodes.size(), compareNode);
numNodes = nodes.size(); numNodes = nodes.size();
nodeArray = array; nodeArray = array;
} }
/// @brief This is a callback function to process the json data of a container provided by the api into an array of Container structs. /// @brief This is a callback function to process the json data of a container provided by the api into an array of Container structs. Also sorts the containers based on id.
/// @param doc A reference to the json document containing the data from the API. /// @param doc A reference to the json document containing the data from the API.
/// @param numContainers A reference to an integer containing the number of containers retrieved from the API. /// @param numContainers A reference to an integer containing the number of containers retrieved from the API.
/// @param containerArray A pointer to the array used to hold the containers once they have been processed. /// @param containerArray A pointer to the array used to hold the containers once they have been processed.
@ -50,11 +79,29 @@ void processContainerData(DynamicJsonDocument &doc, int &numContainers, void *&c
array[i].uptime = containers[i]["uptime"].as<long long>(); array[i].uptime = containers[i]["uptime"].as<long long>();
} }
// Record the starting time
unsigned long startTime = micros();
// Run the function you want to measure
std::sort(array, array + containers.size(), compareContainer);
// Calculate the elapsed time
unsigned long elapsedTime = micros() - startTime;
// Print the elapsed time in microseconds
Serial.print("Elapsed time: ");
Serial.print(elapsedTime);
Serial.println(" microseconds");
// Sort the array
//std::sort(array, array + containers.size(), compareContainer);
numContainers = containers.size(); numContainers = containers.size();
containerArray = array; containerArray = array;
} }
/// @brief This is a callback function to process the json data of a VM provided by the api into an array of VM structs. /// @brief This is a callback function to process the json data of a VM provided by the api into an array of VM structs. Also sorts the VMs based on id.
/// @param doc A reference to the json document containing the data from the API. /// @param doc A reference to the json document containing the data from the API.
/// @param numVMs A reference to an integer containing the number of VMs retrieved from the API. /// @param numVMs A reference to an integer containing the number of VMs retrieved from the API.
/// @param vmArray A pointer to the array used to hold the VMs once they have been processed. /// @param vmArray A pointer to the array used to hold the VMs once they have been processed.
@ -75,6 +122,9 @@ void processVMData(DynamicJsonDocument &doc, int &numVMs, void *&vmArray)
array[i].netout = vms[i]["netout"].as<long long>(); array[i].netout = vms[i]["netout"].as<long long>();
} }
// Sort the array
std::sort(array, array + vms.size(), compareVM);
numVMs = vms.size(); numVMs = vms.size();
vmArray = array; vmArray = array;
} }

@ -65,7 +65,7 @@ int buttonListener(const int &numItems)
Serial.println(selectedItem); Serial.println(selectedItem);
break; break;
} }
if (GO.JOY_X.isAxisPressed() == 1 && selectedPage + 1 < (numItems / ITEMS_PER_PAGE)) if (GO.JOY_X.isAxisPressed() == 1 && selectedPage + 1 < (float(numItems) / ITEMS_PER_PAGE))
{ {
selectedPage++; selectedPage++;
selectedItem = selectedPage * ITEMS_PER_PAGE; selectedItem = selectedPage * ITEMS_PER_PAGE;
@ -342,6 +342,7 @@ void listItems(
void listNodes(Node *nodes, const int &numItems) void listNodes(Node *nodes, const int &numItems)
{ {
selectedItem = 0; selectedItem = 0;
selectedPage = 0;
void *item; void *item;
listItems(nodes, &item, "Select Node", numItems, sizeof(Node), false, nodeMenuPrint); listItems(nodes, &item, "Select Node", numItems, sizeof(Node), false, nodeMenuPrint);
@ -368,6 +369,7 @@ void listNodes(Node *nodes, const int &numItems)
int listContainers(Container *containers, const int &numItems) int listContainers(Container *containers, const int &numItems)
{ {
selectedItem = 0; selectedItem = 0;
selectedPage = 0;
void *item; void *item;
listItems(containers, &item, "Select Container", numItems, sizeof(Container), true, containerMenuPrint); listItems(containers, &item, "Select Container", numItems, sizeof(Container), true, containerMenuPrint);
@ -395,6 +397,7 @@ int listContainers(Container *containers, const int &numItems)
int listVMs(VM *vms, const int &numItems) int listVMs(VM *vms, const int &numItems)
{ {
selectedItem = 0; selectedItem = 0;
selectedPage = 0;
void *item; void *item;
listItems(vms, &item, "Select VM", numItems, sizeof(VM), true, vmMenuPrint); listItems(vms, &item, "Select VM", numItems, sizeof(VM), true, vmMenuPrint);
if (item != nullptr) if (item != nullptr)
@ -421,6 +424,7 @@ int listVMs(VM *vms, const int &numItems)
String listDisks(Disk *disks, const int &numItems) String listDisks(Disk *disks, const int &numItems)
{ {
selectedItem = 0; selectedItem = 0;
selectedPage = 0;
void *item; void *item;
listItems(disks, &item, "Select Disk", numItems, sizeof(Disk), true, diskMenuPrint); listItems(disks, &item, "Select Disk", numItems, sizeof(Disk), true, diskMenuPrint);
@ -448,6 +452,7 @@ String listDisks(Disk *disks, const int &numItems)
String listPools(Pool *pools, const int &numItems) String listPools(Pool *pools, const int &numItems)
{ {
selectedItem = 0; selectedItem = 0;
selectedPage = 0;
void *item; void *item;
listItems(pools, &item, "Select Pool", numItems, sizeof(Pool), true, poolMenuPrint); listItems(pools, &item, "Select Pool", numItems, sizeof(Pool), true, poolMenuPrint);
if (item != nullptr) if (item != nullptr)

Loading…
Cancel
Save