static jlong nativeReadFromParcel(JNIEnv* env, jclass clazz,
        jlong nativeObject, jobject parcelObj) {
    Parcel* parcel = parcelForJavaObject(env, parcelObj);
    if (parcel == NULL) {
        doThrowNPE(env);
        return 0;
    }

    sp<Surface> self(reinterpret_cast<Surface *>(nativeObject));
    sp<IBinder> binder(parcel->readStrongBinder());

    // update the Surface only if the underlying IGraphicBufferProducer
    // has changed.
    if (self != NULL
            && (self->getIGraphicBufferProducer()->asBinder() == binder)) {
        // same IGraphicBufferProducer, return ourselves
        return jlong(self.get());
    }

    sp<Surface> sur;
    sp<IGraphicBufferProducer> gbp(interface_cast<IGraphicBufferProducer>(binder));
    if (gbp != NULL) {
        // we have a new IGraphicBufferProducer, create a new Surface for it
        sur = new Surface(gbp, true);
        // and keep a reference before passing to java
        sur->incStrong(&sRefBaseOwner);
    }

    if (self != NULL) {
        // and loose the java reference to ourselves
        self->decStrong(&sRefBaseOwner);
    }

    return jlong(sur.get());
}
// Atomically advance the cursor, claiming a number of indicies for the local thread to act upon.  Returns
// false if all indicies have been claimed, or true if some new indicies have been claimed.
bool GPGC_PopulationArray::atomic_claim_array_chunk(uint64_t& start_cursor, uint64_t& end_cursor, long work_unit)
{
  start_cursor = 0;
  end_cursor   = 0;

  uint64_t max_cursor;
  uint64_t cursor;
  uint64_t new_cursor;

  do {
    max_cursor = this->max_cursor();
    cursor     = this->cursor();
    if ( cursor >= max_cursor ) {
      return false;
    }
    new_cursor = cursor + work_unit;
    if ( new_cursor > max_cursor ) {
      new_cursor = max_cursor;
    }
  } while ( jlong(cursor) != Atomic::cmpxchg(jlong(new_cursor), (jlong*)this->cursor_addr(), jlong(cursor)) );

  start_cursor = cursor;
  end_cursor   = new_cursor;

  return true;
}
inline void GPGC_PageInfo::atomic_clear_flag(Flags flag)
{
  uint64_t old_flags;
  uint64_t new_flags;

  do {
    old_flags = _flags;
    assert0( (old_flags&flag) != 0 );
new_flags=old_flags&~flag;
  } while ( jlong(old_flags) != Atomic::cmpxchg(jlong(new_flags), (jlong*)&_flags, jlong(old_flags)) );
}
inline void GPGC_PageInfo::atomic_set_flag(Flags flag, Flags assert_not_flag)
{
  uint64_t old_flags;
  uint64_t new_flags;

  do {
    old_flags = _flags;
    assert0( (old_flags&assert_not_flag) == 0 );
new_flags=old_flags|flag;
  } while ( jlong(old_flags) != Atomic::cmpxchg(jlong(new_flags), (jlong*)&_flags, jlong(old_flags)) );
}
inline uint64_t GPGC_PageInfo::atomic_decrement_flags_count()
{
  uint64_t old_flags;
  uint64_t new_flags;

  do {
    old_flags = _flags;
    assert( (old_flags>>CountShift) != 0,  "GPGC_PageInfo flags count underflow" );
    new_flags = old_flags - (1UL << CountShift);
  } while ( jlong(old_flags) != Atomic::cmpxchg(jlong(new_flags), (jlong*)&_flags, jlong(old_flags)) );

  return (new_flags >> CountShift);
}
inline void GPGC_PageInfo::atomic_increment_flags_count(uint64_t delta)
{
  uint64_t old_flags;
  uint64_t new_flags;

  do {
    old_flags = _flags;
    assert(   delta                         <= uint64_t(WordsPerGPGCPage), "GPGC_PageInfo flags count delta too large" );
    assert(  (old_flags>>CountShift)        <= uint64_t(WordsPerGPGCPage), "GPGC_PageInfo flags count overflow" );
    assert( ((old_flags>>CountShift)+delta) <= uint64_t(WordsPerGPGCPage), "Increment delta causing flags count overflow" );
    new_flags = old_flags + (delta << CountShift);
  } while ( jlong(old_flags) != Atomic::cmpxchg(jlong(new_flags), (jlong*)&_flags, jlong(old_flags)) );
}
inline void GPGC_PageInfo::reset_unshatter_free_stats()
{
  uint64_t old_flags;
  uint64_t new_flags;

  do {
    old_flags = _flags;
    assert0( (old_flags&PinnedFlag) == 0 );
    new_flags = old_flags & AllButCountMask;
    new_flags = new_flags & ~AllFreeStatFlags;
new_flags=new_flags|UnshatterFreeStatsFlag;
  } while ( jlong(old_flags) != Atomic::cmpxchg(jlong(new_flags), (jlong*)&_flags, jlong(old_flags)) );
}
inline void GPGC_PageInfo::set_relocate_space(long space)
{
  uint64_t old_flags;
  uint64_t new_flags;

  do {
    old_flags = _flags;

    new_flags = old_flags & ~(RelocateSpaceMask<<RelocateSpaceShift);
    new_flags = new_flags | (uint64_t(space)<<RelocateSpaceShift);
  } while ( jlong(old_flags) != Atomic::cmpxchg(jlong(new_flags), (jlong*)&_flags, jlong(old_flags)) );

  assert0(relocate_space()==uint64_t(space));
}
Beispiel #9
0
inline jlong getCurrentTime() {
	DWORD l,h;
	__asm rdtsc;
	__asm mov h,edx;
	__asm mov l,eax;
	return (jlong(h)<<32)|l;
}
void
ReposVerifyCallback::onVerifyError(svn_revnum_t revision,
                                   svn_error_t *verify_err,
                                   apr_pool_t *scratch_pool)
{
  JNIEnv *env = JNIUtil::getEnv();

  // Java method id will not change during the time this library is
  // loaded, so it can be cached.
  static jmethodID mid = 0;
  if (mid == 0)
    {
      jclass clazz = env->FindClass(JAVAHL_CLASS("/callback/ReposVerifyCallback"));
      if (JNIUtil::isJavaExceptionThrown())
        return;

      mid = env->GetMethodID(clazz, "onVerifyError",
                             "(J" JAVAHL_ARG("/ClientException;") ")V");
      if (JNIUtil::isJavaExceptionThrown() || mid == 0)
        return;

      env->DeleteLocalRef(clazz);
    }

  jthrowable jverify_err = NULL;
  if (verify_err)
    jverify_err = JNIUtil::createClientException(svn_error_dup(verify_err), NULL);
  if (JNIUtil::isJavaExceptionThrown())
    return;

  env->CallVoidMethod(m_jverify_cb, mid, jlong(revision), jverify_err);
  if (verify_err)
    env->DeleteLocalRef(jverify_err);
}
void GPGC_RemapTargetArray::atomic_add_page(PageNum page, int64_t stripe, GPGC_PageInfo::Gens source_gen)
{
  uint64_t old_length;
  uint64_t new_length;

  do {
    old_length = _current_length;
    new_length = old_length + 1;

    assert0(old_length < _allocated_length);
  } while ( jlong(old_length) != Atomic::cmpxchg(jlong(new_length), (jlong*)&_current_length, jlong(old_length)) );

  _array[old_length].page       = page;
  _array[old_length].stripe     = stripe;
  _array[old_length].source_gen = source_gen;
}
static jlong nativeGetLong(JNIEnv* env, jclass clazz, jlong windowPtr,
        jint row, jint column) {
    CursorWindow* window = reinterpret_cast<CursorWindow*>(windowPtr);
    LOG_WINDOW("Getting long for %d,%d from %p", row, column, window);

    CursorWindow::FieldSlot* fieldSlot = window->getFieldSlot(row, column);
    if (!fieldSlot) {
        throwExceptionWithRowCol(env, row, column);
        return 0;
    }

    int32_t type = window->getFieldSlotType(fieldSlot);
    if (type == CursorWindow::FIELD_TYPE_INTEGER) {
        return window->getFieldSlotValueLong(fieldSlot);
    } else if (type == CursorWindow::FIELD_TYPE_STRING) {
        size_t sizeIncludingNull;
        const char* value = window->getFieldSlotValueString(fieldSlot, &sizeIncludingNull);
        return sizeIncludingNull > 1 ? strtoll(value, NULL, 0) : 0L;
    } else if (type == CursorWindow::FIELD_TYPE_FLOAT) {
        return jlong(window->getFieldSlotValueDouble(fieldSlot));
    } else if (type == CursorWindow::FIELD_TYPE_NULL) {
        return 0;
    } else if (type == CursorWindow::FIELD_TYPE_BLOB) {
        throw_sqlite3_exception(env, "Unable to convert BLOB to long");
        return 0;
    } else {
        throwUnknownTypeException(env, type);
        return 0;
    }
}
void VibroWorker::enqueueVibration (int length_ms)
{
    if (KITCHENTIMER_USE_VIBRATION) {
	if (jni_env && objVibrator && mVibrate)
	    jni_env->CallVoidMethod (objVibrator, mVibrate, jlong (length_ms));
    }
}
void
StdDispatch_Test::PeekPoke()
{
  RObject o = (RObject)StdDispatch::New("acdk/tools/aunit/DmiTestClass");
  o->poke("pubBool", true);
  testAssert(bool(o->peek("pubBool")) == true);
  o->poke("pubBool", false);
  
  o->poke("pubChar", char(42));
  testAssert(char(o->peek("pubChar")) == 42);
  o->poke("pubChar", char(42));
  o->poke("pubByte", byte(13));
  testAssert(byte(o->peek("pubByte")) == 13);
  o->poke("pubByte", 0);
  
  o->poke("pubShort", short(600));
  testAssert(short(o->peek("pubShort")) == 600);
  o->poke("pubShort", 0);

  o->poke("pubInt", short(12345));
  testAssert(int(o->peek("pubInt")) == 12345);
  o->poke("pubInt", 0);
  
  o->poke("pubLong", jlong(123457890));
  testAssert(jlong(o->peek("pubLong")) == 123457890);
  o->poke("pubLong", jlong(0));
  
  o->poke("pubFloat", float(2.1));
  float tf = o->peek("pubFloat");
  //vc6 bug?! testAssert(peekf("pubFloat") == 2.1);
  o->poke("pubFloat", float(0));

  o->poke("pubDouble", double(1.2345));
  testAssert(double(o->peek("pubDouble")) == 1.2345);
  o->poke("pubDouble", double(0));

  o->poke("pubObject", o);
  testAssert(RObject(o->peek("pubObject")) == o);
  o->poke("pubObject", Nil);

  try {
    o->poke("privInt", 2);
    testAssert("expect exception" == 0);
  } catch (RDmiException ex) {
    System::out->println("Expected Exception: \n" + ex->getMessage());
  }
}
void
StdDispatch_Test::PeekPokeStatic()
{
//#if defined(__BORLANDC__)  && 
//  System::out->println("Access to static Member is buggy with Borland C++"); //###
//#else //defined(__BORLANDC__) 
  const char* cn = "acdk/tools/aunit/DmiTestClass";
  RObject o = (RObject)StdDispatch::New("acdk/tools/aunit/DmiTestClass");

  StdDispatch::poke_static(cn, "pubStaticBool", true);
  testAssert(bool(StdDispatch::peek_static(cn, "pubStaticBool")) == true);
  StdDispatch::poke_static(cn, "pubStaticBool", false);

  StdDispatch::poke_static(cn, "pubStaticChar", char(42));
  testAssert(char(StdDispatch::peek_static(cn, "pubStaticChar")) == 42);
  StdDispatch::poke_static(cn, "pubStaticChar", char(0));

  StdDispatch::poke_static(cn, "pubStaticByte", byte(212));
  testAssert(byte(StdDispatch::peek_static(cn, "pubStaticByte")) == 212);
  StdDispatch::poke_static(cn, "pubStaticByte", byte(0));

  StdDispatch::poke_static(cn, "pubStaticShort", short(1234));
  testAssert(short(StdDispatch::peek_static(cn, "pubStaticShort")) == 1234);
  StdDispatch::poke_static(cn, "pubStaticShort", short(0));

  StdDispatch::poke_static(cn, "pubStaticInt", int(123456));
  testAssert(int(StdDispatch::peek_static(cn, "pubStaticInt")) == 123456);
  StdDispatch::poke_static(cn, "pubStaticInt", int(0));
  
  StdDispatch::poke_static(cn, "pubStaticLong", jlong(123456789));
  testAssert(jlong(StdDispatch::peek_static(cn, "pubStaticLong")) == 123456789);
  StdDispatch::poke_static(cn, "pubStaticLong", jlong(0));

  StdDispatch::poke_static(cn, "pubStaticFloat", float(2.5));
  float f = StdDispatch::peek_static(cn, "pubStaticFloat");
  StdDispatch::poke_static(cn, "pubStaticFloat", float(0));

  StdDispatch::poke_static(cn, "pubStaticDouble", double(1.3456));
  testAssert(double(StdDispatch::peek_static(cn, "pubStaticDouble")) == 1.3456);
  StdDispatch::poke_static(cn, "pubStaticDouble", double(0));

  StdDispatch::poke_static(cn, "pubStaticObject", o);
  testAssert(RObject(StdDispatch::peek_static(cn, "pubStaticObject")) == o);
  StdDispatch::poke_static(cn, "pubStaticObject", Nil);
//#endif //defined(__BORLANDC__)   
}
Beispiel #16
0
void JNIHelper::callSetHighScore(int64 score, const char* leaderboard)
{
	jlong jScore = jlong(score);
	jstring jLeaderboardId = g_Env->NewStringUTF(leaderboard);

	g_Env->CallVoidMethod(m_Activity, OpenFeintScore, jLeaderboardId, jScore);
	g_Env->DeleteLocalRef(jLeaderboardId);
}
JniObjectLinker::JniObjectLinker(void * nativePtr, const char * full_class_name, const JNINativeMethod * methods_list, size_t sizeof_methods_list) : 
	full_class_name_(full_class_name)
	, preloaded_(false)
{
	preloadJavaClasses(methods_list, sizeof_methods_list);

	// Creating Java object
	handler_.reset(new QJniObject(full_class_name, "J", jlong(nativePtr)));
}
static void android_view_TextureView_createNativeWindow(JNIEnv* env, jobject textureView,
        jobject surface) {

    sp<IGraphicBufferProducer> producer(SurfaceTexture_getProducer(env, surface));
    sp<ANativeWindow> window = new Surface(producer, true);

    window->incStrong((void*)android_view_TextureView_createNativeWindow);
    SET_LONG(textureView, gTextureViewClassInfo.nativeWindow, jlong(window.get()));
}
QAndroidCompass::QAndroidCompass(QObject * parent /*= 0*/) :
	QObject(parent)
{
	preloadJavaClasses();

	// Creating Java object
	handler_.reset(new QJniObject(c_full_class_name_, "J",
		jlong(reinterpret_cast<void*>(this))));
}
QLocationManagerProvidersListener::QLocationManagerProvidersListener(QObject * parent /*= 0*/) :
	QObject(parent)
{
	preloadJavaClasses();

	// Creating Java object
	handler_.reset(new QJniObject(c_full_class_name_, "J",
		jlong(reinterpret_cast<void*>(this))));
}
void tst_QAndroidJniObject::getStaticLongField()
{
    QAndroidJniEnvironment env;
    jclass cls = env->FindClass("java/lang/Long");
    QVERIFY(cls != 0);

    jlong i = QAndroidJniObject::getStaticField<jlong>(cls, "MAX_VALUE");
    QCOMPARE(i, jlong(9223372036854775807L));
}
void tst_QAndroidJniObject::getStaticDoubleField()
{
    QAndroidJniEnvironment env;
    jclass cls = env->FindClass("java/lang/Double");
    QVERIFY(cls != 0);

    jdouble i = QAndroidJniObject::getStaticField<jdouble>(cls, "NaN");
    jlong *k = reinterpret_cast<jlong*>(&i);
    QCOMPARE(*k, jlong(0x7ff8000000000000L));
}
void tst_QAndroidJniObject::callStaticLongMethodClassName()
{
    QString number = QString::number(123);
    QAndroidJniObject parameter = QAndroidJniObject::fromString(number);

    jlong returnValue = QAndroidJniObject::callStaticMethod<jlong>("java/lang/Long",
                                                          "parseLong",
                                                          "(Ljava/lang/String;)J",
                                                          parameter.object<jstring>());
    QCOMPARE(returnValue, jlong(number.toLong()));
}
/*
 * Class:     de_rwth_0005faachen_techinfo_ltilib_Matrix
 * Method:    closeTheGate
 * Signature: (J)V
 */
