static void Includes( a_look *x ) { a_look *y; a_link *link; unsigned short k; *top++ = x; k = (unsigned short)( top - stk ); x->depth = k; for( link = x->include; link != NULL; link = link->next ) { y = link->el; if( y->depth == 0 ) { Includes( y ); } if( y->depth < x->depth ) { x->depth = y->depth; } Union( x->follow, y->follow ); } if( x->depth == k ) { do { --top; (*top)->depth = INFINITY; Assign( (*top)->follow, x->follow ); } while( *top != x ); } }
static void CalcIncludes( void ) { a_state *x, *y; a_shift_action *tx; a_look *p, *q; a_sym *sym; a_pro *pro; an_item *nullable, *item; a_link *free; for( x = statelist; x != NULL; x = x->next ) { for( p = x->look; p->trans != NULL; ++p ) { p->depth = 0; for( pro = p->trans->sym->pro; pro != NULL; pro = pro->next ) { nullable = pro->items; for( item = pro->items; (sym = item->p.sym) != NULL; ++item ) { if( !sym->nullable ) { nullable = item; } } y = x; for( item = pro->items; (sym = item->p.sym) != NULL; ++item ) { if( sym->pro == NULL ) { for( tx = y->trans; tx->sym != sym; ) { ++tx; } y = tx->state; } else { for( q = y->look; q->trans->sym != sym; ) { ++q; } if( item >= nullable ) { free = CALLOC( 1, a_link ); free->el = p; free->next = q->include; q->include = free; } y = q->trans->state; } } } } } for( x = statelist; x != NULL; x = x->next ) { for( p = x->look; p->trans != NULL; ++p ) { if( p->depth == 0 ) { Includes( p ); } } } }
// TODO(wenxiang): applying passes in topological order according to invalidating relations. bool PassManager::RunPasses(const PassSet& passes) { bool is_changed = false; // run all passes in order while (!Includes(m_valid_passes, passes)) { PassSet ready_passes = CollectReadyPasses(passes); // first apply passes who are immune from other passes BOOST_FOREACH(std::string pass, SelectSafePasses(ready_passes)) { is_changed |= RecursiveRunPass(pass); } BOOST_FOREACH(std::string pass, ready_passes) { is_changed |= RecursiveRunPass(pass); }
unsigned int Items(Container_ c) { unsigned int count = 0; for (unsigned int i = 0; i < CAPACITY; ++i) { if (Includes(i)) { c[count] = i; ++count; } } return count; }
static Includes &SearchPathIncludes() { static bool initialised = false; static Includes includes; if(initialised) return includes; for(std::vector<std::string>::const_iterator itor = args.includeSearchPath.begin(); itor != args.includeSearchPath.end(); itor++) includes += Includes( *itor ); initialised = true; return includes; }
unsigned int operator[] (unsigned int bit) const { return Includes(bit) ? 1 : 0; }
bool Contains(unsigned int bit) const { return Includes(bit); }
String CppBuilder::IncludesDefinesTargetTime(const String& package, const Package& pkg) { String cc = Includes(" -I", package, pkg); cc << DefinesTargetTime(" -D", package, pkg); return cc; }
bool ComputeCommitSelection(const CommitDialog::SelectedFiles& userSelection, const FilesWithBugnumbers* modified, const FilesWithBugnumbers* added, const FilesWithBugnumbers* removed, const FilesWithBugnumbers* renamed, std::vector<std::string>& result) { #if 0 // Optimization: If all files are selected, we can simply do a 'cvs commit' in the top-level directories if (Includes(userSelection, modified) && Includes(userSelection, added) && Includes(userSelection, removed) && Includes(userSelection, renamed)) { std::set<std::string> modifiedDirs; if (modified) modifiedDirs = GetTopLevelDirs(*modified); std::set<std::string> addedDirs; if (addedDirs) addedDirs = GetTopLevelDirs(*added); std::set<std::string> removedDirs; if (removedDirs) removedDirs = GetTopLevelDirs(*removed); std::set<std::string> renamedDirs; if (renamedDirs) renamedDirs = GetTopLevelDirs(*renamed); std::set<std::string> dirs1; std::set_union(modifiedDirs.begin(), modifiedDirs.end(), addedDirs.begin(), addedDirs.end(), std::inserter(dirs1, dirs1.begin())); std::set<std::string> dirs2; std::set_union(removedDirs.begin(), removedDirs.end(), renamedDirs.begin(), renamedDirs.end(), std::inserter(dirs2, dirs2.begin())); std::set<std::string> dirs; std::set_union(dirs1.begin(), dirs1.end(), dirs2.begin(), dirs2.end(), std::inserter(dirs, dirs.begin())); result.clear(); for (std::set<std::string>::iterator it = dirs.begin(); it != dirs.end(); ++it) result.push_back(*it); return true; } else #endif { // Get list of non-renamed files result.clear(); for (CommitDialog::SelectedFiles::const_iterator it = userSelection.begin(); it != userSelection.end(); ++it) result.push_back(it->first); // Check if any renames are to be committed std::vector<std::string> renameDirs; for (CommitDialog::SelectedFiles::const_iterator it = userSelection.begin(); it != userSelection.end(); ++it) if (it->second == CVSStatus::STATUS_RENAMED) renameDirs.push_back(GetDirectoryPart(it->first)); // For each directory containing renamed files for (std::vector<std::string>::iterator it = renameDirs.begin(); it != renameDirs.end(); ++it) { // Check if this directory contains any modified files that the user did not select std::vector<std::string> files; if (modified) files = GetFilesInFolder(*modified, *it); for (std::vector<std::string>::iterator fileIter = files.begin(); fileIter != files.end(); ++fileIter) if (find(result.begin(), result.end(), *fileIter) == result.end()) // This file is not selected return false; // Same for added files.clear(); if (added) files = GetFilesInFolder(*added, *it); for (std::vector<std::string>::iterator fileIter = files.begin(); fileIter != files.end(); ++fileIter) if (find(result.begin(), result.end(), *fileIter) == result.end()) // This file is not selected return false; // Same for removed files.clear(); if (removed) files = GetFilesInFolder(*removed, *it); for (std::vector<std::string>::iterator fileIter = files.begin(); fileIter != files.end(); ++fileIter) if (find(result.begin(), result.end(), *fileIter) == result.end()) // This file is not selected return false; // Same for renamed files.clear(); if (renamed) files = GetFilesInFolder(*renamed, *it); for (std::vector<std::string>::iterator fileIter = files.begin(); fileIter != files.end(); ++fileIter) if (find(result.begin(), result.end(), *fileIter) == result.end()) // This file is not selected return false; } // Remove all files from the directories where renames are being committed result.clear(); for (CommitDialog::SelectedFiles::const_iterator it = userSelection.begin(); it != userSelection.end(); ++it) { std::string dir = GetDirectoryPart(it->first); if (find(renameDirs.begin(), renameDirs.end(), dir) == renameDirs.end()) result.push_back(it->first); } // Add directories where renames are being committed for (std::vector<std::string>::iterator it = renameDirs.begin(); it != renameDirs.end(); ++it) result.push_back(*it); } return true; }