tango.text.Search 翻译

本文介绍了一种模式匹配器,分为轻量级FindFruct和次中量级SearchFruct两种。FindFruct适用于短模式和内容,采用粗略近似算法;SearchFruct则适用于较长模式和内容,基于QS算法,更适合复杂场景。两者都提供了丰富的功能,如正向和反向搜索、匹配计数等。

tango.text.Search

License:

BSD style: see license.txt

Version:

May 2009: Initial release

since:

0.99.9

Author:

Kris

FindFruct!(T) find(T)(T[] what) #
返回一个轻量级的模式匹配器 ,有利于短模式和 /或短到中等长度的内容。粗略近似( Brute-force)快速多字节比较方法。
SearchFruct!(T) search(T)(T[] what) #
 返回一个次中量级( welterweight)模式匹配器,有利于升的模式和 /或较宽泛的内容。基于 QS算法 ,该算法是一种 Boyer-Moore变种。不为字母分配内存。
  通常比匹配长度变得更快。
struct FindFruct(T) #
轻理级 find实用的方便包装,没有 IFTI问题的困扰。创建他们中的一个用 find()

函数:

1
2
3
4
5
6
7
8
9
auto match = find ("foo");
auto content = "wumpus foo bar"

// search in the forward direction
auto index = match.forward (content);
assert (index is 7);

// search again - returns length when no match found
assert (match.forward(content, index+1) is content.length);

搜索操作包括向前和向后,和一个任选的开始偏移量(可能比切割内容更方便)。有些方法替换给定内容的匹配,和别的返回穿越内容的foreach()迭代器。

SearchFruct是一个更精细(sophisticated)的变体,在对更长和/或更广泛的内容的操作更有效。

size_t forward(T[] content, size_t ofs = 0) #
向前搜索给定内容,从任选的索引开始。
返回匹配的索引,如果没有找到匹配则返回 content.length
size_t reverse(T[] content, size_t ofs = size_t.max) #
向后搜索给定内容,从任选的索引开始。
返回匹配的索引,如果没有找到匹配则返回 content.length
T[] match() #
返回匹配文字。
void match(T[] what) #
重新设置要匹配的文字。
bool within(T[] content) #
如果在给定内容中存在匹配就返回 true
size_t count(T[] content) #
返回给定内容中匹配的数量。
T[] replace(T[] content, T chr) #
用给定字符替换所有匹配。要避免堆活动使用方法 tokens()
返回一个替换后的内容的副本。
T[] replace(T[] content, T[] sub = null) #
用给定子串替换所有匹配。要避免堆活动使用方法 tokens()
返回一个替换后的内容的副本。
Util.PatternFruct!(T) tokens(T[] content, T[] sub = null) #
返回一个 foreach()迭代器,揭示所有给定内容中匹配的文字片段。替换文字( Substitution text)也注入每个匹配的地方, null用于指明要移除代替:
1
2
3
4
5
6
char[] result;

auto match = find ("foo");
foreach (token; match.tokens ("$foo&&foo*", "bar"))
         result ~= token;
assert (result == "$bar&&bar*");
该机制避免内部堆活动。
Indices indices(T[] content) #
返回一个 foreach()迭代器揭示给定内容中所有匹配的索引( Indices):
1
2
3
4
5
6
int count;

auto f = find ("foo");
foreach (index; f.indices("$foo&&foo*"))
         ++count;
assert (count is 2);
struct Indices [private] #
简单的 foreach() 迭代器。
struct SearchFruct(T) #
次中量级 search应用的方便包装,没有 IFTI问题的困扰。创建它们的一个用 search()

函数:

1
2
3
4
5
6
7
8
9
auto match = search ("foo");
auto content = "wumpus foo bar"

// search in the forward direction
auto index = match.forward (content);
assert (index is 7);

// search again - returns length when no match found
assert (match.forward(content, index+1) is content.length);

搜索操作包括向前和向后,和一个任选的开始偏移量(可能比切割内容更方便)。有些方法替换给定内容的匹配,和别的返回穿越内容的foreach()迭代器。

FindFruct是一个更简单的变体,它可对短匹配和/或短内容更有效地操作(使用粗略相似策略brute-force )。

