検索
AND検索
OR検索
トップ
|
リロード
|
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
ws_012_heap をテンプレートにして作成
メニュー
簡易掲示板
LINK集
y.tackの公式BBSブックマーク
practice room
?
最新の20件
2022-10-09
多角形の内外判定
2021-05-19
RecentDeleted
2018-08-01
FrontPage
文字列型変数管理サブルーチン
GAME作成システム
2018-07-31
double型変数管理サブルーチン
int型変数管理サブルーチン
2018-07-21
GUIとメイン分割処理。たたき台2
2018-07-11
memo
NO_579_sample
GUIとメイン分割処理。たたき台
2018-06-28
NO_714
NO_712
NO_706
NO_705
NO_704
NO_703
NO_702
2018-06-23
Shift_JIS
モートン番号テーブル化 / 八分木
total
0
today
0
yesterday
0
now
1
Menu
Total:0/Today:0
開始行:
*white_space企画の現状 heapモジュール ver 0.1.2.1 [#h718...
white_spaceでheap構造をデータ型の一つにしてるので
頑張って書きました
モジュール変数で要素を管理してるモジュールと
ラップしてモジュール変数決め打ちモジュールの二つを記述し...
stackとheapのスクリプト大体出来たから やっと次に進めそう...
**サブルーチン [#ya117b7b]
#ifndef _mdl_value_H_
#define _mdl_value_H_
#module mdl_one_value mem_value
#modinit
return
#modfunc local set var p
mem_value=p
return
#modcfunc local get
return mem_value
#modcfunc local ret_vartype
return vartype(mem_value)
#modcfunc local tostr_vartype
switch vartype(mem_value)
case 1:return "label"
case 2:return "str"
case 3:return "dbl"
case 4:return "int"
case 5:return "modvar"
swend
return "other"
#global
#endif
#if 0
newmod test_o_int,mdl_one_value
newmod test_o_dbl,mdl_one_value
newmod test_o_str,mdl_one_value
a=1
set@mdl_one_value test_o_int,a
b=1.23
set@mdl_one_value test_o_dbl,b
c="HELLO"
set@mdl_one_value test_o_str,c
mes get@mdl_one_value(test_o_int)
mes get@mdl_one_value(test_o_dbl)
mes get@mdl_one_value(test_o_str)
mes ret_vartype@mdl_one_value(test_o_int)
mes ret_vartype@mdl_one_value(test_o_dbl)
mes ret_vartype@mdl_one_value(test_o_str)
mes tostr_vartype@mdl_one_value(test_o_int)
mes tostr_vartype@mdl_one_value(test_o_dbl)
mes tostr_vartype@mdl_one_value(test_o_str)
#endif
**サブな本体 [#v426454a]
#include "mdl_value.as"
#include "mdl_value.as" //includeガードが効いてるかのTEST
#ifndef _MY_WS_DEFINE_
#define _MY_WS_DEFINE_
// knowbugが配列インスタンスを800くらいまでしか表示して...
#define STACK_MEMBERS 750
#define HEAP_MEMBERS 400
#define MAX_LABELS 200
#define MAX_LABEL_LENGTH 500
#define MAX_INSTRUCTIONS 24
#define MAX_INSTRUCTION_LENGTH 5
#define MAX_NESTED_SUBROUTINES 20
#endif
//struct heap_model {
// long long* address;
// long long* value;
// long elements;
//} heap;
#module heap_model heap_size,heap_address,heap_value,hea...
#modinit int p_size
heap_size = p_size
repeat p_size
newmod heap_address,mdl_one_value
newmod heap_value,mdl_one_value
loop
heap_elements=0
return
#modcfunc local get_size
return heap_size
#modfunc local set_address var p_value,int p_index
if p_index < 0:return -1
if p_index >= heap_size:return -1
set@mdl_one_value heap_address.p_index,p_value
return 1
#modfunc local set_value var p_value,int p_index
if p_index < 0:return -1
if p_index >= heap_size:return -1
set@mdl_one_value heap_value.p_index,p_value
return 1
#modfunc local set_elements int p_int
heap_elements = p_int
return
#modcfunc local get_address int p_index
if p_index < 0:return -1
if p_index >= heap_size:return -1
return get@mdl_one_value(heap_address.p_index)
#modcfunc local get_value int p_index
if p_index < 0:return -1
if p_index >= heap_size:return -1
return get@mdl_one_value(heap_value.p_index)
#modcfunc local get_elements
return heap_elements
//bool heap_put(long long val, long long addr)
//{
// // First see if the address is already in use
// for (int i = 0; i < heap.elements; i++) {
// if (heap.address[i] == addr) {
// heap.value[i] = val;
// return true;
// }
// // If not, then it needs to be added if there is room...
// if (heap.elements < HEAP_MEMBERS) {
// int i = heap.elements;
// heap.address[i] = addr;
// heap.value[i] = val;
// heap.elements++;
// return true;
// }
// return false;
//}
#modfunc local put var _p_val,int _p_addr,local loc_e,lo...
// First see if the address is already in use
loc_e=heap_elements
for i,0,loc_e,1
loc_ad=get@mdl_one_value(heap_address.i)
if loc_ad == _p_addr {
set@mdl_one_value heap_address.i,_p_addr
set@mdl_one_value heap_value.i,_p_val
return 1
}
next
// If not, then it needs to be added if there is room l...
if loc_e < heap_size {
i = loc_e
loc_ad_b=_p_addr
set@mdl_one_value heap_address.i,loc_ad_b
set@mdl_one_value heap_value.i,_p_val
loc_e2 = heap_elements
loc_e2++
heap_elements=loc_e2
return 1
}
return 0
// Trying to get data from an address that doesn't exist...
//long long heap_get(long long addr)
//{
// for (int i = 0; i < HEAP_MEMBERS; i++) {
// if (heap.address[i] == addr) return heap.value[i];
// }
// return 0;
//}
#modcfunc local get_youso int _p_addr,local loc_ad
for i,0,heap_size,1
loc_ad=get@mdl_one_value(heap_address.i)
if loc_ad == _p_addr{
return get@mdl_one_value(heap_value.i)
}
next
return 0
#modcfunc local ret_vartype_address int p_index
if p_index < 0:return -1
if p_index >= heap_size:return -1
return ret_vartype@mdl_one_value(heap_address.p_index)
#modcfunc local tostr_vartype_address int p_index
return tostr_vartype@mdl_one_value(heap_address.p_index)
#modcfunc local ret_vartype_value int p_index
if p_index < 0:return -1
if p_index >= heap_size:return -1
return ret_vartype@mdl_one_value(heap_value.p_index)
#modcfunc local tostr_vartype_value int p_index
return tostr_vartype@mdl_one_value(heap_value.p_index)
#modfunc local cleanup
i=0
for i,heap_size-1,-1,-1
delmod heap_address.i
delmod heap_value.i
next
return
#global
//↓重要w
newmod heap,heap_model,HEAP_MEMBERS@
#if 1
repeat 5
tmp=cnt*3
set_address@heap_model heap,tmp,cnt
tmp=cnt*4
set_value@heap_model heap,tmp,cnt
loop
set_elements@heap_model heap,7
repeat 10
logmes "heap address "+cnt+":"+get_address@heap_model(he...
loop
repeat 10
logmes "heap value "+cnt+":"+get_value@heap_model(heap,c...
loop
logmes "heap elements:"+get_elements@heap_model(heap)
#endif
//bool create_heap(void)
//{
// if (heap.address = (long long*)calloc(HEAP_MEMBERS, s...
// if (heap.value = (long long*)calloc(HEAP_MEMBERS, si...
// heap.elements = 0;
// return true;
// }
// free (heap.address);
// }
// return false;
//}
#module
#deffunc create_heap local loc_tmp
// stackのsizeは途中から変えれなくなったw
loc_tmp=0
repeat HEAP_MEMBERS
set_address@heap_model heap@,loc_tmp,cnt
set_value@heap_model heap@,loc_tmp,cnt
loop
set_elements@heap_model heap@,0
return 1
#deffunc heap_set_elements int _p_int
set_elements@heap_model heap@,_p_int
return
#defcfunc heap_get_elements
return set_elements@heap_model(heap@)
#defcfunc heap_get_size int _p_int
get_size@heap_model(heap@)
return
#deffunc heap_put var p_val,int p_addr
put@heap_model heap@,p_val,p_addr
return stat
#defcfunc heap_get int p_addr,local loc_size
return get_youso@heap_model(heap@,p_addr)
#defcfunc heap_ret_vartype_address int _p_int
return ret_vartype_address@heap_model(heap@,_p_int)
#defcfunc heap_tostr_vartype_address int _p_int
return tostr_vartype_address@heap_model(heap@,_p_int)
#defcfunc heap_ret_vartype_value int _p_int
return ret_vartype_value@heap_model(heap@,_p_int)
#defcfunc heap_tostr_vartype_value int _p_int
return tostr_vartype_value@heap_model(heap@,_p_int)
#deffunc heap_cleanup
cleanup@heap_model(heap@)
delmod heap@
return
#global
#if 1
create_heap
baz=10.23
put@heap_model heap@,baz,1
baz=123.456
put@heap_model heap@,baz,2
baz="abcde"
put@heap_model heap@,baz,3
foo=30
heap_put foo,4
foo=345.678
heap_put foo,5
foo="fghij"
heap_put foo,6
foo=1
logmes "heap get "+get_youso@heap_model(heap@,foo)
foo=2
logmes "heap get "+get_youso@heap_model(heap@,foo)
foo=3
logmes "heap get "+get_youso@heap_model(heap@,foo)
foo=4
logmes "heap get "+heap_get(foo)
foo=5
logmes "heap get "+heap_get(foo)
foo=6
logmes "heap get "+heap_get(foo)
foo=1
logmes "heap type "+heap_ret_vartype_value(foo)
logmes "heap type "+heap_tostr_vartype_value(foo)
logmes "heap type "+heap_ret_vartype_address(foo)
logmes "heap type "+heap_tostr_vartype_address(foo)
logmes "heap type "+tostr_vartype_value@heap_model(heap@...
logmes "heap type "+ret_vartype_value@heap_model(heap@,f...
logmes "heap type "+tostr_vartype_address@heap_model(hea...
logmes "heap type "+ret_vartype_address@heap_model(heap@...
#endif
#if 0
heap_cleanup
#endif
終了行:
*white_space企画の現状 heapモジュール ver 0.1.2.1 [#h718...
white_spaceでheap構造をデータ型の一つにしてるので
頑張って書きました
モジュール変数で要素を管理してるモジュールと
ラップしてモジュール変数決め打ちモジュールの二つを記述し...
stackとheapのスクリプト大体出来たから やっと次に進めそう...
**サブルーチン [#ya117b7b]
#ifndef _mdl_value_H_
#define _mdl_value_H_
#module mdl_one_value mem_value
#modinit
return
#modfunc local set var p
mem_value=p
return
#modcfunc local get
return mem_value
#modcfunc local ret_vartype
return vartype(mem_value)
#modcfunc local tostr_vartype
switch vartype(mem_value)
case 1:return "label"
case 2:return "str"
case 3:return "dbl"
case 4:return "int"
case 5:return "modvar"
swend
return "other"
#global
#endif
#if 0
newmod test_o_int,mdl_one_value
newmod test_o_dbl,mdl_one_value
newmod test_o_str,mdl_one_value
a=1
set@mdl_one_value test_o_int,a
b=1.23
set@mdl_one_value test_o_dbl,b
c="HELLO"
set@mdl_one_value test_o_str,c
mes get@mdl_one_value(test_o_int)
mes get@mdl_one_value(test_o_dbl)
mes get@mdl_one_value(test_o_str)
mes ret_vartype@mdl_one_value(test_o_int)
mes ret_vartype@mdl_one_value(test_o_dbl)
mes ret_vartype@mdl_one_value(test_o_str)
mes tostr_vartype@mdl_one_value(test_o_int)
mes tostr_vartype@mdl_one_value(test_o_dbl)
mes tostr_vartype@mdl_one_value(test_o_str)
#endif
**サブな本体 [#v426454a]
#include "mdl_value.as"
#include "mdl_value.as" //includeガードが効いてるかのTEST
#ifndef _MY_WS_DEFINE_
#define _MY_WS_DEFINE_
// knowbugが配列インスタンスを800くらいまでしか表示して...
#define STACK_MEMBERS 750
#define HEAP_MEMBERS 400
#define MAX_LABELS 200
#define MAX_LABEL_LENGTH 500
#define MAX_INSTRUCTIONS 24
#define MAX_INSTRUCTION_LENGTH 5
#define MAX_NESTED_SUBROUTINES 20
#endif
//struct heap_model {
// long long* address;
// long long* value;
// long elements;
//} heap;
#module heap_model heap_size,heap_address,heap_value,hea...
#modinit int p_size
heap_size = p_size
repeat p_size
newmod heap_address,mdl_one_value
newmod heap_value,mdl_one_value
loop
heap_elements=0
return
#modcfunc local get_size
return heap_size
#modfunc local set_address var p_value,int p_index
if p_index < 0:return -1
if p_index >= heap_size:return -1
set@mdl_one_value heap_address.p_index,p_value
return 1
#modfunc local set_value var p_value,int p_index
if p_index < 0:return -1
if p_index >= heap_size:return -1
set@mdl_one_value heap_value.p_index,p_value
return 1
#modfunc local set_elements int p_int
heap_elements = p_int
return
#modcfunc local get_address int p_index
if p_index < 0:return -1
if p_index >= heap_size:return -1
return get@mdl_one_value(heap_address.p_index)
#modcfunc local get_value int p_index
if p_index < 0:return -1
if p_index >= heap_size:return -1
return get@mdl_one_value(heap_value.p_index)
#modcfunc local get_elements
return heap_elements
//bool heap_put(long long val, long long addr)
//{
// // First see if the address is already in use
// for (int i = 0; i < heap.elements; i++) {
// if (heap.address[i] == addr) {
// heap.value[i] = val;
// return true;
// }
// // If not, then it needs to be added if there is room...
// if (heap.elements < HEAP_MEMBERS) {
// int i = heap.elements;
// heap.address[i] = addr;
// heap.value[i] = val;
// heap.elements++;
// return true;
// }
// return false;
//}
#modfunc local put var _p_val,int _p_addr,local loc_e,lo...
// First see if the address is already in use
loc_e=heap_elements
for i,0,loc_e,1
loc_ad=get@mdl_one_value(heap_address.i)
if loc_ad == _p_addr {
set@mdl_one_value heap_address.i,_p_addr
set@mdl_one_value heap_value.i,_p_val
return 1
}
next
// If not, then it needs to be added if there is room l...
if loc_e < heap_size {
i = loc_e
loc_ad_b=_p_addr
set@mdl_one_value heap_address.i,loc_ad_b
set@mdl_one_value heap_value.i,_p_val
loc_e2 = heap_elements
loc_e2++
heap_elements=loc_e2
return 1
}
return 0
// Trying to get data from an address that doesn't exist...
//long long heap_get(long long addr)
//{
// for (int i = 0; i < HEAP_MEMBERS; i++) {
// if (heap.address[i] == addr) return heap.value[i];
// }
// return 0;
//}
#modcfunc local get_youso int _p_addr,local loc_ad
for i,0,heap_size,1
loc_ad=get@mdl_one_value(heap_address.i)
if loc_ad == _p_addr{
return get@mdl_one_value(heap_value.i)
}
next
return 0
#modcfunc local ret_vartype_address int p_index
if p_index < 0:return -1
if p_index >= heap_size:return -1
return ret_vartype@mdl_one_value(heap_address.p_index)
#modcfunc local tostr_vartype_address int p_index
return tostr_vartype@mdl_one_value(heap_address.p_index)
#modcfunc local ret_vartype_value int p_index
if p_index < 0:return -1
if p_index >= heap_size:return -1
return ret_vartype@mdl_one_value(heap_value.p_index)
#modcfunc local tostr_vartype_value int p_index
return tostr_vartype@mdl_one_value(heap_value.p_index)
#modfunc local cleanup
i=0
for i,heap_size-1,-1,-1
delmod heap_address.i
delmod heap_value.i
next
return
#global
//↓重要w
newmod heap,heap_model,HEAP_MEMBERS@
#if 1
repeat 5
tmp=cnt*3
set_address@heap_model heap,tmp,cnt
tmp=cnt*4
set_value@heap_model heap,tmp,cnt
loop
set_elements@heap_model heap,7
repeat 10
logmes "heap address "+cnt+":"+get_address@heap_model(he...
loop
repeat 10
logmes "heap value "+cnt+":"+get_value@heap_model(heap,c...
loop
logmes "heap elements:"+get_elements@heap_model(heap)
#endif
//bool create_heap(void)
//{
// if (heap.address = (long long*)calloc(HEAP_MEMBERS, s...
// if (heap.value = (long long*)calloc(HEAP_MEMBERS, si...
// heap.elements = 0;
// return true;
// }
// free (heap.address);
// }
// return false;
//}
#module
#deffunc create_heap local loc_tmp
// stackのsizeは途中から変えれなくなったw
loc_tmp=0
repeat HEAP_MEMBERS
set_address@heap_model heap@,loc_tmp,cnt
set_value@heap_model heap@,loc_tmp,cnt
loop
set_elements@heap_model heap@,0
return 1
#deffunc heap_set_elements int _p_int
set_elements@heap_model heap@,_p_int
return
#defcfunc heap_get_elements
return set_elements@heap_model(heap@)
#defcfunc heap_get_size int _p_int
get_size@heap_model(heap@)
return
#deffunc heap_put var p_val,int p_addr
put@heap_model heap@,p_val,p_addr
return stat
#defcfunc heap_get int p_addr,local loc_size
return get_youso@heap_model(heap@,p_addr)
#defcfunc heap_ret_vartype_address int _p_int
return ret_vartype_address@heap_model(heap@,_p_int)
#defcfunc heap_tostr_vartype_address int _p_int
return tostr_vartype_address@heap_model(heap@,_p_int)
#defcfunc heap_ret_vartype_value int _p_int
return ret_vartype_value@heap_model(heap@,_p_int)
#defcfunc heap_tostr_vartype_value int _p_int
return tostr_vartype_value@heap_model(heap@,_p_int)
#deffunc heap_cleanup
cleanup@heap_model(heap@)
delmod heap@
return
#global
#if 1
create_heap
baz=10.23
put@heap_model heap@,baz,1
baz=123.456
put@heap_model heap@,baz,2
baz="abcde"
put@heap_model heap@,baz,3
foo=30
heap_put foo,4
foo=345.678
heap_put foo,5
foo="fghij"
heap_put foo,6
foo=1
logmes "heap get "+get_youso@heap_model(heap@,foo)
foo=2
logmes "heap get "+get_youso@heap_model(heap@,foo)
foo=3
logmes "heap get "+get_youso@heap_model(heap@,foo)
foo=4
logmes "heap get "+heap_get(foo)
foo=5
logmes "heap get "+heap_get(foo)
foo=6
logmes "heap get "+heap_get(foo)
foo=1
logmes "heap type "+heap_ret_vartype_value(foo)
logmes "heap type "+heap_tostr_vartype_value(foo)
logmes "heap type "+heap_ret_vartype_address(foo)
logmes "heap type "+heap_tostr_vartype_address(foo)
logmes "heap type "+tostr_vartype_value@heap_model(heap@...
logmes "heap type "+ret_vartype_value@heap_model(heap@,f...
logmes "heap type "+tostr_vartype_address@heap_model(hea...
logmes "heap type "+ret_vartype_address@heap_model(heap@...
#endif
#if 0
heap_cleanup
#endif
ページ名: