tango.text.convert.Utf 翻译

本文介绍了一个高效的Unicode编码转换器,特别针对32位x86设备进行了优化。文章详细描述了不同Unicode编码间的转换方法,如UTF8到UTF16等,并提供了多种转换函数的具体使用说明。

tango.text.convert.Utf(r4809)

License:

BSD style: see license.txt

Version:

Initial release: Oct 2004

Authors:

Kris

快速的Unicode代码转换器。这些对于32x86设备的微小变化尤其敏感,因为这些设备上的寄存器级是非常小。当心细微的变化可能会延伸到执行周期的200%多。正因为如此,六种代码转换器中的三种在阻止前会读取超过输入末端一、二或三个字节。注意,为流支持添加上15%的对dchar => char转换的开销,但对其它的没有什么影响。

这些例程已对Intel P4进行调谐;别的设备用一个稍有不同的途径工作得更有效率,不过这可以像对 AMD x86 CPUs也进行适当的优化。这些算法可以从AMD64的额外寄存器得到较大的获益。对于3GHz P4dchar/char转换处理1000ASCII 元素的数组花费大约2500ns。调用内存管理器使周期加倍,对100个元素的数组时间成四倍。内存分配在多线程环境会显著地减缓,因此要尽可能地避免。

utf16 utf8间转码时代用对用一个非优化的样式进行处理。这样的情况被认为是这个模块的边界条件。

有三种常见情况下输入可以不完整,包括utf8 => utf16, utf8 => utf32, and utf16 => utf32的每个'widening'(加宽)情况。一个边缘(edge-case)情况是utf16 => utf8,如果代理对存在。这样的情况会抛出一个异常,除非流模式被激活--在后一种模式,一个附加的整数被返回用于指明输入已经消耗了多少个元素。在所有情况下,一个正确的输出的切片被返回。

对于Unicode处理的细节见:

http://www.utf-8.com/

http://www.hackcraft.net/xmlUnicode/

http://www.azillionmonkeys.com/qed/unicode.html/

http://icu.sourceforge.net/docs/papers/forms_of_unicode/

char[] toString(wchar[] input, char[] output = null, uint* ate = null) #
Utf8 码到最大 4字节长(五或六字节的变体不支持)。
如果输出用空闲堆栈提供,它应该足够大以完成整个转码;这要做失败会引起输出被移动到堆上来代替。
返回输出缓冲区与转换后的字符相对应的一个切片,为了优化性能,返回缓冲区应该为随后的调用被指定为 'output' (输出)。例如:
1
2
3
4
5
6
7
char[] output;

char[] result = toString (input, output);

// reset output after a realloc
if (result.length > output.length)
    output = result;
wchar[] toString16(char[] input, wchar[] output = null, uint* ate = null) #
译由上面的 toString() 方法产生 Utf8码。
如果输出被空闲的堆栈提供,它会大得足以完成整个转码;这样做失败会导致输出被移动到堆上代替。

返回输出缓冲区的一个切片,与已转换的字符相对应。为了最佳性能,返回的缓冲区将会指定为在后来的调用上的'output'

char[] toString(dchar[] input, char[] output = null, uint* ate = null) #
Utf8码为最多为 4字节长(五和六字节的变体是不支持的)。输入的 dchar大于 0x10ffff抛出一个异常。
如果输出用空闲的堆栈提供,它是大得足以完成整个转码;这样做失败会导致输出移动到堆上来代替。

返回输出缓冲区的一个切片,与已转换的字符相对应。为了取得最大性能,返回缓冲区将对随后的调用指定为'output'(输出)。

dchar[] toString32(char[] input, dchar[] output = null, uint* ate = null) #
译通过上面的 toString()方法产生的 Utf8码。
如果输出用空闲的堆栈提供,它是大得足以完成整个转码;这样做失败会导致输出移动到堆上来代替。

返回输出缓冲区的一个切片,与已转换的字符相对应。为了取得最大性能,返回缓冲区将对随后的调用指定为'output'(输出)。

wchar[] toString16(dchar[] input, wchar[] output = null, uint* ate = null) #
Utf16码最大为 2 字节长。输入的 dchar 大于 0x10ffff 会抛出一个异常。
如果输出用空闲的堆栈提供,它是大得足以完成整个转码;这样做失败会导致输出移动到堆上来代替。

返回输出缓冲区的一个切片,与已转换的字符相对应。为了取得最大性能,返回缓冲区将对随后的调用指定为'output'(输出)。

dchar[] toString32(wchar[] input, dchar[] output = null, uint* ate = null) #
译通过上面 toString16() 方法产生的 Utf16码。
如果输出用空闲的堆栈提供,它是大得足以完成整个转码;这样做失败会导致输出移动到堆上来代替。

返回输出缓冲区的一个切片,与已转换的字符相对应。为了取得最大性能,返回缓冲区将对随后的调用指定为'output'(输出)。

dchar decode(char[] src, inout uint ate) #
从给定的 src文本解一个简单的 dchar码,并指出从 src中这样做后消耗了多少字符。
dchar decode(wchar[] src, inout uint ate) #
从给定的 src文本解一个简单的 dchar码,并指出从 src中这样做后消耗了多少字符。
char[] encode(char[] dst, dchar c) #
编一个 dchar码到提供的 dst数组,并返回一个它表示该编码的切片。
wchar[] encode(wchar[] dst, dchar c) #
编一个 dchar码到提供的 dst数组,并返回一个它表示该编码的切片。
bool isValid(dchar c) #
判断给定字符是否有效?
T[] fromString8(T)(char[] s, T[] dst) #
从一个 char[]转换到 dst提供的类型。
返回给定 dst的一个切片,它必须足够大以容纳结果,否则在堆上分配数组。没有转换要求的地方返回原输入。
T[] fromString16(T)(wchar[] s, T[] dst) #
从一个 wchar[]转换到 dst提供的类型。
返回给定 dst的一个切片,它必须足够大以容纳结果,否则在堆上分配数组。没有转换要求的地方返回原输入。
T[] fromString32(T)(dchar[] s, T[] dst) #
从一个 dchar[]转换到 dst提供的类型。
返回给定 dst的一个切片,它必须足够大以容纳结果,否则在堆上分配数组。没有转换要求的地方返回原输入。
T[] cropLeft(T)(T[] s) #
调整内容,以使提供的文字的左边没有部分编码存在。
返回输入的一个切片。
T[] cropRight(T)(T[] s) #
调整内容,以使提供的文字的右边没有部分编码存在。
返回输入的一个切片。
`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 ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值