LCOV - code coverage report
Current view: top level - libgnucash/engine - Account.hpp (source / functions) Coverage Total Hit
Test: gnucash.info Lines: 68.8 % 16 11
Test Date: 2026-11-02 18:19:43 Functions: 66.7 % 6 4
Legend: Lines:     hit not hit

            Line data    Source code
       1              : /**********************************************************************
       2              :  * Account.hpp
       3              :  *                                                                    *
       4              :  * This program is free software; you can redistribute it and/or      *
       5              :  * modify it under the terms of the GNU General Public License as     *
       6              :  * published by the Free Software Foundation; either version 2 of     *
       7              :  * the License, or (at your option) any later version.                *
       8              :  *                                                                    *
       9              :  * This program is distributed in the hope that it will be useful,    *
      10              :  * but WITHOUT ANY WARRANTY; without even the implied warranty of     *
      11              :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the      *
      12              :  * GNU General Public License for more details.                       *
      13              :  *                                                                    *
      14              :  * You should have received a copy of the GNU General Public License  *
      15              :  * along with this program; if not, contact:                          *
      16              :  *                                                                    *
      17              :  * Free Software Foundation           Voice:  +1-617-542-5942         *
      18              :  * 51 Franklin Street, Fifth Floor    Fax:    +1-617-542-2652         *
      19              :  * Boston, MA  02110-1301,  USA       gnu@gnu.org                     *
      20              :  *                                                                    *
      21              :  *********************************************************************/
      22              : 
      23              : /** @addtogroup Engine
      24              :     @{ */
      25              : /** @addtogroup Account
      26              : 
      27              :     @{ */
      28              : /** @file Account.hpp
      29              :  *  @brief Account public routines (C++ api)
      30              :  */
      31              : 
      32              : #ifndef GNC_ACCOUNT_HPP
      33              : #define GNC_ACCOUNT_HPP
      34              : 
      35              : #include <vector>
      36              : #include <functional>
      37              : #include <algorithm>
      38              : #include <optional>
      39              : 
      40              : #include <Account.h>
      41              : #include <SplitP.hpp>
      42              : #include <TransactionP.hpp>
      43              : 
      44              : using SplitsVec = std::vector<Split*>;
      45              : using AccountVec = std::vector<Account*>;
      46              : 
      47              : const SplitsVec& xaccAccountGetSplits (const Account*);
      48              : 
      49              : void gnc_account_foreach_descendant (const Account *, std::function<void(Account*)> func);
      50              : 
      51              : 
      52              : static inline SplitsVec::const_iterator
      53         1260 : splits_start (const SplitsVec& splits, std::optional<time64> start_date)
      54              : {
      55         1260 :     if (!start_date) return splits.begin();
      56            0 :     return std::lower_bound (splits.begin(), splits.end(), *start_date,
      57            0 :                              [](auto s, time64 t){ return s->parent->date_posted < t; });
      58              : }
      59              : 
      60              : static inline SplitsVec::const_iterator
      61         1260 : splits_end (const SplitsVec& splits, std::optional<time64> end_date)
      62              : {
      63         1260 :     if (!end_date) return splits.end();
      64            0 :     return std::upper_bound (splits.begin(), splits.end(), *end_date,
      65            0 :                              [](time64 t, auto s){ return t < s->parent->date_posted; });
      66              : }
      67              : 
      68              : template <typename Fn>
      69         1260 : void gnc_account_foreach_split_between_dates (const Account* account,
      70              :                                               std::optional<time64> start_date,
      71              :                                               std::optional<time64> end_date,
      72              :                                               bool include_descendants, Fn&& fn)
      73              : {
      74         1260 :     g_return_if_fail (GNC_IS_ACCOUNT (account));
      75         3780 :     auto scan_account = [&](const Account* acc)
      76              :     {
      77         1260 :         const auto& splits = xaccAccountGetSplits (acc);
      78         1260 :         std::for_each (splits_start (splits, start_date), splits_end (splits, end_date),
      79              :                        fn);
      80              :     };
      81              : 
      82         1260 :     scan_account (account);
      83         1260 :     if (include_descendants)
      84            0 :         gnc_account_foreach_descendant (account, scan_account);
      85              : }
      86              : 
      87              : void gnc_account_foreach_split (const Account*, std::function<void(Split*)>);
      88              : 
      89              : void gnc_account_foreach_split_until_date (const Account *acc, time64 end_date,
      90              :                                            std::function<void(Split*)> f);
      91              : 
      92              : /** scans account split list (in forward or reverse order) until
      93              :  *    predicate split->bool returns true. Maybe return the split.
      94              :  *
      95              :  *  @param acc The account to which the split should be added.
      96              :  *
      97              :  *  @param predicate A split->bool predicate.
      98              :  *
      99              :  *  @param reverse To scan in reverse order
     100              :  *
     101              :  *  @result Split* or nullptr if not found */
     102              : Split* gnc_account_find_split (const Account*, std::function<bool(const Split*)>, bool);
     103              : 
     104              : std::vector<const Account*> gnc_account_get_all_parents (const Account *account);
     105              : 
     106              : #endif /* GNC_COMMODITY_HPP */
     107              : /** @} */
     108              : /** @} */
        

Generated by: LCOV version 2.0-1