ObjFW  History of src/OFMapTable.m of dd467ddb20e1f120

History of the file that is called src/OFMapTable.m at check-in dd467ddb20e1f120

2024-04-03
02:16
[90cee4067e] part of check-in [7413a728a7] Change license to LGPLv3 only (check-in: [7413a728a7] user: js, branch: trunk, size: 17170) [annotate] [blame] [check-ins using] [diff]
2024-02-18
13:53
[77fd4c4f10] part of check-in [ab14af79d2] OFMapTable: Improve enumeration mutation detection (check-in: [ab14af79d2] user: js, branch: trunk, size: 16962) [annotate] [blame] [check-ins using] [diff]
2024-02-12
19:55
[3e827255d3] part of check-in [26ea8fefec] OFMapTable: Fix type mismatch on OFHashSeed (check-in: [26ea8fefec] user: js, branch: trunk, size: 16963) [annotate] [blame] [check-ins using] [diff]
2024-01-02
17:17
[810b88a011] part of check-in [26ddd2e4e4] Update copyright (check-in: [26ddd2e4e4] user: js, branch: trunk, size: 16958) [annotate] [blame] [check-ins using] [diff]
2023-07-19
21:00
[00903dc5ce] part of check-in [cdc49aa375] OFMapTable: Change the rotation when resizing (check-in: [cdc49aa375] user: js, branch: trunk, size: 16958) [annotate] [blame] [check-ins using] [diff]
2023-01-06
09:04
[fd0add4a94] part of check-in [8939cbdb52] Update copyright (check-in: [8939cbdb52] user: js, branch: trunk, size: 16601) [annotate] [blame] [check-ins using] [diff]
2022-11-16
01:27
[2885d27493] part of check-in [c86b8f10f0] Add OFAssert()

This uses the same format as OFEnsure(). (check-in: [c86b8f10f0] user: js, branch: trunk, size: 16601) [annotate] [blame] [check-ins using] [diff]

2022-09-12
14:34
[61602c79fe] part of check-in [c40a295629] Either restrict subclassing or reserve ivars (check-in: [c40a295629] user: js, branch: trunk, size: 16622) [annotate] [blame] [check-ins using] [diff]
2022-02-12
07:46
[155910f8b1] part of check-in [1a86b8175b] Update copyright (check-in: [1a86b8175b] user: js, branch: trunk, size: 16598) [annotate] [blame] [check-ins using] [diff]
2021-12-24
11:06
[0eba9a13be] part of check-in [ae4879fe0d] OFMapTable: Fix rotating with the wrong size

This essentially made it a shift rather than a rotate, sometimes
shifting most or even all of the bits out and making all hashes collide. (check-in: [ae4879fe0d] user: js, branch: trunk, size: 16598) [annotate] [blame] [check-ins using] [diff]

2021-04-30
21:23
[37fa19bf82] part of check-in [39863b3503] Make OFHashSeed private (check-in: [39863b3503] user: js, branch: trunk, size: 16659) [annotate] [blame] [check-ins using] [diff]
2021-04-25
11:05
[6075b5b12b] part of check-in [27103855c2] A few last renames (check-in: [27103855c2] user: js, branch: new-naming-convention, size: 16625) [annotate] [blame] [check-ins using] [diff]
2021-04-19
21:07
[963c916eb5] part of check-in [c81086beeb] Rename all struct of_* (check-in: [c81086beeb] user: js, branch: new-naming-convention, size: 16451) [annotate] [blame] [check-ins using] [diff]
2021-04-18
15:55
[8cb89e6a68] part of check-in [7392685ffc] Rename all functions in macros.h (check-in: [7392685ffc] user: js, branch: new-naming-convention, size: 16469) [annotate] [blame] [check-ins using] [diff]
13:24
[a5b94365d5] part of check-in [d9f8960fc5] Rename remaining functions in OFObject.h (check-in: [d9f8960fc5] user: js, branch: new-naming-convention, size: 16437) [annotate] [blame] [check-ins using] [diff]
2021-04-17
22:45
[717a250a20] part of check-in [498074dab9] Rename of_(re)alloc and add OFFreeMemory (check-in: [498074dab9] user: js, branch: new-naming-convention, size: 16443) [annotate] [blame] [check-ins using] [diff]
14:21
[878b273561] part of check-in [943d9bd388] of_map_table_functions_t -> OFMapTableFunctions (check-in: [943d9bd388] user: js, branch: new-naming-convention, size: 16362) [annotate] [blame] [check-ins using] [diff]
03:21
[69ee51ce08] part of check-in [c4e0e56fa3] Rename all blocks (check-in: [c4e0e56fa3] user: js, branch: new-naming-convention, size: 16426) [annotate] [blame] [check-ins using] [diff]
02:43
[f62fe0ab1f] part of check-in [ed3b07591c] Rename of_fast_enumeration_state_t (check-in: [ed3b07591c] user: js, branch: new-naming-convention, size: 16442) [annotate] [blame] [check-ins using] [diff]
2021-03-08
00:04
[8788cb21e4] part of check-in [eb328735f2] Make GCC happy again (check-in: [eb328735f2] user: js, branch: trunk, size: 16447) [annotate] [blame] [check-ins using] [diff]
2021-03-07
20:25
[79fa6ef127] part of check-in [1b82d3bf4f] *.m: Fold methods into one line where it fits (check-in: [1b82d3bf4f] user: js, branch: trunk, size: 16447) [annotate] [blame] [check-ins using] [diff]
02:36
[9ddf5a7d27] part of check-in [a0fd103a0b] Style change: Allow more than 1 argument per line

