STPathSet::STPathSet (SerialIter& sit, SField const& name) : STBase(name) { std::vector<STPathElement> path; for(;;) { int iType = sit.get8 (); if (iType == STPathElement::typeNone || iType == STPathElement::typeBoundary) { if (path.empty ()) { JLOG (debugLog().error()) << "Empty path in pathset"; Throw<std::runtime_error> ("empty path"); } push_back (path); path.clear (); if (iType == STPathElement::typeNone) return; } else if (iType & ~STPathElement::typeAll) { JLOG (debugLog().error()) << "Bad path element " << iType << " in pathset"; Throw<std::runtime_error> ("bad path element"); } else { auto hasAccount = iType & STPathElement::typeAccount; auto hasCurrency = iType & STPathElement::typeCurrency; auto hasIssuer = iType & STPathElement::typeIssuer; AccountID account; Currency currency; AccountID issuer; if (hasAccount) account.copyFrom (sit.get160 ()); if (hasCurrency) currency.copyFrom (sit.get160 ()); if (hasIssuer) issuer.copyFrom (sit.get160 ()); path.emplace_back (account, currency, issuer, hasCurrency); } } }