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; } }
/// <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); }