static void test_rmessage(struct pbc_env *env, struct pbc_slice *slice) { struct pbc_rmessage * m = pbc_rmessage_new(env, "real", slice); printf("f = %f\n", pbc_rmessage_real(m , "f" , 0 )); printf("d = %f\n", pbc_rmessage_real(m , "d" , 0 )); printf("e = %ld\n", pbc_rmessage_integer(m , "e" , 0,NULL )); pbc_rmessage_delete(m); }
static void dump_value(struct pbc_rmessage *m, const char *key, int type, int idx, int level) { int i; for (i=0;i<level;i++) { printf(" "); } printf("%s",key); if (type & PBC_REPEATED) { printf("[%d]",idx); type -= PBC_REPEATED; } printf(" : "); uint32_t low; uint32_t hi; double real; const char *str; switch(type) { case PBC_INT: low = pbc_rmessage_integer(m, key, i, NULL); printf("%d", (int) low); break; case PBC_REAL: real = pbc_rmessage_real(m, key , i); printf("%lf", real); break; case PBC_BOOL: low = pbc_rmessage_integer(m, key, i, NULL); printf("%s", low ? "true" : "false"); break; case PBC_ENUM: str = pbc_rmessage_string(m, key , i , NULL); printf("[%s]", str); break; case PBC_STRING: str = pbc_rmessage_string(m, key , i , NULL); printf("'%s'", str); break; case PBC_MESSAGE: printf("\n"); dump_message(pbc_rmessage_message(m, key, i),level+1); return; case PBC_FIXED64: low = pbc_rmessage_integer(m, key, i, &hi); printf("0x%8x%8x",hi,low); break; case PBC_FIXED32: low = pbc_rmessage_integer(m, key, i, NULL); printf("0x%x",low); break; default: printf("unkown"); break; } printf("\n"); }
static int _rmessage_real(lua_State *L) { struct pbc_rmessage * m = (struct pbc_rmessage *)checkuserdata(L,1); const char * key = luaL_checkstring(L,2); int index = luaL_checkinteger(L,3); double v = pbc_rmessage_real(m, key, index); lua_pushnumber(L,v); return 1; }
static void test_rmessage(struct pbc_env *env, struct pbc_slice *slice) { struct pbc_rmessage * m = pbc_rmessage_new(env, "test", slice); if (m==NULL) { printf("Error : %s",pbc_error(env)); return; } int phone_n = pbc_rmessage_size(m, "el"); int i; for (i=0;i<phone_n;i++) { struct pbc_rmessage * p = pbc_rmessage_message(m , "el", i); printf("\tint16_min[%d] = %d\n",i,pbc_rmessage_integer(p , "int16_min", i ,NULL)); printf("\tdouble_max[%d] = %f\n",i,pbc_rmessage_real(p, "double_max", i)); printf("\tstring[%d] = %s\n",i,pbc_rmessage_string(p, "str", i, NULL)); } pbc_rmessage_delete(m); }