int CParamArray::from_stream(int len, uint8_t *buf) { int n, i; int l1, l2, p; char *str_name; int pi; int *arr_len; CVariant *v; // name string str_name = new char[PARAM_ARRAY_ITEM_MAXLEN]; // clear old data clear(); // stream position index p = 0; // stream total length p += sizeof(int); // get item number memcpy(&n, buf+p, sizeof(int)); p += sizeof(int); // alloc length array arr_len = new int[n]; // get each item's length for(i=0; i<n; i++) { memcpy(&pi, buf+p, sizeof(int)); arr_len[i] = pi; p += sizeof(int); } // for each item for(i=0; i<n; i++) { // name length memcpy(&pi, buf+p, sizeof(int)); l1 = pi; p += sizeof(int); // name memcpy(str_name, buf+p, l1); p += l1; // value l2 = arr_len[i] - sizeof(int) - l1; v = new CVariant(); v->from_stream(l2, buf+p); p += l2; // add name/value to array na.push_back(str_name); va.push_back(v); } // parse items parse(); // free temp variables delete str_name; delete arr_len; return 0; }