diff options
Diffstat (limited to 'includes')
-rw-r--r-- | includes/sliding-window.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/includes/sliding-window.h b/includes/sliding-window.h new file mode 100644 index 0000000..0b3477d --- /dev/null +++ b/includes/sliding-window.h @@ -0,0 +1,54 @@ +/* + * PSX-Tools Bundle Pack + * Copyright (C) 2002-2005 Nicolas "Pixel" Noble + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __SLIDING_WINDOW_H__ +#define __SLIDING_WINDOW_H__ + +#include <Exceptions.h> +#include <recycle.h> + +class sliding_window : public Base { + public: + struct entry_tree_t; + struct d_list_t { + struct entry_t * p; + struct d_list_t * next; + }; + struct distance_t { + Uint32 d; + struct d_list_t * entries; + }; + struct entry_tree_t { + struct entry_tree_t * hash[256]; + struct distance_t * d; + }; + sliding_window(Uint32 max_window, Uint32 max_size); + virtual ~sliding_window(); + void push_byte(Uint8); + void push_bytes(Uint8 *, Uint32 size); + private: + struct entry_tree_t * root_entries[256]; + Uint8 * stack; + Uint32 max_window; + Uint32 max_size; + reroot * entries_recycle; + Uint32 current_size; +}; + +#endif |