Android Open Source - anode J S Value






From Project

Back to project page anode.

License

The source code is released under:

Apache License

If you think the Android project anode listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright 2011-2012 Paddy Byers/*from   w ww .ja v  a2s.  c o m*/
 *
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

package org.meshpoint.anode.js;

import org.meshpoint.anode.idl.Types;

/**
 * A variant to hold an arbitrary value, plus a pool of free
 * variant instances. The pool is grown on demand.
 * 
 * The re-pooled objects are freed if the number available
 * exceeds a hard-coded count.
 */
public final class JSValue {
  
  /************************
   * private state
   ************************/

  int type;
  public long longValue;
  public double dblValue;

  /************************
   * public API 
   ************************/

  /**
   * JSNumber
   */
  public static JSValue asJSNumber(long l) {
    JSValue result = get();
    result.longValue = l;
    result.type = Types.TYPE_LONG;
    return result;
  }

  public static JSValue asJSNumber(double d) {
    JSValue result = get();
    result.dblValue = d;
    result.type = Types.TYPE_DOUBLE;
    return result;
  }

  public static JSValue asJSNumber(Number n) {
    JSValue result = get();
    Class<? extends Number> nClass = n.getClass();
    if(nClass == Float.class || nClass == Double.class) {
      result.dblValue = n.doubleValue();
    } else {
      result.longValue = n.longValue();
      if(nClass == Short.class)
        result.type = Types.TYPE_SHORT;
      else if(nClass == Integer.class)
        result.type = Types.TYPE_INT;
      else
        result.type = Types.TYPE_LONG;
    }
    return result;
  }

  public long getLongValue() {
    switch(type) {
    case Types.TYPE_BYTE:
    case Types.TYPE_SHORT:
    case Types.TYPE_INT:
    case Types.TYPE_LONG:
      return longValue;
    }
    throw new Types.TypeError();
  }

  public double getDoubleValue() {
    if(type == Types.TYPE_DOUBLE)
      return dblValue;
    throw new Types.TypeError();
  }

  public Number getNumberValue() {
    Number result;
    switch(type) {
    case Types.TYPE_BYTE:
      result = new Byte((byte)longValue);
      break;
    case Types.TYPE_SHORT:
      result = new Short((short)longValue);
      break;
    case Types.TYPE_INT:
      result = new Integer((int)longValue);
      break;
    case Types.TYPE_LONG:
      result = new Long(longValue);
      break;
    case Types.TYPE_DOUBLE:
      result = new Double(dblValue);
      break;
    default:
      throw new Types.TypeError();
    }
    return result;
  }

  /**
   * JSBoolean
   */
  public static JSValue asJSBoolean(boolean b) {
    JSValue result = get();
    result.longValue = b ? 1 : 0;
    result.type = Types.TYPE_BOOL;
    return result;
  }

  public static JSValue asJSBoolean(Boolean b) {
    JSValue result = get();
    result.longValue = b.booleanValue() ? 1 : 0;
    result.type = Types.TYPE_BOOL;
    return result;
  }

  public boolean getBooleanValue() {
    if(type == Types.TYPE_BOOL)
      return longValue != 0;
    throw new Types.TypeError();
  }

  /**
   * The maximum number of cached instances
   */
  final static int MAX_POOL_COUNT = 256;
  
  /**
   * The current count of cached instances
   */
  private static int count;
  
  /**
   * The head of the pool
   */
  private static JSValue pool;
  
  /**
   * Get a Variant instance from the pool, allocating one if necessary
   * @return Variant instance
   */
  static synchronized JSValue get() {
    if(pool == null) {
      pool = new JSValue();
      ++count;
    }
    JSValue result = pool;
    pool = result.next;
    --count;
    return result;
  }
  
  /**
   * Return a Variant to the pool
   * @param val the Variant to be returned
   */
  synchronized void put(JSValue val) {
    if(count < MAX_POOL_COUNT) {
      val.next = pool;
      pool = val;
      ++count;
    }
  }

  /**
   * Pointer for the pool list
   */
  private JSValue next;
}




Java Source Code List

