{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}.
*: Add a method to Varghese's new {quote:ClassAdList} to move an ad from one list to another.
*: Add or fix compatibility for following old {quote:ClassAd} methods:
*:: ClassAd::Assign()
*:: ClassAd::LookupString(MyString)
*:: ClassAd::Insert(const char*)
*:: ClassAd::put()
*:: ClassAd::initFromStream()
*:: ClassAd::AssignExpr()
*:: ClassAd::clear()
*:: 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::LookupElem()
*:: 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.