Пример #1
0
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;
   }
}
Пример #2
0
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;
    }
}
Пример #3
0
size_t Array_capacity(struct Array *array){
    return Buffer_size( array->buffer)/array->data_size ;
}