private void AssignTypeWithCaching(SyntaxBase syntax, Func<TypeAssignment> assignFunc)
        {
            if (assignedTypes.ContainsKey(syntax))
            {
                return;
            }

            var cyclicErrorType = CheckForCyclicError(syntax);
            if (cyclicErrorType != null)
            {
                assignedTypes[syntax] = new TypeAssignment(cyclicErrorType);
                return;
            }

            assignedTypes[syntax] = assignFunc();
        }
Beispiel #2
0
		  public static ITypeAssignment ResolveType(IModule module, TypeAssignment type)
		  {
				ITypeAssignment result = ResolveDeclaration(module, type.Type) as ITypeAssignment;

				return (result != null) ? result : type;
		  }
        private static SnmpScalarNode GenerateSnmpScalarNode(ObjectType ote, SnmpTreeNode parentNode, bool ignoreAccessibleFlag = false)
        {
            SnmpScalarNode result;

            ITypeAssignment mibType = ote.BaseType;
            IntegerType     it      = (mibType as IntegerType);

            if (it != null)
            {
                if (ote.ReferredType.Name == Symbol.TruthValue.ToString())
                {
                    result = new SnmpScalarNodeTruthValue(parentNode);
                }
                else if ((it.Type == IntegerType.Types.Integer) || (it.Type == IntegerType.Types.Integer32))
                {
                    result = new SnmpScalarNodeInt(parentNode);
                }
                else
                {
                    Console.WriteLine(String.Format("Unsupported IntegerType '{0}'!", it.Type));
                    return(null);
                }
                if (it.IsEnumeration)
                {
                    result.Restrictions.AddRange(CreateRestrictions(it.Enumeration));
                }
                else
                {
                    result.Restrictions.AddRange(CreateRestrictions(it.Ranges));
                }
            }
            else
            {
                UnsignedType ut = (mibType as UnsignedType);
                if (ut != null)
                {
                    if ((ut.Type == UnsignedType.Types.Unsigned32) ||
                        (ut.Type == UnsignedType.Types.Gauge32))
                    {
                        result = new SnmpScalarNodeUint(SnmpDataType.Gauge, parentNode);
                    }
                    else if (ut.Type == UnsignedType.Types.Counter32)
                    {
                        result = new SnmpScalarNodeUint(SnmpDataType.Counter, parentNode);
                    }
                    else if (ut.Type == UnsignedType.Types.TimeTicks)
                    {
                        result = new SnmpScalarNodeUint(SnmpDataType.TimeTicks, parentNode);
                    }
                    else if (ut.Type == UnsignedType.Types.Counter64)
                    {
                        result = new SnmpScalarNodeCounter64(parentNode);
                        if ((ut.Ranges != null) && (ut.Ranges.Count > 0))
                        {
                            Console.WriteLine(String.Format("Generation of ranges is not supported for Counter64 type!"));
                            return(null);
                        }
                    }
                    else
                    {
                        Console.WriteLine(String.Format("Unsupported UnsignedType '{0}'!", ut.Type));
                        return(null);
                    }
                    result.Restrictions.AddRange(CreateRestrictions(ut.Ranges));
                }
                else if (mibType is IpAddressType)
                {
                    result = new SnmpScalarNodeOctetString(SnmpDataType.IpAddress, parentNode);
                    result.Restrictions.AddRange(CreateRestrictions((mibType as OctetStringType).Size));
                }
                else if (mibType is OpaqueType)
                {
                    result = new SnmpScalarNodeOctetString(SnmpDataType.Opaque, parentNode);
                    result.Restrictions.AddRange(CreateRestrictions((mibType as OctetStringType).Size));
                }
                else if (mibType is OctetStringType)
                {
                    result = new SnmpScalarNodeOctetString(SnmpDataType.OctetString, parentNode);
                    result.Restrictions.AddRange(CreateRestrictions((mibType as OctetStringType).Size));
                }
                else if (mibType is ObjectIdentifierType)
                {
                    result = new SnmpScalarNodeObjectIdentifier(parentNode);
                }
                else if (mibType is BitsType)
                {
                    result = new SnmpScalarNodeBits(parentNode, (uint)((mibType as BitsType).Map.GetHighestValue() + 1));
                    result.Restrictions.AddRange(CreateRestrictions(mibType as BitsType));
                }
                else
                {
                    TypeAssignment ta = mibType as TypeAssignment;
                    if (ta != null)
                    {
                        Console.WriteLine(String.Format("Unsupported BaseType: Module='{0}', Name='{1}', Type='{2}'!", ta.Module.Name, ta.Name, ta.Type));
                    }
                    else
                    {
                        Console.WriteLine(String.Format("Unsupported BaseType: Module='{0}', Name='{1}'!", mibType.Module, mibType.Name));
                    }

                    return(null);
                }
            }

            result.Name = _alphaNumericRegex.Replace(ote.Name, "");
            result.Oid  = ote.Value;

            if (ote.Access == MaxAccess.readWrite)
            {
                result.AccessMode = SnmpAccessMode.ReadWrite;
            }
            else if (ote.Access == MaxAccess.readOnly)
            {
                result.AccessMode = SnmpAccessMode.ReadOnly;
            }
            else if (ote.Access == MaxAccess.readCreate)
            {
                result.AccessMode = SnmpAccessMode.ReadOnly;
            }
            else if (ignoreAccessibleFlag && (ote.Access == MaxAccess.notAccessible))
            {
                result.AccessMode = SnmpAccessMode.NotAccessible;
            }
            else
            {
                // not accessible or unsupported access type
                return(null);
            }

            return(result);
        }