⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 luastate.java

📁 luajava应用
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/*
 * $Id: LuaState.java,v 1.9 2006/12/22 14:06:40 thiago Exp $
 * Copyright (C) 2003-2007 Kepler Project.
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

package org.keplerproject.luajava;

/**
 * LuaState if the main class of LuaJava for the Java developer.
 * LuaState is a mapping of most of Lua's C API functions.
 * LuaState also provides many other functions that will be used to manipulate 
 * objects between Lua and Java.
 * @author Thiago Ponte
 */
public class LuaState
{
  private final static String LUAJAVA_LIB = "luajava-1.1";

  final public static Integer LUA_GLOBALSINDEX  = new Integer(-10002);
  final public static Integer LUA_REGISTRYINDEX = new Integer(-10000);

  final public static Integer LUA_TNONE     = new Integer(-1);
  final public static Integer LUA_TNIL      = new Integer(0);
  final public static Integer LUA_TBOOLEAN  = new Integer(1);
  final public static Integer LUA_TLIGHTUSERDATA = new Integer(2);
  final public static Integer LUA_TNUMBER   = new Integer(3);
  final public static Integer LUA_TSTRING   = new Integer(4);
  final public static Integer LUA_TTABLE    = new Integer(5);
  final public static Integer LUA_TFUNCTION = new Integer(6);
  final public static Integer LUA_TUSERDATA = new Integer(7);
  final public static Integer LUA_TTHREAD   = new Integer(8);

  /**
   * Specifies that an unspecified (multiple) number of return arguments
   * will be returned by a call.
   */
  final public static Integer LUA_MULTRET   = new Integer(-1);
  
  /*
   * error codes for `lua_load' and `lua_pcall'
   */
  /**
   * a runtime error.
   */
  final public static Integer LUA_ERRRUN    = new Integer(1);
  
  /**
   * 
   */
  final public static Integer LUA_YIELD     = new Integer(2);
  
  /**
   * syntax error during pre-compilation.
   */
  final public static Integer LUA_ERRSYNTAX = new Integer(3);
  
  /**
   * memory allocation error. For such errors, Lua does not call 
   * the error handler function.
   */
  final public static Integer LUA_ERRMEM    = new Integer(4);
  
  /**
   * error while running the error handler function.
   */
  final public static Integer LUA_ERRERR    = new Integer(5);

  /**
   * Opens the library containing the luajava API
   */
  static
  {
    System.loadLibrary(LUAJAVA_LIB);
  }

  private CPtr luaState;

  private int stateId;

  /**
   * Constructor to instance a new LuaState and initialize it with LuaJava's functions
   * @param stateId
   */
  protected LuaState(int stateId)
  {
    luaState = _open();
    luajava_open(luaState, stateId);
    this.stateId = stateId;
  }

  /**
   * Receives a existing state and initializes it
   * @param luaState
   */
  protected LuaState(CPtr luaState)
  {
    this.luaState = luaState;
    this.stateId = LuaStateFactory.insertLuaState(this);
    luajava_open(luaState, stateId);
  }

  /**
   * Closes state and removes the object from the LuaStateFactory
   */
  public synchronized void close()
  {
    LuaStateFactory.removeLuaState(stateId);
    _close(luaState);
    this.luaState = null;
  }
  
  /**
   * Returns <code>true</code> if state is closed.
   */
  public synchronized boolean isClosed()
  {
    return luaState == null;
  }

  /**
   * Return the long representing the LuaState pointer
   * @return long
   */
  public long getCPtrPeer()
  {
    return (luaState != null)? luaState.getPeer() : 0;
  }


  /********************* Lua Native Interface *************************/

  private synchronized native CPtr _open();
  private synchronized native void _close(CPtr ptr);
  private synchronized native CPtr _newthread(CPtr ptr);

  // Stack manipulation
  private synchronized native int  _getTop(CPtr ptr);
  private synchronized native void _setTop(CPtr ptr, int idx);
  private synchronized native void _pushValue(CPtr ptr, int idx);
  private synchronized native void _remove(CPtr ptr, int idx);
  private synchronized native void _insert(CPtr ptr, int idx);
  private synchronized native void _replace(CPtr ptr, int idx);
  private synchronized native int  _checkStack(CPtr ptr, int sz);
  
  private synchronized native void _xmove(CPtr from, CPtr to, int n);

