Skip to content

Instantly share code, notes, and snippets.

@dherman
Created December 12, 2012 05:04
Show Gist options
  • Save dherman/4265013 to your computer and use it in GitHub Desktop.
Save dherman/4265013 to your computer and use it in GitHub Desktop.
pointer type approach
var IPAddress = new ArrayType(uint8, 4);
var P_IPAddress = new PointerType(IPAddress);
var Packet = new StructType({ addr: IPAddress, ... });
var P_Packet = new PointerType(Packet);
var PacketArray = new ArrayType(Packet);
var lotsOfPackets = new PacketArray(LOTS);
for (let p of lotsOfPackets.cursor("addr")) {
...
}
+-------------+ +-----------------------+
| |---------->| |
| PointerType | | PointerType.prototype |
| |<----------| |
+-------------+ +-----------------------+
^
|
|
+-----------------------+ +-------------+
| |---------->| |
| T | | T.prototype |
| |<----------| |
+-----------------------+ +-------------+
^
|
|
+-------------+
| |
| p |
| |
+-------------+
b ::= int8 | uint8 | int16 | uint16 | int32 | uint32 | float32 | float64
t ::= b | s | *s
s ::= [t x k] | { x1: t1, ..., xn: tn }
@dherman
Copy link
Author

dherman commented Dec 12, 2012

The issue is just that it seems stranger for different array types to be non-interchangeable than for different struct types, right?

Right.

@dherman
Copy link
Author

dherman commented Dec 12, 2012

But more broadly, it also violates expectations if updating a pointer involves an O(n) check (where n is the size of the type, not the data structure, but still). So I really wanted to avoid structural type checks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment