Array in an array
#5
I was going to propose using _MEM but...

I was able to note the following:

Code: (Select All)
DIM AS INTEGER abc(1 TO 4)
DIM AS Test xyz(1 TO 10, abc())

That can't be done; at declaration BASIC needs to know what is the extent of the array. That is until something like "variants" and object-like variables is figured out into this implementation.

To try to respond to that, I devised this:

Code: (Select All)
TYPE cardty
    nam AS STRING * 16
    quant AS INTEGER
    e AS _MEM
END TYPE

DIM SHARED card(1 TO 10) AS cardty

RANDOMIZE 1000

card(1).nam = "spade"
card(1).quant = 3
create_card 1
random_card 1
PRINT "The first card for "; card(1).nam; " is "; obtain_card(1, 1)
PRINT "The last card for "; card(1).nam; " is "; obtain_card(1, 3)

set_card 1, 3, 22
PRINT "The last card for "; card(1).nam; " was changed to "; obtain_card(1, 3)

delete_card 1
END

SUB create_card (which AS INTEGER)
    SHARED i0 AS INTEGER
    card(which).e = _MEMNEW(card(which).quant * LEN(i0))
    _MEMFILL card(which).e, card(which).e.OFFSET, card(which).quant, 0 AS INTEGER
END SUB

SUB random_card (which AS INTEGER)
    SHARED i AS INTEGER, i0 AS INTEGER
    FOR i = 1 TO card(which).quant
        _MEMPUT card(which).e, card(which).e.OFFSET + (i - 1) * LEN(i0), INT(RND * 52 + 1) AS INTEGER
    NEXT
END SUB

SUB delete_card (which AS INTEGER)
    _MEMFREE card(which).e
END SUB

SUB set_card (which AS INTEGER, subscr AS INTEGER, valu AS INTEGER)
    SHARED i0 AS INTEGER
    _MEMPUT card(which).e, card(which).e.OFFSET + (subscr - 1) * LEN(i0), valu AS INTEGER
END SUB

FUNCTION obtain_card% (which AS INTEGER, subscr AS INTEGER)
    SHARED i0 AS INTEGER
    obtain_card = _MEMGET(card(which).e, card(which).e.OFFSET + (subscr - 1) * LEN(i0), INTEGER)
END FUNCTION

It's a bit confusing to follow along. Using subprograms makes code easier to read, to make things look as much as possible like multiple-dimension arrays.

Note the UDT variable "cards" is declared with "DIM SHARED" to make life easier into the subprograms. Also note the target type is always "INTEGER" in the _MEM workings, hence the "SHARED i0 AS INTEGER" appearing in a lot of places. The type has to be changed there as well as the last parameter to _MEMFILL, _MEMGET and _MEMPUT. Cannot be an UDT.

With this code, doing:

acard = obtain_card(1, 3)

would be like trying to do:

acard = test(1).abc(3)

in code (according to above) that actually is not possible in QB64(PE).

This code could benefit from some range-checking and other things to make it robust.
Reply


