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 and 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.

        Prior to restoring or copying a lightweight object all variables
        of the new lightweight object will be initialized regularly first
        when pragma init_variables is in effect.


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)