Oolite
Loading...
Searching...
No Matches
OORoleSet Class Reference

#include <OORoleSet.h>

+ Inheritance diagram for OORoleSet:
+ Collaboration diagram for OORoleSet:

Instance Methods

(id) - initWithRoleString:
 
(id) - initWithRole:probability:
 
(NSString *) - roleString
 
(BOOL) - hasRole:
 
(float) - probabilityForRole:
 
(BOOL) - intersectsSet:
 
(NSSet *) - roles
 
(NSArray *) - sortedRoles
 
(NSDictionary *) - rolesAndProbabilities
 
(NSString *) - anyRole
 
(id) - roleSetWithAddedRole:probability:
 
(id) - roleSetWithAddedRoleIfNotSet:probability:
 
(id) - roleSetWithRemovedRole:
 
(void) - dealloc [implementation]
 
(NSString *) - description [implementation]
 
(BOOL) - isEqual: [implementation]
 
(NSUInteger) - hash [implementation]
 
(id) - copyWithZone: [implementation]
 
(id) - initWithRolesAndProbabilities: [implementation]
 

Class Methods

(instancetype) + roleSetWithString:
 
(instancetype) + roleSetWithRole:probability:
 

Private Attributes

NSString * _roleString
 
NSDictionary * _rolesAndProbabilities
 
NSSet * _roles
 
float _totalProb
 

Detailed Description

Definition at line 35 of file OORoleSet.h.

Method Documentation

◆ anyRole

- (NSString *) anyRole

Definition at line 312 of file OORoleSet.m.

193{
194 NSString *role = nil;
195 float prob, selected;
196
197 selected = randf() * _totalProb;
198 prob = 0.0f;
199
200 if ([_rolesAndProbabilities count] == 0) return nil;
201
203 {
204 prob += [_rolesAndProbabilities oo_floatForKey:role];
205 if (selected <= prob) break;
206 }
207 if (role == nil)
208 {
209 role = [[self roles] anyObject];
210 OOLog(@"roleSet.anyRole.failed", @"Could not get a weighted-random role from role set %@, returning unweighted selection %@. TotalProb: %g, selected: %g, prob at end: %f", self, role, _totalProb, selected, prob);
211 }
212 return role;
213}
#define foreachkey(VAR, DICT)
Definition OOCocoa.h:353
#define OOLog(class, format,...)
Definition OOLogging.h:88
unsigned count
return nil
float _totalProb
Definition OORoleSet.h:42
NSDictionary * _rolesAndProbabilities
Definition OORoleSet.h:40
float randf(void)

References count, nil, and ScanTokensFromString().

+ Here is the call graph for this function:

◆ copyWithZone:

- (id) copyWithZone: (NSZone *)  zone
implementation

Definition at line 312 of file OORoleSet.m.

108 :(NSZone *)zone
109{
110 // Note: since object is immutable, a copy is no different from the original.
111 return [self retain];
112}

◆ dealloc

- (void) dealloc
implementation

Definition at line 312 of file OORoleSet.m.

77{
78 [_roleString autorelease];
79 [_rolesAndProbabilities autorelease];
80 [_roles autorelease];
81
82 [super dealloc];
83}

◆ description

- (NSString *) description
implementation

Definition at line 312 of file OORoleSet.m.

87{
88 return [NSString stringWithFormat:@"<%@ %p>{%@}", [self class], self, [self roleString]];
89}

◆ hash

- (NSUInteger) hash
implementation

Definition at line 312 of file OORoleSet.m.

103{
104 return [_rolesAndProbabilities hash];
105}

◆ hasRole:

- (BOOL) hasRole: (NSString *)  role

Definition at line 312 of file OORoleSet.m.

149 :(NSString *)role
150{
151 return role != nil && [_rolesAndProbabilities objectForKey:role] != nil;
152}

◆ initWithRole:probability:

- (id) initWithRole: (NSString *)  role
probability: (float)  probability 

Definition at line 312 of file OORoleSet.m.

