Use Objective-C for…in instead of macro

This avoids having to use C++ iterators and we want to get rid of some of this Objective-C/C++ mixing for ARC and other reasons.
This commit is contained in:
Allan Odgaard
2012-09-19 15:31:59 +02:00
parent 6b42343bd3
commit 4532099359
3 changed files with 17 additions and 16 deletions

View File

@@ -78,8 +78,8 @@ static NSMutableArray* wrap_array (std::vector<std::string> const& array, NSStri
static plist::array_t unwrap_array (NSArray* array, NSString* key)
{
plist::array_t res;
iterate(dict, array)
res.push_back(to_s((NSString*)[*dict objectForKey:key]));
for(NSDictionary* dict in array)
res.push_back(to_s((NSString*)[dict objectForKey:key]));
return res;
}

View File

@@ -15,12 +15,12 @@ static NSImage* CustomIconForPath (NSString* path, struct stat const& buf)
std::multimap<ssize_t, NSString*> ordering;
NSDictionary* bindings = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle bundleForClass:[OakFileIconImage class]] pathForResource:@"bindings" ofType:@"plist"]];
iterate(pair, bindings)
for(NSString* key in bindings)
{
for(NSString* ext in pair->second)
for(NSString* ext in bindings[key])
{
if(ssize_t rank = path::rank([path UTF8String], [ext UTF8String]))
ordering.insert(std::make_pair(rank, pair->first));
ordering.insert(std::make_pair(rank, key));
}
}
return ordering.empty() ? nil : [NSImage imageNamed:ordering.begin()->second inSameBundleAsClass:[OakFileIconImage class]];

View File

@@ -151,8 +151,8 @@ id layout_metrics_t::ExpandVariables (id obj, std::map<std::string, std::string>
else if([obj isKindOfClass:[NSDictionary class]])
{
NSMutableDictionary* dict = [NSMutableDictionary dictionary];
iterate(it, (NSDictionary*)obj)
[dict setObject:ExpandVariables(it->second, someVariables) forKey:it->first];
for(NSString* key in obj)
[dict setObject:ExpandVariables(obj[key], someVariables) forKey:key];
obj = dict;
}
else if([obj isKindOfClass:[NSString class]])
@@ -169,8 +169,9 @@ void layout_metrics_t::AddItemsForKeyToArray (NSDictionary* dict, NSString* key,
if(NSString* includeKey = [item objectForKey:@"include"])
{
std::map<std::string, std::string> tmp = values;
iterate(it, (NSDictionary*)[item objectForKey:@"values"])
tmp[[it->first UTF8String]] = format_string::expand([it->second UTF8String], tmp);
NSDictionary* values = [item objectForKey:@"values"];
for(NSString* key in values)
tmp[[key UTF8String]] = format_string::expand([values[key] UTF8String], tmp);
AddItemsForKeyToArray(dict, includeKey, tmp, array);
}
else
@@ -190,21 +191,21 @@ layout_metrics_ptr layout_metrics_t::parse (NSDictionary* dict)
r.maxTabSize = [[dict objectForKey:@"maxTabSize"] floatValue] ?: DBL_MAX;
std::map<std::string, std::string> variables;
iterate(it, dict)
for(NSString* key in dict)
{
if([it->second isKindOfClass:[NSString class]])
variables[[it->first UTF8String]] = [it->second UTF8String];
if([dict[key] isKindOfClass:[NSString class]])
variables[[key UTF8String]] = [dict[key] UTF8String];
}
iterate(it, dict)
for(NSString* key in dict)
{
if(![it->second isKindOfClass:[NSArray class]])
if(![dict[key] isKindOfClass:[NSArray class]])
continue;
NSMutableArray* array = [NSMutableArray array];
AddItemsForKeyToArray(dict, it->first, variables, array);
AddItemsForKeyToArray(dict, key, variables, array);
for(NSDictionary* item in array)
r.layers[[it->first UTF8String]].push_back(parse_layer(item));
r.layers[[key UTF8String]].push_back(parse_layer(item));
}
return layout_metrics_ptr(new layout_metrics_t(r));