diff --git a/bindings/python/openshot.i b/bindings/python/openshot.i index 8284d1d0..55063596 100644 --- a/bindings/python/openshot.i +++ b/bindings/python/openshot.i @@ -127,6 +127,8 @@ /* Instantiate the required template specializations */ %template() std::map; +%template() std::pair; +%template() std::vector; /* Make openshot.Fraction more Pythonic */ %extend openshot::Fraction { diff --git a/src/Fraction.cpp b/src/Fraction.cpp index 869ef35f..86671e11 100644 --- a/src/Fraction.cpp +++ b/src/Fraction.cpp @@ -29,13 +29,23 @@ */ #include "Fraction.h" +#include using namespace openshot; -// Constructor -Fraction::Fraction() : - num(1), den(1) { -} +// Delegating constructors +Fraction::Fraction() : Fraction::Fraction(1, 1) {}; + +Fraction::Fraction(std::pair pair) + : Fraction::Fraction(pair.first, pair.second) {}; + +Fraction::Fraction(std::map mapping) + : Fraction::Fraction(mapping["num"], mapping["den"]) {}; + +Fraction::Fraction(std::vector vector) + : Fraction::Fraction(vector[0], vector[1]) {}; + +// Full constructor Fraction::Fraction(int num, int den) : num(num), den(den) { } diff --git a/src/Fraction.h b/src/Fraction.h index 88c16fbc..ffb0640b 100644 --- a/src/Fraction.h +++ b/src/Fraction.h @@ -31,7 +31,10 @@ #ifndef OPENSHOT_FRACTION_H #define OPENSHOT_FRACTION_H -#include +#include // for std::string +#include // for std::pair +#include // for std::map +#include // for std::vector namespace openshot { @@ -49,9 +52,19 @@ namespace openshot { /// Default Constructor Fraction(); + /// Constructor with numerator and denominator Fraction(int num, int den); + /// Constructor that accepts a (num, den) pair + Fraction(std::pair pair); + + /// Constructor that takes a vector of length 2 (containing {num, den}) + Fraction(std::vector vector); + + /// Constructor that takes a key-value mapping (keys: 'num'. 'den') + Fraction(std::map mapping); + /// Calculate the greatest common denominator int GreatestCommonDenominator();