LCOV - code coverage report
Current view: top level - ctrl/include - ctrl_undo_redo_iterator.inl (source / functions) Hit Total Coverage
Test: crystal-facet-uml_v1.61.0_covts Lines: 42 42 100.0 %
Date: 2024-10-26 21:44:38 Functions: 7 7 100.0 %

          Line data    Source code
       1             : /* File: ctrl_undo_redo_iterator.inl; Copyright and License: see below */
       2             : 
       3          20 : static inline void ctrl_undo_redo_iterator_init ( ctrl_undo_redo_iterator_t *this_,
       4             :                                                   const ctrl_undo_redo_entry_t (*ring_buf)[],
       5             :                                                   uint32_t ring_buf_size,
       6             :                                                   bool iterate_upwards,
       7             :                                                   uint32_t current,
       8             :                                                   uint32_t length )
       9             : {
      10          20 :     assert( ring_buf != NULL );
      11          20 :     assert( ring_buf_size > 0 );
      12          20 :     assert( current < ring_buf_size );
      13          20 :     assert( length <= ring_buf_size );
      14          20 :     (*this_).ring_buf = ring_buf;
      15          20 :     (*this_).ring_buf_size = ring_buf_size;
      16          20 :     (*this_).iterate_upwards = iterate_upwards;
      17          20 :     (*this_).current = current;
      18          20 :     (*this_).length = length;
      19          20 : }
      20             : 
      21           9 : static inline void ctrl_undo_redo_iterator_reinit ( ctrl_undo_redo_iterator_t *this_,
      22             :                                                     const ctrl_undo_redo_entry_t (*ring_buf)[],
      23             :                                                     uint32_t ring_buf_size,
      24             :                                                     bool iterate_upwards,
      25             :                                                     uint32_t current,
      26             :                                                     uint32_t length )
      27             : {
      28           9 :     ctrl_undo_redo_iterator_init( this_, ring_buf, ring_buf_size, iterate_upwards, current, length );
      29           9 : }
      30             : 
      31           9 : static inline void ctrl_undo_redo_iterator_init_empty ( ctrl_undo_redo_iterator_t *this_ )
      32             : {
      33           9 :     (*this_).ring_buf = NULL;
      34           9 :     (*this_).ring_buf_size = 1;
      35           9 :     (*this_).iterate_upwards = true;
      36           9 :     (*this_).current = 0;
      37           9 :     (*this_).length = 0;
      38           9 : }
      39             : 
      40          20 : static inline void ctrl_undo_redo_iterator_destroy ( ctrl_undo_redo_iterator_t *this_ )
      41             : {
      42          20 :     (*this_).ring_buf = NULL;
      43          20 : }
      44             : 
      45          80 : static inline bool ctrl_undo_redo_iterator_has_next ( const ctrl_undo_redo_iterator_t *this_ )
      46             : {
      47          80 :     return ( (*this_).length != 0 );
      48             : }
      49             : 
      50          59 : static inline const ctrl_undo_redo_entry_t * ctrl_undo_redo_iterator_next ( ctrl_undo_redo_iterator_t *this_ )
      51             : {
      52          59 :     assert( (*this_).length > 0 );
      53             : 
      54          59 :     const ctrl_undo_redo_entry_t * result = NULL;
      55          59 :     if ( (*this_).length > 0 )
      56             :     {
      57          59 :         result = &((*(*this_).ring_buf)[(*this_).current]);
      58          59 :         if ( (*this_).iterate_upwards )
      59             :         {
      60           3 :             (*this_).current = ( (*this_).current + 1 ) % (*this_).ring_buf_size;
      61             :         }
      62             :         else
      63             :         {
      64          56 :             (*this_).current = ( (*this_).current + (*this_).ring_buf_size - 1 ) % (*this_).ring_buf_size;
      65             :         }
      66          59 :         (*this_).length --;
      67             :     }
      68             : 
      69          59 :     return result;
      70             : }
      71             : 
      72           9 : static inline void ctrl_undo_redo_iterator_collect_statistics ( ctrl_undo_redo_iterator_t *this_,
      73             :                                                                 bool undo,
      74             :                                                                 data_stat_t *io_stat )
      75             : {
      76           9 :     assert( io_stat != NULL );
      77          33 :     while ( ctrl_undo_redo_iterator_has_next( this_ ) )
      78             :     {
      79          24 :         const ctrl_undo_redo_entry_t *const current_entry = ctrl_undo_redo_iterator_next( this_ );
      80          24 :         ctrl_undo_redo_entry_to_statistics ( current_entry, undo /*=undo*/, false /*=err*/, io_stat );
      81             :     }
      82           9 : }
      83             : 
      84             : 
      85             : /*
      86             : Copyright 2024-2024 Andreas Warnke
      87             : 
      88             : Licensed under the Apache License, Version 2.0 (the "License");
      89             : you may not use this file except in compliance with the License.
      90             : You may obtain a copy of the License at
      91             : 
      92             :     http://www.apache.org/licenses/LICENSE-2.0
      93             : 
      94             : Unless required by applicable law or agreed to in writing, software
      95             : distributed under the License is distributed on an "AS IS" BASIS,
      96             : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      97             : See the License for the specific language governing permissions and
      98             : limitations under the License.
      99             : */

Generated by: LCOV version 1.16