// ハフマンコードを復号化する
// OnMemory版は#define ONMEM

#include "_jpeglib.h"
#include "jpeg.h"

int m(CmpiHuff(JDATA(p),iHUFFMAN ihufftbl[],unchar cnt[]))
{
unshort h=0;
int blen,j=0;
	//printf("CmpiHuff/");
	for (blen=0;blen<16;blen++) { // 符号ビット長として１〜１６まで/[]のため-1
		unchar i;
		int ret;
		
		h<<=1;
		ret=m(BitIn1(p));
		#ifndef ONMEM
		if (ret<0) {
		//	printf("BitIn Error:%d\n",ret);
			return(ret); // error
		}
		#endif
		h|=(unshort)ret; // 1bitなので0/1
		
		for (i=0;i<cnt[blen];i++) { // １符号ビット長内での比較
			if (h==ihufftbl[j].code) {
				//printf("cnt[%d]=%d/",blen,cnt[blen]);
				//printf("h:%b<->%b:code/",h,ihufftbl[j].code);
				//printf("blen=%d/",ihufftbl[j].dat);
				return((int)ihufftbl[j].dat);
			}
			j++;
		}
	}
	// ハフマンコード表にない
	//printf("ハフマンコード表にない\n");
	return(-2);
}
