Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
0e7a40a639 | |||
883236e581 |
@ -1,8 +0,0 @@
|
|||||||
namespace DevJsonDB.IO;
|
|
||||||
|
|
||||||
public enum FastMergeType
|
|
||||||
{
|
|
||||||
None = 0,
|
|
||||||
Add = 2,
|
|
||||||
Remove = 4,
|
|
||||||
}
|
|
@ -8,13 +8,11 @@ public class LocalStore<T> : IStore<T>
|
|||||||
private static Encoding DefaultEncoding = Encoding.UTF8;
|
private static Encoding DefaultEncoding = Encoding.UTF8;
|
||||||
private string filePath;
|
private string filePath;
|
||||||
private List<T> items;
|
private List<T> items;
|
||||||
private bool autoCommit;
|
|
||||||
|
|
||||||
public LocalStore(string filePath, bool autoCommit)
|
public LocalStore(string filePath)
|
||||||
{
|
{
|
||||||
this.filePath = filePath;
|
this.filePath = filePath;
|
||||||
this.items = new List<T>();
|
this.items = new List<T>();
|
||||||
this.autoCommit = autoCommit;
|
|
||||||
|
|
||||||
this.InitDatabase();
|
this.InitDatabase();
|
||||||
}
|
}
|
||||||
@ -34,15 +32,10 @@ public class LocalStore<T> : IStore<T>
|
|||||||
fs.Seek(0, SeekOrigin.Begin);
|
fs.Seek(0, SeekOrigin.Begin);
|
||||||
fs.SetLength(0);
|
fs.SetLength(0);
|
||||||
|
|
||||||
for (int i = 0 ; i < items.Count; i++)
|
foreach (T item in this.items)
|
||||||
{
|
{
|
||||||
T item = items[i];
|
|
||||||
string json = JsonSerializer.Serialize<T>(item);
|
string json = JsonSerializer.Serialize<T>(item);
|
||||||
writer.Write(json);
|
writer.WriteLine(json);
|
||||||
if (i != items.Count - 1)
|
|
||||||
{
|
|
||||||
writer.Write("\n");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -60,7 +53,6 @@ public class LocalStore<T> : IStore<T>
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.items.Add(item);
|
this.items.Add(item);
|
||||||
this.AutoCommit(FastMergeType.Add);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,9 +63,7 @@ public class LocalStore<T> : IStore<T>
|
|||||||
|
|
||||||
public bool Remove(T item)
|
public bool Remove(T item)
|
||||||
{
|
{
|
||||||
bool ret = this.items.Remove(item);
|
return this.items.Remove(item);
|
||||||
this.AutoCommit(FastMergeType.Remove);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<T> GetValues()
|
public IEnumerable<T> GetValues()
|
||||||
@ -81,43 +71,6 @@ public class LocalStore<T> : IStore<T>
|
|||||||
return this.items.ToList();
|
return this.items.ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AutoCommit(FastMergeType mergeType)
|
|
||||||
{
|
|
||||||
if (!this.autoCommit) return;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
// Fast-Merge
|
|
||||||
switch (mergeType)
|
|
||||||
{
|
|
||||||
case FastMergeType.Add:
|
|
||||||
{
|
|
||||||
using (FileStream fs = new FileStream(this.filePath, FileMode.Append))
|
|
||||||
using (StreamWriter writer = new StreamWriter(fs, DefaultEncoding))
|
|
||||||
{
|
|
||||||
T lastItem = this.items.ElementAt(this.items.Count() - 1);
|
|
||||||
string json = JsonSerializer.Serialize<T>(lastItem);
|
|
||||||
if (fs.Length > 0)
|
|
||||||
{
|
|
||||||
writer.Write("\n");
|
|
||||||
}
|
|
||||||
writer.Write(json);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case FastMergeType.Remove:
|
|
||||||
{
|
|
||||||
this.Commit();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
throw new JsonDBException(ex.Message, ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void InitDatabase()
|
private void InitDatabase()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -6,7 +6,7 @@ public static class JsonDBFactory
|
|||||||
{
|
{
|
||||||
public static JsonDB<T> CreateDB<T>(string filePath)
|
public static JsonDB<T> CreateDB<T>(string filePath)
|
||||||
{
|
{
|
||||||
IStore<T> store = new LocalStore<T>(filePath, true);
|
IStore<T> store = new LocalStore<T>(filePath);
|
||||||
return new JsonDB<T>(store);
|
return new JsonDB<T>(store);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user