Frameworks/libpurple.framework/Versions/0.6.2/Headers/value.h
author Zachary West <zacw@adium.im>
Fri Aug 21 13:25:11 2009 -0700 (2009-08-21)
changeset 2592 e8d15275025e
parent 1739 Frameworks/libpurple.framework/Versions/0.6.0/Headers/value.h@8b0daad9656c
permissions -rw-r--r--
im.pidgin.adium.1-4 at 267c6165e02e34318a1823960bd04c0639952f73
Evan@653
     1
/**
Evan@653
     2
 * @file value.h Value wrapper API
Evan@653
     3
 * @ingroup core
Evan@653
     4
 */
Evan@653
     5
Evan@653
     6
/* purple
Evan@653
     7
 *
Evan@653
     8
 * Purple is the legal property of its developers, whose names are too numerous
Evan@653
     9
 * to list here.  Please refer to the COPYRIGHT file distributed with this
Evan@653
    10
 * source distribution.
Evan@653
    11
 *
Evan@653
    12
 * This program is free software; you can redistribute it and/or modify
Evan@653
    13
 * it under the terms of the GNU General Public License as published by
Evan@653
    14
 * the Free Software Foundation; either version 2 of the License, or
Evan@653
    15
 * (at your option) any later version.
Evan@653
    16
 *
Evan@653
    17
 * This program is distributed in the hope that it will be useful,
Evan@653
    18
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Evan@653
    19
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Evan@653
    20
 * GNU General Public License for more details.
Evan@653
    21
 *
Evan@653
    22
 * You should have received a copy of the GNU General Public License
Evan@653
    23
 * along with this program; if not, write to the Free Software
Evan@653
    24
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
Evan@653
    25
 */
Evan@653
    26
#ifndef _PURPLE_VALUE_H_
Evan@653
    27
#define _PURPLE_VALUE_H_
Evan@653
    28
Evan@653
    29
#include <glib.h>
Evan@653
    30
Evan@653
    31
/**
Evan@653
    32
 * Specific value types.
Evan@653
    33
 */
Evan@653
    34
typedef enum
Evan@653
    35
{
Evan@653
    36
	PURPLE_TYPE_UNKNOWN = 0,  /**< Unknown type.                     */
Evan@653
    37
	PURPLE_TYPE_SUBTYPE,      /**< Subtype.                          */
Evan@653
    38
	PURPLE_TYPE_CHAR,         /**< Character.                        */
Evan@653
    39
	PURPLE_TYPE_UCHAR,        /**< Unsigned character.               */
Evan@653
    40
	PURPLE_TYPE_BOOLEAN,      /**< Boolean.                          */
Evan@653
    41
	PURPLE_TYPE_SHORT,        /**< Short integer.                    */
Evan@653
    42
	PURPLE_TYPE_USHORT,       /**< Unsigned short integer.           */
Evan@653
    43
	PURPLE_TYPE_INT,          /**< Integer.                          */
Evan@653
    44
	PURPLE_TYPE_UINT,         /**< Unsigned integer.                 */
Evan@653
    45
	PURPLE_TYPE_LONG,         /**< Long integer.                     */
Evan@653
    46
	PURPLE_TYPE_ULONG,        /**< Unsigned long integer.            */
Evan@653
    47
	PURPLE_TYPE_INT64,        /**< 64-bit integer.                   */
Evan@653
    48
	PURPLE_TYPE_UINT64,       /**< 64-bit unsigned integer.          */
Evan@653
    49
	PURPLE_TYPE_STRING,       /**< String.                           */
Evan@653
    50
	PURPLE_TYPE_OBJECT,       /**< Object pointer.                   */
Evan@653
    51
	PURPLE_TYPE_POINTER,      /**< Generic pointer.                  */
Evan@653
    52
	PURPLE_TYPE_ENUM,         /**< Enum.                             */
Evan@653
    53
	PURPLE_TYPE_BOXED         /**< Boxed pointer with specific type. */
Evan@653
    54
Evan@653
    55
} PurpleType;
Evan@653
    56
Evan@653
    57
Evan@653
    58
/**
Evan@653
    59
 * Purple-specific subtype values.
Evan@653
    60
 */
