Skip to content

Commit

Permalink
AsMemory().CopyTo() instead of some for's
Browse files Browse the repository at this point in the history
  • Loading branch information
b4tman committed Aug 11, 2021
1 parent 6d00646 commit a41965b
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 77 deletions.
44 changes: 14 additions & 30 deletions PasswordChanger1C/AccessFunctions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ public static void WritePasswordIntoInfoBaseRepo(string FileName, PageParams Pag
reader.Read(bytesBlock1, 0, 4096);
DataPage = DatabaseAccess8214.ReadPage(reader, bytesBlock1);
TotalBlocks = DataPage.StorageTables.Sum(ST => ST.DataBlocks.Count);
bytesBlock = new byte[(4096 * TotalBlocks)];
bytesBlock = new byte[4096 * TotalBlocks];
i = 0;
foreach (var ST in DataPage.StorageTables)
{
Expand All @@ -110,20 +110,15 @@ public static void WritePasswordIntoInfoBaseRepo(string FileName, PageParams Pag
var TempBlock = new byte[4096];
reader.BaseStream.Seek(DB * 4096, SeekOrigin.Begin);
reader.Read(TempBlock, 0, 4096);
foreach (var ElemByte in TempBlock)
{
bytesBlock[i] = ElemByte;
i++;
}
TempBlock.AsMemory().CopyTo(bytesBlock.AsMemory(i));
i += TempBlock.Length;
}
}
}

//string Test = Encoding.Unicode.GetString(bytesBlock, Offset, 64);
var Pass = Encoding.Unicode.GetBytes(NewPass);
i = 0;
for (i = 0; i < Pass.Length; i++)
bytesBlock[i + Offset] = Pass[i];
Pass.AsMemory().CopyTo(bytesBlock.AsMemory(Offset));

using (var fs = new FileStream(FileName, FileMode.Open, FileAccess.ReadWrite, FileShare.Write))
{
Expand All @@ -134,11 +129,8 @@ public static void WritePasswordIntoInfoBaseRepo(string FileName, PageParams Pag
foreach (var DB in ST.DataBlocks)
{
var TempBlock = new byte[4096];
for (int j = 0; j <= 4095; j++)
{
TempBlock[j] = bytesBlock[i];
i++;
}
bytesBlock.AsMemory(i, TempBlock.Length).CopyTo(TempBlock.AsMemory());
i += TempBlock.Length;

writer.Seek(DB * 4096, SeekOrigin.Begin);
writer.Write(TempBlock);
Expand Down Expand Up @@ -169,7 +161,7 @@ public static void WritePasswordIntoInfoBaseIB(string FileName, PageParams PageH
reader.Read(bytesBlock1, 0, PageSize);
DataPage = DatabaseAccess8214.ReadPage(reader, bytesBlock1);
TotalBlocks = DataPage.StorageTables.Sum(ST => ST.DataBlocks.Count);
bytesBlock = new byte[(PageSize * TotalBlocks)];
bytesBlock = new byte[PageSize * TotalBlocks];
i = 0;
foreach (var ST in DataPage.StorageTables)
{
Expand All @@ -178,11 +170,8 @@ public static void WritePasswordIntoInfoBaseIB(string FileName, PageParams PageH
var TempBlock = new byte[PageSize];
reader.BaseStream.Seek(DB * PageSize, SeekOrigin.Begin);
reader.Read(TempBlock, 0, PageSize);
foreach (var ElemByte in TempBlock)
{
bytesBlock[i] = ElemByte;
i++;
}
TempBlock.AsMemory().CopyTo(bytesBlock.AsMemory(i));
i += TempBlock.Length;
}
}
}
Expand All @@ -194,11 +183,9 @@ public static void WritePasswordIntoInfoBaseIB(string FileName, PageParams PageH
{
NextBlock = BitConverter.ToInt32(bytesBlock, Pos);
short BlockSize = BitConverter.ToInt16(bytesBlock, Pos + 4);
for (int j = 0; j < BlockSize; j++)
{
bytesBlock[Pos + 6 + j] = NewData[ii];
ii++;
}

NewData.AsMemory(ii, BlockSize).CopyTo(bytesBlock.AsMemory(Pos + 6));
ii += BlockSize;

Pos = NextBlock * 256;
}
Expand All @@ -212,11 +199,8 @@ public static void WritePasswordIntoInfoBaseIB(string FileName, PageParams PageH
foreach (var DB in ST.DataBlocks)
{
var TempBlock = new byte[PageSize];
for (int j = 0; j < PageSize; j++)
{
TempBlock[j] = bytesBlock[ii];
ii++;
}
bytesBlock.AsMemory(ii, TempBlock.Length).CopyTo(TempBlock.AsMemory());
ii += TempBlock.Length;

writer.Seek(DB * PageSize, SeekOrigin.Begin);
writer.Write(TempBlock);
Expand Down
31 changes: 9 additions & 22 deletions PasswordChanger1C/DatabaseAccess8214.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,9 @@ public static AccessFunctions.PageParams ReadInfoBase(BinaryReader reader, strin
var TempBlock = new byte[PageSize];
reader.BaseStream.Seek(DB * PageSize, SeekOrigin.Begin);
reader.Read(TempBlock, 0, PageSize);
foreach (var ElemByte in TempBlock)
{
bytesStorageTables[i] = ElemByte;
i++;
}

TempBlock.AsMemory().CopyTo(bytesStorageTables.AsMemory(i));
i += TempBlock.Length;
}

Language = Encoding.UTF8.GetString(bytesStorageTables, 0, 32);
Expand Down Expand Up @@ -239,11 +237,8 @@ public static byte[] GetBlobData(int BlockBlob, int Dataindex, int Datasize, Bin
var TempBlock = new byte[PageSize];
reader.BaseStream.Seek(DB * PageSize, SeekOrigin.Begin);
reader.Read(TempBlock, 0, PageSize);
foreach (var ElemByte in TempBlock)
{
bytesBlock[i] = ElemByte;
i++;
}
TempBlock.AsMemory().CopyTo(bytesBlock.AsMemory(i));
i += TempBlock.Length;
}
}

Expand All @@ -256,13 +251,8 @@ public static byte[] GetBlobData(int BlockBlob, int Dataindex, int Datasize, Bin
NextBlock = BitConverter.ToInt32(bytesBlock, Pos);
short BlockSize = BitConverter.ToInt16(bytesBlock, Pos + 4);

// Dim ByteTemp() As Byte = New Byte(BlockSize - 1) {}

for (int j = 0; j < BlockSize; j++)
{
ByteBlock[i] = bytesBlock[Pos + 6 + j];
i++;
}
bytesBlock.AsMemory(Pos + 6, BlockSize).CopyTo(ByteBlock.AsMemory(i));
i += BlockSize;

Pos = NextBlock * 256;
}
Expand All @@ -287,11 +277,8 @@ public static void ReadDataPage(ref AccessFunctions.PageParams PageHeader, strin
var TempBlock = new byte[PageSize];
reader.BaseStream.Seek(DB * PageSize, SeekOrigin.Begin);
reader.Read(TempBlock, 0, PageSize);
foreach (var ElemByte in TempBlock)
{
bytesBlock[i] = ElemByte;
i++;
}
TempBlock.AsMemory().CopyTo(bytesBlock.AsMemory(i));
i += TempBlock.Length;
}
}

Expand Down
37 changes: 12 additions & 25 deletions PasswordChanger1C/DatabaseAccess838.cs
Original file line number Diff line number Diff line change
Expand Up @@ -226,11 +226,9 @@ private static byte[] GetCleanDataFromBlob(int Dataindex, int Datasize, byte[] b
short BlockSize = BitConverter.ToInt16(bytesBlock, Pos + 4);
Array.Resize(ref DataPositions, BlocksCount + 1);
DataPositions[BlocksCount] = Pos + 6;
for (int j = 0; j < BlockSize; j++)
{
ByteBlock[i] = bytesBlock[Pos + 6 + j];
i++;
}

bytesBlock.AsMemory(Pos + 6, BlockSize).CopyTo(ByteBlock.AsMemory(i));
i += BlockSize;

Pos = NextBlock * 256;
BlocksCount++;
Expand All @@ -242,15 +240,14 @@ private static byte[] GetCleanDataFromBlob(int Dataindex, int Datasize, byte[] b
private static byte[] ReadAllStoragePagesForObject(BinaryReader reader, AccessFunctions.PageParams Page)
{
int PagesCountTableStructure = Page.PagesNum.Count;
var BytesTableStructure = new byte[(PagesCountTableStructure * Page.PageSize)];
var BytesTableStructure = new byte[PagesCountTableStructure * Page.PageSize];
int i = 0;
foreach (var blk in Page.PagesNum)
{
var bytesBlock = new byte[Page.PageSize];
reader.BaseStream.Seek(blk * Page.PageSize, SeekOrigin.Begin);
reader.Read(bytesBlock, 0, Page.PageSize);
for (int a = 0; a < Page.PageSize; a++)
BytesTableStructure[i + a] = bytesBlock[a];
bytesBlock.AsMemory(0, Page.PageSize).CopyTo(BytesTableStructure.AsMemory(i, Page.PageSize));
i += Page.PageSize;
}

Expand Down Expand Up @@ -336,17 +333,10 @@ public static void WritePasswordIntoInfoBaseIB(string FileName, AccessFunctions.
// Data is stored in 256 bytes blocks (6 bytes reserved for next block number and size)
foreach (var Position in DataPositions)
{
for (int i = 0; i <= 249; i++)
{
if (CurrentByte > NewData.Count() - 1)
{
break;
}

int NewPosition = Position + i;
BlobPage.BinaryData[NewPosition] = NewData[CurrentByte];
CurrentByte++;
}
int CopyCount = Math.Min(250, NewData.Count() - CurrentByte);
NewData.AsMemory(CurrentByte, CopyCount)
.CopyTo(BlobPage.BinaryData.AsMemory(Position));
CurrentByte += CopyCount;
}

// Blob page(s) has been modified. Let's write it back to database
Expand All @@ -356,12 +346,9 @@ public static void WritePasswordIntoInfoBaseIB(string FileName, AccessFunctions.
foreach (var Position in BlobPage.PagesNum)
{
var TempBlock = new byte[PageSize];
for (int j = 0; j < PageSize; j++)
{
TempBlock[j] = BlobPage.BinaryData[CurrentByte];
CurrentByte++;
}

BlobPage.BinaryData.AsMemory(CurrentByte, PageSize).CopyTo(TempBlock.AsMemory());
CurrentByte += PageSize;

writer.Seek(Position * PageSize, SeekOrigin.Begin);
writer.Write(TempBlock);
}
Expand Down

0 comments on commit a41965b

Please sign in to comment.