comparison modules/string.tp @ 158:38140b7dbe3d

Add parseHex32 and parseHex64 to string objects
author Mike Pavone <pavone@retrodev.com>
date Sat, 10 Aug 2013 15:20:38 -0700
parents 55e0dca7d3d7
children 5b830147c1cd
comparison
equal deleted inserted replaced
157:55e0dca7d3d7 158:38140b7dbe3d
72 intret <- (obj_int32 ptr) 72 intret <- (obj_int32 ptr)
73 } andCode: { 73 } andCode: {
74 intret <- make_object: (addr_of: obj_int32_meta) NULL 0 74 intret <- make_object: (addr_of: obj_int32_meta) NULL 0
75 intret num!: (atoi: data) 75 intret num!: (atoi: data)
76 intret 76 intret
77 }
78
79 parseHex32 <- {
80 num <- 0u32
81 cur <- 0
82 a <- uint32: ("a" byte: 0)
83 A <- uint32: ("A" byte: 0)
84 f <- uint32: ("f" byte: 0)
85 F <- uint32: ("F" byte: 0)
86 zero <- "0" byte: 0
87 nine <- "9" byte: 0
88 while: { cur < byte_length} do: {
89 b <- uint32: (byte: cur)
90 cur <- cur + 1
91 if: b >= zero && b <= nine {
92 num <- num * 16 + (b - zero)
93 } else: {
94 if: b >= a && b <= f {
95 num <- num * 16 + (b - a) + 10u32
96 } else: {
97 if: b >= A && b <= F {
98 num <- num * 16 + (b - A) + 10u32
99 } else: {
100 cur <- byte_length
101 }
102 }
103 }
104 }
105 num
106 }
107
108 parseHex64 <- {
109 num <- 0u64
110 cur <- 0
111 a <- uint64: ("a" byte: 0)
112 A <- uint64: ("A" byte: 0)
113 f <- uint64: ("f" byte: 0)
114 F <- uint64: ("F" byte: 0)
115 zero <- "0" byte: 0
116 nine <- "9" byte: 0
117 while: { cur < byte_length} do: {
118 b <- uint64: (byte: cur)
119 cur <- cur + 1
120 if: b >= zero && b <= nine {
121 num <- num * 16 + (b - zero)
122 } else: {
123 if: b >= a && b <= f {
124 num <- num * 16 + (b - a) + 10u64
125 } else: {
126 if: b >= A && b <= F {
127 num <- num * 16 + (b - A) + 10u64
128 } else: {
129 cur <- byte_length
130 }
131 }
132 }
133 }
134 num
77 } 135 }
78 136
79 llMessage: hash withVars: { 137 llMessage: hash withVars: {
80 intret <- (obj_int32 ptr) 138 intret <- (obj_int32 ptr)
81 i <- uint32_t 139 i <- uint32_t