]> git.stg.codes - stg.git/blobdiff - include/stg/tariff_conf.h
Various fixes of issues reported by static analyzers.
[stg.git] / include / stg / tariff_conf.h
index b554e14ac63f761c8c35f192653114fda156bf8e..f705d0a0bef90e4e8575791505a76df8cb81934a 100644 (file)
 #ifndef TARIFF_CONF_H
 #define TARIFF_CONF_H
 
-#include <string>
-#include <vector>
-
+#include "tariff.h"
 #include "resetable.h"
 #include "const.h"
 
-//-----------------------------------------------------------------------------
-enum
-{
-    TRAFF_UP = 0,
-    TRAFF_DOWN,
-    TRAFF_UP_DOWN,
-    TRAFF_MAX
-};
+#include <string>
+#include <vector>
+
 //-----------------------------------------------------------------------------
 struct DIRPRICE_DATA
 {
@@ -105,21 +98,35 @@ struct DIRPRICE_DATA_RES
     DIRPRICE_DATA GetData() const
         {
         DIRPRICE_DATA dd;
-        dd.hDay        = hDay.data();
-        dd.hNight      = hNight.data();
-        dd.mDay        = mDay.data();
-        dd.mNight      = mNight.data();
-        dd.noDiscount  = noDiscount.data();
-        dd.priceDayA   = priceDayA.data();
-        dd.priceDayB   = priceDayB.data();
-
-        dd.priceNightA = priceNightA.data();
-        dd.priceNightB = priceNightB.data();
-        dd.singlePrice = singlePrice.data();
-        dd.threshold   = threshold.data();
+        hDay.maybeSet(dd.hDay);
+        hNight.maybeSet(dd.hNight);
+        mDay.maybeSet(dd.mDay);
+        mNight.maybeSet(dd.mNight);
+        noDiscount.maybeSet(dd.noDiscount);
+        priceDayA.maybeSet(dd.priceDayA);
+        priceDayB.maybeSet(dd.priceDayB);
+        priceNightA.maybeSet(dd.priceNightA);
+        priceNightB.maybeSet(dd.priceNightB);
+        singlePrice.maybeSet(dd.singlePrice);
+        threshold.maybeSet(dd.threshold);
         return dd;
         }
 
+    void Splice(const DIRPRICE_DATA_RES & rhs)
+        {
+        hDay.splice(rhs.hDay);
+        mDay.splice(rhs.mDay);
+        hNight.splice(rhs.hNight);
+        mNight.splice(rhs.mNight);
+        priceDayA.splice(rhs.priceDayA);
+        priceNightA.splice(rhs.priceNightA);
+        priceDayB.splice(rhs.priceDayB);
+        priceNightB.splice(rhs.priceNightB);
+        threshold.splice(rhs.threshold);
+        singlePrice.splice(rhs.singlePrice);
+        noDiscount.splice(rhs.noDiscount);
+        }
+
     RESETABLE<int>    hDay;
     RESETABLE<int>    mDay;
     RESETABLE<int>    hNight;
@@ -135,26 +142,35 @@ struct DIRPRICE_DATA_RES
 //-----------------------------------------------------------------------------
 struct TARIFF_CONF
 {
-    double      fee;
-    double      free;
-    int         traffType;
-    double      passiveCost;
-    std::string name;
+    double             fee;
+    double             free;
+    TARIFF::TRAFF_TYPE traffType;
+    double             passiveCost;
+    std::string        name;
+    TARIFF::PERIOD     period;
+    TARIFF::CHANGE_POLICY changePolicy;
+    time_t changePolicyTimeout;
 
     TARIFF_CONF()
         : fee(0),
           free(0),
-          traffType(TRAFF_UP_DOWN),
+          traffType(TARIFF::TRAFF_UP_DOWN),
           passiveCost(0),
-          name()
+          name(),
+          period(TARIFF::MONTH),
+          changePolicy(TARIFF::ALLOW),
+          changePolicyTimeout(0)
         {}
 
-    TARIFF_CONF(const std::string & n)
+    explicit TARIFF_CONF(const std::string & n)
         : fee(0),
           free(0),
-          traffType(TRAFF_UP_DOWN),
+          traffType(TARIFF::TRAFF_UP_DOWN),
           passiveCost(0),
-          name(n)
+          name(n),
+          period(TARIFF::MONTH),
+          changePolicy(TARIFF::ALLOW),
+          changePolicyTimeout(0)
         {}
 };
 //-----------------------------------------------------------------------------
@@ -165,7 +181,10 @@ struct TARIFF_CONF_RES
           free(),
           traffType(),
           passiveCost(),
-          name()
+          name(),
+          period(),
+          changePolicy(),
+          changePolicyTimeout()
         {}
 
     TARIFF_CONF_RES & operator=(const TARIFF_CONF & tc)
@@ -175,25 +194,34 @@ struct TARIFF_CONF_RES
         traffType   = tc.traffType;
         passiveCost = tc.passiveCost;
         name        = tc.name;
+        period      = tc.period;
+        changePolicy = tc.changePolicy;
+        changePolicyTimeout = tc.changePolicyTimeout;
         return *this;
         }
 
     TARIFF_CONF GetData() const
         {
         TARIFF_CONF tc;
-        tc.fee         = fee.data();
-        tc.free        = free.data();
-        tc.name        = name.data();
-        tc.passiveCost = passiveCost.data();
-        tc.traffType   = traffType.data();
+        fee.maybeSet(tc.fee);
+        free.maybeSet(tc.free);
+        name.maybeSet(tc.name);
+        passiveCost.maybeSet(tc.passiveCost);
+        traffType.maybeSet(tc.traffType);
+        period.maybeSet(tc.period);
+        changePolicy.maybeSet(tc.changePolicy);
+        changePolicyTimeout.maybeSet(tc.changePolicyTimeout);
         return tc;
         }
 
