Cpp Stream Chunck Reader

lua-users home
wiki

這是任何 std::istream 的 lua_load chunk 讀取器。很明顯地,它需要 C++。我從自己另一些程式碼中修改了這個片段,如果它無法立即運作,請見諒。如果你發現問題,請修正它。

// this is not threadsafe
const char* istream_ChunkReader( lua_State *L, void *data, size_t *size )
{
    const size_t kBufferSize = 1024;
    static char s_buffer[kBufferSize];

    std::istream* pis = reinterpret_cast<std::istream*>(data);
    if ( !pis )
        return NULL;
    pis->read( &s_buffer[0], kBufferSize );
    *size = pis->gcount();
    return s_buffer;
}

// type-safe wrapper
int lua_load_stream( lua_State *L, std::istream& is, const std::string& chunkname = "" )
{
    return lua_load( L, &istream_ChunkReader, &is,
                     chunkname.empty() ? NULL : chunkname.c_str() );
}

// it would be invoked like so:
lua_State* L = some_lua_state;
std::istream& is = some_stream_from_somewhere;
int res = lua_load_stream( L, is, "my chunk name" );


近期變更日誌 · 偏好設定
編輯 · 歷史記錄
上次編輯:格林威治時間 2007 年 2 月 8 日晚上 7:17 (diff)