too many attrs in D

This commit is contained in:
Adam D. Ruppe 2016-04-04 19:56:40 -04:00
parent 83995e4c01
commit 80815cd04e
1 changed files with 49 additions and 14 deletions

63
color.d
View File

@ -63,19 +63,23 @@ private {
return ret ~ toInternal!string(amt); return ret ~ toInternal!string(amt);
} }
nothrow @safe @nogc pure
real absInternal(real a) { return a < 0 ? -a : a; } real absInternal(real a) { return a < 0 ? -a : a; }
nothrow @safe @nogc pure
real minInternal(real a, real b, real c) { real minInternal(real a, real b, real c) {
auto m = a; auto m = a;
if(b < m) m = b; if(b < m) m = b;
if(c < m) m = c; if(c < m) m = c;
return m; return m;
} }
nothrow @safe @nogc pure
real maxInternal(real a, real b, real c) { real maxInternal(real a, real b, real c) {
auto m = a; auto m = a;
if(b > m) m = b; if(b > m) m = b;
if(c > m) m = c; if(c > m) m = c;
return m; return m;
} }
nothrow @safe @nogc pure
bool startsWithInternal(string a, string b) { bool startsWithInternal(string a, string b) {
return (a.length >= b.length && a[0 .. b.length] == b); return (a.length >= b.length && a[0 .. b.length] == b);
} }
@ -92,6 +96,7 @@ private {
ret ~= a[previous .. $]; ret ~= a[previous .. $];
return ret; return ret;
} }
nothrow @safe @nogc pure
string stripInternal(string s) { string stripInternal(string s) {
foreach(i, char c; s) foreach(i, char c; s)
if(c != ' ' && c != '\t' && c != '\n') { if(c != ' ' && c != '\t' && c != '\n') {
@ -114,9 +119,16 @@ private {
/// Represents an RGBA color /// Represents an RGBA color
struct Color { struct Color {
union { @safe:
ubyte[4] components; /// /++
The color components are available as a static array, individual bytes, and a uint inside this union.
Since it is anonymous, you can use the inner members' names directly.
+/
union {
ubyte[4] components; /// [r, g, b, a]
/// Holder for rgba individual components.
struct { struct {
ubyte r; /// red ubyte r; /// red
ubyte g; /// green ubyte g; /// green
@ -124,10 +136,13 @@ struct Color {
ubyte a; /// alpha. 255 == opaque ubyte a; /// alpha. 255 == opaque
} }
uint asUint; /// uint asUint; /// The components as a single 32 bit value (beware of endian issues!)
} }
// this makes sure they are in range before casting /++
Like the constructor, but this makes sure they are in range before casting. If they are out of range, it saturates: anything less than zero becomes zero and anything greater than 255 becomes 255.
+/
nothrow pure
static Color fromIntegers(int red, int green, int blue, int alpha = 255) { static Color fromIntegers(int red, int green, int blue, int alpha = 255) {
if(red < 0) red = 0; if(red > 255) red = 255; if(red < 0) red = 0; if(red > 255) red = 255;
if(green < 0) green = 0; if(green > 255) green = 255; if(green < 0) green = 0; if(green > 255) green = 255;
@ -136,7 +151,8 @@ struct Color {
return Color(red, green, blue, alpha); return Color(red, green, blue, alpha);
} }
/// . /// Construct a color with the given values. They should be in range 0 <= x <= 255, where 255 is maximum intensity and 0 is minimum intensity.
nothrow pure @nogc
this(int red, int green, int blue, int alpha = 255) { this(int red, int green, int blue, int alpha = 255) {
// workaround dmd bug 10937 // workaround dmd bug 10937
if(__ctfe) if(__ctfe)
@ -148,16 +164,33 @@ struct Color {
this.a = cast(ubyte) alpha; this.a = cast(ubyte) alpha;
} }
/// Convenience functions for common color names /// Static convenience functions for common color names
nothrow pure @nogc
static Color transparent() { return Color(0, 0, 0, 0); } static Color transparent() { return Color(0, 0, 0, 0); }
static Color white() { return Color(255, 255, 255); } ///. /// Ditto
static Color black() { return Color(0, 0, 0); } ///. nothrow pure @nogc
static Color red() { return Color(255, 0, 0); } ///. static Color white() { return Color(255, 255, 255); }
static Color green() { return Color(0, 255, 0); } ///. /// Ditto
static Color blue() { return Color(0, 0, 255); } ///. nothrow pure @nogc
static Color yellow() { return Color(255, 255, 0); } ///. static Color black() { return Color(0, 0, 0); }
static Color teal() { return Color(0, 255, 255); } ///. /// Ditto
static Color purple() { return Color(255, 0, 255); } ///. nothrow pure @nogc
static Color red() { return Color(255, 0, 0); }
/// Ditto
nothrow pure @nogc
static Color green() { return Color(0, 255, 0); }
/// Ditto
nothrow pure @nogc
static Color blue() { return Color(0, 0, 255); }
/// Ditto
nothrow pure @nogc
static Color yellow() { return Color(255, 255, 0); }
/// Ditto
nothrow pure @nogc
static Color teal() { return Color(0, 255, 255); }
/// Ditto
nothrow pure @nogc
static Color purple() { return Color(255, 0, 255); }
/* /*
ubyte[4] toRgbaArray() { ubyte[4] toRgbaArray() {
@ -302,6 +335,7 @@ struct Color {
} }
} }
nothrow @safe
private string toHexInternal(ubyte b) { private string toHexInternal(ubyte b) {
string s; string s;
if(b < 16) if(b < 16)
@ -322,6 +356,7 @@ private string toHexInternal(ubyte b) {
return s; return s;
} }
nothrow @safe @nogc pure
private ubyte fromHexInternal(string s) { private ubyte fromHexInternal(string s) {
int result = 0; int result = 0;