Messages In This Thread
Array in an array - by NasaCow - 02-15-2023, 12:44 AM
RE: Array in an array - by bplus - 02-15-2023, 01:55 AM
RE: Array in an array - by OldMoses - 02-15-2023, 02:43 AM
RE: Array in an array - by NasaCow - 02-15-2023, 03:17 AM
RE: Array in an array - by OldMoses - 02-15-2023, 11:02 AM
RE: Array in an array - by mnrvovrfc - 02-15-2023, 03:53 AM
RE: Array in an array - by SMcNeill - 02-15-2023, 12:59 PM
RE: Array in an array - by bplus - 02-15-2023, 05:31 PM
RE: Array in an array - by bplus - 02-16-2023, 04:25 PM
RE: Array in an array - by NasaCow - 02-17-2023, 12:03 AM
RE: Array in an array - by SpriggsySpriggs - 02-17-2023, 05:43 PM
RE: Array in an array - by Kernelpanic - 02-18-2023, 03:49 PM
RE: Array in an array - by TempodiBasic - 03-11-2023, 02:59 AM
RE: Array in an array - by bplus - 02-17-2023, 06:32 PM
RE: Array in an array - by TerryRitchie - 02-17-2023, 09:12 PM
RE: Array in an array - by SMcNeill - 02-17-2023, 11:42 PM
RE: Array in an array - by madscijr - 02-28-2023, 07:14 AM
RE: Array in an array - by mnrvovrfc - 02-17-2023, 10:57 PM
RE: Array in an array - by TerryRitchie - 02-18-2023, 02:24 AM
RE: Array in an array - by AtomicSlaughter - 02-18-2023, 09:39 AM
RE: Array in an array - by bplus - 02-18-2023, 12:47 PM
RE: Array in an array - by TempodiBasic - 02-18-2023, 09:25 PM
RE: Array in an array - by TempodiBasic - 02-18-2023, 09:41 PM
RE: Array in an array - by TempodiBasic - 02-18-2023, 10:01 PM
RE: Array in an array - by Kernelpanic - 02-18-2023, 11:07 PM
RE: Array in an array - by TempodiBasic - 02-19-2023, 01:46 AM
RE: Array in an array - by TempodiBasic - 02-21-2023, 12:19 AM
RE: Array in an array - by bplus - 02-21-2023, 01:07 AM
RE: Array in an array - by mnrvovrfc - 02-21-2023, 05:13 AM
RE: Array in an array - by TempodiBasic - 02-21-2023, 02:26 PM
RE: Array in an array - by mnrvovrfc - 02-21-2023, 02:54 PM
RE: Array in an array - by Kernelpanic - 02-21-2023, 01:18 AM
RE: Array in an array - by TempodiBasic - 02-21-2023, 02:37 PM
RE: Array in an array - by bplus - 02-21-2023, 02:16 PM
RE: Array in an array - by Kernelpanic - 02-21-2023, 06:04 PM
RE: Array in an array - by bplus - 02-21-2023, 06:26 PM
RE: Array in an array - by mnrvovrfc - 02-21-2023, 10:24 PM
RE: Array in an array - by Kernelpanic - 02-21-2023, 05:59 PM
RE: Array in an array - by bplus - 02-21-2023, 06:33 PM
RE: Array in an array - by bplus - 02-21-2023, 06:42 PM
RE: Array in an array - by Kernelpanic - 02-21-2023, 06:45 PM
RE: Array in an array - by bplus - 02-21-2023, 06:51 PM
RE: Array in an array - by Kernelpanic - 02-21-2023, 09:19 PM
RE: Array in an array - by bplus - 02-21-2023, 11:13 PM
RE: Array in an array - by TempodiBasic - 02-22-2023, 09:32 AM
RE: Array in an array - by Kernelpanic - 02-27-2023, 07:05 PM
RE: Array in an array - by Kernelpanic - 02-28-2023, 03:33 PM
RE: Array in an array - by madscijr - 02-28-2023, 06:24 PM
RE: Array in an array - by TempodiBasic - 03-11-2023, 02:23 PM
RE: Array in an array - by Kernelpanic - 02-28-2023, 11:14 PM
RE: Array in an array - by madscijr - 03-01-2023, 02:13 AM
RE: Array in an array - by mnrvovrfc - 03-01-2023, 03:29 AM
RE: Array in an array - by bplus - 03-01-2023, 04:00 PM
RE: Array in an array - by madscijr - 03-01-2023, 05:24 PM
RE: Array in an array - by Sprezzo - 03-02-2023, 08:34 AM
RE: Array in an array - by bplus - 03-02-2023, 05:18 PM
RE: Array in an array - by mnrvovrfc - 03-02-2023, 04:26 PM
RE: Array in an array - by SpriggsySpriggs - 03-02-2023, 05:19 PM
RE: Array in an array - by bplus - 03-02-2023, 05:25 PM
RE: Array in an array - by SpriggsySpriggs - 03-02-2023, 05:26 PM
RE: Array in an array - by bplus - 03-02-2023, 05:28 PM
RE: Array in an array - by Dimster - 03-02-2023, 06:05 PM
RE: Array in an array - by bplus - 03-02-2023, 06:20 PM
RE: Array in an array - by SpriggsySpriggs - 03-02-2023, 07:12 PM
RE: Array in an array - by mnrvovrfc - 03-02-2023, 10:46 PM
RE: Array in an array - by madscijr - 03-03-2023, 12:47 AM
RE: Array in an array - by SpriggsySpriggs - 03-03-2023, 02:59 AM
RE: Array in an array - by madscijr - 03-03-2023, 04:24 AM
RE: Array in an array - by mnrvovrfc - 03-03-2023, 07:22 AM
RE: Array in an array - by mnrvovrfc - 03-03-2023, 07:11 AM
RE: Array in an array - by vince - 03-03-2023, 10:07 AM
RE: Array in an array - by SpriggsySpriggs - 03-03-2023, 01:02 PM
RE: Array in an array - by madscijr - 03-03-2023, 03:06 PM
RE: Array in an array - by vince - 03-03-2023, 03:17 PM
RE: Array in an array - by SpriggsySpriggs - 03-03-2023, 03:25 PM
RE: Array in an array - by mnrvovrfc - 03-11-2023, 06:22 PM
RE: Array in an array - by NasaCow - 03-13-2023, 03:29 AM
RE: Array in an array - by TempodiBasic - 04-02-2023, 10:14 PM
RE: Array in an array - by NasaCow - 04-06-2023, 02:37 AM
RE: Array in an array - by TempodiBasic - 04-12-2023, 10:53 AM



Users browsing this thread: 32 Guest(s)