public ModuleInfo(Assembly _asm)
        {
            _name = _asm.GetName().Name;
            _version = DepVersion.VersionParse (_asm.GetName().Version.ToString ());

            ModuleDependencyAttribute _depAttr = ((ModuleDependencyAttribute)(_asm.GetCustomAttributes (typeof (ModuleDependencyAttribute), false)[0]));

            if (_depAttr != null) {
                DepLexer _lexer = new DepLexer (new StringReader (_depAttr.DepString));
                DepParser _parser = new DepParser (_lexer);

                // woot...lets do this!
                _dependencies = new DepNode ();

                _parser.expr (_dependencies);
            } else
                _dependencies = null;

            ModuleRoleAttribute _roleAttr = ((ModuleRoleAttribute)(_asm.GetCustomAttributes (typeof (ModuleRoleAttribute), false)[0]));

            if (_roleAttr != null) {
                _roles = _roleAttr.Roles;
            } else
                throw new ModuleInfoException (string.Format ("The module {0} has no defined roles, and is not a valid NModule module.", _asm.GetName ().Name));

            _owner = _asm;
        }
        protected bool IsEmptyVersion(DepVersion _ver)
        {
            if (_ver == null)
                return true;

            return ((_ver.Major == -1) && (_ver.Minor == -1) && (_ver.Build == -1) && (_ver.Revision == -1));
        }
        public ModuleInfo(Assembly _asm)
        {
            _name = _asm.GetName().Name;
            _version = DepVersion.VersionParse (_asm.GetName().Version.ToString ());

            ModuleDependencyAttribute _depAttr;
            ModuleRoleAttribute _roleAttr;

            try {
                _depAttr = ((ModuleDependencyAttribute)(_asm.GetCustomAttributes (typeof (ModuleDependencyAttribute), false)[0]));
            } catch (IndexOutOfRangeException) {
                _depAttr = null;
            }

            if (_depAttr != null) {
                DepLexer _lexer = new DepLexer (new StringReader (_depAttr.DepString));
                DepParser _parser = new DepParser (_lexer);

                // woot...lets do this!
                _dependencies = new DepNode ();

                _parser.expr (_dependencies);

                Console.WriteLine ("Dependency tree for {0}", _name);
                Console.WriteLine ("This should match {0}", _depAttr.DepString);
                Console.WriteLine ("----------------------------------------------------");
                PrintDepTree (_dependencies, 0);
                Console.WriteLine ("----------------------------------------------------");
                _depstring = _depAttr.DepString;
            } else
                _dependencies = null;

            try {
                _roleAttr = ((ModuleRoleAttribute)(_asm.GetCustomAttributes (typeof (ModuleRoleAttribute), false)[0]));
            } catch (IndexOutOfRangeException) {
                _roleAttr = null;
            }

            if (_roleAttr != null) {
                _roles = _roleAttr.Roles;
            } else
                throw new ModuleInfoException (string.Format ("The module {0} has no defined roles, and is not a valid NModule module.", _asm.GetName ().Name));

            _owner = _asm;
        }
 public static DepVersion VersionParse(string v)
 {
     // Here we go :)
     DepVersion ver = new DepVersion ();
     string[] vparts = v.Split ('.');
     ver.Major = Int32.Parse (vparts[0]);
     ver.Minor = Int32.Parse (vparts[1]);
     if (vparts.Length > 2)
         ver.Build = Int32.Parse(vparts[2]);
     if (vparts.Length > 3)
         ver.Revision = Int32.Parse(vparts[3]);
     return ver;
 }
        protected bool VersionMatch(DepVersion _ver, DepVersion _dver, DepOps _op)
        {
            Version _mver, _drver;

            if (_dver.Major == -1)
                return true;

            _mver = new Version (_dver.Major != -1 ? _ver.Major : 0,
                _dver.Minor != -1 ? _ver.Minor : 0,
                _dver.Build != -1 ? _ver.Build : 0,
                _dver.Revision != -1 ? _ver.Revision : 0);

            _drver = new Version (_dver.Major != -1 ? _dver.Major : 0,
                _dver.Minor != -1 ? _dver.Minor : 0,
                _dver.Build != -1 ? _dver.Build : 0,
                _dver.Revision != -1 ? _dver.Revision : 0);

            int vres = _mver.CompareTo (_drver);

            switch (_op) {
                case DepOps.Equal:
                    return vres == 0;
                case DepOps.GreaterThan:
                    return vres > 0;
                case DepOps.GreaterThanEqual:
                    return vres > 0 || vres == 0;
                case DepOps.LessThan:
                    return vres < 0;
                case DepOps.LessThanEqual:
                    return vres < 0 || vres == 0;
                case DepOps.NotEqual:
                    return vres != 0;
            }

            return false;
        }
 /// <summary>
 /// Sets the version based on a string representation of it.
 /// </summary>
 /// <remarks>None.</remarks>
 public void SetVersion(string _ver)
 {
     _version = DepVersion.VersionParse (_ver);
 }
 /// <summary>
 /// Creates a new DepConstraint object.
 /// </summary>
 /// <remarks>None.</remarks>
 public DepConstraint()
 {
     _name = "";
     _version = new DepVersion (-1, -1, -1, -1);
 }
 protected bool IsEmptyVersion(DepVersion _ver)
 {
     return ((_ver.Major == -1) && (_ver.Minor == -1) && (_ver.Build == -1) && (_ver.Revision == -1));
 }
        protected bool VersionMatch(DepVersion _dver, DepVersion _ver, DepOps _op)
        {
            bool mjgt = false, mngt = false, bgt = false, rgt = false;
            bool mjeq = false, mneq = false, beq = false, req = false;
            bool mjlt = false, mnlt = false, blt = false, rlt = false;
            bool mji = false, mni = false, bi = false, ri = false;

            if (_dver.Major == -1) {
                mji = true;
            } else if (_dver.Major > _ver.Major) {
                mjgt = true;
            } else if (_dver.Major == _ver.Major) {
                mjeq = true;
            } else {
                mjlt = true;
            }

            if (_dver.Minor == -1) {
                mni = true;
            } else if (_dver.Minor > _ver.Minor) {
                mngt = true;
            } else if (_dver.Minor == _ver.Minor) {
                mneq = true;
            } else {
                mnlt = true;
            }

            if (_dver.Build == -1) {
                bi = true;
            } else if (_dver.Build > _ver.Build) {
                bgt = true;
            } else if (_dver.Build == _ver.Build) {
                beq = true;
            } else {
                blt = true;
            }

            if (_dver.Revision == -1) {
                ri = true;
            } else if (_dver.Revision > _ver.Revision) {
                rgt = true;
            } else if (_dver.Revision == _ver.Revision) {
                req = true;
            } else {
                rlt = true;
            }

            if (mji)
                return true;

            if ((_op == DepOps.Equal) || (_op == DepOps.GreaterThanEqual) || (_op == DepOps.LessThanEqual)) {
                    if (mjeq && mni)
                        return true;

                    if (mjeq && mneq && bi)
                        return true;

                    if (mjeq && mneq && beq && ri)
                        return true;

                    if (mjeq && mneq && beq && req)
                        return true;
            }

            if (_op == DepOps.NotEqual) {
                if (!mjeq && mni)
                    return true;

                if (!mjeq && !mneq && bi)
                    return true;

                if (!mjeq && !mneq && !beq && ri)
                    return true;

                if (!mjeq && !mneq && !beq && !req)
                    return true;
            }

            if (_op == DepOps.GreaterThan) {
                if (mjlt)
                    return false;

                if (mjgt)
                    return true;

                if (mjeq && mnlt)
                    return false;

                if (mngt)
                    return true;

                if (mjeq && mneq && blt)
                    return false;

                if (bgt)
                    return true;

                if (mjeq && mneq && beq && rlt)
                    return false;

                if (rgt)
                    return true;
            }

            if (_op == DepOps.LessThan) {
                if (mjgt)
                    return false;

                if (mjlt)
                    return true;

                if (mjeq && mngt)
                    return false;

                if (mnlt)
                    return true;

                if (mjeq && mneq && bgt)
                    return false;

                if (blt)
                    return true;

                if (mjeq && mneq && beq && rgt)
                    return false;

                if (rlt)
                    return true;
            }

            if (_op == DepOps.Loaded)
                return true;

            return false;
        }
        /// <summary>
        /// Creates a new ModuleInfo belonging to the given assembly.
        /// </summary>
        /// <remarks>None.</remarks>
        /// <param name="_asm">The owning assembly.</param>
        public ModuleInfo(Assembly _asm)
        {
            _name = _asm.GetName ().Name;
            _version = DepVersion.VersionParse (_asm.GetName().Version.ToString ());

            ModuleDependencyAttribute _depAttr;
            ModuleRoleAttribute _roleAttr;

            try {
                _depAttr = ((ModuleDependencyAttribute)(_asm.GetCustomAttributes (typeof (ModuleDependencyAttribute), false)[0]));
            } catch (IndexOutOfRangeException) {
                _depAttr = null;
            }

            if (_depAttr != null) {
                DepLexer _lexer = new DepLexer (new StringReader (_depAttr.DepString));
                DepParser _parser = new DepParser (_lexer);

                // woot...lets do this!
                _dependencies = new DepNode ();

                _parser.expr (_dependencies);
            } else
                _dependencies = null;

            try {
                _roleAttr = ((ModuleRoleAttribute)(_asm.GetCustomAttributes (typeof (ModuleRoleAttribute), false)[0]));
            } catch (IndexOutOfRangeException) {
                _roleAttr = null;
            }

            if (_roleAttr != null) {
                _roles = _roleAttr.Roles;
            } else
                _roles = null;

            _owner = _asm;
        }