New test.
[mono.git] / mono / docscripts / sources / mono-api-object.html
index 3bf55e13648b34a11037cadbe850d961e1bd9b35..ad5a6425cc3bdf41127441f3c4b0599f9947d326 100644 (file)
@@ -1,8 +1,88 @@
 <h1>Object API</h1>
 
+       <p>The object API deals with all the operations shared by
+       <a href="#objects">objects</a>, <a href="#valuetypes">value
+       types</a>, <a href="#arrays">arrays</a> and <a
+       href="#nullable">nullable types</a>.
+
+       <p>The object API has methods for accessing <a
+       href="#fields">fields</a>, <a
+       href="#properties">properties</a>, <a
+       href="events">events</a>, <a href="delegates">delegates</a>.
+
+       <p>There are some advanced uses that are useful to document
+       here dealing with <a href="async">AsyncResults</a> and <a
+       href="remote">remote fields</a>.
+       
+<h2>Synopsis</h2>
+
+<div class="header">
+#include &lt;metadata/object.h&gt;
+
+typedef struct MonoVTable MonoVTable;
+typedef struct _MonoThreadsSync MonoThreadsSync;
+
+typedef struct {
+       MonoVTable *vtable;
+       MonoThreadsSync *synchronisation;
+} MonoObject;
+
+typedef struct {
+       guint32 length;
+       guint32 lower_bound;
+} MonoArrayBounds;
+
+typedef struct {
+       MonoObject obj;
+       /* bounds is NULL for szarrays */
+       MonoArrayBounds *bounds;
+       /* total number of elements of the array */
+       guint32 max_length; 
+       /* we use double to ensure proper alignment on platforms that need it */
+       double vector [MONO_ZERO_LEN_ARRAY];
+} MonoArray;
+
+@API_IDX@
+</div>
+
+       <p>MonoObject is the base definition for all managed objects
+       in the Mono runtime, it represents the <a
+       href="http://www.mono-project.com/monodoc/T:System.Object">System.Object</a>
+       managed type.
+
+       <p>All objects that derive from <a
+       href="http://www.mono-project.com/monodoc/T:System.Object">System.Object</a>
+       do have this base definition.  Derived objects are declared
+       following the pattern where the parent class is the first
+       field of a structure definition, for example:
+
+       <div class="code">
+       typedef struct {
+               MonoObject parent;
+               int my_new_field;
+       } MyNewObject
+       </div>
+
+<a name="objects"></a>
 <h2>Core Object Methods</h2>
 
 <h4><a name="api:mono_object_new">mono_object_new</a></h4>
+
+       <p>For example, if you wanted to create an object of type
+       System.Version, you would use a piece of code like this:
+
+       <div class="code">
+MonoClass *version_class;
+MonoObject *result;
+
+/* Get the class from mscorlib */
+version_class = mono_class_from_name (mono_get_corlib (),
+       "System", "Version");
+
+/* Create an object of that class */
+result = mono_object_new (mono_domain_get (), version_class);
+       </div>
+
 <h4><a name="api:mono_object_new_alloc_specific">mono_object_new_alloc_specific</a></h4>
 <h4><a name="api:mono_object_new_fast">mono_object_new_fast</a></h4>
 <h4><a name="api:mono_object_new_from_token">mono_object_new_from_token</a></h4>
 <h4><a name="api:mono_object_is_alive">mono_object_is_alive</a></h4> 
 <h4><a name="api:mono_object_get_size">mono_object_get_size</a></h4>
 
+<a name="valuetypes"></a>
 <h2>Value Types</h2>
 
 <h4><a name="api:mono_value_box">mono_value_box</a></h4>
 <h4><a name="api:mono_value_copy">mono_value_copy</a></h4>
 <h4><a name="api:mono_value_copy_array">mono_value_copy_array</a></h4>
 
+<a name="arrays"></a>
 <h2>Array Methods</h2>
 
