struct Matrix:
var height: Int
var width: Int
var total_items: Int
var data: Pointer[Float32]
fn __init__(inout self, height: Int, width: Int, default_value: Float32) -> None:
self.height = height
self.width = width
self.total_items = height * width
self.data = Pointer[Float32].alloc(self.total_items)
for item in range(self.total_items):
self.data.store(item, default_value)
fn __setitem__(inout self, row: Int, col: Int, item: Float32) -> None:
let loc: Int = (row * self.width) + col
self.data.store(loc, item)
fn __getitem__(borrowed self, row: Int, col: Int) -> Float32:
let loc: Int = (row * self.width) + col
return self.data.load(loc)
fn __copyinnit__(inout self, other: Self) -> None:
self.height = other.height
self.width = other.width
self.total_items = other.total_items
self.data = Pointer[Float32].alloc(self.total_items)
for item in range(self.total_items):
self.data.store(item, other.data.load(item))
fn __add__(borrowed self, rhs: Matrix) -> Matrix:
if self.height != rhs.height and self.width != rhs.width:
return Matrix(self.height, self.width, Float32(0))
var new_matirx = Matrix(self.height, self.width, Float32(0))
for row in range(self.height):
for col in range(self.width):
new_matirx[row, col] = self[row, col] + rhs[row, col]
return new_matirx
struct Matrix:
var height: Int
var width: Int
var total_items: Int
var data: Pointer[Float32]
fn __init__(inout self, height: Int, width: Int, default_value: Float32) -> None:
self.height = height
self.width = width
self.total_items = height * width
self.data = Pointer[Float32].alloc(self.total_items)
for item in range(self.total_items):
self.data.store(item, default_value)
fn __setitem__(inout self, row: Int, col: Int, item: Float32) -> None:
let loc: Int = (row * self.width) + col
self.data.store(loc, item)
fn __getitem__(borrowed self, row: Int, col: Int) -> Float32:
let loc: Int = (row * self.width) + col
return self.data.load(loc)
fn __copyinnit__(inout self, other: Self) -> None:
self.height = other.height
self.width = other.width
self.total_items = other.total_items
self.data = Pointer[Float32].alloc(self.total_items)
for item in range(self.total_items):
self.data.store(item, other.data.load(item))
fn __add__(borrowed self, rhs: Matrix) -> Matrix:
if self.height != rhs.height and self.width != rhs.width:
return Matrix(self.height, self.width, Float32(0))
var new_matirx = Matrix(self.height, self.width, Float32(0))
for row in range(self.height):
for col in range(self.width):
new_matirx[row, col] = self[row, col] + rhs[row, col]
return new_matirx