JNIEXPORT void JNICALL Java_de_rwth_1aachen_techinfo_ltilib_Matrix_closeTheGate
  (JNIEnv *env, jobject m) {

  jclass cls=env->FindClass("de/rwth_aachen/techinfo/ltilib/Matrix");
  jfieldID fid=env->GetFieldID(cls, "nativeObject", "J");
  jniMatrix *mat=jlong2matrix(env->GetLongField(m,fid));

  _lti_debug("]");

  env->SetLongField(m, fid, jlong(0));

  delete mat;
}
Beispiel #25
0
long long 	NanoTime()
{
	// This should be the same as java's system.nanoTime(), which is what the
	// choreographer vsync timestamp is based on.
	struct timespec tp;
	const int status = clock_gettime(CLOCK_MONOTONIC, &tp);
	if ( status != 0 )
	{
		LOG( "clock_gettime status=%i", status );
	}
	const long long result = (long long)tp.tv_sec * (jlong)(1000 * 1000 * 1000) + jlong(tp.tv_nsec);
	return result;
}
JNIEXPORT
jlong JNICALL
Java_org_mozilla_gecko_mozglue_SharedMemory_map(JNIEnv *env, jobject jobj, jint fd, jint length)
{
  void* address = mmap(NULL, length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
  if (address == MAP_FAILED) {
    char msg[128];
    snprintf(msg, sizeof(msg), "mmap failed. errno=%d", errno);
    env->ThrowNew(env->FindClass("java/lang/NullPointerException"), msg);
    return 0;
  }
  return jlong(address);
}
static jlong nativeInitSensorEventQueue(JNIEnv *env, jclass clazz, jobject eventQ, jobject msgQ, jfloatArray scratch) {
    SensorManager& mgr(SensorManager::getInstance());
    sp<SensorEventQueue> queue(mgr.createEventQueue());

    sp<MessageQueue> messageQueue = android_os_MessageQueue_getMessageQueue(env, msgQ);
    if (messageQueue == NULL) {
        jniThrowRuntimeException(env, "MessageQueue is not initialized.");
        return 0;
    }

    sp<Receiver> receiver = new Receiver(queue, messageQueue, eventQ, scratch);
    receiver->incStrong((void*)nativeInitSensorEventQueue);
    return jlong(receiver.get());
}
Beispiel #28
0
jlong
StateReporter::finishReport()
{
  //DEBUG:fprintf(stderr, "  (n) StateReporter::finishReport()\n");

  if (!m_valid) { throw_reporter_inactive(); return SVN_INVALID_REVNUM; }

  SVN::Pool subPool(pool);
  SVN_JNI_ERR(m_raw_reporter->finish_report(m_report_baton,
                                            subPool.getPool()),
              SVN_INVALID_REVNUM);
  m_valid = false;
  return jlong(m_target_revision);
}
void tst_QAndroidJniObject::callStaticLongMethod()
{
    QAndroidJniEnvironment env;
    jclass cls = env->FindClass("java/lang/Long");
    QVERIFY(cls != 0);

    QString number = QString::number(123);
    QAndroidJniObject parameter = QAndroidJniObject::fromString(number);

    jlong returnValue = QAndroidJniObject::callStaticMethod<jlong>(cls,
                                                          "parseLong",
                                                          "(Ljava/lang/String;)J",
                                                          parameter.object<jstring>());
    QCOMPARE(returnValue, jlong(number.toLong()));
}
Beispiel #30
0
static jvalue numToJvalue(const T &num)
{
    jvalue value;
    switch (sig) //a good compiler should simplify out the switch
    {
    case 'Z': value.z = jboolean(num); return value;
    case 'C': value.c = jchar(num); return value;
    case 'B': value.b = jbyte(num); return value;
    case 'S': value.s = jshort(num); return value;
    case 'I': value.i = jint(num); return value;
    case 'J': value.j = jlong(num); return value;
    case 'F': value.f = jfloat(num); return value;
    case 'D': value.d = jdouble(num); return value;
    }
    poco_bugcheck_msg(std::string(1, sig).c_str()); throw;
}