+       <p>Use the <tt>mono_array_new_*</tt> methods to create arrays
+       of a given type.
+
+       <p>For example, the following code creates an array with two
+       elements of type <tt>System.Byte</tt>, and sets the values
+       0xca and 0xfe on it:
+       
+       <pre class="code">
+
+       MonoArray *CreateByteArray (MonoDomain *domain)
+       {
+           MonoArray *data;
+
+           data = mono_array_new (domain, mono_get_byte_class (), 2);
+           mono_array_set (data, guint8, 0, 0xca);
+           mono_array_set (data, guint8, 0, 0xfe);
+
+           return data;
+       }
+
+       </pre>
+
+<h3>Creating Arrays</h3>
+
+<h4><a name="api:mono_array_new">mono_array_new</a></h4>
+<h4><a name="api:mono_array_new_full">mono_array_new_full</a></h4>
+<h4><a name="api:mono_array_new_specific">mono_array_new_specific</a></h4>
 <h4><a name="api:mono_array_class_get">mono_array_class_get</a></h4>
 <h4><a name="api:mono_array_clone_in_domain">mono_array_clone_in_domain</a></h4>
 <h4><a name="api:mono_array_clone">mono_array_clone</a></h4>
-<h4><a name="api:mono_array_element_size">mono_array_element_size</a></h4>
 <h4><a name="api:mono_array_full_copy">mono_array_full_copy</a></h4>
-<h4><a name="api:mono_array_new_full">mono_array_new_full</a></h4>
-<h4><a name="api:mono_array_new">mono_array_new</a></h4>
-<h4><a name="api:mono_array_new_specific">mono_array_new_specific</a></h4>
 <h4><a name="api:mono_array_to_lparray">mono_array_to_lparray</a></h4>
 <h4><a name="api:mono_array_to_savearray">mono_array_to_savearray</a></h4>
 <h4><a name="api:mono_dup_array_type">mono_dup_array_type</a></h4>
 
+<h3>Using Arrays</h3>
+
+<h4><a name="api:mono_array_set">mono_array_set</a></h4>
+<h4><a name="api:mono_array_setref">mono_array_setref</a></h4>
+<h4><a name="api:mono_array_length">mono_array_length</a></h4>
+<h4><a name="api:mono_array_addr">mono_array_addr</a></h4>
+<h4><a name="api:mono_array_addr_with_size">mono_array_addr_with_size</a></h4>
+<h4><a name="api:mono_array_get">mono_array_get</a></h4>
+<h4><a name="api:mono_array_element_size">mono_array_element_size</a></h4>
+
+<a name="fields"></a>
 <h2>Fields</h2>
 
 <h4><a name="api:mono_field_from_token">mono_field_from_token</a></h4>
 <h4><a name="api:mono_field_static_get_value">mono_field_static_get_value</a></h4>
 <h4><a name="api:mono_field_static_set_value">mono_field_static_set_value</a></h4>
 
+<a name="properties"></a>
 <h2>Properties</h2>
 
 <h4><a name="api:mono_property_get_flags">mono_property_get_flags</a></h4>
 <h4><a name="api:mono_property_get_value">mono_property_get_value</a></h4>
 <h4><a name="api:mono_property_set_value">mono_property_set_value</a></h4>
 
+<a name="events"></a>
 <h2>Events</h2>
 
 <h4><a name="api:mono_event_get_add_method">mono_event_get_add_method</a></h4>
 <h4><a name="api:mono_event_get_raise_method">mono_event_get_raise_method</a></h4>
 <h4><a name="api:mono_event_get_remove_method">mono_event_get_remove_method</a></h4>
 
+<a name="delegates"></a>
 <h2>Delegates</h2>
 <h4><a name="api:mono_delegate_ctor">mono_delegate_ctor</a></h4>
 
+<a name="async"></a>
 <h2>AsyncResults</h2>
 <h4><a name="api:mono_async_result_new">mono_async_result_new</a></h4>
 
+<a name="remote"></a>
 <h2>Remote Fields</h2>
 <h4><a name="api:mono_load_remote_field">mono_load_remote_field</a></h4>
 <h4><a name="api:mono_load_remote_field_new">mono_load_remote_field_new</a></h4>
 <h4><a name="api:mono_store_remote_field">mono_store_remote_field</a></h4>
 <h4><a name="api:mono_store_remote_field_new">mono_store_remote_field_new</a></h4>
 
+<a name="nullable"></a>
 <h2>Nullable Objects</h2>
 
        <p>These methods are used to manipulate objects of type