2 * Copyright (C) 2000 Ximian Inc.
4 * Authors: Michael Zucchi <notzed@ximian.com>
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of version 2 of the GNU Lesser General Public
8 * License as published by the Free Software Foundation.
10 * This program 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 * General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this program; if not, write to the
17 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 * Boston, MA 02110-1301, USA.
21 #include "camel-address.h"
24 static void camel_address_class_init (CamelAddressClass *klass);
25 static void camel_address_init (CamelAddress *obj);
26 static void camel_address_finalize (CamelObject *obj);
28 static CamelObjectClass *camel_address_parent;
31 camel_address_class_init (CamelAddressClass *klass)
33 camel_address_parent = camel_type_get_global_classfuncs (camel_object_get_type ());
37 camel_address_init (CamelAddress *obj)
39 obj->addresses = g_ptr_array_new();
43 camel_address_finalize (CamelObject *obj)
45 camel_address_remove((CamelAddress *)obj, -1);
46 g_ptr_array_free(((CamelAddress *)obj)->addresses, TRUE);
50 camel_address_get_type (void)
52 static CamelType type = CAMEL_INVALID_TYPE;
54 if (type == CAMEL_INVALID_TYPE) {
55 type = camel_type_register (camel_object_get_type (), "CamelAddress",
56 sizeof (CamelAddress),
57 sizeof (CamelAddressClass),
58 (CamelObjectClassInitFunc) camel_address_class_init,
60 (CamelObjectInitFunc) camel_address_init,
61 (CamelObjectFinalizeFunc) camel_address_finalize);
70 * Create a new #CamelAddress object.
72 * Returns a new #CamelAddress object
75 camel_address_new (void)
77 CamelAddress *new = CAMEL_ADDRESS(camel_object_new(camel_address_get_type()));
83 * camel_address_new_clone:
84 * @addr: a #CamelAddress object
86 * Clone an existing address type.
88 * Returns the cloned address
91 camel_address_new_clone (const CamelAddress *addr)
93 CamelAddress *new = CAMEL_ADDRESS(camel_object_new(CAMEL_OBJECT_GET_TYPE(addr)));
95 camel_address_cat(new, addr);
101 * camel_address_length:
102 * @addr: a #CamelAddress object
104 * Get the number of addresses stored in the address @addr.
106 * Returns the number of addresses contained in @addr
109 camel_address_length (CamelAddress *addr)
111 return addr->addresses->len;
116 * camel_address_decode:
117 * @addr: a #CamelAddress object
118 * @raw: raw address description
120 * Construct a new address from a raw address field.
122 * Returns the number of addresses parsed or %-1 on fail
125 camel_address_decode (CamelAddress *addr, const char *raw)
127 g_return_val_if_fail(CAMEL_IS_ADDRESS(addr), -1);
129 return CAMEL_ADDRESS_CLASS (CAMEL_OBJECT_GET_CLASS (addr))->decode(addr, raw);
134 * camel_address_encode:
135 * @addr: a #CamelAddress object
137 * Encode an address in a format suitable for a raw header.
139 * Returns the encoded address
142 camel_address_encode (CamelAddress *addr)
144 g_return_val_if_fail(CAMEL_IS_ADDRESS(addr), NULL);
146 return CAMEL_ADDRESS_CLASS (CAMEL_OBJECT_GET_CLASS (addr))->encode(addr);
151 * camel_address_unformat:
152 * @addr: a #CamelAddress object
153 * @raw: raw address description
155 * Attempt to convert a previously formatted and/or edited
156 * address back into internal form.
158 * Returns the number of addresses parsed or %-1 on fail
161 camel_address_unformat(CamelAddress *addr, const char *raw)
163 g_return_val_if_fail(CAMEL_IS_ADDRESS(addr), -1);
165 return CAMEL_ADDRESS_CLASS (CAMEL_OBJECT_GET_CLASS (addr))->unformat(addr, raw);
170 * camel_address_format:
171 * @addr: a #CamelAddress object
173 * Format an address in a format suitable for display.
175 * Returns a newly allocated string containing the formatted addresses
178 camel_address_format (CamelAddress *addr)
180 g_return_val_if_fail(CAMEL_IS_ADDRESS(addr), NULL);
182 return CAMEL_ADDRESS_CLASS (CAMEL_OBJECT_GET_CLASS (addr))->format(addr);
188 * @dest: destination #CamelAddress object
189 * @source: source #CamelAddress object
191 * Concatenate one address onto another. The addresses must
192 * be of the same type.
194 * Returns the number of addresses concatenated
197 camel_address_cat (CamelAddress *dest, const CamelAddress *source)
199 g_return_val_if_fail(CAMEL_IS_ADDRESS(dest), -1);
200 g_return_val_if_fail(CAMEL_IS_ADDRESS(source), -1);
202 return CAMEL_ADDRESS_CLASS(CAMEL_OBJECT_GET_CLASS(dest))->cat(dest, source);
207 * camel_address_copy:
208 * @dest: destination #CamelAddress object
209 * @source: source #CamelAddress object
211 * Copy the contents of one address into another.
213 * Returns the number of addresses copied
216 camel_address_copy (CamelAddress *dest, const CamelAddress *source)
218 g_return_val_if_fail(CAMEL_IS_ADDRESS(dest), -1);
219 g_return_val_if_fail(CAMEL_IS_ADDRESS(source), -1);
221 camel_address_remove(dest, -1);
222 return camel_address_cat(dest, source);
227 * camel_address_remove:
228 * @addr: a #CamelAddress object
229 * @index: The address to remove, use %-1 to remove all address.
231 * Remove an address by index, or all addresses.
234 camel_address_remove (CamelAddress *addr, int index)
236 g_return_if_fail(CAMEL_IS_ADDRESS(addr));
239 for (index = addr->addresses->len; index>-1; index--)
240 CAMEL_ADDRESS_CLASS (CAMEL_OBJECT_GET_CLASS (addr))->remove(addr, index);
242 CAMEL_ADDRESS_CLASS (CAMEL_OBJECT_GET_CLASS (addr))->remove(addr, index);