{"action":"opened","issue":{"url":"https://api.github.com/repos/chocoteam/choco-solver/issues/375","repository_url":"https://api.github.com/repos/chocoteam/choco-solver","labels_url":"https://api.github.com/repos/chocoteam/choco-solver/issues/375/labels{/name}","comments_url":"https://api.github.com/repos/chocoteam/choco-solver/issues/375/comments","events_url":"https://api.github.com/repos/chocoteam/choco-solver/issues/375/events","html_url":"https://github.com/chocoteam/choco-solver/issues/375","id":136388939,"number":375,"title":"simpler iteration over ISet objects","user":{"login":"jgFages","id":1172247,"avatar_url":"https://avatars.githubusercontent.com/u/1172247?v=3","gravatar_id":"","url":"https://api.github.com/users/jgFages","html_url":"https://github.com/jgFages","followers_url":"https://api.github.com/users/jgFages/followers","following_url":"https://api.github.com/users/jgFages/following{/other_user}","gists_url":"https://api.github.com/users/jgFages/gists{/gist_id}","starred_url":"https://api.github.com/users/jgFages/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jgFages/subscriptions","organizations_url":"https://api.github.com/users/jgFages/orgs","repos_url":"https://api.github.com/users/jgFages/repos","events_url":"https://api.github.com/users/jgFages/events{/privacy}","received_events_url":"https://api.github.com/users/jgFages/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/chocoteam/choco-solver/labels/feature","name":"feature","color":"fbca04"}],"state":"open","locked":false,"assignee":{"login":"jgFages","id":1172247,"avatar_url":"https://avatars.githubusercontent.com/u/1172247?v=3","gravatar_id":"","url":"https://api.github.com/users/jgFages","html_url":"https://github.com/jgFages","followers_url":"https://api.github.com/users/jgFages/followers","following_url":"https://api.github.com/users/jgFages/following{/other_user}","gists_url":"https://api.github.com/users/jgFages/gists{/gist_id}","starred_url":"https://api.github.com/users/jgFages/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jgFages/subscriptions","organizations_url":"https://api.github.com/users/jgFages/orgs","repos_url":"https://api.github.com/users/jgFages/repos","events_url":"https://api.github.com/users/jgFages/events{/privacy}","received_events_url":"https://api.github.com/users/jgFages/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/chocoteam/choco-solver/milestones/13","html_url":"https://github.com/chocoteam/choco-solver/milestones/4.0.0","labels_url":"https://api.github.com/repos/chocoteam/choco-solver/milestones/13/labels","id":1601975,"number":13,"title":"4.0.0","description":"API refactoring:\r\n- move `Solver` to `Model` and `SearchLoop` to Solver`. It aims at separate purposes: first modeling then solving.\r\n- move `VariableFactory` and `*ConstraintFactory` directly into `Model`, for instance: `model.intVar(\"X\", 0, 10)` or `model.allDifferent(Y).post();`. It aims at limiting entry points for users to a single one, `Model`, and reducing API size (without the necessity to always declare the model).\r\n- move `Chatterbox` to `Solver` to limit entry points and reduce APIs.\r\n- reduce resolution API to one: `solve()` instead of `find*`. It aims at letting the user configure the resolution once, and then iterate over solutions. Moreover, even if helper should remain to solve COP, the way cuts are added should be open and easy (e.g., multi objectives resolution or ad hoc cut).\r\n- remove `ISolutionRecorder`: nothing is done by default regarding solutions, but recording (user specific) solution is made easy with `Solver.solve()`.\r\n\r\n\r\n","creator":{"login":"cprudhom","id":1171872,"avatar_url":"https://avatars.githubusercontent.com/u/1171872?v=3","gravatar_id":"","url":"https://api.github.com/users/cprudhom","html_url":"https://github.com/cprudhom","followers_url":"https://api.github.com/users/cprudhom/followers","following_url":"https://api.github.com/users/cprudhom/following{/other_user}","gists_url":"https://api.github.com/users/cprudhom/gists{/gist_id}","starred_url":"https://api.github.com/users/cprudhom/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cprudhom/subscriptions","organizations_url":"https://api.github.com/users/cprudhom/orgs","repos_url":"https://api.github.com/users/cprudhom/repos","events_url":"https://api.github.com/users/cprudhom/events{/privacy}","received_events_url":"https://api.github.com/users/cprudhom/received_events","type":"User","site_admin":false},"open_issues":12,"closed_issues":0,"state":"open","created_at":"2016-02-24T08:35:24Z","updated_at":"2016-02-25T13:32:29Z","due_on":"2016-04-29T22:00:00Z","closed_at":null},"comments":0,"created_at":"2016-02-25T13:32:29Z","updated_at":"2016-02-25T13:32:29Z","closed_at":null,"body":"ISet now implements Iterable<Integer>, meaning you can use loops of the form\r\nfor(int i:mySet){\r\n...\r\n}\r\nNote that you can modify the set while iterating over it:\r\n- If you add, you may or may not have it in the current iteration (the set is not ordered so we do not know in which 'position' it is added\r\n- If you remove an element, you will not have it in your current iteration\r\n\r\nNote also that, while it gives a nicer code, it uses auto-boxing which slightly decreases performances. Therefore, we recommend using it with caution"}}