unsafe: tag with unsafe{} some more pointer manipulations
parent
949ed90b51
commit
276c1de190
|
@ -478,11 +478,13 @@ fn test_reverse() {
|
||||||
|
|
||||||
fn test_bytes_to_string() {
|
fn test_bytes_to_string() {
|
||||||
mut buf := vcalloc(10)
|
mut buf := vcalloc(10)
|
||||||
buf[0] = `h`
|
unsafe {
|
||||||
buf[1] = `e`
|
buf[0] = `h`
|
||||||
buf[2] = `l`
|
buf[1] = `e`
|
||||||
buf[3] = `l`
|
buf[2] = `l`
|
||||||
buf[4] = `o`
|
buf[3] = `l`
|
||||||
|
buf[4] = `o`
|
||||||
|
}
|
||||||
assert string(buf) == 'hello'
|
assert string(buf) == 'hello'
|
||||||
assert string(buf, 2) == 'he'
|
assert string(buf, 2) == 'he'
|
||||||
bytes := [`h`, `e`, `l`, `l`, `o`]
|
bytes := [`h`, `e`, `l`, `l`, `o`]
|
||||||
|
|
|
@ -381,12 +381,12 @@ fn (cb &Clipboard) pick_target(prop Property) C.Atom {
|
||||||
//See if this data type is allowed and of higher priority (closer to zero)
|
//See if this data type is allowed and of higher priority (closer to zero)
|
||||||
//than the present one.
|
//than the present one.
|
||||||
|
|
||||||
if cb.is_supported_target(atom_list[i]) {
|
target := unsafe{ atom_list[i] }
|
||||||
index := cb.get_target_index(atom_list[i])
|
if cb.is_supported_target(target) {
|
||||||
if priority > index && index >= 0
|
index := cb.get_target_index(target)
|
||||||
{
|
if priority > index && index >= 0 {
|
||||||
priority = index
|
priority = index
|
||||||
to_be_requested = atom_list[i]
|
to_be_requested = target
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,5 +36,5 @@ fn getrandom(bytes_needed int, buffer voidptr) int {
|
||||||
if bytes_needed > read_batch_size {
|
if bytes_needed > read_batch_size {
|
||||||
panic('getrandom() dont request more than $read_batch_size bytes at once.')
|
panic('getrandom() dont request more than $read_batch_size bytes at once.')
|
||||||
}
|
}
|
||||||
return C.syscall(C.SYS_getrandom, buffer, bytes_needed, 0)
|
return unsafe { C.syscall(C.SYS_getrandom, buffer, bytes_needed, 0) }
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,7 +48,7 @@ fn (dtp DTP) read() []byte {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
for i in 0 .. len {
|
for i in 0 .. len {
|
||||||
data << buf[i]
|
data << unsafe { buf[i] }
|
||||||
}
|
}
|
||||||
unsafe {
|
unsafe {
|
||||||
free(buf)
|
free(buf)
|
||||||
|
|
|
@ -2,17 +2,17 @@ module picohttpparser
|
||||||
|
|
||||||
[inline] [unsafe_fn]
|
[inline] [unsafe_fn]
|
||||||
fn cpy(dst, src byteptr, len int) int {
|
fn cpy(dst, src byteptr, len int) int {
|
||||||
C.memcpy(dst, src, len)
|
unsafe { C.memcpy(dst, src, len) }
|
||||||
return len
|
return len
|
||||||
}
|
}
|
||||||
|
|
||||||
[inline]
|
[inline]
|
||||||
pub fn cmp(dst, src string) bool {
|
pub fn cmp(dst, src string) bool {
|
||||||
if dst.len != src.len { return false }
|
if dst.len != src.len { return false }
|
||||||
return C.memcmp(dst.str, src.str, src.len) == 0
|
return unsafe { C.memcmp(dst.str, src.str, src.len) == 0 }
|
||||||
}
|
}
|
||||||
|
|
||||||
[inline]
|
[inline]
|
||||||
pub fn cmpn(dst, src string, n int) bool {
|
pub fn cmpn(dst, src string, n int) bool {
|
||||||
return C.memcmp(dst.str, src.str, n) == 0
|
return unsafe { C.memcmp(dst.str, src.str, n) == 0 }
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,9 @@ fn test_autolocked_array() {
|
||||||
for {
|
for {
|
||||||
mut finished_threads := 0
|
mut finished_threads := 0
|
||||||
rlock abc {
|
rlock abc {
|
||||||
finished_threads = abc[0]
|
finished_threads = unsafe {
|
||||||
|
abc[0]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if finished_threads == 2 {
|
if finished_threads == 2 {
|
||||||
break
|
break
|
||||||
|
|
|
@ -17,14 +17,16 @@ fn test_autolocked_array_2() {
|
||||||
go inc_elements(shared abc, 1, sem)
|
go inc_elements(shared abc, 1, sem)
|
||||||
go inc_elements(shared abc, 2, sem)
|
go inc_elements(shared abc, 2, sem)
|
||||||
for _ in 0 .. iterations_per_thread2 {
|
for _ in 0 .. iterations_per_thread2 {
|
||||||
abc[2]++
|
unsafe {
|
||||||
|
abc[2]++
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// wait for the 2 coroutines to finish using the semaphore
|
// wait for the 2 coroutines to finish using the semaphore
|
||||||
for _ in 0 .. 2 {
|
for _ in 0 .. 2 {
|
||||||
sem.wait()
|
sem.wait()
|
||||||
}
|
}
|
||||||
rlock abc {
|
rlock abc {
|
||||||
assert abc[1] == iterations_per_thread2
|
assert unsafe { abc[1] } == iterations_per_thread2
|
||||||
assert abc[2] == 2 * iterations_per_thread2
|
assert unsafe { abc[2] } == 2 * iterations_per_thread2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@ fn test_semaphore() {
|
||||||
sem := sync.new_semaphore()
|
sem := sync.new_semaphore()
|
||||||
go run_forever(shared abc, sem)
|
go run_forever(shared abc, sem)
|
||||||
for _ in 0 .. 1000 {
|
for _ in 0 .. 1000 {
|
||||||
abc[0]--
|
unsafe { abc[0]-- }
|
||||||
}
|
}
|
||||||
// wait for the 2 coroutines to finish using the semaphore
|
// wait for the 2 coroutines to finish using the semaphore
|
||||||
stopwatch := time.new_stopwatch({})
|
stopwatch := time.new_stopwatch({})
|
||||||
|
|
|
@ -20,14 +20,19 @@ fn test_shared_array() {
|
||||||
go incr(shared foo, 1)
|
go incr(shared foo, 1)
|
||||||
for _ in 0 .. 50000 {
|
for _ in 0 .. 50000 {
|
||||||
lock foo {
|
lock foo {
|
||||||
foo[0] -= 2
|
unsafe {
|
||||||
foo[1] += 3
|
foo[0] -= 2
|
||||||
|
foo[1] += 3
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mut finished_threads := 0
|
mut finished_threads := 0
|
||||||
for {
|
for {
|
||||||
rlock foo {
|
rlock foo {
|
||||||
finished_threads = foo[2]
|
finished_threads = unsafe {
|
||||||
|
foo[2]
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
if finished_threads == 4 {
|
if finished_threads == 4 {
|
||||||
break
|
break
|
||||||
|
@ -35,7 +40,15 @@ fn test_shared_array() {
|
||||||
time.sleep_ms(100)
|
time.sleep_ms(100)
|
||||||
}
|
}
|
||||||
rlock foo {
|
rlock foo {
|
||||||
assert foo[0] == 100010
|
f0 := unsafe {
|
||||||
assert foo[1] == 350020
|
foo[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
f1 := unsafe {
|
||||||
|
foo[1]
|
||||||
|
}
|
||||||
|
|
||||||
|
assert f0 == 100010
|
||||||
|
assert f1 == 350020
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue