是否可以让Ragel在NSMutableString上工作?
我想使用Ragel生成DFA来标记NSMutableString。 “可变”部分意味着每当单个字符发生变化时我就无法使用cStringUsingEncoding:
。据我所知,有两个问题:
Ragel附带的示例似乎使用char *
来获取角色,即使在Objective C中也是如此。但我不知道如何获得指向不断变化的NSMutableString的指针。是否有可能迫使Ragel使用characterAtIndex:
代替?这不会很慢吗?
如果我理解正确,NSString可能会在运行时更改其内部表示,即它不总是UTF-16。例如,当它仅包含ASCII时,它使用单字节编码。但是只要在有效范围之外出现字符,它就会切换到多字节编码。是否有可能在Ragel中解释这个问题?
答案 0 :(得分:0)
在我的头顶,我直接使用CFStringRef
,因为它有CFStringCreateMutableWithExternalCharactersNoCopy,它允许你声明自己的缓冲区并明确禁用你正在谈论的优化。< / p>
此外,如果您正确设置了externalCharactersAllocator
,您甚至可以从免费桥接中受益(尽管可能不起作用),因此对于任何变异都不会太乱字符串。