  // Access functions
  private synchronized native int    _isNumber(CPtr ptr, int idx);
  private synchronized native int    _isString(CPtr ptr, int idx);
  private synchronized native int    _isCFunction(CPtr ptr, int idx);
  private synchronized native int    _isUserdata(CPtr ptr, int idx);
  private synchronized native int    _type(CPtr ptr, int idx);
  private synchronized native String _typeName(CPtr ptr, int tp);

  private synchronized native int _equal(CPtr ptr, int idx1, int idx2);
  private synchronized native int _rawequal(CPtr ptr, int idx1, int idx2);
  private synchronized native int _lessthan(CPtr ptr, int idx1, int idx2);

  private synchronized native double _toNumber(CPtr ptr, int idx);
  private synchronized native int    _toInteger(CPtr ptr, int idx);
  private synchronized native int    _toBoolean(CPtr ptr, int idx);
  private synchronized native String _toString(CPtr ptr, int idx);
  private synchronized native int    _objlen(CPtr ptr, int idx);
  private synchronized native CPtr   _toThread(CPtr ptr, int idx);

  // Push functions
  private synchronized native void _pushNil(CPtr ptr);
  private synchronized native void _pushNumber(CPtr ptr, double number);
  private synchronized native void _pushInteger(CPtr ptr, int integer);
  private synchronized native void _pushString(CPtr ptr, String str);
  private synchronized native void _pushString(CPtr ptr, byte[] bytes, int n);
  private synchronized native void _pushBoolean(CPtr ptr, int bool);

  // Get functions
  private synchronized native void _getTable(CPtr ptr, int idx);
  private synchronized native void _getField(CPtr ptr, int idx, String k);
  private synchronized native void _rawGet(CPtr ptr, int idx);
  private synchronized native void _rawGetI(CPtr ptr, int idx, int n);
  private synchronized native void _createTable(CPtr ptr, int narr, int nrec);
  private synchronized native int  _getMetaTable(CPtr ptr, int idx);
  private synchronized native void _getFEnv(CPtr ptr, int idx);

  // Set functions
  private synchronized native void _setTable(CPtr ptr, int idx);
  private synchronized native void _setField(CPtr ptr, int idx, String k);
  private synchronized native void _rawSet(CPtr ptr, int idx);
  private synchronized native void _rawSetI(CPtr ptr, int idx, int n);
  private synchronized native int  _setMetaTable(CPtr ptr, int idx);
  private synchronized native int  _setFEnv(CPtr ptr, int idx);

  private synchronized native void _call(CPtr ptr, int nArgs, int nResults);
  private synchronized native int  _pcall(CPtr ptr, int nArgs, int Results, int errFunc);

  // Coroutine Functions
  private synchronized native int _yield(CPtr ptr, int nResults);
  private synchronized native int _resume(CPtr ptr, int nargs);
  private synchronized native int _status(CPtr ptr);
  
  // Gargabe Collection Functions
  final public static Integer LUA_GCSTOP       = new Integer(0);
  final public static Integer LUA_GCRESTART    = new Integer(1);
  final public static Integer LUA_GCCOLLECT    = new Integer(2);
  final public static Integer LUA_GCCOUNT      = new Integer(3);
  final public static Integer LUA_GCCOUNTB     = new Integer(4);
  final public static Integer LUA_GCSTEP       = new Integer(5);
  final public static Integer LUA_GCSETPAUSE   = new Integer(6);
  final public static Integer LUA_GCSETSTEPMUL = new Integer(7);
  private synchronized native int  _gc(CPtr ptr, int what, int data);

  // Miscellaneous Functions
  private synchronized native int    _error(CPtr ptr);
  private synchronized native int    _next(CPtr ptr, int idx);
  private synchronized native void   _concat(CPtr ptr, int n);

  // Some macros
  private synchronized native void _pop(CPtr ptr, int n);
  private synchronized native void _newTable(CPtr ptr);
  private synchronized native int  _strlen(CPtr ptr, int idx);
  private synchronized native int  _isFunction(CPtr ptr, int idx);
  private synchronized native int  _isTable(CPtr ptr, int idx);
  private synchronized native int  _isNil(CPtr ptr, int idx);
  private synchronized native int  _isBoolean(CPtr ptr, int idx);
  private synchronized native int  _isThread(CPtr ptr, int idx);
  private synchronized native int  _isNone(CPtr ptr, int idx);
  private synchronized native int  _isNoneOrNil(CPtr ptr, int idx);
  
  private synchronized native void _setGlobal(CPtr ptr, String name);
  private synchronized native void _getGlobal(CPtr ptr, String name);
  
  private synchronized native int  _getGcCount(CPtr ptr);


