annotate dwt/dwthelper/utils.d @ 78:b00303c762ac

successfully linked
author Frank Benoit <benoit@tionex.de>
date Tue, 05 Feb 2008 20:28:19 +0100
parents 66203354c9d3
children 67d24430822a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
1 /**
0
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
2 * Authors: Frank Benoit <keinfarbton@googlemail.com>
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
3 */
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
4 module dwt.dwthelper.utils;
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
5
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
6 public import dwt.dwthelper.System;
15
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
7 public import Math = tango.math.Math;
0
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
8
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
9 import tango.io.Stdout;
15
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
10 import tango.stdc.stringz;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
11 import tango.text.Util;
0
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
12 import tango.text.Unicode;
15
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
13 import tango.text.convert.Utf;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
14 import tango.core.Exception;
0
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
15 import tango.stdc.stdlib : exit;
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
16
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
17 void implMissing( char[] file, uint line ){
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
18 Stderr.formatln( "implementation missing in file {} line {}", file, line );
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
19 Stderr.formatln( "exiting ..." );
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
20 exit(1);
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
21 }
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
22
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
23 abstract class ArrayWrapper{
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
24 }
33
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents: 30
diff changeset
25 abstract class ValueWrapper{
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents: 30
diff changeset
26 }
0
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
27
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
28 class ArrayWrapperT(T) : ArrayWrapper {
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
29 public T[] array;
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
30 public this( T[] data ){
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
31 array = data;
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
32 }
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
33 }
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
34
33
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents: 30
diff changeset
35 class ValueWrapperT(T) : ValueWrapper {
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents: 30
diff changeset
36 public T value;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents: 30
diff changeset
37 public this( T data ){
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents: 30
diff changeset
38 value = data;
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents: 30
diff changeset
39 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents: 30
diff changeset
40 }
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents: 30
diff changeset
41
39a9959ef14d Display + ImageList
Frank Benoit <benoit@tionex.de>
parents: 30
diff changeset
42 alias ValueWrapperT!(bool) ValueWrapperBool;
0
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
43 alias ArrayWrapperT!(byte) ArrayWrapperByte;
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
44 alias ArrayWrapperT!(int) ArrayWrapperInt;
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
45 alias ArrayWrapperT!(Object) ArrayWrapperObject;
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
46 alias ArrayWrapperT!(char) ArrayWrapperString;
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
47 alias ArrayWrapperT!(char[]) ArrayWrapperString2;
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
48
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
49 dchar getFirstCodepoint( char[] str ){
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
50 foreach( dchar d; str ){
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
51 return d;
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
52 }
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
53 }
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
54 dchar CharacterToLower( dchar c ){
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
55 dchar[] r = tango.text.Unicode.toLower( [c] );
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
56 return r[0];
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
57 }
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
58 dchar CharacterToUpper( dchar c ){
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
59 dchar[] r = tango.text.Unicode.toUpper( [c] );
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
60 return r[0];
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
61 }
52
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
62 bool CharacterIsWhitespace( dchar c ){
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
63 return tango.text.Unicode.isWhitespace( c );
Frank Benoit <benoit@tionex.de>
parents: 40
diff changeset
64 }
65
66203354c9d3 Spinner
Frank Benoit <benoit@tionex.de>
parents: 57
diff changeset
65 bool CharacterIsDigit( dchar c ){
66203354c9d3 Spinner
Frank Benoit <benoit@tionex.de>
parents: 57
diff changeset
66 return tango.text.Unicode.isDigit( c );
66203354c9d3 Spinner
Frank Benoit <benoit@tionex.de>
parents: 57
diff changeset
67 }
0
5406a8f6526d Add initial files
John Reimer <terminal.node@gmail.com
parents:
diff changeset
68
15
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
69 public int indexOf( char[] str, char searched ){
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
70 int res = tango.text.Util.locate( str, searched );
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
71 if( res is str.length ) res = -1;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
72 return res;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
73 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
74
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
75 public int indexOf( char[] str, char searched, int startpos ){
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
76 int res = tango.text.Util.locate( str, searched, startpos );
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
77 if( res is str.length ) res = -1;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
78 return res;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
79 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
80
65
66203354c9d3 Spinner
Frank Benoit <benoit@tionex.de>
parents: 57
diff changeset
81 public int indexOf(char[] str, char[] ch){
66203354c9d3 Spinner
Frank Benoit <benoit@tionex.de>
parents: 57
diff changeset
82 return indexOf( str, ch, 0 );
66203354c9d3 Spinner
Frank Benoit <benoit@tionex.de>
parents: 57
diff changeset
83 }
66203354c9d3 Spinner
Frank Benoit <benoit@tionex.de>
parents: 57
diff changeset
84
15
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
85 public int indexOf(char[] str, char[] ch, int start){
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
86 int res = tango.text.Util.locatePattern( str, ch, start );
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
87 if( res is str.length ) res = -1;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
88 return res;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
89 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
90
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
91 public char[] substring( char[] str, int start ){
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
92 return str[ start .. $ ].dup;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
93 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
94
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
95 public char[] substring( char[] str, int start, int end ){
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
96 return str[ start .. end ].dup;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
97 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
98
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
99 public wchar[] substring( wchar[] str, int start ){
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
100 return str[ start .. $ ].dup;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
101 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
102
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
103 public wchar[] substring( wchar[] str, int start, int end ){
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
104 return str[ start .. end ].dup;
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
105 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
106
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
107 public char charAt( char[] str, int pos ){
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
108 return str[ pos ];
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
109 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
110
22
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
111 public void getChars( char[] src, int srcBegin, int srcEnd, char[] dst, int dstBegin){
23
f5482da87ed8 Image, ImageData
Frank Benoit <benoit@tionex.de>
parents: 22
diff changeset
112 dst[ dstBegin .. dstBegin + srcEnd - srcBegin ] = src[ srcBegin .. srcEnd ];
22
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
113 }
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
114
28
Frank Benoit <benoit@tionex.de>
parents: 23
diff changeset
115 public wchar[] toCharArray( char[] str ){
30
1e14cb29290a TextLayout
Frank Benoit <benoit@tionex.de>
parents: 28
diff changeset
116 return toString16( str );
28
Frank Benoit <benoit@tionex.de>
parents: 23
diff changeset
117 }
Frank Benoit <benoit@tionex.de>
parents: 23
diff changeset
118
22
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
119 public bool endsWith( char[] src, char[] pattern ){
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
120 if( src.length < pattern.length ){
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
121 return false;
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
122 }
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
123 return src[ $-pattern.length .. $ ] == pattern;
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
124 }
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
125
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
126 public char[] toLowerCase( char[] src ){
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
127 return tango.text.Unicode.toLower( src );
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
128 }
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
129
15
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
130 static char[] toHex(uint value, bool prefix = true, int radix = 8){
22
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
131 return tango.text.convert.Integer.toString(
5f2e72114476 Image in work, this revision does not compile
Frank Benoit <benoit@tionex.de>
parents: 15
diff changeset
132 value,
15
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
133 radix is 10 ? tango.text.convert.Integer.Style.Signed :
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
134 radix is 8 ? tango.text.convert.Integer.Style.Octal :
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
135 radix is 16 ? tango.text.convert.Integer.Style.Hex :
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
136 tango.text.convert.Integer.Style.Signed,
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
137 prefix ? tango.text.convert.Integer.Flags.Prefix : tango.text.convert.Integer.Flags.None
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
138 );
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
139 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
140
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
141 class NumberFormatException : IllegalArgumentException {
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
142 this( char[] e ){
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
143 super(e);
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
144 }
57
41dbc4d9faab Update to tango trunk -r3152. Thanks DavidLeon for the adjustment of TracedException to Exception and creating the patch.
Frank Benoit <benoit@tionex.de>
parents: 52
diff changeset
145 this( Exception e ){
15
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
146 super(e.toString);
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
147 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
148 }
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
149
40
Frank Benoit <benoit@tionex.de>
parents: 33
diff changeset
150 struct GCStats {
Frank Benoit <benoit@tionex.de>
parents: 33
diff changeset
151 size_t poolsize; // total size of pool
Frank Benoit <benoit@tionex.de>
parents: 33
diff changeset
152 size_t usedsize; // bytes allocated
Frank Benoit <benoit@tionex.de>
parents: 33
diff changeset
153 size_t freeblocks; // number of blocks marked FREE
Frank Benoit <benoit@tionex.de>
parents: 33
diff changeset
154 size_t freelistsize; // total of memory on free lists
Frank Benoit <benoit@tionex.de>
parents: 33
diff changeset
155 size_t pageblocks; // number of blocks marked PAGE
Frank Benoit <benoit@tionex.de>
parents: 33
diff changeset
156 }
78
b00303c762ac successfully linked
Frank Benoit <benoit@tionex.de>
parents: 65
diff changeset
157 extern(C) GCStats gc_stats();
40
Frank Benoit <benoit@tionex.de>
parents: 33
diff changeset
158 size_t RuntimeTotalMemory(){
Frank Benoit <benoit@tionex.de>
parents: 33
diff changeset
159 GCStats s = gc_stats();
Frank Benoit <benoit@tionex.de>
parents: 33
diff changeset
160 return s.poolsize;
Frank Benoit <benoit@tionex.de>
parents: 33
diff changeset
161 }
15
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
162
78
b00303c762ac successfully linked
Frank Benoit <benoit@tionex.de>
parents: 65
diff changeset
163 }
15
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
164
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
165
1bea9f0c6f63 FontData, Font
Frank Benoit <benoit@tionex.de>
parents: 0
diff changeset
166