HSP version White Space 002 heap module

HSP ver WS 企画第二弾です
前回はStackモジュールでしたが、
今回はHeapモジュールです。
Ruby版とかはハッシュ使ってやってるのですが、
C版は配列で実装しててそれに倣ってます
配列もどきな構造なのですが
配列のindexともども登録した順に代入しています
それではよろしくお願いします

#ifndef HSPWS_DEFINE
#define HSPWS_DEFINE

#define STACK_MEMBERS 			1024
#define HEAP_MEMBERS 			500
#define MAX_LABELS 			200
#define MAX_LABEL_LENGTH 		500
#define MAX_INSTRUCTIONS 		30
#define MAX_INSTRUCTION_LENGTH 	        10
#define MAX_NESTED_SUBROUTINES	        20
#endif

#module heap_model m_address,m_value,m_elements
#modinit
	dim m_address,500
	dim m_value,500
	m_elements=0
	return
// heap領域に値をSET
#modcfunc heap_put int p_val,int p_addr
	// 最初にそのaddressが使われてるか調べる
	for i,0,m_elements,1
		if m_address.i == p_addr {
			m_value.i = p_val
			return 1
		}
	next
	
	// そうじゃなければ領域が余ってるか調べて加える
	if m_elements < HEAP_MEMBERS@ {
		i = m_elements
		m_address.i = p_addr
		m_value.i = p_val
		m_elements++
		return 1
	}
	return 0
// heap領域から値をGET
// addressからデータを取得出来るか調べて
// 存在したら値を返し
// 存在しなければ0を返す
#modcfunc heap_get int p_addr
	for i,0,HEAP_MEMBERS@,1
		if m_address.i == p_addr:return m_value.i
	next
	return 0
#global

#if 1
newmod heap,heap_model
#endif

#if 1
er=heap_put(heap,10,1)
mes er
er=heap_put(heap,20,2)
mes er
er=heap_put(heap,30,3)
mes er
er=heap_put(heap,40,4)
er=heap_put(heap,50,5)
er=heap_put(heap,100,10)
er=heap_put(heap,90,9)
er=heap_put(heap,80,8)
er=heap_put(heap,70,7)
er=heap_put(heap,60,6)
er=heap_put(heap,100,1)
er=heap_put(heap,200,2)
er=heap_put(heap,300,3)
mes heap_get(heap,1)
mes heap_get(heap,2)
mes heap_get(heap,3)
mes heap_get(heap,4)
mes heap_get(heap,5)
mes heap_get(heap,6)
mes heap_get(heap,7)
mes heap_get(heap,8)
mes heap_get(heap,9)
mes heap_get(heap,10)
mes heap_get(heap,11)
mes heap_get(heap,12)
#endif

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です