DiscretizedAsset

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

DiscretizedAsset

andrea.odetti-2
About DiscretizedAssets operation, I've written something like this, but I
would prefer it to be in the base class QuantLib::DiscretizedAsset

of course, these are not all useful math operations, but it is very easy to
add new ones

what do you think about?

bye

***************************************************************************
  class GeneralDiscretized : public QuantLib::DiscretizedAsset {
  public:
    GeneralDiscretized(const QuantLib::Handle<QuantLib::NumericalMethod>&
method)
      : QuantLib::DiscretizedAsset(method) {}
    void reset(QuantLib::Size size) {
      values_ = QuantLib::Array(size, 0.0);
    }
    GeneralDiscretized& operator=(double value) {
      values_ = QuantLib::Array(values_.size(), value);
      return *this;
    }
    GeneralDiscretized& operator+=(double value) {
      values_ += value;
      return *this;
    }
    GeneralDiscretized& operator-=(double value) {
      values_ -= value;
      return *this;
    }
    GeneralDiscretized& operator*=(double value) {
      values_ *= value;
      return *this;
    }
    GeneralDiscretized& operator/=(double value) {
      values_ /= value;
      return *this;
    }

    GeneralDiscretized& operator+=(QuantLib::DiscretizedAsset &asset) {
      QuantLib::Array &valori = asset.values();

      if (time_ != asset.time() || values_.size() != valori.size())
        errore("Slices differenti!");

      values_ += valori;
      return *this;
    }

    GeneralDiscretized& operator-=(QuantLib::DiscretizedAsset &asset) {
      QuantLib::Array &valori = asset.values();

      if (time_ != asset.time() || values_.size() != valori.size())
        errore("Slices differenti!");

      values_ -= valori;
      return *this;
    }

    GeneralDiscretized& max(QuantLib::DiscretizedAsset &asset) {
      QuantLib::Array &valori = asset.values();

      if (time_ != asset.time() || values_.size() != valori.size())
        errore("Slices differenti!");

      for (int i = 0; i < values_.size(); i++)
        values_[i] = MAX(values_[i], valori[i]);

      return *this;
    }

    GeneralDiscretized& max(double value) {

      for (int i = 0; i < values_.size(); i++)
        values_[i] = MAX(values_[i], value);

      return *this;
    }

  };

----------------------------------------------------------------------------------------------------------------------------------------
La presente comunicazione è destinata esclusivamente al soggetto indicato
più sopra quale destinatario o ad eventuali altri soggetti autorizzati a
riceverla. Essa contiene informazioni strettamente confidenziali e
riservate, la cui comunicazione o diffusione a terzi è proibita, salvo che
non sia stata espressamente autorizzata.
Se avete ricevuto questa comunicazione per errore, Vi preghiamo di darne
immediata comunicazione al mittente e di cancellarne ogni evidenza dai
Vostri supporti.
----------------------------------------------------------------------------------------------------------------------------------------