硬雜湊表的輪子V5 0 完成全部邏輯

2021-09-30 01:08:31 字數 3655 閱讀 2549

#include "hwhaxi.h"

#include "chipflash.h"

#define gramdataflag_cnt_add 0x0807e000//僅僅利用前面的u32標識雜湊表大小

#define gramdataflag_flash_add 0x0807e800//全部儲存資料的雜湊值

#define gramdata_flash_add 0x0807f000//全部儲存資料

static grampage_t dt, dtfg;

static chipflash_t *c = &chipflash;

//static

uint8_t commonbuf[2048];

static uint8_t *phaxibuf = commonbuf;//公共資源 還需要加鎖 目前沒有 是分時復用

void g_print(char *name,gramdataflag_t* a,uint16_t len)

//擦掉一頁 必須是明確的起始位址

void gram_clear(uint32_t readaddr)

void gram_write( uint32_t addr,uint8_t* pbuffer, uint16_t numbyte)

void show_grampagedataflag_t(grampage_t *p)

void show_grampagedata_t(grampage_t *p)

void gram_data_init(void)

//完成'4'-->4 『a』-->10

unsigned char mystrtobyte(unsigned char ddata)

//"1234"--->0x12,0x34

char mystrstobytes(void* strings,char len,void* bytes)

return j;

}//清除

void gram_clear(void)

//寫入魔術

void gram_write_totocnt(uint32_t localcnt)

uint32_t gram_read_totocnt(void)

//寫入資料

//先把2048全部讀出來-在格式化flash-在修改2048中部分資料再次寫入

//id標識中的第幾個結構體

void gram_write_data(uint32_t id,gramdata_t *gdatat)

void gram_write_dataflag(uint32_t id,gramdataflag_t *gdataflagt)

void gram_pagewrite(void)

/*折半查詢

準備乙個陣列 排好序的*/

直接找陣列:

int iterbisearch_u16(uint16_t data, const uint16_t x, int beg, int last)

else if (x < data[mid])

else if (x > data[mid])

return -1;

} 陣列擴大為結構體:

int iterbisearch_t(gramdataflag_t *data, const uint32_t x, int beg, int last)

else if (x < adata)

else if (x > adata)

return -1;

}//排序

void myswap( gramdataflag_t *x, gramdataflag_t *y )

void myquicksort(gramdataflag_t *a,int left,int right)

gramdataflag_t iterbisearch_ti(const uint32_t x, int beg, int last)

; int mid = -1;

mid = (beg + last) / 2;

if(beg>last) return no;

gramdataflag_t adata = get_st_data(mid);

if (x == adata.data_flag)

else if (x < adata.data_flag)

else if (x > adata.data_flag)

return no;

}//查詢

gramdataflag_t isoneofgups( const uint16_t x,uint16_t n)

//查詢

//傳入引數 乙個陣列 目前len是寫死的11 而內部flash的位址沒有傳參 也是寫死的

char isoneof(uint8_t *indata,uint8_t len)

//開始挨個比較

gramdataflag_t every_flag;

gramdataflag_t machbank[5];

uint8_t machcnt=0;

for( i=0;i大把雜湊頁整理好

gram_dataflag_sort();

//演算法查詢

gupflag = haxi.haxifun(gupbyte,11);

printf("[gupflag=%04x]\r\n",gupflag);

gramdataflag_t node= isoneofgups(gupflag,gram_read_totocnt());

if(node.data_add>0)

}else

printf("fail\r\n");

}

#ifndef hwhaxi_h

#define hwhaxi_h

#include "gunit.h"

//操作的資料結構

typedef struct

gramdata_t;

typedef struct

gramdataflag_t;

/*//其實全部都是巨集定義

typedef struct

grampagedata_t;

typedef struct

grampagedataflag_t;

*/typedef struct

node;

uint8_t nodesize;

uint32_t nodecnt;

uint32_t pageadd;

uint16_t pagesize;

}grampage_t;

//可以優化的雜湊函式

typedef uint16_t (*haxi_func)(uint8_t *data, uint16_t leng) ;

typedef struct

haximap_t;

extern haximap_t haxi;

extern void haximap_test(void);

#endif

硬雜湊表的輪子V4 0 基本完成全部邏輯

放進去演算法 測試成功 進一步的比較即將開始!在v5.0完成吧!include hwhaxi.h include chipflash.h define gramdataflag cnt add 0x0807e000 僅僅利用前面的u32標識雜湊表大小 define gramdataflag flas...

csdn部落格的css樣式 v5

馬永佔,myz,mayongzhan 面對csdn極其xx的改版,徹底xx。改吧。csdn把左右對調了一下,左邊是文章,右邊是導航,我x,你要換也要給個配置,可以手動調節行不?左右換了之後document.ready就不需要了,注釋掉。去公告條相容首頁和內容頁。去掉收藏按鈕的樣式修改 調整了一下cs...

潤幹報表V5如何訪問WEB INF下的JSP展現

web inf下面的檔案都是受保護的,把需要限制訪問的資源 比如說jsp 放到web應用的web inf目錄下,對於web inf及其子目錄,都是不允許直接訪問的,所以就可以起到保護這些 未經授權的訪問和窺視,更好的保護了源 結合頁面的跳轉方式 一 redirect 方式,二 forward 方式。...