{section: ClassAd Conversion Todo List} This is the set of tasks that need to be done to convert from old to new {quote:ClassAds}. There are two lists. The first list contains items that can be done without affecting Condor current usage of old {quote:ClassAds}. This mainly consists of adding compatibility functions to new {quote:ClassAds} that emulate the API of old {quote:ClassAds}. The second list contains items that will break Condor's usage of old {quote:ClassAds}. These are mainly changing callsites for old {ClassAd} methods that can't be easily emulated through a compatibility function. This second list should be performed within a short time period once we're ready to 'pull the trigger' on converting to new {quote:ClassAds}. {subsection: Pre-Flag Day Tasks} *: Check in Varghese's {quote:ClassAdList} class that works with new {quote:ClassAds}. *DONE* *: Add a method to Varghese's new {quote:ClassAdList} to move an ad from one list to another. *DONE* *: Add or fix compatibility for following old {quote:ClassAd} methods: *:: ClassAd::Assign() *DONE* *:: ClassAd::LookupString(MyString) *:: ClassAd::Insert(const char*) *DONE* *:: ClassAd::put() *:: ClassAd::initFromStream() *:: ClassAd::AssignExpr() *DONE* *:: ClassAd::clear() *DONE* *:: ClassAd::EvalString(const char*, const class AttrList*, char**) *:: ClassAd::EvalString(const char*, const class AttrList*, MyString&) *:: ClassAd::NextNameOriginal() *:: ClassAd::ResetName() *:: ClassAd::sPrintExpr() *:: ClassAd::NextDirtyExpr() *:: ClassAd::SetDirtyFlag() *:: ClassAd::GetDirtyFlag() *:: ClassAd::GetReferences() *:: ClassAd::ChainCollapse() *:: ClassAd::EscapeStringValue() *:: ClassAd::CopyAttribute() *:: ClassAd::fPrintAsXML() *:: ClassAd::sPrintAsXML() *:: ClassAd::IsValidAttrValue() *: Write helper functions for these methods which we can't emulate transparently: *:: ExprTree::PrintToNewStr() *:: ExprTree::PrintToStr() *:: ExprTree::EvalTree() *: Add {quote:ClassAds} functions that are in old {quote:ClassAds} but not in new {quote:ClassAds}: *:: stringListSize() *:: stringListSum() *:: stringListAve() *:: stringListMin() *:: stringListMax() *:: stringListMember() *:: stringListIMember() *:: stringListRegexpMember() {subsection: Flag Day Tasks} *: Change most or all references to {quote:ClassAd} and {quote:AttrList} with {quote:CompatClassAd}. *: Swap in Varghese's new {quote:ClassAdList} class. *: Fix up the one or two callsites in matchmaker.cpp that move an ad from one {quote:ClassAdList} to another. *: The following methods will need some fixing at the callsites: *:: ClassAd::Insert(ExprTree*) *:: ClassAd::Lookup() *:: ExprTree::RArg() *:: ExprTree::LArg() *:: ExprTree::PrintToNewStr() *:: ExprTree::EvalTree() *:: ClassAd::NextExpr() *:: ClassAd(char *,char) *:: ExprTree::PrintToStr() *:: ExprTree::DeepCopy() *:: ExprTree::MyType() *:: ClassAd::ExchangeExpressions() *:: ClassAd::unchain() *:: ClassAd::RestoreChain() {subsection: Post-Flag Day Tasks} *: As time permits, rewrite callsites to make {quote:CompatClassAd} unnecessary. The modified callsites can either use native new {quote:ClassAd} methods or newly-written free-standing functions.