Add .gitignore file.
[ocaml-bitstring.git] / TODO
diff --git a/TODO b/TODO
index 9cc63b3..ff2a556 100644 (file)
--- a/TODO
+++ b/TODO
@@ -65,14 +65,14 @@ Major to-do items.
 
 (17) PARTLY DONE - Fix the META file.  Current one is very broken.
 
-(18) when() qualifier:
+(18) DONE - check() qualifier:
 
-     { field : 16 : when (field > 100) }
+     { field : 16 : check (field > 100) }
 
-     The when(expr) qualifier will abort the rest of the match if the
+     The check(expr) qualifier will abort the rest of the match if the
      expression is false.
 
-(19) bind() qualifier:
+(19) DONE - bind() qualifier:
 
      { field : 16 : bind (field * 3) }
        ^pattern           ^new value
@@ -86,7 +86,7 @@ Major to-do items.
      There is a question of whether bind() should run before or
      after when() [best is probably when() first, then bind()].
 
-(20) save_offset_to() qualifier:
+(20) DONE - save_offset_to() qualifier:
 
      { field : 16 : save_offset_to (offset), bind (field - offset) }
 
@@ -98,3 +98,39 @@ Major to-do items.
      save_offset_to(patt) binds the current match offset to
      the variable, for later use within bind(), when() or
      any later parts of the match.
+
+(21) derive() so you can add your own variable decls:
+
+     { field : 32 : derive (field_as_int, Int32.to_int field) }
+
+     This would add a let derivation, equivalent to:
+
+     let field_as_int = Int32.to_int field
+
+     allowing you to use both the original field and field_as_int
+     as variables.
+
+     Note you can do this clumsily using bind():
+
+     { field : 32 : bind (field, Int32.to_int field) }
+
+     which redefines 'field' as a pair of (old value, derived value).
+
+(22) Allow constant 0 to be used in constructors to mean a zero-length
+     bitstring of the right length, eg:
+
+     BITSTRING { 0 : 32*8 : bitstring }
+
+     which would be equivalent to:
+
+     BITSTRING { zeroes_bitstring (32*8) : 32*8 : bitstring }
+
+(23) Add predicate Bitstring.is_zero_bitstring : bitstring -> bool
+
+(24) Add a function to turn bitstrings into printable strings.
+
+(25) Folding over bitstrings.  A narrow usage for this is to generate
+     checksums and hashes, where usually you want to fold over every
+     8/16/32-bit word.  So a set of functions which just enabled this
+     would be useful.  (However you still need le/be/ne variations so
+     it involves at least 7 functions).