[ada95] "pointer" naar array

Pagina: 1
Acties:

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Topicstarter
Kent iemand hier uberhaupt ada95? :P

Ok, ik heb dus een task die een array krijgt om te verwerken. Nu moet dit ansynchronous gebeuren, en ik wil even niet pragma Asynchronous gebruiken.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
type array_type is array(Integer range <>) of Integer;
type array_ptr is access array_type;

task body my_task is
   a : array_ptr;
begin
   accept work(ar : in array_type) do
      a := new array_type'(ar);
   end work;

   -- Do work here, long
   delay 2.0;

   accept result(ar: out array_type) do
      ar := a.all;
   end result;
end my_task;

-- Hoofdprogramma
a : array_type(1 .. 100000);
t : my_task;

t.work(a);
-- do other stuff
t.result(a);


Nu heb ik in de task bij "--Do work here" die array nodig uit de accept work. Ik kan wel een kopie (op task scope) maken maar ik wil dus eigenlijk niet die hele array kopieren. Ik kan "work" ook niet doen in de accept work, want dan wacht het hoofdprogramma totdat het klaar is met verder gaan.

Ik wil dus iets van een array pointer op task scope opslaan. Met access type werkt het niet, ik kan niet doen "a'Access" in het hoofdprogramma dan krijg ik gedoe over dat de prefix aliased moet zijn.

Hoe doe ik dit?

[ Voor 10% gewijzigd door Zoijar op 10-03-2003 14:28 ]


Verwijderd

Je kan er een type van maken:
code:
1
2
type Vector is array (Integer range <>) of Integer;
type Vector_Reference is access Vector;


Succes met het practicum :)

[ Voor 9% gewijzigd door Verwijderd op 10-03-2003 14:32 ]


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Topicstarter
Ja klopt dat had ik ook al, maar ik kan dan niet die task entry aanroepen met bv t.work(a'Access); met work(ar : array_access);

Hehe, ja, pt inderaad :P Moest ik ook nog steeds is doen...

[ Voor 22% gewijzigd door Zoijar op 10-03-2003 14:52 ]


Verwijderd

Ok, ik snap het nu.
Je kan toch array_ptr als type gebruiken voor de parameters?

Ik heb het zelf zo gedaan:
code:
1
2
3
4
S: Vector_Reference;

S = new Vector(0..N-1);
SP.Sort(S); -- Sort(V: in out Vector_Reference)

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Topicstarter
Ja ok, dat zou wel werken. Alleen hoe sort je dan een stack array? Dat kan dan niet volgens mij...toch?

Edit: hmm misschien zo dan:

a : aliased array_type;

SP.Sort(a'Access);

ok, thxn, ik kom er wel uit denk ik :)

[ Voor 38% gewijzigd door Zoijar op 10-03-2003 15:52 ]