www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Removing array element in foreach, safe?

reply dom <dschoerk gmx.at> writes:
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 :)
Sep 05 2016
parent reply Daniel Kozak <kozzi11 gmail.com> writes:
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(); });
Sep 05 2016
next sibling parent Daniel Kozak <kozzi11 gmail.com> writes:
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;
Sep 05 2016
prev sibling parent dom <dschoerk gmx.at> writes:
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!
Sep 05 2016