This is only migrating some places, others will be migrated as they are
touched. (check-in: [a0fd103a0b] user: js, branch: trunk, size: 16291) [annotate] [blame] [check-ins using] [diff]

2021-01-02
22:04
[b3889238ba] part of check-in [374e1a1bfa] Update copyright (check-in: [374e1a1bfa] user: js, branch: trunk, size: 16309) [annotate] [blame] [check-ins using] [diff]
2020-11-14
12:23
[6adf8ae2bb] part of check-in [627511b032] Rename of_malloc and of_calloc

The new names should be more accurate. (check-in: [627511b032] user: js, branch: trunk, size: 16398) [annotate] [blame] [check-ins using] [diff]

2020-11-05
02:27
[bb1c57067e] part of check-in [da1fb6b21c] Further reduce usage of -[allocMemoryWithSize:] (check-in: [da1fb6b21c] user: js, branch: trunk, size: 16387) [annotate] [blame] [check-ins using] [diff]
2020-10-10
14:27
[8775708778] part of check-in [aeb403a1ed] OFObject: Change type of -[hash] to unsigned long

The internal hash is still 32 bit in most places, but this way, it is at
least not baked into the API and ABI and can be upgraded later, should
that ever be necessary. (check-in: [aeb403a1ed] user: js, branch: trunk, size: 16545) [annotate] [blame] [check-ins using] [diff]

2020-07-12
10:35
[ec26b7463a] part of check-in [14f05841a3] Split of_random() into of_random{16,32,64}() (check-in: [14f05841a3] user: js, branch: trunk, size: 16442) [annotate] [blame] [check-ins using] [diff]
2020-06-28
15:03
[8ca8ae429a] part of check-in [b6cb3addd0] Use OF_DIRECT(_MEMBERS) where appropriate (check-in: [b6cb3addd0] user: js, branch: trunk, size: 16438) [annotate] [blame] [check-ins using] [diff]
2020-01-02
01:51
[df5b78cbf7] part of check-in [c7f0229795] Update copyright (check-in: [c7f0229795] user: js, branch: trunk, size: 16392) [annotate] [blame] [check-ins using] [diff]
2019-06-19
00:45
[889ef07313] part of check-in [7214a2c7af] OFEnumerator: Remove -[reset]

It's not very useful and is a problem for the Foundation bridge, as
NSEnumerator does not have it. (check-in: [7214a2c7af] user: js, branch: trunk, size: 16389) [annotate] [blame] [check-ins using] [diff]

2019-06-17
02:33
[916c94f96d] part of check-in [17d57e01ff] Remove underscores from class names (check-in: [17d57e01ff] user: js, branch: trunk, size: 16719) [annotate] [blame] [check-ins using] [diff]
2019-01-03
19:13
[566bcf99cb] part of check-in [0509d7a844] Update copyright (check-in: [0509d7a844] user: js, branch: trunk, size: 16720) [annotate] [blame] [check-ins using] [diff]
2018-07-28
16:48
[021ca59238] part of check-in [a2a06d372a] macros.h: Add of_random()

This does *NOT* provide cryptographically secure randomness! (check-in: [a2a06d372a] user: js, branch: trunk, size: 16714) [annotate] [blame] [check-ins using] [diff]

2018-06-03
23:31
[bcee3b5d39] part of check-in [aacb5897a0] Add -[OFObject allocZeroedMemoryWithSize:(count:)] (check-in: [aacb5897a0] user: js, branch: trunk, size: 16960) [annotate] [blame] [check-ins using] [diff]
2018-01-03
19:49
[bdc38c2ac6] part of check-in [7e5c81e186] Update copyright notice (check-in: [7e5c81e186] user: js, branch: trunk, size: 17056) [annotate] [blame] [check-ins using] [diff]
2017-11-11
23:27
[1089d5714e] part of check-in [526feacebc] Small optimization for -[isEqual:] (check-in: [526feacebc] user: js, branch: trunk, size: 17033) [annotate] [blame] [check-ins using] [diff]
2017-10-17
00:33
[18b269539e] part of check-in [2f4e0df8be] Do not use implicit method return types

Instead, explicitly declare them, as OF_ASSUME_NONNULL_{BEGIN,END} does
not apply to implicit return types. This means that after this commit,
all init methods have a nonnull return type, as they should have. (check-in: [2f4e0df8be] user: js, branch: trunk, size: 16996) [annotate] [blame] [check-ins using] [diff]

2017-10-11
20:59
[1517e60617] part of check-in [836314f39a] Fix shadowed variables and enable -Wshadow (check-in: [836314f39a] user: js, branch: 0.90, size: 16849) [annotate] [blame] [check-ins using] [diff]
20:53
[2c59c12f0d] part of check-in [00476e4430] Fix shadowed variables and enable -Wshadow (check-in: [00476e4430] user: js, branch: trunk, size: 16922) [annotate] [blame] [check-ins using] [diff]
2017-09-28
23:02
[73724a7b07] part of check-in [2de9660312] Enable -Wnullable-to-nonnull-conversion and adjust (check-in: [2de9660312] user: js, branch: trunk, size: 16914) [annotate] [blame] [check-ins using] [diff]
2017-05-21
21:28
[9a08c57256] part of check-in [6b77a5dd8b] Prefix private methods with of_ instead of OF_

This matches Apple's style. (check-in: [6b77a5dd8b] user: js, branch: trunk, size: 16841) [annotate] [blame] [check-ins using] [diff]

2017-05-08
21:37
[654a4184b9] part of check-in [469a496cd2] Add OF_DESIGNATED_INITIALIZER & OF_METHOD_FAMILY (check-in: [469a496cd2] user: js, branch: trunk, size: 16841) [annotate] [blame] [check-ins using] [diff]
2017-05-07
20:10
[0faf59214b] part of check-in [4af49a13c3] Small code style change

Casts are now written like types in variable declarations. (check-in: [4af49a13c3] user: js, branch: trunk, size: 16814) [annotate] [blame] [check-ins using] [diff]

2017-01-09
17:36
[69937f5d0f] part of check-in [44f45c2e35] Update copyright

Forgot to add 2017, even though I already did quite some changes in
2017. (check-in: [44f45c2e35] user: js, branch: trunk, size: 16788) [annotate] [blame] [check-ins using] [diff]

2016-06-04
18:49
[f6af531a58] part of check-in [1ba9c051a6] OFMapTable: Rename valueForKey to objectForKey

The reason for this is that -[valueForKey:] could be confused with
Key Value Coding. (check-in: [1ba9c051a6] user: js, branch: trunk, size: 16782) [annotate] [blame] [check-ins using] [diff]

2016-02-21
15:37
[d08b0754f8] part of check-in [e0b9167693] Make use of C99-style for loops (check-in: [e0b9167693] user: js, branch: trunk, size: 16668) [annotate] [blame] [check-ins using] [diff]
2016-01-03
00:43
[32a1b1967d] part of check-in [cec0f072f8] Update copyright

While at it, also update the mail address. (check-in: [cec0f072f8] user: js, branch: 0.8, size: 16797) [annotate] [blame] [check-ins using] [diff]

00:41
[0f58c455bb] part of check-in [2a27cf3000] Update copyright

While at it, also update the mail address. (check-in: [2a27cf3000] user: js, branch: trunk, size: 16694) [annotate] [blame] [check-ins using] [diff]

