/* * Copyright (c) 2008 - 2009 * Jonathan Schleifer <js@webkeks.org> * * All rights reserved. * * This file is part of libobjfw. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE included in * the packaging of this file. */ #import "config.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #define OFCONSTSTRING_M #import "OFConstString.h" #import "OFString.h" #import "OFExceptions.h" #import "OFMacros.h" #ifndef __objc_INCLUDE_GNU struct objc_class _OFConstStringClassReference; #endif @implementation OFConstString #ifndef __objc_INCLUDE_GNU + (void)load { Class cls = objc_getClass("OFConstString"); memcpy(&_OFConstStringClassReference, cls, sizeof(_OFConstStringClassReference)); objc_addClass(&_OFConstStringClassReference); } #endif - (BOOL)isKindOf: (Class)c { if (c == [OFConstString class]) return YES; return NO; } - (const char*)cString { return string; } - (size_t)length { return length; } - (BOOL)isEqual: (id)obj { if (![obj isKindOf: [OFString class]] && ![obj isKindOf: [OFConstString class]]) return NO; if (strcmp(string, [obj cString])) return NO; return YES; } - (int)compare: (id)obj { if (![obj isKindOf: [OFString class]] && ![obj isKindOf: [OFConstString class]]) @throw [OFInvalidArgumentException newWithClass: [self class]]; return strcmp(string, [obj cString]); } - (uint32_t)hash { uint32_t hash; size_t i; OF_HASH_INIT(hash); for (i = 0; i < length; i++) OF_HASH_ADD(hash, string[i]); OF_HASH_FINALIZE(hash); return hash; } - retain { return self; } - (void)release { } - (size_t)retainCount { return 1; } - autorelease { return self; } @end