# Assign to Array Column

Salih Dincer salihdb at hotmail.com
Thu Feb 2 00:48:32 UTC 2023

```On Wednesday, 1 February 2023 at 05:51:31 UTC, Paul wrote:
> Thanks Salih.  Much appreciated.

It's my pleasure to solve this problem...

I have struck upon an idea that would not affect (i think) the
speed of the processor requesting memory from the heap on a
page-by-page basis but limited 😀

```d
import std.stdio, std.algorithm, std.range;

enum : size_t {
ROW = 11,
COL = 4,
SUM = ROW * COL
}

void main()
{
// 4 ushort x 11 ulong:
auto arr = LimitedArray!COL(ROW);

assert(arr.cell[0].elements.length >= COL);
assert(arr.length == SUM);

alias T = typeof(arr.cell[0].elements[0]);

auto range = iota!T(T.max/2, T.max, 762).array;
assert(range.length == SUM);

range.each!((i, T x) => arr[i] = x);/*
foreach(i, x; range) {
arr[i] = x;
writeln(x);
}//*/
arr.print;

// 8 ubyte x 99 ulong:
auto minMaxTest = LimitedArray!8(99);
auto testLength = minMaxTest.length;

minMaxTest[0] = ubyte.min + 1;
minMaxTest[testLength - 1] = ubyte.max;
minMaxTest.print;
}

template LimitedArray(size_t col)
{
enum error = "Not Possible Capacity!";
enum size = (col + 1) >> 1;

static if(size >= 3)
{
alias T = ubyte; // min value, but max column

} else static if(size == 2)
{
alias T = ushort;// average array

} else static if(size == 1)
{
alias T = uint;  // max value, but min column
}
enum s = ulong.sizeof/T.sizeof;

struct LimitedArray
{
invariant(uint.sizeof > size, error);

private {
union Cell {
ulong element;
T[s] elements;
}
Cell[] cell;
const size_t row;
}

this(size_t row) {
this.cell = new Cell[row];
this.row = cell.length;
}

ref T opIndex(size_t i)
in(i < length, "Range overflow!") {
auto len = cell.length;
size_t y, x = i % len;
y = i / len;
return cell[x].elements[y];
}

auto length() {
return row * col;
}

void print() {
foreach(i, c; cell) {
i.writef!"row %2s =>";
foreach(e; c.elements) e.writef!"%6s";
writeln(": ", c.element);
}
}
}
}
```

> row  0 => 32767 41149 49531 57913: 16301273062966132735
> row  1 => 33529 41911 50293 58675: 16515760268034671353
> row  2 => 34291 42673 51055 59437: 16730247473103209971
> row  3 => 35053 43435 51817 60199: 16944734678171748589
> row  4 => 35815 44197 52579 60961: 17159221883240287207
> row  5 => 36577 44959 53341 61723: 17373709088308825825
> row  6 => 37339 45721 54103 62485: 17588196293377364443
> row  7 => 38101 46483 54865 63247: 17802683498445903061
> row  8 => 38863 47245 55627 64009: 18017170703514441679
> row  9 => 39625 48007 56389 64771: 18231657908582980297
> row 10 => 40387 48769 57151 65533: 18446145113651518915

@SDB79
```