Memory layout of a data structure: Difference between revisions
Content added Content deleted
m (<lang>) |
|||
Line 37: | Line 37: | ||
=={{header|Ada}}== |
=={{header|Ada}}== |
||
<lang ada> |
|||
type Bit is mod 2; |
|||
type Bit is mod 2; |
|||
⚫ | |||
⚫ | |||
Carrier_Detect : Bit; |
|||
Received_Data : Bit; |
|||
Transmitted_Data : Bit; |
|||
Data_Terminal_ready : Bit; |
|||
Signal_Ground : Bit; |
|||
Data_Set_Ready : Bit; |
|||
Request_To_Send : Bit; |
|||
Clear_To_Send : Bit; |
|||
⚫ | |||
end record; |
|||
⚫ | |||
for Rs_232_Layout use record |
|||
⚫ | |||
Carrier_Detect at 0 range 0..0; |
|||
Received_Data at 0 range 1..1; |
|||
Transmitted_Data at 0 range 2..2; |
|||
Data_Terminal_Ready at 0 range 3..3; |
|||
Signal_Ground at 0 range 4..4; |
|||
Data_Set_Ready at 0 range 5..5; |
|||
Request_To_Send at 0 range 6..6; |
|||
Clear_To_Send at 0 range 7..7; |
|||
⚫ | |||
end record; |
|||
</lang> |
|||
=={{header|C}}/{{header|C++}}== |
=={{header|C}}/{{header|C++}}== |
||
Note: The order of the fields is implementation-defined (i.e. the first bit might be the least-significant one or the most-significant one). On GCC and MSVC++, the first bit is the least-significant one. |
Note: The order of the fields is implementation-defined (i.e. the first bit might be the least-significant one or the most-significant one). On GCC and MSVC++, the first bit is the least-significant one. |
||
<lang c> |
|||
struct RS232_data |
|||
{ |
|||
⚫ | |||
unsigned carrier_detect : 1; |
|||
unsigned received_data : 1; |
|||
unsigned transmitted_data : 1; |
|||
unsigned data_terminal_ready : 1; |
|||
unsigned signal_ground : 1; |
|||
unsigned data_set_ready : 1; |
|||
unsigned request_to_send : 1; |
|||
unsigned clear_to_send : 1; |
|||
⚫ | |||
}; |
|||
</lang> |
|||
The ":1" gives the number of allocated bits. For unused bits (e.g. pin 11 in the 25-pin version above) the field name can be omitted. |
The ":1" gives the number of allocated bits. For unused bits (e.g. pin 11 in the 25-pin version above) the field name can be omitted. |
||
Line 116: | Line 120: | ||
=={{header|OCaml}}== |
=={{header|OCaml}}== |
||
<ocaml> |
<lang ocaml> |
||
open ExtLib |
|||
class rs232_data = object |
class rs232_data = object |
||
val d = BitSet.create 9 |
val d = BitSet.create 9 |
||
Line 140: | Line 145: | ||
method set_ring_indicator b = (if b then BitSet.set else BitSet.unset) d 8 |
method set_ring_indicator b = (if b then BitSet.set else BitSet.unset) d 8 |
||
end |
end |
||
;; |
|||
;;</ocaml> |
|||
</lang> |
|||
=={{header|Perl}}== |
=={{header|Perl}}== |
||
<lang perl> |
|||
⚫ | |||
use Bit::Vector::Minimal qw(); |
|||
⚫ | |||
my %rs232 = reverse ( |
|||
1 => 'PG Protective ground', |
|||
1 => 'PG Protective ground', |
|||
2 => 'TD Transmitted data', |
|||
3 => 'RD Received data', |
|||
4 => 'RTS Request to send', |
|||
5 => 'CTS Clear to send', |
|||
6 => 'DSR Data set ready', |
|||
7 => 'SG Signal ground', |
|||
8 => 'CD Carrier detect', |
|||
9 => '+ voltage (testing)', |
|||
10 => '- voltage (testing)', |
|||
12 => 'SCD Secondary CD', |
|||
13 => 'SCS Secondary CTS', |
|||
14 => 'STD Secondary TD', |
|||
15 => 'TC Transmit clock', |
|||
16 => 'SRD Secondary RD', |
|||
17 => 'RC Receiver clock', |
|||
19 => 'SRS Secondary RTS', |
|||
20 => 'DTR Data terminal ready', |
|||
21 => 'SQD Signal quality detector', |
|||
22 => 'RI Ring indicator', |
|||
23 => 'DRS Data rate select', |
|||
24 => 'XTC External clock', |
|||
); |
|||
⚫ | |||
$vec->set($rs232{'RD Received data'}, 1); |
|||
⚫ | |||
</perl> |
|||
=={{header|Python}}== |
=={{header|Python}}== |
||
Line 178: | Line 186: | ||
code below merely defines a dictionary with the pin names corresponding to entries in the dictionary. |
code below merely defines a dictionary with the pin names corresponding to entries in the dictionary. |
||
<lang python> |
|||
# Controlling Fields in a Structure in Python |
|||
rs232 = { |
rs232 = { |
||
Line 207: | Line 216: | ||
rs232["RD Received data"] = 1 |
rs232["RD Received data"] = 1 |
||
print rs232["TC Transmit clock"] |
print rs232["TC Transmit clock"] |
||
</lang> |