/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
 * Authors: 
 *   Christopher James Lahey <clahey@umich.edu>
 *
 * Copyright (C) 2000 Ximian, Inc.
 * Copyright (C) 1999 The Free Software Foundation
 */

#include <config.h>

#include "e-iterator.h"
#include "e-util-marshal.h"

static void e_iterator_init (EIterator *card);
static void e_iterator_class_init (EIteratorClass *klass);

#define PARENT_TYPE G_TYPE_OBJECT

static GObjectClass *parent_class;

enum {
	INVALIDATE,
	LAST_SIGNAL
};

static guint e_iterator_signals [LAST_SIGNAL] = { 0, };

/**
 * e_iterator_get_type:
 * @void: 
 * 
 * Registers the &EIterator class if necessary, and returns the type ID
 * associated to it.
 * 
 * Return value: The type ID of the &EIterator class.
 **/
GType
e_iterator_get_type (void)
{
	static GType type = 0;

	if (! type) {
		GTypeInfo info = {
			sizeof (EIteratorClass),
			NULL, /* base_class_init */
			NULL, /* base_class_finalize */
			(GClassInitFunc)  e_iterator_class_init,
			NULL, /* class_finalize */
			NULL, /* class_data */
			sizeof (EIterator),
			0,    /* n_preallocs */
			(GInstanceInitFunc) e_iterator_init
		};

		type = g_type_register_static (PARENT_TYPE, "EIterator", &info, 0);
	}

	return type;
}

static void
e_iterator_class_init (EIteratorClass *klass)
{
	GObjectClass *object_class;

	object_class = G_OBJECT_CLASS(klass);

	parent_class = g_type_class_ref (PARENT_TYPE);

	e_iterator_signals [INVALIDATE] =
		g_signal_new ("invalidate",
			      G_OBJECT_CLASS_TYPE (object_class),
			      G_SIGNAL_RUN_LAST,
			      G_STRUCT_OFFSET (EIteratorClass, invalidate),
			      NULL, NULL,
			      e_util_marshal_NONE__NONE, /* XXX need a new marshaller here */
			      G_TYPE_NONE, 0);

	klass->invalidate = NULL;
	klass->get        = NULL;
	klass->reset      = NULL;
	klass->last       = NULL;
	klass->next       = NULL;
	klass->prev       = NULL;
	klass->delete     = NULL;
	klass->insert     = NULL;
	klass->set        = NULL;
	klass->is_valid   = NULL;
}

/**
 * e_iterator_init:
 */
static void
e_iterator_init (EIterator *card)
{
}

/*
 * Virtual functions: 
 */
const void *
e_iterator_get      (EIterator *iterator)
{
	if (E_ITERATOR_GET_CLASS(iterator)->get)
		return E_ITERATOR_GET_CLASS(iterator)->get(iterator);
	else
		return NULL;
}

void
e_iterator_reset    (EIterator *iterator)
{
	if (E_ITERATOR_GET_CLASS(iterator)->reset)
		E_ITERATOR_GET_CLASS(iterator)->reset(iterator);
}

void
e_iterator_last     (EIterator *iterator)
{
	if (E_ITERATOR_GET_CLASS(iterator)->last)
		E_ITERATOR_GET_CLASS(iterator)->last(iterator);
}

gboolean
e_iterator_next     (EIterator *iterator)
{
	if (E_ITERATOR_GET_CLASS(iterator)->next)
		return E_ITERATOR_GET_CLASS(iterator)->next(iterator);
	else
		return FALSE;
}

gboolean
e_iterator_prev     (EIterator *iterator)
{
	if (E_ITERATOR_GET_CLASS(iterator)->prev)
		return E_ITERATOR_GET_CLASS(iterator)->prev(iterator);
	else
		return FALSE;
}

void
e_iterator_delete   (EIterator *iterator)
{
	if (E_ITERATOR_GET_CLASS(iterator)->delete)
		E_ITERATOR_GET_CLASS(iterator)->delete(iterator);
}

void           e_iterator_insert     (EIterator  *iterator,
				      const void *object,
				      gboolean    before)
{
	if (E_ITERATOR_GET_CLASS(iterator)->insert)
		E_ITERATOR_GET_CLASS(iterator)->insert(iterator, object, before);
}

void
e_iterator_set      (EIterator *iterator,
			  const void    *object)
{
	if (E_ITERATOR_GET_CLASS(iterator)->set)
		E_ITERATOR_GET_CLASS(iterator)->set(iterator, object);
}

gboolean
e_iterator_is_valid (EIterator *iterator)
{
	if (E_ITERATOR_GET_CLASS(iterator)->is_valid)
		return E_ITERATOR_GET_CLASS(iterator)->is_valid(iterator);
	else
		return FALSE;
}

