From e9bbe6acb4e58d9bb80b101c22464d82fd8b09f9 Mon Sep 17 00:00:00 2001 From: cxl Date: Fri, 16 Dec 2016 15:23:09 +0000 Subject: [PATCH] .tutorial git-svn-id: svn://ultimatepp.org/upp/trunk@10551 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- tutorial/CoreTutorial/Tutorial.cpp | 4 +- tutorial/CoreTutorial/ValueArrayMap.cpp | 78 ++++++++++++++++++++++++- 2 files changed, 79 insertions(+), 3 deletions(-) diff --git a/tutorial/CoreTutorial/Tutorial.cpp b/tutorial/CoreTutorial/Tutorial.cpp index 002878bcc..c565101cb 100644 --- a/tutorial/CoreTutorial/Tutorial.cpp +++ b/tutorial/CoreTutorial/Tutorial.cpp @@ -9,11 +9,11 @@ int minor = 0; String qtf = "[ $$0,0#00000000000000000000000000000000:Default]" "[a83;*R6 $$1,3#31310162474203024125188417583966:caption]" -"[H4;b83;*4 $$2,3#07864147445237544204411237157677:title]" +"[H4;b83;*6 $$2,3#07864147445237544204411237157677:title]" "[b42;a42 $$3,3#45413000475342174754091244180557:text]" "[l100;C@5*;1 $$4,4#20902679421464641399138805415013:code]" "[l100;*C$7;2 $$5,5#07531550463529505371228428965313:log]" -"[b73;*3 $$2,3#07864147445237544204111237153677:subtitle]" +"[H4;b73;*5 $$2,3#07864147445237544204111237153677:subtitle]" ; #define OUT(x) out << x << '\n'; diff --git a/tutorial/CoreTutorial/ValueArrayMap.cpp b/tutorial/CoreTutorial/ValueArrayMap.cpp index 0ab0a6982..004c1badb 100644 --- a/tutorial/CoreTutorial/ValueArrayMap.cpp +++ b/tutorial/CoreTutorial/ValueArrayMap.cpp @@ -87,6 +87,13 @@ void ValueArrayMap() DUMP(m["two"]); + /// When key is not present in the map, `operator[]` returns void Value (which is also + /// Null): + + DUMP(m["key"]); + DUMP(m["key"].IsVoid()); + DUMP(IsNull(m["key"])); + /// Just like `VectorMap`, `ValueMap` is ordered, so the order of adding pairs to it /// matters: @@ -102,7 +109,70 @@ void ValueArrayMap() DUMP(m.IsSame(m2)); - /// + /// Iterating ValueMap can be achieved with `GetCount`, `GetKey` and `GetValue`: + + for(int i = 0; i < m.GetCount(); i++) + LOG(m.GetKey(i) << " = " << m.GetValue(i)); + + /// It is possible to get `ValueArray` of values: + + LOG(m.GetValues()); + + /// `GetKeys` gets constant reference to `Index` of keys: + + LOG(m.GetKeys()); + + /// It is possible to change the value with `Set`: + + m.Set("two", 4); + + DUMP(m); + + /// Or to change the value of key with `SetKey`: + + m.SetKey(1, "four"); + + DUMP(m); + + /// It is possible get a reference of value at given key, (with + /// ^topic://Core/srcdoc/ValueReference$en-us:special rules^) with `GetAdd` or `operator()`: + + Value& h = m("five"); + + h = 5; + + DUMP(m); + + /// When ValueMap is stored into Value, `operator[](String)` provides access to value at + /// key. Note that this narrows keys to text values: + + v = m; + DUMP(v); + DUMP(v["five"]); + + /// `Value::GetAdd` and `Value::operator()` provide a reference to value at key, with + /// ^topic://Core/srcdoc/ValueReference$en-us:special rules^: + + v.GetAdd("newkey") = "foo"; + v("five") = "FIVE"; + + DUMP(v); + + /// `ValueMap` and `ValueArray` are convertible with each other. When assigning `ValueMap` + /// to `ValueArray`, values are simply used: + + ValueArray v2 = m; + + DUMP(v2); + + /// When assigning `ValueArray` to `ValueMap`, keys are set as indices of elements: + + ValueMap m3 = v2; + + DUMP(m3); + + /// With basic `Value` types `int`, `String`, `ValueArray` and `ValueMap`, `Value` can + /// represent JSON: Value j = ParseJSON("{ \"array\" : [ 1, 2, 3 ] }"); @@ -115,4 +185,10 @@ void ValueArrayMap() DUMP(AsJSON(j)); /// + + j("array").At(1) = ValueMap()("key", 1); + + DUMP(AsJSON(j)); + + /// }