/* sbt -- Simple Build Tool
 * Copyright 2010  Mark Harrah
 */
package sbt
package inc

trait AnalysisStore
{
	def set(analysis: Analysis, setup: CompileSetup): Unit
	def get(): Option[(Analysis, CompileSetup)]
}

object AnalysisStore
{
	def cached(backing: AnalysisStore): AnalysisStore = new AnalysisStore {
		private var last: Option[(Analysis, CompileSetup)] = None
		def set(analysis: Analysis, setup: CompileSetup)
		{
			backing.set(analysis, setup)
			last = Some( (analysis, setup) )
		}
		def get(): Option[(Analysis, CompileSetup)] =
		{
			if(last.isEmpty)
				last = backing.get()
			last
		}
	}
	def sync(backing: AnalysisStore): AnalysisStore = new AnalysisStore {
		def set(analysis: Analysis, setup: CompileSetup): Unit = synchronized { backing.set(analysis, setup) }
		def get(): Option[(Analysis, CompileSetup)] = synchronized { backing.get() }
	}
}