void
e_iterator_invalidate (EIterator *iterator)
{
	g_return_if_fail (iterator != NULL);
	g_return_if_fail (E_IS_ITERATOR (iterator));

	g_signal_emit (iterator, e_iterator_signals [INVALIDATE], 0);
}
d_yarn/devel/electron6/files/node-fetch-2.6.1</option>
<option value='dependabot/npm_and_yarn/devel/electron6/files/serve-10.1.2'>dependabot/npm_and_yarn/devel/electron6/files/serve-10.1.2</option>
<option value='gnome-3.22'>gnome-3.22</option>
<option value='gnome-3.24'>gnome-3.24</option>
<option value='gnome-3.26'>gnome-3.26</option>
<option value='gnome-3.28'>gnome-3.28</option>
<option value='gnome-3.32'>gnome-3.32</option>
<option value='gnome-3.36'>gnome-3.36</option>
<option value='gstreamer'>gstreamer</option>
<option value='gstreamer-1.16'>gstreamer-1.16</option>
<option value='gstreamer0.10-removal'>gstreamer0.10-removal</option>
<option value='main'>main</option>
<option value='master'>master</option>
<option value='mate-1.16'>mate-1.16</option>
<option value='mate-1.18' selected='selected'>mate-1.18</option>
<option value='mate-1.20'>mate-1.20</option>
<option value='mate-1.22'>mate-1.22</option>
</select> <input type='submit' value='switch'/></form></td></tr>
<tr><td class='sub'>FreeBSD GNOME current development ports (https://github.com/freebsd/freebsd-ports-gnome)</td><td class='sub right'></td></tr></table>
<table class='tabs'><tr><td>
<a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/about/?h=mate-1.18'>about</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/?h=mate-1.18'>summary</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/refs/?h=mate-1.18&amp;id=b24952bc1b5b86a8faa4e3ff77b0f8a0a67f8720'>refs</a><a class='active' href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/log/math/p5-Math-GSL?h=mate-1.18'>log</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/tree/math/p5-Math-GSL?h=mate-1.18&amp;id=b24952bc1b5b86a8faa4e3ff77b0f8a0a67f8720'>tree</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/commit/math/p5-Math-GSL?h=mate-1.18&amp;id=b24952bc1b5b86a8faa4e3ff77b0f8a0a67f8720'>commit</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/diff/math/p5-Math-GSL?h=mate-1.18&amp;id=b24952bc1b5b86a8faa4e3ff77b0f8a0a67f8720'>diff</a><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/stats/math/p5-Math-GSL?h=mate-1.18'>stats</a></td><td class='form'><form class='right' method='get' action='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/log/math/p5-Math-GSL'>
<input type='hidden' name='h' value='mate-1.18'/><input type='hidden' name='id' value='b24952bc1b5b86a8faa4e3ff77b0f8a0a67f8720'/><select name='qt'>
<option value='grep'>log msg</option>
<option value='author'>author</option>
<option value='committer'>committer</option>
<option value='range'>range</option>
</select>
<input class='txt' type='search' size='10' name='q' value=''/>
<input type='submit' value='search'/>
</form>
</td></tr></table>
<div class='path'>path: <a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/log/?h=mate-1.18&amp;id=b24952bc1b5b86a8faa4e3ff77b0f8a0a67f8720'>root</a>/<a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/log/math?h=mate-1.18&amp;id=b24952bc1b5b86a8faa4e3ff77b0f8a0a67f8720'>math</a>/<a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/log/math/p5-Math-GSL?h=mate-1.18&amp;id=b24952bc1b5b86a8faa4e3ff77b0f8a0a67f8720'>p5-Math-GSL</a></div><div class='content'><table class='list nowrap'><tr class='nohover'><th></th><th class='left'>Commit message (<a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/log/math/p5-Math-GSL?h=mate-1.18&amp;id=b24952bc1b5b86a8faa4e3ff77b0f8a0a67f8720&amp;showmsg=1'>Expand</a>)</th><th class='left'>Author</th><th class='left'>Age</th><th class='left'>Files</th><th class='left'>Lines</th></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/commit/math/p5-Math-GSL?h=mate-1.18&amp;id=feafe637a586a81fbc65a23660b6e82c87d90f07'>Replace ugly "@unexec rmdir %D... 2&gt;/dev/null || true" with @dirrmtry</a></td><td>edwin</td><td><span title='2006-01-22 10:30:01 +0800'>2006-01-22</span></td><td>1</td><td><span class='deletions'>-2</span>/<span class='insertions'>+2</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/commit/math/p5-Math-GSL?h=mate-1.18&amp;id=f078244c2e0713b6ddf752c020a920c3a3bb1eca'>- Add SHA256</a></td><td>pav</td><td><span title='2005-11-25 23:48:16 +0800'>2005-11-25</span></td><td>1</td><td><span class='deletions'>-0</span>/<span class='insertions'>+1</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/commit/math/p5-Math-GSL?h=mate-1.18&amp;id=445caf133171b3014582a069956b5c285d6754e2'>Let the IGNORE message make a bit more sense and change it from:</a></td><td>erwin</td><td><span title='2005-11-01 02:24:21 +0800'>2005-11-01</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+1</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/commit/math/p5-Math-GSL?h=mate-1.18&amp;id=78ae72b568ee1077428eabb4313ee80d323732e6'>Bump PORTREVISION after the libgsl update.</a></td><td>jylefort</td><td><span title='2005-05-03 04:46:12 +0800'>2005-05-03</span></td><td>1</td><td><span class='deletions'>-0</span>/<span class='insertions'>+1</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/cgit.cgi/freebsd-ports-gnome/commit/math/p5-Math-GSL?h=mate-1.18&amp;id=3b50f68cdd2ccdc97e17d467006832515efd6690'>Chase the libgsl update.</a></td><td>jylefort</td><td><span title='2005-05-02 21:00:18 +0800'>2005-05-02</span>