#string #astral #game

astral-string

Astral Engine(WIP)的字符串库

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

Apache-2.0

105KB
2K SLoC

用于存储字符串的结构。

此模块包含 string::Subsystem,它管理 StringId。由于 StringId 是一个简单的POD,因此提供了两个包装器: TextName。虽然两者都可以存储字符串,但 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);

TextName 可以从字面字符串创建

   # 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