void ValueMap::Data::Jsonize(JsonIO& jio) { if(jio.IsStoring()) { ValueArray va; int n = min(value.GetCount(), key.GetCount()); for(int i = 0; i < n; i++) { ValueMap m; m.Add("key", StoreAsJsonValue(key[i])); m.Add("value", StoreAsJsonValue(value[i])); va.Add(m); } jio.Set(va); } else { Value va = jio.Get(); key.Clear(); value.Clear(); for(int i = 0; i < va.GetCount(); i++) { Value k, v; LoadFromJsonValue(k, va[i]["key"]); LoadFromJsonValue(v, va[i]["value"]); key.Add(k); value.Add(v); } } }
void CheckValueMap() { RLOG("------------------------------"); RLOG("CheckValueMap"); Value x = 123; Value y = x; ValueMap h; h.Add("0", 123); RDUMP(h["0"]); h.Add("1", Date(2001, 12, 1)); h.Add("2", "test"); Value v = h; ASSERT(v.GetCount() == 3); RDUMP(v["0"]); ASSERT(v["0"] == 123); ASSERT(v["1"] == Date(2001, 12, 1)); ASSERT(v["2"] == "test"); ASSERT(IsValueMap(v)); ASSERT(IsValueArray(v)); ValueMap hh = v; ASSERT(hh == h); hh.Add(123, "foo"); ASSERT(hh.GetCount() == 4); ASSERT(v.GetCount() == 3); ASSERT(hh[123] == "foo"); ValueArray va = v; ASSERT(va.GetCount() == 3); ASSERT(va[0] == 123); ASSERT(va[1] == Date(2001, 12, 1)); ASSERT(va[2] == "test"); }
ValueMap Result::LoadPage(const CommitFilter& f) { SQLR * Select(SqlAll(RESULT),UID,CMT,BRANCH,CLIENT_ID) .From( Select(UID.As("FILTER")) .From(COMMITS) .Where(f) .OrderBy(Descending(DT)) .Limit(f.offset, f.limit) .AsTable("FILTER_TABLE") ) .InnerJoin(COMMITS).On(SqlId("FILTER")==UID) .LeftJoin(RESULT).On(CMT_UID == UID) .LeftJoin(CLIENT).On(ID == CLIENT_ID) .OrderBy(Descending(DT)); VectorMap<Tuple2<String, int>,ValueMap> rows; SortedIndex<int> clients; VectorMap<String, ValueMap> commits; ValueArray v_clients; ValueMap v_commits; ValueMap vm; while (SQLR.Fetch(vm)){ SetComputedAttributes(vm); String uid = vm["UID"]; int cid = vm["CLIENT_ID"]; rows.Add(MakeTuple(uid, cid), vm); clients.FindAdd(cid); ValueMap& commit = commits.GetAdd(uid); commit.Set("CMT", vm["CMT"]); commit.Set("BRANCH", vm["BRANCH"]); } ValueMap results; for(int i = 0; i<commits.GetCount() ; ++i){ v_commits.Add(commits.GetKey(i), commits[i]); vm.Clear(); for(int j = 0; j < clients.GetCount(); ++j){ if(!IsNull(clients[j])) vm.Add(clients[j], rows.GetAdd(MakeTuple(commits.GetKey(i), clients[j]))); } results.Add(commits.GetKey(i), vm); } for(int i = (!clients.IsEmpty() && IsNull(clients[0]))?1:0; i < clients.GetCount(); i++) v_clients.Add(clients[i]); ValueMap res; res.Set("RESULTS", results); res.Set("COMMITS", v_commits); res.Set("CLIENTS", v_clients); res.Set("ALLCLIENTS", Client::LoadAll()); return res; }
Value Compiler::ExeMap::Eval(ExeContext& x) const { ValueMap m; for(int i = 0; i < key.GetCount(); i++) m.Add(key[i]->Eval(x), value[i]->Eval(x)); return m; }
ValueMap S_info::Get(const void *s) const { ValueMap m; for(int i = 0; i < column.GetCount(); i++) m.Add(column.GetKey(i), GetRef(s, i)); return m; }
ValueMap Client::LoadAll() { SQLR * Select(SqlAll()).From(CLIENT).Where(ID>0); ValueMap res; ValueMap vm; while (SQLR.Fetch(vm)) res.Add(vm["ID"], vm); return res; }
void operator*=(ValueMap& map, SqlSelect select) { map.Clear(); Sql sql; sql * select; while(sql.Fetch()) map.Add(sql[0], sql[1]); }
ValueMap Sql::GetRowMap() const { ValueMap m; int n = GetColumns(); for(int i = 0; i < n; i++) m.Add(GetColumnInfo(i).name, (*this)[i]); return m; }
bool Pop3::GetListItems(ValueMap& list, dword type1, dword type2) { StringStream s(data); while(!s.IsEof()) { String line = s.GetLine(); Vector<String> s = Split(line, ' '); if(s.GetCount() < 2) return false; list.Add(Scan(type1, s[0]), Scan(type2, s[1])); } return true; }
void CheckValueMap() { RLOG("------------------------------"); RLOG("CheckValueMap"); Value x = 123; Value y = x; ValueMap h; h.Add("0", 123); RDUMP(h["0"]); h.Add("1", Date(2001, 12, 1)); h.Add("2", "test"); Value v = h; ASSERT(v.GetCount() == 3); RDUMP(v["0"]); ASSERT(v["0"] == 123); ASSERT(v["1"] == Date(2001, 12, 1)); ASSERT(v["2"] == "test"); ValueMap hh = v; ASSERT(hh == h); }
NAMESPACE_UPP Value ParseJSON(CParser& p) { p.UnicodeEscape(); if(p.IsDouble()) return p.ReadDouble(); if(p.IsString()) { bool dt = p.IsChar2('\"', '\\'); String s = p.ReadString(); if(dt) { CParser p(s); if(p.Char('/') && p.Id("Date") && p.Char('(') && p.IsInt()) { int64 n = p.ReadInt64(); if(!IsNull(n)) return Time(1970, 1, 1) + n / 1000; } } return s; } if(p.Id("null")) return Null; if(p.Id("true")) return true; if(p.Id("false")) return false; if(p.Char('{')) { ValueMap m; while(!p.Char('}')) { String key = p.ReadString(); p.PassChar(':'); m.Add(key, ParseJSON(p)); if(p.Char('}')) // Stray ',' at the end of list is allowed... break; p.PassChar(','); } return m; } if(p.Char('[')) { ValueArray va; while(!p.Char(']')) { va.Add(ParseJSON(p)); if(p.Char(']')) // Stray ',' at the end of list is allowed... break; p.PassChar(','); } return va; } p.ThrowError("Unrecognized JSON element"); return Null; }
/** * parse the special value "struc". this method parses the complexer value "struct" and returns it * @param p XmlParser holding the xml document * @return the parsed struct as Value (not ValueMap!) */ Value XmlRpcParser::ParseStruct(XmlParser& p) { ValueMap vm; Value key, data; while(p.Tag("member")) { for(int i=0;i<2;i++){ if(p.Tag("name")) { key = Value(p.ReadText()); p.PassEnd(); //name } else data = Parse(p); } p.PassEnd(); //member vm.Add(key,data); } return Value(vm); }
NAMESPACE_UPP Value ParseJSON(CParser& p) { p.UnicodeEscape(); if(p.IsNumber()) return p.ReadDouble(); if(p.IsString()) return p.ReadString(); if(p.Id("null")) return Null; if(p.Id("true")) return true; if(p.Id("false")) return false; if(p.Char('{')) { ValueMap m; if(!p.IsChar('}')) do { String key = p.ReadString(); p.PassChar(':'); m.Add(key, ParseJSON(p)); } while(p.Char(',')); p.PassChar('}'); return m; } if(p.Char('[')) { ValueArray va; if(!p.IsChar(']')) do va.Add(ParseJSON(p)); while(p.Char(',')); p.PassChar(']'); return va; } p.ThrowError("Unrecognized JSON element"); return Null; }
void Client::SetAuthInfo(String& salts, ValueMap& clients) { salts.Cat() << data["ID"] << ':' << data["SALT"] << '|'; clients.Add(IntStr(data["ID"])+";"+String(data["SALT"]),data["NAME"]); }
NAMESPACE_UPP Value ParseXmlRpcValue(XmlParser& p) { Value r; p.PassTag("value"); if(p.Tag("int") || p.Tag("i4")) { String s = p.ReadText(); CParser p(s); if(!p.IsInt()) throw XmlError("integer expected"); r = p.ReadInt(); } else if(p.Tag("boolean")) { int n = StrInt(p.ReadText()); if(n != 0 && n != 1) throw XmlError("boolean expected"); r = (bool)n; } else if(p.Tag("double")) { String s = p.ReadText(); CParser p(s); if(!p.IsDouble()) throw XmlError("double expected"); r = p.ReadDouble(); } else if(p.Tag("string") || p.Tag("base64")) r = p.ReadText(); else if(p.TagE("nil")) { p.PassEnd(); return r; } else if(p.Tag("dateTime.iso8601")) { String s = TrimBoth(p.ReadText()); // 19980717T14:08:55 // 01234567890123456 if(s.GetCount() != 17 || s[8] != 'T' || s[11] != ':' || s[14] != ':') throw XmlError("invalid dateTime format"); Time tm; tm.year = atoi(s.Mid(0, 4)); tm.month = atoi(s.Mid(4, 2)); tm.day = atoi(s.Mid(6, 2)); tm.hour = atoi(s.Mid(9, 2)); tm.minute = atoi(s.Mid(12, 2)); tm.second = atoi(s.Mid(15, 2)); r = tm; } else if(p.Tag("array")) { ValueArray va; p.PassTag("data"); while(!p.End()) va.Add(ParseXmlRpcValue(p)); r = va; } else if(p.Tag("struct")) { ValueMap vm; while(p.Tag("member")) { p.PassTag("name"); String name = p.ReadText(); p.PassEnd(); vm.Add((Value)name, ParseXmlRpcValue(p)); p.PassEnd(); } r = vm; } else throw XmlError("unknown value type"); p.PassEnd(); p.PassEnd(); return r; }