Evan@653
    61
typedef enum
Evan@653
    62
{
Evan@653
    63
	PURPLE_SUBTYPE_UNKNOWN = 0,
Evan@653
    64
	PURPLE_SUBTYPE_ACCOUNT,
Evan@653
    65
	PURPLE_SUBTYPE_BLIST,
Evan@653
    66
	PURPLE_SUBTYPE_BLIST_BUDDY,
Evan@653
    67
	PURPLE_SUBTYPE_BLIST_GROUP,
Evan@653
    68
	PURPLE_SUBTYPE_BLIST_CHAT,
Evan@653
    69
	PURPLE_SUBTYPE_BUDDY_ICON,
Evan@653
    70
	PURPLE_SUBTYPE_CONNECTION,
Evan@653
    71
	PURPLE_SUBTYPE_CONVERSATION,
Evan@653
    72
	PURPLE_SUBTYPE_PLUGIN,
Evan@653
    73
	PURPLE_SUBTYPE_BLIST_NODE,
Evan@653
    74
	PURPLE_SUBTYPE_CIPHER,
Evan@653
    75
	PURPLE_SUBTYPE_STATUS,
Evan@653
    76
	PURPLE_SUBTYPE_LOG,
Evan@653
    77
	PURPLE_SUBTYPE_XFER,
Evan@653
    78
	PURPLE_SUBTYPE_SAVEDSTATUS,
Evan@653
    79
	PURPLE_SUBTYPE_XMLNODE,
Evan@653
    80
	PURPLE_SUBTYPE_USERINFO,
Evan@653
    81
	PURPLE_SUBTYPE_STORED_IMAGE,
Evan@653
    82
	PURPLE_SUBTYPE_CERTIFICATEPOOL
Evan@653
    83
} PurpleSubType;
Evan@653
    84
Evan@653
    85
/**
Evan@653
    86
 * A wrapper for a type, subtype, and specific type of value.
Evan@653
    87
 */
Evan@653
    88
typedef struct
Evan@653
    89
{
Evan@653
    90
	PurpleType type;
Evan@653
    91
	unsigned short flags;
Evan@653
    92
Evan@653
    93
	union
Evan@653
    94
	{
Evan@653
    95
		char char_data;
Evan@653
    96
		unsigned char uchar_data;
Evan@653
    97
		gboolean boolean_data;
Evan@653
    98
		short short_data;
Evan@653
    99
		unsigned short ushort_data;
Evan@653
   100
		int int_data;
Evan@653
   101
		unsigned int uint_data;
Evan@653
   102
		long long_data;
Evan@653
   103
		unsigned long ulong_data;
Evan@653
   104
		gint64 int64_data;
Evan@653
   105
		guint64 uint64_data;
Evan@653
   106
		char *string_data;
Evan@653
   107
		void *object_data;
Evan@653
   108
		void *pointer_data;
Evan@653
   109
		int enum_data;
Evan@653
   110
		void *boxed_data;
Evan@653
   111
Evan@653
   112
	} data;
Evan@653
   113
Evan@653
   114
	union
Evan@653
   115
	{
Evan@653
   116
		unsigned int subtype;
Evan@653
   117
		char *specific_type;
Evan@653
   118
Evan@653
   119
	} u;
Evan@653
   120
Evan@653
   121
} PurpleValue;
Evan@653
   122
Evan@653
   123
#ifdef __cplusplus
Evan@653
   124
