205{
206 try
207 {
210 if(nrows < 0 || ncols < 0)
211 {
212 ERROR(
"internal error: matrix has a negative size %d by %d",
213 nrows,
214 ncols);
215 return nullptr;
216 }
217 engine_RawRingElementArrayArray entries =
219 entries->len = nrows;
220 for(int r = 0; r < nrows; r++)
221 {
222 engine_RawRingElementArray currRow =
224 currRow->len = ncols;
225 entries->array[r] = currRow;
226 }
227 for(int r = 0; r < nrows; r++)
228 {
229 for(int c = 0; c < ncols; c++)
230 {
233 entries->array[r]->array[c] =
235 }
236 }
237 return entries;
239 {
241 return nullptr;
242 }
243 return nullptr;
244}
virtual size_t n_rows() const =0
virtual size_t n_cols() const =0
virtual bool get_entry(size_t r, size_t c, ring_elem &result) const =0
virtual const Ring * get_ring() const =0
static RingElement * make_raw(const Ring *R, ring_elem f)
VALGRIND_MAKE_MEM_DEFINED & result(result)
#define getmemarraytype(S, len)