/* LSNs are different since they are really normally * treated as by-value objects. We actually create * a pointer to the LSN and store that, deleting it * when the LSN is GC'd. */ jobject get_DbLsn(JNIEnv *jnienv, DB_LSN dbobj) { DB_LSN *lsnp = (DB_LSN *)malloc(sizeof(DB_LSN)); memset(lsnp, 0, sizeof(DB_LSN)); *lsnp = dbobj; return (convert_object(jnienv, name_DB_LSN, lsnp)); }
mustache_value_t* convert_type( char* key, void* context, mustache_context_t* m_lookup_context, mustache_context_t* m_exection_context) { if (strcmp(key, ".") == 0) { return convert_value((VALUE)context, m_lookup_context); } VALUE rb_context = (VALUE) context; switch (TYPE(rb_context)) { case T_OBJECT: return convert_object(rb_context, key, m_lookup_context, m_exection_context); case T_HASH: return convert_hash(rb_context, key, m_lookup_context, m_exection_context); default: return NULL; } }
jobject get_DbTxnStat(JNIEnv *jnienv, DB_TXN_STAT *dbobj) { return (convert_object(jnienv, name_DB_TXN_STAT, dbobj)); }
jobject get_DbTxn(JNIEnv *jnienv, DB_TXN *dbobj) { return (convert_object(jnienv, name_DB_TXN, dbobj)); }
jobject get_DbQueueStat(JNIEnv *jnienv, DB_QUEUE_STAT *dbobj) { return (convert_object(jnienv, name_DB_QUEUE_STAT, dbobj)); }
jobject get_DbMpoolStat(JNIEnv *jnienv, DB_MPOOL_STAT *dbobj) { return (convert_object(jnienv, name_DB_MPOOL_STAT, dbobj)); }
jobject get_Dbt(JNIEnv *jnienv, DBT *dbt) { return (convert_object(jnienv, name_DBT, dbt)); }
jobject get_DbLogStat(JNIEnv *jnienv, DB_LOG_STAT *dbobj) { return (convert_object(jnienv, name_DB_LOG_STAT, dbobj)); }
jobject get_DbHashStat(JNIEnv *jnienv, DB_HASH_STAT *dbobj) { return (convert_object(jnienv, name_DB_HASH_STAT, dbobj)); }
jobject get_Dbc(JNIEnv *jnienv, DBC *dbobj) { return (convert_object(jnienv, name_DBC, dbobj)); }
/* Convert a C pointer to the various Java objects they represent. */ jobject get_DbBtreeStat(JNIEnv *jnienv, DB_BTREE_STAT *dbobj) { return (convert_object(jnienv, name_DB_BTREE_STAT, dbobj)); }
void convert_objects(void) { int vnum; AREA_DATA *pArea; RESET_DATA *pReset; MOB_INDEX_DATA *pMob = NULL; OBJ_INDEX_DATA *pObj; ROOM_INDEX_DATA *pRoom; if (newobjs == top_obj_index) return; /* all objects in new format */ for (pArea = area_first; pArea; pArea = pArea->next) { for (vnum = pArea->min_vnum; vnum <= pArea->max_vnum; vnum++) { if (!(pRoom = get_room_index(vnum))) continue; for (pReset = pRoom->reset_first; pReset; pReset = pReset->next) { switch (pReset->command) { case 'M': if (!(pMob = get_mob_index(pReset->arg1))) bug("Convert_objects: 'M': bad vnum %d.", pReset->arg1); break; case 'O': if (!(pObj = get_obj_index(pReset->arg1))) { bug("Convert_objects: 'O': bad vnum %d.", pReset->arg1); break; } if (pObj->new_format) continue; if (!pMob) { bug("Convert_objects: 'O': No mob reset yet.", 0); break; } pObj->level = pObj->level < 1 ? pMob->level - 2 : UMIN(pObj->level, pMob->level - 2); break; case 'P': { OBJ_INDEX_DATA *pObj, *pObjTo; if (!(pObj = get_obj_index(pReset->arg1))) { bug("Convert_objects: 'P': bad vnum %d.", pReset->arg1); break; } if (pObj->new_format) continue; if (!(pObjTo = get_obj_index(pReset->arg3))) { bug("Convert_objects: 'P': bad vnum %d.", pReset->arg3); break; } pObj->level = pObj->level < 1 ? pObjTo->level : UMIN(pObj->level, pObjTo->level); } break; case 'G': case 'E': if (!(pObj = get_obj_index(pReset->arg1))) { bug("Convert_objects: 'E' or 'G': bad vnum %d.", pReset->arg1); break; } if (!pMob) { bug("Convert_objects: 'E' or 'G': null mob for vnum %d.", pReset->arg1); break; } if (pObj->new_format) continue; if (pMob->pShop) { switch (pObj->item_type) { default: pObj->level = UMAX(0, pObj->level); break; case ITEM_PILL: case ITEM_POTION: pObj->level = UMAX(5, pObj->level); break; case ITEM_SCROLL: case ITEM_ARMOR: case ITEM_WEAPON: pObj->level = UMAX(10, pObj->level); break; case ITEM_WAND: case ITEM_TREASURE: pObj->level = UMAX(15, pObj->level); break; case ITEM_STAFF: pObj->level = UMAX(20, pObj->level); break; } } else pObj->level = pObj->level < 1 ? pMob->level : UMIN(pObj->level, pMob->level); break; } /* switch ( pReset->command ) */ } } } /* do the conversion: */ for (pArea = area_first; pArea; pArea = pArea->next) for (vnum = pArea->min_vnum; vnum <= pArea->max_vnum; vnum++) if ((pObj = get_obj_index(vnum))) if (!pObj->new_format) convert_object(pObj); return; }