-! (c)Joe Groff bsd license
+! Copyright (C) Joe Groff.
+! See http://factorcode.org/license.txt for BSD license.
USING: alien classes classes.struct.private help.markup help.syntax
kernel libc math sequences ;
IN: classes.struct
$nl
"If a parameter is declared with a struct type, the parameter is passed by value. To pass a struct by reference, declare a parameter with a pointer to struct type."
$nl
-"If a C function is declared as returning a struct type, the struct is returned by value, and wrapped in an instance of the correct struct class automatically. If a C function is declared as returning a pointer to a struct, it will return an " { $link alien } " instance. This is because there is no way to distinguish between a pointer to a single struct and a pointer to an array of zero or more structs. It is up to the caller to wrap it in a struct, or a specialized array of structs, respectively."
+{ $heading "C functions returning structs" }
+"If a C function is declared as returning a struct type, the struct is returned by value, and wrapped in an instance of the correct struct class automatically. If a C function is declared as returning a pointer to a struct, it will return an " { $link alien } " instance. This is because there is no way to distinguish between a pointer to a single struct and a pointer to an array of zero or more structs. It is up to the caller to wrap it in a struct using " { $link memory>struct } ", or a specialized array of structs using " { $snippet "<direct-T-array>" } ", respectively."
$nl
"An example of a struct declaration:"
{ $code
"A C function which returns a struct by value:"
{ $code
"USING: alien.syntax ;"
- "FUNCTION: Point give_me_a_point ( c-string description ) ;"
+ "FUNCTION: Point give_me_a_point ( c-string description )"
}
"A C function which takes a struct parameter by reference:"
{ $code
- "FUNCTION: void print_point ( Point* p ) ;"
+ "FUNCTION: void print_point ( Point* p )"
} ;
ARTICLE: "classes.struct" "Struct classes"