Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Speech / Src / Internal / GrammarBuilding / BuilderElements.cs / 1 / BuilderElements.cs
//------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------
using System.Collections.ObjectModel;
using System.Collections.Generic;
using System.Diagnostics;
using System.Speech.Recognition;
using System.Speech.Internal.SrgsParser;
using System.Text;
namespace System.Speech.Internal.GrammarBuilding
{
///
///
///
#if VSCOMPILE
[DebuggerDisplay ("{DebugSummary}")]
#endif
internal abstract class BuilderElements : GrammarBuilderBase
{
//*******************************************************************
//
// Constructors
//
//*******************************************************************
#region Constructors
///
///
///
internal BuilderElements ()
{
}
#endregion
//********************************************************************
//
// Public Methods
//
//*******************************************************************
#region Public Methods
/// TODOC
public override bool Equals (object obj)
{
BuilderElements refObj = obj as BuilderElements;
if (refObj == null)
{
return false;
}
// Easy out if the number of elements do not match
if (refObj.Count != Count || refObj.Items.Count != Items.Count)
{
return false;
}
// Deep recursive search for equality
for (int i = 0; i < Items.Count; i++)
{
if (!Items [i].Equals (refObj.Items [i]))
{
return false;
}
}
return true;
}
/// TODOC <_include file='doc\SpeechAudioFormatInfo.uex' path='docs/doc[@for="SpeechAudioFormatInfo.GetHashCode"]/*' />
public override int GetHashCode ()
{
return base.GetHashCode ();
}
#endregion
//********************************************************************
//
// Protected Methods
//
//********************************************************************
#region Internal Methods
///
/// Optimization for a element tree
///
///
protected void Optimize (Collection newRules)
{
// Create an dictionary of [Count of elements, list of elements]
SortedDictionary> dict = new SortedDictionary> ();
GetDictionaryElements (dict);
// The dictionary is sorted from the smallest buckets to the largest.
// Revert the order in the keys arrays
int [] keys = new int [dict.Keys.Count];
int index = keys.Length - 1;
foreach (int key in dict.Keys)
{
keys [index--] = key;
}
// Look for each bucket from the largest to the smallest
for (int i = 0; i < keys.Length && keys [i] >= 3; i++)
{
Collection gb = dict [keys [i]];
for (int j = 0; j < gb.Count; j++)
{
RuleElement newRule = null;
RuleRefElement ruleRef = null;
for (int k = j + 1; k < gb.Count; k++)
{
if (gb [j] != null && gb [j].Equals (gb [k]))
{
BuilderElements current = gb [k];
BuilderElements parent = current.Parent;
if (current is SemanticKeyElement)
// if current is already a ruleref. There is no need to create a new one
{
// Simply set the ruleref of the current element to the ruleref of the org element.
parent.Items [parent.Items.IndexOf (current)] = gb [j];
}
else
{
// Create a rule to store the common elemts
if (newRule == null)
{
newRule = new RuleElement (current, "_");
newRules.Add (newRule);
}
// Create a ruleref and attach the
if (ruleRef == null)
{
ruleRef = new RuleRefElement (newRule);
gb [j].Parent.Items [gb [j].Parent.Items.IndexOf (gb [j])] = ruleRef;
}
parent.Items [current.Parent.Items.IndexOf (current)] = ruleRef;
}
//
current.RemoveDictionaryElements (dict);
gb [k] = null;
}
}
}
}
}
#endregion
//*******************************************************************
//
// Internal Methods
//
//********************************************************************
#region Internal Methods
///
///
///
///
internal void Add (string phrase)
{
_items.Add (new GrammarBuilderPhrase (phrase));
}
///
///
///
///
internal void Add (GrammarBuilder builder)
{
foreach (GrammarBuilderBase item in builder.InternalBuilder.Items)
{
_items.Add (item);
}
}
///
///
///
///
internal void Add (GrammarBuilderBase item)
{
_items.Add (item);
}
///
///
///
///
///
internal void CloneItems (BuilderElements builders)
{
foreach (GrammarBuilderBase item in builders.Items)
{
_items.Add (item);
}
}
///
///
///
///
///
///
///
internal void CreateChildrenElements (IElementFactory elementFactory, IRule parent, IdentifierCollection ruleIds)
{
foreach (GrammarBuilderBase buider in Items)
{
IElement element = buider.CreateElement (elementFactory, parent, parent, ruleIds);
if (element != null)
{
element.PostParse (parent);
elementFactory.AddElement (parent, element);
}
}
}
///
///
///
///
///
///
///
///
internal void CreateChildrenElements (IElementFactory elementFactory, IItem parent, IRule rule, IdentifierCollection ruleIds)
{
foreach (GrammarBuilderBase buider in Items)
{
IElement element = buider.CreateElement (elementFactory, parent, rule, ruleIds);
if (element != null)
{
element.PostParse (parent);
elementFactory.AddElement (parent, element);
}
}
}
///
///
///
///
internal override int CalcCount (BuilderElements parent)
{
base.CalcCount (parent);
int c = 1;
foreach (GrammarBuilderBase item in Items)
{
c += item.CalcCount (this);
}
Count = c;
return c;
}
#endregion
//*******************************************************************
//
// Internal Properties
//
//*******************************************************************
#region Internal Properties
internal List Items
{
get
{
return _items;
}
}
override internal string DebugSummary
{
get
{
StringBuilder sb = new StringBuilder ();
foreach (GrammarBuilderBase item in _items)
{
if (sb.Length > 0)
{
sb.Append (" ");
}
sb.Append (item.DebugSummary);
}
return sb.ToString ();
}
}
#endregion
//*******************************************************************
//
// Private Method
//
//********************************************************************
#region Private Method
private void GetDictionaryElements (SortedDictionary> dict)
{
// Recursive search from a matching subtree
foreach (GrammarBuilderBase item in Items)
{
BuilderElements current = item as BuilderElements;
// Go deeper if the number of children is greater the element to compare against.
if (current != null)
{
if (!dict.ContainsKey (current.Count))
{
dict.Add (current.Count, new Collection ());
}
dict [current.Count].Add (current);
current.GetDictionaryElements (dict);
}
}
}
private void RemoveDictionaryElements (SortedDictionary> dict)
{
// Recursive search from a matching subtree
foreach (GrammarBuilderBase item in Items)
{
BuilderElements current = item as BuilderElements;
// Go deeper if the number of children is greater the element to compare against.
if (current != null)
{
// Recursively remove all elements
current.RemoveDictionaryElements (dict);
dict [current.Count].Remove (current);
}
}
}
#endregion
//*******************************************************************
//
// Private Fields
//
//********************************************************************
#region Private Fields
// List of builder elements
private readonly List _items = new List ();
#endregion
}
}
// 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
- PostBackOptions.cs
- DbReferenceCollection.cs
- CompressedStack.cs
- WebProxyScriptElement.cs
- DesignerSelectionListAdapter.cs
- WebSysDefaultValueAttribute.cs
- BookmarkScopeHandle.cs
- GregorianCalendarHelper.cs
- WebPartCollection.cs
- ProfessionalColors.cs
- DataGridDefaultColumnWidthTypeConverter.cs
- NodeFunctions.cs
- SystemException.cs
- DesignerDataColumn.cs
- TreeNodeEventArgs.cs
- SafePEFileHandle.cs
- Decimal.cs
- Stacktrace.cs
- EncodingNLS.cs
- Query.cs
- Brushes.cs
- IdentityValidationException.cs
- PrinterSettings.cs
- StagingAreaInputItem.cs
- CompressionTransform.cs
- ListBase.cs
- Attributes.cs
- ButtonBase.cs
- DataGridAddNewRow.cs
- ZipIOLocalFileBlock.cs
- PropertyGridCommands.cs
- NativeWrapper.cs
- InvokeBase.cs
- StrongNameMembershipCondition.cs
- DesignerActionVerbItem.cs
- ParameterCollection.cs
- XmlSchemaCompilationSettings.cs
- UrlPath.cs
- namescope.cs
- ValueChangedEventManager.cs
- AppSettingsExpressionBuilder.cs
- XmlWhitespace.cs
- RelationshipDetailsRow.cs
- COSERVERINFO.cs
- ResumeStoryboard.cs
- Triangle.cs
- StylusPointProperties.cs
- AssemblyResourceLoader.cs
- CompositionTarget.cs
- SqlClientWrapperSmiStream.cs
- FlowLayoutPanel.cs
- UpdateProgress.cs
- InfoCardCryptoHelper.cs
- SecurityIdentifierConverter.cs
- AttachInfo.cs
- MimePart.cs
- AudioException.cs
- DataBindingsDialog.cs
- XmlEncoding.cs
- GridItem.cs
- MLangCodePageEncoding.cs
- WebReferencesBuildProvider.cs
- XmlSchema.cs
- SqlBuilder.cs
- WebScriptEnablingBehavior.cs
- X509Utils.cs
- SQLMoney.cs
- TreeNode.cs
- SingleObjectCollection.cs
- updateconfighost.cs
- RoutedEventValueSerializer.cs
- ACL.cs
- ToolStripArrowRenderEventArgs.cs
- ResolveMatches11.cs
- Int32Collection.cs
- UIElementParagraph.cs
- SByteConverter.cs
- FileSecurity.cs
- HMACSHA384.cs
- UnsafeMethods.cs
- TextDecorationCollectionConverter.cs
- ReferencedCategoriesDocument.cs
- __Filters.cs
- X509PeerCertificateElement.cs
- DynamicRenderer.cs
- AnnouncementInnerClient11.cs
- XmlCountingReader.cs
- ExpressionTextBox.xaml.cs
- DecimalKeyFrameCollection.cs
- ServerType.cs
- TcpChannelHelper.cs
- CounterCreationData.cs
- ToolStripItemCollection.cs
- TimeSpanStorage.cs
- WebEventTraceProvider.cs
- ConnectorRouter.cs
- FormViewAutoFormat.cs
- SlipBehavior.cs
- DoubleLinkList.cs
- RequestCacheManager.cs