summary refs log tree commit diff stats
path: root/lib/pure/collections/tables.nim
diff options
context:
space:
mode:
authorGrzegorz Adam Hankiewicz <gradha@imap.cc>2014-06-06 20:10:13 +0200
committerGrzegorz Adam Hankiewicz <gradha@imap.cc>2014-06-06 20:18:19 +0200
commitbde9d1ac0753e46c726dc63930539bb82d09f19d (patch)
tree8f3f0d093fbe18f8c3852408dc33873afd47c215 /lib/pure/collections/tables.nim
parent9009841d623d268c649f96bd0215b3013de35eeb (diff)
downloadNim-bde9d1ac0753e46c726dc63930539bb82d09f19d.tar.gz
Adds to tables module example of reference type vs value type.
Diffstat (limited to 'lib/pure/collections/tables.nim')
-rw-r--r--lib/pure/collections/tables.nim34
1 files changed, 32 insertions, 2 deletions
diff --git a/lib/pure/collections/tables.nim b/lib/pure/collections/tables.nim
index b5fc1737a..e51a04dd1 100644
--- a/lib/pure/collections/tables.nim
+++ b/lib/pure/collections/tables.nim
@@ -52,8 +52,25 @@
 ##   p2.lastName = "박"
 ##   salaries[p2] = 45_000
 ##
-## **Note:** The data types declared here have *value semantics*: This means
-## that ``=`` performs a copy of the hash table.
+## **Note:** The data types declared here starting with the **T** prefix have
+## *value semantics*: This means that ``=`` performs a copy of the hash table.
+## On the other hand, types declared with the **P** prefix have *reference
+## semantics*. Behaviour comparison:
+##
+## .. code-block:: nimrod
+##   var valueWords = initTable[string, string]()
+##   valueWords["teh"] = "the"
+##   var valueWordsClone = valueWords
+##   # Changing the clone won't change the original.
+##   valueWordsClone["teh"] = "thehehe"
+##   assert valueWords["teh"] != valueWordsClone["teh"]
+##
+##   var refWords = newTable[string, string]()
+##   refWords["teh"] = "the"
+##   var refWordsShadow = refWords
+##   # Both the shadow and the original share the same data.
+##   refWordsShadow["teh"] = "thehehe"
+##   assert refWords["teh"] == refWordsShadow["teh"]
 
 import
   hashes, math
@@ -861,3 +878,16 @@ when isMainModule:
   s2[p2] = 45_000
   s3[p1] = 30_000
   s3[p2] = 45_000
+
+  # Ref verification.
+  var valueWords = initTable[string, string]()
+  valueWords["teh"] = "the"
+  var valueWordsClone = valueWords
+  valueWordsClone["teh"] = "thehehe"
+  assert valueWords["teh"] != valueWordsClone["teh"]
+
+  var refWords = newTable[string, string]()
+  refWords["teh"] = "the"
+  var refWordsShadow = refWords
+  refWordsShadow["teh"] = "thehehe"
+  assert refWords["teh"] == refWordsShadow["teh"]