void apply(sender& s) { if (s.uninitialized()) { if (delivery_mode.set) set_delivery_mode(s, delivery_mode.value); if (handler.set && handler.value) set_handler(s, *handler.value); if (auto_settle.set) get_context(s).auto_settle = auto_settle.value; if (source.set) { proton::source local_s(make_wrapper<proton::source>(pn_link_source(unwrap(s)))); source.value.apply(local_s); } if (target.set) { proton::target local_t(make_wrapper<proton::target>(pn_link_target(unwrap(s)))); target.value.apply(local_t); } } }
void XParser::startElement(const XMLCh* const uri, const XMLCh* const local, const XMLCh* const raw, const xercesc::Attributes& attrs) { // if text is mixed with elements. if (_elementBuffer.length() > 0) { std::string text = _trim(_elementBuffer); if (text.length() > 0) { unsigned long long value = XHash::hash(text); int tid = _xtree->addText(_idStack[_stackTop], _lsidStack[_stackTop], text, value); _lsidStack[_stackTop] = tid; _currentNodeID = tid; _valueStack[_stackTop] += value; } } std::string local_s(xercesc::XMLString::transcode(local)); //cout << "Add element " << _idStack[_stackTop] << "\t" << _lsidStack[_stackTop] << "\t" << local_s << endl; int eid = _xtree->addElement(_idStack[_stackTop], _lsidStack[_stackTop], local_s); // Update last sibling info. _lsidStack[_stackTop] = eid; // Push _stackTop++; _idStack[_stackTop] = eid; _currentNodeID = eid; _lsidStack[_stackTop] = XTree::NULL_NODE; _valueStack[_stackTop] = XHash::hash(local_s); // Take care of attributes if (attrs.getLength() > 0) { for (unsigned int i = 0; i < attrs.getLength(); i++) { std::string name(xercesc::XMLString::transcode(attrs.getQName(i))); unsigned long long namehash = XHash::hash(name); unsigned long long attrhash = namehash * namehash; std::string value = ""; char *valueP = xercesc::XMLString::transcode(attrs.getValue(i)); if (valueP != NULL) { value = std::string(valueP); unsigned long long valuehash = XHash::hash(value); attrhash += valuehash * valuehash; } int aid = _xtree->addAttribute(eid, _lsidStack[_stackTop], name, value, namehash, attrhash); _lsidStack[_stackTop] = aid; _currentNodeID = aid + 1; _valueStack[_stackTop] += attrhash * attrhash; } } _readElement = true; _elementBuffer = std::string(""); }