示例#1
0
文件: table.c 项目: dongxu-pc/test02
inline int initBlockEntry(BlockEntry* blockEntry)
{
	initSlice(&blockEntry->key_,20);
	initSlice(&blockEntry->value_,20);
	
	return 1;
}
bool CuttingPhotos::initWithPhoto(const char* photo,unsigned int rows,unsigned int columns)
{
    bool result;//初始化是否成功
    
    if (Layer::init()) {
        
        _rows=rows;
        _columns=columns;
        
        
        if (initSlice(photo)) {
            
            initTouchEventlistener();
            
            restart();
            
            result=true;
        }else{
            result=false;
        }
        
    }else{
        result =false;
    }
    
    return result;
    
}
示例#3
0
文件: block.c 项目: dongxu-pc/test02
void showBlockData(const Block* block)
{
	size_t i;
	size_t offset = 0;
	Slice lastKey;
	BlockEntry blockEntry;
	initBlockEntry(&blockEntry);
	initSlice(&lastKey,20);
	
	do{
		readBlockEntry(block,&blockEntry,&offset,&lastKey);
		showBlockEntry(&blockEntry);
	}while(offset < block->restart_offset);
	
	freeBlockEntry(&blockEntry);
	freeSlice(&lastKey);
}
示例#4
0
文件: block.c 项目: dongxu-pc/test02
int segmentFix(Segment* segment,const Block* block,const Slice* key)
{
	uint32_t low,mid,high;
	int result = -1;
	Slice midkey;
	initSlice(&midkey,20);
	low = 0;
	high = block->restartNum-1;
	while(low < high){
		mid = low + high;
		mid = mid >> 1;
		printf("slow=%u,high=%u,mid=%u\n",low,high,mid);
		getBlockEntryKey(block->data_+block->restart_[mid],&midkey);
		result = compareKey(midkey,*key);
		if(result == 1){
			high = mid;
		}else if(result == 2){
			low = mid+1;
			mid = low;
		}else{
			high = mid;
			low = mid;
		}
	}
	if(mid == 0){
		printf("Waring: the first key of the block is bigger than key.\n");	
	}
	if(mid != 0){
		mid--;
	}
	if(mid == (block->restartNum-1)){
		segment->start_ = block->restart_[mid];
		segment->size_ = block->restart_offset - block->restart_[mid];		
	}else{
		segment->start_ = block->restart_[mid];
		segment->size_ = block->restart_[mid+1] - block->restart_[mid]; 
	}
	printf("Fixed finished!\nmid = %u,start_ = %u,size_ = %u\n",mid,segment->start_,segment->size_);
	midkey.size_ = 0;
	getBlockEntryKey(block->data_+segment->start_,&midkey);
	showKey(&midkey);
	printf("FIXFIX\n");
	freeSlice(&midkey);
	return 1;
}
示例#5
0
文件: table.c 项目: dongxu-pc/test02
/*
 * 读取sstable文件的Footer
 */
int readFooter(sequentialFile* psFile,Footer* pfooter)
{
	unsigned char footerSpace[48];
	long filesize;
	Slice r;
	initSlice(&r,20);
	int i;
	filesize = getFilesize(psFile);
	readSFile(48,filesize-48,psFile,footerSpace);
	setSlice(&r,footerSpace,48);
	decodeFooter(pfooter,&r);
	for(i = 0;i < 48;i++){
		printXchar(r.data_[i]);
	}
	freeSlice(&r);
	printf("file size = %ld,footersize = %zd\n",filesize,r.size_);
	return 0;
}
示例#6
0
文件: block.c 项目: dongxu-pc/test02
void showBlokRestart(const Block* block)
{
	size_t i;
	size_t offset = 0;
	Slice lastKey;
	BlockEntry blockEntry;
	initBlockEntry(&blockEntry);
	initSlice(&lastKey,20);
	
	for(i = 0;i < block->restartNum;i++){
		offset = 0;
		lastKey.size_ = 0;
		offset = block->restart_[i];
		readBlockEntry(block,&blockEntry,&offset,&lastKey);
		showIndexBlockEntry(&blockEntry);
	}
	
	freeBlockEntry(&blockEntry);
	freeSlice(&lastKey);
}
示例#7
0
文件: block.c 项目: dongxu-pc/test02
/* 成功则返回在segment中的偏移量,失败则返回1,应为offset不可能等于1 */
uint32_t scanSegment(const Block* block,const Segment* segment,DBhandle* dbhandle)
{
	Slice lastKey;
	BlockEntry blockEntry;
	size_t tmp;
	size_t result;
	uint32_t offset = 0;
	unsigned char* b = block->data_ + segment->start_;
	printf("scanSegment:start_ = %u\n",segment->start_);
	initSlice(&lastKey,20);
	lastKey.size_ = 0;
	initBlockEntry(&blockEntry);
	
	while(offset < segment->size_){
		tmp = decodeBlockEntry(&blockEntry,b+offset,&lastKey);
		//showBlockEntry(&blockEntry);
		printf("keysize = %zd,valuesize = %zd\n",blockEntry.key_.size_,blockEntry.value_.size_);
		//break;
		//showBlockEntry(&blockEntry);
		//showIndexBlockEntry(&blockEntry);
		
		result = compareKey(blockEntry.key_,dbhandle->key_);
		if(0 == result){
			cpySlice(&dbhandle->value_,&blockEntry.value_);
			freeSlice(&lastKey);
			freeBlockEntry(&blockEntry);
			return offset;
		}else if(1 == result){
			printf("Waring:Not Found!\n");
			freeSlice(&lastKey);
			freeBlockEntry(&blockEntry);
			return 1;
		}
		offset += tmp;
	}
	
	freeSlice(&lastKey);
	freeBlockEntry(&blockEntry);
	
	return 1;
}
示例#8
0
文件: table.c 项目: dongxu-pc/test02
/*
 * 批量读取block数据
 */