64 :(NSString *)role probability:(float)probability
65{
66 NSDictionary *dict = nil;
67
68 if (role != nil && 0 <= probability)
69 {
70 dict = [NSDictionary dictionaryWithObject:[NSNumber numberWithFloat:probability] forKey:role];
71 }
72 return [self initWithRolesAndProbabilities:dict];
73}

◆ initWithRolesAndProbabilities:

- (id) initWithRolesAndProbabilities: (NSDictionary *)  dict
implementation

Provided by category OORoleSet(OOPrivate).

Definition at line 312 of file OORoleSet.m.

262 :(NSDictionary *)dict
263{
264 NSString *role = nil;
265 float prob;
266
267 if (dict == nil)
268 {
269 [self release];
270 return nil;
271 }
272
273 self = [super init];
274 if (self == nil) return nil;
275
276 // Note: _roles and _roleString are derived on the fly as needed.
277 // MKW 20090815 - if we are re-initialising this OORoleSet object, we need
278 // to ensure that _roles and _roleString are cleared.
279 // Why would we be re-initing? That's never valid. -- Ahruman 2010-02-06
280 assert(_roles == nil && _roleString == nil);
281
282 NSMutableDictionary *tDict = [[dict mutableCopy] autorelease];
283 float thargProb = [dict oo_floatForKey:@"thargon" defaultValue:0.0f];
284
285 if ( thargProb > 0.0f && [dict objectForKey:@"EQ_THARGON"] == nil)
286 {
287 [tDict setObject:[NSNumber numberWithFloat:thargProb] forKey:@"EQ_THARGON"];
288 [tDict removeObjectForKey:@"thargon"];
289 }
290
291 _rolesAndProbabilities = [tDict copy];
292
293 foreachkey (role, dict)
294 {
295 prob = [dict oo_floatForKey:role defaultValue:-1];
296 if (prob < 0)
297 {
298 OOLog(@"roleSet.badValue", @"Attempt to create a role set with negative or non-numerical probability for role %@.", role);
299 [self release];
300 return nil;
301 }
302
303 _totalProb += prob;
304 }
305
306 return self;
307}

◆ initWithRoleString:

- (id) initWithRoleString: (NSString *)  roleString

Definition at line 312 of file OORoleSet.m.

55 :(NSString *)roleString
56{
57 NSDictionary *dict = nil;
58
60 return [self initWithRolesAndProbabilities:dict];
61}
NSDictionary * OOParseRolesFromString(NSString *string)
Definition OORoleSet.m:312
NSString * roleString()
Definition OORoleSet.m:115

◆ intersectsSet:

- (BOOL) intersectsSet: (id)  set

Definition at line 312 of file OORoleSet.m.

161 :(id)set
162{
163 if ([set isKindOfClass:[OORoleSet class]]) set = [set roles];
164 else if (![set isKindOfClass:[NSSet class]]) return NO;
165
166 return [[self roles] intersectsSet:set];
167}
NSSet * roles()
Definition OORoleSet.m:170

◆ isEqual:

- (BOOL) isEqual: (id)  other
implementation

Definition at line 312 of file OORoleSet.m.

92 :(id)other
93{
94 if ([other isKindOfClass:[OORoleSet class]])
95 {
96 return [_rolesAndProbabilities isEqual:[other rolesAndProbabilities]];
97 }
98 else return NO;
99}

◆ probabilityForRole:

- (float) probabilityForRole: (NSString *)  role

Definition at line 312 of file OORoleSet.m.

155 :(NSString *)role
156{
157 return [_rolesAndProbabilities oo_floatForKey:role defaultValue:0.0f];
158}

◆ roles

- (NSSet *) roles

Definition at line 312 of file OORoleSet.m.

171{
172 if (_roles == nil)
173 {
174 _roles = [[NSSet alloc] initWithArray:[_rolesAndProbabilities allKeys]];
175 }
176 return _roles;
177}
NSSet * _roles
Definition OORoleSet.h:41

◆ rolesAndProbabilities

- (NSDictionary *) rolesAndProbabilities

Definition at line 312 of file OORoleSet.m.

187{
189}

Referenced by ShipGetProperty().

+ Here is the caller graph for this function:

◆ roleSetWithAddedRole:probability:

- (id) roleSetWithAddedRole: (NSString *)  role
probability: (float)  probability 

