26#if ! defined (octave_ov_base_sparse_h)
27#define octave_ov_base_sparse_h 1
29#include "octave-config.h"
53 OCTINTERP_OVERRIDABLE_FUNC_API
58 OCTINTERP_OVERRIDABLE_FUNC_API
62 if (matrix.ndims () == 0)
66 OCTINTERP_OVERRIDABLE_FUNC_API
70 if (matrix.ndims () == 0)
74 OCTINTERP_OVERRIDABLE_FUNC_API
84 {
return matrix.nnz (); }
87 {
return matrix.nzmax (); }
89 OCTINTERP_OVERRIDABLE_FUNC_API std::size_t
byte_size ()
const
90 {
return matrix.byte_size (); }
104 subsref (
const std::string& type,
const std::list<octave_value_list>& idx);
107 subsref (
const std::string& type,
const std::list<octave_value_list>& idx,
109 {
return subsref (type, idx); }
112 subsasgn (
const std::string& type,
const std::list<octave_value_list>& idx,
122 template <
typename RHS_T>
139 octave::idx_vector i = idx (0).index_vector ();
141 matrix.assign (i, rhs);
148 octave::idx_vector i = idx (0).index_vector ();
151 octave::idx_vector j = idx (1).index_vector ();
153 matrix.assign (i, j, rhs);
159 error (
"sparse indexing needs 1 or 2 indices");
162 catch (octave::index_exception& ie)
165 ie.set_pos_if_unset (
len, k+1);
170 typ.invalidate_type ();
176 {
return matrix.dims (); }
182 {
return T (matrix.reshape (new_dims)); }
186 {
return T (matrix.permute (vec, inv)); }
191 {
return matrix.
all (dim); }
194 {
return matrix.
any (dim); }
211 {
return octave_value (matrix.sort (sidx, dim, mode)); }
213 OCTINTERP_OVERRIDABLE_FUNC_API
sortmode
221 {
MatrixType ret = typ; typ = _typ;
return ret; }
225 OCTINTERP_OVERRIDABLE_FUNC_API
bool isnumeric ()
const {
return true; }
227 OCTINTERP_OVERRIDABLE_FUNC_API
bool issparse ()
const {
return true; }
229 OCTINTERP_OVERRIDABLE_FUNC_API
bool is_defined ()
const {
return true; }
231 OCTINTERP_OVERRIDABLE_FUNC_API
bool is_constant ()
const {
return true; }
233 OCTINTERP_API
bool is_true ()
const;
237 OCTINTERP_API
void print (std::ostream& os,
bool pr_as_read_syntax =
false);
240 print_info (std::ostream& os,
const std::string& prefix)
const;
243 print_raw (std::ostream& os,
bool pr_as_read_syntax =
false)
const;
245 OCTINTERP_API
bool save_ascii (std::ostream& os);
247 OCTINTERP_API
bool load_ascii (std::istream& is);
251 OCTINTERP_API std::string
258 {
return matrix.data (); }
261 {
return matrix.ridx (); }
264 {
return matrix.cidx (); }
N Dimensional Array with copy-on-write semantics.
Vector representing the dimensions (size) of an Array.
octave_idx_type safe_numel() const
The following function will throw a std::bad_alloc () exception if the requested size is larger than ...
bool is_matrix_type() const
MatrixType matrix_type() const
octave_value_list subsref(const std::string &type, const std::list< octave_value_list > &idx, int)
octave_value diag(octave_idx_type k=0) const
octave_value permute(const Array< int > &vec, bool inv=false) const
octave_value squeeze() const
std::size_t byte_size() const
octave_idx_type nzmax() const
octave_value sort(Array< octave_idx_type > &sidx, octave_idx_type dim=0, sortmode mode=ASCENDING) const
octave_value reshape(const dim_vector &new_dims) const
void assign(const octave_value_list &idx, const RHS_T &rhs)
octave_value all(int dim=0) const
const octave_idx_type * mex_get_jc() const
octave_base_sparse(const T &a, const MatrixType &t)
octave_base_sparse(const T &a)
octave_value sort(octave_idx_type dim=0, sortmode mode=ASCENDING) const
octave_base_sparse(const octave_base_sparse &a)
octave_value full_value() const
~octave_base_sparse()=default
octave_value any(int dim=0) const
sortmode issorted(sortmode mode=UNSORTED) const
MatrixType matrix_type(const MatrixType &_typ) const
octave_idx_type numel() const
const octave_idx_type * mex_get_ir() const
octave_idx_type nnz() const
const void * mex_get_data() const
virtual octave_value full_value() const
virtual octave_value subsref(const std::string &type, const std::list< octave_value_list > &idx)
virtual bool save_ascii(std::ostream &os)
virtual octave_value fast_elem_extract(octave_idx_type n) const
virtual octave_value diag(octave_idx_type k=0) const
virtual bool is_true() const
virtual octave_value do_index_op(const octave_value_list &idx, bool resize_ok=false)
virtual float_display_format get_edit_display_format() const
virtual octave_value map(unary_mapper_t) const
virtual void assign(const std::string &, const octave_value &)
virtual std::string edit_display(const float_display_format &, octave_idx_type, octave_idx_type) const
virtual void print_raw(std::ostream &os, bool pr_as_read_syntax=false) const
virtual bool load_ascii(std::istream &is)
virtual dim_vector dims() const
virtual bool print_as_scalar() const
virtual void print_info(std::ostream &os, const std::string &prefix) const
virtual void print(std::ostream &os, bool pr_as_read_syntax=false)
virtual octave_value resize(const dim_vector &, bool fill=false) const
virtual octave_value subsasgn(const std::string &type, const std::list< octave_value_list > &idx, const octave_value &rhs)
friend class octave_value
octave_idx_type length() const
octave_value any(int dim=0) const
sortmode issorted(sortmode mode=UNSORTED) const
octave_value all(int dim=0) const
Matrix matrix_value(bool frc_str_conv=false) const
octave_value squeeze() const
void error(const char *fmt,...)