parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

второй день парюсь, ничего не работает, пожалуйста гляньте на код

Александр Петросян (PAF) 28.07.2005 14:00

если не сложно вам:
/// put a [value] under the [key] @returns existed or not
template<typename R, typename F1, typename F2, typename I> 
	R maybe_replace_maybe_append(K key, V value, F1 prevent_replace, F2 prevent_append, I info) 
{
	if(!value) {
		// they can come here from Temp_value_element::dctor to restore some empty value
		remove(key);
		// this has nothing to do with properties, doing no special property handling here
		return 0; 
	}

	if(is_full()) 
		expand();

	uint code=hash_code(key);
	uint index=code%allocated;
	Pair **ref=&refs[index];
	for(Pair *pair=*ref; pair; pair=pair->link)
		if(pair->code==code && pair->key==key) {
			// found a pair with the same key

			// prevent-function intercepted put?
			if(R result=prevent_replace(pair->value, info))
				return result;
			
			pair->value=value;
			return reinterpret_cast<R>(1);
		}
	
	// proper pair not found 
	// prevent-function intercepted put?
	if(R result=prevent_append(value, info))
		return result;
	
	//create&link_in new pair
	if(!*ref) // root cell were fused_refs?
		fused_refs++; // not, we'll use it and record the fact
	*ref=new Pair(code, key, value, *ref);
	fpairs_count++;
	return 0;
}
какая-то мелочь не работает и потом всё грустит в хитрой ситуации.