diff options
Diffstat (limited to 'crypto/property/README.md')
-rw-r--r-- | crypto/property/README.md | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/crypto/property/README.md b/crypto/property/README.md index b3f56cfa2f..9d97a69873 100644 --- a/crypto/property/README.md +++ b/crypto/property/README.md @@ -1,4 +1,8 @@ -Properties are associated with algorithms and are used to select between different implementations dynamically. +Selecting algorithm implementations by properties +================================================= + +Properties are associated with algorithms and are used to select between +different implementations dynamically. This implementation is based on a number of assumptions: @@ -23,7 +27,6 @@ This implementation is based on a number of assumptions: * Property queries can never add new property definitions. - Some consequences of these assumptions are: * That definition is uncommon and queries are very common, we can treat @@ -52,14 +55,15 @@ Some consequences of these assumptions are: properties are changed as doing so removes the need to index on both the global and requested property strings. - The implementation: -* property_lock.c contains some wrapper functions to handle the global +* [property_lock.c](property_lock.c) + contains some wrapper functions to handle the global lock more easily. The global lock is held for short periods of time with per algorithm locking being used for longer intervals. -* property_string.c contains the string cache which converts property +* [property_string.c](property_string.c) + contains the string cache which converts property names and values to small integer indices. Names and values are stored in separate hash tables. The two Boolean values, the strings "yes" and "no", are populated as the first two members of the value table. All property @@ -67,13 +71,15 @@ The implementation: provided to convert from an index back to the original string (this can be done by maintaining parallel stacks of strings if required). -* property_parse.c contains the property definition and query parsers. +* [property_parse.c](property_parse.c) + contains the property definition and query parsers. These convert ASCII strings into lists of properties. The resulting lists are sorted by the name index. Some additional utility functions for dealing with property lists are also included: comparison of a query against a definition and merging two queries into a single larger query. -* property.c contains the main APIs for defining and using properties. +* [property.c](property.c) + contains the main APIs for defining and using properties. Algorithms are discovered from their NID and a query string. The results are cached. @@ -82,6 +88,7 @@ The implementation: without bounds and must garbage collect under-used entries. The garbage collection does not have to be exact. -* defn_cache.c contains a cache that maps property definition strings to +* [defn_cache.c](defn_cache.c) + contains a cache that maps property definition strings to parsed properties. It is used by property.c to improve performance when the same definition appears multiple times. |