Imported Upstream version 5.3.21
[platform/upstream/libdb.git] / lang / java / libdb_java / java_stat.i
1 /* Statistics classes */
2 %{
3 /*
4  * These macros are used by code generated by the s_java script.
5  */
6 #define JAVADB_STAT_INT(jenv, jobj, fid, statp, name)                   \
7                 (*jenv)->SetIntField(jenv, jobj, fid, (jint)statp->name)
8
9 #define JAVADB_STAT_STRING(jenv, jobj, fid, statp, name)                \
10                 (*jenv)->SetObjectField(jenv, jobj, fid,                \
11                     (*jenv)->NewStringUTF(jenv, statp->name))
12
13 #define JAVADB_STAT_LSN(jenv, jobj, fid, statp, name)                   \
14                 (*jenv)->SetObjectField(jenv, jobj, fid,                \
15                     __dbj_wrap_DB_LSN(jenv, &statp->name))
16
17 #define JAVADB_STAT_LONG(jenv, jobj, fid, statp, name)                  \
18                 (*jenv)->SetLongField(jenv, jobj, fid,                  \
19                     (jlong)statp->name)
20
21 #define JAVADB_STAT_GID(jenv, jobj, fid, statp, name) {                 \
22         jobject jarr =                                                  \
23             (*jenv)->NewByteArray(jenv, (jsize)DB_GID_SIZE);            \
24         (*jenv)->SetByteArrayRegion(jenv, jarr,                         \
25             0, (jsize)DB_GID_SIZE, (jbyte *)statp->name);               \
26         (*jenv)->SetObjectField(jenv, jobj, fid, jarr);                 \
27         }
28
29 /*
30  * We build the active list separately.
31  */
32 #define JAVADB_STAT_ACTIVE(jenv, cl, jobj, statp, name) \
33         do {} while(0)
34
35 #include "java_stat_auto.c"
36 %}
37
38 %define JAVA_STAT_CLASS(_ctype, _jtype, _name)
39 JAVA_TYPEMAP(_ctype, _jtype, jobject)
40 %typemap(out) _ctype %{
41         if ($1 == NULL)
42                 $result = NULL;
43         else {
44                 $result = (*jenv)->NewObject(jenv, _name##_class, _name##_construct);
45                 if ($result != NULL)
46                         __dbj_fill_##_name(jenv, $result, $1);
47                 __os_ufree(NULL, $1);
48         }
49 %}
50 %enddef
51
52 JAVA_STAT_CLASS(DB_COMPACT *, com.sleepycat.db.CompactStats, compact)
53 %typemap(freearg) DB_COMPACT * %{ __dbj_fill_compact(jenv, $input, $1); %}
54 %typemap(in) DB_COMPACT * (DB_COMPACT compact) %{
55         memset(&compact, 0, sizeof (DB_COMPACT));
56         $1 = &compact;
57         $1->compact_fillpercent = (*jenv)->GetIntField(jenv, $input,
58             compact_compact_fillpercent_fid);
59         $1->compact_timeout = (*jenv)->GetIntField(jenv, $input,
60             compact_compact_timeout_fid);
61         $1->compact_pages = (*jenv)->GetIntField(jenv, $input,
62             compact_compact_pages_fid);
63 %}
64
65 JAVA_STAT_CLASS(DB_LOCK_STAT *, com.sleepycat.db.LockStats, lock_stat)
66 JAVA_STAT_CLASS(DB_LOG_STAT *, com.sleepycat.db.LogStats, log_stat)
67 JAVA_STAT_CLASS(DB_MPOOL_STAT *, com.sleepycat.db.CacheStats, mpool_stat)
68
69 JAVA_TYPEMAP(DB_MPOOL_FSTAT **, com.sleepycat.db.CacheFileStats[], jobjectArray)
70 %typemap(out) DB_MPOOL_FSTAT ** {
71         int i, len;
72
73         if ($1 == NULL)
74                 $result = NULL;
75         else {
76                 len = 0;
77                 while ($1[len] != NULL)
78                         len++;
79                 $result = (*jenv)->NewObjectArray(jenv, (jsize)len,
80                     mpool_fstat_class, 0);
81                 if ($result == NULL) {
82                         __os_ufree(NULL, $1);
83                         return $null;
84                 }
85                 for (i = 0; i < len; i++) {
86                         jobject obj = (*jenv)->NewObject(jenv, mpool_fstat_class,
87                             mpool_fstat_construct);
88                         if (obj == NULL) {
89                                 __os_ufree(NULL, $1);
90                                 return $null; /* an exception is pending */
91                         }
92                         (*jenv)->SetObjectArrayElement(jenv, $result, i, obj);
93                         __dbj_fill_mpool_fstat(jenv, obj, $1[i]);
94                 }
95                 __os_ufree(NULL, $1);
96         }
97 }
98
99 JAVA_STAT_CLASS(DB_MUTEX_STAT *, com.sleepycat.db.MutexStats, mutex_stat)
100 JAVA_STAT_CLASS(DB_REP_STAT *, com.sleepycat.db.ReplicationStats, rep_stat)
101 JAVA_STAT_CLASS(DB_REPMGR_STAT *, com.sleepycat.db.ReplicationManagerStats, repmgr_stat)
102 JAVA_STAT_CLASS(DB_SEQUENCE_STAT *, com.sleepycat.db.SequenceStats, seq_stat)
103 JAVA_TYPEMAP(DB_TXN_STAT *, com.sleepycat.db.TransactionStats, jobject)
104 %typemap(out) DB_TXN_STAT * {
105         unsigned int i;
106         jobjectArray actives;
107         
108         if ($1 == NULL)
109                 $result = NULL;
110         else {
111                 $result = (*jenv)->NewObject(jenv, txn_stat_class, txn_stat_construct);
112                 if ($result != NULL)
113                         __dbj_fill_txn_stat(jenv, $result, $1);
114
115                 actives = (*jenv)->NewObjectArray(jenv, (jsize)$1->st_nactive,
116                     txn_active_class, 0);
117                 if (actives == NULL) {
118                         __os_ufree(NULL, $1);
119                         return $null;
120                 }
121                 (*jenv)->SetObjectField(jenv, $result,
122                     txn_stat_st_txnarray_fid, actives);
123                 for (i = 0; i < $1->st_nactive; i++) {
124                         jobject obj = (*jenv)->NewObject(jenv, txn_active_class,
125                             txn_active_construct);
126                         if (obj == NULL) {
127                                 __os_ufree(NULL, $1);
128                                 return $null; /* an exception is pending */
129                         }
130                         (*jenv)->SetObjectArrayElement(jenv, actives, (jsize)i, obj);
131                         __dbj_fill_txn_active(jenv, obj, &$1->st_txnarray[i]);
132                 }
133                 __os_ufree(NULL, $1);
134         }
135 }
136
137 /* Db.stat return - special case */
138 %typemap(out) void * %{
139         if ($1 == NULL)
140                 $result = NULL;
141         else {
142                 DB *db = (DB *)arg1;
143                 DBTYPE dbtype;
144                 int ret;
145
146                 if ((ret = db->get_type(db, &dbtype)) != 0) {
147                         __dbj_throw(jenv, ret, NULL, NULL, DB2JDBENV);
148                         return $null;
149                 }
150
151                 switch (dbtype) {
152                         /* Btree and recno share the same stat structure */
153                 case DB_BTREE:
154                 case DB_RECNO:
155                         $result = (*jenv)->NewObject(jenv, bt_stat_class,
156                             bt_stat_construct);
157                         if ($result != NULL)
158                                 __dbj_fill_bt_stat(jenv, $result,
159                                     (DB_BTREE_STAT *)$1);
160                         break;
161
162                         /* Hash stat structure */
163                 case DB_HASH:
164                         $result = (*jenv)->NewObject(jenv, h_stat_class,
165                             h_stat_construct);
166                         if ($result != NULL)
167                                 __dbj_fill_h_stat(jenv, $result,
168                                     (DB_HASH_STAT *)$1);
169                         break;
170
171                         /* Heap stat structure */
172                 case DB_HEAP:
173                         $result = (*jenv)->NewObject(jenv, heap_stat_class,
174                             heap_stat_construct);
175                         if ($result != NULL)
176                                 __dbj_fill_heap_stat(jenv, $result,
177                                     (DB_HEAP_STAT *)$1);
178                         break;
179
180                 case DB_QUEUE:
181                         $result = (*jenv)->NewObject(jenv, qam_stat_class,
182                             qam_stat_construct);
183                         if ($result != NULL)
184                                 __dbj_fill_qam_stat(jenv, $result,
185                                     (DB_QUEUE_STAT *)$1);
186                         break;
187
188                         /* That's all the database types we're aware of! */
189                 default:
190                         __dbj_throw(jenv, EINVAL, "Db.stat only implemented for"
191                             " BTREE, HASH, QUEUE and RECNO", NULL, DB2JDBENV);
192                         break;
193                 }
194
195                 __os_ufree(db->env, $1);
196         }
197 %}
198