Implemented method [dataUsingEncoding:allowLossyConversion:]

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@7540 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Fred Kiefer 2000-09-18 23:28:53 +00:00
parent 12ab8775ea
commit a81ad0483b
2 changed files with 101 additions and 0 deletions

View file

@ -437,6 +437,66 @@ static IMP msInitImp; /* designated initialiser for mutable */
length: aRange.length];
}
- (NSData*) dataUsingEncoding: (NSStringEncoding)encoding
allowLossyConversion: (BOOL)flag
{
unsigned int len = [self length];
NSStringEncoding defEnc = [NSString defaultCStringEncoding];
if (len == 0)
{
return [NSData data];
}
if (encoding == NSUnicodeStringEncoding)
{
int t;
unichar *buff;
buff = (unichar*)NSZoneMalloc(NSDefaultMallocZone(), 2*len+2);
buff[0] = 0xFEFF;
t = encode_strtoustr(buff+1, _contents_chars, len, defEnc);
return [NSData dataWithBytesNoCopy: buff length: t+2];
}
else if ((encoding == defEnc)
||((defEnc == NSASCIIStringEncoding)
&& ((encoding == NSISOLatin1StringEncoding)
|| (encoding == NSISOLatin2StringEncoding)
|| (encoding == NSNEXTSTEPStringEncoding)
|| (encoding == NSNonLossyASCIIStringEncoding))))
{
unsigned char *buff;
buff = (unsigned char*)NSZoneMalloc(NSDefaultMallocZone(), len+1);
memcpy(buff, _contents_chars, len);
buff[len] = '\0';
return [NSData dataWithBytesNoCopy: buff length: len];
}
else
{
int t;
unichar *ubuff;
unsigned char *buff;
ubuff = (unichar*)NSZoneMalloc(NSDefaultMallocZone(), 2*len);
t = encode_strtoustr(ubuff, _contents_chars, len, defEnc);
buff = (unsigned char*)NSZoneMalloc(NSDefaultMallocZone(), t+1);
if (flag)
t = encode_ustrtostr(buff, ubuff, t, encoding);
else
t = encode_ustrtostr_strict(buff, ubuff, t, encoding);
buff[t] = '\0';
NSZoneFree(NSDefaultMallocZone(), ubuff);
if (!t)
{
NSZoneFree(NSDefaultMallocZone(), buff);
return nil;
}
return [NSData dataWithBytesNoCopy: buff length: t];
}
return nil;
}
- (NSStringEncoding) fastestEncoding
{
if (([NSString defaultCStringEncoding] == NSASCIIStringEncoding)

View file

@ -317,6 +317,47 @@
return _count;
}
- (NSData*) dataUsingEncoding: (NSStringEncoding)encoding
allowLossyConversion: (BOOL)flag
{
unsigned int len = [self length];
if (len == 0)
{
return [NSData data];
}
if (encoding == NSUnicodeStringEncoding)
{
unichar *buff;
buff = (unichar*)NSZoneMalloc(NSDefaultMallocZone(), 2*len+2);
buff[0] = 0xFEFF;
memcpy(buff+1, _contents_chars, 2*len);
return [NSData dataWithBytesNoCopy: buff length: 2*len+2];
}
else
{
int t;
unsigned char *buff;
buff = (unsigned char*)NSZoneMalloc(NSDefaultMallocZone(), len+1);
// FIXME: Here should the lossy flag be used
if (flag)
t = encode_ustrtostr(buff, _contents_chars, len, encoding);
else
t = encode_ustrtostr_strict(buff, _contents_chars, len, encoding);
buff[t] = '\0';
if (!t)
{
NSZoneFree(NSDefaultMallocZone(), buff);
return nil;
}
return [NSData dataWithBytesNoCopy: buff length: t];
}
return nil;
}
- (NSStringEncoding) fastestEncoding
{
return NSUnicodeStringEncoding;