From ea96c6e2ade4e11d514aac532f65680230910814 Mon Sep 17 00:00:00 2001 From: Thomas Goyne Date: Wed, 12 Mar 2014 18:39:07 -0700 Subject: [PATCH] Make everything final that can be Apparently gcc does use final for devirtualization. --- libaegisub/common/cajun/elements.cpp | 4 +- libaegisub/common/charset.cpp | 2 +- libaegisub/common/charset_6937.h | 2 +- libaegisub/common/charset_conv.cpp | 4 +- libaegisub/common/dispatch.cpp | 6 +- libaegisub/common/option_visit.h | 2 +- libaegisub/common/parser.cpp | 2 +- libaegisub/include/libaegisub/cajun/reader.h | 4 +- libaegisub/include/libaegisub/cajun/writer.h | 2 +- libaegisub/include/libaegisub/line_iterator.h | 2 +- libaegisub/include/libaegisub/log.h | 2 +- libaegisub/include/libaegisub/option.h | 2 +- libaegisub/include/libaegisub/option_value.h | 4 +- .../libaegisub/owning_intrusive_list.h | 2 +- libaegisub/include/libaegisub/signal.h | 6 +- src/ass_attachment.h | 2 +- src/ass_dialogue.h | 10 +-- src/ass_info.h | 2 +- src/ass_override.h | 4 +- src/ass_style.h | 2 +- src/audio_box.h | 2 +- src/audio_controller.h | 2 +- src/audio_display.cpp | 8 +-- src/audio_karaoke.h | 2 +- src/audio_marker.cpp | 4 +- src/audio_marker.h | 8 +-- src/audio_player_alsa.h | 2 +- src/audio_player_dsound.h | 4 +- src/audio_player_dsound2.cpp | 2 +- src/audio_player_dsound2.h | 2 +- src/audio_player_openal.h | 2 +- src/audio_player_oss.h | 4 +- src/audio_player_portaudio.h | 2 +- src/audio_player_pulse.h | 2 +- src/audio_provider_avs.h | 2 +- src/audio_provider_convert.cpp | 8 +-- src/audio_provider_dummy.h | 2 +- src/audio_provider_ffmpegsource.h | 2 +- src/audio_provider_hd.cpp | 2 +- src/audio_provider_hd.h | 2 +- src/audio_provider_lock.h | 2 +- src/audio_provider_pcm.cpp | 2 +- src/audio_provider_ram.h | 2 +- src/audio_renderer_spectrum.h | 2 +- src/audio_renderer_waveform.h | 2 +- src/audio_timing_dialogue.cpp | 4 +- src/audio_timing_karaoke.cpp | 4 +- src/auto4_base.h | 8 +-- src/auto4_lua.cpp | 2 +- src/auto4_lua.h | 6 +- src/auto4_lua_dialog.cpp | 16 ++--- src/auto4_lua_factory.h | 2 +- src/base_grid.h | 2 +- src/colour_button.h | 2 +- src/command/app.cpp | 26 +++---- src/command/audio.cpp | 62 ++++++++--------- src/command/automation.cpp | 8 +-- src/command/command.h | 2 +- src/command/edit.cpp | 62 ++++++++--------- src/command/grid.cpp | 44 ++++++------ src/command/help.cpp | 12 ++-- src/command/keyframe.cpp | 6 +- src/command/recent.cpp | 2 +- src/command/subtitle.cpp | 36 +++++----- src/command/time.cpp | 36 +++++----- src/command/timecode.cpp | 6 +- src/command/tool.cpp | 34 +++++----- src/command/video.cpp | 68 +++++++++---------- src/command/vis_tool.cpp | 16 ++--- src/dialog_attachments.h | 2 +- src/dialog_automation.h | 2 +- src/dialog_autosave.h | 2 +- src/dialog_colorpicker.cpp | 8 +-- src/dialog_detached_video.h | 2 +- src/dialog_dummy_video.h | 2 +- src/dialog_export.h | 2 +- src/dialog_export_ebu3264.cpp | 2 +- src/dialog_export_ebu3264.h | 2 +- src/dialog_fonts_collector.h | 2 +- src/dialog_jumpto.h | 2 +- src/dialog_kara_timing_copy.cpp | 2 +- src/dialog_kara_timing_copy.h | 2 +- src/dialog_log.cpp | 2 +- src/dialog_paste_over.h | 2 +- src/dialog_progress.cpp | 2 +- src/dialog_progress.h | 2 +- src/dialog_properties.h | 2 +- src/dialog_resample.h | 2 +- src/dialog_search_replace.h | 2 +- src/dialog_selected_choices.h | 2 +- src/dialog_selection.h | 2 +- src/dialog_shift_times.h | 2 +- src/dialog_spellchecker.h | 2 +- src/dialog_style_editor.h | 2 +- src/dialog_style_manager.h | 2 +- src/dialog_styling_assistant.h | 2 +- src/dialog_text_import.h | 2 +- src/dialog_timing_processor.h | 2 +- src/dialog_translation.h | 2 +- src/dialog_version_check.cpp | 2 +- src/dialog_video_details.h | 2 +- src/export_fixstyle.h | 2 +- src/export_framerate.h | 2 +- src/font_file_lister_fontconfig.h | 2 +- src/frame_main.cpp | 2 +- src/gl_text.cpp | 2 +- src/help_button.h | 2 +- src/hotkey_data_view_model.cpp | 6 +- src/hotkey_data_view_model.h | 2 +- src/include/aegisub/audio_player.h | 2 +- src/include/aegisub/audio_provider.h | 2 +- src/include/aegisub/spellchecker.h | 2 +- src/include/aegisub/subtitles_provider.h | 2 +- src/menu.cpp | 8 +-- src/mkv_wrap.cpp | 2 +- src/placeholder_ctrl.h | 2 +- src/preferences.cpp | 6 +- src/preferences.h | 2 +- src/scintilla_text_selection_controller.h | 2 +- src/spellchecker_hunspell.h | 2 +- src/spline.h | 2 +- src/subs_edit_box.h | 2 +- src/subs_edit_ctrl.h | 2 +- src/subs_preview.h | 2 +- src/subtitle_format_ass.h | 2 +- src/subtitle_format_ebu3264.h | 2 +- src/subtitle_format_encore.h | 2 +- src/subtitle_format_microdvd.h | 2 +- src/subtitle_format_mkv.h | 2 +- src/subtitle_format_srt.h | 2 +- src/subtitle_format_transtation.h | 2 +- src/subtitle_format_ttxt.h | 2 +- src/subtitle_format_txt.h | 2 +- src/subtitles_provider_csri.h | 2 +- src/subtitles_provider_libass.h | 2 +- src/threaded_frame_source.h | 6 +- src/timeedit_ctrl.h | 2 +- src/toggle_bitmap.h | 2 +- src/toolbar.cpp | 2 +- src/validators.h | 8 +-- src/video_box.h | 2 +- src/video_context.h | 2 +- src/video_display.cpp | 2 +- src/video_display.h | 2 +- src/video_out_gl.h | 4 +- src/video_provider_cache.cpp | 2 +- src/video_provider_cache.h | 2 +- src/video_provider_dummy.h | 2 +- src/video_provider_ffmpegsource.h | 2 +- src/video_provider_manager.h | 2 +- src/video_provider_yuv4mpeg.h | 2 +- src/visual_tool.h | 2 +- src/visual_tool_clip.h | 4 +- src/visual_tool_cross.h | 2 +- src/visual_tool_drag.h | 4 +- src/visual_tool_rotatexy.h | 2 +- src/visual_tool_rotatez.h | 2 +- src/visual_tool_scale.h | 2 +- src/visual_tool_vector_clip.h | 4 +- 159 files changed, 412 insertions(+), 412 deletions(-) diff --git a/libaegisub/common/cajun/elements.cpp b/libaegisub/common/cajun/elements.cpp index a39341f43..7e39e8260 100644 --- a/libaegisub/common/cajun/elements.cpp +++ b/libaegisub/common/cajun/elements.cpp @@ -38,7 +38,7 @@ namespace { }; template - struct CastVisitor : public CastVisitorBase { + struct CastVisitor final : public CastVisitorBase { T *element; CastVisitor() : element(0) { } void Visit(T& ele) { element = &ele; } @@ -64,7 +64,7 @@ public: template -class UnknownElement::Imp_T : public UnknownElement::Imp +class UnknownElement::Imp_T final : public UnknownElement::Imp { public: Imp_T(const ElementTypeT& element) : m_Element(element) { } diff --git a/libaegisub/common/charset.cpp b/libaegisub/common/charset.cpp index c92293e1c..7a904f692 100644 --- a/libaegisub/common/charset.cpp +++ b/libaegisub/common/charset.cpp @@ -35,7 +35,7 @@ namespace { using namespace agi::charset; -class UCDetect : public nsUniversalDetector { +class UCDetect final : public nsUniversalDetector { /// List of detected character sets CharsetListDetected list; diff --git a/libaegisub/common/charset_6937.h b/libaegisub/common/charset_6937.h index 589537092..b95113bf0 100644 --- a/libaegisub/common/charset_6937.h +++ b/libaegisub/common/charset_6937.h @@ -25,7 +25,7 @@ namespace agi { namespace charset { /// /// While glibc iconv supports ISO-6937-2, GNU libiconv does not due to that /// it's not used by anything but old subtitle formats -class Converter6937 : public Converter { +class Converter6937 final : public Converter { /// Converter to UCS-4 so that we only have to deal with unicode codepoints std::unique_ptr to_ucs4; diff --git a/libaegisub/common/charset_conv.cpp b/libaegisub/common/charset_conv.cpp index 9bd77bb78..9ed31ad3c 100644 --- a/libaegisub/common/charset_conv.cpp +++ b/libaegisub/common/charset_conv.cpp @@ -135,7 +135,7 @@ namespace { } #ifdef ICONV_POSIX - class ConverterImpl : public agi::charset::Converter { + class ConverterImpl final : public agi::charset::Converter { size_t bomSize; iconv_t cd; public: @@ -175,7 +175,7 @@ namespace { #else - class ConverterImpl : public iconv_fallbacks, public agi::charset::Converter { + class ConverterImpl final : public iconv_fallbacks, public agi::charset::Converter { size_t bomSize; char invalidRep[8]; size_t invalidRepSize; diff --git a/libaegisub/common/dispatch.cpp b/libaegisub/common/dispatch.cpp index e3a5baa02..5ef2682e1 100644 --- a/libaegisub/common/dispatch.cpp +++ b/libaegisub/common/dispatch.cpp @@ -32,19 +32,19 @@ namespace { std::function invoke_main; std::atomic threads_running; - class MainQueue : public agi::dispatch::Queue { + class MainQueue final : public agi::dispatch::Queue { void DoInvoke(agi::dispatch::Thunk thunk) override { invoke_main(thunk); } }; - class BackgroundQueue : public agi::dispatch::Queue { + class BackgroundQueue final : public agi::dispatch::Queue { void DoInvoke(agi::dispatch::Thunk thunk) override { service->post(thunk); } }; - class SerialQueue : public agi::dispatch::Queue { + class SerialQueue final : public agi::dispatch::Queue { boost::asio::io_service::strand strand; void DoInvoke(agi::dispatch::Thunk thunk) override { diff --git a/libaegisub/common/option_visit.h b/libaegisub/common/option_visit.h index 76f666169..33eb342d9 100644 --- a/libaegisub/common/option_visit.h +++ b/libaegisub/common/option_visit.h @@ -31,7 +31,7 @@ DEFINE_SIMPLE_EXCEPTION_NOINNER(OptionJsonValueArray, OptionJsonValueError, "opt DEFINE_SIMPLE_EXCEPTION_NOINNER(OptionJsonValueSingle, OptionJsonValueError, "options/value") DEFINE_SIMPLE_EXCEPTION_NOINNER(OptionJsonValueNull, OptionJsonValueError, "options/value") -class ConfigVisitor : public json::ConstVisitor { +class ConfigVisitor final : public json::ConstVisitor { /// Option map being populated OptionValueMap &values; /// Option name prefix to add to read names diff --git a/libaegisub/common/parser.cpp b/libaegisub/common/parser.cpp index 9e36db3c0..a0ed8a0f0 100644 --- a/libaegisub/common/parser.cpp +++ b/libaegisub/common/parser.cpp @@ -109,7 +109,7 @@ struct color_grammar : qi::grammar { }; template -struct dialogue_tokens : lex::lexer { +struct dialogue_tokens final : lex::lexer { int paren_depth; template diff --git a/libaegisub/include/libaegisub/cajun/reader.h b/libaegisub/include/libaegisub/cajun/reader.h index a0d21c502..16e18b8ba 100644 --- a/libaegisub/include/libaegisub/cajun/reader.h +++ b/libaegisub/include/libaegisub/cajun/reader.h @@ -29,7 +29,7 @@ public: // thrown during the first phase of reading. generally catches low-level // problems such as errant characters or corrupt/incomplete documents - class ScanException : public Exception { + class ScanException final : public Exception { public: ScanException(std::string const& sMessage, Reader::Location locError) : Exception(sMessage) @@ -41,7 +41,7 @@ public: // thrown during the second phase of reading. generally catches // higher-level problems such as missing commas or brackets - class ParseException : public Exception { + class ParseException final : public Exception { public: ParseException(std::string const& sMessage, Reader::Location locTokenBegin, Reader::Location locTokenEnd) : Exception(sMessage) diff --git a/libaegisub/include/libaegisub/cajun/writer.h b/libaegisub/include/libaegisub/cajun/writer.h index f663927e3..27dc4b1e4 100644 --- a/libaegisub/include/libaegisub/cajun/writer.h +++ b/libaegisub/include/libaegisub/cajun/writer.h @@ -15,7 +15,7 @@ Author: Terry Caton namespace json { -class Writer : private ConstVisitor { +class Writer final : private ConstVisitor { Writer(std::ostream& ostr); void Write(const Object& object); void Write(const Array& array); diff --git a/libaegisub/include/libaegisub/line_iterator.h b/libaegisub/include/libaegisub/line_iterator.h index 9e86ed1c0..a040e8fce 100644 --- a/libaegisub/include/libaegisub/line_iterator.h +++ b/libaegisub/include/libaegisub/line_iterator.h @@ -32,7 +32,7 @@ namespace agi { /// @class line_iterator /// @brief An iterator over lines in a stream template -class line_iterator : public std::iterator { +class line_iterator final : public std::iterator { std::istream *stream; ///< Stream to iterator over OutputType value; ///< Value to return when this is dereference std::shared_ptr conv; diff --git a/libaegisub/include/libaegisub/log.h b/libaegisub/include/libaegisub/log.h index 05b5766ec..da965f458 100644 --- a/libaegisub/include/libaegisub/log.h +++ b/libaegisub/include/libaegisub/log.h @@ -120,7 +120,7 @@ public: }; /// A simple emitter which writes the log to a file in json format -class JsonEmitter : public Emitter { +class JsonEmitter final : public Emitter { std::unique_ptr fp; void WriteTime(const char *key); diff --git a/libaegisub/include/libaegisub/option.h b/libaegisub/include/libaegisub/option.h index 583209d7b..00d4c0ec3 100644 --- a/libaegisub/include/libaegisub/option.h +++ b/libaegisub/include/libaegisub/option.h @@ -39,7 +39,7 @@ DEFINE_SIMPLE_EXCEPTION_NOINNER(OptionErrorDuplicateKey, OptionError, "options/d class OptionValue; -class OptionValueMap : public std::map> { +class OptionValueMap final : public std::map> { private: OptionValueMap(const OptionValueMap& x); OptionValueMap& operator=(const OptionValueMap& x); diff --git a/libaegisub/include/libaegisub/option_value.h b/libaegisub/include/libaegisub/option_value.h index 1bcf8ff65..185e68a3f 100644 --- a/libaegisub/include/libaegisub/option_value.h +++ b/libaegisub/include/libaegisub/option_value.h @@ -99,7 +99,7 @@ public: }; #define CONFIG_OPTIONVALUE(type_name, type) \ - class OptionValue##type_name : public OptionValue { \ + class OptionValue##type_name final : public OptionValue { \ type value; \ type value_default; \ public: \ @@ -121,7 +121,7 @@ CONFIG_OPTIONVALUE(Color, Color) CONFIG_OPTIONVALUE(Bool, bool) #define CONFIG_OPTIONVALUE_LIST(type_name, type) \ - class OptionValueList##type_name : public OptionValue { \ + class OptionValueList##type_name final : public OptionValue { \ std::vector array; \ std::vector array_default; \ std::string name; \ diff --git a/libaegisub/include/libaegisub/owning_intrusive_list.h b/libaegisub/include/libaegisub/owning_intrusive_list.h index d5b88e1b5..631735835 100644 --- a/libaegisub/include/libaegisub/owning_intrusive_list.h +++ b/libaegisub/include/libaegisub/owning_intrusive_list.h @@ -21,7 +21,7 @@ namespace agi { template -class owning_intrusive_list : private boost::intrusive::make_list>::type { +class owning_intrusive_list final : private boost::intrusive::make_list>::type { typedef typename boost::intrusive::make_list>::type base; public: using base::back; diff --git a/libaegisub/include/libaegisub/signal.h b/libaegisub/include/libaegisub/signal.h index 4067233bc..4d220187d 100644 --- a/libaegisub/include/libaegisub/signal.h +++ b/libaegisub/include/libaegisub/signal.h @@ -133,7 +133,7 @@ namespace detail { /// @brief Templated common code for signals template - class SignalBaseImpl : public SignalBase { + class SignalBaseImpl final : public SignalBase { protected: typedef boost::container::map SlotMap; @@ -187,7 +187,7 @@ namespace detail { /// @param Arg1 Type of first argument to pass to slots /// @param Arg2 Type of second argument to pass to slots template -class Signal : public detail::SignalBaseImpl > { +class Signal final : public detail::SignalBaseImpl > { typedef detail::SignalBaseImpl > super; using super::Blocked; using super::slots; @@ -266,7 +266,7 @@ public: /// @class Signal /// @brief Zero-argument signal template<> -class Signal : public detail::SignalBaseImpl > { +class Signal final : public detail::SignalBaseImpl > { typedef detail::SignalBaseImpl > super; using super::Blocked; using super::slots; diff --git a/src/ass_attachment.h b/src/ass_attachment.h index 7c0aafffc..2a7efe249 100644 --- a/src/ass_attachment.h +++ b/src/ass_attachment.h @@ -22,7 +22,7 @@ #include /// @class AssAttachment -class AssAttachment : public AssEntry { +class AssAttachment final : public AssEntry { /// ASS uuencoded entry data, including header. boost::flyweight entry_data; diff --git a/src/ass_dialogue.h b/src/ass_dialogue.h index 7dae6ae37..d0a8d0f4f 100644 --- a/src/ass_dialogue.h +++ b/src/ass_dialogue.h @@ -83,20 +83,20 @@ public: virtual std::string GetText() { return text; } }; -class AssDialogueBlockPlain : public AssDialogueBlock { +class AssDialogueBlockPlain final : public AssDialogueBlock { public: using AssDialogueBlock::text; AssBlockType GetType() const override { return AssBlockType::PLAIN; } AssDialogueBlockPlain(std::string const& text = std::string()) : AssDialogueBlock(text) { } }; -class AssDialogueBlockComment : public AssDialogueBlock { +class AssDialogueBlockComment final : public AssDialogueBlock { public: AssBlockType GetType() const override { return AssBlockType::COMMENT; } AssDialogueBlockComment(std::string const& text = std::string()) : AssDialogueBlock("{" + text + "}") { } }; -class AssDialogueBlockDrawing : public AssDialogueBlock { +class AssDialogueBlockDrawing final : public AssDialogueBlock { public: using AssDialogueBlock::text; int Scale; @@ -105,7 +105,7 @@ public: AssDialogueBlockDrawing(std::string const& text, int scale) : AssDialogueBlock(text), Scale(scale) { } }; -class AssDialogueBlockOverride : public AssDialogueBlock { +class AssDialogueBlockOverride final : public AssDialogueBlock { public: AssDialogueBlockOverride(std::string const& text = std::string()) : AssDialogueBlock(text) { } @@ -150,7 +150,7 @@ struct AssDialogueBase { boost::flyweight Text; }; -class AssDialogue : public AssEntry, public AssDialogueBase, public AssEntryListHook { +class AssDialogue final : public AssEntry, public AssDialogueBase, public AssEntryListHook { std::string GetData(bool ssa) const; /// @brief Parse raw ASS data into everything else diff --git a/src/ass_info.h b/src/ass_info.h index de4601749..3f491e8f7 100644 --- a/src/ass_info.h +++ b/src/ass_info.h @@ -18,7 +18,7 @@ #include -class AssInfo : public AssEntry { +class AssInfo final : public AssEntry { std::string key; std::string value; diff --git a/src/ass_override.h b/src/ass_override.h index 9e2119c48..3da32f525 100644 --- a/src/ass_override.h +++ b/src/ass_override.h @@ -62,7 +62,7 @@ enum class VariableDataType { }; /// A single parameter to an override tag -class AssOverrideParameter : boost::noncopyable { +class AssOverrideParameter final : boost::noncopyable { std::string value; mutable std::unique_ptr block; VariableDataType type; @@ -87,7 +87,7 @@ public: } }; -class AssOverrideTag : boost::noncopyable { +class AssOverrideTag final : boost::noncopyable { bool valid; public: diff --git a/src/ass_style.h b/src/ass_style.h index 61a6a1fef..432db702a 100644 --- a/src/ass_style.h +++ b/src/ass_style.h @@ -39,7 +39,7 @@ #include #include -class AssStyle : public AssEntry, public AssEntryListHook { +class AssStyle final : public AssEntry, public AssEntryListHook { std::string data; public: diff --git a/src/audio_box.h b/src/audio_box.h index ee5ca6078..a449ddc31 100644 --- a/src/audio_box.h +++ b/src/audio_box.h @@ -53,7 +53,7 @@ class wxSlider; /// @class AudioBox /// @brief Panel with audio playback and timing controls, also containing an AudioDisplay -class AudioBox : public wxSashWindow { +class AudioBox final : public wxSashWindow { /// The controller controlling this audio box AudioController *controller; diff --git a/src/audio_controller.h b/src/audio_controller.h index 7f7ba88a5..546cb89f7 100644 --- a/src/audio_controller.h +++ b/src/audio_controller.h @@ -63,7 +63,7 @@ class TimeRange; /// providers or players owned by a controller. If some operation that isn't /// possible in the existing design is needed, the controller should be /// extended in some way to allow it. -class AudioController : public wxEvtHandler { +class AudioController final : public wxEvtHandler { /// Project context this controller belongs to agi::Context *context; diff --git a/src/audio_display.cpp b/src/audio_display.cpp index 5d33fc6af..a8fe3c738 100644 --- a/src/audio_display.cpp +++ b/src/audio_display.cpp @@ -108,7 +108,7 @@ public: wxColour Selection() const { return focused ? sel_focused_colour : sel_colour; } }; -class AudioDisplayScrollbar : public AudioDisplayInteractionObject { +class AudioDisplayScrollbar final : public AudioDisplayInteractionObject { static const int height = 15; static const int min_width = 10; @@ -247,7 +247,7 @@ public: const int AudioDisplayScrollbar::min_width; -class AudioDisplayTimeline : public AudioDisplayInteractionObject { +class AudioDisplayTimeline final : public AudioDisplayInteractionObject { int duration; ///< Total duration in ms double ms_per_pixel; ///< Milliseconds per pixel int pixel_left; ///< Leftmost visible pixel (i.e. scroll position) @@ -460,7 +460,7 @@ public: } }; -class AudioMarkerInteractionObject : public AudioDisplayInteractionObject { +class AudioMarkerInteractionObject final : public AudioDisplayInteractionObject { // Object-pair being interacted with std::vector markers; AudioTimingController *timing_controller; @@ -502,7 +502,7 @@ public: int GetPosition() const { return markers.front()->GetPosition(); } }; -class AudioStyleRangeMerger : public AudioRenderingStyleRanges { +class AudioStyleRangeMerger final : public AudioRenderingStyleRanges { typedef std::map style_map; public: typedef style_map::iterator iterator; diff --git a/src/audio_karaoke.h b/src/audio_karaoke.h index e026cb282..c7c16942c 100644 --- a/src/audio_karaoke.h +++ b/src/audio_karaoke.h @@ -67,7 +67,7 @@ namespace agi { struct Context; } /// actually updated until the line is committed (which if auto-commit timing /// changes is on, will happen as soon as the user adjusts the timing of the /// new syllable). -class AudioKaraoke : public wxWindow { +class AudioKaraoke final : public wxWindow { agi::Context *c; ///< Project context agi::signal::Connection file_changed; ///< File changed slot agi::signal::Connection audio_opened; ///< Audio opened connection diff --git a/src/audio_marker.cpp b/src/audio_marker.cpp index 6c0e4c7a3..de0a1953e 100644 --- a/src/audio_marker.cpp +++ b/src/audio_marker.cpp @@ -32,7 +32,7 @@ #include -class AudioMarkerKeyframe : public AudioMarker { +class AudioMarkerKeyframe final : public AudioMarker { Pen *style; int position; public: @@ -86,7 +86,7 @@ void AudioMarkerProviderKeyframes::GetMarkers(TimeRange const& range, AudioMarke out.push_back(&*a); } -class VideoPositionMarker : public AudioMarker { +class VideoPositionMarker final : public AudioMarker { Pen style; int position; diff --git a/src/audio_marker.h b/src/audio_marker.h index ca32e603d..fae660779 100644 --- a/src/audio_marker.h +++ b/src/audio_marker.h @@ -122,7 +122,7 @@ public: /// Marker provider for video keyframes -class AudioMarkerProviderKeyframes : public AudioMarkerProvider { +class AudioMarkerProviderKeyframes final : public AudioMarkerProvider { /// Video controller to get keyframes from VideoContext *vc; @@ -155,7 +155,7 @@ public: }; /// Marker provider for the current video playback position -class VideoPositionMarkerProvider : public AudioMarkerProvider { +class VideoPositionMarkerProvider final : public AudioMarkerProvider { VideoContext *vc; std::unique_ptr marker; @@ -174,8 +174,8 @@ public: }; /// Marker provider for lines every second -class SecondsMarkerProvider : public AudioMarkerProvider { - struct Marker : public AudioMarker { +class SecondsMarkerProvider final : public AudioMarkerProvider { + struct Marker final : public AudioMarker { Pen *style; int position; diff --git a/src/audio_player_alsa.h b/src/audio_player_alsa.h index 99929091f..a524f7894 100644 --- a/src/audio_player_alsa.h +++ b/src/audio_player_alsa.h @@ -40,7 +40,7 @@ struct PlaybackState; -class AlsaPlayer : public AudioPlayer { +class AlsaPlayer final : public AudioPlayer { std::unique_ptr ps; pthread_t thread; diff --git a/src/audio_player_dsound.h b/src/audio_player_dsound.h index a77360a79..ec9fd244e 100644 --- a/src/audio_player_dsound.h +++ b/src/audio_player_dsound.h @@ -43,7 +43,7 @@ class DirectSoundPlayer; -class DirectSoundPlayerThread : public wxThread { +class DirectSoundPlayerThread final : public wxThread { DirectSoundPlayer *parent; HANDLE stopnotify; @@ -55,7 +55,7 @@ public: wxThread::ExitCode Entry(); }; -class DirectSoundPlayer : public AudioPlayer { +class DirectSoundPlayer final : public AudioPlayer { friend class DirectSoundPlayerThread; volatile bool playing; diff --git a/src/audio_player_dsound2.cpp b/src/audio_player_dsound2.cpp index 9dc495f3d..a91c1acfd 100644 --- a/src/audio_player_dsound2.cpp +++ b/src/audio_player_dsound2.cpp @@ -117,7 +117,7 @@ struct COMObjectRetainer { }; /// @brief RAII wrapper around Win32 HANDLE type -struct Win32KernelHandle : public agi::scoped_holder { +struct Win32KernelHandle final : public agi::scoped_holder { /// @brief Create with a managed handle /// @param handle Win32 handle to manage Win32KernelHandle(HANDLE handle = 0) diff --git a/src/audio_player_dsound2.h b/src/audio_player_dsound2.h index f1e4619d0..62e0b0048 100644 --- a/src/audio_player_dsound2.h +++ b/src/audio_player_dsound2.h @@ -44,7 +44,7 @@ class DirectSoundPlayer2Thread; /// The core design idea is to have a playback thread that owns the DirectSound COM objects /// and performs all playback operations, and use the player object as a proxy to /// send commands to the playback thread. -class DirectSoundPlayer2 : public AudioPlayer { +class DirectSoundPlayer2 final : public AudioPlayer { /// The playback thread std::unique_ptr thread; diff --git a/src/audio_player_openal.h b/src/audio_player_openal.h index bdb64dc22..bab9e7137 100644 --- a/src/audio_player_openal.h +++ b/src/audio_player_openal.h @@ -51,7 +51,7 @@ #include -class OpenALPlayer : public AudioPlayer, wxTimer { +class OpenALPlayer final : public AudioPlayer, wxTimer { /// Number of OpenAL buffers to use static const ALsizei num_buffers = 8; diff --git a/src/audio_player_oss.h b/src/audio_player_oss.h index 6bc763120..178054442 100644 --- a/src/audio_player_oss.h +++ b/src/audio_player_oss.h @@ -52,7 +52,7 @@ class AudioProvider; class OSSPlayer; /// Worker thread to asynchronously write audio data to the output device -class OSSPlayerThread : public wxThread { +class OSSPlayerThread final : public wxThread { /// Parent player OSSPlayer *parent; @@ -65,7 +65,7 @@ public: wxThread::ExitCode Entry(); }; -class OSSPlayer : public AudioPlayer { +class OSSPlayer final : public AudioPlayer { friend class OSSPlayerThread; /// sample rate of audio diff --git a/src/audio_player_portaudio.h b/src/audio_player_portaudio.h index 1c5ad5767..4183cd1e6 100644 --- a/src/audio_player_portaudio.h +++ b/src/audio_player_portaudio.h @@ -49,7 +49,7 @@ class wxArrayString; /// @class PortAudioPlayer /// @brief PortAudio Player /// -class PortAudioPlayer : public AudioPlayer { +class PortAudioPlayer final : public AudioPlayer { typedef std::vector DeviceVec; /// Map of supported output devices from name -> device index std::map devices; diff --git a/src/audio_player_pulse.h b/src/audio_player_pulse.h index 28865f5d9..7c190d44b 100644 --- a/src/audio_player_pulse.h +++ b/src/audio_player_pulse.h @@ -39,7 +39,7 @@ class PulseAudioPlayer; -class PulseAudioPlayer : public AudioPlayer { +class PulseAudioPlayer final : public AudioPlayer { float volume = 1.f; bool is_playing = false; diff --git a/src/audio_provider_avs.h b/src/audio_provider_avs.h index fa78d50ae..fe4e7c3a2 100644 --- a/src/audio_provider_avs.h +++ b/src/audio_provider_avs.h @@ -38,7 +38,7 @@ #include "avisynth.h" #include "avisynth_wrap.h" -class AvisynthAudioProvider : public AudioProvider { +class AvisynthAudioProvider final : public AudioProvider { AviSynthWrapper avs_wrapper; PClip clip; diff --git a/src/audio_provider_convert.cpp b/src/audio_provider_convert.cpp index 6fe1de0e7..4e2c9b98e 100644 --- a/src/audio_provider_convert.cpp +++ b/src/audio_provider_convert.cpp @@ -33,7 +33,7 @@ /// Anything integral -> 16 bit signed machine-endian audio converter template -class BitdepthConvertAudioProvider : public AudioProviderWrapper { +class BitdepthConvertAudioProvider final : public AudioProviderWrapper { int src_bytes_per_sample; public: BitdepthConvertAudioProvider(std::unique_ptr src) : AudioProviderWrapper(std::move(src)) { @@ -74,7 +74,7 @@ public: /// Floating point -> 16 bit signed machine-endian audio converter template -class FloatConvertAudioProvider : public AudioProviderWrapper { +class FloatConvertAudioProvider final : public AudioProviderWrapper { public: FloatConvertAudioProvider(std::unique_ptr src) : AudioProviderWrapper(std::move(src)) { bytes_per_sample = sizeof(Target); @@ -105,7 +105,7 @@ public: }; /// Non-mono 16-bit signed machine-endian -> mono 16-bit signed machine endian converter -class DownmixAudioProvider : public AudioProviderWrapper { +class DownmixAudioProvider final : public AudioProviderWrapper { int src_channels; public: DownmixAudioProvider(std::unique_ptr src) : AudioProviderWrapper(std::move(src)) { @@ -136,7 +136,7 @@ public: /// Sample doubler with linear interpolation for the agi::util::make_unique /// Requires 16-bit mono input -class SampleDoublingAudioProvider : public AudioProviderWrapper { +class SampleDoublingAudioProvider final : public AudioProviderWrapper { public: SampleDoublingAudioProvider(std::unique_ptr src) : AudioProviderWrapper(std::move(src)) { if (source->GetBytesPerSample() != 2) diff --git a/src/audio_provider_dummy.h b/src/audio_provider_dummy.h index e63584a60..196e43ab5 100644 --- a/src/audio_provider_dummy.h +++ b/src/audio_provider_dummy.h @@ -34,7 +34,7 @@ #include "include/aegisub/audio_provider.h" -class DummyAudioProvider : public AudioProvider { +class DummyAudioProvider final : public AudioProvider { bool noise; void FillBuffer(void *buf, int64_t start, int64_t count) const override; diff --git a/src/audio_provider_ffmpegsource.h b/src/audio_provider_ffmpegsource.h index 0946af7ea..184d39251 100644 --- a/src/audio_provider_ffmpegsource.h +++ b/src/audio_provider_ffmpegsource.h @@ -39,7 +39,7 @@ /// @class FFmpegSourceAudioProvider /// @brief Implements audio loading with the FFMS library. -class FFmpegSourceAudioProvider : public AudioProvider, FFmpegSourceProvider { +class FFmpegSourceAudioProvider final : public AudioProvider, FFmpegSourceProvider { /// audio source object agi::scoped_holder AudioSource; diff --git a/src/audio_provider_hd.cpp b/src/audio_provider_hd.cpp index 235067fd4..3213dbedf 100644 --- a/src/audio_provider_hd.cpp +++ b/src/audio_provider_hd.cpp @@ -71,7 +71,7 @@ agi::fs::path cache_path() { } /// A PCM audio provider for raw dumps with no header -class RawAudioProvider : public PCMAudioProvider { +class RawAudioProvider final : public PCMAudioProvider { public: RawAudioProvider(agi::fs::path const& cache_filename, AudioProvider *src) : PCMAudioProvider(cache_filename) diff --git a/src/audio_provider_hd.h b/src/audio_provider_hd.h index b36b8f67a..fa3d2b3c3 100644 --- a/src/audio_provider_hd.h +++ b/src/audio_provider_hd.h @@ -39,7 +39,7 @@ namespace agi { class ProgressSink; } -class HDAudioProvider : public AudioProviderWrapper { +class HDAudioProvider final : public AudioProviderWrapper { /// Name of the file which the decoded audio is written to agi::fs::path diskCacheFilename; /// Audio provider which reads from the decoded cache diff --git a/src/audio_provider_lock.h b/src/audio_provider_lock.h index 37f8c5c3a..e998b81c8 100644 --- a/src/audio_provider_lock.h +++ b/src/audio_provider_lock.h @@ -21,7 +21,7 @@ #include #include -class LockAudioProvider : public AudioProviderWrapper { +class LockAudioProvider final : public AudioProviderWrapper { mutable std::mutex mutex; void FillBuffer(void *buf, int64_t start, int64_t count) const override; diff --git a/src/audio_provider_pcm.cpp b/src/audio_provider_pcm.cpp index 8e3377814..b01b18ab4 100644 --- a/src/audio_provider_pcm.cpp +++ b/src/audio_provider_pcm.cpp @@ -351,7 +351,7 @@ static const uint8_t w64Guiddata[16] = { /// @brief Sony Wave64 audio provider /// /// http://www.vcs.de/fileadmin/user_upload/MBS/PDF/Whitepaper/Informations_about_Sony_Wave64.pdf -class Wave64AudioProvider : public PCMAudioProvider { +class Wave64AudioProvider final : public PCMAudioProvider { // Here's some copy-paste from the FFmpegSource2 code /// http://msdn.microsoft.com/en-us/library/dd757720(VS.85).aspx diff --git a/src/audio_provider_ram.h b/src/audio_provider_ram.h index 8891951bc..a9056d40d 100644 --- a/src/audio_provider_ram.h +++ b/src/audio_provider_ram.h @@ -42,7 +42,7 @@ namespace agi { class ProgressSink; } -class RAMAudioProvider : public AudioProviderWrapper { +class RAMAudioProvider final : public AudioProviderWrapper { #ifdef _MSC_VER boost::container::stable_vector blockcache; #else diff --git a/src/audio_renderer_spectrum.h b/src/audio_renderer_spectrum.h index b322c1c32..d4641f37d 100644 --- a/src/audio_renderer_spectrum.h +++ b/src/audio_renderer_spectrum.h @@ -52,7 +52,7 @@ struct AudioSpectrumCacheBlockFactory; /// /// Renders frequency-power spectrum graphs of PCM audio data using a derivation function /// such as the fast fourier transform. -class AudioSpectrumRenderer : public AudioRendererBitmapProvider { +class AudioSpectrumRenderer final : public AudioRendererBitmapProvider { friend struct AudioSpectrumCacheBlockFactory; /// Internal cache management for the spectrum diff --git a/src/audio_renderer_waveform.h b/src/audio_renderer_waveform.h index e1f80d09a..79213421b 100644 --- a/src/audio_renderer_waveform.h +++ b/src/audio_renderer_waveform.h @@ -40,7 +40,7 @@ class AudioColorScheme; #include "audio_renderer.h" -class AudioWaveformRenderer : public AudioRendererBitmapProvider { +class AudioWaveformRenderer final : public AudioRendererBitmapProvider { /// Colour tables used for rendering std::vector colors; diff --git a/src/audio_timing_dialogue.cpp b/src/audio_timing_dialogue.cpp index adc0468db..15357758d 100644 --- a/src/audio_timing_dialogue.cpp +++ b/src/audio_timing_dialogue.cpp @@ -54,7 +54,7 @@ class TimeableLine; /// /// Audio marker intended to live in pairs of two, taking styles depending /// on which marker in the pair is to the left and which is to the right. -class DialogueTimingMarker : public AudioMarker { +class DialogueTimingMarker final : public AudioMarker { /// Current ms position of this marker int position; @@ -285,7 +285,7 @@ void DialogueTimingMarker::SetPosition(int new_position) { /// addition, any markers for inactive lines that start/end at the same time /// as the active line starts/ends can optionally be dragged along with the /// active line's markers, updating those lines as well. -class AudioTimingControllerDialogue : public AudioTimingController { +class AudioTimingControllerDialogue final : public AudioTimingController { /// The rendering style for the active line's start marker Pen style_left; /// The rendering style for the active line's end marker diff --git a/src/audio_timing_karaoke.cpp b/src/audio_timing_karaoke.cpp index 6be7398ad..b2dcd36b7 100644 --- a/src/audio_timing_karaoke.cpp +++ b/src/audio_timing_karaoke.cpp @@ -43,7 +43,7 @@ /// @class KaraokeMarker /// @brief AudioMarker implementation for AudioTimingControllerKaraoke -class KaraokeMarker : public AudioMarker { +class KaraokeMarker final : public AudioMarker { int position; Pen *pen; FeetStyle style; @@ -81,7 +81,7 @@ public: /// /// This does not support \kt, as it inherently requires that the end time of /// one syllable be the same as the start time of the next one. -class AudioTimingControllerKaraoke : public AudioTimingController { +class AudioTimingControllerKaraoke final : public AudioTimingController { std::deque slots; agi::signal::Connection& file_changed_slot; diff --git a/src/auto4_base.h b/src/auto4_base.h index 6a11997ef..e7818d1d8 100644 --- a/src/auto4_base.h +++ b/src/auto4_base.h @@ -123,7 +123,7 @@ namespace Automation4 { /// A wrapper around agi::ProgressSink which adds the ability to open /// dialogs on the GUI thread - class ProgressSink : public agi::ProgressSink { + class ProgressSink final : public agi::ProgressSink { agi::ProgressSink *impl; BackgroundScriptRunner *bsr; int trace_level; @@ -218,7 +218,7 @@ namespace Automation4 { }; /// Manager for scripts specified by a subtitle file - class LocalScriptManager : public ScriptManager { + class LocalScriptManager final : public ScriptManager { std::deque slots; agi::Context *context; @@ -229,7 +229,7 @@ namespace Automation4 { }; /// Manager for scripts in the autoload directory - class AutoloadScriptManager : public ScriptManager { + class AutoloadScriptManager final : public ScriptManager { std::string path; public: AutoloadScriptManager(std::string path); @@ -281,7 +281,7 @@ namespace Automation4 { /// A script which represents a file not recognized by any registered /// automation engines - class UnknownScript : public Script { + class UnknownScript final : public Script { public: UnknownScript(agi::fs::path const& filename) : Script(filename) { } diff --git a/src/auto4_lua.cpp b/src/auto4_lua.cpp index df3968ae4..987371495 100644 --- a/src/auto4_lua.cpp +++ b/src/auto4_lua.cpp @@ -300,7 +300,7 @@ int luaopen_lpeg (lua_State *L); namespace Automation4 { int regex_init(lua_State *L); - class LuaScript : public Script { + class LuaScript final : public Script { lua_State *L; std::string name; diff --git a/src/auto4_lua.h b/src/auto4_lua.h index ec87b420c..6a5273d3b 100644 --- a/src/auto4_lua.h +++ b/src/auto4_lua.h @@ -200,7 +200,7 @@ namespace Automation4 { }; /// A lua-generated dialog or panel in the export options dialog - class LuaDialog : public ScriptDialog { + class LuaDialog final : public ScriptDialog { /// Controls in this dialog std::vector> controls; /// The names and IDs of buttons in this dialog if non-default ones were used @@ -250,7 +250,7 @@ namespace Automation4 { /// @throws agi::UserCancelException if the function fails to run to completion (either due to cancelling or errors) void LuaThreadedCall(lua_State *L, int nargs, int nresults, std::string const& title, wxWindow *parent, bool can_open_config); - class LuaCommand : public cmd::Command, private LuaFeature { + class LuaCommand final : public cmd::Command, private LuaFeature { std::string cmd_name; wxString display; wxString help; @@ -274,7 +274,7 @@ namespace Automation4 { static int LuaRegister(lua_State *L); }; - class LuaExportFilter : public ExportFilter, private LuaFeature { + class LuaExportFilter final : public ExportFilter, private LuaFeature { bool has_config; LuaDialog *config_dialog; diff --git a/src/auto4_lua_dialog.cpp b/src/auto4_lua_dialog.cpp index 2ae6d3fd2..c35038540 100644 --- a/src/auto4_lua_dialog.cpp +++ b/src/auto4_lua_dialog.cpp @@ -141,7 +141,7 @@ namespace Automation4 { namespace LuaControl { /// A static text label - class Label : public LuaDialogControl { + class Label final : public LuaDialogControl { std::string label; public: Label(lua_State *L) : LuaDialogControl(L), label(get_field(L, "label")) { } @@ -193,7 +193,7 @@ namespace Automation4 { }; /// A color-picker button - class Color : public LuaDialogControl { + class Color final : public LuaDialogControl { agi::Color color; bool alpha; @@ -221,7 +221,7 @@ namespace Automation4 { }; /// A multiline text edit control - class Textbox : public Edit { + class Textbox final : public Edit { public: Textbox(lua_State *L) : Edit(L) { } @@ -236,7 +236,7 @@ namespace Automation4 { /// Integer only edit - class IntEdit : public Edit { + class IntEdit final : public Edit { wxSpinCtrl *cw; int value; int min, max; @@ -272,14 +272,14 @@ namespace Automation4 { }; // Float only edit - class FloatEdit : public Edit { + class FloatEdit final : public Edit { double value; double min; double max; double step; wxSpinCtrlDouble *scd; - struct DoubleValidator : public wxValidator { + struct DoubleValidator final : public wxValidator { double *value; DoubleValidator(double *value) : value(value) { } wxValidator *Clone() const override { return new DoubleValidator(value); } @@ -341,7 +341,7 @@ namespace Automation4 { }; /// A dropdown list - class Dropdown : public LuaDialogControl { + class Dropdown final : public LuaDialogControl { std::vector items; std::string value; wxComboBox *cw; @@ -371,7 +371,7 @@ namespace Automation4 { } }; - class Checkbox : public LuaDialogControl { + class Checkbox final : public LuaDialogControl { std::string label; bool value; wxCheckBox *cw; diff --git a/src/auto4_lua_factory.h b/src/auto4_lua_factory.h index 60d7b948f..f800d896e 100644 --- a/src/auto4_lua_factory.h +++ b/src/auto4_lua_factory.h @@ -35,7 +35,7 @@ #include "auto4_base.h" namespace Automation4 { - class LuaScriptFactory : public ScriptFactory { + class LuaScriptFactory final : public ScriptFactory { std::unique_ptr