From 47d9c7eaa0ce6e42944948246f34cc56979f0d54a37141c7a19a5693a66b7d1f Mon Sep 17 00:00:00 2001 From: ADAM David Alan Martin Date: Sun, 10 Aug 2025 22:49:36 -0400 Subject: [PATCH] Another SimpleVector down. --- src/form.cc | 73 ++++++++++++++++++++--------------------------------- 1 file changed, 27 insertions(+), 46 deletions(-) diff --git a/src/form.cc b/src/form.cc index f7700d1..a6736e0 100644 --- a/src/form.cc +++ b/src/form.cc @@ -213,12 +213,12 @@ public: class DilloHtmlSelect { friend class DilloHtmlInput; private: - lout::misc::SimpleVector *opts; - DilloHtmlSelect (); + std::vector< std::unique_ptr< DilloHtmlOptbase > > opts; + + DilloHtmlSelect ()= default; public: - ~DilloHtmlSelect (); DilloHtmlOptbase *getCurrentOpt (); - void addOpt (DilloHtmlOptbase *opt); + void addOpt (std::unique_ptr< DilloHtmlOptbase > opt); void ensureSelection (); void addOptsTo (SelectionResource *res); void reset (SelectionResource *res); @@ -813,10 +813,9 @@ void Html_tag_open_optgroup(DilloHtml *html, const char *tag, int tagsize) label = ""; } - DilloHtmlOptgroup *opt = - new DilloHtmlOptgroup (dStrdup(label.value().c_str()), enabled); + auto opt= std::make_unique< DilloHtmlOptgroup >( dStrdup( label.value().c_str() ), enabled ); - input->select->addOpt(opt); + input->select->addOpt( std::move( opt ) ); } } @@ -834,9 +833,9 @@ void Html_tag_close_optgroup(DilloHtml *html) if (input && (input->type == DILLO_HTML_INPUT_SELECT || input->type == DILLO_HTML_INPUT_SEL_LIST)) { - DilloHtmlOptgroupClose *opt = new DilloHtmlOptgroupClose (); + auto opt= std::make_unique< DilloHtmlOptgroupClose >(); - input->select->addOpt(opt); + input->select->addOpt( std::move( opt ) ); } } } @@ -863,10 +862,10 @@ void Html_tag_open_option(DilloHtml *html, const char *tag, int tagsize) bool selected = (a_Html_get_attr(html, tag, tagsize,"selected") != NULL); bool enabled = (a_Html_get_attr(html, tag, tagsize, "disabled") == NULL); - DilloHtmlOption *option = - new DilloHtmlOption (value ? dStrdup( value.value().c_str() ) : nullptr, label ? dStrdup( label.value().c_str() ) : nullptr, selected, enabled); + auto option = + std::make_unique< DilloHtmlOption >(value ? dStrdup( value.value().c_str() ) : nullptr, label ? dStrdup( label.value().c_str() ) : nullptr, selected, enabled ); - input->select->addOpt(option); + input->select->addOpt( std::move( option ) ); } a_Html_stash_init(html); @@ -1833,35 +1832,17 @@ void DilloHtmlInput::reset () * DilloHtmlSelect */ -/* - * Constructor - */ -DilloHtmlSelect::DilloHtmlSelect () + +DilloHtmlOptbase * +DilloHtmlSelect::getCurrentOpt() { - opts = new misc::SimpleVector (4); + return opts.back().get(); } -/* - * Destructor - */ -DilloHtmlSelect::~DilloHtmlSelect () +void +DilloHtmlSelect::addOpt( std::unique_ptr< DilloHtmlOptbase > opt ) { - int size = opts->size (); - for (int k = 0; k < size; k++) - delete opts->get (k); - delete opts; -} - -DilloHtmlOptbase *DilloHtmlSelect::getCurrentOpt () -{ - return opts->get (opts->size() - 1); -} - -void DilloHtmlSelect::addOpt (DilloHtmlOptbase *opt) -{ - int size = opts->size (); - opts->increase (); - opts->set (size, opt); + opts.push_back( std::move( opt ) ); } /** @@ -1869,15 +1850,15 @@ void DilloHtmlSelect::addOpt (DilloHtmlOptbase *opt) */ void DilloHtmlSelect::ensureSelection() { - int size = opts->size (); + int size = opts.size (); if (size > 0) { for (int i = 0; i < size; i++) { - DilloHtmlOptbase *opt = opts->get (i); + DilloHtmlOptbase *opt = opts.at (i).get(); if (opt->isSelected()) return; } for (int i = 0; i < size; i++) { - DilloHtmlOptbase *opt = opts->get (i); + DilloHtmlOptbase *opt = opts.at (i).get(); if (opt->select()) break; } @@ -1886,28 +1867,28 @@ void DilloHtmlSelect::ensureSelection() void DilloHtmlSelect::addOptsTo (SelectionResource *res) { - int size = opts->size (); + int size = opts.size (); for (int i = 0; i < size; i++) { - DilloHtmlOptbase *opt = opts->get (i); + DilloHtmlOptbase *opt = opts.at (i).get(); opt->addSelf(res); } } void DilloHtmlSelect::reset (SelectionResource *res) { - int size = opts->size (); + int size = opts.size (); for (int i = 0; i < size; i++) { - DilloHtmlOptbase *opt = opts->get (i); + DilloHtmlOptbase *opt = opts.at (i).get(); res->setItem(i, opt->isSelected()); } } void DilloHtmlSelect::appendValuesTo (std::vector< std::string > &values, SelectionResource *res) { - int size = opts->size (); + int size = opts.size (); for (int i = 0; i < size; i++) { if (res->isSelected (i)) { - DilloHtmlOptbase *opt = opts->get (i); + DilloHtmlOptbase *opt = opts.at (i).get(); const char *val = opt->getValue(); if (val)