示例#1
0
 public void GetUniqueSymbolOrArities(out IArityEnumerable arities, out TSymbol uniqueSymbol)
 {
     if (this.HasUniqueSymbol)
     {
         arities      = null;
         uniqueSymbol = (TSymbol)_uniqueSymbolOrArities;
     }
     else
     {
         arities      = (_uniqueSymbolOrArities == null && _arityBitVectorOrUniqueArity == 0) ? null : (IArityEnumerable)this;
         uniqueSymbol = null;
     }
 }
示例#2
0
        /// <summary>
        /// If <paramref name="uniqueSymbol"/> is set, then <paramref name="arities"/> will be null.
        /// The only arity in that case will be encoded in the symbol.
        /// </summary>
        /// <param name="name"></param>
        /// <param name="arities"></param>
        /// <param name="uniqueSymbol"></param>
        /// <returns></returns>
        public bool TryGetAritiesAndUniqueSymbol(
            string name,
            out IArityEnumerable arities,
            out TSymbol uniqueSymbol)
        {
            UniqueSymbolOrArities pair;

            if (!_nameMap.TryGetValue(name, out pair))
            {
                arities      = null;
                uniqueSymbol = null;
                return(false);
            }

            // If a unique symbol is set (not null), then its arity should be determined
            // by inspecting the symbol.
            pair.GetUniqueSymbolOrArities(out arities, out uniqueSymbol);
            return(true);
        }