Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 0c700d2

Browse filesBrowse files
committed
optimization: elements_vector replaced with elements_list
Also added element::children() method. Closes issue #27
1 parent 672b603 commit 0c700d2
Copy full SHA for 0c700d2

File tree

Expand file treeCollapse file tree

9 files changed

+31
-42
lines changed
Filter options
Expand file treeCollapse file tree

9 files changed

+31
-42
lines changed

‎include/litehtml/document.h

Copy file name to clipboardExpand all lines: include/litehtml/document.h
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ namespace litehtml
110110
private:
111111
uint_ptr add_font(const char* name, int size, const char* weight, const char* style, const char* decoration, font_metrics* fm);
112112

113-
void create_node(void* gnode, elements_vector& elements, bool parseTextNode);
113+
void create_node(void* gnode, elements_list& elements, bool parseTextNode);
114114
bool update_media_lists(const media_features& features);
115115
void fix_tables_layout();
116116
void fix_table_children(const std::shared_ptr<render_item>& el_ptr, style_display disp, const char* disp_str);

‎include/litehtml/el_style.h

Copy file name to clipboardExpand all lines: include/litehtml/el_style.h
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace litehtml
77
{
88
class el_style : public element
99
{
10-
elements_vector m_children;
10+
elements_list m_children;
1111
public:
1212
explicit el_style(const std::shared_ptr<document>& doc);
1313

‎include/litehtml/element.h

Copy file name to clipboardExpand all lines: include/litehtml/element.h
+10-6Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@ namespace litehtml
2828
protected:
2929
std::weak_ptr<element> m_parent;
3030
std::weak_ptr<document> m_doc;
31-
elements_vector m_children;
31+
elements_list m_children;
3232
css_properties m_css;
3333
std::list<std::weak_ptr<render_item>> m_renders;
3434
used_selector::vector m_used_styles;
3535

36-
virtual void select_all(const css_selector& selector, elements_vector& res);
36+
virtual void select_all(const css_selector& selector, elements_list& res);
3737
element::ptr _add_before_after(int type, const style& style);
3838
public:
3939
explicit element(const std::shared_ptr<document>& doc);
@@ -58,9 +58,10 @@ namespace litehtml
5858
bool is_table_skip() const;
5959

6060
std::shared_ptr<document> get_document() const;
61+
const std::list<std::shared_ptr<element>>& children() const;
6162

62-
virtual elements_vector select_all(const string& selector);
63-
virtual elements_vector select_all(const css_selector& selector);
63+
virtual elements_list select_all(const string& selector);
64+
virtual elements_list select_all(const css_selector& selector);
6465

6566
virtual element::ptr select_one(const string& selector);
6667
virtual element::ptr select_one(const css_selector& selector);
@@ -74,8 +75,6 @@ namespace litehtml
7475
virtual const char* get_tagName() const;
7576
virtual void set_tagName(const char* tag);
7677
virtual void set_data(const char* data);
77-
virtual size_t get_children_count() const;
78-
virtual element::ptr get_child(int idx) const;
7978

8079
virtual void set_attr(const char* name, const char* val);
8180
virtual const char* get_attr(const char* name, const char* def = nullptr) const;
@@ -210,6 +209,11 @@ namespace litehtml
210209
}
211210
return false;
212211
}
212+
213+
inline const std::list<std::shared_ptr<element>>& element::children() const
214+
{
215+
return m_children;
216+
}
213217
}
214218

215219
#endif // LH_ELEMENT_H

‎include/litehtml/html_tag.h

Copy file name to clipboardExpand all lines: include/litehtml/html_tag.h
+5-7Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ namespace litehtml
3131
string_map m_attrs;
3232
std::vector<string_id> m_pseudo_classes;
3333

34-
void select_all(const css_selector& selector, elements_vector& res) override;
34+
void select_all(const css_selector& selector, elements_list& res) override;
3535

3636
public:
3737
explicit html_tag(const std::shared_ptr<document>& doc);
@@ -46,8 +46,6 @@ namespace litehtml
4646
const char* get_tagName() const override;
4747
void set_tagName(const char* tag) override;
4848
void set_data(const char* data) override;
49-
size_t get_children_count() const override;
50-
element::ptr get_child(int idx) const override;
5149