2015-11-29
14:23
[a593ea3dae] part of check-in [2aca549d60] Clean up class extensions

Now that we can require GCC >= 4.6, we no longer need to fall back to
using a category on old compilers. (check-in: [2aca549d60] user: js, branch: trunk, size: 16690) [annotate] [blame] [check-ins using] [diff]

11:43
[1fa0a57947] part of check-in [48980f2297] Make properties a requirement and clean up code

This increases the required GCC version from 4.0 to 4.6 (exception:
Apple GCC, which already supports this with >= 4.0 starting with OS X
10.5). Since even GCC 4.6 is really old by now, there is no point in
still supporting something even older and making the code ugly because
of that. While some hardware and OS support was dropped from GCC 4.6
compared to GCC 4.0, there is nothing in there that would be an
interesting target with the exception of BeOS maybe - but a port to BeOS
can also be achieved using the Haiku support. The other dropped OSes are
mostly old versions of OSes while newer ones are still being supported
(and those newer versions of those OSes still support the same
hardware). (check-in: [48980f2297] user: js, branch: trunk, size: 16728) [annotate] [blame] [check-ins using] [diff]

2015-06-28
16:16
[ccd71cdedf] part of check-in [1b1db13483] Extremely minor API inconsistency fix (check-in: [1b1db13483] user: js, branch: trunk, size: 16793) [annotate] [blame] [check-ins using] [diff]
2015-04-11
12:56
[101f595560] part of check-in [dc43cd0d1b] OFMapTable.m: Fix a missing include (check-in: [dc43cd0d1b] user: js, branch: trunk, size: 16797) [annotate] [blame] [check-ins using] [diff]
2015-01-03
20:57
[b0de075c30] part of check-in [cfd374b906] Update copyright (check-in: [cfd374b906] user: js, branch: trunk, size: 16777) [annotate] [blame] [check-ins using] [diff]
2014-06-21
21:43
[bf79826698] part of check-in [13ee56edf3] Move all macros from OFObject.h to macros.h

This means that OFObject.h imports macros.h now, making it unnecessary
to manually import macros.h in almost every file. And while at it, also
import autorelease.h in OFObject.h, so that this doesn't need to be
manually imported in almost every file as well. (check-in: [13ee56edf3] user: js, branch: trunk, size: 16771) [annotate] [blame] [check-ins using] [diff]

2014-05-15
04:06
[05916c8969] part of check-in [f178d11592] Remove usage of empty initializer extension (check-in: [f178d11592] user: js, branch: trunk, size: 16791) [annotate] [blame] [check-ins using] [diff]
01:50
[3156715ede] part of check-in [17be12b6e5] Don't define _*_SOURCE

Instead, just define _GNU_SOURCE when __GLIBC__ is defined. After all,
that's the only libc that doesn't work properly without any defines. (check-in: [17be12b6e5] user: js, branch: trunk, size: 16788) [annotate] [blame] [check-ins using] [diff]

2014-04-06
14:40
[8840bb8cc2] part of check-in [c2d9134d88] runtime/hashtable.m: Add support for deletion (check-in: [c2d9134d88] user: js, branch: trunk, size: 16809) [annotate] [blame] [check-ins using] [diff]
2014-02-13
23:26
[dffae0d500] part of check-in [2f5af58573] Use -std=c11 instead of -std=gnu11

Not using -std=gnu11 means _GNU_SOURCE does not get defined anymore,
therefore this commit also adds the required feature defines for glibc.

Additionally, this adds of_strdup in macros.h, as strdup is an
extension. (check-in: [2f5af58573] user: js, branch: trunk, size: 16742) [annotate] [blame] [check-ins using] [diff]

2014-01-04
00:24
[9d63848c2d] part of check-in [3b97fc3cd9] Update copyright. (check-in: [3b97fc3cd9] user: js, branch: trunk, size: 16721) [annotate] [blame] [check-ins using] [diff]
2013-12-05
17:48
[8882363f15] part of check-in [fa6496efc7] Make coding style consistent.

A file documenting the coding style will be written soon. This will
hopefully prevent conflicts in the future, such as whether static
functions are written in camelCase or_with_underscores, like was the
case here. (check-in: [fa6496efc7] user: js, branch: trunk, size: 16715) [annotate] [blame] [check-ins using] [diff]

