Mercurial > projects > dang
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; +}