Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Shared / MS / Utility / ItemList.cs / 1 / ItemList.cs
using System;
using MS.Internal.WindowsBase;
namespace MS.Utility
{
//
// ItemStructList
//
[FriendAccessAllowed] // Built into Base, also used by Framework.
internal struct ItemStructList
{
public ItemStructList(int capacity)
{
List = new T[capacity];
Count = 0;
}
//
// Non-lock-required Read methods
// (Always safe to call when locking "safe" write operations are used)
//
public T[] List;
public int Count;
public void EnsureIndex(int index)
{
int delta = (index + 1) - Count;
if (delta > 0)
{
Add(delta);
}
}
public bool IsValidIndex(int index)
{
return (index >= 0 && index < Count);
}
public int IndexOf(T value)
{
int index = -1;
for (int i = 0; i < Count; i++)
{
if (List[i].Equals(value))
{
index = i;
break;
}
}
return index;
}
public bool Contains(T value)
{
return (IndexOf(value) != -1);
}
//
// Lock-required Write operations
// "Safe" methods for Reader lock-free operation
//
// Increase size by one, new value is provided
public void Add(T item)
{
// Add without Count adjustment (incr Count after valid item added)
int index = Add(1, false);
List[index] = item;
Count++;
}
// Increase size by one, new value is provided
public void Add(ref T item)
{
// Add without Count adjustment (incr Count after valid item added)
int index = Add(1, false);
List[index] = item;
Count++;
}
// Increase size by one, new value is default value
public int Add()
{
return Add(1, true);
}
// Increase size of array by delta, fill with default values
public int Add(int delta)
{
return Add(delta, true);
}
// Increase size of array by delta, fill with default values
// Allow disable of automatic Count increment so that cases where
// non-default values are to be added to the list can be done before
// count is changed. This is important for non-locking scenarios
// (i.e. count is adjusted after array size changes)
private int Add(int delta, bool incrCount)
{
if (List != null)
{
if ((Count + delta) > List.Length)
{
T[] newList = new T[Math.Max(List.Length * 2, Count + delta)];
List.CopyTo(newList, 0);
List = newList;
}
}
else
{
List = new T[Math.Max(delta, 2)];
}
// New arrays auto-initialized to default entry values
// Any resued entried have already been cleared out by Remove or Clear
int index = Count;
// Optional adjustment of Count
if (incrCount)
{
// Adjust count after resize so that array bounds and data
// are never invalid (good for locking writes without synchronized reads)
Count += delta;
}
return index;
}
public void Sort()
{
if (List != null)
{
Array.Sort(List, 0, Count);
}
}
public void AppendTo(ref ItemStructList destinationList)
{
for (int i = 0; i < Count; i++)
{
destinationList.Add(ref List[i]);
}
}
public T[] ToArray()
{
T[] array = new T[Count];
Array.Copy(List, 0, array, 0, Count);
return array;
}
//
// Lock-required Write operations
// "UNSafe" methods for Reader lock-free operation
//
// If any of these methods are called, the entire class is considered
// unsafe for Reader lock-free operation for that point on (meaning
// Reader locks must be taken)
//
public void Clear()
{
// Return now unused entries back to default
Array.Clear(List, 0, Count);
Count = 0;
}
public void Remove(T value)
{
int index = IndexOf(value);
if (index != -1)
{
// Shift entries down
Array.Copy(List, index + 1, List, index, (Count - index - 1));
// Return now unused entries back to default
Array.Clear(List, Count - 1, 1);
Count--;
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
using System;
using MS.Internal.WindowsBase;
namespace MS.Utility
{
//
// ItemStructList
//
[FriendAccessAllowed] // Built into Base, also used by Framework.
internal struct ItemStructList
{
public ItemStructList(int capacity)
{
List = new T[capacity];
Count = 0;
}
//
// Non-lock-required Read methods
// (Always safe to call when locking "safe" write operations are used)
//
public T[] List;
public int Count;
public void EnsureIndex(int index)
{
int delta = (index + 1) - Count;
if (delta > 0)
{
Add(delta);
}
}
public bool IsValidIndex(int index)
{
return (index >= 0 && index < Count);
}
public int IndexOf(T value)
{
int index = -1;
for (int i = 0; i < Count; i++)
{
if (List[i].Equals(value))
{
index = i;
break;
}
}
return index;
}
public bool Contains(T value)
{
return (IndexOf(value) != -1);
}
//
// Lock-required Write operations
// "Safe" methods for Reader lock-free operation
//
// Increase size by one, new value is provided
public void Add(T item)
{
// Add without Count adjustment (incr Count after valid item added)
int index = Add(1, false);
List[index] = item;
Count++;
}
// Increase size by one, new value is provided
public void Add(ref T item)
{
// Add without Count adjustment (incr Count after valid item added)
int index = Add(1, false);
List[index] = item;
Count++;
}
// Increase size by one, new value is default value
public int Add()
{
return Add(1, true);
}
// Increase size of array by delta, fill with default values
public int Add(int delta)
{
return Add(delta, true);
}
// Increase size of array by delta, fill with default values
// Allow disable of automatic Count increment so that cases where
// non-default values are to be added to the list can be done before
// count is changed. This is important for non-locking scenarios
// (i.e. count is adjusted after array size changes)
private int Add(int delta, bool incrCount)
{
if (List != null)
{
if ((Count + delta) > List.Length)
{
T[] newList = new T[Math.Max(List.Length * 2, Count + delta)];
List.CopyTo(newList, 0);
List = newList;
}
}
else
{
List = new T[Math.Max(delta, 2)];
}
// New arrays auto-initialized to default entry values
// Any resued entried have already been cleared out by Remove or Clear
int index = Count;
// Optional adjustment of Count
if (incrCount)
{
// Adjust count after resize so that array bounds and data
// are never invalid (good for locking writes without synchronized reads)
Count += delta;
}
return index;
}
public void Sort()
{
if (List != null)
{
Array.Sort(List, 0, Count);
}
}
public void AppendTo(ref ItemStructList destinationList)
{
for (int i = 0; i < Count; i++)
{
destinationList.Add(ref List[i]);
}
}
public T[] ToArray()
{
T[] array = new T[Count];
Array.Copy(List, 0, array, 0, Count);
return array;
}
//
// Lock-required Write operations
// "UNSafe" methods for Reader lock-free operation
//
// If any of these methods are called, the entire class is considered
// unsafe for Reader lock-free operation for that point on (meaning
// Reader locks must be taken)
//
public void Clear()
{
// Return now unused entries back to default
Array.Clear(List, 0, Count);
Count = 0;
}
public void Remove(T value)
{
int index = IndexOf(value);
if (index != -1)
{
// Shift entries down
Array.Copy(List, index + 1, List, index, (Count - index - 1));
// Return now unused entries back to default
Array.Clear(List, Count - 1, 1);
Count--;
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ApplicationException.cs
- Configuration.cs
- RawStylusInput.cs
- DataService.cs
- RawTextInputReport.cs
- TextWriterTraceListener.cs
- BaseDataListActionList.cs
- Content.cs
- DefaultAuthorizationContext.cs
- BasicViewGenerator.cs
- MulticastOption.cs
- TemplateContent.cs
- DbModificationCommandTree.cs
- GridViewSortEventArgs.cs
- CodeAccessSecurityEngine.cs
- ConnectionStringSettings.cs
- FileDetails.cs
- QueryStatement.cs
- TextContainer.cs
- WindowsSpinner.cs
- RtfControlWordInfo.cs
- DataSourceCollectionBase.cs
- GridItemProviderWrapper.cs
- PathSegmentCollection.cs
- ResolveNameEventArgs.cs
- LineGeometry.cs
- CodeTypeReferenceCollection.cs
- ToggleButton.cs
- FixedPosition.cs
- FunctionNode.cs
- ArglessEventHandlerProxy.cs
- _Win32.cs
- MatrixStack.cs
- ConsoleTraceListener.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- Function.cs
- ReaderWriterLock.cs
- ObjectNotFoundException.cs
- AgileSafeNativeMemoryHandle.cs
- XmlMapping.cs
- WorkflowDesignerMessageFilter.cs
- hebrewshape.cs
- DynamicFilterExpression.cs
- ClientViaElement.cs
- XmlAttributeAttribute.cs
- Model3D.cs
- SafeSerializationManager.cs
- InstanceCollisionException.cs
- TableFieldsEditor.cs
- BinaryObjectReader.cs
- SqlDataSourceQueryEditorForm.cs
- ListGeneralPage.cs
- AuthenticationModeHelper.cs
- EntityDataSourceColumn.cs
- StringSorter.cs
- HtmlTable.cs
- InternalControlCollection.cs
- GridViewCommandEventArgs.cs
- PermissionListSet.cs
- EdmMember.cs
- TextChangedEventArgs.cs
- NavigationWindow.cs
- InvocationExpression.cs
- WebPartDescriptionCollection.cs
- NativeMethods.cs
- EventMappingSettingsCollection.cs
- X509ScopedServiceCertificateElementCollection.cs
- ExpressionBindingCollection.cs
- UIElementPropertyUndoUnit.cs
- EventMappingSettingsCollection.cs
- CryptoKeySecurity.cs
- LineServices.cs
- OleDbCommand.cs
- GridViewRowEventArgs.cs
- BasicBrowserDialog.cs
- WebPartCollection.cs
- milexports.cs
- EntityViewGenerationAttribute.cs
- Tokenizer.cs
- ConnectionPointConverter.cs
- IPPacketInformation.cs
- IconHelper.cs
- TextDecorationLocationValidation.cs
- DataGridViewComboBoxColumn.cs
- COM2FontConverter.cs
- ContractMapping.cs
- CodeTypeConstructor.cs
- TextBreakpoint.cs
- MemberAssignmentAnalysis.cs
- WmlTextBoxAdapter.cs
- UniqueEventHelper.cs
- OrderedDictionary.cs
- ReferenceCountedObject.cs
- TriggerCollection.cs
- MultiPageTextView.cs
- DataGridViewCellLinkedList.cs
- NativeActivityAbortContext.cs
- HttpProfileBase.cs
- ServiceAppDomainAssociationProvider.cs
- Filter.cs