diff options
| author | Cliff Click <cliffc@acm.org> | 2026-10-24 15:25:58 -0700 |
|---|---|---|
| committer | Cliff Click <cliffc@acm.org> | 2026-10-24 15:25:58 -0700 |
| commit | 4ae6a06d94b228a5eb67c8473131a791e310c233 (patch) | |
| tree | 839dfa84f1bfb982122ce62183b6ae4145a4c615 /chapter-modules/src/main/smp/sys/aryi64.smp | |
| parent | c4364363dbd969c9aa27aa7c43fbe6d40544501a (diff) | |
| download | Simple-4ae6a06d94b228a5eb67c8473131a791e310c233.tar.gz Simple-4ae6a06d94b228a5eb67c8473131a791e310c233.zip | |
Rename modules chapter to 28a
Diffstat (limited to 'chapter-modules/src/main/smp/sys/aryi64.smp')
| -rw-r--r-- | chapter-modules/src/main/smp/sys/aryi64.smp | 82 |
1 files changed, 0 insertions, 82 deletions
diff --git a/chapter-modules/src/main/smp/sys/aryi64.smp b/chapter-modules/src/main/smp/sys/aryi64.smp deleted file mode 100644 index 98b72605..00000000 --- a/chapter-modules/src/main/smp/sys/aryi64.smp +++ /dev/null @@ -1,82 +0,0 @@ - -// Ary/Vector of i64s -struct aryi64 { - u32 !len = 0; - i64[] !buf; - - new aryi64 = { i64[] b -> - buf = b; - }; - - // Grow as needed - val _grow = { int len2 -> - if( len+len2 < buf# ) return self; - int newlen = buf# * 2; - while( len+len2 >= newlen ) newlen *= 2; - i64[] !buf2 = new i64[newlen]; - for( int i=0; i<buf#; i++ ) - buf2[i] = buf[i]; - buf = buf2; - self; - }; - - // Add a i64 to aryu8 - val add = { i64 c -> - _grow(1).buf[len++] = c; - self; - }; - - val get = { int index -> return buf[index]; }; - - // Write the bracketed array-list form to aryu8. - val str = { -> - // TODO: clunky default constructor syntax - var str = new aryu8().add('['); - for( int i=0; i<len; i++ ) - str.num(buf[i]).add(',').add(' '); - if( len ) str.undo(2); - return str.add(']'); - }; - - val swap = { int i, int j -> - i64 tmp = buf[i]; - buf[i] = buf[j]; - buf[j] = tmp; - self; - }; -}; - - - -// Parse a comma-separated list of numbers, wrapped with square brackets, -// with optional whitespace e.g. "[ -17, 0,99,12456789 ] ". -// parseAryI64 & aryi64.str are bijections modulo whitespace. -// Returns null if the parse failed, without giving a clue as to why. -val parseAryI64 = { u8[~] str -> - !scan !s = new scan(str); - if( !s.match('[') ) return null; - // Array of parsed results - var nums = new aryi64(new i64[1]); - - // Parse a list of numbers - if( s.match(']') ) // Handle the empty list - return nums; - - // Parse number commas "123, " until something else - while( s.x < s.buf# ) { - nums.add(s.number()); - if( s.bad ) return null; - if( !s.match(',') ) - break; - }; - // Close the list - if( !s.match(']') ) return null; - s.skip(); - return s.x == s.buf# ? nums : null; -}; - -val copy = { i64[] dst, int doff, i64[~] src, int soff, int len -> - for( int i=0; i<len; i++ ) - dst[i+doff] = src[i+soff]; - return dst; -}; |
