lune/crates/lune-std-ffi
2024-10-13 04:07:59 +00:00
..
src Add lune-std-ffi crate (#243) 2024-10-13 04:07:59 +00:00
Cargo.toml Add lune-std-ffi crate (#243) 2024-10-13 04:07:59 +00:00
readme.md Add lune-std-ffi crate (#243) 2024-10-13 04:07:59 +00:00
todo.md Add lune-std-ffi crate (#243) 2024-10-13 04:07:59 +00:00

TODO: rewrite docs

Raw

Data received from external. You can move this data into a box, use it as a ref, or change it directly to a Lua value. The raw data is not on Lua's heap.

Raw:toRef() Convert data into ref. it allocate new lua userdata

Raw:toBox() Convert data into box. it allocate new lua userdata

Raw:intoBox() Raw:intoRef()

See type:fromRaw()

Box

ffi.box(size)

Create new userdata with sized by size argument. Box is untyped, and have no ABI information. You can write some data into box with type

All operation with box will boundary checked. GC will free heap well.

일반적으로 포인터를 넘겨주기 위해서 사용됩니다. 박스의 공간은 ref 할 수 있으며. 함수를 수행한 후 루아에서 읽어볼 수 있습니다.

:zero()

박스를 0 으로 채워넣습니다. 기본적으로 박스는 초기화될 때 0 으로 채워지기 때문에 박스를 다시 0 으로 초기화하고 싶을 경우에 사용하십시오.

:copy(targetbox,size,offset?=0,targetoffset?=0)

박스 안의 값을 다른 박스에 복사합니다. 바운더리가 확인되어지므로 안전합니다.

.size

이 박스의 크기입니다.

:ref(offset?=0) => ref

이 박스를 참조합니다. 참조가 살아있는 동안 박스는 수거되지 않습니다. 일반적으로 외부의 함수에 포인터를 넘겨주기 위해서 사용됩니다.

more stuffs (not planned at this time)

ref=>buffer conversion, or bit/byte related?

Ref (Unsafe)

바운더리를 처리하지 않는 포인터입니다. 외부에서 받은 포인터, 또는 박스로부터 만들어진 포인터입니다. ref 는 바운더리를 검사하지 않으므로 안전하지 않습니다.

:offset(bytes)

이 ref 와 상대적인 위치에 있는 ref 를 구합니다.

:writefromRef()

다른 ref 안의 값을 읽어와 이 ref 안에 씁니다. 아래와 비슷한 연산을 합니다

int a = 100,b;

:writefromBox()

box 값을 읽어와서 쓰기

Type

type is abstract class that helps encoding data into box or decode data from box

:toBox(luavalue)

Convert lua value to box. box will sized with type.size

:fromBox(box,offset?=0)

Read data from box, and convert into lua value. Boundary will checked

:intoBox(luavalue,box,offset?=0)

Convert lua value, and write into box Boundary will checked

:fromRef(ref,offset?=0)

포인터가 가르키는 곳의 데이터를 읽어서 루아의 데이터로 변환합니다.

:intoRef(luavalue,ref,offset?=0)

포인터가 가르키는 곳에 데이터를 작성합니다.

:fromRaw(raw,offset?=0)

:ptr() -> Ptr

Get pointer type

:arr(len) -> Arr

Get array type

.size

Byte size of this type. you can initialize box with

:cast(box,type) TODO

Ptr

Pointer type of some type.

Ptr is not data converter. It only works for type hint of struct or fn

.inner

Inner type

.size

Size of usize

:ptr() :arr()

Arr

Void

ffi.void

Zero sized type.

Fn

Prototype type of some function. converts lua function into native function pointer or native function pointer into lua function.

ffi.fn({ type }, type) -> fn

:toLua( ref ) -> luafunction :toBox( luafunction ) -> ref

TODO: rust, and another ABI support