diff src/basic/Attribute.d @ 207:e0551773a005

Added the correct version.
author Anders Johnsen <skabet@gmail.com>
date Tue, 12 Aug 2008 18:19:34 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/basic/Attribute.d	Tue Aug 12 18:19:34 2008 +0200
@@ -0,0 +1,128 @@
+module basic.Attribute;
+
+import tango.core.BitManip;
+import Integer = tango.text.convert.Integer;
+
+import tango.io.Stdout;
+
+enum Protection : uint
+{
+    Private   = 1<<0,
+    Public    = 1<<1,
+    Package   = 1<<2,
+    Protected = 1<<3,
+    Export    = 1<<4,
+}
+
+enum Extern : uint
+{
+    C         = 1<<12,
+    CPlusPlus = 1<<13,
+    D         = 1<<14,
+    Windows   = 1<<15,
+    Pascal    = 1<<16,
+    System    = 1<<17,
+}
+
+struct Attribute
+{
+
+    void setProtection(Protection p)
+    {
+        att &= 0xFFFFFFE0;
+        att |= p;
+    }
+
+    Protection getProtection()
+    {
+        Protection p = Protection.Public;
+        switch(bsf(0xF0000000 | att))
+        {
+            case 0:
+                p = Protection.Private;
+                break;
+            case 1:
+                p = Protection.Public;
+                break;
+            case 2:
+                p = Protection.Package;
+                break;
+            case 3:
+                p = Protection.Protected;
+                break;
+            case 4:
+                p = Protection.Export;
+                break;
+            default:
+                break;
+        }
+        return p;
+    }
+
+    void setExtern(Extern e)    
+    { 
+        att &= 0xFF7C0FFF;
+        att |= e; 
+    }
+
+    Extern getExtern()
+    {
+        Extern e = Extern.D;
+        switch(bsf(0xF0000000 | att >> 12))
+        {
+            case 0:
+                e = Extern.C;
+                break;
+            case 1:
+                e = Extern.CPlusPlus;
+                break;
+            case 2:
+                e = Extern.D;
+                break;
+            case 3:
+                e = Extern.Windows;
+                break;
+            case 4:
+                e = Extern.Pascal;
+                break;
+            case 5:
+                e = Extern.System;
+                break;
+            default:
+                break;
+        }
+        return e;
+    }
+
+    void setStatic()    { att |= Static; }
+    bool getStatic()    { return att & Static ? true : false; }
+    void setFinal()     { att |= Final; }
+    bool getFinal()     { return att & Final ? true : false; }
+    void setConst()     { att |= Const; }
+    bool getConst()     { return att & Const ? true : false; }
+    void setAbstract()  { att |= Abstract; }
+    bool getAbstract()  { return att & Abstract ? true : false; }
+    void setOverride()  { att |= Override; }
+    bool getOverride()  { return att & Override ? true : false; }
+    void setDeprecated(){ att |= Deprecated; }
+    bool getDeprecated(){ return att & Deprecated ? true : false; }
+    void setAuto()      { att |= Auto; }
+    bool getAuto()      { return att & Auto ? true : false; }
+
+    char[] toString()
+    {
+        return Integer.toString(att);
+    }
+
+private:
+    uint att;
+
+
+    static const uint Static        = 1<<5;
+    static const uint Final         = 1<<6;
+    static const uint Const         = 1<<7;
+    static const uint Abstract      = 1<<8;
+    static const uint Override      = 1<<9;
+    static const uint Deprecated    = 1<<10;
+    static const uint Auto          = 1<<11;
+}