SearchFruct opCall(T[] what) [static] #
构造 fruct
T[] match() #
返回匹配文字。
void match(T[] what) #
重设文字以匹配。
size_t forward(T[] content, size_t ofs = 0) #
向前搜索给定内容,从任选的索引开始。
返回匹配地方的索引,没有找到匹配则返回 content.length
size_t reverse(T[] content, size_t ofs = size_t.max) #
向后搜索给定内容,从任选的索引开始。
返回匹配地方的索引,没有找到匹配则返回 content.length
bool within(T[] content) #
如果在给定内容中存在匹配就返回 true
size_t count(T[] content) #
返回给定内容中匹配的数目。
T[] replace(T[] content, T chr) #
用给定字符替换抽有匹配的地方。要避免堆活动就用 tokens()
返回替换后内容的一个副本。
T[] replace(T[] content, T[] sub = null) #
用给定子串替换所有匹配的地方。要避免堆活动就用 tokens()
返回替换后内容的一个副本。
Substitute tokens(T[] content, T[] sub = null) #
返回一个 foreach()迭代器,揭示所有给定内容中匹配的文字片段。替换文字( Substitution text)也注入每个匹配的地方, null用于指明要移除代替:
1
2
3
4
5
6
char[] result;

auto match = search ("foo");
foreach (token; match.tokens("$foo&&foo*", "bar"))
         result ~= token;
assert (result == "$bar&&bar*");
这个机制避免内部堆活动。
Indices indices(T[] content) #

 

返回一个 foreach()迭代器揭示给定内容中所有匹配的索引( Indices):
1
2
3
4
5
6
int count;

auto match = search ("foo");
foreach (index; match.indices("$foo&&foo*"))
         ++count;
assert (count is 2);
size_t find(char* what, size_t wlen, char* content, size_t len, size_t ofs) [private] # size_t rfind(char* what, size_t wlen, char* content, size_t len, size_t ofs) [private] # bool matches(char* a, char* b, size_t length) [private, static] # void reset() [private] #
构建查询表。我们强制字母表总是成为 char[],考虑宽字符用更长模式代替。
void flip() [private] #
颠倒查询表方向。
struct Indices [private] #
简单的 foreach() 迭代器。
struct Substitute [private] #
替代 foreach()迭代器。
`tango.debug` 是一个与 **Android 的 Tango 项目** 相关的调试标志。Tango 是 Google 早期推出的一个面向 **增强现实(AR)** 和 **空间感知** 的技术平台,主要应用于具备深度感知能力的设备(如 Project Tango 手机和平板),用于实现 3D 地图构建、运动追踪、区域学习等功能。 --- ### 含义解析: - **Tango** 是 Google 早期为 AR 开发的 SDK 和硬件平台,后被 ARCore 取代。 - `tango.debug` 是一个系统属性或日志标签,用于控制 Tango 相关模块的 **调试输出级别**。 - 它可以用于启用详细的日志、可视化调试信息或性能统计,帮助开发者诊断 AR 应用在运行时的问题。 --- ### 属性作用: - 控制 Tango SDK 内部模块的 **日志输出级别**(如 VERBOSE、DEBUG、INFO 等)。 - 启用特定调试功能,例如: - 显示运动追踪的轨迹 - 显示点云数据 - 输出相机姿态信息 - 显示地图构建状态 --- ### 常见使用方式: #### 1. 设置调试级别(通过 ADB): ```bash # 启用调试日志 adb shell setprop tango.debug.level verbose # 查看当前调试级别 adb shell getprop tango.debug.level ``` #### 2. 查看调试日志: ```bash adb logcat -s Tango ``` #### 3. 启用特定调试功能(示例): ```bash # 显示点云数据 adb shell setprop tango.debug.pointcloud true # 显示运动追踪轨迹 adb shell setprop tango.debug.motiontracking true ``` --- ### 实际用途: - **调试图层空间定位异常**:如设备在 AR 场景中漂移、定位不准。 - **查看点云和地图构建过程**:适用于开发 SLAM(同步定位与地图构建)相关的应用。 - **性能分析**:通过调试输出查看帧率、CPU/GPU 使用情况等。 - **验证区域学习功能**:确保设备能够正确识别已知空间。 --- ### 注意事项: - **Tango 已被 ARCore 取代**,因此该属性仅适用于支持 Tango 的设备(如 Lenovo Phab 2 Pro)。 - 调试输出可能会影响性能,建议仅在开发阶段使用。 - 修改该属性不需要重启设备,但需要重新启动 AR 应用才能生效。 --- ### 示例日志输出: ```bash V/Tango: Motion tracking active, pose: x=0.12 y=0.03 z=0.98 D/Tango: Point cloud has 1532 points I/Tango: ADF loaded successfully: uuid=12345678-90ab-cdef-ghij ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值