Changed indentation from tabs to whitespace
[opensync.git] / opensync / mapping / opensync_mapping.c
bloba893d032a9fde9dde251dbf04d28d2df22374835
1 /*
2 * libopensync - A synchronization framework
3 * Copyright (C) 2004-2006 Armin Bauer <armin.bauer@desscon.com>
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 #include "opensync.h"
22 #include "opensync_internals.h"
24 #include "opensync-mapping.h"
26 #include "opensync_mapping_internals.h"
28 OSyncMapping *osync_mapping_new(OSyncError **error)
30 OSyncMapping *mapping = NULL;
31 osync_trace(TRACE_ENTRY, "%s(%p)", __func__, error);
33 mapping = osync_try_malloc0(sizeof(OSyncMapping), error);
34 if (!mapping)
35 goto error;
36 mapping->ref_count = 1;
38 osync_trace(TRACE_EXIT, "%s: %p", __func__, mapping);
39 return mapping;
41 error:
42 osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error));
43 return NULL;
46 OSyncMapping *osync_mapping_ref(OSyncMapping *mapping)
48 osync_assert(mapping);
50 g_atomic_int_inc(&(mapping->ref_count));
52 return mapping;
55 void osync_mapping_unref(OSyncMapping *mapping)
57 osync_assert(mapping);
59 if (g_atomic_int_dec_and_test(&(mapping->ref_count))) {
61 while (mapping->entries) {
62 OSyncMappingEntry *entry = mapping->entries->data;
63 osync_mapping_entry_unref(entry);
64 mapping->entries = g_list_remove(mapping->entries, entry);
67 g_free(mapping);
71 long long int osync_mapping_get_id(OSyncMapping *mapping)
73 osync_assert(mapping);
74 return mapping->id;
77 void osync_mapping_set_id(OSyncMapping *mapping, long long int id)
79 osync_assert(mapping);
80 mapping->id = id;
83 void osync_mapping_add_entry(OSyncMapping *mapping, OSyncMappingEntry *entry)
85 osync_assert(mapping);
86 osync_assert(entry);
88 mapping->entries = g_list_append(mapping->entries, entry);
89 osync_mapping_entry_ref(entry);
92 void osync_mapping_remove_entry(OSyncMapping *mapping, OSyncMappingEntry *entry)
94 osync_assert(mapping);
95 osync_assert(entry);
97 mapping->entries = g_list_remove(mapping->entries, entry);
98 osync_mapping_entry_unref(entry);
101 /*OSyncMappingEntry *osync_mapping_find_entry(OSyncMapping *mapping, OSyncChange *change)
103 GList *e;
104 for (e = mapping->entries; e; e = e->next) {
105 OSyncMappingEntry *entry = e->data;
106 if (change && osync_mapping_entry_get_change(entry) == change)
107 return entry;
109 return NULL;
112 OSyncMappingEntry *osync_mapping_find_entry_by_member_id(OSyncMapping *mapping, long long int memberid)
114 GList *e;
115 for (e = mapping->entries; e; e = e->next) {
116 OSyncMappingEntry *entry = e->data;
117 if (osync_mapping_entry_get_member_id(entry) == memberid)
118 return entry;
120 return NULL;
123 int osync_mapping_num_entries(OSyncMapping *mapping)
125 osync_assert(mapping);
126 return g_list_length(mapping->entries);
129 OSyncMappingEntry *osync_mapping_nth_entry(OSyncMapping *mapping, int nth)
131 osync_assert(mapping);
132 return g_list_nth_data(mapping->entries, nth);