diff dwt/dwthelper/utils.d @ 223:d0081b1505da

dwt.dwthelper restructure
author Frank Benoit <benoit@tionex.de>
date Thu, 10 Apr 2008 08:58:40 +0200
parents ba054b4a1c55
children 5366f8db1eda
line wrap: on
line diff
--- a/dwt/dwthelper/utils.d	Wed Apr 09 17:39:05 2008 +0200
+++ b/dwt/dwthelper/utils.d	Thu Apr 10 08:58:40 2008 +0200
@@ -32,8 +32,6 @@
 // alias tango.util.collection.model.Map.Map!(Object,Object) Map;
 // alias tango.util.collection.HashMap.HashMap!(Object,Object) HashMap;
 
-public import dwt.dwthelper.Integer;
-
 alias char[] String;
 alias tango.text.Text.Text!(char) StringBuffer;
 
@@ -742,76 +740,6 @@
 }
 
 
-
-
-// import tango.core.Runtime;
-private uint calcKey( void* key ){
-    uint k = cast(uint)cast(void*)key;
-    k ^= 0x8000_0000;
-    return k;
-}
-
-// private bool collectHandler(Object o){
-//     uint key = calcKey( cast(void*)o );
-//     if( auto p = key in mKeyCollectedNotifiers ){
-//         (*p)( key );
-//         mKeyCollectedNotifiers.remove( key );
-//     }
-//     ClassInfo ci = o.classinfo;
-//     while(ci !is null ){
-//         foreach( i; ci.interfaces ){
-//             uint key = calcKey( cast(void*)o + i.offset );
-//             if( auto p = key in mKeyCollectedNotifiers ){
-//                 (*p)( key );
-//                 mKeyCollectedNotifiers.remove( key );
-//             }
-//         }
-//         ci = ci.base;
-//     }
-//     return true;
-// }
-//
-// static this(){
-//     Runtime.collectHandler( & collectHandler );
-// }
-//
-// void delegate( uint k ) KeyCollectedNotifier;
-// KeyCollectedNotifier[ uint ] mKeyCollectedNotifiers;
-//
-// private synchronized void addKeyCollectedNotifier( uint key, KeyCollectedNotifier del ){
-//     mKeyCollectedNotifiers[ key ] = del;
-// }
-
-class WeakHashMap(K,T) {
-    static assert( is(K==class) || is(K==interface) );
-    T[uint] data;
-
-    private void removeInternalKey( uint key ){
-        data.remove( key );
-    }
-
-    public void add (K key, T element){
-        data[ calcKey(cast(void*)key) ] = element;
-//         addKeyCollectedNotifier( calcKey(key), &removeInternalKey );
-    }
-    public void removeKey (K key){
-        data.remove( calcKey(cast(void*)key) );
-    }
-    public T get(K key){
-        if( auto p = calcKey(cast(void*)key) in data ){
-            return *p;
-        }
-        return null;
-    }
-}
-/+++
-
-import dwt.dwthelper.InputStream;
-InputStream ClassInfoGetResourceAsStream( ClassInfo ci, char[] aName ){
-    implMissing( __FILE__, __LINE__ );
-    return null;
-}
-+++/
 void ExceptionPrintStackTrace( Exception e ){
     ExceptionPrintStackTrace( e, Stderr );
 }
@@ -819,31 +747,6 @@
     print.formatln( "Exception in {}({}): {}", e.file, e.line, e.msg );
 }
 
-bool ArrayEquals(T)( T[] a, T[] b ){
-    if( a.length !is b.length ){
-        return false;
-    }
-    for( int i = 0; i < a.length; i++ ){
-        static if( is( T==class) || is(T==interface)){
-            if( a[i] !is null && b[i] !is null ){
-                if( a[i] != b[i] ){
-                    return false;
-                }
-            }
-            else if( a[i] is null && b[i] is null ){
-            }
-            else{
-                return false;
-            }
-        }
-        else{
-            if( a[i] != b[i] ){
-                return false;
-            }
-        }
-    }
-}
-
 interface Reader{
 }
 interface Writer{
@@ -913,6 +816,31 @@
 }
 
 
+bool ArrayEquals(T)( T[] a, T[] b ){
+    if( a.length !is b.length ){
+        return false;
+    }
+    for( int i = 0; i < a.length; i++ ){
+        static if( is( T==class) || is(T==interface)){
+            if( a[i] !is null && b[i] !is null ){
+                if( a[i] != b[i] ){
+                    return false;
+                }
+            }
+            else if( a[i] is null && b[i] is null ){
+            }
+            else{
+                return false;
+            }
+        }
+        else{
+            if( a[i] != b[i] ){
+                return false;
+            }
+        }
+    }
+}
+
 class Arrays{
     public static bool equals(Object[] a, Object[] b){
         if( a.length !is b.length ){
@@ -941,183 +869,6 @@
     }
     return -1;
 }
-
-/++
- + Decode XML entities into UTF8 string.
- + Eg. "&amp;" -> "&", "&#38;" -> "&", "&#x26;" -> "&"
- + Throws TextException on failure
- + The given string is modified.
- +/
-char[] xmlUnescape( char[] str ){
-
-    void error(){
-        throw new TextException( "xmlUnescape" );
-    }
-    // &lt; ...
-    // &#1234;
-    // &#x12AF;
-    char[] src = str;
-    char[] trg = str;
-    while( src.length ){
-        if( src[0] !is '&' ){
-            trg[0] = src[0];
-            trg = trg[1..$];
-            src = src[1..$];
-        }
-        else{
-            src = src[1..$]; //  go past '&'
-            if( src.length < 2 ) error();
-
-            // search semi
-            int len = Math.min( src.length, 10 ); // limit semi search to possible longest entityname
-            int semi = tango.text.Util.locate( src[0 .. len ], ';' );
-            if( semi is len ) error(); // no semi found
-
-            char[] entityName = src[ 0 .. semi ]; // name without semi
-            dchar entityValue = 0;
-            switch( entityName ){
-                case "lt":   entityValue = '<'; break;
-                case "gt":   entityValue = '>'; break;
-                case "amp":  entityValue = '&'; break;
-                case "quot": entityValue = '\"'; break;
-                case "apos": entityValue = '\''; break;
-                default:
-                    if( entityName[0] is 'x' ){
-                        if( semi < 2 ) error();
-                        if( semi > 9 ) error();
-                        foreach( hex; entityName[1..$] ){
-                            entityValue <<= 4;
-                            if( hex >= '0' && hex <= '9' ){
-                                entityValue |= ( hex - '0' );
-                            }
-                            else if( hex >= 'a' && hex <= 'f' ){
-                                entityValue |= ( hex - 'a' );
-                            }
-                            else if( hex >= 'A' && hex <= 'F' ){
-                                entityValue |= ( hex - 'A' );
-                            }
-                            else{
-                                error();
-                            }
-                        }
-                    }
-                    else{
-                        if( semi < 1 ) error();
-                        if( semi > 9 ) error();
-                        foreach( dec; entityName[1..$] ){
-                            if( dec >= '0' && dec <= '9' ){
-                                entityValue *= 10;
-                                entityValue += ( dec - '0' );
-                            }
-                            else{
-                                error();
-                            }
-                        }
-                    }
-            }
-            dchar[1] arr;
-            arr[0] = entityValue;
-            uint ate = 0;
-            char[] res = tango.text.convert.Utf.toString( arr, trg, &ate );
-            trg = trg[ res.length .. $ ];
-            src = src[ semi +1 .. $ ]; // go past semi
-        }
-    }
-    return str[ 0 .. trg.ptr-str.ptr ];
-}
-
-
-/++
- + Encode XML entities into UTF8 string.
- + First checks if processing is needed.
- + If not, the original string is returned.
- + If processing is needed, a new string is allocated.
- +/
-char[] xmlEscape( char[] xml ){
-    bool needsReplacement( dchar c ){
-        switch( c ){
-            case '<':
-            case '>':
-            case '&':
-            case '\"':
-            case '\'':
-            case '\r':
-            case '\n':
-            case '\u0009':
-                return true;
-            default:
-                return c > 0x7F;
-        }
-    }
-
-    // Check if processing is needed
-    foreach( char c; xml ){
-        if( needsReplacement( c )){
-            goto Lprocess;
-        }
-    }
-    return xml;
-Lprocess:
-
-    // yes, do a new string, start with +20 chars
-    char[] res = new char[ xml.length + 20 ];
-    res.length = 0;
-
-    foreach( dchar c; xml ){
-
-        if( !needsReplacement( c )){
-            res ~= c;
-        }
-        else{
-            res ~= '&';
-            switch( c ){
-                case '<': res ~= "lt"; break;
-                case '>': res ~= "gt"; break;
-                case '&': res ~= "amp"; break;
-                case '\"': res ~= "quot"; break;
-                case '\'': res ~= "apos"; break;
-                case '\r': case '\n': case '\u0009':
-                default:
-                    char toHexDigit( int i ){
-                        if( i < 10 ) return '0'+i;
-                        return 'A'+i-10;
-                    }
-                    res ~= "#x";
-                    if( c <= 0xFF ){
-                        res ~= toHexDigit(( c >> 4 ) & 0x0F );
-                        res ~= toHexDigit(( c >> 0 ) & 0x0F );
-                    }
-                    else if( c <= 0xFFFF ){
-                        res ~= toHexDigit(( c >> 12 ) & 0x0F );
-                        res ~= toHexDigit(( c >> 8 ) & 0x0F );
-                        res ~= toHexDigit(( c >> 4 ) & 0x0F );
-                        res ~= toHexDigit(( c >> 0 ) & 0x0F );
-                    }
-                    else if( c <= 0xFFFFFF ){
-                        res ~= toHexDigit(( c >> 20 ) & 0x0F );
-                        res ~= toHexDigit(( c >> 16 ) & 0x0F );
-                        res ~= toHexDigit(( c >> 12 ) & 0x0F );
-                        res ~= toHexDigit(( c >> 8 ) & 0x0F );
-                        res ~= toHexDigit(( c >> 4 ) & 0x0F );
-                        res ~= toHexDigit(( c >> 0 ) & 0x0F );
-                    }
-                    else {
-                        res ~= toHexDigit(( c >> 28 ) & 0x0F );
-                        res ~= toHexDigit(( c >> 24 ) & 0x0F );
-                        res ~= toHexDigit(( c >> 20 ) & 0x0F );
-                        res ~= toHexDigit(( c >> 16 ) & 0x0F );
-                        res ~= toHexDigit(( c >> 12 ) & 0x0F );
-                        res ~= toHexDigit(( c >> 8 ) & 0x0F );
-                        res ~= toHexDigit(( c >> 4 ) & 0x0F );
-                        res ~= toHexDigit(( c >> 0 ) & 0x0F );
-                    }
-                    break;
-            }
-            res ~= ';';
-        }
-    }
-}
-
 int arrayIndexOf(T)( T[] arr, T v ){
     int res = -1;
     int idx = 0;