return str_buf;
}
-//
+// ^(\d{4})-(\d{2})-(\d{2})(?:T(\d{2}):(\d{2})(?::(\d{2})(?:\.(\d+))?)?(?:([+-]\d{2}):(\d{2}))?)?$
bool
Kumu::Timestamp::DecodeString(const char* datestr)
{
ui32_t char_count = 10;
TAI::caltime YMDhms;
+ YMDhms.hour = 0;
+ YMDhms.minute = 0;
+ YMDhms.second = 0;
YMDhms.offset = 0;
YMDhms.date.year = atoi(datestr);
YMDhms.date.month = atoi(datestr + 5);
Kumu::Timestamp::Unarchive(MemIOReader* Reader)
{
ui16_t year;
- ui8_t month, day, hour, minute, second;
+ ui8_t month, day, hour, minute, second, tick;
assert(Reader);
if ( ! Reader->ReadUi16BE(&year) ) return false;
if ( ! Reader->ReadUi8(&hour) ) return false;
if ( ! Reader->ReadUi8(&minute) ) return false;
if ( ! Reader->ReadUi8(&second) ) return false;
+ if ( ! Reader->ReadUi8(&tick) ) return false;
SetComponents(year, month, day, hour, minute, second);
return true;
}
assert(Writer);
ui16_t year;
- ui8_t month, day, hour, minute, second;
+ ui8_t month, day, hour, minute, second, tick = 0;
GetComponents(year, month, day, hour, minute, second);
if ( ! Writer->WriteUi16BE(year) ) return false;
if ( ! Writer->WriteUi8(hour) ) return false;
if ( ! Writer->WriteUi8(minute) ) return false;
if ( ! Writer->WriteUi8(second) ) return false;
+ if ( ! Writer->WriteUi8(tick) ) return false;
return true;
}
return m_Timestamp.x - ui64_C(4611686018427387914);
}
+//
+void
+Kumu::Timestamp::SetCTime(const ui64_t& ctime)
+{
+ m_Timestamp.x = ctime + ui64_C(4611686018427387914);
+}
+
+
+
//------------------------------------------------------------------------------------------
return result;
}
+//------------------------------------------------------------------------------------------
+
+//
+const char*
+Kumu::km_strnstr(const char *s, const char *find, size_t slen)
+{
+ char c, sc;
+ size_t len;
+
+ if ( ( c = *find++ ) != '\0' )
+ {
+ len = strlen(find);
+ do
+ {
+ do
+ {
+ if ( slen-- < 1 || ( sc = *s++ ) == '\0' )
+ return 0;
+ }
+ while ( sc != c );
+
+ if ( len > slen )
+ return 0;
+ }
+ while ( strncmp(s, find, len) != 0 );
+ --s;
+ }
+
+ return s;
+}
+
+//
+std::list<std::string>
+Kumu::km_token_split(const std::string& str, const std::string& separator)
+{
+ std::list<std::string> components;
+ const char* pstr = str.c_str();
+ const char* r = strstr(pstr, separator.c_str());
+
+ while ( r != 0 )
+ {
+ assert(r >= pstr);
+ if ( r > pstr )
+ {
+ std::string tmp_str;
+ tmp_str.assign(pstr, r - pstr);
+ components.push_back(tmp_str);
+ }
+
+ pstr = r + separator.size();
+ r = strstr(pstr, separator.c_str());
+ }
+
+ if( strlen(pstr) > 0 )
+ components.push_back(std::string(pstr));
+
+ return components;
+}
//
// end KM_util.cpp