1
#include "perl_xmmsclient.h"
3
#define xmmsc_result_propdict_t xmmsc_result_t
6
perl_xmmsclient_extract_keys_from_propdict (const void *key,
7
xmmsc_result_value_type_t type,
12
HV *keys = (HV *)user_data;
14
if (!hv_store (keys, key, strlen (key), &PL_sv_undef, 0)) {
15
croak ("Failed to extract propdict keys");
20
perl_xmmsclient_get_keys_if_needed (SV *sv)
26
xmmsc_result_propdict_t *res = NULL;
28
hash_elem = hv_fetch ((HV *)SvRV (sv), "keys", 4, 0);
30
if (hash_elem == NULL || *hash_elem == NULL) {
31
if (!(mg = perl_xmmsclient_get_magic_from_sv (sv, "Audio::XMMSClient::Result::PropDict::Tie"))) {
32
croak ("This is a bug!");
35
res = (xmmsc_result_propdict_t *)mg->mg_ptr;
38
ret = xmmsc_result_propdict_foreach (res, perl_xmmsclient_extract_keys_from_propdict, keys);
40
hash_elem = hv_store ((HV *)SvRV (sv), "keys", 4, newRV_noinc ((SV *)keys), 0);
43
keys = (HV *)SvRV (*hash_elem);
47
MODULE = Audio::XMMSClient::Result::PropDict::Tie PACKAGE = Audio::XMMSClient::Result::PropDict::Tie
58
keys = perl_xmmsclient_get_keys_if_needed (sv);
61
iter = hv_iternext (keys);
62
key = hv_iterkey (iter, &key_len);
64
RETVAL = newSVpv (key, key_len);
77
keys = perl_xmmsclient_get_keys_if_needed (sv);
79
iter = hv_iternext (keys);
82
RETVAL = &PL_sv_undef;
85
key = hv_iterkey (iter, &key_len);
86
RETVAL = newSVpv (key, key_len);
93
xmmsc_result_propdict_t *res
99
const char *string_val;
102
switch (xmmsc_result_get_dict_entry_type (res, key)) {
103
case XMMS_OBJECT_CMD_ARG_UINT32:
104
ret = xmmsc_result_get_dict_entry_uint (res, key, &uint32_val);
106
RETVAL = newSVuv (uint32_val);
108
case XMMS_OBJECT_CMD_ARG_INT32:
109
ret = xmmsc_result_get_dict_entry_int (res, key, &int32_val);
110
RETVAL = newSViv (int32_val);
112
case XMMS_OBJECT_CMD_ARG_STRING:
113
ret = xmmsc_result_get_dict_entry_string (res, key, &string_val);
114
RETVAL = newSVpv (string_val, 0);
124
he = hv_fetch ((HV *)SvRV (ST (0)), "field", 5, 0);
130
key = SvPV (*he, key_len);
131
he = hv_fetch ((HV *)SvRV (ST (0)), "constants", 9, 0);
134
croak ("constants not available");
137
perl_constants = (HV *)SvRV (*he);
139
key = SvPV (RETVAL, key_len);
140
he = hv_fetch (perl_constants, key, key_len, 0);
144
RETVAL = newSVsv (*he);
151
PERL_UNUSED_VAR (items);