Created
January 16, 2020 08:53
-
-
Save spytheman/c610056f2fa45d0b012b182e98532620 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import time | |
| type Task fn (data voidptr) | |
| pub fn (t Task) str() string { | |
| return 'Task{ ${ptr_str(t)} }' | |
| } | |
| fn task_default(data voidptr){ | |
| // println('task_default: $data') | |
| } | |
| fn task_zero(data voidptr){ | |
| mut i := &int(data) | |
| *i = 0 | |
| } | |
| fn task_multiply_int(data voidptr){ | |
| mut i := &int(data) | |
| *i = *i * 100 | |
| } | |
| struct Job { | |
| mut: | |
| task Task = task_default as Task | |
| data voidptr | |
| } | |
| fn (j Job) execute(){ | |
| t := j.task | |
| if isnil(t){ | |
| return | |
| } | |
| t( j.data ) | |
| } | |
| fn (jobs []Job) execute(){ | |
| for j in jobs { | |
| j.execute() | |
| } | |
| } | |
| fn main(){ | |
| n := 1000*1000 | |
| mut data := [0].repeat(n) | |
| mut jobs := [Job{ data:voidptr(0) }].repeat(n) | |
| for i:=0; i<jobs.len; i++{ | |
| data[i] = i | |
| jobs[i].data = &data[i] | |
| match i % 3 { | |
| 0 { jobs[i].task = task_zero as Task } | |
| 1 { jobs[i].task = task_multiply_int as Task } | |
| else {} | |
| } | |
| } | |
| println('Before: data[at start]:' + data[0..10].str() ) | |
| println('Before: data[at end]:' + data[ data.len - 10 .. data.len].str() ) | |
| sticks := time.ticks() | |
| jobs.execute() | |
| eticks := time.ticks() | |
| println('After : data[at start]:' + data[0..10].str() ) | |
| println('After : data[at end]:' + data[ data.len - 10 .. data.len].str() ) | |
| println('Execution took: ${eticks-sticks}ms') | |
| } |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
On my Intel(R) Core(TM) i3-3225 CPU @ 3.30GHz, I get: