Mercurial > repos > tabletprog
comparison modules/string.tp @ 150:7dfa4481deb0
Implement find:else on string objects
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 09 Aug 2013 10:05:20 -0700 |
parents | 4c96a393103e |
children | 3e9cb69e516d |
comparison
equal
deleted
inserted
replaced
149:7f442b3e4448 | 150:7dfa4481deb0 |
---|---|
92 intret num!: (intret num) xor bytes | 92 intret num!: (intret num) xor bytes |
93 } | 93 } |
94 intret | 94 intret |
95 } | 95 } |
96 | 96 |
97 llMessage: find:else withVars: { | |
98 intret <- obj_int32 ptr | |
99 oneedle <- object ptr | |
100 ifNotFound <- object ptr | |
101 sneedle <- string ptr | |
102 i <- uint32_t | |
103 notFound <- uint32_t | |
104 } andCode: :oneedle :ifNotFound { | |
105 sneedle <- mcall: string 1 oneedle | |
106 i <- 0 | |
107 notFound <- 1 | |
108 while: { notFound && i + (sneedle bytes) <= bytes} do: { | |
109 if: (memcmp: data + i (sneedle data) (sneedle bytes)) = 0 { | |
110 notFound <- 0 | |
111 } else: { | |
112 i <- i + 1 | |
113 } | |
114 } | |
115 if: notFound { | |
116 ccall: ifNotFound 0 | |
117 } else: { | |
118 intret <- make_object: (addr_of: obj_int32_meta) NULL 0 | |
119 intret num!: i | |
120 intret | |
121 } | |
122 } | |
123 | |
97 isInteger? <- { false } | 124 isInteger? <- { false } |
98 } | 125 } |