about summary refs log tree commit diff stats
path: root/cpp/032array
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2015-04-24 22:49:29 -0700
committerKartik K. Agaram <vc@akkartik.com>2015-04-24 22:49:29 -0700
commit6d8ef6b12d37336a92c7a6b20b4b66f3ab424464 (patch)
tree49c4b2b75ebc85540861b2682e3d48fe958c5dc8 /cpp/032array
parent0b0cfb6f1f4579eef463ffcb41ba782ddbd56035 (diff)
downloadmu-6d8ef6b12d37336a92c7a6b20b4b66f3ab424464.tar.gz
1189 - add extensions to all layers
I'm sick of fighting vim's filetype detection. No modeline and files
highlight in random colors. I add a modeline and it stops highlighting
tangle comments. Even though it read my #$%# vimrc! Fuck this shite.
Diffstat (limited to 'cpp/032array')
-rw-r--r--cpp/032array179
1 files changed, 0 insertions, 179 deletions
diff --git a/cpp/032array b/cpp/032array
deleted file mode 100644
index 57298e73..00000000
--- a/cpp/032array
+++ /dev/null
@@ -1,179 +0,0 @@
-//: Arrays contain a variable number of elements of the same type.
-//:
-//: You can create arrays of containers, but containers can only contain
-//: elements of a fixed size, so you can't create containers containing arrays.
-//: Create containers containing addresses to arrays instead.
-
-:(scenario copy_array)
-# Arrays can be copied around with a single instruction just like integers,
-# no matter how large they are.
-recipe main [
-  1:integer <- copy 3:literal
-  2:integer <- copy 14:literal
-  3:integer <- copy 15:literal
-  4:integer <- copy 16:literal
-  5:array:integer <- copy 1:array:integer
-]
-+run: instruction main/4
-+run: ingredient 0 is 1
-+mem: location 1 is 3
-+mem: location 2 is 14
-+mem: location 3 is 15
-+mem: location 4 is 16
-+mem: storing 3 in location 5
-+mem: storing 14 in location 6
-+mem: storing 15 in location 7
-+mem: storing 16 in location 8
-
-:(scenario copy_array_indirect)
-recipe main [
-  1:integer <- copy 3:literal
-  2:integer <- copy 14:literal
-  3:integer <- copy 15:literal
-  4:integer <- copy 16:literal
-  5:address:array:integer <- copy 1:literal
-  6:array:integer <- copy 5:address:array:integer/deref
-]
-+run: instruction main/5
-+run: ingredient 0 is 5
-+mem: location 1 is 3
-+mem: location 2 is 14
-+mem: location 3 is 15
-+mem: location 4 is 16
-+mem: storing 3 in location 6
-+mem: storing 14 in location 7
-+mem: storing 15 in location 8
-+mem: storing 16 in location 9
-
-//: disable the size mismatch check since the destination array need not be initialized
-:(replace "if (size_of(x) != data.size())" following "void write_memory(reagent x, vector<int> data)")
-if (x.types[0] != Type_number["array"] && size_of(x) != data.size())
-:(after "size_t size_of(const reagent& r)")
-  static const int ARRAY = Type_number["array"];
-  if (r.types[0] == ARRAY) {
-    assert(r.types.size() > 1);
-    // skip the 'array' type to get at the element type
-    return 1 + Memory[r.value]*size_of(array_element(r.types));
-  }
-
-//:: To access elements of an array, use 'index'
-
-:(scenario index)
-recipe main [
-  1:integer <- copy 3:literal
-  2:integer <- copy 14:literal
-  3:integer <- copy 15:literal
-  4:integer <- copy 16:literal
-  5:integer <- index 1:array:integer, 0:literal
-]
-+run: instruction main/4
-+run: address to copy is 2
-+run: its type is 1
-+mem: location 2 is 14
-+run: product 0 is 14
-+mem: storing 14 in location 5
-
-:(scenario index_direct_offset)
-recipe main [
-  1:integer <- copy 3:literal
-  2:integer <- copy 14:literal
-  3:integer <- copy 15:literal
-  4:integer <- copy 16:literal
-  5:integer <- copy 0:literal
-  6:integer <- index 1:array:integer, 5:integer
-]
-+run: instruction main/5
-+run: address to copy is 2
-+run: its type is 1
-+mem: location 2 is 14
-+run: product 0 is 14
-+mem: storing 14 in location 6
-
-:(before "End Primitive Recipe Declarations")
-INDEX,
-:(before "End Primitive Recipe Numbers")
-Recipe_number["index"] = INDEX;
-:(before "End Primitive Recipe Implementations")
-case INDEX: {
-  static const int ARRAY = Type_number["array"];
-//?   if (Trace_stream) Trace_stream->dump_layer = "run"; //? 1
-  trace("run") << "ingredient 0 is " << current_instruction().ingredients[0].to_string();
-  reagent base = canonize(current_instruction().ingredients[0]);
-//?   trace("run") << "ingredient 0 after canonize: " << base.to_string(); //? 1
-  int base_address = base.value;
-  assert(base.types[0] == ARRAY);
-  trace("run") << "ingredient 1 is " << current_instruction().ingredients[1].to_string();
-  reagent offset = canonize(current_instruction().ingredients[1]);
-//?   trace("run") << "ingredient 1 after canonize: " << offset.to_string(); //? 1
-  vector<int> offset_val(read_memory(offset));
-  vector<type_number> element_type = array_element(base.types);
-//?   trace("run") << "offset: " << offset_val[0]; //? 1
-//?   trace("run") << "size of elements: " << size_of(element_type); //? 1
-  int src = base_address + 1 + offset_val[0]*size_of(element_type);
-  trace("run") << "address to copy is " << src;
-  trace("run") << "its type is " << element_type[0];
-  reagent tmp;
-  tmp.set_value(src);
-  copy(element_type.begin(), element_type.end(), inserter(tmp.types, tmp.types.begin()));
-//?   trace("run") << "AAA: " << tmp.to_string() << '\n'; //? 3
-  vector<int> result(read_memory(tmp));
-  trace("run") << "product 0 is " << result[0];
-  write_memory(current_instruction().products[0], result);
-//?   if (Trace_stream) Trace_stream->dump_layer = ""; //? 1
-  break;
-}
-
-:(code)
-vector<type_number> array_element(const vector<type_number>& types) {
-  return vector<type_number>(++types.begin(), types.end());
-}
-
-:(scenario index_address)
-recipe main [
-  1:integer <- copy 3:literal
-  2:integer <- copy 14:literal
-  3:integer <- copy 15:literal
-  4:integer <- copy 16:literal
-  5:integer <- index-address 1:array:integer, 0:literal
-]
-+run: instruction main/4
-+run: address to copy is 2
-+mem: storing 2 in location 5
-
-//:: To write to elements of containers, you need their address.
-
-:(scenario index_indirect)
-recipe main [
-  1:integer <- copy 3:literal
-  2:integer <- copy 14:literal
-  3:integer <- copy 15:literal
-  4:integer <- copy 16:literal
-  5:address:array:integer <- copy 1:literal
-  6:integer <- index 5:address:array:integer/deref, 1:literal
-]
-+run: instruction main/5
-+mem: storing 15 in location 6
-
-:(before "End Primitive Recipe Declarations")
-INDEX_ADDRESS,
-:(before "End Primitive Recipe Numbers")
-Recipe_number["index-address"] = INDEX_ADDRESS;
-:(before "End Primitive Recipe Implementations")
-case INDEX_ADDRESS: {
-  static const int ARRAY = Type_number["array"];
-  trace("run") << "ingredient 0 is " << current_instruction().ingredients[0].name;
-  reagent base = canonize(current_instruction().ingredients[0]);
-  int base_address = base.value;
-  assert(base.types[0] == ARRAY);
-  trace("run") << "ingredient 1 is " << current_instruction().ingredients[1].to_string();
-  reagent offset = canonize(current_instruction().ingredients[1]);
-  vector<int> offset_val(read_memory(offset));
-  vector<type_number> element_type = array_element(base.types);
-  int src = base_address + 1 + offset_val[0]*size_of(element_type);
-  trace("run") << "address to copy is " << src;
-  vector<int> result;
-  result.push_back(src);
-  trace("run") << "product 0 is " << result[0];
-  write_memory(current_instruction().products[0], result);
-  break;
-}