/*************************************************************************** * Copyright (c) 2023 Ondsel, Inc. * * * * This file is part of OndselSolver. * * * * See LICENSE file for details about copyright. * ***************************************************************************/ #pragma once #include #include #include "FullVector.h" #include "FullColumn.ref.h" #include "FullRow.ref.h" #include "FullMatrix.ref.h" //#include "Symbolic.h" namespace MbD { class Symbolic; template class FullColumn : public FullVector { public: FullColumn() : FullVector() {} FullColumn(std::vector vec) : FullVector(vec) {} FullColumn(int count) : FullVector(count) {} FullColumn(int count, const T& value) : FullVector(count, value) {} FullColumn(typename std::vector::iterator begin, typename std::vector::iterator end) : FullVector(begin, end) {} FullColumn(std::initializer_list list) : FullVector{ list } {} FColsptr plusFullColumn(FColsptr fullCol); FColsptr plusFullColumntimes(FColsptr fullCol, double factor); FColsptr minusFullColumn(FColsptr fullCol); FColsptr times(T a); FColsptr negated(); void atiputFullColumn(int i, FColsptr fullCol); void atiplusFullColumn(int i, FColsptr fullCol); void equalSelfPlusFullColumnAt(FColsptr fullCol, int i); void atiminusFullColumn(int i, FColsptr fullCol); void equalFullColumnAt(FColsptr fullCol, int i); FColsptr copy(); FRowsptr transpose(); void atiplusFullColumntimes(int i, FColsptr fullCol, T factor); T transposeTimesFullColumn(const FColsptr fullCol); void equalSelfPlusFullColumntimes(FColsptr fullCol, T factor); FColsptr cross(FColsptr fullCol); FColsptr simplified(); std::shared_ptr> clonesptr(); double dot(std::shared_ptr> vec); std::shared_ptr> dot(std::shared_ptr>>> vecvec); std::ostream& printOn(std::ostream& s) const override; }; // the following "printOn" needs to be in the header for unknown reasons linker template std::ostream& FullColumn::printOn(std::ostream& s) const { s << "FullCol{"; s << this->at(0); for (int i = 1; i < int(this->size()); i++) { s << ", " << this->at(i); } s << "}"; return s; } }