| CONCEPT |
| lwobjects |
| |
| INTRODUCTION |
| Lightweight objects are a cross between regular objects and structs. |
| Like regular objects they are build from programs (.c files) and |
| encapsulate data und functions. Like structs they are automatically |
| destructed, they can be copied and saved. |
| |
| As with regular objects its variables are hidden from outside |
| objects, its functions can be called with call_other() and related |
| efuns. |
| |
| Lightweight objects are passed by reference. |
| |
| |
| DEFINITION |
| Lightweight objects are created from a program, i.e. an LPC file. |
| This file needs to have the pragma |
| |
| #pragma lightweight |
| |
| to allow being used as a lightweight object. This pragma implies |
| the no_clone pragma (which can be overridden with the clone pragma). |
| |
| There are no restriction on the program itself. It can inherit |
| other programs. Those programs don't need to have that pragma, |
| but the compiler might warn about unsuitable programs. |
| |
| |
| USAGE |
| A lightweight objects is created by calling the efun new_lwobject(): |
| |
| lwobject lwo = new_lwobject("/obj/foo"); |
| |
| The efun new_lwobject() will load the file to create a blueprint |
| from it (which is a regular object) and then creates a lightweight |
| object therefrom. |
| |
| The efun can be given optional arguments that are passed to the |
| H_CREATE_LWOBJECT driver hook. |
| |
| Functions of the lightweight object can be called with the efuns |
| call_other() and its companions and operators: |
| |
| lwo->fun(); |
| lwo.fun(); |
| |
| |
| MISCELLANEOUS |
| Only declarative casts to lwobject are possible, there is no |
| conversion of any other type to lwobjects available (therefore |
| there is no to_lwobject() efun). |
| |
| Support for lightweight objects is signaled by the macro |
| __LPC_LWOBJECTS__. |
| |
| Lightweight objects have a UID and EUID and therefore can also |
| do file operations or create new objects themselves. |
| |
| Lightweight objects can be serialized with save_value(), so |
| any outside program can inspect its variables. To really hide |
| variable contents they must be nosave. |
| |
| |
| HISTORY |
| Lightweight objects were introduced in LDMud 3.6.5. |
| |
| |
| SEE ALSO |
| structs(LPC), new_lwobject(E), call_other(E), configure_lwobject(E), |
| lwobject_info(E) |