docs: private long allocate_from_ql(int request_size)
      throws IOException
      {
          Block block1;
          int block_size;
          int list_index;
  
          small_requests++;
          list_index = calculate_list_index_for_alloc(request_size);
          if (ql_heads[list_index].length > 0 ) {
              // quick list is nonempty
              block1 = ql_heads[list_index].first_block;
              ql_heads[list_index].length--;
              if (ql_heads[list_index].length == 0) {
                  nonempty_lists--;
              }
              ql_heads[list_index].first_block = block1.next;
  
              allocated_blocks++;
              free_blocks--;
              ql_hits++;
              allocated_words += block1.size;
              free_words -= block1.size;
  
              // do the following as late as possible
              seek_and_count(block1.address);
              writeInt(- block1.size);
  
              return(block1.address + HDR_SIZE);
          } else {
              // allocate from tail
              block_size = calculate_block_size(list_index);
              return allocate_from_tail(block_size);
  
          }
      }