gnustep-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Implementing NSString getBytes


From: Luboš Doležel
Subject: Re: Implementing NSString getBytes
Date: Sun, 09 Jun 2013 13:03:12 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130509 Thunderbird/17.0.6

That would work, but it's extremely inefficient. I'd prefer to implement it using iconv.

Lubos

On 06/09/2013 04:23 AM, Chan Maxthon wrote:
Slow to run but quick & dirty: use -[NSString substringInRange:] to cut the 
string up, convert them into NSDatas and dump from them?

发自我的 iPhone

在 2013-6-9,6:16,Luboš Doležel <address@hidden> 写道:

Unfortunately not. It would then be difficult to determine the "leftover" 
output argument's value.

Also, when converting to UTF for example, there would be a risk of cutting a UTF sequence 
in the middle if it doesn't fit into the "buffer" argument when copying it from 
NSData.

Simply put, getBytes is more advanced than other NSString's methods.

Lubos



Dne 9. června 2013 0:08:40 Chan Maxthon <address@hidden> napsal:
Can you just dump it from -[NSString dataUsingEncoding:] which is way simpler?

发自我的 iPhone

在 2013-6-9,6:06,Luboš Doležel <address@hidden> 写道:

Hi,
GNUstep's NSString currently lacks 
getBytes:maxLength:usedLength:encoding:options:range:remainingRange:
(added in OS X 10.5).
I wanted to implement this function, but GSFromUnicode()'s behavior is not the 
best fit for this method:
1) it fails if the output buffer is too small - we don't want that in this case
2) it doesn't tell you how many input characters were converted (which is 
understandable because of 1)
So I decided to use iconv() directly, which has a pitfall. I'd need to access 
static members (EntrySupported) of Unicode.m to know the iconv encoding's name 
etc. So I guess the iconv-related code (as attached) should be moved into 
Unicode.m.
===============
So I have a question: is it OK to write a function with declaration:
BOOL GSFromUnicodePartial(NSStringEncoding enc, int options, unichar **inbuf, 
size_t *inbytesleft, char **outbuf, size_t *outbytesleft);
that wouldn't suffer from 1) and 2) and add it into Source/Additions/Unicode.m 
next to GSFromUnicode()?
-- Luboš Doležel
<getBytes.patch>
_______________________________________________
Gnustep-dev mailing list
address@hidden
https://lists.gnu.org/mailman/listinfo/gnustep-dev




--
Luboš Doležel



reply via email to

[Prev in Thread] Current Thread [Next in Thread]