5250
void set_attr(const char* name, const char* val) override;
5351
const char* get_attr(const char* name, const char* def = nullptr) const override;
@@ -84,16 +82,16 @@ namespace litehtml
8482
size_vector get_size_vector_property (string_id name, bool inherited, const size_vector& default_value, uint_ptr css_properties_member_offset) const override;
8583
string get_custom_property(string_id name, const string& default_value) const override;
8684

87-
elements_vector& children();
85+
elements_list& children();
8886

8987
int select(const string& selector) override;
9088
int select(const css_selector& selector, bool apply_pseudo = true) override;
9189
int select(const css_element_selector& selector, bool apply_pseudo = true) override;
9290
int select_pseudoclass(const css_attribute_selector& sel);
9391
int select_attribute(const css_attribute_selector& sel);
9492

95-
elements_vector select_all(const string& selector) override;
96-
elements_vector select_all(const css_selector& selector) override;
93+
elements_list select_all(const string& selector) override;
94+
elements_list select_all(const css_selector& selector) override;
9795

9896
element::ptr select_one(const string& selector) override;
9997
element::ptr select_one(const css_selector& selector) override;
@@ -127,7 +125,7 @@ namespace litehtml
127125
/* Inline Functions */
128126
/************************************************************************/
129127

130-
inline elements_vector& litehtml::html_tag::children()
128+
inline elements_list& litehtml::html_tag::children()
131129
{
132130
return m_children;
133131
}

‎include/litehtml/types.h

Copy file name to clipboardExpand all lines: include/litehtml/types.h
+2-1Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@
55
#include <memory>
66
#include <map>
77
#include <vector>
8+
#include <list>
89

