diff --git a/TODOS.md b/TODOS.md index 6ea43b2..af528ec 100644 --- a/TODOS.md +++ b/TODOS.md @@ -16,7 +16,7 @@ - [ ] Only publish referenced assets. - [ ] Split `load_page` into frontmatter-parse + body-process phases so draft pages can skip the markdown pipeline entirely - [ ] Use spall to find ways to reduce run time. -- [ ] Consider using `#soa` for Page lists. +- [x] Consider using `#soa` for Page lists. - [ ] too many `write_string` calls in `highlight_block` - [ ] return `src: cstring` from `load_query`. - [ ] Improve `unescape_html` with simd. diff --git a/content.odin b/content.odin index 2d315c4..a14ed1e 100644 --- a/content.odin +++ b/content.odin @@ -37,7 +37,7 @@ Pending_File :: struct { // site_load_content reads the content directory and populates site.pages. // Drafts are excluded unless .Drafts is enabled. site_load_content :: proc(site: ^Site) { - site.pages = make([dynamic]Page, 0, 8, site_allocator(site)) + site.pages = make(#soa[dynamic]Page, 0, 8, site_allocator(site)) // Phase 0: Enumerate content files pending := make([dynamic]Pending_File, 0, 16, context.temp_allocator) diff --git a/render.odin b/render.odin index 755e04e..604145c 100644 --- a/render.odin +++ b/render.odin @@ -393,11 +393,11 @@ get_year :: proc(iso: string) -> string { return iso[:4] } -sort_pages_by_date :: proc(pages: []Page) { +sort_pages_by_date :: proc(pages: #soa[]Page) { for i in 1 ..< len(pages) { key := pages[i] j := i - 1 - for j >= 0 && pages[j].date < key.date { + for j >= 0 && pages.date[j] < key.date { pages[j + 1] = pages[j] j -= 1 } diff --git a/site.odin b/site.odin index 46765de..77475b4 100644 --- a/site.odin +++ b/site.odin @@ -16,7 +16,7 @@ import md "markdown" // Site is the primary workhorse. Site :: struct { arena: mem.Dynamic_Arena, - pages: [dynamic]Page, + pages: #soa[dynamic]Page, modules: [dynamic]string, vfs: VFS, title: string,