diff options
Diffstat (limited to 'src/libicalss/icalspanlist_cxx.cpp')
-rw-r--r-- | src/libicalss/icalspanlist_cxx.cpp | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/src/libicalss/icalspanlist_cxx.cpp b/src/libicalss/icalspanlist_cxx.cpp new file mode 100644 index 0000000..38761af --- /dev/null +++ b/src/libicalss/icalspanlist_cxx.cpp @@ -0,0 +1,92 @@ +#include "icalspanlist_cxx.h" +#include <exception> + +/** @brief Construct an ICalSpanList from an icalset + @param set The icalset containing the VEVENTS + @param start Designated start of the spanlist + @param end Designated end of the spanlist +*/ + +ICalSpanList::ICalSpanList(icalset *set, icaltimetype start, icaltimetype end) throw(icalerrorenum) +{ + data = icalspanlist_new(set, start, end); + if (!data) throw icalerrno; +}; + + +/** @brief Constructor + @param comp A valid icalcomponent with a VFREEBUSY section +*/ + +ICalSpanList::ICalSpanList(icalcomponent *comp) throw(icalerrorenum) +{ + data = icalspanlist_from_vfreebusy(comp); + if (!data) throw icalerrno; +} + +/** @brief Constructor + @param comp A valid VComponent with a VFREEBUSY section +*/ +ICalSpanList::ICalSpanList(VComponent &comp) throw(icalerrorenum) +{ + data = icalspanlist_from_vfreebusy((icalcomponent*) comp); + if (!data) throw icalerrno; +} + +/** Destructor */ +ICalSpanList::~ICalSpanList() { + if (data) + icalspanlist_free(data); +} + + +/** + * @brief Returns a VFREEBUSY component for the object. + * + * @see icalspanlist_as_vfreebusy() + */ + +VComponent* +ICalSpanList::get_vfreebusy(const char *organizer, const char *attendee) throw(icalerrorenum) +{ + icalcomponent *comp; + VComponent *vcomp; + + comp = icalspanlist_as_vfreebusy(data, organizer, attendee); + if (comp == 0) throw icalerrno; + + vcomp = new VComponent(comp); + if (vcomp == 0) throw icalerrno; + + return vcomp; +} + + +/** + * @brief Returns a summary of events over delta_t + * + * @param delta_t Number of seconds to divide the spanlist time period + * into. + * + * This method calculates the total number of events in each time slot + * of delta_t seconds. + * + * @see icalspanlist_as_freebusy_matrix() + */ + +std::vector<int> ICalSpanList::as_vector(int delta_t) throw(icalerrorenum) +{ + int *matrix; + int i = 0; + std::vector<int> event_vec; + + matrix = icalspanlist_as_freebusy_matrix(data, delta_t); + + if (!matrix) throw ICAL_USAGE_ERROR; + + while (matrix[i] != -1) { + event_vec.push_back(matrix[i]); // Add item at end of vector + } + + return(event_vec); +} |