Add an insert method to VAlueHolder to allow batch insertion

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2038 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2002-03-29 05:49:37 +00:00
parent 68e5ed8dbe
commit b04bb3f158
2 changed files with 40 additions and 0 deletions

View File

@ -111,6 +111,16 @@ public:
// value.
//
iterator insert(iterator Pos, ValueSubclass *Inst);
// ValueHolder::insert - This method inserts the specified _range_ of values
// before the 'Pos' iterator. This currently only works for vector
// iterators...
//
// FIXME: This is not generic so that the code does not have to be around
// to be used... is this ok?
//
void insert(iterator Pos, // Where to insert
iterator First, iterator Last); // Vector to read insts from
};
#endif

View File

@ -138,4 +138,34 @@ ValueHolder<ValueSubclass,ItemParentType,SymTabType>
return I;
}
// ValueHolder::insert - This method inserts the specified _range_ of values
// before the 'Pos' iterator, and returns an iterator to the first newly
// inserted element. This currently only works for vector iterators...
//
// FIXME: This is not generic so that the code does not have to be around
// to be used... is this ok?
//
template<class ValueSubclass, class ItemParentType, class SymTabType>
void ValueHolder<ValueSubclass,ItemParentType,SymTabType>
::insert(iterator Pos, // Where to insert
iterator First, iterator Last) { // Vector to read insts from
// Check to make sure that the values are not already in some valueholder...
for (iterator X = First; X != Last; ++X) {
assert((*X)->getParent() == 0 &&
"Cannot insert into valueholder, value already has a parent!");
(*X)->setParent(ItemParent);
}
// Add all of the values to the value holder...
ValueList.insert(Pos, First, Last);
// Insert all of the instructions in the symbol table...
if (Parent)
for (;First != Last; ++First)
if ((*First)->hasName())
Parent->getSymbolTableSure()->insert(*First);
}
#endif