]> git.mxchange.org Git - simgear.git/blobdiff - simgear/package/Package.hxx
Package: support for variants
[simgear.git] / simgear / package / Package.hxx
index fe0894e13732c2af2270fbd75d8a6468c1e34ed4..2c2ce556c350ddf45688852e20b72a4de4a75a16 100644 (file)
@@ -24,6 +24,9 @@
 #include <simgear/props/props.hxx>
 #include <simgear/misc/strutils.hxx>
 
+#include <simgear/structure/SGReferenced.hxx>
+#include <simgear/structure/SGSharedPtr.hxx>
+
 typedef std::set<std::string> string_set;
 
 namespace simgear
@@ -36,21 +39,49 @@ namespace pkg
 class Install;
 class Catalog;
 class Package;
+  
+typedef SGSharedPtr<Package> PackageRef;
+typedef SGSharedPtr<Catalog> CatalogRef;
+typedef SGSharedPtr<Install> InstallRef;
 
-typedef std::vector<Package*> PackageList;
+typedef std::vector<PackageRef> PackageList;
     
-class Package
+  class Package : public SGReferenced
 {
 public:
     /**
      * get or create an install for the package
      */
-    Install* install();
-    
+    InstallRef install();
+
+    InstallRef existingInstall() const;
+
     bool isInstalled() const;
     
     std::string id() const;
+
+    /**
+     * Variant IDs. Note the primary ID will always be included as 
+     * variants()[0], to simplify enumerating all variants
+     */
+    string_list variants() const;
+
+    /**
+     * Fully-qualified ID, including our catalog'd ID
+     */
+    std::string qualifiedId() const;
     
+    /**
+     * human-readable name - note this is probably not localised,
+     * although this is not ruled out for the future.
+     */
+    std::string name() const;
+
+    /**
+     * Human readable name of a variant
+     */
+    std::string nameForVariant(const std::string& vid) const;
+
     /**
      * syntactic sugar to get the localised description
      */
@@ -69,8 +100,10 @@ public:
     std::string getLocalisedProp(const std::string& aName) const;
 
     unsigned int revision() const;
-    
-    Catalog* catalog() const
+  
+    size_t fileSizeBytes() const;
+  
+    CatalogRef catalog() const
         { return m_catalog; }
     
     bool matches(const SGPropertyNode* aFilter) const;
@@ -89,17 +122,22 @@ public:
      */
     PackageList dependencies() const;
 private:
+    SGPath pathOnDisk() const;
+
     friend class Catalog;
     
-    Package(const SGPropertyNode* aProps, Catalog* aCatalog);
+    Package(const SGPropertyNode* aProps, CatalogRef aCatalog);
     
     void initWithProps(const SGPropertyNode* aProps);
-    
+
+    void updateFromProps(const SGPropertyNode* aProps);
+
     std::string getLocalisedString(const SGPropertyNode* aRoot, const char* aName) const;
     
     SGPropertyNode_ptr m_props;
+    std::string m_id;
     string_set m_tags;
-    Catalog* m_catalog;
+    CatalogRef m_catalog;
 };