Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
06/06/07 12:49
Read: times


 
#140312 - Gah, code repost
Responding to: ???'s previous message
Sorry 'bout that.

void setCacheFlag(unsigned char position){//takes position of bit to set, from 0 to 7
//this outlining section contains the cache code
//always sets that bit, for simplicity
	unsigned char scratch=0x80;
	unsigned char i=0x00;
	if(position>=8){
		while((position-=8)>8){
			i++;
		}
	}		
	scratch>>=position;//put bit into proper position
	cacheUsed[i]|=scratch;//set that bit in the used flag
}

void clearCacheFlag(unsigned char position){
	unsigned char scratch=0x80;
	unsigned char i=0x00;
	if(position>=8){
		while((position-=8)>8){
			i++;
		}
	}
	scratch>>=position;//shift bit into proper position
	scratch=~scratch;//complement scratch character
	cacheUsed[i]&=scratch;//clear that bit in cacheUsed
}

bit checkCacheFlag(unsigned char position){//returns state of cache flag in input position
//should this function just be folded into checkInCache and insertInCache, to remove call overhead?
//will just be called in for loop anyway; just leave in function for debugging
	unsigned char scratch=0x80;
	unsigned char i=0x00;
	if(position>=8){
		while((position-=8)>8){
			i++;
		}
	}
	scratch>>=position;
	scratch&=cacheUsed[i];
	return scratch!=0x00;
}

bit insertInCache(unsigned char input){//finds first unused index, sets that flag, and overwrites
//that element. Returns 1 if successful, 0 if no unused indices found
	unsigned char i=0x00;
	for(i=0x00; i<0x10; i++){//for every element in cache
		if(!checkCacheFlag(i)){//if that element is unused
			setCacheFlag(i);//mark it as used
			compressedCache[i]=input;//store the information
			return 1;//report success
		}
	}
	return 0;//should only get here if was unable to report success; thus, report failure
}

unsigned char messageInCache(unsigned char input, unsigned char dontCareMask){
	//returns 0x00 if no match or first matching character in cache
	unsigned char i=0x00;
	if(!dontCareMask){//if precise match is required,
	//can do more efficient search
		for(i=0x00; i<0x10; i++){
			if(compressedCache[i]==input){
				if(checkCacheFlag(i)){
					clearCacheFlag(i);
					return compressedCache[i];
				}
			}
		}
	}else{
		for(i=0x00; i<0x10; i++){
			if(checkCacheFlag(i)){//if that slot is used,
				unsigned char scratch=input^compressedCache[i];
//check for match within tolerance
				scratch|=dontCareMask;
				if(scratch==dontCareMask){
//if matches within tolerance, then clear that slot and return matching char
					clearCacheFlag(i);
					return compressedCache[i];
				}
			}
		}
	}	
	return 0x00;
}


List of 20 messages in thread
TopicAuthorDate
Software design problem            01/01/70 00:00      
   Something like this, maybe?            01/01/70 00:00      
      Well, yes, actually...            01/01/70 00:00      
      Duhr and a question            01/01/70 00:00      
         Which ones did you look at ?            01/01/70 00:00      
         Duhr and an answer            01/01/70 00:00      
   Is it not possible to            01/01/70 00:00      
      Horses for courses            01/01/70 00:00      
         have fun            01/01/70 00:00      
   A Queue?            01/01/70 00:00      
      I used what I called a \'cache\'            01/01/70 00:00      
         Gah, code repost            01/01/70 00:00      
            you need to read it all, THEN process            01/01/70 00:00      
            Your approach is much more general...            01/01/70 00:00      
               Prioritizing?            01/01/70 00:00      
            Some suggestions Bob            01/01/70 00:00      
               Thank you, sir!            01/01/70 00:00      
                  Division / modulus not always slow            01/01/70 00:00      
         Are we making this too difficult?            01/01/70 00:00      
            I don't think so, it seems to work pretty well...            01/01/70 00:00      

Back to Subject List