annotate base/StorageAdviser.h @ 250:c12986afc03c

patch for the EasaierTB rdf storage format
author lbajardsilogic
date Tue, 10 Jun 2008 16:06:57 +0000
parents fc9323a41f5a
children
rev   line source
lbajardsilogic@0 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
lbajardsilogic@0 2
lbajardsilogic@0 3 /*
lbajardsilogic@0 4 Sonic Visualiser
lbajardsilogic@0 5 An audio file viewer and annotation editor.
lbajardsilogic@0 6 Centre for Digital Music, Queen Mary, University of London.
lbajardsilogic@0 7 This file copyright 2006 QMUL.
lbajardsilogic@0 8
lbajardsilogic@0 9 This program is free software; you can redistribute it and/or
lbajardsilogic@0 10 modify it under the terms of the GNU General Public License as
lbajardsilogic@0 11 published by the Free Software Foundation; either version 2 of the
lbajardsilogic@0 12 License, or (at your option) any later version. See the file
lbajardsilogic@0 13 COPYING included with this distribution for more information.
lbajardsilogic@0 14 */
lbajardsilogic@0 15
lbajardsilogic@0 16 #ifndef _STORAGE_ADVISER_H_
lbajardsilogic@0 17 #define _STORAGE_ADVISER_H_
lbajardsilogic@0 18
lbajardsilogic@0 19 /**
lbajardsilogic@0 20 * A utility class designed to help decide whether to store cache data
lbajardsilogic@0 21 * (for example FFT outputs) in memory or on disk in the TempDirectory.
lbajardsilogic@0 22 * This is basically a compendium of simple rules of thumb.
lbajardsilogic@0 23 */
lbajardsilogic@0 24
lbajardsilogic@0 25 class StorageAdviser
lbajardsilogic@0 26 {
lbajardsilogic@0 27 public:
lbajardsilogic@0 28 // pass to recommend() zero or more of these OR'd together
lbajardsilogic@0 29 enum Criteria {
lbajardsilogic@0 30 NoCriteria = 0,
lbajardsilogic@0 31 SpeedCritical = 1,
lbajardsilogic@0 32 PrecisionCritical = 2,
lbajardsilogic@0 33 LongRetentionLikely = 4,
lbajardsilogic@0 34 FrequentLookupLikely = 8
lbajardsilogic@0 35 };
lbajardsilogic@0 36
lbajardsilogic@0 37 // recommend() returns one or two of these OR'd together
lbajardsilogic@0 38 enum Recommendation {
lbajardsilogic@0 39 NoRecommendation = 0,
lbajardsilogic@0 40 UseMemory = 1, // Disc is strongly contraindicated
lbajardsilogic@0 41 PreferMemory = 2, // Either would do; memory probably better
lbajardsilogic@0 42 PreferDisc = 4, // Either would do; disc probably better
lbajardsilogic@0 43 UseDisc = 8, // Probably won't fit in memory
lbajardsilogic@0 44 ConserveSpace = 16,// Whatever you choose, keep it compact
lbajardsilogic@0 45 UseAsMuchAsYouLike = 32 // Take my advice and there'll be space for all
lbajardsilogic@0 46 };
lbajardsilogic@0 47
lbajardsilogic@0 48 /**
lbajardsilogic@0 49 * Recommend where to store some data, given certain storage and
lbajardsilogic@0 50 * recall criteria. The minimum size is the approximate amount of
lbajardsilogic@0 51 * data in kilobytes that will be stored if the recommendation is
lbajardsilogic@0 52 * to ConserveSpace; the maximum size is approximately the amount
lbajardsilogic@0 53 * that will be used if UseAsMuchAsYouLike is returned.
lbajardsilogic@0 54 *
lbajardsilogic@0 55 * May throw InsufficientDiscSpace exception if there appears to
lbajardsilogic@0 56 * be nowhere the minimum amount of data can be stored.
lbajardsilogic@0 57 */
lbajardsilogic@0 58 static Recommendation recommend(Criteria criteria,
lbajardsilogic@0 59 int minimumSize,
lbajardsilogic@0 60 int maximumSize);
lbajardsilogic@0 61
lbajardsilogic@0 62 enum AllocationArea {
lbajardsilogic@0 63 MemoryAllocation,
lbajardsilogic@0 64 DiscAllocation
lbajardsilogic@0 65 };
lbajardsilogic@0 66
lbajardsilogic@0 67 /**
lbajardsilogic@0 68 * Specify that we are planning to use a given amount of storage
lbajardsilogic@0 69 * (in kilobytes), but haven't allocated it yet.
lbajardsilogic@0 70 */
lbajardsilogic@0 71 static void notifyPlannedAllocation(AllocationArea area, int size);
lbajardsilogic@0 72
lbajardsilogic@0 73 /**
lbajardsilogic@0 74 * Specify that we have now allocated, or abandoned the allocation
lbajardsilogic@0 75 * of, the given amount (in kilobytes) of a storage area that was
lbajardsilogic@0 76 * previously notified using notifyPlannedAllocation.
lbajardsilogic@0 77 */
lbajardsilogic@0 78 static void notifyDoneAllocation(AllocationArea area, int size);
lbajardsilogic@0 79
lbajardsilogic@0 80 private:
lbajardsilogic@0 81 static long m_discPlanned;
lbajardsilogic@0 82 static long m_memoryPlanned;
lbajardsilogic@0 83 };
lbajardsilogic@0 84
lbajardsilogic@0 85 #endif
lbajardsilogic@0 86