private static string MakeUriString(
            Assembly assembly, IAddressReferent referent, int offset)
        {
            StringBuilder sb = new StringBuilder();

            if (assembly != null) // absolute uri
            {
                sb.AppendFormat("ddd://{0}{1}/",
                                assembly is Executable ? "exe" : "lib",
                                assembly.GetHashCode());
            }

            if (referent == null) // no referent; must be relative uri
            {
                if (assembly != null)
                {
                    throw new ArgumentException("Cannot specify assembly without specifying referent.");
                }
            }
            else if (referent is LogicalSegment)
            {
                sb.AppendFormat("seg/{0}/", ((LogicalSegment)referent).Id);
            }
            else
            {
                throw new ArgumentException("Unsupported referent type.");
            }

            sb.Append(offset.ToString("X4"));
            return(sb.ToString());
        }
 public AssemblyUri(Assembly assembly, IAddressReferent referent, int offset)
     : base(MakeUriString(assembly, referent, offset))
 {
     this.assembly = assembly;
     this.referent = referent;
     this.offset   = offset;
     this.address  = referent.Resolve() + offset;
 }
Exemple #3
0
        /// <summary>
        /// Creates a logical address with the given address referent and
        /// displacement.
        /// </summary>
        /// <param name="referent"></param>
        /// <param name="offset"></param>
        public LogicalAddress(IAddressReferent referent, UInt16 displacement)
            : this()
        {
            if (referent == null)
            {
                throw new ArgumentNullException("referent");
            }

            this.referent     = referent;
            this.displacement = displacement;
        }
 public AssemblyUri(Assembly assembly, IAddressReferent referent, int offset)
     : base(MakeUriString(assembly, referent, offset))
 {
     this.assembly = assembly;
     this.referent = referent;
     this.offset = offset;
     this.address = referent.Resolve() + offset;
 }
        private static string MakeUriString(
            Assembly assembly, IAddressReferent referent, int offset)
        {
            StringBuilder sb = new StringBuilder();

            if (assembly != null) // absolute uri
            {
                sb.AppendFormat("ddd://{0}{1}/",
                    assembly is Executable ? "exe" : "lib",
                    assembly.GetHashCode());
            }

            if (referent == null) // no referent; must be relative uri
            {
                if (assembly != null)
                    throw new ArgumentException("Cannot specify assembly without specifying referent.");
            }
            else if (referent is LogicalSegment)
            {
                sb.AppendFormat("seg/{0}/", ((LogicalSegment)referent).Id);
            }
            else
            {
                throw new ArgumentException("Unsupported referent type.");
            }

            sb.Append(offset.ToString("X4"));
            return sb.ToString();
        }