BWMIrror v2.1

This commit is contained in:
vjurenka 2015-03-22 18:44:15 +01:00
parent 6065021f23
commit 2a3bb21681
61 changed files with 8575876 additions and 68 deletions

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

Binary file not shown.

Binary file not shown.

BIN
bwmirror_v2_1.jar Normal file

Binary file not shown.

View file

@ -260,7 +260,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwapi/Player");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/Player;");
for(Playerset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Player elem_ptr = *it;
for(Playerset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const Player elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -275,7 +276,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwapi/Player");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/Player;");
for(Playerset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Player elem_ptr = *it;
for(Playerset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const Player elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -290,7 +292,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwapi/Force");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/Force;");
for(Forceset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Force elem_ptr = *it;
for(Forceset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const Force elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -305,7 +308,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwapi/Player");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/Player;");
for(Playerset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Player elem_ptr = *it;
for(Playerset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const Player elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -320,7 +324,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwapi/Unit");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/Unit;");
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it;
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const Unit elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -335,7 +340,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwapi/Unit");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/Unit;");
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it;
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const Unit elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -350,7 +356,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwapi/Unit");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/Unit;");
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it;
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const Unit elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -365,7 +372,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwapi/Unit");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/Unit;");
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it;
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const Unit elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -380,7 +388,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwapi/Unit");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/Unit;");
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it;
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const Unit elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -395,7 +404,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwapi/Unit");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/Unit;");
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it;
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const Unit elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -410,7 +420,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwapi/Unit");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/Unit;");
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it;
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const Unit elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -425,7 +436,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwapi/Bullet");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/Bullet;");
for(Bulletset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Bullet elem_ptr = *it;
for(Bulletset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const Bullet elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -848,7 +860,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwapi/Unit");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/Unit;");
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it;
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const Unit elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -884,7 +897,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwapi/Player");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/Player;");
for(Playerset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Player elem_ptr = *it;
for(Playerset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const Player elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -899,7 +913,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwapi/Player");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/Player;");
for(Playerset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Player elem_ptr = *it;
for(Playerset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const Player elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -914,7 +929,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwapi/Player");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/Player;");
for(Playerset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Player elem_ptr = *it;
for(Playerset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const Player elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -1484,7 +1500,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwapi/Region");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/Region;");
for(Regionset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Region elem_ptr = *it;
for(Regionset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const Region elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -1610,7 +1627,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwapi/Unit");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/Unit;");
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it;
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const Unit elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -1898,7 +1916,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwapi/Unit");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/Unit;");
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it;
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const Unit elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -2025,7 +2044,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwapi/Region");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/Region;");
for(Regionset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Region elem_ptr = *it;
for(Regionset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const Region elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -2524,7 +2544,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwapi/Unit");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/Unit;");
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it;
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const Unit elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -2550,7 +2571,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwapi/Unit");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/Unit;");
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it;
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const Unit elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -2572,7 +2594,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwapi/Unit");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/Unit;");
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it;
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const Unit elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -5035,7 +5058,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwapi/Unit");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/Unit;");
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it;
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const Unit elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -5050,7 +5074,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwapi/Unit");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/Unit;");
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it;
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const Unit elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -5065,7 +5090,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwapi/Unit");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/Unit;");
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it;
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const Unit elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -5315,6 +5341,42 @@ jclass retcls = FindCachedClass(env, "bwapi/Race");
jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwapi/Race;");
return env->CallStaticObjectMethod(retcls, mid, resptr);
}
JNIEXPORT jobject JNICALL Java_bwapi_UnitType_whatBuilds_1native(JNIEnv * env, jobject obj, jlong pointer){
UnitType* x_unitType = (UnitType*)pointer;
std::pair<UnitType, int> cresult = x_unitType->whatBuilds();
jclass firstElemClass = FindCachedClass(env, "bwapi/UnitType");
jmethodID firstGetMethodID = FindCachedMethodStatic(env, firstElemClass, "get", "(J)Lbwapi/UnitType;");
jclass secondElemClass = FindCachedClass(env, "java/lang/Integer");
jmethodID secondElemConsID = FindCachedMethod(env, secondElemClass, "<init>", "(I)V");
const UnitType* first_elem_ptr = tableUnitType.find((cresult.first).getID())->second;
jobject first = env->CallStaticObjectMethod(firstElemClass, firstGetMethodID, (long)first_elem_ptr) ;
const int second_elem_ptr = cresult.second;
jobject second = env->NewObject(secondElemClass, secondElemConsID, second_elem_ptr);
jclass retcls = FindCachedClass(env, "bwapi/Pair");
jmethodID retConsID = FindCachedMethod(env, retcls, "<init>", "(Ljava/lang/Object;Ljava/lang/Object;)V");
jobject result = env->NewObject(retcls, retConsID, first, second);
return result;
}
JNIEXPORT jobject JNICALL Java_bwapi_UnitType_requiredUnits_1native(JNIEnv * env, jobject obj, jlong pointer){
UnitType* x_unitType = (UnitType*)pointer;
std::map<UnitType, int> cresult = x_unitType->requiredUnits();
jclass listCls = FindCachedClass(env, "java/util/HashMap");
jmethodID listConsID = FindCachedMethod(env, listCls, "<init>", "()V");
jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
jclass keyElemClass = FindCachedClass(env, "bwapi/UnitType");
jmethodID keyGetMethodID = FindCachedMethodStatic(env, keyElemClass, "get", "(J)Lbwapi/UnitType;");
jclass valueElemClass = FindCachedClass(env, "java/lang/Integer");
jmethodID valueElemConsID = FindCachedMethod(env, valueElemClass, "<init>", "(I)V");
for(std::map<UnitType, int>::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const UnitType* key_elem_ptr = tableUnitType.find((it->first).getID())->second;
jobject keyElem = env->CallStaticObjectMethod(keyElemClass, keyGetMethodID, (long)key_elem_ptr) ;
const int value_elem_ptr = (it->second);
jobject valueElem = env->NewObject(valueElemClass, valueElemConsID, value_elem_ptr);
env->CallVoidMethod(result, addMethodID, keyElem, valueElem);
}
return result;
}
JNIEXPORT jobject JNICALL Java_bwapi_UnitType_requiredTech_1native(JNIEnv * env, jobject obj, jlong pointer){
UnitType* x_unitType = (UnitType*)pointer;
jlong resptr = (jlong)tableTechType.find(x_unitType->requiredTech())->second;
@ -5329,6 +5391,38 @@ jclass retcls = FindCachedClass(env, "bwapi/TechType");
jmethodID mid = FindCachedMethodStatic(env, retcls, "get", "(J)Lbwapi/TechType;");
return env->CallStaticObjectMethod(retcls, mid, resptr);
}
JNIEXPORT jobject JNICALL Java_bwapi_UnitType_abilities_1native(JNIEnv * env, jobject obj, jlong pointer){
UnitType* x_unitType = (UnitType*)pointer;
SetContainer<TechType> cresult = x_unitType->abilities();
jclass listCls = FindCachedClass(env, "java/util/ArrayList");
jmethodID listConsID = FindCachedMethod(env, listCls, "<init>", "()V");
jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwapi/TechType");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/TechType;");
for(SetContainer<TechType>::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const TechType* elem_ptr = tableTechType.find((*it).getID())->second;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
return result;
}
JNIEXPORT jobject JNICALL Java_bwapi_UnitType_upgrades_1native(JNIEnv * env, jobject obj, jlong pointer){
UnitType* x_unitType = (UnitType*)pointer;
SetContainer<UpgradeType> cresult = x_unitType->upgrades();
jclass listCls = FindCachedClass(env, "java/util/ArrayList");
jmethodID listConsID = FindCachedMethod(env, listCls, "<init>", "()V");
jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwapi/UpgradeType");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwapi/UpgradeType;");
for(SetContainer<UpgradeType>::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const UpgradeType* elem_ptr = tableUpgradeType.find((*it).getID())->second;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
return result;
}
JNIEXPORT jobject JNICALL Java_bwapi_UnitType_armorUpgrade_1native(JNIEnv * env, jobject obj, jlong pointer){
UnitType* x_unitType = (UnitType*)pointer;
jlong resptr = (jlong)tableUpgradeType.find(x_unitType->armorUpgrade())->second;
@ -5865,7 +5959,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwta/Unit");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwta/Unit;");
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it;
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const Unit elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -5880,7 +5975,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwta/Unit");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwta/Unit;");
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it;
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const Unit elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -5895,7 +5991,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwta/Unit");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwta/Unit;");
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const Unit elem_ptr = *it;
for(Unitset::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const Unit elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -5946,7 +6043,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwta/Region");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwta/Region;");
for(std::set<BWTA::Region*>::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const BWTA::Region* elem_ptr = *it;
for(std::set<BWTA::Region*>::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const BWTA::Region* elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -5960,7 +6058,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwta/Chokepoint");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwta/Chokepoint;");
for(std::set<BWTA::Chokepoint*>::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const BWTA::Chokepoint* elem_ptr = *it;
for(std::set<BWTA::Chokepoint*>::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const BWTA::Chokepoint* elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -5974,7 +6073,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwta/BaseLocation");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwta/BaseLocation;");
for(std::set<BWTA::BaseLocation*>::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const BWTA::BaseLocation* elem_ptr = *it;
for(std::set<BWTA::BaseLocation*>::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const BWTA::BaseLocation* elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -5988,7 +6088,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwta/BaseLocation");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwta/BaseLocation;");
for(std::set<BWTA::BaseLocation*>::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const BWTA::BaseLocation* elem_ptr = *it;
for(std::set<BWTA::BaseLocation*>::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const BWTA::BaseLocation* elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -6002,7 +6103,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwta/Polygon");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwta/Polygon;");
for(std::set<BWTA::Polygon*>::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const BWTA::Polygon* elem_ptr = *it;
for(std::set<BWTA::Polygon*>::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const BWTA::Polygon* elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -6109,6 +6211,62 @@ TilePosition start((int)env->GetIntField(p_start, FindCachedField(env, env->GetO
TilePosition end((int)env->GetIntField(p_end, FindCachedField(env, env->GetObjectClass(p_end), "x", "I")), (int)env->GetIntField(p_end, FindCachedField(env, env->GetObjectClass(p_end), "y", "I")));
return BWTA::getGroundDistance(start, end);
}
JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestTilePosition(JNIEnv * env, jclass jclz, jobject p_start, jobject p_targets){
TilePosition start((int)env->GetIntField(p_start, FindCachedField(env, env->GetObjectClass(p_start), "x", "I")), (int)env->GetIntField(p_start, FindCachedField(env, env->GetObjectClass(p_start), "y", "I")));
std::set<TilePosition> targets;
jclass colClass = env->GetObjectClass(p_targets);
jmethodID sizeMethodId = FindCachedMethod(env, colClass, "size", "()I");
jmethodID getMethodId = FindCachedMethod(env, colClass, "get", "(I)Ljava/lang/Object;");
int size = (int)env->CallIntMethod(p_targets, sizeMethodId);
for( int i = 0; i < size; i++ ) {
jobject p_cObj = env->CallObjectMethod(p_targets,getMethodId);
TilePosition cObj((int)env->GetIntField(p_cObj, FindCachedField(env, env->GetObjectClass(p_cObj), "x", "I")), (int)env->GetIntField(p_cObj, FindCachedField(env, env->GetObjectClass(p_cObj), "y", "I")));
targets.insert(cObj);
}
std::pair<TilePosition, double> cresult = BWTA::getNearestTilePosition(start, targets);
jclass firstElemClass = FindCachedClass(env, "bwta/TilePosition");
jmethodID firstElemConsID = FindCachedMethod(env, firstElemClass, "<init>", "(II)V");
jclass secondElemClass = FindCachedClass(env, "java/lang/Double");
jmethodID secondElemConsID = FindCachedMethod(env, secondElemClass, "<init>", "(D)V");
const TilePosition first_elem_ptr = cresult.first;
jobject first = env->NewObject(firstElemClass, firstElemConsID, first_elem_ptr.x, first_elem_ptr.y);
const double second_elem_ptr = cresult.second;
jobject second = env->NewObject(secondElemClass, secondElemConsID,second_elem_ptr);
jclass retcls = FindCachedClass(env, "bwta/Pair");
jmethodID retConsID = FindCachedMethod(env, retcls, "<init>", "(Ljava/lang/Object;Ljava/lang/Object;)V");
jobject result = env->NewObject(retcls, retConsID, first, second);
return result;
}
JNIEXPORT jobject JNICALL Java_bwta_BWTA_getGroundDistances(JNIEnv * env, jclass jclz, jobject p_start, jobject p_targets){
TilePosition start((int)env->GetIntField(p_start, FindCachedField(env, env->GetObjectClass(p_start), "x", "I")), (int)env->GetIntField(p_start, FindCachedField(env, env->GetObjectClass(p_start), "y", "I")));
std::set<TilePosition> targets;
jclass colClass = env->GetObjectClass(p_targets);
jmethodID sizeMethodId = FindCachedMethod(env, colClass, "size", "()I");
jmethodID getMethodId = FindCachedMethod(env, colClass, "get", "(I)Ljava/lang/Object;");
int size = (int)env->CallIntMethod(p_targets, sizeMethodId);
for( int i = 0; i < size; i++ ) {
jobject p_cObj = env->CallObjectMethod(p_targets,getMethodId);
TilePosition cObj((int)env->GetIntField(p_cObj, FindCachedField(env, env->GetObjectClass(p_cObj), "x", "I")), (int)env->GetIntField(p_cObj, FindCachedField(env, env->GetObjectClass(p_cObj), "y", "I")));
targets.insert(cObj);
}
std::map<TilePosition, double> cresult = BWTA::getGroundDistances(start, targets);
jclass listCls = FindCachedClass(env, "java/util/HashMap");
jmethodID listConsID = FindCachedMethod(env, listCls, "<init>", "()V");
jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
jclass keyElemClass = FindCachedClass(env, "bwta/TilePosition");
jmethodID keyElemConsID = FindCachedMethod(env, keyElemClass, "<init>", "(II)V");
jclass valueElemClass = FindCachedClass(env, "java/lang/Double");
jmethodID valueElemConsID = FindCachedMethod(env, valueElemClass, "<init>", "(D)V");
for(std::map<TilePosition, double>::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const TilePosition key_elem_ptr = (it->first);
jobject keyElem = env->NewObject(keyElemClass, keyElemConsID, key_elem_ptr.x, key_elem_ptr.y);
const double value_elem_ptr = (it->second);
jobject valueElem = env->NewObject(valueElemClass, valueElemConsID,value_elem_ptr);
env->CallVoidMethod(result, addMethodID, keyElem, valueElem);
}
return result;
}
JNIEXPORT void JNICALL Java_bwta_BWTA_buildChokeNodes(JNIEnv * env, jclass jclz){
BWTA::buildChokeNodes();
}
@ -6183,7 +6341,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwta/Chokepoint");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwta/Chokepoint;");
for(std::set<BWTA::Chokepoint*>::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const BWTA::Chokepoint* elem_ptr = *it;
for(std::set<BWTA::Chokepoint*>::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const BWTA::Chokepoint* elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -6198,7 +6357,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwta/BaseLocation");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwta/BaseLocation;");
for(std::set<BWTA::BaseLocation*>::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const BWTA::BaseLocation* elem_ptr = *it;
for(std::set<BWTA::BaseLocation*>::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const BWTA::BaseLocation* elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}
@ -6218,7 +6378,8 @@ jobject result = env->NewObject(listCls, listConsID);
jmethodID addMethodID = FindCachedMethod(env, listCls, "add", "(Ljava/lang/Object;)Z");
jclass elemClass = FindCachedClass(env, "bwta/Region");
jmethodID getMethodID = FindCachedMethodStatic(env, elemClass, "get", "(J)Lbwta/Region;");
for(std::set<BWTA::Region*>::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){const BWTA::Region* elem_ptr = *it;
for(std::set<BWTA::Region*>::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){
const BWTA::Region* elem_ptr = *it;
jobject elem = env->CallStaticObjectMethod(elemClass, getMethodID, (long)elem_ptr) ;
env->CallVoidMethod(result, addMethodID, elem);
}

Binary file not shown.

BIN
compiled4/bwapi/Pair.class Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -2291,6 +2291,17 @@ extern "C" {
}
#endif
#endif
/* Header for class bwapi_Pair */
#ifndef _Included_bwapi_Pair
#define _Included_bwapi_Pair
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
#endif
/* Header for class bwapi_Player */
#ifndef _Included_bwapi_Player
@ -7872,6 +7883,22 @@ JNIEXPORT jstring JNICALL Java_bwapi_UnitType_toString_1native
JNIEXPORT jobject JNICALL Java_bwapi_UnitType_getRace_1native
(JNIEnv *, jobject, jlong);
/*
* Class: bwapi_UnitType
* Method: whatBuilds_native
* Signature: (J)Lbwapi/Pair;
*/
JNIEXPORT jobject JNICALL Java_bwapi_UnitType_whatBuilds_1native
(JNIEnv *, jobject, jlong);
/*
* Class: bwapi_UnitType
* Method: requiredUnits_native
* Signature: (J)Ljava/util/Map;
*/
JNIEXPORT jobject JNICALL Java_bwapi_UnitType_requiredUnits_1native
(JNIEnv *, jobject, jlong);
/*
* Class: bwapi_UnitType
* Method: requiredTech_native
@ -7888,6 +7915,22 @@ JNIEXPORT jobject JNICALL Java_bwapi_UnitType_requiredTech_1native
JNIEXPORT jobject JNICALL Java_bwapi_UnitType_cloakingTech_1native
(JNIEnv *, jobject, jlong);
/*
* Class: bwapi_UnitType
* Method: abilities_native
* Signature: (J)Ljava/util/List;
*/
JNIEXPORT jobject JNICALL Java_bwapi_UnitType_abilities_1native
(JNIEnv *, jobject, jlong);
/*
* Class: bwapi_UnitType
* Method: upgrades_native
* Signature: (J)Ljava/util/List;
*/
JNIEXPORT jobject JNICALL Java_bwapi_UnitType_upgrades_1native
(JNIEnv *, jobject, jlong);
/*
* Class: bwapi_UnitType
* Method: armorUpgrade_native
@ -9224,6 +9267,22 @@ JNIEXPORT jboolean JNICALL Java_bwta_BWTA_isConnected__Lbwapi_TilePosition_2Lbwa
JNIEXPORT jdouble JNICALL Java_bwta_BWTA_getGroundDistance
(JNIEnv *, jclass, jobject, jobject);
/*
* Class: bwta_BWTA
* Method: getNearestTilePosition
* Signature: (Lbwapi/TilePosition;Ljava/util/List;)Lbwapi/Pair;
*/
JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestTilePosition
(JNIEnv *, jclass, jobject, jobject);
/*
* Class: bwta_BWTA
* Method: getGroundDistances
* Signature: (Lbwapi/TilePosition;Ljava/util/List;)Ljava/util/Map;
*/
JNIEXPORT jobject JNICALL Java_bwta_BWTA_getGroundDistances
(JNIEnv *, jclass, jobject, jobject);
/*
* Class: bwta_BWTA
* Method: buildChokeNodes

View file

@ -56,11 +56,11 @@ public class Mirror {
private static final boolean EXTRACT_JAR = true;
private static final String VERSION = "2_0";
private static final String VERSION = "2_1";
static {
String arch = System.getProperty("os.arch");
String dllNames[] = {"bwapi_bridge" + VERSION};
String dllNames[] = {"bwapi_bridge" + VERSION, "libgmp-10", "libmpfr-4"};
if(!arch.equals("x86")){
throw new UnsupportedOperationException("BWMirror API supports only x86 architecture.");
}

48
generated/bwapi/Pair.java Normal file
View file

@ -0,0 +1,48 @@
package bwapi;
/**
* Created with IntelliJ IDEA.
* User: Vladimir
* Date: 27.2.2014
* Time: 10:52
*/
public class Pair<K,V> {
public K first;
public V second;
public Pair() {
}
public Pair(K first, V second) {
this.first = first;
this.second = second;
}
@Override
public String toString() {
return "Pair{" +
"first=" + first +
", second=" + second +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Pair pair = (Pair) o;
if (first != null ? !first.equals(pair.first) : pair.first != null) return false;
if (second != null ? !second.equals(pair.second) : pair.second != null) return false;
return true;
}
@Override
public int hashCode() {
int result = first != null ? first.hashCode() : 0;
result = 31 * result + (second != null ? second.hashCode() : 0);
return result;
}
}

View file

@ -17,6 +17,14 @@ public class UnitType {
return getRace_native(pointer);
}
public Pair<UnitType, Integer> whatBuilds() {
return whatBuilds_native(pointer);
}
public Map<UnitType, Integer> requiredUnits() {
return requiredUnits_native(pointer);
}
public TechType requiredTech() {
return requiredTech_native(pointer);
}
@ -25,6 +33,14 @@ public class UnitType {
return cloakingTech_native(pointer);
}
public List<TechType> abilities() {
return abilities_native(pointer);
}
public List<UpgradeType> upgrades() {
return upgrades_native(pointer);
}
public UpgradeType armorUpgrade() {
return armorUpgrade_native(pointer);
}
@ -748,10 +764,18 @@ public class UnitType {
private native Race getRace_native(long pointer);
private native Pair<UnitType, Integer> whatBuilds_native(long pointer);
private native Map<UnitType, Integer> requiredUnits_native(long pointer);
private native TechType requiredTech_native(long pointer);
private native TechType cloakingTech_native(long pointer);
private native List<TechType> abilities_native(long pointer);
private native List<UpgradeType> upgrades_native(long pointer);
private native UpgradeType armorUpgrade_native(long pointer);
private native int maxHitPoints_native(long pointer);

View file

@ -10,6 +10,7 @@ import bwapi.Position;
import bwapi.TilePosition;
import bwapi.Player;
import bwapi.Unit;
import bwapi.Pair;
public class BWTA {
@ -65,6 +66,10 @@ public class BWTA {
public static native double getGroundDistance(TilePosition start, TilePosition end);
public static native Pair<TilePosition, Double> getNearestTilePosition(TilePosition start, List<TilePosition> targets);
public static native Map<TilePosition, Double> getGroundDistances(TilePosition start, List<TilePosition> targets);
public static native void buildChokeNodes();
public static native int getGroundDistance2(TilePosition start, TilePosition end);

View file

@ -10,6 +10,7 @@ import bwapi.Position;
import bwapi.TilePosition;
import bwapi.Player;
import bwapi.Unit;
import bwapi.Pair;
import bwapi.PositionedObject;
public class BaseLocation extends PositionedObject

View file

@ -10,6 +10,7 @@ import bwapi.Position;
import bwapi.TilePosition;
import bwapi.Player;
import bwapi.Unit;
import bwapi.Pair;
import bwapi.CenteredObject;
public class Chokepoint extends CenteredObject

View file

@ -10,6 +10,7 @@ import bwapi.Position;
import bwapi.TilePosition;
import bwapi.Player;
import bwapi.Unit;
import bwapi.Pair;
public class Polygon {

View file

@ -10,6 +10,7 @@ import bwapi.Position;
import bwapi.TilePosition;
import bwapi.Player;
import bwapi.Unit;
import bwapi.Pair;
import bwapi.CenteredObject;
public class Region extends CenteredObject

13
headers4/bwapi_Pair.h Normal file
View file

@ -0,0 +1,13 @@
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class bwapi_Pair */
#ifndef _Included_bwapi_Pair
#define _Included_bwapi_Pair
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
#endif

View file

@ -23,6 +23,22 @@ JNIEXPORT jstring JNICALL Java_bwapi_UnitType_toString_1native
JNIEXPORT jobject JNICALL Java_bwapi_UnitType_getRace_1native
(JNIEnv *, jobject, jlong);
/*
* Class: bwapi_UnitType
* Method: whatBuilds_native
* Signature: (J)Lbwapi/Pair;
*/
JNIEXPORT jobject JNICALL Java_bwapi_UnitType_whatBuilds_1native
(JNIEnv *, jobject, jlong);
/*
* Class: bwapi_UnitType
* Method: requiredUnits_native
* Signature: (J)Ljava/util/Map;
*/
JNIEXPORT jobject JNICALL Java_bwapi_UnitType_requiredUnits_1native
(JNIEnv *, jobject, jlong);
/*
* Class: bwapi_UnitType
* Method: requiredTech_native
@ -39,6 +55,22 @@ JNIEXPORT jobject JNICALL Java_bwapi_UnitType_requiredTech_1native
JNIEXPORT jobject JNICALL Java_bwapi_UnitType_cloakingTech_1native
(JNIEnv *, jobject, jlong);
/*
* Class: bwapi_UnitType
* Method: abilities_native
* Signature: (J)Ljava/util/List;
*/
JNIEXPORT jobject JNICALL Java_bwapi_UnitType_abilities_1native
(JNIEnv *, jobject, jlong);
/*
* Class: bwapi_UnitType
* Method: upgrades_native
* Signature: (J)Ljava/util/List;
*/
JNIEXPORT jobject JNICALL Java_bwapi_UnitType_upgrades_1native
(JNIEnv *, jobject, jlong);
/*
* Class: bwapi_UnitType
* Method: armorUpgrade_native

View file

@ -215,6 +215,22 @@ JNIEXPORT jboolean JNICALL Java_bwta_BWTA_isConnected__Lbwapi_TilePosition_2Lbwa
JNIEXPORT jdouble JNICALL Java_bwta_BWTA_getGroundDistance
(JNIEnv *, jclass, jobject, jobject);
/*
* Class: bwta_BWTA
* Method: getNearestTilePosition
* Signature: (Lbwapi/TilePosition;Ljava/util/List;)Lbwapi/Pair;
*/
JNIEXPORT jobject JNICALL Java_bwta_BWTA_getNearestTilePosition
(JNIEnv *, jclass, jobject, jobject);
/*
* Class: bwta_BWTA
* Method: getGroundDistances
* Signature: (Lbwapi/TilePosition;Ljava/util/List;)Ljava/util/Map;
*/
JNIEXPORT jobject JNICALL Java_bwta_BWTA_getGroundDistances
(JNIEnv *, jclass, jobject, jobject);
/*
* Class: bwta_BWTA
* Method: buildChokeNodes

View file

@ -1 +1 @@
"C:\Program Files\Java\jdk1.7.0_02\bin\javadoc.exe" -public -splitindex bwapi -sourcepath C:\Users\PC\IdeaProjects\BWLIB\generated -d C:\Users\PC\IdeaProjects\BWLIB\javadoc
"C:\Program Files\Java\jdk1.7.0_02\bin\javadoc.exe" -public -splitindex bwapi bwta -sourcepath C:\Users\PC\IdeaProjects\BWLIB\generated -d C:\Users\PC\IdeaProjects\BWLIB\javadoc

View file

@ -56,11 +56,11 @@ public class Mirror {
private static final boolean EXTRACT_JAR = true;
private static final String VERSION = "2_0";
private static final String VERSION = "2_1";
static {
String arch = System.getProperty("os.arch");
String dllNames[] = {"bwapi_bridge" + VERSION};
String dllNames[] = {"bwapi_bridge" + VERSION, "libgmp-10", "libmpfr-4"};
if(!arch.equals("x86")){
throw new UnsupportedOperationException("BWMirror API supports only x86 architecture.");
}

48
manual-bwapi4/Pair.java Normal file
View file

@ -0,0 +1,48 @@
package bwapi;
/**
* Created with IntelliJ IDEA.
* User: Vladimir
* Date: 27.2.2014
* Time: 10:52
*/
public class Pair<K,V> {
public K first;
public V second;
public Pair() {
}
public Pair(K first, V second) {
this.first = first;
this.second = second;
}
@Override
public String toString() {
return "Pair{" +
"first=" + first +
", second=" + second +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Pair pair = (Pair) o;
if (first != null ? !first.equals(pair.first) : pair.first != null) return false;
if (second != null ? !second.equals(pair.second) : pair.second != null) return false;
return true;
}
@Override
public int hashCode() {
int result = first != null ? first.hashCode() : 0;
result = 31 * result + (second != null ? second.hashCode() : 0);
return result;
}
}

View file

@ -258,7 +258,7 @@ public class CJavaPipeline {
PackageProcessOptions bwtaOptions = new PackageProcessOptions();
bwtaOptions.packageName = "bwta";
bwtaOptions.cHeadersDir = new File("bwta2-c");
bwtaOptions.additionalImportClasses = Arrays.asList("bwapi.Position", "bwapi.TilePosition", "bwapi.Player", "bwapi.Unit");
bwtaOptions.additionalImportClasses = Arrays.asList("bwapi.Position", "bwapi.TilePosition", "bwapi.Player", "bwapi.Unit", "bwapi.Pair");
bwtaOptions.globalClassName = "BWTA";
Properties props = new Properties();

View file

@ -1,5 +1,7 @@
package generator;
import util.Generic;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
@ -14,7 +16,7 @@ public class JavaContext {
private HashMap<String, String> javaToCType = new HashMap<>();
private List<String> valueTypes = Arrays.asList("Position", "TilePosition", "WalkPosition", "Color", "BWTA::RectangleArray<double>", "PositionOrUnit", "Point", "UnitCommand");
private List<String> valueTypes = Arrays.asList("Position", "TilePosition", "WalkPosition", "Color", "BWTA::RectangleArray<double>", "PositionOrUnit", "Point", "UnitCommand", "Integer", "Long", "Double", "Boolean", "int", "void", "double", "long", "Pair");
private List<String> constantTypes = Arrays.asList("UnitType", "TechType", "UpgradeType", "Race", "UnitCommand", "WeaponType", "Order", "GameType", "Error", "PlayerType", "UnitCommandType");
@ -56,6 +58,14 @@ public class JavaContext {
return result != null ? result : "REF";
}
public String toCPair(String javaType) {
if (javaType.startsWith("Pair")) {
String[] pair = Generic.extractPair(javaType);
return "std::pair<" + javaObjectToPrimitive(pair[0]) + ", " + javaObjectToPrimitive(pair[1]) + ">";
}
return javaType;
}
public boolean isReference(String javaType) {
return javaType.equals("REF");
}
@ -143,8 +153,20 @@ public class JavaContext {
return javaType.startsWith("List");
}
public boolean isPair(String javaType) {
return javaType.startsWith("Pair");
}
public boolean isMap(String javaType) {
return javaType.startsWith("Map");
}
public String copyConstructor(String javaType) {
switch (javaType) {
case "int":
return "I";
case "double":
return "D";
case "TilePosition":
case "WalkPosition":
case "Position":
@ -156,6 +178,8 @@ public class JavaContext {
return "I";
case "UnitCommand":
return "L" + packageName + "/Unit;L" + packageName + "/UnitCommandType;L" + packageName + "/Unit;III";
case "Pair":
return "Ljava/lang/Object;Ljava/lang/Object;";
default:
throw new UnsupportedOperationException();
}
@ -174,6 +198,16 @@ public class JavaContext {
public String implementCopyReturn(String javaType, String fieldName) {
switch (javaType) {
case "int":
return ", " + fieldName;
case "double":
return "," + fieldName;
case "bool":
return "," + fieldName;
case "Pair":
return ", first, second";
case "TilePosition":
case "Position":
case "WalkPosition":
@ -200,4 +234,22 @@ public class JavaContext {
public boolean isBWTA(String cls) {
return bwtaClasses.contains(cls);
}
public boolean isPrimitive(String javaType) {
return javaType.equals("Integer") || javaType.equals("Boolean") || javaType.equals("Double");
}
public String javaObjectToPrimitive(String cType) {
switch (cType) {
case "Integer":
return "int";
case "Double":
return "double";
case "Boolean":
return "bool";
default:
return cType;
}
}
}

View file

@ -48,10 +48,39 @@ public class MirrorContext {
return cType.startsWith("set<");
}
private boolean isMap(String cType) {
return cType.startsWith("map<");
}
private boolean isPair(String cType) {
return cType.startsWith("pair<");
}
private boolean isBWAPI4Collection(String cType) {
return cType.endsWith("set");
}
private String convertPrimitive(String cType) {
if (cType.equals("int")) {
return "Integer";
}
if (cType.equals("bool")) {
return "Boolean";
}
if (cType.equals("double")) {
return "Double";
}
return cType;
}
private String extractPair(String cType) {
cType = cType.substring(cType.indexOf("<") + 1, cType.lastIndexOf(">")).trim();
String[] types = cType.split(",");
return convertPrimitive(toJavaType(types[0].trim())) + ", " + convertPrimitive(toJavaType(types[1].trim()));
}
private String extractCollectionGeneric(String cType) {
cType = cType.substring(cType.indexOf("<") + 1, cType.lastIndexOf(">")).trim();
if (cType.contains(":")) {
@ -75,18 +104,27 @@ public class MirrorContext {
if (isBWAPI4Collection(cType)) {
return "List<" + extractBWAPI4CollectionGeneric(cType) + ">";
}
if (isMap(cType)) {
return "Map<" + extractPair(cType) + ">";
}
if (isPair(cType)) {
return "Pair<" + extractPair(cType) + ">";
}
String result = cToJavaTypes.get(cType);
if (result == null) {
result = cType;
}
int ddIndex;
if (result != null && (ddIndex = result.lastIndexOf(':')) != -1) {
if ((ddIndex = result.lastIndexOf(':')) != -1) {
result = result.substring(ddIndex + 1);
}
if (cType.endsWith("*")) {
return cType.substring(0, cType.length() - 1);
if (result.endsWith("*")) {
return result.substring(0, result.length() - 1);
}
/*if (CJavaPipeline.BWAPI_VERSION == CJavaPipeline.BWAPI_V4 && cType.contains("bwapi.")) {
cType = cType.replace("bwapi.", "bwapi4.");
} */
return result != null ? result : cType;
return result;
}
public List<String> getAdditionalImports() {

View file

@ -52,14 +52,14 @@ public class CallImplementer {
public void setOut(PrintStream out) {
this.out = out;
out.print("#include \"../concat_header" + (CJavaPipeline.isBWAPI3() ? "" : "4")+ ".h\"\n" +
out.print("#include \"../concat_header" + (CJavaPipeline.isBWAPI3() ? "" : "4") + ".h\"\n" +
"#include <BWAPI.h>\n" +
"#include <BWAPI/Client.h>\n" +
"#include <BWTA.h>\n" +
(CJavaPipeline.isBWAPI3() ? "" : "#include <thread>\n" + "#include <chrono>\n") +
"#include <jni.h>\n" +
"#include <cstring>\n" +
(CJavaPipeline.isBWAPI3() ? "#include \"../BWTA_Result.h\"" : "")+
(CJavaPipeline.isBWAPI3() ? "#include \"../BWTA_Result.h\"" : "") +
"\n" +
"using namespace BWAPI;\n\n");
}
@ -85,21 +85,35 @@ public class CallImplementer {
if (javaContext.isCollection(param.third)) {
String genericType = Generic.extractGeneric(param.third);
if (CJavaPipeline.isBWAPI3()) {
if (CJavaPipeline.isBWAPI3() || javaContext.isValueType(genericType)) {
out.println("std::set<" + PointerTest.test(genericType) + "> " + param.second + SEMICOLON);
} else {
out.println(genericType + "set " + param.second + SEMICOLON);
}
out.println("jclass colClass = env->GetObjectClass(" + paramName + ");");
out.println("jmethodID sizeMethodId = FindCachedMethod(env, colClass, \"size\", \"()I\");");
out.println("jmethodID getMethodId = FindCachedMethod(env, colClass, \"get\", \"(I)Ljava/lang/Object;\");");
out.println("int size = (int)env->CallIntMethod(" + paramName + ", sizeMethodId);");
out.println("for( int i = 0; i < size; i++ ) {");
out.println("jobject jobj = env->CallObjectMethod(" + paramName + ",getMethodId);");
if (!javaContext.isValueType(genericType)) {
out.println("jobject jobj = env->CallObjectMethod(" + paramName + ",getMethodId);");
} else{
out.println("jobject p_cObj = env->CallObjectMethod(" + paramName + ",getMethodId);");
out.println(javaContext.copyJavaObjectToC(genericType, "cObj"));
}
out.print(param.second + ".insert(");
out.print("(" + PointerTest.test(genericType) + ")");
out.print("env->GetLongField(jobj, FindCachedField(env, env->GetObjectClass(jobj), \"pointer\", \"J\"))");
if (!javaContext.isValueType(genericType)) {
out.print("(" + PointerTest.test(genericType) + ")");
out.print("env->GetLongField(jobj, FindCachedField(env, env->GetObjectClass(jobj), \"pointer\", \"J\"))");
}
else{
out.print("cObj");
}
out.println(");");
out.println("}");
continue;
@ -170,6 +184,8 @@ public class CallImplementer {
out.println("}");
}
private String wrapInCCollection(String genericType) {
String buffer = "";
boolean isBWAPI4Collection = !CJavaPipeline.isBWAPI3() && !genericType.startsWith("BWTA::");
@ -184,9 +200,125 @@ public class CallImplementer {
} else {
buffer += "set";
}
if(buffer.equals("set") && !CJavaPipeline.isBWAPI3()){
return "SetContainer<" + genericType + ">";
}
return buffer;
}
private String wrapInCMap(String cKey, String cValue) {
String buffer = "std::map<";
buffer += javaContext.javaObjectToPrimitive(cKey);
buffer += ", ";
buffer += javaContext.javaObjectToPrimitive(cValue);
buffer += ">";
return buffer;
}
private void implementMapReturn(String cKey, String cValue) {
String javaKeyType = cKey;
if (cKey.contains("::")) {
javaKeyType = cKey.substring(cKey.lastIndexOf(":") + 1);
}
String javaValueType = cValue;
if (cValue.contains("::")) {
javaValueType = cValue.substring(cValue.lastIndexOf(":") + 1);
}
if (javaContext.isPrimitive(javaKeyType)) {
cKey = javaContext.javaObjectToPrimitive(javaKeyType);
}
if (javaContext.isPrimitive(javaValueType)) {
cValue = javaContext.javaObjectToPrimitive(javaValueType);
}
//get all the method ids and create na empty arraylist
out.println("jclass listCls = FindCachedClass(env, \"java/util/HashMap\");\n" +
"jmethodID listConsID = FindCachedMethod(env, listCls, \"<init>\", \"()V\");\n" +
"jobject result = env->NewObject(listCls, listConsID);");
out.println("jmethodID addMethodID = FindCachedMethod(env, listCls, \"put\", \"(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;\");");
//Key static part
String keyPackageName = javaContext.getPackageName();
if (javaContext.isPrimitive(javaKeyType)) {
keyPackageName = "java/lang";
}
out.println("jclass keyElemClass = FindCachedClass(env, \"" + keyPackageName + "/" + javaKeyType + "\");");
if (!javaContext.isValueType(javaKeyType)) {
out.println("jmethodID keyGetMethodID = FindCachedMethodStatic(env, keyElemClass, \"get\", \"(J)L" + keyPackageName + "/" + javaKeyType + ";\");");
} else {
out.println("jmethodID keyElemConsID = FindCachedMethod(env, keyElemClass, \"<init>\", \"(" + javaContext.copyConstructor(cKey) + ")V\");");
}
//Value static part
String valuePackageName = javaContext.getPackageName();
if (javaContext.isPrimitive(javaValueType)) {
valuePackageName = "java/lang";
}
out.println("jclass valueElemClass = FindCachedClass(env, \"" + valuePackageName + "/" + javaValueType + "\");");
if (!javaContext.isValueType(javaValueType)) {
out.println("jmethodID valueGetMethodID = FindCachedMethodStatic(env, valueElemClass, \"get\", \"(J)L" + valuePackageName + "/" + javaValueType + ";\");");
} else {
out.println("jmethodID valueElemConsID = FindCachedMethod(env, valueElemClass, \"<init>\", \"(" + javaContext.copyConstructor(cValue) + ")V\");");
}
//the for loop
out.println("for(" + wrapInCMap(cKey, cValue) + "::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){");
//key dynamic part
out.print("const " + cKey);
if (!javaContext.isValueType(javaKeyType)) {
out.print(PointerTest.test(cKey, false));
}
out.print(" key_elem_ptr = ");
if (javaContext.isConstantTye(javaKeyType) && !javaContext.isPrimitive(javaKeyType)) {
out.println("table" + cKey + ".find((it->first).getID())->second;");
} else {
out.println("(it->first);");
}
if (!javaContext.isValueType(javaKeyType)) {
out.println("jobject keyElem = env->CallStaticObjectMethod(keyElemClass, keyGetMethodID, (long)key_elem_ptr) ;");
} else {
out.println("jobject keyElem = env->NewObject(keyElemClass, keyElemConsID" + javaContext.implementCopyReturn(cKey, "key_elem_ptr") + ")" + SEMICOLON);
}
//value dynamic part
out.print("const " + cValue);
if (!javaContext.isValueType(javaValueType)) {
out.print(PointerTest.test(cValue, false));
}
out.print(" value_elem_ptr = ");
if (javaContext.isConstantTye(javaValueType) && !javaContext.isPrimitive(javaValueType)) {
out.println("table" + cValue + ".find((it->second).getID())->second;");
} else {
out.println("(it->second);");
}
if (!javaContext.isValueType(javaValueType)) {
out.println("jobject valueElem = env->CallStaticObjectMethod(valueElemClass, valueGetMethodID, (long)value_elem_ptr) ;");
} else {
out.println("jobject valueElem = env->NewObject(valueElemClass, valueElemConsID" + javaContext.implementCopyReturn(cValue, "value_elem_ptr") + ")" + SEMICOLON);
}
out.println("env->CallVoidMethod(result, addMethodID, keyElem, valueElem);");
out.println("}");
//for loop ends here
out.println("return result;");
}
/**
* this basically just converts a std::set to java.util.ArrayList
* it simply creates an array list and then loops through the set and calls list.add(element)
@ -214,7 +346,7 @@ public class CallImplementer {
//the for loop
out.print("for(" + wrapInCCollection(genericType) + "::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){");
out.println("for(" + wrapInCCollection(genericType) + "::const_iterator it = cresult.begin(); it != cresult.end(); it++ ){");
out.print("const " + genericType);
if (!javaContext.isValueType(genericType)) {
out.print(PointerTest.test(genericType, false));
@ -238,6 +370,100 @@ public class CallImplementer {
}
private void implementPairReturn(String javaPairType){
String [] pair = Generic.extractPair(javaPairType);
String cFirst = pair[0];
String cSecond = pair[1];
String javaFirstType = cFirst;
String javaSecondType = cSecond;
String javaKeyType = cFirst;
if (cFirst.contains("::")) {
javaKeyType = cFirst.substring(cFirst.lastIndexOf(":") + 1);
}
String javaValueType = cSecond;
if (cSecond.contains("::")) {
javaValueType = cSecond.substring(cSecond.lastIndexOf(":") + 1);
}
if (javaContext.isPrimitive(javaKeyType)) {
cFirst = javaContext.javaObjectToPrimitive(javaKeyType);
}
if (javaContext.isPrimitive(javaValueType)) {
cSecond = javaContext.javaObjectToPrimitive(javaValueType);
}
//First static part
String firstPackageName = javaContext.getPackageName();
if (javaContext.isPrimitive(javaFirstType)) {
firstPackageName = "java/lang";
}
out.println("jclass firstElemClass = FindCachedClass(env, \"" + firstPackageName + "/" + javaFirstType + "\");");
if (!javaContext.isValueType(javaFirstType)) {
out.println("jmethodID firstGetMethodID = FindCachedMethodStatic(env, firstElemClass, \"get\", \"(J)L" + firstPackageName + "/" + javaFirstType + ";\");");
} else {
out.println("jmethodID firstElemConsID = FindCachedMethod(env, firstElemClass, \"<init>\", \"(" + javaContext.copyConstructor(cFirst) + ")V\");");
}
//Second static part
String secondPackageName = javaContext.getPackageName();
if (javaContext.isPrimitive(javaSecondType)) {
secondPackageName = "java/lang";
}
out.println("jclass secondElemClass = FindCachedClass(env, \"" + secondPackageName + "/" + javaSecondType + "\");");
if (!javaContext.isValueType(javaSecondType)) {
out.println("jmethodID secondGetMethodID = FindCachedMethodStatic(env, secondElemClass, \"get\", \"(J)L" + secondPackageName + "/" + javaSecondType + ";\");");
} else {
out.println("jmethodID secondElemConsID = FindCachedMethod(env, secondElemClass, \"<init>\", \"(" + javaContext.copyConstructor(cSecond) + ")V\");");
}
//first dynamic part
out.print("const " + cFirst);
if (!javaContext.isValueType(javaFirstType)) {
out.print(PointerTest.test(cFirst, false));
}
out.print(" first_elem_ptr = ");
if (javaContext.isConstantTye(javaFirstType) && !javaContext.isPrimitive(javaFirstType)) {
out.println("table" + cFirst + ".find((cresult.first).getID())->second;");
} else {
out.println("cresult.first;");
}
if (!javaContext.isValueType(javaFirstType)) {
out.println("jobject first = env->CallStaticObjectMethod(firstElemClass, firstGetMethodID, (long)first_elem_ptr) ;");
} else {
out.println("jobject first = env->NewObject(firstElemClass, firstElemConsID" + javaContext.implementCopyReturn(cFirst, "first_elem_ptr") + ")" + SEMICOLON);
}
//second dynamic part
out.print("const " + cSecond);
if (!javaContext.isValueType(javaSecondType)) {
out.print(PointerTest.test(cSecond, false));
}
out.print(" second_elem_ptr = ");
if (javaContext.isConstantTye(javaSecondType) && !javaContext.isPrimitive(javaSecondType)) {
out.println("table" + cSecond + ".find((cresult.second).getID())->second;");
} else {
out.println("cresult.second;");
}
if (!javaContext.isValueType(javaSecondType)) {
out.println("jobject second = env->CallStaticObjectMethod(secondElemClass, secondGetMethodID, (long)second_elem_ptr) ;");
} else {
out.println("jobject second = env->NewObject(secondElemClass, secondElemConsID" + javaContext.implementCopyReturn(cSecond, "second_elem_ptr") + ")" + SEMICOLON);
}
//for loop ends here
}
private void implementMethodReturn(String objName, String javaMethodName, List<Param> params, String cReturnType, String javaRetType, String javaPackageName, String clsName, boolean isStatic) {
String objectAccessor = VARIABLE_PREFIX + objName + (javaContext.isValueType(clsName) ? "." : "->");
@ -246,7 +472,7 @@ public class CallImplementer {
}
//case 1 - method returns a collection type, this requires a LOT of work, so get the std::set and proceed in implementCollectionReturn
if (javaRetType.startsWith("List<")) {
if (javaContext.isCollection(javaRetType)) {
String genericType = convertToBWTA(Generic.extractGeneric(javaRetType));
out.print(wrapInCCollection(genericType) + " cresult = " + objectAccessor + javaMethodName + "(");
implementRealParams(params);
@ -254,15 +480,38 @@ public class CallImplementer {
implementCollectionReturn(genericType);
return;
}
//case 2 method returns a java object
//case 2 - method returns a mape, this requires a LOT of work, so get the std::map and proceed in implementCollectionReturn
if (javaContext.isMap(javaRetType)) {
String pairData[] = Generic.extractPair(javaRetType);
String key = pairData[0];
String value = pairData[1];
out.print(wrapInCMap(key, value) + " cresult = " + objectAccessor + javaMethodName + "(");
implementRealParams(params);
out.println(")" + SEMICOLON);
implementMapReturn(key, value);
return;
}
//case 4 method returns a java object
if (cReturnType.equals("jobject")) {
//we may need to create a new java object in case this a value type (we can't use the instance map)
String fullReturnType = javaRetType;
String cRetType = javaContext.toCPair(javaRetType);
javaRetType = Generic.stripGeneric(javaRetType);
if (javaContext.isValueType(javaRetType)) {
//first make the normal c++ call
out.print(javaRetType + " cresult = " + objectAccessor + javaMethodName + "(");
out.print(cRetType + " cresult = " + objectAccessor + javaMethodName + "(");
implementRealParams(params);
out.print(")");
out.println(SEMICOLON);
//handle pairs
if(javaRetType.equals("Pair")){
implementPairReturn(fullReturnType);
}
out.println("jclass retcls = FindCachedClass(env, \"" + javaContext.getPackageName(javaRetType) + "/" + javaRetType + "\");");
//now create a new object and return it
@ -399,7 +648,7 @@ public class CallImplementer {
}
public void notifyPackageStart() {
if(customFunctionsWritten){
if (customFunctionsWritten) {
return;
}
customFunctionsWritten = true;

View file

@ -42,13 +42,13 @@ public class CApiParser {
//String FUNC_REGEX = "^(\\s*)(virtual)?\\s([\\w\\*]+)\\s([\\w\\*]+)\\((.*)\\)(\\s=\\s0;)?";
//String FUNC_REGEX = "^(\\s*)(virtual)?\\s(BWAPI::)?([\\w\\*]+)\\s([\\w\\*]+)\\((.*)\\)((\\sconst)?\\s=\\s0;)?";
//String FUNC_REGEX = "^(\\s*)(virtual)?\\s((BWAPI)|(std)::)?([\\w\\*]+)\\s([\\w\\*]+)\\((.*)\\)((\\sconst)?\\s=\\s0;)?";
// 1 2 3 4 56 7 89 10 11 12 13 14,15 15,17
public static final String FUNC_REGEX = "^(\\s*)(virtual)?\\s(const\\s)?(static\\s)?((BWAPI::)|(std)::)?((set<(\\s*(BWAPI::)?\\w+\\*?\\s*)>)|([\\w\\*]+))&?\\s+(&?[\\w\\*]+)\\((.*)\\)(\\s*const)?(\\s*=\\s0)?(;)?\\s*";
// 1 2 3 4 56 7 891011 12 13 14 15 16 17 18 19 20
String FUNC_REGEX = "^(\\s*)(virtual\\s)?(const\\s)?(static\\s)?((BWAPI::)|(std::))?((((pair)|(set)|(map)|(SetContainer))<(\\s*(BWAPI::)?\\w+\\*?\\s*)(\\s*,\\s*\\w+\\s*)?>)|([\\w\\*]+))&?\\s+(&?[\\w\\*]+)\\((.*)\\)(\\s*const)?(\\s*=\\s0)?(;)?\\s*";
static final int F_REGEX_STATIC = 4;
static final int F_REGEX_RETURN_TYPE = 8;
static final int F_REGEX_NAME = 13;
static final int F_REGEX_PARAMS = 14;
static final int F_REGEX_NAME = 19;
static final int F_REGEX_PARAMS = 20;
String ENUM_VALUE_REGEX = "^(\\s*)(\\w+)(\\s*=\\s*(0x)?([0-9A-Fa-f]+))?\\s*[\\,;]";
@ -248,6 +248,10 @@ public class CApiParser {
function.returnType = "double";
}
if (function.returnType.startsWith("SetContainer")) {
function.returnType = "set" + function.returnType.substring("SetContainer".length());
}
if (function.returnType.equals("GameData*")) {
System.err.println("function skipped - GameData* return (" + function.name + ")");
return null;

View file

@ -12,17 +12,19 @@ import java.util.regex.Pattern;
*/
public class FunctionRegexTest {
// 1 2 3 4 56 7 89 10 11 12,13 14,15
//String FUNC_REGEX = "^(\\s*)(virtual)?\\s(const\\s)?((BWAPI::)|(std::))?((set<(\\w+\\*?)>)|([\\w\\*]+))&?\\s([\\w\\*]+)\\((.*)\\)((\\sconst)?\\s*=\\s*0;)?";
String FUNC_REGEX = "^(\\s*)(virtual)?\\s(const\\s)?(static\\s)?((BWAPI::)|(std)::)?((set<(\\s*(BWAPI::)?\\w+\\*?\\s*)>)|([\\w\\*]+))&?\\s+(&?[\\w\\*]+)\\((.*)\\)(\\s*const)?(\\s*=\\s0)?(;)?\\s*";
// 1 2 3 4 56 7 891011 12 13 14 15 16 17 18 19
String FUNC_REGEX = "^(\\s*)(virtual\\s)?(const\\s)?(static\\s)?((BWAPI::)|(std::))?((((pair)|(set)|(map))<(\\s*(BWAPI::)?\\w+\\*?\\s*)(\\s*,\\s*\\w+\\s*)?>)|([\\w\\*]+))&?\\s+(&?[\\w\\*]+)\\((.*)\\)(\\s*const)?(\\s*=\\s0)?(;)?\\s*";
String ENUM_VALUE_REGEX = "^(\\s*)(\\w+)(\\s*=\\s*(0x)?([0-9A-Fa-f]+))?\\s*[\\,;]";
Pattern funcPattern = Pattern.compile(CApiParser.FUNC_REGEX);
Pattern funcPattern = Pattern.compile(FUNC_REGEX);
public void run() {
Matcher matcher = funcPattern.matcher(" static UnitCommand repair(Unit unit, Unit target, bool shiftQueueCommand = false);");
Matcher matcher = funcPattern.matcher("const pair< UnitType , int > whatBuilds() const;");
if (matcher.matches()) {
System.out.println("match");
System.out.print(matcher.group(18));
}
}

View file

@ -3,6 +3,7 @@ package test.api;
import bwapi.*;
import bwapi.Text.Size.Enum;
import bwta.BWTA;
import util.Pair;
import java.io.File;
@ -37,6 +38,7 @@ public class TestBot1 {
public void onFrame() {
Game game = mirror.getGame();
Player self = game.self();
UnitType.Protoss_Archon.whatBuilds();
game.drawBoxScreen(0, 0, 100, 100, Color.Red, true);

View file

@ -9,4 +9,18 @@ public class Generic {
public static String extractGeneric(String str){
return str.substring(str.indexOf("<") +1, str.indexOf(">")).trim();
}
public static String[] extractPair(String str) {
str = str.substring(str.indexOf("<") +1, str.indexOf(">")).trim();
String[] kv = str.split(",");
return new String[]{kv[0].trim(), kv[1].trim()};
}
public static String stripGeneric(String str){
int index = str.indexOf("<");
if (index == -1){
return str;
}
return str.substring(0, index);
}
}

12
src/util/StringUtils.java Normal file
View file

@ -0,0 +1,12 @@
package util;
/**
* User: PC
* Date: 22. 3. 2015
* Time: 14:52
*/
public class StringUtils {
public static String capitalize(final String line) {
return Character.toUpperCase(line.charAt(0)) + line.substring(1);
}
}