[vlc-devel] [PATCH 02/11] demux/mkv: cleaned `chapters.{cpp, hpp}`

Denis Charmet typx at dinauz.org
Wed Mar 2 19:33:42 CET 2016


Hi,

On 2016-03-02 18:04, Filip Roséen wrote:
> chapters.cpp
> ------------
> 
>   - `delete` is a NOOP if the operand is NULL, if-check removed.
> 
OK
> chapters.{hpp,cpp}
> ------------------
> 
>   - introduced helper for `chapter_item_c::{Enter,Leave}` since they
>     are extremely similar in their implementation.

The whole Enter/Leave/EnterAndLeave part has been unused, untested, 
unmaintained and should have been broken since a loooooong time. If you 
want to clean the module, I strongly suggest that you remove it all :)

> 
>     The helper makes use of <algorithm> and <functional> to make the
>     code more error-proof, as a plus it is a little bit cleaner.
> ---
>  modules/demux/mkv/chapters.cpp | 70 
> +++++++++++++++++++-----------------------
>  modules/demux/mkv/chapters.hpp |  3 ++
>  2 files changed, 35 insertions(+), 38 deletions(-)
> 
> diff --git a/modules/demux/mkv/chapters.cpp 
> b/modules/demux/mkv/chapters.cpp
> index b8dab0c..6242143 100644
> --- a/modules/demux/mkv/chapters.cpp
> +++ b/modules/demux/mkv/chapters.cpp
> @@ -26,12 +26,13 @@
> 
>  #include "chapter_command.hpp"
> 
> +#include <functional>
> +#include <algorithm>
> +
>  chapter_item_c::~chapter_item_c()
>  {
> -    if( p_segment_uid )
> -        delete p_segment_uid;
> -    if( p_segment_edition_uid )
> -        delete p_segment_edition_uid;
> +    delete p_segment_uid;
> +    delete p_segment_edition_uid;
>      vlc_delete_all( codecs );
>      vlc_delete_all( sub_chapters );
>  }
> @@ -98,7 +99,7 @@ std::string chapter_item_c::GetCodecName( bool
> f_for_title ) const
>      while ( index != codecs.end() )
>      {
>          result = (*index)->GetCodecName( f_for_title );
> -        if ( result != "" )
> +        if ( !result.empty () )
>              break;
>          ++index;
>      }
> @@ -138,50 +139,43 @@ bool chapter_item_c::ParentOf( const
> chapter_item_c & item ) const
>      return false;
>  }
> 
> -bool chapter_item_c::Enter( bool b_do_subs )
> -{
> +bool chapter_item_c::EnterLeaveHelper_ ( bool do_subs,
> +    bool (chapter_codec_cmds_c::* co_cb) (),
> +    bool (chapter_item_c      ::* ch_cb) (bool)
> +) {
>      bool f_result = false;
> -    std::vector<chapter_codec_cmds_c*>::iterator index = 
> codecs.begin();
> -    while ( index != codecs.end() )
> -    {
> -        f_result |= (*index)->Enter();
> -        ++index;
> -    }
> 
> -    if ( b_do_subs )
> +    f_result |= std::count_if ( codecs.begin (), codecs.end (),
> +      std::mem_fun (co_cb)
> +    );
> +
> +    if ( do_subs )
>      {
> -        // sub chapters
> -        std::vector<chapter_item_c*>::iterator index_ = 
> sub_chapters.begin();
> -        while ( index_ != sub_chapters.end() )
> -        {
> -            f_result |= (*index_)->Enter( true );
> -            ++index_;
> -        }
> +        f_result |= count_if ( sub_chapters.begin (), 
> sub_chapters.end (),
> +          std::bind2nd( std::mem_fun( ch_cb ), true )
> +        );
>      }
> +
>      return f_result;
>  }
> 
> +bool chapter_item_c::Enter( bool b_do_subs )
> +{
> +    return EnterLeaveHelper_ (b_do_subs,
> +      &chapter_codec_cmds_c::Enter,
> +      &chapter_item_c::Enter
> +    );
> +}
> +
>  bool chapter_item_c::Leave( bool b_do_subs )
>  {
> -    bool f_result = false;
>      b_is_leaving = true;
> -    std::vector<chapter_codec_cmds_c*>::iterator index = 
> codecs.begin();
> -    while ( index != codecs.end() )
> -    {
> -        f_result |= (*index)->Leave();
> -        ++index;
> -    }
> 
> -    if ( b_do_subs )
> -    {
> -        // sub chapters
> -        std::vector<chapter_item_c*>::iterator index_ = 
> sub_chapters.begin();
> -        while ( index_ != sub_chapters.end() )
> -        {
> -            f_result |= (*index_)->Leave( true );
> -            ++index_;
> -        }
> -    }
> +    bool f_result = EnterLeaveHelper_ (b_do_subs,
> +      &chapter_codec_cmds_c::Leave,
> +      &chapter_item_c::Leave
> +    );
> +
>      b_is_leaving = false;
>      return f_result;
>  }
> diff --git a/modules/demux/mkv/chapters.hpp 
> b/modules/demux/mkv/chapters.hpp
> index 1b0885a..501c1cd 100644
> --- a/modules/demux/mkv/chapters.hpp
> +++ b/modules/demux/mkv/chapters.hpp
> @@ -88,6 +88,9 @@ public:
>      bool Enter( bool b_do_subchapters );
>      bool Leave( bool b_do_subchapters );
>      bool EnterAndLeave( chapter_item_c *p_item, bool b_enter = true 
> );
> +
> +  protected:
> +      bool EnterLeaveHelper_ (bool, bool(chapter_codec_cmds_c::*)(),
> bool(chapter_item_c::*)(bool));
>  };
> 
>  class chapter_edition_c : public chapter_item_c

Regards,
-- 
Denis Charmet - TypX
Le mauvais esprit est un art de vivre


More information about the vlc-devel mailing list