  // LuaLibAux
  private synchronized native int _LdoFile(CPtr ptr, String fileName);
  private synchronized native int _LdoString(CPtr ptr, String string);
  //private synchronized native int _doBuffer(CPtr ptr, byte[] buff, long sz, String n);
  
  private synchronized native int    _LgetMetaField(CPtr ptr, int obj, String e);
  private synchronized native int    _LcallMeta(CPtr ptr, int obj, String e);
  private synchronized native int    _Ltyperror(CPtr ptr, int nArg, String tName);
  private synchronized native int    _LargError(CPtr ptr, int numArg, String extraMsg);
  private synchronized native String _LcheckString(CPtr ptr, int numArg);
  private synchronized native String _LoptString(CPtr ptr, int numArg, String def);
  private synchronized native double _LcheckNumber(CPtr ptr, int numArg);
  private synchronized native double _LoptNumber(CPtr ptr, int numArg, double def);
  
  private synchronized native int    _LcheckInteger(CPtr ptr, int numArg);
  private synchronized native int    _LoptInteger(CPtr ptr, int numArg, int def);
  
  private synchronized native void _LcheckStack(CPtr ptr, int sz, String msg);
  private synchronized native void _LcheckType(CPtr ptr, int nArg, int t);
  private synchronized native void _LcheckAny(CPtr ptr, int nArg);
  
  private synchronized native int  _LnewMetatable(CPtr ptr, String tName);
  private synchronized native void _LgetMetatable(CPtr ptr, String tName);
  
  private synchronized native void _Lwhere(CPtr ptr, int lvl);
  
  private synchronized native int  _Lref(CPtr ptr, int t);
  private synchronized native void _LunRef(CPtr ptr, int t, int ref);
  
  private synchronized native int  _LgetN(CPtr ptr, int t);
  private synchronized native void _LsetN(CPtr ptr, int t, int n);
  
  private synchronized native int _LloadFile(CPtr ptr, String fileName);
  private synchronized native int _LloadBuffer(CPtr ptr, byte[] buff, long sz, String name);
  private synchronized native int _LloadString(CPtr ptr, String s);

  private synchronized native String _Lgsub(CPtr ptr, String s, String p, String r);
  private synchronized native String _LfindTable(CPtr ptr, int idx, String fname, int szhint);
  
  
  private synchronized native void _openBase(CPtr ptr);
  private synchronized native void _openTable(CPtr ptr);
  private synchronized native void _openIo(CPtr ptr);
  private synchronized native void _openOs(CPtr ptr);
  private synchronized native void _openString(CPtr ptr);
  private synchronized native void _openMath(CPtr ptr);
  private synchronized native void _openDebug(CPtr ptr);
  private synchronized native void _openPackage(CPtr ptr);
  private synchronized native void _openLibs(CPtr ptr);

  // Java Interface -----------------------------------------------------

  public LuaState newThread()
  {
  	LuaState l = new LuaState(_newthread(luaState));
  	LuaStateFactory.insertLuaState(l);
    return l;
  }

  // STACK MANIPULATION

  public int getTop()
  {
    return _getTop(luaState);
  }

  public void setTop(int idx)
  {
    _setTop(luaState, idx);
  }

  public void pushValue(int idx)
  {
    _pushValue(luaState, idx);
  }

  public void remove(int idx)
  {
    _remove(luaState, idx);
  }

  public void insert(int idx)
  {
    _insert(luaState, idx);
  }

  public void replace(int idx)
  {
    _replace(luaState, idx);
  }

  public int checkStack(int sz)
  {
    return _checkStack(luaState, sz);
  }
  
  public void xmove(LuaState to, int n)
  {
    _xmove(luaState, to.luaState, n);
  }

  // ACCESS FUNCTION

  public boolean isNumber(int idx)
  {
    return (_isNumber(luaState, idx)!=0);
  }

  public boolean isString(int idx)
  {
    return (_isString(luaState, idx)!=0);
  }

  public boolean isFunction(int idx)
  {
    return (_isFunction(luaState, idx)!=0);
  }
  
  public boolean isCFunction(int idx)
  {
    return (_isCFunction(luaState, idx)!=0);
  }

  public boolean isUserdata(int idx)
  {
    return (_isUserdata(luaState, idx)!=0);
  }

  public boolean isTable(int idx)
  {
    return (_isTable(luaState, idx)!=0);
  }

  public boolean isBoolean(int idx)
  {
    return (_isBoolean(luaState, idx)!=0);
  }
  
  public boolean isNil(int idx)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -