Index: src/exceptions/Makefile ================================================================== --- src/exceptions/Makefile +++ src/exceptions/Makefile @@ -52,13 +52,14 @@ OFThreadStartFailedException.m \ OFThreadStillRunningException.m \ OFTruncatedDataException.m \ OFUnboundNamespaceException.m \ OFUnsupportedProtocolException.m \ + OFUnsupportedVersionException.m \ OFWriteFailedException.m INCLUDES = ${SRCS:.m=.h} include ../../buildsys.mk CPPFLAGS += -I. -I.. -I../.. -I../runtime LD = ${OBJC} ADDED src/exceptions/OFUnsupportedVersionException.h Index: src/exceptions/OFUnsupportedVersionException.h ================================================================== --- src/exceptions/OFUnsupportedVersionException.h +++ src/exceptions/OFUnsupportedVersionException.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2008, 2009, 2010, 2011, 2012 + * Jonathan Schleifer + * + * All rights reserved. + * + * This file is part of ObjFW. It may be distributed under the terms of the + * Q Public License 1.0, which can be found in the file LICENSE.QPL included in + * the packaging of this file. + * + * Alternatively, it may be distributed under the terms of the GNU General + * Public License, either version 2 or 3, which can be found in the file + * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this + * file. + */ + +#import "OFException.h" + +/** + * \brief An exception indicating that the specified version of the format or + * protocol is not supported. + */ +@interface OFUnsupportedVersionException: OFException +{ + OFString *version; +} + +#ifdef OF_HAVE_PROPERTIES +@property (readonly, assign) OFString *version; +#endif + +/** + * \param class_ The class of the object which caused the exception + * \param version The version which is unsupported + * \return A new unsupported version exception + */ ++ exceptionWithClass: (Class)class_ + version: (OFString*)version; + +/** + * Initializes an already allocated unsupported protocol exception + * + * \param class_ The class of the object which caused the exception + * \param version The version which is unsupported + * \return An initialized unsupported version exception + */ +- initWithClass: (Class)class_ + version: (OFString*)version; + +/** + * \return The version which is unsupported + */ +- (OFString*)version; +@end ADDED src/exceptions/OFUnsupportedVersionException.m Index: src/exceptions/OFUnsupportedVersionException.m ================================================================== --- src/exceptions/OFUnsupportedVersionException.m +++ src/exceptions/OFUnsupportedVersionException.m @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2008, 2009, 2010, 2011, 2012 + * Jonathan Schleifer + * + * All rights reserved. + * + * This file is part of ObjFW. It may be distributed under the terms of the + * Q Public License 1.0, which can be found in the file LICENSE.QPL included in + * the packaging of this file. + * + * Alternatively, it may be distributed under the terms of the GNU General + * Public License, either version 2 or 3, which can be found in the file + * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this + * file. + */ + +#include "config.h" + +#import "OFUnsupportedVersionException.h" +#import "OFString.h" + +#import "OFNotImplementedException.h" + +@implementation OFUnsupportedVersionException ++ exceptionWithClass: (Class)class_ + version: (OFString*)version +{ + return [[[self alloc] initWithClass: class_ + version: version] autorelease]; +} + +- initWithClass: (Class)class_ +{ + Class c = [self class]; + [self release]; + @throw [OFNotImplementedException exceptionWithClass: c + selector: _cmd]; +} + +- initWithClass: (Class)class_ + version: (OFString*)version_ +{ + self = [super initWithClass: class_]; + + @try { + version = [version_ copy]; + } @catch (id e) { + [self release]; + @throw e; + } + + return self; +} + +- (void)dealloc +{ + [version release]; + + [super dealloc]; +} + +- (OFString*)description +{ + if (description != nil) + return description; + + description = [[OFString alloc] initWithFormat: + @"Version %@ of the format or protocol is not supported by class " + @"%@", version, inClass]; + + return description; +} + +- (OFString*)version +{ + return version; +} +@end