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