Zstd: рдореИрдВ рдПрдХ рдзрд╛рд░рд╛ рдХреЗ рдЕрдВрддрд┐рдо рдлреНрд░реЗрдо рдкрд░ рдПрдХ рдлреНрд░реЗрдо рдЙрдкрд╕рдВрд╣рд╛рд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдЪрд╛рд╣рддрд╛ рд╣реВрдБред

рдХреЛ рдирд┐рд░реНрдорд┐рдд 25 рдЕрдкреНрд░реИрд▓ 2020  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: facebook/zstd

рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдлреАрдЪрд░ рдЕрдиреБрд░реЛрдз рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ?
рдореИрдВ рдПрдХ рдлрд╛рдЗрд▓ рдореЗрдВ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╣рд░ рдмрд╛рд░ рдЬрдм рдореИрдВ рдХреБрдЫ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ рддреЛ рдлреНрд▓рд╢ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рд╣рд░ рд░рд╛рдЗрдЯ рдкрд░ рдПрдХ рдлреНрд░реЗрдо рдПрдкрд┐рд▓реЙрдЧ рдирд╣реАрдВ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореЗрд░реЗ рдХрдореНрдкреНрд░реЗрд╢рди рдПрдбрд╡рд╛рдВрдЯреЗрдЬ рдХреЛ рдорд╛рд░ рджреЗрдЧрд╛ред рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдЕрдВрддрд┐рдо рдлреНрд░реЗрдо рдкрд░ рдХреЛрдИ рдЙрдкрд╕рдВрд╣рд╛рд░ рдХреЗ рд╕рд╛рде рдареАрдХ рд╕реЗ рдлреНрд▓рд╢ рдХреА рдЧрдИ рдзрд╛рд░рд╛ рдХреЛ рдбреАрдХреЛрдб рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдбрд┐рдХреЛрдбрд░ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЖрдк рдЕрдм рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдк рдЬреЛ рд╕рдорд╛рдзрд╛рди рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ
рдореИрдВ рдПрдХ рдзрд╛рд░рд╛ рдкрд░ рдПрдХ рд╡реИрдз рдлреНрд░реЗрдо рдЙрдкрд╕рдВрд╣рд╛рд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рд░рд▓ рддрд░реАрдХрд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдлреНрд▓рд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдареАрдХ рд╕реЗ рдмрдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддрд╛рдХрд┐ рдореИрдВ рдкреВрд░реА рдЪреАрдЬ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдзрд╛рд░рд╛ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХреВрдВ (рдпрд╛ рдореЗрд░реЗ рдЖрд╡реЗрджрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ рдПрдХ рдирдпрд╛ рдЯреБрдХрдбрд╝рд╛)ред

рдЙрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ рдЬрд┐рди рдкрд░ рдЖрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ
рдореИрдВрдиреЗ рдЗрд╕ рд░рд╛рдЬреНрдп рдореЗрдВ рдПрдХ рдзрд╛рд░рд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╕рдордп рдмрд╕ рд░реАрдХрдВрдкреНрд░реЗрд╕рд┐рдВрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рджреБрд░реНрд▓рдн рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдмрд┐рдирд╛ рд░реАрдХрдВрдкреНрд░реЗрд╕ рдХрд┐рдП рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@xorgy рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ), рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдлреНрд░реЗрдо рдЪреЗрдХрд╕рдо рд╕рдХреНрд╖рдо рдХрд┐рдП рдмрд┐рдирд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреВрд░реА рд╕реНрдЯреНрд░реАрдо рдХреЛ рдбрд┐рдХрдореНрдкреНрд░реЗрд╕ рдХрд┐рдП рдмрд┐рдирд╛ рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдлреНрд░реЗрдо рдкреНрд░рд╛рд░реВрдк рджреЗрдЦреЗрдВ https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#blocksред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлреНрд░реЗрдо рдкреНрд░рд╛рд░реВрдк рдирд┐рд╢реНрдЪрд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЕрд╕рдВрдЧрддрд┐ рдХреЛ рдЬреЛрдЦрд┐рдо рдореЗрдВ рдбрд╛рд▓реЗ рдмрд┐рдирд╛ рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

// Writes the last block, returns -1 if the output buffer is too small
int ZSTD_emitEmptyLastBlock(void* dst, size_t size) {
    // Last block bit set, uncompressed block, size 0.
    char const kLastEmptyBlock[3] = {0x01, 0x00, 0x00};
    if (size < sizeof(kLastEmptyBlock)) return -1;
    memcpy(dst, kLastEmptyBlock, sizeof(kLastEmptyBlock));
    return 3;
}

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@xorgy рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ), рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдлреНрд░реЗрдо рдЪреЗрдХрд╕рдо рд╕рдХреНрд╖рдо рдХрд┐рдП рдмрд┐рдирд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреВрд░реА рд╕реНрдЯреНрд░реАрдо рдХреЛ рдбрд┐рдХрдореНрдкреНрд░реЗрд╕ рдХрд┐рдП рдмрд┐рдирд╛ рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдлреНрд░реЗрдо рдкреНрд░рд╛рд░реВрдк рджреЗрдЦреЗрдВ https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#blocksред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлреНрд░реЗрдо рдкреНрд░рд╛рд░реВрдк рдирд┐рд╢реНрдЪрд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЕрд╕рдВрдЧрддрд┐ рдХреЛ рдЬреЛрдЦрд┐рдо рдореЗрдВ рдбрд╛рд▓реЗ рдмрд┐рдирд╛ рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

// Writes the last block, returns -1 if the output buffer is too small
int ZSTD_emitEmptyLastBlock(void* dst, size_t size) {
    // Last block bit set, uncompressed block, size 0.
    char const kLastEmptyBlock[3] = {0x01, 0x00, 0x00};
    if (size < sizeof(kLastEmptyBlock)) return -1;
    memcpy(dst, kLastEmptyBlock, sizeof(kLastEmptyBlock));
    return 3;
}

рдореИрдВ рдРрд╕рд╛ рдХреБрдЫ рдПрдХ рд╢реЙрдЯ рджреВрдВрдЧрд╛, рдзрдиреНрдпрд╡рд╛рджред рдЗрд╕реЗ рдЫреЛрдбрд╝рдХрд░, рдореИрдВ рд╢рд╛рдпрдж рд╡рд╣реА рд▓рд┐рдЦ рд╕рдХрддрд╛ рдерд╛ рдЬреЛ рдореИрдВ рдмрд╛рд╣рд░реА рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ред

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдФрд░ рдкреНрд░рд╢реНрди рд╣реИрдВ рддреЛ рдХреГрдкрдпрд╛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