Thread overview
Removing array element in foreach, safe?
Sep 05, 2016
dom
Sep 05, 2016
Daniel Kozak
Sep 05, 2016
Daniel Kozak
Sep 05, 2016
dom
September 05, 2016
is this code safe? if not how do i do it correctly?

        static AsyncHttpGet[] openRequests;
	static void updateRequests()
	{
		foreach(idx, req; openRequests)
		{
			if(req.state != Fiber.State.TERM)
				req.call();
			else
				openRequests.remove(idx);
		}
	}

thx :)
September 05, 2016
On Monday, 5 September 2016 at 15:53:39 UTC, dom wrote:
> is this code safe? if not how do i do it correctly?
>
>         static AsyncHttpGet[] openRequests;
> 	static void updateRequests()
> 	{
> 		foreach(idx, req; openRequests)
> 		{
> 			if(req.state != Fiber.State.TERM)
> 				req.call();
> 			else
> 				openRequests.remove(idx);
> 		}
> 	}
>
> thx :)


openRequests = openRequests.filter!(a=>a.state != Fiber.State.TERM).array;
openRequests.each!((a){ a.call(); });
September 05, 2016
On Monday, 5 September 2016 at 17:38:10 UTC, Daniel Kozak wrote:
> On Monday, 5 September 2016 at 15:53:39 UTC, dom wrote:
>> is this code safe? if not how do i do it correctly?
>>
>>         static AsyncHttpGet[] openRequests;
>> 	static void updateRequests()
>> 	{
>> 		foreach(idx, req; openRequests)
>> 		{
>> 			if(req.state != Fiber.State.TERM)
>> 				req.call();
>> 			else
>> 				openRequests.remove(idx);
>> 		}
>> 	}
>>
>> thx :)
>
>
> openRequests = openRequests.filter!(a=>a.state != Fiber.State.TERM).array;
> openRequests.each!((a){ a.call(); });

or

openRequests = openRequests.filter!(a=>a.state != 0).map!((a) {a.call(); return a;}).array;
September 05, 2016
On Monday, 5 September 2016 at 17:38:10 UTC, Daniel Kozak wrote:
> On Monday, 5 September 2016 at 15:53:39 UTC, dom wrote:
>> is this code safe? if not how do i do it correctly?
>>
>>         static AsyncHttpGet[] openRequests;
>> 	static void updateRequests()
>> 	{
>> 		foreach(idx, req; openRequests)
>> 		{
>> 			if(req.state != Fiber.State.TERM)
>> 				req.call();
>> 			else
>> 				openRequests.remove(idx);
>> 		}
>> 	}
>>
>> thx :)
>
>
> openRequests = openRequests.filter!(a=>a.state != Fiber.State.TERM).array;
> openRequests.each!((a){ a.call(); });

thx mate!