ObjIRC  Diff

Differences From Artifact [ee7005bbec]:

To Artifact [1fa74637a1]:


29
30
31
32
33
34
35
36

37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53


54
55
56

57
58
59
60
61
62
63

64
65
66
67
68
69
70
71
29
30
31
32
33
34
35

36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51


52
53
54
55

56

57
58
59
60
61

62

63
64
65
66
67
68
69







-
+















-
-
+
+


-
+
-





-
+
-







#import <ObjFW/OFOutOfMemoryException.h>

#import <ObjFW/macros.h>

#import "IRCUser.h"

@implementation IRCUser
+ IRCUserWithString: (OFString*)string
+ (instancetype)IRCUserWithString: (OFString*)string
{
	return [[[self alloc] initWithString: string] autorelease];
}

- initWithString: (OFString*)string
{
	char *tmp2 = NULL;

	self = [super init];

	@try {
		char *tmp;

		if ((tmp2 = strdup([string UTF8String])) == NULL)
			@throw [OFOutOfMemoryException
			     exceptionWithClass: [self class]
				  requestedSize: [string UTF8StringLength]];
			     exceptionWithRequestedSize:
			     [string UTF8StringLength]];

		if ((tmp = strchr(tmp2, '@')) == NULL)
			@throw [OFInvalidFormatException
			@throw [OFInvalidFormatException exception];
			    exceptionWithClass: [self class]];

		*tmp = '\0';
		_hostname = [[OFString alloc] initWithUTF8String: tmp + 1];

		if ((tmp = strchr(tmp2, '!')) == NULL)
			@throw [OFInvalidFormatException
			@throw [OFInvalidFormatException exception];
			    exceptionWithClass: [self class]];

		*tmp = '\0';
		_username = [[OFString alloc] initWithUTF8String: tmp + 1];

		_nickname = [[OFString alloc] initWithUTF8String: tmp2];
	} @catch (id e) {
		[self release];
85
86
87
88
89
90
91
92

93
94
95
96
97

98
99
100
101
102

103
104
105
106
107
108
109
110
111
112
113
114
115
83
84
85
86
87
88
89

90
91
92
93
94

95
96
97
98
99

100
101
102
103
104
105
106
107
108
109
110
111
112
113







-
+




-
+




-
+













	[_hostname release];

	[super dealloc];
}

- (OFString*)username
{
	OF_GETTER(_username, YES)
	OF_GETTER(_username, true)
}

- (OFString*)nickname
{
	OF_GETTER(_nickname, YES)
	OF_GETTER(_nickname, true)
}

- (OFString*)hostname
{
	OF_GETTER(_hostname, YES)
	OF_GETTER(_hostname, true)
}

- copy
{
	return [self retain];
}

- (OFString*)description
{
	return [OFString stringWithFormat: @"%@!%@@%@",
					   _nickname, _username, _hostname];
}
@end