summaryrefslogtreecommitdiff
path: root/chapter-modules/src/main/smp/sys/aryi64.smp
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2026-10-24 15:25:58 -0700
committerCliff Click <cliffc@acm.org>2026-10-24 15:25:58 -0700
commit4ae6a06d94b228a5eb67c8473131a791e310c233 (patch)
tree839dfa84f1bfb982122ce62183b6ae4145a4c615 /chapter-modules/src/main/smp/sys/aryi64.smp
parentc4364363dbd969c9aa27aa7c43fbe6d40544501a (diff)
downloadSimple-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.smp82
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;
-};