summaryrefslogtreecommitdiff
path: root/ext/dl/lib/dl/types.rb
blob: c040f2cecc3ede3a3a53fa4ff0dda44e2841b0bb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# -*- ruby -*-

require 'dl'

module DL
  TYPES = [
    # FORMAT:
    # ["alias name", "type name",
    #    encoding_method, decoding_method,   for function prototypes
    #    encoding_method, decoding_method]   for structures (not implemented)

    # for Windows
    ["DWORD",  "unsigned long", nil, nil, nil, nil],
    ["PDWORD", "unsigned long *", nil, nil, nil, nil],
    ["WORD",   "unsigned int", nil, nil, nil, nil],
    ["PWORD",  "unsigned int *", nil, nil, nil, nil],
    ["BOOL",   "ibool", nil, nil, nil, nil],
    ["ATOM",   "int", nil, nil, nil, nil],
    ["BYTE",   "unsigned char", nil, nil, nil, nil],
    ["PBYTE",  "unsigned char *", nil, nil, nil, nil],
    ["UINT",   "unsigned int", nil, nil, nil, nil],
    ["ULONG",  "unsigned long", nil, nil, nil, nil],
    ["UCHAR",  "unsigned char", nil, nil, nil, nil],
    ["HANDLE", "unsigned long", nil, nil, nil, nil],
    ["PHANDLE","void*", nil, nil, nil, nil],
    ["PVOID",  "void*", nil, nil, nil, nil],
    ["LPCSTR", "char*", nil, nil, nil, nil],
    
    # Others
    ["uint",   "unsigned int", nil, nil, nil, nil],
    ["u_int",  "unsigned int", nil, nil, nil, nil],
    ["ulong",  "unsigned long", nil, nil, nil, nil],
    ["u_long", "unsigned long", nil, nil, nil, nil],
    
    # DL::Importable primitive types
    ["ibool",   "I",
      proc{|v| v ? 1 : 0},
      proc{|v| (v != 0) ? true : false},
      nil, nil],
    ["cbool",   "C",
      proc{|v| v ? 1 : 0},
      proc{|v| (v != 0) ? true : false},
      nil, nil],
    ["lbool",   "L",
      proc{|v| v ? 1 : 0},
      proc{|v| (v != 0) ? true : false},
      nil, nil],
    ["unsigned char", "I",
      proc{|v| [v].pack("C").unpack("c")[0]},
      proc{|v| [v].pack("c").unpack("C")[0]},
      nil, nil],
    ["unsigned int", "I",
      proc{|v| [v].pack("I").unpack("i")[0]},
      proc{|v| [v].pack("i").unpack("I")[0]},
      nil, nil],
    ["unsigned long", "L",
      proc{|v| [v].pack("L").unpack("l")[0]},
      proc{|v| [v].pack("l").unpack("L")[0]},
      nil, nil],
    ["unsigned char ref", "i",
      proc{|v| [v].pack("C").unpack("c")[0]},
      proc{|v| [v].pack("c").unpack("C")[0]},
      nil, nil],
    ["unsigned int ref", "i",
      proc{|v| [v].pack("I").unpack("i")[0]},
      proc{|v| [v].pack("i").unpack("I")[0]},
      nil, nil],
    ["unsigned long ref", "l",
      proc{|v| [v].pack("L").unpack("l")[0]},
      proc{|v| [v].pack("l").unpack("L")[0]},
      nil, nil],
    ["char ref",  "c", nil, nil, nil, nil],
    ["short ref", "h", nil, nil, nil, nil],
    ["int ref",   "i", nil, nil, nil, nil],
    ["long ref",  "l", nil, nil, nil, nil],
    ["float ref", "f", nil, nil, nil, nil],
    ["double ref","d", nil, nil, nil, nil],
    ["char",   "C", nil, nil, nil, nil],
    ["short",  "H", nil, nil, nil, nil],
    ["int",    "I", nil, nil, nil, nil],
    ["long",   "L", nil, nil, nil, nil],
    ["float",  "F", nil, nil, nil, nil],
    ["double", "D", nil, nil, nil, nil],
    [/.+\*/,   "P", nil, nil, nil, nil],
    [/.+\[\]/, "a", nil, nil, nil, nil],
    ["void",   "0", nil, nil, nil, nil],
  ]
end