function append(dynamic_array, value):

   if dynamic_array.count == dynamic_array.capacity:
      new_capacity = dynamic_array.capacity * 2 # double, don't add one
      new_storage = allocate(new_capacity)
      copy dynamic_array.storage into new_storage
      dynamic_array.storage = new_storage
      dynamic_array.capacity = new_capacity

   dynamic_array.storage[dynamic_array.count] = value
   dynamic_array.count += 1
 # occasional O(n) copies, but appends are O(1) on average
