mirror of
https://github.com/danbulant/Cosmos
synced 2026-05-19 12:30:32 +00:00
82 lines
2.3 KiB
C#
82 lines
2.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Cosmos.VS.Windows
|
|
{
|
|
public class StateStorer
|
|
{
|
|
protected object mCurrLineId_Lock = new object();
|
|
protected string mCurrLineId = null;
|
|
public string CurrLineId
|
|
{
|
|
get
|
|
{
|
|
return mCurrLineId;
|
|
}
|
|
set
|
|
{
|
|
lock (mCurrLineId_Lock)
|
|
{
|
|
mCurrLineId = value;
|
|
|
|
if(mCurrLineId != null && !mStates.ContainsKey(mCurrLineId))
|
|
{
|
|
mStates.Add(mCurrLineId, new Dictionary<string, byte[]>());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//LineId->StateId->Data for that state
|
|
protected Dictionary<string, Dictionary<string, byte[]>> mStates = new Dictionary<string, Dictionary<string, byte[]>>();
|
|
|
|
public StateStorer()
|
|
{
|
|
|
|
}
|
|
|
|
public void StoreState(string stateId, byte[] data)
|
|
{
|
|
Dictionary<string, byte[]> currLineStates = null;
|
|
lock (mCurrLineId_Lock)
|
|
{
|
|
currLineStates = mStates[mCurrLineId];
|
|
}
|
|
if (currLineStates.ContainsKey(stateId))
|
|
{
|
|
currLineStates.Remove(stateId);
|
|
}
|
|
|
|
currLineStates.Add(stateId, data);
|
|
}
|
|
public byte[] RetrieveState(string lineId, string stateId)
|
|
{
|
|
if (mStates.ContainsKey(lineId))
|
|
{
|
|
Dictionary<string, byte[]> currLineStates = mStates[lineId];
|
|
if(currLineStates.ContainsKey(stateId))
|
|
{
|
|
return currLineStates[stateId];
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
public bool ContainsStatesForLine(string lineId)
|
|
{
|
|
return mStates.ContainsKey(lineId);
|
|
}
|
|
|
|
public void ClearState()
|
|
{
|
|
lock (mCurrLineId_Lock)
|
|
{
|
|
mStates = new Dictionary<string, Dictionary<string, byte[]>>();
|
|
//Ensure current line gets added to new dictionary
|
|
CurrLineId = CurrLineId;
|
|
}
|
|
}
|
|
}
|
|
}
|