// Copyright 2009-2022 Josh Close // This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0. // See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0. // https://github.com/JoshClose/CsvHelper using System; using System.Collections.Generic; using System.Linq; using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; namespace CsvHelper { /// /// Methods to help with arrays. /// public static class ArrayHelper { /// /// Trims the characters off the start and end of the buffer /// by updating the start and length arguments. /// /// The buffer. /// The start. /// The length. /// The characters to trim. [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Trim(char[] buffer, ref int start, ref int length, char[] trimChars) { // Trim start. for (var i = start; i < start + length; i++) { var c = buffer[i]; if (!Contains(trimChars, c)) { break; } start++; length--; } // Trim end. for (var i = start + length - 1; i > start; i--) { var c = buffer[i]; if (!Contains(trimChars, c)) { break; } length--; } } /// /// Determines whether this given array contains the given character. /// /// The array to search. /// The character to look for. /// /// true if the array contains the characters, otherwise false. /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool Contains(char[] array, in char c) { for (var i = 0; i < array.Length; i++) { if (array[i] == c) { return true; } } return false; } } }