LCOV - code coverage report
Current view: top level - AC_Avoidance - AP_OAVisGraph.h (source / functions) Hit Total Coverage
Test: lcov.info Lines: 4 4 100.0 %
Date: 2026-09-09 11:02:08 Functions: 4 4 100.0 %

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : #include "AC_Avoidance_config.h"
       4             : 
       5             : #if AP_OAPATHPLANNER_ENABLED
       6             : 
       7             : #include <AP_Common/AP_Common.h>
       8             : #include <AP_Common/AP_ExpandingArray.h>
       9             : 
      10             : /*
      11             :  * Visibility graph used by Dijkstra's algorithm for path planning around fence, stay-out zones and moving obstacles
      12             :  */
      13             : class AP_OAVisGraph {
      14             : public:
      15             :     AP_OAVisGraph();
      16             : 
      17             :     CLASS_NO_COPY(AP_OAVisGraph);  /* Do not allow copies */
      18             : 
      19             :     // types of items held in graph
      20             :     enum OAType : uint8_t {
      21             :         OATYPE_SOURCE = 0,
      22             :         OATYPE_DESTINATION,
      23             :         OATYPE_INTERMEDIATE_POINT,
      24             :     };
      25             : 
      26             :     // support up to 255 items of each type
      27             :     typedef uint8_t oaid_num;
      28             : 
      29             :     // id for uniquely identifying objects held in visibility graphs and paths
      30             :     class OAItemID {
      31             :     public:
      32             :         OAType id_type;
      33             :         oaid_num id_num;
      34        1722 :         bool operator ==(const OAItemID &i) const { return ((id_type == i.id_type) && (id_num == i.id_num)); }
      35             :     };
      36             : 
      37             :     struct VisGraphItem {
      38             :         OAItemID id1;       // first item's id
      39             :         OAItemID id2;       // second item's id
      40             :         float distance_cm;  // distance between the items
      41             :     };
      42             : 
      43             :     // clear all elements from graph
      44           5 :     void clear() { _num_items = 0; }
      45             : 
      46             :     // get number of items in visibility graph table
      47         924 :     uint16_t num_items() const { return _num_items; }
      48             : 
      49             :     // add item to visiblity graph, returns true on success, false if graph is full
      50             :     bool add_item(const OAItemID &id1, const OAItemID &id2, float distance_cm);
      51             : 
      52             :     // allow accessing graph as an array, 0 indexed
      53             :     // Note: no protection against out-of-bounds accesses so use with num_items()
      54         832 :     const VisGraphItem& operator[](uint16_t i) const { return _items[i]; }
      55             : 
      56             : private:
      57             : 
      58             :     AP_ExpandingArray<VisGraphItem> _items;
      59             :     uint16_t _num_items;
      60             : };
      61             : 
      62             : #endif  // AP_OAPATHPLANNER_ENABLED

Generated by: LCOV version 1.14