xref: /aoo4110/main/sal/rtl/source/tres.c (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #include <stdio.h>
25*b1cdbd2cSJim Jagielski #include <rtl/tres.h>
26*b1cdbd2cSJim Jagielski #include <osl/diagnose.h>
27*b1cdbd2cSJim Jagielski #include <osl/time.h>
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski  /* force an assertion on false state */
30*b1cdbd2cSJim Jagielski #define TST_BOOM(c, m)  OSL_ENSURE(c, m)
31*b1cdbd2cSJim Jagielski 
32*b1cdbd2cSJim Jagielski 
33*b1cdbd2cSJim Jagielski typedef struct _rtl_CmpState
34*b1cdbd2cSJim Jagielski {
35*b1cdbd2cSJim Jagielski     struct _rtl_CmpState*   m_next;
36*b1cdbd2cSJim Jagielski     struct _rtl_CmpState*   m_prev;
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski     sal_Bool                m_stat;
39*b1cdbd2cSJim Jagielski     rtl_String*             m_msg;
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski } rtl_CmpState;
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski typedef struct _rtl_FuncState
44*b1cdbd2cSJim Jagielski {
45*b1cdbd2cSJim Jagielski     struct _rtl_FuncState*  m_next;
46*b1cdbd2cSJim Jagielski     struct _rtl_FuncState*  m_prev;
47*b1cdbd2cSJim Jagielski     rtl_String*             m_name;
48*b1cdbd2cSJim Jagielski     sal_uInt32              m_flags;
49*b1cdbd2cSJim Jagielski     sal_uInt32              m_start;
50*b1cdbd2cSJim Jagielski     sal_uInt32              m_stop;
51*b1cdbd2cSJim Jagielski     struct _rtl_CmpState*   m_cmp;
52*b1cdbd2cSJim Jagielski 
53*b1cdbd2cSJim Jagielski } rtl_FuncState;
54*b1cdbd2cSJim Jagielski 
55*b1cdbd2cSJim Jagielski 
56*b1cdbd2cSJim Jagielski 
57*b1cdbd2cSJim Jagielski typedef struct _rtl_TestResult_Data
58*b1cdbd2cSJim Jagielski {
59*b1cdbd2cSJim Jagielski     rtl_TestResult_vtable*  m_funcs;
60*b1cdbd2cSJim Jagielski     void*                   m_externaldata;
61*b1cdbd2cSJim Jagielski 
62*b1cdbd2cSJim Jagielski     rtl_FuncState*   m_state;
63*b1cdbd2cSJim Jagielski 
64*b1cdbd2cSJim Jagielski } rtl_TestResult_Data;
65*b1cdbd2cSJim Jagielski 
66*b1cdbd2cSJim Jagielski 
67*b1cdbd2cSJim Jagielski  /**
68*b1cdbd2cSJim Jagielski   * internal helper functions
69*b1cdbd2cSJim Jagielski   */
70*b1cdbd2cSJim Jagielski 
71*b1cdbd2cSJim Jagielski  /* ...to create, link, unlink and destroy allocated memory */
72*b1cdbd2cSJim Jagielski rtl_FuncState* SAL_CALL rtl_tres_create_funcstate( const sal_Char* meth );
73*b1cdbd2cSJim Jagielski rtl_FuncState* SAL_CALL rtl_tres_link_funcstate( rtl_FuncState* ptr,
74*b1cdbd2cSJim Jagielski                                                     rtl_FuncState* plink );
75*b1cdbd2cSJim Jagielski rtl_FuncState* SAL_CALL rtl_tres_unlink_funcstate( rtl_FuncState* plink );
76*b1cdbd2cSJim Jagielski rtl_CmpState* SAL_CALL rtl_tres_create_cmpstate(
77*b1cdbd2cSJim Jagielski                                                 sal_Bool state,
78*b1cdbd2cSJim Jagielski                                                 const sal_Char* msg
79*b1cdbd2cSJim Jagielski                                                 );
80*b1cdbd2cSJim Jagielski rtl_CmpState* SAL_CALL rtl_tres_link_cmpstate( rtl_CmpState* ptr,
81*b1cdbd2cSJim Jagielski                                                     rtl_CmpState* plink );
82*b1cdbd2cSJim Jagielski rtl_CmpState* SAL_CALL rtl_tres_unlink_cmpstate( rtl_CmpState* plink );
83*b1cdbd2cSJim Jagielski sal_uInt32 SAL_CALL rtl_tres_timer();
84*b1cdbd2cSJim Jagielski void SAL_CALL rtl_tres_destroy_funcstate( rtl_FuncState* pState_ );
85*b1cdbd2cSJim Jagielski void SAL_CALL rtl_tres_destroy_funcstates( rtl_FuncState* pState_ );
86*b1cdbd2cSJim Jagielski void SAL_CALL rtl_tres_destroy_cmpstates( rtl_CmpState* pState_ );
87*b1cdbd2cSJim Jagielski void SAL_CALL rtl_tres_destroy_cmpstate( rtl_CmpState* pState_ );
88*b1cdbd2cSJim Jagielski 
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski  /* set and clear single bits */
91*b1cdbd2cSJim Jagielski static void SAL_CALL rtl_tres_setbit( rtl_FuncState* pState_,
92*b1cdbd2cSJim Jagielski                                                           sal_uInt32 flag  );
93*b1cdbd2cSJim Jagielski static void SAL_CALL rtl_tres_clearbit( rtl_FuncState* pState_,
94*b1cdbd2cSJim Jagielski                                                           sal_uInt32 flag  );
95*b1cdbd2cSJim Jagielski 
96*b1cdbd2cSJim Jagielski  /**
97*b1cdbd2cSJim Jagielski   * forward declarations of concrete function implementations overloadable
98*b1cdbd2cSJim Jagielski   * and accessible via vtable
99*b1cdbd2cSJim Jagielski   */
100*b1cdbd2cSJim Jagielski static sal_Bool SAL_CALL rtl_tres_state(
101*b1cdbd2cSJim Jagielski                                         rtl_TestResult* pThis_,
102*b1cdbd2cSJim Jagielski                                         sal_Bool state,
103*b1cdbd2cSJim Jagielski                                         const sal_Char* msg,
104*b1cdbd2cSJim Jagielski                                         const sal_Char* sub,
105*b1cdbd2cSJim Jagielski                                         sal_Bool v
106*b1cdbd2cSJim Jagielski                                         );
107*b1cdbd2cSJim Jagielski 
108*b1cdbd2cSJim Jagielski static void SAL_CALL rtl_tres_end( rtl_TestResult* pThis_,
109*b1cdbd2cSJim Jagielski                                                         const sal_Char* msg );
110*b1cdbd2cSJim Jagielski 
111*b1cdbd2cSJim Jagielski static rtl_funcstate SAL_CALL rtl_tres_funcstate( rtl_TestResult* pThis_ );
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski static sal_Bool SAL_CALL rtl_tres_ispassed( rtl_TestResult* pThis_ );
114*b1cdbd2cSJim Jagielski static sal_Bool SAL_CALL rtl_tres_isok( rtl_TestResult* pThis_ );
115*b1cdbd2cSJim Jagielski 
116*b1cdbd2cSJim Jagielski static sal_Bool SAL_CALL rtl_tres_isbit( rtl_TestResult* pThis_,
117*b1cdbd2cSJim Jagielski                                                         sal_uInt32 flag );
118*b1cdbd2cSJim Jagielski 
119*b1cdbd2cSJim Jagielski static rtl_funcstate SAL_CALL rtl_tres_getnextfuncstate( rtl_funcstate );
120*b1cdbd2cSJim Jagielski static rtl_funcstate SAL_CALL rtl_tres_getprevfuncstate( rtl_funcstate );
121*b1cdbd2cSJim Jagielski static sal_uInt32 SAL_CALL rtl_tres_getflags( rtl_funcstate );
122*b1cdbd2cSJim Jagielski sal_uInt32 SAL_CALL rtl_tres_getstarttime( rtl_funcstate );
123*b1cdbd2cSJim Jagielski sal_uInt32 SAL_CALL rtl_tres_getstoptime( rtl_funcstate );
124*b1cdbd2cSJim Jagielski static rtl_cmpstate SAL_CALL rtl_tres_getcmpstate( rtl_funcstate );
125*b1cdbd2cSJim Jagielski 
126*b1cdbd2cSJim Jagielski static sal_Bool SAL_CALL rtl_tres_getstat( rtl_cmpstate );
127*b1cdbd2cSJim Jagielski rtl_String* SAL_CALL rtl_tres_getname( rtl_funcstate );
128*b1cdbd2cSJim Jagielski rtl_String* SAL_CALL rtl_tres_getmsg( rtl_cmpstate );
129*b1cdbd2cSJim Jagielski static rtl_cmpstate SAL_CALL rtl_tres_getnextcmpstate( rtl_cmpstate );
130*b1cdbd2cSJim Jagielski 
131*b1cdbd2cSJim Jagielski 
132*b1cdbd2cSJim Jagielski  /**
133*b1cdbd2cSJim Jagielski  * initialize vtable with function pointers
134*b1cdbd2cSJim Jagielski  */
135*b1cdbd2cSJim Jagielski static rtl_TestResult_vtable trVTable =
136*b1cdbd2cSJim Jagielski {
137*b1cdbd2cSJim Jagielski     sizeof(rtl_TestResult_vtable),
138*b1cdbd2cSJim Jagielski     rtl_tres_state,
139*b1cdbd2cSJim Jagielski     rtl_tres_end,
140*b1cdbd2cSJim Jagielski     rtl_tres_ispassed,
141*b1cdbd2cSJim Jagielski     rtl_tres_isok,
142*b1cdbd2cSJim Jagielski     rtl_tres_funcstate,
143*b1cdbd2cSJim Jagielski     rtl_tres_isbit,
144*b1cdbd2cSJim Jagielski     rtl_tres_getnextfuncstate,
145*b1cdbd2cSJim Jagielski     rtl_tres_getprevfuncstate,
146*b1cdbd2cSJim Jagielski     rtl_tres_getflags,
147*b1cdbd2cSJim Jagielski     rtl_tres_getname,
148*b1cdbd2cSJim Jagielski     rtl_tres_getstarttime,
149*b1cdbd2cSJim Jagielski     rtl_tres_getstoptime,
150*b1cdbd2cSJim Jagielski     rtl_tres_getcmpstate,
151*b1cdbd2cSJim Jagielski     rtl_tres_getstat,
152*b1cdbd2cSJim Jagielski     rtl_tres_getmsg,
153*b1cdbd2cSJim Jagielski     rtl_tres_getnextcmpstate
154*b1cdbd2cSJim Jagielski };
155*b1cdbd2cSJim Jagielski 
156*b1cdbd2cSJim Jagielski  /**
157*b1cdbd2cSJim Jagielski   * rtl_tres_create
158*b1cdbd2cSJim Jagielski   * create and initialize data struct for TestResult
159*b1cdbd2cSJim Jagielski   *
160*b1cdbd2cSJim Jagielski   * @param const sal_Char* meth = name of the method (entryname)
161*b1cdbd2cSJim Jagielski   * @param sal_uInt32 flags     = bitmap of comandline and status flags
162*b1cdbd2cSJim Jagielski   *
163*b1cdbd2cSJim Jagielski   * @return rtl_TestResult*     = pointer to a new allocated testresult struct
164*b1cdbd2cSJim Jagielski   */
rtl_tres_create(const sal_Char * meth,sal_uInt32 flags)165*b1cdbd2cSJim Jagielski rtl_TestResult* rtl_tres_create( const sal_Char* meth, sal_uInt32 flags )
166*b1cdbd2cSJim Jagielski {
167*b1cdbd2cSJim Jagielski     /* allocate memory for testresult data structure */
168*b1cdbd2cSJim Jagielski     rtl_TestResult_Data* pData = (rtl_TestResult_Data*) malloc( sizeof(
169*b1cdbd2cSJim Jagielski                                                     rtl_TestResult_Data ) );
170*b1cdbd2cSJim Jagielski     /* initialize members... */
171*b1cdbd2cSJim Jagielski     pData->m_funcs              = &trVTable;    /* ...vtableptr to vtbladr */
172*b1cdbd2cSJim Jagielski     pData->m_externaldata       = 0;            /* ...external data pointer */
173*b1cdbd2cSJim Jagielski 
174*b1cdbd2cSJim Jagielski     /* allocate memory for state structure and initialize members */
175*b1cdbd2cSJim Jagielski     pData->m_state              = rtl_tres_create_funcstate( meth );
176*b1cdbd2cSJim Jagielski     pData->m_state->m_flags     = flags;        /* ...option Bitmap */
177*b1cdbd2cSJim Jagielski 
178*b1cdbd2cSJim Jagielski     /* set OK flag initial */
179*b1cdbd2cSJim Jagielski     rtl_tres_setbit( pData->m_state, rtl_tres_Flag_OK );
180*b1cdbd2cSJim Jagielski 
181*b1cdbd2cSJim Jagielski     return (rtl_TestResult*)pData ;
182*b1cdbd2cSJim Jagielski }
183*b1cdbd2cSJim Jagielski 
184*b1cdbd2cSJim Jagielski /**
185*b1cdbd2cSJim Jagielski  * rtl_tres_create_funcstate
186*b1cdbd2cSJim Jagielski  * allocates and initializes a structure to represent the status of a test
187*b1cdbd2cSJim Jagielski  * entry or its substates
188*b1cdbd2cSJim Jagielski  *
189*b1cdbd2cSJim Jagielski  * @param const sal_Char* meth = the name of the method (entry or sub entry)
190*b1cdbd2cSJim Jagielski  *
191*b1cdbd2cSJim Jagielski  * @return rtl_FuncState* = pointer to a new allocated funcstate struct
192*b1cdbd2cSJim Jagielski  */
rtl_tres_create_funcstate(const sal_Char * meth)193*b1cdbd2cSJim Jagielski rtl_FuncState* SAL_CALL rtl_tres_create_funcstate( const sal_Char* meth )
194*b1cdbd2cSJim Jagielski {
195*b1cdbd2cSJim Jagielski     rtl_FuncState* pStat = 0;                   /* status structure */
196*b1cdbd2cSJim Jagielski 
197*b1cdbd2cSJim Jagielski     /* allocate memory for status structure */
198*b1cdbd2cSJim Jagielski     pStat = (rtl_FuncState*) malloc( sizeof( struct _rtl_FuncState ) );
199*b1cdbd2cSJim Jagielski 
200*b1cdbd2cSJim Jagielski     if ( pStat )
201*b1cdbd2cSJim Jagielski     {
202*b1cdbd2cSJim Jagielski         pStat->m_next  = pStat;                 /* init ptr to next struct */
203*b1cdbd2cSJim Jagielski         pStat->m_prev  = pStat;                 /* init ptr to prev struct */
204*b1cdbd2cSJim Jagielski 
205*b1cdbd2cSJim Jagielski         pStat->m_name  = 0;                     /* init name */
206*b1cdbd2cSJim Jagielski         pStat->m_flags = 0;                     /* init flags */
207*b1cdbd2cSJim Jagielski         pStat->m_start = rtl_tres_timer();      /* init start milliseconds */
208*b1cdbd2cSJim Jagielski         pStat->m_stop  = 0;                     /* init stop milliseconds */
209*b1cdbd2cSJim Jagielski         pStat->m_cmp   = 0;                     /* init ptr to msg struct */
210*b1cdbd2cSJim Jagielski         rtl_string_newFromStr( &pStat->m_name, meth );/* copy meth to name */
211*b1cdbd2cSJim Jagielski 
212*b1cdbd2cSJim Jagielski         /* set ok flag initially */
213*b1cdbd2cSJim Jagielski         rtl_tres_setbit(pStat, rtl_tres_Flag_OK);
214*b1cdbd2cSJim Jagielski     }
215*b1cdbd2cSJim Jagielski 
216*b1cdbd2cSJim Jagielski     return ( pStat );
217*b1cdbd2cSJim Jagielski }
218*b1cdbd2cSJim Jagielski  /**
219*b1cdbd2cSJim Jagielski   * rtl_tres_link_funcstate
220*b1cdbd2cSJim Jagielski   * link initialized funcstate structure to a circular double linked list
221*b1cdbd2cSJim Jagielski   *
222*b1cdbd2cSJim Jagielski   * @param rtl_FuncState* ptr   = pointer to a funcstate where to link in new
223*b1cdbd2cSJim Jagielski   * @param rtl_FuncState* plink = pointer to a funcstate to link in list
224*b1cdbd2cSJim Jagielski   *
225*b1cdbd2cSJim Jagielski   * @return rtl_FuncState*      = pointer to structure linked in new
226*b1cdbd2cSJim Jagielski   */
rtl_tres_link_funcstate(rtl_FuncState * ptr,rtl_FuncState * plink)227*b1cdbd2cSJim Jagielski rtl_FuncState* SAL_CALL rtl_tres_link_funcstate( rtl_FuncState* ptr,
228*b1cdbd2cSJim Jagielski                                                         rtl_FuncState* plink )
229*b1cdbd2cSJim Jagielski {
230*b1cdbd2cSJim Jagielski     ptr->m_next->m_prev = plink;
231*b1cdbd2cSJim Jagielski     ptr->m_next->m_prev->m_next = ptr->m_next;
232*b1cdbd2cSJim Jagielski     ptr->m_next->m_prev->m_prev = ptr;
233*b1cdbd2cSJim Jagielski     ptr->m_next = plink;
234*b1cdbd2cSJim Jagielski     return ( plink );
235*b1cdbd2cSJim Jagielski }
236*b1cdbd2cSJim Jagielski 
237*b1cdbd2cSJim Jagielski  /**
238*b1cdbd2cSJim Jagielski   * rtl_tres_unlink_funcstate
239*b1cdbd2cSJim Jagielski   * unlink funcstate structure from a circular double linked list
240*b1cdbd2cSJim Jagielski   *
241*b1cdbd2cSJim Jagielski   * @param rtl_FuncState* plink = pointer to a funcstate to unlink from list
242*b1cdbd2cSJim Jagielski   *
243*b1cdbd2cSJim Jagielski   * @return rtl_FuncState*      = pointer to funcstate struct unlinked from
244*b1cdbd2cSJim Jagielski   *                               list
245*b1cdbd2cSJim Jagielski   */
rtl_tres_unlink_funcstate(rtl_FuncState * plink)246*b1cdbd2cSJim Jagielski rtl_FuncState* SAL_CALL rtl_tres_unlink_funcstate( rtl_FuncState* plink )
247*b1cdbd2cSJim Jagielski {
248*b1cdbd2cSJim Jagielski     plink->m_next->m_prev = plink->m_prev;
249*b1cdbd2cSJim Jagielski     plink->m_prev->m_next = plink->m_next;
250*b1cdbd2cSJim Jagielski     plink->m_next = plink;
251*b1cdbd2cSJim Jagielski     plink->m_prev = plink;
252*b1cdbd2cSJim Jagielski     return ( plink );
253*b1cdbd2cSJim Jagielski }
254*b1cdbd2cSJim Jagielski 
255*b1cdbd2cSJim Jagielski  /**
256*b1cdbd2cSJim Jagielski   * rtl_tres_link_cmpstate
257*b1cdbd2cSJim Jagielski   * link initialized cmpstate structure to a circular double linked list
258*b1cdbd2cSJim Jagielski   *
259*b1cdbd2cSJim Jagielski   * @param rtl_CmpState* ptr   = pointer to a cmpstate where to link in new
260*b1cdbd2cSJim Jagielski   * @param rtl_CmpState* plink = pointer to a cmpstate to link in list
261*b1cdbd2cSJim Jagielski   *
262*b1cdbd2cSJim Jagielski   * @return rtl_CmpState*      = pointer to cmpstate struct linked in new
263*b1cdbd2cSJim Jagielski   */
rtl_tres_link_cmpstate(rtl_CmpState * ptr,rtl_CmpState * plink)264*b1cdbd2cSJim Jagielski rtl_CmpState* SAL_CALL rtl_tres_link_cmpstate( rtl_CmpState* ptr,
265*b1cdbd2cSJim Jagielski                                                         rtl_CmpState* plink )
266*b1cdbd2cSJim Jagielski {
267*b1cdbd2cSJim Jagielski     ptr->m_next->m_prev = plink;
268*b1cdbd2cSJim Jagielski     ptr->m_next->m_prev->m_next = ptr->m_next;
269*b1cdbd2cSJim Jagielski     ptr->m_next->m_prev->m_prev = ptr;
270*b1cdbd2cSJim Jagielski     ptr->m_next = plink;
271*b1cdbd2cSJim Jagielski     return ( plink );
272*b1cdbd2cSJim Jagielski }
273*b1cdbd2cSJim Jagielski  /**
274*b1cdbd2cSJim Jagielski   * rtl_tres_unlink_cmpstate
275*b1cdbd2cSJim Jagielski   * unlink cmpstate structure from a circular double linked list
276*b1cdbd2cSJim Jagielski   *
277*b1cdbd2cSJim Jagielski   * @param rtl_CmpState* plink = pointer to a cmpstate to unlink from list
278*b1cdbd2cSJim Jagielski   *
279*b1cdbd2cSJim Jagielski   * @return rtl_CmpState*      = pointer to cmpstate struct unlinked from list
280*b1cdbd2cSJim Jagielski   */
rtl_tres_unlink_cmpstate(rtl_CmpState * plink)281*b1cdbd2cSJim Jagielski rtl_CmpState* SAL_CALL rtl_tres_unlink_cmpstate( rtl_CmpState* plink )
282*b1cdbd2cSJim Jagielski {
283*b1cdbd2cSJim Jagielski     plink->m_next->m_prev = plink->m_prev;
284*b1cdbd2cSJim Jagielski     plink->m_prev->m_next = plink->m_next;
285*b1cdbd2cSJim Jagielski     plink->m_next = plink;
286*b1cdbd2cSJim Jagielski     plink->m_prev = plink;
287*b1cdbd2cSJim Jagielski     return ( plink );
288*b1cdbd2cSJim Jagielski }
289*b1cdbd2cSJim Jagielski 
290*b1cdbd2cSJim Jagielski  /**
291*b1cdbd2cSJim Jagielski   * rtl_tres_create_cmpstate
292*b1cdbd2cSJim Jagielski   * allocates and initializes a structure to represent the status of a test
293*b1cdbd2cSJim Jagielski   * comparison
294*b1cdbd2cSJim Jagielski   *
295*b1cdbd2cSJim Jagielski   * @param sal_Bool state   = compare state
296*b1cdbd2cSJim Jagielski   * @param sal_Char* msg    = message for logging and debug purposes
297*b1cdbd2cSJim Jagielski   *
298*b1cdbd2cSJim Jagielski   * @return rtl_CmpState*   = pointer to the new allocated struct
299*b1cdbd2cSJim Jagielski   */
rtl_tres_create_cmpstate(sal_Bool state,const sal_Char * msg)300*b1cdbd2cSJim Jagielski rtl_CmpState* SAL_CALL rtl_tres_create_cmpstate(
301*b1cdbd2cSJim Jagielski                                                 sal_Bool state,
302*b1cdbd2cSJim Jagielski                                                 const sal_Char* msg
303*b1cdbd2cSJim Jagielski                                                 )
304*b1cdbd2cSJim Jagielski {
305*b1cdbd2cSJim Jagielski     /* allocate memory for cmpstate struct */
306*b1cdbd2cSJim Jagielski     rtl_CmpState* pStat = (rtl_CmpState*) malloc( sizeof( rtl_CmpState ) );
307*b1cdbd2cSJim Jagielski 
308*b1cdbd2cSJim Jagielski     /* initialize if memory could be allocated */
309*b1cdbd2cSJim Jagielski     if ( pStat )
310*b1cdbd2cSJim Jagielski     {
311*b1cdbd2cSJim Jagielski         pStat->m_next   = pStat;                /* init next with this */
312*b1cdbd2cSJim Jagielski         pStat->m_prev   = pStat;                /* init prev with this */
313*b1cdbd2cSJim Jagielski         pStat->m_msg    = 0;
314*b1cdbd2cSJim Jagielski         pStat->m_stat   = state;                /* boolean state */
315*b1cdbd2cSJim Jagielski         rtl_string_newFromStr( &pStat->m_msg, msg ); /* copy message */
316*b1cdbd2cSJim Jagielski     }
317*b1cdbd2cSJim Jagielski     return ( pStat );
318*b1cdbd2cSJim Jagielski }
319*b1cdbd2cSJim Jagielski 
320*b1cdbd2cSJim Jagielski  /**
321*b1cdbd2cSJim Jagielski   * rtl_tres_destroy
322*b1cdbd2cSJim Jagielski   * free allocated memory of testresult data struct
323*b1cdbd2cSJim Jagielski   *
324*b1cdbd2cSJim Jagielski   * @param rtl_TestResult* pThis_ = ponter to a valid testresult struct
325*b1cdbd2cSJim Jagielski   */
rtl_tres_destroy(rtl_TestResult * pThis_)326*b1cdbd2cSJim Jagielski void SAL_CALL rtl_tres_destroy( rtl_TestResult* pThis_ )
327*b1cdbd2cSJim Jagielski {
328*b1cdbd2cSJim Jagielski     /* cast to implementation representation structure */
329*b1cdbd2cSJim Jagielski     rtl_TestResult_Data* pData = (rtl_TestResult_Data*) pThis_;
330*b1cdbd2cSJim Jagielski 
331*b1cdbd2cSJim Jagielski     /* destroy all funcstates */
332*b1cdbd2cSJim Jagielski     if ( pData->m_state )
333*b1cdbd2cSJim Jagielski         rtl_tres_destroy_funcstates( pData->m_state );
334*b1cdbd2cSJim Jagielski 
335*b1cdbd2cSJim Jagielski     /* free allocted memory and reinitialize to zero */
336*b1cdbd2cSJim Jagielski     /* to be able to prevent dangling pointer access*/
337*b1cdbd2cSJim Jagielski     free( pData ); pData = 0;
338*b1cdbd2cSJim Jagielski }
339*b1cdbd2cSJim Jagielski 
340*b1cdbd2cSJim Jagielski  /**
341*b1cdbd2cSJim Jagielski   * rtl_tres_destroy_funcstates
342*b1cdbd2cSJim Jagielski   * free allocated memory occupied by the list of funcstate data structs
343*b1cdbd2cSJim Jagielski   * (iterates through next pointers)
344*b1cdbd2cSJim Jagielski   *
345*b1cdbd2cSJim Jagielski   * @param rtl_FuncState* pState_ = pointer to a valid funcstate struct
346*b1cdbd2cSJim Jagielski   */
rtl_tres_destroy_funcstates(rtl_FuncState * pState_)347*b1cdbd2cSJim Jagielski void SAL_CALL rtl_tres_destroy_funcstates( rtl_FuncState* pState_ )
348*b1cdbd2cSJim Jagielski {
349*b1cdbd2cSJim Jagielski     rtl_FuncState* plink = pState_->m_next;
350*b1cdbd2cSJim Jagielski     while ( plink != plink->m_next )
351*b1cdbd2cSJim Jagielski     {
352*b1cdbd2cSJim Jagielski         rtl_tres_destroy_funcstate( rtl_tres_unlink_funcstate( plink ) );
353*b1cdbd2cSJim Jagielski         plink = pState_->m_next;
354*b1cdbd2cSJim Jagielski     }
355*b1cdbd2cSJim Jagielski     rtl_tres_destroy_funcstate( plink );
356*b1cdbd2cSJim Jagielski }
357*b1cdbd2cSJim Jagielski 
358*b1cdbd2cSJim Jagielski  /**
359*b1cdbd2cSJim Jagielski   * rtl_tres_destroy_cmpstates
360*b1cdbd2cSJim Jagielski   * free allocated memory occupied by the list of cmpstate data structs
361*b1cdbd2cSJim Jagielski   * (iterates through next pointers)
362*b1cdbd2cSJim Jagielski   *
363*b1cdbd2cSJim Jagielski   * @param rtl_CmpState* pState_ = pointer to a valid cmpstate struct
364*b1cdbd2cSJim Jagielski   */
rtl_tres_destroy_cmpstates(rtl_CmpState * pState_)365*b1cdbd2cSJim Jagielski void SAL_CALL rtl_tres_destroy_cmpstates( rtl_CmpState* pState_ )
366*b1cdbd2cSJim Jagielski {
367*b1cdbd2cSJim Jagielski     rtl_CmpState* plink = pState_->m_next;
368*b1cdbd2cSJim Jagielski     while ( plink != plink->m_next )
369*b1cdbd2cSJim Jagielski 	{
370*b1cdbd2cSJim Jagielski 		rtl_tres_destroy_cmpstate( rtl_tres_unlink_cmpstate( plink ) );
371*b1cdbd2cSJim Jagielski         plink = pState_->m_next;
372*b1cdbd2cSJim Jagielski 	}
373*b1cdbd2cSJim Jagielski 	rtl_tres_destroy_cmpstate( plink );
374*b1cdbd2cSJim Jagielski }
375*b1cdbd2cSJim Jagielski 
376*b1cdbd2cSJim Jagielski 
377*b1cdbd2cSJim Jagielski  /**
378*b1cdbd2cSJim Jagielski   * rtl_tres_destroy_funcstate
379*b1cdbd2cSJim Jagielski   * free allocated memory occupied by one funcstate and it's list
380*b1cdbd2cSJim Jagielski   * of cmpstate data structs
381*b1cdbd2cSJim Jagielski   *
382*b1cdbd2cSJim Jagielski   * @param rtl_FuncState* pState_ = pointer to a valid funcstate struct
383*b1cdbd2cSJim Jagielski   */
rtl_tres_destroy_funcstate(rtl_FuncState * pState_)384*b1cdbd2cSJim Jagielski void SAL_CALL rtl_tres_destroy_funcstate( rtl_FuncState* pState_ )
385*b1cdbd2cSJim Jagielski {
386*b1cdbd2cSJim Jagielski     rtl_FuncState* plink = pState_;
387*b1cdbd2cSJim Jagielski 
388*b1cdbd2cSJim Jagielski     if ( plink->m_cmp )
389*b1cdbd2cSJim Jagielski         rtl_tres_destroy_cmpstates( plink->m_cmp );
390*b1cdbd2cSJim Jagielski 
391*b1cdbd2cSJim Jagielski     if ( plink->m_name )
392*b1cdbd2cSJim Jagielski     {
393*b1cdbd2cSJim Jagielski         rtl_string_release( plink->m_name );
394*b1cdbd2cSJim Jagielski         plink->m_name = 0;
395*b1cdbd2cSJim Jagielski     }
396*b1cdbd2cSJim Jagielski     plink->m_flags = 0;
397*b1cdbd2cSJim Jagielski     free( plink );
398*b1cdbd2cSJim Jagielski     plink = 0;
399*b1cdbd2cSJim Jagielski }
400*b1cdbd2cSJim Jagielski 
401*b1cdbd2cSJim Jagielski  /**
402*b1cdbd2cSJim Jagielski   * rtl_tres_destroy_cmpstate
403*b1cdbd2cSJim Jagielski   * free allocated memory of a cmpstate data struct
404*b1cdbd2cSJim Jagielski   *
405*b1cdbd2cSJim Jagielski   * @param rtl_CmpState* pState_ = pointer to cmpstate struct to destroy
406*b1cdbd2cSJim Jagielski   */
rtl_tres_destroy_cmpstate(rtl_CmpState * pState_)407*b1cdbd2cSJim Jagielski void SAL_CALL rtl_tres_destroy_cmpstate( rtl_CmpState* pState_ )
408*b1cdbd2cSJim Jagielski {
409*b1cdbd2cSJim Jagielski 
410*b1cdbd2cSJim Jagielski     rtl_CmpState* plink = pState_;
411*b1cdbd2cSJim Jagielski 
412*b1cdbd2cSJim Jagielski     if ( plink->m_msg )
413*b1cdbd2cSJim Jagielski     {
414*b1cdbd2cSJim Jagielski         rtl_string_release( plink->m_msg );
415*b1cdbd2cSJim Jagielski         plink->m_msg = 0;
416*b1cdbd2cSJim Jagielski     }
417*b1cdbd2cSJim Jagielski 	free( plink );
418*b1cdbd2cSJim Jagielski 	plink = 0;
419*b1cdbd2cSJim Jagielski }
420*b1cdbd2cSJim Jagielski  /**
421*b1cdbd2cSJim Jagielski  * central function to call in tests
422*b1cdbd2cSJim Jagielski  *
423*b1cdbd2cSJim Jagielski  * @param rtl_TestResult* pThis_    = self pointer to TestResult structure
424*b1cdbd2cSJim Jagielski  * @param sal_Bool state            = boolean result of statement comparison
425*b1cdbd2cSJim Jagielski  * @param const sal_Char* msg       = message for actual statementcomparison
426*b1cdbd2cSJim Jagielski  * @param const sal_Char* sub       = name of sub testfunction
427*b1cdbd2cSJim Jagielski  * @param sal_Bool v                = boolean verbose parameter
428*b1cdbd2cSJim Jagielski  *
429*b1cdbd2cSJim Jagielski  * @return sal_Bool                 = determines if statement comparison
430*b1cdbd2cSJim Jagielski  *                                    was positive or not
431*b1cdbd2cSJim Jagielski  */
rtl_tres_state(rtl_TestResult * pThis_,sal_Bool state,const sal_Char * msg,const sal_Char * sub,sal_Bool v)432*b1cdbd2cSJim Jagielski static sal_Bool SAL_CALL rtl_tres_state(
433*b1cdbd2cSJim Jagielski                                         rtl_TestResult* pThis_,
434*b1cdbd2cSJim Jagielski                                         sal_Bool state,
435*b1cdbd2cSJim Jagielski                                         const sal_Char* msg,
436*b1cdbd2cSJim Jagielski                                         const sal_Char* sub,
437*b1cdbd2cSJim Jagielski                                         sal_Bool v
438*b1cdbd2cSJim Jagielski                                         )
439*b1cdbd2cSJim Jagielski {
440*b1cdbd2cSJim Jagielski 
441*b1cdbd2cSJim Jagielski     /* cast pointer to testresult data implementation struct*/
442*b1cdbd2cSJim Jagielski     rtl_TestResult_Data* pData = (rtl_TestResult_Data*)pThis_;
443*b1cdbd2cSJim Jagielski 
444*b1cdbd2cSJim Jagielski     /* initialize funcstate pointer with masterstate */
445*b1cdbd2cSJim Jagielski     rtl_FuncState* pFunc = pData->m_state;
446*b1cdbd2cSJim Jagielski 
447*b1cdbd2cSJim Jagielski     /* if substate required */
448*b1cdbd2cSJim Jagielski     if ( sub )
449*b1cdbd2cSJim Jagielski     {
450*b1cdbd2cSJim Jagielski         /* link new created function state to last item */
451*b1cdbd2cSJim Jagielski         pFunc = rtl_tres_link_funcstate( pFunc->m_prev,
452*b1cdbd2cSJim Jagielski                                         rtl_tres_create_funcstate( sub ) );
453*b1cdbd2cSJim Jagielski 
454*b1cdbd2cSJim Jagielski         /* indicate this state as substate */
455*b1cdbd2cSJim Jagielski 		rtl_tres_setbit( pFunc, rtl_tres_Flag_SUB );
456*b1cdbd2cSJim Jagielski 
457*b1cdbd2cSJim Jagielski         /* indicate prvious state as passed if no masterstate */
458*b1cdbd2cSJim Jagielski         if ( pFunc->m_prev != pData->m_state )
459*b1cdbd2cSJim Jagielski             rtl_tres_setbit( pFunc->m_prev, rtl_tres_Flag_PASSED );
460*b1cdbd2cSJim Jagielski     }
461*b1cdbd2cSJim Jagielski 
462*b1cdbd2cSJim Jagielski 
463*b1cdbd2cSJim Jagielski     /* test failed */
464*b1cdbd2cSJim Jagielski     if( ! state )
465*b1cdbd2cSJim Jagielski     {
466*b1cdbd2cSJim Jagielski          /* determine if assertion should be thrown */
467*b1cdbd2cSJim Jagielski         if ( rtl_tres_isbit( pThis_, rtl_tres_Flag_BOOM ) )
468*b1cdbd2cSJim Jagielski         {
469*b1cdbd2cSJim Jagielski             /* if message available */
470*b1cdbd2cSJim Jagielski             if ( msg )
471*b1cdbd2cSJim Jagielski                 TST_BOOM( state, msg );
472*b1cdbd2cSJim Jagielski             else
473*b1cdbd2cSJim Jagielski                 TST_BOOM( state, "no msg available" );
474*b1cdbd2cSJim Jagielski         }
475*b1cdbd2cSJim Jagielski 
476*b1cdbd2cSJim Jagielski         /* clear this state ok flag and masterstate ok flag */
477*b1cdbd2cSJim Jagielski         rtl_tres_clearbit( pFunc, rtl_tres_Flag_OK );
478*b1cdbd2cSJim Jagielski         rtl_tres_clearbit( pData->m_state, rtl_tres_Flag_OK );
479*b1cdbd2cSJim Jagielski     }
480*b1cdbd2cSJim Jagielski     /* message available */
481*b1cdbd2cSJim Jagielski     if( msg )
482*b1cdbd2cSJim Jagielski     {
483*b1cdbd2cSJim Jagielski         /* append a new comparison state */
484*b1cdbd2cSJim Jagielski 		if (! pFunc->m_cmp )
485*b1cdbd2cSJim Jagielski 	        pFunc->m_cmp = rtl_tres_create_cmpstate( state, msg );
486*b1cdbd2cSJim Jagielski 		else
487*b1cdbd2cSJim Jagielski             rtl_tres_link_cmpstate( pFunc->m_cmp,
488*b1cdbd2cSJim Jagielski                             rtl_tres_create_cmpstate(state, msg ) );
489*b1cdbd2cSJim Jagielski 
490*b1cdbd2cSJim Jagielski         /* message to stderr required ? */
491*b1cdbd2cSJim Jagielski         if ( v || ( pFunc->m_next->m_flags & rtl_tres_Flag_VERBOSE ) )
492*b1cdbd2cSJim Jagielski             fprintf( stderr, "%s\n", msg );
493*b1cdbd2cSJim Jagielski     }
494*b1cdbd2cSJim Jagielski 
495*b1cdbd2cSJim Jagielski     pFunc->m_stop = rtl_tres_timer();
496*b1cdbd2cSJim Jagielski     return ( state );
497*b1cdbd2cSJim Jagielski }
498*b1cdbd2cSJim Jagielski 
499*b1cdbd2cSJim Jagielski  /**
500*b1cdbd2cSJim Jagielski   * rtl_tres_timer
501*b1cdbd2cSJim Jagielski   * function to get actual timevalue
502*b1cdbd2cSJim Jagielski   * this has to be replaced by a high resolution timer
503*b1cdbd2cSJim Jagielski   */
rtl_tres_timer()504*b1cdbd2cSJim Jagielski sal_uInt32 SAL_CALL rtl_tres_timer()
505*b1cdbd2cSJim Jagielski {
506*b1cdbd2cSJim Jagielski 	sal_uInt32 val = 0;
507*b1cdbd2cSJim Jagielski     TimeValue* tmv = (TimeValue*)malloc( sizeof( TimeValue ) );
508*b1cdbd2cSJim Jagielski     osl_getSystemTime( tmv );
509*b1cdbd2cSJim Jagielski     val = tmv->Nanosec/1000L;
510*b1cdbd2cSJim Jagielski     free( tmv );
511*b1cdbd2cSJim Jagielski     return ( val );
512*b1cdbd2cSJim Jagielski }
513*b1cdbd2cSJim Jagielski 
514*b1cdbd2cSJim Jagielski 
rtl_tres_end(rtl_TestResult * pThis_,const sal_Char * msg)515*b1cdbd2cSJim Jagielski static void SAL_CALL rtl_tres_end( rtl_TestResult* pThis_,
516*b1cdbd2cSJim Jagielski                                                         const sal_Char* msg )
517*b1cdbd2cSJim Jagielski {
518*b1cdbd2cSJim Jagielski     rtl_TestResult_Data* pData = (rtl_TestResult_Data*) pThis_;
519*b1cdbd2cSJim Jagielski 
520*b1cdbd2cSJim Jagielski     if( msg )
521*b1cdbd2cSJim Jagielski     {
522*b1cdbd2cSJim Jagielski         if (! pData->m_state->m_cmp )
523*b1cdbd2cSJim Jagielski             pData->m_state->m_cmp = rtl_tres_create_cmpstate( sal_True, msg );
524*b1cdbd2cSJim Jagielski 		else
525*b1cdbd2cSJim Jagielski             rtl_tres_link_cmpstate( pData->m_state->m_cmp,
526*b1cdbd2cSJim Jagielski                             rtl_tres_create_cmpstate( sal_True, msg ) );
527*b1cdbd2cSJim Jagielski     }
528*b1cdbd2cSJim Jagielski     pData->m_state->m_prev->m_flags |= rtl_tres_Flag_PASSED;
529*b1cdbd2cSJim Jagielski     pData->m_state->m_flags |= rtl_tres_Flag_PASSED;
530*b1cdbd2cSJim Jagielski     pData->m_state->m_stop = rtl_tres_timer();
531*b1cdbd2cSJim Jagielski }
532*b1cdbd2cSJim Jagielski 
533*b1cdbd2cSJim Jagielski 
rtl_tres_ispassed(rtl_TestResult * pThis_)534*b1cdbd2cSJim Jagielski static sal_Bool SAL_CALL rtl_tres_ispassed( rtl_TestResult* pThis_ )
535*b1cdbd2cSJim Jagielski {
536*b1cdbd2cSJim Jagielski     return rtl_tres_isbit( pThis_, rtl_tres_Flag_PASSED );
537*b1cdbd2cSJim Jagielski }
538*b1cdbd2cSJim Jagielski 
rtl_tres_isok(rtl_TestResult * pThis_)539*b1cdbd2cSJim Jagielski static sal_Bool SAL_CALL rtl_tres_isok( rtl_TestResult* pThis_ )
540*b1cdbd2cSJim Jagielski {
541*b1cdbd2cSJim Jagielski     return rtl_tres_isbit( pThis_, rtl_tres_Flag_OK );
542*b1cdbd2cSJim Jagielski }
543*b1cdbd2cSJim Jagielski  /**
544*b1cdbd2cSJim Jagielski  * return pointer to funcstate structure
545*b1cdbd2cSJim Jagielski  */
rtl_tres_funcstate(rtl_TestResult * pThis_)546*b1cdbd2cSJim Jagielski static rtl_funcstate SAL_CALL rtl_tres_funcstate( rtl_TestResult* pThis_ )
547*b1cdbd2cSJim Jagielski {
548*b1cdbd2cSJim Jagielski 
549*b1cdbd2cSJim Jagielski     rtl_TestResult_Data* pThis = (rtl_TestResult_Data*) pThis_;
550*b1cdbd2cSJim Jagielski     return (rtl_funcstate)pThis->m_state;
551*b1cdbd2cSJim Jagielski }
552*b1cdbd2cSJim Jagielski 
553*b1cdbd2cSJim Jagielski  /**
554*b1cdbd2cSJim Jagielski  * determine if a flag is set or not
555*b1cdbd2cSJim Jagielski  */
rtl_tres_isbit(rtl_TestResult * pThis_,sal_uInt32 flag)556*b1cdbd2cSJim Jagielski static sal_Bool SAL_CALL rtl_tres_isbit( rtl_TestResult* pThis_,
557*b1cdbd2cSJim Jagielski                                                           sal_uInt32 flag  )
558*b1cdbd2cSJim Jagielski {
559*b1cdbd2cSJim Jagielski     return (sal_Bool)
560*b1cdbd2cSJim Jagielski         ((((rtl_TestResult_Data *) pThis_)->m_state->m_flags & flag) == flag);
561*b1cdbd2cSJim Jagielski }
562*b1cdbd2cSJim Jagielski  /**
563*b1cdbd2cSJim Jagielski   * set one single bit
564*b1cdbd2cSJim Jagielski   */
rtl_tres_setbit(rtl_FuncState * pState_,sal_uInt32 flag)565*b1cdbd2cSJim Jagielski static void SAL_CALL rtl_tres_setbit( rtl_FuncState* pState_,
566*b1cdbd2cSJim Jagielski                                                           sal_uInt32 flag  )
567*b1cdbd2cSJim Jagielski {
568*b1cdbd2cSJim Jagielski     pState_->m_flags |= flag;
569*b1cdbd2cSJim Jagielski }
570*b1cdbd2cSJim Jagielski  /**
571*b1cdbd2cSJim Jagielski   * clear one single bit
572*b1cdbd2cSJim Jagielski   */
rtl_tres_clearbit(rtl_FuncState * pState_,sal_uInt32 flag)573*b1cdbd2cSJim Jagielski static void SAL_CALL rtl_tres_clearbit( rtl_FuncState* pState_,
574*b1cdbd2cSJim Jagielski                                                           sal_uInt32 flag  )
575*b1cdbd2cSJim Jagielski {
576*b1cdbd2cSJim Jagielski     pState_->m_flags = pState_->m_flags & ( ~flag );
577*b1cdbd2cSJim Jagielski }
578*b1cdbd2cSJim Jagielski 
579*b1cdbd2cSJim Jagielski  /**
580*b1cdbd2cSJim Jagielski   * returns next pointer of passed funcstate structure
581*b1cdbd2cSJim Jagielski   */
rtl_tres_getnextfuncstate(rtl_funcstate fstate)582*b1cdbd2cSJim Jagielski rtl_funcstate SAL_CALL rtl_tres_getnextfuncstate( rtl_funcstate fstate )
583*b1cdbd2cSJim Jagielski {
584*b1cdbd2cSJim Jagielski     rtl_FuncState* fs = (rtl_FuncState*)fstate;
585*b1cdbd2cSJim Jagielski     return( (rtl_funcstate)fs->m_next );
586*b1cdbd2cSJim Jagielski 
587*b1cdbd2cSJim Jagielski }
588*b1cdbd2cSJim Jagielski  /**
589*b1cdbd2cSJim Jagielski   * returns previous pointer of passed funcstate structure
590*b1cdbd2cSJim Jagielski   */
rtl_tres_getprevfuncstate(rtl_funcstate fstate)591*b1cdbd2cSJim Jagielski rtl_funcstate SAL_CALL rtl_tres_getprevfuncstate( rtl_funcstate fstate )
592*b1cdbd2cSJim Jagielski {
593*b1cdbd2cSJim Jagielski     rtl_FuncState* fs = (rtl_FuncState*)fstate;
594*b1cdbd2cSJim Jagielski     return( (rtl_funcstate)fs->m_prev );
595*b1cdbd2cSJim Jagielski 
596*b1cdbd2cSJim Jagielski }
597*b1cdbd2cSJim Jagielski  /**
598*b1cdbd2cSJim Jagielski   * returns flag value of passed funcstate structure
599*b1cdbd2cSJim Jagielski   */
rtl_tres_getflags(rtl_funcstate fstate)600*b1cdbd2cSJim Jagielski sal_uInt32 SAL_CALL rtl_tres_getflags( rtl_funcstate fstate )
601*b1cdbd2cSJim Jagielski {
602*b1cdbd2cSJim Jagielski     rtl_FuncState* fs = (rtl_FuncState*)fstate;
603*b1cdbd2cSJim Jagielski     return( fs->m_flags );
604*b1cdbd2cSJim Jagielski }
605*b1cdbd2cSJim Jagielski  /**
606*b1cdbd2cSJim Jagielski   * returns name of passed funcstate structure
607*b1cdbd2cSJim Jagielski   */
rtl_tres_getname(rtl_funcstate fstate)608*b1cdbd2cSJim Jagielski rtl_String* SAL_CALL rtl_tres_getname( rtl_funcstate fstate )
609*b1cdbd2cSJim Jagielski {
610*b1cdbd2cSJim Jagielski     rtl_FuncState* fs = (rtl_FuncState*)fstate;
611*b1cdbd2cSJim Jagielski     return( fs->m_name );
612*b1cdbd2cSJim Jagielski }
613*b1cdbd2cSJim Jagielski  /**
614*b1cdbd2cSJim Jagielski   * returns starttime of passed funcstate structure
615*b1cdbd2cSJim Jagielski   */
rtl_tres_getstarttime(rtl_funcstate fstate)616*b1cdbd2cSJim Jagielski sal_uInt32 SAL_CALL rtl_tres_getstarttime( rtl_funcstate fstate )
617*b1cdbd2cSJim Jagielski {
618*b1cdbd2cSJim Jagielski     rtl_FuncState* fs = (rtl_FuncState*)fstate;
619*b1cdbd2cSJim Jagielski     return( fs->m_start );
620*b1cdbd2cSJim Jagielski }
621*b1cdbd2cSJim Jagielski 
622*b1cdbd2cSJim Jagielski  /**
623*b1cdbd2cSJim Jagielski   * returns stoptime of passed funcstate structure
624*b1cdbd2cSJim Jagielski   */
rtl_tres_getstoptime(rtl_funcstate fstate)625*b1cdbd2cSJim Jagielski sal_uInt32 SAL_CALL rtl_tres_getstoptime( rtl_funcstate fstate )
626*b1cdbd2cSJim Jagielski {
627*b1cdbd2cSJim Jagielski     rtl_FuncState* fs = (rtl_FuncState*)fstate;
628*b1cdbd2cSJim Jagielski     return( fs->m_stop );
629*b1cdbd2cSJim Jagielski }
630*b1cdbd2cSJim Jagielski 
631*b1cdbd2cSJim Jagielski  /**
632*b1cdbd2cSJim Jagielski   * returns pointer to cmpstate of passed funcstate structure
633*b1cdbd2cSJim Jagielski   */
rtl_tres_getcmpstate(rtl_funcstate fstate)634*b1cdbd2cSJim Jagielski rtl_cmpstate SAL_CALL rtl_tres_getcmpstate( rtl_funcstate fstate)
635*b1cdbd2cSJim Jagielski {
636*b1cdbd2cSJim Jagielski     rtl_FuncState* fs = (rtl_FuncState*)fstate;
637*b1cdbd2cSJim Jagielski     return( (rtl_cmpstate)fs->m_cmp );
638*b1cdbd2cSJim Jagielski 
639*b1cdbd2cSJim Jagielski }
640*b1cdbd2cSJim Jagielski  /**
641*b1cdbd2cSJim Jagielski   * returns boolean state of passed cmpstate structure
642*b1cdbd2cSJim Jagielski   */
rtl_tres_getstat(rtl_cmpstate cstate)643*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL rtl_tres_getstat( rtl_cmpstate cstate)
644*b1cdbd2cSJim Jagielski {
645*b1cdbd2cSJim Jagielski     rtl_CmpState* cs = (rtl_CmpState*)cstate;
646*b1cdbd2cSJim Jagielski     return( cs->m_stat );
647*b1cdbd2cSJim Jagielski }
648*b1cdbd2cSJim Jagielski  /**
649*b1cdbd2cSJim Jagielski   * returns message of passed cmpstate structure
650*b1cdbd2cSJim Jagielski   */
rtl_tres_getmsg(rtl_cmpstate cstate)651*b1cdbd2cSJim Jagielski rtl_String* SAL_CALL rtl_tres_getmsg( rtl_cmpstate cstate)
652*b1cdbd2cSJim Jagielski {
653*b1cdbd2cSJim Jagielski     rtl_CmpState* cs = (rtl_CmpState*)cstate;
654*b1cdbd2cSJim Jagielski     return( cs->m_msg );
655*b1cdbd2cSJim Jagielski }
656*b1cdbd2cSJim Jagielski  /**
657*b1cdbd2cSJim Jagielski   * returns next pointer of passed cmpstate structure
658*b1cdbd2cSJim Jagielski   */
rtl_tres_getnextcmpstate(rtl_cmpstate cstate)659*b1cdbd2cSJim Jagielski rtl_cmpstate SAL_CALL rtl_tres_getnextcmpstate( rtl_cmpstate cstate)
660*b1cdbd2cSJim Jagielski {
661*b1cdbd2cSJim Jagielski     rtl_CmpState* cs = (rtl_CmpState*)cstate;
662*b1cdbd2cSJim Jagielski     return( (rtl_cmpstate)cs->m_next );
663*b1cdbd2cSJim Jagielski }
664*b1cdbd2cSJim Jagielski 
665*b1cdbd2cSJim Jagielski /*
666*b1cdbd2cSJim Jagielski // <method_logPrintf>
667*b1cdbd2cSJim Jagielski //inline void logPrintf ( const sal_Bool   bTestCaseState,
668*b1cdbd2cSJim Jagielski //                            const char      *pFormatStr, ...
669*b1cdbd2cSJim Jagielski //                            )
670*b1cdbd2cSJim Jagielski //{
671*b1cdbd2cSJim Jagielski //    if( m_pFunctions && m_pFunctions->pLogPrintf )
672*b1cdbd2cSJim Jagielski //    {
673*b1cdbd2cSJim Jagielski //        va_list   vArgumentList;
674*b1cdbd2cSJim Jagielski //        va_start ( vArgumentList, pFormatStr );
675*b1cdbd2cSJim Jagielski 
676*b1cdbd2cSJim Jagielski //        m_pFunctions->pLogPrintf( this, bTestCaseState, pFormatStr, vArgumentList );
677*b1cdbd2cSJim Jagielski 
678*b1cdbd2cSJim Jagielski //        va_end ( vArgumentList );
679*b1cdbd2cSJim Jagielski //    }
680*b1cdbd2cSJim Jagielski //} // </method_logPrintf>
681*b1cdbd2cSJim Jagielski  */
682*b1cdbd2cSJim Jagielski 
683