Exemplo n.º 1
0
/** Pack an entire setting description into the buffer
 */
static int packSetting(unsigned char *pBuffer, int index, int size, SettingDescription &setting) {
  if (index>=size)
    return 0;
  // 1 byte for type
  pBuffer[index++] = setting.typeAndModifier;
  // The name
  if ((index=packString(pBuffer, index, size, setting.name))<=0)
    return index;
  // And the value itself
  switch(setting.typeAndModifier & SETTING_TYPE_MASK) {
    case StringSetting:
      index = packString(pBuffer, index, size, setting.value.string);
      break;
    case IntegerSetting:
      index = packInteger(pBuffer, index, size, setting.value.integer);
      break;
    case BooleanSetting:
      index = packBoolean(pBuffer, index, size, setting.value.boolean);
      break;
    case NumberSetting:
      index = packDouble(pBuffer, index, size, setting.value.number);
      break;
    default:
      index = 0;
    }
  return index;
  }
Exemplo n.º 2
0
  void pack(Packer& pk, int index) const {
    int t = lua_type(L, index);
    switch (t) {
    case LUA_TNUMBER: packNumber(pk, index); break;
    case LUA_TBOOLEAN: packBoolean(pk, index); break;
    case LUA_TSTRING:  packString(pk, index); break;
    case LUA_TTABLE: packTable(pk, index); break;
    case LUA_TUSERDATA:
      // TODO: support userdata serialization.
      // Calling __serialize meta-method may be good.

      // raise an error temporally
      luaL_error(L, "Packing userdata has not been supported yet. "
                 "However, it will be implemented soon.");
      return;

    case LUA_TNIL:
    case LUA_TTHREAD:
    case LUA_TLIGHTUSERDATA:
    default:
      luaL_error(L, "invalid type for pack: %s",
                 lua_typename(L, t));
      break;
    }
  }