//---------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
namespace System.Data.Common.EntitySql.AST
{
using System;
using System.Globalization;
using System.Collections;
using System.Collections.Generic;
///
/// Represents base class for nodes in the eSQL abstract syntax tree OM.
///
internal abstract class Node
{
private ErrorContext _errCtx = new ErrorContext();
internal Node() { }
internal Node(string commandText, int inputPosition)
{
_errCtx.CommandText = commandText;
_errCtx.InputPosition = inputPosition;
}
///
/// Ast Node error context.
///
internal ErrorContext ErrCtx
{
get { return _errCtx; }
set { _errCtx = value; }
}
}
///
/// An ast node represents a generic list of ast nodes.
///
internal sealed class NodeList : Node, System.Collections.Generic.IEnumerable
where T : Node
{
private readonly List _list = new List();
///
/// Default constructor.
///
internal NodeList()
{
}
///
/// Initializes adding one item to the list.
///
/// expression
internal NodeList(T item)
{
_list.Add(item);
}
///
/// Add an item to the list, return the updated list.
///
internal NodeList Add(T item)
{
_list.Add(item);
return this;
}
///
/// Returns the number of elements in the list.
///
internal int Count
{
get { return _list.Count; }
}
///
/// Indexer to the list entries.
///
/// integer position of the element in the list
internal T this[int index]
{
get { return _list[index]; }
}
#region GetEnumerator
System.Collections.Generic.IEnumerator System.Collections.Generic.IEnumerable.GetEnumerator()
{
return _list.GetEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return _list.GetEnumerator();
}
#endregion
}
}