extern "C" {
Evan@653
   125
#endif
Evan@653
   126
Evan@653
   127
/**
Evan@653
   128
 * Creates a new PurpleValue.
Evan@653
   129
 *
Evan@653
   130
 * This function takes a type and, depending on that type, a sub-type
Evan@653
   131
 * or specific type.
Evan@653
   132
 *
Evan@653
   133
 * If @a type is PURPLE_TYPE_BOXED, the next parameter must be a
Evan@653
   134
 * string representing the specific type.
Evan@653
   135
 *
Evan@653
   136
 * If @a type is PURPLE_TYPE_SUBTYPE, the next parameter must be a
Evan@653
   137
 * integer or enum representing the sub-type.
Evan@653
   138
 *
Evan@653
   139
 * If the subtype or specific type is not set when required, random
Evan@653
   140
 * errors may occur. You have been warned.
Evan@653
   141
 *
Evan@653
   142
 * @param type The type.
Evan@653
   143
 *
Evan@653
   144
 * @return The new value.
Evan@653
   145
 */
Evan@653
   146
PurpleValue *purple_value_new(PurpleType type, ...);
Evan@653
   147
Evan@653
   148
/**
Evan@653
   149
 * Creates a new outgoing PurpleValue.  If a value is an "outgoing" value
Evan@653
   150
 * it means the value can be modified by plugins and scripts.
Evan@653
   151
 *
Evan@653
   152
 * This function takes a type and, depending on that type, a sub-type
Evan@653
   153
 * or specific type.
Evan@653
   154
 *
Evan@653
   155
 * If @a type is PURPLE_TYPE_BOXED, the next parameter must be a
Evan@653
   156
 * string representing the specific type.
Evan@653
   157
 *
Evan@653
   158
 * If @a type is PURPLE_TYPE_SUBTYPE, the next parameter must be a
Evan@653
   159
 * integer or enum representing the sub-type.
Evan@653
   160
 *
Evan@653
   161
 * If the sub-type or specific type is not set when required, random
Evan@653
   162
 * errors may occur. You have been warned.
Evan@653
   163
 *
Evan@653
   164
 * @param type The type.
Evan@653
   165
 *
Evan@653
   166
 * @return The new value.
Evan@653
   167
 */
Evan@653
   168
PurpleValue *purple_value_new_outgoing(PurpleType type, ...);
Evan@653
   169
Evan@653
   170
/**
Evan@653
   171
 * Destroys a PurpleValue.
Evan@653
   172
 *
Evan@653
   173
 * @param value The value to destroy.
Evan@653
   174
 */
Evan@653
   175
void purple_value_destroy(PurpleValue *value);
Evan@653
   176
Evan@653
   177
/**
Evan@653
   178
 * Duplicated a PurpleValue.
Evan@653
   179
 *
Evan@653
   180
 * @param value The value to duplicate.
Evan@653
   181
 *
Evan@653
   182
 * @return The duplicate value.
Evan@653
   183
 */
Evan@653
   184
PurpleValue *purple_value_dup(const PurpleValue *value);
Evan@653
   185
Evan@653
   186
/**
Evan@653
   187
 * Returns a value's type.
Evan@653
   188
 *
Evan@653
   189
 * @param value The value whose type you want.
Evan@653
   190
 *
Evan@653
   191
 * @return The value's type.
Evan@653
   192
 */
Evan@653
   193
PurpleType purple_value_get_type(const PurpleValue *value);
Evan@653
   194
Evan@653
   195
/**
Evan@653
   196
 * Returns a value's subtype.
Evan@653
   197
 *
Evan@653
   198
 * If the value's type is not PURPLE_TYPE_SUBTYPE, this will return 0.
Evan@653
   199
 * Subtypes should never have a subtype of 0.
Evan@653
   200
 *
Evan@653
   201
 * @param value The value whose subtype you want.
Evan@653
   202
 *
Evan@653
   203
 * @return The value's subtype, or 0 if @a type is not PURPLE_TYPE_SUBTYPE.
Evan@653
   204
 */
Evan@653
   205
unsigned int purple_value_get_subtype(const PurpleValue *value);
Evan@653
   206
Evan@653
   207
/**
Evan@653
   208
 * Returns a value's specific type.
Evan@653
   209
 *
Evan@653
   210
 * If the value's type is not PURPLE_TYPE_BOXED, this will return @c NULL.
Evan@653
   211
 *
Evan@653
   212
 * @param value The value whose specific type you want.
Evan@653
   213
 *
Evan@653
   214
 * @return The value's specific type, or @a NULL if not PURPLE_TYPE_BOXED.
Evan@653
   215
 */
Evan@653
   216
const char *purple_value_get_specific_type(const PurpleValue *value);
Evan@653
   217
Evan@653
   218
/**
Evan@653
   219
 * Returns whether or not the value is an outgoing value.
Evan@653
   220
 *
Evan@653
   221
 * @param value The value.
Evan@653
   222
 *
Evan@653
   223
 * @return TRUE if the value is outgoing, or FALSE otherwise.
Evan@653
   224
 */
Evan@653
   225
gboolean purple_value_is_outgoing(const PurpleValue *value);
Evan@653
   226
Evan@653
   227
/**
Evan@653
   228
 * Sets the value's character data.
Evan@653
   229
 *
Evan@653
   230
 * @param value The value.
Evan@653
   231
 * @param data The character data.
Evan@653
   232
 */
Evan@653
   233
void purple_value_set_char(PurpleValue *value, char data);
Evan@653
   234
Evan@653
   235
/**
Evan@653
   236
 * Sets the value's unsigned character data.
Evan@653
   237
 *
Evan@653
   238
 * @param value The value.
Evan@653
   239
 * @param data The unsigned character data.
Evan@653
   240
 */
Evan@653
   241
void purple_value_set_uchar(PurpleValue *value, unsigned char data);
Evan@653
   242
Evan@653
   243
/**
Evan@653
   244
 * Sets the value's boolean data.
Evan@653
   245
 *
Evan@653
   246
 * @param value The value.
Evan@653
   247
 * @param data The boolean data.
Evan@653
   248
 */
Evan@653
   249
void purple_value_set_boolean(PurpleValue *value, gboolean data);
Evan@653
   250
Evan@653
   251
/**
Evan@653
   252
 * Sets the value's short integer data.
Evan@653
   253
 *
Evan@653
   254
 * @param value The value.
Evan@653
   255
 * @param data The short integer data.
Evan@653
   256
 */
Evan@653
   257
void purple_value_set_short(PurpleValue *value, short data);
Evan@653
   258
Evan@653
   259
/**
Evan@653
   260
 * Sets the value's unsigned short integer data.
Evan@653
   261
 *
Evan@653
   262
 * @param value The value.
Evan@653
   263
 * @param data The unsigned short integer data.
Evan@653
   264
 */
Evan@653
   265
void purple_value_set_ushort(PurpleValue *value, unsigned short data);
Evan@653
   266
Evan@653
   267
/**
Evan@653
   268
 * Sets the value's integer data.
Evan@653
   269
 *
Evan@653
   270
 * @param value The value.
Evan@653
   271
 * @param data The integer data.
Evan@653
   272
 */
Evan@653
   273
void purple_value_set_int(PurpleValue *value, int data);
Evan@653
   274
Evan@653
   275
/**
Evan@653
   276
 * Sets the value's unsigned integer data.
Evan@653
   277
 *
Evan@653
   278
 * @param value The value.
Evan@653
   279
 * @param data The unsigned integer data.
Evan@653
   280
 */
Evan@653
   281
void purple_value_set_uint(PurpleValue *value, unsigned int data);
Evan@653
   282
Evan@653
   283
/**
Evan@653
   284
 * Sets the value's long integer data.
Evan@653
   285
 *
Evan@653
   286
 * @param value The value.
Evan@653
   287
 * @param data The long integer data.
Evan@653
   288
 */
Evan@653
   289
void purple_value_set_long(PurpleValue *value, long data);
Evan@653
   290
Evan@653
   291
/**
Evan@653
   292
 * Sets the value's unsigned long integer data.
Evan@653
   293
 *
Evan@653
   294
 * @param value The value.
Evan@653
   295
 * @param data The unsigned long integer data.
Evan@653
   296
 */
Evan@653
   297
void purple_value_set_ulong(PurpleValue *value, unsigned long data);
Evan@653
   298
Evan@653
   299
/**
Evan@653
   300
 * Sets the value's 64-bit integer data.
Evan@653
   301
 *
Evan@653
   302
 * @param value The value.
Evan@653
   303
 * @param data The 64-bit integer data.
Evan@653
   304
 */
Evan@653
   305
void purple_value_set_int64(PurpleValue *value, gint64 data);
Evan@653
   306
Evan@653
   307
/**
Evan@653
   308
 * Sets the value's unsigned 64-bit integer data.
Evan@653
   309
 *
Evan@653
   310
 * @param value The value.
Evan@653
   311
 * @param data The unsigned 64-bit integer data.
Evan@653
   312
 */
Evan@653
   313
void purple_value_set_uint64(PurpleValue *value, guint64 data);
Evan@653
   314
Evan@653
   315
/**
Evan@653
   316
 * Sets the value's string data.
Evan@653
   317
 *
Evan@653
   318
 * @param value The value.
Evan@653
   319
 * @param data The string data.
Evan@653
   320
 */
Evan@653
   321
void purple_value_set_string(PurpleValue *value, const char *data);
Evan@653
   322
Evan@653
   323
/**
Evan@653
   324
 * Sets the value's object data.
Evan@653
   325
 *
Evan@653
   326
 * @param value The value.
Evan@653
   327
 * @param data The object data.
Evan@653
   328
 */
Evan@653
   329
void purple_value_set_object(PurpleValue *value, void *data);
Evan@653
   330
Evan@653
   331
/**
Evan@653
   332
 * Sets the value's pointer data.
Evan@653
   333
 *
Evan@653
   334
 * @param value The value.
Evan@653
   335
 * @param data The pointer data.
Evan@653
   336
 */
Evan@653
   337
void purple_value_set_pointer(PurpleValue *value, void *data);
Evan@653
   338
Evan@653
   339
/**
Evan@653
   340
 * Sets the value's enum data.
Evan@653
   341
 *
Evan@653
   342
 * @param value The value.
Evan@653
   343
 * @param data The enum data.
Evan@653
   344
 */
Evan@653
   345
void purple_value_set_enum(PurpleValue *value, int data);
Evan@653
   346
Evan@653
   347
/**
Evan@653
   348
 * Sets the value's boxed data.
Evan@653
   349
 *
Evan@653
   350
 * @param value The value.
Evan@653
   351
 * @param data The boxed data.
Evan@653
   352
 */
Evan@653
   353
void purple_value_set_boxed(PurpleValue *value, void *data);
Evan@653
   354
Evan@653
   355
/**
Evan@653
   356
 * Returns the value's character data.
Evan@653
   357
 *
Evan@653
   358
 * @param value The value.
Evan@653
   359
 *
Evan@653
   360
 * @return The character data.
Evan@653
   361
 */
Evan@653
   362
char purple_value_get_char(const PurpleValue *value);
Evan@653
   363
Evan@653
   364
/**
Evan@653
   365
 * Returns the value's unsigned character data.
Evan@653
   366
 *
Evan@653
   367
 * @param value The value.
Evan@653
   368
 *
Evan@653
   369
 * @return The unsigned character data.
Evan@653
   370
 */
Evan@653
   371
unsigned char purple_value_get_uchar(const PurpleValue *value);
Evan@653
   372
Evan@653
   373
/**
Evan@653
   374
 * Returns the value's boolean data.
Evan@653
   375
 *
Evan@653
   376
 * @param value The value.
Evan@653
   377
 *
Evan@653
   378
 * @return The boolean data.
Evan@653
   379
 */
Evan@653
   380
gboolean purple_value_get_boolean(const PurpleValue *value);
Evan@653
   381
Evan@653
   382
/**
Evan@653
   383
 * Returns the value's short integer data.
Evan@653
   384
 *
Evan@653
   385
 * @param value The value.
Evan@653
   386
 *
Evan@653
   387
 * @return The short integer data.
Evan@653
   388
 */
Evan@653
   389
short purple_value_get_short(const PurpleValue *value);
Evan@653
   390
Evan@653
   391
/**
Evan@653
   392
 * Returns the value's unsigned short integer data.
Evan@653
   393
 *
Evan@653
   394
 * @param value The value.
Evan@653
   395
 *
Evan@653
   396
 * @return The unsigned short integer data.
Evan@653
   397
 */
Evan@653
   398
unsigned short purple_value_get_ushort(const PurpleValue *value);
Evan@653
   399
Evan@653
   400
/**
Evan@653
   401
 * Returns the value's integer data.
Evan@653
   402
 *
Evan@653
   403
 * @param value The value.
Evan@653
   404
 *
Evan@653
   405
 * @return The integer data.
Evan@653
   406
 */
Evan@653
   407
int purple_value_get_int(const PurpleValue *value);
Evan@653
   408
Evan@653
   409
/**
Evan@653
   410
 * Returns the value's unsigned integer data.
Evan@653
   411
 *
Evan@653
   412
 * @param value The value.
Evan@653
   413
 *
Evan@653
   414
 * @return The unsigned integer data.
Evan@653
   415
 */
Evan@653
   416
unsigned int purple_value_get_uint(const PurpleValue *value);
Evan@653
   417
Evan@653
   418
/**
Evan@653
   419
 * Returns the value's long integer data.
Evan@653
   420
 *
Evan@653
   421
 * @param value The value.
Evan@653
   422
 *
Evan@653
   423
 * @return The long integer data.
Evan@653
   424
 */
Evan@653
   425
long purple_value_get_long(const PurpleValue *value);
Evan@653
   426
Evan@653
   427
/**
Evan@653
   428
 * Returns the value's unsigned long integer data.
Evan@653
   429
 *
Evan@653
   430
 * @param value The value.
Evan@653
   431
 *
Evan@653
   432
 * @return The unsigned long integer data.
Evan@653
   433
 */
Evan@653
   434
unsigned long purple_value_get_ulong(const PurpleValue *value);
Evan@653
   435
Evan@653
   436
/**
Evan@653
   437
 * Returns the value's 64-bit integer data.
Evan@653
   438
 *
Evan@653
   439
 * @param value The value.
Evan@653
   440
 *
Evan@653
   441
 * @return The 64-bit integer data.
Evan@653
   442
 */
Evan@653
   443
gint64 purple_value_get_int64(const PurpleValue *value);
Evan@653
   444
Evan@653
   445
/**
Evan@653
   446
 * Returns the value's unsigned 64-bit integer data.
Evan@653
   447
 *
Evan@653
   448
 * @param value The value.
Evan@653
   449
 *
Evan@653
   450
 * @return The unsigned 64-bit integer data.
Evan@653
   451
 */
Evan@653
   452
guint64 purple_value_get_uint64(const PurpleValue *value);
Evan@653
   453
Evan@653
   454
/**
Evan@653
   455
 * Returns the value's string data.
Evan@653
   456
 *
Evan@653
   457
 * @param value The value.
Evan@653
   458
 *
Evan@653
   459
 * @return The string data.
Evan@653
   460
 */
Evan@653
   461
const char *purple_value_get_string(const PurpleValue *value);
Evan@653
   462
Evan@653
   463
/**
Evan@653
   464
 * Returns the value's object data.
Evan@653
   465
 *
Evan@653
   466
 * @param value The value.
Evan@653
   467
 *
Evan@653
   468
 * @return The object data.
Evan@653
   469
 */
Evan@653
   470
void *purple_value_get_object(const PurpleValue *value);
Evan@653
   471
Evan@653
   472
/**
Evan@653
   473
 * Returns the value's pointer data.
Evan@653
   474
 *
Evan@653
   475
 * @param value The value.
Evan@653
   476
 *
Evan@653
   477
 * @return The pointer data.
Evan@653
   478
 */
Evan@653
   479
void *purple_value_get_pointer(const PurpleValue *value);
Evan@653
   480
Evan@653
   481
/**
Evan@653
   482
 * Returns the value's enum data.
Evan@653
   483
 *
Evan@653
   484
 * @param value The value.
Evan@653
   485
 *
Evan@653
   486
 * @return The enum data.
Evan@653
   487
 */
Evan@653
   488
int purple_value_get_enum(const PurpleValue *value);
Evan@653
   489
Evan@653
   490
/**
Evan@653
   491
 * Returns the value's boxed data.
Evan@653
   492
 *
Evan@653
   493
 * @param value The value.
Evan@653
   494
 *
Evan@653
   495
 * @return The boxed data.
Evan@653
   496
 */
Evan@653
   497
void *purple_value_get_boxed(const PurpleValue *value);
Evan@653
   498
Evan@653
   499
#ifdef __cplusplus
Evan@653
   500
}
Evan@653
   501
#endif
Evan@653
   502
Evan@653
   503
#endif /* _PURPLE_VALUE_H_ */