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