12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- # -*- coding: utf-8 -*-
- API_VERSION = 2
- from libc.stdlib cimport free
- cdef extern from "_chunker.c":
- ctypedef int uint32_t
- ctypedef struct _Chunker "Chunker":
- pass
- _Chunker *chunker_init(int window_size, int chunk_mask, int min_size, uint32_t seed)
- void chunker_set_fd(_Chunker *chunker, object fd)
- void chunker_free(_Chunker *chunker)
- object chunker_process(_Chunker *chunker)
- uint32_t *buzhash_init_table(uint32_t seed)
- uint32_t c_buzhash "buzhash"(unsigned char *data, size_t len, uint32_t *h)
- uint32_t c_buzhash_update "buzhash_update"(uint32_t sum, unsigned char remove, unsigned char add, size_t len, uint32_t *h)
- cdef class Chunker:
- cdef _Chunker *chunker
- def __cinit__(self, window_size, chunk_mask, min_size, seed):
- self.chunker = chunker_init(window_size, chunk_mask, min_size, seed & 0xffffffff)
- def chunkify(self, fd):
- chunker_set_fd(self.chunker, fd)
- return self
- def __dealloc__(self):
- if self.chunker:
- chunker_free(self.chunker)
- def __iter__(self):
- return self
- def __next__(self):
- return chunker_process(self.chunker)
- def buzhash(unsigned char *data, unsigned long seed):
- cdef uint32_t *table
- cdef uint32_t sum
- table = buzhash_init_table(seed & 0xffffffff)
- sum = c_buzhash(data, len(data), table)
- free(table)
- return sum
- def buzhash_update(uint32_t sum, unsigned char remove, unsigned char add, size_t len, unsigned long seed):
- cdef uint32_t *table
- table = buzhash_init_table(seed & 0xffffffff)
- sum = c_buzhash_update(sum, remove, add, len, table)
- free(table)
- return sum
|