910
namespace litehtml
1011
{
1112
class document;
1213
class element;
1314

1415
typedef std::map<string, string> string_map;
15-
typedef std::vector< std::shared_ptr<element> > elements_vector;
16+
typedef std::list< std::shared_ptr<element> > elements_list;
1617
typedef std::vector<int> int_vector;
1718
typedef std::vector<string> string_vector;
1819

‎src/document.cpp

Copy file name to clipboardExpand all lines: src/document.cpp
+4-4Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ litehtml::document::ptr litehtml::document::createFromString( const char* str, d
5454
document::ptr doc = std::make_shared<document>(objPainter);
5555

5656
// Create litehtml::elements.
57-
elements_vector root_elements;
57+
elements_list root_elements;
5858
doc->create_node(output->root, root_elements, true);
5959
if (!root_elements.empty())
6060
{
@@ -718,7 +718,7 @@ void litehtml::document::add_media_list( const media_query_list::ptr& list )
718718
}
719719
}
720720

721-
void litehtml::document::create_node(void* gnode, elements_vector& elements, bool parseTextNode)
721+
void litehtml::document::create_node(void* gnode, elements_list& elements, bool parseTextNode)
722722
{
723723
auto* node = (GumboNode*)gnode;
724724
switch (node->type)
@@ -756,7 +756,7 @@ void litehtml::document::create_node(void* gnode, elements_vector& elements, boo
756756
}
757757
if (ret)
758758
{
759-
elements_vector child;
759+
elements_list child;
760760
for (unsigned int i = 0; i < node->v.element.children.length; i++)
761761
{
762762
child.clear();
@@ -1018,7 +1018,7 @@ void litehtml::document::append_children_from_string(element& parent, const char
10181018
GumboOutput* output = gumbo_parse(str);
10191019

10201020
// Create litehtml::elements.
1021-
elements_vector child_elements;
1021+
elements_list child_elements;
10221022
create_node(output->root, child_elements, true);
10231023

10241024
// Destroy GumboOutput

‎src/element.cpp

Copy file name to clipboardExpand all lines: src/element.cpp
+3-5Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -291,18 +291,16 @@ bool element::is_block_formatting_context() const
291291

292292
const background* element::get_background(bool own_only) LITEHTML_RETURN_FUNC(nullptr)
293293
void element::add_style( const style& style) LITEHTML_EMPTY_FUNC
294-
void element::select_all(const css_selector& selector, elements_vector& res) LITEHTML_EMPTY_FUNC
295-
elements_vector element::select_all(const css_selector& selector) LITEHTML_RETURN_FUNC(elements_vector())
296-
elements_vector element::select_all(const string& selector) LITEHTML_RETURN_FUNC(elements_vector())
294+
void element::select_all(const css_selector& selector, elements_list& res) LITEHTML_EMPTY_FUNC
295+
elements_list element::select_all(const css_selector& selector) LITEHTML_RETURN_FUNC(elements_list())
296+
elements_list element::select_all(const string& selector) LITEHTML_RETURN_FUNC(elements_list())
297297
element::ptr element::select_one( const css_selector& selector ) LITEHTML_RETURN_FUNC(nullptr)
298298
element::ptr element::select_one( const string& selector ) LITEHTML_RETURN_FUNC(nullptr)
299299
element::ptr element::find_adjacent_sibling(const element::ptr& el, const css_selector& selector, bool apply_pseudo /*= true*/, bool* is_pseudo /*= 0*/) LITEHTML_RETURN_FUNC(nullptr)
300300
element::ptr element::find_sibling(const element::ptr& el, const css_selector& selector, bool apply_pseudo /*= true*/, bool* is_pseudo /*= 0*/) LITEHTML_RETURN_FUNC(nullptr)
301301
bool element::is_nth_last_child(const element::ptr& el, int num, int off, bool of_type) const LITEHTML_RETURN_FUNC(false)
302302
bool element::is_nth_child(const element::ptr&, int num, int off, bool of_type) const LITEHTML_RETURN_FUNC(false)
303303
bool element::is_only_child(const element::ptr& el, bool of_type) const LITEHTML_RETURN_FUNC(false)
304-
element::ptr element::get_child( int idx ) const LITEHTML_RETURN_FUNC(nullptr)
305-
size_t element::get_children_count() const LITEHTML_RETURN_FUNC(0)
306304
void element::get_content_size( size& sz, int max_width ) LITEHTML_EMPTY_FUNC
307305
bool element::appendChild(const ptr &el) LITEHTML_RETURN_FUNC(false)
308306
bool element::removeChild(const ptr &el) LITEHTML_RETURN_FUNC(false)

‎src/html_tag.cpp

Copy file name to clipboardExpand all lines: src/html_tag.cpp
+4-15Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -121,22 +121,22 @@ const char* litehtml::html_tag::get_attr( const char* name, const char* def ) co
121121
return def;
122122
}
123123

124-
litehtml::elements_vector litehtml::html_tag::select_all( const string& selector )
124+
litehtml::elements_list litehtml::html_tag::select_all(const string& selector )
125125
{
126126
css_selector sel;
127127
sel.parse(selector);
128128

129129
return select_all(sel);
130130
}
131131

132-
litehtml::elements_vector litehtml::html_tag::select_all( const css_selector& selector )
132+
litehtml::elements_list litehtml::html_tag::select_all(const css_selector& selector )
133133
{
134-
litehtml::elements_vector res;
134+
litehtml::elements_list res;
135135
select_all(selector, res);
136136
return res;
137137
}
138138

139-
void litehtml::html_tag::select_all(const css_selector& selector, elements_vector& res)
139+
void litehtml::html_tag::select_all(const css_selector& selector, elements_list& res)
140140
{
141141
if(select(selector))
142142
{
@@ -1063,17 +1063,6 @@ bool litehtml::html_tag::is_replaced() const
10631063
return false;
10641064
}
10651065

1066-
size_t litehtml::html_tag::get_children_count() const
1067-
{
1068-
return m_children.size();
1069-
}
1070-
1071-
litehtml::element::ptr litehtml::html_tag::get_child( int idx ) const
1072-
{
1073-
return m_children[idx];
1074-
}
1075-
1076-
10771066
void litehtml::html_tag::init_background_paint(position pos, std::vector<background_paint>& bg_paint, const background* bg, const std::shared_ptr<render_item>& ri)
10781067
{
10791068
bg_paint = { background_paint() };

‎src/render_block.cpp

Copy file name to clipboardExpand all lines: src/render_block.cpp
+1-2Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,8 @@ std::shared_ptr<litehtml::render_item> litehtml::render_item_block::init()
6767
if (auto p = src_el()->parent())
6868
{
6969
int val = atoi(p->get_attr("start", "1"));
70-
for (int i = 0; i < (int)p->get_children_count(); i++)
70+
for(const auto &child : p->children())
7171
{
72-
auto child = p->get_child(i);
7372
if (child == src_el())
7473
{
7574
src_el()->set_attr("list_index", std::to_string(val).c_str());

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.