2 * libopensync - A synchronization framework
3 * Copyright (C) 2004-2006 Armin Bauer <armin.bauer@desscon.com>
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.
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
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
);
36 mapping
->ref_count
= 1;
38 osync_trace(TRACE_EXIT
, "%s: %p", __func__
, mapping
);
42 osync_trace(TRACE_EXIT_ERROR
, "%s: %s", __func__
, osync_error_print(error
));
46 OSyncMapping
*osync_mapping_ref(OSyncMapping
*mapping
)
48 osync_assert(mapping
);
50 g_atomic_int_inc(&(mapping
->ref_count
));
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
= osync_list_remove(mapping
->entries
, entry
);
71 long long int osync_mapping_get_id(OSyncMapping
*mapping
)
73 osync_assert(mapping
);
77 void osync_mapping_set_id(OSyncMapping
*mapping
, long long int id
)
79 osync_assert(mapping
);
83 void osync_mapping_add_entry(OSyncMapping
*mapping
, OSyncMappingEntry
*entry
)
85 osync_assert(mapping
);
88 mapping
->entries
= osync_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
);
97 mapping
->entries
= osync_list_remove(mapping
->entries
, entry
);
98 osync_mapping_entry_unref(entry
);
101 /*OSyncMappingEntry *osync_mapping_find_entry(OSyncMapping *mapping, OSyncChange *change)
104 for (e = mapping->entries; e; e = e->next) {
105 OSyncMappingEntry *entry = e->data;
106 if (change && osync_mapping_entry_get_change(entry) == change)
112 OSyncMappingEntry
*osync_mapping_find_entry_by_member_id(OSyncMapping
*mapping
, long long int memberid
)
115 for (e
= mapping
->entries
; e
; e
= e
->next
) {
116 OSyncMappingEntry
*entry
= e
->data
;
117 if (osync_mapping_entry_get_member_id(entry
) == memberid
)
123 int osync_mapping_num_entries(OSyncMapping
*mapping
)
125 osync_assert(mapping
);
126 return osync_list_length(mapping
->entries
);
129 OSyncMappingEntry
*osync_mapping_nth_entry(OSyncMapping
*mapping
, int nth
)
131 osync_assert(mapping
);
132 return osync_list_nth_data(mapping
->entries
, nth
);