start standardizing how we manage item arrays

I need to start treating them as postings lists (https://en.wikipedia.org/wiki/Inverted_index)
This commit is contained in:
Kartik K. Agaram 2021-08-13 08:27:50 -07:00
parent e2dd5420b2
commit c9e9b56123
2 changed files with 19 additions and 19 deletions

View File

@ -19,10 +19,10 @@ type environment {
fn initialize-environment _self: (addr environment), _items: (addr item-list) {
var self/esi: (addr environment) <- copy _self
var items/eax: (addr item-list) <- copy _items
var newest-item-a/eax: (addr int) <- get items, newest
var newest-item/eax: int <- copy *newest-item-a
var items-data-first-free-a/eax: (addr int) <- get items, data-first-free
var final-item/eax: int <- copy *items-data-first-free-a
var dest/edi: (addr int) <- get self, item-index
copy-to *dest, newest-item
copy-to *dest, final-item
}
### Render
@ -435,10 +435,10 @@ fn next-item _env: (addr environment), _items: (addr item-list) {
fn previous-item _env: (addr environment), _items: (addr item-list) {
var env/edi: (addr environment) <- copy _env
var items/esi: (addr item-list) <- copy _items
var newest-item-index-a/ecx: (addr int) <- get items, newest
var newest-item-index/ecx: int <- copy *newest-item-index-a
var items-data-first-free-a/ecx: (addr int) <- get items, data-first-free
var items-data-first-free/ecx: int <- copy *items-data-first-free-a
var dest/eax: (addr int) <- get env, item-index
compare *dest, newest-item-index
compare *dest, items-data-first-free
break-if->=
increment *dest
}
@ -491,12 +491,12 @@ fn page-up _env: (addr environment), _items: (addr item-list) {
var items-data-ah/eax: (addr handle array item) <- get items, data
var _items-data/eax: (addr array item) <- lookup *items-data-ah
var items-data/ebx: (addr array item) <- copy _items-data
var newest-item-index-a/esi: (addr int) <- get items, newest
var items-data-first-free-a/esi: (addr int) <- get items, data-first-free
var src/eax: (addr int) <- get env, item-index
var new-item-index/ecx: int <- copy *src
var y/edx: int <- copy 2
{
compare new-item-index, *newest-item-index-a
compare new-item-index, *items-data-first-free-a
break-if->
compare y, 0x28/screen-height-minus-menu
break-if->=

View File

@ -1,7 +1,7 @@
type channel {
name: (handle array byte)
posts: (handle array int) # item indices
newest-post-index: int
posts-first-free: int
}
type user {
@ -18,12 +18,12 @@ type item {
text: (handle array byte)
parent: int # item index
comments: (handle array int)
newest-comment-index: int
comments-first-free: int
}
type item-list {
data: (handle array item)
newest: int
data-first-free: int
}
# globals:
@ -135,7 +135,7 @@ fn parse in: (addr stream byte), users: (addr array user), channels: (addr array
}
loop
}
var dest/eax: (addr int) <- get items, newest
var dest/eax: (addr int) <- get items, data-first-free
copy-to *dest, item-idx
decrement *dest
}
@ -307,12 +307,12 @@ fn parse-item record: (addr stream byte), _channels: (addr array channel), _item
populate parent-comments-ah, 0x200/num-comments
parent-comments <- lookup *parent-comments-ah
}
var parent-newest-comment-index-addr/edi: (addr int) <- get parent-item, newest-comment-index
var parent-newest-comment-index/edx: int <- copy *parent-newest-comment-index-addr
var dest/eax: (addr int) <- index parent-comments, parent-newest-comment-index
var parent-comments-first-free-addr/edi: (addr int) <- get parent-item, comments-first-free
var parent-comments-first-free/edx: int <- copy *parent-comments-first-free-addr
var dest/eax: (addr int) <- index parent-comments, parent-comments-first-free
var src/ecx: int <- copy item-idx
copy-to *dest, src
increment *parent-newest-comment-index-addr
increment *parent-comments-first-free-addr
}
# channel name
skip-chars-matching-whitespace record
@ -333,10 +333,10 @@ fn parse-item record: (addr stream byte), _channels: (addr array channel), _item
var channel-offset/eax: (offset channel) <- compute-offset channels, channel-index
var channel/eax: (addr channel) <- index channels, channel-offset
var channel-posts-ah/ecx: (addr handle array int) <- get channel, posts
var channel-newest-post-index-addr/edx: (addr int) <- get channel, newest-post-index
var channel-newest-post-index/edx: int <- copy *channel-newest-post-index-addr
var channel-posts-first-free-addr/edx: (addr int) <- get channel, posts-first-free
var channel-posts-first-free/ebx: int <- copy *channel-posts-first-free-addr
var channel-posts/eax: (addr array int) <- lookup *channel-posts-ah
var dest/eax: (addr int) <- index channel-posts, channel-newest-post-index
var dest/eax: (addr int) <- index channel-posts, channel-posts-first-free
}
# user index
{