// Generated by gmmproc 2.54.1 -- DO NOT MODIFY!


#include <glibmm.h>

#include <glibmm/datetime.h>
#include <glibmm/private/datetime_p.h>


/* Copyright (C) 2011 The glibmm Development Team
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <glibmm/utility.h>
#include <glibmm/timeval.h>
#include <glibmm/timezone.h>
#include <glibmm/wrap.h>

namespace Glib
{

} // namespace Glib

namespace
{
} // anonymous namespace


namespace Glib
{

Glib::DateTime wrap(GDateTime* object, bool take_copy /* = false */)
{
  return Glib::DateTime(object, take_copy);
}

} // namespace Glib


namespace Glib
{


DateTime::DateTime()
:
  gobject_ (nullptr) // Allows creation of invalid wrapper, e.g. for output arguments to methods.
{}

DateTime::DateTime(const DateTime& src)
:
  gobject_ ((src.gobject_) ? g_date_time_ref(src.gobject_) : nullptr)
{}

DateTime::DateTime(GDateTime* castitem, bool make_a_copy /* = false */)
{
  if(!make_a_copy)
  {
    // It was given to us by a function which has already made a copy for us to keep.
    gobject_ = castitem;
  }
  else
  {
    // We are probably getting it via direct access to a struct,
    // so we can not just take it - we have to take a copy of it.
    if(castitem)
      gobject_ = g_date_time_ref(castitem);
    else
      gobject_ = nullptr;
  }
}


DateTime& DateTime::operator=(const DateTime& src)
{
  const auto new_gobject = (src.gobject_) ? g_date_time_ref(src.gobject_) : nullptr;

  if(gobject_)
    g_date_time_unref(gobject_);

  gobject_ = new_gobject;

  return *this;
}

DateTime::DateTime(DateTime&& other) noexcept
:
  gobject_(other.gobject_)
{
  other.gobject_ = nullptr;
}

DateTime& DateTime::operator=(DateTime&& other) noexcept
{
  DateTime temp (other);
  swap(temp);
  return *this;
}

DateTime::~DateTime() noexcept
{
  if(gobject_)
    g_date_time_unref(gobject_);
}

void DateTime::swap(DateTime& other) noexcept
{
  std::swap(gobject_, other.gobject_);
}

GDateTime* DateTime::gobj_copy() const
{
  return g_date_time_ref(gobject_);
}


DateTime DateTime::create_now(const TimeZone& tz)
{
  return Glib::wrap(g_date_time_new_now(const_cast<GTimeZone*>(tz.gobj())));
}

DateTime DateTime::create_now_local()
{
  return Glib::wrap(g_date_time_new_now_local());
}

DateTime DateTime::create_now_utc()
{
  return Glib::wrap(g_date_time_new_now_utc());
}

DateTime DateTime::create_now_local(gint64 t)
{
  return Glib::wrap(g_date_time_new_from_unix_local(t));
}

DateTime DateTime::create_now_utc(gint64 t)
{
  return Glib::wrap(g_date_time_new_from_unix_utc(t));
}

DateTime DateTime::create_now_local(const TimeVal& tv)
{
  return Glib::wrap(g_date_time_new_from_timeval_local(&(tv)));
}

DateTime DateTime::create_now_utc(const TimeVal& tv)
{
  return Glib::wrap(g_date_time_new_from_timeval_utc(&(tv)));
}

DateTime DateTime::create(const TimeZone& tz, int year, int month, int day, int hour, int minute, double seconds)
{
  return Glib::wrap(g_date_time_new(const_cast<GTimeZone*>(tz.gobj()), year, month, day, hour, minute, seconds));
}

DateTime DateTime::create_local(int year, int month, int day, int hour, int minute, double seconds)
{
  return Glib::wrap(g_date_time_new_local(year, month, day, hour, minute, seconds));
}

DateTime DateTime::create_utc(int year, int month, int day, int hour, int minute, double seconds)
{
  return Glib::wrap(g_date_time_new_utc(year, month, day, hour, minute, seconds));
}

DateTime DateTime::add(TimeSpan timespan) const
{
  return Glib::wrap(g_date_time_add(const_cast<GDateTime*>(gobj()), timespan));
}

DateTime DateTime::add_years(int years) const
{
  return Glib::wrap(g_date_time_add_years(const_cast<GDateTime*>(gobj()), years));
}

DateTime DateTime::add_months(int months) const
{
  return Glib::wrap(g_date_time_add_months(const_cast<GDateTime*>(gobj()), months));
}

DateTime DateTime::add_weeks(int weeks) const
{
  return Glib::wrap(g_date_time_add_weeks(const_cast<GDateTime*>(gobj()), weeks));
}

DateTime DateTime::add_days(int days) const
{
  return Glib::wrap(g_date_time_add_days(const_cast<GDateTime*>(gobj()), days));
}

DateTime DateTime::add_hours(int hours) const
{
  return Glib::wrap(g_date_time_add_hours(const_cast<GDateTime*>(gobj()), hours));
}

DateTime DateTime::add_minutes(int minutes) const
{
  return Glib::wrap(g_date_time_add_minutes(const_cast<GDateTime*>(gobj()), minutes));
}

DateTime DateTime::add_seconds(double seconds) const
{
  return Glib::wrap(g_date_time_add_seconds(const_cast<GDateTime*>(gobj()), seconds));
}

DateTime DateTime::add_full(int years, int months, int days, int hours, int minutes, double seconds) const
{
  return Glib::wrap(g_date_time_add_full(const_cast<GDateTime*>(gobj()), years, months, days, hours, minutes, seconds));
}

TimeSpan DateTime::difference(const DateTime& other) const
{
  return g_date_time_difference(const_cast<GDateTime*>(gobj()), const_cast<GDateTime*>(other.gobj()));
}

int DateTime::compare(const DateTime& other) const
{
  return g_date_time_compare(const_cast<GDateTime*>(gobj()), static_cast<gconstpointer>(other.gobj()));
}

guint DateTime::hash() const
{
  return g_date_time_hash(const_cast<GDateTime*>(gobj()));
}

bool DateTime::equal(const DateTime& other) const
{
  return g_date_time_equal(const_cast<GDateTime*>(gobj()), static_cast<gconstpointer>(other.gobj()));
}

void DateTime::get_ymd(int& year, int& month, int& day) const
{
  g_date_time_get_ymd(const_cast<GDateTime*>(gobj()), &(year), &(month), &(day));
}

int DateTime::get_year() const
{
  return g_date_time_get_year(const_cast<GDateTime*>(gobj()));
}

int DateTime::get_month() const
{
  return g_date_time_get_month(const_cast<GDateTime*>(gobj()));
}

int DateTime::get_day_of_month() const
{
  return g_date_time_get_day_of_month(const_cast<GDateTime*>(gobj()));
}

int DateTime::get_week_numbering_year() const
{
  return g_date_time_get_week_numbering_year(const_cast<GDateTime*>(gobj()));
}

int DateTime::get_week_of_year() const
{
  return g_date_time_get_week_of_year(const_cast<GDateTime*>(gobj()));
}

int DateTime::get_day_of_week() const
{
  return g_date_time_get_day_of_week(const_cast<GDateTime*>(gobj()));
}

int DateTime::get_day_of_year() const
{
  return g_date_time_get_day_of_year(const_cast<GDateTime*>(gobj()));
}

int DateTime::get_hour() const
{
  return g_date_time_get_hour(const_cast<GDateTime*>(gobj()));
}

int DateTime::get_minute() const
{
  return g_date_time_get_minute(const_cast<GDateTime*>(gobj()));
}

int DateTime::get_second() const
{
  return g_date_time_get_second(const_cast<GDateTime*>(gobj()));
}

int DateTime::get_microsecond() const
{
  return g_date_time_get_microsecond(const_cast<GDateTime*>(gobj()));
}

double DateTime::get_seconds() const
{
  return g_date_time_get_seconds(const_cast<GDateTime*>(gobj()));
}

gint64 DateTime::to_unix() const
{
  return g_date_time_to_unix(const_cast<GDateTime*>(gobj()));
}

bool DateTime::to_timeval(TimeVal& tv) const
{
  return g_date_time_to_timeval(const_cast<GDateTime*>(gobj()), &(tv));
}

TimeSpan DateTime::get_utc_offset() const
{
  return g_date_time_get_utc_offset(const_cast<GDateTime*>(gobj()));
}

Glib::ustring DateTime::get_timezone_abbreviation() const
{
  return Glib::convert_const_gchar_ptr_to_ustring(g_date_time_get_timezone_abbreviation(const_cast<GDateTime*>(gobj())));
}

bool DateTime::is_daylight_savings() const
{
  return g_date_time_is_daylight_savings(const_cast<GDateTime*>(gobj()));
}

DateTime DateTime::to_timezone(const TimeZone& tz) const
{
  return Glib::wrap(g_date_time_to_timezone(const_cast<GDateTime*>(gobj()), const_cast<GTimeZone*>(tz.gobj())));
}

DateTime DateTime::to_local() const
{
  return Glib::wrap(g_date_time_to_local(const_cast<GDateTime*>(gobj())));
}

DateTime DateTime::to_utc() const
{
  return Glib::wrap(g_date_time_to_utc(const_cast<GDateTime*>(gobj())));
}

Glib::ustring DateTime::format(const Glib::ustring& format_str) const
{
  return Glib::convert_return_gchar_ptr_to_ustring(g_date_time_format(const_cast<GDateTime*>(gobj()), format_str.c_str()));
}


} // namespace Glib