-    RESETABLE<double>      fee;
-    RESETABLE<double>      free;
-    RESETABLE<int>         traffType;
-    RESETABLE<double>      passiveCost;
-    RESETABLE<std::string> name;
+    RESETABLE<double>             fee;
+    RESETABLE<double>             free;
+    RESETABLE<TARIFF::TRAFF_TYPE> traffType;
+    RESETABLE<double>             passiveCost;
+    RESETABLE<std::string>        name;
+    RESETABLE<TARIFF::PERIOD>     period;
+    RESETABLE<TARIFF::CHANGE_POLICY> changePolicy;
+    RESETABLE<time_t>             changePolicyTimeout;
 };
 //-----------------------------------------------------------------------------
 struct TARIFF_DATA
@@ -206,22 +234,10 @@ struct TARIFF_DATA
           dirPrice(DIR_NUM)
         {}
 
-    TARIFF_DATA(const std::string & name)
+    explicit TARIFF_DATA(const std::string & name)
         : tariffConf(name),
           dirPrice(DIR_NUM)
         {}
-
-    TARIFF_DATA(const TARIFF_DATA & td)
-        : tariffConf(td.tariffConf),
-          dirPrice(td.dirPrice)
-        {}
-
-    TARIFF_DATA & operator=(const TARIFF_DATA & td)
-        {
-        tariffConf = td.tariffConf;
-        dirPrice = td.dirPrice;
-        return *this;
-        }
 };
 //-----------------------------------------------------------------------------
 struct TARIFF_DATA_RES
@@ -234,6 +250,14 @@ struct TARIFF_DATA_RES
           dirPrice(DIR_NUM)
         {}
 
+    TARIFF_DATA_RES & operator=(const TARIFF_DATA & td)
+        {
+        tariffConf = td.tariffConf;
+        for (size_t i = 0; i < DIR_NUM; ++i)
+            dirPrice[i] = td.dirPrice[i];
+        return *this;
+        }
+
     TARIFF_DATA GetData() const
         {
         TARIFF_DATA td;