int readAllBlock(sequentialFile* psFile,Block* blockArray,const Block* dataIndexBlock)
{
	printf("Read All Block.\n");
	
	//printf("%s(%d)-<%s>: ",__FILE__, __LINE__, __FUNCTION__);
	uint32_t i = 0;
	BlockHandle blockHandle;
	BlockEntry blockEntry;
	unsigned char* data;
	Slice lastKey;
	initSlice(&lastKey,20);
	initBlockEntry(&blockEntry);
	
	for(i = 0;i < dataIndexBlock->restartNum;i++){
		data =(unsigned char*) (dataIndexBlock->data_+dataIndexBlock->restart_[i]);
		decodeBlockEntry(&blockEntry,data,&lastKey);
		decodeBlockHandle(&blockHandle,&blockEntry.value_);
		readBlock(psFile,&blockArray[i],blockHandle);
		//showBlock(&blockArray[i]);
	}
	freeBlockEntry(&blockEntry);
	freeSlice(&lastKey);
	return 0;
}
示例#9
0
文件: block.c 项目: dongxu-pc/test02
void initEntrykey(Entrykey* entrykey){
	entrykey->sharedkeylen = 0;
	entrykey->entrysize = 0;
	initSlice(&entrykey->nosharedkey,20);
}
示例#10
0
文件: t01.c 项目: dongxu-pc/test02
int main()
{
	FILE* fp;
	size_t i = 0;
	size_t offset;
	fp = fopen("src.ldb","r");
	if(fp == NULL){
		printf("error!\n");
		return 1;
	}
	unsigned char a[] = "src.ldb";
	
	unsigned char b[] = "1-959-250-4279";
	//"1-114-560-9305";
	
	Slice filename;
	Slice lastKey;/* 用于存储最后一次读取到的key */
	Slice srckey; /* 存储要查找、删除、修改、添加的key */
	DBhandle dbhandle;
	
	Footer footer;
	Block dataIndexBlock;
	Block* blockArray;
	BlockEntry blockEntry;
	
	initSlice(&filename,10);
	initSlice(&lastKey,20);
	initBlockEntry(&blockEntry);
	initDBhandle(&dbhandle);
	setSlice(&dbhandle.key_,b,22);

	
	setSlice(&filename,a,strlen((char*)a));
	sequentialFile* psFile = (sequentialFile*)malloc(sizeof(sequentialFile));
	setSequentialFile(psFile,fp,&filename);
	
	readFooter(psFile,&footer);
	
	showFooter(&footer);
	
	/* 读取data index block,存储在dataBlock中 */
	readBlock(psFile,&dataIndexBlock,footer.dataIndexHandle);
	
	blockArray = (Block*)malloc(sizeof(Block)*dataIndexBlock.restartNum);
	if(blockArray == NULL){
		printf("error:blockArray is NULL.\n");
		return 1;
	}
	readAllBlock(psFile,blockArray,&dataIndexBlock);

	/*设置操作为Read*/
	dbhandle.type = 1;	
	dbcmd(blockArray,&dataIndexBlock,&dbhandle);
	
	/* 
	 * 至此,所有的block都已经读取到内存中,data block的内容存储在blockarray中,
	 * data block的索引信息存储在dataIndexBlock中 
	 */
	
	/*
	 * 
	 */
	 //showBlokRestart(&dataIndexBlock);
	 
	
	for(i = 0;i < dataIndexBlock.restartNum;i++){
		//showBlockData(&(blockArray[i]));
	}
	
	
	freeBlockEntry(&blockEntry);
	freeDBhandle(&dbhandle);
	fclose(fp); 
	printf("Hello World!\n");

	return 0;
}