Skip to content

Commit

Permalink
examples: show how to create and pass a V string to a V function, and…
Browse files Browse the repository at this point in the history
… then get back a V string in Python
  • Loading branch information
spytheman committed Jun 3, 2024
1 parent 193a99d commit cc92dbc
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 0 deletions.
14 changes: 14 additions & 0 deletions examples/call_v_from_python/test.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,26 @@
from ctypes import *
import math, os

## Load the V shared library:
so_file="./test.so"
if os.name=="nt":
so_file="./test.dll"
lib = CDLL(so_file)

## Pass an integer to a V function, and receiving back an integer:
print("lib.square(10) result is", lib.square(10))
assert lib.square(10) == 100, "Cannot validate V square()."

## Pass a floating point number to a V function:
lib.sqrt_of_sum_of_squares.restype = c_double
assert lib.sqrt_of_sum_of_squares(c_double(1.1), c_double(2.2)) == math.sqrt(1.1*1.1 + 2.2*2.2), "Cannot validate V sqrt_of_sum_of_squares()."

## Passing a V string to a V function, and receiving back a V string:
class VString(Structure):
_fields_ = [("str", c_char_p), ("len", c_int)]

lib.process_v_string.argtypes = [VString]
lib.process_v_string.restype = VString

assert lib.process_v_string(VString(b'World', 5)).str == b'v World v'
print('Hello', str(lib.process_v_string(VString(b'World', 5)).str, 'utf-8'))
7 changes: 7 additions & 0 deletions examples/call_v_from_python/test.v
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
module test

// Note: compile this with `v -d no_backtrace -shared test.v`
import math

@[export: 'square']
Expand All @@ -11,3 +12,9 @@ fn square(i int) int {
fn sqrt_of_sum_of_squares(x f64, y f64) f64 {
return math.sqrt(x * x + y * y)
}

// you do not have to use the same name in the export attribute
@[export: 'process_v_string']
fn work(s string) string {
return 'v ${s} v'
}

0 comments on commit cc92dbc

Please sign in to comment.