userinfo.cpp userinfo.h // //C++Implementation:itpp_ext // //Description: // // //Author:smidl<smidl@utia.cas.cz>,(C)2008 // //Copyright:SeeCOPYINGfilethatcomeswiththisdistribution // // #include"userinfo.h" BindingFrame::BindingFrame() :dummy() { } stringBindingFrame::XMLCh2str(constXMLCh*constXMLCh_str) { char*local=XMLString::transcode(XMLCh_str); stringres=local; XMLString::release(&local); returnres; } Attribute::Attribute(stringattributeName) :dummy(), transcodedAttributeName(XMLString::transcode(attributeName.c_str())) { } Attribute::~Attribute() { XMLString::release((XMLCh**)&transcodedAttributeName); } string&Attribute::Get(DOMElement&element)const { constXMLCh*consttranscoded_str=element.getAttribute(transcodedAttributeName); return*newstring(XMLString::transcode(transcoded_str)); } voidAttribute::Set(DOMElement&element,conststring&str)const { if(!str.length())return; constXMLCh*transcoded_str=XMLString::transcode(str.c_str()); element.setAttribute(transcodedAttributeName,transcoded_str); XMLString::release((XMLCh**)&transcoded_str); } constAttributeAttribute::help("help"); constAttributeAttribute::type("type"); constAttributeAttribute::value("value"); UserInfo::StringToUIMap::MappedString2UI&UserInfo::StringToUIMap::privateMap() { staticMappedString2UIvar; returnvar; } voidUserInfo::StringToUIMap::Add(stringkey,pUserInfopInstance) { privateMap().insert(make_pair(key,pInstance)); } UserInfo::pUserInfoUserInfo::StringToUIMap::Retrieve(stringkey) { MappedString2UI::const_iteratoriter=privateMap().find(key); if(iter==privateMap().end())returnNULL; elsereturniter->second; } RootElement::RootElement(char*fileName) :dummy(), transcodedFileName(XMLString::transcode(fileName)) { //getaserializer,aninstanceofDOMWriter(the"LS"standsforload-save). pImplementation=DOMImplementationRegistry::getDOMImplementation(XMLString::transcode("LS")); pSerializer=((DOMImplementationLS*)pImplementation)->createDOMWriter(); //setuserspecifiedendoflinesequenceandoutputencoding pSerializer->setNewLine(XMLString::transcode("\n")); //optionally,settheformat-pretty-printfeature if(pSerializer->canSetFeature(XMLUni::fgDOMWRTFormatPrettyPrint,true)) pSerializer->setFeature(XMLUni::fgDOMWRTFormatPrettyPrint,true); pDoc=NULL; Clean(); } RootElement::~RootElement() { XMLString::release((XMLCh**)&transcodedFileName); pSerializer->release(); pDoc->release(); AssertXercesIsAlivedummy;//TODOjezdetreba? } voidRootElement::Clean() { if(pDoc)pDoc->release(); pDoc=pImplementation->createDocument( XMLString::transcode("M3KUSERINFO"), XMLString::transcode("ROOT"),NULL); } boolRootElement::Load(void) { constLocalFileInputSourceinputSource(transcodedFileName); XercesDOMParserparser; parser.setValidationScheme(XercesDOMParser::Val_Auto); parser.setDoNamespaces(false); parser.setDoSchema(false); parser.parse(inputSource); if(parser.getErrorCount()) returnfalse; DOMDocument*newDoc=parser.adoptDocument(); if(newDoc==NULL) returnfalse; if(pDoc) pDoc->release(); pDoc=newDoc; returntrue; } voidRootElement::Save(void) { LocalFileFormatTargetoutputTarget(transcodedFileName); pSerializer->writeNode(&outputTarget,*pDoc); } RootElement::operator DOMElement& () { return*(pDoc->getDocumentElement()); } template<>constTypedUserInfo<bool>&TypedUserInfo<bool>::instance=BoolUI(); template<>constTypedUserInfo<int>&TypedUserInfo<int>::instance=IntUI(); template<>constTypedUserInfo<double>&TypedUserInfo<double>::instance=DoubleUI(); template<>constTypedUserInfo<string>&TypedUserInfo<string>::instance=StringUI();