// Copyright (c) 2007-2017 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; using System.Threading; using osu.Framework.Platform; namespace osu.Game.Database { public abstract class DatabaseBackedStore { protected readonly Storage Storage; /// /// Create a new instance (separate from the shared context via for performing isolated operations. /// protected readonly Func CreateContext; private readonly ThreadLocal queryContext; /// /// Retrieve a shared context for performing lookups (or write operations on the update thread, for now). /// protected OsuDbContext GetContext() => queryContext.Value; protected DatabaseBackedStore(Func createContext, Storage storage = null) { CreateContext = createContext; // todo: while this seems to work quite well, we need to consider that contexts could enter a state where they are never cleaned up. queryContext = new ThreadLocal(CreateContext); Storage = storage; } /// /// Perform any common clean-up tasks. Should be run when idle, or whenever necessary. /// public virtual void Cleanup() { } /// /// Reset this database to a default state. Undo all changes to database and storage backings. /// public abstract void Reset(); } }