[jawsscripts] Re: Resizing arrays

  • From: "Travis Roth" <travis@xxxxxxxxxxxxxx>
  • To: <jawsscripts@xxxxxxxxxxxxx>
  • Date: Thu, 5 Jan 2012 14:46:27 -0600

C comes to mind.
Not sure what you mean by "this sort". But I'd not put much past JAWS script 
either way. <smile>

-----Original Message-----
From: jawsscripts-bounce@xxxxxxxxxxxxx 
[mailto:jawsscripts-bounce@xxxxxxxxxxxxx] On Behalf Of Soronel Haetir
Sent: Thursday, January 05, 2012 2:35 PM
To: jawsscripts@xxxxxxxxxxxxx
Subject: [jawsscripts] Re: Resizing arrays

Yes, jaws script objects are referenced counted, it's the same process that 
occurs if the variable were to simply go out of scope.  I don't know that I've 
ever seen a language of this sort that requires manual memory cleanup.  I 
suppose such might exist, but it would be very much the exception.

On 1/5/12, Travis Roth <travis@xxxxxxxxxxxxxx> wrote:
> Yes I thought the array copy was by reference as well.
>
> I have the same problem of not knowing array size in advance.
> But it does look useful that you can just make a new array on the 
> existing variable, I hadn't realized that was possible. Does the old 
> array just stop existing when new is called again? We've lost access 
> to it but I am just wondering if JAWS does any garbage collection. I 
> am thinking in the case of the default scripts, where those global 
> variables are in existence until JAWS is unloaded, if garbage 
> collection does not automatically occur using new repeatedly would start to 
> be a memory leak.
>
> Like the ideas... Thanks everyone.
>
> -----Original Message-----
> From: jawsscripts-bounce@xxxxxxxxxxxxx 
> [mailto:jawsscripts-bounce@xxxxxxxxxxxxx] On Behalf Of Doug Lee
> Sent: Thursday, January 05, 2012 1:55 PM
> To: jawsscripts@xxxxxxxxxxxxx
> Subject: [jawsscripts] Re: Resizing arrays
>
> A couple clarifications:
>
> First, to me at least, a "deep copy" is a full duplication of 
> something with all subparts. My understanding of "s2 = s1" where they 
> are arrays is that, in JAWS, only the pointer is copied. It still 
> works for your usage though, so this is mostly just behind-the-scenes stuff 
> for this case.
>
> Second though, your code assumes array sizes, and most of my cases 
> don't have a clue in advance what size to use. As an example, consider 
> code that creates a structure of information for each entry in a chat 
> window. If the process of counting entries is as expensive as that for 
> actually retrieving them, there's no reasonable way to know in advance 
> how big to make the array. A collection becomes more efficient in this 
> case, because it is dynamic while still being amenable to random access.
>
> On Thu, Jan 05, 2012 at 03:59:00PM -0300, Andrew Hart wrote:
> I don't understand your need for collections in order to use arrays 
> globally.  You just create the array at the size you need.  If you 
> need to add to it, you just fob it off to a local variable, assign a 
> new larger array to the global var and then copy the array elements in 
> the local var to the global one.  Then, to finish, you erase the copy 
> of the array by assigning it an unassigned array var of the same type, 
> much as you would do with Object vars.
>
> For example:
>
> Var
>   StringArray s1,
> StringArray S2,
> StringArray NULLStringArray
> s1 = New StringArray[5]
> ; fill the array with stuff
> ...
> ;Copy the array (this is a deep copy, not a shallow copy that only 
> ;passes a reference pointer)
> s2 = s1
> s1 = New StringArray[10] ; make the array bigger ; Now copy the 
> contents of
> s2 to s1 For i = 1 To 5
>   s1[i] = s2[i]
> EndFor
> ; erase the array.
> ; Since JAWS performs deep array copies, it should reduce s2 to its 
> ;minimal memory footprint, allowing the space to be reclaimed by the 
> ;heap when appropriate conditions prevail
> s2 = NULLStringArray
>
>
> If you're serious about regularly resizing arrays, I'd recommend 
> making a few functions using the relevant bits of the above example 
> for resizing arrays of different types.  You'd pass the array being 
> resized by reference (using ByRef in the function declaration).  Also, 
> as this is  a linear time operation, doing it a lot could slow things 
> down if you are dealing with big arrays.  Tricks for dealing with that 
> are to always make the array bigger than what you need.  For example, 
> you could always double the size of the array whenever you run out of 
> space and then resize it to conserve memory by removing unused 
> portions later if it is not likely to be added to for a while.
>
> Hth,
> Andrew.
>
> On 5/01/2012 2:32 PM, Travis Roth wrote:
>> Perhaps a combination of a collection and an array would work then?
>> The documentation states that a collection can hold arrays. So when a 
>> new array is wanted, delete the old one in the collection and make a 
>> new
> one.
>>
>> I am not sure what type of performance that'd give, but might be 
>> another workaround.
>>
>> The reason for not just creating new arrays is I need them to be 
>> global, and there'd be no way to keep track of the names, or at least 
>> not a practical way.
>> Bbut a collection may solve that.
>>
>> -----Original Message-----
>> From: jawsscripts-bounce@xxxxxxxxxxxxx 
>> [mailto:jawsscripts-bounce@xxxxxxxxxxxxx] On Behalf Of Doug Lee
>> Sent: Thursday, January 05, 2012 11:26 AM
>> To: jawsscripts@xxxxxxxxxxxxx
>> Subject: [jawsscripts] Re: Resizing arrays
>>
>> JAWS 12 introduced a CollectionRemoveItem function for that.
>>
>> On Thu, Jan 05, 2012 at 11:23:32AM -0600, Travis Roth wrote:
>> Kind of messy but I see your reasoning.
>> How do you remove an item from a collection?
>>
>>
>> -----Original Message-----
>> From: jawsscripts-bounce@xxxxxxxxxxxxx 
>> [mailto:jawsscripts-bounce@xxxxxxxxxxxxx] On Behalf Of Doug Lee
>> Sent: Thursday, January 05, 2012 10:21 AM
>> To: jawsscripts@xxxxxxxxxxxxx
>> Subject: [jawsscripts] Re: Resizing arrays
>>
>> In the absence of knowledge of a way to do that, I've been using 
>> collections as dynamic arrays, where the keys are things like 
>> intToString(i).  You do need to stringify the keys though. When I do 
>> that, I also sometimes include a count key that I keep updated when 
>> adding or removing elements. This also allows for efficient sparse 
>> arrays but does complicate their management a bit and precludes 
>> things like inserts/deletes where elements slide in to fill the hole 
>> or make
> room.
>>
>> On Thu, Jan 05, 2012 at 10:17:13AM -0600, Travis Roth wrote:
>> Is it possible to resize arrays in JAWS script?
>> It appears that the arrays are dynamically sized at runtime because 
>> the new keyword is used.
>> But the documentation on the website does not seem to discuss 
>> destroying or resizing arrays?
>> This may not be an issue for local variables, but I am thinking for a 
>> global array where at some point it may be desireable to store 
>> something larger than was originally set for.
>>
>>
>>
>> __________???
>>
>> View the list's information and change your settings at 
>> //www.freelists.org/list/jawsscripts
>>
>> --
>> Doug Lee, Senior Accessibility Programmer SSB BART Group - 
>> Accessibility-on-Demand mailto:doug.lee@xxxxxxxxxxxxxxxx 
>> http://www.ssbbartgroup.com "While they were saying among themselves 
>> it cannot be done, it was done." --Helen Keller __________o?=
>>
>> View the list's information and change your settings at 
>> //www.freelists.org/list/jawsscripts
>>
>>
>> __________???
>>
>> View the list's information and change your settings at 
>> //www.freelists.org/list/jawsscripts
>>
>> --
>> Doug Lee, Senior Accessibility Programmer SSB BART Group - 
>> Accessibility-on-Demand mailto:doug.lee@xxxxxxxxxxxxxxxx 
>> http://www.ssbbartgroup.com "While they were saying among themselves 
>> it cannot be done, it was done." --Helen Keller __________o?=
>>
>> View the list's information and change your settings at 
>> //www.freelists.org/list/jawsscripts
>>
>>
>> __________???
>>
>> View the list's information and change your settings at 
>> //www.freelists.org/list/jawsscripts
>>
>>
>>
>
>
> __________???
>
> View the list's information and change your settings at 
> //www.freelists.org/list/jawsscripts
>
> --
> Doug Lee, Senior Accessibility Programmer SSB BART Group - 
> Accessibility-on-Demand mailto:doug.lee@xxxxxxxxxxxxxxxx 
> http://www.ssbbartgroup.com "While they were saying among themselves 
> it cannot be done, it was done." --Helen Keller __________o?=
>
> View the list's information and change your settings at 
> //www.freelists.org/list/jawsscripts
>
>
> __________ 
>
> View the list's information and change your settings at 
> //www.freelists.org/list/jawsscripts
>
>


--
Soronel Haetir
soronel.haetir@xxxxxxxxx
__________ 

View the list's information and change your settings at 
//www.freelists.org/list/jawsscripts


__________�

View the list's information and change your settings at 
//www.freelists.org/list/jawsscripts

Other related posts: