[paludis-commits] r4081 - trunk/ruby

rbrown at svn.pioto.org rbrown at svn.pioto.org
Sat Dec 15 23:17:26 UTC 2007


Author: rbrown
Date: 2007-12-15 23:17:25 +0000 (Sat, 15 Dec 2007)
New Revision: 4081

Modified:
   trunk/ruby/metadata_key.cc
   trunk/ruby/repository.cc
Log:
Partial commit


Modified: trunk/ruby/metadata_key.cc
===================================================================
--- trunk/ruby/metadata_key.cc	2007-12-15 21:52:28 UTC (rev 4080)
+++ trunk/ruby/metadata_key.cc	2007-12-15 23:17:25 UTC (rev 4081)
@@ -45,6 +45,7 @@
     static VALUE c_metadata_iuse_flag_set_key;
     static VALUE c_metadata_string_set_key;
     static VALUE c_metadata_package_id_sequence_key;
+    static VALUE c_metadata_fsentry_key;
     static VALUE c_metadata_fsentry_sequence_key;
     static VALUE c_metadata_key_type;
     static VALUE c_metadata_provide_spec_tree_key;
@@ -120,7 +121,8 @@
 
         void visit(const MetadataFSEntryKey &)
         {
-            value = Qnil;
+            value = Data_Wrap_Struct(c_metadata_fsentry_key, 0, &Common<tr1::shared_ptr<const MetadataKey> >::free,
+                    new tr1::shared_ptr<const MetadataKey>(mm));
         }
 
         void visit(const MetadataSectionKey &)
@@ -244,6 +246,14 @@
     }
 
     VALUE
+    metadata_fsentry_key_value(VALUE self)
+    {
+        tr1::shared_ptr<const MetadataKey> * self_ptr;
+        Data_Get_Struct(self, tr1::shared_ptr<const MetadataKey>, self_ptr);
+        return rb_str_new2(stringify((tr1::static_pointer_cast<const MetadataFSEntryKey>(*self_ptr))->value()).c_str());
+    }
+
+    VALUE
     metadata_time_key_value(VALUE self)
     {
         tr1::shared_ptr<const MetadataKey> * self_ptr;
@@ -368,6 +378,14 @@
         rb_define_method(c_metadata_string_key, "value", RUBY_FUNC_CAST(&metadata_string_key_value), 0);
 
         /*
+         * Document-class: Paludis::MetadataFSEntryKey
+         *
+         * Metadata class for FSEntry
+         */
+        c_metadata_fsentry_key = rb_define_class_under(paludis_module(), "MetadataFSEntryKey", c_metadata_key);
+        rb_define_method(c_metadata_fsentry_key, "value", RUBY_FUNC_CAST(&metadata_fsentry_key_value), 0);
+
+        /*
          * Document-class: Paludis::MetadataTimeKey
          *
          * Metadata class for Time

Modified: trunk/ruby/repository.cc
===================================================================
--- trunk/ruby/repository.cc	2007-12-15 21:52:28 UTC (rev 4080)
+++ trunk/ruby/repository.cc	2007-12-15 23:17:25 UTC (rev 4081)
@@ -872,6 +872,18 @@
             return Qnil;
     }
 
+    template <typename T_, const tr1::shared_ptr<const T_> (Repository::* m_) () const>
+    struct RepositoryKey
+    {
+        static VALUE
+        fetch(VALUE self)
+        {
+            tr1::shared_ptr<Repository> * self_ptr;
+            Data_Get_Struct(self, tr1::shared_ptr<Repository>, self_ptr);
+            return metadata_key_to_value(((**self_ptr).*m_)());
+        }
+    };
+
     void do_register_repository()
     {
         /*
@@ -929,6 +941,10 @@
         rb_define_method(c_repository, "check_qa", RUBY_FUNC_CAST(&repository_check_qa),5);
 
         rb_define_method(c_repository, "each_metadata", RUBY_FUNC_CAST(&repository_each_metadata), 0);
+        rb_define_method(c_repository, "format_key",
+                RUBY_FUNC_CAST((&RepositoryKey<MetadataStringKey, &Repository::format_key>::fetch)), 0);
+        rb_define_method(c_repository, "installed_root_key",
+                RUBY_FUNC_CAST((&RepositoryKey<MetadataFSEntryKey, &Repository::installed_root_key>::fetch)), 0);
 
         /*
          * Document-class: Paludis::ProfilesDescLine



More information about the paludis-commits mailing list