Mercurial > repos > rhope
view dict.rhope @ 83:27bb051d631c
Initial implementation of Dictionary
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 27 Jul 2010 23:33:31 -0400 |
parents | |
children | 3c4325e6298f |
line wrap: on
line source
Blueprint Empty Dictionary { } Blueprint Dictionary { Left Right Straight Bits(UInt32,Naked) } Dictionary[:out] { out <- Build[Empty Dictionary()] } _Index@Empty Dictionary[dict,index,bits,bitindex:out,not found] { not found <- dict } Index@Empty Dictionary[dict,index:out,not found] { not found <- dict } _Terminal Node[val:out] { out <- [[[[Build[Dictionary()] ]Left <<[Dictionary[]] ]Right <<[Dictionary[]] ]Straight <<[val] ]Bits <<[4294967295u32] //Maximum 32-bit unsigned int value } _Set New[index,val,bits,bitindex:out] { nbitindex <- [bitindex]+[1] [index]Dict Bits[nbitindex] { straight <- _Set New[index,val,~,nbitindex] } { straight <- _Terminal Node[val] } out <- [[[[Build[Dictionary()]]Left <<[Dictionary[]]]Right <<[Dictionary[]]]Straight <<[straight]]Bits <<[bits] } _Set@Empty Dictionary[dict,index,val,bits,bitindex:out] { out <- _Set New[index,val,bits,bitindex] } Set@Empty Dictionary[dict,index,val:out] { out <- _Set New[index,val, Dict Type ID[index], -1] } First@Empty Dictionary[dict:first,not found] { not found <- dict } Next@Empty Dictionary[dict,index:next,not found] { not found <- dict } Index@Dictionary[dict,index:out,not found] { out,not found <- [dict]_Index[index,Dict Type ID[index], -1] } _Index@Dictionary[dict,index,bits,bitindex:out,not found] { If[[bits]=[[dict]Bits >>]] { If[[bits]=[4294967295u32]] { out <- Straight >>[dict] }{ nbitindex <- [bitindex]+[1] nbits <- [index]Dict Bits[nbitindex] {} { nbits <- 4294967295u32 } out,not found <- [[dict]Straight >>]_Index[index,nbits,nbitindex] } }{ If[[bits]<[[dict]Bits >>]] { go <- Right >>[dict] }{ go <- Left >>[dict] } out,not found <- [go]_Index[index,bits,bitindex] } } Set@Dictionary[dict,index,val:out] { out <- [dict]_Set[index,val,Dict Type ID[index], -1] } _Set@Dictionary[dict,index,val,bits,bitindex:out] { If[[bits]=[[dict]Bits >>]] { If[[bits]=[4294967295u32]] { out <- [dict]Straight <<[val] }{ nbitindex <- [bitindex]+[1] nbits <- [index]Dict Bits[nbitindex] {} { nbits <- 4294967295u32 } out <- [dict]Straight <<[[[dict]Straight >>]_Set[index,val,nbits,nbitindex]] } }{ If[[bits]<[[dict]Bits >>]] { go <- Right >>[dict] out <- [dict]Right <<[new] }{ go <- Left >>[dict] out <- [dict]Left <<[new] } new <- [go]_Set[index,val,bits,bitindex] } }