Загрузка данных


#include <cstddef>  // for size_t
#include <cstring>
class RangeError {
};

size_t CountValues(const char * data, size_t size) {
    size_t ans = 0;
    size_t cur = 0;
    while (cur < size) {
        if (cur +  sizeof(size_t) > size) {
            throw RangeError();
        }
        size_t len;
        std::memcpy(&len, data + cur, sizeof(size_t));
        cur += len;
        ans++;
    }
    if (cur != size) {
        throw RangeError();
    }
    return ans;
}