From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=0.4 required=5.0 tests=BAYES_00,FORGED_MUA_MOZILLA autolearn=no autolearn_force=no version=3.4.4 X-Google-Thread: 103376,51bff7cd4c35a15d X-Google-NewGroupId: yes X-Google-Attributes: gida07f3367d7,domainid0,public,usenet X-Google-Language: ENGLISH,ASCII-7-bit Received: by 10.68.201.132 with SMTP id ka4mr4227693pbc.8.1338417947357; Wed, 30 May 2012 15:45:47 -0700 (PDT) Path: l9ni1485pbj.0!nntp.google.com!news2.google.com!goblin1!goblin.stu.neva.ru!noris.net!newsfeed.arcor.de!newsspool4.arcor-online.net!news.arcor.de.POSTED!not-for-mail Date: Thu, 31 May 2012 00:45:54 +0200 From: Georg Bauhaus User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:12.0) Gecko/20120428 Thunderbird/12.0.1 MIME-Version: 1.0 Newsgroups: comp.lang.ada Subject: Re: Ada2012 : In praise of 'for ... of ... loop'... References: <74e4e6b5-20bd-4388-b4a0-dfbecc8070be@googlegroups.com> <4fc4e51d$0$6566$9b4e6d93@newsspool4.arcor-online.net> <371a4b67-1969-4cd5-90f4-d58a9b276f29@googlegroups.com> <4fc69e72$0$6633$9b4e6d93@newsspool2.arcor-online.net> In-Reply-To: <4fc69e72$0$6633$9b4e6d93@newsspool2.arcor-online.net> Message-ID: <4fc6a31a$0$6629$9b4e6d93@newsspool2.arcor-online.net> Organization: Arcor NNTP-Posting-Date: 31 May 2012 00:45:46 CEST NNTP-Posting-Host: 51afe0d3.newsspool2.arcor-online.net X-Trace: DXC=9?9Xj6>mJdZ\9P[:DUn00QA9EHlD;3YcR4Fo<]lROoRQ8kFZLh>_cHTX3j]1W;h>cDN7<[ X-Complaints-To: usenet-abuse@arcor.de Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Date: 2012-05-31T00:45:46+02:00 List-Id: More than 40 years of c&p and it remains a hurdle. Sorry. package Split_Iterators is new Ada.Iterator_Interfaces (Cursor => Num_Vecs.Cursor, Has_Element => Num_Vecs.Has_Element); package Splitting is use Split_Iterators; type Split_Iterator is limited new Split_Iterators.Forward_Iterator with record First, One_After : Num_Vecs.Cursor; end record; function Make_Iterator (First, One_After : Num_Vecs.Cursor) return Split_Iterator; overriding function First (Object : Split_Iterator) return Cursor; overriding function Next (Object : Split_Iterator; Position: Cursor) return Cursor; end Splitting; package body Splitting is function Make_Iterator (First, One_After : Num_Vecs.Cursor) return Split_Iterator is begin return (Split_Iterators.Forward_Iterator with First, One_After); end Make_Iterator; overriding function First (Object : Split_Iterator) return Cursor is begin return Object.First; end First; overriding function Next (Object : Split_Iterator; Position: Cursor) return Cursor is begin if Position = Object.One_After then return Num_Vecs.No_Element; else return Num_Vecs.Next (Position); end if; end Next; end Splitting;