Another simple vector down.
This commit is contained in:
40
src/css.cc
40
src/css.cc
@ -106,22 +106,11 @@ void CssPropertyList::print () {
|
|||||||
getRef (i)->print ();
|
getRef (i)->print ();
|
||||||
}
|
}
|
||||||
|
|
||||||
CssSelector::CssSelector () {
|
CssSelector::CssSelector ()
|
||||||
struct CombinatorAndSelector *cs;
|
{
|
||||||
|
selectorList.emplace_back( COMB_NONE, std::make_unique< CssSimpleSelector >() );
|
||||||
refCount = 0;
|
|
||||||
matchCacheOffset = -1;
|
|
||||||
selectorList.increase ();
|
|
||||||
cs = selectorList.getRef (selectorList.size () - 1);
|
|
||||||
|
|
||||||
cs->combinator = COMB_NONE;
|
|
||||||
cs->selector = new CssSimpleSelector ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CssSelector::~CssSelector () {
|
|
||||||
for (int i = selectorList.size () - 1; i >= 0; i--)
|
|
||||||
delete selectorList.getRef (i)->selector;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Return whether selector matches at a given node in the document tree.
|
* \brief Return whether selector matches at a given node in the document tree.
|
||||||
@ -134,8 +123,8 @@ bool CssSelector::match (Doctree *docTree, const DoctreeNode *node,
|
|||||||
if (i < 0)
|
if (i < 0)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
struct CombinatorAndSelector *cs = selectorList.getRef (i);
|
CombinatorAndSelector *cs = &selectorList.at (i);
|
||||||
CssSimpleSelector *sel = cs->selector;
|
CssSimpleSelector *sel = cs->selector.get();
|
||||||
|
|
||||||
switch (comb) {
|
switch (comb) {
|
||||||
case COMB_NONE:
|
case COMB_NONE:
|
||||||
@ -172,20 +161,17 @@ bool CssSelector::match (Doctree *docTree, const DoctreeNode *node,
|
|||||||
return match (docTree, node, i - 1, cs->combinator, matchCache);
|
return match (docTree, node, i - 1, cs->combinator, matchCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CssSelector::addSimpleSelector (Combinator c) {
|
void
|
||||||
struct CombinatorAndSelector *cs;
|
CssSelector::addSimpleSelector( const Combinator c )
|
||||||
|
{
|
||||||
assert (matchCacheOffset == -1);
|
assert (matchCacheOffset == -1);
|
||||||
selectorList.increase ();
|
|
||||||
cs = selectorList.getRef (selectorList.size () - 1);
|
|
||||||
|
|
||||||
cs->combinator = c;
|
selectorList.emplace_back( c, std::make_unique< CssSimpleSelector >() );
|
||||||
cs->selector = new CssSimpleSelector ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CssSelector::checksPseudoClass () {
|
bool CssSelector::checksPseudoClass () {
|
||||||
for (int i = 0; i < selectorList.size (); i++)
|
for (int i = 0; i < selectorList.size (); i++)
|
||||||
if (selectorList.getRef (i)->selector->getPseudoClass ())
|
if (selectorList.at(i).selector->getPseudoClass ())
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -200,17 +186,17 @@ int CssSelector::specificity () {
|
|||||||
int spec = 0;
|
int spec = 0;
|
||||||
|
|
||||||
for (int i = 0; i < selectorList.size (); i++)
|
for (int i = 0; i < selectorList.size (); i++)
|
||||||
spec += selectorList.getRef (i)->selector->specificity ();
|
spec += selectorList.at (i).selector->specificity ();
|
||||||
|
|
||||||
return spec;
|
return spec;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CssSelector::print () {
|
void CssSelector::print () {
|
||||||
for (int i = 0; i < selectorList.size (); i++) {
|
for (int i = 0; i < selectorList.size (); i++) {
|
||||||
selectorList.getRef (i)->selector->print ();
|
selectorList.at (i).selector->print ();
|
||||||
|
|
||||||
if (i < selectorList.size () - 1) {
|
if (i < selectorList.size () - 1) {
|
||||||
switch (selectorList.getRef (i + 1)->combinator) {
|
switch (selectorList.at (i + 1).combinator) {
|
||||||
case COMB_CHILD:
|
case COMB_CHILD:
|
||||||
fprintf (stderr, "> ");
|
fprintf (stderr, "> ");
|
||||||
break;
|
break;
|
||||||
|
|||||||
17
src/css.hh
17
src/css.hh
@ -415,25 +415,24 @@ class CssSelector {
|
|||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct CombinatorAndSelector {
|
struct CombinatorAndSelector
|
||||||
|
{
|
||||||
Combinator combinator;
|
Combinator combinator;
|
||||||
CssSimpleSelector *selector;
|
std::unique_ptr< CssSimpleSelector > selector;
|
||||||
};
|
};
|
||||||
|
|
||||||
int refCount, matchCacheOffset;
|
int refCount= 0;
|
||||||
lout::misc::SimpleVector <struct CombinatorAndSelector> selectorList;
|
int matchCacheOffset= -1;
|
||||||
|
std::vector< CombinatorAndSelector > selectorList;
|
||||||
|
|
||||||
bool match (Doctree *dt, const DoctreeNode *node, int i, Combinator comb,
|
bool match (Doctree *dt, const DoctreeNode *node, int i, Combinator comb,
|
||||||
MatchCache *matchCache);
|
MatchCache *matchCache);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CssSelector ();
|
CssSelector ();
|
||||||
~CssSelector ();
|
|
||||||
void addSimpleSelector (Combinator c);
|
void addSimpleSelector (Combinator c);
|
||||||
inline CssSimpleSelector *top () {
|
CssSimpleSelector *top () { return selectorList.back().selector.get(); }
|
||||||
return selectorList.getRef (selectorList.size () - 1)->selector;
|
int size () { return selectorList.size (); };
|
||||||
}
|
|
||||||
inline int size () { return selectorList.size (); };
|
|
||||||
inline bool match (Doctree *dt, const DoctreeNode *node,
|
inline bool match (Doctree *dt, const DoctreeNode *node,
|
||||||
MatchCache *matchCache) {
|
MatchCache *matchCache) {
|
||||||
return match (dt, node, selectorList.size () - 1, COMB_NONE,
|
return match (dt, node, selectorList.size () - 1, COMB_NONE,
|
||||||
|
|||||||
Reference in New Issue
Block a user