2013-12-01
12:12
[7ccafaf30f] part of check-in [d7b691c402] Make OFMapTableEnumeratorWrapper private. (check-in: [d7b691c402] user: js, branch: trunk, size: 16727) [annotate] [blame] [check-ins using] [diff]
11:51
[484e7b21c8] part of check-in [6085d4f6a4] OFMapTable: More overflow checks. (check-in: [6085d4f6a4] user: js, branch: trunk, size: 16695) [annotate] [blame] [check-ins using] [diff]
2013-11-23
01:27
[74b5d78ed2] part of check-in [6e19bd47ee] Add OF_UNRECOGNIZED_SELECTOR. (check-in: [6e19bd47ee] user: js, branch: trunk, size: 16595) [annotate] [blame] [check-ins using] [diff]
01:12
[3c5a2f693b] part of check-in [35dafd5c57] Add OF_INVALID_INIT_METHOD. (check-in: [35dafd5c57] user: js, branch: trunk, size: 16639) [annotate] [blame] [check-ins using] [diff]
2013-10-29
09:37
[08236d7fb2] part of check-in [52efbc4b8f] Add a missing (instancetype). (check-in: [52efbc4b8f] user: js, branch: trunk, size: 16815) [annotate] [blame] [check-ins using] [diff]
2013-08-15
19:00
[1f413086d9] part of check-in [1d7a1cbca0] Move private methods into private headers. (check-in: [1d7a1cbca0] user: js, branch: trunk, size: 16801) [annotate] [blame] [check-ins using] [diff]
2013-08-13
10:39
[162f4f232a] part of check-in [73ae6fa60f] Add a few more instancetypes. (check-in: [73ae6fa60f] user: js, branch: trunk, size: 16415) [annotate] [blame] [check-ins using] [diff]
2013-08-10
23:12
[360a62d844] part of check-in [aae02e7970] Add -[OFMutableDictionary removeAllObjects]. (check-in: [aae02e7970] user: js, branch: trunk, size: 16401) [annotate] [blame] [check-ins using] [diff]
2013-06-22
12:12
[40dcf1c644] part of check-in [3d16a30f41] Rework exceptions.

This mostly removes the argument for the class in which the exception
occurred. As backtraces were recently added for all platforms, the
passed class does not give any extra information on where the exception
occurred anymore.

This also removes a few other arguments which were not too helpful. In
the past, the idea was to pass as many arguments as possible so that it
is easier to find the origin of the exception. However, as backtraces
are a much better way to find the origin, those are not useful anymore
and just make the exception more cumbersome to use. The rule is now to
only pass arguments that might help in recovering from the exception or
provide information that is otherwise not easily accessible. (check-in: [3d16a30f41] user: js, branch: trunk, size: 15634) [annotate] [blame] [check-ins using] [diff]

2013-05-04
10:05
[e861c4b211] part of check-in [8a194de51c] OFMapTable: Minor corrections. (check-in: [8a194de51c] user: js, branch: trunk, size: 16124) [annotate] [blame] [check-ins using] [diff]
2013-03-30
20:07
[9fc4f60d3b] part of check-in [57a6e8ef79] Improve code readability. (check-in: [57a6e8ef79] user: js, branch: trunk, size: 16120) [annotate] [blame] [check-ins using] [diff]
2013-03-08
22:44
[7caa69a7b0] part of check-in [e8473b9db8] Document the block types.

This also removes "bool *stop" from some blocks where it does not make
sense. (check-in: [e8473b9db8] user: js, branch: trunk, size: 16124) [annotate] [blame] [check-ins using] [diff]

2013-03-04
17:20
[f2d7d60333] part of check-in [c5ef582958] Replace BOOL with bool.

The only places where BOOL is left are those where they are required by
the ABI. (check-in: [c5ef582958] user: js, branch: trunk, size: 16136) [annotate] [blame] [check-ins using] [diff]

2013-02-18
11:07
[1f61a324ed] part of check-in [4fb0f4bf66] Add -[OFMutableDictionary initWithCapacity:].

This was already implemented in OFDictionary_hashtable for internal
usage and is now publicly available. (check-in: [4fb0f4bf66] user: js, branch: trunk, size: 16106) [annotate] [blame] [check-ins using] [diff]

