Join with aliencode
[ntk/apt.git] / apt-pkg / version.h
index ba7eb59..27e8e1f 100644 (file)
@@ -1,16 +1,22 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: version.h,v 1.4 1998/07/19 21:24:19 jgg Exp $
+// $Id: version.h,v 1.6 2001/02/20 07:03:17 jgg Exp $
 /* ######################################################################
 
-   Version - Version comparison routines
+   Version - Versioning system..
+
+   The versioning system represents how versions are compared, represented
+   and how dependencies are evaluated. As a general rule versioning
+   systems are not compatible unless specifically allowed by the 
+   TestCompatibility query.
    
-   These routines provide some means to compare versions and check
-   dependencies.
+   The versions are stored in a global list of versions, but that is just
+   so that they can be queried when someone does 'apt-get -v'. 
+   pkgSystem provides the proper means to access the VS for the active
+   system.
    
    ##################################################################### */
                                                                        /*}}}*/
-// Header section: pkglib
 #ifndef PKGLIB_VERSION_H
 #define PKGLIB_VERSION_H
 
 
 #include <string>
 
-int pkgVersionCompare(const char *A, const char *B);
-int pkgVersionCompare(const char *A, const char *AEnd, const char *B, 
-                  const char *BEnd);
-int pkgVersionCompare(string A,string B);
-bool pkgCheckDep(const char *DepVer,const char *PkgVer,int Op);
+class pkgVersioningSystem
+{
+   public:
+   // Global list of VS's
+   static pkgVersioningSystem **GlobalList;
+   static unsigned long GlobalListLen;
+   static pkgVersioningSystem *GetVS(const char *Label);
+   
+   const char *Label;
+   
+   // Compare versions..
+   virtual int DoCmpVersion(const char *A,const char *Aend,
+                         const char *B,const char *Bend) = 0;   
+   virtual bool CheckDep(const char *PkgVer,int Op,const char *DepVer) = 0;
+   virtual int DoCmpReleaseVer(const char *A,const char *Aend,
+                              const char *B,const char *Bend) = 0;
+   virtual string UpstreamVersion(const char *A) = 0;
+   
+   // See if the given VS is compatible with this one.. 
+   virtual bool TestCompatibility(pkgVersioningSystem const &Against) 
+                {return this == &Against;};
+
+   // Shortcuts
+   inline int CmpVersion(const char *A, const char *B)
+   {
+      return DoCmpVersion(A,A+strlen(A),B,B+strlen(B));
+   };
+   inline int CmpVersion(string A,string B)
+   {
+      return DoCmpVersion(A.begin(),A.end(),B.begin(),B.end());
+   };  
+   inline int CmpReleaseVer(const char *A, const char *B)
+   {
+      return DoCmpReleaseVer(A,A+strlen(A),B,B+strlen(B));
+   };
+   inline int CmpReleaseVer(string A,string B)
+   {
+      return DoCmpReleaseVer(A.begin(),A.end(),B.begin(),B.end());
+   };  
+   
+   pkgVersioningSystem();
+   virtual ~pkgVersioningSystem() {};
+};
+
+#ifdef APT_COMPATIBILITY
+#include <apt-pkg/debversion.h>
+#endif
 
 #endif