STATIC int Script_Buffer_line(lua_State* L) { Buffer* buffer = (Buffer*) ((Proxy*)luaL_checkudata(L, 1, "Buffer"))->ptr; const char* line; if (lua_gettop(L) == 1) { line = Buffer_currentLine(buffer); lua_pushstring(L, line); lua_pushinteger(L, buffer->x + 1); lua_pushinteger(L, buffer->y + 1); return 3; } else { int y = luaL_checkinteger(L, 2); if (y < 1 || y > Buffer_size(buffer)) { return 0; } line = Buffer_getLine(buffer, y-1); if (line) lua_pushstring(L, line); else lua_pushliteral(L, ""); return 1; } }
void * Array_push_back(struct Array * array, void * data ){ struct Buffer *buffer = array -> buffer; if ( array -> used >= Array_capacity( array ) ){ size_t cursize = Buffer_size(buffer); size_t newsize = 0 ; if ( cursize== 0 ){ newsize = 64*array -> data_size; }else{ newsize = cursize *2; } Buffer_resize(buffer, newsize); void *pos = Buffer_at(buffer, array->used * array->data_size ); memmove( pos, data, array->data_size ); array->used ++; return pos; }else{ void *pos = Buffer_at(buffer, array->used * array->data_size ); memmove( pos, data, array->data_size ); array->used ++; return pos; } }
size_t Array_capacity(struct Array *array){ return Buffer_size( array->buffer)/array->data_size ; }