Definition at line 312 of file OORoleSet.m.

231 :(NSString *)role probability:(float)probability
232{
233 NSMutableDictionary *dict = nil;
234
235 if (role == nil || probability < 0 || [self hasRole:role])
236 {
237 return [[self copy] autorelease];
238 }
239
240 dict = [[_rolesAndProbabilities mutableCopy] autorelease];
241 [dict setObject:[NSNumber numberWithFloat:probability] forKey:role];
242 return [[[[self class] alloc] initWithRolesAndProbabilities:dict] autorelease];
243}

◆ roleSetWithAddedRoleIfNotSet:probability:

- (id) roleSetWithAddedRoleIfNotSet: (NSString *)  role
probability: (float)  probability 

Definition at line 312 of file OORoleSet.m.

216 :(NSString *)role probability:(float)probability
217{
218 NSMutableDictionary *dict = nil;
219
220 if (role == nil || probability < 0 || ([self hasRole:role] && [self probabilityForRole:role] == probability))
221 {
222 return [[self copy] autorelease];
223 }
224
225 dict = [[_rolesAndProbabilities mutableCopy] autorelease];
226 [dict setObject:[NSNumber numberWithFloat:probability] forKey:role];
227 return [[[[self class] alloc] initWithRolesAndProbabilities:dict] autorelease];
228}
return self

◆ roleSetWithRemovedRole:

- (id) roleSetWithRemovedRole: (NSString *)  role

Definition at line 312 of file OORoleSet.m.

246 :(NSString *)role
247{
248 NSMutableDictionary *dict = nil;
249
250 if (![self hasRole:role]) return [[self copy] autorelease];
251
252 dict = [[_rolesAndProbabilities mutableCopy] autorelease];
253 [dict removeObjectForKey:role];
254 return [[[[self class] alloc] initWithRolesAndProbabilities:dict] autorelease];
255}

◆ roleSetWithRole:probability:

+ (instancetype) roleSetWithRole: (NSString *)  role
probability: (float)  probability 

Definition at line 312 of file OORoleSet.m.

50 :(NSString *)role probability:(float)probability
51{
52 return [[[self alloc] initWithRole:role probability:probability] autorelease];
53}

◆ roleSetWithString:

+ (instancetype) roleSetWithString: (NSString *)  roleString

Definition at line 312 of file OORoleSet.m.

44 :(NSString *)roleString
45{
46 return [[[self alloc] initWithRoleString:roleString] autorelease];
47}

◆ roleString

- (NSString *) roleString

Definition at line 312 of file OORoleSet.m.

116{
117 NSArray *roles = nil;
118 NSString *role = nil;
119 float probability;
120 NSMutableString *result = nil;
121 BOOL first = YES;
122
123 if (_roleString == nil)
124 {
125 // Construct role string. We always do this so that it's in a normalized form.
126 result = [NSMutableString string];
127 roles = [self sortedRoles];
128 foreach (role, roles)
129 {
130 if (!first) [result appendString:@" "];
131 else first = NO;
132
133 [result appendString:role];
134
135 probability = [self probabilityForRole:role];
136 if (probability != 1.0f)
137 {
138 [result appendFormat:@"(%g)", probability];
139 }
140 }
141
142 _roleString = [result copy];
143 }
144
145 return _roleString;
146}
NSString * _roleString
Definition OORoleSet.h:39

◆ sortedRoles

- (NSArray *) sortedRoles

Definition at line 312 of file OORoleSet.m.

181{
182 return [[_rolesAndProbabilities allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
183}

Referenced by ShipGetProperty().

+ Here is the caller graph for this function:

Member Data Documentation

◆ _roles

- (NSSet*) _roles
private

Definition at line 41 of file OORoleSet.h.

◆ _rolesAndProbabilities

- (NSDictionary*) _rolesAndProbabilities
private

Definition at line 40 of file OORoleSet.h.

◆ _roleString

- (NSString*) _roleString
private

Definition at line 39 of file OORoleSet.h.

◆ _totalProb

- (float) _totalProb
private

Definition at line 42 of file OORoleSet.h.


The documentation for this class was generated from the following files: