using System;
namespace FileHelpers{
internal sealed class ExtractedInfo
{
//public int CharsRemoved;
//public string ExtractedString;
internal string mCustomExtractedString = null;
public string ExtractedString()
{
if (mCustomExtractedString == null)
return new string(mLine.mLine, ExtractedFrom, ExtractedTo - ExtractedFrom + 1);
else
return mCustomExtractedString;
// return new string(mLine, .mLine.Substring(ExtractedFrom, ExtractedTo - ExtractedFrom + 1);
}
public int Length
{
get { return ExtractedTo - ExtractedFrom + 1;}
}
public LineInfo mLine;
public int ExtractedFrom;
public int ExtractedTo;
//public int ExtraLines;
//public string NewRestOfLine;
//public string TrailString;
public ExtractedInfo(LineInfo line)
{
mLine = line;
ExtractedFrom = line.mCurrentPos;
ExtractedTo = line.mLine.Length - 1;
//CharsRemoved = ExtractedTo - ExtractedFrom + 1;
//ExtraLines = 0;
// NewRestOfLine = null;
}
public ExtractedInfo(LineInfo line, int extractTo)
{
mLine = line;
ExtractedFrom = line.mCurrentPos;
ExtractedTo = extractTo - 1;
//CharsRemoved = ExtractedTo - ExtractedFrom + 1;
//ExtraLines = 0;
// NewRestOfLine = null;
}
public ExtractedInfo(string customExtract)
{
mCustomExtractedString = customExtract;
}
public void TrimStart(char[] sortedToTrim)
{
if (mCustomExtractedString != null)
mCustomExtractedString = mCustomExtractedString.TrimStart(sortedToTrim);
else
while(ExtractedFrom < ExtractedTo&& Array.BinarySearch(sortedToTrim, mLine.mLine[ExtractedFrom]) >= 0)
ExtractedFrom++;
}
public void TrimEnd(char[] sortedToTrim)
{
if (mCustomExtractedString != null)
mCustomExtractedString = mCustomExtractedString.TrimEnd(sortedToTrim);
else
while(ExtractedTo > ExtractedFrom && Array.BinarySearch(sortedToTrim, mLine.mLine[ExtractedTo]) >= 0)
ExtractedTo--;
}
public void TrimBoth(char[] sortedToTrim)
{
if (mCustomExtractedString != null)
mCustomExtractedString = mCustomExtractedString.Trim(sortedToTrim);
else
{
while(ExtractedFrom <= ExtractedTo && Array.BinarySearch(sortedToTrim, mLine.mLine[ExtractedFrom]) >= 0)
{
ExtractedFrom++;
}
while(ExtractedTo > ExtractedFrom && Array.BinarySearch(sortedToTrim, mLine.mLine[ExtractedTo]) >= 0)
{
ExtractedTo--;
}
}
}
//
// public ExtractedInfo(string extracted, int charsRem, int lines)
// {
// ExtractedString = extracted;
// CharsRemoved = charsRem;
// ExtraLines = lines;
// NewRestOfLine = null;
// }
internal static readonly ExtractedInfo Empty = new ExtractedInfo(string.Empty);
public bool HasOnlyThisChars(char[] sortedArray)
{
// Check if the chars at pos or right are empty ones
if (mCustomExtractedString != null)
{
int pos = 0;
while ( pos < mCustomExtractedString.Length &&
Array.BinarySearch(sortedArray, mCustomExtractedString[pos]) >= 0 )
{
pos++;
}
return pos == mCustomExtractedString.Length;
}
else
{
int pos = ExtractedFrom;
while(pos <= ExtractedTo && Array.BinarySearch(sortedArray, mLine.mLine[pos]) >= 0)
{
pos++;
}
return pos > ExtractedTo;
}
}
}
}
|