Difference between revisions of "Uno/Binary/Spec/Environment Stack"

From Apache OpenOffice Wiki
< Uno‎ | Binary
Jump to: navigation, search
m (Improved layout.)
m
Line 21: Line 21:
  
 
=== API ===
 
=== API ===
The Enterable interface, optionally be implemented by purp environments:
+
The protoype for a callee:
 +
<pre>
 +
typedef void uno_EnvCallee(va_list);
 +
</pre>
 +
 
 +
The Enterable interface, to be optionally implemented by [[../Purpose Environments]]:
 
<pre>
 
<pre>
 
typedef void uno_Enterable_enter    (void * context);
 
typedef void uno_Enterable_enter    (void * context);
Line 43: Line 48:
 
<pre>
 
<pre>
 
void SAL_CALL uno_getCurrentEnvironment(uno_Environment ** ppEnv, char const * pEnv_type) SAL_THROW_EXTERN_C();
 
void SAL_CALL uno_getCurrentEnvironment(uno_Environment ** ppEnv, char const * pEnv_type) SAL_THROW_EXTERN_C();
typedef void uno_EnvCallee(va_list);
+
void SAL_CALL uno_Environment_invoke_v (uno_Environment * pEnv, uno_EnvCallee * pCallee, va_list param) SAL_THROW_EXTERN_C();
void SAL_CALL uno_Environment_invoke_v(uno_Environment * pEnv, uno_EnvCallee * pCallee, va_list param) SAL_THROW_EXTERN_C();
+
void SAL_CALL uno_Environment_invoke   (uno_Environment * pEnv, uno_EnvCallee * pCallee, ...)   SAL_THROW_EXTERN_C();
void SAL_CALL uno_Environment_invoke (uno_Environment * pEnv, uno_EnvCallee * pCallee, ...)   SAL_THROW_EXTERN_C();
+
void SAL_CALL uno_Environment_enter   (uno_Environment * pEnv) SAL_THROW_EXTERN_C();
void SAL_CALL uno_Environment_enter(uno_Environment * pEnv) SAL_THROW_EXTERN_C();
+
int SAL_CALL uno_Environment_isValid (uno_Environment * pEnv, rtl_uString ** pReason)  SAL_THROW_EXTERN_C();
int SAL_CALL uno_Environment_isValid(uno_Environment * pEnv, rtl_uString ** pReason)  SAL_THROW_EXTERN_C();
+
  
 
uno_Environment->pReserved == uno_Enterable *
 
uno_Environment->pReserved == uno_Enterable *

Revision as of 12:32, 15 June 2006

state: draft
type: specification

Environment Stack

Feature

The Uno/Spec/Environment Stack for Binary Uno.

Uno/Binary/Spec/Environments can be:

  • entered or
  • left, respectively
  • invoked

by a thread. The currently entered Uno/Binary/Spec/environment can be retrieved.

Multiple purpose environments can be entered/invoked at the same time. Purposes of environment can be specified in any particular order, e.g:

"uno:A:B:C"

Where the order may be relevant, depending on the purpose environments.

Rationale

API

The protoype for a callee:

typedef void uno_EnvCallee(va_list);

The Enterable interface, to be optionally implemented by Uno/Binary/Spec/Purpose Environments:

typedef void uno_Enterable_enter     (void * context);
typedef void uno_Enterable_leave     (void * context);
typedef void uno_Enterable_callInto_v(void * context, uno_EnvCallee * pCallee, va_list param);
typedef void uno_Enterable_callOut_v (void * context, uno_EnvCallee * pCallee, va_list param);
typedef int  uno_Enterable_isValid_v (void * context, rtl_uString ** ppReason);

typedef struct
{
  uno_Enterable_enter      * m_enter;
  uno_Enterable_leave      * m_leave;
  uno_Enterable_callInto_v * m_callInto_v;
  uno_Enterable_callOut_v  * m_callOut_v;
  uno_Enterable_isValid_v  * m_isValid;
}
uno_Enterable;

The client API, which is thread affine:

void SAL_CALL uno_getCurrentEnvironment(uno_Environment ** ppEnv, char const * pEnv_type) SAL_THROW_EXTERN_C();
void SAL_CALL uno_Environment_invoke_v (uno_Environment * pEnv, uno_EnvCallee * pCallee, va_list param) SAL_THROW_EXTERN_C();
void SAL_CALL uno_Environment_invoke   (uno_Environment * pEnv, uno_EnvCallee * pCallee, ...)	  SAL_THROW_EXTERN_C();
void SAL_CALL uno_Environment_enter    (uno_Environment * pEnv) SAL_THROW_EXTERN_C();
int  SAL_CALL uno_Environment_isValid  (uno_Environment * pEnv, rtl_uString ** pReason)  SAL_THROW_EXTERN_C();

uno_Environment->pReserved == uno_Enterable *

Dependencies

  • None.
Personal tools