diff --git a/README.md b/README.md index c6604dd..c5281e3 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,63 @@ -[![Build Status](https://travis-ci.org/Robbepop/string-interner.svg?branch=master)](https://travis-ci.org/Robbepop/string-interner) -[![Build Status](https://ci.appveyor.com/api/projects/status/skcw9aylqqng1df0?svg=true)](https://ci.appveyor.com/project/Robbepop/string-interner/branch/master) -[![Coverage Status](https://coveralls.io/repos/github/Robbepop/string-interner/badge.svg?branch=master)](https://coveralls.io/github/Robbepop/string-interner?branch=master) -[![Crates.io Version](https://img.shields.io/crates/v/string-interner.svg)](https://crates.io/crates/string-interner) -[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE) +# String Interner -String-Interner -=============== +| Linux | Windows | Coverage | Docs | Crates.io | Licence | +|:-------------------:|:-------------------:|:--------------------:|:---------------------:|:------------------:|:------------------:| +| [![travisCI][1]][2] | [![appveyor][3]][4] | [![coveralls][5]][6] | [![licence][11]][12 ] | [![chat][9]][10] | [![licence][7]][8] | -A string interning data structure that was designed for minimal memory-overhead -and fast access to the underlying interned string contents. +A string interning data structure that was designed for minimal memory overhead, +fast access to the underlying interned strings and cache-efficient iteration through its contents. -It uses a similar API as the string interner of the Rust compiler. +This implementation uses a similar API as the string interner of the Rust compiler. -Take a look into the [documentation](https://docs.rs/string-interner) to get to know how to use it! +### What is a string interner? -Link to [crates.io](https://crates.io/crates/string-interner). +String internment is an efficient bi-directional mapping between strings and very cheap identifiers (symbols) +that are used as representant for a certain string instead of the string itself. + +### Internals + +Internally a hashmap and a vector is used. The vector stored the true contents of interned strings +while the hashmap has internal references into the internal vector to avoid duplicates. + +### Planned Features + +- Safe abstraction wrapper that protects the user from the following misusage + + - Using symbols of a different string interner instance to resolve string in another + - Using symbols that are already no longer valid (i.e. the associated string interner is no longer available) + +- Even more flexibility for input into the string interner + +## Changelog + +- 0.6.0 + + - added optional serde serialization and deserialization support + - more efficient and generic `PartialEq` implementation for `StringInterner` + - made `StringInterner` generic over `BuildHasher` to allow for custom hashers + +- 0.5.0 + + - added `IntoIterator` trait implementation for `StringInterner` + - greatly simplified iterator code + +- 0.4.0 + + - removed restrictive constraint for `Unsigned` for `Symbol` + +- 0.3.3 + + - added `Send` and `Sync` to `InternalStrRef` to make `StringInterner` itself `Send` and `Sync` + +[1]: https://travis-ci.org/Robbepop/string-interner.svg?branch=master +[2]: https://travis-ci.org/Robbepop/string-interner +[3]: https://ci.appveyor.com/api/projects/status/16fc9l6rtroo4xqd?svg=true +[4]: https://ci.appveyor.com/project/Robbepop/string-interner/branch/master +[5]: https://coveralls.io/repos/github/Robbepop/string-interner/badge.svg?branch=master +[6]: https://coveralls.io/github/Robbepop/string-interner?branch=master +[7]: https://img.shields.io/badge/license-MIT-blue.svg +[8]: ./LICENCE +[9]: https://img.shields.io/crates/v/string-interner.svg +[10]: https://crates.io/crates/string-interner +[11]: https://docs.rs/string-interner/badge.svg +[12]: https://docs.rs/string-interner