| 1 | /*
 | 
| 2 |  * Souffle - A Datalog Compiler
 | 
| 3 |  * Copyright (c) 2016, The Souffle Developers. All rights reserved
 | 
| 4 |  * Licensed under the Universal Permissive License v 1.0 as shown at:
 | 
| 5 |  * - https://opensource.org/licenses/UPL
 | 
| 6 |  * - <souffle root>/licenses/SOUFFLE-UPL.txt
 | 
| 7 |  */
 | 
| 8 | 
 | 
| 9 | #pragma once
 | 
| 10 | 
 | 
| 11 | #include "souffle/profile/CellInterface.h"
 | 
| 12 | #include "souffle/profile/Row.h"
 | 
| 13 | 
 | 
| 14 | #include <cmath>
 | 
| 15 | #include <memory>
 | 
| 16 | #include <vector>
 | 
| 17 | 
 | 
| 18 | namespace souffle {
 | 
| 19 | namespace profile {
 | 
| 20 | 
 | 
| 21 | /*
 | 
| 22 |  * Data comparison functions for sorting tables
 | 
| 23 |  *
 | 
| 24 |  * Will sort the values of only one column, in descending order
 | 
| 25 |  *
 | 
| 26 |  */
 | 
| 27 | class DataComparator {
 | 
| 28 | public:
 | 
| 29 |     /** Sort by total time. */
 | 
| 30 |     static bool TIME(const std::shared_ptr<Row>& a, const std::shared_ptr<Row>& b) {
 | 
| 31 |         return a->cells[0]->getDoubleVal() > b->cells[0]->getDoubleVal();
 | 
| 32 |     }
 | 
| 33 | 
 | 
| 34 |     /** Sort by non-recursive time. */
 | 
| 35 |     static bool NR_T(const std::shared_ptr<Row>& a, const std::shared_ptr<Row>& b) {
 | 
| 36 |         return a->cells[1]->getDoubleVal() > b->cells[1]->getDoubleVal();
 | 
| 37 |     }
 | 
| 38 | 
 | 
| 39 |     /** Sort by recursive time. */
 | 
| 40 |     static bool R_T(const std::shared_ptr<Row>& a, const std::shared_ptr<Row>& b) {
 | 
| 41 |         return a->cells[2]->getDoubleVal() > b->cells[2]->getDoubleVal();
 | 
| 42 |     }
 | 
| 43 | 
 | 
| 44 |     /** Sort by copy time. */
 | 
| 45 |     static bool C_T(const std::shared_ptr<Row>& a, const std::shared_ptr<Row>& b) {
 | 
| 46 |         return a->cells[3]->getDoubleVal() > b->cells[3]->getDoubleVal();
 | 
| 47 |     }
 | 
| 48 | 
 | 
| 49 |     /** Sort by tuple count. */
 | 
| 50 |     static bool TUP(const std::shared_ptr<Row>& a, const std::shared_ptr<Row>& b) {
 | 
| 51 |         return b->cells[4]->getLongVal() < a->cells[4]->getLongVal();
 | 
| 52 |     }
 | 
| 53 | 
 | 
| 54 |     /** Sort by name. */
 | 
| 55 |     static bool NAME(const std::shared_ptr<Row>& a, const std::shared_ptr<Row>& b) {
 | 
| 56 |         return b->cells[5]->getStringVal() > a->cells[5]->getStringVal();
 | 
| 57 |     }
 | 
| 58 | 
 | 
| 59 |     /** Sort by ID. */
 | 
| 60 |     static bool ID(const std::shared_ptr<Row>& a, const std::shared_ptr<Row>& b) {
 | 
| 61 |         return b->cells[6]->getStringVal() > a->cells[6]->getStringVal();
 | 
| 62 |     }
 | 
| 63 | };
 | 
| 64 | 
 | 
| 65 | }  // namespace profile
 | 
| 66 | }  // namespace souffle
 |