30 if (ptr==NULL)
return buf;
32 int size = ntohl(*(
int*)(*ptr));
35 char* str = (
char*)malloc(size + 1);
37 memcpy(str, *ptr, size);
55 if (ptr==NULL)
return 0;
57 int value = ntohl(*(
int*)(*ptr));
71 if (ptr==NULL)
return 0ULL;
73 unsigned long long int value =
ntohull(*(
unsigned long long int*)(*ptr));
87 if (ptr==NULL)
return 0.0;
92 long long int tmp __attribute__((may_alias));
95 tmp =
ntohull(*(
long long int*)(*ptr));
97 double* valuep = (
double*)&tmp;
98 double value = *valuep;
99 if (isnan(value)) value = 0.0;
116 if (ptr==NULL)
return buf;
118 char* str = (
char*)malloc(16);
120 memcpy(str, *ptr, 16);
139 if (ptr==NULL)
return buf;
141 int size = ntohl(*(
int*)(*ptr));
146 memcpy(bin, *ptr, size);
167 if (ptr==NULL)
return 0;
181 else if (*buf==
LLSD_MAKER_BIN) buf += ntohl(*(
int*)(buf + 1)) + 5;
182 else if (*buf==
LLSD_MAKER_STR) buf += ntohl(*(
int*)(buf + 1)) + 5;
183 else if (*buf==
LLSD_MAKER_URI) buf += ntohl(*(
int*)(buf + 1)) + 5;
184 else if (*buf==
LLSD_MAKER_KEY) buf += ntohl(*(
int*)(buf + 1)) + 5;
188 if (ptr==buf)
return 0;
189 PRINT_MESG(
"WARNING: llsd_bin_get_length: unknown marker %c: %04x\n", *buf, *buf);
205 if (marker!=*buf)
PRINT_MESG(
"WARNING: llsd_bin_get_length: missmatch stack data of [ or {\n");
215 return (
int)(buf - ptr);
244 if (node->state<0)
return xml;
255 if (xml->next!=NULL) {
282 if (ptr==NULL)
return xml;
283 if (xml==NULL)
return NULL;
287 uByte* end = ptr + sz;
465 PRINT_MESG(
"WARNING: llsd_bin_main_parse: unknown marker: %c (%04x)\n", *ptr, *ptr);
500 int ofst = -1, size = -1;
506 if (ofst<0 || size<=0)
return NULL;
513 if (dec.
vldsz!=hdsz)
PRINT_MESG(
"Warning: llsd_bin_get_block_data:i mismarch of data size (%d != %d)\n", hdsz, dec.
vldsz);
534 if (buf==NULL)
return NULL;
538 if (joints_num!=NULL) *joints_num = 0;
545 while (pos < sz && vertex < vertex_num) {
546 uByte joint = *(buf + pos);
554 if ((
int)joint>jnum) jnum = (
int)joint;
557 if (invrtx%max_joints==0) {
565 if (pos!=sz || vertex!=vertex_num) {
566 PRINT_MESG(
"WARNING: llsd_bin_get_skin_weight: missmatch length %d != %d or %d != %d\n", pos, sz, vertex, vertex_num);
569 PRINT_MESG(
"llsd_bin_get_skin_weight: joints_num = %d\n", jnum);
572 int len =
sizeof(
uWord)*jnum*vertex_num;
575 PRINT_MESG(
"ERROR: llsd_bin_get_skin_weight: no more memory (%d)\n", len);
576 if (joints_num!=NULL) *joints_num = 0;
579 memset(weight, 0, len);
585 while (pos < sz && vertex < vertex_num) {
586 uByte joint = *(buf + pos);
596 int value = *(
uByte*)(buf + pos) + *(
uByte*)(buf + pos + 1)*256;
597 weight[vertex*jnum + (int)joint] = value;
599 if (invrtx%max_joints==0) {
606 if (pos!=sz || vertex!=vertex_num) {
607 PRINT_MESG(
"ERROR: llsd_bin_get_skin_weight: missmatch length %d != %d\n", vertex, vertex_num);
613 if (joints_num!=NULL) *joints_num = jnum;
628 if (xml==NULL || key==NULL)
return FALSE;
637 if (node!=NULL)
return TRUE;
646 if (xml==NULL || key==NULL || item==NULL)
return 0;
663 if (xml==NULL || key==NULL || item==NULL)
return 0.0;
681 if (xml==NULL || key==NULL || item==NULL)
return buf;
700 if (xml==NULL || key==NULL || item==NULL)
return buf;
Buffer encode_base64_Buffer(Buffer buf)
バイナリデータ buf.bufの buf.vldszバイトを Base64にエンコード する
Buffer make_Buffer(int sz)
Buffer型変数のバッファ部をつくり出す.
Buffer set_Buffer(void *dat, int len)
Buffer型変数のバッファ部を新しく作り, そのバッファに bufをコピーする.
void free_Buffer(Buffer *buf)
Buffer型変数のバッファ部を解放する
char pop_char_ringStack(Buffer *buf)
簡易 char型 ringStack POP
void push_char_ringStack(Buffer *buf, char cc)
簡易 char型 ringStack PUSH
Buffer init_Buffer()
初期化したBuffer型変数を返す.
Buffer decode_base64_Buffer(Buffer str)
strのバッファを Base64からデコードする
#define cat_s2Buffer(src, dst)
cat_b2Buffer()
#define make_Buffer_bystr(str)
set_Buffer()
unsigned short uWord
2Byte
#define JBXL_XML_NODE_CLOSED
XMLノードは閉じている
#define JBXL_XML_DEFAULT_STATE
XMLデータの初期状態
#define JBXL_XML_NOT_CLOSED
XMLデータが閉じていない
#define JBXL_XML_NODE_OPENED
XMLノードは開いている
#define JBXL_XML_MULTI_ROOT
XMLは複数のルート(TOP)を持っている.(パース済み)
#define JBXL_XML_PARSED
XMLパース済み
int vldsz
データの長さ.バイナリデータの場合も使用可能.文字列の場合は 0x00 を含まない.
unsigned char * buf
バッファの先頭へのポインタ.str[bufsz]は必ず 0x00となる.
tTree * add_tTree_node_bystr(tTree *pp, int id, int lv, const char *key, const char *val, void *ptr, int sz)
ノードを末っ子としてリストに追加.
char * get_xml_char_content_bystr(tXML *pp, const char *str)
get_xml_char_content(tXML* pp, tXML* pt) の _bystr バージョン.free() してはいけない.
int get_xml_int_content_bystr(tXML *pp, const char *str)
get_xml_int_content(tXML* pp, tXML* pt) の _bystr バージョン
tXML * get_xml_node_bystr(tXML *pp, const char *str)
get_xml_node(tXML* pp, tXML* pt) の _bystr バージョン
double get_xml_double_content_bystr(tXML *pp, const char *str)
get_xml_double_content(tXML* pp, tXML* pt) の _bystr バージョン.
#define XML_CONTENT_NODE
内容(コンテント)ノード
#define XML_NAME_NODE
ネームノード
#define del_all_xml(p)
XMLツリーの全ノードの削除.ポインタ ppのノードを含むXMLツリー全体を削除する.
#define new_xml_node()
new_tTree_node()
#define XML_ANCHOR_NODE
アンカーノード