diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-05 00:01:18 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-05 00:01:18 +0000 |
commit | 42995d7bf396933ee60c5f89c354ea89cf13df0d (patch) | |
tree | cfdcea0ac57420e7baf570bfe435e107bb842541 /flow/gsl/gsldatacache.h | |
download | arts-42995d7bf396933ee60c5f89c354ea89cf13df0d.tar.gz arts-42995d7bf396933ee60c5f89c354ea89cf13df0d.zip |
Copy of aRts for Trinity modifications
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/dependencies/arts@1070145 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'flow/gsl/gsldatacache.h')
-rw-r--r-- | flow/gsl/gsldatacache.h | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/flow/gsl/gsldatacache.h b/flow/gsl/gsldatacache.h new file mode 100644 index 0000000..5eb3677 --- /dev/null +++ b/flow/gsl/gsldatacache.h @@ -0,0 +1,87 @@ +/* GSL - Generic Sound Layer + * Copyright (C) 2001 Tim Janik + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307, USA. + */ +#ifndef __GSL_DATA_CACHE_H__ +#define __GSL_DATA_CACHE_H__ + +#include <gsl/gslcommon.h> + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + + +/* --- macros --- */ +#define GSL_DATA_CACHE_NODE_SIZE(dcache) (((GslDataCache*) (dcache))->node_size) + + +/* --- typedefs & structures --- */ +typedef gfloat GslDataType; +typedef struct _GslDataCacheNode GslDataCacheNode; +struct _GslDataCache +{ + GslDataHandle *dhandle; + guint open_count; + GslMutex mutex; + guint ref_count; + guint node_size; /* power of 2, const for all dcaches */ + guint padding; /* n_values around blocks */ + guint max_age; + gboolean low_persistency; + guint n_nodes; + GslDataCacheNode **nodes; +}; +struct _GslDataCacheNode +{ + gsize offset; + guint ref_count; + guint age; + GslDataType *data; /* NULL while busy */ +}; +typedef enum +{ + GSL_DATA_CACHE_REQUEST = FALSE, /* node->data may be NULL and will be filled */ + GSL_DATA_CACHE_DEMAND_LOAD = TRUE, /* blocks until node->data != NULL */ + GSL_DATA_CACHE_PEEK = 2 /* may return NULL node, data != NULL otherwise */ +} GslDataCacheRequest; + + +/* --- prototypes --- */ +GslDataCache* gsl_data_cache_new (GslDataHandle *dhandle, + guint padding); +GslDataCache* gsl_data_cache_ref (GslDataCache *dcache); +void gsl_data_cache_unref (GslDataCache *dcache); +void gsl_data_cache_open (GslDataCache *dcache); +void gsl_data_cache_close (GslDataCache *dcache); +GslDataCacheNode* gsl_data_cache_ref_node (GslDataCache *dcache, + gsize offset, + GslDataCacheRequest load_request); +void gsl_data_cache_unref_node (GslDataCache *dcache, + GslDataCacheNode *node); +void gsl_data_cache_free_olders (GslDataCache *dcache, + guint max_age); +GslDataCache* gsl_data_cache_from_dhandle (GslDataHandle *dhandle, + guint min_padding); + + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __GSL_DATA_CACHE_H__ */ |