Xash3D FWGS engine.

46 lines
1.7 KiB

/*
index.h - compact version of famous library mpg123
Copyright (C) 2017 Uncle Mike
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 3 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.
*/
#ifndef INDEX_H
#define INDEX_H
typedef struct frame_index_s
{
mpg_off_t *data; // actual data, the frame positions
mpg_off_t step; // advancement in frame number per index point
mpg_off_t next; // frame offset supposed to come next into the index
size_t size; // total number of possible entries
size_t fill; // number of used entries
size_t grow_size;// if > 0: index allowed to grow on need with these steps, instead of lowering resolution
} frame_index_t;
// the condition for a framenum to be appended to the index.
#define FI_NEXT( fi, framenum ) ((fi).size && framenum == (fi).next)
// initialize stuff, set things to zero and NULL...
void fi_init( frame_index_t *fi );
// deallocate/zero things.
void fi_exit( frame_index_t *fi );
// prepare a given size, preserving current fill, if possible.
int fi_resize( frame_index_t *fi, size_t newsize );
// append a frame position, reducing index density if needed.
void fi_add( frame_index_t *fi, mpg_off_t pos );
// replace the frame index
int fi_set( frame_index_t *fi, mpg_off_t *offsets, mpg_off_t step, size_t fill );
// empty the index (setting fill=0 and step=1), but keep current size.
void fi_reset( frame_index_t *fi );
#endif//INDEX_H