2013-02-12
18:22
[212223cd50] part of check-in [e40729d406] Prefix all ivars with an underscore. (check-in: [e40729d406] user: js, branch: trunk, size: 16041) [annotate] [blame] [check-ins using] [diff]
2013-02-05
22:24
[01662f5402] part of check-in [737a82e1a4] Move abort() to make old GCCs happy. (check-in: [737a82e1a4] user: js, branch: trunk, size: 15886) [annotate] [blame] [check-ins using] [diff]
2013-01-12
20:53
[299f6d68b0] part of check-in [b8ce2359f3] Clean up the feature #ifdef mess. (check-in: [b8ce2359f3] user: js, branch: trunk, size: 15886) [annotate] [blame] [check-ins using] [diff]
2013-01-09
22:24
[996b96d265] part of check-in [813c00ccf0] Update copyright. (check-in: [813c00ccf0] user: js, branch: trunk, size: 15892) [annotate] [blame] [check-ins using] [diff]
2013-01-03
22:26
[3a2a927b76] part of check-in [7cebeaa808] OFMapTable: Rotate hashes randomly.

This makes the map table use the full range of the hash and not only the
least significant bits, making it harder for an attacker to find
collisions. (check-in: [7cebeaa808] user: js, branch: trunk, size: 15886) [annotate] [blame] [check-ins using] [diff]

2012-12-22
15:37
[1a1f8d234d] part of check-in [917ce5754c] Add -[doesNotRecognizeSelector:]. (check-in: [917ce5754c] user: js, branch: trunk, size: 15595) [annotate] [blame] [check-ins using] [diff]
2012-12-07
13:57
[458807374d] part of check-in [6712442fad] Revert several OFHashMap related commits.

This reverts:
* "Add a per-hashtable seed."
(cd49c7fcb4b8dca62dccdbf6545d37d86b639eef)
* "OFMapTable: Reseed on resize."
(5b545165691cd9ad838c9125b02ff7c857bd4b99)
* "Add of_random()."
(9810f191b4e8c1612e7e55095c87e589660fbdba)
* "OFMapTable: Rotate hash by a random number of bits"
(3bef412217232d01f202794f7175c130afa1df8f)

It turned out that these were slowing down all classes based on
OFHashMap significantly. As there is still no proof that the seeded
one-at-a-time hash is vulnerable to DoS, these changes were overly
paranoid. While overly paranoid is usually ok, it is not if it severely
impacts performance. (check-in: [6712442fad] user: js, branch: trunk, size: 15686) [annotate] [blame] [check-ins using] [diff]

2012-12-06
11:00
[fda4d04529] part of check-in [4857107479] OFMapTable: Rotate hash by a random number of bits

By rotating the hash by a random number of bits, an attacker needs to
find collisions on the full 32 bits of the hash and not only on the
lower n bits that are actually used by the map table, as an attacker
can't know which bits are actually used for the map table. (check-in: [4857107479] user: js, branch: trunk, size: 16362) [annotate] [blame] [check-ins using] [diff]

11:00
[ecdbc341ea] part of check-in [f675979cf0] Add of_random(). (check-in: [f675979cf0] user: js, branch: trunk, size: 16069) [annotate] [blame] [check-ins using] [diff]
2012-12-05
21:28
[06127d91bb] part of check-in [f7018aedf9] OFMapTable: Reseed on resize. (check-in: [f7018aedf9] user: js, branch: trunk, size: 16307) [annotate] [blame] [check-ins using] [diff]
2012-12-04
09:59
[fac29d9273] part of check-in [590fa6ed79] Add a per-hashtable seed.

This should make it impossible to retrieve of_hash_seed by inserting
keys into a hashtable and then retrieving the hashtable. Without this
change, the order could be used to make guesses about of_hash_seed,
which could be a problem for long running processes. (check-in: [590fa6ed79] user: js, branch: trunk, size: 16029) [annotate] [blame] [check-ins using] [diff]

2012-12-01
17:50
[c18a26ad1f] part of check-in [ed438b979d] OFSet_hashtable: Store in OFMapTable. (check-in: [ed438b979d] user: js, branch: trunk, size: 15781) [annotate] [blame] [check-ins using] [diff]
17:26
Added: [e82f78e00b] part of check-in [6f081c14f9] Add OFMapTable. (check-in: [6f081c14f9] user: js, branch: trunk, size: 15016) [annotate] [blame] [check-ins using]