Hi!,

    All of this is nice, but remember to use the key word preserve if you 
resize the array smaller, for if you don't, you lose everything that has 
already been assigned! But, does work in init if only used as init.
Example:
       redim Preserve stuff(size)

        Bruce

Sent: Monday, April 30, 2012 5:09 PM
Subject: Re: Parameterizing a Class


Truth be told, if you use redim you never even have to specify a maximum
depth. Just pick a reasonable starting size and if your stack ever wants
to get deeper than that, redim/preserve it to double the size.
("Reasonable starting depth" is defined as whatever the sweet spot
between performance and memory usage is for your application. That's
something that may be worth parameterizing, if you wish.) Optionally,
when your stack empties to less than half its size, redim it smaller
(but not below that minimum size.)

But redim is also the answer to the question you asked. You do something
like this:

' -------------------------------------
class stackThingy
    private maxDepth
    private curDepth
    private stuff()

    public default function init( size )
       maxDepth = size
       curDepth = 0
       redim stuff(size)
       set init=me
    end function

    public sub showsize
       msgbox "The current size is " & maxDepth & vbcrlf & "The array is
dimmed to " & ubound(stuff)
    end sub
end class

set blah = (new stackThingy)(20)
blah.showsize
' -------------------------------------


On 4/30/2012 4:42 PM, David Helkenn wrote:
> Thanks, Ron,
>
> I don't think so. It is more like instantiating a stack class with
> each instance of that class (a stack object) having a "MaxDepth" space
> allocated to it. Then each time I "NEW CLS_Stack", I would get a stack
> object of "MaxDepth" elements. (I am ignoring the TopOfStack, Push,
> Pop, etc. for now.)
>
> What I think I'm hearing from Doug and Aaron is that the stack is
> actually defined outside the context of the class.  If I then want a
> stack of "MaxDepth", I have to call the "CLS_Stack.Init (MaxDepth)" in
> order to obtain an array named  S5. I think I then need:
>
> SET S5 = (NEW CLS_Stack).Init(MaxDepth)
> which will make S5 an array of "MaxDepth" elements. So, my confusion
> and question really comes down to, "Where do I declare the array that
> is my stack?" I thought I could do it inside the Class block,
> hopefully parameterizing the class somehow so that I could have
> something like:
>
> SET S5 = NEW CLS_Stack(MaxDepth)
> and
> Set S12 = NEW Cls_Stack(MonthsPerYear)
> etc.
>
> I understand this is not permitted as VBS does not support
> parameterizing a class. This is a shame IMHO because so many classes
> seem to be a natural "List" of other objects.
>
> Redim can certainly handle the dynamic fluctuations in the depth of a
> stack, but that seems to me to be operative only after the stack is
> set up in the first place.
>
> I can imagine a whole collection of objects organized in all manner of
> data structures -- queues, trees, graphs, ... All of these structures
> could be restricted to a given, well defined, set of some number of
> objects.
>
> So, on to the WIKI articles which I assume are at AppCentral. Thanks,
> Aaron, for that lead.
>
> Dave
>
> At 11:01 AM 4/30/2012, you wrote:
>> On 4/30/2012 1:52 PM, David Helkenn wrote:
>>> private someStack ' AARRGGGG how many?
>>
>> Does redim solve this problem for you?
>>
>> http://msdn.microsoft.com/en-us/library/c850dt17%28v=vs.84%29.aspx
>>
>

Reply via email to