MojErr MojDbKind::init(const MojString& id) { MojLogTrace(s_log); // parse name and version out of id if (id.length() > KindIdLenMax) MojErrThrowMsg(MojErrDbMalformedId, _T("db: kind id too long")); MojSize sepIdx = id.rfind(VersionSeparator); if (sepIdx == MojInvalidIndex) MojErrThrow(MojErrDbMalformedId); MojErr err = id.substring(0, sepIdx, m_name); MojErrCheck(err); MojString str; err = id.substring(sepIdx + 1, id.length() - sepIdx - 1, str); MojErrCheck(err); const MojChar* end = NULL; MojInt64 ver = MojStrToInt64(str.data(), &end, 0); if (*end != '\0' || ver < 0 || ver > MojUInt32Max) MojErrThrow(MojErrDbMalformedId); m_version = (MojUInt32) ver; m_id = id; return MojErrNone; }