5个版本
0.0.5 | 2018年12月31日 |
---|---|
0.0.4 | 2018年12月29日 |
0.0.3 | 2018年12月29日 |
0.0.2 | 2018年12月29日 |
0.0.1 | 2018年12月29日 |
#1910 in 游戏开发
40 每月下载量
在 5 个工具箱中使用(通过 astral-engine)
105KB
2K SLoC
用于存储字符串的结构。
此模块包含 string::Subsystem
,它管理 StringId
。由于 StringId
是一个简单的POD,因此提供了两个包装器: Text
和 Name
。虽然两者都可以存储字符串,但 Name
优化了具有数字后缀的字符串,因为 Text
实现了 Deref
<Target=
str
>
,这不是 Name
的情况,因为进行了优化。
示例
可以从父 Logger
创建字符串 Subsystem
use astral::string;
# let logger = slog::Logger::root(slog::Discard, slog::o!());
let string_subsystem = string::Subsystem::new(64, &logger);
您可以使用 Subsystem
创建 StringId
# let logger = slog::Logger::root(slog::Discard, slog::o!());
# let string_subsystem = astral::string::Subsystem::new(64, &logger);
use astral::string::StringId;
let id1 = StringId::new("foo", &string_subsystem);
let id2 = StringId::new("bar", &string_subsystem);
let id3 = StringId::new("foo", &string_subsystem);
assert_ne!(id1, id2);
assert_eq!(id1, id3);
Text
或 Name
可以从字面字符串创建
# let logger = slog::Logger::root(slog::Discard, slog::o!());
# let string_subsystem = astral::string::Subsystem::new(64, &logger);
use astral::string::Text;
let text = Text::new("foo", &string_subsystem);
assert_eq!(text, "foo");
Text
可以转换为 &str
# let logger = slog::Logger::root(slog::Discard, slog::o!());
# let string_subsystem = astral::string::Subsystem::new(64, &logger);
let text = Text::new("foo", &string_subsystem);
let s: &str = text.as_str();
assert_eq!("foo", s)
如果您有一个有效的UTF-8字节切片,您可以从它创建一个 Text
或一个 Name
# let logger = slog::Logger::root(slog::Discard, slog::o!());
# let string_subsystem = astral::string::Subsystem::new(64, &logger);
let sparkle_heart = &[240, 159, 146, 150];
// We know these bytes are valid, so we'll use `unwrap()`.
let sparkle_heart = Text::from_utf8(sparkle_heart, &string_subsystem).unwrap();
assert_eq!("💖", sparkle_heart);
let bytes = sparkle_heart.as_bytes();
assert_eq!(bytes, [240, 159, 146, 150]);
依赖关系
~2–10MB
~97K SLoC