Optimize small lists
The value pointers of lists with 1 or 2 elements are now stored in the list value itself. In particular, this makes the "concatMap (x: if cond then [(f x)] else [])" idiom cheaper.
This commit is contained in:
		
							parent
							
								
									14be783676
								
							
						
					
					
						commit
						b83801f8b3
					
				
					 11 changed files with 157 additions and 121 deletions
				
			
		|  | @ -1127,13 +1127,13 @@ static void opQuery(Globals & globals, Strings opFlags, Strings opArgs) | |||
|                                     attrs2["type"] = "bool"; | ||||
|                                     attrs2["value"] = v->boolean ? "true" : "false"; | ||||
|                                     xml.writeEmptyElement("meta", attrs2); | ||||
|                                 } else if (v->type == tList) { | ||||
|                                 } else if (v->isList()) { | ||||
|                                     attrs2["type"] = "strings"; | ||||
|                                     XMLOpenElement m(xml, "meta", attrs2); | ||||
|                                     for (unsigned int j = 0; j < v->list.length; ++j) { | ||||
|                                         if (v->list.elems[j]->type != tString) continue; | ||||
|                                     for (unsigned int j = 0; j < v->listSize(); ++j) { | ||||
|                                         if (v->listElems()[j]->type != tString) continue; | ||||
|                                         XMLAttrs attrs3; | ||||
|                                         attrs3["value"] = v->list.elems[j]->string.s; | ||||
|                                         attrs3["value"] = v->listElems()[j]->string.s; | ||||
|                                         xml.writeEmptyElement("string", attrs3); | ||||
|                                     } | ||||
|                                 } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue