ExternalAddress.st
author Stefan Vogel <sv@exept.de>
Wed, 20 Aug 1997 10:00:14 +0200
changeset 2872 65617aa665da
parent 2869 6fcc9aafb7c4
child 2877 cc3a4903d692
permissions -rw-r--r--
Fix typo.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
847
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
 COPYRIGHT (c) 1995 by Claus Gittinger
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
	      All Rights Reserved
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
 This software is furnished under a license and may be used
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
 hereby transferred.
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
"
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
Object subclass:#ExternalAddress
1267
e285a3a94d9e commentary
Claus Gittinger <cg@exept.de>
parents: 1133
diff changeset
    14
	instanceVariableNames:'address*'
e285a3a94d9e commentary
Claus Gittinger <cg@exept.de>
parents: 1133
diff changeset
    15
	classVariableNames:''
e285a3a94d9e commentary
Claus Gittinger <cg@exept.de>
parents: 1133
diff changeset
    16
	poolDictionaries:''
e285a3a94d9e commentary
Claus Gittinger <cg@exept.de>
parents: 1133
diff changeset
    17
	category:'System-Support'
847
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
!
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
!ExternalAddress class methodsFor:'documentation'!
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
copyright
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
"
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
 COPYRIGHT (c) 1995 by Claus Gittinger
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
	      All Rights Reserved
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
 This software is furnished under a license and may be used
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
 only in accordance with the terms of that license and with the
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
 inclusion of the above copyright notice.   This software may not
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
 be provided or otherwise made available to, or used by, any
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
 other person.  No title to or ownership of the software is
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
 hereby transferred.
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
"
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
!
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
documentation
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
"
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
    Instances of this class represent external (non-Smalltalk) addresses.
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
    They are only useful to represent handles as returned by C functions
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
    as smalltalk objects. For example, Window- or WidgetIDs (which are actually
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
    32 bit pointers) should be represented this way.
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
    (you should not use SmallIntegers for this, since they can only represent 31
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
     bits; LargeIntegers could be used in theory, but it is not a very good style
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
     to do so, since it makes things a bit cryptic - having ExternalAddresses
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
     around makes things pretty clear in inspectors etc.).
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
    There is not much you can do with ExternalAddresses on the smalltalk level;
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
    creation/use is mostly in primitive C-code via 
1317
cc737e0fdf48 examples
Claus Gittinger <cg@exept.de>
parents: 1286
diff changeset
    49
       __MKEXTERNALADDRESS(voidPtr) and __ExternalAddressVal(obj).
847
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
    ExternallAddresses are much like ExternalBytes - however, the latter
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
    allow you to access bytes via indexed at:/at:put: messages.
1960
0425b66d2226 commentary
Claus Gittinger <cg@exept.de>
parents: 1317
diff changeset
    53
    ExternalAddresses do not allow such accesses (they are meant to remain
847
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
    anonymous).
1286
4270a0b4917d documentation
Claus Gittinger <cg@exept.de>
parents: 1267
diff changeset
    55
4270a0b4917d documentation
Claus Gittinger <cg@exept.de>
parents: 1267
diff changeset
    56
    [author:]
4270a0b4917d documentation
Claus Gittinger <cg@exept.de>
parents: 1267
diff changeset
    57
        Claus Gittinger
1317
cc737e0fdf48 examples
Claus Gittinger <cg@exept.de>
parents: 1286
diff changeset
    58
cc737e0fdf48 examples
Claus Gittinger <cg@exept.de>
parents: 1286
diff changeset
    59
    [see also:]
cc737e0fdf48 examples
Claus Gittinger <cg@exept.de>
parents: 1286
diff changeset
    60
        ByteArray
cc737e0fdf48 examples
Claus Gittinger <cg@exept.de>
parents: 1286
diff changeset
    61
        ExternalBytes ExternalFunction
cc737e0fdf48 examples
Claus Gittinger <cg@exept.de>
parents: 1286
diff changeset
    62
        ( how to write primitive code :html: programming/primitive.html )
847
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
"
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
!
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
examples
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
"
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
    To pass some C-pointer from primitive code to smalltalk:
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
	...
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
	RETURN (__MKEXTERNALADDRESS(foo));
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
    pass it back to C and use it there:
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
	...
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
	if (__isExternalAddress(anExternalAddress)) {
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
	    ptr = __externalAddressVal(anExternalAddress));
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
	}
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
	...
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
    concrete example:
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
	test1
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
	%{
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
	    static char foo[] = {'h', 'e' ,'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '\n'};
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
	    RETURN (__MKEXTERNALADDRESS(foo));
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
	%}
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
	test2:anExternalAddress
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
	%{
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
	    if (__isExternalAddress(anExternalAddress)) {
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
		printf(__externalAddressVal(anExternalAddress));
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
		RETURN (self);
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
	    }
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
	%}
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
"
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
! !
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
!ExternalAddress class methodsFor:'queries'!
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
isBuiltInClass
1267
e285a3a94d9e commentary
Claus Gittinger <cg@exept.de>
parents: 1133
diff changeset
   103
    "return true if this class is known by the run-time-system.
e285a3a94d9e commentary
Claus Gittinger <cg@exept.de>
parents: 1133
diff changeset
   104
     Here, true is returned."
847
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
    ^ true
1267
e285a3a94d9e commentary
Claus Gittinger <cg@exept.de>
parents: 1133
diff changeset
   107
e285a3a94d9e commentary
Claus Gittinger <cg@exept.de>
parents: 1133
diff changeset
   108
    "Modified: 23.4.1996 / 15:57:53 / cg"
847
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
! !
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
!ExternalAddress methodsFor:'accessing'!
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
address
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
    "return the start address as an integer"
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
%{  /* NOCONTEXT */
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
2869
6fcc9aafb7c4 alpha64 stuff
Claus Gittinger <cg@exept.de>
parents: 2472
diff changeset
   118
    unsigned INT addr;
847
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
2872
65617aa665da Fix typo.
Stefan Vogel <sv@exept.de>
parents: 2869
diff changeset
   120
    addr = (unsigned INT )__INST(address_);
847
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
    RETURN ( __MKUINT(addr));
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
%}
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
! !
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
!ExternalAddress methodsFor:'comparing'!
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
= anExternalAddress
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
    "return true, if two externalAddress instance represent the same
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
     C pointer"
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
%{  /* NOCONTEXT */
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
    if (__isExternalAddress(anExternalAddress)
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
     && (__externalAddressVal(self) == __externalAddressVal(anExternalAddress))) {
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
	RETURN (true);
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
    }
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
%}.
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
    ^ false
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
!
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
hash
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
    "return a number useful for hashing"
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
%{  /* NOCONTEXT */
2869
6fcc9aafb7c4 alpha64 stuff
Claus Gittinger <cg@exept.de>
parents: 2472
diff changeset
   144
    unsigned INT addr = (unsigned INT) __externalAddressVal(self);
847
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
2472
00e7a1b3b07f better distribution of the hash-key (look for zero-bits)
Claus Gittinger <cg@exept.de>
parents: 1960
diff changeset
   146
    if (addr > _MAX_INT) {
00e7a1b3b07f better distribution of the hash-key (look for zero-bits)
Claus Gittinger <cg@exept.de>
parents: 1960
diff changeset
   147
	if ((addr & 1) == 0) {
00e7a1b3b07f better distribution of the hash-key (look for zero-bits)
Claus Gittinger <cg@exept.de>
parents: 1960
diff changeset
   148
	    addr >>= 1;
00e7a1b3b07f better distribution of the hash-key (look for zero-bits)
Claus Gittinger <cg@exept.de>
parents: 1960
diff changeset
   149
	}
00e7a1b3b07f better distribution of the hash-key (look for zero-bits)
Claus Gittinger <cg@exept.de>
parents: 1960
diff changeset
   150
	if (addr > _MAX_INT) {
00e7a1b3b07f better distribution of the hash-key (look for zero-bits)
Claus Gittinger <cg@exept.de>
parents: 1960
diff changeset
   151
	    if ((addr & 1) == 0) {
00e7a1b3b07f better distribution of the hash-key (look for zero-bits)
Claus Gittinger <cg@exept.de>
parents: 1960
diff changeset
   152
		addr >>= 1;
00e7a1b3b07f better distribution of the hash-key (look for zero-bits)
Claus Gittinger <cg@exept.de>
parents: 1960
diff changeset
   153
	    }
00e7a1b3b07f better distribution of the hash-key (look for zero-bits)
Claus Gittinger <cg@exept.de>
parents: 1960
diff changeset
   154
	}
00e7a1b3b07f better distribution of the hash-key (look for zero-bits)
Claus Gittinger <cg@exept.de>
parents: 1960
diff changeset
   155
	if (addr > _MAX_INT) {
00e7a1b3b07f better distribution of the hash-key (look for zero-bits)
Claus Gittinger <cg@exept.de>
parents: 1960
diff changeset
   156
	    addr &= _MAX_INT;
00e7a1b3b07f better distribution of the hash-key (look for zero-bits)
Claus Gittinger <cg@exept.de>
parents: 1960
diff changeset
   157
	}
00e7a1b3b07f better distribution of the hash-key (look for zero-bits)
Claus Gittinger <cg@exept.de>
parents: 1960
diff changeset
   158
    } else {
00e7a1b3b07f better distribution of the hash-key (look for zero-bits)
Claus Gittinger <cg@exept.de>
parents: 1960
diff changeset
   159
	addr <<= 1;
00e7a1b3b07f better distribution of the hash-key (look for zero-bits)
Claus Gittinger <cg@exept.de>
parents: 1960
diff changeset
   160
	if (addr <= _MAX_INT) {
00e7a1b3b07f better distribution of the hash-key (look for zero-bits)
Claus Gittinger <cg@exept.de>
parents: 1960
diff changeset
   161
	    addr <<= 1;
00e7a1b3b07f better distribution of the hash-key (look for zero-bits)
Claus Gittinger <cg@exept.de>
parents: 1960
diff changeset
   162
	    if (addr <= _MAX_INT) {
00e7a1b3b07f better distribution of the hash-key (look for zero-bits)
Claus Gittinger <cg@exept.de>
parents: 1960
diff changeset
   163
		addr <<= 1;
00e7a1b3b07f better distribution of the hash-key (look for zero-bits)
Claus Gittinger <cg@exept.de>
parents: 1960
diff changeset
   164
	    }
00e7a1b3b07f better distribution of the hash-key (look for zero-bits)
Claus Gittinger <cg@exept.de>
parents: 1960
diff changeset
   165
	}
00e7a1b3b07f better distribution of the hash-key (look for zero-bits)
Claus Gittinger <cg@exept.de>
parents: 1960
diff changeset
   166
	addr >>= 1;
00e7a1b3b07f better distribution of the hash-key (look for zero-bits)
Claus Gittinger <cg@exept.de>
parents: 1960
diff changeset
   167
    }
00e7a1b3b07f better distribution of the hash-key (look for zero-bits)
Claus Gittinger <cg@exept.de>
parents: 1960
diff changeset
   168
    RETURN (__MKSMALLINT(addr));
847
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
%}
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
! !
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
!ExternalAddress methodsFor:'converting'!
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
asExternalBytes
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
    "return an ExternalBytes object pointing to where the receiver points to.
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
     Use of this is not recommended; primitives which return externalAddresses
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
     dont think that access to the memory is required/useful, while primitives
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
     which do think so should return an externalBytes instance right away."
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
    ^ ExternalBytes address:(self address)
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
! !
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
!ExternalAddress methodsFor:'printing & storing'!
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   184
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   185
displayString
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
    ^ 'ExternalAddress at:' , (self address printStringRadix:16)
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
! !
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
!ExternalAddress class methodsFor:'documentation'!
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   190
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   191
version
2872
65617aa665da Fix typo.
Stefan Vogel <sv@exept.de>
parents: 2869
diff changeset
   192
    ^ '$Header: /cvs/stx/stx/libbasic/ExternalAddress.st,v 1.9 1997-08-20 08:00:14 stefan Exp $'
847
a79ec4e6670d ExternalAddress moved from libbasic2
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   193
! !