org.meshpoint.anode.AndroidContext.java
org.meshpoint.anode.AnodeActivity.java
org.meshpoint.anode.AnodeReceiver.java
org.meshpoint.anode.AnodeService.java
org.meshpoint.anode.Constants.java
org.meshpoint.anode.Isolate.java
org.meshpoint.anode.RuntimeNative.java
org.meshpoint.anode.Runtime.java
org.meshpoint.anode.bridge.BridgeNative.java
org.meshpoint.anode.bridge.Env.java
org.meshpoint.anode.bridge.Env.java
org.meshpoint.anode.bridge.FinalizeQueue.java
org.meshpoint.anode.bridge.ModuleClassLoader.java
org.meshpoint.anode.bridge.ModuleContext.java
org.meshpoint.anode.bridge.SynchronousOperation.java
org.meshpoint.anode.error.GeneralError.java
org.meshpoint.anode.error.InternalError.java
org.meshpoint.anode.error.ReferenceError.java
org.meshpoint.anode.error.ScriptError.java
org.meshpoint.anode.error.TypeError.java
org.meshpoint.anode.idl.BoundInterface.java
org.meshpoint.anode.idl.Callback.java
org.meshpoint.anode.idl.Dictionary.java
org.meshpoint.anode.idl.Dictionary.java
org.meshpoint.anode.idl.IDLInterface.java
org.meshpoint.anode.idl.IDLInterface.java
org.meshpoint.anode.idl.InterfaceManager.java
org.meshpoint.anode.idl.InterfaceManager.java
org.meshpoint.anode.idl.StubUtil.java
org.meshpoint.anode.idl.Types.java
org.meshpoint.anode.java.Array.java
org.meshpoint.anode.java.Base.java
org.meshpoint.anode.java.Base.java
org.meshpoint.anode.java.ByteArray.java
org.meshpoint.anode.java.DoubleArray.java
org.meshpoint.anode.java.IntegerArray.java
org.meshpoint.anode.java.LongArray.java
org.meshpoint.anode.java.ObjectArray.java
org.meshpoint.anode.js.JSArray.java
org.meshpoint.anode.js.JSByteArray.java
org.meshpoint.anode.js.JSDoubleArray.java
org.meshpoint.anode.js.JSFunction.java
org.meshpoint.anode.js.JSIntegerArray.java
org.meshpoint.anode.js.JSInterface.java
org.meshpoint.anode.js.JSLongArray.java
org.meshpoint.anode.js.JSObjectArray.java
org.meshpoint.anode.js.JSObject.java
org.meshpoint.anode.js.JSValue.java
org.meshpoint.anode.module.IModuleContext.java
org.meshpoint.anode.module.IModuleContext.java
org.meshpoint.anode.module.IModule.java
org.meshpoint.anode.module.IModule.java
org.meshpoint.anode.stub.DictionaryStubGenerator.java
org.meshpoint.anode.stub.PlatformStubGenerator.java
org.meshpoint.anode.stub.StubGenerator.java
org.meshpoint.anode.stub.UserStubGenerator.java
org.meshpoint.anode.stub.util.DirectoryClassLoader.java
org.meshpoint.anode.stub.util.StubGen.java
org.meshpoint.anode.type.ICollection.java
org.meshpoint.anode.type.IFunction.java
org.meshpoint.anode.type.IIndexedCollection.java
org.meshpoint.anode.util.AndroidLog.java
org.meshpoint.anode.util.ArgProcessor.java
org.meshpoint.anode.util.Log.java
org.meshpoint.anode.util.ModuleUtils.java
org.meshpoint.anode.util.PrintStreamLog.java
org.meshpoint.anode.util.TarExtractor.java
org.meshpoint.anode.util.ZipExtractor.java
org.w3c.dom.Array.java
org.w3c.dom.Array.java
org.w3c.dom.ByteArray.java
org.w3c.dom.ByteArray.java
org.w3c.dom.DoubleArray.java
org.w3c.dom.DoubleArray.java
org.w3c.dom.IntegerArray.java
org.w3c.dom.IntegerArray.java
org.w3c.dom.LongArray.java
org.w3c.dom.LongArray.java
org.w3c.dom.ObjectArray.java
org.w3c.dom.ObjectArray.java
org.w3c.dom.PrimitiveArray.java
org.w3c.dom.PrimitiveArray.java